[*] Binary protection state of libsqlite3.so.0.8.6

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function popen tear down of libsqlite3.so.0.8.6

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xbe08 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000be08 ()                      | void fcn_0000be08 (int16_t arg1) {
                                                 |     int16_t var_0h_2;
                                                 |     int16_t var_4h_4;
                                                 |     int16_t var_ch_2;
                                                 |     r0 = arg1;
    0x0000be08 blmi 0xb1e6bc                     |     __asm ("blmi 0xb1e6bc");
    0x0000be0c push {r4, r5, r6, lr}             |     
    0x0000be0e sub sp, 0x10                      |     
    0x0000be10 add r2, pc                        |     r2 += pc;
    0x0000be12 mov r5, r0                        |     r5 = r0;
    0x0000be14 ldr r3, [r2, r3]                  |     r3 = *((r2 + r3));
    0x0000be16 ldr r3, [r3]                      |     r3 = *(r3);
    0x0000be18 str r3, [sp, 0xc]                 |     var_ch_2 = r3;
    0x0000be1a mov.w r3, 0                       |     r3 = 0;
    0x0000be1e ldrd r3, r6, [r0]                 |     __asm ("ldrd r3, r6, [r0]");
    0x0000be22 cmp r6, 0                         |     
                                                 |     if (r6 == 0) {
    0x0000be24 beq 0xbe8c                        |         goto label_1;
                                                 |     }
    0x0000be26 ldr r1, [r3, 4]                   |     r1 = *((r3 + 4));
    0x0000be28 cmp r6, r1                        |     
                                                 |     if (r6 >= r1) {
    0x0000be2a bge 0xbe84                        |         goto label_2;
                                                 |     }
    0x0000be2c ldr r3, [r3]                      |     r3 = *(r3);
    0x0000be2e mov r4, r6                        |     r4 = r6;
    0x0000be30 add r3, r6                        |     r3 += r6;
    0x0000be32 b 0xbe3a                          |     
                                                 |     while (r2 == 0) {
    0x0000be34 adds r4, 1                        |         r4++;
    0x0000be36 cmp r4, r1                        |         
                                                 |         if (r4 == r1) {
    0x0000be38 beq 0xbe84                        |             goto label_2;
                                                 |         }
    0x0000be3a mov r0, r3                        |         r0 = r3;
    0x0000be3c adds r3, 1                        |         r3++;
    0x0000be3e ldrb r2, [r0]                     |         r2 = *(r0);
    0x0000be40 cmp r2, 0                         |         
    0x0000be42 beq 0xbe34                        |         
                                                 |     }
    0x0000be44 ldr r3, [r5, 0x10]                |     r3 = *((r5 + 0x10));
    0x0000be46 subs r6, r4, r6                   |     r6 = r4 - r6;
    0x0000be48 adds r6, 1                        |     r6++;
    0x0000be4a mov r1, sp                        |     r1 = sp;
    0x0000be4c add r3, r6                        |     r3 += r6;
    0x0000be4e str r3, [r5, 0x10]                |     *((r5 + 0x10)) = r3;
    0x0000be50 bl 0xbaf0                         |     fcn_0000baf0 (r0, r1);
    0x0000be54 ldr r3, [r5, 0x18]                |     r3 = *((r5 + 0x18));
    0x0000be56 add r0, r4                        |     r0 += r4;
    0x0000be58 ldr r1, [sp]                      |     r1 = *(sp);
    0x0000be5a ldr r2, [r5, 0x1c]                |     r2 = *((r5 + 0x1c));
    0x0000be5c ldr r4, [sp, 4]                   |     r4 = var_4h_4;
    0x0000be5e str r0, [r5, 4]                   |     *((r5 + 4)) = r0;
    0x0000be60 adds r3, r3, r1                   |     r3 += r1;
    0x0000be62 ldr r0, [r5, 8]                   |     r0 = *((r5 + 8));
    0x0000be64 adc.w r2, r2, r4                  |     __asm ("adc.w r2, r2, r4");
    0x0000be68 strd r3, r2, [r5, 0x18]           |     __asm ("strd r3, r2, [r5, 0x18]");
                                                 |     do {
                                                 | label_0:
    0x0000be6c ldr r2, [pc, 0x50]                |         
    0x0000be6e ldr r3, [pc, 0x4c]                |         r3 = *(0xbebe);
    0x0000be70 add r2, pc                        |         r2 = 0x17d34;
    0x0000be72 ldr r3, [r2, r3]                  |         r3 = *(0x17d34);
    0x0000be74 ldr r2, [r3]                      |         r2 = *(0x17d34);
    0x0000be76 ldr r3, [sp, 0xc]                 |         r3 = var_ch_2;
    0x0000be78 eors r2, r3                       |         r2 ^= r3;
    0x0000be7a mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x0000be7e bne 0xbeb4                        |             goto label_3;
                                                 |         }
    0x0000be80 add sp, 0x10                      |         
    0x0000be82 pop {r4, r5, r6, pc}              |         
                                                 | label_2:
    0x0000be84 movs r3, 1                        |         r3 = 1;
    0x0000be86 mov r0, r3                        |         r0 = r3;
    0x0000be88 str r3, [r5, 8]                   |         *((r5 + 8)) = r3;
    0x0000be8a b 0xbe6c                          |         
                                                 |     } while (1);
                                                 | label_1:
    0x0000be8c ldr r6, [r3]                      |     r6 = *(r3);
    0x0000be8e movs r3, 1                        |     r3 = 1;
    0x0000be90 add.w r1, r0, 0x10                |     r1 += var_0h_2x10;
    0x0000be94 str r3, [r0, 4]                   |     *((r0 + 4)) = r3;
    0x0000be96 adds r0, r6, r3                   |     r0 = r6 + r3;
    0x0000be98 bl 0xbbf8                         |     r0 = fcn_0000bbf8 (r0, r1);
    0x0000be9c adds r4, r0, 1                    |     r4 = r0 + 1;
    0x0000be9e add.w r1, r5, 0x18                |     r1 = r5 + 0x18;
    0x0000bea2 adds r0, r6, r4                   |     r0 = r6 + r4;
    0x0000bea4 str r4, [r5, 4]                   |     *((r5 + 4)) = r4;
    0x0000bea6 bl 0xbaf0                         |     r0 = fcn_0000baf0 (r0, r1);
    0x0000beaa add r4, r0                        |     r4 += r0;
    0x0000beac ldr r0, [r5, 8]                   |     r0 = *((r5 + 8));
    0x0000beae str r4, [r5, 4]                   |     *((r5 + 4)) = r4;
    0x0000beb0 str r4, [r5, 0xc]                 |     *((r5 + 0xc)) = r4;
    0x0000beb2 b 0xbe6c                          |     goto label_0;
                                                 | label_3:
    0x0000beb4 blx 0x7e8c                        |     r0 = fcn_00007e8c ();
    0x0000beb8 subs r0, r0, 2                    |     r0 -= 2;
    0x0000beba movs r4, r1                       |     r4 = r1;
    0x0000bebc lsls r4, r1, 0xd                  |     r4 = r1 << 0xd;
    0x0000bebe movs r0, r0                       |     
    0x0000bec0 subs r0, r4, 0                    |     r0 = r4 - 0;
    0x0000bec2 movs r4, r1                       |     r4 = r1;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xe0e0 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000e0e0 ()                      | void fcn_0000e0e0 (int16_t arg1, int16_t arg2) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_0h_2;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x0000e0e0 invalid                           |     
    0x0000e0e4 ldrd r3, r0, [r0]                 |     __asm ("ldrd r3, r0, [r0]");
    0x0000e0e8 sub sp, 0xc                       |     
    0x0000e0ea mov r5, r1                        |     r5 = r1;
    0x0000e0ec ldr r2, [r4, 0x10]                |     r2 = *((r4 + 0x10));
                                                 |     if (r3 == 0) {
    0x0000e0ee cbnz r3, 0xe11a                   |         
                                                 |         if (r0 == 0) {
    0x0000e0f0 cbz r0, 0xe11a                    |             goto label_0;
                                                 |         }
    0x0000e0f2 ldr r3, [r4, 0xc]                 |         r3 = *((r4 + 0xc));
    0x0000e0f4 cmp r3, r2                        |         
                                                 |         if (r3 >= r2) {
    0x0000e0f6 bge 0xe11a                        |             goto label_0;
                                                 |         }
    0x0000e0f8 ldr r7, [r4, 0x1c]                |         r7 = *((r4 + 0x1c));
    0x0000e0fa adds r1, r0, r3                   |         r1 = r0 + r3;
    0x0000e0fc ldr r6, [r4, 0x18]                |         r6 = *((r4 + 0x18));
    0x0000e0fe subs r2, r2, r3                   |         r2 -= r3;
    0x0000e100 ldr r0, [r4, 0x20]                |         r0 = *((r4 + 0x20));
    0x0000e102 adds r6, r3, r6                   |         r6 = r3 + r6;
    0x0000e104 adc.w r3, r7, r3, asr 31          |         __asm ("adc.w r3, r7, r3, asr 31");
    0x0000e108 ldr r7, [r0]                      |         r7 = *(r0);
    0x0000e10a strd r6, r3, [sp]                 |         __asm ("strd r6, r3, [sp]");
    0x0000e10c str r0, [r0, 0x30]                |         *((r0 + 0x30)) = r0;
    0x0000e10e ldr r3, [r7, 0xc]                 |         r3 = *((r7 + 0xc));
    0x0000e110 blx r3                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000e112 ldr r2, [r4, 0x10]                |         r2 = *((r4 + 0x10));
    0x0000e114 mov r3, r0                        |         r3 = r0;
    0x0000e116 ldr r0, [r4, 4]                   |         r0 = *((r4 + 4));
    0x0000e118 str r3, [r4]                      |         *(r4) = r3;
                                                 |     }
                                                 | label_0:
    0x0000e11a ldr r3, [r4, 0x18]                |     r3 = *((r4 + 0x18));
    0x0000e11c ldr r1, [r4, 0x1c]                |     r1 = *((r4 + 0x1c));
    0x0000e11e adds r3, r3, r2                   |     r3 += r2;
    0x0000e120 str r3, [r5]                      |     *(r5) = r3;
    0x0000e122 adc.w r1, r1, r2, asr 31          |     __asm ("adc.w r1, r1, r2, asr 31");
    0x0000e126 str r1, [r5, 4]                   |     *((r5 + 4)) = r1;
    0x0000e128 blx 0x84f8                        |     fcn_000084f8 ();
    0x0000e12c ldr r5, [r4]                      |     r5 = *(r4);
    0x0000e12e movs r2, 0x28                     |     r2 = 0x28;
    0x0000e130 movs r1, 0                        |     r1 = 0;
    0x0000e132 mov r0, r4                        |     r0 = r4;
    0x0000e134 blx 0x8264                        |     fcn_00008264 ();
    0x0000e138 mov r0, r5                        |     r0 = r5;
    0x0000e13a add sp, 0xc                       |     
    0x0000e13c pop {r4, r5, r6, r7, pc}          |     
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x12c4c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00012c4c ()                                      | void fcn_00012c4c (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00012c4c push {r1, r2, r3, r4, r5, r8, sb, fp, lr}         |     
    0x00012c50 mvns r0, r6                                       |     r0 = ~r6;
    0x00012c52 sub sp, 0xc                                       |     
    0x00012c54 ldrd r8, sb, [sp, 0x28]                           |     __asm ("ldrd r8, sb, [arg_28h]");
    0x00012c58 mov r6, r0                                        |     r6 = r0;
    0x00012c5a add r3, pc                                        |     r3 += pc;
    0x00012c5c mov r4, r1                                        |     r4 = r1;
    0x00012c5e ldr.w r3, [r3, 0x100]                             |     r3 = *((r3 + 0x100));
    0x00012c62 mov r5, r2                                        |     r5 = r2;
                                                                 |     if (r3 != 0) {
    0x00012c64 cbz r3, 0x12c6e                                   |         
    0x00012c66 movs r0, 0xc9                                     |         r0 = 0xc9;
    0x00012c68 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t) (r0);
    0x00012c6a cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00012c6c bne 0x12d24                                       |             goto label_2;
                                                                 |         }
                                                                 |     }
    0x00012c6e ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
                                                                 |     if (r3 != 0) {
    0x00012c70 cbz r3, 0x12c84                                   |         
    0x00012c72 ldr r0, [r4, 0x18]                                |         r0 = *((r4 + 0x18));
    0x00012c74 ldr r2, [r0]                                      |         r2 = *(r0);
    0x00012c76 str r3, [sp]                                      |         *(sp) = r3;
    0x00012c78 movs r3, 0                                        |         r3 = 0;
    0x00012c7a ldr r1, [r2, 0x48]                                |         r1 = *((r2 + 0x48));
    0x00012c7c movs r2, 0                                        |         r2 = 0;
    0x00012c7e blx r1                                            |         uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00012c80 movs r3, 0                                        |         r3 = 0;
    0x00012c82 str r3, [r4, 0x2c]                                |         *((r4 + 0x2c)) = r3;
                                                                 |     }
    0x00012c84 ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x00012c86 ldrd r3, r2, [r5, 8]                              |     __asm ("ldrd r3, r2, [r5, 8]");
    0x00012c8a ldr r0, [r5]                                      |     r0 = *(r5);
    0x00012c8c ldr r1, [r1, 0x18]                                |     r1 = *((r1 + 0x18));
    0x00012c8e strd r8, sb, [r4]                                 |     __asm ("strd r8, sb, [r4]");
    0x00012c92 strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x00012c96 ldr.w r5, [r1, 0xa0]                              |     r5 = *((r1 + 0xa0));
    0x00012c9a str r0, [r4, 0x18]                                |     *((r4 + 0x18)) = r0;
    0x00012c9c cmp r5, r3                                        |     
    0x00012c9e asr.w r1, r5, 0x1f                                |     r1 = r5 >> 0x1f;
    0x00012ca2 sbcs r1, r2                                       |     __asm ("sbcs r1, r2");
                                                                 |     if (r5 < r3) {
    0x00012ca4 blt 0x12cca                                       |         goto label_3;
                                                                 |     }
    0x00012ca6 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00012ca8 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00012caa cmp r1, 2                                         |     
                                                                 |     if (r1 <= 2) {
    0x00012cac ble 0x12cca                                       |         goto label_3;
                                                                 |     }
    0x00012cae str r3, [sp]                                      |     *(sp) = r3;
    0x00012cb0 add.w r3, r4, 0x2c                                |     r3 = r4 + 0x2c;
    0x00012cb4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00012cb6 movs r3, 0                                        |     r3 = 0;
    0x00012cb8 ldr r1, [r2, 0x44]                                |     r1 = *((r2 + 0x44));
    0x00012cba movs r2, 0                                        |     r2 = 0;
    0x00012cbc blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00012cbe mov r5, r0                                        |     r5 = r0;
    0x00012cc0 cbz r0, 0x12cca                                   |     
                                                                 |     while (r3 != 0) {
                                                                 | label_0:
    0x00012cc2 mov r0, r5                                        |         r0 = r5;
    0x00012cc4 add sp, 0xc                                       |         
    0x00012cc6 pop.w {r4, r5, r6, r7, r8, sb, pc}                |         
                                                                 | label_3:
    0x00012cca ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x00012ccc movs r5, 0                                        |         r5 = 0;
    0x00012cce cmp r3, 0                                         |         
    0x00012cd0 bne 0x12cc2                                       |         
                                                                 |     }
    0x00012cd2 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x00012cd4 ldrd r0, r1, [r4]                                 |     __asm ("ldrd r0, r1, [r4]");
    0x00012cd8 ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x00012cda mov r2, r6                                        |     r2 = r6;
    0x00012cdc asr.w r8, r6, 0x1f                                |     r8 = r6 >> 0x1f;
    0x00012ce0 mov r3, r8                                        |     r3 = r8;
    0x00012ce2 bl 0xac13c                                        |     fcn_000ac13c (r0, r1, r2, r3);
    0x00012ce6 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00012ce8 mov r7, r2                                        |     r7 = r2;
    0x00012cea mov r5, r7                                        |     r5 = r7;
                                                                 |     if (r3 == 0) {
    0x00012cec cbz r3, 0x12d30                                   |         goto label_4;
                                                                 |     }
                                                                 | label_1:
    0x00012cee cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00012cf0 beq 0x12cc2                                       |         goto label_0;
                                                                 |     }
    0x00012cf2 ldrd r3, r5, [r4]                                 |     __asm ("ldrd r3, r5, [r4]");
    0x00012cf6 subs r2, r6, r7                                   |     r2 = r6 - r7;
    0x00012cf8 ldrd r0, r6, [r4, 8]                              |     __asm ("ldrd r0, r6, [r4, 8]");
    0x00012cfc adds.w ip, r2, r3                                 |     
    0x00012d00 adc.w r1, r5, r2, asr 31                          |     __asm ("adc.w r1, r5, r2, asr 31");
    0x00012d04 cmp r0, ip                                        |     
    0x00012d06 sbcs.w r1, r6, r1                                 |     __asm ("sbcs.w r1, r6, r1");
    0x00012d0a ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x00012d0c it lt                                             |     
                                                                 |     if (r0 >= ip) {
    0x00012d0e sublt r2, r0, r3                                  |         r2 = r0 - r3;
                                                                 |     }
    0x00012d10 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00012d12 add r1, r7                                        |     r1 += r7;
    0x00012d14 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00012d16 strd r3, r5, [sp, 0x28]                           |     __asm ("strd r3, r5, [sp, 0x28]");
    0x00012d1a ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00012d1c add sp, 0xc                                       |     
    0x00012d1e pop.w {r4, r5, r6, r7, r8, sb, lr}                |     
    0x00012d22 bx r3                                             |     return uint32_t (*r3)() ();
                                                                 | label_2:
    0x00012d24 mov.w r5, 0x10a                                   |     r5 = 0x10a;
    0x00012d28 mov r0, r5                                        |     r0 = r5;
    0x00012d2a add sp, 0xc                                       |     
    0x00012d2c pop.w {r4, r5, r6, r7, r8, sb, pc}                |     
                                                                 | label_4:
    0x00012d30 mov r1, r8                                        |     r1 = r8;
    0x00012d32 mov r0, r6                                        |     r0 = r6;
    0x00012d34 bl 0x12abc                                        |     fcn_00012abc (r0);
    0x00012d38 str r0, [r4, 0x24]                                |     *((r4 + 0x24)) = r0;
                                                                 |     if (r0 != 0) {
    0x00012d3a cbz r0, 0x12d40                                   |         
    0x00012d3c str r6, [r4, 0x28]                                |         *((r4 + 0x28)) = r6;
    0x00012d3e b 0x12cee                                         |         goto label_1;
                                                                 |     }
    0x00012d40 movs r5, 7                                        |     r5 = 7;
    0x00012d42 str r6, [r4, 0x28]                                |     *((r4 + 0x28)) = r6;
    0x00012d44 b 0x12cc2                                         |     goto label_0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x1f238 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0001f238 ()                                          | void fcn_0001f238 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int32_t var_0h;
                                                                     |     int32_t var_0h_2;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0001f238 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001f23c mov sb, r2                                            |     sb = r2;
    0x0001f23e ldr r2, [pc, 0x16c]                                   |     
    0x0001f240 sub sp, 0x14                                          |     
    0x0001f242 mov r5, r0                                            |     r5 = r0;
    0x0001f244 mov r6, r1                                            |     r6 = r1;
    0x0001f246 ldr r7, [r0, 0x28]                                    |     r7 = *((r0 + 0x28));
    0x0001f248 ldr r3, [pc, 0x164]                                   |     r3 = *(0x1f3b0);
    0x0001f24a add r2, pc                                            |     r2 = 0x3e5fc;
    0x0001f24c ldrd r4, sl, [r0]                                     |     __asm ("ldrd r4, sl, [r0]");
    0x0001f250 ldr r3, [r2, r3]                                      |     
    0x0001f252 asr.w fp, r7, 0x1f                                    |     
    0x0001f256 mov r0, r4                                            |     r0 = r4;
    0x0001f258 mov r1, sl                                            |     r1 = sl;
    0x0001f25a mov r2, r7                                            |     r2 = r7;
    0x0001f25c ldr r3, [r3]                                          |     r3 = *(0x3e5fc);
    0x0001f25e str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001f260 mov.w r3, 0                                           |     r3 = 0;
    0x0001f264 mov r3, fp                                            |     r3 = fp;
    0x0001f266 bl 0xac13c                                            |     fcn_000ac13c (r0, r1, r2, r3);
    0x0001f26a mov r8, r2                                            |     r8 = r2;
                                                                     |     if (r2 != 0) {
    0x0001f26c cbnz r2, 0x1f298                                      |         goto label_2;
                                                                     |     }
    0x0001f26e ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
    0x0001f270 ldr r2, [r5, 0xc]                                     |     r2 = *((r5 + 0xc));
    0x0001f272 ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0001f274 subs r3, r3, r4                                       |     r3 -= r4;
    0x0001f276 ldr r1, [r5, 0x24]                                    |     r1 = *((r5 + 0x24));
    0x0001f278 sbc.w r2, r2, sl                                      |     __asm ("sbc.w r2, r2, sl");
    0x0001f27c cmp r7, r3                                            |     
    0x0001f27e sbcs.w r2, fp, r2                                     |     __asm ("sbcs.w r2, fp, r2");
    0x0001f282 it ge                                                 |     
                                                                     |     if (r7 < r3) {
    0x0001f284 movge r7, r3                                          |         r7 = r3;
                                                                     |     }
    0x0001f286 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001f288 mov r2, r7                                            |     r2 = r7;
    0x0001f28a strd r4, sl, [sp]                                     |     __asm ("strd r4, sl, [sp]");
    0x0001f28e ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001f290 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001f292 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001f294 bne 0x1f350                                           |         void (*0x1f350)() ();
                                                                     |     }
    0x0001f296 ldr r7, [r5, 0x28]                                    |     r7 = *((r5 + 0x28));
                                                                     | label_2:
    0x0001f298 sub.w r7, r7, r8                                      |     r7 -= r8;
    0x0001f29c cmp r7, r6                                            |     
                                                                     |     if (r7 >= r6) {
    0x0001f29e bge 0x1f36a                                           |         goto label_3;
                                                                     |     }
    0x0001f2a0 ldr r4, [r5, 0x10]                                    |     r4 = *((r5 + 0x10));
    0x0001f2a2 ldr r0, [r5, 0x1c]                                    |     r0 = *((r5 + 0x1c));
    0x0001f2a4 cmp r6, r4                                            |     
                                                                     |     if (r6 <= r4) {
    0x0001f2a6 ble 0x1f2f4                                           |         goto label_4;
                                                                     |     }
    0x0001f2a8 asrs r3, r4, 0x1f                                     |     r3 = r4 >> 0x1f;
    0x0001f2aa adds r4, r4, r4                                       |     r4 += r4;
    0x0001f2ac adcs r3, r3                                           |     __asm ("adcs r3, r3");
    0x0001f2ae cmp r4, 0x80                                          |     
    0x0001f2b0 sbcs r2, r3, 0                                        |     __asm ("sbcs r2, r3, 0");
    0x0001f2b4 asr.w r2, r6, 0x1f                                    |     r2 = r6 >> 0x1f;
    0x0001f2b8 itt lt                                                |     
                                                                     |     if (r4 >= 0x80) {
    0x0001f2ba movlt r4, 0x80                                        |         r4 = 0x80;
                                                                     |     }
                                                                     |     if (r4 >= 0x80) {
    0x0001f2bc movlt r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0001f2be cmp r4, r6                                            |     
    0x0001f2c0 sbcs.w r1, r3, r2                                     |     __asm ("sbcs.w r1, r3, r2");
                                                                     |     if (r4 >= r6) {
    0x0001f2c4 bge 0x1f2d2                                           |         goto label_5;
                                                                     |     }
                                                                     |     do {
    0x0001f2c6 adds r4, r4, r4                                       |         r4 += r4;
    0x0001f2c8 adcs r3, r3                                           |         __asm ("adcs r3, r3");
    0x0001f2ca cmp r4, r6                                            |         
    0x0001f2cc sbcs.w r1, r3, r2                                     |         __asm ("sbcs.w r1, r3, r2");
    0x0001f2d0 blt 0x1f2c6                                           |         
                                                                     |     } while (r4 < r6);
                                                                     | label_5:
    0x0001f2d2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001f2d4 beq 0x1f39c                                           |         goto label_6;
                                                                     |     }
    0x0001f2d6 movw r1, 0xfeff                                       |     
    0x0001f2da movs r2, 0                                            |     r2 = 0;
    0x0001f2dc movt r1, 0x7fff                                       |     r1 = 0x7ffffeff;
    0x0001f2e0 cmp r1, r4                                            |     
    0x0001f2e2 sbcs r2, r3                                           |     __asm ("sbcs r2, r3");
                                                                     |     if (r1 < r4) {
    0x0001f2e4 blt 0x1f398                                           |         goto label_7;
                                                                     |     }
    0x0001f2e6 mov r2, r4                                            |     r2 = r4;
    0x0001f2e8 bl 0x100c4                                            |     r0 = fcn_000100c4 (r0, r1);
                                                                     | label_1:
    0x0001f2ec cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001f2ee beq 0x1f398                                           |         goto label_7;
                                                                     |     }
    0x0001f2f0 str r4, [r5, 0x10]                                    |     *((r5 + 0x10)) = r4;
    0x0001f2f2 str r0, [r5, 0x1c]                                    |     *((r5 + 0x1c)) = r0;
                                                                     | label_4:
    0x0001f2f4 ldr r1, [r5, 0x24]                                    |     r1 = *((r5 + 0x24));
    0x0001f2f6 mov r2, r7                                            |     r2 = r7;
    0x0001f2f8 add r1, r8                                            |     r1 += r8;
    0x0001f2fa sub.w r8, r6, r7                                      |     r8 = r6 - r7;
    0x0001f2fe blx 0x7dcc                                            |     fcn_00007dcc ();
    0x0001f302 ldr r3, [r5]                                          |     r3 = *(r5);
    0x0001f304 adds r3, r3, r7                                       |     r3 += r7;
    0x0001f306 str r3, [r5]                                          |     *(r5) = r3;
    0x0001f308 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0001f30a adc.w r3, r3, r7, asr 31                              |     __asm ("adc.w r3, r3, r7, asr 31");
    0x0001f30e add r7, sp, 8                                         |     r7 += var_8h;
    0x0001f310 str r3, [r5, 4]                                       |     *((r5 + 4)) = r3;
                                                                     |     do {
    0x0001f312 ldrd r4, r1, [r5, 0x28]                               |         __asm ("ldrd r4, r1, [r5, 0x28]");
    0x0001f316 cmp r4, r8                                            |         
    0x0001f318 it ge                                                 |         
                                                                     |         if (r4 < r8) {
    0x0001f31a movge r4, r8                                          |             r4 = r8;
                                                                     |         }
    0x0001f31c cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x0001f31e beq 0x1f386                                           |             goto label_8;
                                                                     |         }
    0x0001f320 ldr r3, [r5]                                          |         r3 = *(r5);
    0x0001f322 add r1, r3                                            |         r1 += r3;
    0x0001f324 adds r3, r4, r3                                       |         r3 = r4 + r3;
    0x0001f326 str r3, [r5]                                          |         *(r5) = r3;
    0x0001f328 ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0001f32a adc.w r3, r3, r4, asr 31                              |         __asm ("adc.w r3, r3, r4, asr 31");
    0x0001f32e str r3, [r5, 4]                                       |         *((r5 + 4)) = r3;
                                                                     | label_0:
    0x0001f330 ldr r3, [r5, 0x1c]                                    |         r3 = *((r5 + 0x1c));
    0x0001f332 sub.w r0, r6, r8                                      |         r0 = r6 - r8;
    0x0001f336 mov r2, r4                                            |         r2 = r4;
    0x0001f338 sub.w r8, r8, r4                                      |         r8 -= r4;
    0x0001f33c add r0, r3                                            |         r0 += r3;
    0x0001f33e blx 0x7dcc                                            |         fcn_00007dcc ();
    0x0001f342 cmp.w r8, 0                                           |         
    0x0001f346 bgt 0x1f312                                           |         
                                                                     |     } while (r8 > 0);
    0x0001f348 ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0001f34a movs r0, 0                                            |     r0 = 0;
    0x0001f34c str.w r3, [sb]                                        |     __asm ("str.w r3, [sb]");
                                                                     | label_3:
    0x0001f36a ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
                                                                     | label_8:
    0x0001f386 mov r2, r7                                            |     r2 = r7;
    0x0001f388 mov r1, r4                                            |     r1 = r4;
    0x0001f38a mov r0, r5                                            |     r0 = r5;
    0x0001f38c bl 0x1f238                                            |     r0 = fcn_0001f238 (r0, r1, r2);
    0x0001f390 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001f392 bne 0x1f350                                           |         void (*0x1f350)() ();
                                                                     |     }
    0x0001f394 ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x0001f396 b 0x1f330                                             |     goto label_0;
                                                                     | label_7:
    0x0001f398 movs r0, 7                                            |     r0 = 7;
    0x0001f39a b 0x1f350                                             |     void (*0x1f350)() ();
                                                                     | label_6:
    0x0001f39c mov r1, r3                                            |     r1 = r3;
    0x0001f39e mov r0, r4                                            |     r0 = r4;
    0x0001f3a0 bl 0x12abc                                            |     fcn_00012abc (r0);
    0x0001f3a4 b 0x1f2ec                                             |     goto label_1;
                                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x30e2c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00030e2c ()                          | void fcn_00030e2c (int16_t arg1, int16_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x00030e2c push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00030e30 mov r4, r1                            |     r4 = r1;
    0x00030e32 ldr r1, [r1, 0xc]                     |     r1 = *((r1 + 0xc));
    0x00030e34 mov r5, r0                            |     r5 = r0;
                                                     |     if (r1 != 0) {
    0x00030e36 cbz r1, 0x30e3c                       |         
    0x00030e38 bl 0x301c4                            |         fcn_000301c4 (r0, r1);
                                                     |     }
    0x00030e3c ldr r7, [r4, 0x1c]                    |     r7 = *((r4 + 0x1c));
    0x00030e3e cmp r7, 0                             |     
                                                     |     if (r7 == 0) {
    0x00030e40 beq 0x30eea                           |         goto label_2;
                                                     |     }
                                                     | label_0:
    0x00030e42 ldr r1, [r7, 8]                       |     r1 = *((r7 + 8));
                                                     |     if (r1 != 0) {
    0x00030e44 cbz r1, 0x30e50                       |         
    0x00030e46 ldr r3, [r5, 8]                       |         r3 = *((r5 + 8));
                                                     |         if (r3 == 0) {
    0x00030e48 cbz r3, 0x30e50                       |             goto label_3;
                                                     |         }
    0x00030e4a mov r0, r5                            |         r0 = r5;
    0x00030e4c bl 0x30ca4                            |         fcn_00030ca4 (r0, r1, r2, r3, r4);
                                                     |     }
                                                     | label_3:
    0x00030e50 ldr r1, [r7, 0x14]                    |     r1 = *((r7 + 0x14));
                                                     |     if (r1 != 0) {
    0x00030e52 cbz r1, 0x30e5a                       |         
    0x00030e54 mov r0, r5                            |         r0 = r5;
    0x00030e56 bl 0x301c4                            |         fcn_000301c4 (r0, r1);
                                                     |     }
    0x00030e5a ldr r4, [r7, 0x18]                    |     r4 = *((r7 + 0x18));
                                                     |     if (r4 == 0) {
    0x00030e5c cbz r4, 0x30e7a                       |         goto label_4;
                                                     |     }
    0x00030e5e ldr r6, [r4]                          |     r6 = *(r4);
    0x00030e60 cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x00030e62 ble 0x30e7a                           |         goto label_4;
                                                     |     }
    0x00030e64 adds r4, 0x18                         |     r4 += 0x18;
                                                     |     do {
    0x00030e66 ldr r1, [r4, -0x10]                   |         r1 = *((r4 - 0x10));
    0x00030e6a mov r0, r5                            |         r0 = r5;
    0x00030e6c adds r4, 0x10                         |         r4 += 0x10;
                                                     |         if (r1 != 0) {
    0x00030e6e cbz r1, 0x30e76                       |             
    0x00030e70 bl 0x301c4                            |             r0 = fcn_000301c4 (r0, r1);
                                                     |             if (r0 != 0) {
    0x00030e74 cbnz r0, 0x30e7a                      |                 goto label_4;
                                                     |             }
                                                     |         }
    0x00030e76 subs r6, 1                            |         r6--;
    0x00030e78 bne 0x30e66                           |         
                                                     |     } while (r6 != 1);
                                                     | label_4:
    0x00030e7a ldr.w r8, [r7, 0x20]                  |     r8 = *((r7 + 0x20));
    0x00030e7e cmp.w r8, 0                           |     
                                                     |     if (r8 == 0) {
    0x00030e82 beq 0x30ee0                           |         goto label_5;
                                                     |     }
    0x00030e84 ldr.w r4, [r8]                        |     r4 = *(r8);
                                                     |     if (r4 == 0) {
    0x00030e88 cbz r4, 0x30ea6                       |         goto label_6;
                                                     |     }
    0x00030e8a ldr r6, [r4]                          |     r6 = *(r4);
    0x00030e8c cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x00030e8e ble 0x30ea6                           |         goto label_6;
                                                     |     }
    0x00030e90 adds r4, 0x18                         |     r4 += 0x18;
                                                     |     do {
    0x00030e92 ldr r1, [r4, -0x10]                   |         r1 = *((r4 - 0x10));
    0x00030e96 mov r0, r5                            |         r0 = r5;
    0x00030e98 adds r4, 0x10                         |         r4 += 0x10;
                                                     |         if (r1 != 0) {
    0x00030e9a cbz r1, 0x30ea2                       |             
    0x00030e9c bl 0x301c4                            |             r0 = fcn_000301c4 (r0, r1);
                                                     |             if (r0 != 0) {
    0x00030ea0 cbnz r0, 0x30ea6                      |                 goto label_6;
                                                     |             }
                                                     |         }
    0x00030ea2 subs r6, 1                            |         r6--;
    0x00030ea4 bne 0x30e92                           |         
                                                     |     } while (r6 != 1);
                                                     | label_6:
    0x00030ea6 ldr.w r4, [r8, 8]                     |     r4 = *((r8 + 8));
                                                     |     if (r4 == 0) {
    0x00030eaa cbz r4, 0x30ec8                       |         goto label_7;
                                                     |     }
    0x00030eac ldr r6, [r4]                          |     r6 = *(r4);
    0x00030eae cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x00030eb0 ble 0x30ec8                           |         goto label_7;
                                                     |     }
    0x00030eb2 adds r4, 0x18                         |     r4 += 0x18;
                                                     |     do {
    0x00030eb4 ldr r1, [r4, -0x10]                   |         r1 = *((r4 - 0x10));
    0x00030eb8 mov r0, r5                            |         r0 = r5;
    0x00030eba adds r4, 0x10                         |         r4 += 0x10;
                                                     |         if (r1 != 0) {
    0x00030ebc cbz r1, 0x30ec4                       |             
    0x00030ebe bl 0x301c4                            |             r0 = fcn_000301c4 (r0, r1);
                                                     |             if (r0 != 0) {
    0x00030ec2 cbnz r0, 0x30ec8                      |                 goto label_7;
                                                     |             }
                                                     |         }
    0x00030ec4 subs r6, 1                            |         r6--;
    0x00030ec6 bne 0x30eb4                           |         
                                                     |     } while (r6 != 1);
                                                     | label_7:
    0x00030ec8 ldr.w r1, [r8, 0xc]                   |     r1 = *((r8 + 0xc));
                                                     |     if (r1 != 0) {
    0x00030ecc cbz r1, 0x30ed4                       |         
    0x00030ece mov r0, r5                            |         r0 = r5;
    0x00030ed0 bl 0x301c4                            |         fcn_000301c4 (r0, r1);
                                                     |     }
    0x00030ed4 ldr.w r1, [r8, 4]                     |     r1 = *((r8 + 4));
                                                     |     if (r1 != 0) {
    0x00030ed8 cbz r1, 0x30ee0                       |         
    0x00030eda mov r0, r5                            |         r0 = r5;
    0x00030edc bl 0x301c4                            |         fcn_000301c4 (r0, r1);
                                                     |     }
                                                     | label_5:
    0x00030ee0 ldr r2, [r7, 0x10]                    |     r2 = *((r7 + 0x10));
                                                     |     if (r2 != 0) {
    0x00030ee2 cbnz r2, 0x30eee                      |         goto label_8;
                                                     |     }
                                                     | label_1:
    0x00030ee4 ldr r7, [r7, 0x28]                    |     r7 = *((r7 + 0x28));
    0x00030ee6 cmp r7, 0                             |     
                                                     |     if (r7 != 0) {
    0x00030ee8 bne 0x30e42                           |         goto label_0;
                                                     |     }
                                                     | label_2:
    0x00030eea pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_8:
    0x00030eee ldr r3, [r2]                          |     r3 = *(r2);
    0x00030ef0 cmp r3, 0                             |     
                                                     |     if (r3 <= 0) {
    0x00030ef2 ble 0x30ee4                           |         goto label_1;
                                                     |     }
    0x00030ef4 movs r4, 0                            |     r4 = 0;
                                                     |     do {
    0x00030ef6 add.w r3, r4, r4, lsl 3               |         r3 = r4 + (r4 << 3);
    0x00030efa mov r0, r5                            |         r0 = r5;
    0x00030efc adds r4, 1                            |         r4++;
    0x00030efe add.w r3, r2, r3, lsl 3               |         r3 = r2 + (r3 << 3);
    0x00030f02 ldr r1, [r3, 0x1c]                    |         r1 = *((r3 + 0x1c));
                                                     |         if (r1 != 0) {
    0x00030f04 cbz r1, 0x30f10                       |             
    0x00030f06 ldr r3, [r5, 8]                       |             r3 = *((r5 + 8));
                                                     |             if (r3 == 0) {
    0x00030f08 cbz r3, 0x30f10                       |                 goto label_9;
                                                     |             }
    0x00030f0a bl 0x30ca4                            |             fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x00030f0e ldr r2, [r7, 0x10]                    |             r2 = *((r7 + 0x10));
                                                     |         }
                                                     | label_9:
    0x00030f10 ldr r3, [r2]                          |         r3 = *(r2);
    0x00030f12 cmp r3, r4                            |         
    0x00030f14 bgt 0x30ef6                           |         
                                                     |     } while (r3 > r4);
    0x00030f16 b 0x30ee4                             |     goto label_1;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x34634 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00034634 ()                                      | void fcn_00034634 (int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg_5ch, int16_t arg1, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00034634 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00034638 sub sp, 0x24                                      |     
    0x0003463a ldr r6, [sp, 0x54]                                |     r6 = *(arg_54h);
    0x0003463c mov r7, r0                                        |     r7 = r0;
    0x0003463e movs r1, 0                                        |     r1 = 0;
    0x00034640 ldr r5, [r7, 0xc]                                 |     r5 = *((r7 + 0xc));
    0x00034642 ldr.w fp, [r7, 4]                                 |     fp = *((r7 + 4));
    0x00034646 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00034648 ldr r7, [r6, 0x10]                                |     r7 = *((r6 + 0x10));
    0x0003464a ldr r0, [r0]                                      |     r0 = *(r0);
    0x0003464c ldr r4, [r6]                                      |     r4 = *(r6);
    0x0003464e str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x00034650 ldr r7, [r0]                                      |     r7 = *(r0);
    0x00034652 ldr r0, [r0, 4]                                   |     r0 = *((r0 + 4));
    0x00034654 cmp r4, r1                                        |     
    0x00034656 ldrd r8, sb, [sp, 0x48]                           |     __asm ("ldrd r8, sb, [arg_48h]");
    0x0003465a str r7, [sp, 8]                                   |     var_8h = r7;
    0x0003465c str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0003465e ldrb r0, [r5, 0x10]                               |     r0 = *((r5 + 0x10));
    0x00034660 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00034662 ldr r0, [sp, 0x5c]                                |     r0 = *(arg_5ch);
    0x00034664 str r1, [r0]                                      |     *(r0) = r1;
    0x00034666 strd r2, r3, [r5]                                 |     __asm ("strd r2, r3, [r5]");
    0x0003466a ldrh.w r3, [sp, 0x50]                             |     r3 = *(arg_50h);
    0x0003466e ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00034670 str r3, [sp]                                      |     *(sp) = r3;
    0x00034672 ldrh.w r3, [sp, 0x58]                             |     r3 = *(arg_58h);
    0x00034676 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r4 <= r1) {
    0x00034678 ble 0x346c0                                       |         goto label_9;
                                                                 |     }
    0x0003467a ldr.w r0, [fp, 0x14]                              |     r0 = *(arg_5ch);
    0x0003467e mov sl, r1                                        |     sl = r1;
    0x00034680 str.w fp, [sp, 0x14]                              |     __asm ("str.w fp, [var_14h]");
    0x00034684 mov fp, r0                                        |     
                                                                 |     do {
    0x00034686 ldr r3, [r2, 8]                                   |         r3 = *((r2 + 8));
    0x00034688 strb.w sl, [r2, 5]                                |         *((r2 + 5)) = sl;
    0x0003468c add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00034690 add.w r3, fp, r3, lsl 4                           |         r3 = fp + (r3 << 4);
    0x00034694 ldrd r0, r7, [r3, 0x20]                           |         __asm ("ldrd r0, r7, [r3, 0x20]");
    0x00034698 and.w lr, r0, r8                                  |         lr = r0 & r8;
    0x0003469c and.w ip, r7, sb                                  |         
    0x000346a0 cmp r7, ip                                        |         
    0x000346a2 it eq                                             |         
                                                                 |         if (r7 == ip) {
    0x000346a4 cmpeq r0, lr                                      |             __asm ("cmpeq r0, lr");
                                                                 |         }
                                                                 |         if (r7 == ip) {
    0x000346a6 bne 0x346b4                                       |             
    0x000346a8 ldrh r3, [r3, 0xc]                                |             r3 = *((r3 + 0xc));
    0x000346aa ldr r0, [sp]                                      |             r0 = *(sp);
    0x000346ac tst r0, r3                                        |             
    0x000346ae itt eq                                            |             
                                                                 |             if ((r0 & r3) != 0) {
    0x000346b0 moveq r3, 1                                       |                 r3 = 1;
                                                                 |             }
                                                                 |             if ((r0 & r3) == 0) {
    0x000346b2 strbeq r3, [r2, 5]                                |                 *((r2 + 5)) = r3;
                                                                 |                 goto label_10;
                                                                 |             }
                                                                 |         }
                                                                 | label_10:
    0x000346b4 adds r1, 1                                        |         r1++;
    0x000346b6 adds r2, 0xc                                      |         r2 += 0xc;
    0x000346b8 cmp r4, r1                                        |         
    0x000346ba bne 0x34686                                       |         
                                                                 |     } while (r4 != r1);
    0x000346bc ldr.w fp, [sp, 0x14]                              |     fp = var_14h;
                                                                 | label_9:
    0x000346c0 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000346c2 lsls r2, r4, 3                                    |     r2 = r4 << 3;
    0x000346c4 movs r1, 0                                        |     r1 = 0;
    0x000346c6 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x000346c8 addw sb, pc, 0x3ec                                |     __asm ("addw sb, pc, aav.0x000000ff");
    0x000346cc ldrd r8, sb, [sb]                                 |     __asm ("ldrd r8, sb, [sb]");
    0x000346d0 lsls r3, r3, 3                                    |     r3 <<= 3;
    0x000346d2 mov r7, r3                                        |     r7 = r3;
    0x000346d4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000346d6 blx 0x8264                                        |     fcn_00008264 ();
    0x000346da ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000346dc ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x000346de adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x000346e0 add.w r2, r3, r2, lsl 3                           |     r2 = r3 + (r2 << 3);
    0x000346e4 movs r3, 0                                        |     r3 = 0;
    0x000346e6 strd r3, r3, [r6, 0x14]                           |     __asm ("strd r3, r3, [r6, 0x14]");
    0x000346ea str r3, [r6, 0x20]                                |     *((r6 + 0x20)) = r3;
    0x000346ec str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
    0x000346ee ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x000346f0 ldrd r0, r1, [r2, 0x40]                           |     __asm ("ldrd r0, r1, [r2, 0x40]");
    0x000346f4 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000346f6 ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x000346f8 strd r0, r1, [r6, 0x40]                           |     __asm ("strd r0, r1, [r6, 0x40]");
    0x000346fc ldr r1, [r2]                                      |     r1 = *(r2);
    0x000346fe strd r8, sb, [r6, 0x28]                           |     __asm ("strd r8, sb, [r6, 0x28]");
    0x00034702 mov.w r8, 0x19                                    |     r8 = 0x19;
    0x00034706 mov.w sb, 0                                       |     sb = 0;
    0x0003470a strd r8, sb, [r6, 0x30]                           |     __asm ("strd r8, sb, [r6, 0x30]");
                                                                 |     if (r3 != 0) {
    0x0003470e cbnz r3, 0x3471a                                  |         goto label_11;
                                                                 |     }
    0x00034710 b 0x34aa4                                         |     goto label_12;
                                                                 |     do {
    0x00034712 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00034714 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00034716 beq.w 0x34aa4                                     |             goto label_12;
                                                                 |         }
                                                                 | label_11:
    0x0003471a ldr r2, [r3]                                      |         r2 = *(r3);
    0x0003471c cmp r1, r2                                        |         
    0x0003471e bne 0x34712                                       |         
                                                                 |     } while (r1 != r2);
    0x00034720 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x00034724 mov r1, r6                                        |     r1 = r6;
    0x00034726 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0003472a mov r0, sb                                        |     r0 = sb;
    0x0003472c ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0003472e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00034730 cmp r0, 0                                         |     
    0x00034732 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00034734 cmpne r0, 0x13                                    |         __asm ("cmpne r0, 0x13");
                                                                 |     }
    0x00034736 mov r7, r0                                        |     r7 = r0;
    0x00034738 ite ne                                            |     
                                                                 |     if (r0 == 0) {
    0x0003473a movne r8, 1                                       |         r8 = 1;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0003473e mov.w r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00034740 lsrs r0, r0, 0x20                                 |     r0 >>= 0x20;
                                                                 |     if (r0 != r0) {
    0x00034742 beq 0x34774                                       |         
    0x00034744 cmp r0, 7                                         |         
                                                                 |         if (r0 == 7) {
    0x00034746 beq.w 0x348f6                                     |             goto label_13;
                                                                 |         }
    0x0003474a ldr.w r2, [sb, 8]                                 |         r2 = *((sb + 8));
    0x0003474e cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00034750 beq.w 0x348c2                                     |             goto label_14;
                                                                 |         }
    0x00034754 ldr r1, [pc, 0x368]                               |         
    0x00034756 ldr r0, [sp, 8]                                   |         r0 = var_8h;
    0x00034758 add r1, pc                                        |         r1 = 0x6921c;
    0x0003475a bl 0x25778                                        |         fcn_00025778 (r0);
                                                                 | label_2:
    0x0003475e ldr.w r0, [sb, 8]                                 |         r0 = *((sb + 8));
    0x00034762 blx 0x84f8                                        |         fcn_000084f8 ();
    0x00034766 movs r3, 0                                        |         r3 = 0;
    0x00034768 str.w r3, [sb, 8]                                 |         __asm ("str.w r3, [sb, 8]");
                                                                 | label_3:
    0x0003476c mov r0, r7                                        |         r0 = r7;
    0x0003476e add sp, 0x24                                      |         
    0x00034770 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00034774 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x00034778 blx 0x84f8                                        |     fcn_000084f8 ();
    0x0003477c str.w r8, [sb, 8]                                 |     __asm ("str.w r8, [sb, 8]");
    0x00034780 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00034782 bne 0x34884                                       |         goto label_15;
                                                                 |     }
    0x00034784 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x00034786 ble.w 0x34900                                     |         goto label_16;
                                                                 |     }
    0x0003478a ldr.w r8, [r5, 0x30]                              |     r8 = *((r5 + 0x30));
    0x0003478e lsls r2, r4, 2                                    |     r2 = r4 << 2;
    0x00034790 mov r1, r7                                        |     r1 = r7;
    0x00034792 mov.w sl, -1                                      |     sl = -1;
    0x00034796 mov r0, r8                                        |     r0 = r8;
    0x00034798 blx 0x8264                                        |     fcn_00008264 ();
    0x0003479c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003479e mov ip, r7                                        |     
    0x000347a0 ldr.w lr, [r6, 4]                                 |     
    0x000347a4 strh r7, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r7;
    0x000347a6 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x000347a8 str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x000347aa str r2, [sp]                                      |     *(sp) = r2;
    0x000347ac mov r7, r6                                        |     r7 = r6;
    0x000347ae mov r6, r3                                        |     r6 = r3;
    0x000347b0 b 0x347d8                                         |     goto label_17;
                                                                 | label_0:
    0x000347b2 ldrh.w r3, [sb, 0xc]                              |     r3 = *((sb + 0xc));
    0x000347b6 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 >= r3) {
    0x000347b8 bpl 0x347cc                                       |         goto label_18;
                                                                 |     }
    0x000347ba movs r3, 0                                        |     r3 = 0;
    0x000347bc movs r2, 1                                        |     r2 = 1;
    0x000347be str r3, [r7, 0x20]                                |     *((r7 + 0x20)) = r3;
    0x000347c0 ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x000347c2 bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x000347c6 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x000347c8 ldr r3, [sp, 0x5c]                                |     r3 = *(arg_5ch);
    0x000347ca str r2, [r3]                                      |     *(r3) = r2;
                                                                 |     do {
                                                                 | label_18:
    0x000347cc add.w ip, ip, 1                                   |         
    0x000347d0 add.w lr, lr, 0xc                                 |         lr += 0xc;
    0x000347d4 cmp r4, ip                                        |         
                                                                 |         if (r4 == ip) {
    0x000347d6 beq 0x34892                                       |             goto label_19;
                                                                 |         }
                                                                 | label_17:
    0x000347d8 ldr.w r3, [r6, ip, lsl 3]                         |         offset_0 = ip << 3;
                                                                 |         r3 = *((r6 + offset_0));
    0x000347dc subs r3, 1                                        |         r3--;
    0x000347de bmi 0x347cc                                       |         
                                                                 |     } while (r3 < 1);
    0x000347e0 ldr.w r1, [lr, 8]                                 |     r1 = *((lr + 8));
    0x000347e4 lsrs r2, r1, 0x1f                                 |     r2 = r1 >> 0x1f;
    0x000347e6 cmp r4, r3                                        |     
    0x000347e8 it le                                             |     
                                                                 |     if (r4 > r3) {
    0x000347ea orrle r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
    0x000347ee cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000347f0 bne 0x34860                                       |         goto label_20;
                                                                 |     }
    0x000347f2 ldr.w r2, [fp, 0xc]                               |     r2 = *(arg_54h);
    0x000347f6 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x000347f8 ble 0x34860                                       |         goto label_20;
                                                                 |     }
    0x000347fa ldr.w r2, [r8, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r2 = *((r8 + offset_1));
                                                                 |     if (r2 != 0) {
    0x000347fe cbnz r2, 0x34860                                  |         goto label_20;
                                                                 |     }
    0x00034800 ldrb.w r2, [lr, 5]                                |     r2 = *((lr + 5));
                                                                 |     if (r2 == 0) {
    0x00034804 cbz r2, 0x34860                                   |         goto label_20;
                                                                 |     }
    0x00034806 ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_5ch);
    0x0003480a add.w r1, r1, r1, lsl 1                           |     r1 += (r1 << 1);
    0x0003480e cmp sl, r3                                        |     
    0x00034810 it lt                                             |     
                                                                 |     if (sl >= r3) {
    0x00034812 movlt sl, r3                                      |         sl = r3;
                                                                 |     }
    0x00034814 add.w sb, r2, r1, lsl 4                           |     sb = r2 + (r1 << 4);
    0x00034818 ldrd r1, r2, [r5]                                 |     __asm ("ldrd r1, r2, [r5]");
    0x0003481c ldr.w r0, [sb, 0x20]                              |     r0 = *((sb + 0x20));
    0x00034820 orrs r1, r0                                       |     r1 |= r0;
    0x00034822 ldr.w r0, [sb, 0x24]                              |     r0 = *((sb + 0x24));
    0x00034826 str r1, [r5]                                      |     *(r5) = r1;
    0x00034828 orrs r2, r0                                       |     r2 |= r0;
    0x0003482a str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x0003482c ldr r2, [sp]                                      |     r2 = *(sp);
    0x0003482e str.w sb, [r8, r3, lsl 2]                         |     __asm ("str.w sb, [r8, r3, lsl 2]");
    0x00034832 ldrb.w r2, [r2, ip, lsl 3]                        |     offset_2 = ip << 3;
                                                                 |     r2 = *((r2 + offset_2));
    0x00034836 subs r2, 0                                        |     
    0x00034838 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0003483a movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0003483c cmp.w ip, 0xf                                     |     
    0x00034840 it gt                                             |     
                                                                 |     if (ip <= 0xf) {
    0x00034842 movgt r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00034844 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00034846 beq 0x347b2                                       |         goto label_0;
                                                                 |     }
    0x00034848 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003484a asr.w r2, r2, ip                                  |     r2 >>= ip;
    0x0003484e lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
                                                                 |     if (r0 < r2) {
    0x00034850 bmi 0x347b2                                       |         goto label_0;
                                                                 |     }
    0x00034852 movs r2, 1                                        |     r2 = 1;
    0x00034854 lsl.w r3, r2, r3                                  |     r3 = r2 << r3;
    0x00034858 ldrh r2, [r5, 0x1e]                               |     r2 = *((r5 + 0x1e));
    0x0003485a orrs r3, r2                                       |     r3 |= r2;
    0x0003485c strh r3, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r3;
    0x0003485e b 0x347b2                                         |     goto label_0;
                                                                 | label_20:
    0x00034860 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00034862 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x00034864 ldr r1, [pc, 0x25c]                               |     
    0x00034866 add r3, r2                                        |     r3 += r2;
    0x00034868 add r1, pc                                        |     r1 = 0x69330;
                                                                 | label_1:
    0x0003486a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003486c movs r7, 1                                        |     r7 = 1;
    0x0003486e ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00034870 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x00034874 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00034876 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00034878 bl 0x25778                                        |     fcn_00025778 (r0);
    0x0003487c mov r0, r7                                        |     r0 = r7;
    0x0003487e add sp, 0x24                                      |     
    0x00034880 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_15:
    0x00034884 cmp r7, 0x13                                      |     
    0x00034886 it eq                                             |     
                                                                 |     if (r7 != 0x13) {
    0x00034888 moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
    0x0003488a mov r0, r7                                        |     r0 = r7;
    0x0003488c add sp, 0x24                                      |     
    0x0003488e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_19:
    0x00034892 cmp.w sl, -1                                      |     
    0x00034896 add.w r3, sl, 1                                   |     r3 = sl + 1;
    0x0003489a mov r6, r7                                        |     r6 = r7;
    0x0003489c strh r3, [r5, 0x28]                               |     *((r5 + 0x28)) = r3;
    0x0003489e ldr r7, [sp, 0xc]                                 |     r7 = var_ch;
                                                                 |     if (sl == -1) {
    0x000348a0 beq 0x34904                                       |         goto label_21;
                                                                 |     }
    0x000348a2 sub.w r8, r8, 4                                   |     r8 -= 4;
    0x000348a6 b 0x348ae                                         |     
                                                                 |     while (r3 != 0) {
    0x000348a8 adds r7, 1                                        |         r7++;
    0x000348aa cmp sl, r7                                        |         
                                                                 |         if (sl < r7) {
    0x000348ac blt 0x34904                                       |             goto label_21;
                                                                 |         }
    0x000348ae ldr r3, [r8, 4]!                                  |         r3 = *((r8 += 4));
    0x000348b2 cmp r3, 0                                         |         
    0x000348b4 bne 0x348a8                                       |         
                                                                 |     }
    0x000348b6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000348b8 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x000348ba ldr r1, [pc, 0x20c]                               |     
    0x000348bc add r3, r2                                        |     r3 += r2;
    0x000348be add r1, pc                                        |     r1 = 0x6938c;
    0x000348c0 b 0x3486a                                         |     goto label_1;
                                                                 | label_14:
    0x000348c2 cmp r0, 0x65                                      |     
                                                                 |     if (r0 == 0x65) {
    0x000348c4 beq.w 0x34a6c                                     |         goto label_22;
                                                                 |     }
    0x000348c8 cmp.w r0, 0x204                                   |     
                                                                 |     if (r0 == fcn.00000004) {
    0x000348cc beq.w 0x34a66                                     |         goto label_23;
                                                                 |     }
    0x000348d0 cmp r0, 0x64                                      |     
                                                                 |     if (r0 == 0x64) {
    0x000348d2 beq.w 0x34a60                                     |         goto label_24;
                                                                 |     }
    0x000348d6 uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x000348d8 cmp r3, 0x1c                                      |     
                                                                 |     if (r3 > 0x1c) {
    0x000348da bgt.w 0x34a00                                     |         goto label_25;
                                                                 |     }
    0x000348de ldr r2, [pc, 0x1ec]                               |     
    0x000348e0 add r2, pc                                        |     r2 = 0x693b2;
    0x000348e2 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x000348e6 ldr.w r2, [r3, 0x1a4]                             |     r2 = *((r3 + 0x1a4));
    0x000348ea cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000348ec bne.w 0x34a04                                     |         goto label_8;
                                                                 |     }
    0x000348f0 ldr r2, [pc, 0x1dc]                               |     
    0x000348f2 add r2, pc                                        |     r2 = 0x693c6;
    0x000348f4 b 0x34a04                                         |     goto label_8;
                                                                 | label_13:
    0x000348f6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000348f8 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000348fa bl 0x101ec                                        |     fcn_000101ec (r0);
    0x000348fe b 0x3475e                                         |     goto label_2;
                                                                 | label_16:
    0x00034900 strh r7, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r7;
    0x00034902 strh r7, [r5, 0x28]                               |     *((r5 + 0x28)) = r7;
                                                                 | label_21:
    0x00034904 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x00034906 ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x00034908 str r2, [r5, 0x18]                                |     *((r5 + 0x18)) = r2;
    0x0003490a ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x0003490c strb r2, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r2;
    0x0003490e movs r2, 0                                        |     r2 = 0;
    0x00034910 str r2, [r6, 0x1c]                                |     *((r6 + 0x1c)) = r2;
    0x00034912 ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x00034914 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00034916 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00034918 bne 0x349d6                                       |         goto label_26;
                                                                 |     }
                                                                 | label_4:
    0x0003491a vldr d7, [r6, 0x28]                               |     __asm ("vldr d7, [r6, 0x28]");
    0x0003491e movs r4, 0                                        |     r4 = 0;
    0x00034920 vmov.f64 d16, 1.000000e+00                        |     __asm ("vmov.f64 d16, 1");
    0x00034924 strb r3, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r3;
    0x00034926 strh r4, [r5, 0x12]                               |     *((r5 + 0x12)) = r4;
    0x00034928 vcmpe.f64 d7, d16                                 |     __asm ("vcmpe.f64 d7, d16");
    0x0003492c vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r4 >= 0) {
    0x00034930 bls 0x34952                                       |         
    0x00034932 vldr d16, [pc, 0x17c]                             |         __asm ("vldr d16, aav.0x000000ff");
    0x00034936 vcmpe.f64 d7, d16                                 |         __asm ("vcmpe.f64 d7, d16");
    0x0003493a vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |         if (r4 < 0) {
    0x0003493e bls 0x34a10                                       |             goto label_27;
                                                                 |         }
    0x00034940 vmov r3, s15                                      |         __asm ("vmov r3, s15");
    0x00034944 lsrs r3, r3, 0x14                                 |         r3 >>= 0x14;
    0x00034946 subw r3, r3, 0x3fe                                |         __asm ("subw r3, r3, aav.0x000000ff");
    0x0003494a add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x0003494e lsls r4, r3, 1                                    |         r4 = r3 << 1;
    0x00034950 sxth r4, r4                                       |         __asm ("sxth r4, r4");
                                                                 |     }
                                                                 | label_7:
    0x00034952 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00034954 ldr r2, [r6, 0x34]                                |     r2 = *((r6 + 0x34));
    0x00034956 strh r4, [r5, 0x14]                               |     *((r5 + 0x14)) = r4;
    0x00034958 cmp r3, 8                                         |     
    0x0003495a sbcs r1, r2, 0                                    |     __asm ("sbcs r1, r2, 0");
                                                                 |     if (r3 <= 8) {
    0x0003495e blo 0x349dc                                       |         goto label_28;
                                                                 |     }
    0x00034960 clz r0, r2                                        |     r0 &= r2;
                                                                 |     if (r2 == 0) {
    0x00034964 cbnz r2, 0x3496c                                  |         
    0x00034966 clz r0, r3                                        |         r0 &= r3;
    0x0003496a adds r0, 0x20                                     |         r0 += 0x20;
                                                                 |     }
    0x0003496c rsb.w r0, r0, 0x3c                                |     r0 = 0x3c - r0;
    0x00034970 add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x00034974 rsb.w r4, r0, 0x20                                |     r4 = 0x20 - r0;
    0x00034978 lsrs r3, r0                                       |     r3 >>= r0;
    0x0003497a lsl.w r4, r2, r4                                  |     r4 = r2 << r4;
    0x0003497e lsls r1, r1, 1                                    |     r1 <<= 1;
    0x00034980 subs r0, 0x20                                     |     r0 -= 0x20;
    0x00034982 lsr.w r0, r2, r0                                  |     r0 = r2 >> r0;
    0x00034986 adds r1, 0x28                                     |     r1 += 0x28;
    0x00034988 orrs r3, r4                                       |     r3 |= r4;
    0x0003498a uxth r1, r1                                       |     r1 = (int16_t) r1;
    0x0003498c orrs r3, r0                                       |     r3 |= r0;
                                                                 | label_6:
    0x0003498e ldr r2, [pc, 0x144]                               |     
    0x00034990 and r3, r3, 7                                     |     r3 &= 7;
    0x00034994 subs r1, 0xa                                      |     r1 -= 0xa;
    0x00034996 add r2, pc                                        |     r2 = 0x69470;
    0x00034998 add.w r3, r2, r3, lsl 1                           |     r3 = r2 + (r3 << 1);
    0x0003499c ldrh.w r3, [r3, 0x78]                             |     r3 = *((r3 + 0x78));
    0x000349a0 add r3, r1                                        |     r3 += r1;
    0x000349a2 sxth r3, r3                                       |     __asm ("sxth r3, r3");
                                                                 | label_5:
    0x000349a4 ldr r2, [r6, 0x38]                                |     r2 = *((r6 + 0x38));
    0x000349a6 mov r1, r5                                        |     r1 = r5;
    0x000349a8 strh r3, [r5, 0x16]                               |     *((r5 + 0x16)) = r3;
    0x000349aa ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x000349ac lsls r2, r2, 0x1f                                 |     r2 <<= 0x1f;
    0x000349ae ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000349b0 ite mi                                            |     
                                                                 |     if (r2 >= r2) {
    0x000349b2 orrmi r3, r3, 0x1000                              |         r3 |= 0x1000;
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x000349b6 bic r3, r3, 0x1000                                |         r3 = BIT_MASK (r3, 0x1000);
                                                                 |     }
    0x000349ba str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x000349bc bl 0x1adac                                        |     fcn_0001adac (r0, r1);
    0x000349c0 ldrb r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x000349c2 mov r7, r0                                        |     r7 = r0;
    0x000349c4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000349c6 beq.w 0x3476c                                     |         goto label_3;
                                                                 |     }
    0x000349ca ldr r0, [r5, 0x20]                                |     r0 = *((r5 + 0x20));
    0x000349cc blx 0x84f8                                        |     fcn_000084f8 ();
    0x000349d0 movs r3, 0                                        |     r3 = 0;
    0x000349d2 strb r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x000349d4 b 0x3476c                                         |     goto label_3;
                                                                 | label_26:
    0x000349d6 ldrsb.w r3, [r6, 8]                               |     r3 = *((r6 + 8));
    0x000349da b 0x3491a                                         |     goto label_4;
                                                                 | label_28:
    0x000349dc cmp r3, 2                                         |     
    0x000349de sbcs r1, r2, 0                                    |     __asm ("sbcs r1, r2, 0");
    0x000349e2 it lo                                             |     
                                                                 |     if (r3 < 2) {
    0x000349e4 movlo r3, 0                                       |         r3 = 0;
                                                                 |         goto label_29;
                                                                 |     }
                                                                 |     if (r3 <= 2) {
                                                                 | label_29:
    0x000349e6 blo 0x349a4                                       |         goto label_5;
                                                                 |     }
    0x000349e8 movs r0, 0x1e                                     |     r0 = 0x1e;
                                                                 |     do {
    0x000349ea adds r3, r3, r3                                   |         r3 += r3;
    0x000349ec sub.w r4, r0, 0xa                                 |         r4 = r0 - 0xa;
    0x000349f0 adcs r2, r2                                       |         __asm ("adcs r2, r2");
    0x000349f2 cmp r3, 8                                         |         
    0x000349f4 mov r1, r0                                        |         r1 = r0;
    0x000349f6 uxth r0, r4                                       |         r0 = (int16_t) r4;
    0x000349f8 sbcs r4, r2, 0                                    |         __asm ("sbcs r4, r2, 0");
    0x000349fc blo 0x349ea                                       |         
                                                                 |     } while (r3 <= 8);
    0x000349fe b 0x3498e                                         |     goto label_6;
                                                                 | label_25:
    0x00034a00 ldr r2, [pc, 0xd4]                                |     
    0x00034a02 add r2, pc                                        |     r2 = 0x694de;
                                                                 | label_8:
    0x00034a04 ldr r1, [pc, 0xd4]                                |     
    0x00034a06 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00034a08 add r1, pc                                        |     r1 = 0x694e8;
    0x00034a0a bl 0x25778                                        |     fcn_00025778 (r0);
    0x00034a0e b 0x3475e                                         |     goto label_2;
                                                                 | label_27:
    0x00034a10 vmov r0, r1, d7                                   |     __asm ("vmov r0, r1, d7");
    0x00034a14 bl 0xac248                                        |     r0 = fcn_000ac248 (r0, r1);
    0x00034a18 mov r3, r0                                        |     r3 = r0;
    0x00034a1a mov r0, r1                                        |     r0 = r1;
    0x00034a1c cmp r3, 8                                         |     
    0x00034a1e mov r7, r1                                        |     r7 = r1;
    0x00034a20 sbcs r1, r0, 0                                    |     __asm ("sbcs r1, r0, 0");
    0x00034a24 mov r2, r3                                        |     r2 = r3;
                                                                 |     if (r3 >= 8) {
    0x00034a26 bhs 0x34a72                                       |         goto label_30;
                                                                 |     }
    0x00034a28 cmp r3, 2                                         |     
    0x00034a2a sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r3 <= 2) {
    0x00034a2e blo 0x34952                                       |         goto label_7;
                                                                 |     }
    0x00034a30 movs r1, 0x1e                                     |     r1 = 0x1e;
                                                                 |     do {
    0x00034a32 adds r2, r2, r2                                   |         r2 += r2;
    0x00034a34 sub.w r0, r1, 0xa                                 |         r0 = r1 - 0xa;
    0x00034a38 adcs r7, r7                                       |         __asm ("adcs r7, r7");
    0x00034a3a cmp r2, 8                                         |         
    0x00034a3c mov r3, r1                                        |         r3 = r1;
    0x00034a3e uxth r1, r0                                       |         r1 = (int16_t) r0;
    0x00034a40 sbcs r0, r7, 0                                    |         __asm ("sbcs r0, r7, 0");
    0x00034a44 blo 0x34a32                                       |         
                                                                 |     } while (r2 <= 8);
                                                                 |     do {
    0x00034a46 sub.w r4, r3, 0xa                                 |         r4 = r3 - 0xa;
    0x00034a4a ldr r3, [pc, 0x94]                                |         
    0x00034a4c and r2, r2, 7                                     |         r2 &= 7;
    0x00034a50 add r3, pc                                        |         r3 = 0x69536;
    0x00034a52 add.w r3, r3, r2, lsl 1                           |         r3 += (r2 << 1);
    0x00034a56 ldrh.w r3, [r3, 0x78]                             |         r3 = *((r3 + 0x78));
    0x00034a58 adds r0, 0x78                                     |         r0 += 0x78;
    0x00034a5a add r4, r3                                        |         r4 += r3;
    0x00034a5c sxth r4, r4                                       |         __asm ("sxth r4, r4");
    0x00034a5e b 0x34952                                         |         goto label_7;
                                                                 | label_24:
    0x00034a60 ldr r2, [pc, 0x80]                                |         
    0x00034a62 add r2, pc                                        |         r2 = 0x6954a;
    0x00034a64 b 0x34a04                                         |         goto label_8;
                                                                 | label_23:
    0x00034a66 ldr r2, [pc, 0x80]                                |         
    0x00034a68 add r2, pc                                        |         r2 = 0x69556;
    0x00034a6a b 0x34a04                                         |         goto label_8;
                                                                 | label_22:
    0x00034a6c ldr r2, [pc, 0x7c]                                |         
    0x00034a6e add r2, pc                                        |         r2 = 0x6955e;
    0x00034a70 b 0x34a04                                         |         goto label_8;
                                                                 | label_30:
    0x00034a72 clz r2, r0                                        |         r2 &= r0;
                                                                 |         if (r0 == 0) {
    0x00034a76 cbnz r0, 0x34a7e                                  |             
    0x00034a78 clz r2, r3                                        |             r2 &= r3;
    0x00034a7c adds r2, 0x20                                     |             r2 += 0x20;
                                                                 |         }
    0x00034a7e rsb.w r2, r2, 0x3c                                |         r2 = 0x3c - r2;
    0x00034a82 lsr.w r1, r3, r2                                  |         r1 = r3 >> r2;
    0x00034a86 add.w r3, r2, r2, lsl 2                           |         r3 = r2 + (r2 << 2);
    0x00034a8a rsb.w r4, r2, 0x20                                |         r4 = 0x20 - r2;
    0x00034a8e lsls r3, r3, 1                                    |         r3 <<= 1;
    0x00034a90 lsl.w r4, r0, r4                                  |         r4 = r0 << r4;
    0x00034a94 subs r2, 0x20                                     |         r2 -= 0x20;
    0x00034a96 lsr.w r2, r0, r2                                  |         r2 = r0 >> r2;
    0x00034a9a adds r3, 0x28                                     |         r3 += 0x28;
    0x00034a9c orrs r1, r4                                       |         r1 |= r4;
    0x00034a9e uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00034aa0 orrs r2, r1                                       |         r2 |= r1;
    0x00034aa2 b 0x34a46                                         |         
                                                                 |     } while (1);
                                                                 | label_12:
    0x00034aa4 movs r3, 0                                        |     r3 = 0;
    0x00034aa6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00034aa8 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x360d4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000360d4 ()                                      | void fcn_000360d4 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
                                                                 | label_9:
    0x0001fcb8 lsls r0, r6, 5                                    |     r0 = r6 << 5;
    0x0001fcba movs r0, r0                                       |     
    0x0001fcbc ldrh r0, [r0, 0x10]                               |     r0 = *((r0 + 0x10));
    0x0001fcbe mov r4, r1                                        |     r4 = r1;
    0x0001fcc0 cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x0001fcc2 beq 0x1fd2c                                       |         goto label_11;
                                                                 |     }
    0x0001fcc4 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0001fcc6 cmp r3, 0x3b                                      |     
                                                                 |     if (r3 == 0x3b) {
    0x0001fcc8 beq 0x1fd0e                                       |         goto label_0;
                                                                 |     }
    0x0001fcca add.w r2, r3, 0x74                                |     r2 = r3 + 0x74;
    0x0001fcce uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x0001fcd0 cmp r2, 0x26                                      |     
                                                                 |     if (r2 > 0x26) {
    0x0001fcd2 bhi 0x1fd0a                                       |         goto label_2;
                                                                 |     }
    0x0001fcd4 subs r3, 0x8c                                     |     r3 -= 0x8c;
    0x0001fcd6 cmp r3, 0x26                                      |     
                                                                 |     if (r3 > 0x26) {
    0x0001fcd8 bhi 0x1fd0a                                       |         goto label_2;
                                                                 |     }
                                                                 |     /* switch table (39 cases) at 0x1fcde */
    0x0001fcda tbb [pc, r3]                                      |     __asm ("tbb aav.0x000000ff");
                                                                 | label_4:
    0x0001fd06 cmp r6, 4                                         |     
                                                                 |     if (r6 == 4) {
    0x0001fd08 beq 0x1fd24                                       |         goto label_3;
                                                                 |     }
                                                                 |     do {
                                                                 | label_2:
    0x0001fd0a movs r0, 0                                        |         r0 = 0;
                                                                 | label_1:
    0x0001fd0c pop {r4, r5, r6, pc}                              |         
                                                                 | label_0:
    0x0001fd0e mov r0, r4                                        |         r0 = r4;
    0x0001fd10 bl 0x1fc20                                        |         r0 = fcn_0001fc20 (r0);
    0x0001fd14 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0001fd16 bne.w 0x1fe3c                                     |             goto label_12;
                                                                 |         }
    0x0001fd1a ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0001fd1c lsls r2, r2, 0x1c                                 |         r2 <<= 0x1c;
                                                                 |         if (r2 >= r2) {
    0x0001fd1e bpl 0x1fdf6                                       |             goto label_13;
                                                                 |         }
    0x0001fd20 cmp r6, 2                                         |         
    0x0001fd22 bne 0x1fd0a                                       |         
                                                                 |     } while (r6 != 2);
                                                                 |     do {
                                                                 | label_3:
    0x0001fd24 movs r3, 0                                        |         r3 = 0;
    0x0001fd26 movs r0, 2                                        |         r0 = 2;
    0x0001fd28 strh r3, [r5, 0x14]                               |         *((r5 + 0x14)) = r3;
    0x0001fd2a pop {r4, r5, r6, pc}                              |         
                                                                 | label_11:
    0x0001fd2c ldr r2, [r1, 4]                                   |         r2 = *((r1 + 4));
    0x0001fd2e ands r0, r2, 1                                    |         r0 = r2 & 1;
    0x0001fd32 bne 0x1fd24                                       |         
                                                                 |     } while (r0 != r2);
    0x0001fd34 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0001fd36 cmp r3, 0x3b                                      |     
                                                                 |     if (r3 == 0x3b) {
    0x0001fd38 beq 0x1fd0e                                       |         goto label_0;
                                                                 |     }
    0x0001fd3a add.w r1, r3, 0x74                                |     r1 = r3 + 0x74;
    0x0001fd3e uxtb r1, r1                                       |     r1 = (int8_t) r1;
    0x0001fd40 cmp r1, 0x26                                      |     
                                                                 |     if (r1 > 0x26) {
    0x0001fd42 bhi 0x1fd0c                                       |         goto label_1;
                                                                 |     }
    0x0001fd44 subs r3, 0x8c                                     |     r3 -= 0x8c;
    0x0001fd46 cmp r3, 0x26                                      |     
                                                                 |     if (r3 > 0x26) {
    0x0001fd48 bhi 0x1fd0a                                       |         goto label_2;
                                                                 |     }
    0x0001fd4a adr r1, 8                                         |     r1 = 8;
    0x0001fd4c ldr.w r3, [r1, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r3 = *((r1 + offset_0));
    0x0001fd50 add r1, r3                                        |     r1 += r3;
    0x0001fd52 bx r1                                             |     return uint32_t (*r1)() ();
    0x0001fdf0 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0001fdf2 lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
                                                                 |     if (r0 < r3) {
    0x0001fdf4 bmi 0x1fd0a                                       |         goto label_2;
                                                                 |     }
                                                                 | label_13:
    0x0001fdf6 cmp r6, 3                                         |     
                                                                 |     if (r6 != 3) {
    0x0001fdf8 bne 0x1fd24                                       |         goto label_3;
                                                                 |     }
    0x0001fdfa ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x0001fdfc ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x0001fdfe cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0001fe00 bne 0x1fd24                                       |         goto label_3;
                                                                 |     }
    0x0001fe02 b 0x1fd0a                                         |     goto label_2;
    0x0001fe04 cmp r6, 3                                         |     
    0x0001fe06 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
                                                                 |     if (r6 > 3) {
    0x0001fe08 bhi 0x1fe24                                       |         goto label_14;
                                                                 |     }
    0x0001fe0a lsls r1, r2, 0xc                                  |     r1 = r2 << 0xc;
                                                                 |     if (r1 >= r2) {
    0x0001fe0c bpl 0x1fd24                                       |         goto label_3;
                                                                 |     }
    0x0001fe0e lsls r3, r2, 7                                    |     r3 = r2 << 7;
                                                                 |     if (r3 >= r2) {
    0x0001fe10 bpl.w 0x1fd0a                                     |         goto label_2;
                                                                 |     }
    0x0001fe14 b 0x1fd24                                         |     goto label_3;
    0x0001fe16 cmp r6, 5                                         |     
                                                                 |     if (r6 != 5) {
    0x0001fe18 bne.w 0x1fd06                                     |         goto label_4;
                                                                 |     }
    0x0001fe1c movs r3, 0x78                                     |     r3 = 0x78;
    0x0001fe1e movs r0, 0                                        |     r0 = 0;
    0x0001fe20 strb r3, [r1]                                     |     *(r1) = r3;
    0x0001fe22 pop {r4, r5, r6, pc}                              |     
                                                                 | label_14:
    0x0001fe24 ands r0, r2, 0x1000000                            |     r0 = r2 & 0x1000000;
                                                                 |     if (r0 != r2) {
    0x0001fe28 bne.w 0x1fd24                                     |         goto label_3;
                                                                 |     }
    0x0001fe2c cmp r6, 5                                         |     
    0x0001fe2e itt eq                                            |     
                                                                 |     if (r6 != 5) {
    0x0001fe30 orreq r2, r2, 0x40000000                          |         r2 |= 0x40000000;
                                                                 |     }
                                                                 |     if (r6 != 5) {
    0x0001fe34 str r2, [r1, 4]                                   |         *((r1 + 4)) = r2;
                                                                 |         goto label_15;
                                                                 |     }
                                                                 |     if (r6 != 5) {
                                                                 | label_15:
    0x0001fe36 bne.w 0x1fd0a                                     |         goto label_2;
                                                                 |     }
    0x0001fe3a pop {r4, r5, r6, pc}                              |     
                                                                 | label_12:
    0x0001fe3c movs r0, 1                                        |     r0 = 1;
    0x0001fe3e pop {r4, r5, r6, pc}                              |     
    0x000360d4 push.w {r4, r5, r6, r7, r8, lr}                   |     
    0x000360d8 sub sp, 0x28                                      |     
    0x000360da ldrd r8, r3, [r1, 0x1c]                           |     __asm ("ldrd r8, r3, [r1, 0x1c]");
    0x000360de mov r6, r2                                        |     r6 = r2;
    0x000360e0 mov r1, r6                                        |     r1 = r6;
    0x000360e2 ldr r2, [pc, 0xa8]                                |     
    0x000360e4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000360e6 movs r3, 0x81                                     |     
    0x000360e8 movt r3, 8                                        |     r3 = 0x80081;
    0x000360ec ldr r5, [r0]                                      |     r5 = *(r0);
    0x000360ee str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000360f0 add r2, pc                                        |     r2 = 0x6c282;
    0x000360f2 ldr r3, [pc, 0x9c]                                |     r3 = *(0x36192);
    0x000360f4 str r0, [sp, 4]                                   |     var_4h = r0;
    0x000360f6 add r0, sp, 4                                     |     r0 += var_4h;
    0x000360f8 ldrb.w r4, [r5, 0x57]                             |     r4 = *((r5 + 0x57));
    0x000360fc ldr r3, [r2, r3]                                  |     
    0x000360fe movs r2, 0                                        |     r2 = 0;
    0x00036100 ldr r3, [r3]                                      |     r3 = *(0x6c282);
    0x00036102 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00036104 mov.w r3, 0                                       |     r3 = 0;
    0x00036108 movs r3, 1                                        |     r3 = 1;
    0x0003610a strb.w r3, [r5, 0x57]                             |     *((r5 + 0x57)) = r3;
    0x0003610e str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch]");
    0x00036112 strd r2, r2, [sp, 0x10]                           |     __asm ("strd r2, r2, [var_10h]");
    0x00036116 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00036118 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0003611a bl 0x3040c                                        |     fcn_0003040c (r0, r1, r2);
    0x0003611e strb.w r4, [r5, 0x57]                             |     *((r5 + 0x57)) = r4;
                                                                 |     if (r0 != 0) {
    0x00036122 cbnz r0, 0x36182                                  |         goto label_16;
                                                                 |     }
    0x00036124 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00036128 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003612a ble 0x36182                                       |         goto label_16;
                                                                 |     }
    0x0003612c clz r7, r6                                        |     r7 &= r6;
    0x00036130 mov r4, r0                                        |     r4 = r0;
    0x00036132 lsrs r7, r7, 5                                    |     r7 >>= 5;
    0x00036134 mov r5, r8                                        |     r5 = r8;
    0x00036136 b 0x36152                                         |     
                                                                 |     while (r0 == 0) {
    0x00036138 mov.w r3, -1                                      |         r3 = -1;
    0x0003613c mov r2, r6                                        |         r2 = r6;
    0x0003613e bl 0x35ca8                                        |         r0 = fcn_00035ca8 (r0, r1, r2, r3);
    0x00036142 cmp r0, 1                                         |         
                                                                 |         if (r0 <= 1) {
    0x00036144 ble 0x36166                                       |             goto label_17;
                                                                 |         }
    0x00036146 ldr.w r3, [r8]                                    |         r3 = *(r8);
                                                                 | label_5:
    0x0003614a adds r4, 1                                        |         r4++;
    0x0003614c adds r5, 0x10                                     |         r5 += 0x10;
    0x0003614e cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x00036150 ble 0x36182                                       |             goto label_16;
                                                                 |         }
    0x00036152 ldr r1, [r5, 8]                                   |         r1 = *((r5 + 8));
    0x00036154 cmp r1, 0                                         |         
    0x00036156 ite ne                                            |         
                                                                 |         if (r1 == 0) {
    0x00036158 movne r0, r7                                      |             r0 = r7;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x0003615a orreq r0, r7, 1                                   |             r0 = r7 | 1;
                                                                 |         }
    0x0003615e cmp r0, 0                                         |         
    0x00036160 beq 0x36138                                       |         
                                                                 |     }
    0x00036162 cmp r1, r6                                        |     
                                                                 |     if (r1 != r6) {
    0x00036164 bne 0x3614a                                       |         goto label_5;
                                                                 |     }
                                                                 | label_17:
    0x00036166 adds r0, r4, 1                                    |     r0 = r4 + 1;
                                                                 |     do {
    0x00036168 ldr r2, [pc, 0x28]                                |         
    0x0003616a ldr r3, [pc, 0x24]                                |         r3 = *(0x36192);
    0x0003616c add r2, pc                                        |         r2 = 0x6c304;
    0x0003616e ldr r3, [r2, r3]                                  |         r3 = *(0x6c304);
    0x00036170 ldr r2, [r3]                                      |         r2 = *(0x6c304);
    0x00036172 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00036174 eors r2, r3                                       |         r2 ^= r3;
    0x00036176 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003617a bne 0x36186                                       |             goto label_18;
                                                                 |         }
    0x0003617c add sp, 0x28                                      |         
    0x0003617e pop.w {r4, r5, r6, r7, r8, pc}                    |         
                                                                 | label_16:
    0x00036182 movs r0, 0                                        |         r0 = 0;
    0x00036184 b 0x36168                                         |         
                                                                 |     } while (1);
                                                                 | label_18:
    0x00036186 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x0003618a nop                                               |     
    0x0003618c ldrb r0, [r4, 0xe]                                |     r0 = *((r4 + 0xe));
    0x0003618e movs r1, r1                                       |     
    0x00036190 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00036192 movs r0, r0                                       |     
    0x00036194 ldrb r4, [r4, 0xc]                                |     r4 = *((r4 + 0xc));
    0x00036196 movs r1, r1                                       |     
    0x00036198 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003619c mov sl, r0                                        |     sl = r0;
    0x0003619e ldr.w sb, [r0, 0x18]                              |     sb = *((r0 + 0x18));
    0x000361a2 sub sp, 0xc                                       |     
    0x000361a4 mov r7, r1                                        |     r7 = r1;
    0x000361a6 ldr.w ip, [sb]                                    |     ip = *(sb);
    0x000361aa cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x000361ae ble 0x3621e                                       |         goto label_19;
                                                                 |     }
    0x000361b0 ldr r3, [pc, 0x88]                                |     
    0x000361b2 clz r8, r1                                        |     r8 &= r1;
    0x000361b6 lsr.w r8, r8, 5                                   |     r8 >>= 5;
    0x000361ba mov r5, sb                                        |     r5 = sb;
    0x000361bc movs r6, 0                                        |     r6 = 0;
    0x000361be add r3, pc                                        |     r3 = 0x6c3fe;
    0x000361c0 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x000361c2 b 0x361d8                                         |     
                                                                 |     while (r0 == 0) {
    0x000361c4 bl 0x35ca8                                        |         r0 = fcn_00035ca8 (r0, r1, r2, r3);
    0x000361c8 cmp r0, 1                                         |         
                                                                 |         if (r0 <= 1) {
    0x000361ca ble 0x361f4                                       |             goto label_20;
                                                                 |         }
                                                                 | label_7:
    0x000361cc ldr.w ip, [sb]                                    |         ip = *(sb);
                                                                 | label_6:
    0x000361d0 adds r6, 1                                        |         r6++;
    0x000361d2 adds r5, 0x10                                     |         r5 += 0x10;
    0x000361d4 cmp ip, r6                                        |         
                                                                 |         if (ip <= r6) {
    0x000361d6 ble 0x3621e                                       |             goto label_19;
                                                                 |         }
    0x000361d8 ldr r4, [r5, 8]                                   |         r4 = *((r5 + 8));
    0x000361da mov.w r3, -1                                      |         r3 = -1;
    0x000361de mov r1, r7                                        |         r1 = r7;
    0x000361e0 cmp r4, 0                                         |         
    0x000361e2 ite ne                                            |         
                                                                 |         if (r4 == 0) {
    0x000361e4 movne r0, r8                                      |             r0 = r8;
                                                                 |         }
                                                                 |         if (r4 != 0) {
    0x000361e6 orreq r0, r8, 1                                   |             r0 = r8 | 1;
                                                                 |         }
    0x000361ea mov r2, r4                                        |         r2 = r4;
    0x000361ec cmp r0, 0                                         |         
    0x000361ee beq 0x361c4                                       |         
                                                                 |     }
    0x000361f0 cmp r7, r4                                        |     
                                                                 |     if (r7 != r4) {
    0x000361f2 bne 0x361d0                                       |         goto label_6;
                                                                 |     }
                                                                 | label_20:
    0x000361f4 ldr.w fp, [sl]                                    |     fp = *(sl);
    0x000361f8 mov r1, r4                                        |     r1 = r4;
    0x000361fa mov r0, fp                                        |     r0 = fp;
    0x000361fc bl 0x2d47c                                        |     r0 = fcn_0002d47c (r0, r1);
                                                                 |     if (r0 == 0) {
    0x00036200 cbz r0, 0x36212                                   |         goto label_21;
                                                                 |     }
                                                                 | label_8:
    0x00036202 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x00036204 ldr r2, [sp, 4]                                   |     r2 = var_4h_2;
    0x00036206 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00036208 bne 0x361cc                                       |         goto label_7;
                                                                 |     }
                                                                 |     do {
    0x0003620a movs r0, 1                                        |         r0 = 1;
                                                                 | label_10:
    0x0003620c add sp, 0xc                                       |         
    0x0003620e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_21:
    0x00036212 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00036216 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00036218 cmp r0, 0                                         |         
    0x0003621a beq 0x3620a                                       |         
                                                                 |     } while (r0 == 0);
    0x0003621c b 0x36202                                         |     goto label_8;
                                                                 | label_19:
    0x0003621e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00036220 lsls r3, r3, 0x14                                 |     r3 <<= 0x14;
                                                                 |     if (r3 >= r3) {
    0x00036222 bmi 0x36232                                       |         
    0x00036224 mov r1, r7                                        |         r1 = r7;
    0x00036226 mov r0, sl                                        |         r0 = sl;
    0x00036228 add sp, 0xc                                       |         
    0x0003622a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x0003622e b.w 0x1fcb8                                       |         goto label_9;
                                                                 |     }
    0x00036232 movs r3, 0                                        |     r3 = 0;
    0x00036234 movs r0, 2                                        |     r0 = 2;
    0x00036236 strh.w r3, [sl, 0x14]                             |     *((sl + 0x14)) = r3;
    0x0003623a b 0x3620c                                         |     goto label_10;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x37414 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00037414 ()                                      | void fcn_00037414 (int16_t arg_88h, int16_t arg_90h, int16_t arg_94h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_2h;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch_2;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_f8h;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_ch_3;
                                                                 |     int32_t var_20h_2;
                                                                 |     int32_t var_20h_3;
                                                                 |     int16_t var_6ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00037414 push.w {r4, r5, r6, r7, r8, lr}                   |     
    0x00037418 mov r4, r1                                        |     r4 = r1;
    0x0003741a mov r3, r2                                        |     r3 = r2;
    0x0003741c mov r2, r4                                        |     r2 = r4;
    0x0003741e mov r1, r0                                        |     r1 = r0;
    0x00037420 sub sp, 0x70                                      |     
    0x00037422 ldr r4, [pc, 0x80]                                |     
    0x00037424 ldr r0, [pc, 0x80]                                |     r0 = *(0x374a8);
    0x00037426 ldr r7, [sp, 0x90]                                |     r7 = *(arg_90h);
    0x00037428 add r4, pc                                        |     r4 = 0x6e8d2;
    0x0003742a ldrd r5, r6, [sp, 0x88]                           |     __asm ("ldrd r5, r6, [arg_88h]");
    0x0003742e ldr r0, [r4, r0]                                  |     
    0x00037430 add r4, sp, 0xc                                   |     r4 += var_ch;
    0x00037432 ldr r0, [r0]                                      |     r0 = *(0x6e8d2);
    0x00037434 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x00037436 mov.w r0, 0                                       |     r0 = 0;
    0x0003743a ldr r0, [sp, 0x94]                                |     r0 = *(arg_94h);
    0x0003743c str r7, [sp]                                      |     *(sp) = r7;
    0x0003743e str r0, [sp, 4]                                   |     var_4h = r0;
    0x00037440 mov r0, r4                                        |     r0 = r4;
    0x00037442 bl 0x37378                                        |     r0 = fcn_00037378 (r0, r1, r2, r3, r4);
                                                                 |     if (r0 == 0) {
    0x00037446 cbz r0, 0x3749a                                   |         goto label_53;
                                                                 |     }
    0x00037448 and r7, r7, 0x82                                  |     r7 &= 0x82;
    0x0003744c mov.w r8, 0                                       |     r8 = 0;
                                                                 |     do {
    0x00037450 ldrd r3, r1, [r0, 0x20]                           |         __asm ("ldrd r3, r1, [var_20h_2]");
    0x00037454 and.w r2, r3, r5                                  |         r2 = r3 & r5;
    0x00037458 and.w ip, r1, r6                                  |         
    0x0003745c orrs.w r2, r2, ip                                 |         r2 |= ip;
                                                                 |         if (r2 == r2) {
    0x00037460 bne 0x37474                                       |             
    0x00037462 orrs r3, r1                                       |             r3 |= r1;
                                                                 |             if (r3 == r1) {
    0x00037464 bne 0x3746c                                       |                 
    0x00037466 ldrh r3, [r0, 0xc]                                |                 r3 = var_ch_3;
    0x00037468 tst r3, r7                                        |                 
                                                                 |                 if ((r3 & r7) != 0) {
    0x0003746a bne 0x3749a                                       |                     goto label_53;
                                                                 |                 }
                                                                 |             }
    0x0003746c cmp.w r8, 0                                       |             
    0x00037470 it eq                                             |             
                                                                 |             if (r8 == 0) {
    0x00037472 moveq r8, r0                                      |                 r8 = r0;
                                                                 |                 goto label_54;
                                                                 |             }
                                                                 |         }
                                                                 | label_54:
    0x00037474 mov r0, r4                                        |         r0 = r4;
    0x00037476 bl 0x370d8                                        |         r0 = fcn_000370d8 (r0, r1, r2, r3, r4);
    0x0003747a cmp r0, 0                                         |         
    0x0003747c bne 0x37450                                       |         
                                                                 |     } while (r0 != 0);
                                                                 |     do {
    0x0003747e ldr r2, [pc, 0x2c]                                |         
    0x00037480 ldr r3, [pc, 0x24]                                |         r3 = *(0x374a8);
    0x00037482 add r2, pc                                        |         r2 = 0x6e934;
    0x00037484 ldr r3, [r2, r3]                                  |         r3 = *(0x6e934);
    0x00037486 ldr r2, [r3]                                      |         r2 = *(0x6e934);
    0x00037488 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0003748a eors r2, r3                                       |         r2 ^= r3;
    0x0003748c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00037490 bne 0x3749e                                       |             goto label_55;
                                                                 |         }
    0x00037492 mov r0, r8                                        |         r0 = r8;
    0x00037494 add sp, 0x70                                      |         
    0x00037496 pop.w {r4, r5, r6, r7, r8, pc}                    |         
                                                                 | label_53:
    0x0003749a mov r8, r0                                        |         r8 = r0;
    0x0003749c b 0x3747e                                         |         
                                                                 |     } while (1);
                                                                 | label_55:
    0x0003749e blx 0x7e8c                                        |     fcn_00007e8c ();
    0x000374a2 nop                                               |     
    0x000374a4 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000374a6 movs r1, r1                                       |     
    0x000374a8 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x000374aa movs r0, r0                                       |     
    0x000374ac ldr r6, [r1]                                      |     r6 = *(r1);
    0x000374ae movs r1, r1                                       |     
    0x000374b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000374b4 sub sp, 0xcc                                      |     
    0x000374b6 str r2, [sp, 0x8c]                                |     var_8ch = r2;
    0x000374b8 ldr.w r2, [pc, 0x80c]                             |     r2 = *(0x00037cc8);
    0x000374bc str r3, [sp, 0x74]                                |     var_74h = r3;
    0x000374be ldrh.w r4, [sp, 0xf0]                             |     r4 = var_0h;
    0x000374c2 ldr.w r3, [pc, 0x808]                             |     
    0x000374c6 add r2, pc                                        |     r2 += pc;
    0x000374c8 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x000374ca str r4, [sp, 0x68]                                |     var_68h = r4;
    0x000374cc str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x000374ce ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x000374d0 ldr r2, [sp, 0xf4]                                |     r2 = var_4h;
    0x000374d2 ldr r3, [r3]                                      |     r3 = *(0x37cce);
    0x000374d4 str r3, [sp, 0xc4]                                |     var_c4h = r3;
    0x000374d6 mov.w r3, 0                                       |     r3 = 0;
    0x000374da ldr r3, [r0]                                      |     r3 = *(r0);
    0x000374dc str r2, [sp, 0xa0]                                |     var_a0h = r2;
    0x000374de ldr r2, [sp, 0xf8]                                |     r2 = var_f8h;
    0x000374e0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000374e2 str r2, [sp, 0x98]                                |     var_98h = r2;
                                                                 |     if (r4 != 0) {
    0x000374e4 cbz r4, 0x374ee                                   |         
    0x000374e6 ldr r3, [r3, 0x4c]                                |         r3 = *((r3 + 0x4c));
    0x000374e8 lsls r5, r3, 0x19                                 |         r5 = r3 << 0x19;
                                                                 |         if (r5 < r3) {
    0x000374ea bmi.w 0x3774e                                     |             goto label_56;
                                                                 |         }
                                                                 |     }
    0x000374ee ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000374f0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000374f2 str r3, [sp, 0xa4]                                |     var_a4h = r3;
    0x000374f4 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x000374f6 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 > 0x3f) {
    0x000374f8 bhi.w 0x3774e                                     |         goto label_56;
                                                                 |     }
    0x000374fc mov r5, r3                                        |     r5 = r3;
    0x000374fe str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00037500 sub.w r2, r5, 0x20                                |     r2 = r5 - 0x20;
    0x00037504 movs r3, 1                                        |     r3 = 1;
    0x00037506 rsb.w r4, r5, 0x20                                |     r4 = 0x20 - r5;
    0x0003750a lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x0003750e lsr.w r4, r3, r4                                  |     r4 = r3 >> r4;
    0x00037512 lsls r3, r5                                       |     r3 <<= r5;
    0x00037514 orrs r2, r4                                       |     r2 |= r4;
    0x00037516 ldr r4, [sp, 0x74]                                |     r4 = var_74h;
    0x00037518 subs r3, 1                                        |     r3--;
    0x0003751a movw r0, 0x803                                    |     r0 = 0x803;
    0x0003751e adc r2, r2, -1                                    |     __asm ("adc r2, r2, -1");
    0x00037522 movw r1, 0x183                                    |     r1 = 0x183;
    0x00037526 tst r4, r0                                        |     
    0x00037528 str r3, [sp, 0x78]                                |     var_78h = r3;
    0x0003752a it eq                                             |     
                                                                 |     if ((r4 & r0) != 0) {
    0x0003752c moveq r1, 0x182                                   |         r1 = 0x182;
                                                                 |     }
    0x00037530 orrs r3, r2                                       |     r3 |= r2;
    0x00037532 str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x00037534 str r1, [sp, 0x58]                                |     var_58h = r1;
                                                                 |     if (r3 == r2) {
    0x00037536 beq.w 0x377f2                                     |         goto label_35;
                                                                 |     }
    0x0003753a ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0003753c movs r3, 0                                        |     r3 = 0;
    0x0003753e mov fp, r3                                        |     
    0x00037540 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00037542 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00037544 and r1, r2, 0xc0                                  |     r1 = r2 & 0xc0;
    0x00037548 strd r3, r3, [sp, 0x80]                           |     __asm ("strd r3, r3, [var_80h]");
    0x0003754c strd r3, r3, [sp, 0x5c]                           |     __asm ("strd r3, r3, [var_5ch]");
    0x00037550 and r3, r2, 0x40                                  |     r3 = r2 & 0x40;
    0x00037554 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x00037556 str r3, [sp, 0x6c]                                |     var_6ch_2 = r3;
    0x00037558 b 0x3758c                                         |     
                                                                 |     while (r4 < r3) {
                                                                 | label_6:
    0x0003755a ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003755c ldr r1, [sp, 0x78]                                |         r1 = var_78h;
    0x0003755e ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x00037560 cmp r3, r1                                        |         
    0x00037562 ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x00037564 add.w r2, r2, 1                                   |         r2++;
    0x00037568 str r2, [sp, 0x54]                                |         var_54h = r2;
    0x0003756a sbcs.w r3, fp, r3                                 |         __asm ("sbcs.w r3, fp, r3");
                                                                 |         if (r3 >= r1) {
    0x0003756e bhs.w 0x37ca8                                     |             goto label_57;
                                                                 |         }
    0x00037572 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00037574 cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x00037576 bgt.w 0x37cb8                                     |             goto label_58;
                                                                 |         }
    0x0003757a ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003757c ldr r1, [sp, 0x5c]                                |         r1 = var_5ch;
    0x0003757e ldr r3, [r2, 8]                                   |         r3 = *((r2 + 8));
    0x00037580 orrs r1, r3                                       |         r1 |= r3;
    0x00037582 ldr r3, [r2, 0xc]                                 |         r3 = *((r2 + 0xc));
    0x00037584 ldr r2, [sp, 0x60]                                |         r2 = var_60h;
    0x00037586 str r1, [sp, 0x5c]                                |         var_5ch = r1;
    0x00037588 orrs r2, r3                                       |         r2 |= r3;
    0x0003758a str r2, [sp, 0x60]                                |         var_60h = r2;
    0x0003758c ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x0003758e ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00037590 cmp r2, r3                                        |         
                                                                 |         if (r2 >= r3) {
    0x00037592 bge.w 0x377ce                                     |             goto label_59;
                                                                 |         }
    0x00037596 ldr r3, [sp, 0x8c]                                |         r3 = var_8ch;
    0x00037598 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0003759a ldr.w r3, [r3, r2, lsl 2]                         |         offset_0 = r2 << 2;
                                                                 |         r3 = *((r3 + offset_0));
    0x0003759e str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x000375a0 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x000375a2 lsls r4, r3, 0x14                                 |         r4 = r3 << 0x14;
    0x000375a4 bmi 0x3755a                                       |         
                                                                 |     }
    0x000375a6 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000375a8 ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x000375aa ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 != r2) {
    0x000375ae bne.w 0x377de                                     |         goto label_60;
                                                                 |     }
                                                                 | label_2:
    0x000375b2 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x000375b4 ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x000375b6 ands r1, r1, 0x80                                 |     r1 &= 0x80;
    0x000375ba str r1, [sp, 0x64]                                |     var_64h = r1;
    0x000375bc itt ne                                            |     
                                                                 |     if (r1 == r1) {
    0x000375be ldrne r1, [sp, 0x1c]                              |         r1 = var_1ch;
                                                                 |     }
                                                                 |     if (r1 != r1) {
    0x000375c0 strhne r3, [r1, 0x1e]                             |         __asm ("strhne r3, [r1, 0x1e]");
                                                                 |     }
    0x000375c2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000375c4 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x000375c6 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x000375c8 add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x000375cc add.w r1, r1, r3, lsl 3                           |     r1 += (r3 << 3);
    0x000375d0 ldr r3, [r1, 0x30]                                |     r3 = *((r1 + 0x30));
    0x000375d2 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000375d4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000375d6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000375d8 beq.w 0x37c5c                                     |         goto label_61;
                                                                 |     }
    0x000375dc ldr.w sl, [pc, 0x6f0]                             |     sl = *(0x00037cd0);
    0x000375e0 movs r5, 0                                        |     r5 = 0;
    0x000375e2 ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x000375e4 add.w r2, r0, 0x50                                |     r2 = r0 + 0x50;
    0x000375e8 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x000375ea add sl, pc                                        |     sl += pc;
    0x000375ec str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [var_28h]");
    0x000375f0 ldr.w sl, [sp, 0x20]                              |     sl = var_20h;
                                                                 | label_0:
    0x000375f4 rsb.w sb, r5, 0x20                                |     sb = 0x20 - r5;
    0x000375f8 lsr.w r2, sl, r5                                  |     r2 = sl >> r5;
    0x000375fc lsl.w r1, fp, sb                                  |     r1 = fp << sb;
    0x00037600 sub.w r8, r5, 0x20                                |     r8 = r5 - 0x20;
    0x00037604 orrs r2, r1                                       |     r2 |= r1;
    0x00037606 lsr.w r1, fp, r8                                  |     r1 = fp >> r8;
    0x0003760a orrs r2, r1                                       |     r2 |= r1;
    0x0003760c lsls r1, r2, 0x1f                                 |     r1 = r2 << 0x1f;
                                                                 |     if (r1 < r2) {
    0x0003760e bmi 0x3763e                                       |         goto label_1;
                                                                 |     }
    0x00037610 ldr r4, [r7, 8]                                   |     r4 = *((r7 + 8));
                                                                 |     if (r4 != 0) {
    0x00037612 cbnz r4, 0x37622                                  |         goto label_62;
                                                                 |     }
    0x00037614 b 0x3763e                                         |     goto label_1;
                                                                 |     do {
    0x00037616 lsls r2, r2, 0xd                                  |         r2 <<= 0xd;
    0x00037618 itet mi                                           |         
                                                                 |         if (r2 >= r2) {
    0x0003761a ldrmi r2, [r4, 0x14]                              |             r2 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x0003761c ldrpl r4, [r4, 0xc]                               |             r4 = *((r4 + 0xc));
                                                                 |         }
                                                                 |         if (r2 >= r2) {
    0x0003761e ldrmi r4, [r2, 8]                                 |             r4 = *((r2 + 8));
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x00037620 cbz r4, 0x3763e                                   |             goto label_1;
                                                                 |         }
                                                                 | label_62:
    0x00037622 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00037624 tst.w r2, 0x41000                                 |         
    0x00037628 bne 0x37616                                       |         
                                                                 |     } while ((r2 & 0x41000) != 0);
    0x0003762a ldrb r6, [r4]                                     |     r6 = *(r4);
    0x0003762c adds r6, 0x5a                                     |     r6 += 0x5a;
    0x0003762e ands r6, r6, 0xfd                                 |     r6 &= 0xfd;
                                                                 |     if (r6 == r6) {
    0x00037632 bne 0x3763e                                       |         
    0x00037634 ldr r2, [r4, 0x1c]                                |         r2 = *((r4 + 0x1c));
    0x00037636 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x00037638 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0003763a beq.w 0x37770                                     |             goto label_63;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x0003763e adds r5, 1                                        |     r5++;
    0x00037640 adds r7, 0x10                                     |     r7 += 0x10;
    0x00037642 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x00037644 bne 0x375f4                                       |         goto label_0;
                                                                 |     }
    0x00037646 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037648 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [var_20h]");
    0x0003764c ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x0003764e lsls r1, r2, 0x13                                 |     r1 = r2 << 0x13;
                                                                 |     if (r1 < r2) {
    0x00037650 bmi.w 0x377f8                                     |         goto label_64;
                                                                 |     }
                                                                 | label_32:
    0x00037654 lsls r3, r2, 0x17                                 |     r3 = r2 << 0x17;
                                                                 |     if (r3 < r2) {
    0x00037656 bmi.w 0x378c8                                     |         goto label_65;
                                                                 |     }
    0x0003765a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003765c ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0003765e str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00037660 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037662 beq 0x3774e                                       |         goto label_56;
                                                                 |     }
    0x00037664 ldrb.w r1, [r3, 0x37]                             |     r1 = *((r3 + 0x37));
    0x00037668 ands r1, r1, 4                                    |     r1 &= 4;
                                                                 |     if (r1 != r1) {
    0x0003766c bne 0x3774e                                       |         goto label_56;
                                                                 |     }
    0x0003766e ldrh r0, [r3, 0x32]                               |     r0 = *((r3 + 0x32));
    0x00037670 ldrb.w r4, [r3, 0x36]                             |     r4 = *((r3 + 0x36));
    0x00037674 str r0, [sp, 0x9c]                                |     var_9ch = r0;
    0x00037676 ldrh r0, [r3, 0x34]                               |     r0 = *((r3 + 0x34));
    0x00037678 str r4, [sp, 0x38]                                |     var_38h = r4;
    0x0003767a str r0, [sp, 0x48]                                |     var_48h = r0;
    0x0003767c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0003767e beq.w 0x37c54                                     |         goto label_66;
                                                                 |     }
    0x00037682 lsls r7, r2, 0x10                                 |     r7 = r2 << 0x10;
                                                                 |     if (r7 < r2) {
    0x00037684 bmi.w 0x37c76                                     |         goto label_67;
                                                                 |     }
    0x00037688 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003768a beq.w 0x37b0e                                     |         goto label_68;
                                                                 |     }
    0x0003768e movs r3, 1                                        |     r3 = 1;
    0x00037690 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00037692 b 0x378d4                                         |     goto label_31;
                                                                 | label_12:
    0x00037694 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
                                                                 | label_14:
    0x00037696 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00037698 adds r4, 1                                        |     r4++;
    0x0003769a adds r7, 0x10                                     |     r7 += 0x10;
    0x0003769c cmp r3, r4                                        |     
    0x0003769e ite le                                            |     
                                                                 |     if (r3 > r4) {
    0x000376a0 movle r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r3 <= r4) {
    0x000376a2 andgt r5, r5, 1                                   |         r5 &= 1;
                                                                 |     }
    0x000376a6 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000376a8 bne.w 0x379b6                                     |         goto label_69;
                                                                 |     }
    0x000376ac ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
                                                                 | label_11:
    0x000376b0 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x000376b4 beq.w 0x37b06                                     |         goto label_70;
                                                                 |     }
    0x000376b8 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x000376ba cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x000376bc bgt.w 0x37b06                                     |         goto label_70;
                                                                 |     }
                                                                 | label_9:
    0x000376c0 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000376c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000376c4 bne.w 0x37b0e                                     |         goto label_68;
                                                                 |     }
    0x000376c8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000376ca cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000376cc bne.w 0x37b0e                                     |         goto label_68;
                                                                 |     }
                                                                 | label_18:
    0x000376d0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000376d2 ldrd r2, r1, [sp, 0x78]                           |     __asm ("ldrd r2, r1, [var_7ch]");
    0x000376d6 cmp fp, r1                                        |     
    0x000376d8 it eq                                             |     
                                                                 |     if (fp == r1) {
    0x000376da cmpeq r3, r2                                      |         __asm ("cmpeq r3, r2");
                                                                 |     }
                                                                 |     if (fp == r1) {
    0x000376dc beq.w 0x377f2                                     |         goto label_35;
                                                                 |     }
    0x000376e0 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x000376e2 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x000376e4 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000376e6 ble 0x3774e                                       |         goto label_56;
                                                                 |     }
    0x000376e8 movs r0, 1                                        |     r0 = 1;
    0x000376ea subs r2, 0x21                                     |     r2 -= 0x21;
    0x000376ec rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x000376f0 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x000376f4 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x000376f8 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x000376fa orrs r2, r1                                       |     r2 |= r1;
    0x000376fc lsl.w r1, r0, r3                                  |     r1 = r0 << r3;
    0x00037700 subs r1, 1                                        |     r1--;
    0x00037702 adc r2, r2, -1                                    |     __asm ("adc r2, r2, -1");
    0x00037706 and.w r5, r4, r1                                  |     r5 = r4 & r1;
    0x0003770a and.w r4, fp, r2                                  |     r4 = fp & r2;
    0x0003770e cmp r4, r2                                        |     
    0x00037710 it eq                                             |     
                                                                 |     if (r4 == r2) {
    0x00037712 cmpeq r5, r1                                      |         __asm ("cmpeq r5, r1");
                                                                 |     }
    0x00037714 it ne                                             |     
                                                                 |     if (r4 == r2) {
    0x00037716 ldrne r6, [sp, 0x20]                              |         r6 = var_20h;
                                                                 |     }
                                                                 |     if (r4 != r2) {
    0x00037718 bne 0x3774a                                       |         goto label_71;
                                                                 |     }
    0x0003771a b 0x37cbe                                         |     goto label_72;
                                                                 |     do {
    0x0003771c sub.w r2, r3, 0x20                                |         r2 = r3 - 0x20;
    0x00037720 rsb.w r4, r3, 0x20                                |         r4 = 0x20 - r3;
    0x00037724 lsr.w r4, r0, r4                                  |         r4 = r0 >> r4;
    0x00037728 lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x0003772c lsl.w r1, r0, r3                                  |         r1 = r0 << r3;
    0x00037730 orrs r2, r4                                       |         r2 |= r4;
    0x00037732 subs r1, 1                                        |         r1--;
    0x00037734 adc r2, r2, -1                                    |         __asm ("adc r2, r2, -1");
    0x00037738 and.w r5, r6, r1                                  |         r5 = r6 & r1;
    0x0003773c and.w r4, fp, r2                                  |         r4 = fp & r2;
    0x00037740 cmp r4, r2                                        |         
    0x00037742 it eq                                             |         
                                                                 |         if (r4 == r2) {
    0x00037744 cmpeq r5, r1                                      |             __asm ("cmpeq r5, r1");
                                                                 |         }
                                                                 |         if (r4 == r2) {
    0x00037746 beq.w 0x37cbe                                     |             goto label_72;
                                                                 |         }
                                                                 | label_71:
    0x0003774a subs r3, 1                                        |         r3--;
    0x0003774c bne 0x3771c                                       |         
                                                                 |     } while (r3 != 1);
                                                                 | label_56:
    0x0003774e movs r0, 0                                        |     r0 = 0;
                                                                 | label_3:
    0x00037750 ldr.w r2, [pc, 0x580]                             |     
    0x00037754 ldr.w r3, [pc, 0x574]                             |     r3 = *(0x37ccc);
    0x00037758 add r2, pc                                        |     r2 = 0x6f430;
    0x0003775a ldr r3, [r2, r3]                                  |     r3 = *(0x6f430);
    0x0003775c ldr r2, [r3]                                      |     r2 = *(0x6f430);
    0x0003775e ldr r3, [sp, 0xc4]                                |     r3 = var_c4h;
    0x00037760 eors r2, r3                                       |     r2 ^= r3;
    0x00037762 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00037766 bne.w 0x37cc2                                     |         goto label_73;
                                                                 |     }
    0x0003776a add sp, 0xcc                                      |     
    0x0003776c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_63:
    0x00037770 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037772 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00037774 ldrsh.w r2, [r4, 0x20]                            |     r2 = *((r4 + 0x20));
    0x00037778 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003777a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003777c ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0003777e str r6, [sp, 0xc]                                 |     var_ch_2 = r6;
    0x00037780 mvns r1, r3                                       |     r1 = ~r3;
    0x00037782 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00037784 str r1, [sp]                                      |     *(sp) = r1;
    0x00037786 mvns r1, r3                                       |     r1 = ~r3;
    0x00037788 str r1, [sp, 4]                                   |     var_4h_2 = r1;
    0x0003778a ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003778c bl 0x37414                                        |     fcn_00037414 (r0, r1, r2, r3, r4, r5);
    0x00037790 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037792 mov r2, r0                                        |     r2 = r0;
    0x00037794 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037796 beq.w 0x3763e                                     |         goto label_1;
                                                                 |     }
    0x0003779a ldrh r1, [r0, 0xc]                                |     r1 = *((r0 + 0xc));
    0x0003779c cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0003779e beq.w 0x37c80                                     |         goto label_74;
                                                                 |     }
    0x000377a2 tst.w r1, 0x82                                    |     
    0x000377a6 str r0, [sp, 0x18]                                |     var_18h = r0;
                                                                 |     if ((r1 & 0x82) != 0) {
    0x000377a8 beq 0x377b4                                       |         
    0x000377aa ldrsh.w r1, [r4, 0x20]                            |         r1 = *((r4 + 0x20));
    0x000377ae cmp r1, 0                                         |         
                                                                 |         if (r1 >= 0) {
    0x000377b0 bge.w 0x37bdc                                     |             goto label_75;
                                                                 |         }
                                                                 |     }
                                                                 | label_30:
    0x000377b4 movs r2, 1                                        |     r2 = 1;
    0x000377b6 lsl.w r1, r2, r8                                  |     r1 = r2 << r8;
    0x000377ba lsr.w sb, r2, sb                                  |     sb = r2 >> sb;
    0x000377be lsls r2, r5                                       |     r2 <<= r5;
    0x000377c0 orr.w r1, r1, sb                                  |     r1 |= sb;
    0x000377c4 orr.w fp, r1, fp                                  |     
    0x000377c8 orr.w sl, r2, sl                                  |     sl = r2 | sl;
    0x000377cc b 0x3763e                                         |     goto label_1;
                                                                 | label_59:
    0x000377ce ldr r3, [sp, 0xa0]                                |     r3 = var_a0h;
    0x000377d0 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000377d2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000377d4 ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x000377d6 ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 == r2) {
    0x000377da beq.w 0x375b2                                     |         goto label_2;
                                                                 |     }
                                                                 | label_60:
    0x000377de ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000377e0 ldrsb.w r3, [r3, 0x1d]                            |     r3 = *((r3 + 0x1d));
    0x000377e4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000377e6 beq.w 0x37ca8                                     |         goto label_57;
                                                                 |     }
    0x000377ea ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x000377ec lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
                                                                 |     if (r0 < r3) {
    0x000377ee bmi.w 0x37ca8                                     |         goto label_57;
                                                                 |     }
                                                                 | label_35:
    0x000377f2 ldrsb.w r0, [sp, 0xa4]                            |     r0 = var_a4h;
    0x000377f6 b 0x37750                                         |     goto label_3;
                                                                 | label_64:
    0x000377f8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000377fa ldr r1, [sp, 0x80]                                |     r1 = var_80h;
    0x000377fc ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000377fe orrs r1, r3                                       |     r1 |= r3;
    0x00037800 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00037802 ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x00037804 str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00037806 orrs r2, r3                                       |     r2 |= r3;
    0x00037808 str r2, [sp, 0x84]                                |     var_84h = r2;
                                                                 | label_19:
    0x0003780a ldr.w sl, [pc, 0x4cc]                             |     sl = *(0x00037cd8);
    0x0003780e movs r5, 0                                        |     r5 = 0;
    0x00037810 ldr.w r3, [pc, 0x4c8]                             |     r3 = *(0x00037cdc);
    0x00037814 ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x00037816 add sl, pc                                        |     sl += pc;
    0x00037818 ldr.w sb, [sp, 0x10]                              |     sb = var_10h;
    0x0003781c add r3, pc                                        |     r3 += pc;
    0x0003781e str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [var_28h]");
    0x00037822 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037824 ldr.w sl, [sp, 0x20]                              |     sl = var_20h;
    0x00037828 b 0x37858                                         |     goto label_5;
                                                                 | label_4:
    0x0003782a mov r1, r3                                        |     r1 = r3;
    0x0003782c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0003782e ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00037830 add.w r0, r3, 0x1e8                               |     r0 = r3 + 0x1e8;
    0x00037834 bl 0x29998                                        |     r0 = fcn_00029998 (r0, r1);
    0x00037838 orrs.w ip, r0, r1                                 |     
    0x0003783c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (ip == r0) {
    0x0003783e beq 0x378a4                                       |         goto label_76;
                                                                 |     }
    0x00037840 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x00037842 bic.w r0, r0, r3                                  |     r0 = BIT_MASK (r0, r3);
    0x00037846 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00037848 bic.w r1, r1, r3                                  |     r1 = BIT_MASK (r1, r3);
    0x0003784c orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 == r1) {
    0x0003784e beq 0x3787c                                       |         goto label_8;
                                                                 |     }
                                                                 |     do {
                                                                 | label_7:
    0x00037850 adds r5, 1                                        |         r5++;
    0x00037852 adds r7, 0x10                                     |         r7 += 0x10;
    0x00037854 cmp sb, r5                                        |         
                                                                 |         if (sb <= r5) {
    0x00037856 ble 0x3789e                                       |             goto label_77;
                                                                 |         }
                                                                 | label_5:
    0x00037858 rsb.w r8, r5, 0x20                                |         r8 = 0x20 - r5;
    0x0003785c lsr.w r4, sl, r5                                  |         r4 = sl >> r5;
    0x00037860 lsl.w r3, fp, r8                                  |         r3 = fp << r8;
    0x00037864 sub.w r6, r5, 0x20                                |         r6 = r5 - 0x20;
    0x00037868 orrs r4, r3                                       |         r4 |= r3;
    0x0003786a lsr.w r3, fp, r6                                  |         r3 = fp >> r6;
    0x0003786e orrs r4, r3                                       |         r4 |= r3;
    0x00037870 ands r4, r4, 1                                    |         r4 &= 1;
    0x00037874 bne 0x37850                                       |         
                                                                 |     } while (r4 != r4);
    0x00037876 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x00037878 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003787a bne 0x3782a                                       |         goto label_4;
                                                                 |     }
                                                                 | label_8:
    0x0003787c movs r2, 1                                        |     r2 = 1;
    0x0003787e adds r7, 0x10                                     |     r7 += 0x10;
    0x00037880 lsl.w r3, r2, r6                                  |     r3 = r2 << r6;
    0x00037884 lsr.w r8, r2, r8                                  |     r8 = r2 >> r8;
    0x00037888 orr.w r3, r3, r8                                  |     r3 |= r8;
    0x0003788c orr.w fp, r3, fp                                  |     
    0x00037890 lsl.w r3, r2, r5                                  |     r3 = r2 << r5;
    0x00037894 adds r5, 1                                        |     r5++;
    0x00037896 cmp sb, r5                                        |     
    0x00037898 orr.w sl, r3, sl                                  |     sl = r3 | sl;
                                                                 |     if (sb > r5) {
    0x0003789c bgt 0x37858                                       |         goto label_5;
                                                                 |     }
                                                                 | label_77:
    0x0003789e str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [var_20h]");
    0x000378a2 b 0x3755a                                         |     goto label_6;
                                                                 | label_76:
    0x000378a4 mov r1, r3                                        |     r1 = r3;
    0x000378a6 mov.w r3, 1                                       |     r3 = 1;
    0x000378aa strh.w r3, [sp, 0xbc]                             |     var_bch = r3;
    0x000378ae add r0, sp, 0xa8                                  |     r0 += var_a8h;
    0x000378b0 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000378b2 str r4, [sp, 0xc0]                                |     var_c0h = r4;
    0x000378b4 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x000378b6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000378b8 str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x000378ba bl 0x301c4                                        |     fcn_000301c4 (r0, r1);
    0x000378be ldrh.w r3, [sp, 0xbc]                             |     r3 = var_bch;
    0x000378c2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000378c4 beq 0x37850                                       |         goto label_7;
                                                                 |     }
    0x000378c6 b 0x3787c                                         |     goto label_8;
                                                                 | label_65:
    0x000378c8 movs r3, 1                                        |     r3 = 1;
    0x000378ca movs r2, 0                                        |     r2 = 0;
    0x000378cc str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000378ce str r2, [sp, 0x28]                                |     var_28h = r2;
    0x000378d0 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x000378d2 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_31:
    0x000378d4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000378d6 movs r2, 1                                        |     r2 = 1;
    0x000378d8 ldr.w sl, [pc, 0x404]                             |     sl = *(0x00037ce0);
    0x000378dc mov.w sb, 0                                       |     sb = 0;
    0x000378e0 str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x000378e4 sub.w r1, r3, 0x20                                |     r1 = r3 - 0x20;
    0x000378e8 str.w sb, [sp, 0x88]                              |     __asm ("str.w sb, [var_88h]");
    0x000378ec lsl.w r0, r2, r1                                  |     r0 = r2 << r1;
    0x000378f0 rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x000378f4 lsr.w r1, r2, r1                                  |     r1 = r2 >> r1;
    0x000378f8 lsl.w r3, r2, r3                                  |     r3 = r2 << r3;
    0x000378fc str.w sb, [sp, 0x70]                              |     __asm ("str.w sb, [var_70h]");
    0x00037900 orrs r1, r0                                       |     r1 |= r0;
    0x00037902 add sl, pc                                        |     sl += pc;
    0x00037904 str r1, [sp, 0x94]                                |     var_94h = r1;
    0x00037906 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00037908 b 0x3793e                                         |     goto label_78;
                                                                 | label_10:
    0x0003790a ldrh r3, [r3, 0x2a]                               |     r3 = *((r3 + 0x2a));
    0x0003790c cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x0003790e bgt 0x37946                                       |         goto label_79;
                                                                 |     }
    0x00037910 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037912 ldr r4, [sp, 0x58]                                |     r4 = var_58h;
    0x00037914 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00037916 ldr.w r0, [r3, sb, lsl 2]                         |     offset_1 = sb << 2;
                                                                 |     r0 = *((r3 + offset_1));
    0x0003791a add.w r3, r3, sb, lsl 2                           |     r3 += (sb << 2);
    0x0003791e ldrh r1, [r0, 0xc]                                |     r1 = *((r0 + 0xc));
    0x00037920 tst r4, r1                                        |     
                                                                 |     if ((r4 & r1) == 0) {
    0x00037922 beq.w 0x37b64                                     |         goto label_80;
                                                                 |     }
    0x00037926 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00037928 tst.w r1, 0x180                                   |     
    0x0003792c it ne                                             |     
                                                                 |     if ((r1 & 0x180) == 0) {
    0x0003792e movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00037930 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_17:
    0x00037932 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00037934 add.w sb, sb, 1                                   |     sb++;
    0x00037938 cmp r3, sb                                        |     
                                                                 |     if (r3 <= sb) {
    0x0003793a ble.w 0x376c0                                     |         goto label_9;
                                                                 |     }
                                                                 | label_78:
    0x0003793e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037940 ldrh r2, [r3, 0x18]                               |     r2 = *((r3 + 0x18));
    0x00037942 cmp r2, sb                                        |     
                                                                 |     if (r2 > sb) {
    0x00037944 bgt 0x3790a                                       |         goto label_10;
                                                                 |     }
                                                                 | label_79:
    0x00037946 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00037948 subs r3, 0                                        |     
    0x0003794a it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0003794c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003794e str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_22:
    0x00037950 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00037952 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037954 beq.w 0x37b9e                                     |         goto label_81;
                                                                 |     }
                                                                 | label_24:
    0x00037958 ldr r1, [r0, 0x1c]                                |     r1 = *((r0 + 0x1c));
    0x0003795a ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0003795c ldrb.w r1, [r1, sb]                               |     r1 = *((r1 + sb));
    0x00037960 ldrsh.w r3, [r3, sb, lsl 1]                       |     offset_2 = sb << 1;
                                                                 |     r3 = *((r3 + offset_2));
    0x00037964 and r1, r1, 1                                     |     r1 &= 1;
    0x00037968 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x0003796a ldr r1, [r0, 0xc]                                 |     r1 = *((r0 + 0xc));
    0x0003796c ldrsh.w r0, [r1, 0x28]                            |     r0 = *((r1 + 0x28));
    0x00037970 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00037972 beq.w 0x37bb0                                     |         goto label_82;
                                                                 |     }
    0x00037976 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00037978 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r0 != 0) {
    0x0003797a cbz r0, 0x3799c                                   |         
    0x0003797c cmp r3, 0                                         |         
    0x0003797e mov r0, r3                                        |         r0 = r3;
                                                                 |         if (r3 < 0) {
    0x00037980 blt.w 0x37bb8                                     |             goto label_83;
                                                                 |         }
    0x00037984 cmp r2, sb                                        |         
                                                                 |         if (r2 > sb) {
    0x00037986 bgt 0x3799c                                       |             goto label_25;
                                                                 |         }
    0x00037988 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x0003798a add.w r2, r0, r0, lsl 2                           |         r2 = r0 + (r0 << 2);
    0x0003798e add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00037992 ldrb r3, [r3, 0xc]                                |         r3 = *((r3 + 0xc));
    0x00037994 subs r3, 0                                        |         
    0x00037996 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x00037998 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0003799a str r3, [sp, 0x38]                                |         var_38h = r3;
                                                                 |     }
                                                                 | label_25:
    0x0003799c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003799e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000379a0 beq.w 0x376b0                                     |         goto label_11;
                                                                 |     }
    0x000379a4 lsl.w r3, sb, 2                                   |     r3 = sb << 2;
    0x000379a8 str.w sb, [sp, 0x30]                              |     __asm ("str.w sb, [var_30h]");
    0x000379ac ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x000379ae movs r4, 0                                        |     r4 = 0;
    0x000379b0 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x000379b4 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_69:
    0x000379b6 rsb.w r8, r4, 0x20                                |     r8 = 0x20 - r4;
    0x000379ba lsr.w r3, sb, r4                                  |     r3 = sb >> r4;
    0x000379be lsl.w r2, fp, r8                                  |     r2 = fp << r8;
    0x000379c2 sub.w r6, r4, 0x20                                |     r6 = r4 - 0x20;
    0x000379c6 orrs r3, r2                                       |     r3 |= r2;
    0x000379c8 lsr.w r2, fp, r6                                  |     r2 = fp >> r6;
    0x000379cc orrs r3, r2                                       |     r3 |= r2;
    0x000379ce lsls r5, r3, 0x1f                                 |     r5 = r3 << 0x1f;
                                                                 |     if (r5 < r3) {
    0x000379d0 bmi.w 0x37694                                     |         goto label_12;
                                                                 |     }
    0x000379d4 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x000379d6 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 != 0) {
    0x000379d8 cbnz r1, 0x379ec                                  |         goto label_84;
                                                                 |     }
    0x000379da b 0x37694                                         |     goto label_12;
                                                                 | label_13:
    0x000379dc lsls r0, r2, 0xd                                  |     r0 = r2 << 0xd;
    0x000379de itet mi                                           |     
                                                                 |     if (r0 >= r2) {
    0x000379e0 ldrmi r3, [r3, 0x14]                              |         r3 = *((r3 + 0x14));
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x000379e2 ldrpl r3, [r3, 0xc]                               |         r3 = *((r3 + 0xc));
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x000379e4 ldrmi r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
    0x000379e6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000379e8 beq.w 0x37694                                     |         goto label_12;
                                                                 |     }
                                                                 | label_84:
    0x000379ec ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000379ee tst.w r2, 0x41000                                 |     
                                                                 |     if ((r2 & 0x41000) != 0) {
    0x000379f2 bne 0x379dc                                       |         goto label_13;
                                                                 |     }
    0x000379f4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000379f6 subs r5, r2, 0                                    |     r5 = r2 - 0;
    0x000379f8 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000379fa it ne                                             |     
                                                                 |     if (r5 == r2) {
    0x000379fc movne r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x000379fe adds r2, 1                                        |     r2++;
                                                                 |     if (r2 < 1) {
    0x00037a00 blt.w 0x37b2a                                     |         goto label_85;
                                                                 |     }
    0x00037a04 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x00037a06 adds r2, 0x5a                                     |     r2 += 0x5a;
    0x00037a08 tst.w r2, 0xfd                                    |     
                                                                 |     if ((r2 & 0xfd) != 0) {
    0x00037a0c bne.w 0x37696                                     |         goto label_14;
                                                                 |     }
    0x00037a10 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x00037a12 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00037a14 cmp r2, r0                                        |     
                                                                 |     if (r2 != r0) {
    0x00037a16 bne.w 0x37696                                     |         goto label_14;
                                                                 |     }
    0x00037a1a ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00037a1e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00037a20 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00037a22 bne.w 0x37696                                     |         goto label_14;
                                                                 |     }
    0x00037a26 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037a28 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00037a2a beq 0x37a7c                                       |         goto label_86;
                                                                 |     }
                                                                 | label_21:
    0x00037a2c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00037a2e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00037a30 mov r0, r3                                        |     r0 = r3;
    0x00037a32 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00037a34 bl 0x2d47c                                        |     fcn_0002d47c (r0, r1);
    0x00037a38 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00037a3a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037a3c beq.w 0x37baa                                     |         goto label_87;
                                                                 |     }
                                                                 | label_26:
    0x00037a40 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00037a42 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00037a44 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00037a46 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00037a48 subs r0, 1                                        |     r0--;
    0x00037a4a ldr r1, [r3, r2]                                  |     r1 = *((r3 + r2));
    0x00037a4c subs r1, 1                                        |     r1--;
                                                                 | label_16:
    0x00037a4e ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00037a52 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00037a56 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00037a58 beq 0x37a78                                       |         goto label_88;
                                                                 |     }
                                                                 | label_15:
    0x00037a5a add r3, sl                                        |     r3 += sl;
    0x00037a5c add r2, sl                                        |     r2 += sl;
    0x00037a5e ldrb.w ip, [r3, 0x140]                            |     ip = *((r3 + 0x140));
    0x00037a62 ldrb.w r3, [r2, 0x140]                            |     r3 = *((r2 + 0x140));
    0x00037a66 cmp ip, r3                                        |     
                                                                 |     if (ip != r3) {
    0x00037a68 bne.w 0x37696                                     |         goto label_14;
                                                                 |     }
    0x00037a6c ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00037a70 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00037a74 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00037a76 bne 0x37a5a                                       |         goto label_15;
                                                                 |     }
                                                                 | label_88:
    0x00037a78 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00037a7a bne 0x37a4e                                       |         goto label_16;
                                                                 |     }
                                                                 | label_86:
    0x00037a7c ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00037a7e ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x00037a80 str r0, [sp, 0xc0]                                |     *((sp + 0xc0)) = r0;
                                                                 |     if (r3 != 0) {
    0x00037a82 cbz r3, 0x37a8c                                   |         
    0x00037a84 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00037a86 add.w r3, sb, 1                                   |         r3 = sb + 1;
    0x00037a8a strh r3, [r2, 0x1e]                               |         *((r2 + 0x1e)) = r3;
                                                                 |     }
    0x00037a8c ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00037a8e ldr r2, [sp, 0x6c]                                |     r2 = var_6ch_2;
    0x00037a90 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x00037a94 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
                                                                 |     if (r2 == 0) {
    0x00037a96 cbnz r2, 0x37ac8                                  |         
    0x00037a98 ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x00037a9a cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00037a9c bne.w 0x37bc4                                     |             goto label_89;
                                                                 |         }
    0x00037aa0 ldr r1, [sp, 0x4c]                                |         r1 = var_4ch;
    0x00037aa2 and r2, r3, 1                                     |         r2 = r3 & 1;
    0x00037aa6 cmp r2, r1                                        |         
    0x00037aa8 eor.w r0, r2, r1                                  |         r0 = r2 ^ r1;
    0x00037aac str r0, [sp, 0x88]                                |         var_88h = r0;
                                                                 |         if (r2 == r1) {
    0x00037aae beq.w 0x37bd6                                     |             goto label_90;
                                                                 |         }
    0x00037ab2 ldr r1, [sp, 0x98]                                |         r1 = var_98h;
    0x00037ab4 ldr r0, [sp, 0x90]                                |         r0 = var_90h;
    0x00037ab6 ldr r2, [r1]                                      |         r2 = *(r1);
    0x00037ab8 orrs r2, r0                                       |         r2 |= r0;
    0x00037aba ldr r0, [sp, 0x94]                                |         r0 = var_94h;
    0x00037abc str r2, [r1]                                      |         *(r1) = r2;
    0x00037abe ldr r2, [r1, 4]                                   |         r2 = *((r1 + 4));
    0x00037ac0 orrs r2, r0                                       |         r2 |= r0;
    0x00037ac2 str r2, [r1, 4]                                   |         *((r1 + 4)) = r2;
    0x00037ac4 movs r2, 1                                        |         r2 = 1;
    0x00037ac6 str r2, [sp, 0x70]                                |         var_70h = r2;
                                                                 |     }
                                                                 | label_27:
    0x00037ac8 lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
                                                                 |     if (r0 >= r3) {
    0x00037aca bpl 0x37ade                                       |         goto label_91;
                                                                 |     }
    0x00037acc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00037ace ldrh r3, [r2, 0x18]                               |     r3 = *((r2 + 0x18));
    0x00037ad0 cmp r3, sb                                        |     
                                                                 |     if (r3 != sb) {
    0x00037ad2 bne.w 0x376b0                                     |         goto label_11;
                                                                 |     }
    0x00037ad6 ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x00037ad8 orr r3, r3, 0x80000                               |     r3 |= 0x80000;
    0x00037adc str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
                                                                 | label_91:
    0x00037ade ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037ae0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00037ae2 adds r3, 1                                        |     r3++;
    0x00037ae4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00037ae6 it eq                                             |     
                                                                 |     if (r3 != 1) {
    0x00037ae8 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00037aea str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00037aec movs r3, 1                                        |     r3 = 1;
    0x00037aee lsl.w r6, r3, r6                                  |     r6 = r3 << r6;
    0x00037af2 lsr.w r8, r3, r8                                  |     r8 = r3 >> r8;
    0x00037af6 lsls r3, r4                                       |     r3 <<= r4;
    0x00037af8 orr.w r6, r6, r8                                  |     r6 |= r8;
    0x00037afc orrs r2, r3                                       |     r2 |= r3;
    0x00037afe orr.w fp, r6, fp                                  |     
    0x00037b02 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00037b04 b 0x37932                                         |     goto label_17;
                                                                 | label_70:
    0x00037b06 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00037b08 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037b0a beq.w 0x376d0                                     |         goto label_18;
                                                                 |     }
                                                                 | label_68:
    0x00037b0e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00037b10 ldr r1, [sp, 0x80]                                |     r1 = var_80h;
    0x00037b12 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00037b14 orrs r1, r3                                       |     r1 |= r3;
    0x00037b16 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00037b18 ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x00037b1a str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00037b1c orrs r2, r3                                       |     r2 |= r3;
    0x00037b1e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00037b20 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x00037b22 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00037b24 bne.w 0x3780a                                     |         goto label_19;
                                                                 |     }
    0x00037b28 b 0x3755a                                         |     goto label_6;
                                                                 | label_85:
    0x00037b2a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00037b2c ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00037b2e ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x00037b30 add.w r2, r2, r1, lsl 4                           |     r2 += (r1 << 4);
    0x00037b34 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
                                                                 |     if (r2 != 0) {
    0x00037b36 cbnz r2, 0x37b4a                                  |         goto label_92;
                                                                 |     }
    0x00037b38 b 0x37696                                         |     goto label_14;
                                                                 | label_20:
    0x00037b3a lsls r1, r1, 0xd                                  |     r1 <<= 0xd;
    0x00037b3c itet mi                                           |     
                                                                 |     if (r1 >= r1) {
    0x00037b3e ldrmi r2, [r2, 0x14]                              |         r2 = *((r2 + 0x14));
                                                                 |     }
                                                                 |     if (r1 < r1) {
    0x00037b40 ldrpl r2, [r2, 0xc]                               |         r2 = *((r2 + 0xc));
                                                                 |     }
                                                                 |     if (r1 >= r1) {
    0x00037b42 ldrmi r2, [r2, 8]                                 |         r2 = *((r2 + 8));
                                                                 |     }
    0x00037b44 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00037b46 beq.w 0x37696                                     |         goto label_14;
                                                                 |     }
                                                                 | label_92:
    0x00037b4a ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00037b4c ands r0, r1, 0x41000                              |     r0 = r1 & 0x41000;
                                                                 |     if (r0 != r1) {
    0x00037b50 bne 0x37b3a                                       |         goto label_20;
                                                                 |     }
    0x00037b52 mov r1, r3                                        |     r1 = r3;
    0x00037b54 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00037b56 bl 0x35ca8                                        |     r0 = fcn_00035ca8 (r0, r1, r2, r3);
    0x00037b5a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00037b5c bne.w 0x37696                                     |         goto label_14;
                                                                 |     }
    0x00037b60 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00037b62 b 0x37a2c                                         |     goto label_21;
                                                                 | label_80:
    0x00037b64 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00037b66 subs r4, 0                                        |     
    0x00037b68 it ne                                             |     
                                                                 |     if (r4 == 0) {
    0x00037b6a movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x00037b6c lsls r6, r1, 0x1f                                 |     r6 = r1 << 0x1f;
    0x00037b6e str r4, [sp, 0x14]                                |     var_14h = r4;
                                                                 |     if (r6 >= r1) {
    0x00037b70 bpl.w 0x37950                                     |         goto label_22;
                                                                 |     }
    0x00037b74 add.w r1, sb, 1                                   |     r1 = sb + 1;
    0x00037b78 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00037b7a cmp r2, r1                                        |     
                                                                 |     if (r2 > r1) {
    0x00037b7c bgt 0x37b88                                       |         goto label_93;
                                                                 |     }
    0x00037b7e b 0x37950                                         |     goto label_22;
                                                                 | label_23:
    0x00037b80 adds r1, 1                                        |     r1++;
    0x00037b82 cmp r2, r1                                        |     
                                                                 |     if (r2 == r1) {
    0x00037b84 beq.w 0x37950                                     |         goto label_22;
                                                                 |     }
                                                                 | label_93:
    0x00037b88 ldr r0, [r3, 4]!                                  |     r0 = *((r3 += 4));
    0x00037b8c ldr r0, [r0]                                      |     r0 = *(r0);
    0x00037b8e cmp r0, r4                                        |     
                                                                 |     if (r0 != r4) {
    0x00037b90 bne 0x37b80                                       |         goto label_23;
                                                                 |     }
    0x00037b92 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00037b94 movs r3, 0                                        |     r3 = 0;
    0x00037b96 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00037b98 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00037b9a bne.w 0x37958                                     |         goto label_24;
                                                                 |     }
                                                                 | label_81:
    0x00037b9e mov.w r3, -1                                      |     r3 = -1;
    0x00037ba2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037ba4 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00037ba6 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00037ba8 b 0x3799c                                         |     goto label_25;
                                                                 | label_87:
    0x00037baa ldr r3, [r3]                                      |     r3 = *(r3);
    0x00037bac ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x00037bae b 0x37a40                                         |     goto label_26;
                                                                 | label_82:
    0x00037bb0 mov.w r3, -1                                      |     r3 = -1;
    0x00037bb4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037bb6 b 0x3799c                                         |     goto label_25;
                                                                 | label_83:
    0x00037bb8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037bba adds r3, 2                                        |     r3 += 2;
    0x00037bbc it ne                                             |     
                                                                 |     if (r3 == 2) {
    0x00037bbe movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00037bc0 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00037bc2 b 0x3799c                                         |     goto label_25;
                                                                 | label_89:
    0x00037bc4 ldr r2, [sp, 0x88]                                |     r2 = var_88h;
    0x00037bc6 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00037bc8 eors r1, r2                                       |     r1 ^= r2;
    0x00037bca and r2, r3, 1                                     |     r2 = r3 & 1;
    0x00037bce cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00037bd0 bne.w 0x376b0                                     |         goto label_11;
                                                                 |     }
    0x00037bd4 b 0x37ac8                                         |     goto label_27;
                                                                 | label_90:
    0x00037bd6 movs r2, 1                                        |     r2 = 1;
    0x00037bd8 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x00037bda b 0x37ac8                                         |     goto label_27;
                                                                 | label_75:
    0x00037bdc str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00037bde ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00037be0 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00037be2 ldr r4, [r3]                                      |     r4 = *(r3);
    0x00037be4 mov r0, r4                                        |     r0 = r4;
    0x00037be6 bl 0x2d47c                                        |     fcn_0002d47c (r0, r1);
    0x00037bea ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00037bec mov r6, r0                                        |     r6 = r0;
    0x00037bee ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00037bf0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037bf2 beq 0x37ca2                                       |         goto label_94;
                                                                 |     }
                                                                 | label_34:
    0x00037bf4 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00037bf6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037bf8 ldr.w ip, [r2, 4]                                 |     ip = *((r2 + 4));
    0x00037bfc ldrd r1, r0, [r2, 0xc]                            |     __asm ("ldrd r1, r0, [r2, 0xc]");
    0x00037c00 tst.w ip, 0x200                                   |     
    0x00037c04 itet ne                                           |     
                                                                 |     if ((ip & 0x200) == 0) {
    0x00037c06 movne r2, r1                                      |         r2 = r1;
                                                                 |     }
                                                                 |     if ((ip & 0x200) != 0) {
    0x00037c08 moveq r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if ((ip & 0x200) == 0) {
    0x00037c0a movne r1, r0                                      |         r1 = r0;
                                                                 |     }
    0x00037c0c mov r0, r4                                        |     r0 = r4;
    0x00037c0e bl 0x2d56c                                        |     fcn_0002d56c (r0, r1, r2);
    0x00037c12 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037c14 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037c16 beq.w 0x3763e                                     |         goto label_1;
                                                                 |     }
    0x00037c1a ldr r4, [r6]                                      |     r4 = *(r6);
    0x00037c1c ldr r0, [r0]                                      |     r0 = *(r0);
    0x00037c1e ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00037c20 subs r4, 1                                        |     r4--;
    0x00037c22 subs r0, 1                                        |     r0--;
                                                                 | label_29:
    0x00037c24 ldrb r2, [r4, 1]!                                 |     r2 = *((r4 += 1));
    0x00037c28 ldrb r1, [r0, 1]!                                 |     r1 = *((r0 += 1));
    0x00037c2c cmp r2, r1                                        |     
                                                                 |     if (r2 == r1) {
    0x00037c2e beq 0x37c4e                                       |         goto label_95;
                                                                 |     }
                                                                 | label_28:
    0x00037c30 add r2, r6                                        |     r2 += r6;
    0x00037c32 add r1, r6                                        |     r1 += r6;
    0x00037c34 ldrb.w ip, [r2, 0x140]                            |     ip = *((r2 + 0x140));
    0x00037c38 ldrb.w r2, [r1, 0x140]                            |     r2 = *((r1 + 0x140));
    0x00037c3c cmp ip, r2                                        |     
                                                                 |     if (ip != r2) {
    0x00037c3e bne.w 0x3763e                                     |         goto label_1;
                                                                 |     }
    0x00037c42 ldrb r2, [r4, 1]!                                 |     r2 = *((r4 += 1));
    0x00037c46 ldrb r1, [r0, 1]!                                 |     r1 = *((r0 += 1));
    0x00037c4a cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x00037c4c bne 0x37c30                                       |         goto label_28;
                                                                 |     }
                                                                 | label_95:
    0x00037c4e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00037c50 bne 0x37c24                                       |         goto label_29;
                                                                 |     }
    0x00037c52 b 0x377b4                                         |     goto label_30;
                                                                 | label_66:
    0x00037c54 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00037c56 bne.w 0x378d4                                     |         goto label_31;
                                                                 |     }
    0x00037c5a b 0x376d0                                         |     goto label_18;
                                                                 | label_61:
    0x00037c5c lsls r3, r2, 0x13                                 |     r3 = r2 << 0x13;
                                                                 |     if (r3 >= r2) {
    0x00037c5e bpl.w 0x37654                                     |         goto label_32;
                                                                 |     }
    0x00037c62 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00037c64 ldr r1, [sp, 0x80]                                |     r1 = var_80h;
    0x00037c66 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00037c68 orrs r1, r3                                       |     r1 |= r3;
    0x00037c6a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00037c6c ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x00037c6e str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00037c70 orrs r2, r3                                       |     r2 |= r3;
    0x00037c72 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x00037c74 b 0x3755a                                         |     goto label_6;
                                                                 | label_67:
    0x00037c76 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037c78 beq.w 0x376d0                                     |         goto label_18;
                                                                 |     }
    0x00037c7c str r1, [sp, 0x38]                                |     var_38h = r1;
    0x00037c7e b 0x378d4                                         |     goto label_31;
                                                                 | label_74:
    0x00037c80 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00037c82 ldrh r0, [r1, 0x28]                               |     r0 = *((r1 + 0x28));
    0x00037c84 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037c86 beq.w 0x3763e                                     |         goto label_1;
                                                                 |     }
    0x00037c8a ldr r1, [r1, 0x30]                                |     r1 = *((r1 + 0x30));
    0x00037c8c subs r1, 4                                        |     r1 -= 4;
    0x00037c8e b 0x37c98                                         |     goto label_96;
                                                                 | label_33:
    0x00037c90 adds r6, 1                                        |     r6++;
    0x00037c92 cmp r6, r0                                        |     
                                                                 |     if (r6 == r0) {
    0x00037c94 beq.w 0x3763e                                     |         goto label_1;
                                                                 |     }
                                                                 | label_96:
    0x00037c98 ldr r4, [r1, 4]!                                  |     r4 = *((r1 += 4));
    0x00037c9c cmp r4, r2                                        |     
                                                                 |     if (r4 != r2) {
    0x00037c9e bne 0x37c90                                       |         goto label_33;
                                                                 |     }
    0x00037ca0 b 0x377b4                                         |     goto label_30;
                                                                 | label_94:
    0x00037ca2 ldr r1, [r4]                                      |     r1 = *(r4);
    0x00037ca4 ldr r6, [r1, 8]                                   |     r6 = *((r1 + 8));
    0x00037ca6 b 0x37bf4                                         |     goto label_34;
                                                                 | label_57:
    0x00037ca8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00037caa ldrd r2, r1, [sp, 0x78]                           |     __asm ("ldrd r2, r1, [var_7ch]");
    0x00037cae cmp fp, r1                                        |     
    0x00037cb0 it eq                                             |     
                                                                 |     if (fp != r1) {
    0x00037cb2 cmpeq r3, r2                                      |         __asm ("cmpeq r3, r2");
                                                                 |         goto label_97;
                                                                 |     }
                                                                 |     if (fp == r1) {
                                                                 | label_97:
    0x00037cb4 beq.w 0x377f2                                     |         goto label_35;
                                                                 |     }
                                                                 | label_58:
    0x00037cb8 mov.w r0, -1                                      |     r0 = -1;
    0x00037cbc b 0x37750                                         |     goto label_3;
                                                                 | label_72:
    0x00037cbe sxtb r0, r3                                       |     r0 = (int32_t) r3;
    0x00037cc0 b 0x37750                                         |     goto label_3;
                                                                 | label_73:
    0x00037cc2 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x00037cc6 nop                                               |     
    0x00037cc8 str r2, [r1, 0x7c]                                |     *((r1 + 0x7c)) = r2;
    0x00037cca movs r1, r1                                       |     
    0x00037ccc lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00037cce movs r0, r0                                       |     
                                                                 |     if (r0 >= r0) {
    0x00037cd0 blt 0x37d58                                       |         
    0x00037cd2 movs r7, r0                                       |         r7 = r0;
    0x00037cd4 str r0, [r7, 0x50]                                |         *((r7 + 0x50)) = r0;
    0x00037cd6 movs r1, r1                                       |         
    0x00037cd8 strh r7, [r3, 0x24]                               |         *((r3 + 0x24)) = r7;
    0x00037cda invalid                                           |         
                                                                 |     }
    0x00037d58 str r0, [sp, 0x68]                                |     var_68h = r0;
    0x00037d5a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00037d5c beq.w 0x3834a                                     |         goto label_98;
                                                                 |     }
    0x00037d60 lsls r5, r5, 5                                    |     r5 <<= 5;
    0x00037d62 lsls r6, r6, 2                                    |     r6 <<= 2;
    0x00037d64 adds r3, r0, r5                                   |     r3 = r0 + r5;
    0x00037d66 movs r2, 0x20                                     |     r2 = 0x20;
    0x00037d68 movs r1, 0                                        |     r1 = 0;
    0x00037d6a mov r0, r3                                        |     r0 = r3;
    0x00037d6c mov r8, r3                                        |     r8 = r3;
    0x00037d6e str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00037d70 str r6, [sp, 0x5c]                                |     var_5ch = r6;
    0x00037d72 add r5, r8                                        |     r5 += r8;
    0x00037d74 blx 0x8264                                        |     fcn_00008264 ();
    0x00037d78 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00037d7a mov r3, r7                                        |     r3 = r7;
    0x00037d7c lsls r0, r2, 1                                    |     r0 = r2 << 1;
    0x00037d7e add.w r1, r7, r2, lsl 6                           |     r1 = r7 + (r2 << 6);
    0x00037d82 mov r2, r5                                        |     r2 = r5;
                                                                 |     do {
    0x00037d84 str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x00037d86 adds r3, 0x20                                     |         r3 += 0x20;
    0x00037d88 cmp r3, r1                                        |         
    0x00037d8a add r2, r6                                        |         r2 += r6;
    0x00037d8c bne 0x37d84                                       |         
                                                                 |     } while (r3 != r1);
    0x00037d8e ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00037d90 mla r3, r0, r3, r5                                |     __asm ("mla r3, r0, r3, r5");
    0x00037d94 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00037d96 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00037d98 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00037d9a bne.w 0x3826e                                     |         goto label_99;
                                                                 |     }
    0x00037d9e ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00037da0 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00037da2 ldr.w r3, [r3, 0x84]                              |     r3 = *((r3 + 0x84));
    0x00037da6 cmp r3, 0x30                                      |     
    0x00037da8 it hs                                             |     
                                                                 |     if (r3 < 0x30) {
    0x00037daa movhs r3, 0x30                                    |         r3 = 0x30;
                                                                 |     }
    0x00037dac strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00037dae ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00037db0 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_48:
    0x00037db2 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00037db4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037db6 beq.w 0x38344                                     |         goto label_100;
                                                                 |     }
    0x00037dba ldrh.w r3, [sp, 0x54]                             |     r3 = var_54h;
    0x00037dbe movs r2, 0                                        |     r2 = 0;
    0x00037dc0 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00037dc2 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00037dc4 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00037dc6 subs r3, 0xa                                      |     r3 -= 0xa;
    0x00037dc8 sxth r3, r3                                       |     __asm ("sxth r3, r3");
    0x00037dca str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00037dcc str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00037dce str r3, [sp, 0x6c]                                |     var_6ch_2 = r3;
    0x00037dd0 movs r3, 1                                        |     r3 = 1;
    0x00037dd2 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00037dd4 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00037dd6 str r2, [sp, 0x38]                                |     var_38h = r2;
                                                                 | label_43:
    0x00037dd8 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00037dda cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037ddc beq.w 0x37fb4                                     |         goto label_101;
                                                                 |     }
    0x00037de0 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00037de2 mov.w sl, 0                                       |     sl = 0;
    0x00037de6 str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
    0x00037dea lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00037dec str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037dee ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00037df0 add.w sb, r3, 0x20                                |     sb = r3 + 0x20;
                                                                 | label_42:
    0x00037df4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00037df6 ldr r4, [r3, 0x3c]                                |     r4 = *((r3 + 0x3c));
    0x00037df8 sub.w r3, sb, 0x20                                |     r3 = sb - 0x20;
    0x00037dfc str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r4 != 0) {
    0x00037dfe cbnz r4, 0x37e0a                                  |         goto label_102;
                                                                 |     }
    0x00037e00 b 0x37f9e                                         |     goto label_103;
                                                                 |     do {
                                                                 | label_36:
    0x00037e02 ldr r4, [r4, 0x34]                                |         r4 = *((r4 + 0x34));
    0x00037e04 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00037e06 beq.w 0x37f9e                                     |             goto label_103;
                                                                 |         }
                                                                 | label_102:
    0x00037e0a vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00037e0e ldrsb r3, [sb, -0xa]                              |         r3 = *((sb - 0xa));
    0x00037e12 vstr d16, [sp, 0x70]                              |         __asm ("vstr d16, [sp, 0x70]");
    0x00037e16 ldrd r6, r7, [sb, -0x20]                          |         __asm ("ldrd r6, r7, [sb, -0x20]");
    0x00037e1a ldr r2, [r4]                                      |         r2 = *(r4);
    0x00037e1c ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x00037e1e bic.w r2, r2, r6                                  |         r2 = BIT_MASK (r2, r6);
    0x00037e22 bic.w r1, r1, r7                                  |         r1 = BIT_MASK (r1, r7);
    0x00037e26 orrs r2, r1                                       |         r2 |= r1;
    0x00037e28 bne 0x37e02                                       |         
                                                                 |     } while (r2 != r1);
    0x00037e2a ldrd r0, r1, [r4, 8]                              |     __asm ("ldrd r0, r1, [r4, 8]");
    0x00037e2e and.w r5, r6, r0                                  |     r5 = r6 & r0;
    0x00037e32 and.w r2, r7, r1                                  |     r2 = r7 & r1;
    0x00037e36 orrs r2, r5                                       |     r2 |= r5;
                                                                 |     if (r2 != r5) {
    0x00037e38 bne 0x37e02                                       |         goto label_36;
                                                                 |     }
    0x00037e3a ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00037e3c ldrsh r8, [sb, -0x10]                             |     r8 = *((sb - 0x10));
    0x00037e40 lsls r5, r2, 0x11                                 |     r5 = r2 << 0x11;
                                                                 |     if (r5 >= r2) {
    0x00037e42 bpl 0x37e4a                                       |         goto label_104;
                                                                 |     }
    0x00037e44 cmp.w r8, 2                                       |     
                                                                 |     if (r8 <= 2) {
    0x00037e48 ble 0x37e02                                       |         goto label_36;
                                                                 |     }
                                                                 | label_104:
    0x00037e4a orrs r7, r1                                       |     r7 |= r1;
    0x00037e4c ldrh r1, [r4, 0x14]                               |     r1 = *((r4 + 0x14));
    0x00037e4e uxth.w r8, r8                                     |     r8 = (int16_t) r8;
    0x00037e52 orrs r6, r0                                       |     r6 |= r0;
    0x00037e54 ldrsh.w r0, [r4, 0x12]                            |     r0 = *((r4 + 0x12));
    0x00037e58 add r1, r8                                        |     r1 += r8;
    0x00037e5a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00037e5c sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00037e5e bl 0xef34                                         |     fcn_0000ef34 (r0, r1);
    0x00037e62 ldrsh r1, [sb, -0xc]                              |     r1 = *((sb - 0xc));
    0x00037e66 bl 0xef34                                         |     fcn_0000ef34 (r0, r1);
    0x00037e6a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00037e6c mov fp, r0                                        |     
    0x00037e6e ldrh r2, [r4, 0x16]                               |     r2 = *((r4 + 0x16));
    0x00037e70 cmp r3, 0                                         |     
    0x00037e72 add r8, r2                                        |     r8 += r2;
    0x00037e74 sxth.w r8, r8                                     |     __asm ("sxth.w r8, r8");
                                                                 |     if (r3 < 0) {
    0x00037e78 blt 0x37f6a                                       |         goto label_105;
                                                                 |     }
    0x00037e7a ldrd r0, r1, [sb, -0x18]                          |     __asm ("ldrd r0, r1, [sb, -0x18]");
    0x00037e7e strd r0, r1, [sp, 0x70]                           |     __asm ("strd r0, r1, [var_74h]");
                                                                 | label_40:
    0x00037e82 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00037e84 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00037e86 ble 0x37f88                                       |         goto label_106;
                                                                 |     }
    0x00037e88 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00037e8a sxth r2, r3                                       |     __asm ("sxth r2, r3");
    0x00037e8c ldrsh.w r5, [r1, r2, lsl 1]                       |     offset_3 = r2 << 1;
                                                                 |     r5 = *((r1 + offset_3));
    0x00037e90 add.w r2, r1, r2, lsl 1                           |     r2 = r1 + (r2 << 1);
    0x00037e94 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00037e96 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00037e98 beq.w 0x3801e                                     |         goto label_107;
                                                                 |     }
                                                                 | label_46:
    0x00037e9c mov r0, fp                                        |     r0 = fp;
    0x00037e9e mov r1, r5                                        |     r1 = r5;
    0x00037ea0 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00037ea2 bl 0xef34                                         |     fcn_0000ef34 (r0, r1);
    0x00037ea6 adds r0, 5                                        |     r0 += 5;
    0x00037ea8 mov ip, fp                                        |     
    0x00037eaa ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00037eac sxth.w fp, r0                                     |     __asm ("sxth.w fp, r0");
    0x00037eb0 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00037eb4 beq 0x37f96                                       |         goto label_44;
                                                                 |     }
                                                                 | label_41:
    0x00037eb6 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x00037eb8 movs r0, 0                                        |     r0 = 0;
    0x00037eba b 0x37ec6                                         |     
                                                                 |     while (r7 != r2) {
                                                                 | label_37:
    0x00037ebc adds r0, 1                                        |         r0++;
    0x00037ebe adds r5, 0x20                                     |         r5 += 0x20;
    0x00037ec0 cmp r0, sl                                        |         
                                                                 |         if (r0 == sl) {
    0x00037ec2 beq.w 0x37fcc                                     |             goto label_108;
                                                                 |         }
    0x00037ec6 ldrd r1, r2, [r5]                                 |         __asm ("ldrd r1, r2, [r5]");
    0x00037eca cmp r7, r2                                        |         
    0x00037ecc it eq                                             |         
                                                                 |         if (r7 == r2) {
    0x00037ece cmpeq r6, r1                                      |             __asm ("cmpeq r6, r1");
                                                                 |         }
    0x00037ed0 bne 0x37ebc                                       |         
                                                                 |     }
    0x00037ed2 ldrb r2, [r5, 0x16]                               |     r2 = *((r5 + 0x16));
    0x00037ed4 eors r2, r3                                       |     r2 ^= r3;
    0x00037ed6 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
                                                                 |     if (r2 < r2) {
    0x00037ed8 bmi 0x37ebc                                       |         goto label_37;
                                                                 |     }
    0x00037eda ldrsh.w r2, [r5, 0x12]                            |     r2 = *((r5 + 0x12));
    0x00037ede cmp fp, r2                                        |     
                                                                 |     if (fp > r2) {
    0x00037ee0 bgt 0x37e02                                       |         goto label_36;
                                                                 |     }
                                                                 |     if (fp == r2) {
    0x00037ee2 beq.w 0x38004                                     |         goto label_109;
                                                                 |     }
                                                                 | label_45:
    0x00037ee6 ldrd r1, r2, [sb, -0x20]                          |     __asm ("ldrd r1, r2, [sb, -0x20]");
    0x00037eea ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00037eec orrs r1, r0                                       |     r1 |= r0;
    0x00037eee ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00037ef0 str r1, [r5]                                      |     *(r5) = r1;
    0x00037ef2 orrs r2, r0                                       |     r2 |= r0;
    0x00037ef4 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00037ef6 str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x00037ef8 ldrd r6, r7, [sp, 0x70]                           |     __asm ("ldrd r6, r7, [var_74h]");
    0x00037efc ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00037efe strb r3, [r5, 0x16]                               |     *((r5 + 0x16)) = r3;
    0x00037f00 strd r6, r7, [r5, 8]                              |     __asm ("strd r6, r7, [r5, 8]");
    0x00037f04 ldr r1, [sb, -0x8]                                |     r1 = *((sb - 0x8));
    0x00037f08 strh.w r8, [r5, 0x10]                             |     *((r5 + 0x10)) = r8;
    0x00037f0c strh.w fp, [r5, 0x12]                             |     *((r5 + 0x12)) = fp;
    0x00037f10 strh.w ip, [r5, 0x14]                             |     *((r5 + 0x14)) = ip;
    0x00037f14 blx 0x7dcc                                        |     fcn_00007dcc ();
    0x00037f18 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00037f1a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00037f1c str r4, [r3, r2]                                  |     *((r3 + r2)) = r4;
    0x00037f1e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037f20 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x00037f22 bgt.w 0x37e02                                     |         goto label_36;
                                                                 |     }
    0x00037f24 add r7, sp, 0x1b8                                 |     r7 = sp + 0x1b8;
    0x00037f26 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00037f28 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00037f2a ldrsh.w r0, [r3, 0x12]                            |     r0 = *((r3 + 0x12));
    0x00037f2e adds r3, 0x20                                     |     r3 += 0x20;
    0x00037f30 ldrsh r6, [r3, -0x10]                             |     r6 = *((r3 - 0x10));
    0x00037f34 cmp r5, 1                                         |     
    0x00037f36 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00037f38 str r6, [sp, 0x3c]                                |     var_3ch = r6;
                                                                 |     if (r5 == 1) {
    0x00037f3a beq.w 0x3812a                                     |         goto label_110;
                                                                 |     }
    0x00037f3e movs r7, 0                                        |     r7 = 0;
    0x00037f40 movs r2, 1                                        |     r2 = 1;
    0x00037f42 b 0x37f54                                         |     
                                                                 |     while (r0 < r1) {
    0x00037f44 ldrsh.w r6, [r3, 0x14]                            |         r6 = *((r3 + 0x14));
                                                                 | label_39:
    0x00037f48 mov r0, r1                                        |         r0 = r1;
    0x00037f4a mov r7, r2                                        |         r7 = r2;
                                                                 | label_38:
    0x00037f4c adds r2, 1                                        |         r2++;
    0x00037f4e adds r3, 0x20                                     |         r3 += 0x20;
    0x00037f50 cmp r5, r2                                        |         
                                                                 |         if (r5 == r2) {
    0x00037f52 beq 0x37ffc                                       |             goto label_111;
                                                                 |         }
    0x00037f54 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00037f58 cmp r0, r1                                        |         
    0x00037f5a blt 0x37f44                                       |         
                                                                 |     }
                                                                 |     if (r0 != r1) {
    0x00037f5c bne 0x37f4c                                       |         goto label_38;
                                                                 |     }
    0x00037f5e ldrsh.w ip, [r3, 0x14]                            |     ip = *((r3 + 0x14));
    0x00037f62 cmp r6, ip                                        |     
                                                                 |     if (r6 >= ip) {
    0x00037f64 bge 0x37f4c                                       |         goto label_38;
                                                                 |     }
    0x00037f66 mov r6, ip                                        |     r6 = ip;
    0x00037f68 b 0x37f48                                         |     goto label_39;
                                                                 | label_105:
    0x00037f6a ldrh.w r3, [sp, 0x38]                             |     r3 = var_38h;
    0x00037f6e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00037f70 str r4, [sp, 4]                                   |     var_4h_2 = r4;
    0x00037f72 str r3, [sp]                                      |     *(sp) = r3;
    0x00037f74 add r3, sp, 0x70                                  |     r3 += var_70h;
    0x00037f76 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00037f78 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00037f7a ldrh r3, [r0, 0x28]                               |     r3 = *((r0 + 0x28));
    0x00037f7c ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x00037f7e bl 0x374b0                                        |     r0 = void (*0x374b0)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
    0x00037f82 subs r3, r0, 0                                    |     r3 = r0 - 0;
                                                                 |     if (r3 >= r0) {
    0x00037f84 bge.w 0x37e82                                     |         goto label_40;
                                                                 |     }
                                                                 | label_106:
    0x00037f88 sub.w ip, fp, 2                                   |     
    0x00037f8c sxth.w ip, ip                                     |     __asm ("sxth.w ip, ip");
    0x00037f90 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00037f94 bne 0x37eb6                                       |         goto label_41;
                                                                 |     }
                                                                 | label_44:
    0x00037f96 mov r5, sl                                        |     r5 = sl;
    0x00037f98 add.w sl, sl, 1                                   |     sl++;
    0x00037f9c b 0x37ff4                                         |     goto label_112;
                                                                 | label_103:
    0x00037f9e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00037fa0 add.w sb, sb, 0x20                                |     sb += 0x20;
    0x00037fa4 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00037fa6 adds r3, 1                                        |     r3++;
    0x00037fa8 cmp r3, r2                                        |     
    0x00037faa str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 |     if (r3 != r2) {
    0x00037fac bne.w 0x37df4                                     |         goto label_42;
                                                                 |     }
    0x00037fb0 str.w sl, [sp, 0x30]                              |     __asm ("str.w sl, [var_30h]");
                                                                 | label_101:
    0x00037fb4 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00037fb6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00037fb8 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00037fba str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00037fbc ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00037fbe adds r2, 1                                        |     r2++;
    0x00037fc0 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00037fc2 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00037fc4 beq.w 0x38130                                     |         goto label_113;
                                                                 |     }
    0x00037fc8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00037fca b 0x37dd8                                         |     goto label_43;
                                                                 | label_108:
    0x00037fcc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00037fce cmp r2, sl                                        |     
                                                                 |     if (r2 > sl) {
    0x00037fd0 bgt 0x37f96                                       |         goto label_44;
                                                                 |     }
    0x00037fd2 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00037fd4 cmp fp, r2                                        |     
                                                                 |     if (fp > r2) {
    0x00037fd6 bgt.w 0x37e02                                     |         goto label_36;
                                                                 |     }
    0x00037fda ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00037fdc ite eq                                            |     
                                                                 |     if (fp != r2) {
    0x00037fde moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (fp == r2) {
    0x00037fe0 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00037fe2 cmp ip, r1                                        |     
    0x00037fe4 ite lt                                            |     
                                                                 |     if (ip >= r1) {
    0x00037fe6 movlt r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (ip < r1) {
    0x00037fe8 andge r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x00037fec cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00037fee bne.w 0x37e02                                     |         goto label_36;
                                                                 |     }
    0x00037ff0 add r7, sp, 0x20                                  |     r7 = sp + 0x20;
    0x00037ff2 ldr r5, [sp, 0x44]                                |     r5 = var_44h;
                                                                 | label_112:
    0x00037ff4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00037ff6 add.w r5, r2, r5, lsl 5                           |     r5 = r2 + (r5 << 5);
    0x00037ffa b 0x37ee6                                         |     goto label_45;
                                                                 | label_111:
    0x00037ffc str r7, [sp, 0x44]                                |     var_44h = r7;
    0x00037ffe str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00038000 str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x00038002 b 0x37e02                                         |     goto label_36;
                                                                 | label_109:
    0x00038004 ldrsh.w r2, [r5, 0x10]                            |     r2 = *((r5 + 0x10));
    0x00038008 cmp r8, r2                                        |     
                                                                 |     if (r8 > r2) {
    0x0003800a bgt.w 0x37e02                                     |         goto label_36;
                                                                 |     }
                                                                 |     if (r8 != r2) {
    0x0003800e bne.w 0x37ee6                                     |         goto label_45;
                                                                 |     }
    0x00038012 ldrsh.w r2, [r5, 0x14]                            |     r2 = *((r5 + 0x14));
    0x00038016 cmp r2, ip                                        |     
                                                                 |     if (r2 > ip) {
    0x00038018 bgt.w 0x37ee6                                     |         goto label_45;
                                                                 |     }
    0x0003801c b 0x37e02                                         |     goto label_36;
                                                                 | label_107:
    0x0003801e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00038020 movs r0, 0x64                                     |     r0 = 0x64;
    0x00038022 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00038024 subs r2, r1, r3                                   |     r2 = r1 - r3;
    0x00038026 mul r0, r2, r0                                    |     r0 = r2 * r0;
    0x0003802a bl 0xab8f8                                        |     r0 = fcn_000ab8f8 (r0, r1);
    0x0003802e asr.w ip, r0, 0x1f                                |     
    0x00038032 cmp r0, 8                                         |     
    0x00038034 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00038036 mov r2, r0                                        |     r2 = r0;
    0x00038038 sbcs lr, ip, 0                                    |     __asm ("sbcs lr, ip, 0");
    0x0003803c mov r1, ip                                        |     r1 = ip;
                                                                 |     if (r0 >= 8) {
    0x0003803e bhs 0x380f6                                       |         goto label_114;
                                                                 |     }
    0x00038040 cmp r0, 2                                         |     
    0x00038042 sbcs r0, ip, 0                                    |     __asm ("sbcs r0, ip, 0");
    0x00038046 it lo                                             |     
                                                                 |     if (r0 >= 2) {
    0x00038048 movlo r2, r5                                      |         r2 = r5;
                                                                 |     }
                                                                 |     if (r0 <= 2) {
    0x0003804a blo 0x3807a                                       |         goto label_115;
                                                                 |     }
    0x0003804c movs r0, 0x1e                                     |     r0 = 0x1e;
                                                                 |     do {
    0x0003804e adds r2, r2, r2                                   |         r2 += r2;
    0x00038050 sub.w ip, r0, 0xa                                 |         
    0x00038054 adcs r1, r1                                       |         __asm ("adcs r1, r1");
    0x00038056 cmp r2, 8                                         |         
    0x00038058 mov r5, r0                                        |         r5 = r0;
    0x0003805a uxth.w r0, ip                                     |         r0 = (int16_t) ip;
    0x0003805e sbcs ip, r1, 0                                    |         __asm ("sbcs ip, r1, 0");
    0x00038062 blo 0x3804e                                       |         
                                                                 |     } while (r2 <= 8);
                                                                 |     do {
    0x00038064 ldr r1, [pc, 0x380]                               |         
    0x00038066 and r2, r2, 7                                     |         r2 &= 7;
    0x0003806a subs r5, 0xa                                      |         r5 -= 0xa;
    0x0003806c add r1, pc                                        |         r1 = 0x70458;
    0x0003806e add.w r2, r1, r2, lsl 1                           |         r2 = r1 + (r2 << 1);
    0x00038072 ldrh.w r2, [r2, 0x78]                             |         r2 = *((r2 + 0x78));
    0x00038076 add r2, r5                                        |         r2 += r5;
    0x00038078 uxth r2, r2                                       |         r2 = (int16_t) r2;
                                                                 | label_115:
    0x0003807a ldr r5, [sp, 0x20]                                |         r5 = var_20h;
    0x0003807c ldr r1, [sp, 0x58]                                |         r1 = var_58h;
    0x0003807e ldrh r0, [r5, 0x28]                               |         r0 = *((r5 + 0x28));
    0x00038080 subs r1, 0x32                                     |         r1 -= 0x32;
    0x00038082 add r2, r1                                        |         r2 += r1;
    0x00038084 lsls r1, r0, 0x11                                 |         r1 = r0 << 0x11;
    0x00038086 uxth r2, r2                                       |         r2 = (int16_t) r2;
                                                                 |         if (r1 < r0) {
    0x00038088 bpl 0x38094                                       |             
    0x0003808a ldrsh.w r1, [r5, 0x2a]                            |             r1 = *((r5 + 0x2a));
    0x0003808e ldr r5, [sp, 0x54]                                |             r5 = var_54h;
    0x00038090 cmp r5, r1                                        |             
                                                                 |             if (r5 > r1) {
    0x00038092 bgt 0x380a0                                       |                 goto label_116;
                                                                 |             }
                                                                 |         }
    0x00038094 lsls r0, r0, 0x17                                 |         r0 <<= 0x17;
    0x00038096 ldr r1, [sp, 0x54]                                |         r1 = var_54h;
                                                                 |         if (r0 < r0) {
    0x00038098 bpl 0x380a0                                       |             
    0x0003809a cmp r1, 0xa                                       |             
                                                                 |             if (r1 <= 0xa) {
    0x0003809c ble 0x380ee                                       |                 goto label_117;
                                                                 |             }
    0x0003809e ldr r1, [sp, 0x6c]                                |             r1 = var_6ch_2;
                                                                 |         }
                                                                 | label_116:
    0x000380a0 cmp r1, 0xa                                       |         
                                                                 |         if (r1 > 0xa) {
    0x000380a2 ble 0x380ee                                       |             
    0x000380a4 asrs.w ip, r1, 0x1f                               |             
    0x000380a8 sub.w r2, r2, 3                                   |             r2 -= 3;
    0x000380ac itet eq                                           |             
                                                                 |             if (r1 == 0xa) {
    0x000380ae clzeq r0, r1                                      |                 __asm ("clzeq r0, r1");
                                                                 |             }
                                                                 |             if (r1 != 0xa) {
    0x000380b2 clzeq r0, ip                                      |                 __asm ("clzeq r0, ip");
                                                                 |             }
                                                                 |             if (r1 == 0xa) {
    0x000380b6 adds r0, 0x20                                     |                 r0 += 0x20;
                                                                 |             }
    0x000380b8 rsb.w r0, r0, 0x3c                                |             r0 = 0x3c - r0;
    0x000380bc rsb.w r5, r0, 0x20                                |             r5 = 0x20 - r0;
    0x000380c0 lsrs r1, r0                                       |             r1 >>= r0;
    0x000380c2 lsl.w r5, ip, r5                                  |             r5 = ip << r5;
    0x000380c6 orrs r1, r5                                       |             r1 |= r5;
    0x000380c8 sub.w r5, r0, 0x20                                |             r5 = r0 - 0x20;
    0x000380cc add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x000380d0 lsr.w r5, ip, r5                                  |             r5 = ip >> r5;
    0x000380d4 add.w r0, r2, r0, lsl 1                           |             r0 = r2 + (r0 << 1);
    0x000380d8 ldr r2, [pc, 0x310]                               |             
    0x000380da orrs r1, r5                                       |             r1 |= r5;
    0x000380dc and r1, r1, 7                                     |             r1 &= 7;
    0x000380e0 add r2, pc                                        |             r2 = 0x704d0;
    0x000380e2 add.w r2, r2, r1, lsl 1                           |             r2 += (r1 << 1);
    0x000380e6 ldrh.w r2, [r2, 0x78]                             |             r2 = *((r2 + 0x78));
    0x000380ea add r2, r0                                        |             r2 += r0;
    0x000380ec uxth r2, r2                                       |             r2 = (int16_t) r2;
                                                                 |         }
                                                                 | label_117:
    0x000380ee sxth r5, r2                                       |         __asm ("sxth r5, r2");
    0x000380f0 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x000380f2 strh r5, [r2]                                     |         *(r2) = r5;
    0x000380f4 b 0x37e9c                                         |         goto label_46;
                                                                 | label_114:
    0x000380f6 clz r2, ip                                        |         r2 &= ip;
    0x000380fa cmp.w ip, 0                                       |         
                                                                 |         if (ip == 0) {
    0x000380fe bne 0x38106                                       |             
    0x00038100 clz r2, r0                                        |             r2 &= r0;
    0x00038104 adds r2, 0x20                                     |             r2 += 0x20;
                                                                 |         }
    0x00038106 rsb.w r2, r2, 0x3c                                |         r2 = 0x3c - r2;
    0x0003810a add.w r5, r2, r2, lsl 2                           |         r5 = r2 + (r2 << 2);
    0x0003810c lsls r2, r0, 0x16                                 |         r2 = r0 << 0x16;
    0x0003810e rsb.w r1, r2, 0x20                                |         r1 = 0x20 - r2;
    0x00038112 lsrs r0, r2                                       |         r0 >>= r2;
    0x00038114 lsl.w r1, ip, r1                                  |         r1 = ip << r1;
    0x00038118 lsls r5, r5, 1                                    |         r5 <<= 1;
    0x0003811a subs r2, 0x20                                     |         r2 -= 0x20;
    0x0003811c lsr.w r2, ip, r2                                  |         r2 = ip >> r2;
    0x00038120 adds r5, 0x28                                     |         r5 += 0x28;
    0x00038122 orrs r0, r1                                       |         r0 |= r1;
    0x00038124 uxth r5, r5                                       |         r5 = (int16_t) r5;
    0x00038126 orrs r2, r0                                       |         r2 |= r0;
    0x00038128 b 0x38064                                         |         
                                                                 |     } while (1);
                                                                 | label_110:
    0x0003812a movs r3, 0                                        |     r3 = 0;
    0x0003812c str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0003812e b 0x37e02                                         |     goto label_36;
                                                                 | label_113:
    0x00038130 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00038132 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038134 beq.w 0x38364                                     |         goto label_118;
                                                                 |     }
    0x00038138 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003813a cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0003813c beq 0x38160                                       |         goto label_119;
                                                                 |     }
    0x0003813e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00038140 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00038142 add.w r0, r3, r2, lsl 5                           |     r0 = r3 + (r2 << 5);
    0x00038146 mov r2, r3                                        |     r2 = r3;
    0x00038148 adds r3, 0x20                                     |     r3 += 0x20;
                                                                 |     do {
    0x0003814a ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x0003814e ldrsh.w r4, [r2, 0x12]                            |         r4 = *((r2 + 0x12));
    0x00038152 cmp r4, r1                                        |         
    0x00038154 it gt                                             |         
                                                                 |         if (r4 <= r1) {
    0x00038156 movgt r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x00038158 adds r3, 0x20                                     |         r3 += 0x20;
    0x0003815a cmp r0, r3                                        |         
    0x0003815c bne 0x3814a                                       |         
                                                                 |     } while (r0 != r3);
    0x0003815e str r2, [sp, 0x14]                                |     var_14h = r2;
                                                                 | label_119:
    0x00038160 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00038162 movs r1, 0                                        |     r1 = 0;
    0x00038164 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00038166 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00038168 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x0003816a ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0003816c subs r0, 4                                        |     r0 -= 4;
                                                                 |     do {
    0x0003816e ldr r3, [r0, 4]!                                  |         r3 = *((r0 += 4));
    0x00038172 adds r1, 1                                        |         r1++;
    0x00038174 cmp r5, r1                                        |         
    0x00038176 add.w r2, r2, 0x58                                |         r2 += 0x58;
    0x0003817a str.w r3, [r2, 0x2e0]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0003817e ldrb r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00038180 strb.w r3, [r2, 0x2cc]                            |         *((r2 + 0x2cc)) = r3;
    0x00038184 add.w r3, r3, r3, lsl 3                           |         r3 += (r3 << 3);
    0x00038188 add.w r3, r4, r3, lsl 3                           |         r3 = r4 + (r3 << 3);
    0x0003818c ldr r3, [r3, 0x30]                                |         r3 = *((r3 + 0x30));
    0x0003818e str.w r3, [r2, 0x29c]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00038192 bgt 0x3816e                                       |         
                                                                 |     } while (r5 > r1);
                                                                 | label_51:
    0x00038194 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00038196 ldrh r3, [r3, 0x28]                               |     r3 = *((r3 + 0x28));
    0x00038198 and r3, r3, 0x180                                 |     r3 &= 0x180;
    0x0003819c cmp.w r3, 0x100                                   |     
    0x000381a0 beq 0x3821c                                       |     
                                                                 |     while (r3 == 0) {
                                                                 | label_47:
    0x000381a2 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000381a4 ldrb.w r3, [r2, 0x30]                             |         r3 = *((r2 + 0x30));
    0x000381a8 ldr r1, [r2, 8]                                   |         r1 = *((r2 + 8));
    0x000381aa bfc r3, 2, 1                                      |         value_4 = BIT_MASK (1, );
                                                                 |         value_4 = ~value_4;
                                                                 |         r3 &= value_4;
    0x000381ae strb.w r3, [r2, 0x30]                             |         *((r2 + 0x30)) = r3;
                                                                 |         if (r1 != 0) {
    0x000381b2 cbz r1, 0x381f0                                   |             
    0x000381b4 ldrh r2, [r2, 0x28]                               |             r2 = *((r2 + 0x28));
    0x000381b6 ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x000381b8 ands r0, r2, 0x80                                 |             r0 = r2 & 0x80;
    0x000381bc ldrsb.w r3, [r3, 0x16]                            |             r3 = *((r3 + 0x16));
                                                                 |             if (r0 == r2) {
    0x000381c0 beq 0x38298                                       |                 goto label_120;
                                                                 |             }
    0x000381c2 ldr r0, [r1]                                      |             r0 = *(r1);
    0x000381c4 cmp r3, r0                                        |             
                                                                 |             if (r3 == r0) {
    0x000381c6 beq.w 0x38388                                     |                 goto label_121;
                                                                 |             }
                                                                 | label_49:
    0x000381ca lsls r3, r2, 0x16                                 |             r3 = r2 << 0x16;
                                                                 |             if (r3 >= r2) {
    0x000381cc bpl 0x381f0                                       |                 goto label_50;
                                                                 |             }
    0x000381ce ldr r3, [sp, 0x20]                                |             r3 = var_20h;
    0x000381d0 ldr r2, [r1]                                      |             r2 = *(r1);
    0x000381d2 ldr r0, [sp, 0x4c]                                |             r0 = var_4ch;
    0x000381d4 ldrsb.w r3, [r3, 0x2d]                            |             r3 = *((r3 + 0x2d));
    0x000381d8 cmp r0, 0                                         |             
    0x000381da sub.w r3, r3, r2                                  |             r3 -= r2;
    0x000381de clz r3, r3                                        |             r3 &= r3;
    0x000381e2 lsr.w r3, r3, 5                                   |             r3 >>= 5;
    0x000381e6 it eq                                             |             
                                                                 |             if (r0 != 0) {
    0x000381e8 moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
    0x000381ea cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x000381ec bne.w 0x38392                                     |                 goto label_122;
                                                                 |             }
                                                                 |         }
                                                                 | label_50:
    0x000381f0 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x000381f2 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000381f4 ldrh r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x000381f6 strh r3, [r2, 0x32]                               |         *((r2 + 0x32)) = r3;
    0x000381f8 ldr r2, [pc, 0x1f4]                               |         
    0x000381fa ldr r3, [pc, 0x1e8]                               |         r3 = *(0x383e6);
    0x000381fc add r2, pc                                        |         r2 = 0x705f0;
    0x000381fe ldr r3, [r2, r3]                                  |         r3 = *(0x705f0);
    0x00038200 ldr r2, [r3]                                      |         r2 = *(0x705f0);
    0x00038202 ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x00038204 eors r2, r3                                       |         r2 ^= r3;
    0x00038206 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003820a bne.w 0x38384                                     |             goto label_123;
                                                                 |         }
                                                                 | label_52:
    0x0003820e ldrd r0, r1, [sp, 0x64]                           |         __asm ("ldrd r0, r1, [var_68h]");
    0x00038212 add sp, 0x84                                      |         
    0x00038214 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00038218 b.w 0x159dc                                       |         void (*0x159dc)() ();
    0x0003821c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003821e ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x00038220 ldrb.w r3, [r3, 0x2f]                             |         r3 = *((r3 + 0x2f));
    0x00038224 cmp r2, 0                                         |         
    0x00038226 clz r3, r3                                        |         r3 &= r3;
    0x0003822a lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x0003822c asrs r3, r2, 0xd                                  |         r3 = r2 >> 0xd;
    0x0003822e it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x00038230 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00038232 cmp r3, 0                                         |         
    0x00038234 beq 0x381a2                                       |         
                                                                 |     }
    0x00038236 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00038238 add r3, sp, 0x70                                  |     r3 += var_70h;
    0x0003823a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003823c ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x0003823e ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x00038240 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00038242 add r3, r1                                        |     r3 += r1;
    0x00038244 ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00038248 mov r0, r4                                        |     r0 = r4;
    0x0003824a str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x0003824c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003824e subs r3, 1                                        |     r3--;
    0x00038250 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00038252 str r3, [sp]                                      |     *(sp) = r3;
    0x00038254 movs r3, 0x80                                     |     r3 = 0x80;
    0x00038256 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00038258 bl 0x374b0                                        |     void (*0x374b0)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
    0x0003825c ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0003825e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00038260 cmp r0, r3                                        |     
    0x00038262 ittt eq                                           |     
                                                                 |     if (r0 != r3) {
    0x00038264 ldreq r2, [sp, 0x20]                              |         r2 = var_20h;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00038266 moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00038268 strbeq r3, [r2, 0x2f]                             |         *((r2 + 0x2f)) = r3;
                                                                 |     }
    0x0003826c b 0x381a2                                         |     goto label_47;
                                                                 | label_99:
    0x0003826e mov r2, r4                                        |     r2 = r4;
    0x00038270 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00038272 movs r1, 0                                        |     r1 = 0;
    0x00038274 blx 0x8264                                        |     fcn_00008264 ();
    0x00038278 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0003827a ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0003827c ldr.w r3, [r3, 0x84]                              |     r3 = *((r3 + 0x84));
    0x00038280 cmp r3, 0x30                                      |     
    0x00038282 it hs                                             |     
                                                                 |     if (r3 < 0x30) {
    0x00038284 movhs r3, 0x30                                    |         r3 = 0x30;
                                                                 |     }
    0x00038286 strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00038288 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003828a cmp r3, 0                                         |     
    0x0003828c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003828e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00038290 movne r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x00038294 strb r3, [r2, 0x16]                               |     *((r2 + 0x16)) = r3;
    0x00038296 b 0x37db2                                         |     goto label_48;
                                                                 | label_120:
    0x00038298 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x0003829a cmp r3, 0                                         |     
    0x0003829c ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0003829e strb.w r3, [r6, 0x2d]                             |     *((r6 + 0x2d)) = r3;
    0x000382a2 ldrd r4, r5, [r7, 8]                              |     __asm ("ldrd r4, r5, [r7, 8]");
    0x000382a6 strd r4, r5, [r6, 0x48]                           |     __asm ("strd r4, r5, [r6, 0x48]");
                                                                 |     if (r3 <= 0) {
    0x000382aa ble 0x382d6                                       |         goto label_124;
                                                                 |     }
    0x000382ac ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
    0x000382ae sub.w r3, r3, 1                                   |     r3--;
    0x000382b2 clz r3, r3                                        |     r3 &= r3;
    0x000382b6 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000382b8 cmp r0, 0                                         |     
    0x000382ba it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000382bc moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000382be cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000382c0 beq 0x381ca                                       |         goto label_49;
                                                                 |     }
    0x000382c2 lsls r0, r2, 0x1e                                 |     r0 = r2 << 0x1e;
    0x000382c4 itttt ne                                          |     
                                                                 |     if (r0 == r2) {
    0x000382c6 ldrne r0, [sp, 0x20]                              |         r0 = var_20h;
                                                                 |     }
                                                                 |     if (r0 == r2) {
    0x000382c8 ldrbne r3, [r0, 0x30]                             |         r3 = *((r0 + 0x30));
                                                                 |     }
                                                                 |     if (r0 == r2) {
    0x000382cc orrne r3, r3, 4                                   |         r3 |= 4;
                                                                 |     }
                                                                 |     if (r0 != r2) {
    0x000382d0 strb.w r3, [r0, 0x30]                             |         *((r0 + 0x30)) = r3;
                                                                 |     }
    0x000382d4 b 0x381ca                                         |     goto label_49;
                                                                 | label_124:
    0x000382d6 mov r4, r6                                        |     r4 = r6;
    0x000382d8 strb.w r0, [r6, 0x2d]                             |     *((r6 + 0x2d)) = r0;
    0x000382dc ldr r6, [sp, 0x4c]                                |     r6 = var_4ch;
    0x000382de cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000382e0 beq 0x381f0                                       |         goto label_50;
                                                                 |     }
    0x000382e2 ldr r0, [sp, 0x5c]                                |     r0 = var_5ch;
    0x000382e4 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x000382e6 add r3, r0                                        |     r3 += r0;
    0x000382e8 ldr r0, [r3, -0x4]                                |     r0 = *((r3 - 0x4));
    0x000382ec ldr r3, [r0, 0x24]                                |     r3 = *((r0 + 0x24));
    0x000382ee lsls r5, r3, 0x13                                 |     r5 = r3 << 0x13;
                                                                 |     if (r5 < r3) {
    0x000382f0 bmi.w 0x381ca                                     |         goto label_49;
                                                                 |     }
    0x000382f4 and r3, r3, 0x104                                 |     r3 &= 0x104;
    0x000382f8 cmp.w r3, 0x104                                   |     
                                                                 |     if (r3 == 0x104) {
    0x000382fc beq.w 0x381ca                                     |         goto label_49;
                                                                 |     }
    0x00038300 subs r3, r6, 1                                    |     r3 = r6 - 1;
    0x00038302 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00038306 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00038308 str r0, [sp, 4]                                   |     var_4h_2 = r0;
    0x0003830a mov r2, r7                                        |     r2 = r7;
    0x0003830c str r3, [sp]                                      |     *(sp) = r3;
    0x0003830e add r3, sp, 0x70                                  |     r3 += var_70h;
    0x00038310 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00038312 mov r0, r4                                        |     r0 = r4;
    0x00038314 mov.w r3, 0x800                                   |     r3 = 0x800;
    0x00038318 vstr d16, [sp, 0x70]                              |     __asm ("vstr d16, [sp, 0x70]");
    0x0003831c bl 0x374b0                                        |     void (*0x374b0)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
    0x00038320 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00038322 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00038324 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00038326 bne 0x3833e                                       |         
    0x00038328 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x0003832a ldrb.w r3, [r0, 0x30]                             |         r3 = *((r0 + 0x30));
    0x0003832e orr r3, r3, 4                                     |         r3 |= 4;
    0x00038332 strb.w r3, [r0, 0x30]                             |         *((r0 + 0x30)) = r3;
    0x00038336 ldrd r2, r3, [sp, 0x70]                           |         __asm ("ldrd r2, r3, [var_74h]");
    0x0003833a strd r2, r3, [r0, 0x48]                           |         __asm ("strd r2, r3, [r0, 0x48]");
                                                                 |     }
    0x0003833e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00038340 ldrh r2, [r3, 0x28]                               |     r2 = *((r3 + 0x28));
    0x00038342 b 0x381ca                                         |     goto label_49;
                                                                 | label_100:
    0x00038344 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00038346 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00038348 b 0x38194                                         |     goto label_51;
                                                                 | label_98:
    0x0003834a ldr r2, [pc, 0xa8]                                |     
    0x0003834c ldr r3, [pc, 0x94]                                |     r3 = *(0x383e4);
    0x0003834e add r2, pc                                        |     r2 = 0x70748;
    0x00038350 ldr r3, [r2, r3]                                  |     r3 = *(0x70748);
    0x00038352 ldr r2, [r3]                                      |     r2 = *(0x70748);
    0x00038354 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x00038356 eors r2, r3                                       |     r2 ^= r3;
    0x00038358 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0003835c bne 0x38384                                       |         goto label_123;
                                                                 |     }
    0x0003835e add sp, 0x84                                      |     
    0x00038360 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_118:
    0x00038364 ldr r1, [pc, 0x90]                                |     
    0x00038366 ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x00038368 add r1, pc                                        |     r1 = 0x70764;
    0x0003836a bl 0x25778                                        |     fcn_00025778 (r0);
    0x0003836e ldr r2, [pc, 0x8c]                                |     
    0x00038370 ldr r3, [pc, 0x70]                                |     r3 = *(0x383e4);
    0x00038372 add r2, pc                                        |     r2 = 0x70774;
    0x00038374 ldr r3, [r2, r3]                                  |     r3 = *(0x70774);
    0x00038376 ldr r2, [r3]                                      |     r2 = *(0x70774);
    0x00038378 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0003837a eors r2, r3                                       |     r2 ^= r3;
    0x0003837c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00038380 beq.w 0x3820e                                     |         goto label_52;
                                                                 |     }
                                                                 | label_123:
    0x00038384 blx 0x7e8c                                        |     fcn_00007e8c ();
                                                                 | label_121:
    0x00038388 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0003838a movs r3, 2                                        |     r3 = 2;
    0x0003838c strb.w r3, [r0, 0x2f]                             |     *((r0 + 0x2f)) = r3;
    0x00038390 b 0x381ca                                         |     goto label_49;
                                                                 | label_122:
    0x00038392 subs r3, r0, 1                                    |     r3 = r0 - 1;
    0x00038394 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038396 add r2, sp, 0x70                                  |     r2 += var_70h;
    0x00038398 ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x0003839a str r2, [sp, 8]                                   |     var_8h = r2;
    0x0003839c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0003839e ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x000383a0 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000383a4 add r2, r4                                        |     r2 += r4;
    0x000383a6 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x000383a8 ldr r2, [r2, -0x4]                                |     r2 = *((r2 - 0x4));
    0x000383ac vstr d16, [sp, 0x70]                              |     __asm ("vstr d16, [sp, 0x70]");
    0x000383b0 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x000383b4 movs r3, 0                                        |     r3 = 0;
    0x000383b6 mov r2, r0                                        |     r2 = r0;
    0x000383b8 mov r0, r4                                        |     r0 = r4;
    0x000383ba bl 0x374b0                                        |     void (*0x374b0)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
    0x000383be ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000383c0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000383c2 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x000383c4 bne.w 0x381f0                                     |         goto label_50;
                                                                 |     }
    0x000383c8 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x000383ca ldrb.w r3, [r1, 0x30]                             |     r3 = *((r1 + 0x30));
    0x000383ce orr r3, r3, 8                                     |     r3 |= 8;
    0x000383d2 strb.w r3, [r1, 0x30]                             |     *((r1 + 0x30)) = r3;
    0x000383d6 ldrd r2, r3, [sp, 0x70]                           |     __asm ("ldrd r2, r3, [var_74h]");
    0x000383da strd r2, r3, [r1, 0x48]                           |     __asm ("strd r2, r3, [r1, 0x48]");
    0x000383de b 0x381f0                                         |     goto label_50;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x39310 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00039310 ()                                      | void fcn_00039310 (int16_t arg_0h, int16_t arg_8h, int16_t arg_11h, int16_t arg_12h, int16_t arg_14h, int16_t arg_16h, int16_t arg_18h, int16_t arg_24h, int16_t arg_28h, int16_t arg_30h, int16_t arg1, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_0h_2;
                                                                 |     int32_t var_0h_3;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int32_t var_1ch_2;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h;
                                                                 |     int32_t var_8h_3;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_88h;
                                                                 |     int32_t var_8h_4;
                                                                 |     int32_t var_10h_3;
                                                                 |     int32_t var_2h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_f8h;
                                                                 |     int16_t var_128h;
                                                                 |     int16_t var_2c4h;
                                                                 |     int16_t var_2cch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00039310 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00039314 sub.w sp, sp, 0x2cc                               |     
    0x00039318 strd r2, r3, [sp, 0x1c]                           |     __asm ("strd r2, r3, [var_1ch]");
    0x0003931c add r7, sp, 0x80                                  |     r7 += var_80h;
    0x0003931e mov fp, r0                                        |     
    0x00039320 movs r1, 0                                        |     r1 = 0;
    0x00039322 ldr r2, [pc, 0x320]                               |     
    0x00039324 ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x00039326 ldr r3, [pc, 0x320]                               |     r3 = *(0x3964a);
    0x00039328 add r2, pc                                        |     r2 = 0x72972;
    0x0003932a ldr.w sb, [r0, 0xc]                               |     sb = *(arg_0hxc);
    0x0003932e str r5, [sp, 0x40]                                |     var_40h = r5;
    0x00039330 ldr r3, [r2, r3]                                  |     
    0x00039332 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00039334 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00039336 mov r0, r7                                        |     r0 = r7;
    0x00039338 ldr r3, [r3]                                      |     r3 = *(0x72972);
    0x0003933a str r3, [sp, 0x2c4]                               |     var_2c4h = r3;
    0x0003933c mov.w r3, 0                                       |     r3 = 0;
    0x00039340 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00039342 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00039346 add.w r6, r2, r3, lsl 4                           |     r6 = r2 + (r3 << 4);
    0x0003934a movs r2, 0x38                                     |     r2 = 0x38;
    0x0003934c str r6, [sp, 8]                                   |     var_8h = r6;
    0x0003934e blx 0x8264                                        |     fcn_00008264 ();
    0x00039352 ldrb.w r3, [sb, 0x10]                             |     r3 = *((sb + 0x10));
    0x00039356 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00039358 ldr.w r8, [r5, 0x14]                              |     r8 = *((r5 + 0x14));
    0x0003935c add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x00039360 adds r2, 8                                        |     r2 += 8;
    0x00039362 cmp r6, r8                                        |     
    0x00039364 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x00039368 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0003936a ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x0003936c str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 |     if (r6 < r8) {
    0x0003936e bls 0x393a8                                       |         goto label_16;
                                                                 |     }
    0x00039370 str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
    0x00039374 mov sl, r8                                        |     sl = r8;
    0x00039376 mov fp, sb                                        |     
    0x00039378 mov sb, r7                                        |     sb = r7;
    0x0003937a add r3, sp, 0x128                                 |     r3 += var_128h;
    0x0003937c str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 |     do {
    0x0003937e ldrh.w r3, [sl, 0xc]                              |         r3 = *((sl + 0xc));
    0x00039382 lsls r2, r3, 0x16                                 |         r2 = r3 << 0x16;
                                                                 |         if (r2 < r3) {
    0x00039384 bpl 0x3939e                                       |             
    0x00039386 ldr.w r2, [sl, 0x18]                              |             r2 = *((sl + 0x18));
    0x0003938a ldrd r0, r1, [fp, 8]                              |             __asm ("ldrd r0, r1, [arg_8h]");
    0x0003938e ldr.w r3, [r2, 0x198]                             |             r3 = *((r2 + 0x198));
    0x00039392 ands r3, r0                                       |             r3 &= r0;
    0x00039394 ldr.w r0, [r2, 0x19c]                             |             r0 = *((r2 + 0x19c));
    0x00039398 ands r0, r1                                       |             r0 &= r1;
    0x0003939a orrs r3, r0                                       |             r3 |= r0;
                                                                 |             if (r3 != r0) {
    0x0003939c bne 0x393cc                                       |                 goto label_17;
                                                                 |             }
                                                                 |         }
                                                                 | label_6:
    0x0003939e ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x000393a0 add.w sl, sl, 0x30                                |         sl += 0x30;
    0x000393a4 cmp r3, sl                                        |         
    0x000393a6 bhi 0x3937e                                       |         
                                                                 |     } while (r3 > sl);
                                                                 | label_16:
    0x000393a8 mov.w sl, 0                                       |     sl = 0;
                                                                 | label_8:
    0x000393ac ldr r2, [pc, 0x29c]                               |     
    0x000393ae ldr r3, [pc, 0x298]                               |     r3 = *(0x3964a);
    0x000393b0 add r2, pc                                        |     r2 = 0x72a00;
    0x000393b2 ldr r3, [r2, r3]                                  |     r3 = *(0x72a00);
    0x000393b4 ldr r2, [r3]                                      |     r2 = *(0x72a00);
    0x000393b6 ldr r3, [sp, 0x2c4]                               |     r3 = var_2c4h;
    0x000393b8 eors r2, r3                                       |     r2 ^= r3;
    0x000393ba mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000393be bne.w 0x3963e                                     |         goto label_18;
                                                                 |     }
    0x000393c2 mov r0, sl                                        |     r0 = sl;
    0x000393c4 add.w sp, sp, 0x2cc                               |     
    0x000393c8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_17:
    0x000393cc ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000393ce add.w r1, fp, 0x18                                |     r1 += arg_18h;
    0x000393d2 ldr.w r8, [r2, 0x14]                              |     r8 = *((r2 + 0x14));
    0x000393d6 add r2, sp, 0xb8                                  |     r2 += var_b8h;
    0x000393d8 ldr r5, [sp, 0x44]                                |     r5 = var_44h;
    0x000393da movs r7, 0                                        |     r7 = 0;
    0x000393dc str r2, [sp, 0xc]                                 |     var_ch_2 = r2;
    0x000393de add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x000393e2 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x000393e4 add.w r6, r8, r3, lsl 4                           |     r6 = r8 + (r3 << 4);
    0x000393e8 add r3, sp, 0x64                                  |     r3 += var_64h;
    0x000393ea mov ip, r3                                        |     
    0x000393ec str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000393ee mov r4, r3                                        |     r4 = r3;
    0x000393f0 ldm r5!, {r0, r1, r2, r3}                         |     r0 = *(r5!);
                                                                 |     r1 = *((r5! + 4));
                                                                 |     r2 = *((r5! + 8));
                                                                 |     r3 = *((r5! + 12));
    0x000393f2 cmp r8, r6                                        |     
    0x000393f4 str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x000393f6 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x000393f8 str.w r7, [ip, 8]                                 |     __asm ("str.w r7, [var_8h_3]");
    0x000393fc ldm.w r5, {r0, r1, r2}                            |     r0 = *(r5);
                                                                 |     r1 = *((r5 + 4));
                                                                 |     r2 = *((r5 + 8));
    0x00039400 stm.w r4, {r0, r1, r2}                            |     *(r4) = r0;
                                                                 |     *((r4 + 4)) = r1;
                                                                 |     *((r4 + 8)) = r2;
    0x00039404 ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x00039406 str.w r2, [ip, 0x10]                              |     __asm ("str.w r2, [var_10h_2]");
                                                                 |     if (r8 >= r6) {
    0x0003940a bhs.w 0x39610                                     |         goto label_19;
                                                                 |     }
    0x0003940c strh r1, [r0, 8]                                  |     *((r0 + 8)) = r1;
    0x0003940e movs r3, 1                                        |     r3 = 1;
    0x00039410 strd fp, sl, [sp, 0x54]                           |     __asm ("strd fp, sl, [var_58h]");
    0x00039414 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00039416 mov sl, r8                                        |     sl = r8;
    0x00039418 mov fp, sb                                        |     
    0x0003941a mov r8, r2                                        |     r8 = r2;
    0x0003941c str r7, [sp, 0x10]                                |     var_10h = r7;
    0x0003941e b 0x39480                                         |     
                                                                 |     while (r3 < r3) {
    0x00039420 ldr.w r3, [sl, 0x18]                              |         r3 = *((sl + 0x18));
                                                                 | label_1:
    0x00039424 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00039426 str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x00039428 mov.w r3, 0                                       |         r3 = 0;
    0x0003942c strh.w r3, [r8]                                   |         *(r8) = r3;
    0x00039430 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00039432 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00039434 ldr r3, [r3, 0x38]                                |         r3 = *((r3 + 0x38));
    0x00039436 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00039438 beq 0x394ac                                       |             goto label_20;
                                                                 |         }
    0x0003943a ldrd r3, r4, [sp, 0x2f0]                          |         __asm ("ldrd r3, r4, [arg_0h]");
    0x0003943e strd r3, r4, [sp]                                 |         __asm ("strd r3, r4, [sp]");
    0x00039442 ldrd r2, r3, [sp, 0x1c]                           |         __asm ("ldrd r2, r3, [var_1ch]");
    0x00039446 bl 0x34af0                                        |         fcn_00034af0 (r0, r1, r2, r3, r4);
    0x0003944a str r0, [sp, 0x10]                                |         var_10h = r0;
    0x0003944c ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0003944e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00039450 beq 0x394be                                       |             goto label_21;
                                                                 |         }
                                                                 | label_2:
    0x00039452 ldrh.w r4, [r8]                                   |         r4 = *(r8);
    0x00039456 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00039458 beq 0x394da                                       |             goto label_22;
                                                                 |         }
                                                                 | label_3:
    0x0003945a ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0003945c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003945e beq 0x394ec                                       |             goto label_23;
                                                                 |         }
    0x00039460 movs r3, 0x30                                     |         r3 = 0x30;
    0x00039462 lsls r2, r4, 4                                    |         r2 = r4 << 4;
    0x00039464 add r1, sp, 0xc0                                  |         r1 += var_c0h;
    0x00039466 strh.w r4, [fp]                                   |         *(fp) = r4;
    0x0003946a add r0, sp, 0x88                                  |         r0 += var_88h;
    0x0003946c blx 0x7f74                                        |         fcn_00007f74 ();
    0x00039470 movs r3, 0                                        |         r3 = 0;
    0x00039472 str r3, [sp, 0x30]                                |         var_30h = r3;
                                                                 | label_0:
    0x00039474 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x00039476 add.w sl, sl, 0x30                                |         sl += 0x30;
    0x0003947a cmp r3, sl                                        |         
                                                                 |         if (r3 < sl) {
    0x0003947c bls.w 0x3959c                                     |             goto label_24;
                                                                 |         }
                                                                 | label_5:
    0x00039480 ldrh.w r3, [sl, 0xc]                              |         r3 = *((sl + 0xc));
    0x00039484 lsls r3, r3, 0x15                                 |         r3 <<= 0x15;
    0x00039486 bmi 0x39420                                       |         
                                                                 |     }
    0x00039488 ldr.w r3, [sl, 0x14]                              |     r3 = *((sl + 0x14));
    0x0003948c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0003948e cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00039490 bne 0x39474                                       |         goto label_0;
                                                                 |     }
    0x00039492 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00039494 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00039496 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00039498 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
    0x0003949a str.w sl, [r2, 0x14]                              |     __asm ("str.w sl, [r2, 0x14]");
    0x0003949e str r3, [r2]                                      |     *(r2) = r3;
    0x000394a0 mov r3, r2                                        |     r3 = r2;
    0x000394a2 movs r2, 0x2c                                     |     r2 = 0x2c;
    0x000394a4 strb r2, [r3, 8]                                  |     *((r3 + 8)) = r2;
    0x000394a6 movs r2, 1                                        |     r2 = 1;
    0x000394a8 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000394aa b 0x39424                                         |     goto label_1;
                                                                 | label_20:
    0x000394ac ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_1ch]");
    0x000394b0 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000394b2 bl 0x38c44                                        |     fcn_00038c44 (r0, r1, r2, r3, r4, r5, r6);
    0x000394b6 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x000394b8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000394ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000394bc bne 0x39452                                       |         goto label_2;
                                                                 |     }
                                                                 | label_21:
    0x000394be ldrd r3, r4, [sp, 0x2f0]                          |     __asm ("ldrd r3, r4, [arg_0h]");
    0x000394c2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000394c4 strd r3, r4, [sp]                                 |     __asm ("strd r3, r4, [sp]");
    0x000394c8 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_1ch]");
    0x000394cc bl 0x39310                                        |     fcn_00039310 (r0, r1, r2, r3, r4, r5, r6);
    0x000394d0 ldrh.w r4, [r8]                                   |     r4 = *(r8);
    0x000394d4 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x000394d6 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x000394d8 bne 0x3945a                                       |         goto label_3;
                                                                 |     }
                                                                 | label_22:
    0x000394da mov sb, fp                                        |     sb = fp;
    0x000394dc ldr.w sl, [sp, 0x58]                              |     sl = var_58h;
    0x000394e0 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x000394e2 ldr.w fp, [sp, 0x54]                              |     fp = var_54h;
    0x000394e6 strh.w r4, [sb]                                   |     *(sb) = r4;
    0x000394ea b 0x395a8                                         |     goto label_25;
                                                                 | label_23:
    0x000394ec ldrh.w r5, [fp]                                   |     r5 = *(fp);
    0x000394f0 movs r3, 0x30                                     |     r3 = 0x30;
    0x000394f2 add r1, sp, 0x88                                  |     r1 += var_88h;
    0x000394f4 add r0, sp, 0xf8                                  |     r0 += var_f8h;
    0x000394f6 add r7, sp, 0xf0                                  |     r7 += var_f0h;
    0x000394f8 str r5, [sp, 0x4c]                                |     var_4ch = r5;
    0x000394fa lsls r2, r5, 4                                    |     r2 = r5 << 4;
    0x000394fc strh.w r5, [sp, 0xf0]                             |     var_f0h = r5;
    0x00039500 blx 0x7f74                                        |     fcn_00007f74 ();
    0x00039504 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00039506 strh.w r3, [fp]                                   |     *(fp) = r3;
    0x0003950a cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0003950c beq 0x39474                                       |         goto label_0;
                                                                 |     }
    0x0003950e str r7, [sp, 0x24]                                |     var_24h = r7;
    0x00039510 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00039512 str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
                                                                 |     if (r4 == 0) {
                                                                 | label_4:
    0x00039516 cbz r4, 0x39574                                   |         goto label_26;
                                                                 |     }
    0x00039518 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003951a mov r4, r8                                        |     r4 = r8;
    0x0003951c movs r6, 0                                        |     r6 = 0;
    0x0003951e str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch_2]");
    0x00039522 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00039524 ldrsh.w sb, [r3, 0x10]                            |     sb = *((r3 + 0x10));
    0x00039528 ldrsh.w r7, [r3, 0x12]                            |     r7 = *((r3 + 0x12));
    0x0003952c str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0003952e ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00039530 str r2, [sp, 0x18]                                |     var_18h = r2;
                                                                 |     do {
    0x00039532 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x00039534 mov r0, sb                                        |         r0 = sb;
    0x00039536 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00039538 adds r6, 1                                        |         r6++;
    0x0003953a ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x0003953c adds r4, 0x10                                     |         r4 += 0x10;
    0x0003953e ldrsh.w r1, [r4]                                  |         r1 = *(r4);
    0x00039542 orr.w sl, r3, r2                                  |         sl = r3 | r2;
    0x00039546 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00039548 orrs r5, r3                                       |         r5 |= r3;
    0x0003954a bl 0xef34                                         |         fcn_0000ef34 (r0, r1);
    0x0003954e ldrsh.w r1, [r4, 2]                               |         r1 = *((r4 + 2));
    0x00039552 mov r8, r0                                        |         r8 = r0;
    0x00039554 mov r0, r7                                        |         r0 = r7;
    0x00039556 bl 0xef34                                         |         fcn_0000ef34 (r0, r1);
    0x0003955a mov r3, r5                                        |         r3 = r5;
    0x0003955c strd r8, r0, [sp]                                 |         __asm ("strd r8, r0, [sp]");
    0x00039560 mov r2, sl                                        |         r2 = sl;
    0x00039562 mov r0, fp                                        |         r0 = fp;
    0x00039564 bl 0x11ba4                                        |         fcn_00011ba4 (r0, r1, r2, r3, r4);
    0x00039568 ldr r3, [sp, 0xc]                                 |         r3 = var_ch_2;
    0x0003956a ldrh r3, [r3]                                     |         r3 = *(r3);
    0x0003956c cmp r3, r6                                        |         
    0x0003956e bgt 0x39532                                       |         
                                                                 |     } while (r3 > r6);
    0x00039570 ldr.w r8, [sp, 0xc]                               |     r8 = var_ch_2;
                                                                 | label_26:
    0x00039574 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00039576 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00039578 adds r2, 0x10                                     |     r2 += 0x10;
    0x0003957a str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003957c adds r3, 1                                        |     r3++;
    0x0003957e ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00039580 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00039582 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x00039584 ble 0x3958c                                       |         
    0x00039586 ldrh.w r4, [r8]                                   |         r4 = *(r8);
    0x0003958a b 0x39516                                         |         goto label_4;
                                                                 |     }
    0x0003958c ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x00039590 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00039592 add.w sl, sl, 0x30                                |     sl += 0x30;
    0x00039596 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x00039598 bhi.w 0x39480                                     |         goto label_5;
                                                                 |     }
                                                                 | label_24:
    0x0003959c mov sb, fp                                        |     sb = fp;
    0x0003959e ldr.w sl, [sp, 0x58]                              |     sl = var_58h;
    0x000395a2 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x000395a4 ldr.w fp, [sp, 0x54]                              |     fp = var_54h;
                                                                 | label_25:
    0x000395a8 ldr.w r2, [fp, 0x30]                              |     r2 = *(arg_30h);
    0x000395ac movs r1, 1                                        |     r1 = 1;
    0x000395ae strh.w r1, [fp, 0x28]                             |     *(arg_28h) = r1;
    0x000395b2 movs r3, 0                                        |     r3 = 0;
    0x000395b4 str.w sl, [r2]                                    |     __asm ("str.w sl, [r2]");
    0x000395b8 mov.w r2, 0x2000                                  |     r2 = 0x2000;
    0x000395bc str.w r2, [fp, 0x24]                              |     __asm ("str.w r2, [arg_24h]");
    0x000395c0 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000395c2 strh.w r3, [fp, 0x12]                             |     *(arg_12h) = r3;
    0x000395c6 strb.w r3, [fp, 0x11]                             |     *(arg_11h) = r3;
    0x000395ca str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x000395ce str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x000395d0 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
                                                                 |     if (r7 != 0) {
    0x000395d2 cbnz r7, 0x3963a                                  |         goto label_27;
                                                                 |     }
                                                                 | label_9:
    0x000395d4 ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x000395d6 mov r4, sb                                        |     r4 = sb;
    0x000395d8 movs r5, 0                                        |     r5 = 0;
                                                                 | label_7:
    0x000395da ldrh.w r3, [sb]                                   |     r3 = *(sb);
    0x000395de cmp r3, r5                                        |     
                                                                 |     if (r3 <= r5) {
    0x000395e0 ble.w 0x3939e                                     |         goto label_6;
                                                                 |     }
    0x000395e4 ldrh r3, [r4, 0x10]                               |     r3 = var_10h_3;
    0x000395e6 adds r4, 0x10                                     |     r4 += 0x10;
    0x000395e8 mov r1, fp                                        |     r1 = fp;
    0x000395ea mov r0, r6                                        |     r0 = r6;
    0x000395ec adds r5, 1                                        |     r5++;
    0x000395ee adds r3, 1                                        |     r3++;
    0x000395f0 strh.w r3, [fp, 0x14]                             |     *(arg_14h) = r3;
    0x000395f4 ldrsh.w r3, [r4, 2]                               |     r3 = var_2h;
    0x000395f8 strh.w r3, [fp, 0x16]                             |     *(arg_16h) = r3;
    0x000395fc ldrd r2, r3, [r4, -0x8]                           |     __asm ("ldrd r2, r3, [r4, -0x8]");
    0x00039600 strd r2, r3, [fp]                                 |     __asm ("strd r2, r3, [fp]");
    0x00039604 bl 0x1adac                                        |     r0 = fcn_0001adac (r0, r1);
    0x00039608 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003960a beq 0x395da                                       |         goto label_7;
                                                                 |     }
    0x0003960c mov sl, r0                                        |     sl = r0;
    0x0003960e b 0x393ac                                         |     goto label_8;
                                                                 | label_19:
    0x00039610 ldr.w r3, [fp, 0x30]                              |     r3 = *(arg_30h);
    0x00039614 movs r2, 1                                        |     r2 = 1;
    0x00039616 strh.w r2, [fp, 0x28]                             |     *(arg_28h) = r2;
    0x0003961a str.w sl, [r3]                                    |     __asm ("str.w sl, [r3]");
    0x0003961e mov.w r3, 0x2000                                  |     r3 = 0x2000;
    0x00039622 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x00039626 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00039628 strh.w r7, [fp, 0x12]                             |     *(arg_12h) = r7;
    0x0003962c strb.w r7, [fp, 0x11]                             |     *(arg_11h) = r7;
    0x00039630 str.w r7, [fp, 0x18]                              |     __asm ("str.w r7, [arg_18h]");
    0x00039634 str r7, [r3, 4]                                   |     *((r3 + 4)) = r7;
    0x00039636 str r7, [r3, 8]                                   |     *((r3 + 8)) = r7;
    0x00039638 b 0x395d4                                         |     goto label_9;
                                                                 | label_27:
    0x0003963a mov sl, r7                                        |     sl = r7;
    0x0003963c b 0x393ac                                         |     goto label_8;
                                                                 | label_18:
    0x0003963e blx 0x7e8c                                        |     fcn_00007e8c ();
    0x00039642 nop                                               |     
    0x00039644 ldr r1, [pc, 0x1a0]                               |     r1 = *(0x397e8);
    0x00039646 movs r1, r1                                       |     
    0x00039648 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x0003964a movs r0, r0                                       |     
    0x0003964c ldr r0, [pc, 0x380]                               |     r0 = *(0x399d0);
    0x0003964e movs r1, r1                                       |     
    0x00039650 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x00039654 mov r4, r1                                        |     r4 = r1;
    0x00039656 ldr r1, [pc, 0x1fc]                               |     
    0x00039658 sub sp, 0x10                                      |     
    0x0003965a ldr r3, [pc, 0x1fc]                               |     
    0x0003965c add r1, pc                                        |     r1 = 0x72eb6;
    0x0003965e ldr r2, [r0, 0x18]                                |     r2 = *(0x399e8);
    0x00039660 lsls r3, r1, 7                                    |     r3 = r1 << 7;
    0x00039662 ldr r5, [r2, 8]                                   |     r5 = *(0x399f0);
    0x00039664 ldrd r6, r1, [r2]                                 |     __asm ("ldrd r6, r1, [r2]");
    0x00039668 ldr r3, [r3]                                      |     r3 = *(0x3985a);
    0x0003966a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0003966c mov.w r3, 0                                       |     r3 = 0;
    0x00039670 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00039672 cmp r3, 0xa7                                      |     
                                                                 |     if (r3 == 0xa7) {
    0x00039674 beq 0x3969e                                       |         goto label_28;
                                                                 |     }
    0x00039676 adds r3, 0x5a                                     |     r3 += 0x5a;
    0x00039678 ands r3, r3, 0xfd                                 |     r3 &= 0xfd;
                                                                 |     if (r3 == r3) {
    0x0003967c beq 0x396fa                                       |         goto label_29;
                                                                 |     }
                                                                 |     do {
    0x0003967e movs r7, 0                                        |         r7 = 0;
                                                                 | label_10:
    0x00039680 ldr r2, [pc, 0x1d8]                               |         
    0x00039682 ldr r3, [pc, 0x1d4]                               |         r3 = *(0x3985a);
    0x00039684 add r2, pc                                        |         r2 = 0x72ee4;
    0x00039686 ldr r3, [r2, r3]                                  |         r3 = *(0x72ee4);
    0x00039688 ldr r2, [r3]                                      |         r2 = *(0x72ee4);
    0x0003968a ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003968c eors r2, r3                                       |         r2 ^= r3;
    0x0003968e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00039692 bne.w 0x3984e                                     |             goto label_30;
                                                                 |         }
    0x00039696 mov r0, r7                                        |         r0 = r7;
    0x00039698 add sp, 0x10                                      |         
    0x0003969a pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_28:
    0x0003969e ldr r7, [r2, 0x18]                                |         r7 = *((r2 + 0x18));
    0x000396a0 ands r7, r7, 0x20000                              |         r7 &= 0x20000;
    0x000396a4 bne 0x3967e                                       |         
                                                                 |     } while (r7 != r7);
    0x000396a6 ldr r2, [r0, 0x10]                                |     r2 = *((r0 + 0x10));
    0x000396a8 ldrb r3, [r4, 2]                                  |     r3 = *((r4 + 2));
    0x000396aa cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000396ac bne 0x39680                                       |         goto label_10;
                                                                 |     }
    0x000396ae ldrd r1, r3, [r5, 0x28]                           |     __asm ("ldrd r1, r3, [r5, 0x28]");
    0x000396b2 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000396b4 ble.w 0x397e2                                     |         goto label_31;
                                                                 |     }
    0x000396b8 add.w r8, r1, 0x14                                |     r8 = r1 + 0x14;
    0x000396bc mov sb, r7                                        |     sb = r7;
    0x000396be b 0x396ce                                         |     
                                                                 |     while (r1 == 0) {
                                                                 | label_11:
    0x000396c0 add.w sb, sb, 1                                   |         sb++;
    0x000396c4 add.w r8, r8, 0x14                                |         r8 += 0x14;
    0x000396c8 cmp r3, sb                                        |         
                                                                 |         if (r3 <= sb) {
    0x000396ca ble.w 0x397e0                                     |             goto label_32;
                                                                 |         }
    0x000396ce ldr r1, [r8, -0x14]                               |         r1 = *((r8 - 0x14));
    0x000396d2 cmp r1, r4                                        |         
                                                                 |         if (r1 == r4) {
    0x000396d4 beq 0x396ec                                       |             goto label_33;
                                                                 |         }
    0x000396d6 cmp r1, 0                                         |         
    0x000396d8 beq 0x396c0                                       |         
                                                                 |     }
    0x000396da mov.w r3, -1                                      |     r3 = -1;
    0x000396de mov r2, r4                                        |     r2 = r4;
    0x000396e0 movs r0, 0                                        |     r0 = 0;
    0x000396e2 bl 0x35ca8                                        |     fcn_00035ca8 (r0, r1, r2, r3);
    0x000396e6 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x000396e8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000396ea bne 0x396c0                                       |         goto label_11;
                                                                 |     }
                                                                 | label_33:
    0x000396ec cmp r3, sb                                        |     
                                                                 |     if (r3 <= sb) {
    0x000396ee ble 0x397e0                                       |         goto label_32;
                                                                 |     }
                                                                 | label_15:
    0x000396f0 movs r7, 1                                        |     r7 = 1;
    0x000396f2 strh.w sb, [r4, 0x22]                             |     *((r4 + 0x22)) = sb;
    0x000396f6 str r5, [r4, 0x28]                                |     *((r4 + 0x28)) = r5;
    0x000396f8 b 0x39680                                         |     goto label_10;
                                                                 |     if (r1 == 0) {
                                                                 | label_29:
    0x000396fa cbz r1, 0x39750                                   |         goto label_34;
                                                                 |     }
    0x000396fc ldr r7, [r1]                                      |     r7 = *(r1);
    0x000396fe cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x00039700 ble 0x39750                                       |         goto label_34;
                                                                 |     }
    0x00039702 add.w r7, r7, r7, lsl 3                           |     r7 += (r7 << 3);
    0x00039706 ldr r0, [r4, 0x1c]                                |     r0 = *((r4 + 0x1c));
    0x00039708 adds r1, 0x30                                     |     r1 += 0x30;
    0x0003970a lsls r7, r7, 1                                    |     r7 <<= 1;
    0x0003970c b 0x39714                                         |     
                                                                 |     while (r0 != r2) {
    0x0003970e adds r3, 0x12                                     |         r3 += 0x12;
    0x00039710 cmp r3, r7                                        |         
                                                                 |         if (r3 == r7) {
    0x00039712 beq 0x39750                                       |             goto label_34;
                                                                 |         }
    0x00039714 ldr.w r2, [r1, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r2 = *((r1 + offset_0));
    0x00039718 cmp r0, r2                                        |         
    0x0003971a bne 0x3970e                                       |         
                                                                 |     }
    0x0003971c ldrd lr, r1, [r5, 0x1c]                           |     __asm ("ldrd lr, r1, [r5, 0x1c]");
    0x00039720 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00039722 ble 0x39754                                       |         goto label_35;
                                                                 |     }
    0x00039724 mov r3, lr                                        |     r3 = lr;
    0x00039726 movs r2, 0                                        |     r2 = 0;
    0x00039728 b 0x39732                                         |     
                                                                 |     while (r0 != r7) {
                                                                 | label_12:
    0x0003972a adds r2, 1                                        |         r2++;
    0x0003972c adds r3, 0x14                                     |         r3 += 0x14;
    0x0003972e cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x00039730 beq 0x39754                                       |             goto label_35;
                                                                 |         }
    0x00039732 ldr r7, [r3, 8]                                   |         r7 = *((r3 + 8));
    0x00039734 cmp r0, r7                                        |         
    0x00039736 bne 0x3972a                                       |         
                                                                 |     }
    0x00039738 ldrsh.w ip, [r3, 0x10]                            |     ip = *((r3 + 0x10));
    0x0003973c ldrsh.w r7, [r4, 0x20]                            |     r7 = *((r4 + 0x20));
    0x00039740 cmp ip, r7                                        |     
                                                                 |     if (ip != r7) {
    0x00039742 bne 0x3972a                                       |         goto label_12;
                                                                 |     }
                                                                 |     do {
                                                                 | label_14:
    0x00039744 movs r3, 0xa8                                     |         r3 = 0xa8;
    0x00039746 movs r7, 1                                        |         r7 = 1;
    0x00039748 str r5, [r4, 0x28]                                |         *((r4 + 0x28)) = r5;
    0x0003974a strb r3, [r4]                                     |         *(r4) = r3;
    0x0003974c strh r2, [r4, 0x22]                               |         *((r4 + 0x22)) = r2;
    0x0003974e b 0x39680                                         |         goto label_10;
                                                                 | label_34:
    0x00039750 movs r7, 1                                        |         r7 = 1;
    0x00039752 b 0x39680                                         |         goto label_10;
                                                                 | label_35:
    0x00039754 add r3, sp, 8                                     |         r3 += var_8h_2;
    0x00039756 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00039758 movs r2, 0x14                                     |         r2 = 0x14;
    0x0003975a str r3, [sp]                                      |         *(sp) = r3;
    0x0003975c mov r1, lr                                        |         r1 = lr;
    0x0003975e add.w r3, r5, 0x20                                |         r3 = r5 + 0x20;
    0x00039762 bl 0x1b3ec                                        |         fcn_0001b3ec (r0, r1, r2, r3, r4);
    0x00039766 ldr r2, [sp, 8]                                   |         r2 = var_8h_2;
    0x00039768 str r0, [r5, 0x1c]                                |         *((r5 + 0x1c)) = r0;
    0x0003976a cmp r2, 0                                         |         
    0x0003976c blt 0x39744                                       |         
                                                                 |     } while (r2 < 0);
    0x0003976e add.w ip, r2, r2, lsl 2                           |     
    0x00039772 ldr r1, [r6, 0x2c]                                |     r1 = *((r6 + 0x2c));
    0x00039774 ldr r7, [r4, 0x2c]                                |     r7 = *((r4 + 0x2c));
    0x00039776 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00039778 lsl.w ip, ip, 2                                   |     
    0x0003977c ldr.w lr, [r4, 0x1c]                              |     
    0x00039780 adds r1, 1                                        |     r1++;
    0x00039782 ldrsh.w r8, [r4, 0x20]                            |     r8 = *((r4 + 0x20));
    0x00039786 str.w r7, [r0, ip]                                |     __asm ("str.w r7, [r0, ip]");
    0x0003978a add.w r7, r0, ip                                  |     r7 = r0 + ip;
    0x0003978e str.w lr, [r7, 8]                                 |     __asm ("str.w lr, [r7, 8]");
    0x00039792 strh.w r8, [r7, 0x10]                             |     *((r7 + 0x10)) = r8;
    0x00039796 str r1, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r1;
    0x00039798 str r1, [r7, 0xc]                                 |     *((r7 + 0xc)) = r1;
    0x0003979a str r4, [r7, 4]                                   |     *((r7 + 4)) = r4;
                                                                 |     if (r3 == 0) {
    0x0003979c cbz r3, 0x397d6                                   |         goto label_36;
                                                                 |     }
    0x0003979e ldr.w ip, [r3]                                    |     ip = *(r3);
    0x000397a2 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x000397a6 ble 0x397d6                                       |         goto label_36;
                                                                 |     }
    0x000397a8 adds r3, 0x18                                     |     r3 += 0x18;
    0x000397aa movs r1, 0                                        |     r1 = 0;
    0x000397ac b 0x397b6                                         |     
                                                                 |     while (r6 != 0xa6) {
                                                                 | label_13:
    0x000397ae adds r1, 1                                        |         r1++;
    0x000397b0 adds r3, 0x10                                     |         r3 += 0x10;
    0x000397b2 cmp ip, r1                                        |         
                                                                 |         if (ip == r1) {
    0x000397b4 beq 0x397d6                                       |             goto label_36;
                                                                 |         }
    0x000397b6 ldr r0, [r3, -0x10]                               |         r0 = *((r3 - 0x10));
    0x000397ba ldrb r6, [r0]                                     |         r6 = *(r0);
    0x000397bc cmp r6, 0xa6                                      |         
    0x000397be bne 0x397ae                                       |         
                                                                 |     }
    0x000397c0 ldr r6, [r0, 0x1c]                                |     r6 = *((r0 + 0x1c));
    0x000397c2 cmp lr, r6                                        |     
                                                                 |     if (lr != r6) {
    0x000397c4 bne 0x397ae                                       |         goto label_13;
                                                                 |     }
    0x000397c6 ldrsh.w r0, [r0, 0x20]                            |     r0 = *((r0 + 0x20));
    0x000397ca cmp r0, r8                                        |     
                                                                 |     if (r0 != r8) {
    0x000397cc bne 0x397ae                                       |         goto label_13;
                                                                 |     }
    0x000397ce sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x000397d0 cmp r1, 0                                         |     
    0x000397d2 strh r1, [r7, 0x12]                               |     *((r7 + 0x12)) = r1;
                                                                 |     if (r1 >= 0) {
    0x000397d4 bge 0x39744                                       |         goto label_14;
                                                                 |     }
                                                                 | label_36:
    0x000397d6 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000397d8 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x000397da str r1, [r5, 0xc]                                 |     *((r5 + 0xc)) = r1;
    0x000397dc strh r3, [r7, 0x12]                               |     *((r7 + 0x12)) = r3;
    0x000397de b 0x39744                                         |     goto label_14;
                                                                 | label_32:
    0x000397e0 ldr r1, [r5, 0x28]                                |     r1 = *((r5 + 0x28));
                                                                 | label_31:
    0x000397e2 ldr r0, [r6]                                      |     r0 = *(r6);
    0x000397e4 add.w ip, sp, 8                                   |     
    0x000397e8 add.w r3, r5, 0x2c                                |     r3 = r5 + 0x2c;
    0x000397ec movs r2, 0x14                                     |     r2 = 0x14;
    0x000397ee ldrb.w sl, [r0, 0x50]                             |     sl = *((r0 + 0x50));
    0x000397f2 str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x000397f6 bl 0x1b3ec                                        |     fcn_0001b3ec (r0, r1, r2, r3, r4);
    0x000397fa ldr.w sb, [sp, 8]                                 |     sb = var_8h_2;
    0x000397fe str r0, [r5, 0x28]                                |     *((r5 + 0x28)) = r0;
    0x00039800 cmp.w sb, 0                                       |     
                                                                 |     if (sb < 0) {
    0x00039804 blt.w 0x396f0                                     |         goto label_15;
                                                                 |     }
    0x00039808 add.w r3, sb, sb, lsl 2                           |     r3 = sb + (sb << 2);
    0x0003980c ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0003980e lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00039810 str r4, [r0, r3]                                  |     *((r0 + r3)) = r4;
    0x00039812 add.w r8, r0, r3                                  |     r8 = r0 + r3;
    0x00039816 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x00039818 ldr r0, [r6]                                      |     r0 = *(r6);
    0x0003981a adds r3, 1                                        |     r3++;
    0x0003981c str r3, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r3;
    0x0003981e str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x00039822 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
                                                                 |     if (r3 != 0) {
    0x00039824 cbz r3, 0x39828                                   |         
    0x00039826 ldr r7, [r3]                                      |         r7 = *(r3);
                                                                 |     }
    0x00039828 mov r2, r7                                        |     r2 = r7;
    0x0003982a movs r7, 0                                        |     r7 = 0;
    0x0003982c mov r3, sl                                        |     r3 = sl;
    0x0003982e str r7, [sp]                                      |     *(sp) = r7;
    0x00039830 bl 0x2a3a0                                        |     fcn_0002a3a0 (r0, r1, r2, r3, r4, r5);
    0x00039834 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00039836 str.w r0, [r8, 4]                                 |     __asm ("str.w r0, [r8, 4]");
    0x0003983a lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x0003983c itett mi                                          |     
                                                                 |     if (r3 >= r3) {
    0x0003983e ldrmi r3, [r6, 0x28]                              |         r3 = *((r6 + 0x28));
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00039840 movpl r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x00039844 addmi r2, r3, 1                                   |         r2 = r3 + 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00039846 str r2, [r6, 0x28]                                |         *((r6 + 0x28)) = r2;
                                                                 |     }
    0x00039848 str.w r3, [r8, 0xc]                               |     __asm ("str.w r3, [r8, 0xc]");
    0x0003984c b 0x396f0                                         |     goto label_15;
                                                                 | label_30:
    0x0003984e blx 0x7e8c                                        |     fcn_00007e8c ();
    0x00039852 nop                                               |     
    0x00039854 mov r4, r6                                        |     r4 = r6;
    0x00039856 movs r1, r1                                       |     
    0x00039858 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x0003985a movs r0, r0                                       |     
    0x0003985c mov r4, r1                                        |     r4 = r1;
    0x0003985e movs r1, r1                                       |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x56ac4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 | #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
                                                                 |                                  ((val & 0x000000000000ff00ull) << 40) | \
                                                                 |                                  ((val & 0x0000000000ff0000ull) << 24) | \
                                                                 |                                  ((val & 0x00000000ff000000ull) <<  8) | \
                                                                 |                                  ((val & 0x000000ff00000000ull) >>  8) | \
                                                                 |                                  ((val & 0x0000ff0000000000ull) >> 24) | \
                                                                 |                                  ((val & 0x00ff000000000000ull) >> 40) | \
                                                                 |                                  ((val & 0xff00000000000000ull) >> 56)))
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00056ac4 ()                                      | void fcn_00056ac4 (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_2h;
                                                                 |     int16_t var_2h_2;
                                                                 |     int16_t var_sp_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_aeh;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_100h;
                                                                 |     int16_t var_114h;
                                                                 |     int16_t var_118h;
                                                                 |     int16_t var_128h;
                                                                 |     int16_t var_12ch;
                                                                 |     int16_t var_13ch;
                                                                 |     int16_t var_140h;
                                                                 |     int16_t var_144h;
                                                                 |     int16_t var_148h;
                                                                 |     int16_t var_14ch;
                                                                 |     int16_t var_164h;
                                                                 |     int16_t var_168h;
                                                                 |     int16_t var_17ch;
                                                                 |     int16_t var_180h;
                                                                 |     int16_t var_184h;
                                                                 |     int16_t var_188h;
                                                                 |     int16_t var_1b0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00056ac4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00056ac8 sub sp, 0x18c                                     |     
    0x00056aca strd r1, r3, [sp, 0x58]                           |     __asm ("strd r1, r3, [sp, 0x58]");
    0x00056ace mov r5, r1                                        |     r5 = r1;
    0x00056ad0 mov sl, r0                                        |     sl = r0;
    0x00056ad2 add.w fp, sp, 0x80                                |     
    0x00056ad6 ldr.w r1, [pc, 0xb34]                             |     
    0x00056ada ldr.w r3, [pc, 0xb34]                             |     r3 = *(0x57612);
    0x00056ade ldr r0, [r0, 0x34]                                |     r0 = *(var_0hx34);
    0x00056ae0 add r1, pc                                        |     r1 = 0xae0f2;
    0x00056ae2 ldr r3, [r1, r3]                                  |     
    0x00056ae4 ldr r3, [r3]                                      |     r3 = *(0xae0f2);
    0x00056ae6 str r3, [sp, 0x184]                               |     var_184h = r3;
    0x00056ae8 mov.w r3, 0                                       |     r3 = 0;
    0x00056aec movs r3, 0                                        |     r3 = 0;
    0x00056aee strb.w r3, [sp, 0x180]                            |     var_180h = r3;
    0x00056af2 str r3, [sp, 0x17c]                               |     var_17ch = r3;
    0x00056af4 str r3, [sp, 0x13c]                               |     var_13ch = r3;
    0x00056af6 str r3, [sp, 0x144]                               |     var_144h = r3;
    0x00056af8 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x00056afc str r0, [sp, 0x40]                                |     var_40h = r0;
    0x00056afe str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00056b00 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00056b02 beq.w 0x5729c                                     |         goto label_51;
                                                                 |     }
    0x00056b06 ldrb.w r1, [sl, 0xc]                              |     r1 = *((sl + 0xc));
    0x00056b0a ldrh.w r0, [sl, 0x18]                             |     r0 = *((sl + 0x18));
    0x00056b0e adds r2, r1, r0                                   |     r2 = r1 + r0;
    0x00056b10 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x00056b12 ble.w 0x56ff0                                     |         goto label_52;
                                                                 |     }
    0x00056b16 ldr r4, [sp, 0x1b0]                               |     r4 = var_1b0h;
    0x00056b18 rsb.w r4, r4, 2                                   |     r4 = 2 - r4;
    0x00056b1c str r4, [sp, 0x30]                                |     var_30h = r4;
    0x00056b1e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00056b20 bne.w 0x56cae                                     |         goto label_53;
                                                                 |     }
    0x00056b24 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00056b26 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00056b28 str r2, [sp, 0x24]                                |     var_24h = r2;
                                                                 | label_0:
    0x00056b2a subs r3, r3, r1                                   |     r3 -= r1;
    0x00056b2c ldr.w r1, [sl, 0x38]                              |     r1 = *((sl + 0x38));
    0x00056b30 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00056b32 beq.w 0x57950                                     |         goto label_54;
                                                                 |     }
    0x00056b36 ldr.w r2, [sl, 0x40]                              |     r2 = *((sl + 0x40));
    0x00056b3a ldrh.w r2, [r2, r3, lsl 1]                        |     offset_0 = r3 << 1;
                                                                 |     r2 = *((r2 + offset_0));
    0x00056b3e ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x00056b42 rev16 r2, r2                                      |     __asm ("rev16 r2, r2");
    0x00056b44 ands r3, r2                                       |     r3 &= r2;
    0x00056b46 adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00056b48 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_11:
    0x00056b4a ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00056b4c add r2, sp, 0x84                                  |     r2 += var_84h;
    0x00056b4e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056b50 add r0, sp, 0x100                                 |     r0 += var_100h;
    0x00056b52 ldr.w sb, [sp, 0x40]                              |     sb = var_40h;
    0x00056b56 add r5, sp, 0xb8                                  |     r5 += var_b8h;
    0x00056b58 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00056b5a add r2, sp, 0xa4                                  |     r2 += var_a4h;
    0x00056b5c ldr r1, [r3]                                      |     r1 = *(r3);
    0x00056b5e lsls r3, r4, 2                                    |     r3 = r4 << 2;
    0x00056b60 str r5, [sp, 0x28]                                |     var_28h = r5;
    0x00056b62 adds r7, r2, r3                                   |     r7 = r2 + r3;
    0x00056b64 add.w r8, r0, r3                                  |     r8 = r0 + r3;
    0x00056b68 add r5, r3                                        |     r5 += r3;
    0x00056b6a rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00056b6c str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00056b6e str r1, [sp, 0x84]                                |     var_84h = r1;
    0x00056b70 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00056b72 str r0, [sp, 0x50]                                |     var_50h = r0;
                                                                 | label_2:
    0x00056b74 movs r3, 0                                        |     r3 = 0;
    0x00056b76 mov r2, r5                                        |     r2 = r5;
    0x00056b78 str r3, [sp]                                      |     *(sp) = r3;
    0x00056b7a mov r0, sb                                        |     r0 = sb;
    0x00056b7c bl 0x25034                                        |     fcn_00025034 (r0, r1, r2, r3, r4);
    0x00056b80 lsls r3, r4, 2                                    |     r3 = r4 << 2;
    0x00056b82 mov r6, r0                                        |     r6 = r0;
    0x00056b84 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00056b88 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00056b8a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00056b8c bne.w 0x574e4                                     |         goto label_55;
                                                                 |     }
    0x00056b90 ldr r0, [r5], -4                                  |     r0 = *(r5);
                                                                 |     r5 += -4;
    0x00056b94 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x00056b96 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00056b98 blt.w 0x56cec                                     |         goto label_56;
                                                                 |     }
                                                                 | label_3:
    0x00056b9c subs r4, 1                                        |     r4--;
                                                                 |     if (r4 <= 1) {
    0x00056b9e blo.w 0x56d32                                     |         goto label_57;
                                                                 |     }
    0x00056ba2 ldrb.w r1, [sl, 0xc]                              |     r1 = *((sl + 0xc));
    0x00056ba6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00056ba8 ldr.w r2, [sl, 0x4c]                              |     r2 = *((sl + 0x4c));
    0x00056bac ldr.w r6, [fp]                                    |     r6 = *(fp);
    0x00056bb0 adds r3, r4, r3                                   |     r3 = r4 + r3;
                                                                 |     if (r1 != 0) {
    0x00056bb2 cbz r1, 0x56bbe                                   |         
    0x00056bb4 ldrh.w r0, [sl, 0x1c]                             |         r0 = *((sl + 0x1c));
    0x00056bb8 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x00056bba beq.w 0x56d10                                     |             goto label_58;
                                                                 |         }
                                                                 |     }
    0x00056bbe ldr.w r0, [sl, 0x40]                              |     r0 = *((sl + 0x40));
    0x00056bc2 subs r1, r3, r1                                   |     r1 = r3 - r1;
    0x00056bc4 ldrh.w ip, [sl, 0x1a]                             |     ip = *((sl + 0x1a));
    0x00056bc8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00056bca ldrh.w r1, [r0, r1, lsl 1]                        |     offset_1 = r1 << 1;
                                                                 |     r1 = *((r0 + offset_1));
    0x00056bce mov r0, sl                                        |     r0 = sl;
    0x00056bd0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00056bd2 rev16 r1, r1                                      |     __asm ("rev16 r1, r1");
    0x00056bd4 and.w ip, ip, r1                                  |     
    0x00056bd8 ldr.w r1, [sl, 0x38]                              |     r1 = *((sl + 0x38));
    0x00056bdc ldr.w lr, [r1, ip]                                |     
    0x00056be0 add r1, ip                                        |     r1 += ip;
    0x00056be2 str r1, [r7, -0x4]                                |     *((r7 - 0x4)) = r1;
    0x00056be6 str r1, [sp, 0x1c]                                |     var_1ch_2 = r1;
    0x00056be8 rev.w lr, lr                                      |     lr = SWAPundefined (lr);
    0x00056bec str.w lr, [r3]                                    |     __asm ("str.w lr, [r3]");
    0x00056bf0 blx r2                                            |     r0 = uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00056bf2 mov r2, r0                                        |     r2 = r0;
    0x00056bf4 str r0, [r8, -0x4]                                |     *((r8 - 0x4)) = r0;
    0x00056bf8 ldrh.w r0, [sb, 0x18]                             |     r0 = *((sb + 0x18));
    0x00056bfc ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00056bfe and r0, r0, 0xc                                   |     r0 &= 0xc;
                                                                 |     if (r0 != 0) {
    0x00056c02 cbz r0, 0x56c1a                                   |         
    0x00056c04 ldr.w r0, [sl, 0x38]                              |         r0 = *((sl + 0x38));
    0x00056c08 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch_2;
    0x00056c0a sub.w lr, r1, r0                                  |         lr = r1 - r0;
    0x00056c0e ldr.w r0, [sb, 0x28]                              |         r0 = *((sb + 0x28));
    0x00056c12 add.w ip, r2, lr                                  |         
    0x00056c16 cmp ip, r0                                        |         
                                                                 |         if (ip <= r0) {
    0x00056c18 ble 0x56cc0                                       |             goto label_59;
                                                                 |         }
                                                                 |     }
                                                                 |     if (r6 == 0) {
                                                                 | label_1:
    0x00056c1a cbnz r6, 0x56c38                                  |         
    0x00056c1c ldrb.w r1, [sl, 0xc]                              |         r1 = *((sl + 0xc));
    0x00056c20 mov r0, sl                                        |         r0 = sl;
    0x00056c22 subs r1, r3, r1                                   |         r1 = r3 - r1;
    0x00056c24 mov r3, fp                                        |         r3 = fp;
    0x00056c26 bl 0x333e0                                        |         fcn_000333e0 (r0, r1, r2, r3);
    0x00056c2a ldr.w r6, [fp]                                    |         r6 = *(fp);
                                                                 | label_5:
    0x00056c2e subs r7, 4                                        |         r7 -= 4;
    0x00056c30 sub.w r8, r8, 4                                   |         r8 -= 4;
    0x00056c34 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00056c36 beq 0x56ce6                                       |             goto label_60;
                                                                 |         }
                                                                 |     }
                                                                 | label_25:
    0x00056c38 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00056c3a movs r3, 0xc                                      |     r3 = 0xc;
    0x00056c3c ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00056c3e ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00056c40 adds r1, 1                                        |     r1++;
    0x00056c42 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00056c44 movs r1, 0                                        |     r1 = 0;
    0x00056c46 blx 0x7df0                                        |     fcn_00007df0 ();
    0x00056c4a movs r3, 0                                        |     r3 = 0;
    0x00056c4c str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 | label_4:
    0x00056c4e ldr r0, [sp, 0x144]                               |     r0 = var_144h;
                                                                 |     if (r0 != 0) {
    0x00056c50 cbz r0, 0x56c56                                   |         
    0x00056c52 blx 0x84f8                                        |         fcn_000084f8 ();
                                                                 |     }
    0x00056c56 ldr.w r5, [fp]                                    |     r5 = *(fp);
                                                                 | label_19:
    0x00056c5a ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00056c5c movs r4, 0                                        |     r4 = 0;
    0x00056c5e ldr r7, [sp, 0x44]                                |     r7 = var_44h;
                                                                 |     do {
    0x00056c60 ldr r3, [r6], 4                                   |         r3 = *(r6);
                                                                 |         r6 += 4;
                                                                 |         if (r3 != 0) {
    0x00056c64 cbz r3, 0x56c6c                                   |             
    0x00056c66 ldr r0, [r3, 0x48]                                |             r0 = *((r3 + 0x48));
    0x00056c68 bl 0x11fa4                                        |             fcn_00011fa4 (r0);
                                                                 |         }
    0x00056c6c adds r4, 1                                        |         r4++;
    0x00056c6e cmp r4, r7                                        |         
    0x00056c70 bne 0x56c60                                       |         
                                                                 |     } while (r4 != r7);
    0x00056c72 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
                                                                 |     if (r3 == 0) {
    0x00056c74 cbz r3, 0x56c8c                                   |         goto label_17;
                                                                 |     }
    0x00056c76 add r4, sp, 0xc4                                  |     r4 += var_c4h;
    0x00056c78 add.w r6, r4, r3, lsl 2                           |     r6 = r4 + (r3 << 2);
                                                                 |     do {
    0x00056c7c ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
                                                                 |         if (r3 != 0) {
    0x00056c80 cbz r3, 0x56c88                                   |             
    0x00056c82 ldr r0, [r3, 0x48]                                |             r0 = *((r3 + 0x48));
    0x00056c84 bl 0x11fa4                                        |             fcn_00011fa4 (r0);
                                                                 |         }
    0x00056c88 cmp r6, r4                                        |         
    0x00056c8a bne 0x56c7c                                       |         
                                                                 |     } while (r6 != r4);
                                                                 | label_17:
    0x00056c8c ldr.w r2, [pc, 0x984]                             |     
    0x00056c90 ldr.w r3, [pc, 0x97c]                             |     r3 = *(0x57610);
    0x00056c94 add r2, pc                                        |     r2 = 0xae2ac;
    0x00056c96 ldr r3, [r2, r3]                                  |     r3 = *(0xae2ac);
    0x00056c98 ldr r2, [r3]                                      |     r2 = *(0xae2ac);
    0x00056c9a ldr r3, [sp, 0x184]                               |     r3 = var_184h;
    0x00056c9c eors r2, r3                                       |     r2 ^= r3;
    0x00056c9e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00056ca2 bne.w 0x574ec                                     |         goto label_61;
                                                                 |     }
    0x00056ca6 mov r0, r5                                        |     r0 = r5;
    0x00056ca8 add sp, 0x18c                                     |     
    0x00056caa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_53:
    0x00056cae cmp r2, r5                                        |     
                                                                 |     if (r2 == r5) {
    0x00056cb0 beq.w 0x57004                                     |         goto label_62;
                                                                 |     }
    0x00056cb4 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00056cb6 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00056cb8 subs r3, 1                                        |     r3--;
    0x00056cba str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00056cbc add r3, r2                                        |     r3 += r2;
    0x00056cbe b 0x56b2a                                         |     goto label_0;
                                                                 | label_59:
    0x00056cc0 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00056cc2 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00056cc4 str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
    0x00056cc6 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00056cc8 add.w r0, lr, r3                                  |     r0 = lr + r3;
    0x00056ccc blx 0x7dcc                                        |     fcn_00007dcc ();
    0x00056cd0 ldr.w r0, [sl, 0x38]                              |     r0 = *((sl + 0x38));
    0x00056cd4 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00056cd6 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00056cd8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch_2;
    0x00056cda subs r1, r1, r0                                   |     r1 -= r0;
    0x00056cdc add r1, r3                                        |     r1 += r3;
    0x00056cde ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00056ce0 str r1, [r7, -0x4]                                |     *((r7 - 0x4)) = r1;
    0x00056ce4 b 0x56c1a                                         |     goto label_1;
                                                                 | label_60:
    0x00056ce6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00056ce8 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00056cea b 0x56b74                                         |     goto label_2;
                                                                 | label_56:
    0x00056cec bl 0x2ead0                                        |     fcn_0002ead0 (r0);
    0x00056cf0 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00056cf4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056cf6 beq.w 0x56b9c                                     |         goto label_3;
                                                                 |     }
    0x00056cfa ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00056cfc mov r1, r6                                        |     r1 = r6;
    0x00056cfe ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00056d00 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00056d02 adds r3, 1                                        |     r3++;
    0x00056d04 str r6, [sp, 0x48]                                |     var_48h = r6;
    0x00056d06 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00056d08 movs r3, 0xc                                      |     r3 = 0xc;
    0x00056d0a blx 0x7df0                                        |     fcn_00007df0 ();
    0x00056d0e b 0x56c4e                                         |     goto label_4;
                                                                 | label_58:
    0x00056d10 ldr.w r1, [sl, 0x24]                              |     r1 = *((sl + 0x24));
    0x00056d14 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00056d16 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00056d18 str r1, [r7, -0x4]                                |     *((r7 - 0x4)) = r1;
    0x00056d1c rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00056d1e str r3, [r0]                                      |     *(r0) = r3;
    0x00056d20 mov r0, sl                                        |     r0 = sl;
    0x00056d22 blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00056d24 mov.w r3, 0                                       |     r3 = 0;
    0x00056d28 str r0, [r8, -0x4]                                |     *((r8 - 0x4)) = r0;
    0x00056d2c strb.w r3, [sl, 0xc]                              |     *((sl + 0xc)) = r3;
    0x00056d30 b 0x56c2e                                         |     goto label_5;
                                                                 | label_57:
    0x00056d32 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00056d34 movw r1, 0xaaab                                   |     
    0x00056d38 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
                                                                 |     /* if there is a right shift of 1, then it's a division by 1/3 */
    0x00056d3a movt r1, 0xaaaa                                   |     r1 = 0xaaaaaaab;
    0x00056d3e str r6, [sp, 0x48]                                |     var_48h = r6;
    0x00056d40 ldr r0, [r3, 0x24]                                |     r0 = *((r3 + 0x24));
    0x00056d42 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00056d44 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00056d46 sub.w r3, r0, 8                                   |     r3 = r0 - 8;
    0x00056d4a umull r1, r3, r1, r3                              |     r1:r3 = r1 * r3;
    0x00056d4e lsrs r3, r3, 2                                    |     r3 >>= 2;
    0x00056d50 adds r3, 4                                        |     r3 += 4;
    0x00056d52 mla r3, r2, r3, r3                                |     __asm ("mla r3, r2, r3, r3");
    0x00056d56 adds r4, r3, 3                                    |     r4 = r3 + 3;
    0x00056d58 bic r4, r4, 3                                     |     r4 = BIT_MASK (r4, 3);
    0x00056d5c lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x00056d5e adds r3, r5, r4                                   |     r3 = r5 + r4;
    0x00056d60 add.w r0, r0, r3, lsl 1                           |     r0 += (r3 << 1);
    0x00056d64 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00056d66 bl 0x12abc                                        |     fcn_00012abc (r0);
    0x00056d6a ldr r3, [sp, 0xb8]                                |     r3 = var_b8h;
    0x00056d6c str r0, [sp, 0x144]                               |     var_144h = r0;
    0x00056d6e str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00056d70 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056d72 beq.w 0x572e4                                     |         goto label_63;
                                                                 |     }
    0x00056d76 ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x00056d78 add.w r0, r0, r4, lsl 2                           |     r0 += (r4 << 2);
    0x00056d7c ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x00056d80 adds r3, r0, r5                                   |     r3 = r0 + r5;
    0x00056d82 str r0, [sp, 0x148]                               |     var_148h = r0;
    0x00056d84 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00056d86 mov r6, r1                                        |     r6 = r1;
    0x00056d88 ldrb r3, [r1, 8]                                  |     r3 = *((r1 + 8));
    0x00056d8a str r1, [sp, 0x140]                               |     var_140h = r1;
    0x00056d8c ldrb r2, [r1, 3]                                  |     r2 = *((r1 + 3));
    0x00056d8e str.w sl, [sp, 0x68]                              |     __asm ("str.w sl, [var_68h]");
    0x00056d92 mov sl, r1                                        |     sl = r1;
    0x00056d94 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00056d96 str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [var_3ch]");
    0x00056d9a str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00056d9c movs r2, 0                                        |     r2 = 0;
    0x00056d9e mov r8, r2                                        |     r8 = r2;
    0x00056da0 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00056da2 add r3, sp, 0xec                                  |     r3 += var_ech;
    0x00056da4 str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
    0x00056da6 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_6:
    0x00056da8 ldr r4, [r6, 0x38]                                |     r4 = *((r6 + 0x38));
    0x00056daa ldr.w r3, [sl, 0x38]                              |     r3 = *((sl + 0x38));
    0x00056dae ldrh r7, [r6, 0x12]                               |     r7 = *((r6 + 0x12));
    0x00056db0 ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00056db2 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00056db4 ldrh.w fp, [r6, 0x18]                             |     fp = *((r6 + 0x18));
    0x00056db8 add r7, r4                                        |     r7 += r4;
    0x00056dba ldrh r5, [r6, 0x1a]                               |     r5 = *((r6 + 0x1a));
    0x00056dbc cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00056dbe bne.w 0x57248                                     |         goto label_64;
                                                                 |     }
    0x00056dc2 ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x00056dc4 movs r1, 0                                        |     r1 = 0;
    0x00056dc6 ldr r0, [sp, 0x13c]                               |     r0 = var_13ch;
    0x00056dc8 ldr r3, [sp, 0x148]                               |     r3 = var_148h;
    0x00056dca add r2, fp                                        |     r2 += fp;
    0x00056dcc lsls r2, r2, 1                                    |     r2 <<= 1;
    0x00056dce add.w r0, r3, r0, lsl 1                           |     r0 = r3 + (r0 << 1);
    0x00056dd0 lsls r0, r0, 1                                    |     r0 <<= 1;
    0x00056dd2 blx 0x8264                                        |     fcn_00008264 ();
    0x00056dd6 ldrb.w ip, [r6, 0xc]                              |     ip = *((r6 + 0xc));
    0x00056dda cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x00056dde bne 0x56e4a                                       |         goto label_65;
                                                                 |     }
    0x00056de0 ldr r2, [sp, 0x13c]                               |     r2 = var_13ch;
                                                                 | label_7:
    0x00056de2 ldrh r3, [r6, 0x18]                               |     r3 = *((r6 + 0x18));
    0x00056de4 ldrh.w ip, [r6, 0x12]                             |     ip = *((r6 + 0x12));
    0x00056de8 add.w ip, ip, r3, lsl 1                           |     
    0x00056dec add ip, r4                                        |     
    0x00056dee cmp r7, ip                                        |     
                                                                 |     if (r7 >= ip) {
    0x00056df0 bhs 0x56e1e                                       |         goto label_66;
                                                                 |     }
    0x00056df2 ldr r0, [sp, 0x144]                               |     r0 = var_144h;
    0x00056df4 mov r1, r7                                        |     r1 = r7;
    0x00056df6 add.w r0, r0, r2, lsl 2                           |     r0 += (r2 << 2);
                                                                 |     do {
    0x00056dfa ldrh r3, [r1], 2                                  |         r3 = *(r1);
                                                                 |         r1 += 2;
    0x00056dfe rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x00056e00 cmp ip, r1                                        |         
    0x00056e02 and.w r3, r3, r5                                  |         r3 &= r5;
    0x00056e06 add r3, r4                                        |         r3 += r4;
    0x00056e08 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x00056e0c bhi 0x56dfa                                       |         
                                                                 |     } while (ip > r1);
    0x00056e0e add.w ip, ip, -1                                  |     
    0x00056e12 adds r2, 1                                        |     r2++;
    0x00056e14 sub.w ip, ip, r7                                  |     
    0x00056e18 add.w r2, r2, ip, lsr 1                           |     r2 += (ip >> 1);
    0x00056e1c str r2, [sp, 0x13c]                               |     var_13ch = r2;
                                                                 | label_66:
    0x00056e1e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00056e20 str.w r2, [r3, r8, lsl 2]                         |     __asm ("str.w r2, [r3, r8, lsl 2]");
    0x00056e24 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00056e26 clz r4, r3                                        |     r4 &= r3;
    0x00056e2a lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x00056e2c cmp sb, r8                                        |     
    0x00056e2e ite le                                            |     
                                                                 |     if (sb > r8) {
    0x00056e30 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (sb <= r8) {
    0x00056e32 andgt r3, r4, 1                                   |         r3 = r4 & 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00056e36 cbnz r3, 0x56ea0                                  |         goto label_67;
                                                                 |     }
    0x00056e38 cmp sb, r8                                        |     
    0x00056e3a add.w r3, r8, 1                                   |     r3 = r8 + 1;
                                                                 |     if (sb == r8) {
    0x00056e3e beq 0x56efe                                       |         goto label_68;
                                                                 |     }
                                                                 | label_8:
    0x00056e40 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00056e42 mov r8, r3                                        |     r8 = r3;
    0x00056e44 ldr.w r6, [r2, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r6 = *((r2 + offset_2));
    0x00056e48 b 0x56da8                                         |     goto label_6;
                                                                 | label_65:
    0x00056e4a ldrh.w lr, [r6, 0x1c]                             |     
    0x00056e4e cmp fp, lr                                        |     
                                                                 |     if (fp <= lr) {
    0x00056e50 blo.w 0x572ec                                     |         goto label_69;
                                                                 |     }
    0x00056e54 ldr.w fp, [sp, 0x144]                             |     fp = var_144h;
    0x00056e58 ldr r2, [sp, 0x13c]                               |     r2 = var_13ch;
    0x00056e5a cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x00056e5e beq 0x56e80                                       |         goto label_70;
                                                                 |     }
    0x00056e60 mov r1, r7                                        |     r1 = r7;
    0x00056e62 add.w r0, fp, r2, lsl 2                           |     r0 = fp + (r2 << 2);
    0x00056e66 add.w r7, r7, lr, lsl 1                           |     r7 += (lr << 1);
                                                                 |     do {
    0x00056e6a ldrh r3, [r1], 2                                  |         r3 = *(r1);
                                                                 |         r1 += 2;
    0x00056e6e rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x00056e70 cmp r7, r1                                        |         
    0x00056e72 and.w r3, r3, r5                                  |         r3 &= r5;
    0x00056e76 add r3, r4                                        |         r3 += r4;
    0x00056e78 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x00056e7c bne 0x56e6a                                       |         
                                                                 |     } while (r7 != r1);
    0x00056e7e add r2, lr                                        |     r2 += lr;
                                                                 | label_70:
    0x00056e80 add.w r3, r6, 0x24                                |     r3 = r6 + 0x24;
    0x00056e84 movs r1, 4                                        |     r1 = 4;
    0x00056e86 add.w fp, fp, r2, lsl 2                           |     
    0x00056e8a smlabb r0, r1, ip, r3                             |     __asm ("smlabb r0, r1, ip, r3");
                                                                 |     do {
    0x00056e8e ldr r1, [r3], 4                                   |         r1 = *(r3);
                                                                 |         r3 += 4;
    0x00056e92 cmp r0, r3                                        |         
    0x00056e94 str r1, [fp], 4                                   |         *(fp) = r1;
                                                                 |         fp += 4;
    0x00056e98 bne 0x56e8e                                       |         
                                                                 |     } while (r0 != r3);
    0x00056e9a add r2, ip                                        |     r2 += ip;
    0x00056e9c str r2, [sp, 0x13c]                               |     var_13ch = r2;
    0x00056e9e b 0x56de2                                         |     goto label_7;
                                                                 | label_67:
    0x00056ea0 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00056ea2 ldr r1, [sp, 0x148]                               |     r1 = var_148h;
    0x00056ea4 ldr.w r3, [r3, r8, lsl 2]                         |     offset_3 = r8 << 2;
                                                                 |     r3 = *((r3 + offset_3));
    0x00056ea8 strh.w r3, [r1, r2, lsl 1]                        |     offset_4 = r2 << 1;
                                                                 |     *((r1 + offset_4)) = r3;
    0x00056eac ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x00056eae uxth r2, r3                                       |     r2 = (int16_t) r3;
    0x00056eb0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00056eb2 add r3, r1                                        |     r3 += r1;
    0x00056eb4 add r1, r2                                        |     r1 += r2;
    0x00056eb6 str r1, [sp, 0x1c]                                |     var_1ch_2 = r1;
    0x00056eb8 mov r0, r3                                        |     r0 = r3;
    0x00056eba ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00056ebc ldr.w r1, [r1, r8, lsl 2]                         |     offset_5 = r8 << 2;
                                                                 |     r1 = *((r1 + offset_5));
    0x00056ec0 blx 0x7dcc                                        |     fcn_00007dcc ();
    0x00056ec4 ldr r7, [sp, 0x54]                                |     r7 = var_54h;
    0x00056ec6 mov r3, r0                                        |     r3 = r0;
    0x00056ec8 ldr r2, [sp, 0x13c]                               |     r2 = var_13ch;
    0x00056eca ldrd r1, r0, [sp, 0x144]                          |     __asm ("ldrd r1, r0, [var_144h]");
    0x00056ece adds r5, r3, r7                                   |     r5 = r3 + r7;
    0x00056ed0 str.w r5, [r1, r2, lsl 2]                         |     __asm ("str.w r5, [r1, r2, lsl 2]");
    0x00056ed4 ldrh.w r1, [r0, r2, lsl 1]                        |     offset_6 = r2 << 1;
                                                                 |     r1 = *((r0 + offset_6));
    0x00056ed8 subs r1, r1, r7                                   |     r1 -= r7;
    0x00056eda uxth r1, r1                                       |     r1 = (int16_t) r1;
    0x00056edc strh.w r1, [r0, r2, lsl 1]                        |     offset_7 = r2 << 1;
                                                                 |     *((r0 + offset_7)) = r1;
    0x00056ee0 ldrb r0, [r6, 8]                                  |     r0 = *((r6 + 8));
    0x00056ee2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00056ee4 bne 0x56fbe                                       |         goto label_71;
                                                                 |     }
    0x00056ee6 ldr r2, [r6, 0x38]                                |     r2 = *((r6 + 0x38));
    0x00056ee8 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00056eea ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00056eec str r2, [r3, r1]                                  |     *((r3 + r1)) = r2;
    0x00056eee ldr r2, [sp, 0x13c]                               |     r2 = var_13ch;
                                                                 | label_10:
    0x00056ef0 cmp sb, r8                                        |     
    0x00056ef2 add.w r2, r2, 1                                   |     r2++;
    0x00056ef6 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x00056efa str r2, [sp, 0x13c]                               |     var_13ch = r2;
                                                                 |     if (sb != r8) {
    0x00056efc bne 0x56e40                                       |         goto label_8;
                                                                 |     }
                                                                 | label_68:
    0x00056efe str r4, [sp, 0x7c]                                |     var_7ch = r4;
    0x00056f00 ldr r4, [sp, 0x64]                                |     r4 = var_64h;
    0x00056f02 ldrd fp, r3, [sp, 0x3c]                           |     __asm ("ldrd fp, r3, [var_3ch]");
    0x00056f06 ldr r1, [sp, 0xec]                                |     r1 = var_ech;
    0x00056f08 ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x00056f0a ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x00056f0c ldr.w sb, [sp, 0x50]                              |     sb = var_50h;
    0x00056f10 mov r8, r1                                        |     r8 = r1;
    0x00056f12 str r2, [sp, 0x14c]                               |     var_14ch = r2;
    0x00056f14 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00056f16 ldr.w sl, [sp, 0x68]                              |     sl = var_68h;
    0x00056f1a str r1, [sp, 0x164]                               |     var_164h = r1;
    0x00056f1c subs r2, 0xc                                      |     r2 -= 0xc;
    0x00056f1e str.w sb, [sp, 0x2c]                              |     __asm ("str.w sb, [var_2ch]");
    0x00056f22 adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x00056f24 str.w fp, [sp, 0x38]                              |     __asm ("str.w fp, [var_38h]");
    0x00056f28 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00056f2a movs r3, 0                                        |     r3 = 0;
    0x00056f2c mov r6, r3                                        |     r6 = r3;
    0x00056f2e mov r7, r3                                        |     r7 = r3;
    0x00056f30 add r3, sp, 0xd8                                  |     r3 += var_d8h;
    0x00056f32 str r3, [sp, 0x68]                                |     var_68h = r3;
                                                                 | label_9:
    0x00056f34 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 == 0) {
    0x00056f36 cbnz r3, 0x56f56                                  |         
    0x00056f38 ldr.w r2, [sl, 0x3c]                              |         r2 = *((sl + 0x3c));
    0x00056f3c adds r7, 1                                        |         r7++;
    0x00056f3e add r3, sp, 0x188                                 |         r3 += var_188h;
    0x00056f40 add.w r3, r3, r7, lsl 2                           |         r3 += (r7 << 2);
    0x00056f44 str r2, [r3, -0x3c]                               |         *((r3 - 0x3c)) = r2;
    0x00056f48 add r3, sp, 0x188                                 |         r3 += var_188h;
    0x00056f4a add.w r3, r3, r7, lsl 2                           |         r3 += (r7 << 2);
    0x00056f4e add.w r2, r8, 1                                   |         r2 = r8 + 1;
    0x00056f52 str r2, [r3, -0x24]                               |         *((r3 - 0x24)) = r2;
                                                                 |     }
    0x00056f56 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00056f58 add.w fp, r4, 0x24                                |     
    0x00056f5c ldr r2, [sp, 0x1c]                                |     r2 = var_1ch_2;
    0x00056f5e movs r5, 0                                        |     r5 = 0;
    0x00056f60 subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x00056f62 str r3, [sb], 4                                   |     *(sb) = r3;
                                                                 |     sb += 4;
    0x00056f66 ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
    0x00056f68 cbz r3, 0x56f88                                   |         goto label_72;
                                                                 |     }
                                                                 |     do {
    0x00056f6a ldr r3, [r4, 0x4c]                                |         r3 = *((r4 + 0x4c));
    0x00056f6c mov r0, r4                                        |         r0 = r4;
    0x00056f6e ldr r1, [fp], 4                                   |         r1 = *(fp);
                                                                 |         fp += 4;
    0x00056f72 adds r5, 1                                        |         r5++;
    0x00056f74 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00056f76 ldr r3, [sb, -0x4]                                |         r3 = *((sb - 0x4));
    0x00056f7a adds r0, 2                                        |         r0 += 2;
    0x00056f7c add r3, r0                                        |         r3 += r0;
    0x00056f7e str r3, [sb, -0x4]                                |         *((sb - 0x4)) = r3;
    0x00056f82 ldrb r3, [r4, 0xc]                                |         r3 = *((r4 + 0xc));
    0x00056f84 cmp r3, r5                                        |         
    0x00056f86 bgt 0x56f6a                                       |         
                                                                 |     } while (r3 > r5);
                                                                 | label_72:
    0x00056f88 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00056f8a str.w r8, [r3, r6, lsl 2]                         |     __asm ("str.w r8, [r3, r6, lsl 2]");
    0x00056f8e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00056f90 cmp r3, r6                                        |     
                                                                 |     if (r3 == r6) {
    0x00056f92 beq 0x57010                                       |         goto label_73;
                                                                 |     }
    0x00056f94 add r3, sp, 0x188                                 |     r3 += var_188h;
    0x00056f96 adds r6, 1                                        |     r6++;
    0x00056f98 add.w r1, r3, r7, lsl 2                           |     r1 = r3 + (r7 << 2);
    0x00056f9c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00056f9e ldr.w r8, [r3, r6, lsl 2]                         |     offset_8 = r6 << 2;
                                                                 |     r8 = *((r3 + offset_8));
    0x00056fa2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00056fa4 ldr.w r4, [r3, r6, lsl 2]                         |     offset_9 = r6 << 2;
                                                                 |     r4 = *((r3 + offset_9));
    0x00056fa8 ldr r3, [r1, -0x24]                               |     r3 = *((r1 - 0x24));
    0x00056fac ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x00056fae cmp r8, r3                                        |     
    0x00056fb0 it ne                                             |     
                                                                 |     if (r8 == r3) {
    0x00056fb2 addne r7, 1                                       |         r7++;
                                                                 |     }
    0x00056fb4 str r8, [r1, -0x20]                               |     *((r1 - 0x20)) = r8;
    0x00056fb8 str r2, [r1, -0x38]                               |     *((r1 - 0x38)) = r2;
    0x00056fbc b 0x56f34                                         |     goto label_9;
                                                                 | label_71:
    0x00056fbe cmp r1, 3                                         |     
                                                                 |     if (r1 > 3) {
    0x00056fc0 bhi 0x56ef0                                       |         goto label_10;
                                                                 |     }
    0x00056fc2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00056fc4 subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00056fc6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00056fc8 add r1, r3                                        |     r1 += r3;
    0x00056fca rsb.w r5, r3, 2                                   |     r5 = 2 - r3;
                                                                 |     do {
    0x00056fce mov.w r3, 0                                       |         r3 = 0;
    0x00056fd2 adds r6, r5, r1                                   |         r6 = r5 + r1;
    0x00056fd4 strb r3, [r1, 1]!                                 |         *((r1 += 1)) = r3;
    0x00056fd8 ldr r2, [sp, 0x13c]                               |         r2 = var_13ch;
    0x00056fda ldr r0, [sp, 0x148]                               |         r0 = var_148h;
    0x00056fdc ldrh.w r3, [r0, r2, lsl 1]                        |         offset_10 = r2 << 1;
                                                                 |         r3 = *((r0 + offset_10));
    0x00056fe0 adds r3, 1                                        |         r3++;
    0x00056fe2 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00056fe4 cmp r3, 3                                         |         
    0x00056fe6 strh.w r3, [r0, r2, lsl 1]                        |         offset_11 = r2 << 1;
                                                                 |         *((r0 + offset_11)) = r3;
    0x00056fea bls 0x56fce                                       |         
                                                                 |     } while (r3 < 3);
    0x00056fec str r6, [sp, 0x1c]                                |     var_1ch_2 = r6;
    0x00056fee b 0x56ef0                                         |     goto label_10;
                                                                 | label_52:
    0x00056ff0 ldr.w r1, [sl, 0x38]                              |     r1 = *((sl + 0x38));
    0x00056ff4 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_30:
    0x00056ff6 ldrb.w r3, [sl, 9]                                |     r3 = *((sl + 9));
    0x00056ffa str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00056ffc adds r3, 8                                        |     r3 += 8;
    0x00056ffe adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00057000 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00057002 b 0x56b4a                                         |     goto label_11;
                                                                 | label_62:
    0x00057004 ldr r4, [sp, 0x1b0]                               |     r4 = var_1b0h;
    0x00057006 subs r3, r5, 2                                    |     r3 = r5 - 2;
    0x00057008 add r3, r4                                        |     r3 += r4;
    0x0005700a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0005700c mov r3, r5                                        |     r3 = r5;
    0x0005700e b 0x56b2a                                         |     goto label_0;
                                                                 | label_73:
    0x00057010 ldr.w fp, [sp, 0x38]                              |     fp = var_38h;
    0x00057014 movs r2, 1                                        |     r2 = 1;
    0x00057016 ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x0005701a movs r3, 2                                        |     r3 = 2;
    0x0005701c ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x0005701e ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00057020 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00057022 add r2, sp, 0x13c                                 |     r2 += var_13ch;
    0x00057024 str.w sl, [sp, 0x78]                              |     __asm ("str.w sl, [var_78h]");
    0x00057028 mov sl, sb                                        |     sl = sb;
    0x0005702a str.w fp, [sp, 0x74]                              |     __asm ("str.w fp, [var_74h]");
    0x0005702e mov sb, r2                                        |     sb = r2;
    0x00057030 mov fp, r3                                        |     
                                                                 | label_18:
    0x00057032 sub.w r3, fp, 2                                   |     r3 = fp - 2;
    0x00057036 ldr r2, [r5], 4                                   |     r2 = *(r5);
                                                                 |     r5 += 4;
    0x0005703a strd r3, r3, [sp, 0x6c]                           |     __asm ("strd r3, r3, [sp, 0x6c]");
    0x0005703e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00057040 cmp r2, r3                                        |     
    0x00057042 it le                                             |     
                                                                 |     if (r2 > r3) {
    0x00057044 ldrle r4, [r7]                                    |         r4 = *(r7);
                                                                 |     }
                                                                 |     if (r2 <= r3) {
    0x00057046 ble 0x570c6                                       |         goto label_74;
                                                                 |     }
    0x00057048 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005704a b 0x5705a                                         |     
                                                                 |     while (r2 != 0) {
                                                                 | label_12:
    0x0005704c ldr r3, [r5]                                      |         r3 = *(r5);
    0x0005704e str r4, [r7]                                      |         *(r7) = r4;
    0x00057050 add r3, r0                                        |         r3 += r0;
    0x00057052 str r3, [r5]                                      |         *(r5) = r3;
    0x00057054 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
    0x00057056 cmp r6, r3                                        |         
                                                                 |         if (r6 <= r3) {
    0x00057058 ble 0x570c6                                       |             goto label_74;
                                                                 |         }
    0x0005705a ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0005705c cmp r3, sl                                        |         
                                                                 |         if (r3 >= sl) {
    0x0005705e blt 0x57072                                       |             
    0x00057060 cmp.w fp, 6                                       |             
    0x00057064 mov sl, fp                                        |             sl = fp;
                                                                 |             if (fp == 6) {
    0x00057066 beq.w 0x57272                                     |                 goto label_75;
                                                                 |             }
    0x0005706a movs r3, 0                                        |             r3 = 0;
    0x0005706c str r3, [r5]                                      |             *(r5) = r3;
    0x0005706e ldr r3, [sp, 0x13c]                               |             r3 = var_13ch;
    0x00057070 str r3, [r7, 4]                                   |             *((r7 + 4)) = r3;
                                                                 |         }
    0x00057072 ldr.w r8, [r7]                                    |         r8 = *(r7);
    0x00057076 ldr r3, [sp, 0x148]                               |         r3 = var_148h;
    0x00057078 add.w r4, r8, -1                                  |         r4 = r8 + -1;
    0x0005707c ldrh.w r0, [r3, r4, lsl 1]                        |         offset_12 = r4 << 1;
                                                                 |         r0 = *((r3 + offset_12));
    0x00057080 lsls r3, r4, 1                                    |         r3 = r4 << 1;
                                                                 |         if (r0 == 0) {
    0x00057082 cbnz r0, 0x57094                                  |             
    0x00057084 mov r1, r4                                        |             r1 = r4;
    0x00057086 mov r0, sb                                        |             r0 = sb;
    0x00057088 strd r3, r2, [sp, 0x38]                           |             __asm ("strd r3, r2, [sp, 0x38]");
    0x0005708c bl 0x9780                                         |             fcn_00009780 (r0, r1, r2);
    0x00057090 ldrd r3, r2, [sp, 0x38]                           |             __asm ("ldrd r3, r2, [var_38h]");
                                                                 |         }
    0x00057094 ldr r6, [r5, -0x4]                                |         r6 = *((r5 - 0x4));
    0x00057098 adds r0, 2                                        |         r0 += 2;
    0x0005709a subs r6, r6, r0                                   |         r6 -= r0;
    0x0005709c str r6, [r5, -0x4]                                |         *((r5 - 0x4)) = r6;
    0x000570a0 cmp r2, 0                                         |         
    0x000570a2 bne 0x5704c                                       |         
                                                                 |     }
    0x000570a4 ldr r1, [sp, 0x13c]                               |     r1 = var_13ch;
    0x000570a6 cmp r8, r1                                        |     
    0x000570a8 it ge                                             |     
                                                                 |     if (r8 >= r1) {
    0x000570aa movge r0, r2                                      |         r0 = r2;
                                                                 |         goto label_76;
                                                                 |     }
                                                                 |     if (r8 >= r1) {
                                                                 | label_76:
    0x000570ac bge 0x5704c                                       |         goto label_12;
                                                                 |     }
    0x000570ae ldr r1, [sp, 0x148]                               |     r1 = var_148h;
    0x000570b0 add r1, r3                                        |     r1 += r3;
    0x000570b2 ldrh r0, [r1, 2]                                  |     r0 = *((r1 + 2));
                                                                 |     if (r0 == 0) {
    0x000570b4 cbnz r0, 0x570c2                                  |         
    0x000570b6 mov r1, r8                                        |         r1 = r8;
    0x000570b8 mov r0, sb                                        |         r0 = sb;
    0x000570ba str r2, [sp, 0x38]                                |         var_38h = r2;
    0x000570bc bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
    0x000570c0 ldr r2, [sp, 0x38]                                |         r2 = var_38h;
                                                                 |     }
    0x000570c2 adds r0, 2                                        |     r0 += 2;
    0x000570c4 b 0x5704c                                         |     goto label_12;
                                                                 | label_74:
    0x000570c6 ldr r0, [sp, 0x13c]                               |     r0 = var_13ch;
    0x000570c8 cmp r0, r4                                        |     
                                                                 |     if (r0 <= r4) {
    0x000570ca ble.w 0x5731a                                     |         goto label_77;
                                                                 |     }
    0x000570ce mov r8, r7                                        |     r8 = r7;
    0x000570d0 str.w sl, [sp, 0x38]                              |     __asm ("str.w sl, [var_38h]");
    0x000570d4 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch_2;
    0x000570d6 mov r1, r0                                        |     r1 = r0;
    0x000570d8 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x000570da ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x000570de str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [var_3ch]");
                                                                 | label_13:
    0x000570e2 ldr r3, [sp, 0x148]                               |     r3 = var_148h;
    0x000570e4 lsl.w fp, r4, 1                                   |     
    0x000570e8 ldrh.w r0, [r3, r4, lsl 1]                        |     offset_13 = r4 << 1;
                                                                 |     r0 = *((r3 + offset_13));
                                                                 |     if (r0 == 0) {
    0x000570ec cbnz r0, 0x570f8                                  |         
    0x000570ee mov r1, r4                                        |         r1 = r4;
    0x000570f0 mov r0, sb                                        |         r0 = sb;
    0x000570f2 bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
    0x000570f6 ldr r1, [sp, 0x13c]                               |         r1 = var_13ch;
                                                                 |     }
    0x000570f8 ldr r3, [r5, -0x4]                                |     r3 = *((r5 - 0x4));
    0x000570fc adds r0, 2                                        |     r0 += 2;
    0x000570fe add r3, r0                                        |     r3 += r0;
    0x00057100 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x00057102 bgt.w 0x572a0                                     |         goto label_78;
                                                                 |     }
    0x00057106 adds r4, 1                                        |     r4++;
    0x00057108 str r3, [r5, -0x4]                                |     *((r5 - 0x4)) = r3;
    0x0005710c str.w r4, [r8]                                    |     __asm ("str.w r4, [r8]");
    0x00057110 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00057112 bne 0x571c2                                       |         goto label_79;
                                                                 |     }
    0x00057114 cmp r4, r1                                        |     
                                                                 |     if (r4 < r1) {
    0x00057116 blt 0x571ae                                       |         goto label_80;
                                                                 |     }
    0x00057118 ldrd fp, sl, [sp, 0x74]                           |     __asm ("ldrd fp, sl, [var_74h]");
    0x0005711c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005711e str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 | label_14:
    0x00057120 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00057122 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00057124 str.w sl, [sp, 0x70]                              |     __asm ("str.w sl, [var_70h]");
    0x00057128 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0005712a lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x0005712c str.w fp, [sp, 0x50]                              |     __asm ("str.w fp, [var_50h]");
    0x00057130 add r1, r3                                        |     r1 += r3;
    0x00057132 subs r3, 4                                        |     r3 -= 4;
    0x00057134 str r1, [sp, 0x38]                                |     var_38h = r1;
    0x00057136 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00057138 adds r6, r1, r3                                   |     r6 = r1 + r3;
    0x0005713a add r3, sp, 0x13c                                 |     r3 += var_13ch;
    0x0005713c mov sl, r6                                        |     sl = r6;
    0x0005713e mov sb, r3                                        |     sb = r3;
                                                                 | label_16:
    0x00057140 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00057142 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057144 beq.w 0x57326                                     |         goto label_81;
                                                                 |     }
    0x00057148 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0005714a ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x0005714e ldr r0, [sp, 0x148]                               |     r0 = var_148h;
    0x00057150 ldrd fp, r5, [r3, -0x4]                           |     __asm ("ldrd fp, r5, [r3, -0x4]");
    0x00057154 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00057156 subs r1, r4, r3                                   |     r1 = r4 - r3;
    0x00057158 subs r4, 1                                        |     r4--;
    0x0005715a ldrh.w r3, [r0, r1, lsl 1]                        |     offset_14 = r1 << 1;
                                                                 |     r3 = *((r0 + offset_14));
    0x0005715e lsls r7, r1, 1                                    |     r7 = r1 << 1;
                                                                 |     if (r3 == 0) {
    0x00057160 cbnz r3, 0x5716a                                  |         
    0x00057162 mov r0, sb                                        |         r0 = sb;
    0x00057164 bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
    0x00057168 ldr r0, [sp, 0x148]                               |         r0 = var_148h;
                                                                 |     }
    0x0005716a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005716c ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0005716e subs.w r8, r3, r2                                 |     r8 = r3 - r2;
    0x00057172 it ne                                             |     
                                                                 |     if (r8 == r3) {
    0x00057174 movne r8, 1                                       |         r8 = 1;
                                                                 |     }
    0x00057178 lsl.w r8, r8, 1                                   |     r8 <<= 1;
                                                                 |     do {
    0x0005717c ldrh.w r2, [r0, r4, lsl 1]                        |         offset_15 = r4 << 1;
                                                                 |         r2 = *((r0 + offset_15));
    0x00057180 lsls r6, r4, 1                                    |         r6 = r4 << 1;
                                                                 |         if (r2 == 0) {
    0x00057182 cbnz r2, 0x5718c                                  |             
    0x00057184 mov r1, r4                                        |             r1 = r4;
    0x00057186 mov r0, sb                                        |             r0 = sb;
    0x00057188 bl 0x9780                                         |             fcn_00009780 (r0, r1, r2);
                                                                 |         }
                                                                 |         if (r5 != 0) {
    0x0005718c cbnz r5, 0x571d8                                  |             goto label_82;
                                                                 |         }
    0x0005718e ldr r0, [sp, 0x148]                               |         r0 = var_148h;
    0x00057190 ldrh r3, [r0, r6]                                 |         r3 = *((r0 + r6));
    0x00057192 ldrh r2, [r0, r7]                                 |         r2 = *((r0 + r7));
                                                                 | label_15:
    0x00057194 adds r3, 2                                        |         r3 += 2;
    0x00057196 adds r2, 2                                        |         r2 += 2;
    0x00057198 sub.w fp, fp, r3                                  |         
    0x0005719c subs r3, r4, 1                                    |         r3 = r4 - 1;
    0x0005719e add r5, r2                                        |         r5 += r2;
    0x000571a0 sub.w r7, r7, 2                                   |         r7 -= 2;
    0x000571a4 str.w r4, [sl]                                    |         __asm ("str.w r4, [sl]");
                                                                 |         if (r3 < r4) {
    0x000571a8 bmi 0x571fa                                       |             goto label_83;
                                                                 |         }
    0x000571aa mov r4, r3                                        |         r4 = r3;
    0x000571ac b 0x5717c                                         |         
                                                                 |     } while (1);
                                                                 | label_80:
    0x000571ae ldr r3, [sp, 0x148]                               |     r3 = var_148h;
    0x000571b0 add r3, fp                                        |     r3 += fp;
    0x000571b2 ldrh r0, [r3, 2]                                  |     r0 = *((r3 + 2));
                                                                 |     if (r0 == 0) {
    0x000571b4 cbnz r0, 0x571c0                                  |         
    0x000571b6 mov r1, r4                                        |         r1 = r4;
    0x000571b8 mov r0, sb                                        |         r0 = sb;
    0x000571ba bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
    0x000571be ldr r1, [sp, 0x13c]                               |         r1 = var_13ch;
                                                                 |     }
    0x000571c0 adds r0, 2                                        |     r0 += 2;
                                                                 | label_79:
    0x000571c2 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000571c4 cmp r4, r1                                        |     
    0x000571c6 sub.w r3, r3, r0                                  |     r3 -= r0;
    0x000571ca str r3, [r5]                                      |     *(r5) = r3;
                                                                 |     if (r4 < r1) {
    0x000571cc blt 0x570e2                                       |         goto label_13;
                                                                 |     }
    0x000571ce str.w sl, [sp, 0x3c]                              |     __asm ("str.w sl, [var_3ch]");
    0x000571d2 ldrd fp, sl, [sp, 0x74]                           |     __asm ("ldrd fp, sl, [var_74h]");
    0x000571d6 b 0x57120                                         |     goto label_14;
                                                                 | label_82:
    0x000571d8 ldr r3, [sp, 0x1b0]                               |     r3 = var_1b0h;
                                                                 |     if (r3 != 0) {
    0x000571da cbnz r3, 0x571f6                                  |         goto label_84;
                                                                 |     }
    0x000571dc ldr r0, [sp, 0x148]                               |     r0 = var_148h;
    0x000571de ldrh r3, [r0, r6]                                 |     r3 = *((r0 + r6));
    0x000571e0 ldrh r2, [r0, r7]                                 |     r2 = *((r0 + r7));
    0x000571e2 add.w r1, r3, r8                                  |     r1 = r3 + r8;
    0x000571e6 add.w ip, r2, r5                                  |     
    0x000571ea sub.w r1, fp, r1                                  |     r1 = fp - r1;
    0x000571ee add.w ip, ip, 1                                   |     
    0x000571f2 cmp ip, r1                                        |     
                                                                 |     if (ip < r1) {
    0x000571f4 blt 0x57194                                       |         goto label_15;
                                                                 |     }
                                                                 | label_84:
    0x000571f6 ldr.w r4, [sl]                                    |     r4 = *(sl);
                                                                 | label_83:
    0x000571fa ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000571fc sub.w sl, sl, 4                                   |     sl -= 4;
    0x00057200 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00057202 str r5, [r3]                                      |     *(r3) = r5;
    0x00057204 str fp, [r3, -0x4]!                               |     *((r3 -= 0x4)) = fp;
    0x00057208 subs r2, 1                                        |     r2--;
    0x0005720a str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005720c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005720e str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00057210 cmp r3, 1                                         |     
    0x00057212 ite ne                                            |     
                                                                 |     if (r3 == 1) {
    0x00057214 ldrne r3, [sl]                                    |         r3 = *(sl);
                                                                 |     }
                                                                 |     if (r3 == 1) {
    0x00057218 movs r3, 0                                        |         r3 = 0;
                                                                 |     }
    0x0005721a cmp r3, r4                                        |     
                                                                 |     if (r3 < r4) {
    0x0005721c blt 0x57140                                       |         goto label_16;
                                                                 |     }
    0x0005721e ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x00057222 blx 0x7f8c                                        |     fcn_00007f8c ();
    0x00057226 ldr r2, [pc, 0x3f0]                               |     
    0x00057228 adds r0, 0x14                                     |     r0 += 0x14;
    0x0005722a ldr r1, [pc, 0x3f0]                               |     
    0x0005722c movw r3, 0x1ed1                                   |     
    0x00057230 movt r3, 1                                        |     r3 = 0x11ed1;
    0x00057234 str r0, [sp]                                      |     *(sp) = r0;
    0x00057236 add r2, pc                                        |     r2 = 0xae854;
    0x00057238 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005723a add r1, pc                                        |     r1 = 0xae85c;
    0x0005723c blx 0x8474                                        |     fcn_00008474 ();
    0x00057240 movs r3, 0xb                                      |     r3 = 0xb;
    0x00057242 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x00057246 b 0x56c4e                                         |     goto label_4;
                                                                 | label_64:
    0x00057248 ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x0005724c blx 0x7f8c                                        |     fcn_00007f8c ();
    0x00057250 ldr r2, [pc, 0x3cc]                               |     
    0x00057252 adds r0, 0x14                                     |     r0 += 0x14;
    0x00057254 ldr r1, [pc, 0x3cc]                               |     
    0x00057256 movw r3, 0x1e09                                   |     
    0x0005725a movt r3, 1                                        |     r3 = 0x11e09;
    0x0005725e str r0, [sp]                                      |     *(sp) = r0;
    0x00057260 add r2, pc                                        |     r2 = 0xae884;
    0x00057262 movs r0, 0xb                                      |     r0 = 0xb;
    0x00057264 add r1, pc                                        |     r1 = "unknown database %s";
    0x00057266 blx 0x8474                                        |     fcn_00008474 ();
    0x0005726a movs r3, 0xb                                      |     r3 = 0xb;
    0x0005726c str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x00057270 b 0x56c4e                                         |     goto label_4;
                                                                 | label_75:
    0x00057272 ldr.w fp, [sp, 0x74]                              |     fp = var_74h;
    0x00057276 blx 0x7f8c                                        |     fcn_00007f8c ();
    0x0005727a ldr r2, [pc, 0x3ac]                               |     
    0x0005727c adds r0, 0x14                                     |     r0 += 0x14;
    0x0005727e ldr r1, [pc, 0x3ac]                               |     
    0x00057280 movw r3, 0x1e86                                   |     
    0x00057284 movt r3, 1                                        |     r3 = 0x11e86;
    0x00057288 str r0, [sp]                                      |     *(sp) = r0;
    0x0005728a add r2, pc                                        |     r2 = 0xae8b8;
    0x0005728c movs r0, 0xb                                      |     r0 = 0xb;
    0x0005728e add r1, pc                                        |     r1 = 0xae8c0;
    0x00057290 blx 0x8474                                        |     fcn_00008474 ();
    0x00057294 movs r3, 0xb                                      |     r3 = 0xb;
    0x00057296 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x0005729a b 0x56c4e                                         |     goto label_4;
                                                                 | label_51:
    0x0005729c movs r5, 7                                        |     r5 = 7;
    0x0005729e b 0x56c8c                                         |     goto label_17;
                                                                 | label_78:
    0x000572a0 cmp r4, r1                                        |     
    0x000572a2 ldrd sl, fp, [sp, 0x38]                           |     __asm ("ldrd sl, fp, [var_38h]");
    0x000572a6 mov r7, r8                                        |     r7 = r8;
                                                                 |     if (r4 >= r1) {
    0x000572a8 bge 0x5731a                                       |         goto label_77;
                                                                 |     }
    0x000572aa ldr r3, [sp, 0x70]                                |     r3 = var_70h;
                                                                 |     if (r3 == 0) {
    0x000572ac cbz r3, 0x57316                                   |         goto label_85;
                                                                 |     }
    0x000572ae ldr r2, [r8, -0x4]                                |     r2 = *((r8 - 0x4));
                                                                 | label_20:
    0x000572b2 cmp r4, r2                                        |     
                                                                 |     if (r4 <= r2) {
    0x000572b4 ble.w 0x574b0                                     |         goto label_86;
                                                                 |     }
    0x000572b8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000572ba add.w r2, fp, -1                                  |     r2 = fp + -1;
    0x000572be cmp r2, sl                                        |     
    0x000572c0 add.w r7, r7, 4                                   |     r7 += 4;
    0x000572c4 add.w fp, fp, 1                                   |     
    0x000572c8 add.w r3, r3, 1                                   |     r3++;
    0x000572cc str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r2 < sl) {
    0x000572ce blt.w 0x57032                                     |         goto label_18;
                                                                 |     }
    0x000572d2 mov sb, sl                                        |     sb = sl;
    0x000572d4 ldrd fp, sl, [sp, 0x74]                           |     __asm ("ldrd fp, sl, [var_74h]");
    0x000572d8 add.w r3, sb, -1                                  |     r3 = sb + -1;
    0x000572dc str.w sb, [sp, 0x3c]                              |     __asm ("str.w sb, [var_3ch]");
    0x000572e0 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000572e2 b 0x57120                                         |     goto label_14;
                                                                 | label_63:
    0x000572e4 movs r5, 7                                        |     r5 = 7;
    0x000572e6 str.w r5, [fp]                                    |     __asm ("str.w r5, [fp]");
    0x000572ea b 0x56c5a                                         |     goto label_19;
                                                                 | label_69:
    0x000572ec ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x000572f0 blx 0x7f8c                                        |     fcn_00007f8c ();
    0x000572f4 ldr r2, [pc, 0x338]                               |     
    0x000572f6 adds r0, 0x14                                     |     r0 += 0x14;
    0x000572f8 ldr r1, [pc, 0x338]                               |     
    0x000572fa movw r3, 0x1e21                                   |     
    0x000572fe movt r3, 1                                        |     r3 = 0x11e21;
    0x00057302 str r0, [sp]                                      |     *(sp) = r0;
    0x00057304 add r2, pc                                        |     r2 = "cannot detach database %s";
    0x00057306 movs r0, 0xb                                      |     r0 = 0xb;
    0x00057308 add r1, pc                                        |     r1 = 0xae940;
    0x0005730a blx 0x8474                                        |     fcn_00008474 ();
    0x0005730e movs r3, 0xb                                      |     r3 = 0xb;
    0x00057310 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x00057314 b 0x56c4e                                         |     goto label_4;
                                                                 | label_85:
    0x00057316 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x00057318 b 0x572b2                                         |     goto label_20;
                                                                 | label_77:
    0x0005731a mov r3, fp                                        |     r3 = fp;
    0x0005731c ldrd fp, sl, [sp, 0x74]                           |     __asm ("ldrd fp, sl, [var_74h]");
    0x00057320 subs r3, 1                                        |     r3--;
    0x00057322 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00057324 b 0x57120                                         |     goto label_14;
                                                                 | label_81:
    0x00057326 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00057328 ldr.w sl, [sp, 0x70]                              |     sl = var_70h;
    0x0005732c ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x00057330 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00057332 str.w sl, [sp, 0x64]                              |     __asm ("str.w sl, [var_64h]");
    0x00057336 ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x00057338 ldrb.w r8, [r3]                                   |     r8 = *(r3);
    0x0005733c add r3, sp, 0xc4                                  |     r3 += var_c4h;
    0x0005733e mov sb, r3                                        |     sb = r3;
    0x00057340 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00057342 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x00057344 add r3, sp, 0x88                                  |     r3 += var_88h;
    0x00057346 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00057348 ldr.w sl, [sp, 0x40]                              |     sl = var_40h;
    0x0005734c str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005734e b 0x573a0                                         |     
                                                                 |     while (r3 == 0) {
    0x00057350 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00057352 ldr r3, [r3]                                      |         r3 = *(r3);
                                                                 | label_21:
    0x00057354 ldr r4, [sp, 0x38]                                |         r4 = var_38h;
    0x00057356 movs r2, 0                                        |         r2 = 0;
    0x00057358 str r2, [sp]                                      |         *(sp) = r2;
    0x0005735a mov r0, sl                                        |         r0 = sl;
    0x0005735c ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0005735e mov r1, r4                                        |         r1 = r4;
    0x00057360 bl 0x55140                                        |         fcn_00055140 (r0, r1, r2, r3, r4, r5, r6);
    0x00057364 str.w r0, [fp]                                    |         __asm ("str.w r0, [fp]");
    0x00057368 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0005736a bne.w 0x574dc                                     |             goto label_87;
                                                                 |         }
    0x0005736e ldr r0, [r4]                                      |         r0 = *(r4);
    0x00057370 mov r1, r8                                        |         r1 = r8;
    0x00057372 adds r5, r6, 1                                    |         r5 = r6 + 1;
    0x00057374 mov r4, r5                                        |         r4 = r5;
    0x00057376 str r0, [sp, 0x2c]                                |         var_2ch = r0;
    0x00057378 bl 0x242c0                                        |         fcn_000242c0 (r0, r1);
    0x0005737c ldrb.w r3, [sl, 0x11]                             |         r3 = *((sl + 0x11));
    0x00057380 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00057382 ldr r2, [sp, 0x13c]                               |         r2 = var_13ch;
    0x00057384 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x00057386 str.w r0, [sb]                                    |         __asm ("str.w r0, [sb]");
    0x0005738a str.w r2, [r1, r6, lsl 2]                         |         __asm ("str.w r2, [r1, r6, lsl 2]");
    0x0005738e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00057390 bne 0x57412                                       |             goto label_88;
                                                                 |         }
                                                                 | label_22:
    0x00057392 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x00057394 add.w sb, sb, 4                                   |         sb += 4;
    0x00057398 adds r7, 4                                        |         r7 += 4;
    0x0005739a mov r6, r5                                        |         r6 = r5;
    0x0005739c cmp r5, r3                                        |         
                                                                 |         if (r5 >= r3) {
    0x0005739e bge 0x5742e                                       |             goto label_89;
                                                                 |         }
    0x000573a0 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x000573a2 cmp r3, r6                                        |         
                                                                 |         if (r3 > r6) {
    0x000573a4 bgt 0x573b0                                       |             goto label_90;
                                                                 |         }
    0x000573a6 ldr r3, [sp, 0x1b0]                               |         r3 = var_1b0h;
    0x000573a8 cmp r3, 0                                         |         
    0x000573aa beq 0x57350                                       |         
                                                                 |     }
    0x000573ac movs r3, 1                                        |     r3 = 1;
    0x000573ae b 0x57354                                         |     goto label_21;
                                                                 | label_90:
    0x000573b0 movs r3, 0                                        |     r3 = 0;
    0x000573b2 ldr r4, [r7]                                      |     r4 = *(r7);
    0x000573b4 str r3, [r7]                                      |     *(r7) = r3;
    0x000573b6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000573b8 ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x000573ba str.w r4, [sb]                                    |     __asm ("str.w r4, [sb]");
    0x000573be str r4, [r3]                                      |     *(r3) = r4;
    0x000573c0 bl 0x51680                                        |     fcn_00051680 (r0);
    0x000573c4 ldr r2, [r4, 0x48]                                |     r2 = *((r4 + 0x48));
    0x000573c6 adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x000573c8 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000573ca mov r5, r4                                        |     r5 = r4;
    0x000573cc str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x000573d0 ldrsh.w r1, [r2, 0x1e]                            |     r1 = *((r2 + 0x1e));
    0x000573d4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000573d6 subs r2, r3, r2                                   |     r2 = r3 - r2;
    0x000573d8 cmp r2, r6                                        |     
    0x000573da ite eq                                            |     
                                                                 |     if (r2 != r6) {
    0x000573dc moveq r2, 2                                       |         r2 = 2;
                                                                 |     }
                                                                 |     if (r2 == r6) {
    0x000573de movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000573e0 cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x000573e2 beq 0x5740c                                       |         
    0x000573e4 blx 0x7f8c                                        |         fcn_00007f8c ();
    0x000573e8 ldr r2, [pc, 0x24c]                               |         
    0x000573ea adds r0, 0x14                                     |         r0 += 0x14;
    0x000573ec ldr r1, [pc, 0x24c]                               |         
    0x000573ee movw r3, 0x1ef0                                   |         
    0x000573f2 movt r3, 1                                        |         r3 = 0x11ef0;
    0x000573f6 str r0, [sp]                                      |         *(sp) = r0;
    0x000573f8 add r2, pc                                        |         r2 = 0xaea34;
    0x000573fa movs r0, 0xb                                      |         r0 = 0xb;
    0x000573fc add r1, pc                                        |         r1 = 0xaea3c;
    0x000573fe blx 0x8474                                        |         fcn_00008474 ();
    0x00057402 movs r3, 0xb                                      |         r3 = 0xb;
    0x00057404 str.w r3, [fp]                                    |         __asm ("str.w r3, [fp]");
                                                                 | label_23:
    0x00057408 str r4, [sp, 0x48]                                |         var_48h = r4;
    0x0005740a b 0x56c4e                                         |         goto label_4;
                                                                 |     }
    0x0005740c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005740e beq 0x57392                                       |         goto label_22;
                                                                 |     }
    0x00057410 b 0x57408                                         |     goto label_23;
                                                                 | label_88:
    0x00057412 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00057414 movs r2, 5                                        |     r2 = 5;
    0x00057416 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x00057418 mov r0, sl                                        |     r0 = sl;
    0x0005741a str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0005741e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00057420 bl 0x557bc                                        |     fcn_000557bc (r0, r1, r2, r3, r4);
    0x00057424 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00057428 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005742a beq 0x57392                                       |         goto label_22;
                                                                 |     }
    0x0005742c b 0x57408                                         |     goto label_23;
                                                                 | label_89:
    0x0005742e ldr r3, [sp, 0xc4]                                |     r3 = var_c4h;
    0x00057430 add r2, sp, 0x12c                                 |     r2 += var_12ch;
    0x00057432 mov r1, r2                                        |     r1 = r2;
    0x00057434 ldr.w sl, [sp, 0x64]                              |     sl = var_64h;
    0x00057438 mov sb, r1                                        |     sb = r1;
    0x0005743a str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0005743c mov r1, r3                                        |     r1 = r3;
    0x0005743e str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00057440 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00057442 add.w ip, sp, 0xc8                                |     
    0x00057446 add r2, sp, 0x114                                 |     r2 += var_114h;
    0x00057448 add.w lr, sp, 0xae                                |     lr += var_aeh;
    0x0005744c movs r7, 1                                        |     r7 = 1;
    0x0005744e ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x00057450 strh.w r3, [sp, 0xac]                             |     var_ach = r3;
    0x00057454 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00057456 str r3, [sp, 0x114]                               |     var_114h = r3;
    0x00057458 str r3, [sp, 0x128]                               |     var_128h = r3;
                                                                 | label_24:
    0x0005745a cmp r5, r7                                        |     
                                                                 |     if (r5 == r7) {
    0x0005745c beq 0x574f0                                       |         goto label_91;
                                                                 |     }
    0x0005745e ldr r1, [ip], 4                                   |     r1 = *(ip);
                                                                 |     ip += 4;
    0x00057462 add r0, sp, 0x118                                 |     r0 += var_118h;
    0x00057464 mov r4, r3                                        |     r4 = r3;
    0x00057466 ldr r6, [r1, 0x48]                                |     r6 = *((r1 + 0x48));
    0x00057468 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x0005746a ldrh r6, [r6, 0x1c]                               |     r6 = *((r6 + 0x1c));
    0x0005746c str r1, [r2, 4]!                                  |     *((r2 += 4)) = r1;
    0x00057470 str r1, [sb], 4                                   |     *(sb) = r1;
                                                                 |     sb += 4;
    0x00057474 strh r6, [lr], 2                                  |     *(lr) = r6;
                                                                 |     lr += 2;
    0x00057478 b 0x57482                                         |     
                                                                 |     while (r1 != r4) {
    0x0005747a cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x0005747c beq 0x574e0                                       |             goto label_92;
                                                                 |         }
    0x0005747e ldr r4, [r0], 4                                   |         r4 = *(r0);
                                                                 |         r0 += 4;
    0x00057482 cmp r1, r4                                        |         
    0x00057484 bne 0x5747a                                       |         
                                                                 |     }
    0x00057486 blx 0x7f8c                                        |     fcn_00007f8c ();
    0x0005748a ldr r2, [pc, 0x1b4]                               |     
    0x0005748c adds r0, 0x14                                     |     r0 += 0x14;
    0x0005748e ldr r1, [pc, 0x1b4]                               |     
    0x00057490 movw r3, 0x1f1e                                   |     
    0x00057494 movt r3, 1                                        |     r3 = 0x11f1e;
    0x00057498 str r0, [sp]                                      |     *(sp) = r0;
    0x0005749a add r2, pc                                        |     r2 = 0xaeae0;
    0x0005749c movs r0, 0xb                                      |     r0 = 0xb;
    0x0005749e add r1, pc                                        |     r1 = 0xaeae8;
    0x000574a0 str r5, [sp, 0x48]                                |     var_48h = r5;
    0x000574a2 blx 0x8474                                        |     fcn_00008474 ();
    0x000574a6 movs r3, 0xb                                      |     r3 = 0xb;
    0x000574a8 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x000574ac b.w 0x56c4e                                       |     goto label_4;
                                                                 | label_86:
    0x000574b0 ldr.w fp, [sp, 0x74]                              |     fp = var_74h;
    0x000574b4 blx 0x7f8c                                        |     fcn_00007f8c ();
    0x000574b8 ldr r2, [pc, 0x18c]                               |     
    0x000574ba adds r0, 0x14                                     |     r0 += 0x14;
    0x000574bc ldr r1, [pc, 0x18c]                               |     
    0x000574be movw r3, 0x1ea7                                   |     
    0x000574c2 movt r3, 1                                        |     r3 = 0x11ea7;
    0x000574c6 str r0, [sp]                                      |     *(sp) = r0;
    0x000574c8 add r2, pc                                        |     r2 = 0xaeb14;
    0x000574ca movs r0, 0xb                                      |     r0 = 0xb;
    0x000574cc add r1, pc                                        |     r1 = "%.*z:%u";
    0x000574ce blx 0x8474                                        |     fcn_00008474 ();
    0x000574d2 movs r3, 0xb                                      |     r3 = 0xb;
    0x000574d4 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x000574d8 b.w 0x56c4e                                       |     goto label_4;
                                                                 | label_87:
    0x000574dc mov r4, r6                                        |     r4 = r6;
    0x000574de b 0x57408                                         |     goto label_23;
                                                                 | label_92:
    0x000574e0 adds r7, 1                                        |     r7++;
    0x000574e2 b 0x5745a                                         |     goto label_24;
                                                                 | label_55:
    0x000574e4 adds r3, 4                                        |     r3 += 4;
    0x000574e6 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000574e8 b.w 0x56c38                                       |     goto label_25;
                                                                 | label_61:
    0x000574ec blx 0x7e8c                                        |     fcn_00007e8c ();
                                                                 | label_91:
    0x000574f0 ldr.w sb, [sp, 0x50]                              |     sb = var_50h;
    0x000574f4 movs r6, 0                                        |     r6 = 0;
                                                                 | label_26:
    0x000574f6 cmp r5, 1                                         |     
    0x000574f8 ldr r7, [sp, 0x128]                               |     r7 = var_128h;
                                                                 |     if (r5 == 1) {
    0x000574fa beq 0x57570                                       |         goto label_93;
                                                                 |     }
    0x000574fc ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000574fe movs r4, 0                                        |     r4 = 0;
    0x00057500 movs r3, 1                                        |     r3 = 1;
                                                                 |     do {
    0x00057502 ldr r1, [r2], 4                                   |         r1 = *(r2);
                                                                 |         r2 += 4;
    0x00057506 cmp r1, r7                                        |         
    0x00057508 it lo                                             |         
                                                                 |         if (r1 >= r7) {
    0x0005750a movlo r4, r3                                      |             r4 = r3;
                                                                 |         }
    0x0005750c add.w r3, r3, 1                                   |         r3++;
    0x00057510 it lo                                             |         
                                                                 |         if (r1 >= r7) {
    0x00057512 movlo r7, r1                                      |             r7 = r1;
                                                                 |         }
    0x00057514 cmp r5, r3                                        |         
    0x00057516 bne 0x57502                                       |         
                                                                 |     } while (r5 != r3);
    0x00057518 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005751a cmp r4, r6                                        |     
    0x0005751c mov.w r2, -1                                      |     r2 = -1;
    0x00057520 str r7, [r3]                                      |     *(r3) = r7;
    0x00057522 add r3, sp, 0x188                                 |     r3 += var_188h;
    0x00057524 add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
    0x00057528 str r2, [r3, -0x60]                               |     *((r3 - 0x60)) = r2;
                                                                 |     if (r4 == r6) {
    0x0005752c beq 0x57562                                       |         goto label_94;
                                                                 |     }
                                                                 |     if (r4 <= r6) {
    0x0005752e ble 0x57548                                       |         goto label_95;
                                                                 |     }
    0x00057530 ldr r3, [r3, -0xc4]                               |     r3 = *((r3 - 0xc4));
    0x00057534 mov.w r2, 0                                       |     r2 = 0;
    0x00057538 ldr r0, [r3, 0x48]                                |     r0 = *((r3 + 0x48));
    0x0005753a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005753c ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x0005753e strh r2, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r2;
    0x00057540 adds r3, 1                                        |     r3++;
    0x00057542 adds r1, r3, r4                                   |     r1 = r3 + r4;
    0x00057544 bl 0x9288                                         |     fcn_00009288 (r0, r1);
                                                                 |     do {
                                                                 | label_95:
    0x00057548 add r3, sp, 0x188                                 |         r3 += var_188h;
    0x0005754a mov r1, r7                                        |         r1 = r7;
    0x0005754c add.w r4, r3, r4, lsl 1                           |         r4 = r3 + (r4 << 1);
    0x00057550 ldrh r3, [r4, -0xdc]                              |         r3 = *((r4 - 0xdc));
    0x00057554 ldr.w r4, [sb]                                    |         r4 = *(sb);
    0x00057558 ldr r0, [r4, 0x48]                                |         r0 = *((r4 + 0x48));
    0x0005755a strh r3, [r0, 0x1c]                               |         *((r0 + 0x1c)) = r3;
    0x0005755c bl 0x9288                                         |         fcn_00009288 (r0, r1);
    0x00057560 str r7, [r4, 4]                                   |         *((r4 + 4)) = r7;
                                                                 | label_94:
    0x00057562 adds r3, r6, 1                                    |         r3 = r6 + 1;
    0x00057564 add.w sb, sb, 4                                   |         sb += 4;
    0x00057568 cmp r5, r3                                        |         
                                                                 |         if (r5 == r3) {
    0x0005756a beq 0x57584                                       |             goto label_96;
                                                                 |         }
    0x0005756c mov r6, r3                                        |         r6 = r3;
    0x0005756e b 0x574f6                                         |         goto label_26;
                                                                 | label_93:
    0x00057570 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00057572 str r7, [r3]                                      |         *(r3) = r7;
    0x00057574 mov.w r3, -1                                      |         r3 = -1;
    0x00057578 str r3, [sp, 0x128]                               |         var_128h = r3;
    0x0005757a cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0005757c beq.w 0x57956                                     |             goto label_97;
                                                                 |         }
    0x00057580 movs r4, 0                                        |         r4 = 0;
    0x00057582 b 0x57548                                         |         
                                                                 |     } while (1);
                                                                 | label_96:
    0x00057584 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00057586 add r3, sp, 0x188                                 |     r3 += var_188h;
    0x00057588 add.w r3, r3, r6, lsl 2                           |     r3 += (r6 << 2);
    0x0005758c ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0005758e tst.w r8, 8                                       |     
    0x00057592 ldr r3, [r3, -0xc4]                               |     r3 = *((r3 - 0xc4));
    0x00057596 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00057598 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0005759a str r2, [r1]                                      |     *(r1) = r2;
                                                                 |     if ((r8 & 8) == 0) {
    0x0005759c bne 0x575b8                                       |         
    0x0005759e ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x000575a0 cmp r2, r6                                        |         
                                                                 |         if (r2 == r6) {
    0x000575a2 beq 0x575b8                                       |             goto label_32;
                                                                 |         }
                                                                 |         if (r2 >= r6) {
    0x000575a4 bge.w 0x5796e                                     |             goto label_98;
                                                                 |         }
    0x000575a8 add r2, sp, 0xc0                                  |         r2 += var_c0h;
                                                                 | label_31:
    0x000575aa ldr r1, [sp, 0x60]                                |         r1 = var_60h;
    0x000575ac ldr r3, [r3, 0x38]                                |         r3 = *((r3 + 0x38));
    0x000575ae add r2, r1                                        |         r2 += r1;
    0x000575b0 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x000575b2 ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x000575b4 ldr r2, [r2, 8]                                   |         r2 = *((r2 + 8));
    0x000575b6 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
                                                                 | label_32:
    0x000575b8 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000575ba ldrb r3, [r3, 0x11]                               |     r3 = *((r3 + 0x11));
    0x000575bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000575be beq.w 0x576de                                     |         goto label_99;
                                                                 |     }
    0x000575c2 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x000575c4 ldr r0, [sp, 0x13c]                               |     r0 = var_13ch;
    0x000575c6 ldrh r2, [r5, 0x18]                               |     r2 = *((r5 + 0x18));
    0x000575c8 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x000575ca cmp r0, 0                                         |     
    0x000575cc add r3, r2                                        |     r3 += r2;
    0x000575ce str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r0 <= 0) {
    0x000575d0 ble.w 0x576de                                     |         goto label_99;
                                                                 |     }
    0x000575d4 mov.w r8, 0                                       |     r8 = 0;
    0x000575d8 mov r4, r5                                        |     r4 = r5;
    0x000575da mov r7, r8                                        |     r7 = r8;
    0x000575dc mov sb, r6                                        |     sb = r6;
    0x000575de add r3, sp, 0x13c                                 |     r3 += var_13ch;
    0x000575e0 str.w r8, [sp, 0x30]                              |     __asm ("str.w r8, [var_30h]");
    0x000575e4 str.w r8, [sp, 0x3c]                              |     __asm ("str.w r8, [var_3ch]");
    0x000575e8 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_27:
    0x000575ea ldr r3, [sp, 0x144]                               |     r3 = var_144h;
    0x000575ec ldr.w r6, [r3, r7, lsl 2]                         |     offset_16 = r7 << 2;
                                                                 |     r6 = *((r3 + offset_16));
    0x000575f0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000575f2 cmp r3, r7                                        |     
                                                                 |     if (r3 != r7) {
    0x000575f4 bne 0x57680                                       |         goto label_100;
                                                                 |     }
    0x000575f6 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x000575f8 add.w r2, r8, 1                                   |     r2 = r8 + 1;
    0x000575fc lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x000575fe str r0, [sp, 0x58]                                |     var_58h = r0;
    0x00057600 add.w ip, r1, r3                                  |     
    0x00057604 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00057606 add r3, r1                                        |     r3 += r1;
    0x00057608 b 0x57652                                         |     
                                                                 |     while (r0 == r7) {
    0x00057650 adds r2, 1                                        |         r2++;
    0x00057652 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00057654 mov r8, r2                                        |         r8 = r2;
    0x00057656 ldr r0, [sp, 0x7c]                                |         r0 = var_7ch;
    0x00057658 add.w ip, ip, 4                                   |         
    0x0005765c adds r3, 4                                        |         r3 += 4;
    0x0005765e cmp r2, r1                                        |         
    0x00057660 ite lt                                            |         
                                                                 |         if (r2 >= r1) {
    0x00057662 ldrlt r5, [ip, -0x4]                              |             r5 = *((ip - 0x4));
                                                                 |         }
                                                                 |         if (r2 >= r1) {
    0x00057666 ldr r5, [r3, -0x4]                                |             r5 = *((r3 - 0x4));
                                                                 |         }
    0x0005766a ldrh r1, [r5, 0x18]                               |         r1 = *((r5 + 0x18));
    0x0005766c ldrb.w lr, [r5, 0xc]                              |         
    0x00057670 add r1, lr                                        |         r1 += lr;
    0x00057672 add r1, r0                                        |         r1 += r0;
    0x00057674 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00057676 add r0, r1                                        |         r0 += r1;
    0x00057678 cmp r0, r7                                        |         
    0x0005767a str r0, [sp, 0x20]                                |         var_20h = r0;
    0x0005767c beq 0x57650                                       |         
                                                                 |     }
    0x0005767e ldr r0, [sp, 0x58]                                |     r0 = var_58h;
                                                                 | label_100:
    0x00057680 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00057682 add.w r3, r3, 0x188                               |     r3 += 0x188;
    0x00057686 add r3, sp, r3                                    |     r3 = sp + r3;
    0x00057688 ldr r3, [r3, -0xb0]                               |     r3 = *((r3 - 0xb0));
    0x0005768c cmp r3, r7                                        |     
                                                                 |     if (r3 == r7) {
    0x0005768e beq.w 0x5798c                                     |         goto label_101;
                                                                 |     }
                                                                 | label_34:
    0x00057692 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00057694 cmp r8, r3                                        |     
                                                                 |     if (r8 < r3) {
    0x00057696 bge 0x576aa                                       |         
    0x00057698 add r3, sp, 0x188                                 |         r3 += var_188h;
    0x0005769a ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0005769c add.w r3, r3, r8, lsl 2                           |         r3 += (r8 << 2);
    0x000576a0 ldr r3, [r3, -0x74]                               |         r3 = *((r3 - 0x74));
    0x000576a4 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x000576a6 beq.w 0x57c1a                                     |             goto label_102;
                                                                 |         }
                                                                 |     }
                                                                 | label_49:
    0x000576aa ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000576ac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000576ae beq.w 0x57978                                     |         goto label_103;
                                                                 |     }
                                                                 | label_33:
    0x000576b2 ldr r3, [sp, 0x148]                               |     r3 = var_148h;
    0x000576b4 ldrh.w r0, [r3, r7, lsl 1]                        |     offset_17 = r7 << 1;
                                                                 |     r0 = *((r3 + offset_17));
                                                                 |     if (r0 == 0) {
    0x000576b8 cbnz r0, 0x576c2                                  |         
    0x000576ba ldr r0, [sp, 0x4c]                                |         r0 = var_4ch;
    0x000576bc mov r1, r7                                        |         r1 = r7;
    0x000576be bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
                                                                 |     }
    0x000576c2 ldrh r2, [r4, 0x10]                               |     r2 = *((r4 + 0x10));
    0x000576c4 cmp r2, r0                                        |     
                                                                 |     if (r2 <= r0) {
    0x000576c6 blo.w 0x57b82                                     |         goto label_104;
                                                                 |     }
                                                                 | label_41:
    0x000576ca ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x000576ce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000576d0 bne.w 0x579ea                                     |         goto label_105;
                                                                 |     }
    0x000576d4 ldr r0, [sp, 0x13c]                               |     r0 = var_13ch;
                                                                 | label_35:
    0x000576d6 adds r7, 1                                        |     r7++;
    0x000576d8 cmp r0, r7                                        |     
                                                                 |     if (r0 > r7) {
    0x000576da bgt 0x575ea                                       |         goto label_27;
                                                                 |     }
    0x000576dc mov r6, sb                                        |     r6 = sb;
                                                                 | label_99:
    0x000576de cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000576e0 beq 0x577b2                                       |         goto label_106;
                                                                 |     }
    0x000576e2 ldr.w sb, [sp, 0x38]                              |     sb = var_38h;
    0x000576e6 mov.w r8, 0                                       |     r8 = 0;
    0x000576ea mov r7, r8                                        |     r7 = r8;
                                                                 | label_28:
    0x000576ec ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000576ee ldr r2, [sp, 0x148]                               |     r2 = var_148h;
    0x000576f0 ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x000576f2 ldr.w r5, [r3, r7, lsl 2]                         |     offset_18 = r7 << 2;
                                                                 |     r5 = *((r3 + offset_18));
    0x000576f6 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000576f8 add r4, r8                                        |     r4 += r8;
    0x000576fa ldrb.w lr, [r5, 8]                                |     
    0x000576fe ldr.w r3, [r3, r7, lsl 2]                         |     offset_19 = r7 << 2;
                                                                 |     r3 = *((r3 + offset_19));
    0x00057702 ldrh.w r0, [r2, r3, lsl 1]                        |     offset_20 = r3 << 1;
                                                                 |     r0 = *((r2 + offset_20));
    0x00057706 ldr r2, [sp, 0x144]                               |     r2 = var_144h;
    0x00057708 lsl.w ip, r3, 2                                   |     
    0x0005770c str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0005770e ldr.w r2, [r2, r3, lsl 2]                         |     offset_21 = r3 << 2;
                                                                 |     r2 = *((r2 + offset_21));
    0x00057712 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00057714 adds r3, r0, r3                                   |     r3 = r0 + r3;
    0x00057716 cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x0005771a beq.w 0x57c48                                     |         goto label_107;
                                                                 |     }
    0x0005771e ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00057720 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00057722 beq.w 0x57c2c                                     |         goto label_108;
                                                                 |     }
    0x00057726 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00057728 mov r2, sb                                        |     r2 = sb;
    0x0005772a ldr r3, [r5, 0x50]                                |     r3 = *((r5 + 0x50));
    0x0005772c mov r0, r5                                        |     r0 = r5;
    0x0005772e add r1, ip                                        |     r1 += ip;
    0x00057730 ldr r1, [r1, -0x4]                                |     r1 = *((r1 - 0x4));
    0x00057734 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00057736 ldrd r2, r3, [sb]                                 |     __asm ("ldrd r2, r3, [sb]");
    0x0005773a cmp r2, 0x80                                      |     
    0x0005773c sbcs r1, r3, 0                                    |     __asm ("sbcs r1, r3, 0");
                                                                 |     if (r2 <= 0x80) {
    0x00057740 blo.w 0x57bf6                                     |         goto label_109;
                                                                 |     }
    0x00057744 cmp.w r2, 0x4000                                  |     
    0x00057748 sbcs r1, r3, 0                                    |     __asm ("sbcs r1, r3, 0");
                                                                 |     if (r2 <= 0x4000) {
    0x0005774c blo.w 0x57be4                                     |         goto label_110;
                                                                 |     }
    0x00057750 adds r0, r4, 4                                    |     r0 = r4 + 4;
    0x00057752 bl 0x8c4c                                         |     r0 = fcn_00008c4c (r0, r1, r2);
    0x00057756 mov r3, r0                                        |     r3 = r0;
                                                                 | label_48:
    0x00057758 mov r2, r4                                        |     r2 = r4;
    0x0005775a adds r3, 4                                        |     r3 += 4;
    0x0005775c movs r4, 0                                        |     r4 = 0;
                                                                 | label_50:
    0x0005775e ldr r1, [sp, 0x164]                               |     r1 = var_164h;
    0x00057760 add r8, r3                                        |     r8 += r3;
    0x00057762 cmp r7, r1                                        |     
    0x00057764 it lt                                             |     
                                                                 |     if (r7 >= r1) {
    0x00057766 movlt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r7 < r1) {
    0x00057768 blt 0x57778                                       |         goto label_111;
                                                                 |     }
    0x0005776a add r0, sp, 0x168                                 |     r0 += var_168h;
    0x0005776c movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x0005776e ldr ip, [r0], 4                                   |         ip = *(r0);
                                                                 |         r0 += 4;
    0x00057772 adds r1, 1                                        |         r1++;
    0x00057774 cmp ip, r7                                        |         
    0x00057776 ble 0x5776e                                       |         
                                                                 |     } while (ip <= r7);
                                                                 | label_111:
    0x00057778 add r0, sp, 0x188                                 |     r0 += var_188h;
    0x0005777a add.w r1, r0, r1, lsl 2                           |     r1 = r0 + (r1 << 2);
    0x0005777e ldr r1, [r1, -0x3c]                               |     r1 = *((r1 - 0x3c));
    0x00057782 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x00057784 bhi 0x5778e                                       |         
    0x00057786 adds r0, r2, r3                                   |         r0 = r2 + r3;
    0x00057788 cmp r1, r0                                        |         
                                                                 |         if (r1 <= r0) {
    0x0005778a blo.w 0x57bfc                                     |             goto label_112;
                                                                 |         }
                                                                 |     }
    0x0005778e str.w fp, [sp, 8]                                 |     __asm ("str.w fp, [var_8h]");
    0x00057792 mov r0, sl                                        |     r0 = sl;
    0x00057794 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00057796 strd r4, r1, [sp]                                 |     __asm ("strd r4, r1, [sp]");
    0x0005779a ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0005779c add r1, r7                                        |     r1 += r7;
    0x0005779e bl 0x56850                                        |     fcn_00056850 (r0, r1, r2, r3, r4, r5);
    0x000577a2 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x000577a6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000577a8 bne.w 0x579ea                                     |         goto label_105;
                                                                 |     }
    0x000577ac adds r7, 1                                        |     r7++;
    0x000577ae cmp r7, r6                                        |     
                                                                 |     if (r7 < r6) {
    0x000577b0 blt 0x576ec                                       |         goto label_28;
                                                                 |     }
                                                                 | label_106:
    0x000577b2 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000577b4 str.w sl, [sp, 0x68]                              |     __asm ("str.w sl, [var_68h]");
    0x000577b8 str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x000577bc rsb.w r2, r3, 1                                   |     r2 = 1 - r3;
    0x000577c0 rsb.w r3, r3, 2                                   |     r3 = 2 - r3;
    0x000577c4 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x000577c6 add r3, sp, 0x13c                                 |     r3 += var_13ch;
    0x000577c8 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x000577ca str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_36:
    0x000577cc ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x000577ce mov r7, r0                                        |     r7 = r0;
    0x000577d0 eor.w r2, r0, r0, asr 31                          |     r2 = r0 ^ (r0 >> 31);
    0x000577d4 sub.w r2, r2, r0, asr 31                          |     r2 -= (r0 >> 31);
    0x000577d8 add.w r3, r2, 0x188                               |     r3 = r2 + 0x188;
    0x000577dc str r2, [sp, 0x24]                                |     var_24h = r2;
    0x000577de add.w r1, sp, r3                                  |     r1 = sp + r3;
    0x000577e2 ldrb r3, [r1, -0xc]                               |     r3 = *((r1 - 0xc));
    0x000577e6 str r1, [sp, 0x64]                                |     var_64h = r1;
    0x000577e8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000577ea bne.w 0x57a5c                                     |         goto label_113;
                                                                 |     }
    0x000577ee cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000577f0 blt.w 0x57bb2                                     |         goto label_114;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x000577f4 beq.w 0x57b90                                     |         goto label_115;
                                                                 |     }
    0x000577f8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000577fa subs r3, 1                                        |     r3--;
                                                                 | label_43:
    0x000577fc ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x000577fe ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00057800 cmp r2, r1                                        |     
    0x00057802 itett gt                                          |     
                                                                 |     if (r2 <= r1) {
    0x00057804 addgt r2, sp, 0x188                               |         r2 += var_188h;
                                                                 |     }
                                                                 |     if (r2 > r1) {
    0x00057806 lslle r3, r3, 2                                   |         r3 <<= 2;
                                                                 |     }
                                                                 |     if (r2 <= r1) {
    0x00057808 addgt r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r2 > r1) {
    0x0005780c lsls r3, r3, 2                                    |         r3 <<= 2;
                                                                 |     }
    0x0005780e it gt                                             |     
                                                                 |     if (r3 <= r3) {
    0x00057810 ldrgt r1, [sp, 0x7c]                              |         r1 = var_7ch;
                                                                 |     }
    0x00057812 add.w r3, r3, 0x188                               |     r3 += 0x188;
    0x00057816 it gt                                             |     
                                                                 |     if (r3 <= r3) {
    0x00057818 ldrgt r2, [r2, -0x9c]                             |         r2 = *((r2 - 0x9c));
                                                                 |     }
    0x0005781c add r3, sp, r3                                    |     r3 = sp + r3;
    0x0005781e it le                                             |     
                                                                 |     if (r3 > r3) {
    0x00057820 ldrle sb, [sp, 0x13c]                             |         sb = var_13ch;
                                                                 |     }
    0x00057824 ldr r7, [r3, -0xb0]                               |     r7 = *((r3 - 0xb0));
    0x00057828 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0005782a it gt                                             |     
                                                                 |     if (r3 <= r3) {
    0x0005782c addgt sb, r1, r2                                  |         sb = r1 + r2;
                                                                 |     }
    0x00057830 add r2, sp, 0x188                                 |     r2 += var_188h;
    0x00057832 add r7, r3                                        |     r7 += r3;
    0x00057834 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00057836 cmp sb, r7                                        |     
    0x00057838 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x0005783c ldr r4, [r3, -0xc4]                               |     r4 = *((r3 - 0xc4));
    0x00057840 ldr r8, [r3, -0xb0]                               |     r8 = *((r3 - 0xb0));
    0x00057844 ldr r2, [r4, 0x40]                                |     r2 = *((r4 + 0x40));
    0x00057846 ldrh r5, [r4, 0x18]                               |     r5 = *((r4 + 0x18));
    0x00057848 sub.w r6, r8, r7                                  |     r6 = r8 - r7;
    0x0005784c ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x0005784e ldr.w fp, [r4, 0x38]                              |     fp = *((r4 + 0x38));
    0x00057852 add.w sl, r2, r6, lsl 1                           |     sl = r2 + (r6 << 1);
    0x00057856 add.w r2, sb, r5                                  |     r2 = sb + r5;
    0x0005785a add r3, r2                                        |     r3 += r2;
    0x0005785c str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0005785e ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00057860 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 |     if (sb < r7) {
    0x00057862 bge 0x57888                                       |         
    0x00057864 mov r1, sb                                        |         r1 = sb;
    0x00057866 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00057868 sub.w r2, r7, sb                                  |         r2 = r7 - sb;
    0x0005786c mov r0, r4                                        |         r0 = r4;
    0x0005786e bl 0x3332c                                        |         r0 = fcn_0003332c (r0, r1, r2, r3);
    0x00057872 cmp r5, r0                                        |         
    0x00057874 mov r1, r0                                        |         r1 = r0;
                                                                 |         if (r5 < r0) {
    0x00057876 blt.w 0x57a72                                     |             goto label_116;
                                                                 |         }
    0x0005787a ldr r0, [r4, 0x40]                                |         r0 = *((r4 + 0x40));
    0x0005787c lsls r2, r5, 1                                    |         r2 = r5 << 1;
    0x0005787e subs r5, r5, r1                                   |         r5 -= r1;
    0x00057880 add.w r1, r0, r1, lsl 1                           |         r1 = r0 + (r1 << 1);
    0x00057884 blx 0x7d44                                        |         fcn_00007d44 ();
                                                                 |     }
                                                                 | label_42:
    0x00057888 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005788a cmp r3, r8                                        |     
                                                                 |     if (r3 > r8) {
    0x0005788c bgt.w 0x57bd2                                     |         goto label_117;
                                                                 |     }
                                                                 | label_47:
    0x00057890 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00057892 adds r3, r2, 5                                    |     r3 = r2 + 5;
    0x00057894 adds r2, 6                                        |     r2 += 6;
    0x00057896 ldrb.w r1, [fp, r3]                               |     r1 = *((fp + r3));
    0x0005789a add r3, fp                                        |     r3 += fp;
    0x0005789c str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0005789e ldrb.w r3, [fp, r2]                               |     r3 = *((fp + r2));
    0x000578a2 add r2, fp                                        |     r2 += fp;
    0x000578a4 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x000578a6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000578a8 orr.w r3, r3, r1, lsl 8                           |     r3 |= (r1 << 8);
    0x000578ac subs r3, 1                                        |     r3--;
    0x000578ae uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x000578b0 adds r3, 1                                        |     r3++;
    0x000578b2 add r3, fp                                        |     r3 += fp;
    0x000578b4 cmp r3, sl                                        |     
    0x000578b6 str r3, [r2]                                      |     *(r2) = r3;
                                                                 |     if (r3 <= sl) {
    0x000578b8 blo.w 0x57bca                                     |         goto label_118;
                                                                 |     }
    0x000578bc cmp r7, sb                                        |     
    0x000578be ldr r1, [r4, 0x40]                                |     r1 = *((r4 + 0x40));
                                                                 |     if (r7 < sb) {
    0x000578c0 blt.w 0x57b4e                                     |         goto label_119;
                                                                 |     }
                                                                 | label_40:
    0x000578c4 ldrb r0, [r4, 0xc]                                |     r0 = *((r4 + 0xc));
    0x000578c6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000578c8 beq.w 0x579f8                                     |         goto label_120;
                                                                 |     }
    0x000578cc add.w r3, r4, 0x1c                                |     r3 = r4 + 0x1c;
    0x000578d0 mov r8, r4                                        |     r8 = r4;
    0x000578d2 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000578d4 movs r3, 0                                        |     r3 = 0;
    0x000578d6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000578d8 str.w fp, [sp, 0x70]                              |     __asm ("str.w fp, [var_70h]");
    0x000578dc b 0x5791c                                         |     goto label_121;
                                                                 | label_29:
    0x000578de ldr r2, [sp, 0x148]                               |     r2 = var_148h;
    0x000578e0 adds r5, 1                                        |     r5++;
    0x000578e2 ldrh.w r2, [r2, r4, lsl 1]                        |     offset_22 = r4 << 1;
                                                                 |     r2 = *((r2 + offset_22));
                                                                 |     if (r2 == 0) {
    0x000578e6 cbnz r2, 0x578f0                                  |         
    0x000578e8 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x000578ea mov r1, r4                                        |         r1 = r4;
    0x000578ec bl 0x9780                                         |         fcn_00009780 (r0, r1, r2);
                                                                 |     }
    0x000578f0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000578f2 mov r3, fp                                        |     r3 = fp;
    0x000578f4 mov r1, sl                                        |     r1 = sl;
    0x000578f6 mov r0, r8                                        |     r0 = r8;
    0x000578f8 str r4, [sp]                                      |     *(sp) = r4;
    0x000578fa str r2, [sp, 8]                                   |     var_8h = r2;
    0x000578fc movs r2, 1                                        |     r2 = 1;
    0x000578fe str r2, [sp, 4]                                   |     var_4h = r2;
    0x00057900 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00057902 bl 0x2e980                                        |     r0 = fcn_0002e980 (r0, r1, r2, r3, r4, r5, r6);
    0x00057906 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00057908 bne 0x579aa                                       |         goto label_122;
                                                                 |     }
    0x0005790a ldr.w r1, [r8, 0x40]                              |     r1 = *((r8 + 0x40));
    0x0005790e ldrb.w r0, [r8, 0xc]                              |     r0 = *((r8 + 0xc));
                                                                 |     do {
    0x00057912 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x00057914 adds r3, 1                                        |         r3++;
    0x00057916 cmp r3, r0                                        |         
    0x00057918 str r3, [sp, 0x3c]                                |         var_3ch = r3;
                                                                 |         if (r3 >= r0) {
    0x0005791a bge 0x579f2                                       |             goto label_123;
                                                                 |         }
                                                                 | label_121:
    0x0005791c ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x0005791e ldrh r4, [r3], 2                                  |         r4 = *(r3);
                                                                 |         r3 += 2;
    0x00057922 add r4, sb                                        |         r4 += sb;
    0x00057924 str r3, [sp, 0x50]                                |         var_50h = r3;
    0x00057926 subs r2, r4, r7                                   |         r2 = r4 - r7;
    0x00057928 mvns r3, r2                                       |         r3 = ~r2;
    0x0005792a cmp r2, r6                                        |         
    0x0005792c lsr.w r3, r3, 0x1f                                |         r3 >>= 0x1f;
    0x00057930 it ge                                             |         
                                                                 |         if (r2 < r6) {
    0x00057932 movge r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00057934 cmp r3, 0                                         |         
    0x00057936 beq 0x57912                                       |         
                                                                 |     } while (r3 == 0);
    0x00057938 cmp r2, r5                                        |     
    0x0005793a add.w fp, r1, r2, lsl 1                           |     
                                                                 |     if (r2 >= r5) {
    0x0005793e bge 0x578de                                       |         goto label_29;
                                                                 |     }
    0x00057940 subs r2, r5, r2                                   |     r2 = r5 - r2;
    0x00057942 mov r1, fp                                        |     r1 = fp;
    0x00057944 lsls r2, r2, 1                                    |     r2 <<= 1;
    0x00057946 add.w r0, fp, 2                                   |     r0 += var_2h;
    0x0005794a blx 0x7d44                                        |     fcn_00007d44 ();
    0x0005794e b 0x578de                                         |     goto label_29;
                                                                 | label_54:
    0x00057950 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00057952 b.w 0x56ff6                                       |     goto label_30;
                                                                 | label_97:
    0x00057956 ldr r3, [sp, 0xc4]                                |     r3 = var_c4h;
    0x00057958 tst.w r8, 8                                       |     
    0x0005795c ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0005795e ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00057960 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00057962 str r2, [r1]                                      |     *(r1) = r2;
                                                                 |     if ((r8 & 8) == 0) {
    0x00057964 bne 0x57972                                       |         
    0x00057966 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x00057968 cmp r2, 1                                         |         
                                                                 |         if (r2 == 1) {
    0x0005796a beq 0x57972                                       |             goto label_124;
                                                                 |         }
    0x0005796c str r5, [sp, 0x18]                                |         var_18h = r5;
                                                                 | label_98:
    0x0005796e add r2, sp, 0xb4                                  |         r2 += var_b4h;
    0x00057970 b 0x575aa                                         |         goto label_31;
                                                                 |     }
                                                                 | label_124:
    0x00057972 movs r3, 1                                        |     r3 = 1;
    0x00057974 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00057976 b 0x575b8                                         |     goto label_32;
                                                                 | label_103:
    0x00057978 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0005797a movs r2, 5                                        |     r2 = 5;
    0x0005797c str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00057980 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00057982 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00057984 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00057986 bl 0x557bc                                        |     fcn_000557bc (r0, r1, r2, r3, r4);
    0x0005798a b 0x576b2                                         |     goto label_33;
                                                                 | label_101:
    0x0005798c ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0005798e add r3, sp, 0x188                                 |     r3 += var_188h;
    0x00057990 adds r2, 1                                        |     r2++;
    0x00057992 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00057996 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00057998 ldr r4, [r3, -0xc4]                               |     r4 = *((r3 - 0xc4));
    0x0005799c lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x0005799e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000579a0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000579a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000579a4 bne.w 0x57692                                     |         goto label_34;
                                                                 |     }
    0x000579a8 b 0x576d6                                         |     goto label_35;
                                                                 | label_122:
    0x000579aa mov r4, r8                                        |     r4 = r8;
                                                                 | label_45:
    0x000579ac adds r3, r6, r7                                   |     r3 = r6 + r7;
    0x000579ae lsls r5, r7, 1                                    |     r5 = r7 << 1;
    0x000579b0 lsl.w sb, r3, 1                                   |     sb = r3 << 1;
                                                                 |     do {
    0x000579b4 ldr.w r8, [sp, 0x148]                             |         r8 = var_148h;
    0x000579b8 ldrh.w r3, [r8, r5]                               |         r3 = *((r8 + r5));
                                                                 |         if (r3 == 0) {
    0x000579bc cbnz r3, 0x579ce                                  |             
    0x000579be ldrd r0, r3, [sp, 0x140]                          |             __asm ("ldrd r0, r3, [var_140h]");
    0x000579c2 ldr.w r1, [r3, r5, lsl 1]                         |             offset_23 = r5 << 1;
                                                                 |             r1 = *((r3 + offset_23));
    0x000579c6 ldr r3, [r0, 0x4c]                                |             r3 = *((r0 + 0x4c));
    0x000579c8 blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000579ca strh.w r0, [r8, r5]                               |             *((r8 + r5)) = r0;
                                                                 |         }
    0x000579ce adds r5, 2                                        |         r5 += 2;
    0x000579d0 cmp sb, r5                                        |         
    0x000579d2 bne 0x579b4                                       |         
                                                                 |     } while (sb != r5);
                                                                 | label_46:
    0x000579d4 mov r3, r4                                        |     r3 = r4;
    0x000579d6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000579d8 mov r2, r6                                        |     r2 = r6;
    0x000579da mov r1, r7                                        |     r1 = r7;
    0x000579dc bl 0x2a128                                        |     fcn_0002a128 (r0, r1, r2, r3);
    0x000579e0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000579e2 str r0, [r3]                                      |     *(r3) = r0;
                                                                 |     if (r0 == 0) {
    0x000579e4 cbz r0, 0x57a40                                   |         goto label_125;
                                                                 |     }
    0x000579e6 ldr.w fp, [sp, 0x20]                              |     fp = var_20h;
                                                                 |     do {
                                                                 | label_105:
    0x000579ea ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000579ec str r3, [sp, 0x48]                                |         var_48h = r3;
    0x000579ee b.w 0x56c4e                                       |         goto label_4;
                                                                 | label_123:
    0x000579f2 ldr.w fp, [sp, 0x70]                              |         fp = var_70h;
    0x000579f6 mov r4, r8                                        |         r4 = r8;
                                                                 | label_120:
    0x000579f8 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x000579fa add.w r3, r1, r5, lsl 1                           |         r3 = r1 + (r5 << 1);
    0x000579fe mov r0, r4                                        |         r0 = r4;
    0x00057a00 mov r1, sl                                        |         r1 = sl;
    0x00057a02 str r2, [sp, 8]                                   |         var_8h = r2;
    0x00057a04 subs r2, r6, r5                                   |         r2 = r6 - r5;
    0x00057a06 add r5, r7                                        |         r5 += r7;
    0x00057a08 str r2, [sp, 4]                                   |         var_4h = r2;
    0x00057a0a str r5, [sp]                                      |         *(sp) = r5;
    0x00057a0c ldr r5, [sp, 0x38]                                |         r5 = var_38h;
    0x00057a0e mov r2, r5                                        |         r2 = r5;
    0x00057a10 bl 0x2e980                                        |         r0 = fcn_0002e980 (r0, r1, r2, r3, r4, r5, r6);
    0x00057a14 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00057a16 bne.w 0x57bca                                     |             goto label_118;
                                                                 |         }
    0x00057a1a uxth r6, r6                                       |         r6 = (int16_t) r6;
    0x00057a1c ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00057a1e strb r0, [r4, 0xc]                                |         *((r4 + 0xc)) = r0;
    0x00057a20 strh r6, [r4, 0x18]                               |         *((r4 + 0x18)) = r6;
    0x00057a22 lsrs r6, r6, 8                                    |         r6 >>= 8;
    0x00057a24 add r3, fp                                        |         r3 += fp;
    0x00057a26 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x00057a28 strb r6, [r3, 3]                                  |         *((r3 + 3)) = r6;
    0x00057a2a ldrh r2, [r4, 0x18]                               |         r2 = *((r4 + 0x18));
    0x00057a2c str r0, [r1]                                      |         *(r1) = r0;
    0x00057a2e ldr r1, [sp, 0x58]                                |         r1 = var_58h;
    0x00057a30 strb r2, [r3, 4]                                  |         *((r3 + 4)) = r2;
    0x00057a32 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00057a34 sub.w r3, r3, fp                                  |         r3 -= fp;
    0x00057a38 asrs r2, r3, 8                                    |         r2 = r3 >> 8;
    0x00057a3a strb r2, [r1]                                     |         *(r1) = r2;
    0x00057a3c ldr r2, [sp, 0x60]                                |         r2 = var_60h;
    0x00057a3e strb r3, [r2]                                     |         *(r2) = r3;
                                                                 | label_125:
    0x00057a40 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x00057a42 mov.w r2, 1                                       |         r2 = 1;
    0x00057a46 strb r2, [r3, -0xc]                               |         *((r3 - 0xc)) = r2;
    0x00057a4a add r2, sp, 0x188                                 |         r2 += var_188h;
    0x00057a4c ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00057a4e add.w r3, r2, r3, lsl 2                           |         r3 = r2 + (r3 << 2);
    0x00057a52 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch_2;
    0x00057a54 ldr r3, [r3, -0x88]                               |         r3 = *((r3 - 0x88));
    0x00057a58 subs r3, r2, r3                                   |         r3 = r2 - r3;
    0x00057a5a str r3, [r4, 0x14]                                |         *((r4 + 0x14)) = r3;
                                                                 | label_113:
    0x00057a5c ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00057a5e ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00057a60 cmp r3, r2                                        |         
                                                                 |         if (r3 < r2) {
    0x00057a62 bge 0x57aa2                                       |             
                                                                 | label_44:
    0x00057a64 ldr r3, [sp, 0x30]                                |             r3 = var_30h;
    0x00057a66 adds r3, 1                                        |             r3++;
    0x00057a68 str r3, [sp, 0x30]                                |             var_30h = r3;
    0x00057a6a ldr r3, [sp, 0x4c]                                |             r3 = var_4ch;
    0x00057a6c adds r3, 1                                        |             r3++;
    0x00057a6e str r3, [sp, 0x4c]                                |             var_4ch = r3;
    0x00057a70 b 0x577cc                                         |             goto label_36;
                                                                 | label_116:
    0x00057a72 ldr.w fp, [sp, 0x20]                              |             fp = var_20h;
    0x00057a76 blx 0x7f8c                                        |             fcn_00007f8c ();
    0x00057a7a ldr r3, [sp, 0x18]                                |             r3 = var_18h;
    0x00057a7c adds r0, 0x14                                     |             r0 += 0x14;
    0x00057a7e ldr r2, [pc, 0x1d0]                               |             
    0x00057a80 ldr r1, [pc, 0x1d0]                               |             
    0x00057a82 str r3, [sp, 0x48]                                |             var_48h = r3;
    0x00057a84 movw r3, 0x1bf1                                   |             
    0x00057a88 movt r3, 1                                        |             r3 = 0x11bf1;
    0x00057a8c str r0, [sp]                                      |             *(sp) = r0;
    0x00057a8e add r2, pc                                        |             r2 = 0xaf6e4;
    0x00057a90 add r1, pc                                        |             r1 = 0xaf6e8;
    0x00057a92 movs r0, 0xb                                      |             r0 = 0xb;
    0x00057a94 blx 0x8474                                        |             fcn_00008474 ();
    0x00057a98 movs r3, 0xb                                      |             r3 = 0xb;
    0x00057a9a str.w r3, [fp]                                    |             __asm ("str.w r3, [fp]");
    0x00057a9e b.w 0x56c4e                                       |             goto label_4;
                                                                 |         }
    0x00057aa2 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x00057aa4 ldr.w sl, [sp, 0x68]                              |         sl = var_68h;
    0x00057aa8 ldr.w fp, [sp, 0x20]                              |         fp = var_20h;
                                                                 |         if (r3 != 0) {
    0x00057aac cbz r3, 0x57ac0                                   |             
    0x00057aae ldrh.w r3, [sl, 0x18]                             |             r3 = *((sl + 0x18));
                                                                 |             if (r3 != 0) {
    0x00057ab2 cbnz r3, 0x57ac0                                  |                 goto label_126;
                                                                 |             }
    0x00057ab4 ldr r3, [sp, 0x2c]                                |             r3 = var_2ch;
    0x00057ab6 ldrb.w r2, [sl, 9]                                |             r2 = *((sl + 9));
    0x00057aba ldr r3, [r3, 0x14]                                |             r3 = *((r3 + 0x14));
    0x00057abc cmp r2, r3                                        |             
                                                                 |             if (r2 <= r3) {
    0x00057abe ble 0x57ade                                       |                 goto label_127;
                                                                 |             }
                                                                 |         }
                                                                 | label_126:
    0x00057ac0 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00057ac2 ldrb r3, [r3, 0x11]                               |         r3 = *((r3 + 0x11));
                                                                 |         if (r3 != 0) {
    0x00057ac4 cbz r3, 0x57aca                                   |             
    0x00057ac6 ldr r3, [sp, 0x54]                                |             r3 = var_54h;
                                                                 |             if (r3 == 0) {
    0x00057ac8 cbz r3, 0x57b14                                   |                 goto label_128;
                                                                 |             }
                                                                 |         }
                                                                 | label_38:
    0x00057aca ldr r4, [sp, 0x18]                                |         r4 = var_18h;
    0x00057acc ldr r5, [sp, 0x28]                                |         r5 = var_28h;
                                                                 | label_37:
    0x00057ace ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00057ad0 cmp r4, r3                                        |         
    0x00057ad2 bge 0x579ea                                       |         
                                                                 |     } while (r4 >= r3);
    0x00057ad4 ldr.w r3, [fp]                                    |     r3 = *(fp);
                                                                 |     if (r3 == 0) {
    0x00057ad8 cbz r3, 0x57b3c                                   |         goto label_129;
                                                                 |     }
                                                                 | label_39:
    0x00057ada adds r4, 1                                        |     r4++;
    0x00057adc b 0x57ace                                         |     goto label_37;
                                                                 | label_127:
    0x00057ade ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00057ae0 mov.w r1, -1                                      |     r1 = -1;
    0x00057ae4 mov r0, r4                                        |     r0 = r4;
    0x00057ae6 bl 0x3505c                                        |     fcn_0003505c (r0, r1);
    0x00057aea str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00057aee cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00057af0 bne 0x57aca                                       |         goto label_38;
                                                                 |     }
    0x00057af2 mov r1, sl                                        |     r1 = sl;
    0x00057af4 mov r2, fp                                        |     r2 = fp;
    0x00057af6 mov r0, r4                                        |     r0 = r4;
    0x00057af8 bl 0x55aa8                                        |     fcn_00055aa8 (r0, r1, r2);
    0x00057afc ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00057b00 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057b02 bne 0x57aca                                       |         goto label_38;
                                                                 |     }
    0x00057b04 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00057b06 mov r1, r4                                        |     r1 = r4;
    0x00057b08 ldr r0, [r4, 0x34]                                |     r0 = *((r4 + 0x34));
    0x00057b0a bl 0x56398                                        |     fcn_00056398 (r0, r1, r2, r3);
    0x00057b0e str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00057b12 b 0x57aca                                         |     goto label_38;
                                                                 | label_128:
    0x00057b14 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00057b16 mov r5, fp                                        |     r5 = fp;
    0x00057b18 ldr r6, [sp, 0x6c]                                |     r6 = var_6ch;
                                                                 |     do {
    0x00057b1a ldr r3, [r6], 4                                   |         r3 = *(r6);
                                                                 |         r6 += 4;
    0x00057b1e movs r2, 5                                        |         r2 = 5;
    0x00057b20 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00057b22 adds r4, 1                                        |         r4++;
    0x00057b24 ldr r1, [r3, 0x38]                                |         r1 = *((r3 + 0x38));
    0x00057b26 ldr r1, [r1, 8]                                   |         r1 = *((r1 + 8));
    0x00057b28 str r5, [sp]                                      |         *(sp) = r5;
    0x00057b2a ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00057b2c rev r1, r1                                        |         r1 = SWAP32 (r1);
    0x00057b2e bl 0x557bc                                        |         fcn_000557bc (r0, r1, r2, r3, r4);
    0x00057b32 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00057b34 cmp r4, r3                                        |         
    0x00057b36 bne 0x57b1a                                       |         
                                                                 |     } while (r4 != r3);
    0x00057b38 mov fp, r5                                        |     
    0x00057b3a b 0x57aca                                         |     goto label_38;
                                                                 | label_129:
    0x00057b3c ldr.w r1, [r5, r4, lsl 2]                         |     offset_24 = r4 << 2;
                                                                 |     r1 = *((r5 + offset_24));
    0x00057b40 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x00057b42 ldr r0, [r1, 0x34]                                |     r0 = *((r1 + 0x34));
    0x00057b44 bl 0x56398                                        |     fcn_00056398 (r0, r1, r2, r3);
    0x00057b48 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00057b4c b 0x57ada                                         |     goto label_39;
                                                                 | label_119:
    0x00057b4e sub.w r8, sb, r7                                  |     r8 = sb - r7;
    0x00057b52 lsls r2, r5, 1                                    |     r2 = r5 << 1;
    0x00057b54 cmp r8, r6                                        |     
    0x00057b56 str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x00057b58 it ge                                             |     
                                                                 |     if (r8 < r6) {
    0x00057b5a movge r8, r6                                      |         r8 = r6;
                                                                 |     }
    0x00057b5c add.w r0, r1, r8, lsl 1                           |     r0 = r1 + (r8 << 1);
    0x00057b60 blx 0x7d44                                        |     fcn_00007d44 ();
    0x00057b64 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00057b66 mov r0, r4                                        |     r0 = r4;
    0x00057b68 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00057b6a str r7, [sp]                                      |     *(sp) = r7;
    0x00057b6c mov r3, r1                                        |     r3 = r1;
    0x00057b6e mov r1, sl                                        |     r1 = sl;
    0x00057b70 strd r8, r2, [sp, 4]                              |     __asm ("strd r8, r2, [sp, 4]");
    0x00057b74 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00057b76 bl 0x2e980                                        |     r0 = fcn_0002e980 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     if (r0 != 0) {
    0x00057b7a cbnz r0, 0x57bca                                  |         goto label_118;
                                                                 |     }
    0x00057b7c ldr r1, [r4, 0x40]                                |     r1 = *((r4 + 0x40));
    0x00057b7e add r5, r8                                        |     r5 += r8;
    0x00057b80 b 0x578c4                                         |     goto label_40;
                                                                 | label_104:
    0x00057b82 mov r2, r6                                        |     r2 = r6;
    0x00057b84 mov r3, fp                                        |     r3 = fp;
    0x00057b86 mov r1, r5                                        |     r1 = r5;
    0x00057b88 mov r0, r4                                        |     r0 = r4;
    0x00057b8a bl 0x55930                                        |     fcn_00055930 (r0, r1, r2, r3);
    0x00057b8e b 0x576ca                                         |     goto label_41;
                                                                 | label_115:
    0x00057b90 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00057b92 ldr r6, [sp, 0xd8]                                |     r6 = var_d8h;
    0x00057b94 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x00057b98 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00057b9a ldrh r5, [r4, 0x18]                               |     r5 = *((r4 + 0x18));
    0x00057b9c mov r8, r6                                        |     r8 = r6;
    0x00057b9e ldr.w fp, [r4, 0x38]                              |     fp = *((r4 + 0x38));
    0x00057ba2 add.w sl, r3, r6, lsl 1                           |     sl = r3 + (r6 << 1);
    0x00057ba6 ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x00057ba8 add r3, r5                                        |     r3 += r5;
    0x00057baa str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00057bac ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00057bae str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00057bb0 b 0x57888                                         |     goto label_42;
                                                                 | label_114:
    0x00057bb2 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00057bb4 add r2, sp, 0x188                                 |     r2 += var_188h;
    0x00057bb6 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x00057bba ldr r1, [r2, -0x9c]                               |     r1 = *((r2 - 0x9c));
    0x00057bbe ldr r2, [r2, -0xb0]                               |     r2 = *((r2 - 0xb0));
    0x00057bc2 cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x00057bc4 bge.w 0x577fc                                     |         goto label_43;
                                                                 |     }
    0x00057bc8 b 0x57a64                                         |     goto label_44;
                                                                 | label_118:
    0x00057bca cmp r6, 0                                         |     
                                                                 |     if (r6 > 0) {
    0x00057bcc bgt.w 0x579ac                                     |         goto label_45;
                                                                 |     }
    0x00057bd0 b 0x579d4                                         |     goto label_46;
                                                                 | label_117:
    0x00057bd2 sub.w r2, r3, r8                                  |     r2 = r3 - r8;
    0x00057bd6 mov r1, r8                                        |     r1 = r8;
    0x00057bd8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00057bda mov r0, r4                                        |     r0 = r4;
    0x00057bdc bl 0x3332c                                        |     r0 = fcn_0003332c (r0, r1, r2, r3);
    0x00057be0 subs r5, r5, r0                                   |     r5 -= r0;
    0x00057be2 b 0x57890                                         |     goto label_47;
                                                                 | label_110:
    0x00057be4 lsrs r3, r2, 7                                    |     r3 = r2 >> 7;
    0x00057be6 and r2, r2, 0x7f                                  |     r2 &= 0x7f;
    0x00057bea strb r2, [r4, 5]                                  |     *((r4 + 5)) = r2;
    0x00057bec orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x00057bf0 strb r3, [r4, 4]                                  |     *((r4 + 4)) = r3;
    0x00057bf2 movs r3, 2                                        |     r3 = 2;
    0x00057bf4 b 0x57758                                         |     goto label_48;
                                                                 | label_109:
    0x00057bf6 movs r3, 1                                        |     r3 = 1;
    0x00057bf8 strb r2, [r4, 4]                                  |     *((r4 + 4)) = r2;
    0x00057bfa b 0x57758                                         |     goto label_48;
                                                                 | label_112:
    0x00057bfc ldr r2, [pc, 0x58]                                |     
    0x00057bfe movw r1, 0x1fbb                                   |     
    0x00057c02 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00057c04 movt r1, 1                                        |     r1 = 0x11fbb;
    0x00057c08 movs r0, 0xb                                      |     r0 = 0xb;
    0x00057c0a add r2, pc                                        |     r2 = 0xaf866;
    0x00057c0c str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00057c0e bl 0x23164                                        |     fcn_00023164 (r0, r1, r2);
    0x00057c12 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00057c16 b.w 0x56c4e                                       |     goto label_4;
                                                                 | label_102:
    0x00057c1a ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x00057c1c cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x00057c1e bhi.w 0x576aa                                     |         goto label_49;
                                                                 |     }
    0x00057c22 ldr r3, [r5, 0x3c]                                |     r3 = *((r5 + 0x3c));
    0x00057c24 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x00057c26 bhi.w 0x576d6                                     |         goto label_35;
                                                                 |     }
    0x00057c2a b 0x576aa                                         |     goto label_49;
                                                                 | label_108:
    0x00057c2c cmp r0, 4                                         |     
    0x00057c2e sub.w r2, r2, 4                                   |     r2 -= 4;
                                                                 |     if (r0 != 4) {
    0x00057c32 bne.w 0x5775e                                     |         goto label_50;
                                                                 |     }
    0x00057c36 ldr.w r3, [sl, 0x4c]                              |     r3 = *((sl + 0x4c));
    0x00057c3a mov r1, r2                                        |     r1 = r2;
    0x00057c3c mov r0, sl                                        |     r0 = sl;
    0x00057c3e str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00057c40 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00057c42 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00057c44 mov r3, r0                                        |     r3 = r0;
    0x00057c46 b 0x5775e                                         |     goto label_50;
                                                                 | label_107:
    0x00057c48 ldr r1, [r5, 0x38]                                |     r1 = *((r5 + 0x38));
    0x00057c4a ldr r0, [r2]                                      |     r0 = *(r2);
    0x00057c4c str r0, [r1, 8]                                   |     *((r1 + 8)) = r0;
    0x00057c4e b 0x5775e                                         |     goto label_50;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5f5e0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0005f5e0 ()                                      | void fcn_0005f5e0 (int16_t arg_0h, int16_t arg_8h, int16_t arg_13h, int16_t arg_17h, int16_t arg_1ch, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_64h, int16_t arg_74h, int16_t arg_c7h, int16_t arg_d0h, int16_t arg_d4h, int16_t arg_f0h, int16_t arg_108h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_ch_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_85h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int32_t var_c4h_2;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int32_t var_dch;
                                                                 |     int16_t var_e0h;
                                                                 |     int16_t var_e4h;
                                                                 |     int16_t var_e8h;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0005f5e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0005f5e4 mov fp, r0                                        |     
    0x0005f5e6 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0005f5ea sub sp, 0xfc                                      |     
    0x0005f5ec mov r7, r1                                        |     r7 = r1;
    0x0005f5ee str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0005f5f0 ldr.w r2, [pc, 0xa84]                             |     
    0x0005f5f4 ldr.w r3, [pc, 0xa84]                             |     r3 = *(0x6007c);
    0x0005f5f8 ldr.w sl, [r0, 8]                                 |     sl = *((r0 + 8));
    0x0005f5fc add r2, pc                                        |     r2 = 0xbf678;
    0x0005f5fe ldr.w sb, [r0]                                    |     sb = *(r0);
    0x0005f602 ldr r3, [r2, r3]                                  |     
    0x0005f604 ldr r3, [r3]                                      |     r3 = *(0xbf678);
    0x0005f606 str r3, [sp, 0xf4]                                |     var_f4h = r3;
    0x0005f608 mov.w r3, 0                                       |     r3 = 0;
    0x0005f60c cmp.w sl, 0                                       |     
    0x0005f610 beq 0x5f648                                       |     
                                                                 |     while (1) {
                                                                 |         if (r7 != 0) {
    0x0005f612 cbz r7, 0x5f620                                   |             
    0x0005f614 ldrb.w r3, [sb, 0x53]                             |             r3 = *((sb + 0x53));
                                                                 |             if (r3 != 0) {
    0x0005f618 cbnz r3, 0x5f620                                  |                 goto label_0;
                                                                 |             }
    0x0005f61a ldr.w r3, [fp, 0x24]                              |             r3 = *(arg_24h);
                                                                 |             if (r3 == 0) {
    0x0005f61e cbz r3, 0x5f65a                                   |                 goto label_113;
                                                                 |             }
                                                                 |         }
                                                                 | label_0:
    0x0005f620 movs r4, 1                                        |         r4 = 1;
                                                                 | label_2:
    0x0005f622 ldr.w r2, [pc, 0xa5c]                             |         r2 = *(0x00060080);
    0x0005f626 ldr.w r3, [pc, 0xa54]                             |         r3 = *(0x6007e);
    0x0005f62a add r2, pc                                        |         r2 += pc;
    0x0005f62c ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0005f62e ldr r2, [r3]                                      |         r2 = *(0x6007e);
    0x0005f630 ldr r3, [sp, 0xf4]                                |         r3 = var_f4h;
    0x0005f632 eors r2, r3                                       |         r2 ^= r3;
    0x0005f634 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005f638 bne.w 0x61462                                     |             goto label_114;
                                                                 |         }
    0x0005f63c mov r0, r4                                        |         r0 = r4;
    0x0005f63e add sp, 0xfc                                      |         
    0x0005f640 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x0005f644 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0005f648 ldr r3, [r0, 0x74]                                |         r3 = *(arg_0hx74);
    0x0005f64a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005f64c beq.w 0x5f846                                     |             goto label_115;
                                                                 |         }
                                                                 | label_3:
    0x0005f650 mov r0, fp                                        |         r0 = fp;
    0x0005f652 bl 0x2ae64                                        |         r0 = fcn_0002ae64 (r0, r1);
    0x0005f656 mov sl, r0                                        |         sl = r0;
    0x0005f658 b 0x5f612                                         |         
                                                                 |     }
                                                                 | label_113:
    0x0005f65a mov r2, r3                                        |     r2 = r3;
    0x0005f65c movs r1, 0x15                                     |     r1 = 0x15;
    0x0005f65e mov r0, fp                                        |     r0 = fp;
    0x0005f660 str r3, [sp]                                      |     *(sp) = r3;
    0x0005f662 bl 0x25800                                        |     r0 = fcn_00025800 (r0);
    0x0005f666 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005f668 bne 0x5f620                                       |         goto label_0;
                                                                 |     }
    0x0005f66a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005f66c ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005f66e cmp r3, 6                                         |     
                                                                 |     if (r3 <= 6) {
    0x0005f670 bhi 0x5f6b2                                       |         
    0x0005f672 ldr r4, [r7, 0x30]                                |         r4 = *((r7 + 0x30));
                                                                 |         if (r4 != 0) {
    0x0005f674 cbz r4, 0x5f6a6                                   |             
    0x0005f676 ldr.w r0, [fp]                                    |             r0 = *(fp);
    0x0005f67a cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0005f67c beq.w 0x5fb6e                                     |                 goto label_116;
                                                                 |             }
    0x0005f680 movs r2, 0xc                                      |             r2 = 0xc;
    0x0005f682 movs r3, 0                                        |             r3 = 0;
    0x0005f684 bl 0x1abdc                                        |             r0 = fcn_0001abdc (r0, r1);
                                                                 | label_12:
    0x0005f688 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0005f68a beq.w 0x604ae                                     |                 goto label_117;
                                                                 |             }
    0x0005f68e ldr.w r3, [fp, 0x108]                             |             r3 = *(arg_108h);
    0x0005f692 str r3, [r0]                                      |             *(r0) = r3;
    0x0005f694 ldr.w r3, [pc, 0x9ec]                             |             r3 = *(0x00060084);
    0x0005f698 str.w r0, [fp, 0x108]                             |             __asm ("str.w r0, [arg_108h]");
    0x0005f69c str r4, [r0, 4]                                   |             *((r0 + 4)) = r4;
    0x0005f69e add r3, pc                                        |             r3 += pc;
    0x0005f6a0 str r3, [r0, 8]                                   |             *((r0 + 8)) = r3;
                                                                 | label_20:
    0x0005f6a2 movs r3, 0                                        |             r3 = 0;
    0x0005f6a4 str r3, [r7, 0x30]                                |             *((r7 + 0x30)) = r3;
                                                                 |         }
    0x0005f6a6 ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x0005f6a8 bic r3, r3, 1                                     |         r3 = BIT_MASK (r3, 1);
    0x0005f6ac orr r3, r3, 0x400000                              |         r3 |= 0x400000;
    0x0005f6b0 str r3, [r7, 4]                                   |         *((r7 + 4)) = r3;
                                                                 |     }
    0x0005f6b2 movs r2, 0                                        |     r2 = 0;
    0x0005f6b4 mov r1, r7                                        |     r1 = r7;
    0x0005f6b6 mov r0, fp                                        |     r0 = fp;
    0x0005f6b8 bl 0x32c7c                                        |     fcn_00032c7c (r0, r1, r2, r3);
    0x0005f6bc ldr.w r3, [fp, 0x24]                              |     r3 = *(arg_24h);
    0x0005f6c0 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0005f6c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f6c4 bne.w 0x5f854                                     |         goto label_118;
                                                                 |     }
    0x0005f6c8 ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
    0x0005f6cc str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0005f6ce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f6d0 bne.w 0x5fb66                                     |         goto label_102;
                                                                 |     }
    0x0005f6d4 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0005f6d6 lsls r4, r3, 8                                    |     r4 = r3 << 8;
                                                                 |     if (r4 >= r3) {
    0x0005f6d8 bpl 0x5f712                                       |         goto label_119;
                                                                 |     }
    0x0005f6da ldr r0, [r7, 0x20]                                |     r0 = *((r7 + 0x20));
    0x0005f6dc ldr r3, [r0]                                      |     r3 = *(r0);
    0x0005f6de mov r5, r0                                        |     r5 = r0;
    0x0005f6e0 cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0005f6e2 ble 0x5f712                                       |         goto label_119;
                                                                 |     }
    0x0005f6e4 movs r4, 1                                        |     r4 = 1;
    0x0005f6e6 b 0x5f6f0                                         |     
                                                                 |     while (r1 != r2) {
                                                                 | label_1:
    0x0005f6e8 ldr r3, [r0]                                      |         r3 = *(r0);
    0x0005f6ea adds r4, 1                                        |         r4++;
    0x0005f6ec cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x0005f6ee ble 0x5f712                                       |             goto label_119;
                                                                 |         }
    0x0005f6f0 add.w r3, r4, r4, lsl 3                           |         r3 = r4 + (r4 << 3);
    0x0005f6f4 ldr r1, [r5, 0x18]                                |         r1 = *((r5 + 0x18));
    0x0005f6f6 add.w r3, r0, r3, lsl 3                           |         r3 = r0 + (r3 << 3);
    0x0005f6fa ldr r2, [r3, 0x18]                                |         r2 = *((r3 + 0x18));
    0x0005f6fc cmp r1, r2                                        |         
    0x0005f6fe bne 0x5f6e8                                       |         
                                                                 |     }
    0x0005f700 ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
    0x0005f702 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x0005f704 blx 0x831c                                        |     r0 = fcn_0000831c ();
    0x0005f708 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005f70a beq.w 0x605aa                                     |         goto label_120;
                                                                 |     }
    0x0005f70e ldr r0, [r7, 0x20]                                |     r0 = *((r7 + 0x20));
    0x0005f710 b 0x5f6e8                                         |     goto label_1;
                                                                 | label_119:
    0x0005f712 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005f714 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005f716 cmp r3, 9                                         |     
                                                                 |     if (r3 == 9) {
    0x0005f718 beq.w 0x5fdfe                                     |         goto label_121;
                                                                 |     }
                                                                 | label_15:
    0x0005f71c ldr r6, [r7, 0x44]                                |     r6 = *((r7 + 0x44));
    0x0005f71e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0005f720 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     if (r6 != 0) {
    0x0005f722 cbz r6, 0x5f72c                                   |         
    0x0005f724 ldr r3, [r7, 0x34]                                |         r3 = *((r7 + 0x34));
    0x0005f726 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005f728 beq.w 0x5fb78                                     |             goto label_122;
                                                                 |         }
                                                                 |     }
                                                                 | label_13:
    0x0005f72c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005f72e movs r2, 0x24                                     |     r2 = 0x24;
    0x0005f730 movs r1, 0                                        |     r1 = 0;
    0x0005f732 add r0, sp, 0xd0                                  |     r0 += var_d0h;
    0x0005f734 ldr r5, [r7, 0x20]                                |     r5 = *((r7 + 0x20));
    0x0005f736 and r3, r3, 8                                     |     r3 &= 8;
    0x0005f73a str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0005f73c blx 0x8264                                        |     fcn_00008264 ();
    0x0005f740 ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
    0x0005f742 mov r2, r3                                        |     r2 = r3;
    0x0005f744 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0005f746 ldr r3, [r7, 0x30]                                |     r3 = *((r7 + 0x30));
    0x0005f748 str r3, [sp, 0xcc]                                |     var_cch = r3;
    0x0005f74a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005f74c bne 0x5f806                                       |         goto label_123;
                                                                 |     }
    0x0005f74e ldr.w r3, [pc, 0x938]                             |     r3 = *(0x00060088);
    0x0005f752 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x0005f756 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x0005f75a add r3, pc                                        |     r3 += pc;
    0x0005f75c str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch]");
    0x0005f760 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005f762 str.w sl, [sp, 0x30]                              |     __asm ("str.w sl, [var_30h]");
                                                                 |     do {
    0x0005f766 ldr r3, [r5]                                      |         r3 = *(r5);
    0x0005f768 cmp r3, r8                                        |         
                                                                 |         if (r3 <= r8) {
    0x0005f76a ble.w 0x5fe08                                     |             goto label_124;
                                                                 |         }
    0x0005f76e lsl.w sb, r8, 3                                   |         sb = r8 << 3;
    0x0005f772 add.w r4, sb, r8                                  |         r4 = sb + r8;
    0x0005f776 add.w r4, r5, r4, lsl 3                           |         r4 = r5 + (r4 << 3);
    0x0005f77a ldrb.w r3, [r4, 0x2c]                             |         r3 = *((r4 + 0x2c));
    0x0005f77e ldrd sl, r6, [r4, 0x18]                           |         __asm ("ldrd sl, r6, [r4, 0x18]");
    0x0005f782 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
                                                                 |         if (r3 < r3) {
    0x0005f784 bmi.w 0x5f89c                                     |             goto label_125;
                                                                 |         }
                                                                 | label_4:
    0x0005f788 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0005f78a beq.w 0x5f8ca                                     |             goto label_126;
                                                                 |         }
    0x0005f78e ldr r3, [r6, 0x1c]                                |         r3 = *((r6 + 0x1c));
    0x0005f790 ldrsh.w r2, [sl, 0x2a]                            |         r2 = *((sl + 0x2a));
    0x0005f794 ldr r1, [r3]                                      |         r1 = *(r3);
    0x0005f796 cmp r2, r1                                        |         
                                                                 |         if (r2 != r1) {
    0x0005f798 bne.w 0x60214                                     |             goto label_127;
                                                                 |         }
    0x0005f79c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0005f79e lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
                                                                 |         if (r1 < r3) {
    0x0005f7a0 bmi.w 0x5f8ca                                     |             goto label_126;
                                                                 |         }
    0x0005f7a4 ldr r3, [r6, 0x30]                                |         r3 = *((r6 + 0x30));
    0x0005f7a6 subs r3, 0                                        |         
    0x0005f7a8 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0005f7aa movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0005f7ac cmp.w r8, 0                                       |         
    0x0005f7b0 it ne                                             |         
                                                                 |         if (r8 == 0) {
    0x0005f7b2 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0005f7b4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005f7b6 bne.w 0x5f8d0                                     |             goto label_128;
                                                                 |         }
                                                                 | label_6:
    0x0005f7ba ldr.w sl, [fp]                                    |         sl = *(fp);
    0x0005f7be ldr.w r6, [fp, 0xf0]                              |         r6 = *(arg_f0h);
    0x0005f7c2 ldr r5, [r7, 0x20]                                |         r5 = *((r7 + 0x20));
    0x0005f7c4 ldr.w r3, [sl, 0x4c]                              |         r3 = *((sl + 0x4c));
    0x0005f7c8 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
                                                                 |         if (r3 >= r3) {
    0x0005f7ca bmi 0x5f7e4                                       |             
    0x0005f7cc add sb, r8                                        |             sb += r8;
    0x0005f7ce ldr r3, [r7, 0x44]                                |             r3 = *((r7 + 0x44));
    0x0005f7d0 add.w sb, r5, sb, lsl 3                           |             sb = r5 + (sb << 3);
    0x0005f7d4 ldr.w r2, [sb, 0x30]                              |             r2 = *((sb + 0x30));
    0x0005f7d8 ldr.w r4, [sb, 0x1c]                              |             r4 = *((sb + 0x1c));
    0x0005f7dc str r2, [sp, 0x28]                                |             var_28h = r2;
    0x0005f7de cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0005f7e0 beq.w 0x5f8f0                                     |                 goto label_129;
                                                                 |             }
                                                                 |         }
                                                                 | label_7:
    0x0005f7e4 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x0005f7e6 ldrb.w r3, [r3, 0x53]                             |         r3 = *((r3 + 0x53));
    0x0005f7ea cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005f7ec bne.w 0x5fb60                                     |             goto label_130;
                                                                 |         }
    0x0005f7f0 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0005f7f2 add.w r8, r8, 1                                   |         r8++;
    0x0005f7f6 ldrb r3, [r3]                                     |         r3 = *(r3);
    0x0005f7f8 cmp r3, 8                                         |         
                                                                 |         if (r3 >= 8) {
    0x0005f7fa bls 0x5f800                                       |             
    0x0005f7fc ldr r3, [r7, 0x30]                                |             r3 = *((r7 + 0x30));
    0x0005f7fe str r3, [sp, 0xcc]                                |             var_cch = r3;
                                                                 |         }
                                                                 | label_5:
    0x0005f800 ldr r3, [r7, 0x34]                                |         r3 = *((r7 + 0x34));
    0x0005f802 cmp r3, 0                                         |         
    0x0005f804 beq 0x5f766                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_123:
    0x0005f806 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005f808 mov r1, r7                                        |     r1 = r7;
    0x0005f80a mov r0, fp                                        |     r0 = fp;
    0x0005f80c bl 0x6f2f8                                        |     fcn_0006f2f8 (r0, r1, r2, r3, r4, r5, r6);
    0x0005f810 ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0005f812 mov r4, r0                                        |     r4 = r0;
    0x0005f814 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f816 bne.w 0x5f622                                     |         goto label_2;
                                                                 |     }
    0x0005f81a ldr.w r3, [fp, 0xd4]                              |     r3 = *(arg_d4h);
    0x0005f81e ldr.w r2, [fp, 8]                                 |     r2 = *(arg_8h);
    0x0005f822 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005f824 beq 0x5f88c                                       |         goto label_131;
                                                                 |     }
    0x0005f826 ldr r1, [r2]                                      |     r1 = *(r2);
    0x0005f828 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x0005f82a ldrlt r3, [r2, 0x6c]                              |         r3 = *((r2 + 0x6c));
                                                                 |     }
    0x0005f82c ldrb.w r1, [r1, 0x53]                             |     r1 = *((r1 + 0x53));
    0x0005f830 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x0005f832 addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x0005f836 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0005f838 bne.w 0x6106e                                     |         goto label_132;
                                                                 |     }
    0x0005f83c ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x0005f83e movs r1, 0x14                                     |     r1 = 0x14;
    0x0005f840 mla r3, r1, r3, r2                                |     __asm ("mla r3, r1, r3, r2");
    0x0005f844 b 0x5f88a                                         |     goto label_64;
                                                                 | label_115:
    0x0005f846 ldr.w r3, [sb, 0x4c]                              |     r3 = *((sb + 0x4c));
    0x0005f84a lsls r5, r3, 0x1c                                 |     r5 = r3 << 0x1c;
    0x0005f84c itt pl                                            |     
                                                                 |     if (r5 < r3) {
    0x0005f84e movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x0005f850 strbpl r3, [r0, 0x17]                             |         *(arg_0hx17) = r3;
                                                                 |     }
    0x0005f852 b 0x5f650                                         |     goto label_3;
                                                                 | label_118:
    0x0005f854 ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
    0x0005f858 movs r4, 1                                        |     r4 = 1;
    0x0005f85a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0005f85c add r3, r2                                        |     r3 += r2;
    0x0005f85e str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
                                                                 | label_11:
    0x0005f862 ldr.w r3, [fp, 0xd4]                              |     r3 = *(arg_d4h);
    0x0005f866 ldr.w r2, [fp, 8]                                 |     r2 = *(arg_8h);
    0x0005f86a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005f86c beq 0x5f88c                                       |         goto label_131;
                                                                 |     }
    0x0005f86e ldr r1, [r2]                                      |     r1 = *(r2);
    0x0005f870 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x0005f872 ldrlt r3, [r2, 0x6c]                              |         r3 = *((r2 + 0x6c));
                                                                 |     }
    0x0005f874 ldrb.w r1, [r1, 0x53]                             |     r1 = *((r1 + 0x53));
    0x0005f878 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x0005f87a addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x0005f87e cbnz r1, 0x5f892                                  |         goto label_133;
                                                                 |     }
    0x0005f880 ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x0005f882 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005f886 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 |     do {
                                                                 | label_64:
    0x0005f88a ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 | label_131:
    0x0005f88c str.w r3, [fp, 0xd4]                              |         __asm ("str.w r3, [arg_d4h]");
    0x0005f890 b 0x5f622                                         |         goto label_2;
                                                                 | label_133:
    0x0005f892 ldr.w r3, [pc, 0x7f8]                             |         r3 = *(0x0006008c);
    0x0005f896 add r3, pc                                        |         r3 += pc;
    0x0005f898 adds r3, 4                                        |         r3 += 4;
    0x0005f89a b 0x5f88a                                         |         
                                                                 |     } while (1);
                                                                 | label_125:
    0x0005f89c ldr r1, [r4, 0x30]                                |     r1 = *((r4 + 0x30));
    0x0005f89e ldr r0, [r7, 0x24]                                |     r0 = *((r7 + 0x24));
    0x0005f8a0 bl 0x30354                                        |     r0 = fcn_00030354 (r0, r1);
    0x0005f8a4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005f8a6 beq.w 0x5f788                                     |         goto label_4;
                                                                 |     }
    0x0005f8aa ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005f8ac ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0005f8ae lsls r0, r3, 0x12                                 |     r0 = r3 << 0x12;
                                                                 |     if (r0 < r3) {
    0x0005f8b0 bmi.w 0x5f788                                     |         goto label_4;
                                                                 |     }
    0x0005f8b4 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x0005f8b8 ldr r1, [r4, 0x30]                                |     r1 = *((r4 + 0x30));
    0x0005f8ba ldr r0, [r7, 0x24]                                |     r0 = *((r7 + 0x24));
    0x0005f8bc bic r3, r3, 0x28                                  |     r3 = BIT_MASK (r3, 0x28);
    0x0005f8c0 strb.w r3, [r4, 0x2c]                             |     *((r4 + 0x2c)) = r3;
    0x0005f8c4 bl 0x9f7c                                         |     fcn_00009f7c (r0, r1);
    0x0005f8c8 b 0x5f788                                         |     goto label_4;
                                                                 | label_126:
    0x0005f8ca add.w r8, r8, 1                                   |     r8++;
    0x0005f8ce b 0x5f800                                         |     goto label_5;
                                                                 | label_128:
    0x0005f8d0 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0005f8d2 lsls r2, r3, 0xd                                  |     r2 = r3 << 0xd;
                                                                 |     if (r2 >= r3) {
    0x0005f8d4 bpl.w 0x5f7ba                                     |         goto label_6;
                                                                 |     }
    0x0005f8d8 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0005f8da cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0005f8dc beq 0x5f8ea                                       |         goto label_134;
                                                                 |     }
    0x0005f8de ldrb.w r3, [r5, 0x74]                             |     r3 = *((r5 + 0x74));
    0x0005f8e2 tst.w r3, 0xa                                     |     
                                                                 |     if ((r3 & 0xa) == 0) {
    0x0005f8e6 beq.w 0x5f7ba                                     |         goto label_6;
                                                                 |     }
                                                                 | label_134:
    0x0005f8ea mov.w r8, 1                                       |     r8 = 1;
    0x0005f8ee b 0x5f800                                         |     goto label_5;
                                                                 | label_129:
    0x0005f8f0 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x0005f8f2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f8f4 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f8f8 ldr r0, [r4, 0x3c]                                |     r0 = *((r4 + 0x3c));
    0x0005f8fa ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0005f8fc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005f8fe beq.w 0x605c0                                     |         goto label_135;
                                                                 |     }
    0x0005f902 ldr r2, [r7, 0x3c]                                |     r2 = *((r7 + 0x3c));
    0x0005f904 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005f906 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f90a ldr r2, [r0, 0x10]                                |     r2 = *((r0 + 0x10));
    0x0005f90c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005f90e bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f912 ldr.w ip, [r7, 4]                                 |     ip = *((r7 + 4));
    0x0005f916 tst.w ip, 0x100                                   |     
                                                                 |     if ((ip & 0x100) != 0) {
    0x0005f91a bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
                                                                 | label_23:
    0x0005f91e ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005f920 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005f922 beq.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f926 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0005f928 tst.w r1, 1                                       |     
                                                                 |     if ((r1 & 1) != 0) {
    0x0005f92c bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f930 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005f932 beq.w 0x60f68                                     |         goto label_136;
                                                                 |     }
    0x0005f936 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0005f938 cmp r0, 1                                         |     
                                                                 |     if (r0 > 1) {
    0x0005f93a bgt.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f93e ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0005f940 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005f942 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f946 ldr.w lr, [r7, 0x30]                              |     
    0x0005f94a cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x0005f94e beq 0x5f958                                       |         goto label_137;
                                                                 |     }
    0x0005f950 ldr r0, [r4, 0x30]                                |     r0 = *((r4 + 0x30));
    0x0005f952 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005f954 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
                                                                 | label_137:
    0x0005f958 ldr r0, [r7, 0x24]                                |     r0 = *((r7 + 0x24));
    0x0005f95a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005f95c bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f960 tst.w ip, 1                                       |     
                                                                 |     if ((ip & 1) != 0) {
    0x0005f964 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
                                                                 | label_52:
    0x0005f968 lsls r0, r1, 0x12                                 |     r0 = r1 << 0x12;
                                                                 |     if (r0 < r1) {
    0x0005f96a bmi.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f96e movs r1, 0x48                                     |     r1 = 0x48;
    0x0005f970 mla r1, r1, r8, r5                                |     __asm ("mla r1, r1, r8, r5");
    0x0005f974 ldrb.w r1, [r1, 0x2c]                             |     r1 = *((r1 + 0x2c));
    0x0005f978 ands r1, r1, 0x20                                 |     r1 &= 0x20;
                                                                 |     if (r1 == r1) {
    0x0005f97c beq.w 0x61802                                     |         goto label_138;
                                                                 |     }
    0x0005f980 cmp r2, 1                                         |     
                                                                 |     if (r2 > 1) {
    0x0005f982 bgt.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f986 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0005f988 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005f98a bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f98e ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0005f990 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0005f992 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f994 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f998 tst.w ip, 1                                       |     
                                                                 |     if ((ip & 1) != 0) {
    0x0005f99c bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9a0 movs r3, 1                                        |     r3 = 1;
    0x0005f9a2 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_89:
    0x0005f9a4 ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x0005f9a6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0005f9a8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005f9aa beq 0x5fa5a                                       |         goto label_139;
                                                                 |     }
    0x0005f9ac ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x0005f9ae cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f9b0 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9b4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005f9b6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f9b8 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9bc tst.w ip, 1                                       |     
                                                                 |     if ((ip & 1) != 0) {
    0x0005f9c0 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9c4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005f9c6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f9c8 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9cc mov r3, r4                                        |     r3 = r4;
    0x0005f9ce mov r0, lr                                        |     r0 = lr;
    0x0005f9d0 b 0x5f9d4                                         |     goto label_140;
                                                                 | label_8:
    0x0005f9d2 mov r3, r2                                        |     r3 = r2;
                                                                 | label_140:
    0x0005f9d4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005f9d6 tst.w r2, 9                                       |     
                                                                 |     if ((r2 & 9) != 0) {
    0x0005f9da bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9de ldr r2, [r3, 0x34]                                |     r2 = *((r3 + 0x34));
                                                                 |     if (r2 == 0) {
    0x0005f9e0 cbz r2, 0x5f9ea                                   |         goto label_141;
                                                                 |     }
    0x0005f9e2 ldrb r1, [r3]                                     |     r1 = *(r3);
    0x0005f9e4 cmp r1, 0x86                                      |     
                                                                 |     if (r1 != 0x86) {
    0x0005f9e6 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
                                                                 | label_141:
    0x0005f9ea ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x0005f9ec ldr r1, [r1]                                      |     r1 = *(r1);
    0x0005f9ee cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x0005f9f0 ble.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9f4 ldr r3, [r3, 0x44]                                |     r3 = *((r3 + 0x44));
    0x0005f9f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005f9f8 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005f9fc cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005f9fe bne 0x5f9d2                                       |         goto label_8;
                                                                 |     }
    0x0005fa00 mov lr, r0                                        |     lr = r0;
    0x0005fa02 str r2, [sp, 0x3c]                                |     var_3ch = r2;
                                                                 |     if (r0 == 0) {
    0x0005fa04 cbz r0, 0x5fa20                                   |         goto label_142;
                                                                 |     }
    0x0005fa06 mov r2, r0                                        |     r2 = r0;
    0x0005fa08 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005fa0a ldr r1, [r2], 0x14                                |     r1 = *(r2);
                                                                 |     r2 += 0x14;
    0x0005fa0e b 0x5fa1c                                         |     goto label_143;
                                                                 | label_9:
    0x0005fa10 lsls r0, r3, 4                                    |     r0 = r3 << 4;
    0x0005fa12 ldrh r0, [r2, r0]                                 |     r0 = *((r2 + r0));
    0x0005fa14 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005fa16 beq.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005fa1a adds r3, 1                                        |     r3++;
                                                                 | label_143:
    0x0005fa1c cmp r3, r1                                        |     
                                                                 |     if (r3 < r1) {
    0x0005fa1e blt 0x5fa10                                       |         goto label_9;
                                                                 |     }
                                                                 | label_142:
    0x0005fa20 ands r1, ip, 0x2000                               |     r1 = ip & 0x2000;
                                                                 |     if (r1 != ip) {
    0x0005fa24 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005fa28 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0005fa2a cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0005fa2c ble 0x5fa5a                                       |         goto label_139;
                                                                 |     }
    0x0005fa2e ldr.w r3, [fp, 0x64]                              |     r3 = *(arg_64h);
    0x0005fa32 cmp.w r3, 0x1f4                                   |     
                                                                 |     if (r3 > 0x1f4) {
    0x0005fa36 bgt.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x0005fa3a ldr.w r3, [fp, 0x28]                              |     r3 = *(arg_28h);
    0x0005fa3e mov r0, sl                                        |     r0 = sl;
    0x0005fa40 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0005fa42 lsl.w sb, r3, 2                                   |     sb = r3 << 2;
    0x0005fa46 mov r3, r1                                        |     r3 = r1;
    0x0005fa48 mov r2, sb                                        |     r2 = sb;
    0x0005fa4a bl 0x1abdc                                        |     fcn_0001abdc (r0, r1);
    0x0005fa4e str r0, [sp, 0x3c]                                |     var_3ch = r0;
                                                                 |     if (r0 != 0) {
    0x0005fa50 cbz r0, 0x5fa5a                                   |         
    0x0005fa52 ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x0005fa54 mov r2, sb                                        |         r2 = sb;
    0x0005fa56 blx 0x8264                                        |         fcn_00008264 ();
                                                                 |     }
                                                                 | label_139:
    0x0005fa5a movs r3, 0x48                                     |     r3 = 0x48;
    0x0005fa5c movs r1, 0x15                                     |     r1 = 0x15;
    0x0005fa5e mla sb, r3, r8, r5                                |     __asm ("mla sb, r3, r8, r5");
    0x0005fa62 movs r3, 0                                        |     r3 = 0;
    0x0005fa64 mov r2, r3                                        |     r2 = r3;
    0x0005fa66 mov r0, fp                                        |     r0 = fp;
    0x0005fa68 ldr.w ip, [sb, 0x10]                              |     ip = *((sb + 0x10));
    0x0005fa6c str r3, [sp]                                      |     *(sp) = r3;
    0x0005fa6e str.w ip, [fp, 0xf0]                              |     __asm ("str.w ip, [arg_f0h]");
    0x0005fa72 bl 0x25800                                        |     fcn_00025800 (r0);
    0x0005fa76 ldr.w r1, [sb, 0xc]                               |     r1 = *((sb + 0xc));
    0x0005fa7a ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0005fa7e str.w r6, [fp, 0xf0]                              |     __asm ("str.w r6, [arg_f0h]");
    0x0005fa82 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 |     if (r1 != 0) {
    0x0005fa84 cbz r1, 0x5fa8c                                   |         
    0x0005fa86 mov r0, sl                                        |         r0 = sl;
    0x0005fa88 bl 0x159dc                                        |         fcn_000159dc (r0, r1);
                                                                 |     }
    0x0005fa8c movs r3, 0x48                                     |     r3 = 0x48;
    0x0005fa8e mla r3, r3, r8, r5                                |     __asm ("mla r3, r3, r8, r5");
    0x0005fa92 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
                                                                 |     if (r1 != 0) {
    0x0005fa94 cbz r1, 0x5fa9c                                   |         
    0x0005fa96 mov r0, sl                                        |         r0 = sl;
    0x0005fa98 bl 0x159dc                                        |         fcn_000159dc (r0, r1);
                                                                 |     }
    0x0005fa9c movs r3, 0x48                                     |     r3 = 0x48;
    0x0005fa9e mla r3, r3, r8, r5                                |     __asm ("mla r3, r3, r8, r5");
    0x0005faa2 ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
                                                                 |     if (r1 != 0) {
    0x0005faa4 cbz r1, 0x5faac                                   |         
    0x0005faa6 mov r0, sl                                        |         r0 = sl;
    0x0005faa8 bl 0x159dc                                        |         fcn_000159dc (r0, r1);
                                                                 |     }
    0x0005faac ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x0005faae str r5, [sp, 0x50]                                |     var_50h = r5;
    0x0005fab0 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005fab2 movs r3, 0x48                                     |     r3 = 0x48;
    0x0005fab4 mla r6, r3, r8, r5                                |     __asm ("mla r6, r3, r8, r5");
    0x0005fab8 movs r3, 0                                        |     r3 = 0;
    0x0005faba mov sb, r6                                        |     sb = r6;
    0x0005fabc strd r3, r3, [r6, 0xc]                            |     __asm ("strd r3, r3, [r6, 0xc]");
    0x0005fac0 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x0005fac2 str r3, [r6, 0x1c]                                |     *((r6 + 0x1c)) = r3;
    0x0005fac4 b 0x5fad8                                         |     goto label_144;
                                                                 | label_10:
    0x0005fac6 str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
                                                                 |     if (r5 != 0) {
    0x0005fac8 cbz r5, 0x5facc                                   |         
    0x0005faca str r4, [r5, 0x38]                                |         *((r5 + 0x38)) = r4;
                                                                 |     }
    0x0005facc mov r5, r4                                        |     r5 = r4;
    0x0005face str r7, [r4, 0x38]                                |     *((r4 + 0x38)) = r7;
                                                                 |     do {
    0x0005fad0 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x0005fad2 str r5, [r7, 0x34]                                |         *((r7 + 0x34)) = r5;
    0x0005fad4 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x0005fad6 str r3, [sp, 0x48]                                |         var_48h = r3;
                                                                 | label_144:
    0x0005fad8 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x0005fada cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005fadc beq.w 0x61a38                                     |             goto label_145;
                                                                 |         }
    0x0005fae0 ldr.w r3, [sb, 0x18]                              |         r3 = *((sb + 0x18));
    0x0005fae4 movs r2, 0                                        |         r2 = 0;
    0x0005fae6 ldr r4, [r7, 0x3c]                                |         r4 = *((r7 + 0x3c));
    0x0005fae8 mov r1, r7                                        |         r1 = r7;
    0x0005faea ldr r6, [r7, 0x30]                                |         r6 = *((r7 + 0x30));
    0x0005faec mov r0, sl                                        |         r0 = sl;
    0x0005faee ldr r5, [r7, 0x34]                                |         r5 = *((r7 + 0x34));
    0x0005faf0 str.w r2, [sb, 0x18]                              |         __asm ("str.w r2, [sb, 0x18]");
    0x0005faf4 strd r2, r2, [r7, 0x30]                           |         __asm ("strd r2, r2, [r7, 0x30]");
    0x0005faf8 str r2, [r7, 0x3c]                                |         *((r7 + 0x3c)) = r2;
    0x0005fafa str r3, [sp, 0x4c]                                |         var_4ch = r3;
    0x0005fafc bl 0x3103c                                        |         fcn_0003103c (r0, r1, r2);
    0x0005fb00 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0005fb02 movs r2, 0x86                                     |         r2 = 0x86;
    0x0005fb04 str r4, [r7, 0x3c]                                |         *((r7 + 0x3c)) = r4;
    0x0005fb06 mov r4, r0                                        |         r4 = r0;
    0x0005fb08 str r6, [r7, 0x30]                                |         *((r7 + 0x30)) = r6;
    0x0005fb0a strb r2, [r7]                                     |         *(r7) = r2;
    0x0005fb0c str.w r3, [sb, 0x18]                              |         __asm ("str.w r3, [sb, 0x18]");
    0x0005fb10 cmp r0, 0                                         |         
    0x0005fb12 beq 0x5fad0                                       |         
                                                                 |     } while (r0 == 0);
    0x0005fb14 ldr.w r2, [fp, 0x64]                              |     r2 = *(arg_64h);
    0x0005fb18 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005fb1a adds r2, 1                                        |     r2++;
    0x0005fb1c str.w r2, [fp, 0x64]                              |     __asm ("str.w r2, [arg_64h]");
    0x0005fb20 str r2, [r0, 0x10]                                |     *((r0 + 0x10)) = r2;
    0x0005fb22 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005fb24 beq 0x5fac6                                       |         goto label_10;
                                                                 |     }
    0x0005fb26 ldrb.w r6, [sl, 0x53]                             |     r6 = *((sl + 0x53));
    0x0005fb2a cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005fb2c bne 0x5fac6                                       |         goto label_10;
                                                                 |     }
    0x0005fb2e ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x0005fb30 mov r1, r3                                        |     r1 = r3;
    0x0005fb32 mov r0, fp                                        |     r0 = fp;
    0x0005fb34 mov r3, r8                                        |     r3 = r8;
    0x0005fb36 bl 0x9ff0                                         |     fcn_00009ff0 (r0, r1, r2, r3);
    0x0005fb3a ldr.w r2, [pc, 0x554]                             |     r2 = *(0x00060090);
    0x0005fb3e add r0, sp, 0xac                                  |     r0 += var_ach;
    0x0005fb40 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005fb42 mov r1, r4                                        |     r1 = r4;
    0x0005fb44 str r6, [sp, 0xac]                                |     var_ach = r6;
    0x0005fb46 add r2, pc                                        |     r2 += pc;
    0x0005fb48 strd r6, r6, [sp, 0xb8]                           |     __asm ("strd r6, r6, [var_b8h]");
    0x0005fb4c str r2, [sp, 0xb0]                                |     var_b0h = r2;
    0x0005fb4e ldr.w r2, [pc, 0x544]                             |     r2 = *(0x00060094);
    0x0005fb52 str r6, [sp, 0xc0]                                |     var_c0h = r6;
    0x0005fb54 str r3, [sp, 0xc4]                                |     var_c4h = r3;
    0x0005fb56 add r2, pc                                        |     r2 += pc;
    0x0005fb58 str r2, [sp, 0xb4]                                |     var_b4h = r2;
    0x0005fb5a bl 0x30ca4                                        |     fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x0005fb5e b 0x5fac6                                         |     goto label_10;
                                                                 | label_130:
    0x0005fb60 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x0005fb64 add r3, r2                                        |     r3 += r2;
                                                                 | label_102:
    0x0005fb66 movs r4, 1                                        |     r4 = 1;
    0x0005fb68 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x0005fb6c b 0x5f862                                         |     goto label_11;
                                                                 | label_116:
    0x0005fb6e movs r1, 0                                        |     r1 = 0;
    0x0005fb70 movs r0, 0xc                                      |     r0 = 0xc;
    0x0005fb72 bl 0x12abc                                        |     fcn_00012abc (r0);
    0x0005fb76 b 0x5f688                                         |     goto label_12;
                                                                 | label_122:
    0x0005fb78 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005fb7a lsls r0, r3, 0xb                                  |     r0 = r3 << 0xb;
                                                                 |     if (r0 < r3) {
    0x0005fb7c bmi.w 0x5f72c                                     |         goto label_13;
                                                                 |     }
    0x0005fb80 ldr.w r3, [fp, 8]                                 |     r3 = *(arg_8h);
    0x0005fb84 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005fb86 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005fb88 beq.w 0x609ee                                     |         goto label_146;
                                                                 |     }
                                                                 | label_28:
    0x0005fb8c ldr r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x0005fb8e ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0005fb92 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0005fb94 ldr r2, [r7, 0x24]                                |     r2 = *((r7 + 0x24));
    0x0005fb96 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0005fb98 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0005fb9a ldr r2, [r7, 0x28]                                |     r2 = *((r7 + 0x28));
    0x0005fb9c str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0005fb9e ldr r2, [r7, 0x2c]                                |     r2 = *((r7 + 0x2c));
    0x0005fba0 str r2, [sp, 0x58]                                |     var_58h = r2;
    0x0005fba2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005fba4 beq.w 0x609ca                                     |         goto label_147;
                                                                 |     }
    0x0005fba8 mov r0, r3                                        |     r0 = r3;
    0x0005fbaa movs r2, 0x4c                                     |     r2 = 0x4c;
    0x0005fbac movs r3, 0                                        |     r3 = 0;
    0x0005fbae bl 0x1abdc                                        |     fcn_0001abdc (r0, r1);
    0x0005fbb2 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0005fbb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005fbb6 beq.w 0x60ef4                                     |         goto label_148;
                                                                 |     }
                                                                 | label_27:
    0x0005fbba movs r2, 0x4c                                     |     r2 = 0x4c;
    0x0005fbbc movs r1, 0                                        |     r1 = 0;
    0x0005fbbe ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0005fbc0 blx 0x8264                                        |     fcn_00008264 ();
    0x0005fbc4 ldr.w r3, [pc, 0x4d0]                             |     r3 = *(0x00060098);
    0x0005fbc8 mov r1, r7                                        |     r1 = r7;
    0x0005fbca str.w fp, [sp, 0xac]                              |     __asm ("str.w fp, [var_ach]");
    0x0005fbce add r3, pc                                        |     r3 += pc;
    0x0005fbd0 str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x0005fbd2 ldr.w r3, [pc, 0x4c8]                             |     r3 = *(0x0006009c);
    0x0005fbd6 add r3, pc                                        |     r3 += pc;
    0x0005fbd8 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0005fbda add r3, sp, 0xac                                  |     r3 += var_ach;
    0x0005fbdc mov r0, r3                                        |     r0 = r3;
    0x0005fbde str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0005fbe0 movs r3, 0                                        |     r3 = 0;
    0x0005fbe2 strd r3, r3, [sp, 0xb8]                           |     __asm ("strd r3, r3, [var_b8h]");
    0x0005fbe6 strd r3, r3, [sp, 0xc0]                           |     __asm ("strd r3, r3, [var_c4h]");
    0x0005fbea bl 0x30ca4                                        |     fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x0005fbee ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0005fbf0 ands r2, r3, 8                                    |     r2 = r3 & 8;
                                                                 |     if (r2 == r3) {
    0x0005fbf4 beq.w 0x60b2c                                     |         goto label_149;
                                                                 |     }
                                                                 | label_35:
    0x0005fbf8 bic r3, r3, 8                                     |     r3 = BIT_MASK (r3, 8);
    0x0005fbfc movs r1, 0                                        |     r1 = 0;
    0x0005fbfe orr r3, r3, 0x100000                              |     r3 |= 0x100000;
    0x0005fc02 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0005fc04 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x0005fc06 mov r0, fp                                        |     r0 = fp;
    0x0005fc08 movs r3, 1                                        |     r3 = 1;
    0x0005fc0a strd r1, r1, [r7, 0x20]                           |     __asm ("strd r1, r1, [r7, 0x20]");
    0x0005fc0e strd r1, r1, [r7, 0x28]                           |     __asm ("strd r1, r1, [r7, 0x28]");
    0x0005fc12 bl 0x31a08                                        |     case_0x2ce04_20 (r0, r1, r2, r3);
    0x0005fc16 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x0005fc18 mov r1, r0                                        |     r1 = r0;
    0x0005fc1a movs r3, 1                                        |     r3 = 1;
    0x0005fc1c mov r0, fp                                        |     r0 = fp;
    0x0005fc1e bl 0x31a08                                        |     case_0x2ce04_20 (r0, r1, r2, r3);
    0x0005fc22 str r0, [sp, 0x4c]                                |     var_4ch = r0;
                                                                 |     if (r0 != 0) {
    0x0005fc24 cbz r0, 0x5fc34                                   |         
    0x0005fc26 ldr r1, [r7, 0x30]                                |         r1 = *((r7 + 0x30));
                                                                 |         if (r1 == 0) {
    0x0005fc28 cbz r1, 0x5fc34                                   |             goto label_50;
                                                                 |         }
    0x0005fc2a ldr r3, [r1]                                      |         r3 = *(r1);
    0x0005fc2c ldr r4, [r0]                                      |         r4 = *(r0);
    0x0005fc2e cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x0005fc30 ble.w 0x60f18                                     |             goto label_150;
                                                                 |         }
                                                                 |     }
                                                                 | label_50:
    0x0005fc34 ldr.w r3, [fp, 0x28]                              |     r3 = *(arg_28h);
    0x0005fc38 add r2, sp, 0x90                                  |     r2 += var_90h;
    0x0005fc3a ldr r1, [r7, 0x1c]                                |     r1 = *((r7 + 0x1c));
    0x0005fc3c str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0005fc3e str r3, [r6, 0x30]                                |     *((r6 + 0x30)) = r3;
    0x0005fc40 adds r3, 4                                        |     r3 += 4;
    0x0005fc42 str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x0005fc46 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005fc48 str r2, [sp, 0xe4]                                |     var_e4h = r2;
    0x0005fc4a add r2, sp, 0xd8                                  |     r2 += var_d8h;
    0x0005fc4c str r6, [sp, 0x90]                                |     var_90h = r6;
    0x0005fc4e str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0005fc50 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0005fc52 str.w fp, [sp, 0xcc]                              |     __asm ("str.w fp, [var_cch]");
    0x0005fc56 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0005fc58 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x0005fc5a ldr.w r3, [pc, 0x444]                             |     r3 = *(0x000600a0);
    0x0005fc5e add r3, pc                                        |     r3 += pc;
    0x0005fc60 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x0005fc62 ldr.w r3, [pc, 0x440]                             |     r3 = *(0x000600a4);
    0x0005fc66 add r3, pc                                        |     r3 += pc;
    0x0005fc68 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x0005fc6a movs r3, 0                                        |     r3 = 0;
    0x0005fc6c str r3, [sp, 0xd8]                                |     var_d8h = r3;
    0x0005fc6e str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x0005fc70 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0005fc72 strd r3, r3, [sp, 0xdc]                           |     __asm ("strd r3, r3, [var_e0h]");
                                                                 |     if (r1 == 0) {
    0x0005fc76 cbz r1, 0x5fca0                                   |         goto label_85;
                                                                 |     }
    0x0005fc78 ldr r4, [r1]                                      |     r4 = *(r1);
    0x0005fc7a cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x0005fc7c ble.w 0x6172e                                     |         goto label_151;
                                                                 |     }
    0x0005fc80 add.w r5, r1, 0x18                                |     r5 = r1 + 0x18;
    0x0005fc84 add.w r8, sp, 0xcc                                |     r8 += var_cch;
                                                                 |     do {
    0x0005fc88 ldr r1, [r5, -0x10]                               |         r1 = *((r5 - 0x10));
                                                                 |         if (r1 != 0) {
    0x0005fc8c cbz r1, 0x5fc96                                   |             
    0x0005fc8e mov r0, r8                                        |             r0 = r8;
    0x0005fc90 bl 0x301c4                                        |             r0 = fcn_000301c4 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x0005fc94 cbnz r0, 0x5fc9e                                  |                 goto label_152;
                                                                 |             }
                                                                 |         }
    0x0005fc96 subs r4, 1                                        |         r4--;
    0x0005fc98 add.w r5, r5, 0x10                                |         r5 += 0x10;
    0x0005fc9c bne 0x5fc88                                       |         
                                                                 |     } while (r4 != 1);
                                                                 | label_152:
    0x0005fc9e ldr r1, [sp, 0x98]                                |     r1 = var_98h;
                                                                 | label_85:
    0x0005fca0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005fca2 ldr r5, [r7, 0x30]                                |     r5 = *((r7 + 0x30));
    0x0005fca4 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005fca6 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0005fca8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0005fcaa str.w fp, [sp, 0xcc]                              |     __asm ("str.w fp, [var_cch]");
    0x0005fcae str r1, [sp, 0x98]                                |     var_98h = r1;
    0x0005fcb0 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x0005fcb2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005fcb4 str r6, [sp, 0x90]                                |     var_90h = r6;
    0x0005fcb6 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x0005fcb8 ldr r3, [pc, 0x3ec]                               |     
    0x0005fcba add r3, pc                                        |     r3 = 0xbfd66;
    0x0005fcbc str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x0005fcbe ldr r3, [pc, 0x3ec]                               |     
    0x0005fcc0 add r3, pc                                        |     r3 = 0xbfd72;
    0x0005fcc2 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x0005fcc4 movs r3, 0                                        |     r3 = 0;
    0x0005fcc6 str r3, [sp, 0xd8]                                |     var_d8h = r3;
    0x0005fcc8 str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x0005fcca strd r3, r3, [r2, 4]                              |     __asm ("strd r3, r3, [r2, 4]");
                                                                 |     if (r5 == 0) {
    0x0005fcce cbz r5, 0x5fcf4                                   |         goto label_153;
                                                                 |     }
    0x0005fcd0 ldr r4, [r5]                                      |     r4 = *(r5);
    0x0005fcd2 cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x0005fcd4 ble 0x5fcf4                                       |         goto label_153;
                                                                 |     }
    0x0005fcd6 adds r5, 0x18                                     |     r5 += 0x18;
    0x0005fcd8 add.w r8, sp, 0xcc                                |     r8 += var_cch;
                                                                 |     do {
    0x0005fcdc ldr r1, [r5, -0x10]                               |         r1 = *((r5 - 0x10));
                                                                 |         if (r1 != 0) {
    0x0005fce0 cbz r1, 0x5fcea                                   |             
    0x0005fce2 mov r0, r8                                        |             r0 = r8;
    0x0005fce4 bl 0x301c4                                        |             r0 = fcn_000301c4 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x0005fce8 cbnz r0, 0x5fcf2                                  |                 goto label_154;
                                                                 |             }
                                                                 |         }
    0x0005fcea subs r4, 1                                        |         r4--;
    0x0005fcec add.w r5, r5, 0x10                                |         r5 += 0x10;
    0x0005fcf0 bne 0x5fcdc                                       |         
                                                                 |     } while (r4 != 1);
                                                                 | label_154:
    0x0005fcf2 ldr r1, [sp, 0x98]                                |     r1 = var_98h;
                                                                 | label_153:
    0x0005fcf4 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 != 0) {
    0x0005fcf6 cbz r1, 0x5fcfa                                   |         
    0x0005fcf8 ldr r3, [r1]                                      |         r3 = *(r1);
                                                                 |     }
    0x0005fcfa ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0005fcfc mov r0, fp                                        |     r0 = fp;
    0x0005fcfe str r3, [r6, 0x4c]                                |     *((r6 + 0x4c)) = r3;
    0x0005fd00 movs r3, 0                                        |     r3 = 0;
    0x0005fd02 bl 0x31a08                                        |     case_0x2ce04_20 (r0, r1, r2, r3);
    0x0005fd06 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x0005fd08 mov r1, r0                                        |     r1 = r0;
    0x0005fd0a movs r3, 0                                        |     r3 = 0;
    0x0005fd0c mov r0, fp                                        |     r0 = fp;
    0x0005fd0e bl 0x31a08                                        |     case_0x2ce04_20 (r0, r1, r2, r3);
    0x0005fd12 ldr r3, [pc, 0x39c]                               |     
    0x0005fd14 mov r4, r6                                        |     r4 = r6;
    0x0005fd16 strd sb, sl, [sp, 0x60]                           |     __asm ("strd sb, sl, [var_60h]");
    0x0005fd1a mov r5, r0                                        |     r5 = r0;
    0x0005fd1c ldr.w r8, [sp, 0x48]                              |     r8 = var_48h;
    0x0005fd20 add r3, pc                                        |     r3 = 0xbfdd6;
    0x0005fd22 str r6, [sp, 0x40]                                |     var_40h = r6;
    0x0005fd24 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005fd26 mov r6, fp                                        |     r6 = fp;
    0x0005fd28 ldr r3, [pc, 0x388]                               |     
    0x0005fd2a ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
    0x0005fd2e ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x0005fd32 add r3, pc                                        |     r3 = 0xbfdea;
    0x0005fd34 str r7, [sp, 0x48]                                |     var_48h = r7;
    0x0005fd36 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0005fd38 b 0x5fd94                                         |     
                                                                 |     while (r2 >= r2) {
    0x0005fd3a mov r2, r5                                        |         r2 = r5;
                                                                 |         if (r5 != 0) {
    0x0005fd3c cbz r5, 0x5fd40                                   |             
    0x0005fd3e ldr r2, [r5]                                      |             r2 = *(r5);
                                                                 |         }
    0x0005fd40 mov r1, r5                                        |         r1 = r5;
    0x0005fd42 str r2, [r4, 0x50]                                |         *((r4 + 0x50)) = r2;
    0x0005fd44 mov r0, r6                                        |         r0 = r6;
    0x0005fd46 mov r2, r3                                        |         r2 = r3;
    0x0005fd48 movs r3, 0                                        |         r3 = 0;
    0x0005fd4a bl 0x31a08                                        |         r0 = case_0x2ce04_20 (r0, r1, r2, r3);
    0x0005fd4e mov r5, r0                                        |         r5 = r0;
                                                                 | label_14:
    0x0005fd50 ldr r1, [r4, 0x28]                                |         r1 = *((r4 + 0x28));
                                                                 |         if (r1 != 0) {
    0x0005fd52 cbz r1, 0x5fd6a                                   |             
    0x0005fd54 movs r3, 0                                        |             r3 = 0;
    0x0005fd56 mov r0, sl                                        |             r0 = sl;
    0x0005fd58 mov r2, r3                                        |             r2 = r3;
    0x0005fd5a bl 0x311ec                                        |             fcn_000311ec (r0, r1, r2, r3);
    0x0005fd5e mov r1, r5                                        |             r1 = r5;
    0x0005fd60 mov r2, r0                                        |             r2 = r0;
    0x0005fd62 mov r0, r6                                        |             r0 = r6;
    0x0005fd64 bl 0x1c2ac                                        |             r0 = fcn_0001c2ac (r0, r1, r2);
    0x0005fd68 mov r5, r0                                        |             r5 = r0;
                                                                 |         }
    0x0005fd6a ldr.w ip, [r6, 0x2c]                              |         ip = *((r6 + 0x2c));
    0x0005fd6e movs r2, 0                                        |         r2 = 0;
    0x0005fd70 movs r1, 0x48                                     |         r1 = 0x48;
    0x0005fd72 mov r0, r8                                        |         r0 = r8;
    0x0005fd74 add.w r3, ip, 1                                   |         r3 = ip + 1;
    0x0005fd78 add.w ip, ip, 2                                   |         
    0x0005fd7c str r3, [r4, 0x34]                                |         *((r4 + 0x34)) = r3;
    0x0005fd7e str.w ip, [r6, 0x2c]                              |         __asm ("str.w ip, [r6, 0x2c]");
    0x0005fd82 str.w ip, [r4, 0x38]                              |         __asm ("str.w ip, [r4, 0x38]");
    0x0005fd86 str r2, [sp]                                      |         *(sp) = r2;
    0x0005fd88 bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0005fd8c ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x0005fd8e cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0005fd90 beq.w 0x604cc                                     |             goto label_155;
                                                                 |         }
    0x0005fd94 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x0005fd96 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0005fd98 ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x0005fd9a lsls r2, r2, 0xb                                  |         r2 <<= 0xb;
    0x0005fd9c ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0005fd9e bpl 0x5fd3a                                       |         
                                                                 |     }
    0x0005fda0 movs r2, 0                                        |     r2 = 0;
    0x0005fda2 str r5, [sp, 0x98]                                |     var_98h = r5;
    0x0005fda4 strd r2, r2, [sb]                                 |     __asm ("strd r2, r2, [sb]");
    0x0005fda8 str.w r2, [sb, 8]                                 |     __asm ("str.w r2, [sb, 8]");
    0x0005fdac str r2, [sp, 0xa0]                                |     var_a0h = r2;
    0x0005fdae ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0005fdb0 str r6, [sp, 0xcc]                                |     var_cch = r6;
    0x0005fdb2 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x0005fdb4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0005fdb6 str r2, [sp, 0x94]                                |     var_94h = r2;
    0x0005fdb8 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0005fdba str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x0005fdbc ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0005fdbe str r2, [sp, 0xd0]                                |     var_d0h = r2;
    0x0005fdc0 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0005fdc2 str r2, [sp, 0xd4]                                |     var_d4h = r2;
    0x0005fdc4 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0005fdc6 str r2, [sp, 0xe4]                                |     var_e4h = r2;
                                                                 |     if (r3 == 0) {
    0x0005fdc8 cbz r3, 0x5fdee                                   |         goto label_156;
                                                                 |     }
    0x0005fdca ldr r7, [r3]                                      |     r7 = *(r3);
    0x0005fdcc cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x0005fdce ble 0x5fdee                                       |         goto label_156;
                                                                 |     }
    0x0005fdd0 add.w fp, r3, 0x18                                |     
    0x0005fdd4 add r5, sp, 0xcc                                  |     r5 += var_cch;
                                                                 |     do {
    0x0005fdd6 ldr r1, [fp, -0x10]                               |         r1 = var_10h;
                                                                 |         if (r1 != 0) {
    0x0005fdda cbz r1, 0x5fde4                                   |             
    0x0005fddc mov r0, r5                                        |             r0 = r5;
    0x0005fdde bl 0x301c4                                        |             r0 = fcn_000301c4 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x0005fde2 cbnz r0, 0x5fdec                                  |                 goto label_157;
                                                                 |             }
                                                                 |         }
    0x0005fde4 subs r7, 1                                        |         r7--;
    0x0005fde6 add.w fp, fp, 0x10                                |         
    0x0005fdea bne 0x5fdd6                                       |         
                                                                 |     } while (r7 != 1);
                                                                 | label_157:
    0x0005fdec ldr r5, [sp, 0x98]                                |     r5 = var_98h;
                                                                 | label_156:
    0x0005fdee mov r3, r5                                        |     r3 = r5;
                                                                 |     if (r5 != 0) {
    0x0005fdf0 cbz r5, 0x5fdf4                                   |         
    0x0005fdf2 ldr r3, [r5]                                      |         r3 = *(r5);
                                                                 |     }
    0x0005fdf4 str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x0005fdf6 movs r3, 1                                        |     r3 = 1;
    0x0005fdf8 strb.w r3, [r4, 0x60]                             |     *((r4 + 0x60)) = r3;
    0x0005fdfc b 0x5fd50                                         |     goto label_14;
                                                                 | label_121:
    0x0005fdfe mov r1, r7                                        |     r1 = r7;
    0x0005fe00 mov r0, fp                                        |     r0 = fp;
    0x0005fe02 bl 0x29530                                        |     fcn_00029530 (r0, r1, r2);
    0x0005fe06 b 0x5f71c                                         |     goto label_15;
                                                                 | label_124:
    0x0005fe08 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x0005fe0a ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch;
    0x0005fe0e ldr.w sl, [sp, 0x30]                              |     sl = var_30h;
                                                                 |     if (r1 != 0) {
    0x0005fe12 cbz r1, 0x5fe1c                                   |         
    0x0005fe14 ldrb r2, [r1]                                     |         r2 = *(r1);
    0x0005fe16 cmp r2, 0x2c                                      |         
                                                                 |         if (r2 == 0x2c) {
    0x0005fe18 beq.w 0x60a0a                                     |             goto label_158;
                                                                 |         }
                                                                 |     }
                                                                 | label_29:
    0x0005fe1c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0005fe1e ble.w 0x60244                                     |         goto label_159;
                                                                 |     }
    0x0005fe22 ldr r3, [pc, 0x294]                               |     
    0x0005fe24 movs r6, 0                                        |     r6 = 0;
    0x0005fe26 str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch]");
    0x0005fe2a mov sb, r7                                        |     sb = r7;
    0x0005fe2c add r3, pc                                        |     r3 = 0xbfeea;
    0x0005fe2e adds r3, 4                                        |     r3 += 4;
    0x0005fe30 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005fe32 ldr r3, [pc, 0x288]                               |     
    0x0005fe34 add r3, pc                                        |     r3 = 0xbfef6;
    0x0005fe36 adds r3, 4                                        |     r3 += 4;
    0x0005fe38 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0005fe3a ldr r3, [pc, 0x284]                               |     
    0x0005fe3c add r3, pc                                        |     r3 = 0xbff02;
    0x0005fe3e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0005fe40 ldr r3, [pc, 0x280]                               |     
    0x0005fe42 add r3, pc                                        |     r3 = 0xbff0a;
    0x0005fe44 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0005fe46 add.w r3, r5, 8                                   |     r3 = r5 + 8;
    0x0005fe4a mov r4, r3                                        |     r4 = r3;
    0x0005fe4c str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005fe4e b 0x5ff4c                                         |     goto label_160;
                                                                 | label_16:
    0x0005fe50 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0005fe52 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0005fe54 beq 0x5fe62                                       |         
    0x0005fe56 ldrb.w r3, [r5, 0x74]                             |         r3 = *((r5 + 0x74));
    0x0005fe5a tst.w r3, 0xa                                     |         
                                                                 |         if ((r3 & 0xa) == 0) {
    0x0005fe5e beq.w 0x5ffd0                                     |             goto label_161;
                                                                 |         }
                                                                 |     }
    0x0005fe62 ldrsb.w r3, [r5, 0x2d]                            |     r3 = *((r5 + 0x2d));
    0x0005fe66 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0005fe68 bge 0x5fe74                                       |         
    0x0005fe6a ldr r3, [r5, 0x4c]                                |         r3 = *((r5 + 0x4c));
    0x0005fe6c ldrb r3, [r3, 0x12]                               |         r3 = *((r3 + 0x12));
    0x0005fe6e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005fe70 beq.w 0x5ffe0                                     |             goto label_162;
                                                                 |         }
                                                                 |     }
    0x0005fe74 ldr.w r8, [sl, 0x6c]                              |     r8 = *((sl + 0x6c));
    0x0005fe78 movs r1, 0xd                                      |     r1 = 0xd;
    0x0005fe7a ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x0005fe7e mov r0, sl                                        |     r0 = sl;
    0x0005fe80 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x0005fe84 adds r2, 1                                        |     r2++;
    0x0005fe86 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0005fe88 str.w r2, [fp, 0x2c]                              |     __asm ("str.w r2, [arg_2ch]");
    0x0005fe8c str r2, [r5, 0x24]                                |     *((r5 + 0x24)) = r2;
    0x0005fe8e str r3, [sp]                                      |     *(sp) = r3;
    0x0005fe90 movs r3, 0                                        |     r3 = 0;
    0x0005fe92 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0005fe96 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005fe98 movs r1, 0xd                                      |     r1 = 0xd;
    0x0005fe9a ldr r2, [pc, 0x22c]                               |     
    0x0005fe9c mov r0, fp                                        |     r0 = fp;
    0x0005fe9e str r3, [r5, 0x20]                                |     *((r5 + 0x20)) = r3;
    0x0005fea0 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x0005fea2 add r2, pc                                        |     r2 = 0xbff70;
    0x0005fea4 strb.w r1, [sp, 0xac]                             |     var_ach = r1;
    0x0005fea8 movs r1, 1                                        |     r1 = 1;
    0x0005feaa str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x0005feac movs r3, 0                                        |     r3 = 0;
    0x0005feae str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0005feb0 str r3, [sp, 0xc0]                                |     var_c0h = r3;
    0x0005feb2 strd r3, r3, [sp, 0xb8]                           |     __asm ("strd r3, r3, [var_b8h]");
    0x0005feb6 mov r3, r4                                        |     r3 = r4;
    0x0005feb8 bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x0005febc ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0005febe mov r1, r7                                        |     r1 = r7;
    0x0005fec0 mov r0, fp                                        |     r0 = fp;
    0x0005fec2 bl 0x5f5e0                                        |     fcn_0005f5e0 (r0, r1, r2, r3, r4, r5, r6);
    0x0005fec6 ldrb.w r3, [r5, 0x2d]                             |     r3 = *((r5 + 0x2d));
    0x0005feca mov r0, sl                                        |     r0 = sl;
    0x0005fecc ldrh r1, [r7, 2]                                  |     r1 = *((r7 + 2));
    0x0005fece ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x0005fed0 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0005fed4 strh r1, [r2, 0x2e]                               |     *((r2 + 0x2e)) = r1;
    0x0005fed6 strb.w r3, [r5, 0x2d]                             |     *((r5 + 0x2d)) = r3;
    0x0005feda ldr r3, [sp, 0xb8]                                |     r3 = var_b8h;
    0x0005fedc ldr r1, [r5, 0x24]                                |     r1 = *((r5 + 0x24));
    0x0005fede str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x0005fee0 bl 0x2b650                                        |     fcn_0002b650 (r0, r1, r2);
    0x0005fee4 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0005fee8 cmp.w r8, 0                                       |     
    0x0005feec ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x0005fef0 ldrb.w r3, [r3, 0x53]                             |     r3 = *((r3 + 0x53));
    0x0005fef4 it lt                                             |     
                                                                 |     if (r8 >= 0) {
    0x0005fef6 addlt r8, r2, -1                                  |         r8 = r2 + -1;
                                                                 |     }
    0x0005fefa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005fefc bne.w 0x605c8                                     |         goto label_163;
                                                                 |     }
    0x0005ff00 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0005ff04 add.w r8, r8, r8, lsl 2                           |     r8 += (r8 << 2);
    0x0005ff08 add.w r3, r3, r8, lsl 2                           |     r3 += (r8 << 2);
                                                                 | label_24:
    0x0005ff0c str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0005ff0e movs r3, 0                                        |     r3 = 0;
    0x0005ff10 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x0005ff14 str.w r3, [fp, 0x1c]                              |     __asm ("str.w r3, [arg_1ch]");
                                                                 | label_18:
    0x0005ff18 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005ff1a ldrb.w r3, [r3, 0x53]                             |     r3 = *((r3 + 0x53));
    0x0005ff1e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005ff20 bne.w 0x605e0                                     |         goto label_164;
                                                                 |     }
    0x0005ff24 add r1, sp, 0x90                                  |     r1 += var_90h;
    0x0005ff26 mov r0, sb                                        |     r0 = sb;
    0x0005ff28 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x0005ff2a bl 0x13638                                        |     fcn_00013638 (r0, r1);
    0x0005ff2e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0005ff30 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x0005ff32 str.w r3, [fp, 0xf0]                              |     __asm ("str.w r3, [arg_f0h]");
    0x0005ff36 ldr.w r3, [fp, 0xd0]                              |     r3 = *(arg_d0h);
    0x0005ff3a subs r3, r3, r2                                   |     r3 -= r2;
    0x0005ff3c str.w r3, [fp, 0xd0]                              |     __asm ("str.w r3, [arg_d0h]");
                                                                 |     do {
    0x0005ff40 ldr r3, [r5]                                      |         r3 = *(r5);
    0x0005ff42 adds r6, 1                                        |         r6++;
    0x0005ff44 adds r4, 0x48                                     |         r4 += 0x48;
    0x0005ff46 cmp r3, r6                                        |         
                                                                 |         if (r3 <= r6) {
    0x0005ff48 ble.w 0x6023e                                     |             goto label_165;
                                                                 |         }
                                                                 | label_160:
    0x0005ff4c ldrd r3, r2, [r4, 0x38]                           |         __asm ("ldrd r3, r2, [r4, 0x38]");
    0x0005ff50 orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 == r2) {
    0x0005ff52 bne 0x5ff66                                       |             
    0x0005ff54 ldr r2, [r4, 8]                                   |             r2 = *((r4 + 8));
                                                                 |             if (r2 == 0) {
    0x0005ff56 cbz r2, 0x5ff66                                   |                 goto label_166;
                                                                 |             }
    0x0005ff58 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0005ff5a movs r1, 0x14                                     |             r1 = 0x14;
    0x0005ff5c mov r0, fp                                        |             r0 = fp;
    0x0005ff5e str r3, [sp]                                      |             *(sp) = r3;
    0x0005ff60 ldr r3, [sp, 0x3c]                                |             r3 = var_3ch;
    0x0005ff62 bl 0x25800                                        |             fcn_00025800 (r0);
                                                                 |         }
                                                                 | label_166:
    0x0005ff66 ldr r7, [r4, 0x14]                                |         r7 = *((r4 + 0x14));
    0x0005ff68 cmp r7, 0                                         |         
    0x0005ff6a beq 0x5ff40                                       |         
                                                                 |     } while (r7 == 0);
    0x0005ff6c add r3, sp, 0xac                                  |     r3 += var_ach;
    0x0005ff6e mov r0, sb                                        |     r0 = sb;
    0x0005ff70 mov r1, r3                                        |     r1 = r3;
    0x0005ff72 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0005ff74 movs r3, 0                                        |     r3 = 0;
    0x0005ff76 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x0005ff78 bl 0x13638                                        |     fcn_00013638 (r0, r1);
    0x0005ff7c ldr.w r3, [fp, 0xd0]                              |     r3 = *(arg_d0h);
    0x0005ff80 ldr r2, [sp, 0xac]                                |     r2 = var_ach;
    0x0005ff82 add r3, r2                                        |     r3 += r2;
    0x0005ff84 str.w r3, [fp, 0xd0]                              |     __asm ("str.w r3, [arg_d0h]");
    0x0005ff88 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005ff8a ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0005ff8c lsls r1, r3, 0x13                                 |     r1 = r3 << 0x13;
                                                                 |     if (r1 >= r3) {
    0x0005ff8e bmi 0x5ffbe                                       |         
    0x0005ff90 add.w r3, r6, r6, lsl 3                           |         r3 = r6 + (r6 << 3);
    0x0005ff94 add.w r3, r5, r3, lsl 3                           |         r3 = r5 + (r3 << 3);
    0x0005ff98 ldrsb.w r3, [r3, 0x2d]                            |         r3 = *((r3 + 0x2d));
    0x0005ff9c cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x0005ff9e bge 0x5ffa6                                       |             
    0x0005ffa0 ldr r3, [r4, 0x44]                                |             r3 = *((r4 + 0x44));
    0x0005ffa2 ldrb r3, [r3, 0x12]                               |             r3 = *((r3 + 0x12));
                                                                 |             if (r3 == 0) {
    0x0005ffa4 cbz r3, 0x5ffbe                                   |                 goto label_167;
                                                                 |             }
                                                                 |         }
    0x0005ffa6 ldrb.w r2, [r4, 0x24]                             |         r2 = *((r4 + 0x24));
    0x0005ffaa mov r1, r7                                        |         r1 = r7;
    0x0005ffac ldr r3, [r4, 0x28]                                |         r3 = *((r4 + 0x28));
    0x0005ffae mov r0, fp                                        |         r0 = fp;
    0x0005ffb0 ubfx r2, r2, 5, 1                                 |         r2 = (r2 >> 5) & ((1 << 1) - 1);
    0x0005ffb4 str r2, [sp]                                      |         *(sp) = r2;
    0x0005ffb6 ldr.w r2, [sb, 0x24]                              |         r2 = *((sb + 0x24));
    0x0005ffba bl 0x323c4                                        |         fcn_000323c4 (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_167:
    0x0005ffbe ldr.w r2, [fp, 0xf0]                              |     r2 = *(arg_f0h);
    0x0005ffc2 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0005ffc4 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0005ffc6 str.w r3, [fp, 0xf0]                              |     __asm ("str.w r3, [arg_f0h]");
    0x0005ffca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005ffcc beq.w 0x5fe50                                     |         goto label_16;
                                                                 |     }
                                                                 | label_161:
    0x0005ffd0 add.w r3, r6, r6, lsl 3                           |     r3 = r6 + (r6 << 3);
    0x0005ffd4 add.w r3, r5, r3, lsl 3                           |     r3 = r5 + (r3 << 3);
    0x0005ffd8 ldrsb.w r3, [r3, 0x2d]                            |     r3 = *((r3 + 0x2d));
    0x0005ffdc cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0005ffde bge 0x5ffee                                       |         
                                                                 | label_162:
    0x0005ffe0 ldr.w r8, [r4, 0x44]                              |         r8 = *((r4 + 0x44));
    0x0005ffe4 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x0005ffe8 cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x0005ffea bgt.w 0x601e6                                     |             goto label_168;
                                                                 |         }
                                                                 |     }
    0x0005ffee ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0005fff0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005fff2 lsls r2, r3, 7                                    |     r2 = r3 << 7;
                                                                 |     if (r2 < r3) {
    0x0005fff4 bmi 0x600cc                                       |         goto label_169;
                                                                 |     }
    0x0005fff6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0005fff8 cmp r3, r4                                        |     
    0x0005fffa mov r8, r3                                        |     r8 = r3;
                                                                 |     if (r3 <= r4) {
    0x0005fffc blo 0x60008                                       |         goto label_170;
                                                                 |     }
    0x0005fffe b 0x600cc                                         |     goto label_169;
                                                                 |     do {
                                                                 | label_17:
    0x00060000 add.w r8, r8, 0x48                                |         r8 += 0x48;
    0x00060004 cmp r8, r4                                        |         
                                                                 |         if (r8 >= r4) {
    0x00060006 bhs 0x600cc                                       |             goto label_169;
                                                                 |         }
                                                                 | label_170:
    0x00060008 ldr.w r3, [r8, 0x14]                              |         r3 = *((r8 + 0x14));
    0x0006000c cmp r3, 0                                         |         
    0x0006000e beq 0x60000                                       |         
                                                                 |     } while (r3 == 0);
    0x00060010 ldrb.w r3, [r8, 0x25]                             |     r3 = *((r8 + 0x25));
    0x00060014 lsls r3, r3, 0x1b                                 |     r3 <<= 0x1b;
                                                                 |     if (r3 < r3) {
    0x00060016 bmi 0x60000                                       |         goto label_17;
                                                                 |     }
    0x00060018 ldr.w r0, [r8, 8]                                 |     r0 = *((r8 + 8));
    0x0006001c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006001e beq 0x60000                                       |         goto label_17;
                                                                 |     }
    0x00060020 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00060024 ldr r2, [r3, 0x48]                                |     r2 = *((r3 + 0x48));
    0x00060026 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00060028 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x0006002a cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0006002c bne 0x60000                                       |         goto label_17;
                                                                 |     }
    0x0006002e ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00060030 blx 0x831c                                        |     r0 = fcn_0000831c ();
    0x00060034 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00060036 bne 0x60000                                       |         goto label_17;
                                                                 |     }
    0x00060038 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0006003c ldr r2, [r3, 0x48]                                |     r2 = *((r3 + 0x48));
    0x0006003e ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x00060042 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00060044 beq.w 0x605d2                                     |         goto label_171;
                                                                 |     }
                                                                 | label_25:
    0x00060048 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0006004a ands r1, r1, 0x1000000                            |     r1 &= 0x1000000;
                                                                 |     if (r1 != r1) {
    0x0006004e bne 0x60000                                       |         goto label_17;
                                                                 |     }
    0x00060050 ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00060054 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060056 bne.w 0x604bc                                     |         goto label_172;
                                                                 |     }
                                                                 | label_21:
    0x0006005a movs r1, 0                                        |     r1 = 0;
    0x0006005c ldr.w r3, [r8, 0x28]                              |     r3 = *((r8 + 0x28));
    0x00060060 ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x00060062 mov r0, sl                                        |     r0 = sl;
    0x00060064 str r1, [sp]                                      |     *(sp) = r1;
    0x00060066 movs r1, 0x64                                     |     r1 = 0x64;
    0x00060068 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006006c ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x00060070 ldrsh.w r3, [r3, 2]                               |     r3 = *((r3 + 2));
    0x00060074 strh r3, [r7, 2]                                  |     *((r7 + 2)) = r3;
    0x00060076 b 0x5ff18                                         |     goto label_18;
                                                                 | label_169:
    0x000600cc ldrd r8, r2, [sl, 0x6c]                           |     __asm ("ldrd r8, r2, [sl, 0x6c]");
    0x000600d0 ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x000600d4 cmp r8, r2                                        |     
    0x000600d6 add.w r3, r3, 1                                   |     r3++;
    0x000600d8 lsls r1, r0, 0xc                                  |     r1 = r0 << 0xc;
    0x000600da str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x000600de str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
                                                                 |     if (r1 >= r0) {
    0x000600e0 bge.w 0x60fd0                                     |         goto label_173;
                                                                 |     }
    0x000600e4 ldr.w lr, [sl, 0x68]                              |     
    0x000600e8 add.w r1, r8, r8, lsl 2                           |     r1 = r8 + (r8 << 2);
    0x000600ec movs r0, 0                                        |     r0 = 0;
    0x000600ee add.w ip, r8, 1                                   |     
    0x000600f2 str.w ip, [sl, 0x6c]                              |     __asm ("str.w ip, [sl, 0x6c]");
    0x000600f6 add.w r2, lr, r1, lsl 2                           |     r2 = lr + (r1 << 2);
    0x000600fa strd r3, r0, [r2, 8]                              |     __asm ("strd r3, r0, [r2, 8]");
    0x000600fe movs r3, 0x45                                     |     r3 = 0x45;
    0x00060100 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x00060102 str.w r3, [lr, r1, lsl 2]                         |     __asm ("str.w r3, [lr, r1, lsl 2]");
    0x00060106 str r0, [r2, 4]                                   |     *((r2 + 4)) = r0;
                                                                 | label_58:
    0x00060108 lsls r3, r6, 3                                    |     r3 = r6 << 3;
    0x0006010a str.w ip, [r4, 0x18]                              |     __asm ("str.w ip, [r4, 0x18]");
    0x0006010e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00060110 add r3, r6                                        |     r3 += r6;
    0x00060112 add.w r3, r5, r3, lsl 3                           |     r3 = r5 + (r3 << 3);
    0x00060116 ldrb.w r3, [r3, 0x2d]                             |     r3 = *((r3 + 0x2d));
    0x0006011a ands r3, r3, 8                                    |     r3 &= 8;
                                                                 |     if (r3 == r3) {
    0x0006011e beq.w 0x60e42                                     |         goto label_174;
                                                                 |     }
    0x00060122 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00060124 movs r2, 0xc                                      |     r2 = 0xc;
    0x00060126 movs r1, 1                                        |     r1 = 1;
    0x00060128 mov r0, fp                                        |     r0 = fp;
    0x0006012a strb.w r2, [sp, 0xac]                             |     var_ach = r2;
    0x0006012e str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x00060130 movs r3, 0                                        |     r3 = 0;
    0x00060132 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00060134 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x00060136 str r3, [sp, 0xc0]                                |     var_c0h = r3;
    0x00060138 strd r3, r3, [sp, 0xb8]                           |     __asm ("strd r3, r3, [var_b8h]");
    0x0006013c mov r3, r4                                        |     r3 = r4;
    0x0006013e bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x00060142 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00060144 mov r1, r7                                        |     r1 = r7;
    0x00060146 mov r0, fp                                        |     r0 = fp;
    0x00060148 bl 0x5f5e0                                        |     fcn_0005f5e0 (r0, r1, r2, r3, r4, r5, r6);
    0x0006014c ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0006014e ldrh r2, [r7, 2]                                  |     r2 = *((r7 + 2));
    0x00060150 strh r2, [r3, 0x2e]                               |     *((r3 + 0x2e)) = r2;
    0x00060152 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
                                                                 | label_44:
    0x00060156 ldr.w r2, [sl, 0x70]                              |     r2 = *((sl + 0x70));
    0x0006015a ldr.w ip, [r4, 0x1c]                              |     ip = *((r4 + 0x1c));
    0x0006015e cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00060160 ble.w 0x61010                                     |         goto label_175;
                                                                 |     }
    0x00060164 ldr.w r2, [sl, 0x68]                              |     r2 = *((sl + 0x68));
    0x00060168 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x0006016c adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x0006016e str.w r0, [sl, 0x6c]                              |     __asm ("str.w r0, [sl, 0x6c]");
    0x00060172 mov.w lr, 0                                       |     lr = 0;
    0x00060176 add.w r0, r2, r1, lsl 2                           |     r0 = r2 + (r1 << 2);
    0x0006017a strd ip, lr, [r0, 4]                              |     __asm ("strd ip, lr, [r0, 4]");
    0x0006017e strd lr, lr, [r0, 0xc]                            |     __asm ("strd lr, lr, [r0, 0xc]");
    0x00060182 movs r0, 0x41                                     |     r0 = 0x41;
    0x00060184 str.w r0, [r2, r1, lsl 2]                         |     __asm ("str.w r0, [r2, r1, lsl 2]");
                                                                 | label_60:
    0x00060188 cmp.w r8, 0                                       |     
    0x0006018c itt lt                                            |     
                                                                 |     if (r8 >= 0) {
    0x0006018e ldrlt r2, [sl, 0x6c]                              |         r2 = *((sl + 0x6c));
                                                                 |     }
                                                                 |     if (r8 < 0) {
    0x00060192 add.w r8, r2, -1                                  |         r8 = r2 + -1;
                                                                 |     }
    0x00060196 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x0006019a ldrb.w r2, [r2, 0x53]                             |     r2 = *((r2 + 0x53));
    0x0006019e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000601a0 bne.w 0x60b26                                     |         goto label_176;
                                                                 |     }
    0x000601a4 ldr.w r2, [sl, 0x68]                              |     r2 = *((sl + 0x68));
    0x000601a8 add.w r1, r8, r8, lsl 2                           |     r1 = r8 + (r8 << 2);
    0x000601ac add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
                                                                 | label_34:
    0x000601b0 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x000601b2 movs r2, 0                                        |     r2 = 0;
    0x000601b4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000601b6 strb.w r2, [fp, 0x13]                             |     *(arg_13h) = r2;
    0x000601ba str.w r2, [fp, 0x1c]                              |     __asm ("str.w r2, [arg_1ch]");
    0x000601be add r3, r6                                        |     r3 += r6;
    0x000601c0 add.w r3, r5, r3, lsl 3                           |     r3 = r5 + (r3 << 3);
    0x000601c4 ldrb.w r3, [r3, 0x2d]                             |     r3 = *((r3 + 0x2d));
    0x000601c8 and r3, r3, 0x88                                  |     r3 &= 0x88;
    0x000601cc cmp r3, 0x80                                      |     
                                                                 |     if (r3 != 0x80) {
    0x000601ce bne.w 0x5ff18                                     |         goto label_18;
                                                                 |     }
    0x000601d2 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x000601d4 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x000601d6 ldrh r1, [r7, 2]                                  |     r1 = *((r7 + 2));
    0x000601d8 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x000601da ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x000601dc str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x000601de ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000601e0 strh r1, [r3, 0x10]                               |     *((r3 + 0x10)) = r1;
    0x000601e2 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000601e4 b 0x5ff18                                         |     goto label_18;
                                                                 | label_168:
    0x000601e6 movs r1, 0                                        |     r1 = 0;
    0x000601e8 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x000601ec mov r0, sl                                        |     r0 = sl;
    0x000601ee str r1, [sp]                                      |     *(sp) = r1;
    0x000601f0 movs r1, 0xc                                      |     r1 = 0xc;
    0x000601f2 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000601f6 ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000601f8 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x000601fc cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000601fe beq 0x6020c                                       |         
    0x00060200 movs r1, 0                                        |         r1 = 0;
    0x00060202 mov r0, sl                                        |         r0 = sl;
    0x00060204 str r1, [sp]                                      |         *(sp) = r1;
    0x00060206 movs r1, 0x64                                     |         r1 = 0x64;
    0x00060208 bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 |     }
    0x0006020c ldrh.w r3, [r8, 0x10]                             |     r3 = *((r8 + 0x10));
    0x00060210 strh r3, [r7, 2]                                  |     *((r7 + 2)) = r3;
    0x00060212 b 0x5ff18                                         |     goto label_18;
                                                                 | label_127:
    0x00060214 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00060218 mov r0, fp                                        |     r0 = fp;
    0x0006021a str r1, [sp]                                      |     *(sp) = r1;
    0x0006021c ldr.w r1, [pc, 0xb7c]                             |     
    0x00060220 ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch;
    0x00060224 add r1, pc                                        |     r1 = 0xc0fc4;
    0x00060226 bl 0x25778                                        |     fcn_00025778 (r0);
                                                                 | label_22:
    0x0006022a ldrb.w r2, [sb, 0x53]                             |     r2 = *((sb + 0x53));
    0x0006022e movs r4, 1                                        |     r4 = 1;
    0x00060230 ldr.w r3, [fp, 0x24]                              |     r3 = *(arg_24h);
    0x00060234 add r3, r2                                        |     r3 += r2;
    0x00060236 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x0006023a b.w 0x5f862                                       |     goto label_11;
                                                                 | label_165:
    0x0006023e mov r7, sb                                        |     r7 = sb;
    0x00060240 ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch;
                                                                 | label_159:
    0x00060244 ldr r2, [r7, 0x1c]                                |     r2 = *((r7 + 0x1c));
    0x00060246 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060248 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x0006024a ldr r2, [r7, 0x24]                                |     r2 = *((r7 + 0x24));
    0x0006024c str r2, [sp, 0x40]                                |     var_40h = r2;
    0x0006024e ldr r2, [r7, 0x28]                                |     r2 = *((r7 + 0x28));
    0x00060250 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00060252 ldr r2, [r7, 0x2c]                                |     r2 = *((r7 + 0x2c));
    0x00060254 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00060256 and r2, r3, 1                                     |     r2 = r3 & 1;
    0x0006025a and r3, r3, 9                                     |     r3 &= 9;
    0x0006025e str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00060260 cmp r3, 1                                         |     
    0x00060262 strb.w r2, [sp, 0x84]                             |     var_84h = r2;
                                                                 |     if (r3 == 1) {
    0x00060266 beq.w 0x60df4                                     |         goto label_177;
                                                                 |     }
                                                                 | label_41:
    0x0006026a ldr r1, [sp, 0xcc]                                |     r1 = var_cch;
    0x0006026c mov.w r0, -1                                      |     r0 = -1;
                                                                 |     if (r1 != 0) {
    0x00060270 cbz r1, 0x602a8                                   |         
    0x00060272 ldr r4, [sp, 0x38]                                |         r4 = var_38h;
    0x00060274 movs r2, 0                                        |         r2 = 0;
    0x00060276 mov r0, fp                                        |         r0 = fp;
    0x00060278 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0006027a bl 0x2dc24                                        |         fcn_0002dc24 (r0, r1, r2, r3);
    0x0006027e ldr r3, [sp, 0xcc]                                |         r3 = var_cch;
    0x00060280 ldr.w r2, [fp, 0x28]                              |         r2 = *(arg_28h);
    0x00060284 ldr r1, [r4]                                      |         r1 = *(r4);
    0x00060286 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00060288 str r0, [sp, 4]                                   |         var_4h = r0;
    0x0006028a mov r0, sl                                        |         r0 = sl;
    0x0006028c str r2, [sp, 0xd4]                                |         var_d4h = r2;
    0x0006028e adds r3, 1                                        |         r3++;
    0x00060290 add r3, r1                                        |         r3 += r1;
    0x00060292 adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x00060294 str.w r1, [fp, 0x28]                              |         __asm ("str.w r1, [arg_28h]");
    0x00060298 mvn r1, 8                                         |         r1 = ~8;
    0x0006029c str r1, [sp, 8]                                   |         var_8h = r1;
    0x0006029e movs r1, 0                                        |         r1 = 0;
    0x000602a0 str r1, [sp]                                      |         *(sp) = r1;
    0x000602a2 movs r1, 0x70                                     |         r1 = 0x70;
    0x000602a4 bl 0x2b5f4                                        |         fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
    0x000602a8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000602aa str r0, [sp, 0xe0]                                |     var_e0h = r0;
    0x000602ac ldrb r3, [r3]                                     |     r3 = *(r3);
    0x000602ae cmp r3, 0xc                                       |     
                                                                 |     if (r3 == 0xc) {
    0x000602b0 beq.w 0x60d82                                     |         goto label_178;
                                                                 |     }
                                                                 | label_40:
    0x000602b4 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x000602b8 mov r1, r7                                        |     r1 = r7;
    0x000602ba mov r0, fp                                        |     r0 = fp;
    0x000602bc mov r2, r3                                        |     r2 = r3;
    0x000602be str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000602c0 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000602c2 subs r2, 1                                        |     r2--;
    0x000602c4 str.w r2, [fp, 0x38]                              |     __asm ("str.w r2, [arg_38h]");
    0x000602c8 lsls r4, r3, 0x11                                 |     r4 = r3 << 0x11;
    0x000602ca itt pl                                            |     
                                                                 |     if (r4 < r3) {
    0x000602cc movpl r3, 0x140                                   |         r3 = 0x140;
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x000602d0 strh r3, [r7, 2]                                  |         *((r7 + 2)) = r3;
                                                                 |     }
    0x000602d2 bl 0x67420                                        |     fcn_00067420 (r0, r1, r2, r3);
    0x000602d6 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
                                                                 |     if (r3 == 0) {
    0x000602d8 cbnz r3, 0x602e2                                  |         
    0x000602da ldr r2, [sp, 0xe0]                                |         r2 = var_e0h;
    0x000602dc cmp r2, 0                                         |         
                                                                 |         if (r2 >= 0) {
    0x000602de bge.w 0x60d56                                     |             goto label_179;
                                                                 |         }
                                                                 |     }
                                                                 | label_39:
    0x000602e2 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000602e4 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x000602e6 bmi.w 0x60ad4                                     |         goto label_180;
                                                                 |     }
                                                                 | label_33:
    0x000602ea ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000602ec ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000602ee strb.w r3, [sp, 0x85]                             |     var_85h = r3;
    0x000602f2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000602f4 orrs.w r8, r3, r2                                 |     r8 = r3 | r2;
                                                                 |     if (r8 != r3) {
    0x000602f8 bne.w 0x60618                                     |         goto label_181;
                                                                 |     }
    0x000602fc ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000602fe ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00060300 and r3, r3, 0x4000                                |     r3 &= 0x4000;
    0x00060304 orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x00060308 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0006030a ldr r3, [r7, 0x44]                                |     r3 = *((r7 + 0x44));
    0x0006030c str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0006030e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060310 beq.w 0x60814                                     |         goto label_74;
                                                                 |     }
    0x00060314 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00060316 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00060318 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0006031a ldr r4, [r3]                                      |     r4 = *(r3);
    0x0006031c ldr.w r3, [fp, 8]                                 |     r3 = *(arg_8h);
    0x00060320 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00060322 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060324 beq.w 0x60fba                                     |         goto label_182;
                                                                 |     }
                                                                 | label_57:
    0x00060328 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x0006032a mov r3, r4                                        |     r3 = r4;
    0x0006032c movs r4, 0                                        |     r4 = 0;
    0x0006032e movs r1, 0x70                                     |     r1 = 0x70;
    0x00060330 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00060332 ldr r2, [r6, 0x30]                                |     r2 = *((r6 + 0x30));
    0x00060334 str r4, [sp]                                      |     *(sp) = r4;
    0x00060336 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006033a ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x0006033c movs r1, 0x64                                     |     r1 = 0x64;
    0x0006033e ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00060340 str r4, [sp]                                      |     *(sp) = r4;
    0x00060342 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00060344 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060348 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x0006034a movs r1, 0x64                                     |     r1 = 0x64;
    0x0006034c ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0006034e str r4, [sp]                                      |     *(sp) = r4;
    0x00060350 adds r2, r3, 2                                    |     r2 = r3 + 2;
    0x00060352 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060356 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00060358 movs r1, 0x64                                     |     r1 = 0x64;
    0x0006035a ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0006035c str r4, [sp]                                      |     *(sp) = r4;
    0x0006035e adds r2, r3, 3                                    |     r2 = r3 + 3;
    0x00060360 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060364 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
                                                                 |     if (r3 != 0) {
    0x00060366 cbz r3, 0x6038c                                   |         
    0x00060368 mov r2, r4                                        |         r2 = r4;
    0x0006036a ldr.w r4, [fp, 0x2c]                              |         r4 = *(arg_2ch);
    0x0006036e ldr.w ip, [r3]                                    |         ip = *(r3);
    0x00060372 movs r1, 0x48                                     |         r1 = 0x48;
    0x00060374 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x00060376 adds r3, r4, 1                                    |         r3 = r4 + 1;
    0x00060378 add r4, ip                                        |         r4 += ip;
    0x0006037a add ip, r3                                        |         
    0x0006037c str r3, [r6, 0x44]                                |         *((r6 + 0x44)) = r3;
    0x0006037e str.w r4, [fp, 0x2c]                              |         __asm ("str.w r4, [arg_2ch]");
    0x00060382 add.w r4, ip, -1                                  |         r4 = ip + -1;
    0x00060386 str r4, [sp]                                      |         *(sp) = r4;
    0x00060388 bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 |     }
    0x0006038c ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x00060390 movs r4, 0                                        |     r4 = 0;
    0x00060392 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00060394 movs r2, 1                                        |     r2 = 1;
    0x00060396 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00060398 movs r1, 0x45                                     |     r1 = 0x45;
    0x0006039a adds r3, 1                                        |     r3++;
    0x0006039c str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x000603a0 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x000603a2 str r4, [sp]                                      |     *(sp) = r4;
    0x000603a4 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000603a8 ldrb r3, [r6, 0x14]                               |     r3 = *((r6 + 0x14));
    0x000603aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000603ac bne.w 0x61466                                     |         goto label_183;
                                                                 |     }
    0x000603b0 ldr.w r3, [pc, 0x9ec]                             |     r3 = *(0x00060da0);
    0x000603b4 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000603b6 strd sb, sl, [sp, 0x30]                           |     __asm ("strd sb, sl, [var_34h]");
    0x000603ba add r3, pc                                        |     r3 += pc;
    0x000603bc ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x000603be add.w r2, r3, 0xac0                               |     r2 = r3 + 0xac0;
    0x000603c2 addw r1, r3, 0xacc                                |     __asm ("addw r1, r3, aav.0x000000ff");
    0x000603c6 strd r5, r8, [sp, 0x28]                           |     __asm ("strd r5, r8, [var_2ch]");
    0x000603ca mov r4, r0                                        |     r4 = r0;
    0x000603cc str r7, [sp, 0x1c]                                |     var_1ch = r7;
    0x000603ce mov sl, r0                                        |     sl = r0;
    0x000603d0 mov sb, r3                                        |     sb = r3;
    0x000603d2 mov r7, r2                                        |     r7 = r2;
    0x000603d4 mov r8, r1                                        |     r8 = r1;
    0x000603d6 b 0x60468                                         |     
                                                                 |     while (r2 < r2) {
    0x000603d8 ldrb r2, [r4, 0x11]                               |         r2 = *((r4 + 0x11));
    0x000603da cmp r2, 0x5a                                      |         
                                                                 |         if (r2 == 0x5a) {
    0x000603dc beq 0x60470                                       |             goto label_184;
                                                                 |         }
    0x000603de ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x000603e0 mov r0, fp                                        |         r0 = fp;
    0x000603e2 ldr r1, [r3, 0x14]                                |         r1 = *((r3 + 0x14));
    0x000603e4 movs r3, 0                                        |         r3 = 0;
    0x000603e6 mov r2, r3                                        |         r2 = r3;
    0x000603e8 bl 0x2dc24                                        |         fcn_0002dc24 (r0, r1, r2, r3);
    0x000603ec ldrd r2, r3, [fp, 0x28]                           |         __asm ("ldrd r2, r3, [arg_28h]");
    0x000603f0 mov r5, r0                                        |         r5 = r0;
    0x000603f2 adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x000603f4 str.w r1, [fp, 0x28]                              |         __asm ("str.w r1, [arg_28h]");
    0x000603f8 adds r1, r3, 1                                    |         r1 = r3 + 1;
    0x000603fa adds r3, 3                                        |         r3 += 3;
    0x000603fc str r2, [r4, 0x3c]                                |         *((r4 + 0x3c)) = r2;
    0x000603fe str r1, [r4, 0x40]                                |         *((r4 + 0x40)) = r1;
    0x00060400 str.w r3, [fp, 0x2c]                              |         __asm ("str.w r3, [arg_2ch]");
    0x00060404 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00060406 beq.w 0x60f80                                     |             goto label_185;
                                                                 |         }
    0x0006040a ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x0006040c movs r1, 0x70                                     |         r1 = 0x70;
    0x0006040e ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00060410 ldrb r3, [r3, 1]                                  |         r3 = *((r3 + 1));
    0x00060412 cmp r3, 0x69                                      |         
    0x00060414 itt eq                                            |         
                                                                 |         if (r3 != 0x69) {
    0x00060416 ldreq r3, [r0, 0x10]                              |             r3 = *((r0 + 0x10));
                                                                 |         }
                                                                 |         if (r3 != 0x69) {
    0x00060418 moveq r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0006041a mov r0, r6                                        |         r0 = r6;
    0x0006041c it eq                                             |         
                                                                 |         if (r3 != 0x69) {
    0x0006041e strbeq r2, [r3]                                   |             *(r3) = r2;
                                                                 |         }
    0x00060420 mov.w r3, 0                                       |         r3 = 0;
    0x00060424 it eq                                             |         
                                                                 |         if (r3 != 0x69) {
    0x00060426 ldreq r2, [r4, 0x3c]                              |             r2 = *((r4 + 0x3c));
                                                                 |         }
    0x00060428 str r3, [sp]                                      |         *(sp) = r3;
    0x0006042a movs r3, 2                                        |         r3 = 2;
    0x0006042c bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060430 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00060432 ldrb.w r2, [r3, 0x53]                             |         r2 = *((r3 + 0x53));
    0x00060436 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00060438 bne.w 0x6107a                                     |             goto label_186;
                                                                 |         }
                                                                 | label_53:
    0x0006043c ldr r3, [r6, 0x6c]                                |         r3 = *((r6 + 0x6c));
    0x0006043e ldr r2, [r6, 0x68]                                |         r2 = *((r6 + 0x68));
    0x00060440 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00060444 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00060446 subs r3, 0x14                                     |         r3 -= 0x14;
    0x00060448 add r3, r2                                        |         r3 += r2;
    0x0006044a movs r2, 0xf7                                     |         r2 = 0xf7;
    0x0006044c str r5, [r3, 0x10]                                |         *((r3 + 0x10)) = r5;
    0x0006044e strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
                                                                 | label_54:
    0x00060450 ldr r3, [r4, 0x40]                                |         r3 = *((r4 + 0x40));
    0x00060452 movs r2, 0                                        |         r2 = 0;
    0x00060454 movs r1, 0x45                                     |         r1 = 0x45;
    0x00060456 mov r0, r6                                        |         r0 = r6;
    0x00060458 str r2, [sp]                                      |         *(sp) = r2;
    0x0006045a adds r3, 1                                        |         r3++;
    0x0006045c bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 | label_19:
    0x00060460 ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x00060462 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00060464 beq.w 0x6080a                                     |             goto label_187;
                                                                 |         }
    0x00060468 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x0006046a ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0006046c lsls r2, r2, 0x13                                 |         r2 <<= 0x13;
    0x0006046e bmi 0x603d8                                       |         
                                                                 |     }
                                                                 | label_184:
    0x00060470 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00060472 cmp r3, r8                                        |     
    0x00060474 it ne                                             |     
                                                                 |     if (r3 != r8) {
    0x00060476 cmpne r3, r7                                      |         __asm ("cmpne r3, r7");
                                                                 |     }
    0x00060478 ite eq                                            |     
                                                                 |     if (r3 != r8) {
    0x0006047a moveq r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x0006047c movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x0006047e beq.w 0x605f0                                     |         goto label_188;
                                                                 |     }
    0x00060482 addw r2, sb, 0xad8                                |     __asm ("addw r2, sb, aav.0x000000ff");
    0x00060486 add.w r0, sb, 0xae0                               |     r0 = sb + 0xae0;
    0x0006048a cmp r3, r0                                        |     
    0x0006048c it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x0006048e cmpne r3, r2                                      |         __asm ("cmpne r3, r2");
                                                                 |         goto label_189;
                                                                 |     }
                                                                 |     if (r3 != r0) {
                                                                 | label_189:
    0x00060490 bne 0x60460                                       |         goto label_19;
                                                                 |     }
    0x00060492 ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x00060496 ldr.w r3, [sl, 0x30]                              |     r3 = *((sl + 0x30));
    0x00060498 adds r0, 0x30                                     |     r0 += 0x30;
    0x0006049a adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x0006049c str.w r0, [fp, 0x28]                              |     __asm ("str.w r0, [arg_28h]");
    0x000604a0 mov r0, r6                                        |     r0 = r6;
    0x000604a2 str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x000604a4 str r1, [sp]                                      |     *(sp) = r1;
    0x000604a6 movs r1, 0x64                                     |     r1 = 0x64;
    0x000604a8 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000604ac b 0x60460                                         |     goto label_19;
                                                                 | label_117:
    0x000604ae ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x000604b2 mov r1, r4                                        |     r1 = r4;
    0x000604b4 bl 0x18c5c                                        |     fcn_00018c5c (r0, r1);
    0x000604b8 b.w 0x5f6a2                                       |     goto label_20;
                                                                 | label_172:
    0x000604bc ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x000604c0 mov r0, sl                                        |     r0 = sl;
    0x000604c2 str r1, [sp]                                      |     *(sp) = r1;
    0x000604c4 movs r1, 0xc                                      |     r1 = 0xc;
    0x000604c6 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000604ca b 0x6005a                                         |     goto label_21;
                                                                 | label_155:
    0x000604cc ldrd sb, sl, [sp, 0x60]                           |     __asm ("ldrd sb, sl, [var_60h]");
    0x000604d0 mov fp, r6                                        |     
    0x000604d2 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x000604d4 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000604d6 beq.w 0x60f3a                                     |         goto label_190;
                                                                 |     }
                                                                 | label_51:
    0x000604da ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000604dc movs r4, 0                                        |     r4 = 0;
    0x000604de mov r1, r5                                        |     r1 = r5;
    0x000604e0 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000604e2 mov r0, fp                                        |     r0 = fp;
    0x000604e4 strd r4, r4, [sp, 0xc]                            |     __asm ("strd r4, r4, [var_ch]");
    0x000604e8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000604ea ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000604ec str r3, [sp, 4]                                   |     var_4h = r3;
    0x000604ee ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000604f0 str r3, [sp]                                      |     *(sp) = r3;
    0x000604f2 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000604f4 bl 0x2acc4                                        |     fcn_0002acc4 (r0, r1, r2, r3, r4, r5, r6);
    0x000604f8 mov r1, r4                                        |     r1 = r4;
    0x000604fa mov r5, r0                                        |     r5 = r0;
    0x000604fc mov r3, r4                                        |     r3 = r4;
    0x000604fe mov r2, r4                                        |     r2 = r4;
    0x00060500 mov r0, fp                                        |     r0 = fp;
    0x00060502 bl 0x25c84                                        |     r0 = fcn_00025c84 (r0, r1, r2, r3);
    0x00060506 mov r1, r0                                        |     r1 = r0;
    0x00060508 str r0, [r7, 0x20]                                |     *((r7 + 0x20)) = r0;
    0x0006050a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006050c beq.w 0x60a7e                                     |         goto label_191;
                                                                 |     }
    0x00060510 str r5, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r5;
    0x00060512 mov r0, fp                                        |     r0 = fp;
    0x00060514 bl 0x9e38                                         |     fcn_00009e38 (r0, r1);
    0x00060518 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0006051a movs r2, 0x40                                     |     r2 = 0x40;
    0x0006051c mov r1, r5                                        |     r1 = r5;
    0x0006051e mov r0, fp                                        |     r0 = fp;
    0x00060520 orr r3, r3, 0x40                                  |     r3 |= 0x40;
    0x00060524 str r3, [r5, 4]                                   |     *((r5 + 4)) = r3;
    0x00060526 bl 0x5f538                                        |     fcn_0005f538 (r0, r1, r2);
    0x0006052a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0006052c mov r6, r0                                        |     r6 = r0;
    0x0006052e and r2, r3, 8                                     |     r2 = r3 & 8;
    0x00060532 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00060534 orrs r3, r2                                       |     r3 |= r2;
    0x00060536 str r3, [r5, 4]                                   |     *((r5 + 4)) = r3;
    0x00060538 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006053a beq.w 0x60e2e                                     |         goto label_192;
                                                                 |     }
    0x0006053e ldr.w r8, [sp, 0x28]                              |     r8 = var_28h;
    0x00060542 mov r1, r0                                        |     r1 = r0;
    0x00060544 movs r2, 0x4c                                     |     r2 = 0x4c;
    0x00060546 mov r0, r8                                        |     r0 = r8;
    0x00060548 blx 0x7dcc                                        |     fcn_00007dcc ();
    0x0006054c ldr.w r3, [r8, 0x24]                              |     r3 = *((r8 + 0x24));
    0x00060550 mov r1, r5                                        |     r1 = r5;
    0x00060552 orr r3, r3, 0x4000                                |     r3 |= 0x4000;
    0x00060556 str.w r3, [r8, 0x24]                              |     __asm ("str.w r3, [r8, 0x24]");
    0x0006055a ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0006055c str.w r8, [r3, 0x18]                              |     __asm ("str.w r8, [r3, 0x18]");
    0x00060560 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00060562 str r4, [sp, 0xac]                                |     var_ach = r4;
    0x00060564 mov r0, r3                                        |     r0 = r3;
    0x00060566 strd r4, r4, [r3, 4]                              |     __asm ("strd r4, r4, [r3, 4]");
    0x0006056a strd r4, r4, [r3, 0xc]                            |     __asm ("strd r4, r4, [r3, 0xc]");
    0x0006056e strd r4, r4, [r3, 0x14]                           |     __asm ("strd r4, r4, [r3, 0x14]");
    0x00060572 ldr.w r3, [pc, 0x830]                             |     r3 = *(0x00060da4);
    0x00060576 add r3, pc                                        |     r3 += pc;
    0x00060578 str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x0006057a ldr.w r3, [pc, 0x82c]                             |     r3 = *(0x00060da8);
    0x0006057e add r3, pc                                        |     r3 += pc;
    0x00060580 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x00060582 ldr.w r3, [pc, 0x828]                             |     r3 = *(0x00060dac);
    0x00060586 add r3, pc                                        |     r3 += pc;
    0x00060588 str r3, [sp, 0xb8]                                |     var_b8h = r3;
    0x0006058a bl 0x30ca4                                        |     fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x0006058e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00060590 ldrb.w r3, [r3, 0x53]                             |     r3 = *((r3 + 0x53));
    0x00060594 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060596 bne.w 0x60aa6                                     |         goto label_193;
                                                                 |     }
    0x0006059a ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0006059c mov r1, r6                                        |     r1 = r6;
    0x0006059e bl 0x159dc                                        |     fcn_000159dc (r0, r1);
    0x000605a2 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000605a4 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000605a6 b.w 0x5f72c                                       |     goto label_13;
                                                                 | label_120:
    0x000605aa ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x000605ac cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000605ae beq.w 0x60d50                                     |         goto label_194;
                                                                 |     }
                                                                 | label_38:
    0x000605b2 ldr.w r1, [pc, 0x7fc]                             |     
    0x000605b6 mov r0, fp                                        |     r0 = fp;
    0x000605b8 add r1, pc                                        |     r1 = 0xc136e;
    0x000605ba bl 0x25778                                        |     fcn_00025778 (r0);
    0x000605be b 0x6022a                                         |     goto label_22;
                                                                 | label_135:
    0x000605c0 ldr.w ip, [r7, 4]                                 |     ip = *((r7 + 4));
    0x000605c4 b.w 0x5f91e                                       |     goto label_23;
                                                                 | label_163:
    0x000605c8 ldr.w r3, [pc, 0x7e8]                             |     
    0x000605cc add r3, pc                                        |     r3 = 0xc1384;
    0x000605ce adds r3, 4                                        |     r3 += 4;
    0x000605d0 b 0x5ff0c                                         |     goto label_24;
                                                                 | label_171:
    0x000605d2 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x000605d4 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x000605d6 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x000605d8 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x000605da beq.w 0x60048                                     |         goto label_25;
                                                                 |     }
    0x000605de b 0x60000                                         |     goto label_17;
                                                                 | label_164:
    0x000605e0 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x000605e4 movs r4, 1                                        |     r4 = 1;
    0x000605e6 add r2, r3                                        |     r2 += r3;
    0x000605e8 str.w r2, [fp, 0x24]                              |     __asm ("str.w r2, [arg_24h]");
    0x000605ec b.w 0x5f862                                       |     goto label_11;
                                                                 | label_188:
    0x000605f0 ldrd r2, r1, [fp, 0x28]                           |     __asm ("ldrd r2, r1, [arg_28h]");
    0x000605f4 ldr.w r3, [sl, 0x30]                              |     r3 = *((sl + 0x30));
    0x000605f8 adds r0, r1, 1                                    |     r0 = r1 + 1;
    0x000605fa adds r1, 2                                        |     r1 += 2;
    0x000605fc str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x000605fe adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x00060600 str.w r0, [fp, 0x28]                              |     __asm ("str.w r0, [arg_28h]");
    0x00060604 mov r0, r6                                        |     r0 = r6;
    0x00060606 str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x00060608 str.w r1, [fp, 0x2c]                              |     __asm ("str.w r1, [arg_2ch]");
    0x0006060c movs r1, 0                                        |     r1 = 0;
    0x0006060e str r1, [sp]                                      |     *(sp) = r1;
    0x00060610 movs r1, 0x64                                     |     r1 = 0x64;
    0x00060612 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060616 b 0x60460                                         |     goto label_19;
                                                                 | label_181:
    0x00060618 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0006061a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006061c beq.w 0x60f0e                                     |         goto label_195;
                                                                 |     }
    0x00060620 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x00060622 ldr r2, [r3], 8                                   |     r2 = *(r3);
                                                                 |     r3 += 8;
    0x00060626 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00060628 ble 0x60636                                       |         goto label_196;
                                                                 |     }
    0x0006062a movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x0006062c subs r2, 1                                        |         r2--;
    0x0006062e strh r1, [r3, 0xe]                                |         *((r3 + 0xe)) = r1;
    0x00060630 add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x00060634 bne 0x6062c                                       |         
                                                                 |     } while (r2 != 1);
                                                                 | label_196:
    0x00060636 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00060638 ldr r0, [r3], 8                                   |     r0 = *(r3);
                                                                 |     r3 += 8;
    0x0006063c cmp r0, 0                                         |     
    0x0006063e itt gt                                            |     
                                                                 |     if (r0 <= 0) {
    0x00060640 movgt r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if (r0 <= 0) {
    0x00060642 movgt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r0 <= 0) {
    0x00060644 ble 0x60650                                       |         goto label_197;
                                                                 |     }
                                                                 |     do {
    0x00060646 subs r2, 1                                        |         r2--;
    0x00060648 strh r1, [r3, 0xe]                                |         *((r3 + 0xe)) = r1;
    0x0006064a add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x0006064e bne 0x60646                                       |         
                                                                 |     } while (r2 != 1);
                                                                 | label_197:
    0x00060650 ldrsh.w r3, [r7, 2]                               |     r3 = *((r7 + 2));
    0x00060654 ldr r1, [sp, 0xcc]                                |     r1 = var_cch;
    0x00060656 cmp r3, 0x42                                      |     
    0x00060658 itt gt                                            |     
                                                                 |     if (r3 <= 0x42) {
    0x0006065a movgt r3, 0x42                                    |         r3 = 0x42;
                                                                 |     }
                                                                 |     if (r3 > 0x42) {
    0x0006065c strhgt r3, [r7, 2]                                |         __asm ("strhgt r3, [r7, 2]");
                                                                 |     }
    0x0006065e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00060660 beq.w 0x61050                                     |         goto label_198;
                                                                 |     }
    0x00060664 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00060666 cmp r3, r0                                        |     
    0x00060668 itt ne                                            |     
                                                                 |     if (r3 == r0) {
    0x0006066a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 == r0) {
    0x0006066c strne r3, [sp, 0x24]                              |         var_24h = r3;
                                                                 |     }
                                                                 |     if (r3 == r0) {
    0x0006066e beq.w 0x610b2                                     |         goto label_199;
                                                                 |     }
                                                                 | label_49:
    0x00060672 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00060676 mov r0, sb                                        |     r0 = sb;
    0x00060678 movs r2, 0x34                                     |     r2 = 0x34;
    0x0006067a str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0006067c subs r3, 1                                        |     r3--;
    0x0006067e str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00060680 str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
    0x00060684 movs r3, 0                                        |     r3 = 0;
    0x00060686 bl 0x1abdc                                        |     fcn_0001abdc (r0, r1);
    0x0006068a str r0, [sp, 0x1c]                                |     var_1ch = r0;
                                                                 |     if (r0 != 0) {
    0x0006068c cbz r0, 0x606c4                                   |         
    0x0006068e movs r2, 0x34                                     |         r2 = 0x34;
    0x00060690 movs r1, 0                                        |         r1 = 0;
    0x00060692 blx 0x8264                                        |         fcn_00008264 ();
    0x00060696 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x0006069a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0006069c beq.w 0x60fae                                     |             goto label_200;
                                                                 |         }
    0x000606a0 movs r2, 0xc                                      |         r2 = 0xc;
    0x000606a2 movs r3, 0                                        |         r3 = 0;
    0x000606a4 bl 0x1abdc                                        |         r0 = fcn_0001abdc (r0, r1);
                                                                 | label_56:
    0x000606a8 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000606aa beq.w 0x6163a                                     |             goto label_201;
                                                                 |         }
    0x000606ae ldr.w r2, [fp, 0x108]                             |         r2 = *(arg_108h);
    0x000606b2 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x000606b4 str r2, [r0]                                      |         *(r0) = r2;
    0x000606b6 ldr.w r2, [pc, 0x700]                             |         r2 = *(0x00060db8);
    0x000606ba str.w r0, [fp, 0x108]                             |         __asm ("str.w r0, [arg_108h]");
    0x000606be str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x000606c0 add r2, pc                                        |         r2 += pc;
    0x000606c2 str r2, [r0, 8]                                   |         *((r0 + 8)) = r2;
                                                                 |     }
                                                                 | label_76:
    0x000606c4 ldrb.w r4, [sb, 0x53]                             |     r4 = *((sb + 0x53));
    0x000606c8 str r4, [sp, 0x34]                                |     var_34h = r4;
    0x000606ca cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x000606cc bne.w 0x60d2e                                     |         goto label_202;
                                                                 |     }
    0x000606d0 ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x000606d4 add r0, sp, 0xac                                  |     r0 += var_ach;
    0x000606d6 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000606d8 mov r6, r0                                        |     r6 = r0;
    0x000606da ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x000606dc adds r3, 1                                        |     r3++;
    0x000606de str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x000606e0 str r2, [r1, 0x30]                                |     *((r1 + 0x30)) = r2;
    0x000606e2 mov r2, r1                                        |     r2 = r1;
    0x000606e4 str r1, [sp, 0xb4]                                |     var_b4h = r1;
    0x000606e6 str r4, [sp, 0xb8]                                |     var_b8h = r4;
    0x000606e8 strd fp, r5, [sp, 0xac]                           |     __asm ("strd fp, r5, [var_ach]");
    0x000606ec strd r4, r4, [sp, 0xbc]                           |     __asm ("strd r4, r4, [var_c0h]");
    0x000606f0 strd r4, r4, [sp, 0xc4]                           |     __asm ("strd r4, r4, [var_c4h]");
    0x000606f4 str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x000606f6 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x000606f8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000606fa beq.w 0x610e4                                     |         goto label_203;
                                                                 |     }
    0x000606fe ldr r3, [r1]                                      |     r3 = *(r1);
    0x00060700 str r1, [r2, 0x18]                                |     *((r2 + 0x18)) = r1;
    0x00060702 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00060704 str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
    0x00060706 bl 0x307e4                                        |     fcn_000307e4 (r0, r1, r2);
    0x0006070a ldr r1, [sp, 0xcc]                                |     r1 = var_cch;
    0x0006070c mov r0, r6                                        |     r0 = r6;
    0x0006070e bl 0x307e4                                        |     fcn_000307e4 (r0, r1, r2);
    0x00060712 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 != 0) {
    0x00060714 cbz r3, 0x60768                                   |         
    0x00060716 ldr.w r3, [pc, 0x6a4]                             |         r3 = *(0x00060dbc);
    0x0006071a ldr r1, [r7, 0x2c]                                |         r1 = *((r7 + 0x2c));
    0x0006071c str r4, [sp, 0x98]                                |         var_98h = r4;
    0x0006071e add r3, pc                                        |         r3 += pc;
    0x00060720 str.w fp, [sp, 0x90]                              |         __asm ("str.w fp, [var_90h]");
    0x00060724 str r3, [sp, 0x94]                                |         var_94h = r3;
    0x00060726 add r3, sp, 0x90                                  |         r3 += var_90h;
    0x00060728 str r7, [sp, 0xa8]                                |         var_a8h = r7;
    0x0006072a strd r4, r4, [sp, 0x9c]                           |         __asm ("strd r4, r4, [var_a0h]");
    0x0006072e str r4, [sp, 0xa4]                                |         var_a4h = r4;
    0x00060730 str r3, [sp, 0x30]                                |         var_30h = r3;
                                                                 |         if (r1 != 0) {
    0x00060732 cbz r1, 0x6073a                                   |             
    0x00060734 mov r0, r3                                        |             r0 = r3;
    0x00060736 bl 0x301c4                                        |             fcn_000301c4 (r0, r1);
                                                                 |         }
    0x0006073a ldr r3, [r7, 0x24]                                |         r3 = *((r7 + 0x24));
    0x0006073c str r3, [sp, 0x40]                                |         var_40h = r3;
                                                                 | label_69:
    0x0006073e ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x00060740 ldr r0, [sp, 0x30]                                |         r0 = var_30h;
    0x00060742 ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x00060744 str r3, [sp, 0xa8]                                |         var_a8h = r3;
    0x00060746 ldr.w r3, [pc, 0x678]                             |         r3 = *(0x00060dc0);
    0x0006074a add r3, pc                                        |         r3 += pc;
    0x0006074c str r3, [sp, 0x94]                                |         var_94h = r3;
    0x0006074e ldr.w r3, [pc, 0x674]                             |         r3 = *(0x00060dc4);
    0x00060752 add r3, pc                                        |         r3 += pc;
    0x00060754 str r3, [sp, 0x98]                                |         var_98h = r3;
    0x00060756 ldr.w r3, [pc, 0x670]                             |         r3 = *(0x00060dc8);
    0x0006075a add r3, pc                                        |         r3 += pc;
    0x0006075c str r3, [sp, 0x9c]                                |         var_9ch = r3;
    0x0006075e movs r3, 0                                        |         r3 = 0;
    0x00060760 str r3, [sp, 0xa0]                                |         var_a0h = r3;
    0x00060762 str r3, [sp, 0x90]                                |         var_90h = r3;
    0x00060764 bl 0x301c4                                        |         fcn_000301c4 (r0, r1);
                                                                 |     }
                                                                 | label_68:
    0x00060768 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0006076a mov.w r8, 0                                       |     r8 = 0;
    0x0006076e ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x00060770 ldr r2, [r1, 0x20]                                |     r2 = *((r1 + 0x20));
    0x00060772 str r2, [r1, 0x24]                                |     *((r1 + 0x24)) = r2;
    0x00060774 ldr r2, [r1, 0x2c]                                |     r2 = *((r1 + 0x2c));
    0x00060776 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060778 beq.w 0x6110e                                     |         goto label_204;
                                                                 |     }
                                                                 | label_70:
    0x0006077c cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0006077e ble.w 0x60b6e                                     |         goto label_205;
                                                                 |     }
                                                                 | label_87:
    0x00060782 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00060784 ldr r2, [r3, 0x28]                                |     r2 = *((r3 + 0x28));
                                                                 | label_86:
    0x00060786 ldr.w r1, [pc, 0x644]                             |     r1 = *(0x00060dcc);
    0x0006078a movs r6, 0                                        |     r6 = 0;
    0x0006078c ldr r3, [sp, 0xc4]                                |     r3 = var_c4h;
    0x0006078e mov r0, r2                                        |     r0 = r2;
    0x00060790 strd r5, r8, [sp, 0x60]                           |     __asm ("strd r5, r8, [var_60h]");
    0x00060794 mov r8, r6                                        |     r8 = r6;
    0x00060796 add r1, pc                                        |     r1 += pc;
    0x00060798 str r7, [sp, 0x68]                                |     var_68h = r7;
    0x0006079a str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0006079c mov r7, r6                                        |     r7 = r6;
    0x0006079e ldr.w r1, [pc, 0x630]                             |     r1 = *(0x00060dd0);
    0x000607a2 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x000607a4 ldr r6, [sp, 0x5c]                                |     r6 = var_5ch;
    0x000607a6 add r1, pc                                        |     r1 += pc;
    0x000607a8 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x000607aa ldr.w r1, [pc, 0x628]                             |     r1 = *(0x00060dd4);
    0x000607ae add r1, pc                                        |     r1 += pc;
    0x000607b0 str r1, [sp, 0x54]                                |     var_54h = r1;
    0x000607b2 mov r1, r3                                        |     r1 = r3;
    0x000607b4 b 0x607ce                                         |     
                                                                 |     while (r3 >= r1) {
                                                                 | label_26:
    0x000607b6 ldr r0, [r5, 0x2c]                                |         r0 = *((r5 + 0x2c));
    0x000607b8 adds r7, 1                                        |         r7++;
    0x000607ba ldr r1, [sp, 0xc4]                                |         r1 = var_c4h;
    0x000607bc add.w r8, r8, 0x14                                |         r8 += 0x14;
    0x000607c0 cmp r0, r7                                        |         
    0x000607c2 bic r1, r1, 0x20000                               |         r1 = BIT_MASK (r1, 0x20000);
    0x000607c6 str r1, [sp, 0xc4]                                |         var_c4h = r1;
                                                                 |         if (r0 <= r7) {
    0x000607c8 ble.w 0x60b66                                     |             goto label_206;
                                                                 |         }
    0x000607cc ldr r0, [r5, 0x28]                                |         r0 = *((r5 + 0x28));
    0x000607ce ldr.w r4, [r0, r8]                                |         r4 = *((r0 + r8));
    0x000607d2 orr r1, r1, 0x20000                               |         r1 |= 0x20000;
    0x000607d6 str r1, [sp, 0xc4]                                |         var_c4h = r1;
    0x000607d8 mov r0, r6                                        |         r0 = r6;
    0x000607da ldr r1, [r4, 0x14]                                |         r1 = *((r4 + 0x14));
    0x000607dc bl 0x307e4                                        |         fcn_000307e4 (r0, r1, r2);
    0x000607e0 ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x000607e2 lsls r3, r1, 7                                    |         r3 = r1 << 7;
    0x000607e4 bpl 0x607b6                                       |         
                                                                 |     }
    0x000607e6 ldr r1, [r4, 0x2c]                                |     r1 = *((r4 + 0x2c));
    0x000607e8 movs r0, 0                                        |     r0 = 0;
    0x000607ea ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000607ec ldr r1, [r1, 0x28]                                |     r1 = *((r1 + 0x28));
    0x000607ee str r3, [sp, 0x94]                                |     var_94h = r3;
    0x000607f0 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000607f2 str r6, [sp, 0xa8]                                |     var_a8h = r6;
    0x000607f4 str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x000607f6 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x000607f8 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000607fa str r0, [sp, 0x90]                                |     var_90h = r0;
    0x000607fc str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x000607fe cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00060800 beq 0x607b6                                       |         goto label_26;
                                                                 |     }
    0x00060802 add r0, sp, 0x90                                  |     r0 += var_90h;
    0x00060804 bl 0x301c4                                        |     fcn_000301c4 (r0, r1);
    0x00060808 b 0x607b6                                         |     goto label_26;
                                                                 | label_187:
    0x0006080a ldrd r5, r8, [sp, 0x28]                           |     __asm ("ldrd r5, r8, [var_2ch]");
    0x0006080e ldrd sb, sl, [sp, 0x30]                           |     __asm ("ldrd sb, sl, [var_34h]");
    0x00060812 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
                                                                 | label_74:
    0x00060814 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00060816 mov r1, r5                                        |     r1 = r5;
    0x00060818 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0006081a mov r0, fp                                        |     r0 = fp;
    0x0006081c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0006081e ldrsh.w r3, [r7, 2]                               |     r3 = *((r7 + 2));
    0x00060822 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00060824 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x00060826 str r3, [sp]                                      |     *(sp) = r3;
    0x00060828 ldr r3, [sp, 0xcc]                                |     r3 = var_cch;
    0x0006082a bl 0x6b788                                        |     r0 = fcn_0006b788 (r0, r1, r2, r3, r4, r5, r6);
    0x0006082e mov r4, r0                                        |     r4 = r0;
    0x00060830 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00060832 beq.w 0x6022a                                     |         goto label_22;
                                                                 |     }
    0x00060836 ldrsh.w r3, [r0, 0x32]                            |     r3 = *((r0 + 0x32));
    0x0006083a ldrsh.w r2, [r7, 2]                               |     r2 = *((r7 + 2));
    0x0006083e cmp r2, r3                                        |     
    0x00060840 it gt                                             |     
                                                                 |     if (r2 > r3) {
    0x00060842 strhgt r3, [r7, 2]                                |         __asm ("strhgt r3, [r7, 2]");
                                                                 |     }
    0x00060844 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
                                                                 |     if (r3 != 0) {
    0x00060846 cbz r3, 0x60852                                   |         
    0x00060848 ldrb.w r3, [r0, 0x2f]                             |         r3 = *((r0 + 0x2f));
                                                                 |         if (r3 == 0) {
    0x0006084c cbz r3, 0x60852                                   |             goto label_207;
                                                                 |         }
    0x0006084e strb.w r3, [sp, 0x85]                             |         var_85h = r3;
                                                                 |     }
                                                                 | label_207:
    0x00060852 ldr r2, [sp, 0xcc]                                |     r2 = var_cch;
    0x00060854 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00060856 beq.w 0x60d40                                     |         goto label_208;
                                                                 |     }
    0x0006085a ldrb.w r3, [r4, 0x30]                             |     r3 = *((r4 + 0x30));
    0x0006085e ldrsb.w r1, [r4, 0x2d]                            |     r1 = *((r4 + 0x2d));
    0x00060862 lsls r5, r3, 0x1d                                 |     r5 = r3 << 0x1d;
    0x00060864 str r1, [sp, 0xd0]                                |     var_d0h = r1;
    0x00060866 ittet mi                                          |     
                                                                 |     if (r5 >= r3) {
    0x00060868 movmi r0, 0x58                                    |         r0 = 0x58;
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0006086a ldrbmi r3, [r4, 0x2c]                             |         r3 = *((r4 + 0x2c));
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0006086e ldrmi r3, [r4, 0x1c]                              |         r3 = *((r4 + 0x1c));
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x00060870 add.w r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x00060874 itt mi                                            |     
                                                                 |     if (r5 < r3) {
    0x00060876 mlami r3, r0, r3, r4                              |         __asm ("mlami r3, r0, r3, r4");
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x0006087a ldr.w r3, [r3, 0x300]                             |         r3 = *((r3 + 0x300));
                                                                 |     }
    0x0006087e str r3, [sp, 0xe8]                                |     var_e8h = r3;
    0x00060880 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00060882 cmp r3, r1                                        |     
    0x00060884 itt eq                                            |     
                                                                 |     if (r3 != r1) {
    0x00060886 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != r1) {
    0x00060888 streq r3, [sp, 0xcc]                              |         var_cch = r3;
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x0006088a beq.w 0x60d40                                     |         goto label_208;
                                                                 |     }
                                                                 | label_37:
    0x0006088e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00060890 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060892 beq.w 0x60fe6                                     |         goto label_209;
                                                                 |     }
    0x00060896 ldr.w r5, [fp, 0x38]                              |     r5 = *(arg_38h);
    0x0006089a mov r2, r4                                        |     r2 = r4;
    0x0006089c ldr.w r6, [fp, 0x2c]                              |     r6 = *(arg_2ch);
    0x000608a0 mov r1, r7                                        |     r1 = r7;
    0x000608a2 mov r0, fp                                        |     r0 = fp;
    0x000608a4 subs r4, r5, 3                                    |     r4 = r5 - 3;
    0x000608a6 subs r3, r5, 1                                    |     r3 = r5 - 1;
    0x000608a8 adds r6, 1                                        |     r6++;
    0x000608aa str.w r4, [fp, 0x38]                              |     __asm ("str.w r4, [arg_38h]");
    0x000608ae str.w r6, [fp, 0x2c]                              |     __asm ("str.w r6, [arg_2ch]");
    0x000608b2 str r3, [sp]                                      |     *(sp) = r3;
    0x000608b4 mov r3, r6                                        |     r3 = r6;
    0x000608b6 bl 0x69e30                                        |     fcn_00069e30 (r0, r1, r2, r3);
    0x000608ba movs r2, 0                                        |     r2 = 0;
    0x000608bc mov r3, r4                                        |     r3 = r4;
    0x000608be str r2, [sp]                                      |     *(sp) = r2;
    0x000608c0 movs r1, 0xb                                      |     r1 = 0xb;
    0x000608c2 mov r0, sl                                        |     r0 = sl;
    0x000608c4 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000608c8 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x000608cc subs r3, r5, 2                                    |     r3 = r5 - 2;
    0x000608ce str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000608d0 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000608d4 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000608d6 bmi.w 0x610a8                                     |         goto label_210;
                                                                 |     }
    0x000608da ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000608dc lsls r3, r5, 2                                    |     r3 = r5 << 2;
    0x000608de ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x000608e2 rsbs r3, r3, 0                                    |     r3 -= ;
    0x000608e4 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_67:
    0x000608e6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000608e8 mov.w r2, -1                                      |     r2 = -1;
    0x000608ec ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x000608ee mov r1, r7                                        |     r1 = r7;
    0x000608f0 mov r0, fp                                        |     r0 = fp;
    0x000608f2 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x000608f4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000608f6 add r3, sp, 0x84                                  |     r3 += var_84h;
    0x000608f8 str r3, [sp]                                      |     *(sp) = r3;
    0x000608fa movs r3, 0                                        |     r3 = 0;
    0x000608fc str r3, [sp, 0xe8]                                |     var_e8h = r3;
    0x000608fe add r3, sp, 0xcc                                  |     r3 += var_cch;
    0x00060900 str r5, [sp, 8]                                   |     var_8h = r5;
    0x00060902 bl 0x69308                                        |     fcn_00069308 (r0, r1, r2, r3, r4, r5, r6);
    0x00060906 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x0006090a mvns r2, r5                                       |     r2 = ~r5;
    0x0006090c ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00060910 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00060912 bmi.w 0x610a0                                     |         goto label_211;
                                                                 |     }
    0x00060916 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00060918 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x0006091c str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_66:
    0x00060920 movs r3, 0                                        |     r3 = 0;
    0x00060922 mov r2, r6                                        |     r2 = r6;
    0x00060924 movs r1, 0x41                                     |     r1 = 0x41;
    0x00060926 str r3, [sp]                                      |     *(sp) = r3;
    0x00060928 mov r0, sl                                        |     r0 = sl;
    0x0006092a bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006092e ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00060932 mvns r2, r4                                       |     r2 = ~r4;
    0x00060934 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00060938 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x0006093a bmi.w 0x61048                                     |         goto label_212;
                                                                 |     }
    0x0006093e ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00060940 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x00060944 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_59:
    0x00060948 ldrb.w r3, [sp, 0x85]                             |     r3 = var_85h;
    0x0006094c cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x0006094e beq.w 0x6102e                                     |         goto label_213;
                                                                 |     }
                                                                 | label_62:
    0x00060952 ldr r3, [sp, 0xcc]                                |     r3 = var_cch;
                                                                 |     if (r3 != 0) {
    0x00060954 cbz r3, 0x60984                                   |         
    0x00060956 ldr r3, [sp, 0xd0]                                |         r3 = var_d0h;
    0x00060958 cmp r3, 0                                         |         
                                                                 |         if (r3 <= 0) {
    0x0006095a ble.w 0x60eec                                     |             goto label_214;
                                                                 |         }
    0x0006095e ldr.w r3, [pc, 0x478]                             |         r3 = *(0x00060dd8);
    0x00060962 add r3, pc                                        |         r3 += pc;
                                                                 | label_46:
    0x00060964 ldr.w r2, [pc, 0x474]                             |         
    0x00060968 movs r1, 0                                        |         r1 = 0;
    0x0006096a mov r0, fp                                        |         r0 = fp;
    0x0006096c add r2, pc                                        |         r2 = 0xc174c;
    0x0006096e bl 0x2e274                                        |         fcn_0002e274 (r0, r1);
    0x00060972 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00060974 mov r1, r7                                        |         r1 = r7;
    0x00060976 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x00060978 mov r0, fp                                        |         r0 = fp;
    0x0006097a ldr r3, [r3]                                      |         r3 = *(r3);
    0x0006097c str r2, [sp]                                      |         *(sp) = r2;
    0x0006097e add r2, sp, 0xcc                                  |         r2 += var_cch;
    0x00060980 bl 0x34080                                        |         fcn_00034080 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x00060984 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00060988 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0006098c cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x0006098e bmi.w 0x60f02                                     |         goto label_215;
                                                                 |     }
    0x00060992 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00060994 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x00060998 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x0006099a lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0006099c rsbs r3, r3, 0                                    |     r3 -= ;
    0x0006099e str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_48:
    0x000609a0 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x000609a4 ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
    0x000609a8 cmp r2, 0                                         |     
    0x000609aa ite le                                            |     
                                                                 |     if (r2 > 0) {
    0x000609ac movle r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x000609ae movgt r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 | label_63:
    0x000609b0 add r3, r2                                        |     r3 += r2;
    0x000609b2 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x000609b6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000609ba beq.w 0x5f862                                     |         goto label_11;
                                                                 |     }
    0x000609be mov r1, r8                                        |     r1 = r8;
    0x000609c0 mov r0, sb                                        |     r0 = sb;
    0x000609c2 bl 0x18c5c                                        |     fcn_00018c5c (r0, r1);
    0x000609c6 b.w 0x5f862                                       |     goto label_11;
                                                                 | label_147:
    0x000609ca movs r0, 0x4c                                     |     r0 = 0x4c;
    0x000609cc movs r1, 0                                        |     r1 = 0;
    0x000609ce bl 0x12abc                                        |     fcn_00012abc (r0);
    0x000609d2 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x000609d4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000609d6 bne.w 0x5fbba                                     |         goto label_27;
                                                                 |     }
                                                                 | label_32:
    0x000609da ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
                                                                 | label_31:
    0x000609de ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
    0x000609e2 movs r4, 1                                        |     r4 = 1;
    0x000609e4 add r3, r2                                        |     r3 += r2;
    0x000609e6 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x000609ea b.w 0x5f862                                       |     goto label_11;
                                                                 | label_146:
    0x000609ee ldr.w r3, [fp, 0x74]                              |     r3 = *(arg_74h);
    0x000609f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000609f4 beq.w 0x60f9c                                     |         goto label_216;
                                                                 |     }
                                                                 | label_55:
    0x000609f8 mov r0, fp                                        |     r0 = fp;
    0x000609fa bl 0x2ae64                                        |     fcn_0002ae64 (r0, r1);
    0x000609fe ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060a00 ldr r6, [r7, 0x44]                                |     r6 = *((r7 + 0x44));
    0x00060a02 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00060a04 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00060a06 b.w 0x5fb8c                                       |     goto label_28;
                                                                 | label_158:
    0x00060a0a ldr.w r6, [sb, 0x4c]                              |     r6 = *((sb + 0x4c));
    0x00060a0e ands r6, r6, 0x8000                               |     r6 &= fcn.00008000;
                                                                 |     if (r6 != r6) {
    0x00060a12 bne.w 0x5fe1c                                     |         goto label_29;
                                                                 |     }
    0x00060a16 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00060a1a ldr r4, [pc, 0x3c4]                               |     
    0x00060a1c ldr.w r8, [pc, 0x3c4]                             |     r8 = *(0x00060de4);
    0x00060a20 adds r3, 0x53                                     |     r3 += 0x53;
    0x00060a22 str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00060a24 add r4, pc                                        |     r4 = 0xc180a;
    0x00060a26 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x00060a28 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00060a2a mov r5, r4                                        |     r5 = r4;
    0x00060a2c add r8, pc                                        |     r8 += pc;
    0x00060a2e mov r4, r3                                        |     r4 = r3;
    0x00060a30 str.w fp, [sp, 0x90]                              |     __asm ("str.w fp, [var_90h]");
    0x00060a34 b 0x60a40                                         |     
                                                                 |     while (r2 == 0) {
                                                                 | label_30:
    0x00060a36 ldr r2, [sp, 0x9c]                                |         r2 = var_9ch;
    0x00060a38 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00060a3a beq.w 0x60f60                                     |             goto label_217;
                                                                 |         }
    0x00060a3e ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
    0x00060a40 mov r0, r4                                        |         r0 = r4;
    0x00060a42 strd r6, r6, [sp, 0x98]                           |         __asm ("strd r6, r6, [var_98h]");
    0x00060a46 strd r6, r6, [sp, 0xa0]                           |         __asm ("strd r6, r6, [var_a0h]");
    0x00060a4a bl 0x30a44                                        |         fcn_00030a44 (r0, r1, r2);
    0x00060a4e ldr r2, [sp, 0x98]                                |         r2 = var_98h;
    0x00060a50 cmp r2, 0                                         |         
    0x00060a52 beq 0x60a36                                       |         
                                                                 |     }
    0x00060a54 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x00060a56 add r0, sp, 0xac                                  |     r0 += var_ach;
    0x00060a58 str r6, [sp, 0xb8]                                |     var_b8h = r6;
    0x00060a5a strd fp, r5, [sp, 0xac]                           |     __asm ("strd fp, r5, [var_ach]");
    0x00060a5e str.w r8, [sp, 0xb4]                              |     __asm ("str.w r8, [var_b4h]");
    0x00060a62 str r4, [sp, 0xc4]                                |     var_c4h = r4;
    0x00060a64 strd r6, r6, [sp, 0xbc]                           |     __asm ("strd r6, r6, [var_c0h]");
                                                                 |     if (r1 != 0) {
    0x00060a68 cbz r1, 0x60a6e                                   |         
    0x00060a6a bl 0x301c4                                        |         fcn_000301c4 (r0, r1);
                                                                 |     }
    0x00060a6e ldr r1, [sp, 0xa4]                                |     r1 = var_a4h;
    0x00060a70 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00060a72 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00060a74 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00060a76 beq 0x60a36                                       |         goto label_30;
                                                                 |     }
    0x00060a78 bl 0x159dc                                        |     fcn_000159dc (r0, r1);
    0x00060a7c b 0x60a36                                         |     goto label_30;
                                                                 | label_191:
    0x00060a7e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00060a80 beq.w 0x60ede                                     |         goto label_218;
                                                                 |     }
    0x00060a84 ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x00060a86 mov r1, r5                                        |     r1 = r5;
    0x00060a88 movs r2, 1                                        |     r2 = 1;
    0x00060a8a mov r0, r4                                        |     r0 = r4;
    0x00060a8c bl 0x18b24                                        |     fcn_00018b24 (r0, r1, r2);
    0x00060a90 ldrb.w r3, [r4, 0x53]                             |     r3 = *((r4 + 0x53));
    0x00060a94 mov r0, r4                                        |     r0 = r4;
                                                                 |     if (r3 == 0) {
    0x00060a96 cbnz r3, 0x60aa8                                  |         
                                                                 | label_45:
    0x00060a98 ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x00060a9a bl 0x159dc                                        |         fcn_000159dc (r0, r1);
    0x00060a9e ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x00060aa0 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00060aa2 b.w 0x5f72c                                       |         goto label_13;
                                                                 | label_193:
    0x00060aa6 str r6, [sp, 0x28]                                |         var_28h = r6;
                                                                 |     }
                                                                 | label_42:
    0x00060aa8 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060aaa ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00060aac bl 0x159dc                                        |     fcn_000159dc (r0, r1);
                                                                 | label_43:
    0x00060ab0 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x00060ab4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00060ab6 bne 0x609de                                       |         goto label_31;
                                                                 |     }
    0x00060ab8 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00060abc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060abe beq 0x609de                                       |         goto label_31;
                                                                 |     }
    0x00060ac0 ldr.w r3, [r3, 0xf4]                              |     r3 = *((r3 + 0xf4));
    0x00060ac4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060ac6 beq 0x609de                                       |         goto label_31;
                                                                 |     }
                                                                 | label_47:
    0x00060ac8 ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x00060aca movs r1, 7                                        |     r1 = 7;
    0x00060acc str r1, [r3, 0xc]                                 |     *((r3 + 0xc)) = r1;
    0x00060ace adds r2, 1                                        |     r2++;
    0x00060ad0 str r2, [r3, 0x24]                                |     *((r3 + 0x24)) = r2;
    0x00060ad2 b 0x609da                                         |     goto label_32;
                                                                 | label_180:
    0x00060ad4 ldr.w r4, [fp, 0x28]                              |     r4 = *(arg_28h);
    0x00060ad8 movs r3, 0                                        |     r3 = 0;
    0x00060ada ldr r1, [r7, 0x1c]                                |     r1 = *((r7 + 0x1c));
    0x00060adc mov r0, fp                                        |     r0 = fp;
    0x00060ade adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00060ae0 str r4, [sp, 0x88]                                |     var_88h = r4;
    0x00060ae2 str.w r2, [fp, 0x28]                              |     __asm ("str.w r2, [arg_28h]");
    0x00060ae6 mov r2, r3                                        |     r2 = r3;
    0x00060ae8 bl 0x2dc24                                        |     fcn_0002dc24 (r0, r1, r2, r3);
    0x00060aec movs r3, 0                                        |     r3 = 0;
    0x00060aee mvn r1, 8                                         |     r1 = ~8;
    0x00060af2 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00060af4 mov r2, r4                                        |     r2 = r4;
    0x00060af6 str r3, [sp]                                      |     *(sp) = r3;
    0x00060af8 mov r0, sl                                        |     r0 = sl;
    0x00060afa str r1, [sp, 8]                                   |     var_8h = r1;
    0x00060afc movs r1, 0x70                                     |     r1 = 0x70;
    0x00060afe bl 0x2b5f4                                        |     fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x00060b02 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x00060b06 str r0, [sp, 0x8c]                                |     var_8ch = r0;
    0x00060b08 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00060b0a ble 0x60b1e                                       |         
    0x00060b0c ldr.w r2, [sl, 0x68]                              |         r2 = *((sl + 0x68));
    0x00060b10 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00060b14 add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
    0x00060b18 movs r3, 8                                        |         r3 = 8;
    0x00060b1a strh r3, [r2, -0x12]                              |         *((r2 - 0x12)) = r3;
                                                                 |     }
    0x00060b1e movs r3, 3                                        |     r3 = 3;
    0x00060b20 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00060b22 b.w 0x602ea                                       |     goto label_33;
                                                                 | label_176:
    0x00060b26 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00060b28 b.w 0x601b0                                       |     goto label_34;
                                                                 | label_149:
    0x00060b2c str r2, [sp, 0xb4]                                |     var_b4h = r2;
    0x00060b2e ldr r4, [r7, 0x30]                                |     r4 = *((r7 + 0x30));
    0x00060b30 ldr r2, [pc, 0x2b4]                               |     
    0x00060b32 add r2, pc                                        |     r2 = 0xc191e;
    0x00060b34 str r2, [sp, 0xb0]                                |     var_b0h = r2;
    0x00060b36 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00060b38 beq.w 0x5fbf8                                     |         goto label_35;
                                                                 |     }
    0x00060b3c ldr r5, [r4]                                      |     r5 = *(r4);
    0x00060b3e cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00060b40 ble.w 0x5fbf8                                     |         goto label_35;
                                                                 |     }
    0x00060b44 ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x00060b48 adds r4, 0x18                                     |     r4 += 0x18;
                                                                 |     do {
    0x00060b4a ldr r1, [r4, -0x10]                               |         r1 = *((r4 - 0x10));
                                                                 |         if (r1 != 0) {
    0x00060b4e cbz r1, 0x60b58                                   |             
    0x00060b50 mov r0, r8                                        |             r0 = r8;
    0x00060b52 bl 0x301c4                                        |             r0 = fcn_000301c4 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x00060b56 cbnz r0, 0x60b60                                  |                 goto label_219;
                                                                 |             }
                                                                 |         }
    0x00060b58 subs r5, 1                                        |         r5--;
    0x00060b5a add.w r4, r4, 0x10                                |         r4 += 0x10;
    0x00060b5e bne 0x60b4a                                       |         
                                                                 |     } while (r5 != 1);
                                                                 | label_219:
    0x00060b60 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060b62 b.w 0x5fbf8                                       |     goto label_35;
                                                                 | label_206:
    0x00060b66 ldrd r5, r8, [sp, 0x60]                           |     __asm ("ldrd r5, r8, [var_60h]");
    0x00060b6a mov r2, r0                                        |     r2 = r0;
    0x00060b6c ldr r7, [sp, 0x68]                                |     r7 = var_68h;
                                                                 | label_205:
    0x00060b6e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00060b70 ldr.w r0, [fp, 0x2c]                              |     r0 = *(arg_2ch);
    0x00060b74 str r0, [r3, 0x14]                                |     *((r3 + 0x14)) = r0;
    0x00060b76 ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
    0x00060b7a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060b7c bne.w 0x61066                                     |         goto label_220;
                                                                 |     }
    0x00060b80 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060b82 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00060b84 beq.w 0x614b6                                     |         goto label_221;
                                                                 |     }
    0x00060b88 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00060b8a beq.w 0x61648                                     |         goto label_222;
                                                                 |     }
                                                                 | label_77:
    0x00060b8e str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_78:
    0x00060b90 ldr.w r6, [fp, 0x28]                              |     r6 = *(arg_28h);
    0x00060b94 movs r2, 0                                        |     r2 = 0;
    0x00060b96 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00060b98 mov r0, fp                                        |     r0 = fp;
    0x00060b9a ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060b9c add.w ip, r6, 1                                   |     
    0x00060ba0 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00060ba2 str.w ip, [fp, 0x28]                              |     __asm ("str.w ip, [arg_28h]");
    0x00060ba6 str r6, [r4, 4]                                   |     *((r4 + 4)) = r6;
    0x00060ba8 bl 0x2dc24                                        |     fcn_0002dc24 (r0, r1, r2, r3);
    0x00060bac movs r3, 0                                        |     r3 = 0;
    0x00060bae movs r1, 0x72                                     |     r1 = 0x72;
    0x00060bb0 strd r3, r0, [sp]                                 |     __asm ("strd r3, r0, [sp]");
    0x00060bb4 mvn r3, 8                                         |     r3 = ~8;
    0x00060bb8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00060bba str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x00060bbc mov r0, sl                                        |     r0 = sl;
    0x00060bbe ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00060bc0 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00060bc2 bl 0x2b5f4                                        |     fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x00060bc6 ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x00060bc8 movs r2, 0                                        |     r2 = 0;
    0x00060bca ldr.w r6, [fp, 0x2c]                              |     r6 = *(arg_2ch);
    0x00060bcc str r4, [r5]                                      |     *(r5) = r4;
    0x00060bce str r0, [sp, 0x78]                                |     var_78h = r0;
    0x00060bd0 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00060bd2 adds r0, r6, 4                                    |     r0 = r6 + 4;
    0x00060bd4 str r2, [sp]                                      |     *(sp) = r2;
    0x00060bd6 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00060bd8 adds r4, r6, 2                                    |     r4 = r6 + 2;
    0x00060bda ldr.w r1, [fp, 0x38]                              |     r1 = *(arg_38h);
    0x00060bde add r0, r3                                        |     r0 += r3;
    0x00060be0 add r3, r0                                        |     r3 += r0;
    0x00060be2 str r4, [sp, 0x68]                                |     var_68h = r4;
    0x00060be4 str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x00060be8 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00060bea str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00060bec subs r3, r1, 2                                    |     r3 = r1 - 2;
    0x00060bee subs r1, 1                                        |     r1--;
    0x00060bf0 str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
    0x00060bf4 strd r3, r1, [sp, 0x60]                           |     __asm ("strd r3, r1, [var_60h]");
    0x00060bf8 mov r3, r4                                        |     r3 = r4;
    0x00060bfa adds r4, r6, 5                                    |     r4 = r6 + 5;
    0x00060bfc movs r1, 0x45                                     |     r1 = 0x45;
    0x00060bfe str r4, [sp, 0x70]                                |     var_70h = r4;
    0x00060c00 mov r0, sl                                        |     r0 = sl;
    0x00060c02 adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x00060c04 adds r6, 3                                        |     r6 += 3;
    0x00060c06 str r4, [sp, 0x50]                                |     var_50h = r4;
    0x00060c08 str r6, [sp, 0x34]                                |     var_34h = r6;
    0x00060c0a bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060c0e ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x00060c10 movs r2, 0                                        |     r2 = 0;
    0x00060c12 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00060c14 mov r0, sl                                        |     r0 = sl;
    0x00060c16 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00060c18 add r3, r1                                        |     r3 += r1;
    0x00060c1a subs r3, 1                                        |     r3--;
    0x00060c1c str r3, [sp]                                      |     *(sp) = r3;
    0x00060c1e mov r3, r1                                        |     r3 = r1;
    0x00060c20 movs r1, 0x48                                     |     r1 = 0x48;
    0x00060c22 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060c26 movs r1, 0                                        |     r1 = 0;
    0x00060c28 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00060c2a ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00060c2c mov r0, sl                                        |     r0 = sl;
    0x00060c2e str r1, [sp]                                      |     *(sp) = r1;
    0x00060c30 movs r1, 0xc                                      |     r1 = 0xc;
    0x00060c32 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060c36 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00060c38 mov r1, r5                                        |     r1 = r5;
    0x00060c3a ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x00060c3c ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00060c3e cmp r3, 0                                         |     
    0x00060c40 mov.w r3, 0                                       |     r3 = 0;
    0x00060c44 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00060c46 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00060c48 str r3, [sp]                                      |     *(sp) = r3;
    0x00060c4a ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x00060c4c movne r3, 0x240                                   |         r3 = 0x240;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00060c50 movs r3, 0x40                                     |         r3 = 0x40;
                                                                 |     }
    0x00060c52 orrs r0, r3                                       |     r0 |= r3;
    0x00060c54 mov r3, r4                                        |     r3 = r4;
    0x00060c56 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00060c58 mov r0, fp                                        |     r0 = fp;
    0x00060c5a bl 0x6b788                                        |     fcn_0006b788 (r0, r1, r2, r3, r4, r5, r6);
    0x00060c5e str r0, [sp, 0x40]                                |     var_40h = r0;
    0x00060c60 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00060c62 beq.w 0x61056                                     |         goto label_223;
                                                                 |     }
    0x00060c66 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00060c68 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00060c6a ldrsb.w r2, [r1, 0x2d]                            |     r2 = *((r1 + 0x2d));
    0x00060c6e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00060c70 ldrb.w r1, [r1, 0x2f]                             |     r1 = *((r1 + 0x2f));
    0x00060c74 cmp r3, r2                                        |     
    0x00060c76 str r1, [sp, 0x74]                                |     var_74h = r1;
                                                                 |     if (r3 == r2) {
    0x00060c78 beq.w 0x616da                                     |         goto label_224;
                                                                 |     }
    0x00060c7c ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00060c7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060c80 beq.w 0x616d2                                     |         goto label_225;
                                                                 |     }
    0x00060c84 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060c86 lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
                                                                 |     if (r6 < r3) {
    0x00060c88 bmi.w 0x6180e                                     |         goto label_226;
                                                                 |     }
    0x00060c8c ldr r3, [pc, 0x15c]                               |     
    0x00060c8e add r3, pc                                        |     r3 = 0xc1a7e;
                                                                 | label_81:
    0x00060c90 ldr r2, [pc, 0x15c]                               |     
    0x00060c92 movs r1, 0                                        |     r1 = 0;
    0x00060c94 mov r0, fp                                        |     r0 = fp;
    0x00060c96 add r2, pc                                        |     r2 = 0xc1a8a;
    0x00060c98 bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x00060c9c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00060c9e ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060ca0 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x00060ca2 ldr r6, [r1]                                      |     r6 = *(r1);
    0x00060ca4 cmp r2, 0                                         |     
    0x00060ca6 str r6, [sp, 0x3c]                                |     var_3ch = r6;
                                                                 |     if (r2 <= 0) {
    0x00060ca8 ble.w 0x61808                                     |         goto label_227;
                                                                 |     }
    0x00060cac ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00060cae movs r1, 0x14                                     |     r1 = 0x14;
    0x00060cb0 mla r2, r1, r2, r3                                |     __asm ("mla r2, r1, r2, r3");
                                                                 |     do {
    0x00060cb4 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00060cb8 adds r3, 0x14                                     |         r3 += 0x14;
    0x00060cba cmp r1, r6                                        |         
    0x00060cbc it ge                                             |         
                                                                 |         if (r1 < r6) {
    0x00060cbe addge r6, 1                                       |             r6++;
                                                                 |         }
    0x00060cc0 cmp r2, r3                                        |         
    0x00060cc2 bne 0x60cb4                                       |         
                                                                 |     } while (r2 != r3);
                                                                 | label_90:
    0x00060cc4 movs r4, 0                                        |     r4 = 0;
    0x00060cc6 mov r1, r6                                        |     r1 = r6;
    0x00060cc8 mov r0, fp                                        |     r0 = fp;
    0x00060cca bl 0xf298                                         |     fcn_0000f298 (r0, r1);
    0x00060cce ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060cd0 mov r2, r0                                        |     r2 = r0;
    0x00060cd2 mov r3, r4                                        |     r3 = r4;
    0x00060cd4 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00060cd6 str r4, [sp]                                      |     *(sp) = r4;
    0x00060cd8 mov r0, fp                                        |     r0 = fp;
    0x00060cda bl 0x67dc0                                        |     fcn_00067dc0 (r0, r1, r2, r3, r4);
    0x00060cde ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00060ce0 ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x00060ce2 cmp r1, r4                                        |     
                                                                 |     if (r1 <= r4) {
    0x00060ce4 ble.w 0x61126                                     |         goto label_228;
                                                                 |     }
    0x00060ce8 mov r0, sl                                        |     r0 = sl;
    0x00060cea str r6, [sp, 0x7c]                                |     var_7ch = r6;
    0x00060cec mov r5, r4                                        |     r5 = r4;
    0x00060cee ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x00060cf0 mov sl, r7                                        |     sl = r7;
    0x00060cf2 b 0x60cfe                                         |     
                                                                 |     while (ip < r6) {
                                                                 | label_36:
    0x00060cf4 adds r4, 1                                        |         r4++;
    0x00060cf6 adds r5, 0x14                                     |         r5 += 0x14;
    0x00060cf8 cmp r1, r4                                        |         
                                                                 |         if (r1 <= r4) {
    0x00060cfa ble.w 0x61120                                     |             goto label_229;
                                                                 |         }
    0x00060cfe ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00060d00 ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x00060d02 adds r2, r3, r5                                   |         r2 = r3 + r5;
    0x00060d04 ldrsh.w ip, [r2, 0x12]                            |         ip = *((r2 + 0x12));
    0x00060d08 cmp ip, r6                                        |         
    0x00060d0a blt 0x60cf4                                       |         
                                                                 |     }
    0x00060d0c ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x00060d0e ldr r1, [r3, r5]                                  |     r1 = *((r3 + r5));
    0x00060d10 ldrsh.w r3, [r2, 0x10]                            |     r3 = *((r2 + 0x10));
    0x00060d14 add.w ip, r7, r6                                  |     
    0x00060d18 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00060d1a str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x00060d1e adds r6, 1                                        |     r6++;
    0x00060d20 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00060d22 bl 0x66f40                                        |     fcn_00066f40 (r0, r1, r2, r3, r4);
    0x00060d26 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00060d28 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x00060d2a ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x00060d2c b 0x60cf4                                         |     goto label_36;
                                                                 | label_202:
    0x00060d2e ldr.w r3, [fp, 0x24]                              |     r3 = *(arg_24h);
    0x00060d32 movs r4, 1                                        |     r4 = 1;
    0x00060d34 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00060d36 add r3, r2                                        |     r3 += r2;
    0x00060d38 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [arg_24h]");
    0x00060d3c b.w 0x5f862                                       |     goto label_11;
                                                                 | label_208:
    0x00060d40 ldr r1, [sp, 0xe0]                                |     r1 = var_e0h;
    0x00060d42 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00060d44 blt.w 0x6088e                                     |         goto label_37;
                                                                 |     }
    0x00060d48 mov r0, sl                                        |     r0 = sl;
    0x00060d4a bl 0x1aa40                                        |     fcn_0001aa40 (r0, r1);
    0x00060d4e b 0x6088e                                         |     goto label_37;
                                                                 | label_194:
    0x00060d50 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00060d52 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00060d54 b 0x605b2                                         |     goto label_38;
                                                                 | label_179:
    0x00060d56 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00060d5a ldrb.w r3, [r3, 0x53]                             |     r3 = *((r3 + 0x53));
    0x00060d5e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060d60 bne.w 0x61024                                     |         goto label_230;
                                                                 |     }
    0x00060d64 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x00060d68 movs r1, 0x14                                     |     r1 = 0x14;
    0x00060d6a mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
                                                                 | label_61:
    0x00060d6e movs r2, 0x72                                     |     r2 = 0x72;
    0x00060d70 strb r2, [r3]                                     |     *(r3) = r2;
    0x00060d72 ldrb.w r3, [sp, 0xec]                             |     r3 = var_ech;
    0x00060d76 orr r3, r3, 1                                     |     r3 |= 1;
    0x00060d7a strb.w r3, [sp, 0xec]                             |     var_ech = r3;
    0x00060d7e b.w 0x602e2                                       |     goto label_39;
                                                                 | label_178:
    0x00060d82 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00060d84 movs r2, 0                                        |     r2 = 0;
    0x00060d86 movs r1, 0x70                                     |     r1 = 0x70;
    0x00060d88 mov r0, sl                                        |     r0 = sl;
    0x00060d8a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00060d8c str r2, [sp]                                      |     *(sp) = r2;
    0x00060d8e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00060d90 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00060d92 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060d96 b.w 0x602b4                                       |     goto label_40;
                                                                 | label_177:
    0x00060df4 ldr r0, [sp, 0xcc]                                |     r0 = var_cch;
    0x00060df6 mov.w r2, -1                                      |     r2 = -1;
    0x00060dfa ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00060dfc bl 0x36d2c                                        |     r0 = fcn_00036d2c (r0, r1, r2);
    0x00060e00 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00060e02 bne.w 0x6026a                                     |         goto label_41;
                                                                 |     }
    0x00060e04 add r2, sp, 0xc8                                  |     r2 = sp + 0xc8;
    0x00060e06 ldr r2, [r7, 0x44]                                |     r2 = *((r7 + 0x44));
    0x00060e08 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00060e0a bne.w 0x6026a                                     |         goto label_41;
                                                                 |     }
    0x00060e0e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060e10 mov r0, sb                                        |     r0 = sb;
    0x00060e12 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00060e14 bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x00060e18 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x00060e1a bl 0x314cc                                        |     fcn_000314cc (r0, r1, r2);
    0x00060e1e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00060e20 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00060e22 str r0, [r7, 0x28]                                |     *((r7 + 0x28)) = r0;
    0x00060e24 orr r3, r3, 8                                     |     r3 |= 8;
    0x00060e28 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x00060e2a b.w 0x6026a                                       |     goto label_41;
                                                                 | label_192:
    0x00060e2e ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00060e30 ldrb.w r3, [r0, 0x53]                             |     r3 = *((r0 + 0x53));
    0x00060e34 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060e36 bne.w 0x60aa8                                     |         goto label_42;
                                                                 |     }
    0x00060e3a ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00060e3c bl 0x159dc                                        |     fcn_000159dc (r0, r1);
    0x00060e40 b 0x60ab0                                         |     goto label_43;
                                                                 | label_174:
    0x00060e42 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00060e46 mov r1, r2                                        |     r1 = r2;
    0x00060e48 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00060e4a ldr.w r2, [sl, 0x70]                              |     r2 = *((sl + 0x70));
    0x00060e4e cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x00060e50 bge.w 0x616c0                                     |         goto label_231;
                                                                 |     }
    0x00060e54 ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x00060e56 ldr.w r2, [sl, 0x68]                              |     r2 = *((sl + 0x68));
    0x00060e5a add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x00060e5e adds r0, 1                                        |     r0++;
    0x00060e60 str.w r0, [sl, 0x6c]                              |     __asm ("str.w r0, [sl, 0x6c]");
    0x00060e64 movs r0, 0x11                                     |     r0 = 0x11;
    0x00060e66 str.w r0, [r2, r1, lsl 2]                         |     __asm ("str.w r0, [r2, r1, lsl 2]");
    0x00060e6a add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
    0x00060e6e strd r3, r3, [r2, 4]                              |     __asm ("strd r3, r3, [r2, 4]");
    0x00060e72 strd r3, r3, [r2, 0xc]                            |     __asm ("strd r3, r3, [r2, 0xc]");
                                                                 | label_80:
    0x00060e76 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00060e78 movs r1, 0xc                                      |     r1 = 0xc;
    0x00060e7a ldr.w r2, [pc, 0xb80]                             |     r2 = *(0x000619fc);
    0x00060e7e mov r0, fp                                        |     r0 = fp;
    0x00060e80 strb.w r1, [sp, 0xac]                             |     var_ach = r1;
    0x00060e84 movs r1, 1                                        |     r1 = 1;
    0x00060e86 str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x00060e88 movs r3, 0                                        |     r3 = 0;
    0x00060e8a add r2, pc                                        |     r2 += pc;
    0x00060e8c str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x00060e8e str r3, [sp, 0xc0]                                |     var_c0h = r3;
    0x00060e90 strd r3, r3, [sp, 0xb8]                           |     __asm ("strd r3, r3, [var_b8h]");
    0x00060e94 mov r3, r4                                        |     r3 = r4;
    0x00060e96 bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x00060e9a ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00060e9c mov r1, r7                                        |     r1 = r7;
    0x00060e9e mov r0, fp                                        |     r0 = fp;
    0x00060ea0 bl 0x5f5e0                                        |     fcn_0005f5e0 (r0, r1, r2, r3, r4, r5, r6);
    0x00060ea4 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00060ea6 ldrh r2, [r7, 2]                                  |     r2 = *((r7 + 2));
    0x00060ea8 strh r2, [r3, 0x2e]                               |     *((r3 + 0x2e)) = r2;
    0x00060eaa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00060eac cmp r3, 0                                         |     
    0x00060eae ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
                                                                 |     if (r3 == 0) {
    0x00060eb2 beq.w 0x60156                                     |         goto label_44;
                                                                 |     }
    0x00060eb6 itt lt                                            |     
                                                                 |     if (r3 >= 0) {
    0x00060eb8 addlt r2, r3, -1                                  |         r2 = r3 + -1;
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x00060ebc str r2, [sp, 0x50]                                |         var_50h = r2;
                                                                 |     }
    0x00060ebe ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00060ec2 ldrb.w r2, [r2, 0x53]                             |     r2 = *((r2 + 0x53));
    0x00060ec6 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00060ec8 bne.w 0x6109c                                     |         goto label_232;
                                                                 |     }
    0x00060ecc ldr.w r2, [sl, 0x68]                              |     r2 = *((sl + 0x68));
    0x00060ed0 movs r1, 0x14                                     |     r1 = 0x14;
    0x00060ed2 ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x00060ed4 mla r2, r1, r0, r2                                |     __asm ("mla r2, r1, r0, r2");
                                                                 | label_65:
    0x00060ed8 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00060eda b.w 0x60156                                       |     goto label_44;
                                                                 | label_218:
    0x00060ede ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00060ee0 ldrb.w r3, [r0, 0x53]                             |     r3 = *((r0 + 0x53));
    0x00060ee4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060ee6 bne.w 0x60aa8                                     |         goto label_42;
                                                                 |     }
    0x00060eea b 0x60a98                                         |     goto label_45;
                                                                 | label_214:
    0x00060eec ldr.w r3, [pc, 0xb10]                             |     
    0x00060ef0 add r3, pc                                        |     r3 = 0xc28f4;
    0x00060ef2 b 0x60964                                         |     goto label_46;
                                                                 | label_148:
    0x00060ef4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00060ef6 ldr.w r3, [r3, 0xf4]                              |     r3 = *((r3 + 0xf4));
    0x00060efa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00060efc bne.w 0x60ac8                                     |         goto label_47;
                                                                 |     }
    0x00060f00 b 0x609da                                         |     goto label_32;
                                                                 | label_215:
    0x00060f02 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00060f04 mov r1, sl                                        |     r1 = sl;
    0x00060f06 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00060f08 bl 0x1c0b8                                        |     fcn_0001c0b8 (r0, r1, r2);
    0x00060f0c b 0x609a0                                         |     goto label_48;
                                                                 | label_195:
    0x00060f0e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00060f10 strh r3, [r7, 2]                                  |     *((r7 + 2)) = r3;
    0x00060f12 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00060f14 b.w 0x60672                                       |     goto label_49;
                                                                 | label_150:
    0x00060f18 mov.w r2, -1                                      |     r2 = -1;
    0x00060f1c str r3, [r0]                                      |     *(r0) = r3;
    0x00060f1e bl 0x36d2c                                        |     r0 = fcn_00036d2c (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x00060f22 cbnz r0, 0x60f32                                  |         
    0x00060f24 ldr r1, [r7, 0x30]                                |         r1 = *((r7 + 0x30));
                                                                 |         if (r1 != 0) {
    0x00060f26 cbz r1, 0x60f2e                                   |             
    0x00060f28 ldr r0, [sp, 0x34]                                |             r0 = var_34h;
    0x00060f2a bl 0x18c5c                                        |             fcn_00018c5c (r0, r1);
                                                                 |         }
    0x00060f2e movs r3, 0                                        |         r3 = 0;
    0x00060f30 str r3, [r7, 0x30]                                |         *((r7 + 0x30)) = r3;
                                                                 |     }
    0x00060f32 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00060f34 str r4, [r3]                                      |     *(r3) = r4;
    0x00060f36 b.w 0x5fc34                                       |     goto label_50;
                                                                 | label_190:
    0x00060f3a ldr.w r2, [pc, 0xac8]                             |     
    0x00060f3e movs r1, 1                                        |     r1 = 1;
    0x00060f40 mov r3, r5                                        |     r3 = r5;
    0x00060f42 str r1, [sp, 0xd0]                                |     var_d0h = r1;
    0x00060f44 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00060f46 movs r1, 0x9a                                     |     r1 = 0x9a;
    0x00060f48 add r2, pc                                        |     r2 = 0xc2952;
    0x00060f4a str r2, [sp, 0xcc]                                |     var_cch = r2;
    0x00060f4c add r2, sp, 0xcc                                  |     r2 += var_cch;
    0x00060f4e bl 0x1afec                                        |     r0 = fcn_0001afec (r0, r1, r2, r3);
    0x00060f52 mov r1, r0                                        |     r1 = r0;
    0x00060f54 ldr r0, [r6]                                      |     r0 = *(r6);
    0x00060f56 bl 0x1afb0                                        |     r0 = fcn_0001afb0 (r0, r1);
    0x00060f5a mov r5, r0                                        |     r5 = r0;
    0x00060f5c b.w 0x604da                                       |     goto label_51;
                                                                 | label_217:
    0x00060f60 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00060f62 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00060f64 b.w 0x5fe1c                                       |     goto label_29;
                                                                 | label_136:
    0x00060f68 ldr.w lr, [r7, 0x30]                              |     
    0x00060f6c cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x00060f70 beq.w 0x616a8                                     |         goto label_233;
                                                                 |     }
    0x00060f74 ldr r0, [r4, 0x30]                                |     r0 = *((r4 + 0x30));
    0x00060f76 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00060f78 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x00060f7c b.w 0x5f968                                       |     goto label_52;
                                                                 | label_185:
    0x00060f80 movs r3, 2                                        |     r3 = 2;
    0x00060f82 str r0, [sp]                                      |     *(sp) = r0;
    0x00060f84 movs r1, 0x70                                     |     r1 = 0x70;
    0x00060f86 mov r0, r6                                        |     r0 = r6;
    0x00060f88 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00060f8c ldr r3, [r6]                                      |     r3 = *(r6);
    0x00060f8e ldrb.w r3, [r3, 0x53]                             |     r3 = *((r3 + 0x53));
    0x00060f92 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060f94 beq.w 0x6043c                                     |         goto label_53;
                                                                 |     }
    0x00060f98 b.w 0x60450                                       |     goto label_54;
                                                                 | label_216:
    0x00060f9c ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00060fa0 ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x00060fa2 lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00060fa4 itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x00060fa6 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x00060fa8 strbpl r3, [fp, 0x17]                             |         *(arg_17h) = r3;
                                                                 |     }
    0x00060fac b 0x609f8                                         |     goto label_55;
                                                                 | label_200:
    0x00060fae movs r1, 0                                        |     r1 = 0;
    0x00060fb0 movs r0, 0xc                                      |     r0 = 0xc;
    0x00060fb2 bl 0x12abc                                        |     fcn_00012abc (r0);
    0x00060fb6 b.w 0x606a8                                       |     goto label_56;
                                                                 | label_182:
    0x00060fba ldr.w r3, [fp, 0x74]                              |     r3 = *(arg_74h);
    0x00060fbe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060fc0 beq.w 0x61696                                     |         goto label_234;
                                                                 |     }
                                                                 | label_79:
    0x00060fc4 mov r0, fp                                        |     r0 = fp;
    0x00060fc6 bl 0x2ae64                                        |     fcn_0002ae64 (r0, r1);
    0x00060fca str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00060fcc b.w 0x60328                                       |     goto label_57;
                                                                 | label_173:
    0x00060fd0 movs r2, 0                                        |     r2 = 0;
    0x00060fd2 movs r1, 0x45                                     |     r1 = 0x45;
    0x00060fd4 mov r0, sl                                        |     r0 = sl;
    0x00060fd6 str r2, [sp]                                      |     *(sp) = r2;
    0x00060fd8 bl 0x2add4                                        |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x00060fdc mov r8, r0                                        |     r8 = r0;
    0x00060fde add.w ip, r0, 1                                   |     
    0x00060fe0 lsrs r1, r0, 0x10                                 |     r1 = r0 >> 0x10;
    0x00060fe2 b.w 0x60108                                       |     goto label_58;
                                                                 | label_209:
    0x00060fe6 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00060fe8 mov r0, fp                                        |     r0 = fp;
    0x00060fea mov.w r2, -1                                      |     r2 = -1;
    0x00060fee mov r1, r7                                        |     r1 = r7;
    0x00060ff0 ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x00060ff4 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00060ff6 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00060ff8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00060ffa ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00060ffc str r3, [sp, 4]                                   |     var_4h = r3;
    0x00060ffe add r3, sp, 0x84                                  |     r3 += var_84h;
    0x00061000 str r3, [sp]                                      |     *(sp) = r3;
    0x00061002 add r3, sp, 0xcc                                  |     r3 += var_cch;
    0x00061004 bl 0x69308                                        |     fcn_00069308 (r0, r1, r2, r3, r4, r5, r6);
    0x00061008 mov r0, r4                                        |     r0 = r4;
    0x0006100a bl 0x2f5a0                                        |     fcn_0002f5a0 (r0, r1);
    0x0006100e b 0x60948                                         |     goto label_59;
                                                                 | label_175:
    0x00061010 movs r3, 0                                        |     r3 = 0;
    0x00061012 mov r2, ip                                        |     r2 = ip;
    0x00061014 str r3, [sp]                                      |     *(sp) = r3;
    0x00061016 movs r1, 0x41                                     |     r1 = 0x41;
    0x00061018 mov r0, sl                                        |     r0 = sl;
    0x0006101a bl 0x2add4                                        |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0006101e mov r3, r0                                        |     r3 = r0;
    0x00061020 b.w 0x60188                                       |     goto label_60;
                                                                 | label_230:
    0x00061024 ldr.w r3, [pc, 0x9e0]                             |     
    0x00061028 add r3, pc                                        |     r3 = 0xc2a34;
    0x0006102a adds r3, 4                                        |     r3 += 4;
    0x0006102c b 0x60d6e                                         |     goto label_61;
                                                                 | label_213:
    0x0006102e ldr.w r3, [pc, 0x9dc]                             |     r3 = *(0x00061a0c);
    0x00061032 movs r1, 0                                        |     r1 = 0;
    0x00061034 ldr.w r2, [pc, 0x9d8]                             |     
    0x00061038 mov r0, fp                                        |     r0 = fp;
    0x0006103a add r3, pc                                        |     r3 += pc;
    0x0006103c add r2, pc                                        |     r2 = 0xc2a50;
    0x0006103e bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x00061042 b 0x60952                                         |     goto label_62;
                                                                 | label_72:
    0x00061044 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00061046 rsbs r2, r3, 0                                    |     r2 = r3 - ;
                                                                 | label_212:
    0x00061048 mov r1, sl                                        |     r1 = sl;
    0x0006104a bl 0x1c0b8                                        |     fcn_0001c0b8 (r0, r1, r2);
    0x0006104e b 0x60948                                         |     goto label_59;
                                                                 | label_198:
    0x00061050 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x00061052 b.w 0x60672                                       |     goto label_49;
                                                                 | label_223:
    0x00061056 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x00061058 cbz r3, 0x61062                                   |         
    0x0006105a ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0006105c mov r0, sb                                        |         r0 = sb;
    0x0006105e bl 0x18c5c                                        |         fcn_00018c5c (r0, r1);
                                                                 |     }
                                                                 | label_95:
    0x00061062 ldrb.w r3, [sb, 0x53]                             |     r3 = *((sb + 0x53));
                                                                 | label_220:
    0x00061066 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x0006106a movs r4, 1                                        |     r4 = 1;
    0x0006106c b 0x609b0                                         |     goto label_63;
                                                                 | label_132:
    0x0006106e ldr.w r3, [pc, 0x9a4]                             |     r3 = *(0x00061a14);
    0x00061072 add r3, pc                                        |     r3 += pc;
    0x00061074 adds r3, 4                                        |     r3 += 4;
    0x00061076 b.w 0x5f88a                                       |     goto label_64;
                                                                 | label_186:
    0x0006107a ldr.w r3, [r3, 0x1f8]                             |     r3 = *((r3 + 0x1f8));
    0x0006107e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061080 bne.w 0x60450                                     |         goto label_54;
                                                                 |     }
    0x00061084 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00061086 subs r3, 1                                        |     r3--;
    0x00061088 str r3, [r5]                                      |     *(r5) = r3;
    0x0006108a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006108c bne.w 0x60450                                     |         goto label_54;
                                                                 |     }
    0x00061090 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00061092 mov r1, r5                                        |     r1 = r5;
    0x00061094 bl 0x159dc                                        |     fcn_000159dc (r0, r1);
    0x00061098 b.w 0x60450                                       |     goto label_54;
                                                                 | label_232:
    0x0006109c ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0006109e b 0x60ed8                                         |     goto label_65;
                                                                 | label_211:
    0x000610a0 mov r1, sl                                        |     r1 = sl;
    0x000610a2 bl 0x1c0b8                                        |     fcn_0001c0b8 (r0, r1, r2);
    0x000610a6 b 0x60920                                         |     goto label_66;
                                                                 | label_210:
    0x000610a8 rsbs r2, r5, 0                                    |     r2 = r5 - ;
    0x000610aa mov r1, sl                                        |     r1 = sl;
    0x000610ac bl 0x1c0b8                                        |     fcn_0001c0b8 (r0, r1, r2);
    0x000610b0 b 0x608e6                                         |     goto label_67;
                                                                 | label_199:
    0x000610b2 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x000610b4 ble 0x610ce                                       |         goto label_235;
                                                                 |     }
    0x000610b6 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x000610b8 movs r4, 0                                        |     r4 = 0;
    0x000610ba movs r3, 0x10                                     |     r3 = 0x10;
                                                                 |     do {
    0x000610bc ldrb r2, [r1, r3]                                 |         r2 = *((r1 + r3));
    0x000610be adds r4, 1                                        |         r4++;
    0x000610c0 cmp r0, r4                                        |         
    0x000610c2 and r2, r2, 1                                     |         r2 &= 1;
    0x000610c6 strb r2, [r6, r3]                                 |         *((r6 + r3)) = r2;
    0x000610c8 add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x000610cc bne 0x610bc                                       |         
                                                                 |     } while (r0 != r4);
                                                                 | label_235:
    0x000610ce ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000610d0 mov.w r2, -1                                      |     r2 = -1;
    0x000610d4 bl 0x36d2c                                        |     r0 = fcn_00036d2c (r0, r1, r2);
    0x000610d8 clz r3, r0                                        |     r3 &= r0;
    0x000610dc lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000610de str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000610e0 b.w 0x60672                                       |     goto label_49;
                                                                 | label_203:
    0x000610e4 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000610e6 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000610e8 ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x000610ea ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x000610ec str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000610ee str r2, [r3, 0x18]                                |     *((r3 + 0x18)) = r2;
    0x000610f0 mov r0, r4                                        |     r0 = r4;
    0x000610f2 bl 0x307e4                                        |     fcn_000307e4 (r0, r1, r2);
    0x000610f6 ldr r1, [sp, 0xcc]                                |     r1 = var_cch;
    0x000610f8 mov r0, r4                                        |     r0 = r4;
    0x000610fa bl 0x307e4                                        |     fcn_000307e4 (r0, r1, r2);
    0x000610fe ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00061100 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061102 beq.w 0x60768                                     |         goto label_68;
                                                                 |     }
    0x00061106 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00061108 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0006110a b.w 0x6073e                                       |     goto label_69;
                                                                 | label_204:
    0x0006110e ldr.w r8, [r7, 0x2c]                              |     r8 = *((r7 + 0x2c));
    0x00061112 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00061116 beq.w 0x61734                                     |         goto label_236;
                                                                 |     }
    0x0006111a mov r8, r3                                        |     r8 = r3;
    0x0006111c b.w 0x6077c                                       |     goto label_70;
                                                                 | label_229:
    0x00061120 ldr r6, [sp, 0x7c]                                |     r6 = var_7ch;
    0x00061122 mov r7, sl                                        |     r7 = sl;
    0x00061124 mov sl, r0                                        |     sl = r0;
                                                                 | label_228:
    0x00061126 ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x0006112a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006112c beq.w 0x61716                                     |         goto label_237;
                                                                 |     }
    0x00061130 subs r3, 1                                        |     r3--;
    0x00061132 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00061134 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x00061138 add.w r3, fp, r3, lsl 2                           |     r3 = fp + (r3 << 2);
    0x0006113c ldr.w r4, [r3, 0x94]                              |     r4 = *((r3 + 0x94));
                                                                 | label_83:
    0x00061140 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00061142 mov r3, r6                                        |     r3 = r6;
    0x00061144 movs r1, 0x5d                                     |     r1 = 0x5d;
    0x00061146 mov r0, sl                                        |     r0 = sl;
    0x00061148 str r4, [sp]                                      |     *(sp) = r4;
    0x0006114a bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006114e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00061150 movs r3, 0                                        |     r3 = 0;
    0x00061152 str r3, [sp]                                      |     *(sp) = r3;
    0x00061154 movs r1, 0x87                                     |     r1 = 0x87;
    0x00061156 mov r3, r4                                        |     r3 = r4;
    0x00061158 mov r0, sl                                        |     r0 = sl;
    0x0006115a ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0006115c bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 |     if (r4 != 0) {
    0x00061160 cbz r4, 0x6116a                                   |         
    0x00061162 mov r1, r4                                        |         r1 = r4;
    0x00061164 mov r0, fp                                        |         r0 = fp;
    0x00061166 bl 0xf284                                         |         fcn_0000f284 (r0, r1);
                                                                 |     }
    0x0006116a ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006116c mov r2, r6                                        |     r2 = r6;
    0x0006116e mov r0, fp                                        |     r0 = fp;
    0x00061170 bl 0x18120                                        |     fcn_00018120 (r0, r1, r2);
    0x00061174 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00061176 bl 0x2f5a0                                        |     fcn_0002f5a0 (r0, r1);
    0x0006117a ldr.w r5, [fp, 0x28]                              |     r5 = *(arg_28h);
    0x0006117e adds r3, r5, 1                                    |     r3 = r5 + 1;
    0x00061180 str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x00061184 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061186 str r5, [r3, 8]                                   |     *((r3 + 8)) = r5;
    0x00061188 ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x0006118c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006118e beq.w 0x61722                                     |         goto label_238;
                                                                 |     }
    0x00061192 subs r3, 1                                        |     r3--;
    0x00061194 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00061196 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x0006119a add.w r3, fp, r3, lsl 2                           |     r3 = fp + (r3 << 2);
    0x0006119e ldr.w r4, [r3, 0x94]                              |     r4 = *((r3 + 0x94));
                                                                 | label_84:
    0x000611a2 mov r3, r4                                        |     r3 = r4;
    0x000611a4 mov r2, r5                                        |     r2 = r5;
    0x000611a6 movs r1, 0x75                                     |     r1 = 0x75;
    0x000611a8 str r6, [sp]                                      |     *(sp) = r6;
    0x000611aa mov r0, sl                                        |     r0 = sl;
    0x000611ac bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000611b0 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x000611b2 movs r3, 0                                        |     r3 = 0;
    0x000611b4 str r3, [sp]                                      |     *(sp) = r3;
    0x000611b6 movs r1, 0x23                                     |     r1 = 0x23;
    0x000611b8 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000611ba mov r0, sl                                        |     r0 = sl;
    0x000611bc ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x000611be bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000611c2 movs r3, 1                                        |     r3 = 1;
    0x000611c4 strb r3, [r6, 1]                                  |     *((r6 + 1)) = r3;
    0x000611c6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
                                                                 |     if (r3 != 0) {
    0x000611c8 cbz r3, 0x611d6                                   |         
    0x000611ca ldr.w r3, [sb, 0x4c]                              |         r3 = *((sb + 0x4c));
    0x000611ce ands r3, r3, 4                                    |         r3 &= 4;
                                                                 |         if (r3 == r3) {
    0x000611d2 beq.w 0x619ec                                     |             goto label_239;
                                                                 |         }
                                                                 |     }
                                                                 | label_100:
    0x000611d6 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x000611da movs r1, 0x81                                     |     r1 = 0x81;
    0x000611dc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000611de mov r0, sl                                        |     r0 = sl;
    0x000611e0 str r5, [sp]                                      |     *(sp) = r5;
    0x000611e2 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000611e4 mov r3, r4                                        |     r3 = r4;
    0x000611e6 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x000611e8 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000611ec ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000611ee movs r2, 1                                        |     r2 = 1;
    0x000611f0 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x000611f2 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_82:
    0x000611f4 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000611f6 ble 0x61282                                       |         goto label_240;
                                                                 |     }
    0x000611f8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000611fa str.w r8, [sp, 0x3c]                              |     __asm ("str.w r8, [var_3ch]");
    0x000611fe ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x00061200 ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x00061204 mov r6, r3                                        |     r6 = r3;
    0x00061206 str r7, [sp, 0x20]                                |     var_20h = r7;
    0x00061208 mov r7, r3                                        |     r7 = r3;
    0x0006120a str.w sb, [sp, 0x7c]                              |     __asm ("str.w sb, [var_7ch]");
    0x0006120e b 0x6122c                                         |     
                                                                 |     while (r3 != 0) {
    0x00061210 mov r3, r8                                        |         r3 = r8;
    0x00061212 mov r2, r5                                        |         r2 = r5;
    0x00061214 movs r1, 0x5b                                     |         r1 = 0x5b;
    0x00061216 mov r0, sl                                        |         r0 = sl;
    0x00061218 str r4, [sp]                                      |         *(sp) = r4;
    0x0006121a bl 0x2ae1c                                        |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 | label_71:
    0x0006121e ldr r3, [r7]                                      |         r3 = *(r7);
    0x00061220 add.w r8, r8, 1                                   |         r8++;
    0x00061224 adds r4, 1                                        |         r4++;
    0x00061226 adds r6, 0x10                                     |         r6 += 0x10;
    0x00061228 cmp r3, r8                                        |         
                                                                 |         if (r3 <= r8) {
    0x0006122a ble 0x61278                                       |             goto label_241;
                                                                 |         }
    0x0006122c ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0006122e cmp r3, 0                                         |         
    0x00061230 bne 0x61210                                       |         
                                                                 |     }
    0x00061232 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061234 mov.w r2, 1                                       |     r2 = 1;
    0x00061238 strb r2, [r3]                                     |     *(r3) = r2;
    0x0006123a ldr.w r3, [fp, 8]                                 |     r3 = *(arg_8h);
    0x0006123e ldr.w sb, [r6, 8]                                 |     sb = *((r6 + 8));
    0x00061242 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061244 beq 0x6121e                                       |         goto label_71;
                                                                 |     }
    0x00061246 mov r2, r4                                        |     r2 = r4;
    0x00061248 mov r1, sb                                        |     r1 = sb;
    0x0006124a mov r0, fp                                        |     r0 = fp;
    0x0006124c bl 0x63a00                                        |     r0 = fcn_00063a00 (r0, r1);
    0x00061250 cmp r0, r4                                        |     
    0x00061252 mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r0 == r4) {
    0x00061254 beq 0x6121e                                       |         goto label_71;
                                                                 |     }
    0x00061256 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0006125a tst.w r3, 0x200000                                |     
    0x0006125e mov.w r3, 0                                       |     r3 = 0;
    0x00061262 str r3, [sp]                                      |     *(sp) = r3;
    0x00061264 it ne                                             |     
                                                                 |     if ((r3 & 0x200000) == 0) {
    0x00061266 movne r1, 0x4d                                    |         r1 = 0x4d;
                                                                 |     }
    0x00061268 ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
    0x0006126c mov r3, r4                                        |     r3 = r4;
    0x0006126e it eq                                             |     
                                                                 |     if ((r3 & 0x200000) != 0) {
    0x00061270 moveq r1, 0x4e                                    |         r1 = 0x4e;
                                                                 |     }
    0x00061272 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061276 b 0x6121e                                         |     goto label_71;
                                                                 | label_241:
    0x00061278 ldr.w r8, [sp, 0x3c]                              |     r8 = var_3ch;
    0x0006127c ldr.w sb, [sp, 0x7c]                              |     sb = var_7ch;
    0x00061280 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
                                                                 | label_240:
    0x00061282 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
                                                                 |     if (r1 != 0) {
    0x00061284 cbz r1, 0x6128c                                   |         
    0x00061286 ldr r2, [r1]                                      |         r2 = *(r1);
    0x00061288 adds r2, 1                                        |         r2++;
    0x0006128a str r2, [r1]                                      |         *(r1) = r2;
                                                                 |     }
    0x0006128c ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0006128e movs r1, 0x57                                     |     r1 = 0x57;
    0x00061290 ldr r6, [sp, 0x70]                                |     r6 = var_70h;
    0x00061292 mov r0, sl                                        |     r0 = sl;
    0x00061294 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x00061298 mvn r3, 8                                         |     r3 = ~8;
    0x0006129c mov r2, r6                                        |     r2 = r6;
    0x0006129e str r3, [sp, 8]                                   |     var_8h = r3;
    0x000612a0 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000612a2 bl 0x2b5f4                                        |     fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x000612a4 invalid                                           |     
    0x000612a8 eors r4, r5                                       |     r4 ^= r5;
    0x000612aa movs r3, 0                                        |     r3 = 0;
    0x000612ac movs r1, 0x10                                     |     r1 = 0x10;
    0x000612ae mov r0, sl                                        |     r0 = sl;
    0x000612b0 mov r5, r3                                        |     r5 = r3;
    0x000612b2 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x000612b4 str r2, [sp]                                      |     *(sp) = r2;
    0x000612b6 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000612ba ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x000612bc ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000612be ldr r3, [r1]                                      |     r3 = *(r1);
    0x000612c0 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x000612c2 str r3, [sp]                                      |     *(sp) = r3;
    0x000612c4 mov r3, r6                                        |     r3 = r6;
    0x000612c6 ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
    0x000612ca bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000612ce ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000612d0 movs r1, 0xc                                      |     r1 = 0xc;
    0x000612d2 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000612d4 mov r0, sl                                        |     r0 = sl;
    0x000612d6 str r5, [sp]                                      |     *(sp) = r5;
    0x000612d8 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000612dc ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000612de movs r1, 0x30                                     |     r1 = 0x30;
    0x000612e0 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x000612e2 mov r0, sl                                        |     r0 = sl;
    0x000612e4 str r5, [sp]                                      |     *(sp) = r5;
    0x000612e6 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000612ea ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x000612ec movs r1, 0xc                                      |     r1 = 0xc;
    0x000612ee ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x000612f0 mov r0, sl                                        |     r0 = sl;
    0x000612f2 str r5, [sp]                                      |     *(sp) = r5;
    0x000612f4 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000612f8 mov r1, r4                                        |     r1 = r4;
    0x000612fa ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x000612fe mov r0, sl                                        |     r0 = sl;
    0x00061300 bl 0x9894                                         |     fcn_00009894 (r0, r1, r2);
    0x00061304 ldr r4, [sp, 0x50]                                |     r4 = var_50h;
    0x00061306 mov r0, fp                                        |     r0 = fp;
    0x00061308 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x0006130a ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0006130c mov r1, r4                                        |     r1 = r4;
    0x0006130e mov r2, r6                                        |     r2 = r6;
    0x00061310 bl 0x6abe4                                        |     fcn_0006abe4 (r0, r1, r2, r3);
    0x00061314 mov r3, r4                                        |     r3 = r4;
    0x00061316 movs r2, 1                                        |     r2 = 1;
    0x00061318 movs r1, 0x45                                     |     r1 = 0x45;
    0x0006131a mov r0, sl                                        |     r0 = sl;
    0x0006131c str r5, [sp]                                      |     *(sp) = r5;
    0x0006131e bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061322 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00061324 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061326 beq.w 0x61452                                     |         goto label_242;
                                                                 |     }
    0x0006132a str r5, [sp]                                      |     *(sp) = r5;
    0x0006132c movs r1, 3                                        |     r1 = 3;
    0x0006132e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00061330 mov r0, sl                                        |     r0 = sl;
    0x00061332 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00061334 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                 | label_73:
    0x00061338 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006133a cbz r3, 0x61344                                   |         
    0x0006133c mov r1, r3                                        |         r1 = r3;
    0x0006133e mov r0, sb                                        |         r0 = sb;
    0x00061340 bl 0x18c5c                                        |         fcn_00018c5c (r0, r1);
                                                                 |     }
    0x00061344 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x00061346 movs r4, 0                                        |     r4 = 0;
    0x00061348 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0006134a movs r1, 0xc                                      |     r1 = 0xc;
    0x0006134c mov r0, sl                                        |     r0 = sl;
    0x0006134e str r4, [sp]                                      |     *(sp) = r4;
    0x00061350 mov r2, r5                                        |     r2 = r5;
    0x00061352 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061354 stc2l p9, c9, [r3, -0x4c]!                        |     __asm ("stc2l p9, c9, [r3, -0x4c]!");
    0x00061358 mov r0, sl                                        |     r0 = sl;
    0x0006135a bl 0x2b5b4                                        |     fcn_0002b5b4 (r0, r1, r2);
    0x0006135e ldr.w r6, [sl, 0x6c]                              |     r6 = *((sl + 0x6c));
    0x00061362 movs r2, 1                                        |     r2 = 1;
    0x00061364 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00061366 movs r1, 0x45                                     |     r1 = 0x45;
    0x00061368 mov r0, sl                                        |     r0 = sl;
    0x0006136a str r4, [sp]                                      |     *(sp) = r4;
    0x0006136c bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061370 mov r2, r5                                        |     r2 = r5;
    0x00061372 mov r3, r4                                        |     r3 = r4;
    0x00061374 movs r1, 0x41                                     |     r1 = 0x41;
    0x00061376 mov r0, sl                                        |     r0 = sl;
    0x00061378 str r4, [sp]                                      |     *(sp) = r4;
    0x0006137a str r5, [sp, 0x34]                                |     var_34h = r5;
    0x0006137c bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061380 ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x00061382 mov r0, sl                                        |     r0 = sl;
    0x00061384 bl 0x1c138                                        |     fcn_0001c138 (r0, r1);
    0x00061388 ldr.w r5, [sl, 0x6c]                              |     r5 = *((sl + 0x6c));
    0x0006138c movs r1, 0x30                                     |     r1 = 0x30;
    0x0006138e ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00061390 mov r0, sl                                        |     r0 = sl;
    0x00061392 str r4, [sp]                                      |     *(sp) = r4;
    0x00061394 adds r3, r5, 2                                    |     r3 = r5 + 2;
    0x00061396 adds r5, 1                                        |     r5++;
    0x00061398 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006139c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006139e mov r3, r4                                        |     r3 = r4;
    0x000613a0 movs r1, 0x41                                     |     r1 = 0x41;
    0x000613a2 mov r0, sl                                        |     r0 = sl;
    0x000613a4 str r4, [sp]                                      |     *(sp) = r4;
    0x000613a6 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000613aa ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000613ac ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
    0x000613b0 bl 0x2b090                                        |     fcn_0002b090 (r0, r1, r2);
    0x000613b4 mov r2, r5                                        |     r2 = r5;
    0x000613b6 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x000613b8 movs r3, 0x10                                     |     r3 = 0x10;
    0x000613ba mov r0, fp                                        |     r0 = fp;
    0x000613bc bl 0x6373c                                        |     fcn_0006373c (r0, r1, r2, r3, r4);
    0x000613c0 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x000613c2 add r3, sp, 0x84                                  |     r3 += var_84h;
    0x000613c4 mov.w r2, -1                                      |     r2 = -1;
    0x000613c8 mov r1, r7                                        |     r1 = r7;
    0x000613ca strd r5, r6, [sp, 8]                              |     __asm ("strd r5, r6, [var_8h]");
    0x000613ce str r0, [sp, 4]                                   |     var_4h = r0;
    0x000613d0 mov r0, fp                                        |     r0 = fp;
    0x000613d2 str r3, [sp]                                      |     *(sp) = r3;
    0x000613d4 add r3, sp, 0xcc                                  |     r3 += var_cch;
    0x000613d6 bl 0x69308                                        |     fcn_00069308 (r0, r1, r2, r3, r4, r5, r6);
    0x000613da ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000613dc mov r3, r4                                        |     r3 = r4;
    0x000613de movs r1, 0x41                                     |     r1 = 0x41;
    0x000613e0 mov r0, sl                                        |     r0 = sl;
    0x000613e2 str r4, [sp]                                      |     *(sp) = r4;
    0x000613e4 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000613e8 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x000613ea mov r0, sl                                        |     r0 = sl;
    0x000613ec bl 0x1c138                                        |     fcn_0001c138 (r0, r1);
    0x000613f0 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x000613f2 mov r0, fp                                        |     r0 = fp;
    0x000613f4 mov r1, r5                                        |     r1 = r5;
    0x000613f6 bl 0x300c4                                        |     fcn_000300c4 (r0, r1);
    0x000613fa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000613fc mov r2, r4                                        |     r2 = r4;
    0x000613fe movs r1, 0x45                                     |     r1 = 0x45;
    0x00061400 mov r0, sl                                        |     r0 = sl;
    0x00061402 str r4, [sp]                                      |     *(sp) = r4;
    0x00061404 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061408 mov r3, r4                                        |     r3 = r4;
    0x0006140a movs r1, 0x41                                     |     r1 = 0x41;
    0x0006140c ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0006140e mov r0, sl                                        |     r0 = sl;
    0x00061410 str r4, [sp]                                      |     *(sp) = r4;
    0x00061412 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061416 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x00061418 subs r3, r1, 1                                    |     r3 = r1 - 1;
    0x0006141a cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0006141c bhi 0x6142c                                       |         
    0x0006141e ldr r2, [r5, 0x28]                                |         r2 = *((r5 + 0x28));
    0x00061420 ldr.w r0, [fp, 8]                                 |         r0 = *(arg_8h);
    0x00061424 ldrd r2, r3, [r2, 0xc]                            |         __asm ("ldrd r2, r3, [r2, 0xc]");
    0x00061428 bl 0x1c5c4                                        |         fcn_0001c5c4 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
                                                                 | label_75:
    0x0006142c ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00061430 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00061434 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00061436 bmi.w 0x61044                                     |         goto label_72;
                                                                 |     }
    0x0006143a ldr r1, [sp, 0x58]                                |     r1 = var_58h;
    0x0006143c mvn r3, 3                                         |     r3 = ~3;
    0x00061440 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00061442 mul r1, r3, r1                                    |     r1 = r3 * r1;
    0x00061446 mov r3, r1                                        |     r3 = r1;
    0x00061448 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x0006144c str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
    0x0006144e b.w 0x60948                                       |     goto label_59;
                                                                 | label_242:
    0x00061452 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00061454 bl 0x2f5a0                                        |     fcn_0002f5a0 (r0, r1);
    0x00061458 ldr r1, [sp, 0x78]                                |     r1 = var_78h;
    0x0006145a mov r0, sl                                        |     r0 = sl;
    0x0006145c bl 0x1aa40                                        |     fcn_0001aa40 (r0, r1);
    0x00061460 b 0x61338                                         |     goto label_73;
                                                                 | label_114:
    0x00061462 blx 0x7e8c                                        |     fcn_00007e8c ();
                                                                 | label_183:
    0x00061466 ldrd ip, lr, [fp, 0x28]                           |     __asm ("ldrd ip, lr, [arg_28h]");
    0x0006146a movs r2, 1                                        |     r2 = 1;
    0x0006146c ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x0006146e movs r1, 0x45                                     |     r1 = 0x45;
    0x00061470 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00061472 add.w r3, lr, r2                                  |     r3 = lr + r2;
    0x00061476 add.w lr, lr, 2                                   |     lr += 2;
    0x0006147a str r3, [r6, 0x58]                                |     *((r6 + 0x58)) = r3;
    0x0006147c str.w lr, [fp, 0x2c]                              |     __asm ("str.w lr, [arg_2ch]");
    0x00061480 str.w lr, [r6, 0x5c]                              |     __asm ("str.w lr, [r6, 0x5c]");
    0x00061484 add.w lr, ip, r2                                  |     lr = ip + r2;
    0x00061488 str.w lr, [fp, 0x28]                              |     __asm ("str.w lr, [arg_28h]");
    0x0006148c str.w ip, [r6, 0x3c]                              |     __asm ("str.w ip, [r6, 0x3c]");
    0x00061490 str r4, [sp]                                      |     *(sp) = r4;
    0x00061492 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061496 mov r2, r4                                        |     r2 = r4;
    0x00061498 str r4, [sp]                                      |     *(sp) = r4;
    0x0006149a ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0006149c movs r1, 0x45                                     |     r1 = 0x45;
    0x0006149e ldr r3, [r6, 0x5c]                                |     r3 = *((r6 + 0x5c));
    0x000614a0 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000614a4 str r4, [sp]                                      |     *(sp) = r4;
    0x000614a6 movs r1, 0x64                                     |     r1 = 0x64;
    0x000614a8 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000614aa ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x000614ac ldr r2, [r6, 0x3c]                                |     r2 = *((r6 + 0x3c));
    0x000614ae bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000614b2 b.w 0x60814                                       |     goto label_74;
                                                                 | label_221:
    0x000614b6 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x000614b8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000614ba bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614be ldr r4, [r7, 0x1c]                                |     r4 = *((r7 + 0x1c));
    0x000614c0 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000614c2 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000614c4 bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614c8 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000614ca ldr r1, [r3]                                      |     r1 = *(r3);
    0x000614cc cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x000614ce bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614d2 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x000614d4 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x000614d6 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000614d8 bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614dc ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
    0x000614de ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000614e0 ldr r1, [r6, 0x38]                                |     r1 = *((r6 + 0x38));
    0x000614e2 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000614e4 bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614e8 ldrb r1, [r3]                                     |     r1 = *(r3);
    0x000614ea cmp r1, 0xa7                                      |     
                                                                 |     if (r1 != 0xa7) {
    0x000614ec bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614f0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000614f2 beq.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x000614f6 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000614f8 ldr r1, [r1, 0x28]                                |     r1 = *((r1 + 0x28));
    0x000614fa ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x000614fc ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x000614fe lsls r4, r1, 0x17                                 |     r4 = r1 << 0x17;
                                                                 |     if (r4 >= r1) {
    0x00061500 bpl.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x00061504 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00061506 movs r3, 2                                        |     
    0x00061508 movt r3, 0x100                                    |     r3 = 0x1000002;
    0x0006150c tst r3, r1                                        |     
                                                                 |     if ((r3 & r1) != 0) {
    0x0006150e bne.w 0x61890                                     |         goto label_243;
                                                                 |     }
    0x00061512 ldr r1, [r6, 0x48]                                |     r1 = *((r6 + 0x48));
    0x00061514 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00061518 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006151a beq.w 0x61c96                                     |         goto label_244;
                                                                 |     }
    0x0006151e bl 0xf364                                         |     r0 = fcn_0000f364 (r0, r1);
    0x00061522 mov r4, r0                                        |     r4 = r0;
                                                                 | label_109:
    0x00061524 ldr.w r3, [fp, 0x28]                              |     r3 = *(arg_28h);
    0x00061528 mov r1, r4                                        |     r1 = r4;
    0x0006152a ldr.w r0, [fp, 0x74]                              |     r0 = *(arg_74h);
    0x0006152e ldr r5, [r6, 0x1c]                                |     r5 = *((r6 + 0x1c));
    0x00061530 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00061532 adds r3, 1                                        |     r3++;
    0x00061534 cmp r0, 0                                         |     
    0x00061536 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00061538 moveq r0, fp                                      |         r0 = fp;
                                                                 |     }
    0x0006153a str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x0006153e bl 0x540f0                                        |     fcn_000540f0 (r0, r1);
    0x00061542 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00061544 mov r0, fp                                        |     r0 = fp;
    0x00061546 mov r1, r4                                        |     r1 = r4;
    0x00061548 str r3, [sp]                                      |     *(sp) = r3;
    0x0006154a movs r3, 0                                        |     r3 = 0;
    0x0006154c ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x0006154e bl 0x1b6bc                                        |     fcn_0001b6bc (r0, r1, r2, r3);
    0x00061552 ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
    0x00061554 lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
                                                                 |     if (r0 >= r3) {
    0x00061556 bpl.w 0x61872                                     |         goto label_245;
                                                                 |     }
    0x0006155a ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0006155c mov r3, r2                                        |     r3 = r2;
    0x0006155e mov r1, r2                                        |     r1 = r2;
                                                                 |     if (r2 != 0) {
    0x00061560 cbnz r2, 0x6156c                                  |         goto label_246;
                                                                 |     }
    0x00061562 b 0x61816                                         |     goto label_93;
                                                                 |     do {
    0x00061564 ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x00061566 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00061568 beq.w 0x6193e                                     |             goto label_247;
                                                                 |         }
                                                                 | label_246:
    0x0006156c ldrb.w r0, [r1, 0x37]                             |         r0 = *((r1 + 0x37));
    0x00061570 and r0, r0, 3                                     |         r0 &= 3;
    0x00061574 cmp r0, 2                                         |         
    0x00061576 bne 0x61564                                       |         
                                                                 |     } while (r0 != 2);
    0x00061578 ldr r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x0006157a str r1, [sp, 0x20]                                |     var_20h = r1;
    0x0006157c ldrb.w r2, [r2, 0x2d]                             |     r2 = *((r2 + 0x2d));
    0x00061580 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
                                                                 |     if (r0 < r2) {
    0x00061582 bmi 0x615b0                                       |         goto label_248;
                                                                 |     }
    0x00061584 mov r2, r1                                        |     r2 = r1;
                                                                 |     do {
                                                                 | label_94:
    0x00061586 ldrb.w r1, [r3, 0x37]                             |         r1 = *((r3 + 0x37));
    0x0006158a lsls r1, r1, 0x1d                                 |         r1 <<= 0x1d;
                                                                 |         if (r1 >= r1) {
    0x0006158c bmi 0x615a2                                       |             
    0x0006158e ldrsh.w r1, [r3, 0x30]                            |             r1 = *((r3 + 0x30));
    0x00061592 ldrsh.w r0, [r6, 0x30]                            |             r0 = *((r6 + 0x30));
    0x00061596 cmp r0, r1                                        |             
                                                                 |             if (r0 <= r1) {
    0x00061598 ble 0x615a2                                       |                 goto label_92;
                                                                 |             }
    0x0006159a ldr r0, [r3, 0x24]                                |             r0 = *((r3 + 0x24));
    0x0006159c cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0006159e beq.w 0x61860                                     |                 goto label_249;
                                                                 |             }
                                                                 |         }
                                                                 | label_92:
    0x000615a2 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000615a4 cmp r3, 0                                         |         
    0x000615a6 bne 0x61586                                       |         
                                                                 |     } while (r3 != 0);
    0x000615a8 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x000615aa cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000615ac beq.w 0x61816                                     |         goto label_93;
                                                                 |     }
                                                                 | label_248:
    0x000615b0 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x000615b2 mov r0, fp                                        |     r0 = fp;
    0x000615b4 ldr r5, [r1, 0x2c]                                |     r5 = *((r1 + 0x2c));
    0x000615b6 bl 0x2d384                                        |     fcn_0002d384 (r0, r1);
    0x000615ba movs r2, 1                                        |     r2 = 1;
    0x000615bc str r4, [sp]                                      |     *(sp) = r4;
    0x000615be mov r4, r0                                        |     r4 = r0;
    0x000615c0 str r2, [sp, 4]                                   |     var_4h = r2;
    0x000615c2 mov r3, r5                                        |     r3 = r5;
    0x000615c4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000615c6 movs r1, 0x62                                     |     r1 = 0x62;
    0x000615c8 mov r0, sl                                        |     r0 = sl;
    0x000615ca bl 0x2b694                                        |     fcn_0002b694 (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r4 != 0) {
    0x000615ce cbz r4, 0x615e0                                   |         
    0x000615d0 mov r2, r4                                        |         r2 = r4;
    0x000615d2 mvn r3, 8                                         |         r3 = ~8;
    0x000615d6 mov.w r1, -1                                      |         r1 = -1;
    0x000615da mov r0, sl                                        |         r0 = sl;
    0x000615dc bl 0x1be48                                        |         fcn_0001be48 (r0, r1, r2);
                                                                 |     }
    0x000615e0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000615e2 movs r4, 0                                        |     r4 = 0;
    0x000615e4 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000615e6 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x000615e8 mov r0, sl                                        |     r0 = sl;
    0x000615ea ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x000615ec mov r2, r5                                        |     r2 = r5;
    0x000615ee str r4, [sp]                                      |     *(sp) = r4;
    0x000615f0 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x000615f2 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000615f6 mov r3, r4                                        |     r3 = r4;
    0x000615f8 mov r2, r5                                        |     r2 = r5;
    0x000615fa movs r1, 0x76                                     |     r1 = 0x76;
    0x000615fc mov r0, sl                                        |     r0 = sl;
    0x000615fe str r4, [sp]                                      |     *(sp) = r4;
    0x00061600 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061604 ldrb.w r3, [fp, 0xc7]                             |     r3 = *(arg_c7h);
    0x00061608 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0006160a beq.w 0x617d2                                     |         goto label_250;
                                                                 |     }
                                                                 | label_88:
    0x0006160e ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00061610 movs r4, 0                                        |     r4 = 0;
    0x00061612 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00061614 mov r0, fp                                        |     r0 = fp;
    0x00061616 movs r3, 0x10                                     |     r3 = 0x10;
    0x00061618 str r4, [sp, 0xcc]                                |     var_cch = r4;
    0x0006161a mov r2, r5                                        |     r2 = r5;
    0x0006161c bl 0x6373c                                        |     fcn_0006373c (r0, r1, r2, r3, r4);
    0x00061620 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00061622 mov.w r2, -1                                      |     r2 = -1;
    0x00061626 mov r1, r7                                        |     r1 = r7;
    0x00061628 mov r0, fp                                        |     r0 = fp;
    0x0006162a strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [var_8h]");
    0x0006162e strd r4, r3, [sp]                                 |     __asm ("strd r4, r3, [sp]");
    0x00061632 mov r3, r4                                        |     r3 = r4;
    0x00061634 bl 0x69308                                        |     fcn_00069308 (r0, r1, r2, r3, r4, r5, r6);
    0x00061638 b 0x6142c                                         |     goto label_75;
                                                                 | label_201:
    0x0006163a ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0006163e ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061640 bl 0x1611c                                        |     fcn_0001611c (r0, r1);
    0x00061644 b.w 0x606c4                                       |     goto label_76;
                                                                 | label_222:
    0x00061648 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0006164a ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x0006164c ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0006164e cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00061650 blt.w 0x60b8e                                     |         goto label_77;
                                                                 |     }
    0x00061654 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00061656 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00061658 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0006165a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006165c beq.w 0x617cc                                     |         goto label_251;
                                                                 |     }
    0x00061660 ldr r4, [r2, 8]                                   |     r4 = *((r2 + 8));
                                                                 |     if (r4 != 0) {
    0x00061662 cbz r4, 0x61670                                   |         
    0x00061664 mov r1, r4                                        |         r1 = r4;
    0x00061666 mov r2, r3                                        |         r2 = r3;
    0x00061668 mov r0, sb                                        |         r0 = sb;
    0x0006166a bl 0x311ec                                        |         r0 = fcn_000311ec (r0, r1, r2, r3);
    0x0006166e mov r4, r0                                        |         r4 = r0;
                                                                 |     }
    0x00061670 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00061672 movs r2, 0                                        |     r2 = 0;
    0x00061674 mov r0, sb                                        |     r0 = sb;
    0x00061676 bl 0x314cc                                        |     fcn_000314cc (r0, r1, r2);
    0x0006167a mov r2, r4                                        |     r2 = r4;
    0x0006167c mov r1, r0                                        |     r1 = r0;
    0x0006167e mov r0, fp                                        |     r0 = fp;
    0x00061680 bl 0x1c2ac                                        |     r0 = fcn_0001c2ac (r0, r1, r2);
    0x00061684 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x00061686 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00061688 ite ne                                            |     
                                                                 |     if (r3 == r0) {
    0x0006168a movne r3, 0x500                                   |         r3 = 0x500;
                                                                 |     }
                                                                 |     if (r3 == r0) {
    0x0006168e movs r3, 0                                        |         r3 = 0;
                                                                 |     }
    0x00061690 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00061692 b.w 0x60b90                                       |     goto label_78;
                                                                 | label_234:
    0x00061696 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0006169a ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0006169c lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x0006169e itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x000616a0 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x000616a2 strbpl r3, [fp, 0x17]                             |         *(arg_17h) = r3;
                                                                 |     }
    0x000616a6 b 0x60fc4                                         |     goto label_79;
                                                                 | label_233:
    0x000616a8 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x000616aa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000616ac beq.w 0x5f968                                     |         goto label_52;
                                                                 |     }
    0x000616b0 ldr.w lr, [r4, 0x30]                              |     
    0x000616b4 cmp.w lr, 0                                       |     
                                                                 |     if (lr != 0) {
    0x000616b8 bne.w 0x5f7e4                                     |         goto label_7;
                                                                 |     }
    0x000616bc b.w 0x5f968                                       |     goto label_52;
                                                                 | label_231:
    0x000616c0 mov r2, r3                                        |     r2 = r3;
    0x000616c2 movs r1, 0x11                                     |     r1 = 0x11;
    0x000616c4 mov r0, sl                                        |     r0 = sl;
    0x000616c6 str r3, [sp]                                      |     *(sp) = r3;
    0x000616c8 bl 0x2add4                                        |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x000616cc str r0, [sp, 0x50]                                |     var_50h = r0;
    0x000616ce b.w 0x60e76                                       |     goto label_80;
                                                                 | label_225:
    0x000616d2 ldr r3, [pc, 0x344]                               |     
    0x000616d4 add r3, pc                                        |     r3 = 0xc30f2;
    0x000616d6 b.w 0x60c90                                       |     goto label_81;
                                                                 | label_224:
    0x000616da ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000616dc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000616de beq.w 0x61886                                     |         goto label_252;
                                                                 |     }
    0x000616e2 ldr.w r2, [sb, 0x4c]                              |     r2 = *((sb + 0x4c));
    0x000616e6 ands r2, r2, 4                                    |     r2 &= 4;
                                                                 |     if (r2 != r2) {
    0x000616ea bne.w 0x61cb6                                     |         goto label_253;
                                                                 |     }
    0x000616ee ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000616f0 ldrb.w r1, [r1, 0x30]                             |     r1 = *((r1 + 0x30));
    0x000616f4 lsls r5, r1, 0x1c                                 |     r5 = r1 << 0x1c;
    0x000616f6 ubfx r0, r1, 3, 1                                 |     r0 = (r1 >> 3) & ((1 << 1) - 1);
                                                                 |     if (r5 >= r1) {
    0x000616fa bpl 0x617c0                                       |         goto label_254;
                                                                 |     }
    0x000616fc ldr r1, [sp, 0xe0]                                |     r1 = var_e0h;
    0x000616fe mov r0, sl                                        |     r0 = sl;
    0x00061700 mov r5, r2                                        |     r5 = r2;
    0x00061702 str r2, [sp, 0xcc]                                |     var_cch = r2;
    0x00061704 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00061706 bl 0x1aa40                                        |     fcn_0001aa40 (r0, r1);
    0x0006170a ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006170e str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00061710 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00061712 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00061714 b 0x611f4                                         |     goto label_82;
                                                                 | label_237:
    0x00061716 ldr.w r4, [fp, 0x2c]                              |     r4 = *(arg_2ch);
    0x0006171a adds r4, 1                                        |     r4++;
    0x0006171c str.w r4, [fp, 0x2c]                              |     __asm ("str.w r4, [arg_2ch]");
    0x00061720 b 0x61140                                         |     goto label_83;
                                                                 | label_238:
    0x00061722 ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x00061726 adds r4, r3, 1                                    |     r4 = r3 + 1;
    0x00061728 str.w r4, [fp, 0x2c]                              |     __asm ("str.w r4, [arg_2ch]");
    0x0006172c b 0x611a2                                         |     goto label_84;
                                                                 | label_151:
    0x0006172e mov r1, r3                                        |     r1 = r3;
    0x00061730 b.w 0x5fca0                                       |     goto label_85;
                                                                 | label_236:
    0x00061734 cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x00061736 bne.w 0x6077c                                     |         goto label_70;
                                                                 |     }
    0x0006173a ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x0006173c ldr r1, [r2]                                      |     r1 = *(r2);
    0x0006173e ldr r6, [r1, 0x14]                                |     r6 = *((r1 + 0x14));
    0x00061740 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00061742 beq.w 0x60786                                     |         goto label_86;
                                                                 |     }
    0x00061746 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00061748 cmp r3, 1                                         |     
    0x0006174a str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 |     if (r3 != 1) {
    0x0006174c bne.w 0x60786                                     |         goto label_86;
                                                                 |     }
    0x00061750 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00061752 lsls r4, r3, 7                                    |     r4 = r3 << 7;
                                                                 |     if (r4 < r3) {
    0x00061754 bmi.w 0x60786                                     |         goto label_86;
                                                                 |     }
    0x00061758 ldr.w r3, [sb, 0x4c]                              |     r3 = *((sb + 0x4c));
    0x0006175c lsls r0, r3, 0xf                                  |     r0 = r3 << 0xf;
                                                                 |     if (r0 < r3) {
    0x0006175e bmi.w 0x60786                                     |         goto label_86;
                                                                 |     }
    0x00061762 ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x00061764 ldr r4, [pc, 0x2b4]                               |     
    0x00061766 ldr r1, [pc, 0x2b8]                               |     
    0x00061768 add.w ip, r0, -1                                  |     
    0x0006176c add r4, pc                                        |     r4 = 0xc318c;
    0x0006176e add r1, pc                                        |     r1 = 0xc3194;
                                                                 |     do {
                                                                 | label_110:
    0x00061770 ldrb r3, [ip, 1]!                                 |         r3 = *((ip += 1));
    0x00061774 ldrb r2, [r4], 1                                  |         r2 = *(r4);
                                                                 |         r4++;
    0x00061778 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0006177a beq.w 0x61ca0                                     |             goto label_255;
                                                                 |         }
    0x0006177e add r3, r1                                        |         r3 += r1;
    0x00061780 add r2, r1                                        |         r2 += r1;
    0x00061782 ldrb.w lr, [r3, 0x140]                            |         
    0x00061786 ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x0006178a cmp lr, r3                                        |         
    0x0006178c beq 0x61770                                       |         
                                                                 |     } while (lr == r3);
    0x0006178e ldr r1, [pc, 0x294]                               |     
    0x00061790 add r1, pc                                        |     r1 = 0xc31ba;
    0x00061792 bl 0x8940                                         |     r0 = fcn_00008940 (r0);
    0x00061796 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00061798 bne.w 0x60782                                     |         goto label_87;
                                                                 |     }
    0x0006179c movs r4, 1                                        |     r4 = 1;
    0x0006179e movs r3, 2                                        |     r3 = 2;
    0x000617a0 str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_111:
    0x000617a2 mov r1, r6                                        |     r1 = r6;
    0x000617a4 movs r2, 0                                        |     r2 = 0;
    0x000617a6 mov r0, sb                                        |     r0 = sb;
    0x000617a8 bl 0x314cc                                        |     r0 = fcn_000314cc (r0, r1, r2);
    0x000617ac mov r8, r0                                        |     r8 = r0;
                                                                 |     if (r0 != 0) {
    0x000617ae cbz r0, 0x617b2                                   |         
    0x000617b0 strb r4, [r0, 0x10]                               |         *((r0 + 0x10)) = r4;
                                                                 |     }
    0x000617b2 ldrb.w r3, [sp, 0x30]                             |     r3 = var_30h;
    0x000617b6 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000617b8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000617ba ldr r2, [r3, 0x2c]                                |     r2 = *((r3 + 0x2c));
    0x000617bc b.w 0x6077c                                       |     goto label_70;
                                                                 | label_254:
    0x000617c0 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x000617c4 mov r5, r0                                        |     r5 = r0;
    0x000617c6 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000617c8 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x000617ca b 0x611f4                                         |     goto label_82;
                                                                 | label_251:
    0x000617cc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000617ce b.w 0x60b8e                                       |     goto label_77;
                                                                 | label_250:
    0x000617d2 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x000617d4 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000617d6 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
                                                                 |     if (r2 < r2) {
    0x000617d8 bpl 0x617e8                                       |         
    0x000617da ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000617dc ldrb.w r2, [r2, 0x37]                             |         r2 = *((r2 + 0x37));
    0x000617e0 and r2, r2, 3                                     |         r2 &= 3;
    0x000617e4 cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x000617e6 beq 0x61858                                       |             goto label_256;
                                                                 |         }
                                                                 |     }
    0x000617e8 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000617ea ldr r1, [r2]                                      |     r1 = *(r2);
    0x000617ec ldr r2, [pc, 0x238]                               |     
    0x000617ee add r2, pc                                        |     r2 = 0xc321a;
                                                                 | label_91:
    0x000617f0 strd r2, r1, [sp]                                 |     __asm ("strd r2, r1, [sp]");
    0x000617f4 mov r0, fp                                        |     r0 = fp;
    0x000617f6 ldr r2, [pc, 0x234]                               |     
    0x000617f8 movs r1, 0                                        |     r1 = 0;
    0x000617fa add r2, pc                                        |     r2 = 0xc322c;
    0x000617fc bl 0x2e274                                        |     fcn_0002e274 (r0, r1);
    0x00061800 b 0x6160e                                         |     goto label_88;
                                                                 | label_138:
    0x00061802 str r1, [sp, 0x40]                                |     var_40h = r1;
    0x00061804 b.w 0x5f9a4                                       |     goto label_89;
                                                                 | label_227:
    0x00061808 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0006180a b.w 0x60cc4                                       |     goto label_90;
                                                                 | label_226:
    0x0006180e ldr r3, [pc, 0x220]                               |     
    0x00061810 add r3, pc                                        |     r3 = 0xc3246;
    0x00061812 b.w 0x60c90                                       |     goto label_81;
                                                                 | label_93:
    0x00061816 mov r3, r5                                        |     r3 = r5;
    0x00061818 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0006181a movs r2, 1                                        |     r2 = 1;
    0x0006181c movs r1, 0x62                                     |     r1 = 0x62;
    0x0006181e str r4, [sp]                                      |     *(sp) = r4;
    0x00061820 mov r0, sl                                        |     r0 = sl;
    0x00061822 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00061824 mov r2, r5                                        |     r2 = r5;
    0x00061826 bl 0x2b694                                        |     fcn_0002b694 (r0, r1, r2, r3, r4, r5);
    0x0006182a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0006182c movs r4, 0                                        |     r4 = 0;
    0x0006182e mov r2, r5                                        |     r2 = r5;
    0x00061830 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00061832 mov r0, sl                                        |     r0 = sl;
    0x00061834 ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x00061836 str r4, [sp]                                      |     *(sp) = r4;
    0x00061838 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0006183a bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006183e mov r3, r4                                        |     r3 = r4;
    0x00061840 mov r2, r5                                        |     r2 = r5;
    0x00061842 movs r1, 0x76                                     |     r1 = 0x76;
    0x00061844 mov r0, sl                                        |     r0 = sl;
    0x00061846 str r4, [sp]                                      |     *(sp) = r4;
    0x00061848 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006184c ldrb.w r3, [fp, 0xc7]                             |     r3 = *(arg_c7h);
    0x00061850 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00061852 bne.w 0x6160e                                     |         goto label_88;
                                                                 |     }
    0x00061856 ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 | label_256:
    0x00061858 ldr r2, [pc, 0x1d8]                               |     
    0x0006185a add r2, pc                                        |     r2 = 0xc3292;
    0x0006185c mov r1, r2                                        |     r1 = r2;
    0x0006185e b 0x617f0                                         |     goto label_91;
                                                                 | label_249:
    0x00061860 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00061862 beq.w 0x61cf2                                     |         goto label_257;
                                                                 |     }
    0x00061866 ldrsh.w r0, [r2, 0x30]                            |     r0 = *((r2 + 0x30));
    0x0006186a cmp r0, r1                                        |     
    0x0006186c it gt                                             |     
                                                                 |     if (r0 <= r1) {
    0x0006186e movgt r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x00061870 b 0x615a2                                         |     goto label_92;
                                                                 | label_245:
    0x00061872 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00061874 ldrb.w r3, [r3, 0x2d]                             |     r3 = *((r3 + 0x2d));
    0x00061878 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 < r3) {
    0x0006187a bmi 0x61816                                       |         goto label_93;
                                                                 |     }
    0x0006187c ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0006187e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061880 beq 0x61816                                       |         goto label_93;
                                                                 |     }
    0x00061882 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00061884 b 0x61586                                         |     goto label_94;
                                                                 | label_252:
    0x00061886 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x0006188a ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0006188c str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0006188e b 0x611f4                                         |     goto label_82;
                                                                 | label_243:
    0x00061890 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061892 ldr r4, [r3, 0x24]                                |     r4 = *((r3 + 0x24));
                                                                 |     if (r4 == 0) {
    0x00061894 cbz r4, 0x618cc                                   |         goto label_258;
                                                                 |     }
    0x00061896 ldr.w ip, [sp, 0x1c]                              |     ip = var_1ch;
    0x0006189a movs r1, 0                                        |     r1 = 0;
    0x0006189c movs r6, 0x14                                     |     r6 = 0x14;
    0x0006189e b 0x618c0                                         |     
                                                                 |     while (r1 < r2) {
    0x000618a0 mul r3, r6, r1                                    |         r3 = r6 * r1;
    0x000618a4 ldr.w lr, [ip, 0x28]                              |         
    0x000618a8 ldr.w r4, [lr, r3]                                |         r4 = *((lr + r3));
    0x000618ac add r3, lr                                        |         r3 += lr;
    0x000618ae ldr r4, [r4, 4]                                   |         r4 = *((r4 + 4));
    0x000618b0 ands r4, r4, 0x1000000                            |         r4 &= 0x1000000;
                                                                 |         if (r4 == r4) {
    0x000618b4 bne 0x618be                                       |             
    0x000618b6 ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x000618b8 ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x000618ba lsls r3, r3, 0x1a                                 |             r3 <<= 0x1a;
                                                                 |             if (r3 < r3) {
    0x000618bc bmi 0x618d0                                       |                 goto label_96;
                                                                 |             }
                                                                 |         }
    0x000618be adds r1, 1                                        |         r1++;
    0x000618c0 cmp r1, r2                                        |         
    0x000618c2 blt 0x618a0                                       |         
                                                                 |     }
                                                                 |     if (r1 == r2) {
    0x000618c4 beq 0x6196e                                       |         goto label_259;
                                                                 |     }
    0x000618c6 movs r4, 0                                        |     r4 = 0;
    0x000618c8 mov r6, r4                                        |     r6 = r4;
    0x000618ca b 0x618d2                                         |     goto label_97;
                                                                 | label_258:
    0x000618cc cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x000618ce beq 0x61952                                       |         goto label_260;
                                                                 |     }
                                                                 | label_96:
    0x000618d0 mov r6, r4                                        |     r6 = r4;
                                                                 | label_97:
    0x000618d2 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000618d4 mov r0, fp                                        |     r0 = fp;
    0x000618d6 bl 0x300c4                                        |     fcn_000300c4 (r0, r1);
    0x000618da ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000618dc mov r1, r5                                        |     r1 = r5;
    0x000618de ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000618e0 mov r0, fp                                        |     r0 = fp;
    0x000618e2 str r3, [sp]                                      |     *(sp) = r3;
    0x000618e4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000618e6 orrs r3, r6                                       |     r3 |= r6;
    0x000618e8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000618ea movs r3, 0                                        |     r3 = 0;
    0x000618ec str r3, [sp, 8]                                   |     var_8h = r3;
    0x000618ee mov r3, r8                                        |     r3 = r8;
    0x000618f0 bl 0x6b788                                        |     r0 = fcn_0006b788 (r0, r1, r2, r3, r4, r5, r6);
    0x000618f4 mov r5, r0                                        |     r5 = r0;
    0x000618f6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000618f8 beq.w 0x61062                                     |         goto label_95;
                                                                 |     }
    0x000618fc ldrb.w r6, [r0, 0x2f]                             |     r6 = *((r0 + 0x2f));
    0x00061900 mov r1, r4                                        |     r1 = r4;
    0x00061902 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00061904 mov r0, fp                                        |     r0 = fp;
    0x00061906 mov r3, r6                                        |     r3 = r6;
    0x00061908 bl 0x6abe4                                        |     fcn_0006abe4 (r0, r1, r2, r3);
    0x0006190c subs r3, r6, 1                                    |     r3 = r6 - 1;
    0x0006190e cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x00061910 bhi 0x61924                                       |         
    0x00061912 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00061914 mov r1, r6                                        |         r1 = r6;
    0x00061916 ldr.w r0, [fp, 8]                                 |         r0 = *(arg_8h);
    0x0006191a ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x0006191c ldrd r2, r3, [r2, 0xc]                            |         __asm ("ldrd r2, r3, [r2, 0xc]");
    0x00061920 bl 0x1c5c4                                        |         fcn_0001c5c4 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
    0x00061924 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00061926 bne 0x619c6                                       |         goto label_261;
                                                                 |     }
                                                                 | label_99:
    0x00061928 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
                                                                 |     if (r3 != 0) {
    0x0006192a cbnz r3, 0x61986                                  |         goto label_262;
                                                                 |     }
                                                                 | label_98:
    0x0006192c mov r0, r5                                        |     r0 = r5;
    0x0006192e bl 0x2f5a0                                        |     fcn_0002f5a0 (r0, r1);
    0x00061932 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061934 ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
    0x00061938 bl 0x2b090                                        |     fcn_0002b090 (r0, r1, r2);
    0x0006193c b 0x6160e                                         |     goto label_88;
                                                                 | label_247:
    0x0006193e ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00061940 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x00061942 ldrb.w r3, [r3, 0x2d]                             |     r3 = *((r3 + 0x2d));
    0x00061946 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 < r3) {
    0x00061948 bmi.w 0x61816                                     |         goto label_93;
                                                                 |     }
    0x0006194c mov r3, r2                                        |     r3 = r2;
    0x0006194e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00061950 b 0x61586                                         |     goto label_94;
                                                                 | label_260:
    0x00061952 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061954 ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x00061956 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00061958 cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x0006195a blt 0x618d0                                       |         goto label_96;
                                                                 |     }
    0x0006195c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006195e ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x00061960 cmp r3, 0                                         |     
    0x00061962 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00061964 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x00061966 movne r6, 0x500                                   |         r6 = 0x500;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0006196a movs r6, 0                                        |         r6 = 0;
                                                                 |     }
    0x0006196c b 0x618d2                                         |     goto label_97;
                                                                 | label_259:
    0x0006196e adds r4, r0, 1                                    |     r4 = r0 + 1;
    0x00061970 movs r2, 0                                        |     r2 = 0;
    0x00061972 str.w r4, [fp, 0x2c]                              |     __asm ("str.w r4, [arg_2ch]");
    0x00061976 mov r3, r4                                        |     r3 = r4;
    0x00061978 movs r1, 0x45                                     |     r1 = 0x45;
    0x0006197a mov r0, sl                                        |     r0 = sl;
    0x0006197c str r2, [sp]                                      |     *(sp) = r2;
    0x0006197e mov r6, r2                                        |     r6 = r2;
    0x00061980 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x00061984 b 0x618d2                                         |     goto label_97;
                                                                 | label_262:
    0x00061986 ldrb.w r3, [r5, 0x30]                             |     r3 = *((r5 + 0x30));
    0x0006198a lsls r4, r3, 0x1d                                 |     r4 = r3 << 0x1d;
                                                                 |     if (r4 >= r3) {
    0x0006198c bpl 0x6192c                                       |         goto label_98;
                                                                 |     }
    0x0006198e ldrsb.w r3, [r5, 0x2d]                            |     r3 = *((r5 + 0x2d));
    0x00061992 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061994 beq 0x6192c                                       |         goto label_98;
                                                                 |     }
    0x00061996 ldrb.w r3, [r5, 0x2c]                             |     r3 = *((r5 + 0x2c));
    0x0006199a add.w r4, r5, 0x338                               |     r4 = r5 + 0x338;
    0x0006199e movs r1, 0x58                                     |     r1 = 0x58;
    0x000619a0 subs r3, 1                                        |     r3--;
    0x000619a2 b 0x619b2                                         |     
                                                                 |     while (r6 != r3) {
    0x000619a4 mul r2, r1, r3                                    |         r2 = r1 * r3;
    0x000619a8 ldr r0, [r4, r2]                                  |         r0 = *((r4 + r2));
    0x000619aa ldr r0, [r0, 0x24]                                |         r0 = *((r0 + 0x24));
    0x000619ac lsls r0, r0, 0x1d                                 |         r0 <<= 0x1d;
                                                                 |         if (r0 < r0) {
    0x000619ae bmi 0x619d8                                       |             goto label_263;
                                                                 |         }
    0x000619b0 subs r3, 1                                        |         r3--;
    0x000619b2 adds r6, r3, 1                                    |         r6 = r3 + 1;
    0x000619b4 bne 0x619a4                                       |         
                                                                 |     }
    0x000619b6 movs r2, 0                                        |     r2 = 0;
    0x000619b8 movs r1, 0xb                                      |     r1 = 0xb;
    0x000619ba str r2, [sp]                                      |     *(sp) = r2;
    0x000619bc mov r0, sl                                        |     r0 = sl;
    0x000619be ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x000619c0 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000619c4 b 0x6192c                                         |     goto label_98;
                                                                 | label_261:
    0x000619c6 movs r2, 0                                        |     r2 = 0;
    0x000619c8 mov r3, r4                                        |     r3 = r4;
    0x000619ca str r2, [sp]                                      |     *(sp) = r2;
    0x000619cc movs r1, 0x45                                     |     r1 = 0x45;
    0x000619ce movs r2, 1                                        |     r2 = 1;
    0x000619d0 mov r0, sl                                        |     r0 = sl;
    0x000619d2 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000619d6 b 0x61928                                         |     goto label_99;
                                                                 | label_263:
    0x000619d8 adds r3, r5, r2                                   |     r3 = r5 + r2;
    0x000619da movs r2, 0                                        |     r2 = 0;
    0x000619dc str r2, [sp]                                      |     *(sp) = r2;
    0x000619de movs r1, 0xb                                      |     r1 = 0xb;
    0x000619e0 ldr.w r3, [r3, 0x300]                             |     r3 = *((r3 + 0x300));
    0x000619e4 mov r0, sl                                        |     r0 = sl;
    0x000619e6 bl 0x2ae1c                                        |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x000619ea b 0x6192c                                         |     goto label_98;
                                                                 | label_239:
    0x000619ec ldr r1, [sp, 0xe0]                                |     r1 = var_e0h;
    0x000619ee mov r0, sl                                        |     r0 = sl;
    0x000619f0 str r3, [sp, 0xcc]                                |     var_cch = r3;
    0x000619f2 bl 0x1aa40                                        |     fcn_0001aa40 (r0, r1);
    0x000619f6 b.w 0x611d6                                       |     goto label_100;
                                                                 | label_145:
    0x00061a38 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00061a3a ldr r5, [sp, 0x50]                                |     r5 = var_50h;
                                                                 |     if (r3 != 0) {
    0x00061a3c cbz r3, 0x61a46                                   |         
    0x00061a3e mov r1, r3                                        |         r1 = r3;
    0x00061a40 mov r0, sl                                        |         r0 = sl;
    0x00061a42 bl 0x159dc                                        |         fcn_000159dc (r0, r1);
                                                                 |     }
    0x00061a46 ldrb.w r3, [sl, 0x53]                             |     r3 = *((sl + 0x53));
    0x00061a4a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061a4c bne.w 0x61c5a                                     |         goto label_264;
                                                                 |     }
    0x00061a50 movs r3, 0x48                                     |     r3 = 0x48;
    0x00061a52 mla r3, r3, r8, r5                                |     __asm ("mla r3, r3, r8, r5");
    0x00061a56 ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
                                                                 |     if (r6 != 0) {
    0x00061a58 cbz r6, 0x61a70                                   |         
    0x00061a5a ldr r3, [r6, 0x20]                                |         r3 = *((r6 + 0x20));
    0x00061a5c cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00061a5e beq.w 0x61cc6                                     |             goto label_265;
                                                                 |         }
    0x00061a62 subs r3, 1                                        |         r3--;
    0x00061a64 str r3, [r6, 0x20]                                |         *((r6 + 0x20)) = r3;
                                                                 | label_112:
    0x00061a66 movs r3, 0x48                                     |         r3 = 0x48;
    0x00061a68 movs r2, 0                                        |         r2 = 0;
    0x00061a6a mla r3, r3, r8, r5                                |         __asm ("mla r3, r3, r8, r5");
    0x00061a6e str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
                                                                 |     }
    0x00061a70 ldr r2, [pc, 0x298]                               |     
    0x00061a72 movs r3, 0x48                                     |     r3 = 0x48;
    0x00061a74 mul r3, r3, r8                                    |     r3 *= r8;
    0x00061a78 ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x00061a7a mov r4, r7                                        |     r4 = r7;
    0x00061a7c str r7, [sp, 0x54]                                |     var_54h = r7;
    0x00061a7e add r2, pc                                        |     r2 = 0xc378e;
    0x00061a80 str r5, [sp, 0x6c]                                |     var_6ch = r5;
    0x00061a82 str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00061a84 mov.w r2, -1                                      |     r2 = -1;
    0x00061a88 str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x00061a8a add r2, sp, 0xac                                  |     r2 += var_ach;
    0x00061a8c mov r7, r2                                        |     r7 = r2;
    0x00061a8e str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00061a90 adds r3, 8                                        |     r3 += 8;
    0x00061a92 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00061a94 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00061a96 str.w r8, [sp, 0x50]                              |     __asm ("str.w r8, [var_50h]");
    0x00061a9a str.w sl, [sp, 0x3c]                              |     __asm ("str.w sl, [var_3ch]");
                                                                 | label_101:
    0x00061a9e ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00061aa0 ldr.w r8, [r6, 0x20]                              |     r8 = *((r6 + 0x20));
    0x00061aa4 ldr r5, [r4, 0x20]                                |     r5 = *((r4 + 0x20));
    0x00061aa6 cmp r3, r4                                        |     
    0x00061aa8 ittte eq                                          |     
                                                                 |     if (r3 != r4) {
    0x00061aaa ldreq r2, [sp, 0x6c]                              |         r2 = var_6ch;
                                                                 |     }
                                                                 |     if (r3 != r4) {
    0x00061aac moveq r3, 0x48                                    |         r3 = 0x48;
                                                                 |     }
                                                                 |     if (r3 != r4) {
    0x00061aae ldreq r1, [sp, 0x50]                              |         r1 = var_50h;
                                                                 |     }
                                                                 |     if (r3 == r4) {
    0x00061ab0 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00061ab2 ldr.w sb, [r8]                                    |     sb = *(r8);
    0x00061ab6 itt eq                                            |     
                                                                 |     if (r3 == r4) {
    0x00061ab8 mlaeq r3, r3, r1, r2                              |         __asm ("mlaeq r3, r3, r1, r2");
                                                                 |     }
                                                                 |     if (r3 == r4) {
    0x00061abc ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
                                                                 |     }
    0x00061ac0 cmp.w sb, 1                                       |     
    0x00061ac4 str r3, [sp, 0x58]                                |     var_58h = r3;
                                                                 |     if (sb > 1) {
    0x00061ac6 bgt.w 0x61c40                                     |         goto label_266;
                                                                 |     }
                                                                 |     if (sb != 1) {
    0x00061aca bne 0x61b22                                       |         goto label_267;
                                                                 |     }
                                                                 | label_105:
    0x00061acc ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00061ace add.w r8, r8, 8                                   |     r8 += 8;
    0x00061ad2 add.w sl, r5, r3                                  |     sl = r5 + r3;
    0x00061ad6 movs r3, 0                                        |     r3 = 0;
    0x00061ad8 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00061ada mov r3, r7                                        |     r3 = r7;
    0x00061adc mov r7, r6                                        |     r7 = r6;
    0x00061ade mov r6, r4                                        |     r6 = r4;
    0x00061ae0 mov r4, sl                                        |     r4 = sl;
    0x00061ae2 mov sl, r3                                        |     sl = r3;
                                                                 |     do {
    0x00061ae4 ldr r1, [r4, 0x38]                                |         r1 = *((r4 + 0x38));
                                                                 |         if (r1 != 0) {
    0x00061ae6 cbz r1, 0x61aee                                   |             
    0x00061ae8 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x00061aea bl 0x17b14                                        |             fcn_00017b14 (r0, r1, r2);
                                                                 |         }
    0x00061aee ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00061af0 mov r1, r8                                        |         r1 = r8;
    0x00061af2 movs r2, 0x48                                     |         r2 = 0x48;
    0x00061af4 add.w r0, r4, 8                                   |         r0 = r4 + 8;
    0x00061af8 adds r4, 0x48                                     |         r4 += 0x48;
    0x00061afa adds r3, 1                                        |         r3++;
    0x00061afc str r3, [sp, 0x48]                                |         var_48h = r3;
    0x00061afe blx 0x7dcc                                        |         fcn_00007dcc ();
    0x00061b02 ldr.w r3, [r8, 0x28]                              |         r3 = *((r8 + 0x28));
    0x00061b06 mov r0, r8                                        |         r0 = r8;
    0x00061b08 movs r2, 0x48                                     |         r2 = 0x48;
    0x00061b0a movs r1, 0                                        |         r1 = 0;
    0x00061b0c add.w r8, r8, 0x48                                |         r8 += 0x48;
    0x00061b10 str r3, [sp, 0x4c]                                |         var_4ch = r3;
    0x00061b12 blx 0x8264                                        |         fcn_00008264 ();
    0x00061b16 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00061b18 cmp sb, r3                                        |         
    0x00061b1a bgt 0x61ae4                                       |         
                                                                 |     } while (sb > r3);
    0x00061b1c mov r4, r6                                        |     r4 = r6;
    0x00061b1e mov r6, r7                                        |     r6 = r7;
    0x00061b20 mov r7, sl                                        |     r7 = sl;
                                                                 | label_267:
    0x00061b22 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00061b24 movs r3, 0x48                                     |     r3 = 0x48;
    0x00061b26 mla r3, r3, r2, r5                                |     __asm ("mla r3, r3, r2, r5");
    0x00061b2a ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00061b2c strb.w r2, [r3, 0x2c]                             |     *((r3 + 0x2c)) = r2;
    0x00061b30 ldr r2, [r6, 0x30]                                |     r2 = *((r6 + 0x30));
                                                                 |     if (r2 != 0) {
    0x00061b32 cbz r2, 0x61b3e                                   |         
    0x00061b34 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00061b36 ands r3, r3, 0x400000                             |         r3 &= 0x400000;
                                                                 |         if (r3 == r3) {
    0x00061b3a beq.w 0x61c74                                     |             goto label_268;
                                                                 |         }
                                                                 |     }
                                                                 | label_108:
    0x00061b3e movs r3, 0                                        |     r3 = 0;
    0x00061b40 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x00061b42 str r3, [r6, 0x24]                                |     *((r6 + 0x24)) = r3;
    0x00061b44 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00061b46 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061b48 bne.w 0x61c66                                     |         goto label_269;
                                                                 |     }
                                                                 |     if (r2 != 0) {
                                                                 | label_107:
    0x00061b4c cbz r2, 0x61b5e                                   |         
    0x00061b4e ldr r3, [r4, 0x24]                                |         r3 = *((r4 + 0x24));
    0x00061b50 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00061b52 beq 0x61c3c                                       |             goto label_270;
                                                                 |         }
    0x00061b54 movs r1, 0x2c                                     |         r1 = 0x2c;
    0x00061b56 mov r0, fp                                        |         r0 = fp;
    0x00061b58 bl 0x264f8                                        |         fcn_000264f8 (r0, r1, r2, r3);
    0x00061b5c str r0, [r4, 0x24]                                |         *((r4 + 0x24)) = r0;
                                                                 |     }
                                                                 | label_104:
    0x00061b5e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00061b60 ldrb.w r2, [r3, 0x53]                             |     r2 = *((r3 + 0x53));
    0x00061b64 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00061b66 beq 0x61c1e                                       |         goto label_271;
                                                                 |     }
                                                                 | label_103:
    0x00061b68 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00061b6a and r2, r3, 0x100                                 |     r2 = r3 & 0x100;
    0x00061b6e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00061b70 orrs r3, r2                                       |     r3 |= r2;
    0x00061b72 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00061b74 ldr r3, [r6, 0x3c]                                |     r3 = *((r6 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x00061b76 cbz r3, 0x61b7e                                   |         
    0x00061b78 str r3, [r4, 0x3c]                                |         *((r4 + 0x3c)) = r3;
    0x00061b7a movs r3, 0                                        |         r3 = 0;
    0x00061b7c str r3, [r6, 0x3c]                                |         *((r6 + 0x3c)) = r3;
                                                                 |     }
    0x00061b7e cmp.w sb, 0                                       |     
                                                                 |     if (sb <= 0) {
    0x00061b82 ble 0x61bbe                                       |         goto label_272;
                                                                 |     }
    0x00061b84 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00061b86 add r5, r3                                        |     r5 += r3;
    0x00061b88 movs r3, 0                                        |     r3 = 0;
    0x00061b8a mov r8, r3                                        |     r8 = r3;
                                                                 |     do {
    0x00061b8c ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
                                                                 |         if (r3 != 0) {
    0x00061b8e cbz r3, 0x61bb4                                   |             
    0x00061b90 movs r3, 0                                        |             r3 = 0;
    0x00061b92 mov r1, r4                                        |             r1 = r4;
    0x00061b94 strd r3, r3, [r7]                                 |             __asm ("strd r3, r3, [r7]");
    0x00061b98 mov r0, r7                                        |             r0 = r7;
    0x00061b9a strd r3, r3, [r7, 8]                              |             __asm ("strd r3, r3, [var_b4h]");
    0x00061b9e strd r3, r3, [r7, 0x10]                           |             __asm ("strd r3, r3, [var_c0h]");
    0x00061ba2 ldr r3, [sp, 0x64]                                |             r3 = var_64h;
    0x00061ba4 str r5, [sp, 0xc4]                                |             var_c4h = r5;
    0x00061ba6 str r3, [sp, 0xb0]                                |             var_b0h = r3;
    0x00061ba8 ldr r3, [sp, 0x38]                                |             r3 = var_38h;
    0x00061baa str r3, [sp, 0xb4]                                |             var_b4h = r3;
    0x00061bac vstr d8, [r5, 0x38]                               |             __asm ("vstr d8, [r5, 0x38]");
    0x00061bb0 bl 0x30ca4                                        |             fcn_00030ca4 (r0, r1, r2, r3, r4);
                                                                 |         }
    0x00061bb4 add.w r8, r8, 1                                   |         r8++;
    0x00061bb8 adds r5, 0x48                                     |         r5 += 0x48;
    0x00061bba cmp sb, r8                                        |         
    0x00061bbc bne 0x61b8c                                       |         
                                                                 |     } while (sb != r8);
                                                                 | label_272:
    0x00061bbe ldr r4, [r4, 0x34]                                |     r4 = *((r4 + 0x34));
    0x00061bc0 ldr r6, [r6, 0x34]                                |     r6 = *((r6 + 0x34));
    0x00061bc2 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00061bc4 bne.w 0x61a9e                                     |         goto label_101;
                                                                 |     }
                                                                 |     do {
    0x00061bc8 ldr r3, [pc, 0x144]                               |         
    0x00061bca ldr.w sl, [sp, 0x3c]                              |         sl = var_3ch;
    0x00061bce ldr r7, [sp, 0x54]                                |         r7 = var_54h;
    0x00061bd0 add r3, pc                                        |         r3 = 0xc38e4;
    0x00061bd2 str.w fp, [sp, 0xac]                              |         __asm ("str.w fp, [var_ach]");
    0x00061bd6 str r3, [sp, 0xb0]                                |         var_b0h = r3;
    0x00061bd8 ldr r3, [pc, 0x138]                               |         
    0x00061bda add r3, pc                                        |         r3 = 0xc38f2;
    0x00061bdc str r3, [sp, 0xb4]                                |         var_b4h = r3;
    0x00061bde movs r3, 0                                        |         r3 = 0;
    0x00061be0 strd r3, r3, [sp, 0xb8]                           |         __asm ("strd r3, r3, [var_b8h]");
    0x00061be4 strd r3, r3, [sp, 0xc0]                           |         __asm ("strd r3, r3, [var_c4h]");
    0x00061be8 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
                                                                 |         if (r3 != 0) {
    0x00061bea cbz r3, 0x61c00                                   |             
    0x00061bec ldr r4, [sp, 0x44]                                |             r4 = var_44h;
    0x00061bee ldr r0, [sp, 0x68]                                |             r0 = var_68h;
    0x00061bf0 mov r1, r4                                        |             r1 = r4;
    0x00061bf2 bl 0x30ca4                                        |             fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x00061bf6 mov r1, r4                                        |             r1 = r4;
    0x00061bf8 mov r0, sl                                        |             r0 = sl;
    0x00061bfa movs r2, 1                                        |             r2 = 1;
    0x00061bfc bl 0x18b24                                        |             fcn_00018b24 (r0, r1, r2);
                                                                 |         }
                                                                 | label_106:
    0x00061c00 ldr.w r2, [fp, 0x24]                              |         r2 = *(arg_24h);
                                                                 |         if (r2 == 0) {
    0x00061c04 cbnz r2, 0x61c10                                  |             
    0x00061c06 ldr r5, [r7, 0x20]                                |             r5 = *((r7 + 0x20));
    0x00061c08 mov.w r8, -1                                      |             r8 = -1;
    0x00061c0c b.w 0x5f7e4                                       |             goto label_7;
                                                                 |         }
    0x00061c10 ldr.w sb, [sp, 0x1c]                              |         sb = var_1ch;
    0x00061c14 ldrb.w r3, [sb, 0x53]                             |         r3 = *((sb + 0x53));
    0x00061c18 add r3, r2                                        |         r3 += r2;
    0x00061c1a b.w 0x5fb66                                       |         goto label_102;
                                                                 | label_271:
    0x00061c1e ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00061c20 mov r1, r4                                        |         r1 = r4;
    0x00061c22 mov r0, r7                                        |         r0 = r7;
    0x00061c24 str.w fp, [sp, 0xac]                              |         __asm ("str.w fp, [var_ach]");
    0x00061c28 str r3, [sp, 0xb0]                                |         var_b0h = r3;
    0x00061c2a ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00061c2c str r3, [sp, 0xb4]                                |         var_b4h = r3;
    0x00061c2e ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00061c30 str r3, [sp, 0xb8]                                |         var_b8h = r3;
    0x00061c32 ldr r3, [r6, 0x1c]                                |         r3 = *((r6 + 0x1c));
    0x00061c34 str r3, [sp, 0xbc]                                |         var_bch = r3;
    0x00061c36 bl 0x31ecc                                        |         fcn_00031ecc (r0, r1, r2);
    0x00061c3a b 0x61b68                                         |         goto label_103;
                                                                 | label_270:
    0x00061c3c str r2, [r4, 0x24]                                |         *((r4 + 0x24)) = r2;
    0x00061c3e b 0x61b5e                                         |         goto label_104;
                                                                 | label_266:
    0x00061c40 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x00061c42 mov r1, r5                                        |         r1 = r5;
    0x00061c44 add.w r2, sb, -1                                  |         r2 = sb + -1;
    0x00061c48 mov r0, fp                                        |         r0 = fp;
    0x00061c4a adds r3, 1                                        |         r3++;
    0x00061c4c bl 0x25b3c                                        |         r0 = fcn_00025b3c (r0, r1, r2, r3);
    0x00061c50 mov r5, r0                                        |         r5 = r0;
    0x00061c52 cmp r0, 0                                         |         
    0x00061c54 beq 0x61bc8                                       |         
                                                                 |     } while (r0 == 0);
    0x00061c56 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x00061c58 b 0x61acc                                         |     goto label_105;
                                                                 | label_264:
    0x00061c5a movs r3, 0x48                                     |     r3 = 0x48;
    0x00061c5c ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00061c5e mla r3, r3, r8, r5                                |     __asm ("mla r3, r3, r8, r5");
    0x00061c62 str r2, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r2;
    0x00061c64 b 0x61c00                                         |     goto label_106;
                                                                 | label_269:
    0x00061c66 mov r0, r2                                        |     r0 = r2;
    0x00061c68 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00061c6a str r2, [sp, 0x48]                                |     var_48h = r2;
    0x00061c6c bl 0x9f28                                         |     fcn_00009f28 (r0, r1);
    0x00061c70 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00061c72 b 0x61b4c                                         |     goto label_107;
                                                                 | label_268:
    0x00061c74 mov r1, r2                                        |     r1 = r2;
    0x00061c76 ldr r0, [r1], 0x14                                |     r0 = *(r1);
                                                                 |     r1 += 0x14;
    0x00061c7a b 0x61c8a                                         |     
                                                                 |     while (r3 < r0) {
    0x00061c7c lsl.w ip, r3, 4                                   |         
    0x00061c80 adds r3, 1                                        |         r3++;
    0x00061c82 mov.w lr, 0                                       |         lr = 0;
    0x00061c86 strh.w lr, [r1, ip]                               |         
    0x00061c8a cmp r3, r0                                        |         
    0x00061c8c blt 0x61c7c                                       |         
                                                                 |     }
    0x00061c8e movs r3, 0                                        |     r3 = 0;
    0x00061c90 str r2, [r4, 0x30]                                |     *((r4 + 0x30)) = r2;
    0x00061c92 str r3, [r6, 0x30]                                |     *((r6 + 0x30)) = r3;
    0x00061c94 b 0x61b3e                                         |     goto label_108;
                                                                 | label_244:
    0x00061c96 mov.w r4, 0x8000                                  |     
    0x00061c9a movt r4, 0xffff                                   |     r4 = 0xNaN;
    0x00061c9e b 0x61524                                         |     goto label_109;
                                                                 | label_255:
    0x00061ca0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061ca2 bne.w 0x61770                                     |         goto label_110;
                                                                 |     }
    0x00061ca6 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00061ca8 bl 0x9c80                                         |     r0 = fcn_00009c80 (r0);
    0x00061cac subs r4, r0, 0                                    |     r4 = r0 - 0;
    0x00061cae it ne                                             |     
                                                                 |     if (r4 == r0) {
    0x00061cb0 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x00061cb2 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061cb4 b 0x617a2                                         |     goto label_111;
                                                                 | label_253:
    0x00061cb6 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00061cba movs r4, 0                                        |     r4 = 0;
    0x00061cbc mov r5, r4                                        |     r5 = r4;
    0x00061cbe str r4, [sp, 0x24]                                |     var_24h = r4;
    0x00061cc0 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00061cc2 b.w 0x611f4                                       |     goto label_82;
                                                                 | label_265:
    0x00061cc6 ldr.w r4, [fp, 0x74]                              |     r4 = *(arg_74h);
    0x00061cca cmp r4, 0                                         |     
    0x00061ccc it eq                                             |     
                                                                 |     if (r4 != 0) {
    0x00061cce moveq r4, fp                                      |         r4 = fp;
                                                                 |     }
    0x00061cd0 ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 |     if (r0 == 0) {
    0x00061cd2 cbz r0, 0x61cf6                                   |         goto label_273;
                                                                 |     }
    0x00061cd4 movs r2, 0xc                                      |     r2 = 0xc;
    0x00061cd6 movs r3, 0                                        |     r3 = 0;
    0x00061cd8 bl 0x1abdc                                        |     r0 = fcn_0001abdc (r0, r1);
                                                                 |     if (r0 == 0) {
                                                                 |         do {
    0x00061cdc cbz r0, 0x61d00                                   |             goto label_274;
                                                                 |         }
    0x00061cde ldr.w r2, [r4, 0x108]                             |         r2 = *((r4 + 0x108));
    0x00061ce2 str r2, [r0]                                      |         *(r0) = r2;
    0x00061ce4 ldr r2, [pc, 0x30]                                |         
    0x00061ce6 str.w r0, [r4, 0x108]                             |         __asm ("str.w r0, aav.0x000000ff");
    0x00061cea str r6, [r0, 4]                                   |         *((r0 + 4)) = r6;
    0x00061cec add r2, pc                                        |         r2 = 0xc3a08;
    0x00061cee str r2, [r0, 8]                                   |         *((r0 + 8)) = r2;
    0x00061cf0 b 0x61a66                                         |         goto label_112;
                                                                 | label_257:
    0x00061cf2 mov r2, r3                                        |         r2 = r3;
    0x00061cf4 b 0x615a2                                         |         goto label_92;
                                                                 | label_273:
    0x00061cf6 movs r1, 0                                        |         r1 = 0;
    0x00061cf8 movs r0, 0xc                                      |         r0 = 0xc;
    0x00061cfa bl 0x12abc                                        |         fcn_00012abc (r0);
    0x00061cfe b 0x61cdc                                         |         
                                                                 |     } while (1);
                                                                 | label_274:
    0x00061d00 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00061d02 mov r1, r6                                        |     r1 = r6;
    0x00061d04 bl 0x19150                                        |     fcn_00019150 (r0, r1);
    0x00061d08 b 0x61a66                                         |     goto label_112;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6b788 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0006b788 ()                                          | void fcn_0006b788 (int16_t arg_0h, int16_t arg_4h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_2dh, int16_t arg_2fh, int16_t arg_30h, int16_t arg_32h, int16_t arg_50h, int16_t arg_1ech, int16_t arg_2f4h, int16_t arg_338h, int16_t arg_f0h, int16_t arg_f4h, int16_t arg_f8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_50h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_7ch;
                                                                     |     int16_t var_84h;
                                                                     |     int16_t var_88h;
                                                                     |     int16_t var_8ch;
                                                                     |     int16_t var_90h;
                                                                     |     int32_t var_94h;
                                                                     |     int32_t var_94h_2;
                                                                     |     int16_t var_9ch;
                                                                     |     int16_t var_a0h;
                                                                     |     int16_t var_a4h;
                                                                     |     int16_t var_a8h;
                                                                     |     int32_t var_a8h_2;
                                                                     |     int16_t var_b0h;
                                                                     |     int16_t var_b4h;
                                                                     |     int16_t var_b8h;
                                                                     |     int16_t var_bch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0006b788 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0006b78c mov sl, r0                                            |     sl = r0;
    0x0006b78e vpush {d8}                                            |     __asm ("vpush {d8}");
    0x0006b792 sub sp, 0xc4                                          |     
    0x0006b794 mov r5, r2                                            |     r5 = r2;
    0x0006b796 str r1, [sp, 0x14]                                    |     var_14h = r1;
    0x0006b798 ldr r1, [pc, 0x3f4]                                   |     
    0x0006b79a ldr r0, [sp, 0xf0]                                    |     r0 = *(arg_f0h);
    0x0006b79c ldr r2, [pc, 0x3f4]                                   |     r2 = *(0x6bb94);
    0x0006b79e add r1, pc                                            |     r1 = 0xd7332;
    0x0006b7a0 str r0, [sp, 0x30]                                    |     var_30h = r0;
    0x0006b7a2 ldr r2, [r1, r2]                                      |     
    0x0006b7a4 ldr r2, [r2]                                          |     r2 = *(0xd7332);
    0x0006b7a6 str r2, [sp, 0xbc]                                    |     var_bch = r2;
    0x0006b7a8 mov.w r2, 0                                           |     r2 = 0;
    0x0006b7ac movs r2, 0                                            |     r2 = 0;
    0x0006b7ae strd r2, r2, [sp, 0x84]                               |     __asm ("strd r2, r2, [var_84h]");
    0x0006b7b2 strd r2, r2, [sp, 0x8c]                               |     __asm ("strd r2, r2, [var_8ch]");
    0x0006b7b6 strd r2, r2, [sp, 0x94]                               |     __asm ("strd r2, r2, [var_94h]");
    0x0006b7ba str r2, [sp, 0x9c]                                    |     var_9ch = r2;
    0x0006b7bc add r2, sp, 0x84                                      |     r2 += var_84h;
    0x0006b7be str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0006b7c0 ldrh.w r2, [sp, 0xf4]                                 |     r2 = *(arg_f4h);
    0x0006b7c4 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0006b7c6 str r2, [sp, 0x44]                                    |     var_44h = r2;
    0x0006b7c8 ldr.w r2, [sl, 8]                                     |     r2 = *((sl + 8));
    0x0006b7cc str r2, [sp, 0x58]                                    |     var_58h = r2;
    0x0006b7ce ldr.w r2, [sl]                                        |     r2 = *(sl);
    0x0006b7d2 str r2, [sp, 0x38]                                    |     var_38h = r2;
                                                                     |     if (r3 != 0) {
    0x0006b7d4 cbz r3, 0x6b7e4                                       |         
    0x0006b7d6 mov r2, r3                                            |         r2 = r3;
    0x0006b7d8 ldr r3, [r3]                                          |         r3 = *(r3);
    0x0006b7da cmp r3, 0x40                                          |         
    0x0006b7dc ite lt                                                |         
                                                                     |         if (r3 >= 0x40) {
    0x0006b7de movlt r3, r2                                          |             r3 = r2;
                                                                     |         }
                                                                     |         if (r3 < 0x40) {
    0x0006b7e0 movge r3, 0                                           |             r3 = 0;
                                                                     |         }
    0x0006b7e2 str r3, [sp, 0x20]                                    |         var_20h = r3;
                                                                     |     }
    0x0006b7e4 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006b7e6 str r3, [sp, 0x8c]                                    |     var_8ch = r3;
    0x0006b7e8 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006b7ea ldr r3, [r3, 0x4c]                                    |     r3 = *((r3 + 0x4c));
    0x0006b7ec lsls r4, r3, 0x1b                                     |     r4 = r3 << 0x1b;
                                                                     |     if (r4 < r3) {
    0x0006b7ee bpl 0x6b7fc                                           |         
    0x0006b7f0 ldr r3, [sp, 0x44]                                    |         r3 = var_44h;
    0x0006b7f2 bic r3, r3, 0x100                                     |         r3 = BIT_MASK (r3, 0x100);
    0x0006b7f6 lsls r3, r3, 0x10                                     |         r3 <<= 0x10;
    0x0006b7f8 lsrs r3, r3, 0x10                                     |         r3 >>= 0x10;
    0x0006b7fa str r3, [sp, 0x44]                                    |         var_44h = r3;
                                                                     |     }
    0x0006b7fc ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006b7fe ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006b800 cmp r3, 0x40                                          |     
    0x0006b802 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
                                                                     |     if (r3 > 0x40) {
    0x0006b804 bgt.w 0x6cc6a                                         |         goto label_82;
                                                                     |     }
    0x0006b808 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0006b80a ands r3, r3, 0x20                                     |     r3 &= 0x20;
    0x0006b80e str r3, [sp, 0x48]                                    |     var_48h = r3;
                                                                     |     if (r3 == r3) {
    0x0006b810 beq.w 0x6b9b2                                         |         goto label_83;
                                                                     |     }
    0x0006b814 mov.w r2, 0x390                                       |     r2 = 0x390;
    0x0006b818 mov.w r4, 0x348                                       |     r4 = 0x348;
    0x0006b81c movs r3, 1                                            |     r3 = 1;
    0x0006b81e str r3, [sp, 0x3c]                                    |     var_3ch = r3;
                                                                     | label_3:
    0x0006b820 ldr r6, [sp, 0x38]                                    |     r6 = var_38h;
    0x0006b822 movs r3, 0                                            |     r3 = 0;
    0x0006b824 mov r0, r6                                            |     r0 = r6;
    0x0006b826 bl 0x1abdc                                            |     fcn_0001abdc (r0, r1);
    0x0006b82a ldrb.w r6, [r6, 0x53]                                 |     r6 = *((r6 + 0x53));
    0x0006b82e str r0, [sp, 0x10]                                    |     var_10h = r0;
    0x0006b830 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0006b832 bne.w 0x6c59a                                         |         goto label_84;
                                                                     |     }
    0x0006b836 ldr r7, [sp, 0x10]                                    |     r7 = var_10h;
    0x0006b838 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006b83a ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0006b83c ldr r1, [sp, 0x30]                                    |     r1 = var_30h;
    0x0006b83e add.w r0, r7, 0x2d                                    |     r0 = r7 + 0x2d;
    0x0006b842 strb.w r3, [r7, 0x2c]                                 |     *((r7 + 0x2c)) = r3;
    0x0006b846 add r4, r7                                            |     r4 += r7;
    0x0006b848 ldr.w r3, [sl, 0x38]                                  |     r3 = *((sl + 0x38));
    0x0006b84c add.w fp, r7, 0x50                                    |     
    0x0006b850 str r2, [r7, 4]                                       |     *((r7 + 4)) = r2;
    0x0006b852 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006b854 str r1, [r7, 0xc]                                     |     *((r7 + 0xc)) = r1;
    0x0006b856 subs r3, 1                                            |     r3--;
    0x0006b858 ldr.w r1, [sl, 0x84]                                  |     r1 = *((sl + 0x84));
    0x0006b85c str r2, [r7, 8]                                       |     *((r7 + 8)) = r2;
    0x0006b85e mov.w r2, -1                                          |     r2 = -1;
    0x0006b860 adds r2, 0xff                                         |     r2 += 0xff;
    0x0006b862 str r5, [r7, 0x10]                                    |     *((r7 + 0x10)) = r5;
    0x0006b864 strd r2, r2, [r7, 0x14]                               |     __asm ("strd r2, r2, [r7, 0x14]");
    0x0006b868 movs r2, 0x23                                         |     r2 = 0x23;
    0x0006b86a str.w sl, [r7]                                        |     __asm ("str.w sl, [r7]");
    0x0006b86e str.w r3, [sl, 0x38]                                  |     __asm ("str.w r3, [sl, 0x38]");
    0x0006b872 str r1, [r7, 0x24]                                    |     *((r7 + 0x24)) = r1;
    0x0006b874 ldr r1, [sp, 0x44]                                    |     r1 = var_44h;
    0x0006b876 strd r3, r3, [r7, 0x1c]                               |     __asm ("strd r3, r3, [r7, 0x1c]");
    0x0006b87a strh r1, [r7, 0x28]                                   |     *((r7 + 0x28)) = r1;
    0x0006b87c ldr r1, [sp, 0xf8]                                    |     r1 = *(arg_f8h);
    0x0006b87e strh r1, [r7, 0x2a]                                   |     *((r7 + 0x2a)) = r1;
    0x0006b880 mov r1, r6                                            |     r1 = r6;
    0x0006b882 blx 0x8264                                            |     fcn_00008264 ();
    0x0006b886 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006b888 movs r2, 0x58                                         |     r2 = 0x58;
    0x0006b88a add.w r1, r7, 0x2f0                                   |     r1 = r7 + 0x2f0;
    0x0006b88e mov r0, r1                                            |     r0 = r1;
    0x0006b890 str r1, [sp, 0x5c]                                    |     var_5ch = r1;
    0x0006b892 mov r1, r6                                            |     r1 = r6;
    0x0006b894 mov r8, r0                                            |     r8 = r0;
    0x0006b896 mul r2, r3, r2                                        |     r2 = r3 * r2;
    0x0006b898 addw r2, r2, 0x348                                    |     __asm ("addw r2, r2, aav.0x000000ff");
    0x0006b89c blx 0x8264                                            |     fcn_00008264 ();
    0x0006b8a0 add.w r3, r4, 0x38                                    |     r3 = r4 + 0x38;
    0x0006b8a4 strh r6, [r4, 0x28]                                   |     *((r4 + 0x28)) = r6;
    0x0006b8a6 str r3, [r4, 0x30]                                    |     *((r4 + 0x30)) = r3;
    0x0006b8a8 movs r3, 3                                            |     r3 = 3;
    0x0006b8aa strh r3, [r4, 0x2c]                                   |     *((r4 + 0x2c)) = r3;
    0x0006b8ac movs r3, 8                                            |     r3 = 8;
    0x0006b8ae str r6, [r4, 0x24]                                    |     *((r4 + 0x24)) = r6;
    0x0006b8b0 mov r1, r5                                            |     r1 = r5;
    0x0006b8b2 str r3, [r7, 0x60]                                    |     *((r7 + 0x60)) = r3;
    0x0006b8b4 add.w r3, r7, 0x68                                    |     r3 = r7 + 0x68;
    0x0006b8b8 str r3, [r7, 0x64]                                    |     *((r7 + 0x64)) = r3;
    0x0006b8ba movs r2, 0x2c                                         |     r2 = 0x2c;
    0x0006b8bc mov r0, fp                                            |     r0 = fp;
    0x0006b8be str.w r6, [r7, 0x1ec]                                 |     __asm ("str.w r6, aav.0x000000ff");
    0x0006b8c2 str r7, [r7, 0x50]                                    |     *((r7 + 0x50)) = r7;
    0x0006b8c4 mov r5, r8                                            |     r5 = r8;
    0x0006b8c6 strb.w r6, [r7, 0x59]                                 |     *((r7 + 0x59)) = r6;
    0x0006b8ca str r6, [r7, 0x54]                                    |     *((r7 + 0x54)) = r6;
    0x0006b8cc str r6, [r7, 0x5c]                                    |     *((r7 + 0x5c)) = r6;
    0x0006b8ce str r7, [sp, 0x84]                                    |     var_84h = r7;
    0x0006b8d0 str r4, [sp, 0x90]                                    |     var_90h = r4;
    0x0006b8d2 str.w fp, [sp, 0x88]                                  |     __asm ("str.w fp, [var_88h]");
    0x0006b8d6 str.w r8, [sp, 0x54]                                  |     __asm ("str.w r8, [var_54h]");
    0x0006b8da bl 0x2032c                                            |     fcn_0002032c (r0, r1, r2);
    0x0006b8de ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006b8e0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006b8e2 bne.w 0x6c476                                         |         goto label_85;
                                                                     |     }
    0x0006b8e6 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
                                                                     |     if (r2 != 0) {
    0x0006b8e8 cbz r2, 0x6b8f0                                       |         
    0x0006b8ea ldr r3, [r2]                                          |         r3 = *(r2);
    0x0006b8ec strb.w r3, [r7, 0x2d]                                 |         *((r7 + 0x2d)) = r3;
                                                                     |     }
    0x0006b8f0 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0006b8f2 movs r1, 0                                            |     r1 = 0;
    0x0006b8f4 lsls r0, r3, 0x17                                     |     r0 = r3 << 0x17;
    0x0006b8f6 mov r0, sl                                            |     r0 = sl;
    0x0006b8f8 ittt mi                                               |     
                                                                     |     if (r0 >= r3) {
    0x0006b8fa ldrmi r2, [sp, 0x10]                                  |         r2 = var_10h;
                                                                     |     }
                                                                     |     if (r0 >= r3) {
    0x0006b8fc movmi r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r0 >= r3) {
    0x0006b8fe strbmi r3, [r2, 0x2f]                                 |         *((r2 + 0x2f)) = r3;
                                                                     |     }
    0x0006b902 ldr r2, [pc, 0x294]                                   |     
    0x0006b904 add r2, pc                                            |     r2 = 0xd74a2;
    0x0006b906 bl 0x2e274                                            |     fcn_0002e274 (r0, r1);
                                                                     | label_21:
    0x0006b90a ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006b90c ldr r4, [r3, 0x5c]                                    |     r4 = *((r3 + 0x5c));
    0x0006b90e subs r4, 1                                            |     r4--;
    0x0006b910 it pl                                                 |     
                                                                     |     if (r4 < 1) {
    0x0006b912 ldrpl r5, [sp, 0x14]                                  |         r5 = var_14h;
                                                                     |     }
                                                                     |     if (r4 < 1) {
    0x0006b914 bmi 0x6b926                                           |         goto label_86;
                                                                     |     }
                                                                     |     do {
    0x0006b916 mov r2, r4                                            |         r2 = r4;
    0x0006b918 mov r1, fp                                            |         r1 = fp;
    0x0006b91a subs r4, 1                                            |         r4--;
    0x0006b91c mov r0, r5                                            |         r0 = r5;
    0x0006b91e bl 0x653c4                                            |         fcn_000653c4 (r0, r1, r2, r3, r4, r5, r6);
    0x0006b922 adds r7, r4, 1                                        |         r7 = r4 + 1;
    0x0006b924 bne 0x6b916                                           |         
                                                                     |     } while (r7 != r4);
                                                                     | label_86:
    0x0006b926 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006b928 ldrb.w r5, [r3, 0x53]                                 |     r5 = *((r3 + 0x53));
    0x0006b92c cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0006b92e bne.w 0x6bb04                                         |         goto label_5;
                                                                     |     }
    0x0006b932 ldr r2, [sp, 0x88]                                    |     r2 = var_88h;
    0x0006b934 ldr r3, [r2, 0xc]                                     |     r3 = *((r2 + 0xc));
    0x0006b936 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006b938 ble 0x6b9c6                                           |         goto label_87;
                                                                     |     }
    0x0006b93a ldr r7, [pc, 0x260]                                   |     
    0x0006b93c mov r6, r5                                            |     r6 = r5;
    0x0006b93e ldr.w r8, [pc, 0x260]                                 |     r8 = *(0x0006bba0);
    0x0006b942 add r7, pc                                            |     r7 = 0xd74e4;
    0x0006b944 mov sb, r7                                            |     sb = r7;
    0x0006b946 add r8, pc                                            |     r8 += pc;
    0x0006b948 ldr r7, [sp, 0x3c]                                    |     r7 = var_3ch;
    0x0006b94a b 0x6b982                                             |     goto label_88;
                                                                     | label_1:
    0x0006b94c str r3, [sp, 0xb4]                                    |     var_b4h = r3;
    0x0006b94e add r0, sp, 0xa0                                      |     r0 += var_a0h;
    0x0006b950 strd r3, sb, [sp, 0xa0]                               |     __asm ("strd r3, sb, [var_a0h]");
    0x0006b954 strd r8, r3, [sp, 0xa8]                               |     __asm ("strd r8, r3, [var_a8h]");
    0x0006b958 str r3, [sp, 0xb0]                                    |     var_b0h = r3;
    0x0006b95a str r3, [sp, 0xb8]                                    |     var_b8h = r3;
    0x0006b95c movs r3, 1                                            |     r3 = 1;
    0x0006b95e strh.w r3, [sp, 0xb4]                                 |     var_b4h = r3;
    0x0006b962 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0006b964 beq.w 0x6c470                                         |         goto label_89;
                                                                     |     }
    0x0006b968 bl 0x301c4                                            |     fcn_000301c4 (r0, r1);
    0x0006b96c ldrh.w r3, [sp, 0xb4]                                 |     r3 = var_b4h;
    0x0006b970 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006b972 bne.w 0x6c470                                         |         goto label_89;
                                                                     |     }
                                                                     | label_2:
    0x0006b976 ldr r2, [sp, 0x88]                                    |     r2 = var_88h;
                                                                     |     do {
                                                                     | label_0:
    0x0006b978 ldr r3, [r2, 0xc]                                     |         r3 = *((r2 + 0xc));
    0x0006b97a adds r6, 1                                            |         r6++;
    0x0006b97c adds r5, 0x30                                         |         r5 += 0x30;
    0x0006b97e cmp r3, r6                                            |         
                                                                     |         if (r3 <= r6) {
    0x0006b980 ble 0x6b9c6                                           |             goto label_87;
                                                                     |         }
                                                                     | label_88:
    0x0006b982 ldr r4, [r2, 0x14]                                    |         r4 = *((r2 + 0x14));
    0x0006b984 add r4, r5                                            |         r4 += r5;
    0x0006b986 ldrh r3, [r4, 0xa]                                    |         r3 = *((r4 + 0xa));
    0x0006b988 ands r3, r3, 2                                        |         r3 &= 2;
    0x0006b98c bne 0x6b978                                           |         
                                                                     |     } while (r3 != r3);
    0x0006b98e ldrd r1, r0, [r4, 0x28]                               |     __asm ("ldrd r1, r0, [r4, 0x28]");
    0x0006b992 orrs r1, r0                                           |     r1 |= r0;
                                                                     |     if (r1 != r0) {
    0x0006b994 bne 0x6b978                                           |         goto label_0;
                                                                     |     }
    0x0006b996 ldr r1, [r4]                                          |     r1 = *(r4);
    0x0006b998 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0006b99a bne 0x6b94c                                           |         goto label_1;
                                                                     |     }
                                                                     | label_18:
    0x0006b99c ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006b99e mov r0, sl                                            |     r0 = sl;
    0x0006b9a0 ldr r2, [r3, 0x20]                                    |     r2 = *((r3 + 0x20));
    0x0006b9a2 movs r3, 0x10                                         |     r3 = 0x10;
    0x0006b9a4 bl 0x6373c                                            |     fcn_0006373c (r0, r1, r2, r3, r4);
    0x0006b9a8 ldrh r3, [r4, 0xa]                                    |     r3 = *((r4 + 0xa));
    0x0006b9aa orr r3, r3, 4                                         |     r3 |= 4;
    0x0006b9ae strh r3, [r4, 0xa]                                    |     *((r4 + 0xa)) = r3;
    0x0006b9b0 b 0x6b976                                             |     goto label_2;
                                                                     | label_83:
    0x0006b9b2 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006b9b4 subs r2, r3, 1                                        |     r2 = r3 - 1;
    0x0006b9b6 movs r3, 0x58                                         |     r3 = 0x58;
    0x0006b9b8 mul r2, r3, r2                                        |     r2 = r3 * r2;
    0x0006b9bc add.w r4, r2, 0x348                                   |     r4 = r2 + 0x348;
    0x0006b9c0 add.w r2, r2, 0x390                                   |     r2 += 0x390;
    0x0006b9c4 b 0x6b820                                             |     goto label_3;
                                                                     | label_87:
    0x0006b9c6 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0006b9c8 ands r3, r3, 0x100                                    |     r3 &= 0x100;
    0x0006b9cc str r3, [sp, 0x50]                                    |     var_50h = r3;
                                                                     |     if (r3 != r3) {
    0x0006b9ce bne.w 0x6c8e0                                         |         goto label_90;
                                                                     |     }
                                                                     | label_45:
    0x0006b9d2 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006b9d4 ldr.w fp, [sp, 0x84]                                  |     fp = var_84h;
    0x0006b9d8 ldr r6, [sp, 0x90]                                    |     r6 = var_90h;
    0x0006b9da cmp r3, 1                                             |     
    0x0006b9dc ldr.w r7, [fp, 4]                                     |     r7 = *(arg_4h);
                                                                     |     if (r3 == 1) {
    0x0006b9e0 beq.w 0x6c84c                                         |         goto label_91;
                                                                     |     }
                                                                     | label_40:
    0x0006b9e4 ldrb.w sb, [fp, 0x2c]                                 |     sb = *(arg_2ch);
    0x0006b9e8 movs r3, 0x48                                         |     r3 = 0x48;
    0x0006b9ea add.w r2, r7, 8                                       |     r2 = r7 + 8;
    0x0006b9ee movs r4, 0                                            |     r4 = 0;
    0x0006b9f0 movs r5, 3                                            |     r5 = 3;
    0x0006b9f2 mla sb, r3, sb, r7                                    |     __asm ("mla sb, r3, sb, r7");
    0x0006b9f6 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0006b9fa ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006b9fc add.w sb, sb, 8                                       |     sb += 8;
    0x0006ba00 strh r4, [r6, 0x28]                                   |     *((r6 + 0x28)) = r4;
    0x0006ba02 cmp sb, r2                                            |     
    0x0006ba04 str r4, [r6, 0x24]                                    |     *((r6 + 0x24)) = r4;
    0x0006ba06 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0006ba08 add.w r3, r6, 0x38                                    |     r3 = r6 + 0x38;
    0x0006ba0c str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0006ba0e str r3, [r6, 0x30]                                    |     *((r6 + 0x30)) = r3;
    0x0006ba10 movw r3, 0x4e20                                       |     r3 = 0x4e20;
    0x0006ba14 strh r5, [r6, 0x2c]                                   |     *((r6 + 0x2c)) = r5;
    0x0006ba16 str r3, [sp, 0x9c]                                    |     var_9ch = r3;
                                                                     |     if (sb < r2) {
    0x0006ba18 bls.w 0x6cda8                                         |         goto label_92;
                                                                     |     }
    0x0006ba1c ldr r1, [pc, 0x184]                                   |     
    0x0006ba1e add.w r8, r7, 0x50                                    |     r8 = r7 + 0x50;
    0x0006ba22 str r4, [sp, 0x1c]                                    |     var_1ch = r4;
    0x0006ba24 str r4, [sp, 0x20]                                    |     var_20h = r4;
    0x0006ba26 add r1, pc                                            |     r1 = 0xd75ce;
    0x0006ba28 str r4, [sp, 0x18]                                    |     var_18h = r4;
    0x0006ba2a str r1, [sp, 0x2c]                                    |     var_2ch = r1;
    0x0006ba2c str.w sl, [sp, 0x4c]                                  |     __asm ("str.w sl, [var_4ch]");
                                                                     | label_10:
    0x0006ba30 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006ba32 add.w r3, r3, 0x3e8                                   |     r3 += 0x3e8;
    0x0006ba36 strb r2, [r6, 0x10]                                   |     *((r6 + 0x10)) = r2;
    0x0006ba38 str r3, [sp, 0x9c]                                    |     var_9ch = r3;
    0x0006ba3a ldr.w r3, [fp, 0x1ec]                                 |     r3 = *(arg_1ech);
    0x0006ba3e ldr r4, [r8, -0x20]                                   |     r4 = *((r8 - 0x20));
    0x0006ba42 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006ba44 ble.w 0x6c3b2                                         |         goto label_93;
                                                                     |     }
    0x0006ba48 add.w r1, fp, 0x1ec                                   |     r1 += arg_1ech;
    0x0006ba4c movs r2, 0                                            |     r2 = 0;
    0x0006ba4e b 0x6ba58                                             |     
                                                                     |     while (r4 != r0) {
    0x0006ba50 adds r2, 1                                            |         r2++;
    0x0006ba52 cmp r3, r2                                            |         
                                                                     |         if (r3 == r2) {
    0x0006ba54 beq.w 0x6c3b2                                         |             goto label_93;
                                                                     |         }
    0x0006ba58 ldr r0, [r1, 4]!                                      |         r0 = *((r1 += 4));
    0x0006ba5c cmp r4, r0                                            |         
    0x0006ba5e bne 0x6ba50                                           |         
                                                                     |     }
    0x0006ba60 movs r1, 1                                            |     r1 = 1;
    0x0006ba62 sub.w r0, r2, 0x20                                    |     r0 = r2 - 0x20;
    0x0006ba66 rsb.w r4, r2, 0x20                                    |     r4 = 0x20 - r2;
    0x0006ba6a lsl.w r0, r1, r0                                      |     r0 = r1 << r0;
    0x0006ba6e lsr.w r4, r1, r4                                      |     r4 = r1 >> r4;
    0x0006ba72 lsl.w r2, r1, r2                                      |     r2 = r1 << r2;
    0x0006ba76 orrs r0, r4                                           |     r0 |= r4;
                                                                     | label_11:
    0x0006ba78 strd r2, r0, [r6, 8]                                  |     __asm ("strd r2, r0, [r6, 8]");
    0x0006ba7c ldrb r7, [r8, -0x24]                                  |     r7 = *((r8 - 0x24));
    0x0006ba80 ands r7, r7, 0xa                                      |     r7 &= 0xa;
    0x0006ba84 itet ne                                               |     
                                                                     |     if (r7 != r7) {
    0x0006ba86 ldrdne r7, r2, [sp, 0x1c]                             |         __asm ("ldrdne r7, r2, [var_20h]");
                                                                     |     }
                                                                     |     if (r7 == r7) {
    0x0006ba8a strne r7, [sp, 0x24]                                  |         var_24h = r7;
                                                                     |     }
                                                                     |     if (r7 != r7) {
    0x0006ba8c str r2, [sp, 0x24]                                    |         var_24h = r2;
                                                                     |     }
    0x0006ba8e ldr r2, [r8, -0x38]                                   |     r2 = *((r8 - 0x38));
    0x0006ba92 ldr r5, [r2, 0x38]                                    |     r5 = *((r2 + 0x38));
    0x0006ba94 cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0006ba96 bne.w 0x6c3ba                                         |         goto label_94;
                                                                     |     }
    0x0006ba9a mov sl, r5                                            |     sl = r5;
    0x0006ba9c ldrd r3, r0, [sp, 0x24]                               |     __asm ("ldrd r3, r0, [var_28h]");
    0x0006baa0 mov r2, r7                                            |     r2 = r7;
    0x0006baa2 bl 0x38c44                                            |     r0 = fcn_00038c44 (r0, r1, r2, r3, r4, r5, r6);
                                                                     | label_13:
    0x0006baa6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0006baa8 bne.w 0x6c37c                                         |         goto label_95;
                                                                     |     }
    0x0006baac ldr r3, [sp, 0x88]                                    |     r3 = var_88h;
    0x0006baae ldrb r3, [r3, 9]                                      |     r3 = *((r3 + 9));
    0x0006bab0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006bab2 bne.w 0x6c44a                                         |         goto label_96;
                                                                     |     }
    0x0006bab6 ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0006bab8 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006baba orrs r2, r3                                           |     r2 |= r3;
    0x0006babc ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
    0x0006babe str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0006bac0 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006bac2 orrs r2, r3                                           |     r2 |= r3;
    0x0006bac4 str r2, [sp, 0x20]                                    |     var_20h = r2;
                                                                     | label_16:
    0x0006bac6 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0006bac8 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0006bacc cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006bace beq.w 0x6c39a                                         |         goto label_97;
                                                                     |     }
                                                                     | label_9:
    0x0006bad2 ldr r1, [r6, 0x30]                                    |     r1 = *((r6 + 0x30));
    0x0006bad4 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006bad6 ldr.w sl, [sp, 0x4c]                                  |     sl = var_4ch;
    0x0006bada cmp r1, r3                                            |     
    0x0006badc it ne                                                 |     
                                                                     |     if (r1 == r3) {
    0x0006bade movne r4, 0                                           |         r4 = 0;
                                                                     |     }
                                                                     |     if (r1 == r3) {
    0x0006bae0 beq 0x6bbac                                           |         goto label_98;
                                                                     |     }
                                                                     | label_75:
    0x0006bae2 ldr r5, [sp, 0x34]                                    |     r5 = var_34h;
    0x0006bae4 mov r0, r5                                            |     r0 = r5;
    0x0006bae6 bl 0x159dc                                            |     fcn_000159dc (r0, r1);
    0x0006baea mov r1, r6                                            |     r1 = r6;
    0x0006baec mov r0, r5                                            |     r0 = r5;
    0x0006baee bl 0x16140                                            |     fcn_00016140 (r0, r1);
    0x0006baf2 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006baf4 str r3, [r6, 0x30]                                    |     *((r6 + 0x30)) = r3;
    0x0006baf6 movs r3, 0                                            |     r3 = 0;
    0x0006baf8 strh r3, [r6, 0x28]                                   |     *((r6 + 0x28)) = r3;
    0x0006bafa str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0006bafc movs r3, 3                                            |     r3 = 3;
    0x0006bafe strh r3, [r6, 0x2c]                                   |     *((r6 + 0x2c)) = r3;
    0x0006bb00 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0006bb02 beq 0x6bbc2                                           |         goto label_68;
                                                                     |     }
                                                                     | label_5:
    0x0006bb04 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006bb06 ldr.w r8, [sp, 0x10]                                  |     r8 = var_10h;
    0x0006bb0a ldr r1, [r3, 0x40]                                    |     r1 = *((r3 + 0x40));
                                                                     |     if (r1 == 0) {
    0x0006bb0c cbz r1, 0x6bb5a                                       |         goto label_99;
                                                                     |     }
                                                                     | label_4:
    0x0006bb0e ldrd r0, r2, [r1]                                     |     __asm ("ldrd r0, r2, [r1]");
    0x0006bb12 add.w r3, r1, 8                                       |     r3 = r1 + 8;
    0x0006bb16 add.w r7, r1, 0x38                                    |     r7 = r1 + 0x38;
    0x0006bb1a str.w r0, [r8, 0x40]                                  |     __asm ("str.w r0, [r8, 0x40]");
                                                                     |     do {
    0x0006bb1e ldr r6, [r3]                                          |         r6 = *(r3);
    0x0006bb20 adds r3, 0x10                                         |         r3 += 0x10;
    0x0006bb22 ldr r5, [r3, -0xc]                                    |         r5 = *((r3 - 0xc));
    0x0006bb26 adds r2, 0x10                                         |         r2 += 0x10;
    0x0006bb28 ldr r4, [r3, -0x8]                                    |         r4 = *((r3 - 0x8));
    0x0006bb2c ldr r0, [r3, -0x4]                                    |         r0 = *((r3 - 0x4));
    0x0006bb30 cmp r3, r7                                            |         
    0x0006bb32 str r6, [r2, -0x10]                                   |         *((r2 - 0x10)) = r6;
    0x0006bb36 str r5, [r2, -0xc]                                    |         *((r2 - 0xc)) = r5;
    0x0006bb3a str r4, [r2, -0x8]                                    |         *((r2 - 0x8)) = r4;
    0x0006bb3e str r0, [r2, -0x4]                                    |         *((r2 - 0x4)) = r0;
    0x0006bb42 bne 0x6bb1e                                           |         
                                                                     |     } while (r3 != r7);
    0x0006bb44 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006bb46 str r3, [r2]                                          |     *(r2) = r3;
    0x0006bb48 ldr.w r3, [r8]                                        |     r3 = *(r8);
    0x0006bb4c ldr r0, [r3]                                          |     r0 = *(r3);
    0x0006bb4e bl 0x159dc                                            |     fcn_000159dc (r0, r1);
    0x0006bb52 ldr.w r1, [r8, 0x40]                                  |     r1 = *((r8 + 0x40));
    0x0006bb56 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0006bb58 bne 0x6bb0e                                           |         goto label_4;
                                                                     |     }
                                                                     | label_99:
    0x0006bb5a ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0006bb5c movs r2, 0                                            |     r2 = 0;
    0x0006bb5e ldr r0, [sp, 0x38]                                    |     r0 = var_38h;
    0x0006bb60 str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x0006bb62 ldr r3, [r1, 0x24]                                    |     r3 = *((r1 + 0x24));
    0x0006bb64 str.w r3, [sl, 0x84]                                  |     __asm ("str.w r3, [sl, 0x84]");
    0x0006bb68 bl 0x18f44                                            |     fcn_00018f44 (r0, r1);
                                                                     | label_8:
    0x0006bb6c ldr r2, [pc, 0x38]                                    |     
    0x0006bb6e ldr r3, [pc, 0x24]                                    |     r3 = *(0x6bb96);
    0x0006bb70 add r2, pc                                            |     r2 = 0xd771c;
    0x0006bb72 ldr r3, [r2, r3]                                      |     r3 = *(0xd771c);
    0x0006bb74 ldr r2, [r3]                                          |     r2 = *(0xd771c);
    0x0006bb76 ldr r3, [sp, 0xbc]                                    |     r3 = var_bch;
    0x0006bb78 eors r2, r3                                           |     r2 ^= r3;
    0x0006bb7a mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0006bb7e bne.w 0x6ce7c                                         |         goto label_100;
                                                                     |     }
    0x0006bb82 ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0006bb84 add sp, 0xc4                                          |     
    0x0006bb86 vpop {d8}                                             |     __asm ("vpop {d8}");
    0x0006bb8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_98:
    0x0006bbac ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0006bbae mov r1, r6                                            |     r1 = r6;
    0x0006bbb0 bl 0x16140                                            |     fcn_00016140 (r0, r1);
    0x0006bbb4 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006bbb6 str r3, [r6, 0x30]                                    |     *((r6 + 0x30)) = r3;
    0x0006bbb8 movs r3, 0                                            |     r3 = 0;
    0x0006bbba strh r3, [r6, 0x28]                                   |     *((r6 + 0x28)) = r3;
    0x0006bbbc str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0006bbbe movs r3, 3                                            |     r3 = 3;
    0x0006bbc0 strh r3, [r6, 0x2c]                                   |     *((r6 + 0x2c)) = r3;
                                                                     | label_68:
    0x0006bbc2 ldr r4, [sp, 0x10]                                    |     r4 = var_10h;
    0x0006bbc4 movs r1, 0                                            |     r1 = 0;
    0x0006bbc6 mov r0, r4                                            |     r0 = r4;
    0x0006bbc8 bl 0x37ce4                                            |     fcn_00037ce4 (r0, r1);
    0x0006bbcc ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006bbce ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0006bbd2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006bbd4 bne 0x6bb04                                           |         goto label_5;
                                                                     |     }
    0x0006bbd6 ldr r3, [r4, 8]                                       |     r3 = *((r4 + 8));
    0x0006bbd8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006bbda beq.w 0x6c5c4                                         |         goto label_101;
                                                                     |     }
    0x0006bbde ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0006bbe0 ldrh r1, [r0, 0x32]                                   |     r1 = *((r0 + 0x32));
    0x0006bbe2 adds r1, 1                                            |     r1++;
    0x0006bbe4 sxth r1, r1                                           |     __asm ("sxth r1, r1");
    0x0006bbe6 bl 0x37ce4                                            |     fcn_00037ce4 (r0, r1);
    0x0006bbea ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006bbec ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0006bbf0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006bbf2 bne 0x6bb04                                           |         goto label_5;
                                                                     |     }
                                                                     | label_41:
    0x0006bbf4 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006bbf6 ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0006bbf8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006bbfa beq.w 0x6c5c4                                         |         goto label_101;
                                                                     |     }
                                                                     | label_24:
    0x0006bbfe ldr.w r3, [sl, 0x24]                                  |     r3 = *((sl + 0x24));
    0x0006bc02 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006bc04 bne.w 0x6bb04                                         |         goto label_5;
                                                                     |     }
    0x0006bc08 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006bc0a ldrb.w fp, [r3, 0x53]                                 |     fp = *((r3 + 0x53));
    0x0006bc0e cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0006bc12 bne.w 0x6bb04                                         |         goto label_5;
                                                                     |     }
    0x0006bc16 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006bc18 ldr r1, [sp, 0x30]                                    |     r1 = var_30h;
    0x0006bc1a ldrb.w r2, [r2, 0x2c]                                 |     r2 = *((r2 + 0x2c));
    0x0006bc1e cmp r1, 0                                             |     
    0x0006bc20 it ne                                                 |     
                                                                     |     if (r1 != 0) {
    0x0006bc22 cmpne r2, 1                                           |         __asm ("cmpne r2, 1");
                                                                     |     }
    0x0006bc24 str r2, [sp, 0x18]                                    |     var_18h = r2;
                                                                     |     if (r1 > 0) {
    0x0006bc26 bhi.w 0x6cac8                                         |         goto label_102;
                                                                     |     }
                                                                     | label_56:
    0x0006bc2a mov.w r3, -1                                          |     r3 = -1;
    0x0006bc2e str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0006bc30 str r3, [sp, 0x40]                                    |     var_40h = r3;
                                                                     | label_57:
    0x0006bc32 ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0006bc34 ldr r2, [r0]                                          |     r2 = *(r0);
    0x0006bc36 ldrsh.w r1, [r0, 0x32]                                |     r1 = *((r0 + 0x32));
    0x0006bc3a ldr.w r3, [r2, 0x84]                                  |     r3 = *((r2 + 0x84));
    0x0006bc3e add r3, r1                                            |     r3 += r1;
    0x0006bc40 str.w r3, [r2, 0x84]                                  |     __asm ("str.w r3, [r2, 0x84]");
    0x0006bc44 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0006bc46 lsls r1, r3, 0x1d                                     |     r1 = r3 << 0x1d;
                                                                     |     if (r1 < r3) {
    0x0006bc48 bpl 0x6bc6a                                           |         
    0x0006bc4a ldr.w r0, [r0, 0x338]                                 |         r0 = *((r0 + 0x338));
    0x0006bc4e ldr r3, [r0, 0x24]                                    |         r3 = *((r0 + 0x24));
    0x0006bc50 lsls r2, r3, 0x13                                     |         r2 = r3 << 0x13;
                                                                     |         if (r2 >= r3) {
    0x0006bc52 bpl.w 0x6cd1a                                         |             goto label_103;
                                                                     |         }
    0x0006bc56 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0006bc58 movs r1, 1                                            |         r1 = 1;
    0x0006bc5a ldr r2, [r2, 0x18]                                    |         r2 = *((r2 + 0x18));
                                                                     | label_66:
    0x0006bc5c ldr r4, [sp, 0x10]                                    |         r4 = var_10h;
    0x0006bc5e strb.w r1, [r4, 0x2e]                                 |         *((r4 + 0x2e)) = r1;
    0x0006bc62 ldr r2, [r2, 0x24]                                    |         r2 = *((r2 + 0x24));
    0x0006bc64 lsls r4, r2, 0x18                                     |         r4 = r2 << 0x18;
                                                                     |         if (r4 >= r2) {
    0x0006bc66 bpl.w 0x6cd66                                         |             goto label_104;
                                                                     |         }
                                                                     |     }
                                                                     | label_65:
    0x0006bc6a ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0006bc6c cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0006bc6e ble.w 0x6cd90                                         |         goto label_105;
                                                                     |     }
    0x0006bc72 ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0006bc74 movs r3, 0x58                                         |     r3 = 0x58;
    0x0006bc76 ldr r5, [sp, 0x54]                                    |     r5 = var_54h;
    0x0006bc78 mla r3, r3, r2, r1                                    |     __asm ("mla r3, r3, r2, r1");
    0x0006bc7c add.w sb, r3, 0x2f0                                   |     sb = r3 + 0x2f0;
    0x0006bc80 movw r3, 0x8002                                       |     
    0x0006bc84 movt r3, 0x18                                         |     r3 = 0x188002;
    0x0006bc88 strd r3, fp, [sp, 0x20]                               |     __asm ("strd r3, fp, [var_20h]");
                                                                     | label_6:
    0x0006bc8c ldrb.w r7, [r5, 0x34]                                 |     r7 = *((r5 + 0x34));
    0x0006bc90 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0006bc92 lsl.w fp, r7, 3                                       |     
    0x0006bc96 add.w r3, fp, r7                                      |     r3 = fp + r7;
    0x0006bc9a add.w r3, r2, r3, lsl 3                               |     r3 = r2 + (r3 << 3);
    0x0006bc9e ldr r6, [r3, 0x18]                                    |     r6 = *((r3 + 0x18));
    0x0006bca0 ldr r1, [r6, 0x48]                                    |     r1 = *((r6 + 0x48));
    0x0006bca2 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0006bca4 beq.w 0x6cdbe                                         |         goto label_106;
                                                                     |     }
    0x0006bca8 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006bcaa movs r4, 0                                            |     r4 = 0;
    0x0006bcac ldr r3, [r3, 0x10]                                    |     r3 = *((r3 + 0x10));
    0x0006bcae ldr r2, [r3, 0xc]                                     |     r2 = *((r3 + 0xc));
    0x0006bcb0 cmp r1, r2                                            |     
                                                                     |     if (r1 == r2) {
    0x0006bcb2 beq 0x6bcbe                                           |         goto label_69;
                                                                     |     }
                                                                     |     do {
    0x0006bcb4 ldr r2, [r3, 0x1c]                                    |         r2 = *((r3 + 0x1c));
    0x0006bcb6 adds r3, 0x10                                         |         r3 += 0x10;
    0x0006bcb8 adds r4, 1                                            |         r4++;
    0x0006bcba cmp r1, r2                                            |         
    0x0006bcbc bne 0x6bcb4                                           |         
                                                                     |     } while (r1 != r2);
                                                                     | label_69:
    0x0006bcbe ldr r3, [r6, 0x24]                                    |     r3 = *((r6 + 0x24));
    0x0006bcc0 ldr.w r8, [r5, 0x48]                                  |     r8 = *((r5 + 0x48));
    0x0006bcc4 lsls r2, r3, 0x11                                     |     r2 = r3 << 0x11;
    0x0006bcc6 ldr.w r1, [r8, 0x24]                                  |     r1 = *((r8 + 0x24));
                                                                     |     if (r2 >= r3) {
    0x0006bcca bmi 0x6bcd4                                           |         
    0x0006bccc ldr r2, [r6, 0xc]                                     |         r2 = *((r6 + 0xc));
    0x0006bcce cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0006bcd0 beq.w 0x6c752                                         |             goto label_107;
                                                                     |         }
                                                                     |     }
                                                                     | label_36:
    0x0006bcd4 lsls r0, r1, 0x16                                     |     r0 = r1 << 0x16;
                                                                     |     if (r0 < r1) {
    0x0006bcd6 bpl 0x6bd5c                                           |         
    0x0006bcd8 ldr r3, [r6, 0x24]                                    |         r3 = *((r6 + 0x24));
                                                                     | label_73:
    0x0006bcda lsls r1, r3, 0x18                                     |         r1 = r3 << 0x18;
    0x0006bcdc ldr.w r6, [r8, 0x20]                                  |         r6 = *((r8 + 0x20));
                                                                     |         if (r1 < r3) {
    0x0006bce0 bpl 0x6bd04                                           |             
    0x0006bce2 ldrb.w r3, [r6, 0x37]                                 |             r3 = *((r6 + 0x37));
    0x0006bce6 ldr r2, [sp, 0x48]                                    |             r2 = var_48h;
    0x0006bce8 and r3, r3, 3                                         |             r3 &= 3;
    0x0006bcec sub.w r3, r3, 2                                       |             r3 -= 2;
    0x0006bcf0 cmp r2, 0                                             |             
    0x0006bcf2 clz r3, r3                                            |             r3 &= r3;
    0x0006bcf6 lsr.w r3, r3, 5                                       |             r3 >>= 5;
    0x0006bcfa it eq                                                 |             
                                                                     |             if (r2 != 0) {
    0x0006bcfc moveq r3, 0                                           |                 r3 = 0;
                                                                     |             }
    0x0006bcfe cmp r3, 0                                             |             
                                                                     |             if (r3 != 0) {
    0x0006bd00 bne.w 0x6ccc0                                         |                 goto label_108;
                                                                     |             }
                                                                     |         }
    0x0006bd04 ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0006bd06 ldrb.w r3, [r3, 0x2e]                                 |         r3 = *((r3 + 0x2e));
    0x0006bd0a cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0006bd0c bne.w 0x6c7fe                                         |             goto label_109;
                                                                     |         }
    0x0006bd10 ldr r2, [sp, 0xf8]                                    |         r2 = *(arg_f8h);
    0x0006bd12 ldr r3, [sp, 0x48]                                    |         r3 = var_48h;
    0x0006bd14 cmp r3, 0                                             |         
    0x0006bd16 it ne                                                 |         
                                                                     |         if (r3 != 0) {
    0x0006bd18 cmpne r2, 0                                           |             __asm ("cmpne r2, 0");
                                                                     |         }
    0x0006bd1a ittee eq                                              |         
                                                                     |         if (r3 != 0) {
    0x0006bd1c ldreq r2, [sl, 0x28]                                  |             r2 = *((sl + 0x28));
                                                                     |         }
                                                                     |         if (r3 == 0) {
    0x0006bd20 movne r1, 0x62                                        |             r1 = 0x62;
                                                                     |         }
                                                                     |         if (r3 == 0) {
    0x0006bd22 ldrne r2, [sp, 0xf8]                                  |             r2 = *(arg_f8h);
                                                                     |         }
                                                                     |         if (r3 != 0) {
    0x0006bd24 movs r1, 0x61                                         |             r1 = 0x61;
                                                                     |         }
    0x0006bd26 itt eq                                                |         
                                                                     |         if (r1 != 0x61) {
    0x0006bd28 addeq r3, r2, 1                                       |             r3 = r2 + 1;
                                                                     |         }
                                                                     |         if (r1 != 0x61) {
    0x0006bd2a streq r3, [sl, 0x28]                                  |             *((sl + 0x28)) = r3;
                                                                     |         }
                                                                     | label_37:
    0x0006bd2e ldr r7, [sp, 0x58]                                    |         r7 = var_58h;
    0x0006bd30 str r2, [r5, 8]                                       |         *((r5 + 8)) = r2;
    0x0006bd32 ldr r3, [r6, 0x2c]                                    |         r3 = *((r6 + 0x2c));
    0x0006bd34 mov r0, r7                                            |         r0 = r7;
    0x0006bd36 str r4, [sp]                                          |         *(sp) = r4;
    0x0006bd38 bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006bd3c mov r1, r6                                            |         r1 = r6;
    0x0006bd3e mov r0, sl                                            |         r0 = sl;
    0x0006bd40 bl 0x2d434                                            |         fcn_0002d434 (r0, r1);
    0x0006bd44 ldr.w r3, [r8, 0x24]                                  |         r3 = *((r8 + 0x24));
    0x0006bd48 lsls r2, r3, 0x1c                                     |         r2 = r3 << 0x1c;
                                                                     |         if (r2 == r3) {
    0x0006bd4a beq 0x6bd5c                                           |             goto label_63;
                                                                     |         }
    0x0006bd4c ldr r1, [sp, 0x20]                                    |         r1 = var_20h;
    0x0006bd4e tst r3, r1                                            |         
                                                                     |         if ((r3 & r1) != 0) {
    0x0006bd50 bne 0x6bd5c                                           |             goto label_63;
                                                                     |         }
    0x0006bd52 ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0006bd54 ldrh r3, [r2, 0x28]                                   |         r3 = *((r2 + 0x28));
    0x0006bd56 lsls r6, r3, 0x1f                                     |         r6 = r3 << 0x1f;
                                                                     |         if (r6 >= r3) {
    0x0006bd58 bpl.w 0x6cd3e                                         |             goto label_110;
                                                                     |         }
                                                                     |     }
                                                                     | label_63:
    0x0006bd5c cmp r4, 0                                             |     
                                                                     |     if (r4 >= 0) {
    0x0006bd5e blt 0x6bd82                                           |         
                                                                     | label_74:
    0x0006bd60 ldr.w r0, [sl, 0x74]                                  |         r0 = *((sl + 0x74));
    0x0006bd64 movs r3, 1                                            |         r3 = 1;
    0x0006bd66 lsl.w r2, r3, r4                                      |         r2 = r3 << r4;
    0x0006bd6a cmp r0, 0                                             |         
    0x0006bd6c it eq                                                 |         
                                                                     |         if (r0 != 0) {
    0x0006bd6e moveq r0, sl                                          |             r0 = sl;
                                                                     |         }
    0x0006bd70 ldr r3, [r0, 0x54]                                    |         r3 = *((r0 + 0x54));
    0x0006bd72 tst r3, r2                                            |         
                                                                     |         if ((r3 & r2) != 0) {
    0x0006bd74 bne 0x6bd82                                           |             goto label_53;
                                                                     |         }
    0x0006bd76 cmp r4, 1                                             |         
    0x0006bd78 orr.w r3, r3, r2                                      |         r3 |= r2;
    0x0006bd7c str r3, [r0, 0x54]                                    |         *((r0 + 0x54)) = r3;
                                                                     |         if (r4 == 1) {
    0x0006bd7e beq.w 0x6caaa                                         |             goto label_111;
                                                                     |         }
                                                                     |     }
                                                                     | label_53:
    0x0006bd82 adds r5, 0x58                                         |     r5 += 0x58;
    0x0006bd84 cmp r5, sb                                            |     
                                                                     |     if (r5 != sb) {
    0x0006bd86 bne 0x6bc8c                                           |         goto label_6;
                                                                     |     }
    0x0006bd88 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0006bd8a ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006bd8c ldr r3, [r3, 0x6c]                                    |     r3 = *((r3 + 0x6c));
    0x0006bd8e str r3, [r2, 0x34]                                    |     *((r2 + 0x34)) = r3;
    0x0006bd90 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006bd92 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0006bd96 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006bd98 bne.w 0x6bb04                                         |         goto label_5;
                                                                     |     }
    0x0006bd9c str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x0006bd9e ldr.w r3, [pc, 0xb64]                                 |     
    0x0006bda2 ldr r2, [sp, 0x5c]                                    |     r2 = var_5ch;
    0x0006bda4 str.w sl, [sp, 0x18]                                  |     __asm ("str.w sl, [var_18h]");
    0x0006bda8 add r3, pc                                            |     
    0x0006bdaa add.w r3, r3, 0x358                                   |     
    0x0006bdae str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0006bdb0 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0006bdb2 ldr.w r3, [pc, 0xb54]                                 |     r3 = *(0x0006c908);
    0x0006bdb6 add r3, pc                                            |     
    0x0006bdb8 add.w r3, r3, 0x358                                   |     r3 = 0x144b1c;
    0x0006bdbc str r3, [sp, 0x7c]                                    |     var_7ch = r3;
                                                                     | label_7:
    0x0006bdbe ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006bdc0 ldr r5, [r3, 0x48]                                    |     r5 = *((r3 + 0x48));
    0x0006bdc2 ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
    0x0006bdc4 lsls r4, r3, 0x11                                     |     r4 = r3 << 0x11;
                                                                     |     if (r4 >= r3) {
    0x0006bdc6 bpl.w 0x6c310                                         |         goto label_112;
                                                                     |     }
    0x0006bdca ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006bdcc ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0006bdce ldrb.w r1, [r3, 0x34]                                 |     r1 = *((r3 + 0x34));
    0x0006bdd0 asrs r4, r6, 0x20                                     |     r4 = r6 >> 0x20;
    0x0006bdd2 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006bdd4 str r1, [sp, 0x50]                                    |     var_50h = r1;
    0x0006bdd6 ldr r2, [r3, 8]                                       |     r2 = *((r3 + 8));
    0x0006bdd8 movs r3, 0x48                                         |     r3 = 0x48;
    0x0006bdda mla r3, r3, r1, r0                                    |     __asm ("mla r3, r3, r1, r0");
    0x0006bdde ldr r1, [r2, 0x6c]                                    |     r1 = *((r2 + 0x6c));
    0x0006bde0 str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0006bde2 adds r3, 8                                            |     r3 += 8;
    0x0006bde4 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0006bde6 ldr r3, [r2, 0x70]                                    |     r3 = *((r2 + 0x70));
    0x0006bde8 str r1, [sp, 0x5c]                                    |     var_5ch = r1;
    0x0006bdea cmp r1, r3                                            |     
                                                                     |     if (r1 >= r3) {
    0x0006bdec bge.w 0x6c82c                                         |         goto label_113;
                                                                     |     }
    0x0006bdf0 ldr r4, [sp, 0x30]                                    |     r4 = var_30h;
    0x0006bdf2 movs r1, 0                                            |     r1 = 0;
    0x0006bdf4 ldr r0, [sp, 0x5c]                                    |     r0 = var_5ch;
    0x0006bdf6 ldr r3, [r4, 0x68]                                    |     r3 = *((r4 + 0x68));
    0x0006bdf8 add.w r2, r0, r0, lsl 2                               |     r2 = r0 + (r0 << 2);
    0x0006bdfc adds r0, 1                                            |     r0++;
    0x0006bdfe str r0, [r4, 0x6c]                                    |     *((r4 + 0x6c)) = r0;
    0x0006be00 movs r0, 0x11                                         |     r0 = 0x11;
    0x0006be02 str.w r0, [r3, r2, lsl 2]                             |     __asm ("str.w r0, [r3, r2, lsl 2]");
    0x0006be06 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0006be0a strd r1, r1, [r3, 4]                                  |     __asm ("strd r1, r1, [r3, 4]");
    0x0006be0e strd r1, r1, [r3, 0xc]                                |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                     | label_38:
    0x0006be12 ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0006be14 mov.w r8, 0                                           |     r8 = 0;
    0x0006be18 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006be1a ldr r4, [r3, 0x64]                                    |     r4 = *((r3 + 0x64));
    0x0006be1c ldr r6, [r3, 0x5c]                                    |     r6 = *((r3 + 0x5c));
    0x0006be1e lsls r3, r2, 3                                        |     r3 = r2 << 3;
    0x0006be20 adds r7, r3, r2                                       |     r7 = r3 + r2;
    0x0006be22 str r3, [sp, 0x60]                                    |     var_60h = r3;
    0x0006be24 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006be26 add.w r6, r6, r6, lsl 1                               |     r6 += (r6 << 1);
    0x0006be2a add.w r6, r4, r6, lsl 4                               |     r6 = r4 + (r6 << 4);
    0x0006be2e add.w r7, r3, r7, lsl 3                               |     r7 = r3 + (r7 << 3);
    0x0006be32 cmp r4, r6                                            |     
    0x0006be34 ldr r3, [r7, 0x18]                                    |     r3 = *((r7 + 0x18));
    0x0006be36 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
                                                                     |     if (r4 >= r6) {
    0x0006be38 bhs.w 0x6cd0a                                         |         goto label_114;
                                                                     |     }
    0x0006be3c ldr.w sl, [sp, 0x40]                                  |     sl = var_40h;
    0x0006be40 mov fp, r8                                            |     
    0x0006be42 strd r8, r8, [sp, 0x28]                               |     __asm ("strd r8, r8, [var_28h]");
    0x0006be46 str.w r8, [sp, 0x48]                                  |     __asm ("str.w r8, [var_48h]");
    0x0006be48 strh r0, [r1, 2]                                      |     *((r1 + 2)) = r0;
    0x0006be4a str.w r8, [sp, 0x34]                                  |     __asm ("str.w r8, [var_34h]");
                                                                     |     do {
    0x0006be4e ldrd r3, r2, [r5]                                     |         __asm ("ldrd r3, r2, [r5]");
    0x0006be52 orrs r3, r2                                           |         r3 |= r2;
                                                                     |         if (r3 == r2) {
    0x0006be54 bne 0x6be6c                                           |             
    0x0006be56 ldrh r3, [r4, 0xa]                                    |             r3 = *((r4 + 0xa));
    0x0006be58 lsls r0, r3, 0x1e                                     |             r0 = r3 << 0x1e;
                                                                     |             if (r0 < r3) {
    0x0006be5a bmi 0x6be6c                                           |                 goto label_27;
                                                                     |             }
    0x0006be5c ldr.w sb, [r4]                                        |             sb = *(r4);
    0x0006be60 ldr.w r3, [sb, 4]                                     |             r3 = *((sb + 4));
    0x0006be64 ands r8, r3, 1                                        |             r8 = r3 & 1;
                                                                     |             if (r8 == r3) {
    0x0006be68 beq.w 0x6c5fe                                         |                 goto label_115;
                                                                     |             }
                                                                     |         }
                                                                     | label_27:
    0x0006be6c ldr r2, [r4, 0x14]                                    |         r2 = *((r4 + 0x14));
    0x0006be6e ldr r3, [r7, 0x30]                                    |         r3 = *((r7 + 0x30));
    0x0006be70 cmp r2, r3                                            |         
                                                                     |         if (r2 == r3) {
    0x0006be72 bne 0x6bf08                                           |             
    0x0006be74 ldr r2, [sp, 0x1c]                                    |             r2 = var_1ch;
    0x0006be76 mov r3, sl                                            |             r3 = sl;
    0x0006be78 ldr r1, [sp, 0x24]                                    |             r1 = var_24h;
    0x0006be7a mov r0, r4                                            |             r0 = r4;
    0x0006be7c bl 0x1a3ec                                            |             r0 = fcn_0001a3ec (r0, r1);
    0x0006be80 cmp r0, 0                                             |             
                                                                     |             if (r0 == 0) {
    0x0006be82 beq 0x6bf08                                           |                 goto label_25;
                                                                     |             }
    0x0006be84 ldr r3, [r4, 0x18]                                    |             r3 = *((r4 + 0x18));
    0x0006be86 cmp r3, 0x3f                                          |             
    0x0006be88 itt gt                                                |             
                                                                     |             if (r3 <= 0x3f) {
    0x0006be8a movgt r8, 0                                           |                 r8 = 0;
                                                                     |             }
                                                                     |             if (r3 > 0x3f) {
    0x0006be8e mov.w sb, -0x80000000                                 |                 sb = -0x80000000;
                                                                     |             }
                                                                     |             if (r3 <= 0x3f) {
    0x0006be92 bgt 0x6beb0                                           |                 
    0x0006be94 mov.w r8, 1                                           |                 r8 = 1;
    0x0006be98 sub.w sb, r3, 0x20                                    |                 sb = r3 - 0x20;
    0x0006be9c rsb.w r2, r3, 0x20                                    |                 r2 = 0x20 - r3;
    0x0006bea0 lsl.w sb, r8, sb                                      |                 sb = r8 << sb;
    0x0006bea4 lsr.w r2, r8, r2                                      |                 r2 = r8 >> r2;
    0x0006bea8 lsl.w r8, r8, r3                                      |                 r8 <<= r3;
    0x0006beac orr.w sb, sb, r2                                      |                 sb |= r2;
                                                                     |             }
    0x0006beb0 cmp.w fp, 0                                           |             
                                                                     |             if (fp == 0) {
    0x0006beb4 beq.w 0x6c5e2                                         |                 goto label_116;
                                                                     |             }
                                                                     | label_26:
    0x0006beb8 ldr r3, [sp, 0x28]                                    |             r3 = var_28h;
    0x0006beba ldr r2, [sp, 0x2c]                                    |             r2 = var_2ch;
    0x0006bebc and.w r3, r8, r3                                      |             r3 = r8 & r3;
    0x0006bec0 and.w r2, sb, r2                                      |             r2 = sb & r2;
    0x0006bec4 orrs r3, r2                                           |             r3 |= r2;
                                                                     |             if (r3 != r2) {
    0x0006bec6 bne.w 0x6c5dc                                         |                 goto label_117;
                                                                     |             }
    0x0006bec8 strh r1, [r1, 0x1c]                                   |             *((r1 + 0x1c)) = r1;
    0x0006beca ldr r2, [sp, 0x34]                                    |             r2 = var_34h;
    0x0006becc ldrh r3, [r5, 0x2c]                                   |             r3 = *((r5 + 0x2c));
    0x0006bece add.w fp, r2, 1                                       |             
    0x0006bed2 ldr r2, [sp, 0x18]                                    |             r2 = var_18h;
    0x0006bed4 cmp fp, r3                                            |             
    0x0006bed6 ldr r0, [r2]                                          |             r0 = *(r2);
                                                                     |             if (fp > r3) {
    0x0006bed8 ble 0x6bee8                                           |                 
    0x0006beda mov r2, fp                                            |                 r2 = fp;
    0x0006bedc mov r1, r5                                            |                 r1 = r5;
    0x0006bede bl 0x1ad6c                                            |                 r0 = fcn_0001ad6c (r0, r1);
    0x0006bee2 cmp r0, 0                                             |                 
                                                                     |                 if (r0 != 0) {
    0x0006bee4 bne.w 0x6c2f6                                         |                     goto label_118;
                                                                     |                 }
                                                                     |             }
    0x0006bee8 ldr r3, [sp, 0x28]                                    |             r3 = var_28h;
    0x0006beea ldr r2, [sp, 0x34]                                    |             r2 = var_34h;
    0x0006beec str.w fp, [sp, 0x34]                                  |             __asm ("str.w fp, [var_34h]");
    0x0006bef0 mov.w fp, 1                                           |             
    0x0006bef4 orr.w r3, r8, r3                                      |             r3 = r8 | r3;
    0x0006bef8 str r3, [sp, 0x28]                                    |             var_28h = r3;
    0x0006befa ldr r3, [sp, 0x2c]                                    |             r3 = var_2ch;
    0x0006befc orr.w r3, sb, r3                                      |             r3 = sb | r3;
    0x0006bf00 str r3, [sp, 0x2c]                                    |             var_2ch = r3;
    0x0006bf02 ldr r3, [r5, 0x30]                                    |             r3 = *((r5 + 0x30));
    0x0006bf04 str.w r4, [r3, r2, lsl 2]                             |             __asm ("str.w r4, [r3, r2, lsl 2]");
                                                                     |         }
                                                                     | label_25:
    0x0006bf08 adds r4, 0x30                                         |         r4 += 0x30;
    0x0006bf0a cmp r6, r4                                            |         
    0x0006bf0c bhi 0x6be4e                                           |         
                                                                     |     } while (r6 > r4);
    0x0006bf0e ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0006bf10 ldr.w r8, [sp, 0x34]                                  |     r8 = var_34h;
    0x0006bf14 mvns r4, r3                                           |     r4 = ~r3;
    0x0006bf16 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0006bf18 orr r4, r4, 0x80000000                                |     r4 |= 0x80000000;
    0x0006bf1c mvns r2, r3                                           |     r2 = ~r3;
    0x0006bf1e uxth.w r3, r8                                         |     r3 = (int16_t) r8;
                                                                     | label_64:
    0x0006bf22 ldr r1, [sp, 0x50]                                    |     r1 = var_50h;
    0x0006bf24 strh r3, [r5, 0x28]                                   |     *((r5 + 0x28)) = r3;
    0x0006bf26 strh r3, [r5, 0x18]                                   |     *((r5 + 0x18)) = r3;
    0x0006bf28 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0006bf2a add r3, r1                                            |     r3 += r1;
    0x0006bf2c ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0006bf2e add.w r3, r1, r3, lsl 3                               |     r3 = r1 + (r3 << 3);
    0x0006bf32 ldr r1, [sp, 0x4c]                                    |     r1 = var_4ch;
    0x0006bf34 ldr r0, [r3, 0x44]                                    |     r0 = *((r3 + 0x44));
    0x0006bf36 ldrsh.w r7, [r1, 0x2a]                                |     r7 = *((r1 + 0x2a));
    0x0006bf3a movw r1, 0x4241                                       |     r1 = 0x4241;
    0x0006bf3e str r1, [r5, 0x24]                                    |     *((r5 + 0x24)) = r1;
    0x0006bf40 ldr r1, [r3, 0x40]                                    |     r1 = *((r3 + 0x40));
    0x0006bf42 ands r4, r0                                           |     r4 &= r0;
    0x0006bf44 cmp r7, 0x3f                                          |     
    0x0006bf46 mov r3, r7                                            |     r3 = r7;
    0x0006bf48 it ge                                                 |     
                                                                     |     if (r7 < 0x3f) {
    0x0006bf4a movge r3, 0x3f                                        |         r3 = 0x3f;
                                                                     |     }
    0x0006bf4c cmp r7, 0                                             |     
    0x0006bf4e and.w sb, r1, r2                                      |     sb = r1 & r2;
    0x0006bf52 mov sl, r3                                            |     sl = r3;
    0x0006bf54 str r7, [sp, 0x34]                                    |     var_34h = r7;
                                                                     |     if (r7 <= 0) {
    0x0006bf56 ble 0x6bf80                                           |         goto label_119;
                                                                     |     }
    0x0006bf58 movs r3, 0                                            |     r3 = 0;
                                                                     |     do {
    0x0006bf5a rsb.w r1, r3, 0x20                                    |         r1 = 0x20 - r3;
    0x0006bf5e lsr.w r2, sb, r3                                      |         r2 = sb >> r3;
    0x0006bf62 lsl.w r1, r4, r1                                      |         r1 = r4 << r1;
    0x0006bf66 orrs r2, r1                                           |         r2 |= r1;
    0x0006bf68 sub.w r1, r3, 0x20                                    |         r1 = r3 - 0x20;
    0x0006bf6c lsr.w r1, r4, r1                                      |         r1 = r4 >> r1;
    0x0006bf70 adds r3, 1                                            |         r3++;
    0x0006bf72 orrs r2, r1                                           |         r2 |= r1;
    0x0006bf74 lsls r1, r2, 0x1f                                     |         r1 = r2 << 0x1f;
    0x0006bf76 it mi                                                 |         
                                                                     |         if (r1 >= r2) {
    0x0006bf78 addmi r8, r8, 1                                       |             r8++;
                                                                     |         }
    0x0006bf7c cmp sl, r3                                            |         
    0x0006bf7e bne 0x6bf5a                                           |         
                                                                     |     } while (sl != r3);
                                                                     | label_119:
    0x0006bf80 cmp r0, 0                                             |     
    0x0006bf82 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006bf84 it lt                                                 |     
                                                                     |     if (r0 >= 0) {
    0x0006bf86 ldrlt r3, [sp, 0x34]                                  |         r3 = var_34h;
                                                                     |     }
    0x0006bf88 ldr r0, [r2]                                          |     r0 = *(r2);
    0x0006bf8a mov.w r2, 0                                           |     r2 = 0;
    0x0006bf8e itt lt                                                |     
                                                                     |     if (r0 >= 0) {
    0x0006bf90 sublt r3, 0x3f                                        |         r3 -= 0x3f;
                                                                     |     }
                                                                     |     if (r0 >= 0) {
    0x0006bf92 addlt r8, r3                                          |         r8 += r3;
                                                                     |     }
    0x0006bf94 add.w r3, r8, 1                                       |     r3 = r8 + 1;
    0x0006bf98 sxth r1, r3                                           |     __asm ("sxth r1, r3");
    0x0006bf9a str r3, [sp, 0x64]                                    |     var_64h = r3;
    0x0006bf9c add r3, sp, 0xa0                                      |     r3 += var_a0h;
    0x0006bf9e bl 0x1c418                                            |     fcn_0001c418 (r0, r1, r2, r3);
    0x0006bfa2 str r0, [sp, 0x28]                                    |     var_28h = r0;
    0x0006bfa4 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006bfa6 beq.w 0x6c2f6                                         |         goto label_118;
                                                                     |     }
    0x0006bfaa ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0006bfac str r0, [r5, 0x20]                                    |     *((r5 + 0x20)) = r0;
    0x0006bfae str r3, [r0, 0xc]                                     |     *((r0 + 0xc)) = r3;
    0x0006bfb0 ldr.w r3, [pc, 0x958]                                 |     
    0x0006bfb4 add r3, pc                                            |     r3 = 0xd88c4;
    0x0006bfb6 str r3, [r0]                                          |     *(r0) = r3;
    0x0006bfb8 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006bfba ldr r7, [r3, 0x64]                                    |     r7 = *(0xd8928);
    0x0006bfbc cmp r6, r7                                            |     
                                                                     |     if (r6 < r7) {
    0x0006bfbe bls.w 0x6cabc                                         |         goto label_120;
                                                                     |     }
    0x0006bfc2 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0006bfc4 mov.w r8, 0                                           |     r8 = 0;
    0x0006bfc8 ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0006bfca str.w sl, [sp, 0x6c]                                  |     __asm ("str.w sl, [var_6ch]");
    0x0006bfce str.w sb, [sp, 0x70]                                  |     __asm ("str.w sb, [var_70h]");
    0x0006bfd2 add.w fp, r3, r2                                      |     
    0x0006bfd6 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006bfd8 ldr.w sl, [sp, 0x40]                                  |     sl = var_40h;
    0x0006bfdc ldr.w sb, [sp, 0x1c]                                  |     sb = var_1ch;
    0x0006bfe0 str r5, [sp, 0x68]                                    |     var_68h = r5;
    0x0006bfe2 add.w fp, r3, fp, lsl 3                               |     
    0x0006bfe6 ldr r5, [sp, 0x24]                                    |     r5 = var_24h;
    0x0006bfe8 str.w r8, [sp, 0x2c]                                  |     __asm ("str.w r8, [var_2ch]");
    0x0006bfec str r4, [sp, 0x74]                                    |     var_74h = r4;
    0x0006bfee str.w r8, [sp, 0x24]                                  |     __asm ("str.w r8, [var_24h]");
                                                                     |     do {
    0x0006bff2 ldr r2, [r7, 0x14]                                    |         r2 = *((r7 + 0x14));
    0x0006bff4 ldr.w r3, [fp, 0x30]                                  |         r3 = *(arg_30h);
    0x0006bff8 cmp r2, r3                                            |         
                                                                     |         if (r2 == r3) {
    0x0006bffa bne 0x6c040                                           |             
    0x0006bffc mov r2, sb                                            |             r2 = sb;
    0x0006bffe mov r3, sl                                            |             r3 = sl;
    0x0006c000 mov r1, r5                                            |             r1 = r5;
    0x0006c002 mov r0, r7                                            |             r0 = r7;
    0x0006c004 bl 0x1a3ec                                            |             r0 = fcn_0001a3ec (r0, r1);
                                                                     |             if (r0 == 0) {
    0x0006c008 cbz r0, 0x6c040                                       |                 goto label_28;
                                                                     |             }
    0x0006c00a ldr r0, [r7, 0x18]                                    |             r0 = *((r7 + 0x18));
    0x0006c00c cmp r0, 0x3f                                          |             
    0x0006c00e itt gt                                                |             
                                                                     |             if (r0 <= 0x3f) {
    0x0006c010 movgt r1, 0                                           |                 r1 = 0;
                                                                     |             }
                                                                     |             if (r0 <= 0x3f) {
    0x0006c012 movgt r2, -0x80000000                                 |                 r2 = -0x80000000;
                                                                     |             }
                                                                     |             if (r0 <= 0x3f) {
    0x0006c016 bgt 0x6c02e                                           |                 
    0x0006c018 movs r1, 1                                            |                 r1 = 1;
    0x0006c01a sub.w r2, r0, 0x20                                    |                 r2 = r0 - 0x20;
    0x0006c01e rsb.w r3, r0, 0x20                                    |                 r3 = 0x20 - r0;
    0x0006c022 lsl.w r2, r1, r2                                      |                 r2 = r1 << r2;
    0x0006c026 lsr.w r3, r1, r3                                      |                 r3 = r1 >> r3;
    0x0006c02a lsls r1, r0                                           |                 r1 <<= r0;
    0x0006c02c orrs r2, r3                                           |                 r2 |= r3;
                                                                     |             }
    0x0006c02e ldr r3, [sp, 0x24]                                    |             r3 = var_24h;
    0x0006c030 ldr r4, [sp, 0x2c]                                    |             r4 = var_2ch;
    0x0006c032 ands r3, r1                                           |             r3 &= r1;
    0x0006c034 and.w ip, r2, r4                                      |             
    0x0006c038 orrs.w r3, r3, ip                                     |             r3 |= ip;
                                                                     |             if (r3 == r3) {
    0x0006c03c beq.w 0x6c642                                         |                 goto label_121;
                                                                     |             }
                                                                     |         }
                                                                     | label_28:
    0x0006c040 adds r7, 0x30                                         |         r7 += 0x30;
    0x0006c042 cmp r6, r7                                            |         
    0x0006c044 bhi 0x6bff2                                           |         
                                                                     |     } while (r6 > r7);
    0x0006c046 ldrd r5, sl, [sp, 0x68]                               |     __asm ("ldrd r5, sl, [var_6ch]");
    0x0006c04a lsl.w r7, r8, 1                                       |     r7 = r8 << 1;
    0x0006c04e ldrd sb, r4, [sp, 0x70]                               |     __asm ("ldrd sb, r4, [var_70h]");
    0x0006c052 lsl.w r6, r8, 2                                       |     r6 = r8 << 2;
                                                                     | label_55:
    0x0006c056 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0006c058 ldr r0, [r3, 4]                                       |     r0 = *((r3 + 4));
    0x0006c05a ldr r1, [r3, 0x20]                                    |     r1 = *((r3 + 0x20));
    0x0006c05c ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0006c05e cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006c060 ble 0x6c0a0                                           |         goto label_122;
                                                                     |     }
    0x0006c062 ldr r7, [sp, 0x78]                                    |     r7 = var_78h;
    0x0006c064 movs r3, 0                                            |     r3 = 0;
                                                                     |     do {
    0x0006c066 rsb.w r6, r3, 0x20                                    |         r6 = 0x20 - r3;
    0x0006c06a lsr.w r2, sb, r3                                      |         r2 = sb >> r3;
    0x0006c06e lsl.w r6, r4, r6                                      |         r6 = r4 << r6;
    0x0006c072 orrs r2, r6                                           |         r2 |= r6;
    0x0006c074 sub.w r6, r3, 0x20                                    |         r6 = r3 - 0x20;
    0x0006c078 lsr.w r6, r4, r6                                      |         r6 = r4 >> r6;
    0x0006c07c orrs r2, r6                                           |         r2 |= r6;
    0x0006c07e lsls r6, r2, 0x1f                                     |         r6 = r2 << 0x1f;
    0x0006c080 it mi                                                 |         
                                                                     |         if (r6 < r2) {
    0x0006c082 strhmi r3, [r0, r8, lsl 1]                            |             __asm ("strhmi r3, [r0, r8, lsl 1]");
                                                                     |         }
    0x0006c086 add.w r3, r3, 1                                       |         r3++;
    0x0006c08a itt mi                                                |         
                                                                     |         if (r6 >= r2) {
    0x0006c08c strmi r7, [r1, r8, lsl 2]                             |             offset_0 = r8 << 2;
                                                                     |             *((r1 + offset_0)) = r7;
                                                                     |         }
                                                                     |         if (r6 < r2) {
    0x0006c090 add.w r8, r8, 1                                       |             r8++;
                                                                     |         }
    0x0006c094 cmp sl, r3                                            |         
    0x0006c096 bne 0x6c066                                           |         
                                                                     |     } while (sl != r3);
    0x0006c098 lsl.w r7, r8, 1                                       |     r7 = r8 << 1;
    0x0006c09c lsl.w r6, r8, 2                                       |     r6 = r8 << 2;
                                                                     | label_122:
    0x0006c0a0 ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0006c0a2 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0006c0a4 add r3, r2                                            |     r3 += r2;
    0x0006c0a6 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0006c0a8 add.w r3, r2, r3, lsl 3                               |     r3 = r2 + (r3 << 3);
    0x0006c0ac ldr r3, [r3, 0x44]                                    |     r3 = *((r3 + 0x44));
    0x0006c0ae cmp r3, 0                                             |     
                                                                     |     if (r3 < 0) {
    0x0006c0b0 blt.w 0x6c70c                                         |         goto label_123;
                                                                     |     }
                                                                     | label_35:
    0x0006c0b4 ldr.w r4, [pc, 0x858]                                 |     
    0x0006c0b8 movw lr, 0xffff                                       |     lr = 0xffff;
    0x0006c0bc ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006c0be ldr r3, [sp, 0x64]                                    |     r3 = var_64h;
    0x0006c0c0 add r4, pc                                            |     
    0x0006c0c2 ldr r2, [r2, 0x28]                                    |     r2 = *((r2 + 0x28));
    0x0006c0c4 add.w r4, r4, 0x358                                   |     r4 = 0xd8d2c;
    0x0006c0c8 strh.w lr, [r0, r7]                                   |     
    0x0006c0cc str r4, [r1, r6]                                      |     *((r1 + r6)) = r4;
    0x0006c0ce movs r4, 0                                            |     r4 = 0;
    0x0006c0d0 ldr r6, [sp, 0x18]                                    |     r6 = var_18h;
    0x0006c0d2 add.w ip, r2, 1                                       |     
    0x0006c0d6 ldr r7, [sp, 0x20]                                    |     r7 = var_20h;
    0x0006c0d8 movs r1, 0x65                                         |     r1 = 0x65;
    0x0006c0da ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006c0dc str.w ip, [r6, 0x28]                                  |     __asm ("str.w ip, [r6, 0x28]");
    0x0006c0e0 str r2, [r7, 8]                                       |     *((r7 + 8)) = r2;
    0x0006c0e2 str r4, [sp]                                          |     *(sp) = r4;
    0x0006c0e4 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006c0e8 ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0006c0ea mov r0, r6                                            |     r0 = r6;
    0x0006c0ec bl 0x2d434                                            |     fcn_0002d434 (r0, r1);
    0x0006c0f0 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006c0f2 ldrb.w sl, [r7, 0x34]                                 |     sl = *((r7 + 0x34));
    0x0006c0f6 ldr r3, [r3, 0x50]                                    |     r3 = *((r3 + 0x50));
    0x0006c0f8 lsl.w fp, sl, 3                                       |     
    0x0006c0fc ldr.w sb, [r3, 4]                                     |     sb = *((r3 + 4));
    0x0006c100 add.w r2, fp, sl                                      |     r2 = fp + sl;
    0x0006c104 add.w r2, sb, r2, lsl 3                               |     r2 = sb + (r2 << 3);
    0x0006c108 ldrb.w r3, [r2, 0x2d]                                 |     r3 = *((r2 + 0x2d));
    0x0006c10c ands r3, r3, 0x10                                     |     r3 &= 0x10;
                                                                     |     if (r3 == r3) {
    0x0006c110 beq.w 0x6c684                                         |         goto label_124;
                                                                     |     }
    0x0006c114 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0006c116 ldr r6, [r2, 0x24]                                    |     r6 = *((r2 + 0x24));
    0x0006c118 ldr r2, [r3, 0x6c]                                    |     r2 = *((r3 + 0x6c));
    0x0006c11a ldr r3, [r3, 0x70]                                    |     r3 = *((r3 + 0x70));
    0x0006c11c str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0006c11e cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0006c120 bge.w 0x6cca4                                         |         goto label_125;
                                                                     |     }
    0x0006c124 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006c126 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0006c128 ldr r3, [r0, 0x68]                                    |     r3 = *((r0 + 0x68));
    0x0006c12a add.w r2, r1, r1, lsl 2                               |     r2 = r1 + (r1 << 2);
    0x0006c12e adds r1, 1                                            |     r1++;
    0x0006c130 str r1, [r0, 0x6c]                                    |     *((r0 + 0x6c)) = r1;
    0x0006c132 movs r1, 0x45                                         |     r1 = 0x45;
    0x0006c134 str.w r1, [r3, r2, lsl 2]                             |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x0006c138 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0006c13c strd r4, r4, [r3, 4]                                  |     __asm ("strd r4, r4, [r3, 4]");
    0x0006c140 strd r4, r4, [r3, 0xc]                                |     __asm ("strd r4, r4, [r3, 0xc]");
                                                                     | label_61:
    0x0006c144 add.w r3, fp, sl                                      |     r3 = fp + sl;
    0x0006c148 ldr r4, [sp, 0x30]                                    |     r4 = var_30h;
    0x0006c14a add.w r3, sb, r3, lsl 3                               |     r3 = sb + (r3 << 3);
    0x0006c14e mov r2, r6                                            |     r2 = r6;
    0x0006c150 movs r1, 0xd                                          |     r1 = 0xd;
    0x0006c152 ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0006c154 mov r0, r4                                            |     r0 = r4;
    0x0006c156 str r3, [sp]                                          |     *(sp) = r3;
    0x0006c158 movs r3, 0                                            |     r3 = 0;
    0x0006c15a bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006c15e ldrd r4, r3, [r4, 0x6c]                               |     __asm ("ldrd r4, r3, [r4, 0x6c]");
    0x0006c162 cmp r4, r3                                            |     
                                                                     |     if (r4 >= r3) {
    0x0006c164 bge.w 0x6cc90                                         |         goto label_126;
                                                                     |     }
    0x0006c168 ldr r7, [sp, 0x30]                                    |     r7 = var_30h;
    0x0006c16a add.w r3, r4, r4, lsl 2                               |     r3 = r4 + (r4 << 2);
    0x0006c16e adds r2, r4, 1                                        |     r2 = r4 + 1;
    0x0006c170 movs r1, 0                                            |     r1 = 0;
    0x0006c172 ldr r0, [r7, 0x68]                                    |     r0 = *((r7 + 0x68));
    0x0006c174 str r2, [r7, 0x6c]                                    |     *((r7 + 0x6c)) = r2;
    0x0006c176 movs r7, 0xe                                          |     r7 = 0xe;
    0x0006c178 add.w r2, r0, r3, lsl 2                               |     r2 = r0 + (r3 << 2);
    0x0006c17c strd r6, r1, [r2, 4]                                  |     __asm ("strd r6, r1, [r2, 4]");
    0x0006c180 strd r1, r1, [r2, 0xc]                                |     __asm ("strd r1, r1, [r2, 0xc]");
    0x0006c184 str.w r7, [r0, r3, lsl 2]                             |     __asm ("str.w r7, [r0, r3, lsl 2]");
                                                                     | label_60:
    0x0006c188 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0006c18a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0006c18c beq.w 0x6c6bc                                         |         goto label_127;
                                                                     |     }
                                                                     | label_29:
    0x0006c190 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c192 ldr r3, [r0, 0x38]                                    |     r3 = *((r0 + 0x38));
    0x0006c194 subs r7, r3, 1                                        |     r7 = r3 - 1;
    0x0006c196 movs r3, 0x10                                         |     r3 = 0x10;
    0x0006c198 mov r2, r7                                            |     r2 = r7;
    0x0006c19a str r7, [r0, 0x38]                                    |     *((r0 + 0x38)) = r7;
    0x0006c19c bl 0x6373c                                            |     fcn_0006373c (r0, r1, r2, r3, r4);
    0x0006c1a0 ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
    0x0006c1a2 orr r3, r3, 0x20000                                   |     r3 |= 0x20000;
    0x0006c1a6 str r3, [r5, 0x24]                                    |     *((r5 + 0x24)) = r3;
    0x0006c1a8 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006c1aa ldrb r3, [r3, 0x13]                                   |     r3 = *((r3 + 0x13));
    0x0006c1ac cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006c1ae beq.w 0x6c6c8                                         |         goto label_128;
                                                                     |     }
                                                                     | label_30:
    0x0006c1b2 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006c1b4 subs r3, 1                                            |     r3--;
    0x0006c1b6 uxtb r3, r3                                           |     r3 = (int8_t) r3;
    0x0006c1b8 strb r3, [r2, 0x13]                                   |     *((r2 + 0x13)) = r3;
    0x0006c1ba add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
    0x0006c1be ldr.w r6, [r3, 0x94]                                  |     r6 = *((r3 + 0x94));
                                                                     | label_31:
    0x0006c1c2 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006c1c4 movs r5, 0                                            |     r5 = 0;
    0x0006c1c6 ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0006c1c8 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c1ca ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0006c1cc mov r3, r6                                            |     r3 = r6;
    0x0006c1ce strd r5, r5, [sp, 8]                                  |     __asm ("strd r5, r5, [var_8h]");
    0x0006c1d2 strd r5, r5, [sp]                                     |     __asm ("strd r5, r5, [sp]");
    0x0006c1d6 bl 0x6afc4                                            |     fcn_0006afc4 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c1da ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006c1dc movs r1, 0x86                                         |     r1 = 0x86;
    0x0006c1de str r0, [sp, 0x28]                                    |     var_28h = r0;
    0x0006c1e0 ldr r2, [r3, 8]                                       |     r2 = *((r3 + 8));
    0x0006c1e2 mov r3, r6                                            |     r3 = r6;
    0x0006c1e4 str r5, [sp]                                          |     *(sp) = r5;
    0x0006c1e6 ldr r5, [sp, 0x30]                                    |     r5 = var_30h;
    0x0006c1e8 mov r0, r5                                            |     r0 = r5;
    0x0006c1ea bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006c1ee ldr r3, [r5, 0x6c]                                    |     r3 = *((r5 + 0x6c));
    0x0006c1f0 cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0006c1f2 ble 0x6c204                                           |         
    0x0006c1f4 ldr r2, [r5, 0x68]                                    |         r2 = *((r5 + 0x68));
    0x0006c1f6 add.w r1, r3, r3, lsl 2                               |         r1 = r3 + (r3 << 2);
    0x0006c1fa add.w r2, r2, r1, lsl 2                               |         r2 += (r1 << 2);
    0x0006c1fe movs r1, 0x10                                         |         r1 = 0x10;
    0x0006c200 strh r1, [r2, -0x12]                                  |         *((r2 - 0x12)) = r1;
                                                                     |     }
    0x0006c204 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
                                                                     |     if (r2 != 0) {
    0x0006c206 cbz r2, 0x6c21e                                       |         
    0x0006c208 ldr r1, [sp, 0x30]                                    |         r1 = var_30h;
    0x0006c20a mvns r2, r7                                           |         r2 = ~r7;
    0x0006c20c ldr r0, [r1, 0xc]                                     |         r0 = *((r1 + 0xc));
    0x0006c20e ldrd r1, r5, [r0, 0x38]                               |         __asm ("ldrd r1, r5, [r0, 0x38]");
    0x0006c212 cmn r5, r1                                            |         
                                                                     |         if (r5 < r1) {
    0x0006c214 bmi.w 0x6cab2                                         |             goto label_129;
                                                                     |         }
    0x0006c218 ldr r1, [r0, 0x40]                                    |         r1 = *((r0 + 0x40));
    0x0006c21a str.w r3, [r1, r2, lsl 2]                             |         __asm ("str.w r3, [r1, r2, lsl 2]");
                                                                     |     }
                                                                     | label_54:
    0x0006c21e add.w r3, fp, sl                                      |     r3 = fp + sl;
    0x0006c222 add.w r3, sb, r3, lsl 3                               |     r3 = sb + (r3 << 3);
    0x0006c226 ldrb.w r1, [r3, 0x2d]                                 |     r1 = *((r3 + 0x2d));
    0x0006c22a ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006c22c ands r1, r1, 0x10                                     |     r1 &= 0x10;
    0x0006c230 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
                                                                     |     if (r1 == r1) {
    0x0006c232 beq.w 0x6c6da                                         |         goto label_130;
                                                                     |     }
    0x0006c236 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0006c238 ldr r5, [sp, 0x30]                                    |     r5 = var_30h;
    0x0006c23a ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
    0x0006c23c cmp r2, 0                                             |     
    0x0006c23e it lt                                                 |     
                                                                     |     if (r2 >= 0) {
    0x0006c240 ldrlt r2, [sp, 0x30]                                  |         r2 = var_30h;
                                                                     |     }
    0x0006c242 add r0, r8                                            |     r0 += r8;
    0x0006c244 ittt lt                                               |     
                                                                     |     if (r2 >= 0) {
    0x0006c246 ldrlt r2, [r2, 0x6c]                                  |         r2 = *((r2 + 0x6c));
                                                                     |     }
                                                                     |     if (r2 >= 0) {
    0x0006c248 addlt r2, r2, -1                                      |         r2 += -1;
                                                                     |     }
                                                                     |     if (r2 < 0) {
    0x0006c24c str r2, [sp, 0x24]                                    |         var_24h = r2;
                                                                     |     }
    0x0006c24e ldr r2, [r5]                                          |     r2 = *(r5);
    0x0006c250 ldrb.w r2, [r2, 0x53]                                 |     r2 = *((r2 + 0x53));
    0x0006c254 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0006c256 bne.w 0x6c844                                         |         goto label_131;
                                                                     |     }
    0x0006c25a ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0006c25c add.w r1, r2, r2, lsl 2                               |     r1 = r2 + (r2 << 2);
    0x0006c260 ldr r2, [r5, 0x68]                                    |     r2 = *((r5 + 0x68));
    0x0006c262 add.w r2, r2, r1, lsl 2                               |     r2 += (r1 << 2);
                                                                     | label_39:
    0x0006c266 str r0, [r2, 8]                                       |     *((r2 + 8)) = r0;
    0x0006c268 add fp, sl                                            |     
    0x0006c26a ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006c26c add.w r5, sb, fp, lsl 3                               |     r5 = sb + (fp << 3);
    0x0006c270 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c272 ldr r2, [r2, 8]                                       |     r2 = *((r2 + 8));
    0x0006c274 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0006c276 ldr r2, [r5, 0x28]                                    |     r2 = *((r5 + 0x28));
    0x0006c278 str r2, [sp]                                          |     *(sp) = r2;
    0x0006c27a mov r2, r4                                            |     r2 = r4;
    0x0006c27c ldr r1, [r0, 8]                                       |     r1 = *((r0 + 8));
    0x0006c27e ldr r0, [r0]                                          |     r0 = *(r0);
    0x0006c280 bl 0x11b14                                            |     fcn_00011b14 (r0, r1, r2, r3, r4, r5);
    0x0006c284 ldr r7, [sp, 0x30]                                    |     r7 = var_30h;
    0x0006c286 mov r1, r4                                            |     r1 = r4;
    0x0006c288 mov r0, r7                                            |     r0 = r7;
    0x0006c28a bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0006c28e ldrb.w r3, [r5, 0x2d]                                 |     r3 = *((r5 + 0x2d));
    0x0006c292 ldr r2, [r7, 0x6c]                                    |     r2 = *((r7 + 0x6c));
    0x0006c294 bfc r3, 4, 1                                          |     value_1 = BIT_MASK (1, );
                                                                     |     value_1 = ~value_1;
                                                                     |     r3 &= value_1;
    0x0006c298 strb.w r3, [r5, 0x2d]                                 |     *((r5 + 0x2d)) = r3;
                                                                     | label_33:
    0x0006c29c ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006c29e cmp r4, 0                                             |     
    0x0006c2a0 it lt                                                 |     
                                                                     |     if (r4 >= 0) {
    0x0006c2a2 addlt r4, r2, -1                                      |         r4 = r2 + -1;
                                                                     |     }
    0x0006c2a6 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0006c2a8 ldrb.w r1, [r3, 0x53]                                 |     r1 = *((r3 + 0x53));
    0x0006c2ac cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0006c2ae bne.w 0x6c6d2                                         |         goto label_132;
                                                                     |     }
    0x0006c2b2 ldr r3, [r0, 0x68]                                    |     r3 = *((r0 + 0x68));
    0x0006c2b4 add.w r4, r4, r4, lsl 2                               |     r4 += (r4 << 2);
    0x0006c2b8 add.w r3, r3, r4, lsl 2                               |     r3 += (r4 << 2);
                                                                     | label_32:
    0x0006c2bc str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
                                                                     |     if (r6 != 0) {
    0x0006c2be cbz r6, 0x6c2d4                                       |         
    0x0006c2c0 ldr r4, [sp, 0x18]                                    |         r4 = var_18h;
    0x0006c2c2 ldrb r3, [r4, 0x13]                                   |         r3 = *((r4 + 0x13));
    0x0006c2c4 cmp r3, 7                                             |         
    0x0006c2c6 itttt ls                                              |         
                                                                     |         if (r3 > 7) {
    0x0006c2c8 addls r0, r4, r3, lsl 2                               |             r0 = r4 + (r3 << 2);
                                                                     |         }
                                                                     |         if (r3 > 7) {
    0x0006c2cc addls r3, 1                                           |             r3++;
                                                                     |         }
                                                                     |         if (r3 > 7) {
    0x0006c2ce strbls r3, [r4, 0x13]                                 |             *((r4 + 0x13)) = r3;
                                                                     |         }
                                                                     |         if (r3 > 7) {
    0x0006c2d0 str.w r6, [r0, 0x94]                                  |             __asm ("str.w r6, [r0, 0x94]");
                                                                     |             goto label_133;
                                                                     |         }
                                                                     |     }
                                                                     | label_133:
    0x0006c2d4 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0006c2d6 cmp r3, 0                                             |     
    0x0006c2d8 itt lt                                                |     
                                                                     |     if (r3 >= 0) {
    0x0006c2da addlt r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
                                                                     |     if (r3 < 0) {
    0x0006c2de str r3, [sp, 0x5c]                                    |         var_5ch = r3;
                                                                     |     }
    0x0006c2e0 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0006c2e2 bne.w 0x6c704                                         |         goto label_134;
                                                                     |     }
    0x0006c2e6 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0006c2e8 ldr r1, [r3, 0x68]                                    |     r1 = *((r3 + 0x68));
    0x0006c2ea ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0006c2ec add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0006c2f0 add.w r3, r1, r3, lsl 2                               |     r3 = r1 + (r3 << 2);
                                                                     | label_34:
    0x0006c2f4 str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
                                                                     | label_118:
    0x0006c2f6 ldr r3, [sp, 0x48]                                    |     r3 = var_48h;
                                                                     |     if (r3 != 0) {
    0x0006c2f8 cbz r3, 0x6c304                                       |         
    0x0006c2fa mov r1, r3                                            |         r1 = r3;
    0x0006c2fc ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0006c2fe ldr r0, [r3]                                          |         r0 = *(r3);
    0x0006c300 bl 0x18bd0                                            |         fcn_00018bd0 (r0, r1);
                                                                     |     }
    0x0006c304 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006c306 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0006c30a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006c30c bne.w 0x6cd02                                         |         goto label_135;
                                                                     |     }
                                                                     | label_112:
    0x0006c310 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006c312 ldr r3, [r2, 0x74]                                    |     r3 = *((r2 + 0x74));
    0x0006c314 cmp r3, 0                                             |     
    0x0006c316 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0006c318 moveq r3, r2                                          |         r3 = r2;
                                                                     |     }
    0x0006c31a ldrb.w r3, [r3, 0xc7]                                 |     r3 = *((r3 + 0xc7));
    0x0006c31e cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0006c320 bne 0x6c336                                           |         
    0x0006c322 ldr r2, [sp, 0x20]                                    |         r2 = var_20h;
    0x0006c324 ldr r1, [sp, 0x44]                                    |         r1 = var_44h;
    0x0006c326 ldr r3, [r2, 0x48]                                    |         r3 = *((r2 + 0x48));
    0x0006c328 ldrb.w r2, [r2, 0x34]                                 |         r2 = *((r2 + 0x34));
    0x0006c32c str r1, [sp]                                          |         *(sp) = r1;
    0x0006c32e ldrd r1, r0, [sp, 0x14]                               |         __asm ("ldrd r1, r0, [var_14h]");
    0x0006c332 bl 0x2fd50                                            |         fcn_0002fd50 (r0, r1, r2, r3, r4);
                                                                     |     }
    0x0006c336 ldr r1, [sp, 0x58]                                    |     r1 = var_58h;
    0x0006c338 ldr r4, [sp, 0x20]                                    |     r4 = var_20h;
    0x0006c33a ldr r5, [sp, 0x54]                                    |     r5 = var_54h;
    0x0006c33c ldr r3, [r1, 0x6c]                                    |     r3 = *((r1 + 0x6c));
    0x0006c33e ldr r6, [sp, 0x10]                                    |     r6 = var_10h;
    0x0006c340 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c342 str r3, [r4, 0x20]                                    |     *((r4 + 0x20)) = r3;
    0x0006c344 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0006c346 mov r2, r6                                            |     r2 = r6;
    0x0006c348 str r4, [sp]                                          |     *(sp) = r4;
    0x0006c34a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0006c34c ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006c34e str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0006c350 mov r3, r5                                            |     r3 = r5;
    0x0006c352 adds r5, 1                                            |     r5++;
    0x0006c354 str r5, [sp, 0x54]                                    |     var_54h = r5;
    0x0006c356 bl 0x6cf48                                            |     fcn_0006cf48 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c35a ldr r3, [r4, 0x18]                                    |     r3 = *((r4 + 0x18));
    0x0006c35c str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0006c35e str r1, [sp, 0x40]                                    |     var_40h = r1;
    0x0006c360 str r3, [r6, 0x1c]                                    |     *((r6 + 0x1c)) = r3;
    0x0006c362 add.w r3, r4, 0x58                                    |     r3 = r4 + 0x58;
    0x0006c366 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0006c368 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006c36a cmp r3, r5                                            |     
                                                                     |     if (r3 != r5) {
    0x0006c36c bne.w 0x6bdbe                                         |         goto label_7;
                                                                     |     }
    0x0006c370 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0006c372 ldr r3, [r3, 0x6c]                                    |     r3 = *((r3 + 0x6c));
                                                                     | label_67:
    0x0006c374 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006c376 str r3, [r2, 0x38]                                    |     *((r2 + 0x38)) = r3;
    0x0006c378 b.w 0x6bb6c                                           |     goto label_8;
                                                                     | label_95:
    0x0006c37c ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0006c37e ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006c380 orrs r2, r3                                           |     r2 |= r3;
    0x0006c382 ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
    0x0006c384 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0006c386 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006c388 orrs r2, r3                                           |     r2 |= r3;
    0x0006c38a str r2, [sp, 0x20]                                    |     var_20h = r2;
                                                                     | label_17:
    0x0006c38c cmp r0, 0x65                                          |     
                                                                     |     if (r0 != 0x65) {
    0x0006c38e bne.w 0x6ce80                                         |         goto label_136;
                                                                     |     }
    0x0006c392 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0006c394 movs r0, 0x1c                                         |     r0 = 0x1c;
    0x0006c396 blx 0x8474                                            |     fcn_00008474 ();
                                                                     | label_97:
    0x0006c39a ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006c39c cmp sb, r8                                            |     
    0x0006c39e add.w r3, r3, 1                                       |     r3++;
    0x0006c3a2 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     |     if (sb < r8) {
    0x0006c3a4 bls.w 0x6bad2                                         |         goto label_9;
                                                                     |     }
    0x0006c3a8 ldr r3, [sp, 0x9c]                                    |     r3 = var_9ch;
    0x0006c3aa add.w r8, r8, 0x48                                    |     r8 += 0x48;
    0x0006c3ae b.w 0x6ba30                                           |     goto label_10;
                                                                     | label_93:
    0x0006c3b2 movs r2, 0                                            |     r2 = 0;
    0x0006c3b4 mov r0, r2                                            |     r0 = r2;
    0x0006c3b6 b.w 0x6ba78                                           |     goto label_11;
                                                                     | label_94:
    0x0006c3ba cmp sb, r8                                            |     
    0x0006c3bc mov.w r5, 0                                           |     r5 = 0;
                                                                     |     if (sb < r8) {
    0x0006c3c0 bls.w 0x6c5b0                                         |         goto label_137;
                                                                     |     }
    0x0006c3c4 mov ip, r8                                            |     
    0x0006c3c6 mov sl, r5                                            |     sl = r5;
    0x0006c3c8 mov.w lr, 1                                           |     lr = 1;
                                                                     | label_12:
    0x0006c3cc orrs.w r2, r5, sl                                     |     r2 = r5 | sl;
                                                                     |     if (r2 == r5) {
    0x0006c3d0 beq 0x6c426                                           |         goto label_15;
                                                                     |     }
                                                                     | label_14:
    0x0006c3d2 cmp r3, 0                                             |     
    0x0006c3d4 ldr.w r4, [ip, 0x28]                                  |     r4 = *((ip + 0x28));
                                                                     |     if (r3 <= 0) {
    0x0006c3d8 ble 0x6c40c                                           |         goto label_138;
                                                                     |     }
    0x0006c3da add.w r1, fp, 0x1ec                                   |     r1 += arg_1ech;
    0x0006c3de movs r2, 0                                            |     r2 = 0;
    0x0006c3e0 b 0x6c3e8                                             |     
                                                                     |     while (r4 != r0) {
    0x0006c3e2 adds r2, 1                                            |         r2++;
    0x0006c3e4 cmp r3, r2                                            |         
                                                                     |         if (r3 == r2) {
    0x0006c3e6 beq 0x6c40c                                           |             goto label_138;
                                                                     |         }
    0x0006c3e8 ldr r0, [r1, 4]!                                      |         r0 = *((r1 += 4));
    0x0006c3ec cmp r4, r0                                            |         
    0x0006c3ee bne 0x6c3e2                                           |         
                                                                     |     }
    0x0006c3f0 sub.w r1, r2, 0x20                                    |     r1 = r2 - 0x20;
    0x0006c3f4 rsb.w r0, r2, 0x20                                    |     r0 = 0x20 - r2;
    0x0006c3f8 lsl.w r1, lr, r1                                      |     r1 = lr << r1;
    0x0006c3fc lsr.w r0, lr, r0                                      |     r0 = lr >> r0;
    0x0006c400 lsl.w r2, lr, r2                                      |     r2 = lr << r2;
    0x0006c404 orrs r1, r0                                           |     r1 |= r0;
    0x0006c406 orr.w sl, r1, sl                                      |     sl = r1 | sl;
    0x0006c40a orrs r5, r2                                           |     r5 |= r2;
                                                                     | label_138:
    0x0006c40c add.w ip, ip, 0x48                                    |     
    0x0006c410 cmp sb, ip                                            |     
                                                                     |     if (sb > ip) {
    0x0006c412 bhi 0x6c3cc                                           |         goto label_12;
                                                                     |     }
    0x0006c414 ldrd r3, r0, [sp, 0x24]                               |     __asm ("ldrd r3, r0, [var_28h]");
    0x0006c418 mov r2, r7                                            |     r2 = r7;
    0x0006c41a strd r5, sl, [sp]                                     |     __asm ("strd r5, sl, [sp]");
    0x0006c41e bl 0x34af0                                            |     fcn_00034af0 (r0, r1, r2, r3, r4);
    0x0006c422 b.w 0x6baa6                                           |     goto label_13;
                                                                     | label_15:
    0x0006c426 ldrb.w r2, [ip, 0x24]                                 |     r2 = *((ip + 0x24));
    0x0006c42a tst.w r2, 0xa                                         |     
                                                                     |     if ((r2 & 0xa) != 0) {
    0x0006c42e bne 0x6c3d2                                           |         goto label_14;
                                                                     |     }
    0x0006c430 add.w ip, ip, 0x48                                    |     
    0x0006c434 cmp sb, ip                                            |     
                                                                     |     if (sb > ip) {
    0x0006c436 bhi 0x6c426                                           |         goto label_15;
                                                                     |     }
    0x0006c438 ldrd r3, r0, [sp, 0x24]                               |     __asm ("ldrd r3, r0, [var_28h]");
    0x0006c43c mov r2, r7                                            |     r2 = r7;
    0x0006c43e strd r5, sl, [sp]                                     |     __asm ("strd r5, sl, [sp]");
    0x0006c442 bl 0x34af0                                            |     fcn_00034af0 (r0, r1, r2, r3, r4);
    0x0006c446 b.w 0x6baa6                                           |     goto label_13;
                                                                     | label_96:
    0x0006c44a ldrd r3, r0, [sp, 0x24]                               |     __asm ("ldrd r3, r0, [var_28h]");
    0x0006c44e mov r2, r7                                            |     r2 = r7;
    0x0006c450 strd r5, sl, [sp]                                     |     __asm ("strd r5, sl, [sp]");
    0x0006c454 bl 0x39310                                            |     fcn_00039310 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c458 ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0006c45a ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006c45c orrs r2, r3                                           |     r2 |= r3;
    0x0006c45e ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
    0x0006c460 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0006c462 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006c464 orrs r2, r3                                           |     r2 |= r3;
    0x0006c466 str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0006c468 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006c46a beq.w 0x6bac6                                         |         goto label_16;
                                                                     |     }
    0x0006c46e b 0x6c38c                                             |     goto label_17;
                                                                     | label_89:
    0x0006c470 ldr r1, [r4]                                          |     r1 = *(r4);
    0x0006c472 b.w 0x6b99c                                           |     goto label_18;
                                                                     | label_85:
    0x0006c476 ldr.w r3, [pc, 0x49c]                                 |     r3 = *(0x0006c914);
    0x0006c47a ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0006c47c str r6, [sp, 0x1c]                                    |     var_1ch = r6;
    0x0006c47e add r3, pc                                            |     r3 += pc;
    0x0006c480 str.w fp, [sp, 0x18]                                  |     __asm ("str.w fp, [var_18h]");
    0x0006c484 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_20:
    0x0006c486 ldr r4, [sp, 0x10]                                    |     r4 = var_10h;
    0x0006c488 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006c48a ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0006c48c ldr.w r3, [r4, 0x1ec]                                 |     r3 = *((r4 + 0x1ec));
    0x0006c490 add.w r2, r2, r2, lsl 3                               |     r2 += (r2 << 3);
    0x0006c494 adds r0, r3, 1                                        |     r0 = r3 + 1;
    0x0006c496 add.w r2, r1, r2, lsl 3                               |     r2 = r1 + (r2 << 3);
    0x0006c49a ldr r1, [r7, 0x30]                                    |     r1 = *((r7 + 0x30));
    0x0006c49c add.w r3, r4, r3, lsl 2                               |     r3 = r4 + (r3 << 2);
    0x0006c4a0 str.w r0, [r4, 0x1ec]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x0006c4a4 str.w r1, [r3, 0x1f0]                                 |     __asm ("str.w r1, aav.0x000000ff");
    0x0006c4a8 ldrb.w r3, [r2, 0x2d]                                 |     r3 = *((r2 + 0x2d));
    0x0006c4ac lsls r1, r3, 0x1d                                     |     r1 = r3 << 0x1d;
                                                                     |     if (r1 >= r3) {
    0x0006c4ae bpl 0x6c56c                                           |         goto label_23;
                                                                     |     }
    0x0006c4b0 ldr.w fp, [r7, 0x48]                                  |     fp = *((r7 + 0x48));
    0x0006c4b4 ldr r6, [r7, 0x18]                                    |     r6 = *((r7 + 0x18));
    0x0006c4b6 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0006c4ba beq 0x6c56c                                           |         goto label_23;
                                                                     |     }
    0x0006c4bc ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0006c4c0 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006c4c2 ble 0x6c56c                                           |         goto label_23;
                                                                     |     }
    0x0006c4c4 movs r4, 0                                            |     r4 = 0;
    0x0006c4c6 mov sb, fp                                            |     sb = fp;
    0x0006c4c8 mov r8, r4                                            |     r8 = r4;
                                                                     | label_19:
    0x0006c4ca ldrsh.w r1, [r6, 0x2a]                                |     r1 = *((r6 + 0x2a));
    0x0006c4ce cmp r4, r1                                            |     
                                                                     |     if (r4 >= r1) {
    0x0006c4d0 bge 0x6c58c                                           |         goto label_139;
                                                                     |     }
    0x0006c4d2 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0006c4d4 add.w r2, r4, r4, lsl 2                               |     r2 = r4 + (r4 << 2);
    0x0006c4d8 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0006c4dc b 0x6c4e6                                             |     
                                                                     |     while (r2 >= r2) {
    0x0006c4de adds r4, 1                                            |         r4++;
    0x0006c4e0 adds r3, 0x14                                         |         r3 += 0x14;
    0x0006c4e2 cmp r4, r1                                            |         
                                                                     |         if (r4 == r1) {
    0x0006c4e4 beq 0x6c58c                                           |             goto label_139;
                                                                     |         }
    0x0006c4e6 ldrh r2, [r3, 0x10]                                   |         r2 = *((r3 + 0x10));
    0x0006c4e8 lsls r2, r2, 0x1e                                     |         r2 <<= 0x1e;
    0x0006c4ea bpl 0x6c4de                                           |         
                                                                     |     }
    0x0006c4ec ldr.w r0, [sl]                                        |     r0 = *(sl);
    0x0006c4f0 movs r2, 0x34                                         |     r2 = 0x34;
    0x0006c4f2 movs r3, 0                                            |     r3 = 0;
    0x0006c4f4 bl 0x1abdc                                            |     r0 = fcn_0001abdc (r0, r1);
    0x0006c4f8 mov r5, r0                                            |     r5 = r0;
                                                                     |     if (r0 == 0) {
    0x0006c4fa cbz r0, 0x6c56c                                       |         goto label_23;
                                                                     |     }
    0x0006c4fc movs r2, 0x34                                         |     r2 = 0x34;
    0x0006c4fe movs r1, 0                                            |     r1 = 0;
    0x0006c500 blx 0x8264                                            |     fcn_00008264 ();
    0x0006c504 movs r3, 0xa6                                         |     r3 = 0xa6;
    0x0006c506 strb r3, [r5]                                         |     *(r5) = r3;
    0x0006c508 ldr r3, [r7, 0x30]                                    |     r3 = *((r7 + 0x30));
    0x0006c50a ldr.w r2, [sb, 8]                                     |     r2 = *((sb + 8));
    0x0006c50e strh r4, [r5, 0x20]                                   |     *((r5 + 0x20)) = r4;
    0x0006c510 adds r4, 1                                            |     r4++;
    0x0006c512 str r3, [r5, 0x1c]                                    |     *((r5 + 0x1c)) = r3;
    0x0006c514 movw r3, 0xffff                                       |     r3 = 0xffff;
    0x0006c518 strh r3, [r5, 0x22]                                   |     *((r5 + 0x22)) = r3;
    0x0006c51a movs r3, 1                                            |     r3 = 1;
    0x0006c51c str r6, [r5, 0x2c]                                    |     *((r5 + 0x2c)) = r6;
    0x0006c51e str r3, [r5, 0x18]                                    |     *((r5 + 0x18)) = r3;
                                                                     |     if (r2 != 0) {
    0x0006c520 cbz r2, 0x6c532                                       |         
    0x0006c522 movs r3, 0                                            |         r3 = 0;
    0x0006c524 mov r1, r2                                            |         r1 = r2;
    0x0006c526 ldr.w r0, [sl]                                        |         r0 = *(sl);
    0x0006c52a mov r2, r3                                            |         r2 = r3;
    0x0006c52c bl 0x311ec                                            |         r0 = fcn_000311ec (r0, r1, r2, r3);
    0x0006c530 mov r2, r0                                            |         r2 = r0;
                                                                     |     }
    0x0006c532 movs r1, 0xad                                         |     r1 = 0xad;
    0x0006c534 movs r3, 0                                            |     r3 = 0;
    0x0006c536 mov r0, sl                                            |     r0 = sl;
    0x0006c538 bl 0x264f8                                            |     fcn_000264f8 (r0, r1, r2, r3);
    0x0006c53c mov r2, r5                                            |     r2 = r5;
    0x0006c53e mov r3, r0                                            |     r3 = r0;
    0x0006c540 movs r1, 0x35                                         |     r1 = 0x35;
    0x0006c542 mov r0, sl                                            |     r0 = sl;
    0x0006c544 bl 0x264f8                                            |     fcn_000264f8 (r0, r1, r2, r3);
    0x0006c548 ldrb.w r3, [r7, 0x2c]                                 |     r3 = *((r7 + 0x2c));
    0x0006c54c mov r5, r0                                            |     r5 = r0;
    0x0006c54e lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
                                                                     |     if (r3 < r3) {
    0x0006c550 bmi 0x6c584                                           |         goto label_140;
                                                                     |     }
                                                                     | label_22:
    0x0006c552 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c554 mov r1, r5                                            |     r1 = r5;
    0x0006c556 movs r2, 1                                            |     r2 = 1;
    0x0006c558 add.w r8, r8, 1                                       |     r8++;
    0x0006c55c bl 0x20170                                            |     fcn_00020170 (r0, r1, r2, r3);
    0x0006c560 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0006c564 add.w sb, sb, 0x10                                    |     sb += 0x10;
    0x0006c568 cmp r8, r3                                            |     
                                                                     |     if (r8 < r3) {
    0x0006c56a blt 0x6c4ca                                           |         goto label_19;
                                                                     |     }
                                                                     | label_23:
    0x0006c56c ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006c56e adds r7, 0x48                                         |     r7 += 0x48;
    0x0006c570 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006c572 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006c574 adds r2, 1                                            |     r2++;
    0x0006c576 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0006c578 cmp r3, r2                                            |     
                                                                     |     if (r3 > r2) {
    0x0006c57a bgt 0x6c486                                           |         goto label_20;
                                                                     |     }
    0x0006c57c ldr.w fp, [sp, 0x18]                                  |     fp = var_18h;
    0x0006c580 b.w 0x6b90a                                           |     goto label_21;
                                                                     | label_140:
    0x0006c584 ldr r1, [r7, 0x30]                                    |     r1 = *((r7 + 0x30));
    0x0006c586 bl 0x9f28                                             |     fcn_00009f28 (r0, r1);
    0x0006c58a b 0x6c552                                             |     goto label_22;
                                                                     | label_139:
    0x0006c58c ldr r2, [r6]                                          |     r2 = *(r6);
    0x0006c58e mov r3, r8                                            |     r3 = r8;
    0x0006c590 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0006c592 mov r0, sl                                            |     r0 = sl;
    0x0006c594 bl 0x25778                                            |     fcn_00025778 (r0);
    0x0006c598 b 0x6c56c                                             |     goto label_23;
                                                                     | label_84:
    0x0006c59a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006c59c beq.w 0x6bb6c                                         |         goto label_8;
                                                                     |     }
    0x0006c5a0 mov r1, r0                                            |     r1 = r0;
    0x0006c5a2 movs r3, 0                                            |     r3 = 0;
    0x0006c5a4 ldr r0, [sp, 0x38]                                    |     r0 = var_38h;
    0x0006c5a6 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0006c5a8 bl 0x159dc                                            |     fcn_000159dc (r0, r1);
    0x0006c5ac b.w 0x6bb6c                                           |     goto label_8;
                                                                     | label_137:
    0x0006c5b0 mov sl, r5                                            |     sl = r5;
    0x0006c5b2 ldrd r3, r0, [sp, 0x24]                               |     __asm ("ldrd r3, r0, [var_28h]");
    0x0006c5b6 mov r2, r7                                            |     r2 = r7;
    0x0006c5b8 strd r5, sl, [sp]                                     |     __asm ("strd r5, sl, [sp]");
    0x0006c5bc bl 0x34af0                                            |     fcn_00034af0 (r0, r1, r2, r3, r4);
    0x0006c5c0 b.w 0x6baa6                                           |     goto label_13;
                                                                     | label_101:
    0x0006c5c4 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0006c5c6 ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0006c5c8 lsls r7, r3, 0x13                                     |     r7 = r3 << 0x13;
                                                                     |     if (r7 >= r3) {
    0x0006c5ca bpl.w 0x6bbfe                                         |         goto label_24;
                                                                     |     }
    0x0006c5ce ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006c5d0 vmov.i8 d16, 0xff                                     |     __asm ("vmov.i8 d16, 0xff");
    0x0006c5d4 vstr d16, [r3, 0x48]                                  |     __asm ("vstr d16, [r3, 0x48]");
    0x0006c5d8 b.w 0x6bbfe                                           |     goto label_24;
                                                                     | label_117:
    0x0006c5dc mov.w fp, 1                                           |     
    0x0006c5e0 b 0x6bf08                                             |     goto label_25;
                                                                     | label_116:
    0x0006c5e2 ldr r1, [sp, 0x4c]                                    |     r1 = var_4ch;
    0x0006c5e4 add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0006c5e8 mov.w r0, 0x11c                                       |     r0 = 0x11c;
    0x0006c5ec ldr r2, [r1, 4]                                       |     r2 = *((r1 + 4));
    0x0006c5ee ldr.w r3, [r2, r3, lsl 2]                             |     offset_2 = r3 << 2;
                                                                     |     r3 = *((r2 + offset_2));
    0x0006c5f2 ldr r2, [r1]                                          |     r2 = *(r1);
    0x0006c5f4 ldr r1, [pc, 0x320]                                   |     
    0x0006c5f6 add r1, pc                                            |     r1 = 0xd8f12;
    0x0006c5f8 blx 0x8474                                            |     fcn_00008474 ();
    0x0006c5fc b 0x6beb8                                             |     goto label_26;
                                                                     | label_115:
    0x0006c5fe ldr r3, [r7, 0x30]                                    |     r3 = *((r7 + 0x30));
    0x0006c600 mov r1, sb                                            |     r1 = sb;
    0x0006c602 add r0, sp, 0xa0                                      |     r0 += var_a0h;
    0x0006c604 str r3, [sp, 0xb8]                                    |     var_b8h = r3;
    0x0006c606 ldr r3, [pc, 0x314]                                   |     
    0x0006c608 add r3, pc                                            |     r3 = 0xd8f2a;
    0x0006c60a str r3, [sp, 0xa4]                                    |     var_a4h = r3;
    0x0006c60c ldr r3, [pc, 0x310]                                   |     
    0x0006c60e add r3, pc                                            |     r3 = 0xd8f32;
    0x0006c610 str r3, [sp, 0xa8]                                    |     var_a8h = r3;
    0x0006c612 movs r3, 3                                            |     r3 = 3;
    0x0006c614 strh.w r3, [sp, 0xb4]                                 |     var_b4h = r3;
    0x0006c618 bl 0x301c4                                            |     fcn_000301c4 (r0, r1);
    0x0006c61c ldrh.w r3, [sp, 0xb4]                                 |     r3 = var_b4h;
    0x0006c620 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006c622 beq.w 0x6be6c                                         |         goto label_27;
                                                                     |     }
    0x0006c626 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c628 mov r1, sb                                            |     r1 = sb;
    0x0006c62a mov r3, r8                                            |     r3 = r8;
    0x0006c62c mov r2, r8                                            |     r2 = r8;
    0x0006c62e ldr r0, [r0]                                          |     r0 = *(r0);
    0x0006c630 bl 0x311ec                                            |     fcn_000311ec (r0, r1, r2, r3);
    0x0006c634 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0006c636 mov r2, r0                                            |     r2 = r0;
    0x0006c638 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c63a bl 0x2659c                                            |     fcn_0002659c (r0, r1, r2);
    0x0006c63e str r0, [sp, 0x48]                                    |     var_48h = r0;
    0x0006c640 b 0x6be6c                                             |     goto label_27;
                                                                     | label_121:
    0x0006c642 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0006c644 orrs r3, r1                                           |     r3 |= r1;
    0x0006c646 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0006c648 mov r3, r4                                            |     r3 = r4;
    0x0006c64a orrs r3, r2                                           |     r3 |= r2;
    0x0006c64c ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0006c64e str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0006c650 ldr r3, [r7]                                          |     r3 = *(r7);
    0x0006c652 ldr r2, [r2, 4]                                       |     r2 = *((r2 + 4));
    0x0006c654 strh.w r0, [r2, r8, lsl 1]                            |     offset_3 = r8 << 1;
                                                                     |     *((r2 + offset_3)) = r0;
    0x0006c658 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0006c65a ldrd r1, r3, [r3, 0xc]                                |     __asm ("ldrd r1, r3, [r3, 0xc]");
    0x0006c65e ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006c660 lsls r2, r2, 0x16                                     |     r2 <<= 0x16;
    0x0006c662 itet mi                                               |     
                                                                     |     if (r2 >= r2) {
    0x0006c664 movmi r2, r1                                          |         r2 = r1;
                                                                     |     }
                                                                     |     if (r2 < r2) {
    0x0006c666 movpl r2, r3                                          |         r2 = r3;
                                                                     |     }
                                                                     |     if (r2 >= r2) {
    0x0006c668 movmi r1, r3                                          |         r1 = r3;
                                                                     |     }
    0x0006c66a bl 0x2d56c                                            |     r0 = fcn_0002d56c (r0, r1, r2);
    0x0006c66e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006c670 beq.w 0x6ca88                                         |         goto label_141;
                                                                     |     }
    0x0006c674 ldr r2, [r0]                                          |     r2 = *(r0);
                                                                     | label_52:
    0x0006c676 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0006c678 ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0006c67a str.w r2, [r3, r8, lsl 2]                             |     __asm ("str.w r2, [r3, r8, lsl 2]");
    0x0006c67e add.w r8, r8, 1                                       |     r8++;
    0x0006c682 b 0x6c040                                             |     goto label_28;
                                                                     | label_124:
    0x0006c684 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0006c686 ldrd r4, r1, [r2, 0x6c]                               |     __asm ("ldrd r4, r1, [r2, 0x6c]");
    0x0006c68a ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0006c68c cmp r4, r1                                            |     
    0x0006c68e ldr r2, [r2, 4]                                       |     r2 = *((r2 + 4));
                                                                     |     if (r4 >= r1) {
    0x0006c690 bge.w 0x6cc7e                                         |         goto label_142;
                                                                     |     }
    0x0006c694 ldr r7, [sp, 0x30]                                    |     r7 = var_30h;
    0x0006c696 add.w r1, r4, r4, lsl 2                               |     r1 = r4 + (r4 << 2);
    0x0006c69a adds r6, r4, 1                                        |     r6 = r4 + 1;
    0x0006c69c str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0006c69e ldr r0, [r7, 0x68]                                    |     r0 = *((r7 + 0x68));
    0x0006c6a0 str r6, [r7, 0x6c]                                    |     *((r7 + 0x6c)) = r6;
    0x0006c6a2 movs r6, 0x25                                         |     r6 = 0x25;
    0x0006c6a4 add.w r7, r0, r1, lsl 2                               |     r7 = r0 + (r1 << 2);
    0x0006c6a8 strd r2, r3, [r7, 4]                                  |     __asm ("strd r2, r3, [r7, 4]");
    0x0006c6ac strd r3, r3, [r7, 0xc]                                |     __asm ("strd r3, r3, [r7, 0xc]");
    0x0006c6b0 str.w r6, [r0, r1, lsl 2]                             |     __asm ("str.w r6, [r0, r1, lsl 2]");
    0x0006c6b4 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0006c6b6 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0006c6b8 bne.w 0x6c190                                         |         goto label_29;
                                                                     |     }
                                                                     | label_127:
    0x0006c6bc ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006c6be ldr r7, [sp, 0x48]                                    |     r7 = var_48h;
    0x0006c6c0 ldrb r3, [r3, 0x13]                                   |     r3 = *((r3 + 0x13));
    0x0006c6c2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006c6c4 bne.w 0x6c1b2                                         |         goto label_30;
                                                                     |     }
                                                                     | label_128:
    0x0006c6c8 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006c6ca ldr r3, [r2, 0x2c]                                    |     r3 = *((r2 + 0x2c));
    0x0006c6cc adds r6, r3, 1                                        |     r6 = r3 + 1;
    0x0006c6ce str r6, [r2, 0x2c]                                    |     *((r2 + 0x2c)) = r6;
    0x0006c6d0 b 0x6c1c2                                             |     goto label_31;
                                                                     | label_132:
    0x0006c6d2 ldr r3, [pc, 0x250]                                   |     
    0x0006c6d4 add r3, pc                                            |     r3 = 0xd8ffe;
    0x0006c6d6 adds r3, 4                                            |     r3 += 4;
    0x0006c6d8 b 0x6c2bc                                             |     goto label_32;
                                                                     | label_130:
    0x0006c6da ldr r5, [sp, 0x30]                                    |     r5 = var_30h;
    0x0006c6dc mov r2, r3                                            |     r2 = r3;
    0x0006c6de str r1, [sp]                                          |     *(sp) = r1;
    0x0006c6e0 adds r3, r4, 1                                        |     r3 = r4 + 1;
    0x0006c6e2 movs r1, 5                                            |     r1 = 5;
    0x0006c6e4 mov r0, r5                                            |     r0 = r5;
    0x0006c6e6 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0006c6ea ldr r2, [r5, 0x6c]                                    |     r2 = *((r5 + 0x6c));
    0x0006c6ec cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0006c6ee ble.w 0x6c29c                                         |         goto label_33;
                                                                     |     }
    0x0006c6f2 ldr r3, [r5, 0x68]                                    |     r3 = *((r5 + 0x68));
    0x0006c6f4 add.w r1, r2, r2, lsl 2                               |     r1 = r2 + (r2 << 2);
    0x0006c6f8 add.w r3, r3, r1, lsl 2                               |     r3 += (r1 << 2);
    0x0006c6fc movs r1, 3                                            |     r1 = 3;
    0x0006c6fe strh r1, [r3, -0x12]                                  |     *((r3 - 0x12)) = r1;
    0x0006c702 b 0x6c29c                                             |     goto label_33;
                                                                     | label_134:
    0x0006c704 ldr r3, [pc, 0x220]                                   |     
    0x0006c706 add r3, pc                                            |     r3 = 0xd9032;
    0x0006c708 adds r3, 4                                            |     r3 += 4;
    0x0006c70a b 0x6c2f4                                             |     goto label_34;
                                                                     | label_123:
    0x0006c70c ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0006c70e ldrsh.w r3, [r3, 0x2a]                                |     r3 = *((r3 + 0x2a));
    0x0006c712 cmp r3, 0x3f                                          |     
                                                                     |     if (r3 <= 0x3f) {
    0x0006c714 ble.w 0x6c0b4                                         |         goto label_35;
                                                                     |     }
    0x0006c718 ldr r7, [pc, 0x210]                                   |     
    0x0006c71a add.w r4, r0, r8, lsl 1                               |     r4 = r0 + (r8 << 1);
    0x0006c71e ldr.w lr, [sp, 0x4c]                                  |     lr = var_4ch;
    0x0006c722 add.w r2, r1, r8, lsl 2                               |     r2 = r1 + (r8 << 2);
    0x0006c726 sub.w ip, r8, 0x3e                                    |     
    0x0006c72a add r7, pc                                            |     
    0x0006c72c movs r3, 0x3f                                         |     r3 = 0x3f;
    0x0006c72e add.w r7, r7, 0x358                                   |     r7 = 0xd93b2;
                                                                     |     do {
    0x0006c732 strh r3, [r4], 2                                      |         *(r4) = r3;
                                                                     |         r4 += 2;
    0x0006c736 add.w r8, ip, r3                                      |         r8 = ip + r3;
    0x0006c73a ldrsh.w r6, [lr, 0x2a]                                |         r6 = *((lr + 0x2a));
    0x0006c73e adds r3, 1                                            |         r3++;
    0x0006c740 str r7, [r2], 4                                       |         *(r2) = r7;
                                                                     |         r2 += 4;
    0x0006c744 cmp r3, r6                                            |         
    0x0006c746 blt 0x6c732                                           |         
                                                                     |     } while (r3 < r6);
    0x0006c748 lsl.w r7, r8, 1                                       |     r7 = r8 << 1;
    0x0006c74c lsl.w r6, r8, 2                                       |     r6 = r8 << 2;
    0x0006c750 b 0x6c0b4                                             |     goto label_35;
                                                                     | label_107:
    0x0006c752 lsls r0, r1, 0x15                                     |     r0 = r1 << 0x15;
                                                                     |     if (r0 < r1) {
    0x0006c754 bmi.w 0x6ccc8                                         |         goto label_143;
                                                                     |     }
    0x0006c758 ldr r2, [r6, 0x38]                                    |     r2 = *((r6 + 0x38));
    0x0006c75a str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0006c75c cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0006c75e bne.w 0x6bcd4                                         |         goto label_36;
                                                                     |     }
    0x0006c762 lsls r2, r1, 0x19                                     |     r2 = r1 << 0x19;
                                                                     |     if (r2 < r1) {
    0x0006c764 bmi 0x6c7cc                                           |         goto label_144;
                                                                     |     }
    0x0006c766 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
                                                                     |     if (r2 != 0) {
    0x0006c768 cbnz r2, 0x6c7cc                                      |         goto label_144;
                                                                     |     }
    0x0006c76a ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0006c76c add.w r3, fp, r7                                      |     r3 = fp + r7;
    0x0006c770 ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0006c772 ldrb.w r2, [r0, 0x2e]                                 |     r2 = *((r0 + 0x2e));
    0x0006c776 add.w r3, r1, r3, lsl 3                               |     r3 = r1 + (r3 << 3);
    0x0006c77a ldr r1, [r3, 0x30]                                    |     r1 = *((r3 + 0x30));
    0x0006c77c movs r3, 0x62                                         |     r3 = 0x62;
                                                                     |     if (r2 != 0) {
    0x0006c77e cbz r2, 0x6c784                                       |         
    0x0006c780 movs r3, 0x63                                         |         r3 = 0x63;
    0x0006c782 str r1, [r0, 0x14]                                    |         *((r0 + 0x14)) = r1;
                                                                     |     }
    0x0006c784 str r3, [sp]                                          |     *(sp) = r3;
    0x0006c786 mov r2, r4                                            |     r2 = r4;
    0x0006c788 mov r3, r6                                            |     r3 = r6;
    0x0006c78a mov r0, sl                                            |     r0 = sl;
    0x0006c78c bl 0x2f144                                            |     fcn_0002f144 (r0, r1, r2, r3, r4);
    0x0006c790 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006c792 ldrb.w r3, [r3, 0x2e]                                 |     r3 = *((r3 + 0x2e));
                                                                     |     if (r3 == 0) {
    0x0006c796 cbnz r3, 0x6c7aa                                      |         
    0x0006c798 ldrsh.w r3, [r6, 0x2a]                                |         r3 = *((r6 + 0x2a));
    0x0006c79c cmp r3, 0x3f                                          |         
                                                                     |         if (r3 > 0x3f) {
    0x0006c79e bgt 0x6c7aa                                           |             goto label_80;
                                                                     |         }
    0x0006c7a0 ldr r3, [r6, 0x24]                                    |         r3 = *((r6 + 0x24));
    0x0006c7a2 tst.w r3, 0xe0                                        |         
                                                                     |         if ((r3 & 0xe0) == 0) {
    0x0006c7a6 beq.w 0x6cefe                                         |             goto label_145;
                                                                     |         }
                                                                     |     }
                                                                     | label_80:
    0x0006c7aa ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0006c7ac ldr.w r1, [r8, 0x24]                                  |     r1 = *((r8 + 0x24));
    0x0006c7b0 ldr r3, [r2, 0x6c]                                    |     r3 = *((r2 + 0x6c));
    0x0006c7b2 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006c7b4 ble.w 0x6bcd4                                         |         goto label_36;
                                                                     |     }
    0x0006c7b8 ldr r2, [r2, 0x68]                                    |     r2 = *((r2 + 0x68));
    0x0006c7ba add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0006c7be add.w r2, r2, r3, lsl 2                               |     r2 += (r3 << 2);
    0x0006c7c2 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0006c7c4 strh r3, [r2, -0x12]                                  |     *((r2 - 0x12)) = r3;
    0x0006c7c8 b.w 0x6bcd4                                           |     goto label_36;
                                                                     | label_144:
    0x0006c7cc cmp r4, 1                                             |     
    0x0006c7ce ldr r2, [r6, 0x1c]                                    |     r2 = *((r6 + 0x1c));
    0x0006c7d0 ldr r0, [r6]                                          |     r0 = *(r6);
                                                                     |     if (r4 == 1) {
    0x0006c7d2 beq.w 0x6ce72                                         |         goto label_146;
                                                                     |     }
    0x0006c7d6 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0006c7da ldr r3, [r3, 0x10]                                    |     r3 = *((r3 + 0x10));
    0x0006c7dc add.w r3, r3, r4, lsl 4                               |     r3 += (r4 << 4);
    0x0006c7e0 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0006c7e2 ldrb r3, [r3, 9]                                      |     r3 = *((r3 + 9));
    0x0006c7e4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0006c7e6 beq.w 0x6bcd4                                         |         goto label_36;
                                                                     |     }
    0x0006c7ea mov r1, r4                                            |     r1 = r4;
    0x0006c7ec str r0, [sp]                                          |     *(sp) = r0;
    0x0006c7ee movs r3, 0                                            |     r3 = 0;
    0x0006c7f0 mov r0, sl                                            |     r0 = sl;
    0x0006c7f2 bl 0x1b620                                            |     fcn_0001b620 (r0, r1, r2, r3, r4);
    0x0006c7f6 ldr.w r1, [r8, 0x24]                                  |     r1 = *((r8 + 0x24));
    0x0006c7fa b.w 0x6bcd4                                           |     goto label_36;
                                                                     | label_109:
    0x0006c7fe ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0006c800 add.w r3, fp, r7                                      |     r3 = fp + r7;
    0x0006c804 add.w r3, r2, r3, lsl 3                               |     r3 = r2 + (r3 << 3);
    0x0006c808 ldr r2, [sp, 0xf8]                                    |     r2 = *(arg_f8h);
    0x0006c80a ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0006c80c ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0006c80e cmp r3, 0                                             |     
    0x0006c810 it ne                                                 |     
                                                                     |     if (r3 != 0) {
    0x0006c812 cmpne r6, r3                                          |         __asm ("cmpne r6, r3");
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0006c814 beq 0x6c822                                           |         goto label_147;
                                                                     |     }
                                                                     |     do {
    0x0006c816 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0006c818 adds r2, 1                                            |         r2++;
    0x0006c81a cmp r3, 0                                             |         
    0x0006c81c it ne                                                 |         
                                                                     |         if (r3 != 0) {
    0x0006c81e cmpne r6, r3                                          |             __asm ("cmpne r6, r3");
                                                                     |         }
    0x0006c820 bne 0x6c816                                           |         
                                                                     |     } while (r3 != 0);
                                                                     | label_147:
    0x0006c822 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006c824 movs r1, 0x63                                         |     r1 = 0x63;
    0x0006c826 str r2, [r3, 0x18]                                    |     *((r3 + 0x18)) = r2;
    0x0006c828 b.w 0x6bd2e                                           |     goto label_37;
                                                                     | label_113:
    0x0006c82c movs r3, 0                                            |     r3 = 0;
    0x0006c82e ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006c830 mov r2, r3                                            |     r2 = r3;
    0x0006c832 str r3, [sp]                                          |     *(sp) = r3;
    0x0006c834 movs r1, 0x11                                         |     r1 = 0x11;
    0x0006c836 bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0006c83a ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006c83c str r0, [sp, 0x5c]                                    |     var_5ch = r0;
    0x0006c83e ldr r5, [r3, 0x48]                                    |     r5 = *((r3 + 0x48));
    0x0006c840 b.w 0x6be12                                           |     goto label_38;
                                                                     | label_131:
    0x0006c844 ldr r2, [pc, 0xe8]                                    |     
    0x0006c846 add r2, pc                                            |     r2 = 0xd917a;
    0x0006c848 adds r2, 4                                            |     r2 += 4;
    0x0006c84a b 0x6c266                                             |     goto label_39;
                                                                     | label_91:
    0x0006c84c ldrh.w r3, [fp, 0x28]                                 |     r3 = *(arg_28h);
    0x0006c850 lsls r1, r3, 0x1a                                     |     r1 = r3 << 0x1a;
                                                                     |     if (r1 < r3) {
    0x0006c852 bmi.w 0x6b9e4                                         |         goto label_40;
                                                                     |     }
    0x0006c856 ldr r4, [r7, 0x18]                                    |     r4 = *((r7 + 0x18));
    0x0006c858 ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0006c85a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006c85c bne.w 0x6b9e4                                         |         goto label_40;
                                                                     |     }
    0x0006c860 ldrb.w r3, [r7, 0x2d]                                 |     r3 = *((r7 + 0x2d));
    0x0006c864 ands r3, r3, 2                                        |     r3 &= 2;
                                                                     |     if (r3 != r3) {
    0x0006c868 bne.w 0x6b9e4                                         |         goto label_40;
                                                                     |     }
    0x0006c86c ldr r5, [r7, 0x30]                                    |     r5 = *((r7 + 0x30));
    0x0006c86e add.w r8, fp, 0x50                                    |     r8 += arg_50h;
    0x0006c872 vmov.i32 d8, 0                                        |     __asm ("vmov.i32 d8, 0");
    0x0006c876 mov.w r2, -1                                          |     r2 = -1;
    0x0006c87a str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0006c87c mov r0, r8                                            |     r0 = r8;
    0x0006c87e strh r3, [r6, 0x2a]                                   |     *((r6 + 0x2a)) = r3;
    0x0006c880 mov r1, r5                                            |     r1 = r5;
    0x0006c882 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0006c884 movs r3, 0x82                                         |     r3 = 0x82;
    0x0006c886 vstr d8, [sp]                                         |     __asm ("vstr d8, [sp]");
    0x0006c88a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0006c88c bl 0x37414                                            |     r0 = fcn_00037414 (r0, r1, r2, r3, r4, r5);
    0x0006c890 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006c892 beq.w 0x6cdd2                                         |         goto label_148;
                                                                     |     }
    0x0006c896 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0006c898 movw r1, 0x1101                                       |     r1 = 0x1101;
    0x0006c89c ldr r2, [r6, 0x30]                                    |     r2 = *((r6 + 0x30));
    0x0006c89e str r1, [r6, 0x24]                                    |     *((r6 + 0x24)) = r1;
    0x0006c8a0 str r0, [r2]                                          |     *(r2) = r0;
    0x0006c8a2 strh r3, [r6, 0x28]                                   |     *((r6 + 0x28)) = r3;
    0x0006c8a4 strh r3, [r6, 0x18]                                   |     *((r6 + 0x18)) = r3;
    0x0006c8a6 movs r3, 0x21                                         |     r3 = 0x21;
    0x0006c8a8 strh r3, [r6, 0x14]                                   |     *((r6 + 0x14)) = r3;
                                                                     | label_72:
    0x0006c8aa ldr.w r3, [fp, 8]                                     |     r3 = *(arg_f0h);
    0x0006c8ae movs r2, 1                                            |     r2 = 1;
    0x0006c8b0 movs r0, 1                                            |     r0 = 1;
    0x0006c8b2 movs r1, 0                                            |     r1 = 0;
    0x0006c8b4 strh r2, [r6, 0x16]                                   |     *((r6 + 0x16)) = r2;
    0x0006c8b6 str.w r6, [fp, 0x338]                                 |     __asm ("str.w r6, [arg_338h]");
    0x0006c8ba strd r0, r1, [r6, 8]                                  |     __asm ("strd r0, r1, [r6, 8]");
    0x0006c8be str.w r5, [fp, 0x2f4]                                 |     __asm ("str.w r5, [arg_2f4h]");
    0x0006c8c2 strh.w r2, [fp, 0x32]                                 |     *(arg_32h) = r2;
                                                                     |     if (r3 != 0) {
    0x0006c8c6 cbz r3, 0x6c8ce                                       |         
    0x0006c8c8 ldr r3, [r3]                                          |         r3 = *(r3);
    0x0006c8ca strb.w r3, [fp, 0x2d]                                 |         *(arg_2dh) = r3;
                                                                     |     }
    0x0006c8ce ldrh.w r3, [fp, 0x28]                                 |     r3 = *(arg_28h);
    0x0006c8d2 lsls r3, r3, 0x17                                     |     r3 <<= 0x17;
    0x0006c8d4 itt mi                                                |     
                                                                     |     if (r3 >= r3) {
    0x0006c8d6 movmi r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 >= r3) {
    0x0006c8d8 strbmi r3, [fp, 0x2f]                                 |         *(arg_2fh) = r3;
                                                                     |     }
    0x0006c8dc b.w 0x6bbf4                                           |     goto label_41;
                                                                     | label_90:
    0x0006c8e0 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006c8e2 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006c8e4 cmp r3, 1                                             |     
                                                                     |     if (r3 != 1) {
    0x0006c8e6 bne.w 0x6ca90                                         |         goto label_149;
                                                                     |     }
    0x0006c8ea ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006c8ec ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006c8ee ldr r4, [r0]                                          |     r4 = *(r0);
    0x0006c8f0 ldr.w sb, [r3, 0x30]                                  |     sb = *((r3 + 0x30));
    0x0006c8f4 ldr r5, [r3, 0x18]                                    |     r5 = *((r3 + 0x18));
    0x0006c8f6 cmp r4, 0                                             |     
                                                                     |     if (r4 <= 0) {
    0x0006c8f8 ble 0x6c962                                           |         goto label_150;
                                                                     |     }
    0x0006c8fa movs r2, 0                                            |     r2 = 0;
                                                                     | label_42:
    0x0006c8fc ldr r3, [r0, 8]                                       |     r3 = *((r0 + 8));
                                                                     |     if (r3 != 0) {
    0x0006c8fe cbnz r3, 0x6c940                                      |         goto label_151;
                                                                     |     }
    0x0006c900 b 0x6c95a                                             |     goto label_50;
                                                                     |     do {
    0x0006c934 lsls r6, r1, 0xd                                      |         r6 = r1 << 0xd;
    0x0006c936 itet mi                                               |         
                                                                     |         if (r6 >= r1) {
    0x0006c938 ldrmi r3, [r3, 0x14]                                  |             r3 = *((r3 + 0x14));
                                                                     |         }
                                                                     |         if (r6 < r1) {
    0x0006c93a ldrpl r3, [r3, 0xc]                                   |             r3 = *((r3 + 0xc));
                                                                     |         }
                                                                     |         if (r6 >= r1) {
    0x0006c93c ldrmi r3, [r3, 8]                                     |             r3 = *((r3 + 8));
                                                                     |         }
                                                                     |         if (r3 == 0) {
    0x0006c93e cbz r3, 0x6c95a                                       |             goto label_50;
                                                                     |         }
                                                                     | label_151:
    0x0006c940 ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
    0x0006c942 tst.w r1, 0x41000                                     |         
    0x0006c946 bne 0x6c934                                           |         
                                                                     |     } while ((r1 & 0x41000) != 0);
    0x0006c948 ldrb r1, [r3]                                         |     r1 = *(r3);
    0x0006c94a adds r1, 0x5a                                         |     r1 += 0x5a;
    0x0006c94c tst.w r1, 0xfd                                        |     
                                                                     |     if ((r1 & 0xfd) == 0) {
    0x0006c950 bne 0x6c95a                                           |         
    0x0006c952 ldr r1, [r3, 0x1c]                                    |         r1 = *((r3 + 0x1c));
    0x0006c954 cmp sb, r1                                            |         
                                                                     |         if (sb == r1) {
    0x0006c956 beq.w 0x6ca7c                                         |             goto label_152;
                                                                     |         }
                                                                     |     }
                                                                     | label_50:
    0x0006c95a adds r2, 1                                            |     r2++;
    0x0006c95c adds r0, 0x10                                         |     r0 += 0x10;
    0x0006c95e cmp r2, r4                                            |     
                                                                     |     if (r2 != r4) {
    0x0006c960 bne 0x6c8fc                                           |         goto label_42;
                                                                     |     }
                                                                     | label_150:
    0x0006c962 ldr r6, [r5, 8]                                       |     r6 = *((r5 + 8));
    0x0006c964 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0006c966 beq.w 0x6ca90                                         |         goto label_149;
                                                                     |     }
    0x0006c96a ldr.w r3, [pc, 0x5d4]                                 |     r3 = *(0x0006cf40);
    0x0006c96e str.w sl, [sp, 0x18]                                  |     __asm ("str.w sl, [var_18h]");
    0x0006c972 add r3, pc                                            |     r3 += pc;
    0x0006c974 mov r8, r3                                            |     r8 = r3;
    0x0006c976 b 0x6c980                                             |     
                                                                     |     while (r3 == 0) {
                                                                     | label_43:
    0x0006c978 ldr r6, [r6, 0x14]                                    |         r6 = *((r6 + 0x14));
    0x0006c97a cmp r6, 0                                             |         
                                                                     |         if (r6 == 0) {
    0x0006c97c beq.w 0x6ca8c                                         |             goto label_153;
                                                                     |         }
    0x0006c980 ldrb.w r3, [r6, 0x36]                                 |         r3 = *((r6 + 0x36));
    0x0006c984 cmp r3, 0                                             |         
    0x0006c986 beq 0x6c978                                           |         
                                                                     |     }
    0x0006c988 ldr r7, [r6, 0x24]                                    |     r7 = *((r6 + 0x24));
    0x0006c98a cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0006c98c bne 0x6c978                                           |         goto label_43;
                                                                     |     }
    0x0006c98e ldrh r3, [r6, 0x32]                                   |     r3 = *((r6 + 0x32));
                                                                     |     if (r3 != 0) {
    0x0006c990 cbnz r3, 0x6c99c                                      |         goto label_154;
                                                                     |     }
    0x0006c992 b 0x6ca14                                             |     goto label_155;
                                                                     |     do {
                                                                     | label_49:
    0x0006c994 ldrh r3, [r6, 0x32]                                   |         r3 = *((r6 + 0x32));
    0x0006c996 adds r7, 1                                            |         r7++;
    0x0006c998 cmp r7, r3                                            |         
                                                                     |         if (r7 >= r3) {
    0x0006c99a bge 0x6ca10                                           |             goto label_156;
                                                                     |         }
                                                                     | label_154:
    0x0006c99c vmov.i8 d16, 0xff                                     |         __asm ("vmov.i8 d16, 0xff");
    0x0006c9a0 movs r3, 2                                            |         r3 = 2;
    0x0006c9a2 mov r2, r7                                            |         r2 = r7;
    0x0006c9a4 mov r1, sb                                            |         r1 = sb;
    0x0006c9a6 mov r0, fp                                            |         r0 = fp;
    0x0006c9a8 str r6, [sp, 0xc]                                     |         var_ch = r6;
    0x0006c9aa vstr d16, [sp]                                        |         __asm ("vstr d16, [sp]");
    0x0006c9ae str r3, [sp, 8]                                       |         var_8h = r3;
    0x0006c9b0 bl 0x37414                                            |         r0 = fcn_00037414 (r0, r1, r2, r3, r4, r5);
    0x0006c9b4 cmp r0, 0                                             |         
    0x0006c9b6 bne 0x6c994                                           |         
                                                                     |     } while (r0 != 0);
    0x0006c9b8 ldr r3, [r6, 0x20]                                    |     r3 = *((r6 + 0x20));
    0x0006c9ba ldr.w r2, [r3, r7, lsl 2]                             |     offset_4 = r7 << 2;
                                                                     |     r2 = *((r3 + offset_4));
    0x0006c9be ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0006c9c0 ldr.w ip, [r3]                                        |     ip = *(r3);
    0x0006c9c4 cmp.w ip, 0                                           |     
                                                                     |     if (ip <= 0) {
    0x0006c9c8 ble 0x6ca0e                                           |         goto label_48;
                                                                     |     }
    0x0006c9ca ldr r5, [sp, 0x30]                                    |     r5 = var_30h;
    0x0006c9cc lsl.w sl, r7, 1                                       |     sl = r7 << 1;
    0x0006c9d0 mov r4, r0                                            |     r4 = r0;
                                                                     | label_44:
    0x0006c9d2 ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0006c9d4 mov r3, r1                                            |     r3 = r1;
                                                                     |     if (r1 != 0) {
    0x0006c9d6 cbnz r1, 0x6c9e6                                      |         goto label_157;
                                                                     |     }
    0x0006c9d8 b 0x6ca06                                             |     goto label_46;
                                                                     |     do {
    0x0006c9da lsls r0, r0, 0xd                                      |         r0 <<= 0xd;
    0x0006c9dc itet mi                                               |         
                                                                     |         if (r0 >= r0) {
    0x0006c9de ldrmi r3, [r3, 0x14]                                  |             r3 = *((r3 + 0x14));
                                                                     |         }
                                                                     |         if (r0 < r0) {
    0x0006c9e0 ldrpl r3, [r3, 0xc]                                   |             r3 = *((r3 + 0xc));
                                                                     |         }
                                                                     |         if (r0 >= r0) {
    0x0006c9e2 ldrmi r3, [r3, 8]                                     |             r3 = *((r3 + 8));
                                                                     |         }
                                                                     |         if (r3 == 0) {
    0x0006c9e4 cbz r3, 0x6ca06                                       |             goto label_46;
                                                                     |         }
                                                                     | label_157:
    0x0006c9e6 ldr r0, [r3, 4]                                       |         r0 = *((r3 + 4));
    0x0006c9e8 tst.w r0, 0x41000                                     |         
    0x0006c9ec bne 0x6c9da                                           |         
                                                                     |     } while ((r0 & 0x41000) != 0);
    0x0006c9ee ldrb r0, [r3]                                         |     r0 = *(r3);
    0x0006c9f0 adds r0, 0x5a                                         |     r0 += 0x5a;
    0x0006c9f2 tst.w r0, 0xfd                                        |     
                                                                     |     if ((r0 & 0xfd) == 0) {
    0x0006c9f6 bne 0x6ca06                                           |         
    0x0006c9f8 ldr r0, [r6, 4]                                       |         r0 = *((r6 + 4));
    0x0006c9fa ldrsh.w lr, [r3, 0x20]                                |         
    0x0006c9fe ldrsh.w r0, [r0, sl]                                  |         r0 = *((r0 + sl));
    0x0006ca02 cmp lr, r0                                            |         
                                                                     |         if (lr == r0) {
    0x0006ca04 beq 0x6ca24                                           |             goto label_158;
                                                                     |         }
                                                                     |     }
                                                                     | label_46:
    0x0006ca06 adds r4, 1                                            |     r4++;
    0x0006ca08 adds r5, 0x10                                         |     r5 += 0x10;
    0x0006ca0a cmp r4, ip                                            |     
                                                                     |     if (r4 < ip) {
    0x0006ca0c blt 0x6c9d2                                           |         goto label_44;
                                                                     |     }
                                                                     | label_48:
    0x0006ca0e ldrh r3, [r6, 0x32]                                   |     r3 = *((r6 + 0x32));
                                                                     | label_156:
    0x0006ca10 cmp r3, r7                                            |     
                                                                     |     if (r3 != r7) {
    0x0006ca12 bne 0x6c978                                           |         goto label_43;
                                                                     |     }
                                                                     | label_155:
    0x0006ca14 ldr.w sl, [sp, 0x18]                                  |     sl = var_18h;
                                                                     | label_51:
    0x0006ca18 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006ca1a movs r3, 1                                            |     r3 = 1;
    0x0006ca1c strb.w r3, [r2, 0x2f]                                 |     *((r2 + 0x2f)) = r3;
    0x0006ca20 b.w 0x6b9d2                                           |     goto label_45;
                                                                     | label_158:
    0x0006ca24 ldr r3, [r3, 0x1c]                                    |     r3 = *((r3 + 0x1c));
    0x0006ca26 cmp sb, r3                                            |     
                                                                     |     if (sb != r3) {
    0x0006ca28 bne 0x6ca06                                           |         goto label_46;
                                                                     |     }
    0x0006ca2a ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006ca2c str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0006ca2e bl 0x2d47c                                            |     fcn_0002d47c (r0, r1);
    0x0006ca32 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0006ca34 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0006ca36 beq.w 0x6ccb8                                         |         goto label_159;
                                                                     |     }
                                                                     | label_62:
    0x0006ca3a ldr r0, [r0]                                          |     r0 = *(r0);
    0x0006ca3c add.w ip, r2, -1                                      |     
    0x0006ca40 subs r0, 1                                            |     r0--;
                                                                     |     do {
                                                                     | label_47:
    0x0006ca42 ldrb r3, [r0, 1]!                                     |         r3 = *((r0 += 1));
    0x0006ca46 ldrb r1, [ip, 1]!                                     |         r1 = *((ip += 1));
    0x0006ca4a cmp r3, r1                                            |         
                                                                     |         if (r3 == r1) {
    0x0006ca4c beq 0x6ca66                                           |             goto label_160;
                                                                     |         }
    0x0006ca4e add r3, r8                                            |         r3 += r8;
    0x0006ca50 add r1, r8                                            |         r1 += r8;
    0x0006ca52 ldrb.w lr, [r3, 0x140]                                |         
    0x0006ca56 ldrb.w r3, [r1, 0x140]                                |         r3 = *((r1 + 0x140));
    0x0006ca5a cmp lr, r3                                            |         
    0x0006ca5c beq 0x6ca42                                           |         
                                                                     |     } while (lr == r3);
    0x0006ca5e ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0006ca60 ldr.w ip, [r3]                                        |     ip = *(r3);
    0x0006ca64 b 0x6ca06                                             |     goto label_46;
                                                                     | label_160:
    0x0006ca66 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006ca68 bne 0x6ca42                                           |         goto label_47;
                                                                     |     }
    0x0006ca6a ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0006ca6c ldrsh.w r3, [r3, sl]                                  |     r3 = *((r3 + sl));
    0x0006ca70 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0006ca72 bge.w 0x6cd7a                                         |         goto label_161;
                                                                     |     }
    0x0006ca76 adds r3, 1                                            |     r3++;
                                                                     |     if (r3 != 1) {
    0x0006ca78 bne 0x6ca0e                                           |         goto label_48;
                                                                     |     }
    0x0006ca7a b 0x6c994                                             |     goto label_49;
                                                                     | label_152:
    0x0006ca7c ldrsh.w r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0006ca80 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0006ca82 bge.w 0x6c95a                                         |         goto label_50;
                                                                     |     }
    0x0006ca86 b 0x6ca18                                             |     goto label_51;
                                                                     | label_141:
    0x0006ca88 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0006ca8a b 0x6c676                                             |     goto label_52;
                                                                     | label_153:
    0x0006ca8c ldr.w sl, [sp, 0x18]                                  |     sl = var_18h;
                                                                     | label_149:
    0x0006ca90 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0006ca92 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006ca94 bne.w 0x6b9d2                                         |         goto label_45;
                                                                     |     }
    0x0006ca98 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006ca9a ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0006ca9c str r3, [r2, 8]                                       |     *((r2 + 8)) = r3;
    0x0006ca9e ldrh r3, [r2, 0x28]                                   |     r3 = *((r2 + 0x28));
    0x0006caa0 orr r3, r3, 0x80                                      |     r3 |= 0x80;
    0x0006caa4 strh r3, [r2, 0x28]                                   |     *((r2 + 0x28)) = r3;
    0x0006caa6 b.w 0x6b9d2                                           |     goto label_45;
                                                                     | label_111:
    0x0006caaa bl 0x53ee0                                            |     fcn_00053ee0 (r0, r1, r2, r3);
    0x0006caae b.w 0x6bd82                                           |     goto label_53;
                                                                     | label_129:
    0x0006cab2 ldr r1, [sp, 0x30]                                    |     r1 = var_30h;
    0x0006cab4 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0006cab8 b.w 0x6c21e                                           |     goto label_54;
                                                                     | label_120:
    0x0006cabc mov.w r8, 0                                           |     r8 = 0;
    0x0006cac0 mov r6, r8                                            |     r6 = r8;
    0x0006cac2 mov r7, r8                                            |     r7 = r8;
    0x0006cac4 b.w 0x6c056                                           |     goto label_55;
                                                                     | label_102:
    0x0006cac8 ldr r2, [sp, 0x44]                                    |     r2 = var_44h;
    0x0006caca lsls r6, r2, 0x15                                     |     r6 = r2 << 0x15;
                                                                     |     if (r6 < r2) {
    0x0006cacc bmi.w 0x6bc2a                                         |         goto label_56;
                                                                     |     }
    0x0006cad0 ldr r2, [r3, 0x4c]                                    |     r2 = *((r3 + 0x4c));
    0x0006cad2 lsls r5, r2, 0x17                                     |     r5 = r2 << 0x17;
                                                                     |     if (r5 < r2) {
    0x0006cad4 bmi.w 0x6bc2a                                         |         goto label_56;
                                                                     |     }
    0x0006cad8 ldr r6, [r1]                                          |     r6 = *(r1);
    0x0006cada mov r4, r1                                            |     r4 = r1;
    0x0006cadc ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006cade cmp r6, 0                                             |     
    0x0006cae0 add.w r7, r3, 0x1e8                                   |     r7 = r3 + 0x1e8;
                                                                     |     if (r6 <= 0) {
    0x0006cae4 ble.w 0x6cec4                                         |         goto label_162;
                                                                     |     }
    0x0006cae8 mov r5, fp                                            |     r5 = fp;
    0x0006caea mov sb, fp                                            |     sb = fp;
    0x0006caec mov r8, fp                                            |     r8 = fp;
                                                                     |     do {
    0x0006caee ldr r1, [r4, 8]                                       |         r1 = *((r4 + 8));
                                                                     |         if (r1 != 0) {
    0x0006caf0 cbz r1, 0x6cb00                                       |             
    0x0006caf2 mov r0, r7                                            |             r0 = r7;
    0x0006caf4 bl 0x29998                                            |             r0 = fcn_00029998 (r0, r1);
    0x0006caf8 orr.w sb, r0, sb                                      |             sb = r0 | sb;
    0x0006cafc orr.w r8, r1, r8                                      |             r8 = r1 | r8;
                                                                     |         }
    0x0006cb00 adds r5, 1                                            |         r5++;
    0x0006cb02 adds r4, 0x10                                         |         r4 += 0x10;
    0x0006cb04 cmp r6, r5                                            |         
    0x0006cb06 bne 0x6caee                                           |         
                                                                     |     } while (r6 != r5);
                                                                     | label_76:
    0x0006cb08 ldr r3, [sp, 0x8c]                                    |     r3 = var_8ch;
                                                                     |     if (r3 == 0) {
    0x0006cb0a cbz r3, 0x6cb4e                                       |         goto label_163;
                                                                     |     }
    0x0006cb0c ldr r2, [r3]                                          |     r2 = *(r3);
    0x0006cb0e cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0006cb10 ble.w 0x6cf38                                         |         goto label_164;
                                                                     |     }
    0x0006cb14 movs r5, 0                                            |     r5 = 0;
    0x0006cb16 str.w sb, [sp, 0x1c]                                  |     __asm ("str.w sb, [var_1ch]");
    0x0006cb1a str.w r8, [sp, 0x20]                                  |     __asm ("str.w r8, [var_20h]");
    0x0006cb1e mov r6, r5                                            |     r6 = r5;
    0x0006cb20 mov r8, r7                                            |     r8 = r7;
    0x0006cb22 mov sb, r2                                            |     sb = r2;
    0x0006cb24 mov r7, r5                                            |     r7 = r5;
    0x0006cb26 mov r4, r3                                            |     r4 = r3;
                                                                     |     do {
    0x0006cb28 ldr r1, [r4, 8]                                       |         r1 = *((r4 + 8));
                                                                     |         if (r1 != 0) {
    0x0006cb2a cbz r1, 0x6cb36                                       |             
    0x0006cb2c mov r0, r8                                            |             r0 = r8;
    0x0006cb2e bl 0x29998                                            |             r0 = fcn_00029998 (r0, r1);
    0x0006cb32 orrs r6, r0                                           |             r6 |= r0;
    0x0006cb34 orrs r7, r1                                           |             r7 |= r1;
                                                                     |         }
    0x0006cb36 adds r5, 1                                            |         r5++;
    0x0006cb38 adds r4, 0x10                                         |         r4 += 0x10;
    0x0006cb3a cmp r5, sb                                            |         
    0x0006cb3c bne 0x6cb28                                           |         
                                                                     |     } while (r5 != sb);
    0x0006cb3e ldrd sb, r8, [sp, 0x1c]                               |     __asm ("ldrd sb, r8, [var_20h]");
    0x0006cb42 mov r4, r6                                            |     r4 = r6;
    0x0006cb44 mov r6, r7                                            |     r6 = r7;
                                                                     | label_81:
    0x0006cb46 orr.w sb, r4, sb                                      |     sb = r4 | sb;
    0x0006cb4a orr.w r8, r6, r8                                      |     r8 = r6 | r8;
                                                                     | label_163:
    0x0006cb4e ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0006cb50 movs r0, 0x58                                         |     r0 = 0x58;
    0x0006cb52 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006cb54 mov.w r3, -1                                          |     r3 = -1;
    0x0006cb58 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0006cb5a str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0006cb5c mla r2, r0, r1, r2                                    |     __asm ("mla r2, r0, r1, r2");
    0x0006cb60 add r1, r3                                            |     r1 += r3;
    0x0006cb62 str r1, [sp, 0x18]                                    |     var_18h = r1;
    0x0006cb64 add.w ip, r2, 0x2f0                                   |     
    0x0006cb68 mov r1, ip                                            |     r1 = ip;
    0x0006cb6a b 0x6cb7c                                             |     goto label_165;
                                                                     | label_58:
    0x0006cb6c sub.w r3, r1, 0x58                                    |     r3 = r1 - 0x58;
                                                                     | label_59:
    0x0006cb70 mov r1, r3                                            |     r1 = r3;
    0x0006cb72 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006cb74 subs r3, 1                                            |     r3--;
    0x0006cb76 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     |     if (r3 == 1) {
    0x0006cb78 beq.w 0x6bc32                                         |         goto label_57;
                                                                     |     }
                                                                     | label_165:
    0x0006cb7c ldr r2, [r1, -0x10]                                   |     r2 = *((r1 - 0x10));
    0x0006cb80 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006cb82 ldrb r6, [r2, 0x10]                                   |     r6 = *((r2 + 0x10));
    0x0006cb84 ldr r7, [r3, 4]                                       |     r7 = *((r3 + 4));
    0x0006cb86 lsls r0, r6, 3                                        |     r0 = r6 << 3;
    0x0006cb88 adds r3, r0, r6                                       |     r3 = r0 + r6;
    0x0006cb8a add.w r3, r7, r3, lsl 3                               |     r3 = r7 + (r3 << 3);
    0x0006cb8e ldrb.w r3, [r3, 0x2c]                                 |     r3 = *((r3 + 0x2c));
    0x0006cb92 lsls r4, r3, 0x1c                                     |     r4 = r3 << 0x1c;
                                                                     |     if (r4 >= r3) {
    0x0006cb94 bpl 0x6cb6c                                           |         goto label_58;
                                                                     |     }
    0x0006cb96 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
                                                                     |     if (r3 != 0) {
    0x0006cb98 cbnz r3, 0x6cba0                                      |         goto label_166;
                                                                     |     }
    0x0006cb9a ldr r3, [r2, 0x24]                                    |     r3 = *((r2 + 0x24));
    0x0006cb9c lsls r3, r3, 0x13                                     |     r3 <<= 0x13;
                                                                     |     if (r3 >= r3) {
    0x0006cb9e bpl 0x6cb6c                                           |         goto label_58;
                                                                     |     }
                                                                     | label_166:
    0x0006cba0 ldrd r5, r4, [r2, 8]                                  |     __asm ("ldrd r5, r4, [r2, 8]");
    0x0006cba4 and.w r2, r5, sb                                      |     r2 = r5 & sb;
    0x0006cba8 and.w r3, r4, r8                                      |     r3 = r4 & r8;
    0x0006cbac orrs r3, r2                                           |     r3 |= r2;
                                                                     |     if (r3 != r2) {
    0x0006cbae bne 0x6cb6c                                           |         goto label_58;
                                                                     |     }
    0x0006cbb0 ldr r2, [sp, 0x88]                                    |     r2 = var_88h;
    0x0006cbb2 ldr r3, [r2, 0xc]                                     |     r3 = *((r2 + 0xc));
    0x0006cbb4 ldr r2, [r2, 0x14]                                    |     r2 = *((r2 + 0x14));
    0x0006cbb6 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0006cbba add.w r3, r2, r3, lsl 4                               |     r3 = r2 + (r3 << 4);
    0x0006cbbe cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0006cbc0 bhs.w 0x6ceca                                         |         goto label_167;
                                                                     |     }
    0x0006cbc4 add r0, r6                                            |     r0 += r6;
    0x0006cbc6 mov r6, r2                                            |     r6 = r2;
    0x0006cbc8 add.w r7, r7, r0, lsl 3                               |     r7 += (r0 << 3);
    0x0006cbcc mov lr, r7                                            |     lr = r7;
                                                                     |     do {
    0x0006cbce ldr r0, [r6, 0x28]                                    |         r0 = *((r6 + 0x28));
    0x0006cbd0 ldr r7, [r6, 0x2c]                                    |         r7 = *((r6 + 0x2c));
    0x0006cbd2 ands r0, r5                                           |         r0 &= r5;
    0x0006cbd4 and.w ip, r4, r7                                      |         
    0x0006cbd8 orrs.w r0, r0, ip                                     |         r0 |= ip;
                                                                     |         if (r0 != r0) {
    0x0006cbdc beq 0x6cbf4                                           |             
    0x0006cbde ldr r0, [r6]                                          |             r0 = *(r6);
    0x0006cbe0 ldr r7, [r0, 4]                                       |             r7 = *((r0 + 4));
    0x0006cbe2 lsls r7, r7, 0x1f                                     |             r7 <<= 0x1f;
                                                                     |             if (r7 >= r7) {
    0x0006cbe4 bpl.w 0x6cdca                                         |                 goto label_168;
                                                                     |             }
    0x0006cbe8 ldr r0, [r0, 0x24]                                    |             r0 = *((r0 + 0x24));
    0x0006cbea ldr.w r7, [lr, 0x30]                                  |             r7 = *((lr + 0x30));
    0x0006cbee cmp r0, r7                                            |             
                                                                     |             if (r0 != r7) {
    0x0006cbf0 bne.w 0x6cdca                                         |                 goto label_168;
                                                                     |             }
                                                                     |         }
    0x0006cbf4 adds r6, 0x30                                         |         r6 += 0x30;
    0x0006cbf6 cmp r3, r6                                            |         
    0x0006cbf8 bhi 0x6cbce                                           |         
                                                                     |     } while (r3 > r6);
                                                                     | label_70:
    0x0006cbfa ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0006cbfc bic.w r0, r0, r5                                      |     r0 = BIT_MASK (r0, r5);
    0x0006cc00 str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0006cc02 ldr r0, [sp, 0x40]                                    |     r0 = var_40h;
    0x0006cc04 bic.w r0, r0, r4                                      |     r0 = BIT_MASK (r0, r4);
    0x0006cc08 str r0, [sp, 0x40]                                    |     var_40h = r0;
                                                                     |     do {
    0x0006cc0a ldr r0, [r2, 0x28]                                    |         r0 = *((r2 + 0x28));
    0x0006cc0c adds r2, 0x30                                         |         r2 += 0x30;
    0x0006cc0e ldr r6, [r2, -0x4]                                    |         r6 = *((r2 - 0x4));
    0x0006cc12 ands r0, r5                                           |         r0 &= r5;
    0x0006cc14 ands r6, r4                                           |         r6 &= r4;
    0x0006cc16 orrs r0, r6                                           |         r0 |= r6;
    0x0006cc18 ittt ne                                               |         
                                                                     |         if (r0 != r6) {
    0x0006cc1a ldrhne r0, [r2, -0x26]                                |             __asm ("ldrhne r0, [r2, -0x26]");
                                                                     |         }
                                                                     |         if (r0 == r6) {
    0x0006cc1e orrne r0, r0, 4                                       |             r0 |= 4;
                                                                     |         }
                                                                     |         if (r0 != r6) {
    0x0006cc22 strh r0, [r2, -0x26]                                  |             *((r2 - 0x26)) = r0;
                                                                     |         }
    0x0006cc26 cmp r3, r2                                            |         
    0x0006cc28 bhi 0x6cc0a                                           |         
                                                                     |     } while (r3 > r2);
                                                                     | label_77:
    0x0006cc2a ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0006cc2c ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0006cc2e ldrb.w r2, [r3, 0x2c]                                 |     r2 = *((r3 + 0x2c));
    0x0006cc32 subs r3, r2, 1                                        |     r3 = r2 - 1;
    0x0006cc34 cmp r3, r0                                            |     
    0x0006cc36 it eq                                                 |     
                                                                     |     if (r3 != r0) {
    0x0006cc38 subeq r3, r1, 0x58                                    |         r3 = r1 - 0x58;
                                                                     |     }
                                                                     |     if (r3 != r0) {
    0x0006cc3c beq 0x6cc5a                                           |         
    0x0006cc3e ldr r2, [sp, 0x18]                                    |         r2 = var_18h;
    0x0006cc40 subs r3, r3, r2                                       |         r3 -= r2;
    0x0006cc42 movs r2, 0x58                                         |         r2 = 0x58;
    0x0006cc44 mul r2, r2, r3                                        |         r2 *= r3;
    0x0006cc48 sub.w r3, r1, 0x58                                    |         r3 = r1 - 0x58;
    0x0006cc4c mov r0, r3                                            |         r0 = r3;
    0x0006cc4e blx 0x7d44                                            |         fcn_00007d44 ();
    0x0006cc52 ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0006cc54 mov r3, r0                                            |         r3 = r0;
    0x0006cc56 ldrb.w r2, [r2, 0x2c]                                 |         r2 = *((r2 + 0x2c));
                                                                     |     }
    0x0006cc5a ldr r1, [sp, 0x3c]                                    |     r1 = var_3ch;
    0x0006cc5c subs r2, 1                                            |     r2--;
    0x0006cc5e subs r1, 1                                            |     r1--;
    0x0006cc60 str r1, [sp, 0x3c]                                    |     var_3ch = r1;
    0x0006cc62 ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0006cc64 strb.w r2, [r1, 0x2c]                                 |     *((r1 + 0x2c)) = r2;
    0x0006cc68 b 0x6cb70                                             |     goto label_59;
                                                                     | label_82:
    0x0006cc6a ldr r1, [pc, 0x2d8]                                   |     
    0x0006cc6c movs r3, 0                                            |     r3 = 0;
    0x0006cc6e movs r2, 0x40                                         |     r2 = 0x40;
    0x0006cc70 mov r0, sl                                            |     r0 = sl;
    0x0006cc72 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0006cc74 add r1, pc                                            |     r1 = 0xd9bbe;
    0x0006cc76 bl 0x25778                                            |     fcn_00025778 (r0);
    0x0006cc7a b.w 0x6bb6c                                           |     goto label_8;
                                                                     | label_142:
    0x0006cc7e ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006cc80 movs r1, 0x25                                         |     r1 = 0x25;
    0x0006cc82 str r3, [sp]                                          |     *(sp) = r3;
    0x0006cc84 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0006cc86 bl 0x2add4                                            |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0006cc8a mov r4, r0                                            |     r4 = r0;
    0x0006cc8c b.w 0x6c188                                           |     goto label_60;
                                                                     | label_126:
    0x0006cc90 movs r3, 0                                            |     r3 = 0;
    0x0006cc92 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006cc94 mov r2, r6                                            |     r2 = r6;
    0x0006cc96 movs r1, 0xe                                          |     r1 = 0xe;
    0x0006cc98 str r3, [sp]                                          |     *(sp) = r3;
    0x0006cc9a bl 0x2add4                                            |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0006cc9e mov r4, r0                                            |     r4 = r0;
    0x0006cca0 b.w 0x6c188                                           |     goto label_60;
                                                                     | label_125:
    0x0006cca4 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0006cca6 mov r3, r4                                            |     r3 = r4;
    0x0006cca8 mov r2, r4                                            |     r2 = r4;
    0x0006ccaa movs r1, 0x45                                         |     r1 = 0x45;
    0x0006ccac str r4, [sp]                                          |     *(sp) = r4;
    0x0006ccae bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0006ccb2 str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0006ccb4 b.w 0x6c144                                           |     goto label_61;
                                                                     | label_159:
    0x0006ccb8 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0006ccba ldr r3, [r3]                                          |     r3 = *(r3);
    0x0006ccbc ldr r0, [r3, 8]                                       |     r0 = *((r3 + 8));
    0x0006ccbe b 0x6ca3a                                             |     goto label_62;
                                                                     | label_108:
    0x0006ccc0 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0006ccc2 str r3, [r5, 8]                                       |     *((r5 + 8)) = r3;
    0x0006ccc4 b.w 0x6bd5c                                           |     goto label_63;
                                                                     | label_143:
    0x0006ccc8 ldr r3, [r6, 0x40]                                    |     r3 = *((r6 + 0x40));
    0x0006ccca ldr r1, [sp, 0x38]                                    |     r1 = var_38h;
                                                                     |     if (r3 != 0) {
    0x0006cccc cbnz r3, 0x6ccd4                                      |         goto label_169;
                                                                     |     }
    0x0006ccce b 0x6ccda                                             |     goto label_170;
                                                                     |     do {
    0x0006ccd0 ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
                                                                     |         if (r3 == 0) {
    0x0006ccd2 cbz r3, 0x6ccda                                       |             goto label_170;
                                                                     |         }
                                                                     | label_169:
    0x0006ccd4 ldr r2, [r3]                                          |         r2 = *(r3);
    0x0006ccd6 cmp r1, r2                                            |         
    0x0006ccd8 bne 0x6ccd0                                           |         
                                                                     |     } while (r1 != r2);
                                                                     | label_170:
    0x0006ccda ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0006ccdc add.w r2, fp, r7                                      |     r2 = fp + r7;
    0x0006cce0 ldr r0, [sp, 0x58]                                    |     r0 = var_58h;
    0x0006cce2 add.w r2, r1, r2, lsl 3                               |     r2 = r1 + (r2 << 3);
    0x0006cce6 mvn r1, 0xb                                           |     r1 = ~0xb;
    0x0006ccea ldr r2, [r2, 0x30]                                    |     r2 = *((r2 + 0x30));
    0x0006ccec str r3, [sp, 4]                                       |     var_4h = r3;
    0x0006ccee movs r3, 0                                            |     r3 = 0;
    0x0006ccf0 str r1, [sp, 8]                                       |     var_8h = r1;
    0x0006ccf2 movs r1, 0xa9                                         |     r1 = 0xa9;
    0x0006ccf4 str r3, [sp]                                          |     *(sp) = r3;
    0x0006ccf6 bl 0x2b5f4                                            |     fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x0006ccfa ldr.w r1, [r8, 0x24]                                  |     r1 = *((r8 + 0x24));
    0x0006ccfe b.w 0x6bcd4                                           |     goto label_36;
                                                                     | label_135:
    0x0006cd02 ldr.w sl, [sp, 0x18]                                  |     sl = var_18h;
    0x0006cd06 b.w 0x6bb04                                           |     goto label_5;
                                                                     | label_114:
    0x0006cd0a mov.w r2, -1                                          |     r2 = -1;
    0x0006cd0e mov r3, r8                                            |     r3 = r8;
    0x0006cd10 mov r4, r2                                            |     r4 = r2;
    0x0006cd12 str.w r8, [sp, 0x48]                                  |     __asm ("str.w r8, [var_48h]");
    0x0006cd16 b.w 0x6bf22                                           |     goto label_64;
                                                                     | label_103:
    0x0006cd1a ldr r4, [sp, 0x44]                                    |     r4 = var_44h;
    0x0006cd1c lsls r7, r4, 0x1c                                     |     r7 = r4 << 0x1c;
                                                                     |     if (r7 >= r4) {
    0x0006cd1e bpl.w 0x6bc6a                                         |         goto label_65;
                                                                     |     }
    0x0006cd22 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0006cd24 ldr r2, [r2, 0x18]                                    |     r2 = *((r2 + 0x18));
    0x0006cd26 ldr r1, [r2, 0x38]                                    |     r1 = *((r2 + 0x38));
    0x0006cd28 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0006cd2a bne.w 0x6bc6a                                         |         goto label_65;
                                                                     |     }
    0x0006cd2e lsls r6, r3, 0x12                                     |     r6 = r3 << 0x12;
                                                                     |     if (r6 >= r3) {
    0x0006cd30 bpl 0x6cd38                                           |         goto label_171;
                                                                     |     }
    0x0006cd32 lsls r5, r4, 0x1b                                     |     r5 = r4 << 0x1b;
                                                                     |     if (r5 >= r4) {
    0x0006cd34 bpl.w 0x6bc6a                                         |         goto label_65;
                                                                     |     }
                                                                     | label_171:
    0x0006cd38 movs r1, 2                                            |     r1 = 2;
    0x0006cd3a b.w 0x6bc5c                                           |     goto label_66;
                                                                     | label_110:
    0x0006cd3e ldrb.w r3, [r2, 0x2f]                                 |     r3 = *((r2 + 0x2f));
    0x0006cd42 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0006cd44 beq.w 0x6bd5c                                         |         goto label_63;
                                                                     |     }
    0x0006cd48 ldr r3, [r7, 0x6c]                                    |     r3 = *((r7 + 0x6c));
    0x0006cd4a cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0006cd4c ble.w 0x6bd5c                                         |         goto label_63;
                                                                     |     }
    0x0006cd50 ldr r2, [r7, 0x68]                                    |     r2 = *((r7 + 0x68));
    0x0006cd52 add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0006cd56 add.w r2, r2, r3, lsl 2                               |     r2 += (r3 << 2);
    0x0006cd5a mov.w r3, 2                                           |     r3 = 2;
    0x0006cd5e strh r3, [r2, -0x12]                                  |     *((r2 - 0x12)) = r3;
    0x0006cd62 b.w 0x6bd5c                                           |     goto label_63;
                                                                     | label_104:
    0x0006cd66 lsls r1, r3, 0x19                                     |     r1 = r3 << 0x19;
    0x0006cd68 itttt mi                                              |     
                                                                     |     if (r1 < r3) {
    0x0006cd6a bicmi r3, r3, 0x40                                    |         __asm ("bicmi r3, r3, 0x40");
                                                                     |     }
                                                                     |     if (r1 >= r3) {
    0x0006cd6e strmi r3, [r0, 0x24]                                  |         *((r0 + 0x24)) = r3;
                                                                     |     }
                                                                     |     if (r1 >= r3) {
    0x0006cd70 ldrmi r3, [sp, 0x44]                                  |         r3 = var_44h;
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0006cd72 and fp, r3, 8                                         |         
                                                                     |     }
    0x0006cd76 b.w 0x6bc6a                                           |     goto label_65;
                                                                     | label_161:
    0x0006cd7a ldr r2, [r6, 0xc]                                     |     r2 = *((r6 + 0xc));
    0x0006cd7c add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0006cd80 ldr r2, [r2, 4]                                       |     r2 = *((r2 + 4));
    0x0006cd82 add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
    0x0006cd86 ldrb r3, [r3, 0xc]                                    |     r3 = *((r3 + 0xc));
    0x0006cd88 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006cd8a bne.w 0x6c994                                         |         goto label_49;
                                                                     |     }
    0x0006cd8e b 0x6ca0e                                             |     goto label_48;
                                                                     | label_105:
    0x0006cd90 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0006cd92 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0006cd94 ldr r3, [r3, 0x6c]                                    |     r3 = *((r3 + 0x6c));
    0x0006cd96 str r3, [r2, 0x34]                                    |     *((r2 + 0x34)) = r3;
    0x0006cd98 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0006cd9a ldrb.w r2, [r2, 0x53]                                 |     r2 = *((r2 + 0x53));
    0x0006cd9e cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0006cda0 bne.w 0x6bb04                                         |         goto label_5;
                                                                     |     }
    0x0006cda4 b.w 0x6c374                                           |     goto label_67;
                                                                     | label_92:
    0x0006cda8 ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0006cdaa mov r1, r6                                            |     r1 = r6;
    0x0006cdac bl 0x16140                                            |     fcn_00016140 (r0, r1);
    0x0006cdb0 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006cdb2 strh r5, [r6, 0x2c]                                   |     *((r6 + 0x2c)) = r5;
    0x0006cdb4 strh r4, [r6, 0x28]                                   |     *((r6 + 0x28)) = r4;
    0x0006cdb6 str r3, [r6, 0x30]                                    |     *((r6 + 0x30)) = r3;
    0x0006cdb8 str r4, [r6, 0x24]                                    |     *((r6 + 0x24)) = r4;
    0x0006cdba b.w 0x6bbc2                                           |     goto label_68;
                                                                     | label_106:
    0x0006cdbe mov.w r4, 0x8000                                      |     
    0x0006cdc2 movt r4, 0xffff                                       |     r4 = 0xNaN;
    0x0006cdc6 b.w 0x6bcbe                                           |     goto label_69;
                                                                     | label_168:
    0x0006cdca cmp r3, r6                                            |     
                                                                     |     if (r3 > r6) {
    0x0006cdcc bhi.w 0x6cb6c                                         |         goto label_58;
                                                                     |     }
    0x0006cdd0 b 0x6cbfa                                             |     goto label_70;
                                                                     | label_148:
    0x0006cdd2 ldr r4, [r4, 8]                                       |     r4 = *((r4 + 8));
    0x0006cdd4 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0006cdd6 beq.w 0x6cee2                                         |         goto label_172;
                                                                     |     }
    0x0006cdda mov r1, r5                                            |     r1 = r5;
    0x0006cddc b 0x6cde6                                             |     
                                                                     |     while (r3 == 0) {
                                                                     | label_71:
    0x0006cdde ldr r4, [r4, 0x14]                                    |         r4 = *((r4 + 0x14));
    0x0006cde0 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x0006cde2 beq.w 0x6cef8                                         |             goto label_173;
                                                                     |         }
    0x0006cde6 ldrb.w r3, [r4, 0x36]                                 |         r3 = *((r4 + 0x36));
    0x0006cdea cmp r3, 0                                             |         
    0x0006cdec beq 0x6cdde                                           |         
                                                                     |     }
    0x0006cdee ldr r0, [r4, 0x24]                                    |     r0 = *((r4 + 0x24));
    0x0006cdf0 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0006cdf2 bne 0x6cdde                                           |         goto label_71;
                                                                     |     }
    0x0006cdf4 ldrh r2, [r4, 0x32]                                   |     r2 = *((r4 + 0x32));
    0x0006cdf6 cmp r2, 3                                             |     
                                                                     |     if (r2 > 3) {
    0x0006cdf8 bhi 0x6cdde                                           |         goto label_71;
                                                                     |     }
    0x0006cdfa ldrb.w r3, [r4, 0x37]                                 |     r3 = *((r4 + 0x37));
    0x0006cdfe tst.w r3, 8                                           |     
    0x0006ce02 ite ne                                                |     
                                                                     |     if ((r3 & 8) == 0) {
    0x0006ce04 movne r5, 0x82                                        |         r5 = 0x82;
                                                                     |     }
                                                                     |     if ((r3 & 8) != 0) {
    0x0006ce06 moveq r5, 2                                           |         r5 = 2;
                                                                     |     }
    0x0006ce08 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0006ce0a beq 0x6cedc                                           |         goto label_174;
                                                                     |     }
    0x0006ce0c mov sb, r0                                            |     sb = r0;
    0x0006ce0e b 0x6ce20                                             |     
                                                                     |     while (r0 != 0) {
    0x0006ce10 ldr r3, [r6, 0x30]                                    |         r3 = *((r6 + 0x30));
    0x0006ce12 str.w r0, [r3, sb, lsl 2]                             |         __asm ("str.w r0, [r3, sb, lsl 2]");
    0x0006ce16 add.w sb, sb, 1                                       |         sb++;
    0x0006ce1a ldrh r3, [r4, 0x32]                                   |         r3 = *((r4 + 0x32));
    0x0006ce1c cmp sb, r3                                            |         
                                                                     |         if (sb >= r3) {
    0x0006ce1e bge 0x6ce3a                                           |             goto label_175;
                                                                     |         }
    0x0006ce20 mov r2, sb                                            |         r2 = sb;
    0x0006ce22 mov r0, r8                                            |         r0 = r8;
    0x0006ce24 strd r5, r4, [sp, 8]                                  |         __asm ("strd r5, r4, [var_8h]");
    0x0006ce28 vstr d8, [sp]                                         |         __asm ("vstr d8, [sp]");
    0x0006ce2c str r1, [sp, 0x18]                                    |         var_18h = r1;
    0x0006ce2e bl 0x37414                                            |         fcn_00037414 (r0, r1, r2, r3, r4, r5);
    0x0006ce32 ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0006ce34 cmp r0, 0                                             |         
    0x0006ce36 bne 0x6ce10                                           |         
                                                                     |     }
    0x0006ce38 ldrh r3, [r4, 0x32]                                   |     r3 = *((r4 + 0x32));
                                                                     | label_175:
    0x0006ce3a cmp r3, sb                                            |     
                                                                     |     if (r3 != sb) {
    0x0006ce3c bne 0x6cdde                                           |         goto label_71;
                                                                     |     }
    0x0006ce3e ldrb.w r3, [r4, 0x37]                                 |     r3 = *((r4 + 0x37));
    0x0006ce42 mov r5, r1                                            |     r5 = r1;
                                                                     | label_78:
    0x0006ce44 movw r2, 0x1201                                       |     r2 = 0x1201;
    0x0006ce48 str r2, [r6, 0x24]                                    |     *((r6 + 0x24)) = r2;
    0x0006ce4a lsls r2, r3, 0x1a                                     |     r2 = r3 << 0x1a;
                                                                     |     if (r2 < r3) {
    0x0006ce4c bmi 0x6ceaa                                           |         goto label_176;
                                                                     |     }
    0x0006ce4e ldrd r1, r2, [r7, 0x40]                               |     __asm ("ldrd r1, r2, [r7, 0x40]");
    0x0006ce52 ldr r3, [r4, 0x40]                                    |     r3 = *((r4 + 0x40));
    0x0006ce54 ands r1, r3                                           |     r1 &= r3;
    0x0006ce56 ldr r3, [r4, 0x44]                                    |     r3 = *((r4 + 0x44));
    0x0006ce58 ands r2, r3                                           |     r2 &= r3;
    0x0006ce5a orrs r2, r1                                           |     r2 |= r1;
                                                                     |     if (r2 == r1) {
    0x0006ce5c beq 0x6ceaa                                           |         goto label_176;
                                                                     |     }
    0x0006ce5e uxth.w sb, sb                                         |     sb = (int16_t) sb;
    0x0006ce62 movs r3, 0x27                                         |     r3 = 0x27;
    0x0006ce64 str r4, [r6, 0x20]                                    |     *((r6 + 0x20)) = r4;
    0x0006ce66 strh.w sb, [r6, 0x28]                                 |     *((r6 + 0x28)) = sb;
    0x0006ce6a strh.w sb, [r6, 0x18]                                 |     *((r6 + 0x18)) = sb;
    0x0006ce6e strh r3, [r6, 0x14]                                   |     *((r6 + 0x14)) = r3;
    0x0006ce70 b 0x6c8aa                                             |     goto label_72;
                                                                     | label_146:
    0x0006ce72 lsls r2, r1, 0x16                                     |     r2 = r1 << 0x16;
                                                                     |     if (r2 < r1) {
    0x0006ce74 bmi.w 0x6bcda                                         |         goto label_73;
                                                                     |     }
    0x0006ce78 b.w 0x6bd60                                           |     goto label_74;
                                                                     | label_100:
    0x0006ce7c blx 0x7e8c                                            |     fcn_00007e8c ();
                                                                     | label_136:
    0x0006ce80 ldr r1, [r6, 0x30]                                    |     r1 = *((r6 + 0x30));
    0x0006ce82 mov r4, r0                                            |     r4 = r0;
    0x0006ce84 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006ce86 ldr.w sl, [sp, 0x4c]                                  |     sl = var_4ch;
    0x0006ce8a cmp r3, r1                                            |     
                                                                     |     if (r3 != r1) {
    0x0006ce8c bne.w 0x6bae2                                         |         goto label_75;
                                                                     |     }
    0x0006ce90 ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0006ce92 mov r1, r6                                            |     r1 = r6;
    0x0006ce94 bl 0x16140                                            |     fcn_00016140 (r0, r1);
    0x0006ce98 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006ce9a str r3, [r6, 0x30]                                    |     *((r6 + 0x30)) = r3;
    0x0006ce9c movs r3, 0                                            |     r3 = 0;
    0x0006ce9e strh r3, [r6, 0x28]                                   |     *((r6 + 0x28)) = r3;
    0x0006cea0 str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0006cea2 movs r3, 3                                            |     r3 = 3;
    0x0006cea4 strh r3, [r6, 0x2c]                                   |     *((r6 + 0x2c)) = r3;
    0x0006cea6 b.w 0x6bb04                                           |     goto label_5;
                                                                     | label_176:
    0x0006ceaa uxth.w sb, sb                                         |     sb = (int16_t) sb;
    0x0006ceae movw r3, 0x1241                                       |     r3 = 0x1241;
    0x0006ceb2 str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0006ceb4 movs r3, 0x27                                         |     r3 = 0x27;
    0x0006ceb6 str r4, [r6, 0x20]                                    |     *((r6 + 0x20)) = r4;
    0x0006ceb8 strh.w sb, [r6, 0x28]                                 |     *((r6 + 0x28)) = sb;
    0x0006cebc strh.w sb, [r6, 0x18]                                 |     *((r6 + 0x18)) = sb;
    0x0006cec0 strh r3, [r6, 0x14]                                   |     *((r6 + 0x14)) = r3;
    0x0006cec2 b 0x6c8aa                                             |     goto label_72;
                                                                     | label_162:
    0x0006cec4 mov sb, fp                                            |     sb = fp;
    0x0006cec6 mov r8, fp                                            |     r8 = fp;
    0x0006cec8 b 0x6cb08                                             |     goto label_76;
                                                                     | label_167:
    0x0006ceca ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0006cecc bic.w r3, r3, r5                                      |     r3 = BIT_MASK (r3, r5);
    0x0006ced0 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0006ced2 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0006ced4 bic.w r3, r3, r4                                      |     r3 = BIT_MASK (r3, r4);
    0x0006ced8 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0006ceda b 0x6cc2a                                             |     goto label_77;
                                                                     | label_174:
    0x0006cedc mov r5, r1                                            |     r5 = r1;
    0x0006cede mov sb, r2                                            |     sb = r2;
    0x0006cee0 b 0x6ce44                                             |     goto label_78;
                                                                     | label_172:
    0x0006cee2 ldr r3, [r6, 0x24]                                    |     r3 = *((r6 + 0x24));
                                                                     | label_79:
    0x0006cee4 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0006cee6 bne.w 0x6c8aa                                         |         goto label_72;
                                                                     |     }
    0x0006ceea ldr.w fp, [sp, 0x84]                                  |     fp = var_84h;
    0x0006ceee ldr r6, [sp, 0x90]                                    |     r6 = var_90h;
    0x0006cef0 ldr.w r7, [fp, 4]                                     |     r7 = *(arg_4h);
    0x0006cef4 b.w 0x6b9e4                                           |     goto label_40;
                                                                     | label_173:
    0x0006cef8 ldr r3, [r6, 0x24]                                    |     r3 = *((r6 + 0x24));
    0x0006cefa mov r5, r1                                            |     r5 = r1;
    0x0006cefc b 0x6cee4                                             |     goto label_79;
                                                                     | label_145:
    0x0006cefe ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0006cf00 add.w r2, fp, r7                                      |     r2 = fp + r7;
    0x0006cf04 add.w r2, r3, r2, lsl 3                               |     r2 = r3 + (r2 << 3);
    0x0006cf08 ldrd r3, r2, [r2, 0x40]                               |     __asm ("ldrd r3, r2, [r2, 0x40]");
    0x0006cf0c orrs.w r1, r3, r2                                     |     r1 = r3 | r2;
                                                                     |     if (r1 == r3) {
    0x0006cf10 beq 0x6cf26                                           |         goto label_177;
                                                                     |     }
    0x0006cf12 ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
                                                                     |     do {
    0x0006cf14 lsrs r3, r3, 1                                        |         r3 >>= 1;
    0x0006cf16 adds r1, 1                                            |         r1++;
    0x0006cf18 orr.w r3, r3, r2, lsl 31                              |         r3 |= (r2 << 31);
    0x0006cf1c lsrs r2, r2, 1                                        |         r2 >>= 1;
    0x0006cf1e orrs.w r0, r3, r2                                     |         r0 = r3 | r2;
    0x0006cf22 bne 0x6cf14                                           |         
                                                                     |     } while (r0 != r3);
    0x0006cf24 str r1, [sp, 0x18]                                    |     var_18h = r1;
                                                                     | label_177:
    0x0006cf26 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0006cf28 mvn r3, 2                                             |     r3 = ~2;
    0x0006cf2c ldr r0, [sp, 0x58]                                    |     r0 = var_58h;
    0x0006cf2e mov.w r1, -1                                          |     r1 = -1;
    0x0006cf32 bl 0x1be48                                            |     fcn_0001be48 (r0, r1, r2);
    0x0006cf36 b 0x6c7aa                                             |     goto label_80;
                                                                     | label_164:
    0x0006cf38 movs r4, 0                                            |     r4 = 0;
    0x0006cf3a mov r6, r4                                            |     r6 = r4;
    0x0006cf3c b 0x6cb46                                             |     goto label_81;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8cac8 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0008cac8 ()                                          | void fcn_0008cac8 (int16_t arg_0h, int16_t arg_8h, int16_t arg_2ch, int16_t arg_34h, int16_t arg_38h, int16_t arg_74h, int16_t arg_114h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_130h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_50h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_7ch;
                                                                     |     int16_t var_80h;
                                                                     |     int16_t var_84h;
                                                                     |     int16_t var_88h;
                                                                     |     int16_t var_8ch;
                                                                     |     int16_t var_90h;
                                                                     |     int16_t var_94h;
                                                                     |     int16_t var_98h;
                                                                     |     int16_t var_9ch;
                                                                     |     int16_t var_a0h;
                                                                     |     int16_t var_a4h;
                                                                     |     int16_t var_a8h;
                                                                     |     int16_t var_ach;
                                                                     |     int16_t var_b0h;
                                                                     |     int16_t var_b4h;
                                                                     |     int16_t var_b8h;
                                                                     |     int16_t var_bch;
                                                                     |     int16_t var_c0h;
                                                                     |     int16_t var_c4h;
                                                                     |     int16_t var_c8h;
                                                                     |     int16_t var_cch;
                                                                     |     int32_t var_8h_2;
                                                                     |     int32_t var_8h_3;
                                                                     |     int32_t var_10h_2;
                                                                     |     int16_t var_dch;
                                                                     |     int16_t var_e0h;
                                                                     |     int16_t var_e4h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0008cac8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0008cacc mov fp, r0                                            |     
    0x0008cace ldr.w r0, [pc, 0xb58]                                 |     r0 = *(0x0008d628);
    0x0008cad2 mov r8, r1                                            |     r8 = r1;
    0x0008cad4 sub sp, 0xec                                          |     
    0x0008cad6 ldr.w r1, [pc, 0xb54]                                 |     
    0x0008cada add r0, pc                                            |     r0 += pc;
    0x0008cadc ldr.w sl, [fp, 8]                                     |     sl = *(arg_8h);
    0x0008cae0 ldrsh.w sb, [r8, 0x2a]                                |     sb = *((r8 + 0x2a));
    0x0008cae4 ldr r1, [r0, r1]                                      |     r1 = *((r0 + r1));
    0x0008cae6 ldr r1, [r1]                                          |     r1 = *(0x8d62e);
    0x0008cae8 str r1, [sp, 0xe4]                                    |     var_e4h = r1;
    0x0008caea mov.w r1, 0                                           |     r1 = 0;
    0x0008caee str r3, [sp, 0x7c]                                    |     var_7ch = r3;
    0x0008caf0 ldrb.w r3, [sp, 0x11c]                                |     r3 = *(arg_11ch);
    0x0008caf4 str r2, [sp, 0x2c]                                    |     var_2ch = r2;
    0x0008caf6 ldr.w r2, [r8, 0x24]                                  |     r2 = *((r8 + 0x24));
    0x0008cafa str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x0008cafc ldrb.w r3, [sp, 0x120]                                |     r3 = *(arg_120h);
    0x0008cb00 str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0008cb02 ldr r3, [sp, 0x128]                                   |     r3 = *(arg_128h);
    0x0008cb04 str r3, [sp, 0x98]                                    |     var_98h = r3;
    0x0008cb06 ldr r3, [sp, 0x12c]                                   |     r3 = *(arg_12ch);
    0x0008cb08 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0008cb0a ldr r3, [sp, 0x130]                                   |     r3 = *(arg_130h);
    0x0008cb0c str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0008cb0e ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0008cb12 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0008cb14 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008cb16 subs r3, 0                                            |     
    0x0008cb18 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0008cb1a movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0008cb1c str r3, [sp, 0x58]                                    |     var_58h = r3;
    0x0008cb1e ands r3, r2, 0x80                                     |     r3 = r2 & 0x80;
                                                                     |     if (r3 == r2) {
    0x0008cb22 beq.w 0x8cd54                                         |         goto label_80;
                                                                     |     }
    0x0008cb26 ldr.w r3, [r8, 8]                                     |     r3 = *((r8 + 8));
    0x0008cb2a str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0008cb2c ldr r1, [sp, 0x44]                                    |     r1 = var_44h;
                                                                     |     if (r3 != 0) {
    0x0008cb2e cbnz r3, 0x8cb3c                                      |         goto label_81;
                                                                     |     }
    0x0008cb30 b.w 0x8df1c                                           |     goto label_82;
                                                                     |     do {
    0x0008cb34 ldr r1, [r1, 0x14]                                    |         r1 = *((r1 + 0x14));
    0x0008cb36 cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x0008cb38 beq.w 0x8df1c                                         |             goto label_82;
                                                                     |         }
                                                                     | label_81:
    0x0008cb3c ldrb.w r3, [r1, 0x37]                                 |         r3 = *((r1 + 0x37));
    0x0008cb40 and r3, r3, 3                                         |         r3 &= 3;
    0x0008cb44 cmp r3, 2                                             |         
    0x0008cb46 bne 0x8cb34                                           |         
                                                                     |     } while (r3 != 2);
    0x0008cb48 ldrh r3, [r1, 0x32]                                   |     r3 = *((r1 + 0x32));
    0x0008cb4a lsls r5, r2, 0x14                                     |     r5 = r2 << 0x14;
    0x0008cb4c str r1, [sp, 0x44]                                    |     var_44h = r1;
    0x0008cb4e str r3, [sp, 0x64]                                    |     var_64h = r3;
                                                                     |     if (r5 < r2) {
    0x0008cb50 bmi.w 0x8cd62                                         |         goto label_83;
                                                                     |     }
                                                                     | label_1:
    0x0008cb54 ldr.w r5, [r8, 0x18]                                  |     r5 = *((r8 + 0x18));
    0x0008cb58 str r5, [sp, 0x24]                                    |     var_24h = r5;
    0x0008cb5a cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0008cb5c beq.w 0x8cc72                                         |         goto label_84;
                                                                     |     }
    0x0008cb60 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0008cb62 ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0008cb64 and r3, r3, 0x200                                     |     r3 &= 0x200;
    0x0008cb68 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008cb6a bne.w 0x8cfc0                                         |         goto label_85;
                                                                     |     }
    0x0008cb6e ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0008cb70 ldr r2, [r5]                                          |     r2 = *(r5);
    0x0008cb72 ldr r1, [sp, 0x114]                                   |     r1 = *(arg_114h);
    0x0008cb74 cmp r0, 0xb                                           |     
    0x0008cb76 ite ne                                                |     
                                                                     |     if (r0 == 0xb) {
    0x0008cb78 movne r6, r0                                          |         r6 = r0;
                                                                     |     }
                                                                     |     if (r0 != 0xb) {
    0x0008cb7a moveq r6, 2                                           |         r6 = 2;
                                                                     |     }
    0x0008cb7c cmp r2, 0                                             |     
    0x0008cb7e mvn.w r1, r1                                          |     r1 = ~r1;
    0x0008cb82 str.w r1, [fp, 0x34]                                  |     __asm ("str.w r1, [arg_34h]");
                                                                     |     if (r2 <= 0) {
    0x0008cb86 ble.w 0x8de94                                         |         goto label_86;
                                                                     |     }
    0x0008cb8a ldr.w r1, [pc, 0xaa4]                                 |     r1 = *(0x0008d630);
    0x0008cb8e mov r4, r3                                            |     r4 = r3;
    0x0008cb90 str.w r8, [sp, 0x40]                                  |     __asm ("str.w r8, [var_40h]");
    0x0008cb94 add.w sb, sp, 0xc8                                    |     sb += var_c8h;
    0x0008cb98 mov r7, r3                                            |     r7 = r3;
    0x0008cb9a mov r8, r3                                            |     r8 = r3;
    0x0008cb9c add r1, pc                                            |     r1 += pc;
    0x0008cb9e str r1, [sp, 0x38]                                    |     var_38h = r1;
                                                                     |     do {
    0x0008cba0 ldr r2, [sp, 0x20]                                    |         r2 = var_20h;
    0x0008cba2 ldr r3, [r5, 8]                                       |         r3 = *((r5 + 8));
                                                                     |         if (r2 != 0) {
    0x0008cba4 cbz r2, 0x8cbe0                                       |             
    0x0008cba6 ldr r2, [sp, 0x38]                                    |             r2 = var_38h;
    0x0008cba8 str.w r7, [sb]                                        |             __asm ("str.w r7, [sb]");
    0x0008cbac strd r7, r7, [sb, 8]                                  |             __asm ("strd r7, r7, [var_8h_2]");
    0x0008cbb0 str r2, [sp, 0xcc]                                    |             var_cch = r2;
    0x0008cbb2 ldr r2, [sp, 0x20]                                    |             r2 = var_20h;
    0x0008cbb4 strd r7, r7, [sb, 0x10]                               |             __asm ("strd r7, r7, [var_dch]");
    0x0008cbb8 str r2, [sp, 0xe0]                                    |             var_e0h = r2;
    0x0008cbba cmp r3, 0                                             |             
                                                                     |             if (r3 == 0) {
    0x0008cbbc beq.w 0x8d05e                                         |                 goto label_87;
                                                                     |             }
    0x0008cbc0 mov r1, r3                                            |             r1 = r3;
    0x0008cbc2 mov r0, sb                                            |             r0 = sb;
    0x0008cbc4 str r3, [sp, 0x28]                                    |             var_28h = r3;
    0x0008cbc6 bl 0x301c4                                            |             fcn_000301c4 (r0, r1);
    0x0008cbca ldr r1, [sp, 0x54]                                    |             r1 = var_54h;
    0x0008cbcc ldrh.w r2, [sp, 0xdc]                                 |             r2 = var_dch;
    0x0008cbd0 ldr r3, [sp, 0x28]                                    |             r3 = var_28h;
                                                                     |             if (r1 == 0) {
    0x0008cbd2 cbnz r1, 0x8cbdc                                      |                 
                                                                     | label_15:
    0x0008cbd4 bic r2, r2, 2                                         |                 r2 = BIT_MASK (r2, 2);
    0x0008cbd8 lsls r2, r2, 0x10                                     |                 r2 <<= 0x10;
    0x0008cbda lsrs r2, r2, 0x10                                     |                 r2 >>= 0x10;
                                                                     |             }
    0x0008cbdc cmp r2, 0                                             |             
                                                                     |             if (r2 == 0) {
    0x0008cbde beq 0x8cc58                                           |                 goto label_14;
                                                                     |             }
                                                                     |         }
    0x0008cbe0 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x0008cbe2 beq.w 0x8d04c                                         |             goto label_88;
                                                                     |         }
                                                                     | label_13:
    0x0008cbe6 ldr.w r4, [fp, 0x38]                                  |         r4 = *(arg_38h);
    0x0008cbea subs r2, r4, 1                                        |         r2 = r4 - 1;
    0x0008cbec str r2, [sp, 0x28]                                    |         var_28h = r2;
    0x0008cbee str.w r2, [fp, 0x38]                                  |         __asm ("str.w r2, [arg_38h]");
    0x0008cbf2 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008cbf4 beq.w 0x8d06a                                         |             goto label_89;
                                                                     |         }
    0x0008cbf8 mov r1, r3                                            |         r1 = r3;
    0x0008cbfa movs r3, 0                                            |         r3 = 0;
    0x0008cbfc mov r2, r3                                            |         r2 = r3;
    0x0008cbfe ldr r0, [sp, 0x34]                                    |         r0 = var_34h;
    0x0008cc00 bl 0x311ec                                            |         fcn_000311ec (r0, r1, r2, r3);
    0x0008cc04 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0008cc06 mov r1, r0                                            |         r1 = r0;
    0x0008cc08 ldrb.w r3, [r3, 0x53]                                 |         r3 = *((r3 + 0x53));
    0x0008cc0c cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008cc0e beq.w 0x8d026                                         |             goto label_90;
                                                                     |         }
                                                                     |         if (r1 != 0) {
                                                                     | label_12:
    0x0008cc12 cbz r1, 0x8cc1a                                       |             
    0x0008cc14 ldr r0, [sp, 0x34]                                    |             r0 = var_34h;
    0x0008cc16 bl 0x18bd0                                            |             fcn_00018bd0 (r0, r1);
                                                                     |         }
                                                                     | label_16:
    0x0008cc1a cmp r6, 4                                             |         
                                                                     |         if (r6 == 4) {
    0x0008cc1c beq.w 0x8d088                                         |             goto label_91;
                                                                     |         }
                                                                     | label_17:
    0x0008cc20 cmp r6, 5                                             |         
    0x0008cc22 mov.w r2, 3                                           |         r2 = 3;
    0x0008cc26 it eq                                                 |         
                                                                     |         if (r6 != 5) {
    0x0008cc28 moveq r6, 2                                           |             r6 = 2;
                                                                     |         }
    0x0008cc2a ldr r3, [r5, 0xc]                                     |         r3 = *((r5 + 0xc));
    0x0008cc2c mov r0, fp                                            |         r0 = fp;
    0x0008cc2e str r2, [sp, 4]                                       |         var_4h = r2;
    0x0008cc30 movw r1, 0x113                                        |         r1 = 0x113;
    0x0008cc34 mov r2, r6                                            |         r2 = r6;
    0x0008cc36 str r7, [sp]                                          |         *(sp) = r7;
    0x0008cc38 bl 0x2b978                                            |         fcn_0002b978 (r0, r1, r2, r3, r4, r5);
    0x0008cc3c ldr.w r0, [sl, 0xc]                                   |         r0 = *((sl + 0xc));
    0x0008cc40 ldrd r3, r2, [r0, 0x38]                               |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008cc44 cmn r2, r3                                            |         
                                                                     |         if (r2 < r3) {
    0x0008cc46 bmi.w 0x8d09e                                         |             goto label_92;
                                                                     |         }
                                                                     | label_18:
    0x0008cc4a ldr r3, [r0, 0x40]                                    |         r3 = *((r0 + 0x40));
    0x0008cc4c lsls r4, r4, 2                                        |         r4 <<= 2;
    0x0008cc4e ldr.w r2, [sl, 0x6c]                                  |         r2 = *((sl + 0x6c));
    0x0008cc52 rsbs r4, r4, 0                                        |         r4 -= ;
    0x0008cc54 str r2, [r3, r4]                                      |         *((r3 + r4)) = r2;
    0x0008cc56 movs r4, 1                                            |         r4 = 1;
                                                                     | label_14:
    0x0008cc58 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0008cc5a add.w r8, r8, 1                                       |         r8++;
    0x0008cc5e adds r5, 0x10                                         |         r5 += 0x10;
    0x0008cc60 ldr r3, [r3]                                          |         r3 = *(r3);
    0x0008cc62 cmp r3, r8                                            |         
    0x0008cc64 bgt 0x8cba0                                           |         
                                                                     |     } while (r3 > r8);
    0x0008cc66 ldr.w r8, [sp, 0x40]                                  |     r8 = var_40h;
    0x0008cc6a str r4, [sp, 0x24]                                    |     var_24h = r4;
                                                                     | label_74:
    0x0008cc6c movs r3, 0                                            |     r3 = 0;
    0x0008cc6e str.w r3, [fp, 0x34]                                  |     __asm ("str.w r3, [arg_34h]");
                                                                     | label_84:
    0x0008cc72 ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0008cc74 ldr.w r3, [r8, 8]                                     |     r3 = *((r8 + 8));
    0x0008cc78 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0008cc7a cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008cc7c beq.w 0x8cfd2                                         |         goto label_93;
                                                                     |     }
                                                                     | label_11:
    0x0008cc80 ldr r2, [r2]                                          |     r2 = *(r2);
    0x0008cc82 str r2, [sp, 0x5c]                                    |     var_5ch = r2;
    0x0008cc84 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008cc86 beq.w 0x8d036                                         |         goto label_94;
                                                                     |     }
    0x0008cc8a ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0008cc8c cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008cc8e beq.w 0x8dbcc                                         |         goto label_95;
                                                                     |     }
    0x0008cc92 movs r2, 0                                            |     r2 = 0;
                                                                     |     do {
    0x0008cc94 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0008cc96 adds r2, 1                                            |         r2++;
    0x0008cc98 cmp r3, 0                                             |         
    0x0008cc9a bne 0x8cc94                                           |         
                                                                     |     } while (r3 != 0);
    0x0008cc9c ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0008cc9e add.w r4, r2, r2, lsl 2                               |     r4 = r2 + (r2 << 2);
    0x0008cca2 str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0008cca4 lsls r4, r4, 1                                        |     r4 <<= 1;
    0x0008cca6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0008cca8 beq.w 0x8d95a                                         |         goto label_96;
                                                                     |     }
    0x0008ccac mov r2, r4                                            |     r2 = r4;
    0x0008ccae bl 0x1abdc                                            |     fcn_0001abdc (r0, r1);
    0x0008ccb2 str r0, [sp, 0x5c]                                    |     var_5ch = r0;
                                                                     | label_50:
    0x0008ccb4 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0008ccb6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008ccb8 beq.w 0x8d5be                                         |         goto label_97;
                                                                     |     }
    0x0008ccbc mov r2, r4                                            |     r2 = r4;
    0x0008ccbe movs r1, 0                                            |     r1 = 0;
    0x0008ccc0 mov r0, r3                                            |     r0 = r3;
    0x0008ccc2 mov r4, r3                                            |     r4 = r3;
    0x0008ccc4 blx 0x8264                                            |     fcn_00008264 ();
    0x0008ccc8 ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
    0x0008ccca mov r3, r4                                            |     r3 = r4;
    0x0008cccc ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0008ccce movs r7, 1                                            |     r7 = 1;
    0x0008ccd0 ldr.w r1, [r8, 8]                                     |     r1 = *((r8 + 8));
    0x0008ccd4 mov ip, r3                                            |     
    0x0008ccd6 add.w r5, r4, r0, lsl 3                               |     r5 = r4 + (r0 << 3);
    0x0008ccda str r4, [r2, 0x18]                                    |     *((r2 + 0x18)) = r4;
    0x0008ccdc mov r0, r2                                            |     r0 = r2;
    0x0008ccde movs r4, 0                                            |     r4 = 0;
                                                                     | label_0:
    0x0008cce0 ldr r3, [r0]                                          |     r3 = *(r0);
                                                                     |     if (r3 == 0) {
    0x0008cce2 cbz r3, 0x8cd2a                                       |         goto label_98;
                                                                     |     }
    0x0008cce4 ldr r6, [r0, 0x1c]                                    |     r6 = *((r0 + 0x1c));
                                                                     |     if (r6 == 0) {
    0x0008cce6 cbz r6, 0x8cd24                                       |         goto label_99;
                                                                     |     }
    0x0008cce8 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0008ccea beq.w 0x8db88                                         |         goto label_100;
                                                                     |     }
    0x0008ccee cmp r6, r1                                            |     
                                                                     |     if (r6 == r1) {
    0x0008ccf0 beq.w 0x8db88                                         |         goto label_100;
                                                                     |     }
    0x0008ccf4 mov r3, r1                                            |     r3 = r1;
    0x0008ccf6 movs r2, 0                                            |     r2 = 0;
    0x0008ccf8 b 0x8ccfe                                             |     
                                                                     |     while (r3 != 0) {
    0x0008ccfa cmp r6, r3                                            |         
                                                                     |         if (r6 == r3) {
    0x0008ccfc beq 0x8cd06                                           |             goto label_101;
                                                                     |         }
    0x0008ccfe ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0008cd00 adds r2, 1                                            |         r2++;
    0x0008cd02 cmp r3, 0                                             |         
    0x0008cd04 bne 0x8ccfa                                           |         
                                                                     |     }
                                                                     | label_101:
    0x0008cd06 adds r6, r5, r2                                       |     r6 = r5 + r2;
                                                                     | label_64:
    0x0008cd08 ldrb.w lr, [r6]                                       |     
    0x0008cd0c cmp.w lr, 0                                           |     
                                                                     |     if (lr == 0) {
    0x0008cd10 bne 0x8cd24                                           |         
    0x0008cd12 strb r7, [r6]                                         |         *(r6) = r7;
    0x0008cd14 str.w r3, [ip, r4, lsl 3]                             |         __asm ("str.w r3, [ip, r4, lsl 3]");
    0x0008cd18 add.w r3, ip, r4, lsl 3                               |         r3 = ip + (r4 << 3);
    0x0008cd1c adds r4, 1                                            |         r4++;
    0x0008cd1e ldr.w r1, [r8, 8]                                     |         r1 = *((r8 + 8));
    0x0008cd22 str r2, [r3, 4]                                       |         *((r3 + 4)) = r2;
                                                                     |     }
                                                                     | label_99:
    0x0008cd24 ldr r0, [r0, 0x10]                                    |     r0 = *((r0 + 0x10));
    0x0008cd26 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008cd28 bne 0x8cce0                                           |         goto label_0;
                                                                     |     }
                                                                     |     if (r1 == 0) {
                                                                     | label_98:
    0x0008cd2a cbz r1, 0x8cd4e                                       |         goto label_102;
                                                                     |     }
    0x0008cd2c ldr r6, [sp, 0x5c]                                    |     r6 = var_5ch;
    0x0008cd2e subs r3, r5, 1                                        |     r3 = r5 - 1;
    0x0008cd30 rsb.w r5, r5, 1                                       |     r5 = 1 - r5;
                                                                     |     do {
    0x0008cd34 adds r0, r5, r3                                       |         r0 = r5 + r3;
    0x0008cd36 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
                                                                     |         if (r2 == 0) {
    0x0008cd3a cbnz r2, 0x8cd48                                      |             
    0x0008cd3c add.w r2, r6, r4, lsl 3                               |             r2 = r6 + (r4 << 3);
    0x0008cd40 str.w r1, [r6, r4, lsl 3]                             |             __asm ("str.w r1, [r6, r4, lsl 3]");
    0x0008cd44 adds r4, 1                                            |             r4++;
    0x0008cd46 str r0, [r2, 4]                                       |             *((r2 + 4)) = r0;
                                                                     |         }
    0x0008cd48 ldr r1, [r1, 0x14]                                    |         r1 = *((r1 + 0x14));
    0x0008cd4a cmp r1, 0                                             |         
    0x0008cd4c bne 0x8cd34                                           |         
                                                                     |     } while (r1 != 0);
                                                                     | label_102:
    0x0008cd4e movs r3, 1                                            |     r3 = 1;
    0x0008cd50 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0008cd52 b 0x8cfd8                                             |     goto label_56;
                                                                     | label_80:
    0x0008cd54 lsls r5, r2, 0x14                                     |     r5 = r2 << 0x14;
    0x0008cd56 str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0008cd58 mov.w r3, 1                                           |     r3 = 1;
    0x0008cd5c str r3, [sp, 0x64]                                    |     var_64h = r3;
                                                                     |     if (r5 >= r2) {
    0x0008cd5e bpl.w 0x8cb54                                         |         goto label_1;
                                                                     |     }
                                                                     | label_83:
    0x0008cd62 ldr.w r3, [pc, 0x8d0]                                 |     r3 = *(0x0008d634);
    0x0008cd66 ldr.w r2, [pc, 0x8d0]                                 |     r2 = *(0x0008d638);
    0x0008cd6a str.w fp, [sp, 0x40]                                  |     __asm ("str.w fp, [var_40h]");
    0x0008cd6e add r3, pc                                            |     r3 += pc;
    0x0008cd70 adds r3, 4                                            |     r3 += 4;
    0x0008cd72 add r2, pc                                            |     r2 += pc;
    0x0008cd74 str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0008cd76 movs r3, 0                                            |     r3 = 0;
    0x0008cd78 mov fp, r3                                            |     
    0x0008cd7a str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0008cd7c str r2, [sp, 0x48]                                    |     var_48h = r2;
    0x0008cd7e str r3, [sp, 0x38]                                    |     var_38h = r3;
                                                                     | label_2:
    0x0008cd80 cmp.w sb, 0                                           |     
    0x0008cd84 itt le                                                |     
                                                                     |     if (sb > 0) {
    0x0008cd86 andle r3, fp, 1                                       |         r3 = fp & 1;
                                                                     |     }
                                                                     |     if (sb <= 0) {
    0x0008cd8a str r3, [sp, 0x28]                                    |         var_28h = r3;
                                                                     |     }
                                                                     |     if (sb <= 0) {
    0x0008cd8c ble.w 0x8cec0                                         |         goto label_103;
                                                                     |     }
    0x0008cd90 movs r4, 0                                            |     r4 = 0;
    0x0008cd92 and r3, fp, 1                                         |     r3 = fp & 1;
    0x0008cd96 str r3, [sp, 0x28]                                    |     var_28h = r3;
                                                                     |     do {
    0x0008cd98 ldr.w r2, [r8, 4]                                     |         r2 = *((r8 + 4));
    0x0008cd9c add.w r3, r4, r4, lsl 2                               |         r3 = r4 + (r4 << 2);
    0x0008cda0 add.w r6, r2, r3, lsl 2                               |         r6 = r2 + (r3 << 2);
    0x0008cda4 ldrb r5, [r6, 0xc]                                    |         r5 = *((r6 + 0xc));
    0x0008cda6 cmp r5, 0                                             |         
                                                                     |         if (r5 != 0) {
    0x0008cda8 beq.w 0x8ceb8                                         |             
    0x0008cdac ldrsh.w r1, [r8, 0x28]                                |             r1 = *((r8 + 0x28));
    0x0008cdb0 cmp r1, r4                                            |             
                                                                     |             if (r1 == r4) {
    0x0008cdb2 beq.w 0x8ceb8                                         |                 goto label_4;
                                                                     |             }
    0x0008cdb6 ldrh r1, [r6, 0x10]                                   |             r1 = *((r6 + 0x10));
    0x0008cdb8 ands r0, r1, 0x60                                     |             r0 = r1 & 0x60;
    0x0008cdbc eor r1, fp, 1                                         |             r1 = fp ^ 1;
    0x0008cdc0 and r1, r1, 1                                         |             r1 &= 1;
    0x0008cdc4 it eq                                                 |             
                                                                     |             if (r0 != r1) {
    0x0008cdc6 moveq r1, 0                                           |                 r1 = 0;
                                                                     |             }
    0x0008cdc8 cmp r1, 0                                             |             
                                                                     |             if (r1 != 0) {
    0x0008cdca bne.w 0x8cf80                                         |                 goto label_104;
                                                                     |             }
    0x0008cdce ldr r1, [sp, 0x20]                                    |             r1 = var_20h;
                                                                     |             if (r1 != 0) {
    0x0008cdd0 cbz r1, 0x8cde2                                       |                 
    0x0008cdd2 ldr.w r1, [r1, r4, lsl 2]                             |                 offset_0 = r4 << 2;
                                                                     |                 r1 = *((r1 + offset_0));
    0x0008cdd6 clz r7, r0                                            |                 r7 &= r0;
    0x0008cdda lsrs r7, r7, 5                                        |                 r7 >>= 5;
    0x0008cddc ands.w r7, r7, r1, lsr 31                             |                 r7 &= (r1 >> 31);
                                                                     |                 if (r7 != r7) {
    0x0008cde0 bne 0x8ceb8                                           |                     goto label_4;
                                                                     |                 }
                                                                     |             }
    0x0008cde2 ldr r1, [sp, 0x30]                                    |             r1 = var_30h;
    0x0008cde4 cmp r1, 0xb                                           |             
    0x0008cde6 it ne                                                 |             
                                                                     |             if (r1 == 0xb) {
    0x0008cde8 movne r5, r1                                          |                 r5 = r1;
                                                                     |             }
                                                                     |             if (r1 == 0xb) {
    0x0008cdea beq.w 0x8cf88                                         |                 goto label_105;
                                                                     |             }
                                                                     | label_5:
    0x0008cdee cmp r5, 5                                             |             
                                                                     |             if (r5 == 5) {
    0x0008cdf0 beq 0x8cee4                                           |                 goto label_106;
                                                                     |             }
                                                                     | label_6:
    0x0008cdf2 ldr r1, [sp, 0x28]                                    |             r1 = var_28h;
    0x0008cdf4 cmp r0, 0                                             |             
    0x0008cdf6 ite ne                                                |             
                                                                     |             if (r0 == 0) {
    0x0008cdf8 movne r1, 0                                           |                 r1 = 0;
                                                                     |             }
                                                                     |             if (r0 != 0) {
    0x0008cdfa andeq r1, r1, 1                                       |                 r1 &= 1;
                                                                     |             }
    0x0008cdfe cmp r1, 0                                             |             
                                                                     |             if (r1 != 0) {
    0x0008ce00 bne 0x8ceb8                                           |                 goto label_4;
                                                                     |             }
    0x0008ce02 ldr.w r0, [r8, 0x24]                                  |             r0 = *((r8 + 0x24));
    0x0008ce06 sxth r1, r4                                           |             __asm ("sxth r1, r4");
    0x0008ce08 lsls r0, r0, 0x1a                                     |             r0 <<= 0x1a;
                                                                     |             if (r0 < r0) {
    0x0008ce0a bpl 0x8ce1c                                           |                 
    0x0008ce0c mov r0, r8                                            |                 r0 = r8;
    0x0008ce0e strd r3, r2, [sp, 0x4c]                               |                 __asm ("strd r3, r2, [var_50h]");
    0x0008ce12 bl 0xf328                                             |                 fcn_0000f328 (r0, r1);
    0x0008ce16 ldrd r3, r2, [sp, 0x4c]                               |                 __asm ("ldrd r3, r2, [var_50h]");
    0x0008ce1a mov r1, r0                                            |                 r1 = r0;
                                                                     |             }
    0x0008ce1c ldr r0, [sp, 0x114]                                   |             r0 = *(arg_114h);
    0x0008ce1e add r1, r0                                            |             r1 += r0;
    0x0008ce20 adds r7, r1, 1                                        |             r7 = r1 + 1;
    0x0008ce22 subs r1, r5, 1                                        |             r1 = r5 - 1;
    0x0008ce24 cmp r1, 4                                             |             
                                                                     |             if (r1 > 4) {
    0x0008ce26 bhi.w 0x8cf6e                                         |                 goto label_107;
                                                                     |             }
                                                                     |             /* switch table (5 cases) at 0x8ce2e */
    0x0008ce2a tbb [pc, r1]                                          |             __asm ("tbb aav.0x000000ff");
                                                                     | label_3:
    0x0008ce34 cmp r0, 0                                             |             
                                                                     |             if (r0 == 0) {
    0x0008ce36 beq.w 0x8cfa4                                         |                 goto label_108;
                                                                     |             }
    0x0008ce3a mov r0, r8                                            |             r0 = r8;
    0x0008ce3c strd r3, r2, [sp, 0x4c]                               |             __asm ("strd r3, r2, [var_50h]");
    0x0008ce40 bl 0xf328                                             |             fcn_0000f328 (r0, r1);
    0x0008ce44 ldr r3, [sp, 0x114]                                   |             r3 = *(arg_114h);
    0x0008ce46 adds r7, r0, r3                                       |             r7 = r0 + r3;
    0x0008ce48 ldrd r3, r2, [sp, 0x4c]                               |             __asm ("ldrd r3, r2, [var_50h]");
    0x0008ce4c adds r7, 1                                            |             r7++;
                                                                     | label_9:
    0x0008ce4e ldr r0, [sp, 0x40]                                    |             r0 = var_40h;
    0x0008ce50 movs r5, 2                                            |             r5 = 2;
    0x0008ce52 ldr r1, [r0, 0x74]                                    |             r1 = *((r0 + 0x74));
    0x0008ce54 cmp r1, 0                                             |             
    0x0008ce56 it eq                                                 |             
                                                                     |             if (r1 != 0) {
    0x0008ce58 moveq r1, r0                                          |                 r1 = r0;
                                                                     |             }
    0x0008ce5a movs r0, 1                                            |             r0 = 1;
    0x0008ce5c strb r0, [r1, 0x15]                                   |             *((r1 + 0x15)) = r0;
    0x0008ce5e ldr.w r3, [r2, r3, lsl 2]                             |             offset_1 = r3 << 2;
                                                                     |             r3 = *((r2 + offset_1));
    0x0008ce62 ldr r1, [sp, 0x48]                                    |             r1 = var_48h;
    0x0008ce64 ldr.w r2, [r8]                                        |             r2 = *(r8);
    0x0008ce68 ldr r0, [sp, 0x34]                                    |             r0 = var_34h;
    0x0008ce6a bl 0x2677c                                            |             fcn_0002677c (r0);
    0x0008ce6e mov r3, r5                                            |             r3 = r5;
    0x0008ce70 movw r2, 0x513                                        |             r2 = 0x513;
    0x0008ce74 mov r5, r0                                            |             r5 = r0;
    0x0008ce76 movs r1, 0x43                                         |             r1 = 0x43;
    0x0008ce78 mov r0, sl                                            |             r0 = sl;
    0x0008ce7a str r7, [sp]                                          |             *(sp) = r7;
    0x0008ce7c bl 0x2ae1c                                            |             fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008ce80 ldr.w r0, [sl]                                        |             r0 = *(sl);
    0x0008ce84 ldrb.w r3, [r0, 0x53]                                 |             r3 = *((r0 + 0x53));
    0x0008ce88 cmp r3, 0                                             |             
                                                                     |             if (r3 != 0) {
    0x0008ce8a bne.w 0x8cf92                                         |                 goto label_109;
                                                                     |             }
    0x0008ce8e ldrd r1, r3, [sl, 0x68]                               |             __asm ("ldrd r1, r3, [sl, 0x68]");
    0x0008ce92 movs r0, 0xf9                                         |             r0 = 0xf9;
    0x0008ce94 add.w r2, r3, r3, lsl 2                               |             r2 = r3 + (r3 << 2);
    0x0008ce98 lsls r2, r2, 2                                        |             r2 <<= 2;
    0x0008ce9a subs r2, 0x14                                         |             r2 -= 0x14;
    0x0008ce9c add r1, r2                                            |             r1 += r2;
    0x0008ce9e strb r0, [r1, 1]                                      |             *((r1 + 1)) = r0;
    0x0008cea0 str r5, [r1, 0x10]                                    |             *((r1 + 0x10)) = r5;
                                                                     | label_7:
    0x0008cea2 cmp r3, 0                                             |             
                                                                     |             if (r3 <= 0) {
    0x0008cea4 ble 0x8ceb8                                           |                 goto label_4;
                                                                     |             }
    0x0008cea6 ldr.w r2, [sl, 0x68]                                  |             r2 = *((sl + 0x68));
    0x0008ceaa add.w r3, r3, r3, lsl 2                               |             r3 += (r3 << 2);
    0x0008ceae add.w r2, r2, r3, lsl 2                               |             r2 += (r3 << 2);
    0x0008ceb2 movs r3, 1                                            |             r3 = 1;
    0x0008ceb4 strh r3, [r2, -0x12]                                  |             *((r2 - 0x12)) = r3;
                                                                     |         }
                                                                     | label_4:
    0x0008ceb8 adds r4, 1                                            |         r4++;
    0x0008ceba cmp sb, r4                                            |         
    0x0008cebc bne.w 0x8cd98                                         |         
                                                                     |     } while (sb != r4);
                                                                     | label_103:
    0x0008cec0 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008cec2 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0008cec4 orrs r3, r2                                           |     r3 |= r2;
    0x0008cec6 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008cec8 it eq                                                 |     
                                                                     |     if (r3 != r2) {
    0x0008ceca orreq r3, r3, 1                                       |         r3 |= 1;
                                                                     |     }
    0x0008cece cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008ced0 bne 0x8cfba                                           |         goto label_110;
                                                                     |     }
                                                                     |     if (r2 != 0) {
    0x0008ced2 cbz r2, 0x8cede                                       |         
    0x0008ced4 ldr.w r3, [r8, 0x24]                                  |         r3 = *((r8 + 0x24));
    0x0008ced8 tst.w r3, 0x60                                        |         
                                                                     |         if ((r3 & 0x60) != 0) {
    0x0008cedc bne 0x8cfac                                           |             goto label_111;
                                                                     |         }
                                                                     |     }
                                                                     | label_10:
    0x0008cede mov.w fp, 1                                           |     
    0x0008cee2 b 0x8cd80                                             |     goto label_2;
                                                                     | label_106:
    0x0008cee4 ldr.w r1, [r8, 0x24]                                  |     r1 = *((r8 + 0x24));
    0x0008cee8 and r0, r1, 0x20                                      |     r0 = r1 & 0x20;
    0x0008ceec sxth r1, r4                                           |     __asm ("sxth r1, r4");
    0x0008ceee cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0008cef2 bne 0x8ce34                                           |         goto label_3;
                                                                     |     }
    0x0008cef4 ldr r5, [r6, 4]                                       |     r5 = *((r6 + 4));
    0x0008cef6 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0008cef8 beq 0x8ce34                                           |         goto label_3;
                                                                     |     }
    0x0008cefa cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0008cefc beq.w 0x8d0bc                                         |         goto label_112;
                                                                     |     }
    0x0008cf00 mov r0, r8                                            |     r0 = r8;
    0x0008cf02 bl 0xf328                                             |     fcn_0000f328 (r0, r1);
    0x0008cf06 ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008cf08 adds r7, r0, r3                                       |     r7 = r0 + r3;
    0x0008cf0a adds r7, 1                                            |     r7++;
                                                                     | label_20:
    0x0008cf0c ldrd r5, r3, [sl, 0x6c]                               |     __asm ("ldrd r5, r3, [sl, 0x6c]");
    0x0008cf10 cmp r5, r3                                            |     
                                                                     |     if (r5 >= r3) {
    0x0008cf12 bge.w 0x8d0aa                                         |         goto label_113;
                                                                     |     }
    0x0008cf16 ldr.w r1, [sl, 0x68]                                  |     r1 = *((sl + 0x68));
    0x0008cf1a add.w r3, r5, r5, lsl 2                               |     r3 = r5 + (r5 << 2);
    0x0008cf1e adds r0, r5, 1                                        |     r0 = r5 + 1;
    0x0008cf20 str.w r0, [sl, 0x6c]                                  |     __asm ("str.w r0, [sl, 0x6c]");
    0x0008cf24 movs r2, 0                                            |     r2 = 0;
    0x0008cf26 movs r0, 0x33                                         |     r0 = 0x33;
    0x0008cf28 add.w ip, r1, r3, lsl 2                               |     
    0x0008cf2c strd r7, r2, [ip, 4]                                  |     __asm ("strd r7, r2, [ip, 4]");
    0x0008cf30 strd r2, r2, [ip, 0xc]                                |     __asm ("strd r2, r2, [ip, 0xc]");
    0x0008cf34 str.w r0, [r1, r3, lsl 2]                             |     __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                     | label_19:
    0x0008cf38 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0008cf3a mov r2, r7                                            |     r2 = r7;
    0x0008cf3c ldr r1, [r6, 4]                                       |     r1 = *((r6 + 4));
    0x0008cf3e ldr r0, [sp, 0x40]                                    |     r0 = var_40h;
    0x0008cf40 adds r3, 1                                            |     r3++;
    0x0008cf42 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0008cf44 bl 0x66da8                                            |     fcn_00066da8 (r0, r1, r2);
    0x0008cf48 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0008cf4c cmp r5, 0                                             |     
    0x0008cf4e ldr.w r2, [sl, 0x6c]                                  |     r2 = *((sl + 0x6c));
    0x0008cf52 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0008cf56 it lt                                                 |     
                                                                     |     if (r5 >= 0) {
    0x0008cf58 addlt r5, r2, -1                                      |         r5 = r2 + -1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0008cf5c cbnz r3, 0x8cfa0                                      |         goto label_114;
                                                                     |     }
    0x0008cf5e ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008cf62 add.w r5, r5, r5, lsl 2                               |     r5 += (r5 << 2);
    0x0008cf66 add.w r3, r3, r5, lsl 2                               |     r3 += (r5 << 2);
                                                                     | label_8:
    0x0008cf6a str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
    0x0008cf6c b 0x8ceb8                                             |     goto label_4;
                                                                     | label_107:
    0x0008cf6e movs r3, 0                                            |     r3 = 0;
    0x0008cf70 mov r2, r7                                            |     r2 = r7;
    0x0008cf72 str r3, [sp]                                          |     *(sp) = r3;
    0x0008cf74 movs r1, 0x32                                         |     r1 = 0x32;
    0x0008cf76 ldr r3, [sp, 0x124]                                   |     r3 = *(arg_124h);
    0x0008cf78 mov r0, sl                                            |     r0 = sl;
    0x0008cf7a bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008cf7e b 0x8ceb8                                             |     goto label_4;
                                                                     | label_104:
    0x0008cf80 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008cf82 adds r3, 1                                            |     r3++;
    0x0008cf84 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0008cf86 b 0x8ceb8                                             |     goto label_4;
                                                                     | label_105:
    0x0008cf88 cmp r5, 0xb                                           |     
                                                                     |     if (r5 != 0xb) {
    0x0008cf8a bne.w 0x8cdee                                         |         goto label_5;
                                                                     |     }
    0x0008cf8e movs r5, 2                                            |     r5 = 2;
    0x0008cf90 b 0x8cdf2                                             |     goto label_6;
                                                                     |     if (r5 != 0) {
                                                                     | label_109:
    0x0008cf92 cbz r5, 0x8cf9a                                       |         
    0x0008cf94 mov r1, r5                                            |         r1 = r5;
    0x0008cf96 bl 0x159dc                                            |         fcn_000159dc (r0, r1);
                                                                     |     }
    0x0008cf9a ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008cf9e b 0x8cea2                                             |     goto label_7;
                                                                     | label_114:
    0x0008cfa0 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0008cfa2 b 0x8cf6a                                             |     goto label_8;
                                                                     | label_108:
    0x0008cfa4 ldr r1, [sp, 0x114]                                   |     r1 = *(arg_114h);
    0x0008cfa6 adds r7, r1, r4                                       |     r7 = r1 + r4;
    0x0008cfa8 adds r7, 1                                            |     r7++;
    0x0008cfaa b 0x8ce4e                                             |     goto label_9;
                                                                     | label_111:
    0x0008cfac ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008cfae mov r2, r8                                            |     r2 = r8;
    0x0008cfb0 ldr r0, [sp, 0x40]                                    |     r0 = var_40h;
    0x0008cfb2 adds r1, r3, 1                                        |     r1 = r3 + 1;
    0x0008cfb4 bl 0x67188                                            |     fcn_00067188 (r0, r1, r2, r3, r4);
    0x0008cfb8 b 0x8cede                                             |     goto label_10;
                                                                     | label_110:
    0x0008cfba ldr.w fp, [sp, 0x40]                                  |     fp = var_40h;
    0x0008cfbe b 0x8cb54                                             |     goto label_1;
                                                                     | label_85:
    0x0008cfc0 movs r3, 0                                            |     r3 = 0;
    0x0008cfc2 ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0008cfc4 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0008cfc6 ldr.w r3, [r8, 8]                                     |     r3 = *((r8 + 8));
    0x0008cfca str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0008cfcc cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0008cfce bne.w 0x8cc80                                         |         goto label_11;
                                                                     |     }
                                                                     | label_93:
    0x0008cfd2 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008cfd4 str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0008cfd6 str r3, [sp, 0x40]                                    |     var_40h = r3;
                                                                     |     do {
                                                                     | label_56:
    0x0008cfd8 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0008cfda ldr r2, [r3, 0x20]                                    |         r2 = *((r3 + 0x20));
    0x0008cfdc movs r3, 0                                            |         r3 = 0;
    0x0008cfde tst.w r2, 0x6000                                      |         
                                                                     |         if ((r2 & 0x6000) == 0) {
    0x0008cfe2 beq 0x8d0d4                                           |             goto label_53;
                                                                     |         }
    0x0008cfe4 and r2, r2, 0x2000                                    |         r2 &= 0x2000;
    0x0008cfe8 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0008cfea beq 0x8d0c4                                           |             goto label_115;
                                                                     |         }
    0x0008cfec movs r2, 0x7f                                         |         r2 = 0x7f;
    0x0008cfee mov r1, r8                                            |         r1 = r8;
    0x0008cff0 mov r0, fp                                            |         r0 = fp;
    0x0008cff2 str r3, [sp]                                          |         *(sp) = r3;
    0x0008cff4 bl 0x26008                                            |         fcn_00026008 (r0, r1, r2, r3);
    0x0008cff8 str r0, [sp, 0x90]                                    |         var_90h = r0;
    0x0008cffa cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0008cffc beq.w 0x8d996                                         |             goto label_116;
                                                                     |         }
                                                                     | label_54:
    0x0008d000 ldr.w r0, [fp, 0x2c]                                  |         r0 = *(arg_2ch);
    0x0008d004 movs r0, r0                                           |         
    0x0008d006 lsrs r0, r0, 8                                        |         r0 >>= 8;
    0x0008d008 movs r4, r1                                           |         r4 = r1;
    0x0008d00a bx r0                                                 |         return uint32_t (*r0)() ();
    0x0008d00c lsrs r0, r2, 3                                        |         r0 = r2 >> 3;
    0x0008d00e asrs r0, r0, 0x10                                     |         r0 >>= 0x10;
    0x0008d010 asrs r1, r0, 0x1e                                     |         r1 = r0 >> 0x1e;
    0x0008d012 str r3, [sp]                                          |         *(sp) = r3;
    0x0008d014 bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d018 lsls r3, r3, 7                                        |         r3 <<= 7;
    0x0008d01a adds r0, 0x38                                         |         r0 += 0x38;
    0x0008d01c subs r3, 1                                            |         r3--;
    0x0008d01e str r3, [sp, 0x94]                                    |         var_94h = r3;
    0x0008d020 str.w r3, [fp, 0x38]                                  |         __asm ("str.w r3, [arg_38h]");
    0x0008d024 b 0x8d0dc                                             |         goto label_117;
                                                                     | label_90:
    0x0008d026 ldr r2, [sp, 0x28]                                    |         r2 = var_28h;
    0x0008d028 movs r3, 0x10                                         |         r3 = 0x10;
    0x0008d02a str r0, [sp, 0x28]                                    |         var_28h = r0;
    0x0008d02c mov r0, fp                                            |         r0 = fp;
    0x0008d02e bl 0x63460                                            |         fcn_00063460 (r0, r1, r2, r3, r4, r5);
    0x0008d032 ldr r1, [sp, 0x28]                                    |         r1 = var_28h;
    0x0008d034 b 0x8cc12                                             |         goto label_12;
                                                                     | label_94:
    0x0008d036 ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0008d038 ldrb r3, [r3, 0x14]                                   |         r3 = *((r3 + 0x14));
    0x0008d03a cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0008d03c bne.w 0x8d9fe                                         |             goto label_118;
                                                                     |         }
    0x0008d040 ldr r3, [sp, 0x5c]                                    |         r3 = var_5ch;
    0x0008d042 movs r2, 4                                            |         r2 = 4;
    0x0008d044 str r2, [sp, 0x30]                                    |         var_30h = r2;
    0x0008d046 str r3, [sp, 0x3c]                                    |         var_3ch = r3;
    0x0008d048 str r3, [sp, 0x40]                                    |         var_40h = r3;
    0x0008d04a b 0x8cfd8                                             |         
                                                                     |     } while (1);
                                                                     | label_88:
    0x0008d04c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0008d04e mov r0, sl                                            |     r0 = sl;
    0x0008d050 ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008d052 ldr r1, [sp, 0x40]                                    |     r1 = var_40h;
    0x0008d054 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0008d056 bl 0x2f4b4                                            |     fcn_0002f4b4 (r0, r1, r2);
    0x0008d05a ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008d05c b 0x8cbe6                                             |     goto label_13;
                                                                     | label_87:
    0x0008d05e ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0008d060 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0008d062 bne.w 0x8cc58                                         |         goto label_14;
                                                                     |     }
    0x0008d066 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0008d068 b 0x8cbd4                                             |     goto label_15;
                                                                     | label_89:
    0x0008d06a ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0008d06c ldrb.w r2, [r2, 0x53]                                 |     r2 = *((r2 + 0x53));
    0x0008d070 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0008d072 bne.w 0x8cc1a                                         |         goto label_16;
                                                                     |     }
    0x0008d076 mov r1, r3                                            |     r1 = r3;
    0x0008d078 ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0008d07a movs r3, 0x10                                         |     r3 = 0x10;
    0x0008d07c mov r0, fp                                            |     r0 = fp;
    0x0008d07e bl 0x63460                                            |     fcn_00063460 (r0, r1, r2, r3, r4, r5);
    0x0008d082 cmp r6, 4                                             |     
                                                                     |     if (r6 != 4) {
    0x0008d084 bne.w 0x8cc20                                         |         goto label_17;
                                                                     |     }
                                                                     | label_91:
    0x0008d088 mov r0, sl                                            |     r0 = sl;
    0x0008d08a ldr r1, [sp, 0x124]                                   |     r1 = *(arg_124h);
    0x0008d08c bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0008d090 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008d094 ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008d098 cmn r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008d09a bpl.w 0x8cc4a                                         |         goto label_18;
                                                                     |     }
                                                                     | label_92:
    0x0008d09e rsbs r2, r4, 0                                        |     r2 = r4 - ;
    0x0008d0a0 mov r1, sl                                            |     r1 = sl;
    0x0008d0a2 movs r4, 1                                            |     r4 = 1;
    0x0008d0a4 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0008d0a8 b 0x8cc58                                             |     goto label_14;
                                                                     | label_113:
    0x0008d0aa movs r3, 0                                            |     r3 = 0;
    0x0008d0ac mov r2, r7                                            |     r2 = r7;
    0x0008d0ae movs r1, 0x33                                         |     r1 = 0x33;
    0x0008d0b0 mov r0, sl                                            |     r0 = sl;
    0x0008d0b2 str r3, [sp]                                          |     *(sp) = r3;
    0x0008d0b4 bl 0x2add4                                            |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008d0b8 mov r5, r0                                            |     r5 = r0;
    0x0008d0ba b 0x8cf38                                             |     goto label_19;
                                                                     | label_112:
    0x0008d0bc ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008d0be adds r7, r3, r4                                       |     r7 = r3 + r4;
    0x0008d0c0 adds r7, 1                                            |     r7++;
    0x0008d0c2 b 0x8cf0c                                             |     goto label_20;
                                                                     | label_115:
    0x0008d0c4 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0008d0c8 ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0008d0ca and r3, r3, 0x4000                                    |     r3 &= 0x4000;
    0x0008d0ce orrs r3, r2                                           |     r3 |= r2;
                                                                     |     if (r3 != r2) {
    0x0008d0d0 bne.w 0x8d9a4                                         |         goto label_119;
                                                                     |     }
                                                                     | label_53:
    0x0008d0d4 movs r3, 0                                            |     r3 = 0;
    0x0008d0d6 strd r3, r3, [sp, 0x90]                               |     __asm ("strd r3, r3, [var_94h]");
    0x0008d0da str r3, [sp, 0x80]                                    |     var_80h = r3;
                                                                     | label_117:
    0x0008d0dc ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0008d0de ldr r2, [sp, 0x44]                                    |     r2 = var_44h;
    0x0008d0e0 subs r3, 0                                            |     
    0x0008d0e2 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0008d0e4 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0008d0e6 cmp r2, 0                                             |     
    0x0008d0e8 it ne                                                 |     
                                                                     |     if (r2 == 0) {
    0x0008d0ea movne r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0008d0ec cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d0ee beq 0x8d1a4                                           |         goto label_120;
                                                                     |     }
    0x0008d0f0 ldr r7, [sp, 0x30]                                    |     r7 = var_30h;
    0x0008d0f2 ldr.w r6, [fp, 0x38]                                  |     r6 = *(arg_38h);
    0x0008d0f6 cmp r7, 0xb                                           |     
    0x0008d0f8 add.w r4, r6, -1                                      |     r4 = r6 + -1;
    0x0008d0fc str.w r4, [fp, 0x38]                                  |     __asm ("str.w r4, [arg_38h]");
    0x0008d100 ldrb.w r3, [r8, 0x32]                                 |     r3 = *((r8 + 0x32));
                                                                     |     if (r7 == 0xb) {
    0x0008d104 beq.w 0x8dab0                                         |         goto label_121;
                                                                     |     }
                                                                     | label_59:
    0x0008d108 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008d10a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d10c beq.w 0x8dbd6                                         |         goto label_122;
                                                                     |     }
                                                                     | label_60:
    0x0008d110 ldr r5, [sp, 0x3c]                                    |     r5 = var_3ch;
                                                                     |     do {
    0x0008d112 ldr r3, [r5]                                          |         r3 = *(r5);
    0x0008d114 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008d116 beq.w 0x8d900                                         |             goto label_123;
                                                                     |         }
    0x0008d11a ldr r3, [r5, 0x1c]                                    |         r3 = *((r5 + 0x1c));
    0x0008d11c cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008d11e beq.w 0x8d900                                         |             goto label_123;
                                                                     |         }
    0x0008d122 ldr r5, [r5, 0x10]                                    |         r5 = *((r5 + 0x10));
    0x0008d124 cmp r5, 0                                             |         
    0x0008d126 bne 0x8d112                                           |         
                                                                     |     } while (r5 != 0);
                                                                     | label_48:
    0x0008d128 ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008d12c mov r2, r3                                            |     r2 = r3;
    0x0008d12e str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0008d130 ldr.w r3, [sl, 0x70]                                  |     r3 = *((sl + 0x70));
    0x0008d134 cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008d136 bge.w 0x8de9a                                         |         goto label_124;
                                                                     |     }
    0x0008d13a ldr r0, [sp, 0x78]                                    |     r0 = var_78h;
    0x0008d13c movs r2, 0                                            |     r2 = 0;
    0x0008d13e ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008d142 add.w r1, r0, r0, lsl 2                               |     r1 = r0 + (r0 << 2);
    0x0008d146 adds r0, 1                                            |     r0++;
    0x0008d148 str.w r0, [sl, 0x6c]                                  |     __asm ("str.w r0, [sl, 0x6c]");
    0x0008d14c movs r0, 0xb                                          |     r0 = 0xb;
    0x0008d14e lsls r1, r1, 2                                        |     r1 <<= 2;
    0x0008d150 str r0, [r3, r1]                                      |     *((r3 + r1)) = r0;
    0x0008d152 add r3, r1                                            |     r3 += r1;
    0x0008d154 strd r2, r2, [r3, 4]                                  |     __asm ("strd r2, r2, [r3, 4]");
    0x0008d158 strd r2, r2, [r3, 0xc]                                |     __asm ("strd r2, r2, [r3, 0xc]");
                                                                     | label_65:
    0x0008d15c cmp r7, 5                                             |     
                                                                     |     if (r7 != 5) {
    0x0008d15e bne.w 0x8da68                                         |         goto label_125;
                                                                     |     }
    0x0008d162 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0008d164 cmp r3, 5                                             |     
                                                                     |     if (r3 == 5) {
    0x0008d166 beq.w 0x8db2c                                         |         goto label_126;
                                                                     |     }
    0x0008d16a ldr.w r3, [r8, 8]                                     |     r3 = *((r8 + 8));
    0x0008d16e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d170 beq.w 0x8de56                                         |         goto label_127;
                                                                     |     }
    0x0008d174 ldrd r3, r2, [sl, 0x6c]                               |     __asm ("ldrd r3, r2, [sl, 0x6c]");
    0x0008d178 cmp r3, r2                                            |     
                                                                     |     if (r3 >= r2) {
    0x0008d17a bge.w 0x8de42                                         |         goto label_128;
                                                                     |     }
    0x0008d17e add.w r1, r3, r3, lsl 2                               |     r1 = r3 + (r3 << 2);
    0x0008d182 adds r3, 1                                            |     r3++;
    0x0008d184 str.w r3, [sl, 0x6c]                                  |     __asm ("str.w r3, [sl, 0x6c]");
    0x0008d188 movs r0, 0xb                                          |     r0 = 0xb;
    0x0008d18a str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0008d18c lsls r1, r1, 2                                        |     r1 <<= 2;
    0x0008d18e ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008d192 movs r2, 0                                            |     r2 = 0;
    0x0008d194 str r0, [r3, r1]                                      |     *((r3 + r1)) = r0;
    0x0008d196 add r3, r1                                            |     r3 += r1;
    0x0008d198 strd r2, r2, [r3, 4]                                  |     __asm ("strd r2, r2, [r3, 4]");
    0x0008d19c strd r2, r2, [r3, 0xc]                                |     __asm ("strd r2, r2, [r3, 0xc]");
    0x0008d1a0 b.w 0x8db30                                           |     goto label_71;
                                                                     | label_120:
    0x0008d1a4 mov r5, r3                                            |     r5 = r3;
    0x0008d1a6 str r3, [sp, 0x88]                                    |     var_88h = r3;
    0x0008d1a8 str r3, [sp, 0xa8]                                    |     var_a8h = r3;
    0x0008d1aa strd r3, r3, [sp, 0x74]                               |     __asm ("strd r3, r3, [var_74h]");
    0x0008d1ae str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0008d1b0 str r3, [sp, 0x84]                                    |     var_84h = r3;
                                                                     | label_62:
    0x0008d1b2 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0008d1b4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d1b6 beq.w 0x8d8ba                                         |         goto label_129;
                                                                     |     }
    0x0008d1ba ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0008d1bc ldr.w sb, [r3]                                        |     sb = *(r3);
    0x0008d1c0 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0008d1c2 str r2, [sp, 0x20]                                    |     var_20h = r2;
                                                                     | label_44:
    0x0008d1c4 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0008d1c8 beq.w 0x8deae                                         |         goto label_130;
                                                                     |     }
    0x0008d1cc ldr.w r3, [pc, 0x46c]                                 |     r3 = *(0x0008d63c);
    0x0008d1d0 mov r4, sb                                            |     r4 = sb;
    0x0008d1d2 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0008d1d4 mov sb, fp                                            |     sb = fp;
    0x0008d1d6 add r3, pc                                            |     r3 += pc;
    0x0008d1d8 adds r3, 4                                            |     r3 += 4;
    0x0008d1da str r3, [sp, 0xb0]                                    |     var_b0h = r3;
    0x0008d1dc ldr.w r3, [pc, 0x460]                                 |     
    0x0008d1e0 add r3, pc                                            |     r3 = 0x11a824;
    0x0008d1e2 adds r3, 4                                            |     r3 += 4;
    0x0008d1e4 str r3, [sp, 0xb4]                                    |     var_b4h = r3;
    0x0008d1e6 ldrsh.w r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0008d1ea str r3, [sp, 0xac]                                    |     var_ach = r3;
    0x0008d1ec ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0008d1ee str r3, [sp, 0xa4]                                    |     var_a4h = r3;
    0x0008d1f0 movs r3, 0                                            |     r3 = 0;
    0x0008d1f2 str r3, [sp, 0x38]                                    |     var_38h = r3;
                                                                     |     do {
                                                                     | label_23:
    0x0008d1f4 ldr r1, [sp, 0x20]                                    |         r1 = var_20h;
    0x0008d1f6 ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0008d1f8 ldr.w r3, [r3, r1, lsl 2]                             |         offset_2 = r1 << 2;
                                                                     |         r3 = *((r3 + offset_2));
    0x0008d1fc lsls r1, r1, 2                                        |         r1 <<= 2;
    0x0008d1fe str r1, [sp, 0x24]                                    |         var_24h = r1;
    0x0008d200 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0008d202 bne 0x8d2ee                                           |             goto label_131;
                                                                     |         }
                                                                     | label_40:
    0x0008d204 ldr r3, [sp, 0x40]                                    |         r3 = var_40h;
    0x0008d206 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008d208 beq.w 0x8d4c4                                         |             goto label_132;
                                                                     |         }
                                                                     | label_22:
    0x0008d20c ldr r1, [sp, 0x38]                                    |         r1 = var_38h;
    0x0008d20e ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0008d210 adds r1, 1                                            |         r1++;
    0x0008d212 cmp r3, r1                                            |         
    0x0008d214 str r1, [sp, 0x38]                                    |         var_38h = r1;
                                                                     |         if (r3 <= r1) {
    0x0008d216 ble.w 0x8d59a                                         |             goto label_133;
                                                                     |         }
    0x0008d21a ldr r0, [sp, 0x5c]                                    |         r0 = var_5ch;
    0x0008d21c ldr.w r4, [r0, r1, lsl 3]                             |         offset_3 = r1 << 3;
                                                                     |         r4 = *((r0 + offset_3));
    0x0008d220 add.w r3, r0, r1, lsl 3                               |         r3 = r0 + (r1 << 3);
    0x0008d224 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0008d226 str r3, [sp, 0x20]                                    |         var_20h = r3;
    0x0008d228 cmp r4, 0                                             |         
    0x0008d22a bne 0x8d1f4                                           |         
                                                                     |     } while (r4 != 0);
                                                                     | label_24:
    0x0008d22c ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008d22e mov fp, sb                                            |     
    0x0008d230 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0008d232 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0008d234 ldr r3, [sp, 0x74]                                    |     r3 = var_74h;
    0x0008d236 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d238 beq.w 0x8d5a6                                         |         goto label_134;
                                                                     |     }
                                                                     | label_32:
    0x0008d23c mov r1, r3                                            |     r1 = r3;
    0x0008d23e mov r0, sl                                            |     r0 = sl;
    0x0008d240 bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0008d244 ldr r3, [sp, 0xa8]                                    |     r3 = var_a8h;
    0x0008d246 ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008d24a cmp r3, 0                                             |     
    0x0008d24c itt lt                                                |     
                                                                     |     if (r3 >= 0) {
    0x0008d24e addlt r3, r1, -1                                      |         r3 = r1 + -1;
                                                                     |     }
                                                                     |     if (r3 < 0) {
    0x0008d252 str r3, [sp, 0xa8]                                    |         var_a8h = r3;
                                                                     |     }
    0x0008d254 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0008d258 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0008d25c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d25e bne.w 0x8d968                                         |         goto label_135;
                                                                     |     }
    0x0008d262 ldr r3, [sp, 0xa8]                                    |     r3 = var_a8h;
    0x0008d264 ldr.w r2, [sl, 0x68]                                  |     r2 = *((sl + 0x68));
    0x0008d268 add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0008d26c add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
                                                                     | label_51:
    0x0008d270 str r1, [r3, 8]                                       |     *((r3 + 8)) = r1;
    0x0008d272 ldr r3, [sp, 0x88]                                    |     r3 = var_88h;
    0x0008d274 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d276 beq.w 0x8d5ae                                         |         goto label_66;
                                                                     |     }
                                                                     | label_33:
    0x0008d27a movs r3, 0                                            |     r3 = 0;
    0x0008d27c ldr r2, [sp, 0x80]                                    |     r2 = var_80h;
    0x0008d27e str r3, [sp]                                          |     *(sp) = r3;
    0x0008d280 movs r1, 0x14                                         |     r1 = 0x14;
    0x0008d282 ldr r3, [sp, 0xa4]                                    |     r3 = var_a4h;
    0x0008d284 mov r0, sl                                            |     r0 = sl;
    0x0008d286 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d28a ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0008d28c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d28e beq.w 0x8d972                                         |         goto label_136;
                                                                     |     }
    0x0008d292 ldr r1, [sp, 0x94]                                    |     r1 = var_94h;
    0x0008d294 mov r0, sl                                            |     r0 = sl;
    0x0008d296 bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
                                                                     | label_52:
    0x0008d29a ldr r3, [sp, 0xa4]                                    |     r3 = var_a4h;
    0x0008d29c ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008d2a0 mvns r2, r3                                           |     r2 = ~r3;
    0x0008d2a2 ldrd r3, r1, [r0, 0x38]                               |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x0008d2a6 cmn r1, r3                                            |     
                                                                     |     if (r1 < r3) {
    0x0008d2a8 bmi.w 0x8dd9e                                         |         goto label_137;
                                                                     |     }
    0x0008d2ac ldr r3, [r0, 0x40]                                    |     r3 = *((r0 + 0x40));
    0x0008d2ae ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008d2b2 str.w r1, [r3, r2, lsl 2]                             |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x0008d2b6 ldr.w r3, [r8, 0x24]                                  |     r3 = *((r8 + 0x24));
    0x0008d2ba lsls r4, r3, 0x18                                     |     r4 = r3 << 0x18;
                                                                     |     if (r4 < r3) {
    0x0008d2bc bmi.w 0x8d5b8                                         |         goto label_138;
                                                                     |     }
                                                                     | label_34:
    0x0008d2c0 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0008d2c2 movs r1, 0x5d                                         |     r1 = 0x5d;
    0x0008d2c4 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0008d2c6 mov r0, sl                                            |     r0 = sl;
    0x0008d2c8 ldr.w r3, [r3, r2, lsl 2]                             |     offset_4 = r2 << 2;
                                                                     |     r3 = *((r3 + offset_4));
    0x0008d2cc str r3, [sp]                                          |     *(sp) = r3;
    0x0008d2ce ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008d2d0 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0008d2d2 ldrsh.w r3, [r8, 0x2c]                                |     r3 = *((r8 + 0x2c));
    0x0008d2d6 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d2da ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008d2dc cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d2de bne.w 0x8d5b8                                         |         goto label_138;
                                                                     |     }
    0x0008d2e2 mov r2, r3                                            |     r2 = r3;
    0x0008d2e4 mov r1, r8                                            |     r1 = r8;
    0x0008d2e6 mov r0, sl                                            |     r0 = sl;
    0x0008d2e8 bl 0x2f4b4                                            |     fcn_0002f4b4 (r0, r1, r2);
    0x0008d2ec b 0x8d5b8                                             |     goto label_138;
                                                                     | label_131:
    0x0008d2ee ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008d2f0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d2f2 bne.w 0x8d53e                                         |         goto label_139;
                                                                     |     }
                                                                     | label_30:
    0x0008d2f6 ldr.w r3, [sb, 0x38]                                  |     r3 = *((sb + 0x38));
    0x0008d2fa str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0008d2fc subs r3, 1                                            |     r3--;
    0x0008d2fe str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0008d300 str.w r3, [sb, 0x38]                                  |     __asm ("str.w r3, [sb, 0x38]");
    0x0008d304 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008d306 beq.w 0x8d5da                                         |         goto label_140;
                                                                     |     }
                                                                     | label_35:
    0x0008d30a ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
                                                                     |     if (r3 != 0) {
    0x0008d30c cbz r3, 0x8d338                                       |         
    0x0008d30e ldr r2, [sp, 0x24]                                    |         r2 = var_24h;
    0x0008d310 movs r6, 0                                            |         r6 = 0;
    0x0008d312 ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0008d314 movs r1, 0x48                                         |         r1 = 0x48;
    0x0008d316 str r6, [sp]                                          |         *(sp) = r6;
    0x0008d318 mov r0, sl                                            |         r0 = sl;
    0x0008d31a ldr r3, [r3, r2]                                      |         r3 = *((r3 + r2));
    0x0008d31c mov r2, r6                                            |         r2 = r6;
    0x0008d31e bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d322 ldr r3, [sp, 0x114]                                   |         r3 = *(arg_114h);
    0x0008d324 mov r0, sb                                            |         r0 = sb;
    0x0008d326 ldr r1, [r4, 0x24]                                    |         r1 = *((r4 + 0x24));
    0x0008d328 ldr r2, [sp, 0x50]                                    |         r2 = var_50h;
    0x0008d32a mvns r3, r3                                           |         r3 = ~r3;
    0x0008d32c str.w r3, [sb, 0x34]                                  |         __asm ("str.w r3, [sb, 0x34]");
    0x0008d330 bl 0x6af70                                            |         fcn_0006af70 (r0, r1, r2);
    0x0008d334 str.w r6, [sb, 0x34]                                  |         __asm ("str.w r6, [sb, 0x34]");
                                                                     |     }
    0x0008d338 ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0008d33a ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0008d33c ldrh r3, [r4, 0x34]                                   |     r3 = *((r4 + 0x34));
    0x0008d33e ldr r2, [r2, r1]                                      |     r2 = *((r2 + r1));
    0x0008d340 add.w fp, r2, 1                                       |     
    0x0008d344 str r2, [sp, 0x70]                                    |     var_70h = r2;
    0x0008d346 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d348 beq.w 0x8d8c4                                         |         goto label_141;
                                                                     |     }
    0x0008d34c movs r6, 0                                            |     r6 = 0;
    0x0008d34e str r5, [sp, 0x60]                                    |     var_60h = r5;
    0x0008d350 mov r7, r6                                            |     r7 = r6;
    0x0008d352 ldr r5, [sp, 0x114]                                   |     r5 = *(arg_114h);
    0x0008d354 b 0x8d38c                                             |     
                                                                     |     while (r2 != r1) {
    0x0008d356 ldr.w r2, [r8, 0x24]                                  |         r2 = *((r8 + 0x24));
    0x0008d35a ubfx r0, r1, 0xf, 1                                   |         r0 = (r1 >> 0xf) & ((1 << 1) - 1);
    0x0008d35e eor r2, r2, 0x20                                      |         r2 ^= 0x20;
    0x0008d362 ubfx r2, r2, 5, 1                                     |         r2 = (r2 >> 5) & ((1 << 1) - 1);
    0x0008d366 orrs r0, r2                                           |         r0 |= r2;
                                                                     |         if (r0 == r2) {
    0x0008d368 bne 0x8d376                                           |             
    0x0008d36a mov r0, r8                                            |             r0 = r8;
    0x0008d36c str r3, [sp, 0x4c]                                    |             var_4ch = r3;
    0x0008d36e bl 0xf328                                             |             fcn_0000f328 (r0, r1);
    0x0008d372 ldr r3, [sp, 0x4c]                                    |             r3 = var_4ch;
    0x0008d374 mov r1, r0                                            |             r1 = r0;
                                                                     |         }
    0x0008d376 adds r2, r5, r1                                       |         r2 = r5 + r1;
    0x0008d378 mov r0, sl                                            |         r0 = sl;
    0x0008d37a adds r2, 1                                            |         r2++;
    0x0008d37c movs r1, 0x4e                                         |         r1 = 0x4e;
    0x0008d37e str r7, [sp]                                          |         *(sp) = r7;
    0x0008d380 bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                     | label_25:
    0x0008d384 ldrh r3, [r4, 0x34]                                   |         r3 = *((r4 + 0x34));
    0x0008d386 adds r6, 1                                            |         r6++;
    0x0008d388 cmp r3, r6                                            |         
                                                                     |         if (r3 <= r6) {
    0x0008d38a ble 0x8d3bc                                           |             goto label_142;
                                                                     |         }
                                                                     | label_21:
    0x0008d38c ldr r3, [r4, 4]                                       |         r3 = *((r4 + 4));
    0x0008d38e ldrsh.w r1, [r3, r6, lsl 1]                           |         offset_5 = r6 << 1;
                                                                     |         r1 = *((r3 + offset_5));
    0x0008d392 add.w r3, fp, r6                                      |         r3 = fp + r6;
    0x0008d396 adds r2, r1, 2                                        |         r2 = r1 + 2;
                                                                     |         if (r2 == r1) {
    0x0008d398 beq.w 0x8d4d8                                         |             goto label_143;
                                                                     |         }
    0x0008d39c adds r0, r1, 1                                        |         r0 = r1 + 1;
                                                                     |         if (r0 == r1) {
    0x0008d39e beq 0x8d3a8                                           |             goto label_144;
                                                                     |         }
    0x0008d3a0 ldrsh.w r2, [r8, 0x28]                                |         r2 = *((r8 + 0x28));
    0x0008d3a4 cmp r2, r1                                            |         
    0x0008d3a6 bne 0x8d356                                           |         
                                                                     |     }
                                                                     | label_144:
    0x0008d3a8 mov r2, r5                                            |     r2 = r5;
    0x0008d3aa movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0008d3ac mov r0, sl                                            |     r0 = sl;
    0x0008d3ae str r7, [sp]                                          |     *(sp) = r7;
    0x0008d3b0 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d3b4 ldrh r3, [r4, 0x34]                                   |     r3 = *((r4 + 0x34));
    0x0008d3b6 adds r6, 1                                            |     r6++;
    0x0008d3b8 cmp r3, r6                                            |     
                                                                     |     if (r3 > r6) {
    0x0008d3ba bgt 0x8d38c                                           |         goto label_21;
                                                                     |     }
                                                                     | label_142:
    0x0008d3bc ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0008d3be ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0008d3c0 ldr r5, [sp, 0x60]                                    |     r5 = var_60h;
    0x0008d3c2 ldr r2, [r2, r1]                                      |     r2 = *((r2 + r1));
                                                                     | label_45:
    0x0008d3c4 str r2, [sp]                                          |     *(sp) = r2;
    0x0008d3c6 movs r1, 0x5d                                         |     r1 = 0x5d;
    0x0008d3c8 mov r2, fp                                            |     r2 = fp;
    0x0008d3ca mov r0, sl                                            |     r0 = sl;
    0x0008d3cc bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d3d0 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0008d3d2 ldrd r2, r7, [sp, 0x54]                               |     __asm ("ldrd r2, r7, [var_54h]");
    0x0008d3d6 subs r3, r3, r4                                       |     r3 -= r4;
    0x0008d3d8 clz r3, r3                                            |     r3 &= r3;
    0x0008d3dc cmp r2, 0                                             |     
    0x0008d3de ite ne                                                |     
                                                                     |     if (r2 == 0) {
    0x0008d3e0 movne r7, 0                                           |         r7 = 0;
                                                                     |     }
                                                                     |     if (r2 != 0) {
    0x0008d3e2 andeq r7, r7, 1                                       |         r7 &= 1;
                                                                     |     }
    0x0008d3e6 lsrs r3, r3, 5                                        |     r3 >>= 5;
    0x0008d3e8 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0008d3ea ands r7, r3                                           |     r7 &= r3;
    0x0008d3ec str r3, [sp, 0x60]                                    |     var_60h = r3;
    0x0008d3ee rsb.w r2, r2, 0                                       |     r2 -= ;
    0x0008d3f2 str r2, [sp, 0x6c]                                    |     var_6ch = r2;
                                                                     |     if (r7 != r3) {
    0x0008d3f4 bne.w 0x8d7b0                                         |         void (*0x8d7b0)() ();
                                                                     |     }
    0x0008d3f8 ldrb.w r6, [r4, 0x36]                                 |     r6 = *((r4 + 0x36));
    0x0008d3fc cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0008d3fe beq.w 0x8d7b0                                         |         void (*0x8d7b0)() ();
                                                                     |     }
    0x0008d402 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0008d404 cmp r3, 0xb                                           |     
    0x0008d406 it ne                                                 |     
                                                                     |     if (r3 == 0xb) {
    0x0008d408 movne r6, r3                                          |         r6 = r3;
                                                                     |     }
                                                                     |     if (r3 == 0xb) {
    0x0008d40a beq 0x8d4f4                                           |         goto label_145;
                                                                     |     }
    0x0008d40c cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0008d40e beq 0x8d4fe                                           |         goto label_146;
                                                                     |     }
                                                                     | label_26:
    0x0008d410 ldrb r3, [r5, 0x14]                                   |     r3 = *((r5 + 0x14));
    0x0008d412 cmp r3, 0                                             |     
    0x0008d414 ite eq                                                |     
                                                                     |     if (r3 != 0) {
    0x0008d416 moveq r6, 4                                           |         r6 = 4;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0008d418 movne r6, 6                                           |         r6 = 6;
                                                                     |     }
                                                                     | label_27:
    0x0008d41a ldr r2, [sp, 0x110]                                   |     r2 = *(arg_0h);
    0x0008d41c ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008d41e add r2, r3                                            |     r2 += r3;
    0x0008d420 str r2, [sp, 0x4c]                                    |     var_4ch = r2;
                                                                     |     if (r3 == 0) {
    0x0008d422 cbnz r3, 0x8d42c                                      |         
    0x0008d424 ldr r3, [r4, 0x14]                                    |         r3 = *((r4 + 0x14));
    0x0008d426 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0008d428 beq.w 0x8d834                                         |             goto label_147;
                                                                     |         }
                                                                     |     }
                                                                     | label_42:
    0x0008d42c ldrh r3, [r4, 0x32]                                   |     r3 = *((r4 + 0x32));
    0x0008d42e movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0008d430 mov r0, sl                                            |     r0 = sl;
    0x0008d432 strd fp, r3, [sp]                                     |     __asm ("strd fp, r3, [sp]");
    0x0008d436 ldrd r2, r3, [sp, 0x4c]                               |     __asm ("ldrd r2, r3, [var_50h]");
    0x0008d43a bl 0x2b694                                            |     fcn_0002b694 (r0, r1, r2, r3, r4, r5);
    0x0008d43e ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0008d440 str r0, [sp, 0x8c]                                    |     var_8ch = r0;
    0x0008d442 cmp r3, r4                                            |     
    0x0008d444 it eq                                                 |     
                                                                     |     if (r3 != r4) {
    0x0008d446 streq fp, [sp, 0x24]                                  |         var_24h = fp;
                                                                     |     }
                                                                     |     if (r3 != r4) {
    0x0008d44a beq 0x8d456                                           |         
    0x0008d44c ldr r1, [sp, 0x64]                                    |         r1 = var_64h;
    0x0008d44e mov r0, sb                                            |         r0 = sb;
    0x0008d450 bl 0xf298                                             |         fcn_0000f298 (r0, r1);
    0x0008d454 str r0, [sp, 0x24]                                    |         var_24h = r0;
                                                                     |     }
    0x0008d456 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0008d458 orrs r7, r3                                           |     r7 |= r3;
                                                                     |     if (r7 != r3) {
    0x0008d45a bne.w 0x8d5e8                                         |         goto label_148;
                                                                     |     }
                                                                     | label_37:
    0x0008d45e cmp r6, 4                                             |     
                                                                     |     if (r6 == 4) {
    0x0008d460 beq 0x8d520                                           |         goto label_149;
                                                                     |     }
                                                                     |     if (r6 > 4) {
    0x0008d462 bgt 0x8d50a                                           |         goto label_150;
                                                                     |     }
    0x0008d464 subs r3, r6, 1                                        |     r3 = r6 - 1;
    0x0008d466 cmp r3, 2                                             |     
                                                                     |     if (r3 > 2) {
    0x0008d468 bhi.w 0x8d7d0                                         |         goto label_151;
                                                                     |     }
    0x0008d46c mov r2, r4                                            |     r2 = r4;
    0x0008d46e mov r1, r6                                            |     r1 = r6;
    0x0008d470 mov r0, sb                                            |     r0 = sb;
    0x0008d472 bl 0x2ba20                                            |     fcn_0002ba20 (r0, r1, r2);
                                                                     | label_41:
    0x0008d476 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008d47a ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008d47e cmn r2, r3                                            |     
                                                                     |     if (r2 < r3) {
    0x0008d480 bmi 0x8d534                                           |         goto label_152;
                                                                     |     }
                                                                     | label_28:
    0x0008d482 ldr r3, [sp, 0x48]                                    |     r3 = var_48h;
    0x0008d484 ldr r2, [r0, 0x40]                                    |     r2 = *((r0 + 0x40));
    0x0008d486 ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008d48a lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0008d48c rsbs r3, r3, 0                                        |     r3 -= ;
    0x0008d48e str r1, [r2, r3]                                      |     *((r2 + r3)) = r1;
                                                                     | label_29:
    0x0008d490 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008d492 cmp fp, r3                                            |     
                                                                     |     if (fp != r3) {
    0x0008d494 beq 0x8d4ae                                           |         
    0x0008d496 ldr r3, [sp, 0x64]                                    |         r3 = var_64h;
    0x0008d498 cmp r3, 1                                             |         
                                                                     |         if (r3 == 1) {
    0x0008d49a beq.w 0x8d8d2                                         |             goto label_153;
                                                                     |         }
    0x0008d49e ldr.w r3, [sb, 0x1c]                                  |         r3 = *((sb + 0x1c));
    0x0008d4a2 ldr r2, [sp, 0x64]                                    |         r2 = var_64h;
    0x0008d4a4 cmp r2, r3                                            |         
                                                                     |         if (r2 <= r3) {
    0x0008d4a6 ble 0x8d4ae                                           |             goto label_47;
                                                                     |         }
    0x0008d4a8 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0008d4aa strd r2, r3, [sb, 0x1c]                               |         __asm ("strd r2, r3, [sb, 0x1c]");
                                                                     |     }
                                                                     | label_47:
    0x0008d4ae ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0008d4b0 cmp r5, 0                                             |     
    0x0008d4b2 it ne                                                 |     
                                                                     |     if (r5 != 0) {
    0x0008d4b4 cmpne r3, 0                                           |         __asm ("cmpne r3, 0");
                                                                     |     }
                                                                     |     if (r5 != 0) {
    0x0008d4b6 bne.w 0x8d74c                                         |         goto label_154;
                                                                     |     }
                                                                     | label_39:
    0x0008d4ba ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0008d4bc movs r2, 1                                            |     r2 = 1;
    0x0008d4be cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d4c0 bne.w 0x8d20c                                         |         goto label_22;
                                                                     |     }
                                                                     | label_132:
    0x0008d4c4 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008d4c6 ldr r4, [r3, 0x14]                                    |     r4 = *((r3 + 0x14));
    0x0008d4c8 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008d4ca str r4, [sp, 0x28]                                    |     var_28h = r4;
    0x0008d4cc adds r3, 1                                            |     r3++;
    0x0008d4ce str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0008d4d0 cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x0008d4d2 bne.w 0x8d1f4                                         |         goto label_23;
                                                                     |     }
    0x0008d4d6 b 0x8d22c                                             |     goto label_24;
                                                                     | label_143:
    0x0008d4d8 mov r2, r3                                            |     r2 = r3;
    0x0008d4da ldr r3, [r4, 0x28]                                    |     r3 = *((r4 + 0x28));
    0x0008d4dc mov r0, sb                                            |     r0 = sb;
    0x0008d4de add.w r3, r3, r6, lsl 4                               |     r3 += (r6 << 4);
    0x0008d4e2 ldr r1, [r3, 8]                                       |     r1 = *((r3 + 8));
    0x0008d4e4 mvns r3, r5                                           |     r3 = ~r5;
    0x0008d4e6 str.w r3, [sb, 0x34]                                  |     __asm ("str.w r3, [sb, 0x34]");
    0x0008d4ea bl 0x66da8                                            |     fcn_00066da8 (r0, r1, r2);
    0x0008d4ee str.w r7, [sb, 0x34]                                  |     __asm ("str.w r7, [sb, 0x34]");
    0x0008d4f2 b 0x8d384                                             |     goto label_25;
                                                                     | label_145:
    0x0008d4f4 cmp r6, 0xb                                           |     
    0x0008d4f6 it eq                                                 |     
                                                                     |     if (r6 != 0xb) {
    0x0008d4f8 moveq r6, 2                                           |         r6 = 2;
                                                                     |     }
    0x0008d4fa cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0008d4fc bne 0x8d410                                           |         goto label_26;
                                                                     |     }
                                                                     | label_146:
    0x0008d4fe sub.w r7, r6, 5                                       |     r7 = r6 - 5;
    0x0008d502 clz r7, r7                                            |     r7 &= r7;
    0x0008d506 lsrs r7, r7, 5                                        |     r7 >>= 5;
    0x0008d508 b 0x8d41a                                             |     goto label_27;
                                                                     | label_150:
    0x0008d50a cmp r6, 6                                             |     
                                                                     |     if (r6 != 6) {
    0x0008d50c bne.w 0x8d7d0                                         |         goto label_151;
                                                                     |     }
    0x0008d510 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0008d512 mov r2, r8                                            |     r2 = r8;
    0x0008d514 ldr r1, [sp, 0x3c]                                    |     r1 = var_3ch;
    0x0008d516 mov r0, sb                                            |     r0 = sb;
    0x0008d518 str r3, [sp]                                          |     *(sp) = r3;
    0x0008d51a mov r3, r4                                            |     r3 = r4;
    0x0008d51c bl 0x8bb48                                            |     fcn_0008bb48 (r0, r1, r2, r3, r4);
                                                                     | label_149:
    0x0008d520 mov r0, sl                                            |     r0 = sl;
    0x0008d522 ldr r1, [sp, 0x124]                                   |     r1 = *(arg_124h);
    0x0008d524 bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0008d528 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008d52c ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008d530 cmn r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008d532 bpl 0x8d482                                           |         goto label_28;
                                                                     |     }
                                                                     | label_152:
    0x0008d534 ldr r2, [sp, 0x6c]                                    |     r2 = var_6ch;
    0x0008d536 mov r1, sl                                            |     r1 = sl;
    0x0008d538 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0008d53c b 0x8d490                                             |     goto label_29;
                                                                     | label_139:
    0x0008d53e ldr r5, [sp, 0x3c]                                    |     r5 = var_3ch;
    0x0008d540 b 0x8d550                                             |     goto label_155;
                                                                     | label_31:
    0x0008d542 ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0008d544 cmp r3, r4                                            |     
                                                                     |     if (r3 == r4) {
    0x0008d546 beq 0x8d556                                           |         goto label_156;
                                                                     |     }
    0x0008d548 ldr r5, [r5, 0x10]                                    |     r5 = *((r5 + 0x10));
    0x0008d54a cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0008d54c beq.w 0x8d2f6                                         |         goto label_30;
                                                                     |     }
                                                                     | label_155:
    0x0008d550 ldr r3, [r5]                                          |     r3 = *(r5);
    0x0008d552 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d554 bne 0x8d542                                           |         goto label_31;
                                                                     |     }
                                                                     | label_156:
    0x0008d556 ldr r0, [sp, 0x78]                                    |     r0 = var_78h;
    0x0008d558 ldr r1, [sp, 0x3c]                                    |     r1 = var_3ch;
    0x0008d55a subs r3, r0, 0                                        |     r3 = r0 - 0;
    0x0008d55c it ne                                                 |     
                                                                     |     if (r3 == r0) {
    0x0008d55e movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0008d560 cmp r1, r5                                            |     
    0x0008d562 it ne                                                 |     
                                                                     |     if (r1 == r5) {
    0x0008d564 movne r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0008d566 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d568 beq.w 0x8d2f6                                         |         goto label_30;
                                                                     |     }
    0x0008d56c cmp r0, 0                                             |     
    0x0008d56e ldr.w r0, [sl]                                        |     r0 = *(sl);
    0x0008d572 ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008d576 it ge                                                 |     
                                                                     |     if (r0 < 0) {
    0x0008d578 ldrge r3, [sp, 0x78]                                  |         r3 = var_78h;
                                                                     |     }
    0x0008d57a ldrb.w r0, [r0, 0x53]                                 |     r0 = *((r0 + 0x53));
    0x0008d57e it lt                                                 |     
                                                                     |     if (r0 >= 0) {
    0x0008d580 addlt r3, r1, -1                                      |         r3 = r1 + -1;
                                                                     |     }
    0x0008d584 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008d586 bne.w 0x8d8c8                                         |         goto label_157;
                                                                     |     }
    0x0008d58a add.w r0, r3, r3, lsl 2                               |     r0 = r3 + (r3 << 2);
    0x0008d58e ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008d592 add.w r3, r3, r0, lsl 2                               |     r3 += (r0 << 2);
                                                                     | label_46:
    0x0008d596 str r1, [r3, 8]                                       |     *((r3 + 8)) = r1;
    0x0008d598 b 0x8d2f6                                             |     goto label_30;
                                                                     | label_133:
    0x0008d59a mov fp, sb                                            |     
    0x0008d59c str r2, [sp, 0x24]                                    |     var_24h = r2;
                                                                     | label_75:
    0x0008d59e ldr r3, [sp, 0x74]                                    |     r3 = var_74h;
    0x0008d5a0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d5a2 bne.w 0x8d23c                                         |         goto label_32;
                                                                     |     }
                                                                     | label_134:
    0x0008d5a6 ldr r3, [sp, 0x88]                                    |     r3 = var_88h;
    0x0008d5a8 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d5aa bne.w 0x8d27a                                         |         goto label_33;
                                                                     |     }
                                                                     | label_66:
    0x0008d5ae ldr.w r3, [r8, 0x24]                                  |     r3 = *((r8 + 0x24));
    0x0008d5b2 lsls r4, r3, 0x18                                     |     r4 = r3 << 0x18;
                                                                     |     if (r4 >= r3) {
    0x0008d5b4 bpl.w 0x8d2c0                                         |         goto label_34;
                                                                     |     }
                                                                     | label_138:
    0x0008d5b8 ldr r3, [sp, 0x98]                                    |     r3 = var_98h;
    0x0008d5ba ldr r2, [sp, 0x84]                                    |     r2 = var_84h;
    0x0008d5bc str r2, [r3]                                          |     *(r3) = r2;
                                                                     | label_97:
    0x0008d5be ldr r2, [pc, 0x84]                                    |     
    0x0008d5c0 ldr r3, [pc, 0x68]                                    |     r3 = *(0x8d62c);
    0x0008d5c2 add r2, pc                                            |     r2 = 0x11ac0c;
    0x0008d5c4 ldr r3, [r2, r3]                                      |     r3 = imp._ITM_deregisterTMCloneTable;
    0x0008d5c6 ldr r2, [r3]                                          |     r2 = imp._ITM_deregisterTMCloneTable;
    0x0008d5c8 ldr r3, [sp, 0xe4]                                    |     r3 = var_e4h;
    0x0008d5ca eors r2, r3                                           |     r2 ^= r3;
    0x0008d5cc mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0008d5d0 bne.w 0x8df14                                         |         goto label_158;
                                                                     |     }
    0x0008d5d4 add sp, 0xec                                          |     
    0x0008d5d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_140:
    0x0008d5da ldr r3, [sp, 0x114]                                   |     r3 = *(arg_114h);
    0x0008d5dc mov r1, r8                                            |     r1 = r8;
    0x0008d5de mov r0, sl                                            |     r0 = sl;
    0x0008d5e0 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0008d5e2 bl 0x2f4b4                                            |     fcn_0002f4b4 (r0, r1, r2);
    0x0008d5e6 b 0x8d30a                                             |     goto label_35;
                                                                     | label_148:
    0x0008d5e8 ldr.w r3, [r8, 0x24]                                  |     r3 = *((r8 + 0x24));
    0x0008d5ec lsls r7, r3, 0x18                                     |     r7 = r3 << 0x18;
                                                                     |     if (r7 >= r3) {
    0x0008d5ee bpl.w 0x8d874                                         |         void (*0x8d874)() ();
                                                                     |     }
    0x0008d5f2 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0008d5f4 cmp r3, r4                                            |     
                                                                     |     if (r3 == r4) {
    0x0008d5f6 beq 0x8d676                                           |         void (*0x8d676)() ();
                                                                     |     }
    0x0008d5f8 ldr r2, [sp, 0x44]                                    |     r2 = var_44h;
    0x0008d5fa ldrh r3, [r2, 0x32]                                   |     r3 = *((r2 + 0x32));
    0x0008d5fc cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d5fe beq 0x8d676                                           |         void (*0x8d676)() ();
                                                                     |     }
    0x0008d600 strd r6, r5, [sp, 0x9c]                               |     __asm ("strd r6, r5, [var_9ch]");
    0x0008d604 movs r7, 0                                            |     r7 = 0;
    0x0008d606 str.w sb, [sp, 0xb8]                                  |     __asm ("str.w sb, [var_b8h]");
    0x0008d60a mov r5, r2                                            |     r5 = r2;
    0x0008d60c ldr r6, [sp, 0x24]                                    |     r6 = var_24h;
    0x0008d60e ldr.w sb, [sp, 0x4c]                                  |     sb = var_4ch;
                                                                     | label_36:
    0x0008d612 ldrh r0, [r4, 0x34]                                   |     r0 = *((r4 + 0x34));
    0x0008d614 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0008d616 ldrsh.w ip, [r3, r7, lsl 1]                           |     offset_6 = r7 << 1;
                                                                     |     ip = *((r3 + offset_6));
    0x0008d61a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0008d61c beq.w 0x8d746                                         |         goto label_159;
                                                                     |     }
    0x0008d620 ldr r2, [r4, 4]                                       |     r2 = *((r4 + 4));
    0x0008d622 movs r3, 0                                            |     r3 = 0;
    0x0008d624 subs r2, 2                                            |     r2 -= 2;
    0x0008d626 b 0x8d64e                                             |     
                                                                     |     while (r1 != ip) {
    0x0008d648 adds r3, 1                                            |         r3++;
    0x0008d64a cmp r3, r0                                            |         
                                                                     |         if (r3 == r0) {
    0x0008d64c beq 0x8d746                                           |             goto label_159;
                                                                     |         }
    0x0008d64e ldrsh r1, [r2, 2]!                                    |         r1 = *((r2 += 2));
    0x0008d652 cmp r1, ip                                            |         
    0x0008d654 bne 0x8d648                                           |         
                                                                     |     }
    0x0008d656 sxth r3, r3                                           |     __asm ("sxth r3, r3");
                                                                     | label_38:
    0x0008d658 adds r2, r6, r7                                       |     r2 = r6 + r7;
    0x0008d65a str r2, [sp]                                          |     *(sp) = r2;
    0x0008d65c movs r1, 0x5b                                         |     r1 = 0x5b;
    0x0008d65e mov r2, sb                                            |     r2 = sb;
    0x0008d660 mov r0, sl                                            |     r0 = sl;
    0x0008d662 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d666 ldrh r3, [r5, 0x32]                                   |     r3 = *((r5 + 0x32));
    0x0008d668 adds r7, 1                                            |     r7++;
    0x0008d66a cmp r3, r7                                            |     
                                                                     |     if (r3 > r7) {
    0x0008d66c bgt 0x8d612                                           |         goto label_36;
                                                                     |     }
    0x0008d66e ldrd r6, r5, [sp, 0x9c]                               |     __asm ("ldrd r6, r5, [var_9ch]");
    0x0008d672 ldr.w sb, [sp, 0xb8]                                  |     sb = var_b8h;
    0x0008d67e ldr r1, [sp, 0x44]                                    |     r1 = var_44h;
    0x0008d680 ldrb.w r3, [r4, 0x37]                                 |     r3 = *((r4 + 0x37));
    0x0008d684 ldr r0, [sp, 0x24]                                    |     r0 = var_24h;
    0x0008d686 ldrh r2, [r1, 0x32]                                   |     r2 = *((r1 + 0x32));
    0x0008d688 and r3, r3, 3                                         |     r3 &= 3;
    0x0008d68c cmp r3, 2                                             |     
    0x0008d68e it eq                                                 |     
                                                                     |     if (r3 != 2) {
    0x0008d690 moveq r0, fp                                          |         r0 = fp;
                                                                     |     }
    0x0008d692 ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008d696 str r0, [sp, 0xa0]                                    |     var_a0h = r0;
    0x0008d698 adds r3, r2, r3                                       |     r3 = r2 + r3;
    0x0008d69a cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008d69c beq.w 0x8d45e                                         |         goto label_37;
                                                                     |     }
    0x0008d6a0 ldr r2, [sp, 0x118]                                   |     r2 = *(arg_8h);
    0x0008d6a2 movs r7, 0                                            |     r7 = 0;
    0x0008d6a4 str.w fp, [sp, 0xc4]                                  |     __asm ("str.w fp, [var_c4h]");
    0x0008d6a8 ldr.w fp, [sp, 0x50]                                  |     fp = var_50h;
    0x0008d6ac adds r2, 1                                            |     r2++;
    0x0008d6ae str r6, [sp, 0xb8]                                    |     var_b8h = r6;
    0x0008d6b0 str r2, [sp, 0x9c]                                    |     var_9ch = r2;
    0x0008d6b2 movs r2, 0x34                                         |     r2 = 0x34;
    0x0008d6b4 str r5, [sp, 0xbc]                                    |     var_bch = r5;
    0x0008d6b6 mov r6, r3                                            |     r6 = r3;
    0x0008d6b8 str r4, [sp, 0xc0]                                    |     var_c0h = r4;
    0x0008d6ba mov r5, r2                                            |     r5 = r2;
    0x0008d6bc mov r4, r1                                            |     r4 = r1;
                                                                     |     do {
    0x0008d6be ldr r3, [r4, 0x20]                                    |         r3 = *((r4 + 0x20));
    0x0008d6c0 mov r0, sb                                            |         r0 = sb;
    0x0008d6c2 ldr.w r1, [r3, r7, lsl 2]                             |         offset_7 = r7 << 2;
                                                                     |         r1 = *((r3 + offset_7));
    0x0008d6c6 bl 0x2d348                                            |         fcn_0002d348 (r0, r1);
    0x0008d6ca ldr r3, [r4, 4]                                       |         r3 = *((r4 + 4));
    0x0008d6cc mov r2, r0                                            |         r2 = r0;
    0x0008d6ce ldrsh.w r1, [r3, r7, lsl 1]                           |         offset_8 = r7 << 1;
                                                                     |         r1 = *((r3 + offset_8));
    0x0008d6d2 ldrh r3, [r4, 0x32]                                   |         r3 = *((r4 + 0x32));
    0x0008d6d4 subs r3, 1                                            |         r3--;
    0x0008d6d6 cmp r3, r7                                            |         
    0x0008d6d8 ldr.w r3, [r8, 0x24]                                  |         r3 = *((r8 + 0x24));
    0x0008d6dc itt eq                                                |         
                                                                     |         if (r3 != r7) {
    0x0008d6de moveq r6, fp                                          |             r6 = fp;
                                                                     |         }
                                                                     |         if (r3 != r7) {
    0x0008d6e0 moveq r5, 0x35                                        |             r5 = 0x35;
                                                                     |         }
    0x0008d6e2 eor r3, r3, 0x20                                      |         r3 ^= 0x20;
    0x0008d6e6 ubfx r3, r3, 5, 1                                     |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x0008d6ea orrs.w r3, r3, r1, lsr 31                             |         r3 |= (r1 >> 31);
                                                                     |         if (r3 == r3) {
    0x0008d6ee bne 0x8d6fc                                           |             
    0x0008d6f0 str r0, [sp, 0x50]                                    |             var_50h = r0;
    0x0008d6f2 mov r0, r8                                            |             r0 = r8;
    0x0008d6f4 bl 0xf328                                             |             fcn_0000f328 (r0, r1);
    0x0008d6f8 ldr r2, [sp, 0x50]                                    |             r2 = var_50h;
    0x0008d6fa mov r1, r0                                            |             r1 = r0;
                                                                     |         }
    0x0008d6fc ldr r3, [sp, 0x9c]                                    |         r3 = var_9ch;
    0x0008d6fe mov r0, sl                                            |         r0 = sl;
    0x0008d700 str r2, [sp, 4]                                       |         var_4h = r2;
    0x0008d702 adds r2, r1, r3                                       |         r2 = r1 + r3;
    0x0008d704 mvn r3, 1                                             |         r3 = ~1;
    0x0008d708 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0008d70a mov r1, r5                                            |         r1 = r5;
    0x0008d70c ldr r3, [sp, 0xa0]                                    |         r3 = var_a0h;
    0x0008d70e add r3, r7                                            |         r3 += r7;
    0x0008d710 str r3, [sp]                                          |         *(sp) = r3;
    0x0008d712 mov r3, r6                                            |         r3 = r6;
    0x0008d714 bl 0x2b5f4                                            |         fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x0008d718 ldr.w r3, [sl, 0x6c]                                  |         r3 = *((sl + 0x6c));
    0x0008d71c cmp r3, 0                                             |         
                                                                     |         if (r3 > 0) {
    0x0008d71e ble 0x8d734                                           |             
    0x0008d720 ldr.w r2, [sl, 0x68]                                  |             r2 = *((sl + 0x68));
    0x0008d724 add.w r3, r3, r3, lsl 2                               |             r3 += (r3 << 2);
    0x0008d728 add.w r2, r2, r3, lsl 2                               |             r2 += (r3 << 2);
    0x0008d72c mov.w r3, 0x90                                        |             r3 = 0x90;
    0x0008d730 strh r3, [r2, -0x12]                                  |             *((r2 - 0x12)) = r3;
                                                                     |         }
    0x0008d734 ldrh r3, [r4, 0x32]                                   |         r3 = *((r4 + 0x32));
    0x0008d736 adds r7, 1                                            |         r7++;
    0x0008d738 cmp r3, r7                                            |         
    0x0008d73a bgt 0x8d6be                                           |         
                                                                     |     } while (r3 > r7);
    0x0008d73c ldrd r6, r5, [sp, 0xb8]                               |     __asm ("ldrd r6, r5, [var_b8h]");
    0x0008d740 ldrd r4, fp, [sp, 0xc0]                               |     __asm ("ldrd r4, fp, [var_c0h]");
    0x0008d744 b 0x8d45e                                             |     goto label_37;
                                                                     | label_159:
    0x0008d746 mov.w r3, -1                                          |     r3 = -1;
    0x0008d74a b 0x8d658                                             |     goto label_38;
                                                                     | label_154:
    0x0008d74c ldr r3, [r5, 0x10]                                    |     r3 = *((r5 + 0x10));
                                                                     |     if (r3 == 0) {
    0x0008d74e cbz r3, 0x8d75c                                       |         goto label_160;
                                                                     |     }
    0x0008d750 ldr r2, [r3]                                          |     r2 = *(r3);
                                                                     |     if (r2 == 0) {
    0x0008d752 cbz r2, 0x8d75c                                       |         goto label_160;
                                                                     |     }
    0x0008d754 ldr r3, [r3, 0x1c]                                    |     r3 = *((r3 + 0x1c));
    0x0008d756 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d758 bne.w 0x8d4ba                                         |         goto label_39;
                                                                     |     }
                                                                     | label_160:
    0x0008d75c ldr r3, [sp, 0x78]                                    |     r3 = var_78h;
    0x0008d75e mov r0, sl                                            |     r0 = sl;
    0x0008d760 adds r1, r3, 1                                        |     r1 = r3 + 1;
    0x0008d762 bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0008d766 ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0008d768 ldr.w r2, [sl, 0x6c]                                  |     r2 = *((sl + 0x6c));
    0x0008d76c cmp r3, 0                                             |     
    0x0008d76e itt lt                                                |     
                                                                     |     if (r3 >= 0) {
    0x0008d770 addlt r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
                                                                     |     if (r3 < 0) {
    0x0008d774 str r3, [sp, 0x68]                                    |         var_68h = r3;
                                                                     |     }
    0x0008d776 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0008d77a ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
    0x0008d77e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d780 bne.w 0x8d956                                         |         goto label_161;
                                                                     |     }
    0x0008d784 ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0008d786 add.w r1, r3, r3, lsl 2                               |     r1 = r3 + (r3 << 2);
    0x0008d78a ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008d78e add.w r3, r3, r1, lsl 2                               |     r3 += (r1 << 2);
                                                                     | label_49:
    0x0008d792 str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
    0x0008d794 movs r3, 0                                            |     r3 = 0;
    0x0008d796 movs r2, 1                                            |     r2 = 1;
    0x0008d798 str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0008d79a b 0x8d204                                             |     goto label_40;
                                                                     | label_43:
    0x0008d79c ldr.w r0, [r8, 0x48]                                  |     r0 = *((r8 + 0x48));
    0x0008d79e lsls r0, r1, 1                                        |     r0 = r1 << 1;
                                                                     | label_151:
    0x0008d7d0 ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0008d7d2 ldr.w r7, [sl, 0x6c]                                  |     r7 = *((sl + 0x6c));
                                                                     |     if (r3 != 0) {
    0x0008d7d6 cbz r3, 0x8d7ec                                       |         
    0x0008d7d8 ldr r3, [sp, 0x88]                                    |         r3 = var_88h;
    0x0008d7da movs r2, 1                                            |         r2 = 1;
    0x0008d7dc adds r3, 1                                            |         r3++;
    0x0008d7de str r3, [sp, 0x88]                                    |         var_88h = r3;
    0x0008d7e0 ldr.w r3, [sb, 0x74]                                  |         r3 = *((sb + 0x74));
    0x0008d7e4 cmp r3, 0                                             |         
    0x0008d7e6 it eq                                                 |         
                                                                     |         if (r3 != 0) {
    0x0008d7e8 moveq r3, sb                                          |             r3 = sb;
                                                                     |         }
    0x0008d7ea strb r2, [r3, 0x14]                                   |         *((r3 + 0x14)) = r2;
                                                                     |     }
    0x0008d7ec ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0008d7ee ldr r2, [sp, 0x90]                                    |     r2 = var_90h;
    0x0008d7f0 cmp r2, 0                                             |     
    0x0008d7f2 ite eq                                                |     
                                                                     |     if (r2 != 0) {
    0x0008d7f4 moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0008d7f6 andne r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0008d7fa cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d7fc bne.w 0x8da22                                         |         goto label_162;
                                                                     |     }
    0x0008d800 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0008d802 mov r1, r8                                            |     r1 = r8;
    0x0008d804 ldr r3, [sp, 0xac]                                    |     r3 = var_ach;
    0x0008d806 mov r0, sb                                            |     r0 = sb;
    0x0008d808 ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0008d80a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0008d80c ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008d80e str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0008d810 ldr r2, [sp, 0x60]                                    |     r2 = var_60h;
    0x0008d812 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0008d814 ldr r3, [sp, 0x110]                                   |     r3 = *(arg_0h);
    0x0008d816 str r2, [sp, 0x14]                                    |     var_14h = r2;
    0x0008d818 ldr r2, [sp, 0x90]                                    |     r2 = var_90h;
    0x0008d81a str r3, [sp]                                          |     *(sp) = r3;
    0x0008d81c movs r3, 5                                            |     r3 = 5;
    0x0008d81e str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0008d820 ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0008d822 bl 0x8c7d0                                            |     fcn_0008c7d0 (r0, r1, r2, r3);
                                                                     | label_58:
    0x0008d826 ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0008d828 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d82a bne.w 0x8dc40                                         |         goto label_163;
                                                                     |     }
    0x0008d82e movs r3, 1                                            |     r3 = 1;
    0x0008d830 str r3, [sp, 0x84]                                    |     var_84h = r3;
    0x0008d832 b 0x8d476                                             |     goto label_41;
                                                                     | label_147:
    0x0008d834 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0008d836 tst r3, r7                                            |     
                                                                     |     if ((r3 & r7) == 0) {
    0x0008d838 beq.w 0x8d42c                                         |         goto label_42;
                                                                     |     }
    0x0008d83c ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0008d83e ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0008d840 lsls r2, r3, 0x12                                     |     r2 = r3 << 0x12;
                                                                     |     if (r2 < r3) {
    0x0008d842 bmi.w 0x8da08                                         |         goto label_164;
                                                                     |     }
                                                                     | label_57:
    0x0008d846 lsls r3, r3, 0x11                                     |     r3 <<= 0x11;
                                                                     |     if (r3 >= r3) {
    0x0008d848 bpl 0x8d7b0                                           |         void (*0x8d7b0)() ();
                                                                     |     }
    0x0008d84a ldr.w r2, [r8, 0x10]                                  |     r2 = *((r8 + 0x10));
    0x0008d84e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008d850 beq 0x8d79c                                           |         goto label_43;
                                                                     |     }
                                                                     | label_129:
    0x0008d8ba ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0008d8bc ldr.w sb, [sp, 0x28]                                  |     sb = var_28h;
    0x0008d8c0 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0008d8c2 b 0x8d1c4                                             |     goto label_44;
                                                                     | label_141:
    0x0008d8c4 ldr r2, [sp, 0x70]                                    |     r2 = var_70h;
    0x0008d8c6 b 0x8d3c4                                             |     goto label_45;
                                                                     | label_157:
    0x0008d8c8 ldr.w r3, [pc, 0x658]                                 |     
    0x0008d8cc add r3, pc                                            |     r3 = 0x11b7f4;
    0x0008d8ce adds r3, 4                                            |     r3 += 4;
    0x0008d8d0 b 0x8d596                                             |     goto label_46;
                                                                     | label_153:
    0x0008d8d2 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0008d8d4 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0008d8d6 beq.w 0x8d4ae                                         |         goto label_47;
                                                                     |     }
    0x0008d8da ldrb.w r3, [sb, 0x13]                                 |     r3 = *((sb + 0x13));
    0x0008d8de cmp r3, 7                                             |     
                                                                     |     if (r3 > 7) {
    0x0008d8e0 bhi.w 0x8d4ae                                         |         goto label_47;
                                                                     |     }
    0x0008d8e4 add.w r2, sb, r3, lsl 2                               |     r2 = sb + (r3 << 2);
    0x0008d8e8 adds r3, 1                                            |     r3++;
    0x0008d8ea strb.w r3, [sb, 0x13]                                 |     *((sb + 0x13)) = r3;
    0x0008d8ee str.w r1, [r2, 0x94]                                  |     __asm ("str.w r1, [r2, 0x94]");
    0x0008d8f2 b 0x8d4ae                                             |     goto label_47;
                                                                     | label_123:
    0x0008d900 ldrb r3, [r5, 0x14]                                   |     r3 = *((r5 + 0x14));
    0x0008d902 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d904 bne 0x8d9c2                                           |         goto label_165;
                                                                     |     }
    0x0008d906 ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0008d908 cmp r2, r5                                            |     
    0x0008d90a it ne                                                 |     
                                                                     |     if (r2 != r5) {
    0x0008d90c movne r7, 4                                           |         r7 = 4;
                                                                     |         goto label_166;
                                                                     |     }
                                                                     |     if (r2 != r5) {
                                                                     | label_166:
    0x0008d90e bne.w 0x8d128                                         |         goto label_48;
                                                                     |     }
    0x0008d912 ldr r2, [sp, 0x118]                                   |     r2 = *(arg_8h);
    0x0008d914 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0008d916 bne.w 0x8de30                                         |         goto label_167;
                                                                     |     }
    0x0008d918 strh r3, [r1, 0x14]                                   |     *((r1 + 0x14)) = r3;
    0x0008d91a ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008d91c mov r3, r4                                            |     r3 = r4;
    0x0008d91e movs r1, 0x20                                         |     r1 = 0x20;
    0x0008d920 mov r0, sl                                            |     r0 = sl;
    0x0008d922 str r2, [sp]                                          |     *(sp) = r2;
    0x0008d924 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008d926 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d92a ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008d92c strd r3, r3, [sp, 0x74]                               |     __asm ("strd r3, r3, [var_74h]");
                                                                     | label_55:
    0x0008d930 mov r0, sl                                            |     r0 = sl;
    0x0008d932 ldr r1, [sp, 0x124]                                   |     r1 = *(arg_124h);
    0x0008d934 bl 0x2b5b4                                            |     fcn_0002b5b4 (r0, r1, r2);
    0x0008d938 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008d93c movs r3, 0                                            |     r3 = 0;
    0x0008d93e strd r3, r3, [sp, 0x84]                               |     __asm ("strd r3, r3, [var_88h]");
    0x0008d942 ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008d946 cmn r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008d948 bpl.w 0x8db00                                         |         goto label_168;
                                                                     |     }
                                                                     | label_61:
    0x0008d94c rsbs r2, r6, 0                                        |     r2 = r6 - ;
    0x0008d94e mov r1, sl                                            |     r1 = sl;
    0x0008d950 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0008d954 b 0x8db0c                                             |     goto label_169;
                                                                     | label_161:
    0x0008d956 ldr r3, [sp, 0xb0]                                    |     r3 = var_b0h;
    0x0008d958 b 0x8d792                                             |     goto label_49;
                                                                     | label_96:
    0x0008d95a ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0008d95c mov r0, r4                                            |     r0 = r4;
    0x0008d95e bl 0x12abc                                            |     fcn_00012abc (r0);
    0x0008d962 str r0, [sp, 0x5c]                                    |     var_5ch = r0;
    0x0008d964 b.w 0x8ccb4                                           |     goto label_50;
                                                                     | label_135:
    0x0008d968 ldr.w r3, [pc, 0x5bc]                                 |     
    0x0008d96c add r3, pc                                            |     r3 = 0x11b898;
    0x0008d96e adds r3, 4                                            |     r3 += 4;
    0x0008d970 b 0x8d270                                             |     goto label_51;
                                                                     | label_136:
    0x0008d972 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008d974 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d976 bne.w 0x8de5a                                         |         goto label_170;
                                                                     |     }
                                                                     | label_72:
    0x0008d97a ldr r1, [sp, 0x114]                                   |     r1 = *(arg_114h);
    0x0008d97c mov r0, sl                                            |     r0 = sl;
    0x0008d97e ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008d980 ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0008d982 str r1, [sp]                                          |     *(sp) = r1;
    0x0008d984 movs r1, 0x20                                         |     r1 = 0x20;
    0x0008d986 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d98a mov r2, r8                                            |     r2 = r8;
    0x0008d98c mov r0, fp                                            |     r0 = fp;
    0x0008d98e movs r1, 2                                            |     r1 = 2;
    0x0008d990 bl 0x2bb58                                            |     fcn_0002bb58 (r0, r1, r2);
    0x0008d994 b 0x8d29a                                             |     goto label_52;
                                                                     | label_116:
    0x0008d996 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0008d99a ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0008d99c lsls r4, r3, 0x11                                     |     r4 = r3 << 0x11;
                                                                     |     if (r4 >= r3) {
    0x0008d99e bpl.w 0x8d0d4                                         |         goto label_53;
                                                                     |     }
    0x0008d9a2 mov r2, r0                                            |     r2 = r0;
                                                                     | label_119:
    0x0008d9a4 ldr.w r0, [r8, 0x48]                                  |     r0 = *((r8 + 0x48));
    0x0008d9a8 ldr.w r1, [r8]                                        |     r1 = *(r8);
    0x0008d9ac adds r0, 0x38                                         |     r0 += 0x38;
    0x0008d9ae bl 0x168e4                                            |     fcn_000168e4 (r0, r1, r2);
    0x0008d9b2 ldr r3, [r0, 8]                                       |     r3 = *((r0 + 8));
    0x0008d9b4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008d9b6 beq.w 0x8de86                                         |         goto label_171;
                                                                     |     }
                                                                     | label_73:
    0x0008d9ba movs r3, 0                                            |     r3 = 0;
    0x0008d9bc str r3, [sp, 0x90]                                    |     var_90h = r3;
    0x0008d9be b.w 0x8d000                                           |     goto label_54;
                                                                     | label_165:
    0x0008d9c2 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008d9c4 cmp r3, r5                                            |     
    0x0008d9c6 it ne                                                 |     
                                                                     |     if (r3 != r5) {
    0x0008d9c8 movne r7, 6                                           |         r7 = 6;
                                                                     |         goto label_172;
                                                                     |     }
                                                                     |     if (r3 != r5) {
                                                                     | label_172:
    0x0008d9ca bne.w 0x8d128                                         |         goto label_48;
                                                                     |     }
    0x0008d9ce ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008d9d0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008d9d2 bne.w 0x8de38                                         |         goto label_173;
                                                                     |     }
    0x0008d9d6 ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008d9d8 mov r3, r4                                            |     r3 = r4;
    0x0008d9da movs r1, 0x20                                         |     r1 = 0x20;
    0x0008d9dc mov r0, sl                                            |     r0 = sl;
    0x0008d9de str r2, [sp]                                          |     *(sp) = r2;
    0x0008d9e0 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008d9e2 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008d9e6 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008d9e8 strd r3, r3, [sp, 0x74]                               |     __asm ("strd r3, r3, [var_74h]");
    0x0008d9ec ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0008d9ee mov r2, r8                                            |     r2 = r8;
    0x0008d9f0 ldr r1, [sp, 0x3c]                                    |     r1 = var_3ch;
    0x0008d9f2 mov r0, fp                                            |     r0 = fp;
    0x0008d9f4 str r3, [sp]                                          |     *(sp) = r3;
    0x0008d9f6 movs r3, 0                                            |     r3 = 0;
    0x0008d9f8 bl 0x8bb48                                            |     fcn_0008bb48 (r0, r1, r2, r3, r4);
    0x0008d9fc b 0x8d930                                             |     goto label_55;
                                                                     | label_118:
    0x0008d9fe movs r3, 6                                            |     r3 = 6;
    0x0008da00 str r2, [sp, 0x40]                                    |     var_40h = r2;
    0x0008da02 str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0008da04 b.w 0x8cfd8                                           |     goto label_56;
                                                                     | label_164:
    0x0008da08 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008da0a movs r2, 0x7f                                         |     r2 = 0x7f;
    0x0008da0c mov r1, r8                                            |     r1 = r8;
    0x0008da0e mov r0, sb                                            |     r0 = sb;
    0x0008da10 str r3, [sp]                                          |     *(sp) = r3;
    0x0008da12 bl 0x26008                                            |     r0 = fcn_00026008 (r0, r1, r2, r3);
    0x0008da16 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008da18 bne.w 0x8d852                                         |         void (*0x8d852)() ();
                                                                     |     }
    0x0008da1c ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0008da1e ldr r3, [r3, 0x20]                                    |     r3 = *((r3 + 0x20));
    0x0008da20 b 0x8d846                                             |     goto label_57;
                                                                     | label_162:
    0x0008da22 movs r6, 0                                            |     r6 = 0;
    0x0008da24 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008da26 mov r3, r6                                            |     r3 = r6;
    0x0008da28 movs r1, 0xa3                                         |     r1 = 0xa3;
    0x0008da2a mov r0, sl                                            |     r0 = sl;
    0x0008da2c str r6, [sp]                                          |     *(sp) = r6;
    0x0008da2e bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008da32 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0008da34 mov r1, r8                                            |     r1 = r8;
    0x0008da36 ldr r2, [sp, 0x90]                                    |     r2 = var_90h;
    0x0008da38 mov r0, sb                                            |     r0 = sb;
    0x0008da3a str r6, [sp, 0xc]                                     |     var_ch = r6;
    0x0008da3c str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0008da3e ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0008da40 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0008da42 ldr r3, [sp, 0xac]                                    |     r3 = var_ach;
    0x0008da44 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0008da46 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0008da48 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0008da4a ldr r3, [sp, 0x110]                                   |     r3 = *(arg_0h);
    0x0008da4c str r3, [sp]                                          |     *(sp) = r3;
    0x0008da4e movs r3, 5                                            |     r3 = 5;
    0x0008da50 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0008da52 ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0008da54 bl 0x8c7d0                                            |     fcn_0008c7d0 (r0, r1, r2, r3);
    0x0008da58 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008da5a mov r3, r6                                            |     r3 = r6;
    0x0008da5c movs r1, 0xa4                                         |     r1 = 0xa4;
    0x0008da5e mov r0, sl                                            |     r0 = sl;
    0x0008da60 str r6, [sp]                                          |     *(sp) = r6;
    0x0008da62 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008da66 b 0x8d826                                             |     goto label_58;
                                                                     | label_125:
    0x0008da68 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008da6a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008da6c bne.w 0x8dda6                                         |         goto label_174;
                                                                     |     }
    0x0008da70 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008da72 str r3, [sp, 0x74]                                    |     var_74h = r3;
                                                                     | label_67:
    0x0008da74 ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008da76 mov r3, r4                                            |     r3 = r4;
    0x0008da78 movs r1, 0x20                                         |     r1 = 0x20;
    0x0008da7a mov r0, sl                                            |     r0 = sl;
    0x0008da7c str r2, [sp]                                          |     *(sp) = r2;
    0x0008da7e ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008da80 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008da84 subs r3, r7, 1                                        |     r3 = r7 - 1;
    0x0008da86 cmp r3, 5                                             |     
                                                                     |     if (r3 > 5) {
    0x0008da88 bhi.w 0x8df18                                         |         goto label_175;
                                                                     |     }
    0x0008da8c adr r2, 8                                             |     r2 = 8;
    0x0008da8e ldr.w r3, [r2, r3, lsl 2]                             |     offset_9 = r3 << 2;
                                                                     |     r3 = *((r2 + offset_9));
    0x0008da92 add r2, r3                                            |     r2 += r3;
    0x0008da94 bx r2                                                 |     return uint32_t (*r2)() ();
                                                                     | label_121:
    0x0008dab0 cmp r3, 0xb                                           |     
    0x0008dab2 mov r7, r3                                            |     r7 = r3;
                                                                     |     if (r3 != 0xb) {
    0x0008dab4 bne.w 0x8d108                                         |         goto label_59;
                                                                     |     }
    0x0008dab8 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008daba movs r7, 2                                            |     r7 = 2;
    0x0008dabc cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008dabe bne.w 0x8d110                                         |         goto label_60;
                                                                     |     }
    0x0008dac2 ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008dac4 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008dac6 bne.w 0x8df08                                         |         goto label_176;
                                                                     |     }
    0x0008daca ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008dacc mov r3, r4                                            |     r3 = r4;
    0x0008dace movs r1, 0x20                                         |     r1 = 0x20;
    0x0008dad0 mov r0, sl                                            |     r0 = sl;
    0x0008dad2 movs r7, 2                                            |     r7 = 2;
    0x0008dad4 str r2, [sp]                                          |     *(sp) = r2;
    0x0008dad6 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0008dad8 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008dadc ldr r5, [sp, 0x118]                                   |     r5 = *(arg_8h);
    0x0008dade strd r5, r5, [sp, 0x74]                               |     __asm ("strd r5, r5, [var_74h]");
                                                                     | label_79:
    0x0008dae2 mov r1, r7                                            |     r1 = r7;
    0x0008dae4 mov r2, r8                                            |     r2 = r8;
    0x0008dae6 mov r0, fp                                            |     r0 = fp;
    0x0008dae8 bl 0x2bb58                                            |     fcn_0002bb58 (r0, r1, r2);
    0x0008daec movs r3, 0                                            |     r3 = 0;
    0x0008daee strd r3, r3, [sp, 0x84]                               |     __asm ("strd r3, r3, [var_88h]");
                                                                     | label_63:
    0x0008daf2 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008daf6 ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0008dafa cmn r2, r3                                            |     
                                                                     |     if (r2 < r3) {
    0x0008dafc bmi.w 0x8d94c                                         |         goto label_61;
                                                                     |     }
                                                                     | label_168:
    0x0008db00 ldr r2, [r0, 0x40]                                    |     r2 = *((r0 + 0x40));
    0x0008db02 lsls r3, r6, 2                                        |     r3 = r6 << 2;
    0x0008db04 ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008db08 rsbs r3, r3, 0                                        |     r3 -= ;
    0x0008db0a str r1, [r2, r3]                                      |     *((r2 + r3)) = r1;
                                                                     | label_169:
    0x0008db0c ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008db0e cmp r3, 0                                             |     
    0x0008db10 it ne                                                 |     
                                                                     |     if (r3 != 0) {
    0x0008db12 cmpne r3, r5                                          |         __asm ("cmpne r3, r5");
                                                                     |     }
    0x0008db14 ite ne                                                |     
                                                                     |     if (r3 == 0) {
    0x0008db16 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0008db18 moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0008db1a bne 0x8db92                                           |         
    0x0008db1c ldr r2, [sp, 0x74]                                    |         r2 = var_74h;
    0x0008db1e cmp r2, 0                                             |         
                                                                     |         if (r2 != 0) {
    0x0008db20 bne 0x8dbe0                                           |             goto label_177;
                                                                     |         }
    0x0008db22 ldr r3, [sp, 0x74]                                    |         r3 = var_74h;
    0x0008db24 str r3, [sp, 0xa8]                                    |         var_a8h = r3;
    0x0008db26 str r3, [sp, 0x68]                                    |         var_68h = r3;
    0x0008db28 b.w 0x8d1b2                                           |         goto label_62;
                                                                     | label_126:
    0x0008db2c movs r3, 0                                            |         r3 = 0;
    0x0008db2e str r3, [sp, 0x74]                                    |         var_74h = r3;
                                                                     | label_71:
    0x0008db30 ldr r3, [sp, 0x118]                                   |         r3 = *(arg_8h);
    0x0008db32 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0008db34 bne.w 0x8ddaa                                         |             goto label_70;
                                                                     |         }
    0x0008db38 ldr r2, [sp, 0x114]                                   |         r2 = *(arg_114h);
    0x0008db3a mov r3, r4                                            |         r3 = r4;
    0x0008db3c movs r1, 0x20                                         |         r1 = 0x20;
    0x0008db3e mov r0, sl                                            |         r0 = sl;
    0x0008db40 str r2, [sp]                                          |         *(sp) = r2;
    0x0008db42 ldr r2, [sp, 0x7c]                                    |         r2 = var_7ch;
    0x0008db44 bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008db48 ldr r3, [sp, 0x80]                                    |         r3 = var_80h;
    0x0008db4a cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0008db4c bne.w 0x8dde8                                         |             goto label_178;
                                                                     |         }
    0x0008db50 ldr.w r1, [r8, 8]                                     |         r1 = *((r8 + 8));
    0x0008db54 cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x0008db56 beq.w 0x8defe                                         |             goto label_179;
                                                                     |         }
    0x0008db5a ldr.w r3, [fp, 0x74]                                  |         r3 = *(arg_74h);
    0x0008db5e movs r2, 1                                            |         r2 = 1;
    0x0008db60 ldr r4, [sp, 0x80]                                    |         r4 = var_80h;
    0x0008db62 mov r0, fp                                            |         r0 = fp;
    0x0008db64 str r2, [sp, 0x84]                                    |         var_84h = r2;
    0x0008db66 cmp r3, 0                                             |         
    0x0008db68 it eq                                                 |         
                                                                     |         if (r3 != 0) {
    0x0008db6a moveq r3, fp                                          |             r3 = fp;
                                                                     |         }
    0x0008db6c strb r2, [r3, 0x14]                                   |         *((r3 + 0x14)) = r2;
    0x0008db6e ldr r3, [sp, 0x110]                                   |         r3 = *(arg_0h);
    0x0008db70 str r4, [sp, 4]                                       |         var_4h = r4;
    0x0008db72 str r3, [sp]                                          |         *(sp) = r3;
    0x0008db74 mov.w r3, -1                                          |         r3 = -1;
    0x0008db78 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0008db7a ldr r3, [sp, 0x7c]                                    |         r3 = var_7ch;
    0x0008db7c ldr.w r2, [r8, 0x24]                                  |         r2 = *((r8 + 0x24));
    0x0008db80 bl 0x6f1d4                                            |         fcn_0006f1d4 (r0, r1, r2, r3);
    0x0008db84 str r4, [sp, 0x88]                                    |         var_88h = r4;
    0x0008db86 b 0x8daf2                                             |         goto label_63;
                                                                     | label_100:
    0x0008db88 mov r6, r5                                            |         r6 = r5;
    0x0008db8a mov r3, r1                                            |         r3 = r1;
    0x0008db8c movs r2, 0                                            |         r2 = 0;
    0x0008db8e b.w 0x8cd08                                           |         goto label_64;
                                                                     |     }
    0x0008db92 ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008db96 mov r2, r3                                            |     r2 = r3;
    0x0008db98 str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0008db9a ldr.w r3, [sl, 0x70]                                  |     r3 = *((sl + 0x70));
    0x0008db9e cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008dba0 bge.w 0x8deba                                         |         goto label_180;
                                                                     |     }
    0x0008dba4 ldr r0, [sp, 0x68]                                    |     r0 = var_68h;
    0x0008dba6 movs r2, 0                                            |     r2 = 0;
    0x0008dba8 ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008dbac str r2, [sp, 0xa8]                                    |     var_a8h = r2;
    0x0008dbae add.w r1, r0, r0, lsl 2                               |     r1 = r0 + (r0 << 2);
    0x0008dbb2 adds r0, 1                                            |     r0++;
    0x0008dbb4 str.w r0, [sl, 0x6c]                                  |     __asm ("str.w r0, [sl, 0x6c]");
    0x0008dbb8 movs r0, 0xb                                          |     r0 = 0xb;
    0x0008dbba lsls r1, r1, 2                                        |     r1 <<= 2;
    0x0008dbbc str r0, [r3, r1]                                      |     *((r3 + r1)) = r0;
    0x0008dbbe add r3, r1                                            |     r3 += r1;
    0x0008dbc0 strd r2, r2, [r3, 4]                                  |     __asm ("strd r2, r2, [r3, 4]");
    0x0008dbc4 strd r2, r2, [r3, 0xc]                                |     __asm ("strd r2, r2, [r3, 0xc]");
    0x0008dbc8 b.w 0x8d1b2                                           |     goto label_62;
                                                                     | label_95:
    0x0008dbcc ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008dbce str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0008dbd0 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0008dbd2 b.w 0x8cfd8                                           |     goto label_56;
                                                                     | label_122:
    0x0008dbd6 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008dbd8 mov r5, r3                                            |     r5 = r3;
    0x0008dbda str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0008dbdc b.w 0x8d15c                                           |     goto label_65;
                                                                     | label_177:
    0x0008dbe0 ldr.w r2, [sl, 0x6c]                                  |     r2 = *((sl + 0x6c));
    0x0008dbe4 mov r1, r2                                            |     r1 = r2;
    0x0008dbe6 str r2, [sp, 0xa8]                                    |     var_a8h = r2;
    0x0008dbe8 ldr.w r2, [sl, 0x70]                                  |     r2 = *((sl + 0x70));
    0x0008dbec cmp r1, r2                                            |     
                                                                     |     if (r1 >= r2) {
    0x0008dbee bge.w 0x8ded0                                         |         goto label_181;
                                                                     |     }
    0x0008dbf2 ldr r1, [sp, 0xa8]                                    |     r1 = var_a8h;
    0x0008dbf4 movs r4, 0xb                                          |     r4 = 0xb;
    0x0008dbf6 ldr.w r2, [sl, 0x68]                                  |     r2 = *((sl + 0x68));
    0x0008dbfa add.w r0, r1, r1, lsl 2                               |     r0 = r1 + (r1 << 2);
    0x0008dbfe adds r1, 1                                            |     r1++;
    0x0008dc00 str.w r1, [sl, 0x6c]                                  |     __asm ("str.w r1, [sl, 0x6c]");
    0x0008dc04 lsls r0, r0, 2                                        |     r0 <<= 2;
    0x0008dc06 str r4, [r2, r0]                                      |     *((r2 + r0)) = r4;
    0x0008dc08 add r2, r0                                            |     r2 += r0;
    0x0008dc0a strd r3, r3, [r2, 4]                                  |     __asm ("strd r3, r3, [r2, 4]");
    0x0008dc0e strd r3, r3, [r2, 0xc]                                |     __asm ("strd r3, r3, [r2, 0xc]");
                                                                     | label_76:
    0x0008dc12 ldr.w r2, [sl]                                        |     r2 = *(sl);
    0x0008dc16 ldr r3, [sp, 0x74]                                    |     r3 = var_74h;
    0x0008dc18 ldrb.w r2, [r2, 0x53]                                 |     r2 = *((r2 + 0x53));
    0x0008dc1c subs r3, 1                                            |     r3--;
    0x0008dc1e it mi                                                 |     
                                                                     |     if (r3 >= 1) {
    0x0008dc20 addmi r3, r1, -1                                      |         r3 = r1 + -1;
                                                                     |     }
    0x0008dc24 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0008dc26 bne.w 0x8ddd8                                         |         goto label_182;
                                                                     |     }
    0x0008dc2a add.w r2, r3, r3, lsl 2                               |     r2 = r3 + (r3 << 2);
    0x0008dc2e ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008dc32 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
                                                                     | label_68:
    0x0008dc36 str r1, [r3, 8]                                       |     *((r3 + 8)) = r1;
    0x0008dc38 movs r3, 0                                            |     r3 = 0;
    0x0008dc3a str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0008dc3c b.w 0x8d1b2                                           |     goto label_62;
                                                                     | label_163:
    0x0008dc40 movs r6, 0                                            |     r6 = 0;
    0x0008dc42 ldr r2, [sp, 0x80]                                    |     r2 = var_80h;
    0x0008dc44 movs r3, 1                                            |     r3 = 1;
    0x0008dc46 movs r1, 0x53                                         |     r1 = 0x53;
    0x0008dc48 mov r0, sl                                            |     r0 = sl;
    0x0008dc4a str r6, [sp]                                          |     *(sp) = r6;
    0x0008dc4c bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008dc50 ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008dc54 mov r2, r3                                            |     r2 = r3;
    0x0008dc56 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
    0x0008dc58 ldr.w r3, [sl, 0x70]                                  |     r3 = *((sl + 0x70));
    0x0008dc5c cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008dc5e bge.w 0x8deec                                         |         goto label_183;
                                                                     |     }
    0x0008dc62 ldr r1, [sp, 0x4c]                                    |     r1 = var_4ch;
    0x0008dc64 ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x0008dc68 add.w r2, r1, r1, lsl 2                               |     r2 = r1 + (r1 << 2);
    0x0008dc6c adds r1, 1                                            |     r1++;
    0x0008dc6e str.w r1, [sl, 0x6c]                                  |     __asm ("str.w r1, [sl, 0x6c]");
    0x0008dc72 movs r1, 0xb                                          |     r1 = 0xb;
    0x0008dc74 str.w r1, [r3, r2, lsl 2]                             |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x0008dc78 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0008dc7c strd r6, r6, [r3, 4]                                  |     __asm ("strd r6, r6, [r3, 4]");
    0x0008dc80 strd r6, r6, [r3, 0xc]                                |     __asm ("strd r6, r6, [r3, 0xc]");
                                                                     | label_78:
    0x0008dc84 ldr r3, [sp, 0xa4]                                    |     r3 = var_a4h;
    0x0008dc86 ldr.w r0, [sl, 0xc]                                   |     r0 = *((sl + 0xc));
    0x0008dc8a mvns r2, r3                                           |     r2 = ~r3;
    0x0008dc8c ldrd r3, r1, [r0, 0x38]                               |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x0008dc90 cmn r1, r3                                            |     
                                                                     |     if (r1 < r3) {
    0x0008dc92 bmi.w 0x8dee4                                         |         goto label_184;
                                                                     |     }
    0x0008dc96 ldr r3, [r0, 0x40]                                    |     r3 = *((r0 + 0x40));
    0x0008dc98 ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008dc9c str.w r1, [r3, r2, lsl 2]                             |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                     | label_77:
    0x0008dca0 ldr.w r3, [sb, 0x38]                                  |     r3 = *((sb + 0x38));
    0x0008dca4 subs r1, r3, 1                                        |     r1 = r3 - 1;
    0x0008dca6 ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
    0x0008dca8 str r1, [sp, 0xa4]                                    |     var_a4h = r1;
    0x0008dcaa str.w r1, [sb, 0x38]                                  |     __asm ("str.w r1, [sb, 0x38]");
                                                                     |     if (r3 != 0) {
    0x0008dcae cbz r3, 0x8dcc0                                       |         
    0x0008dcb0 movs r3, 0                                            |         r3 = 0;
    0x0008dcb2 ldr r2, [sp, 0x70]                                    |         r2 = var_70h;
    0x0008dcb4 str r3, [sp]                                          |         *(sp) = r3;
    0x0008dcb6 mov r0, sl                                            |         r0 = sl;
    0x0008dcb8 mov r3, r1                                            |         r3 = r1;
    0x0008dcba movs r1, 0x32                                         |         r1 = 0x32;
    0x0008dcbc bl 0x2ae1c                                            |         fcn_0002ae1c (r0, r1, r2, r3, r4);
                                                                     |     }
    0x0008dcc0 ldr r3, [sp, 0x8c]                                    |     r3 = var_8ch;
    0x0008dcc2 cmp r7, r3                                            |     
                                                                     |     if (r7 <= r3) {
    0x0008dcc4 ble 0x8dd64                                           |         goto label_185;
                                                                     |     }
    0x0008dcc6 ldr r2, [pc, 0x264]                                   |     
    0x0008dcc8 str.w sb, [sp, 0x70]                                  |     __asm ("str.w sb, [var_70h]");
    0x0008dccc ldr r6, [sp, 0xa4]                                    |     r6 = var_a4h;
    0x0008dcce ldr.w sb, [sp, 0xb4]                                  |     sb = var_b4h;
    0x0008dcd2 add r2, pc                                            |     r2 = 0x11bc04;
    0x0008dcd4 str r4, [sp, 0x60]                                    |     var_60h = r4;
    0x0008dcd6 mov r4, r3                                            |     r4 = r3;
    0x0008dcd8 str.w r8, [sp, 0x84]                                  |     __asm ("str.w r8, [var_84h]");
    0x0008dcdc mov r8, r2                                            |     r8 = r2;
    0x0008dcde str r5, [sp, 0x50]                                    |     var_50h = r5;
                                                                     |     do {
    0x0008dce0 ldr.w r2, [sl]                                        |         r2 = *(sl);
    0x0008dce4 cmp r4, 0                                             |         
    0x0008dce6 ite lt                                                |         
                                                                     |         if (r4 >= 0) {
    0x0008dce8 ldrlt r3, [sl, 0x6c]                                  |             r3 = *((sl + 0x6c));
                                                                     |         }
                                                                     |         if (r4 >= 0) {
    0x0008dcec mov r3, r4                                            |             r3 = r4;
                                                                     |         }
    0x0008dcee mov r0, sb                                            |         r0 = sb;
    0x0008dcf0 ldrb.w r2, [r2, 0x53]                                 |         r2 = *((r2 + 0x53));
    0x0008dcf4 it lt                                                 |         
                                                                     |         if (r4 >= 0) {
    0x0008dcf6 addlt r3, r3, -1                                      |             r3 += -1;
                                                                     |         }
                                                                     |         if (r2 == 0) {
    0x0008dcfa cbnz r2, 0x8dd08                                      |             
    0x0008dcfc ldr.w r0, [sl, 0x68]                                  |             r0 = *((sl + 0x68));
    0x0008dd00 add.w r3, r3, r3, lsl 2                               |             r3 += (r3 << 2);
    0x0008dd04 add.w r0, r0, r3, lsl 2                               |             r0 += (r3 << 2);
                                                                     |         }
    0x0008dd08 ldrb r1, [r0]                                         |         r1 = *(r0);
    0x0008dd0a ldrsb.w lr, [r0, 1]                                   |         
    0x0008dd0e ldrh r5, [r0, 2]                                      |         r5 = *((r0 + 2));
    0x0008dd10 cmp r1, 0x8a                                          |         
    0x0008dd12 ldrd r2, r3, [r0, 4]                                  |         __asm ("ldrd r2, r3, [r0, 4]");
    0x0008dd16 ldrd ip, r0, [r0, 0xc]                                |         __asm ("ldrd ip, r0, [r0, 0xc]");
                                                                     |         if (r1 != 0x8a) {
    0x0008dd1a beq 0x8dd52                                           |             
    0x0008dd1c strd r0, lr, [sp, 4]                                  |             __asm ("strd r0, lr, [var_8h]");
    0x0008dd20 add.w r0, r8, r1                                      |             r0 = r8 + r1;
    0x0008dd24 ldrb.w r0, [r0, 0xac]                                 |             r0 = *((r0 + 0xac));
    0x0008dd28 str.w ip, [sp]                                        |             __asm ("str.w ip, [sp]");
    0x0008dd2c tst.w r0, 1                                           |             
    0x0008dd30 mov r0, sl                                            |             r0 = sl;
    0x0008dd32 it ne                                                 |             
                                                                     |             if ((r0 & 1) == 0) {
    0x0008dd34 movne r3, r6                                          |                 r3 = r6;
                                                                     |             }
    0x0008dd36 bl 0x2b5f4                                            |             fcn_0002b5f4 (r0, r1, r2, r3, r4, r5);
    0x0008dd3a ldr.w r3, [sl, 0x6c]                                  |             r3 = *((sl + 0x6c));
    0x0008dd3e cmp r3, 0                                             |             
    0x0008dd40 itttt gt                                              |             
                                                                     |             if (r3 <= 0) {
    0x0008dd42 ldrgt r2, [sl, 0x68]                                  |                 r2 = *((sl + 0x68));
                                                                     |             }
                                                                     |             if (r3 <= 0) {
    0x0008dd46 addgt r3, r3, r3, lsl 2                               |                 r3 += (r3 << 2);
                                                                     |             }
                                                                     |             if (r3 > 0) {
    0x0008dd4a add.w r2, r2, r3, lsl 2                               |                 r2 += (r3 << 2);
                                                                     |             }
                                                                     |             if (r3 <= 0) {
    0x0008dd4e strh r5, [r2, -0x12]                                  |                 *((r2 - 0x12)) = r5;
                                                                     |                 goto label_186;
                                                                     |             }
                                                                     |         }
                                                                     | label_186:
    0x0008dd52 adds r4, 1                                            |         r4++;
    0x0008dd54 cmp r4, r7                                            |         
    0x0008dd56 bne 0x8dce0                                           |         
                                                                     |     } while (r4 != r7);
    0x0008dd58 ldr r5, [sp, 0x50]                                    |     r5 = var_50h;
    0x0008dd5a ldr r4, [sp, 0x60]                                    |     r4 = var_60h;
    0x0008dd5c ldr.w sb, [sp, 0x70]                                  |     sb = var_70h;
    0x0008dd60 ldr.w r8, [sp, 0x84]                                  |     r8 = var_84h;
                                                                     | label_185:
    0x0008dd64 mov r2, r4                                            |     r2 = r4;
    0x0008dd66 movs r1, 2                                            |     r1 = 2;
    0x0008dd68 mov r0, sb                                            |     r0 = sb;
    0x0008dd6a bl 0x2ba20                                            |     fcn_0002ba20 (r0, r1, r2);
    0x0008dd6e ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0008dd70 ldr.w r2, [sl, 0x6c]                                  |     r2 = *((sl + 0x6c));
    0x0008dd74 cmp r3, 0                                             |     
                                                                     |     if (r3 < 0) {
    0x0008dd76 bge 0x8dd7c                                           |         
    0x0008dd78 subs r3, r2, 1                                        |         r3 = r2 - 1;
    0x0008dd7a str r3, [sp, 0x4c]                                    |         var_4ch = r3;
                                                                     |     }
    0x0008dd7c ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0008dd80 ldrb.w r3, [r3, 0x53]                                 |     r3 = *((r3 + 0x53));
                                                                     |     if (r3 != 0) {
    0x0008dd84 cbnz r3, 0x8dde0                                      |         goto label_187;
                                                                     |     }
    0x0008dd86 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0008dd88 ldr.w r1, [sl, 0x68]                                  |     r1 = *((sl + 0x68));
    0x0008dd8c add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0008dd90 add.w r3, r1, r3, lsl 2                               |     r3 = r1 + (r3 << 2);
                                                                     | label_69:
    0x0008dd94 str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
    0x0008dd96 movs r3, 1                                            |     r3 = 1;
    0x0008dd98 str r3, [sp, 0x84]                                    |     var_84h = r3;
    0x0008dd9a b.w 0x8d476                                           |     goto label_41;
                                                                     | label_137:
    0x0008dd9e mov r1, sl                                            |     r1 = sl;
    0x0008dda0 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0008dda4 b 0x8d5ae                                             |     goto label_66;
                                                                     | label_174:
    0x0008dda6 movs r3, 0                                            |     r3 = 0;
    0x0008dda8 str r3, [sp, 0x74]                                    |     var_74h = r3;
                                                                     | label_70:
    0x0008ddaa ldr r3, [sp, 0x118]                                   |     r3 = *(arg_8h);
    0x0008ddac movs r1, 0x35                                         |     r1 = 0x35;
    0x0008ddae ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008ddb0 mov r0, sl                                            |     r0 = sl;
    0x0008ddb2 str r3, [sp]                                          |     *(sp) = r3;
    0x0008ddb4 mov r3, r4                                            |     r3 = r4;
    0x0008ddb6 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008ddba ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008ddbe cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0008ddc0 ble.w 0x8da74                                         |         goto label_67;
                                                                     |     }
    0x0008ddc4 ldr.w r2, [sl, 0x68]                                  |     r2 = *((sl + 0x68));
    0x0008ddc8 add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0008ddcc add.w r2, r2, r3, lsl 2                               |     r2 += (r3 << 2);
    0x0008ddd0 movs r3, 0x90                                         |     r3 = 0x90;
    0x0008ddd2 strh r3, [r2, -0x12]                                  |     *((r2 - 0x12)) = r3;
    0x0008ddd6 b 0x8da74                                             |     goto label_67;
                                                                     | label_182:
    0x0008ddd8 ldr r3, [pc, 0x154]                                   |     
    0x0008ddda add r3, pc                                            |     r3 = 0x11bd0e;
    0x0008dddc adds r3, 4                                            |     r3 += 4;
    0x0008ddde b 0x8dc36                                             |     goto label_68;
                                                                     | label_187:
    0x0008dde0 ldr r3, [pc, 0x150]                                   |     
    0x0008dde2 add r3, pc                                            |     r3 = 0x11bd1a;
    0x0008dde4 adds r3, 4                                            |     r3 += 4;
    0x0008dde6 b 0x8dd94                                             |     goto label_69;
                                                                     | label_178:
    0x0008dde8 ldr.w r3, [fp, 0x74]                                  |     r3 = *(arg_74h);
    0x0008ddec movs r4, 1                                            |     r4 = 1;
    0x0008ddee ldr r1, [sp, 0x114]                                   |     r1 = *(arg_114h);
    0x0008ddf0 movs r7, 0                                            |     r7 = 0;
    0x0008ddf2 ldr r2, [sp, 0x90]                                    |     r2 = var_90h;
    0x0008ddf4 mov r0, fp                                            |     r0 = fp;
    0x0008ddf6 cmp r3, 0                                             |     
    0x0008ddf8 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0008ddfa moveq r3, fp                                          |         r3 = fp;
                                                                     |     }
    0x0008ddfc strb r4, [r3, 0x14]                                   |     *((r3 + 0x14)) = r4;
    0x0008ddfe mov.w r3, -1                                          |     r3 = -1;
    0x0008de02 str r1, [sp, 4]                                       |     var_4h = r1;
    0x0008de04 ldr r1, [sp, 0x110]                                   |     r1 = *(arg_0h);
    0x0008de06 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0008de08 movs r3, 5                                            |     r3 = 5;
    0x0008de0a str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0008de0c str r1, [sp]                                          |     *(sp) = r1;
    0x0008de0e mov r1, r8                                            |     r1 = r8;
    0x0008de10 ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0008de12 str r4, [sp, 0x14]                                    |     var_14h = r4;
    0x0008de14 str r4, [sp, 8]                                       |     var_8h = r4;
    0x0008de16 str r7, [sp, 0xc]                                     |     var_ch = r7;
    0x0008de18 bl 0x8c7d0                                            |     fcn_0008c7d0 (r0, r1, r2, r3);
    0x0008de1c ldr r2, [sp, 0x80]                                    |     r2 = var_80h;
    0x0008de1e mov r3, r4                                            |     r3 = r4;
    0x0008de20 movs r1, 0x53                                         |     r1 = 0x53;
    0x0008de22 mov r0, sl                                            |     r0 = sl;
    0x0008de24 str r7, [sp]                                          |     *(sp) = r7;
    0x0008de26 str r4, [sp, 0x88]                                    |     var_88h = r4;
    0x0008de28 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008de2c str r4, [sp, 0x84]                                    |     var_84h = r4;
    0x0008de2e b 0x8daf2                                             |     goto label_63;
                                                                     | label_167:
    0x0008de30 movs r7, 4                                            |     r7 = 4;
    0x0008de32 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0008de34 str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0008de36 b 0x8ddaa                                             |     goto label_70;
                                                                     | label_173:
    0x0008de38 movs r3, 0                                            |     r3 = 0;
    0x0008de3a movs r7, 6                                            |     r7 = 6;
    0x0008de3c str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0008de3e str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0008de40 b 0x8ddaa                                             |     goto label_70;
                                                                     | label_128:
    0x0008de42 movs r3, 0                                            |     r3 = 0;
    0x0008de44 movs r1, 0xb                                          |     r1 = 0xb;
    0x0008de46 mov r2, r3                                            |     r2 = r3;
    0x0008de48 str r3, [sp]                                          |     *(sp) = r3;
    0x0008de4a mov r0, sl                                            |     r0 = sl;
    0x0008de4c bl 0x2add4                                            |     r0 = fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008de50 adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x0008de52 str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0008de54 b 0x8db30                                             |     goto label_71;
                                                                     | label_127:
    0x0008de56 str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0008de58 b 0x8db30                                             |     goto label_71;
                                                                     | label_170:
    0x0008de5a str r3, [sp]                                          |     *(sp) = r3;
    0x0008de5c movs r1, 0x35                                         |     r1 = 0x35;
    0x0008de5e ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0008de60 mov r0, sl                                            |     r0 = sl;
    0x0008de62 ldr r2, [sp, 0x114]                                   |     r2 = *(arg_114h);
    0x0008de64 bl 0x2ae1c                                            |     fcn_0002ae1c (r0, r1, r2, r3, r4);
    0x0008de68 ldr.w r3, [sl, 0x6c]                                  |     r3 = *((sl + 0x6c));
    0x0008de6c cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0008de6e ble.w 0x8d97a                                         |         goto label_72;
                                                                     |     }
    0x0008de72 ldr.w r2, [sl, 0x68]                                  |     r2 = *((sl + 0x68));
    0x0008de76 add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0008de7a add.w r2, r2, r3, lsl 2                               |     r2 += (r3 << 2);
    0x0008de7e movs r3, 0x90                                         |     r3 = 0x90;
    0x0008de80 strh r3, [r2, -0x12]                                  |     *((r2 - 0x12)) = r3;
    0x0008de84 b 0x8d97a                                             |     goto label_72;
                                                                     | label_171:
    0x0008de86 ldr.w r3, [r8, 0x10]                                  |     r3 = *((r8 + 0x10));
    0x0008de8a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008de8c bne.w 0x8d9ba                                         |         goto label_73;
                                                                     |     }
    0x0008de90 b.w 0x8d0d4                                           |     goto label_53;
                                                                     | label_86:
    0x0008de94 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0008de96 b.w 0x8cc6c                                           |     goto label_74;
                                                                     | label_124:
    0x0008de9a movs r3, 0                                            |     r3 = 0;
    0x0008de9c movs r1, 0xb                                          |     r1 = 0xb;
    0x0008de9e mov r2, r3                                            |     r2 = r3;
    0x0008dea0 mov r0, sl                                            |     r0 = sl;
    0x0008dea2 str r3, [sp]                                          |     *(sp) = r3;
    0x0008dea4 bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008dea8 str r0, [sp, 0x78]                                    |     var_78h = r0;
    0x0008deaa b.w 0x8d15c                                           |     goto label_65;
                                                                     | label_130:
    0x0008deae ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008deb0 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0008deb2 ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0008deb4 str r3, [sp, 0xa4]                                    |     var_a4h = r3;
    0x0008deb6 b.w 0x8d59e                                           |     goto label_75;
                                                                     | label_180:
    0x0008deba movs r3, 0                                            |     r3 = 0;
    0x0008debc movs r1, 0xb                                          |     r1 = 0xb;
    0x0008debe mov r2, r3                                            |     r2 = r3;
    0x0008dec0 mov r0, sl                                            |     r0 = sl;
    0x0008dec2 str r3, [sp]                                          |     *(sp) = r3;
    0x0008dec4 str r3, [sp, 0xa8]                                    |     var_a8h = r3;
    0x0008dec6 bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008deca str r0, [sp, 0x68]                                    |     var_68h = r0;
    0x0008decc b.w 0x8d1b2                                           |     goto label_62;
                                                                     | label_181:
    0x0008ded0 movs r1, 0xb                                          |     r1 = 0xb;
    0x0008ded2 mov r2, r3                                            |     r2 = r3;
    0x0008ded4 mov r0, sl                                            |     r0 = sl;
    0x0008ded6 str r3, [sp]                                          |     *(sp) = r3;
    0x0008ded8 bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008dedc ldr.w r1, [sl, 0x6c]                                  |     r1 = *((sl + 0x6c));
    0x0008dee0 str r0, [sp, 0xa8]                                    |     var_a8h = r0;
    0x0008dee2 b 0x8dc12                                             |     goto label_76;
                                                                     | label_184:
    0x0008dee4 mov r1, sl                                            |     r1 = sl;
    0x0008dee6 bl 0x1c0b8                                            |     fcn_0001c0b8 (r0, r1, r2);
    0x0008deea b 0x8dca0                                             |     goto label_77;
                                                                     | label_183:
    0x0008deec mov r3, r6                                            |     r3 = r6;
    0x0008deee mov r2, r6                                            |     r2 = r6;
    0x0008def0 movs r1, 0xb                                          |     r1 = 0xb;
    0x0008def2 mov r0, sl                                            |     r0 = sl;
    0x0008def4 str r6, [sp]                                          |     *(sp) = r6;
    0x0008def6 bl 0x2add4                                            |     fcn_0002add4 (r0, r1, r2, r3, r4);
    0x0008defa str r0, [sp, 0x4c]                                    |     var_4ch = r0;
    0x0008defc b 0x8dc84                                             |     goto label_78;
                                                                     | label_179:
    0x0008defe ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0008df00 str r3, [sp, 0x88]                                    |     var_88h = r3;
    0x0008df02 movs r3, 1                                            |     r3 = 1;
    0x0008df04 str r3, [sp, 0x84]                                    |     var_84h = r3;
    0x0008df06 b 0x8daf2                                             |     goto label_63;
                                                                     | label_176:
    0x0008df08 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0008df0a movs r7, 2                                            |     r7 = 2;
    0x0008df0c mov r5, r3                                            |     r5 = r3;
    0x0008df0e strd r3, r3, [sp, 0x74]                               |     __asm ("strd r3, r3, [var_74h]");
    0x0008df12 b 0x8ddaa                                             |     goto label_70;
                                                                     | label_158:
    0x0008df14 blx 0x7e8c                                            |     fcn_00007e8c ();
                                                                     | label_175:
    0x0008df18 movs r7, 2                                            |     r7 = 2;
    0x0008df1a b 0x8dae2                                             |     goto label_79;
                                                                     | label_82:
    0x0008df1c movs r3, 0                                            |     r3 = 0;
    0x0008df1e ldrh r3, [r3, 0x32]                                   |     r3 = *((r3 + 0x32));
    0x0008df20 udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x936a0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000936a0 ()                                      | void fcn_000936a0 (int16_t arg_0h, int16_t arg_1h, int16_t arg_10h, int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_3;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h_3;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000936a0 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x000936a4 mov r8, r2                                        |     r8 = r2;
    0x000936a6 ldr.w sb, [r1, 0xc]                               |     sb = *(arg_1hxc);
    0x000936aa sub sp, 0x10                                      |     
    0x000936ac mov r4, r1                                        |     r4 = r1;
    0x000936ae mov r6, r0                                        |     r6 = r0;
    0x000936b0 ldr r2, [pc, 0xc8]                                |     
    0x000936b2 ldr r3, [pc, 0xcc]                                |     r3 = *(0x93782);
    0x000936b4 ldrd r5, sl, [r1, 0x18]                           |     __asm ("ldrd r5, sl, [arg_1hx18]");
    0x000936b8 add r1, sp, 4                                     |     r1 += var_4h;
    0x000936ba add r2, pc                                        |     r2 = 0x126e3a;
    0x000936bc ldr.w r7, [sb]                                    |     r7 = *(sb);
    0x000936c0 ldr r3, [r2, r3]                                  |     
    0x000936c2 adds r0, r7, r5                                   |     r0 = r7 + r5;
    0x000936c4 ldr r3, [r3]                                      |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000936c6 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000936c8 mov.w r3, 0                                       |     r3 = 0;
    0x000936cc bl 0xbbf8                                         |     fcn_0000bbf8 (r0, r1);
    0x000936d0 ldr.w r1, [sb, 8]                                 |     r1 = *((sb + 8));
    0x000936d4 adds.w sb, r0, r5                                 |     sb = r0 + r5;
    0x000936d8 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x000936da adc.w sl, sl, r0, asr 31                          |     __asm ("adc.w sl, sl, r0, asr 31");
    0x000936de adds.w ip, r2, sb                                 |     
    0x000936e2 asr.w r3, r1, 0x1f                                |     r3 = r1 >> 0x1f;
    0x000936e6 adc.w r0, sl, r2, asr 31                          |     __asm ("adc.w r0, sl, r2, asr 31");
    0x000936ea cmp r1, ip                                        |     
    0x000936ec sbcs r3, r0                                       |     __asm ("sbcs r3, r0");
                                                                 |     if (r1 >= ip) {
    0x000936ee blt 0x93702                                       |         
    0x000936f0 ldr r1, [r4, 0x48]                                |         r1 = *((r4 + 0x48));
    0x000936f2 clz r3, r2                                        |         r3 &= r2;
    0x000936f6 lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x000936f8 cmp r1, r8                                        |         
    0x000936fa it lt                                             |         
                                                                 |         if (r1 >= r8) {
    0x000936fc orrlt r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x00093700 cbz r3, 0x93722                                   |             goto label_10;
                                                                 |         }
                                                                 |     }
    0x00093702 movw r3, 0x10b                                    |     r3 = 0x10b;
    0x00093706 str r3, [r6, 0x24]                                |     *((r6 + 0x24)) = r3;
                                                                 |     do {
    0x00093708 ldr r2, [pc, 0x78]                                |         
    0x0009370a ldr r3, [pc, 0x74]                                |         r3 = *(0x93782);
    0x0009370c add r2, pc                                        |         r2 = 0x126e94;
    0x0009370e ldr r3, [r2, r3]                                  |         r3 = imp._ITM_deregisterTMCloneTable;
    0x00093710 ldr r2, [r3]                                      |         r2 = imp._ITM_deregisterTMCloneTable;
    0x00093712 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00093714 eors r2, r3                                       |         r2 ^= r3;
    0x00093716 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0009371a bne 0x93778                                       |             goto label_11;
                                                                 |         }
    0x0009371c add sp, 0x10                                      |         
    0x0009371e pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_10:
    0x00093722 add.w r3, r7, sb                                  |         r3 = r7 + sb;
    0x00093726 add.w r1, r4, 0x44                                |         r1 = r4 + 0x44;
    0x0009372a add.w r0, r6, 0x24                                |         r0 = r6 + 0x24;
    0x0009372e str.w r8, [r4, 0x48]                              |         __asm ("str.w r8, [r4, 0x48]");
    0x00093732 bl 0x487fc                                        |         fcn_000487fc (r0, r1, r2, r3);
    0x00093736 ldr r5, [sp, 4]                                   |         r5 = var_4h;
    0x00093738 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x0009373a adds.w r3, r5, sb                                 |         r3 = r5 + sb;
    0x0009373e str r3, [r4, 0x28]                                |         *((r4 + 0x28)) = r3;
    0x00093740 adc.w r5, sl, r5, asr 31                          |         __asm ("adc.w r5, sl, r5, asr 31");
    0x00093744 str r3, [r4, 0x18]                                |         *((r4 + 0x18)) = r3;
    0x00093746 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00093748 str r5, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r5;
    0x0009374a ldr r5, [r4, 0x2c]                                |         r5 = *((r4 + 0x2c));
    0x0009374c ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0009374e str r2, [r4, 0x24]                                |         *((r4 + 0x24)) = r2;
    0x00093750 cmp r5, r3                                        |         
                                                                 |         if (r5 < r3) {
    0x00093752 blt 0x93762                                       |             goto label_12;
                                                                 |         }
    0x00093754 adds r3, 1                                        |         r3++;
    0x00093756 str r3, [r4, 0x30]                                |         *((r4 + 0x30)) = r3;
                                                                 | label_0:
    0x00093758 mov r1, r4                                        |         r1 = r4;
    0x0009375a mov r0, r6                                        |         r0 = r6;
    0x0009375c bl 0x93644                                        |         fcn_00093644 (r0);
    0x00093760 b 0x93708                                         |         
                                                                 |     } while (1);
                                                                 | label_12:
    0x00093762 adds r0, r7, r5                                   |     r0 = r7 + r5;
    0x00093764 add r1, sp, 8                                     |     r1 += var_8h_3;
    0x00093766 bl 0xbbf8                                         |     fcn_0000bbf8 (r0, r1);
    0x0009376a ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x0009376c add r5, r0                                        |     r5 += r0;
    0x0009376e ldr r2, [sp, 8]                                   |     r2 = var_8h_3;
    0x00093770 str r5, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r5;
    0x00093772 add r3, r2                                        |     r3 += r2;
    0x00093774 str r3, [r4, 0x30]                                |     *((r4 + 0x30)) = r3;
    0x00093776 b 0x93758                                         |     goto label_0;
                                                                 | label_11:
    0x00093778 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x0009377c adr r5, 0x358                                     |     r5 = 0x358;
    0x0009377e movs r3, r0                                       |     r3 = r0;
    0x00093780 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00093782 movs r0, r0                                       |     
    0x00093784 adr r5, 0x210                                     |     r5 = 0x210;
    0x00093786 movs r3, r0                                       |     r3 = r0;
    0x00093788 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0009378c mov r5, r1                                        |     r5 = r1;
    0x0009378e ldr r4, [pc, 0x258]                               |     
    0x00093790 sub sp, 0x24                                      |     
    0x00093792 mov r7, r0                                        |     r7 = r0;
    0x00093794 mov r8, r2                                        |     r8 = r2;
    0x00093796 ldr r3, [pc, 0x254]                               |     r3 = *(0x939ee);
    0x00093798 add r4, pc                                        |     r4 = 0x127186;
    0x0009379a ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0009379c movs r1, 0                                        |     r1 = 0;
    0x0009379e ldr r3, [r4, r3]                                  |     
    0x000937a0 ldr r4, [r5, 0x18]                                |     r4 = *((r5 + 0x18));
    0x000937a2 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x000937a4 ldr r3, [r3]                                      |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000937a6 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000937a8 mov.w r3, 0                                       |     r3 = 0;
    0x000937ac ldr r3, [r5, 0x58]                                |     r3 = *((r5 + 0x58));
    0x000937ae ldr.w fp, [r6]                                    |     fp = *(r6);
    0x000937b0 add sp, 0                                         |     
    0x000937b2 str r1, [sp, 0xc]                                 |     var_ch_2 = r1;
    0x000937b4 add r4, r3                                        |     r4 += r3;
    0x000937b6 cmp r4, r0                                        |     
    0x000937b8 str r4, [sp, 8]                                   |     var_8h = r4;
                                                                 |     if (r4 >= r0) {
    0x000937ba bge 0x93828                                       |         goto label_13;
                                                                 |     }
    0x000937bc ldr r3, [r5, 0x30]                                |     r3 = *((r5 + 0x30));
    0x000937be cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x000937c0 bge 0x93892                                       |         goto label_14;
                                                                 |     }
    0x000937c2 add.w r0, fp, r4                                  |     r0 = fp + r4;
    0x000937c6 add r1, sp, 0x10                                  |     r1 += var_10h;
    0x000937c8 bl 0xbaf0                                         |     fcn_0000baf0 (r0, r1);
    0x000937cc ldr r3, [r5, 0x50]                                |     r3 = *((r5 + 0x50));
    0x000937ce add r4, r0                                        |     r4 += r0;
    0x000937d0 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x000937d2 asrs r6, r4, 0x1f                                 |     r6 = r4 >> 0x1f;
    0x000937d4 str r4, [sp, 8]                                   |     var_8h = r4;
    0x000937d6 adds r3, r3, r2                                   |     r3 += r2;
    0x000937d8 ldr r2, [sp, 0x14]                                |     r2 = var_14h_2;
    0x000937da str r3, [r5, 0x50]                                |     *((r5 + 0x50)) = r3;
    0x000937dc ldr r3, [r5, 0x54]                                |     r3 = *((r5 + 0x54));
    0x000937de adc.w r3, r3, r2                                  |     __asm ("adc.w r3, r3, r2");
    0x000937e0 lsls r2, r0, 0xc                                  |     r2 = r0 << 0xc;
    0x000937e2 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
                                                                 | label_4:
    0x000937e4 adds r3, r4, 1                                    |     r3 = r4 + 1;
    0x000937e6 add.w r0, fp, r4                                  |     r0 = fp + r4;
    0x000937ea str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x000937ec adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x000937f0 str r3, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r3;
    0x000937f2 ldrb.w r3, [fp, r4]                               |     r3 = *((fp + r4));
    0x000937f6 lsls r1, r3, 0x18                                 |     r1 = r3 << 0x18;
    0x000937f8 mov r2, r3                                        |     r2 = r3;
    0x000937fa str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     if (r1 < r3) {
    0x000937fc bmi.w 0x93946                                     |         goto label_15;
                                                                 |     }
                                                                 | label_5:
    0x00093800 asrs r2, r2, 1                                    |     r2 >>= 1;
    0x00093802 and r3, r3, 1                                     |     r3 &= 1;
    0x00093806 strb.w r3, [r5, 0x5c]                             |     *((r5 + 0x5c)) = r3;
    0x0009380a str r2, [r5, 0x58]                                |     *((r5 + 0x58)) = r2;
                                                                 |     do {
                                                                 | label_2:
    0x0009380c ldr r2, [pc, 0x1e0]                               |         
    0x0009380e ldr r3, [pc, 0x1dc]                               |         r3 = *(0x939ee);
    0x00093810 add r2, pc                                        |         r2 = 0x127204;
    0x00093812 ldr r3, [r2, r3]                                  |         r3 = imp._ITM_deregisterTMCloneTable;
    0x00093814 ldr r2, [r3]                                      |         r2 = imp._ITM_deregisterTMCloneTable;
    0x00093816 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00093818 eors r2, r3                                       |         r2 ^= r3;
    0x0009381a mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0009381e bne.w 0x939e2                                     |             goto label_16;
                                                                 |         }
    0x00093822 add sp, 0x24                                      |         
    0x00093824 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_13:
    0x00093828 ldr r3, [r5]                                      |         r3 = *(r5);
    0x0009382a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0009382c beq 0x938f8                                       |             goto label_17;
                                                                 |         }
    0x0009382e add.w sl, sp, 8                                   |         sl += var_8h;
    0x00093832 strd r1, r1, [sp, 4]                              |         __asm ("strd r1, r1, [var_8h]");
    0x00093836 b 0x93840                                         |         goto label_18;
                                                                 | label_1:
    0x00093838 cmp sb, r2                                        |         
                                                                 |         if (sb < r2) {
    0x0009383a blt 0x938f0                                       |             goto label_19;
                                                                 |         }
    0x0009383c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0009383e bne 0x9393a                                       |             goto label_20;
                                                                 |         }
                                                                 | label_18:
    0x00093840 mov r1, r5                                        |         r1 = r5;
    0x00093842 mov r0, r7                                        |         r0 = r7;
    0x00093844 bl 0x935c0                                        |         fcn_000935c0 (r0, r1);
    0x00093848 ldr r6, [r5, 0xc]                                 |         r6 = *((r5 + 0xc));
    0x0009384a cmp r6, 0                                         |         
    0x0009384c beq 0x9380c                                       |         
                                                                 |     } while (r6 == 0);
    0x0009384e ldr.w fp, [r6]                                    |     fp = *(r6);
    0x00093852 ldr.w sb, [r6, 8]                                 |     sb = *((r6 + 8));
    0x00093856 ldrb.w r2, [fp]                                   |     r2 = *(fp);
    0x0009385a ldrb.w r4, [fp, 1]                                |     r4 = *(arg_1h);
    0x0009385e add.w r4, r4, r2, lsl 8                           |     r4 += (r2 << 8);
    0x00093862 uxth r4, r4                                       |     r4 = (int16_t) r4;
    0x00093864 mov r2, r4                                        |     r2 = r4;
    0x00093866 str r4, [sp, 8]                                   |     var_8h = r4;
                                                                 |     if (r4 != 0) {
    0x00093868 cbz r4, 0x9386e                                   |         
    0x0009386a cmp sb, r4                                        |         
                                                                 |         if (sb > r4) {
    0x0009386c bgt 0x938d0                                       |             goto label_21;
                                                                 |         }
                                                                 |     }
    0x0009386e ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x00093870 cmp sb, r1                                        |     
                                                                 |     if (sb >= r1) {
    0x00093872 bge 0x93838                                       |         goto label_1;
                                                                 |     }
    0x00093874 mov r1, sl                                        |     r1 = sl;
    0x00093876 add.w r0, fp, sb                                  |     r0 = fp + sb;
    0x0009387a bl 0xbbf8                                         |     fcn_0000bbf8 (r0, r1);
    0x0009387e ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00093880 add r0, sb                                        |     r0 += sb;
    0x00093882 movs r3, 1                                        |     r3 = 1;
    0x00093884 str r0, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r0;
    0x00093886 str r3, [sp, 4]                                   |     var_4h_3 = r3;
    0x00093888 str r2, [r5, 0x18]                                |     *((r5 + 0x18)) = r2;
    0x0009388a asrs r1, r2, 0x1f                                 |     r1 = r2 >> 0x1f;
    0x0009388c str r2, [r5, 0x30]                                |     *((r5 + 0x30)) = r2;
    0x0009388e str r1, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r1;
    0x00093890 b 0x93838                                         |     goto label_1;
                                                                 | label_14:
    0x00093892 add r0, fp                                        |     r0 += fp;
    0x00093894 add r1, sp, 0x10                                  |     r1 += var_10h;
    0x00093896 bl 0xbbf8                                         |     fcn_0000bbf8 (r0, r1);
    0x0009389a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0009389c cmp r4, r3                                        |     
                                                                 |     if (r4 != r3) {
    0x0009389e bne 0x9390c                                       |         goto label_22;
                                                                 |     }
    0x000938a0 str r4, [r5, 0x18]                                |     *((r5 + 0x18)) = r4;
    0x000938a2 asrs r4, r4, 0x1f                                 |     r4 >>= 0x1f;
    0x000938a4 str r4, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r4;
                                                                 | label_3:
    0x000938a6 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000938a8 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x000938aa bmi 0x93900                                       |         goto label_6;
                                                                 |     }
    0x000938ac ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x000938ae mov r1, r5                                        |     r1 = r5;
    0x000938b0 mov r0, r7                                        |     r0 = r7;
    0x000938b2 bl 0x936a0                                        |     fcn_000936a0 (r0, r1, r2, r3, r4, r5, r6);
    0x000938b6 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
                                                                 |     if (r3 == 0) {
    0x000938b8 cbnz r3, 0x938c2                                  |         
    0x000938ba ldr r0, [r7]                                      |         r0 = *(r7);
    0x000938bc mov r1, r5                                        |         r1 = r5;
    0x000938be bl 0x11120                                        |         fcn_00011120 (r0, r1);
                                                                 |     }
    0x000938c2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000938c6 beq 0x9380c                                       |         goto label_2;
                                                                 |     }
    0x000938c8 movs r3, 1                                        |     r3 = 1;
    0x000938ca str.w r3, [r8]                                    |     __asm ("str.w r3, [r8]");
    0x000938ce b 0x9380c                                         |     goto label_2;
                                                                 | label_21:
    0x000938d0 add.w r1, r5, 0x50                                |     r1 = r5 + 0x50;
    0x000938d4 add.w r0, fp, r4                                  |     r0 = fp + r4;
    0x000938d8 bl 0xbaf0                                         |     fcn_0000baf0 (r0, r1);
    0x000938dc ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x000938de add r4, r0                                        |     r4 += r0;
    0x000938e0 asrs r1, r4, 0x1f                                 |     r1 = r4 >> 0x1f;
    0x000938e2 str r4, [sp, 8]                                   |     var_8h = r4;
    0x000938e4 str r4, [r5, 0x18]                                |     *((r5 + 0x18)) = r4;
    0x000938e6 cmp sb, r2                                        |     
    0x000938e8 str r1, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r1;
                                                                 |     if (sb < r2) {
    0x000938ea blt 0x93922                                       |         goto label_23;
                                                                 |     }
    0x000938ec cmp r4, sb                                        |     
                                                                 |     if (r4 <= sb) {
    0x000938ee ble 0x9393a                                       |         goto label_20;
                                                                 |     }
                                                                 |     do {
                                                                 | label_19:
    0x000938f0 movw r3, 0x10b                                    |         r3 = 0x10b;
    0x000938f4 str r3, [r7, 0x24]                                |         *((r7 + 0x24)) = r3;
    0x000938f6 b 0x9380c                                         |         goto label_2;
                                                                 | label_17:
    0x000938f8 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000938fa ands sb, r3, 1                                    |         sb = r3 & 1;
                                                                 |         if (sb == r3) {
    0x000938fe beq 0x93960                                       |             goto label_24;
                                                                 |         }
                                                                 | label_6:
    0x00093900 mov r0, r6                                        |         r0 = r6;
    0x00093902 blx 0x84f8                                        |         fcn_000084f8 ();
    0x00093906 movs r3, 0                                        |         r3 = 0;
    0x00093908 str r3, [r5, 0xc]                                 |         *((r5 + 0xc)) = r3;
    0x0009390a b 0x9380c                                         |         goto label_2;
                                                                 | label_22:
    0x0009390c add.w r0, fp, r4                                  |         r0 = fp + r4;
    0x00093910 add r1, sp, 0xc                                   |         r1 += var_ch_2;
    0x00093912 bl 0xbbf8                                         |         fcn_0000bbf8 (r0, r1);
    0x00093916 add r0, r4                                        |         r0 += r4;
    0x00093918 str r0, [sp, 8]                                   |         var_8h = r0;
    0x0009391a str r0, [r5, 0x18]                                |         *((r5 + 0x18)) = r0;
    0x0009391c asrs r0, r0, 0x1f                                 |         r0 >>= 0x1f;
    0x0009391e str r0, [r5, 0x1c]                                |         *((r5 + 0x1c)) = r0;
    0x00093920 b 0x938a6                                         |         goto label_3;
                                                                 | label_23:
    0x00093922 add.w r0, fp, sb                                  |         r0 = fp + sb;
    0x00093926 add.w r1, r5, 0x30                                |         r1 = r5 + 0x30;
    0x0009392a bl 0xbbf8                                         |         fcn_0000bbf8 (r0, r1);
    0x0009392e add r0, sb                                        |         r0 += sb;
    0x00093930 ldr.w sb, [r6, 8]                                 |         sb = *((r6 + 8));
    0x00093934 str r0, [r5, 0x2c]                                |         *((r5 + 0x2c)) = r0;
    0x00093936 cmp r4, sb                                        |         
    0x00093938 bgt 0x938f0                                       |         
                                                                 |     } while (r4 > sb);
                                                                 | label_20:
    0x0009393a ldr r3, [sp, 4]                                   |     r3 = var_4h_3;
    0x0009393c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0009393e bne 0x938a6                                       |         goto label_3;
                                                                 |     }
    0x00093940 ldrd r4, r6, [r5, 0x18]                           |     __asm ("ldrd r4, r6, [r5, 0x18]");
    0x00093944 b 0x937e4                                         |     goto label_4;
                                                                 | label_15:
    0x00093946 strd r4, r6, [r5, 0x18]                           |     __asm ("strd r4, r6, [r5, 0x18]");
    0x0009394a add r1, sp, 0x10                                  |     r1 += var_10h;
    0x0009394c bl 0xbbf8                                         |     fcn_0000bbf8 (r0, r1);
    0x00093950 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00093952 adds r4, r0, r4                                   |     r4 = r0 + r4;
    0x00093954 adc.w r6, r6, r0, asr 31                          |     __asm ("adc.w r6, r6, r0, asr 31");
    0x00093958 str r4, [r5, 0x18]                                |     *((r5 + 0x18)) = r4;
    0x0009395a str r6, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r6;
    0x0009395c uxtb r3, r2                                       |     r3 = (int8_t) r2;
    0x0009395e b 0x93800                                         |     goto label_5;
                                                                 | label_24:
    0x00093960 ldr r4, [r7, 0xc]                                 |     r4 = *((r7 + 0xc));
    0x00093962 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00093964 ldr.w fp, [r3, 4]                                 |     fp = *((r3 + 4));
    0x00093968 str.w fp, [r4, 0x10]                              |     __asm ("str.w fp, [r4, 0x10]");
    0x0009396c cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00093970 beq 0x93900                                       |         goto label_6;
                                                                 |     }
    0x00093972 add.w sl, fp, 0x28                                |     sl += arg_28h;
    0x00093976 mov r6, sb                                        |     r6 = sb;
    0x00093978 mov r0, sl                                        |     r0 = sl;
    0x0009397a blx 0x8160                                        |     fcn_00008160 ();
    0x0009397e mov r2, sb                                        |     r2 = sb;
    0x00093980 mov r3, r0                                        |     r3 = r0;
    0x00093982 mov r1, fp                                        |     r1 = fp;
    0x00093984 mov r0, r4                                        |     r0 = r4;
    0x00093986 mov r4, r3                                        |     r4 = r3;
    0x00093988 bl 0x1ef60                                        |     fcn_0001ef60 (r0, r1, r2);
    0x0009398c ldr.w r1, [fp, 0x10]                              |     r1 = *(arg_10h);
    0x00093990 mov r0, sl                                        |     r0 = sl;
    0x00093992 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00093994 subs r1, 0x29                                     |     r1 -= 0x29;
    0x00093996 subs r1, r1, r4                                   |     r1 -= r4;
    0x00093998 adds r4, 1                                        |     r4++;
    0x0009399a add r4, sl                                        |     r4 += sl;
    0x0009399c str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x0009399e strd r4, r1, [r3]                                 |     __asm ("strd r4, r1, [r3]");
    0x000939a2 adds r1, 1                                        |     r1++;
    0x000939a4 str r1, [r5, 0x30]                                |     *((r5 + 0x30)) = r1;
    0x000939a6 blx 0x8160                                        |     fcn_00008160 ();
    0x000939aa mov r3, sl                                        |     r3 = sl;
    0x000939ac mov r2, r0                                        |     r2 = r0;
    0x000939ae add.w r1, r5, 0x44                                |     r1 = r5 + 0x44;
    0x000939b2 add.w r0, r7, 0x24                                |     r0 = r7 + 0x24;
    0x000939b6 str.w sb, [r5, 0x48]                              |     __asm ("str.w sb, [r5, 0x48]");
    0x000939ba bl 0x487fc                                        |     fcn_000487fc (r0, r1, r2, r3);
    0x000939be mov r0, r4                                        |     r0 = r4;
    0x000939c0 add.w r1, r5, 0x50                                |     r1 = r5 + 0x50;
    0x000939c4 bl 0xbaf0                                         |     fcn_0000baf0 (r0, r1);
    0x000939c8 movs r3, 1                                        |     r3 = 1;
    0x000939ca strd r0, sb, [r5, 0x18]                           |     __asm ("strd r0, sb, [r5, 0x18]");
    0x000939ce str.w r3, [r8]                                    |     __asm ("str.w r3, [r8]");
    0x000939d2 mov r4, r0                                        |     r4 = r0;
    0x000939d4 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000939d6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000939d8 beq.w 0x9380c                                     |         goto label_2;
                                                                 |     }
    0x000939dc ldr.w fp, [r3]                                    |     fp = *(r3);
    0x000939e0 b 0x937e4                                         |     goto label_4;
                                                                 | label_16:
    0x000939e2 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x000939e6 nop                                               |     
    0x000939e8 adr r4, 0x3e0                                     |     r4 = 0x3e0;
    0x000939ea movs r3, r0                                       |     r3 = r0;
    0x000939ec lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x000939ee movs r0, r0                                       |     
    0x000939f0 adr r4, 0x200                                     |     r4 = 0x200;
    0x000939f2 movs r3, r0                                       |     r3 = r0;
    0x000939f4 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x000939f8 mov r7, r2                                        |     r7 = r2;
    0x000939fa ldr r2, [pc, 0x17c]                               |     
    0x000939fc sub sp, 0x18                                      |     
    0x000939fe mov r4, r1                                        |     r4 = r1;
    0x00093a00 mov r5, r0                                        |     r5 = r0;
    0x00093a02 ldr r3, [pc, 0x178]                               |     r3 = *(0x93b7e);
    0x00093a04 add r2, pc                                        |     r2 = 0x127582;
    0x00093a06 ldr r6, [r1, 0x18]                                |     r6 = *((r1 + 0x18));
    0x00093a08 ldr r3, [r2, r3]                                  |     
    0x00093a0a ldr r3, [r3]                                      |     r3 = imp._ITM_deregisterTMCloneTable;
    0x00093a0c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00093a0e mov.w r3, 0                                       |     r3 = 0;
    0x00093a12 ldr r3, [r1]                                      |     r3 = *(r1);
                                                                 |     if (r3 != 0) {
    0x00093a14 cbz r3, 0x93a1e                                   |         
    0x00093a16 ldr r3, [r1, 0xc]                                 |         r3 = *((r1 + 0xc));
    0x00093a18 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00093a1a cmp r3, r6                                        |         
                                                                 |         if (r3 <= r6) {
    0x00093a1c ble 0x93a8e                                       |             goto label_25;
                                                                 |         }
                                                                 |     }
    0x00093a1e ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x00093a20 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x00093a22 bgt 0x93aaa                                       |         goto label_26;
                                                                 |     }
                                                                 |     do {
    0x00093a24 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00093a26 ands r8, r2, 1                                    |         r8 = r2 & 1;
                                                                 |         if (r8 != r2) {
    0x00093a2a bne 0x93ad2                                       |             goto label_27;
                                                                 |         }
    0x00093a2c ldr.w sb, [r4]                                    |         sb = *(r4);
    0x00093a30 cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x00093a34 beq 0x93b08                                       |             goto label_28;
                                                                 |         }
    0x00093a36 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00093a38 add r1, sp, 8                                     |         r1 += var_8h_2;
    0x00093a3a str.w r8, [sp, 4]                                 |         __asm ("str.w r8, [var_4h_2]");
    0x00093a3e ldr.w sb, [r3]                                    |         sb = *(r3);
    0x00093a42 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00093a44 add r0, sb                                        |         r0 += sb;
    0x00093a46 bl 0xbbf8                                         |         fcn_0000bbf8 (r0, r1);
    0x00093a4a ldr r0, [sp, 8]                                   |         r0 = var_8h_2;
    0x00093a4c cmp r6, r0                                        |         
                                                                 |         if (r6 != r0) {
    0x00093a4e bne 0x93af6                                       |             goto label_29;
                                                                 |         }
                                                                 | label_8:
    0x00093a50 str r0, [r4, 0x18]                                |         *((r4 + 0x18)) = r0;
    0x00093a52 asrs r0, r0, 0x1f                                 |         r0 >>= 0x1f;
    0x00093a54 mov r2, r8                                        |         r2 = r8;
    0x00093a56 str r0, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r0;
    0x00093a58 mov r1, r4                                        |         r1 = r4;
    0x00093a5a mov r0, r5                                        |         r0 = r5;
    0x00093a5c bl 0x936a0                                        |         fcn_000936a0 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |         if (r7 != 0) {
                                                                 | label_9:
    0x00093a60 cbz r7, 0x93a66                                   |             
    0x00093a62 movs r3, 1                                        |             r3 = 1;
    0x00093a64 str r3, [r7]                                      |             *(r7) = r3;
                                                                 |         }
                                                                 | label_7:
    0x00093a66 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x00093a68 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00093a6a bne 0x93adc                                       |             goto label_30;
                                                                 |         }
    0x00093a6c ldr r2, [pc, 0x110]                               |         
    0x00093a6e ldr r3, [pc, 0x10c]                               |         r3 = *(0x93b7e);
    0x00093a70 add r2, pc                                        |         r2 = 0x1275f4;
    0x00093a72 ldr r3, [r2, r3]                                  |         r3 = imp._ITM_deregisterTMCloneTable;
    0x00093a74 ldr r2, [r3]                                      |         r2 = imp._ITM_deregisterTMCloneTable;
    0x00093a76 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00093a78 eors r2, r3                                       |         r2 ^= r3;
    0x00093a7a mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00093a7e bne 0x93b72                                       |             goto label_31;
                                                                 |         }
    0x00093a80 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00093a82 mov r1, r4                                        |         r1 = r4;
    0x00093a84 add sp, 0x18                                      |         
    0x00093a86 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |         
    0x00093a8a b.w 0x11120                                       |         void (*0x11120)() ();
                                                                 | label_25:
    0x00093a8e bl 0x935c0                                        |         fcn_000935c0 (r0, r1);
    0x00093a92 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
                                                                 |         if (r3 != 0) {
    0x00093a94 cbnz r3, 0x93adc                                  |             goto label_30;
                                                                 |         }
    0x00093a96 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
                                                                 |         if (r3 == 0) {
    0x00093a98 cbz r3, 0x93adc                                   |             goto label_30;
                                                                 |         }
    0x00093a9a ldr r3, [r4, 0x30]                                |         r3 = *((r4 + 0x30));
    0x00093a9c movs r6, 4                                        |         r6 = 4;
    0x00093a9e vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00093aa2 cmp r3, r6                                        |         
    0x00093aa4 vstr d16, [r4, 0x50]                              |         __asm ("vstr d16, [r4, 0x50]");
    0x00093aa8 ble 0x93a24                                       |         
                                                                 |     } while (r3 <= r6);
                                                                 | label_26:
    0x00093aaa ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00093aac add r1, sp, 8                                     |     r1 += var_8h_2;
    0x00093aae ldr r0, [r3]                                      |     r0 = *(r3);
    0x00093ab0 add r0, r6                                        |     r0 += r6;
    0x00093ab2 bl 0xbaf0                                         |     fcn_0000baf0 (r0, r1);
    0x00093ab6 ldr r3, [r4, 0x50]                                |     r3 = *((r4 + 0x50));
    0x00093ab8 add r0, r6                                        |     r0 += r6;
    0x00093aba ldr r2, [sp, 8]                                   |     r2 = var_8h_2;
    0x00093abc asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00093abe str r0, [r4, 0x18]                                |     *((r4 + 0x18)) = r0;
    0x00093ac0 str r1, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r1;
    0x00093ac2 adds r3, r3, r2                                   |     r3 += r2;
    0x00093ac4 ldr r2, [r4, 0x54]                                |     r2 = *((r4 + 0x54));
    0x00093ac6 str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x00093ac8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_3;
    0x00093aca adc.w r2, r2, r3                                  |     __asm ("adc.w r2, r2, r3");
    0x00093ace str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x00093ad0 b 0x93a66                                         |     goto label_7;
                                                                 |     do {
                                                                 | label_27:
    0x00093ad2 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00093ad4 blx 0x84f8                                        |         fcn_000084f8 ();
    0x00093ad8 movs r3, 0                                        |         r3 = 0;
    0x00093ada str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
                                                                 | label_30:
    0x00093adc ldr r2, [pc, 0xa4]                                |         
    0x00093ade ldr r3, [pc, 0x9c]                                |         r3 = *(0x93b7e);
    0x00093ae0 add r2, pc                                        |         r2 = 0x127668;
    0x00093ae2 ldr r3, [r2, r3]                                  |         r3 = imp._ITM_deregisterTMCloneTable;
    0x00093ae4 ldr r2, [r3]                                      |         r2 = imp._ITM_deregisterTMCloneTable;
    0x00093ae6 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00093ae8 eors r2, r3                                       |         r2 ^= r3;
    0x00093aea mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00093aee bne 0x93b72                                       |             goto label_31;
                                                                 |         }
    0x00093af0 add sp, 0x18                                      |         
    0x00093af2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_29:
    0x00093af6 add.w r0, sb, r6                                  |         r0 = sb + r6;
    0x00093afa add r1, sp, 4                                     |         r1 += var_4h_2;
    0x00093afc bl 0xbbf8                                         |         fcn_0000bbf8 (r0, r1);
    0x00093b00 ldr.w r8, [sp, 4]                                 |         r8 = var_4h_2;
    0x00093b04 add r0, r6                                        |         r0 += r6;
    0x00093b06 b 0x93a50                                         |         goto label_8;
                                                                 | label_28:
    0x00093b08 ldr r6, [r5, 0xc]                                 |         r6 = *((r5 + 0xc));
    0x00093b0a ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00093b0c ldr.w sl, [r3, 4]                                 |         sl = *((r3 + 4));
    0x00093b10 str.w sl, [r6, 0x10]                              |         __asm ("str.w sl, [r6, 0x10]");
    0x00093b14 cmp.w sl, 0                                       |         
    0x00093b18 beq 0x93ad2                                       |         
                                                                 |     } while (sl == 0);
    0x00093b1a add.w r8, sl, 0x28                                |     r8 = sl + 0x28;
    0x00093b1e mov r0, r8                                        |     r0 = r8;
    0x00093b20 blx 0x8160                                        |     fcn_00008160 ();
    0x00093b24 mov r1, sl                                        |     r1 = sl;
    0x00093b26 mov r3, r0                                        |     r3 = r0;
    0x00093b28 mov r2, sb                                        |     r2 = sb;
    0x00093b2a mov r0, r6                                        |     r0 = r6;
    0x00093b2c mov r6, r3                                        |     r6 = r3;
    0x00093b2e bl 0x1ef60                                        |     fcn_0001ef60 (r0, r1, r2);
    0x00093b32 ldr.w r2, [sl, 0x10]                              |     r2 = *((sl + 0x10));
    0x00093b36 mov r0, r8                                        |     r0 = r8;
    0x00093b38 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00093b3a subs r2, 0x29                                     |     r2 -= 0x29;
    0x00093b3c subs r2, r2, r6                                   |     r2 -= r6;
    0x00093b3e adds r6, 1                                        |     r6++;
    0x00093b40 add r6, r8                                        |     r6 += r8;
    0x00093b42 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00093b44 strd r6, r2, [r3]                                 |     __asm ("strd r6, r2, [r3]");
    0x00093b48 str r2, [r4, 0x30]                                |     *((r4 + 0x30)) = r2;
    0x00093b4a blx 0x8160                                        |     fcn_00008160 ();
    0x00093b4e mov r3, r8                                        |     r3 = r8;
    0x00093b50 mov r2, r0                                        |     r2 = r0;
    0x00093b52 add.w r1, r4, 0x44                                |     r1 = r4 + 0x44;
    0x00093b56 add.w r0, r5, 0x24                                |     r0 = r5 + 0x24;
    0x00093b5a str.w sb, [r4, 0x48]                              |     __asm ("str.w sb, [r4, 0x48]");
    0x00093b5e bl 0x487fc                                        |     fcn_000487fc (r0, r1, r2, r3);
    0x00093b62 mov r0, r6                                        |     r0 = r6;
    0x00093b64 add.w r1, r4, 0x50                                |     r1 = r4 + 0x50;
    0x00093b68 bl 0xbaf0                                         |     fcn_0000baf0 (r0, r1);
    0x00093b6c strd r0, sb, [r4, 0x18]                           |     __asm ("strd r0, sb, [r4, 0x18]");
    0x00093b70 b 0x93a60                                         |     goto label_9;
                                                                 | label_31:
    0x00093b72 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x00093b76 nop                                               |     
    0x00093b78 adr r2, 0x230                                     |     r2 = 0x230;
    0x00093b7a movs r3, r0                                       |     r3 = r0;
    0x00093b7c lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00093b7e movs r0, r0                                       |     
    0x00093b80 adr r2, 0x80                                      |     r2 = 0x80;
    0x00093b82 movs r3, r0                                       |     r3 = r0;
    0x00093b84 adr r1, 0x2c0                                     |     r1 = 0x2c0;
    0x00093b86 movs r3, r0                                       |     r3 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9f004 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0009f004 ()                                      | void fcn_0009f004 (int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
    0x0009f004 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0009f008 mov r4, r0                                        |     r4 = r0;
    0x0009f00a ldr r5, [pc, 0xd0]                                |     
    0x0009f00c sub sp, 0x14                                      |     
    0x0009f00e mov r8, r2                                        |     r8 = r2;
    0x0009f010 add r3, sp, 4                                     |     r3 += var_4h_2;
    0x0009f012 ldr r1, [pc, 0xcc]                                |     r1 = *(0x9f0e2);
    0x0009f014 add r5, pc                                        |     r5 = 0x13e0f6;
    0x0009f016 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0009f018 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x0009f01c ldr r1, [r5, r1]                                  |     
    0x0009f01e ldr r1, [r1]                                      |     r1 = imp._ITM_deregisterTMCloneTable;
    0x0009f020 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x0009f022 mov.w r1, 0                                       |     r1 = 0;
    0x0009f026 mov r1, r4                                        |     r1 = r4;
    0x0009f028 bl 0x9eb30                                        |     fcn_0009eb30 (r0, r1, r2, r3, r4, r5, r6);
    0x0009f02c ldr r6, [sp, 4]                                   |     r6 = var_4h_2;
    0x0009f02e mov sb, r0                                        |     sb = r0;
    0x0009f030 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0009f032 ldr r4, [r3, 0x40]                                |     r4 = *((r3 + 0x40));
    0x0009f034 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0009f036 beq 0x9f0c4                                       |         goto label_2;
                                                                 |     }
    0x0009f038 ldrb r5, [r6]                                     |     r5 = *(r6);
    0x0009f03a lsls r3, r5, 0x18                                 |     r3 = r5 << 0x18;
    0x0009f03c it pl                                             |     
                                                                 |     if (r3 < r5) {
    0x0009f03e movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r5) {
    0x0009f040 bmi 0x9f0c8                                       |         goto label_3;
                                                                 |     }
                                                                 | label_1:
    0x0009f042 subs r5, 2                                        |     r5 -= 2;
    0x0009f044 add r3, r6                                        |     r3 += r6;
    0x0009f046 asrs r6, r5, 0x1f                                 |     r6 = r5 >> 0x1f;
    0x0009f048 str r3, [sp, 4]                                   |     var_4h_2 = r3;
                                                                 | label_0:
    0x0009f04a cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0009f04c ble 0x9f0a8                                       |         goto label_4;
                                                                 |     }
    0x0009f04e ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x0009f052 subs r2, r4, 1                                    |     r2 = r4 - 1;
    0x0009f054 ldr.w sl, [r8, 0x18]                              |     sl = *((r8 + 0x18));
    0x0009f058 asr.w fp, r2, 0x1f                                |     
    0x0009f05c ldr r7, [sp, 4]                                   |     r7 = var_4h_2;
    0x0009f05e mov r1, r2                                        |     r1 = r2;
    0x0009f060 adds r0, r3, r4                                   |     r0 = r3 + r4;
    0x0009f062 mov r4, fp                                        |     r4 = fp;
    0x0009f064 add.w lr, r0, r0, lsl 1                           |     lr = r0 + (r0 << 1);
    0x0009f068 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0009f06c lsl.w lr, lr, 3                                   |     lr <<= 3;
    0x0009f070 add.w r3, sl, r3, lsl 3                           |     r3 = sl + (r3 << 3);
    0x0009f074 add.w ip, sl, lr                                  |     
                                                                 |     do {
    0x0009f078 strd r1, r4, [r3, 0x10]                           |         __asm ("strd r1, r4, [r3, 0x10]");
    0x0009f07c subs r1, 1                                        |         r1--;
    0x0009f07e str r7, [r3]                                      |         *(r3) = r7;
    0x0009f080 sbc r4, r4, 0                                     |         __asm ("sbc r4, r4, 0");
    0x0009f084 strd r5, r6, [r3, 8]                              |         __asm ("strd r5, r6, [r3, 8]");
    0x0009f088 adds r3, 0x18                                     |         r3 += 0x18;
    0x0009f08a cmp r3, ip                                        |         
    0x0009f08c bne 0x9f078                                       |         
                                                                 |     } while (r3 != ip);
    0x0009f08e sub.w lr, lr, 0x18                                |     lr -= 0x18;
    0x0009f092 subs r2, r2, r2                                   |     r2 -= r2;
    0x0009f094 add.w r3, sl, lr                                  |     r3 = sl + lr;
    0x0009f098 str.w r0, [r8, 8]                                 |     __asm ("str.w r0, [r8, 8]");
    0x0009f09c strd r2, fp, [r3, 0x10]                           |     __asm ("strd r2, fp, [r3, 0x10]");
    0x0009f0a0 str.w r7, [sl, lr]                                |     __asm ("str.w r7, [sl, lr]");
    0x0009f0a4 strd r5, r6, [r3, 8]                              |     __asm ("strd r5, r6, [r3, 8]");
                                                                 | label_4:
    0x0009f0a8 ldr r2, [pc, 0x38]                                |     
    0x0009f0aa ldr r3, [pc, 0x34]                                |     r3 = *(0x9f0e2);
    0x0009f0ac add r2, pc                                        |     r2 = 0x13e194;
    0x0009f0ae ldr r3, [r2, r3]                                  |     r3 = imp._ITM_deregisterTMCloneTable;
    0x0009f0b0 ldr r2, [r3]                                      |     r2 = imp._ITM_deregisterTMCloneTable;
    0x0009f0b2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0009f0b4 eors r2, r3                                       |     r2 ^= r3;
    0x0009f0b6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0009f0ba bne 0x9f0d6                                       |         
    0x0009f0bc mov r0, sb                                        |         r0 = sb;
    0x0009f0be add sp, 0x14                                      |         
    0x0009f0c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_2:
    0x0009f0c4 mov r5, r6                                        |         r5 = r6;
    0x0009f0c6 b 0x9f04a                                         |         goto label_0;
                                                                 | label_3:
    0x0009f0c8 add r1, sp, 8                                     |         r1 += var_8h;
    0x0009f0ca mov r0, r6                                        |         r0 = r6;
    0x0009f0cc bl 0xa648                                         |         fcn_0000a648 (r0, r1);
    0x0009f0d0 ldr r5, [sp, 8]                                   |         r5 = var_8h;
    0x0009f0d2 mov r3, r0                                        |         r3 = r0;
    0x0009f0d4 b 0x9f042                                         |         goto label_1;
                                                                 |     }
    0x0009f0d6 blx 0x7e8c                                        |     fcn_00007e8c ();
    0x0009f0da nop                                               |     
    0x0009f0dc ldcl p0, c0, [ip], -8                             |     __asm ("ldcl p0, c0, [ip], -8");
    0x0009f0e0 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x0009f0e2 movs r0, r0                                       |     
    0x0009f0e4 invalid                                           |     
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa9d54 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.000a9d54 ()                                          | void fcn_000a9d54 (int16_t arg1) {
                                                                     |     int16_t var_18h_2;
                                                                     |     int16_t var_bp_0h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_bp_8h;
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_8h_3;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_sp_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_24h_2;
                                                                     |     int32_t var_0h_4;
                                                                     |     int32_t var_8h_5;
                                                                     |     int32_t var_8h_6;
                                                                     |     int32_t var_10h_2;
                                                                     |     int32_t var_4h_2;
                                                                     |     int32_t var_4h_3;
                                                                     |     int32_t var_44h_2;
                                                                     |     int32_t var_44h_3;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_54h;
                                                                     |     int32_t var_58h;
                                                                     |     int32_t var_58h_2;
                                                                     |     int32_t var_60h;
                                                                     |     int32_t var_60h_2;
                                                                     |     int32_t var_68h;
                                                                     |     int32_t var_68h_2;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int32_t var_4h_4;
                                                                     |     int32_t var_ch_5;
                                                                     |     int32_t var_24h_3;
                                                                     |     int32_t var_e4h;
                                                                     |     int32_t var_e8h;
                                                                     |     int32_t var_ech;
                                                                     |     int16_t var_180h;
                                                                     |     int16_t var_184h;
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_8h_2;
                                                                     |     int16_t var_ch_2;
                                                                     |     int16_t var_14h_2;
                                                                     |     int32_t var_20h;
                                                                     |     int32_t var_20h_2;
                                                                     |     int32_t var_28h;
                                                                     |     int32_t var_28h_2;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_1h;
                                                                     |     int32_t var_ch_6;
                                                                     |     int32_t var_24h_4;
                                                                     |     int32_t var_e4h_2;
                                                                     |     int32_t var_ech_2;
                                                                     |     int16_t var_144h;
                                                                     |     int16_t var_0h_3;
                                                                     |     int16_t var_8h_4;
                                                                     |     int32_t var_8h_9;
                                                                     |     int16_t var_14h_3;
                                                                     |     int32_t var_0h_5;
                                                                     |     int32_t var_8h_7;
                                                                     |     int32_t var_8h_8;
                                                                     |     int32_t var_10h_3;
                                                                     |     int16_t var_28h_3;
                                                                     |     int32_t var_4h_5;
                                                                     |     int32_t var_4h_6;
                                                                     |     int32_t var_34h_2;
                                                                     |     int32_t var_34h_3;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_44h;
                                                                     |     int32_t var_ch_7;
                                                                     |     int32_t var_e4h_3;
                                                                     |     int32_t var_e8h_2;
                                                                     |     int32_t var_ech_3;
                                                                     |     int16_t var_154h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch_3;
                                                                     |     int32_t var_ch_4;
                                                                     |     int32_t var_14h_4;
                                                                     |     int32_t var_14h_5;
                                                                     |     int16_t var_1ch_2;
                                                                     |     int32_t var_1ch_3;
                                                                     |     int16_t var_24h;
                                                                     |     r0 = arg1;
    0x000a9d54 svcmi 0xf0e92d                                        |     __asm ("svcmi aav.0x000000ff");
    0x000a9d58 movs r3, 0                                            |     r3 = 0;
    0x000a9d5a sub sp, 0x2c                                          |     
    0x000a9d5c ldr.w r6, [r0, 0xec]                                  |     r6 = *((r0 + 0xec));
    0x000a9d60 mov r4, r0                                            |     r4 = r0;
    0x000a9d62 ldr r2, [pc, 0x214]                                   |     
    0x000a9d64 str r3, [sp, 8]                                       |     var_8h = r3;
    0x000a9d66 strd r3, r3, [sp, 0xc]                                |     __asm ("strd r3, r3, [var_ch_3]");
    0x000a9d6a strd r3, r3, [sp, 0x14]                               |     __asm ("strd r3, r3, [var_14h_4]");
    0x000a9d6e add r2, pc                                            |     r2 = 0x153cec;
    0x000a9d70 strd r3, r3, [sp, 0x1c]                               |     __asm ("strd r3, r3, [var_1ch_2]");
    0x000a9d74 ldr r3, [pc, 0x204]                                   |     r3 = *(0xa9f7c);
    0x000a9d76 ldr r5, [r6, 0x18]                                    |     r5 = *((r6 + 0x18));
    0x000a9d78 ldr.w sl, [r0]                                        |     sl = *(r0);
    0x000a9d7c ldr r3, [r2, r3]                                      |     
    0x000a9d7e ldr r1, [r6, 4]                                       |     r1 = *((r6 + 4));
    0x000a9d80 ldr r3, [r3]                                          |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000a9d82 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x000a9d84 mov.w r3, 0                                           |     r3 = 0;
    0x000a9d88 str r0, [sp, 4]                                       |     var_4h = r0;
    0x000a9d8a ldr.w r0, [sl, 0x10]                                  |     r0 = *((sl + 0x10));
    0x000a9d8e cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x000a9d90 beq.w 0xa9f6c                                         |         goto label_35;
                                                                     |     }
    0x000a9d94 ldr r3, [r0, 0xc]                                     |     r3 = *((r0 + 0xc));
    0x000a9d96 cmp r5, r3                                            |     
                                                                     |     if (r5 == r3) {
    0x000a9d98 beq 0xa9daa                                           |         goto label_8;
                                                                     |     }
    0x000a9d9a add.w r3, r0, 0x10                                    |     r3 = r0 + 0x10;
                                                                     |     do {
    0x000a9d9e mov r0, r3                                            |         r0 = r3;
    0x000a9da0 adds r3, 0x10                                         |         r3 += 0x10;
    0x000a9da2 ldr r2, [r3, -0x4]                                    |         r2 = *((r3 - 0x4));
    0x000a9da6 cmp r5, r2                                            |         
    0x000a9da8 bne 0xa9d9e                                           |         
                                                                     |     } while (r5 != r2);
                                                                     | label_8:
    0x000a9daa ldr r2, [r0]                                          |     r2 = *(r0);
    0x000a9dac mov r0, sl                                            |     r0 = sl;
    0x000a9dae bl 0x3b634                                            |     fcn_0003b634 (r0, r1, r2, r3);
    0x000a9db2 str r0, [r4, 0x78]                                    |     *((r4 + 0x78)) = r0;
    0x000a9db4 mov r1, r0                                            |     r1 = r0;
    0x000a9db6 ldrb r3, [r6, 8]                                      |     r3 = *((r6 + 8));
    0x000a9db8 strb.w r3, [r4, 0x90]                                 |     *((r4 + 0x90)) = r3;
                                                                     |     if (r0 == 0) {
    0x000a9dbc cbz r0, 0xa9de6                                       |         goto label_36;
                                                                     |     }
    0x000a9dbe mov r0, r4                                            |     r0 = r4;
    0x000a9dc0 bl 0x70e88                                            |     r0 = fcn_00070e88 (r0, r1);
    0x000a9dc4 mov r5, r0                                            |     r5 = r0;
    0x000a9dc6 cbz r0, 0xa9de6                                       |     
                                                                     |     while (r8 == 0) {
                                                                     | label_0:
    0x000a9dc8 ldr r2, [pc, 0x1b4]                                   |         
    0x000a9dca ldr r3, [pc, 0x1b0]                                   |         r3 = *(0xa9f7e);
    0x000a9dcc add r2, pc                                            |         r2 = 0x153d50;
    0x000a9dce ldr r3, [r2, r3]                                      |         r3 = imp._ITM_deregisterTMCloneTable;
    0x000a9dd0 ldr r2, [r3]                                          |         r2 = imp._ITM_deregisterTMCloneTable;
    0x000a9dd2 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x000a9dd4 eors r2, r3                                           |         r2 ^= r3;
    0x000a9dd6 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x000a9dda bne.w 0xa9f72                                         |             goto label_37;
                                                                     |         }
    0x000a9dde mov r0, r5                                            |         r0 = r5;
    0x000a9de0 add sp, 0x2c                                          |         
    0x000a9de2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_36:
    0x000a9de6 ldr r1, [r6, 0xc]                                     |         r1 = *((r6 + 0xc));
    0x000a9de8 mov.w r8, 1                                           |         r8 = 1;
    0x000a9dec mov r5, r1                                            |         r5 = r1;
                                                                     |         if (r1 != 0) {
    0x000a9dee cbz r1, 0xa9e00                                       |             
    0x000a9df0 add r0, sp, 4                                         |             r0 += var_4h;
    0x000a9df2 bl 0x3040c                                            |             r0 = fcn_0003040c (r0, r1, r2);
    0x000a9df6 clz r8, r0                                            |             r8 &= r0;
    0x000a9dfa mov r5, r0                                            |             r5 = r0;
    0x000a9dfc lsr.w r8, r8, 5                                       |             r8 >>= 5;
                                                                     |         }
    0x000a9e00 ldr r6, [r6, 0x1c]                                    |         r6 = *((r6 + 0x1c));
    0x000a9e02 cmp r6, 0                                             |         
    0x000a9e04 ite eq                                                |         
                                                                     |         if (r6 != 0) {
    0x000a9e06 moveq r8, 0                                           |             r8 = 0;
                                                                     |         }
                                                                     |         if (r6 != 0) {
    0x000a9e0a and r8, r8, 1                                         |             r8 &= 1;
                                                                     |         }
    0x000a9e0e cmp.w r8, 0                                           |         
    0x000a9e12 beq 0xa9dc8                                           |         
                                                                     |     }
    0x000a9e14 add.w sb, sp, 4                                       |     sb += var_4h;
                                                                     | label_1:
    0x000a9e18 ldr r1, [r6, 8]                                       |     r1 = *((r6 + 8));
                                                                     |     if (r1 == 0) {
    0x000a9e1a cbz r1, 0xa9e2e                                       |         goto label_38;
                                                                     |     }
    0x000a9e1c mov r2, sb                                            |     r2 = sb;
    0x000a9e1e mov r0, r4                                            |     r0 = r4;
    0x000a9e20 bl 0x32c7c                                            |     fcn_00032c7c (r0, r1, r2, r3);
    0x000a9e24 ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
                                                                     |     if (r3 == 0) {
    0x000a9e26 cbz r3, 0xa9e2e                                       |         goto label_38;
                                                                     |     }
    0x000a9e28 ldr r5, [r4, 0xc]                                     |     r5 = *((r4 + 0xc));
    0x000a9e2a cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x000a9e2c bne 0xa9dc8                                           |         goto label_0;
                                                                     |     }
                                                                     | label_38:
    0x000a9e2e ldr r5, [r6, 0xc]                                     |     r5 = *((r6 + 0xc));
    0x000a9e30 mov r7, r8                                            |     r7 = r8;
                                                                     |     if (r5 != 0) {
    0x000a9e32 cbz r5, 0xa9e54                                       |         
    0x000a9e34 mov r1, r6                                            |         r1 = r6;
    0x000a9e36 mov r0, r4                                            |         r0 = r4;
    0x000a9e38 bl 0x32674                                            |         r0 = fcn_00032674 (r0, r1);
    0x000a9e3c mov fp, r0                                            |         
                                                                     |         if (r0 != 0) {
    0x000a9e3e cbnz r0, 0xa9e66                                      |             goto label_39;
                                                                     |         }
    0x000a9e40 movs r5, 7                                            |         r5 = 7;
    0x000a9e42 b 0xa9dc8                                             |         goto label_0;
                                                                     | label_4:
    0x000a9e44 movs r5, 1                                            |         r5 = 1;
                                                                     | label_2:
    0x000a9e46 movs r7, 0                                            |         r7 = 0;
                                                                     | label_3:
    0x000a9e48 movs r3, 0                                            |         r3 = 0;
    0x000a9e4a mov r1, fp                                            |         r1 = fp;
    0x000a9e4c mov r0, sl                                            |         r0 = sl;
    0x000a9e4e str r3, [sp, 8]                                       |         var_8h = r3;
    0x000a9e50 bl 0x18a68                                            |         fcn_00018a68 (r0, r1);
                                                                     |     }
    0x000a9e54 ldr r6, [r6, 0x28]                                    |     r6 = *((r6 + 0x28));
    0x000a9e56 cmp r6, 0                                             |     
    0x000a9e58 ite eq                                                |     
                                                                     |     if (r6 != 0) {
    0x000a9e5a moveq r7, 0                                           |         r7 = 0;
                                                                     |     }
                                                                     |     if (r6 == 0) {
    0x000a9e5c andne r7, r7, 1                                       |         r7 &= 1;
                                                                     |     }
    0x000a9e60 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x000a9e62 bne 0xa9e18                                           |         goto label_1;
                                                                     |     }
    0x000a9e64 b 0xa9dc8                                             |     goto label_0;
                                                                     | label_39:
    0x000a9e66 ldr r3, [r0]                                          |     r3 = *(r0);
    0x000a9e68 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x000a9e6a ble 0xa9eb8                                           |         goto label_40;
                                                                     |     }
    0x000a9e6c movs r7, 0                                            |     r7 = 0;
                                                                     | label_5:
    0x000a9e6e add.w r5, r7, r7, lsl 3                               |     r5 = r7 + (r7 << 3);
    0x000a9e72 add.w r5, fp, r5, lsl 3                               |     r5 = fp + (r5 << 3);
    0x000a9e76 adds r5, 8                                            |     r5 += 8;
                                                                     |     do {
    0x000a9e78 ldr r3, [r4, 0x28]                                    |         r3 = *((r4 + 0x28));
    0x000a9e7a ldr r1, [r5, 0x14]                                    |         r1 = *((r5 + 0x14));
    0x000a9e7c adds r2, r3, 1                                        |         r2 = r3 + 1;
    0x000a9e7e str r2, [r4, 0x28]                                    |         *((r4 + 0x28)) = r2;
    0x000a9e80 str r3, [r5, 0x28]                                    |         *((r5 + 0x28)) = r3;
    0x000a9e82 cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x000a9e84 beq 0xa9f02                                           |             goto label_41;
                                                                     |         }
    0x000a9e86 movs r2, 0                                            |         r2 = 0;
    0x000a9e88 mov r0, r4                                            |         r0 = r4;
    0x000a9e8a bl 0x32c7c                                            |         fcn_00032c7c (r0, r1, r2, r3);
    0x000a9e8e mov r1, r5                                            |         r1 = r5;
    0x000a9e90 mov r0, r4                                            |         r0 = r4;
    0x000a9e92 bl 0xa8e74                                            |         fcn_000a8e74 (r0, r1);
    0x000a9e96 ldr r2, [r6, 0x10]                                    |         r2 = *((r6 + 0x10));
    0x000a9e98 subs r3, r7, 1                                        |         r3 = r7 - 1;
    0x000a9e9a add.w r3, r3, r3, lsl 3                               |         r3 += (r3 << 3);
    0x000a9e9e mov r0, r4                                            |         r0 = r4;
    0x000a9ea0 adds r7, 1                                            |         r7++;
    0x000a9ea2 adds r5, 0x48                                         |         r5 += 0x48;
    0x000a9ea4 add.w r3, r2, r3, lsl 3                               |         r3 = r2 + (r3 << 3);
    0x000a9ea8 movs r2, 0                                            |         r2 = 0;
    0x000a9eaa ldr r1, [r3, 0x1c]                                    |         r1 = *((r3 + 0x1c));
    0x000a9eac bl 0x32c7c                                            |         fcn_00032c7c (r0, r1, r2, r3);
    0x000a9eb0 ldr.w r3, [fp]                                        |         r3 = *(fp);
    0x000a9eb4 cmp r7, r3                                            |         
    0x000a9eb6 blt 0xa9e78                                           |         
                                                                     |     } while (r7 < r3);
                                                                     | label_40:
    0x000a9eb8 str.w fp, [sp, 8]                                     |     __asm ("str.w fp, [var_8h]");
                                                                     | label_7:
    0x000a9ebc ldr r1, [r6, 0x14]                                    |     r1 = *((r6 + 0x14));
                                                                     |     if (r1 == 0) {
    0x000a9ebe cbz r1, 0xa9ecc                                       |         goto label_42;
                                                                     |     }
    0x000a9ec0 mov r0, sb                                            |     r0 = sb;
    0x000a9ec2 bl 0x3040c                                            |     r0 = fcn_0003040c (r0, r1, r2);
    0x000a9ec6 mov r5, r0                                            |     r5 = r0;
    0x000a9ec8 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000a9eca bne 0xa9e46                                           |         goto label_2;
                                                                     |     }
                                                                     | label_42:
    0x000a9ecc ldr r1, [r6, 0x18]                                    |     r1 = *((r6 + 0x18));
    0x000a9ece mov r0, sb                                            |     r0 = sb;
    0x000a9ed0 bl 0x304f0                                            |     fcn_000304f0 (r0, r1, r2);
    0x000a9ed4 ldr r7, [r6, 0x20]                                    |     r7 = *((r6 + 0x20));
    0x000a9ed6 mov r5, r0                                            |     r5 = r0;
                                                                     |     if (r7 == 0) {
    0x000a9ed8 cbz r7, 0xa9efa                                       |         goto label_43;
                                                                     |     }
    0x000a9eda cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000a9edc bne 0xa9e46                                           |         goto label_2;
                                                                     |     }
    0x000a9ede mov.w r3, 0x200                                       |     r3 = 0x200;
    0x000a9ee2 ldr r1, [r7]                                          |     r1 = *(r7);
    0x000a9ee4 mov r0, sb                                            |     r0 = sb;
    0x000a9ee6 str.w fp, [r7, 0x20]                                  |     __asm ("str.w fp, [r7, 0x20]");
    0x000a9eea str r7, [sp, 0xc]                                     |     var_ch_3 = r7;
    0x000a9eec str r3, [sp, 0x1c]                                    |     var_1ch_2 = r3;
    0x000a9eee bl 0x304f0                                            |     r0 = fcn_000304f0 (r0, r1, r2);
    0x000a9ef2 mov r5, r0                                            |     r5 = r0;
                                                                     |     if (r0 == 0) {
    0x000a9ef4 cbz r0, 0xa9f38                                       |         goto label_44;
                                                                     |     }
                                                                     | label_6:
    0x000a9ef6 movs r3, 0                                            |     r3 = 0;
    0x000a9ef8 str r3, [sp, 0x1c]                                    |     var_1ch_2 = r3;
                                                                     | label_43:
    0x000a9efa clz r7, r5                                            |     r7 &= r5;
    0x000a9efe lsrs r7, r7, 5                                        |     r7 >>= 5;
    0x000a9f00 b 0xa9e48                                             |     goto label_3;
                                                                     | label_41:
    0x000a9f02 mov r2, r5                                            |     r2 = r5;
    0x000a9f04 mov r0, r4                                            |     r0 = r4;
    0x000a9f06 bl 0x89708                                            |     fcn_00089708 (r0, r1, r2);
    0x000a9f0a add.w r3, r7, r7, lsl 3                               |     r3 = r7 + (r7 << 3);
    0x000a9f0e mov r1, r0                                            |     r1 = r0;
    0x000a9f10 add.w r3, fp, r3, lsl 3                               |     r3 = fp + (r3 << 3);
    0x000a9f14 str r0, [r3, 0x18]                                    |     *((r3 + 0x18)) = r0;
    0x000a9f16 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000a9f18 beq 0xa9e44                                           |         goto label_4;
                                                                     |     }
    0x000a9f1a ldr r3, [r0, 0x20]                                    |     r3 = *((r0 + 0x20));
    0x000a9f1c adds r7, 1                                            |     r7++;
    0x000a9f1e adds r3, 1                                            |     r3++;
    0x000a9f20 str r3, [r0, 0x20]                                    |     *((r0 + 0x20)) = r3;
    0x000a9f22 mov r0, r4                                            |     r0 = r4;
    0x000a9f24 bl 0x70e88                                            |     fcn_00070e88 (r0, r1);
    0x000a9f28 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x000a9f2c cmp r3, r7                                            |     
                                                                     |     if (r3 <= r7) {
    0x000a9f2e ble 0xa9f60                                           |         goto label_45;
                                                                     |     }
    0x000a9f30 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000a9f32 beq 0xa9e6e                                           |         goto label_5;
                                                                     |     }
    0x000a9f34 mov r5, r0                                            |     r5 = r0;
    0x000a9f36 b 0xa9e46                                             |     goto label_2;
                                                                     | label_44:
    0x000a9f38 ldr r1, [r7, 8]                                       |     r1 = *((r7 + 8));
    0x000a9f3a mov r0, sb                                            |     r0 = sb;
    0x000a9f3c bl 0x304f0                                            |     r0 = fcn_000304f0 (r0, r1, r2);
    0x000a9f40 mov r5, r0                                            |     r5 = r0;
    0x000a9f42 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000a9f44 bne 0xa9ef6                                           |         goto label_6;
                                                                     |     }
    0x000a9f46 ldr r1, [r7, 0xc]                                     |     r1 = *((r7 + 0xc));
    0x000a9f48 mov r0, sb                                            |     r0 = sb;
    0x000a9f4a bl 0x3040c                                            |     r0 = fcn_0003040c (r0, r1, r2);
    0x000a9f4e mov r5, r0                                            |     r5 = r0;
    0x000a9f50 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000a9f52 bne 0xa9ef6                                           |         goto label_6;
                                                                     |     }
    0x000a9f54 ldr r1, [r7, 4]                                       |     r1 = *((r7 + 4));
    0x000a9f56 mov r0, sb                                            |     r0 = sb;
    0x000a9f58 bl 0x3040c                                            |     r0 = fcn_0003040c (r0, r1, r2);
    0x000a9f5c mov r5, r0                                            |     r5 = r0;
    0x000a9f5e b 0xa9ef6                                             |     goto label_6;
                                                                     | label_45:
    0x000a9f60 mov r5, r0                                            |     r5 = r0;
    0x000a9f62 str.w fp, [sp, 8]                                     |     __asm ("str.w fp, [var_8h]");
    0x000a9f66 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000a9f68 beq 0xa9ebc                                           |         goto label_7;
                                                                     |     }
    0x000a9f6a b 0xa9e46                                             |     goto label_2;
                                                                     | label_35:
    0x000a9f6c sub.w r0, r0, 0x80000                                 |     r0 -= 0x80000;
    0x000a9f70 b 0xa9daa                                             |     goto label_8;
                                                                     | label_37:
    0x000a9f72 blx 0x7e8c                                            |     fcn_00007e8c ();
    0x000a9f76 nop                                                   |     
    0x000a9f78 subs r7, 0x22                                         |     r7 -= 0x22;
    0x000a9f7a movs r2, r0                                           |     r2 = r0;
    0x000a9f7c lsls r4, r1, 0xd                                      |     r4 = r1 << 0xd;
    0x000a9f7e movs r0, r0                                           |     
    0x000a9f80 subs r6, 0xc4                                         |     r6 -= 0xc4;
    0x000a9f82 movs r2, r0                                           |     r2 = r0;
    0x000a9f84 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x000a9f88 mov r5, r2                                            |     r5 = r2;
    0x000a9f8a ldr r2, [pc, 0x234]                                   |     
    0x000a9f8c sub sp, 0x15c                                         |     
    0x000a9f8e mov r7, r0                                            |     r7 = r0;
    0x000a9f90 ldr r3, [pc, 0x230]                                   |     r3 = *(0xaa1c4);
    0x000a9f92 add r2, pc                                            |     r2 = 0x154158;
    0x000a9f94 ldr r3, [r2, r3]                                      |     
    0x000a9f96 ldr r3, [r3]                                          |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000a9f98 str r3, [sp, 0x154]                                   |     var_154h = r3;
    0x000a9f9a mov.w r3, 0                                           |     r3 = 0;
    0x000a9f9e blx 0x82a0                                            |     r0 = fcn_000082a0 ();
    0x000a9fa2 mov r4, r0                                            |     r4 = r0;
    0x000a9fa4 ldr r0, [r5]                                          |     r0 = *(r5);
    0x000a9fa6 blx 0x8508                                            |     fcn_00008508 ();
    0x000a9fa8 invalid                                               |     
    0x000a9fac ldr r0, [r5, 4]                                       |     r0 = *((r5 + 4));
    0x000a9fae blx 0x8508                                            |     fcn_00008508 ();
    0x000a9fb2 ldrb.w r3, [r4, 0x5b]                                 |     r3 = *((r4 + 0x5b));
    0x000a9fb6 movs r2, 0                                            |     r2 = 0;
    0x000a9fb8 ldr.w r8, [r4, 0x150]                                 |     r8 = *((r4 + 0x150));
    0x000a9fbc mov r5, r0                                            |     r5 = r0;
    0x000a9fbe str.w r2, [r4, 0x150]                                 |     __asm ("str.w r2, aav.0x000000ff");
                                                                     |     if (r3 == 0) {
    0x000a9fc2 cbz r3, 0xa9ff2                                       |         goto label_46;
                                                                     |     }
    0x000a9fc4 cmp r6, 0                                             |     
    0x000a9fc6 it ne                                                 |     
                                                                     |     if (r6 != 0) {
    0x000a9fc8 cmpne r5, 0                                           |         __asm ("cmpne r5, 0");
                                                                     |     }
                                                                     |     if (r6 != 0) {
    0x000a9fca bne 0xaa000                                           |         goto label_47;
                                                                     |     }
                                                                     |     do {
    0x000a9fcc ldrb.w r3, [r4, 0x5b]                                 |         r3 = *((r4 + 0x5b));
    0x000a9fd0 str.w r8, [r4, 0x150]                                 |         __asm ("str.w r8, aav.0x000000ff");
                                                                     |         if (r3 == 0) {
    0x000a9fd4 cbz r3, 0xaa032                                       |             goto label_48;
                                                                     |         }
                                                                     | label_9:
    0x000a9fd6 ldr r2, [pc, 0x1f0]                                   |         
    0x000a9fd8 ldr r3, [pc, 0x1e8]                                   |         r3 = *(0xaa1c4);
    0x000a9fda add r2, pc                                            |         r2 = 0x1541a8;
    0x000a9fdc ldr r3, [r2, r3]                                      |         r3 = imp._ITM_deregisterTMCloneTable;
    0x000a9fde ldr r2, [r3]                                          |         r2 = imp._ITM_deregisterTMCloneTable;
    0x000a9fe0 ldr r3, [sp, 0x154]                                   |         r3 = var_154h;
    0x000a9fe2 eors r2, r3                                           |         r2 ^= r3;
    0x000a9fe4 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x000a9fe8 bne.w 0xaa1bc                                         |             goto label_49;
                                                                     |         }
    0x000a9fec add sp, 0x15c                                         |         
    0x000a9fee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_46:
    0x000a9ff2 mov r0, r4                                            |         r0 = r4;
    0x000a9ff4 bl 0x16588                                            |         fcn_00016588 (r0);
    0x000a9ff8 cmp r6, 0                                             |         
    0x000a9ffa it ne                                                 |         
                                                                     |         if (r6 != 0) {
    0x000a9ffc cmpne r5, 0                                           |             __asm ("cmpne r5, 0");
                                                                     |         }
    0x000a9ffe beq 0xa9fcc                                           |         
                                                                     |     } while (r6 == 0);
                                                                     | label_47:
    0x000aa000 movs r3, 0                                            |     r3 = 0;
    0x000aa002 add.w sb, sp, 0x44                                    |     sb += var_44h;
    0x000aa006 mov r1, r6                                            |     r1 = r6;
    0x000aa008 str r3, [sp]                                          |     *(sp) = r3;
    0x000aa00a mov r2, r4                                            |     r2 = r4;
    0x000aa00c mov r3, r5                                            |     r3 = r5;
    0x000aa00e mov r0, sb                                            |     r0 = sb;
    0x000aa010 bl 0x77138                                            |     r0 = fcn_00077138 (r0, r1, r2, r3);
    0x000aa014 mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 == 0) {
    0x000aa016 cbz r0, 0xaa054                                       |         goto label_50;
                                                                     |     }
                                                                     | label_10:
    0x000aa018 mov r1, r6                                            |     r1 = r6;
    0x000aa01a mov r0, r7                                            |     r0 = r7;
    0x000aa01c blx 0x8310                                            |     fcn_00008310 ();
                                                                     | label_11:
    0x000aa020 mov r0, sb                                            |     r0 = sb;
    0x000aa022 bl 0x5ab04                                            |     fcn_0005ab04 (r0);
    0x000aa026 ldrb.w r3, [r4, 0x5b]                                 |     r3 = *((r4 + 0x5b));
    0x000aa02a str.w r8, [r4, 0x150]                                 |     __asm ("str.w r8, aav.0x000000ff");
    0x000aa02e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x000aa030 bne 0xa9fd6                                           |         goto label_9;
                                                                     |     }
                                                                     | label_48:
    0x000aa032 ldr r2, [pc, 0x198]                                   |     
    0x000aa034 ldr r3, [pc, 0x18c]                                   |     r3 = *(0xaa1c4);
    0x000aa036 add r2, pc                                            |     r2 = 0x154208;
    0x000aa038 ldr r3, [r2, r3]                                      |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000aa03a ldr r2, [r3]                                          |     r2 = imp._ITM_deregisterTMCloneTable;
    0x000aa03c ldr r3, [sp, 0x154]                                   |     r3 = var_154h;
    0x000aa03e eors r2, r3                                           |     r2 ^= r3;
    0x000aa040 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x000aa044 bne.w 0xaa1bc                                         |         goto label_49;
                                                                     |     }
    0x000aa048 mov r0, r4                                            |     r0 = r4;
    0x000aa04a add sp, 0x15c                                         |     
    0x000aa04c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x000aa050 b.w 0x1536c                                           |     void (*0x1536c)() ();
                                                                     | label_50:
    0x000aa054 ldr r1, [pc, 0x178]                                   |     
    0x000aa056 add.w sl, sp, 0x14                                    |     sl += var_14h_3;
    0x000aa05a ldr r2, [pc, 0x178]                                   |     
    0x000aa05c add.w fp, sp, 0x28                                    |     
    0x000aa060 ldr.w r3, [sb, 0xe4]                                  |     r3 = var_e4h_3;
    0x000aa064 add r1, pc                                            |     r1 = 0x154238;
    0x000aa066 str.w sl, [fp, 0x18]                                  |     __asm ("str.w sl, [var_18h_2]");
    0x000aa06a add r2, pc                                            |     r2 = 0x154244;
    0x000aa06c strd r0, r0, [sl]                                     |     __asm ("strd r0, r0, [sl]");
    0x000aa070 strd r0, r0, [sl, 8]                                  |     __asm ("strd r0, r0, [var_8h_7]");
    0x000aa074 strd r1, r2, [fp, 4]                                  |     __asm ("strd r1, r2, [var_4h_5]");
    0x000aa078 strd r0, r0, [sp, 0x34]                               |     __asm ("strd r0, r0, [var_34h_2]");
    0x000aa07c str r0, [sp, 0x3c]                                    |     var_3ch = r0;
    0x000aa07e str.w r0, [sl, 0x10]                                  |     __asm ("str.w r0, [var_10h_3]");
    0x000aa082 str.w sb, [fp]                                        |     __asm ("str.w sb, [fp]");
                                                                     |     if (r3 == 0) {
    0x000aa086 cbz r3, 0xaa0da                                       |         goto label_51;
                                                                     |     }
    0x000aa088 ldr r1, [r3, 0xc]                                     |     r1 = *((r3 + 0xc));
    0x000aa08a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000aa08c beq 0xaa136                                           |         goto label_52;
                                                                     |     }
    0x000aa08e ldr r3, [r1, 4]                                       |     r3 = *((r1 + 4));
    0x000aa090 mov r2, r0                                            |     r2 = r0;
    0x000aa092 str r1, [sp, 8]                                       |     var_8h_4 = r1;
    0x000aa094 bic r3, r3, 0x200000                                  |     r3 = BIT_MASK (r3, 0x200000);
    0x000aa098 str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x000aa09a str.w r0, [sb, 0xc]                                   |     __asm ("str.w r0, [var_ch_7]");
    0x000aa09e mov r0, sb                                            |     r0 = sb;
    0x000aa0a0 bl 0x32c7c                                            |     fcn_00032c7c (r0, r1, r2, r3);
    0x000aa0a4 ldrb.w r3, [r4, 0x53]                                 |     r3 = *((r4 + 0x53));
    0x000aa0a8 ldr r1, [sp, 8]                                       |     r1 = var_8h_4;
                                                                     |     if (r3 == 0) {
    0x000aa0aa cbnz r3, 0xaa0bc                                      |         
    0x000aa0ac ldr.w r6, [sb, 0xc]                                   |         r6 = var_ch_7;
    0x000aa0b0 cmp r6, 0                                             |         
                                                                     |         if (r6 == 0) {
    0x000aa0b2 beq 0xaa1ac                                           |             goto label_53;
                                                                     |         }
                                                                     | label_14:
    0x000aa0b4 ldr.w r5, [sl]                                        |         r5 = *(sl);
                                                                     |         if (r5 != 0) {
    0x000aa0b8 cbnz r5, 0xaa0c6                                      |             goto label_12;
                                                                     |         }
    0x000aa0ba b 0xaa018                                             |         goto label_10;
                                                                     |     }
    0x000aa0bc ldr.w r5, [sl]                                        |     r5 = *(sl);
    0x000aa0c0 movs r6, 7                                            |     r6 = 7;
    0x000aa0c2 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x000aa0c4 beq 0xaa018                                           |         goto label_10;
                                                                     |     }
                                                                     |     do {
                                                                     | label_12:
    0x000aa0c6 mov r1, r5                                            |         r1 = r5;
    0x000aa0c8 ldr r5, [r5, 0xc]                                     |         r5 = *((r5 + 0xc));
    0x000aa0ca mov r0, r4                                            |         r0 = r4;
    0x000aa0cc bl 0x159dc                                            |         fcn_000159dc (r0, r1);
    0x000aa0d0 cmp r5, 0                                             |         
    0x000aa0d2 bne 0xaa0c6                                           |         
                                                                     |     } while (r5 != 0);
    0x000aa0d4 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x000aa0d6 beq 0xaa020                                           |         goto label_11;
                                                                     |     }
    0x000aa0d8 b 0xaa018                                             |     goto label_10;
                                                                     | label_51:
    0x000aa0da ldr.w r2, [sb, 0xe8]                                  |     r2 = var_e8h_2;
    0x000aa0de cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x000aa0e0 beq 0xaa194                                           |         goto label_54;
                                                                     |     }
    0x000aa0e2 ldr r6, [r2, 0x28]                                    |     r6 = *((r2 + 0x28));
                                                                     |     if (r6 == 0) {
    0x000aa0e4 cbz r6, 0xaa10c                                       |         goto label_55;
                                                                     |     }
    0x000aa0e6 ldr r3, [r6]                                          |     r3 = *(r6);
    0x000aa0e8 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x000aa0ea ble 0xaa10c                                           |         goto label_55;
                                                                     |     }
    0x000aa0ec adds r6, 0x18                                         |     r6 += 0x18;
                                                                     |     do {
    0x000aa0ee ldr r1, [r6, -0x10]                                   |         r1 = *((r6 - 0x10));
                                                                     |         if (r1 != 0) {
    0x000aa0f2 cbz r1, 0xaa100                                       |             
    0x000aa0f4 mov r0, fp                                            |             r0 = fp;
    0x000aa0f6 str r3, [sp, 8]                                       |             var_8h_4 = r3;
    0x000aa0f8 bl 0x301c4                                            |             fcn_000301c4 (r0, r1);
    0x000aa0fc ldr r3, [sp, 8]                                       |             r3 = var_8h_4;
                                                                     |             if (r0 != 0) {
    0x000aa0fe cbnz r0, 0xaa108                                      |                 goto label_56;
                                                                     |             }
                                                                     |         }
    0x000aa100 subs r3, 1                                            |         r3--;
    0x000aa102 add.w r6, r6, 0x10                                    |         r6 += 0x10;
    0x000aa106 bne 0xaa0ee                                           |         
                                                                     |     } while (r3 != 1);
                                                                     | label_56:
    0x000aa108 ldr.w r2, [sb, 0xe8]                                  |     r2 = var_e8h_2;
                                                                     | label_55:
    0x000aa10c ldr r1, [r2, 0x24]                                    |     r1 = *((r2 + 0x24));
                                                                     |     if (r1 != 0) {
    0x000aa10e cbz r1, 0xaa116                                       |         
    0x000aa110 mov r0, fp                                            |         r0 = fp;
    0x000aa112 bl 0x301c4                                            |         fcn_000301c4 (r0, r1);
                                                                     |     }
                                                                     | label_13:
    0x000aa116 movs r3, 0                                            |     r3 = 0;
    0x000aa118 mov r2, r5                                            |     r2 = r5;
    0x000aa11a mov r1, sl                                            |     r1 = sl;
    0x000aa11c mov r0, r7                                            |     r0 = r7;
    0x000aa11e str r3, [sp]                                          |     *(sp) = r3;
    0x000aa120 bl 0x2cac0                                            |     fcn_0002cac0 (r0, r1, r2, r3);
    0x000aa124 ldr.w r5, [sl]                                        |     r5 = *(sl);
    0x000aa128 mov r6, r0                                            |     r6 = r0;
    0x000aa12a cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x000aa12c bne 0xaa0c6                                           |         goto label_12;
                                                                     |     }
    0x000aa12e cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x000aa130 beq.w 0xaa020                                         |         goto label_11;
                                                                     |     }
    0x000aa134 b 0xaa018                                             |     goto label_10;
                                                                     | label_52:
    0x000aa136 ldr r1, [r3, 0x18]                                    |     r1 = *((r3 + 0x18));
                                                                     |     if (r1 == 0) {
    0x000aa138 cbz r1, 0xaa166                                       |         goto label_57;
                                                                     |     }
    0x000aa13a ldr r2, [r1]                                          |     r2 = *(r1);
    0x000aa13c cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x000aa13e ble 0xaa166                                           |         goto label_57;
                                                                     |     }
    0x000aa140 add.w r3, r1, 0x18                                    |     r3 = r1 + 0x18;
                                                                     |     do {
    0x000aa144 ldr r1, [r3, -0x10]                                   |         r1 = *((r3 - 0x10));
                                                                     |         if (r1 != 0) {
    0x000aa148 cbz r1, 0xaa15a                                       |             
    0x000aa14a mov r0, fp                                            |             r0 = fp;
    0x000aa14c strd r2, r3, [sp, 8]                                  |             __asm ("strd r2, r3, [var_8h_4]");
    0x000aa150 bl 0x301c4                                            |             fcn_000301c4 (r0, r1);
    0x000aa154 ldrd r2, r3, [sp, 8]                                  |             __asm ("ldrd r2, r3, [var_8h_4]");
                                                                     |             if (r0 != 0) {
    0x000aa158 cbnz r0, 0xaa162                                      |                 goto label_58;
                                                                     |             }
                                                                     |         }
    0x000aa15a subs r2, 1                                            |         r2--;
    0x000aa15c add.w r3, r3, 0x10                                    |         r3 += 0x10;
    0x000aa160 bne 0xaa144                                           |         
                                                                     |     } while (r2 != 1);
                                                                     | label_58:
    0x000aa162 ldr.w r3, [sb, 0xe4]                                  |     r3 = var_e4h_3;
                                                                     | label_57:
    0x000aa166 ldrsh.w r2, [r3, 0x2a]                                |     r2 = *((r3 + 0x2a));
    0x000aa16a cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x000aa16c ble 0xaa116                                           |         goto label_13;
                                                                     |     }
    0x000aa16e movs r2, 0                                            |     r2 = 0;
                                                                     |     do {
    0x000aa170 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x000aa172 add r3, r2                                            |         r3 += r2;
    0x000aa174 ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
                                                                     |         if (r1 != 0) {
    0x000aa176 cbz r1, 0xaa182                                       |             
    0x000aa178 mov r0, fp                                            |             r0 = fp;
    0x000aa17a str r2, [sp, 8]                                       |             var_8h_4 = r2;
    0x000aa17c bl 0x301c4                                            |             fcn_000301c4 (r0, r1);
    0x000aa180 ldr r2, [sp, 8]                                       |             r2 = var_8h_4;
                                                                     |         }
    0x000aa182 ldr.w r3, [sb, 0xe4]                                  |         r3 = var_e4h_3;
    0x000aa186 adds r6, 1                                            |         r6++;
    0x000aa188 adds r2, 0x14                                         |         r2 += 0x14;
    0x000aa18a ldrsh.w r1, [r3, 0x2a]                                |         r1 = *((r3 + 0x2a));
    0x000aa18e cmp r1, r6                                            |         
    0x000aa190 bgt 0xaa170                                           |         
                                                                     |     } while (r1 > r6);
    0x000aa192 b 0xaa116                                             |     goto label_13;
                                                                     | label_54:
    0x000aa194 mov r0, sb                                            |     r0 = sb;
    0x000aa196 bl 0xa9d54                                            |     r0 = fcn_000a9d54 (r0);
    0x000aa19a mov r6, r0                                            |     r6 = r0;
    0x000aa19c cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa19e bne 0xaa0b4                                           |         goto label_14;
                                                                     |     }
    0x000aa1a0 ldr.w r1, [sb, 0xec]                                  |     r1 = var_ech_3;
    0x000aa1a4 mov r0, fp                                            |     r0 = fp;
    0x000aa1a6 bl 0x30e2c                                            |     fcn_00030e2c (r0, r1);
    0x000aa1aa b 0xaa116                                             |     goto label_13;
                                                                     | label_53:
    0x000aa1ac ldr.w r3, [fp, 8]                                     |     r3 = var_4h_6;
    0x000aa1b0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa1b2 beq 0xaa116                                           |         goto label_13;
                                                                     |     }
    0x000aa1b4 mov r0, fp                                            |     r0 = fp;
    0x000aa1b6 bl 0x30ca4                                            |     fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x000aa1ba b 0xaa116                                             |     goto label_13;
                                                                     | label_49:
    0x000aa1bc blx 0x7e8c                                            |     fcn_00007e8c ();
    0x000aa1c0 subs r4, 0xfe                                         |     r4 -= 0xfe;
    0x000aa1c2 movs r2, r0                                           |     r2 = r0;
    0x000aa1c4 lsls r4, r1, 0xd                                      |     r4 = r1 << 0xd;
    0x000aa1c6 movs r0, r0                                           |     
    0x000aa1c8 subs r4, 0xb6                                         |     r4 -= 0xb6;
    0x000aa1ca movs r2, r0                                           |     r2 = r0;
    0x000aa1cc subs r4, 0x5a                                         |     r4 -= 0x5a;
    0x000aa1ce movs r2, r0                                           |     r2 = r0;
    0x000aa1d0 adds r6, 0x95                                         |     r6 += 0x95;
    0x000aa1d2 vcvt.u32.f32 d24, d7, 9                               |     __asm ("vcvt.u32.f32 d24, d7, 9");
    0x000aa1d6 vtbl.8 d30, {d8, d9}, d29                             |     __asm ("vtbl.8 d30, {d8, d9}, d29");
    0x000aa1da ldr r7, [pc, 0x3c0]                                   |     r7 = *(0xaa59e);
    0x000aa1dc mov r5, r2                                            |     r5 = r2;
    0x000aa1de ldr r2, [pc, 0x15c]                                   |     
    0x000aa1e0 sub sp, 0x14c                                         |     
    0x000aa1e2 mov r8, r0                                            |     r8 = r0;
    0x000aa1e4 ldr r3, [pc, 0x158]                                   |     r3 = *(0xaa340);
    0x000aa1e6 add r2, pc                                            |     r2 = 0x154528;
    0x000aa1e8 ldr r3, [r2, r3]                                      |     
    0x000aa1ea ldr r3, [r3]                                          |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000aa1ec str r3, [sp, 0x144]                                   |     var_144h = r3;
    0x000aa1ee mov.w r3, 0                                           |     r3 = 0;
    0x000aa1f2 blx 0x82a0                                            |     r0 = fcn_000082a0 ();
    0x000aa1f6 mov r4, r0                                            |     r4 = r0;
    0x000aa1f8 ldr r0, [r5]                                          |     r0 = *(r5);
    0x000aa1fa blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa1fe mov sl, r0                                            |     sl = r0;
    0x000aa200 ldr r0, [r5, 4]                                       |     r0 = *((r5 + 4));
    0x000aa202 blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa206 mov sb, r0                                            |     sb = r0;
    0x000aa208 ldr r0, [r5, 0x10]                                    |     r0 = *((r5 + 0x10));
    0x000aa20a blx 0x7da0                                            |     fcn_00007da0 ();
    0x000aa20e ldr r3, [r4, 0x20]                                    |     r3 = *((r4 + 0x20));
    0x000aa210 mov r7, r0                                            |     r7 = r0;
    0x000aa212 ldr r0, [r5, 0x14]                                    |     r0 = *((r5 + 0x14));
    0x000aa214 str r3, [sp, 8]                                       |     var_8h_2 = r3;
    0x000aa216 blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa21a mov r6, r0                                            |     r6 = r0;
    0x000aa21c ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x000aa21e blx 0x7da0                                            |     fcn_00007da0 ();
    0x000aa222 movs r2, 0                                            |     r2 = 0;
    0x000aa224 ldr.w fp, [r4, 0x150]                                 |     fp = *((r4 + 0x150));
    0x000aa228 cmp sl, r2                                            |     
    0x000aa22a it ne                                                 |     
                                                                     |     if (sl != r2) {
    0x000aa22c cmpne sb, r2                                          |         __asm ("cmpne sb, r2");
                                                                     |     }
    0x000aa22e str.w r2, [r4, 0x150]                                 |     __asm ("str.w r2, aav.0x000000ff");
                                                                     |     if (sl == r2) {
    0x000aa232 beq 0xaa296                                           |         goto label_16;
                                                                     |     }
    0x000aa234 ldr r3, [r4, 0x20]                                    |     r3 = *((r4 + 0x20));
    0x000aa236 str r3, [sp, 0xc]                                     |     var_ch_2 = r3;
    0x000aa238 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa23a bne 0xaa2b4                                           |         goto label_59;
                                                                     |     }
                                                                     | label_15:
    0x000aa23c str r7, [sp]                                          |     *(sp) = r7;
    0x000aa23e add r7, sp, 0x34                                      |     r7 += var_34h;
    0x000aa240 mov r3, sb                                            |     r3 = sb;
    0x000aa242 mov r2, r4                                            |     r2 = r4;
    0x000aa244 mov r1, sl                                            |     r1 = sl;
    0x000aa246 mov r0, r7                                            |     r0 = r7;
    0x000aa248 bl 0x77138                                            |     fcn_00077138 (r0, r1, r2, r3);
    0x000aa24c ldr r3, [sp, 0xc]                                     |     r3 = var_ch_2;
    0x000aa24e mov sb, r0                                            |     sb = r0;
    0x000aa250 ldr r2, [r4, 0x20]                                    |     r2 = *((r4 + 0x20));
    0x000aa252 and r3, r3, 0x60000000                                |     r3 &= 0x60000000;
    0x000aa256 orrs r2, r3                                           |     r2 |= r3;
    0x000aa258 str r2, [r4, 0x20]                                    |     *((r4 + 0x20)) = r2;
                                                                     |     if (r0 != 0) {
    0x000aa25a cbnz r0, 0xaa2bc                                      |         goto label_19;
                                                                     |     }
    0x000aa25c ldr r3, [sp, 8]                                       |     r3 = var_8h_2;
    0x000aa25e ands r3, r3, 0x4000000                                |     r3 &= 0x4000000;
                                                                     |     if (r3 == r3) {
    0x000aa262 beq 0xaa2d6                                           |         goto label_60;
                                                                     |     }
    0x000aa264 ldr.w r3, [r7, 0xec]                                  |     r3 = var_ech_2;
                                                                     |     if (r3 == 0) {
    0x000aa268 cbz r3, 0xaa290                                       |         goto label_17;
                                                                     |     }
                                                                     | label_20:
    0x000aa26a ldr r0, [r3, 0x18]                                    |     r0 = *((r3 + 0x18));
    0x000aa26c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000aa26e beq 0xaa32e                                           |         goto label_61;
                                                                     |     }
    0x000aa270 ldr r3, [r4, 0x10]                                    |     r3 = *((r4 + 0x10));
    0x000aa272 ldr r2, [r3, 0xc]                                     |     r2 = *((r3 + 0xc));
    0x000aa274 cmp r0, r2                                            |     
                                                                     |     if (r0 == r2) {
    0x000aa276 beq 0xaa284                                           |         goto label_21;
                                                                     |     }
                                                                     |     do {
    0x000aa278 ldr r2, [r3, 0x1c]                                    |         r2 = *((r3 + 0x1c));
    0x000aa27a adds r3, 0x10                                         |         r3 += 0x10;
    0x000aa27c add.w sb, sb, 1                                       |         sb += var_1h;
    0x000aa280 cmp r0, r2                                            |         
    0x000aa282 bne 0xaa278                                           |         
                                                                     |     } while (r0 != r2);
                                                                     | label_21:
    0x000aa284 mov r1, sl                                            |     r1 = sl;
    0x000aa286 mov r0, r4                                            |     r0 = r4;
    0x000aa288 bl 0x19fe4                                            |     r0 = fcn_00019fe4 (r0, r1);
    0x000aa28c cmp r0, sb                                            |     
                                                                     |     if (r0 == sb) {
    0x000aa28e beq 0xaa324                                           |         goto label_62;
                                                                     |     }
                                                                     |     do {
                                                                     | label_17:
    0x000aa290 mov r0, r7                                            |         r0 = r7;
    0x000aa292 bl 0x5ab04                                            |         fcn_0005ab04 (r0);
                                                                     | label_16:
    0x000aa296 ldr r2, [pc, 0xac]                                    |         
    0x000aa298 ldr r3, [pc, 0xa4]                                    |         r3 = *(0xaa340);
    0x000aa29a str.w fp, [r4, 0x150]                                 |         __asm ("str.w fp, aav.0x000000ff");
    0x000aa29e add r2, pc                                            |         r2 = 0x1545e8;
    0x000aa2a0 ldr r3, [r2, r3]                                      |         r3 = imp._ITM_deregisterTMCloneTable;
    0x000aa2a2 ldr r2, [r3]                                          |         r2 = imp._ITM_deregisterTMCloneTable;
    0x000aa2a4 ldr r3, [sp, 0x144]                                   |         r3 = var_144h;
    0x000aa2a6 eors r2, r3                                           |         r2 ^= r3;
    0x000aa2a8 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x000aa2ac bne 0xaa338                                           |             goto label_63;
                                                                     |         }
    0x000aa2ae add sp, 0x14c                                         |         
    0x000aa2b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_59:
    0x000aa2b4 bic r2, r3, 0x60000000                                |         r2 = BIT_MASK (r3, 0x60000000);
    0x000aa2b8 str r2, [r4, 0x20]                                    |         *((r4 + 0x20)) = r2;
    0x000aa2ba b 0xaa23c                                             |         goto label_15;
                                                                     | label_19:
    0x000aa2bc cmp r6, 0                                             |         
    0x000aa2be beq 0xaa290                                           |         
                                                                     |     } while (r6 == 0);
                                                                     | label_18:
    0x000aa2c0 mov r0, r8                                            |     r0 = r8;
    0x000aa2c2 str r7, [sp]                                          |     *(sp) = r7;
    0x000aa2c4 mov r1, r6                                            |     r1 = r6;
    0x000aa2c6 ldrd r2, r3, [r5, 8]                                  |     __asm ("ldrd r2, r3, [r5, 8]");
    0x000aa2ca bl 0x4bc18                                            |     fcn_0004bc18 (r0, r1, r2, r3, r4);
    0x000aa2ce mov r0, r7                                            |     r0 = r7;
    0x000aa2d0 bl 0x5ab04                                            |     fcn_0005ab04 (r0);
    0x000aa2d4 b 0xaa296                                             |     goto label_16;
                                                                     | label_60:
    0x000aa2d6 ldr.w r0, [r7, 0xe4]                                  |     r0 = var_e4h_2;
                                                                     |     if (r0 == 0) {
    0x000aa2da cbz r0, 0xaa30c                                       |         goto label_64;
                                                                     |     }
    0x000aa2dc ldr r2, [r0, 0xc]                                     |     r2 = *((r0 + 0xc));
                                                                     |     if (r2 == 0) {
    0x000aa2de cbz r2, 0xaa30c                                       |         goto label_64;
                                                                     |     }
    0x000aa2e0 strd r3, r3, [sp, 0x18]                               |     __asm ("strd r3, r3, [sp, 0x18]");
    0x000aa2e4 add r2, sp, 0x14                                      |     r2 += var_14h_2;
    0x000aa2e6 strd r3, r3, [sp, 0x20]                               |     __asm ("strd r3, r3, [var_20h]");
    0x000aa2ea strd r3, r3, [sp, 0x28]                               |     __asm ("strd r3, r3, [var_28h]");
    0x000aa2ee str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x000aa2f0 ldr r1, [r0, 0xc]                                     |     r1 = *((r0 + 0xc));
    0x000aa2f2 mov r0, r7                                            |     r0 = r7;
    0x000aa2f4 str r7, [r2]                                          |     *(r2) = r7;
    0x000aa2f6 bl 0x32c7c                                            |     fcn_00032c7c (r0, r1, r2, r3);
    0x000aa2fa ldr r3, [r7, 0x24]                                    |     r3 = var_24h_4;
    0x000aa2fc cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa2fe beq 0xaa290                                           |         goto label_17;
                                                                     |     }
    0x000aa300 ldr r3, [r7, 0xc]                                     |     r3 = var_ch_6;
    0x000aa302 cmp r3, 0                                             |     
    0x000aa304 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x000aa306 cmpne r6, 0                                           |         __asm ("cmpne r6, 0");
                                                                     |         goto label_65;
                                                                     |     }
                                                                     |     if (r3 == 0) {
                                                                     | label_65:
    0x000aa308 beq 0xaa290                                           |         goto label_17;
                                                                     |     }
    0x000aa30a b 0xaa2c0                                             |     goto label_18;
                                                                     | label_64:
    0x000aa30c ldr.w r3, [r7, 0xec]                                  |     r3 = var_ech_2;
    0x000aa310 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa312 beq 0xaa290                                           |         goto label_17;
                                                                     |     }
    0x000aa314 mov r0, r7                                            |     r0 = r7;
    0x000aa316 bl 0xa9d54                                            |     r0 = fcn_000a9d54 (r0);
    0x000aa31a cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa31c bne 0xaa2bc                                           |         goto label_19;
                                                                     |     }
    0x000aa31e ldr.w r3, [r7, 0xec]                                  |     r3 = var_ech_2;
    0x000aa322 b 0xaa26a                                             |     goto label_20;
                                                                     | label_62:
    0x000aa324 movs r1, 1                                            |     r1 = 1;
    0x000aa326 mov r0, r8                                            |     r0 = r8;
    0x000aa328 blx 0x7f5c                                            |     usleep (r0);
    0x000aa32c b 0xaa290                                             |     goto label_17;
                                                                     | label_61:
    0x000aa32e mov.w sb, 0x8000                                      |     
    0x000aa332 movt sb, 0xffff                                       |     sb = 0xNaN;
    0x000aa336 b 0xaa284                                             |     goto label_21;
                                                                     | label_63:
    0x000aa338 blx 0x7e8c                                            |     fcn_00007e8c ();
    0x000aa33c subs r2, 0xaa                                         |     r2 -= 0xaa;
    0x000aa33e movs r2, r0                                           |     r2 = r0;
    0x000aa340 lsls r4, r1, 0xd                                      |     r4 = r1 << 0xd;
    0x000aa342 movs r0, r0                                           |     
    0x000aa344 subs r1, 0xf2                                         |     r1 -= 0xf2;
    0x000aa346 movs r2, r0                                           |     r2 = r0;
    0x000aa348 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x000aa34c mov r5, r2                                            |     r5 = r2;
    0x000aa34e ldr.w r2, [pc, 0x448]                                 |     
    0x000aa352 sub sp, 0x18c                                         |     
    0x000aa354 ldr.w r3, [pc, 0x444]                                 |     r3 = *(0xaa79c);
    0x000aa358 add r2, pc                                            |     r2 = 0x154af6;
    0x000aa35a str r0, [sp, 8]                                       |     var_8h_3 = r0;
    0x000aa35c ldr r3, [r2, r3]                                      |     
    0x000aa35e ldr r3, [r3]                                          |     r3 = imp._ITM_deregisterTMCloneTable;
    0x000aa360 str r3, [sp, 0x184]                                   |     var_184h = r3;
    0x000aa362 mov.w r3, 0                                           |     r3 = 0;
    0x000aa366 blx 0x82a0                                            |     r0 = fcn_000082a0 ();
    0x000aa36a mov r4, r0                                            |     r4 = r0;
    0x000aa36c ldr r0, [r5]                                          |     r0 = *(r5);
    0x000aa36e blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa372 mov sb, r0                                            |     sb = r0;
    0x000aa374 ldr r0, [r5, 0xc]                                     |     r0 = *((r5 + 0xc));
    0x000aa376 blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa37a mov r7, r0                                            |     r7 = r0;
    0x000aa37c ldr r0, [r5, 0x10]                                    |     r0 = *((r5 + 0x10));
    0x000aa37e blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa382 mov r6, r0                                            |     r6 = r0;
    0x000aa384 ldr r0, [r5, 0x14]                                    |     r0 = *((r5 + 0x14));
    0x000aa386 blx 0x8508                                            |     r0 = fcn_00008508 ();
    0x000aa38a mov r8, r0                                            |     r8 = r0;
    0x000aa38c ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x000aa38e blx 0x7da0                                            |     fcn_00007da0 ();
    0x000aa392 cmp r7, 0                                             |     
    0x000aa394 it ne                                                 |     
                                                                     |     if (r7 != 0) {
    0x000aa396 cmpne r6, 0                                           |         __asm ("cmpne r6, 0");
                                                                     |     }
    0x000aa398 ite ne                                                |     
                                                                     |     if (r7 == 0) {
    0x000aa39a movne r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r7 != 0) {
    0x000aa39c moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x000aa39e cmp.w r8, 0                                           |     
    0x000aa3a2 ite eq                                                |     
                                                                     |     if (r8 != 0) {
    0x000aa3a4 moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r8 == 0) {
    0x000aa3a6 andne r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x000aa3aa cbnz r3, 0xaa3c8                                      |         
                                                                     | label_22:
    0x000aa3ac ldr r2, [pc, 0x3f0]                                   |         
    0x000aa3ae ldr r3, [pc, 0x3ec]                                   |         r3 = *(0xaa79e);
    0x000aa3b0 add r2, pc                                            |         r2 = 0x154b54;
    0x000aa3b2 ldr r3, [r2, r3]                                      |         r3 = imp._ITM_deregisterTMCloneTable;
    0x000aa3b4 ldr r2, [r3]                                          |         r2 = imp._ITM_deregisterTMCloneTable;
    0x000aa3b6 ldr r3, [sp, 0x184]                                   |         r3 = var_184h;
    0x000aa3b8 eors r2, r3                                           |         r2 ^= r3;
    0x000aa3ba mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x000aa3be bne.w 0xaa794                                         |             goto label_66;
                                                                     |         }
    0x000aa3c2 add sp, 0x18c                                         |         
    0x000aa3c4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     |     }
    0x000aa3c8 ldrb.w r3, [r4, 0x5b]                                 |     r3 = *((r4 + 0x5b));
    0x000aa3cc movs r2, 0                                            |     r2 = 0;
    0x000aa3ce ldr.w r1, [r4, 0x150]                                 |     r1 = *((r4 + 0x150));
    0x000aa3d2 mov fp, r0                                            |     
    0x000aa3d4 str.w r2, [r4, 0x150]                                 |     __asm ("str.w r2, aav.0x000000ff");
    0x000aa3d8 str r1, [sp, 0xc]                                     |     var_ch = r1;
    0x000aa3da cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa3dc beq 0xaa4a6                                           |         goto label_67;
                                                                     |     }
                                                                     | label_23:
    0x000aa3de movs r3, 0                                            |     r3 = 0;
    0x000aa3e0 add.w sl, sp, 0x24                                    |     sl += var_24h_2;
    0x000aa3e4 mov r2, sb                                            |     r2 = sb;
    0x000aa3e6 mov r1, r6                                            |     r1 = r6;
    0x000aa3e8 strd r3, r3, [sl]                                     |     __asm ("strd r3, r3, [sl]");
    0x000aa3ec mov r0, r4                                            |     r0 = r4;
    0x000aa3ee strd r3, r3, [sl, 8]                                  |     __asm ("strd r3, r3, [var_8h_5]");
    0x000aa3f2 str.w r3, [sl, 0x10]                                  |     __asm ("str.w r3, [var_10h_2]");
    0x000aa3f6 bl 0x3b634                                            |     fcn_0003b634 (r0, r1, r2, r3);
    0x000aa3fa str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x000aa3fe movs r3, 0                                            |     r3 = 0;
    0x000aa400 ldr r2, [pc, 0x3a0]                                   |     
    0x000aa402 add.w fp, sp, 0x38                                    |     
    0x000aa406 str.w r0, [sl, 0xc]                                   |     __asm ("str.w r0, [var_8h_6]");
    0x000aa40a mov r1, sb                                            |     r1 = sb;
    0x000aa40c ldr r0, [pc, 0x398]                                   |     
    0x000aa40e add.w sb, sp, 0x74                                    |     sb += var_74h;
    0x000aa412 add r2, pc                                            |     r2 = 0x154bba;
    0x000aa414 str.w sl, [fp, 0x18]                                  |     __asm ("str.w sl, [var_18h]");
    0x000aa418 str.w sb, [fp]                                        |     __asm ("str.w sb, [fp]");
    0x000aa41c add r0, pc                                            |     r0 = 0x154bc8;
    0x000aa41e strd r3, r3, [sp, 0x44]                               |     __asm ("strd r3, r3, [var_44h_2]");
    0x000aa422 strd r0, r2, [fp, 4]                                  |     __asm ("strd r0, r2, [var_4h_2]");
    0x000aa426 mov r2, r4                                            |     r2 = r4;
    0x000aa428 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
    0x000aa42a mov r0, sb                                            |     r0 = sb;
    0x000aa42c mov r3, r7                                            |     r3 = r7;
    0x000aa42e bl 0x77138                                            |     r0 = fcn_00077138 (r0, r1, r2, r3);
                                                                     |     if (r0 == 0) {
    0x000aa432 cbnz r0, 0xaa466                                      |         
    0x000aa434 ldr.w r2, [sb, 0xe4]                                  |         r2 = var_e4h;
    0x000aa438 ldr r3, [r4, 0x20]                                    |         r3 = *((r4 + 0x20));
    0x000aa43a str r2, [sp, 0x10]                                    |         var_10h = r2;
    0x000aa43c and r1, r3, 0x4000000                                 |         r1 = r3 & 0x4000000;
    0x000aa440 str r1, [sp, 0x14]                                    |         var_14h = r1;
    0x000aa442 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x000aa444 beq 0xaa4c0                                           |             goto label_68;
                                                                     |         }
    0x000aa446 ldr r2, [r2, 0xc]                                     |         r2 = *((r2 + 0xc));
    0x000aa448 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x000aa44a beq.w 0xaa5c2                                         |             goto label_69;
                                                                     |         }
    0x000aa44e cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x000aa450 beq.w 0xaa626                                         |             goto label_70;
                                                                     |         }
                                                                     | label_25:
    0x000aa454 movs r1, 1                                            |         r1 = 1;
    0x000aa456 ldr r0, [sp, 8]                                       |         r0 = var_8h_3;
    0x000aa458 str r1, [sp]                                          |         *(sp) = r1;
    0x000aa45a mov r3, r8                                            |         r3 = r8;
    0x000aa45c mov r2, r7                                            |         r2 = r7;
    0x000aa45e mov r1, sl                                            |         r1 = sl;
    0x000aa460 bl 0x2cac0                                            |         r0 = fcn_0002cac0 (r0, r1, r2, r3);
                                                                     |         if (r0 == 0) {
    0x000aa464 cbz r0, 0xaa47e                                       |             goto label_24;
                                                                     |         }
                                                                     |     }
                                                                     | label_26:
    0x000aa466 ldr.w r3, [sb, 4]                                     |     r3 = var_4h_4;
                                                                     |     if (r3 == 0) {
    0x000aa46a cbz r3, 0xaa4b6                                       |         goto label_71;
                                                                     |     }
    0x000aa46c ldr r1, [pc, 0x33c]                                   |     
    0x000aa46e str.w sb, [sp]                                        |     __asm ("str.w sb, [sp]");
    0x000aa472 ldr r0, [sp, 8]                                       |     r0 = var_8h_3;
    0x000aa474 ldrd r2, r3, [r5, 4]                                  |     __asm ("ldrd r2, r3, [r5, 4]");
    0x000aa478 add r1, pc                                            |     r1 = 0x154c28;
    0x000aa47a bl 0x4bc18                                            |     fcn_0004bc18 (r0, r1, r2, r3, r4);
                                                                     | label_24:
    0x000aa47e mov r0, sb                                            |     r0 = sb;
    0x000aa480 bl 0x5ab04                                            |     fcn_0005ab04 (r0);
    0x000aa484 ldr.w r5, [sl]                                        |     r5 = *(sl);
                                                                     |     if (r5 == 0) {
    0x000aa488 cbz r5, 0xaa498                                       |         goto label_72;
                                                                     |     }
                                                                     |     do {
    0x000aa48a mov r1, r5                                            |         r1 = r5;
    0x000aa48c ldr r5, [r5, 0xc]                                     |         r5 = *((r5 + 0xc));
    0x000aa48e mov r0, r4                                            |         r0 = r4;
    0x000aa490 bl 0x159dc                                            |         fcn_000159dc (r0, r1);
    0x000aa494 cmp r5, 0                                             |         
    0x000aa496 bne 0xaa48a                                           |         
                                                                     |     } while (r5 != 0);
                                                                     | label_72:
    0x000aa498 ldrb.w r3, [r4, 0x5b]                                 |     r3 = *((r4 + 0x5b));
    0x000aa49c cbz r3, 0xaa4ae                                       |     
                                                                     |     while (1) {
    0x000aa49e ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x000aa4a0 str.w r3, [r4, 0x150]                                 |         __asm ("str.w r3, aav.0x000000ff");
    0x000aa4a4 b 0xaa3ac                                             |         goto label_22;
                                                                     | label_67:
    0x000aa4a6 mov r0, r4                                            |         r0 = r4;
    0x000aa4a8 bl 0x16588                                            |         fcn_00016588 (r0);
    0x000aa4ac b 0xaa3de                                             |         goto label_23;
    0x000aa4ae mov r0, r4                                            |         r0 = r4;
    0x000aa4b0 bl 0x1536c                                            |         fcn_0001536c (r0);
    0x000aa4b4 b 0xaa49e                                             |         
                                                                     |     }
                                                                     | label_71:
    0x000aa4b6 mov r1, r0                                            |     r1 = r0;
    0x000aa4b8 ldr r0, [sp, 8]                                       |     r0 = var_8h_3;
    0x000aa4ba blx 0x8310                                            |     fcn_00008310 ();
    0x000aa4be b 0xaa47e                                             |     goto label_24;
                                                                     | label_68:
    0x000aa4c0 ldr.w ip, [sb, 0xe8]                                  |     ip = var_e8h;
    0x000aa4c4 cmp.w ip, 0                                           |     
                                                                     |     if (ip == 0) {
    0x000aa4c8 beq 0xaa516                                           |         goto label_73;
                                                                     |     }
    0x000aa4ca ldr.w r0, [ip]                                        |     r0 = *(ip);
                                                                     |     if (r0 == 0) {
    0x000aa4ce cbz r0, 0xaa500                                       |         goto label_74;
                                                                     |     }
    0x000aa4d0 ldr.w r3, [sb, 0x10c]                                 |     r3 = var_180h;
                                                                     |     if (r3 == 0) {
    0x000aa4d4 cbz r3, 0xaa500                                       |         goto label_74;
                                                                     |     }
    0x000aa4d6 add r6, sp, 0x180                                     |     r6 += var_180h;
    0x000aa4d8 b 0xaa4e0                                             |     
                                                                     |     while (r0 != r1) {
    0x000aa4da add.w r6, r2, 0xc                                     |         r6 = r2 + 0xc;
                                                                     |         if (r3 == 0) {
    0x000aa4de cbz r3, 0xaa500                                       |             goto label_74;
                                                                     |         }
    0x000aa4e0 ldr r1, [r3]                                          |         r1 = *(r3);
    0x000aa4e2 mov r2, r3                                            |         r2 = r3;
    0x000aa4e4 ldr r3, [r3, 0xc]                                     |         r3 = *((r3 + 0xc));
    0x000aa4e6 cmp r0, r1                                            |         
    0x000aa4e8 bne 0xaa4da                                           |         
                                                                     |     }
    0x000aa4ea str r3, [r6]                                          |     *(r6) = r3;
    0x000aa4ec ldr.w r3, [sl, 4]                                     |     r3 = var_0h_4;
    0x000aa4f0 adds r3, 1                                            |     r3++;
    0x000aa4f2 str.w r3, [sl, 4]                                     |     __asm ("str.w r3, [var_0h_4]");
    0x000aa4f6 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x000aa4fa str.w r2, [sl]                                        |     __asm ("str.w r2, [sl]");
    0x000aa4fe str r3, [r2, 0xc]                                     |     *((r2 + 0xc)) = r3;
                                                                     | label_74:
    0x000aa500 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x000aa502 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x000aa504 bne 0xaa454                                           |         goto label_25;
                                                                     |     }
    0x000aa506 ldr.w r1, [ip, 0x24]                                  |     r1 = *((ip + 0x24));
    0x000aa50a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000aa50c beq 0xaa454                                           |         goto label_25;
                                                                     |     }
    0x000aa50e mov r0, fp                                            |     r0 = fp;
    0x000aa510 bl 0x301c4                                            |     fcn_000301c4 (r0, r1);
    0x000aa514 b 0xaa454                                             |     goto label_25;
                                                                     | label_73:
    0x000aa516 ldr.w r3, [sb, 0xec]                                  |     r3 = var_ech;
    0x000aa51a mov r1, r6                                            |     r1 = r6;
    0x000aa51c ldr r0, [r3, 4]                                       |     r0 = *((r3 + 4));
    0x000aa51e str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x000aa520 blx 0x831c                                            |     fcn_0000831c ();
    0x000aa524 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
                                                                     |     if (r0 == 0) {
    0x000aa526 cbnz r0, 0xaa536                                      |         
    0x000aa528 ldr.w r2, [sl, 0xc]                                   |         r2 = var_8h_6;
    0x000aa52c ldr r1, [r2, 0x48]                                    |         r1 = *((r2 + 0x48));
    0x000aa52e ldr r2, [r3, 0x18]                                    |         r2 = *((r3 + 0x18));
    0x000aa530 cmp r1, r2                                            |         
                                                                     |         if (r1 == r2) {
    0x000aa532 beq.w 0xaa746                                         |             goto label_75;
                                                                     |         }
                                                                     |     }
                                                                     | label_33:
    0x000aa536 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x000aa538 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x000aa53a bne 0xaa454                                           |         goto label_25;
                                                                     |     }
    0x000aa53c mov r0, sb                                            |     r0 = sb;
    0x000aa53e str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x000aa540 bl 0xa9d54                                            |     fcn_000a9d54 (r0);
    0x000aa544 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa546 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa548 bne 0xaa466                                           |         goto label_26;
                                                                     |     }
    0x000aa54a mov r1, r3                                            |     r1 = r3;
    0x000aa54c mov r0, fp                                            |     r0 = fp;
    0x000aa54e bl 0x30e2c                                            |     fcn_00030e2c (r0, r1);
    0x000aa552 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa554 ldr r2, [r3, 0x1c]                                    |     r2 = *((r3 + 0x1c));
    0x000aa556 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x000aa558 beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa55c mov r3, r5                                            |     r3 = r5;
    0x000aa55e str r4, [sp, 0x10]                                    |     var_10h = r4;
    0x000aa560 mov r5, r6                                            |     r5 = r6;
    0x000aa562 add.w fp, sp, 0x180                                   |     
    0x000aa566 mov r4, r2                                            |     r4 = r2;
    0x000aa568 mov r6, r3                                            |     r6 = r3;
    0x000aa56a b 0xaa574                                             |     
                                                                     |     while (r0 == 0) {
                                                                     | label_27:
    0x000aa56c ldr r4, [r4, 0x28]                                    |         r4 = *((r4 + 0x28));
    0x000aa56e cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x000aa570 beq.w 0xaa740                                         |             goto label_76;
                                                                     |         }
    0x000aa574 ldr r0, [r4, 0xc]                                     |         r0 = *((r4 + 0xc));
    0x000aa576 cmp r0, 0                                             |         
    0x000aa578 beq 0xaa56c                                           |         
                                                                     |     }
    0x000aa57a mov r1, r5                                            |     r1 = r5;
    0x000aa57c blx 0x831c                                            |     r0 = fcn_0000831c ();
    0x000aa580 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa582 bne 0xaa56c                                           |         goto label_27;
                                                                     |     }
    0x000aa584 ldr r1, [r4, 0xc]                                     |     r1 = *((r4 + 0xc));
    0x000aa586 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000aa588 beq 0xaa56c                                           |         goto label_27;
                                                                     |     }
    0x000aa58a ldr.w r3, [sb, 0x10c]                                 |     r3 = var_180h;
    0x000aa58e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa590 beq 0xaa56c                                           |         goto label_27;
                                                                     |     }
    0x000aa592 mov lr, fp                                            |     lr = fp;
    0x000aa594 b 0xaa59e                                             |     goto label_77;
                                                                     | label_28:
    0x000aa596 add.w lr, r2, 0xc                                     |     lr = r2 + 0xc;
    0x000aa59a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa59c beq 0xaa56c                                           |         goto label_27;
                                                                     |     }
                                                                     | label_77:
    0x000aa59e ldr r0, [r3]                                          |     r0 = *(r3);
    0x000aa5a0 mov r2, r3                                            |     r2 = r3;
    0x000aa5a2 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x000aa5a4 cmp r1, r0                                            |     
                                                                     |     if (r1 != r0) {
    0x000aa5a6 bne 0xaa596                                           |         goto label_28;
                                                                     |     }
    0x000aa5a8 str.w r3, [lr]                                        |     __asm ("str.w r3, [lr]");
    0x000aa5ac ldr.w r3, [sl, 4]                                     |     r3 = var_0h_4;
    0x000aa5b0 adds r3, 1                                            |     r3++;
    0x000aa5b2 str.w r3, [sl, 4]                                     |     __asm ("str.w r3, [var_0h_4]");
    0x000aa5b6 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x000aa5ba str.w r2, [sl]                                        |     __asm ("str.w r2, [sl]");
    0x000aa5be str r3, [r2, 0xc]                                     |     *((r2 + 0xc)) = r3;
    0x000aa5c0 b 0xaa56c                                             |     goto label_27;
                                                                     | label_69:
    0x000aa5c2 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x000aa5c4 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x000aa5c6 beq 0xaa660                                           |         goto label_78;
                                                                     |     }
    0x000aa5c8 lsls r3, r3, 0x11                                     |     r3 <<= 0x11;
                                                                     |     if (r3 < r3) {
    0x000aa5ca bmi 0xaa660                                           |         goto label_78;
                                                                     |     }
    0x000aa5cc ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa5ce mov r0, r6                                            |     r0 = r6;
    0x000aa5d0 ldr r1, [r3]                                          |     r1 = *(r3);
    0x000aa5d2 blx 0x831c                                            |     r0 = fcn_0000831c ();
    0x000aa5d6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa5d8 bne.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa5dc ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa5de str.w r3, [sl, 0xc]                                   |     __asm ("str.w r3, [var_8h_6]");
                                                                     | label_32:
    0x000aa5e2 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa5e4 ldr r0, [r3]                                          |     r0 = *(r3);
    0x000aa5e6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000aa5e8 beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa5ec ldr.w r3, [sb, 0x10c]                                 |     r3 = var_180h;
    0x000aa5f0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa5f2 beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa5f6 add r6, sp, 0x180                                     |     r6 += var_180h;
    0x000aa5f8 b 0xaa604                                             |     goto label_79;
                                                                     | label_29:
    0x000aa5fa add.w r6, r2, 0xc                                     |     r6 = r2 + 0xc;
    0x000aa5fe cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa600 beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
                                                                     | label_79:
    0x000aa604 ldr r1, [r3]                                          |     r1 = *(r3);
    0x000aa606 mov r2, r3                                            |     r2 = r3;
    0x000aa608 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x000aa60a cmp r1, r0                                            |     
                                                                     |     if (r1 != r0) {
    0x000aa60c bne 0xaa5fa                                           |         goto label_29;
                                                                     |     }
    0x000aa60e str r3, [r6]                                          |     *(r6) = r3;
    0x000aa610 ldr.w r3, [sl, 4]                                     |     r3 = var_0h_4;
    0x000aa614 adds r3, 1                                            |     r3++;
    0x000aa616 str.w r3, [sl, 4]                                     |     __asm ("str.w r3, [var_0h_4]");
    0x000aa61a ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x000aa61e str.w r2, [sl]                                        |     __asm ("str.w r2, [sl]");
    0x000aa622 str r3, [r2, 0xc]                                     |     *((r2 + 0xc)) = r3;
    0x000aa624 b 0xaa454                                             |     goto label_25;
                                                                     | label_70:
    0x000aa626 strd r0, r0, [sp, 0x58]                               |     __asm ("strd r0, r0, [var_58h]");
    0x000aa62a strd r0, r0, [sp, 0x60]                               |     __asm ("strd r0, r0, [var_60h]");
    0x000aa62e strd r0, r0, [sp, 0x68]                               |     __asm ("strd r0, r0, [var_68h]");
    0x000aa632 str r0, [sp, 0x70]                                    |     var_70h = r0;
    0x000aa634 mov r0, sb                                            |     r0 = sb;
    0x000aa636 ldr r3, [r2, 4]                                       |     r3 = *((r2 + 4));
    0x000aa638 bic r3, r3, 0x200000                                  |     r3 = BIT_MASK (r3, 0x200000);
    0x000aa63c str r3, [r2, 4]                                       |     *((r2 + 4)) = r3;
    0x000aa63e add r2, sp, 0x54                                      |     r2 += var_54h;
    0x000aa640 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa642 str.w sb, [r2]                                        |     __asm ("str.w sb, [r2]");
    0x000aa646 ldr r1, [r3, 0xc]                                     |     r1 = *((r3 + 0xc));
    0x000aa648 bl 0x32c7c                                            |     fcn_00032c7c (r0, r1, r2, r3);
    0x000aa64c ldr.w r3, [sb, 0x24]                                  |     r3 = var_24h_3;
    0x000aa650 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa652 beq 0xaa724                                           |         goto label_80;
                                                                     |     }
    0x000aa654 ldr.w r0, [sb, 0xc]                                   |     r0 = var_ch_5;
    0x000aa658 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x000aa65a beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa65e b 0xaa466                                             |     goto label_26;
                                                                     | label_78:
    0x000aa660 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa662 ldr r2, [r3, 0x10]                                    |     r2 = *((r3 + 0x10));
                                                                     |     if (r2 == 0) {
    0x000aa664 cbz r2, 0xaa6c6                                       |         goto label_81;
                                                                     |     }
    0x000aa666 add r3, sp, 0x180                                     |     r3 += var_180h;
    0x000aa668 strd r3, r4, [sp, 0x18]                               |     __asm ("strd r3, r4, [var_1ch]");
    0x000aa66c mov r4, r6                                            |     r4 = r6;
    0x000aa66e mov r6, r2                                            |     r6 = r2;
    0x000aa670 b 0xaa676                                             |     
                                                                     |     while (r0 != 0) {
                                                                     | label_30:
    0x000aa672 ldr r6, [r6, 4]                                       |         r6 = *((r6 + 4));
                                                                     |         if (r6 == 0) {
    0x000aa674 cbz r6, 0xaa6c2                                       |             goto label_82;
                                                                     |         }
    0x000aa676 ldr r0, [r6, 8]                                       |         r0 = *((r6 + 8));
    0x000aa678 mov r1, r4                                            |         r1 = r4;
    0x000aa67a blx 0x831c                                            |         r0 = fcn_0000831c ();
    0x000aa67e cmp r0, 0                                             |         
    0x000aa680 bne 0xaa672                                           |         
                                                                     |     }
    0x000aa682 ldr r1, [r6, 8]                                       |     r1 = *((r6 + 8));
    0x000aa684 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000aa686 beq 0xaa672                                           |         goto label_30;
                                                                     |     }
    0x000aa688 ldr.w r3, [sb, 0x10c]                                 |     r3 = var_180h;
    0x000aa68c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa68e beq 0xaa672                                           |         goto label_30;
                                                                     |     }
    0x000aa690 ldr.w lr, [sp, 0x18]                                  |     lr = var_sp_18h;
    0x000aa694 b 0xaa69e                                             |     goto label_83;
                                                                     | label_31:
    0x000aa696 add.w lr, r0, 0xc                                     |     lr = r0 + 0xc;
    0x000aa69a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa69c beq 0xaa672                                           |         goto label_30;
                                                                     |     }
                                                                     | label_83:
    0x000aa69e ldr r2, [r3]                                          |     r2 = *(r3);
    0x000aa6a0 mov r0, r3                                            |     r0 = r3;
    0x000aa6a2 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x000aa6a4 cmp r1, r2                                            |     
                                                                     |     if (r1 != r2) {
    0x000aa6a6 bne 0xaa696                                           |         goto label_31;
                                                                     |     }
    0x000aa6a8 str.w r3, [lr]                                        |     __asm ("str.w r3, [lr]");
    0x000aa6ac ldr.w r3, [sl, 4]                                     |     r3 = var_0h_4;
    0x000aa6b0 adds r3, 1                                            |     r3++;
    0x000aa6b2 str.w r3, [sl, 4]                                     |     __asm ("str.w r3, [var_0h_4]");
    0x000aa6b6 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x000aa6ba str.w r0, [sl]                                        |     __asm ("str.w r0, [sl]");
    0x000aa6be str r3, [r0, 0xc]                                     |     *((r0 + 0xc)) = r3;
    0x000aa6c0 b 0xaa672                                             |     goto label_30;
                                                                     | label_82:
    0x000aa6c2 mov r6, r4                                            |     r6 = r4;
    0x000aa6c4 ldr r4, [sp, 0x1c]                                    |     r4 = var_1ch;
                                                                     | label_81:
    0x000aa6c6 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa6c8 mov r0, r6                                            |     r0 = r6;
    0x000aa6ca ldr r1, [r3]                                          |     r1 = *(r3);
    0x000aa6cc blx 0x831c                                            |     r0 = fcn_0000831c ();
    0x000aa6d0 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000aa6d2 bne.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa6d6 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x000aa6d8 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa6da str.w r3, [sl, 0xc]                                   |     __asm ("str.w r3, [var_8h_6]");
    0x000aa6de cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x000aa6e0 bne.w 0xaa5e2                                         |         goto label_32;
                                                                     |     }
    0x000aa6e4 ldr r6, [r3, 0x18]                                    |     r6 = *((r3 + 0x18));
    0x000aa6e6 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x000aa6e8 beq.w 0xaa5e2                                         |         goto label_32;
                                                                     |     }
    0x000aa6ec ldr r3, [r6]                                          |     r3 = *(r6);
    0x000aa6ee cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x000aa6f0 ble.w 0xaa5e2                                         |         goto label_32;
                                                                     |     }
    0x000aa6f4 str r4, [sp, 0x14]                                    |     var_14h = r4;
    0x000aa6f6 mov r4, r3                                            |     r4 = r3;
    0x000aa6f8 mov r3, sl                                            |     r3 = sl;
    0x000aa6fa adds r6, 0x18                                         |     r6 += 0x18;
    0x000aa6fc mov sl, sb                                            |     sl = sb;
    0x000aa6fe mov sb, r5                                            |     sb = r5;
    0x000aa700 mov r5, fp                                            |     r5 = fp;
    0x000aa702 mov fp, r3                                            |     
                                                                     |     do {
    0x000aa704 ldr r1, [r6, -0x10]                                   |         r1 = *((r6 - 0x10));
                                                                     |         if (r1 != 0) {
    0x000aa708 cbz r1, 0xaa712                                       |             
    0x000aa70a mov r0, r5                                            |             r0 = r5;
    0x000aa70c bl 0x301c4                                            |             r0 = fcn_000301c4 (r0, r1);
                                                                     |             if (r0 != 0) {
    0x000aa710 cbnz r0, 0xaa71a                                      |                 goto label_84;
                                                                     |             }
                                                                     |         }
    0x000aa712 subs r4, 1                                            |         r4--;
    0x000aa714 add.w r6, r6, 0x10                                    |         r6 += 0x10;
    0x000aa718 bne 0xaa704                                           |         
                                                                     |     } while (r4 != 1);
                                                                     | label_84:
    0x000aa71a mov r5, sb                                            |     r5 = sb;
    0x000aa71c ldr r4, [sp, 0x14]                                    |     r4 = var_14h;
    0x000aa71e mov sb, sl                                            |     sb = sl;
    0x000aa720 mov sl, fp                                            |     sl = fp;
    0x000aa722 b 0xaa5e2                                             |     goto label_32;
                                                                     | label_80:
    0x000aa724 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x000aa726 ldr r1, [r3, 0xc]                                     |     r1 = *((r3 + 0xc));
    0x000aa728 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000aa72a beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa72e ldr.w r3, [fp, 8]                                     |     r3 = var_bp_8h;
    0x000aa732 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x000aa734 beq.w 0xaa454                                         |         goto label_25;
                                                                     |     }
    0x000aa738 mov r0, fp                                            |     r0 = fp;
    0x000aa73a bl 0x30ca4                                            |     fcn_00030ca4 (r0, r1, r2, r3, r4);
    0x000aa73e b 0xaa454                                             |     goto label_25;
                                                                     | label_76:
    0x000aa740 ldr r4, [sp, 0x10]                                    |     r4 = var_10h;
    0x000aa742 mov r5, r6                                            |     r5 = r6;
    0x000aa744 b 0xaa454                                             |     goto label_25;
                                                                     | label_75:
    0x000aa746 ldr.w r2, [sb, 0xec]                                  |     r2 = var_ech;
    0x000aa74a ldr.w lr, [r2, 4]                                     |     
    0x000aa74e cmp.w lr, 0                                           |     
                                                                     |     if (lr == 0) {
    0x000aa752 beq.w 0xaa536                                         |         goto label_33;
                                                                     |     }
    0x000aa756 ldr.w r2, [sb, 0x10c]                                 |     r2 = var_180h;
    0x000aa75a cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x000aa75c beq.w 0xaa536                                         |         goto label_33;
                                                                     |     }
    0x000aa760 add.w ip, sp, 0x180                                   |     
    0x000aa764 b 0xaa770                                             |     goto label_85;
                                                                     | label_34:
    0x000aa766 add.w ip, r1, 0xc                                     |     
    0x000aa76a cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x000aa76c beq.w 0xaa536                                         |         goto label_33;
                                                                     |     }
                                                                     | label_85:
    0x000aa770 ldr r0, [r2]                                          |     r0 = *(r2);
    0x000aa772 mov r1, r2                                            |     r1 = r2;
    0x000aa774 ldr r2, [r2, 0xc]                                     |     r2 = *((r2 + 0xc));
    0x000aa776 cmp lr, r0                                            |     
                                                                     |     if (lr != r0) {
    0x000aa778 bne 0xaa766                                           |         goto label_34;
                                                                     |     }
    0x000aa77a str.w r2, [ip]                                        |     __asm ("str.w r2, [ip]");
    0x000aa77e ldr.w r2, [sl, 4]                                     |     r2 = var_0h_4;
    0x000aa782 adds r2, 1                                            |     r2++;
    0x000aa784 str.w r2, [sl, 4]                                     |     __asm ("str.w r2, [var_0h_4]");
    0x000aa788 ldr.w r2, [sl]                                        |     r2 = *(sl);
    0x000aa78c str.w r1, [sl]                                        |     __asm ("str.w r1, [sl]");
    0x000aa790 str r2, [r1, 0xc]                                     |     *((r1 + 0xc)) = r2;
    0x000aa792 b 0xaa536                                             |     goto label_33;
                                                                     | label_66:
    0x000aa794 blx 0x7e8c                                            |     fcn_00007e8c ();
    0x000aa798 subs r1, 0x38                                         |     r1 -= 0x38;
    0x000aa79a movs r2, r0                                           |     r2 = r0;
    0x000aa79c lsls r4, r1, 0xd                                      |     r4 = r1 << 0xd;
    0x000aa79e movs r0, r0                                           |     
    0x000aa7a0 subs r0, 0xe0                                         |     r0 -= 0xe0;
    0x000aa7a2 movs r2, r0                                           |     r2 = r0;
    0x000aa7a4 ldrh r3, [r3, 0x16]                                   |     r3 = *((r3 + 0x16));
    0x000aa7a6 invalid                                               |     
                                                                     | }

[*] Function popen used 1 times libsqlite3.so.0.8.6