[*] Binary protection state of ld-linux-armhf.so.3

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


[*] Function printf tear down of ld-linux-armhf.so.3

    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x2990 */
                                                         | #include <stdint.h>
                                                         |  
                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                         |  
    ; (fcn) fcn.00002990 ()                              | void fcn_00002990 (int16_t arg_8h, int16_t arg_20h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_94h, int16_t arg_98h, int16_t arg_bch, int16_t arg_e8h, int16_t arg_134h, int16_t arg_138h, int16_t arg_140h, int16_t arg_150h, int16_t arg_154h, int16_t arg_15ch, int16_t arg_160h, int16_t arg_164h, int16_t arg_194h, int16_t arg_19ch, int16_t arg_1b4h, int16_t arg_1b8h, int16_t arg_1bch, int16_t arg_1d4h, int16_t arg_1f8h, int16_t arg_20ch, int16_t arg_210h, int16_t arg_230h, int16_t arg_23ch, int16_t arg_240h, int16_t arg_248h, int16_t arg_250h, int16_t arg_254h, int16_t arg_260h, int16_t arg_0h, int16_t arg_4h, int16_t arg_ch, int16_t arg_10h, int16_t arg_17h, int16_t arg_190h, int16_t arg_238h, int16_t arg3, int16_t arg4) {
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
                                                         |     do {
    0x00001a04 invalid                                   |         
    0x00001a08 cmp r3, 6                                 |         
                                                         |         if (r3 != 6) {
    0x00001a0a beq 0x1a1e                                |             
    0x00001a0c ldr.w r3, [pc, 0x938]                     |             r3 = *(0x00002348);
    0x00001a10 movs r2, 1                                |             r2 = 1;
    0x00001a12 str.w r2, [sl, 0x164]                     |             __asm ("str.w r2, [sl, 0x164]");
    0x00001a16 mov.w r2, -1                              |             r2 = -1;
    0x00001a1a add r3, pc                                |             r3 += pc;
    0x00001a1c str r2, [r3, 0x30]                        |             *((r3 + 0x30)) = r2;
                                                         |         }
    0x00001a1e ldr.w r2, [pc, 0x92c]                     |         r2 = *(0x0000234c);
    0x00001a22 subs r4, 1                                |         r4--;
    0x00001a24 adds r5, 4                                |         r5 += 4;
    0x00001a26 add r2, pc                                |         r2 += pc;
    0x00001a28 ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001a2a adds r3, 1                                |         r3++;
    0x00001a2c str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
                                                         | label_0:
    0x00001a2e ldr.w r3, [pc, 0x920]                     |         r3 = *(0x00002350);
    0x00001a32 cmp r4, 1                                 |         
    0x00001a34 add r3, pc                                |         r3 += pc;
    0x00001a36 str r4, [r3]                              |         *(r3) = r4;
    0x00001a38 ldr.w r3, [pc, 0x918]                     |         r3 = *(0x00002354);
    0x00001a3c add r3, pc                                |         r3 += pc;
    0x00001a3e str r5, [r3]                              |         *(r3) = r5;
                                                         |         if (r4 == 1) {
    0x00001a40 beq.w 0x1e0c                              |             goto label_66;
                                                         |         }
    0x00001a44 ldr r6, [r5, 4]                           |         r6 = *((r5 + 4));
    0x00001a46 mov r1, r8                                |         r1 = r8;
    0x00001a48 mov r0, r6                                |         r0 = r6;
    0x00001a4a bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001a4e cmp r0, 0                                 |         
    0x00001a50 beq 0x1a04                                |         
                                                         |     } while (r0 == 0);
    0x00001a52 mov r1, fp                                |     r1 = fp;
    0x00001a54 mov r0, r6                                |     r0 = r6;
    0x00001a56 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001a5a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00001a5c bne.w 0x1cf4                              |         
    0x00001a60 ldr.w r3, [sl, 0x164]                     |         r3 = *((sl + 0x164));
    0x00001a64 subs r4, 1                                |         r4--;
    0x00001a66 ldr.w r2, [pc, 0x8f0]                     |         r2 = *(0x00002358);
    0x00001a6a adds r5, 4                                |         r5 += 4;
    0x00001a6c cmp r3, 6                                 |         
    0x00001a6e it ne                                     |         
                                                         |         if (r3 == 6) {
    0x00001a70 movne r3, 2                               |             r3 = 2;
                                                         |         }
    0x00001a72 add r2, pc                                |         r2 += pc;
    0x00001a74 it ne                                     |         
                                                         |         if (r3 == 6) {
    0x00001a76 strne r3, [sl, 0x164]                     |             *((sl + 0x164)) = r3;
                                                         |         }
    0x00001a7a ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001a7c adds r3, 1                                |         r3++;
    0x00001a7e str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
    0x00001a80 b 0x1a2e                                  |         goto label_0;
                                                         |     }
    0x00001cf4 ldr r1, [r7, 0x34]                        |     r1 = *((r7 + 0x34));
    0x00001cf6 mov r0, r6                                |     r0 = r6;
    0x00001cf8 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |     if (r0 == 0) {
    0x00001cfc cbnz r0, 0x1d1a                           |         
    0x00001cfe ldr.w r2, [pc, 0x6bc]                     |         r2 = *(0x000023bc);
    0x00001d02 movs r1, 1                                |         r1 = 1;
    0x00001d04 ldr.w r3, [pc, 0x6b8]                     |         r3 = *(0x000023c0);
    0x00001d08 subs r4, 1                                |         r4--;
    0x00001d0a adds r5, 4                                |         r5 += 4;
    0x00001d0c add r2, pc                                |         r2 += pc;
    0x00001d0e add r3, pc                                |         r3 += pc;
    0x00001d10 str r1, [r3, 0x18]                        |         *((r3 + 0x18)) = r1;
    0x00001d12 ldr r3, [r2, 0x10]                        |         r3 = *((r2 + 0x10));
    0x00001d14 add r3, r1                                |         r3 += r1;
    0x00001d16 str r3, [r2, 0x10]                        |         *((r2 + 0x10)) = r3;
    0x00001d18 b 0x1a2e                                  |         goto label_0;
                                                         |     }
    0x00001d1a ldr r1, [r7, 0x30]                        |     r1 = *((r7 + 0x30));
    0x00001d1c mov r0, r6                                |     r0 = r6;
    0x00001d1e bl 0x14f30                                |     fcn_00014f30 (r0, r1, r2, r3);
    0x00001d22 subs.w sb, r4, 2                          |     sb = r4 - 2;
    0x00001d26 it ne                                     |     
                                                         |     if (sb == r4) {
    0x00001d28 movne sb, 1                               |         sb = 1;
                                                         |     }
    0x00001d2c cmp r0, 0                                 |     
    0x00001d2e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d30 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d32 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d36 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d38 bne.w 0x2e86                              |         goto label_67;
                                                         |     }
    0x00001d3c ldr r1, [r7, 0x28]                        |     r1 = *((r7 + 0x28));
    0x00001d3e mov r0, r6                                |     r0 = r6;
    0x00001d40 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d44 cmp r0, 0                                 |     
    0x00001d46 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d48 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d4a andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d4e cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d50 bne.w 0x3098                              |         goto label_68;
                                                         |     }
    0x00001d54 ldr r1, [r7, 0x14]                        |     r1 = *((r7 + 0x14));
    0x00001d56 mov r0, r6                                |     r0 = r6;
    0x00001d58 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d5c cmp r0, 0                                 |     
    0x00001d5e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d60 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d62 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d66 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d68 bne.w 0x35ce                              |         goto label_69;
                                                         |     }
    0x00001d6c ldr r1, [r7, 0x10]                        |     r1 = *((r7 + 0x10));
    0x00001d6e mov r0, r6                                |     r0 = r6;
    0x00001d70 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d74 cmp r0, 0                                 |     
    0x00001d76 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d78 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d7a andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d7e cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d80 bne.w 0x3632                              |         goto label_70;
                                                         |     }
    0x00001d84 ldr r1, [r7, 0xc]                         |     r1 = *((r7 + 0xc));
    0x00001d86 mov r0, r6                                |     r0 = r6;
    0x00001d88 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001d8c cmp r0, 0                                 |     
    0x00001d8e ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001d90 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001d92 andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001d96 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001d98 bne.w 0x34d0                              |         goto label_71;
                                                         |     }
    0x00001d9c ldr r1, [r7, 8]                           |     r1 = *((r7 + 8));
    0x00001d9e mov r0, r6                                |     r0 = r6;
    0x00001da0 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001da4 cmp r0, 0                                 |     
    0x00001da6 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001da8 movne r1, 0                               |         r1 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001daa andeq r1, sb, 1                           |         r1 = sb & 1;
                                                         |     }
    0x00001dae cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00001db0 bne.w 0x403c                              |         goto label_72;
                                                         |     }
    0x00001db4 ldr.w r1, [pc, 0x60c]                     |     r1 = *(0x000023c4);
    0x00001db8 mov r0, r6                                |     r0 = r6;
    0x00001dba add r1, pc                                |     r1 += pc;
    0x00001dbc bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001dc0 cmp r0, 0                                 |     
    0x00001dc2 ite ne                                    |     
                                                         |     if (r0 == 0) {
    0x00001dc4 movne r2, 0                               |         r2 = 0;
                                                         |     }
                                                         |     if (r0 != 0) {
    0x00001dc6 andeq r2, sb, 1                           |         r2 = sb & 1;
                                                         |     }
    0x00001dca cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00001dcc bne.w 0x4066                              |         goto label_73;
                                                         |     }
    0x00001dd0 ldr.w r1, [pc, 0x5f4]                     |     r1 = *(0x000023c8);
    0x00001dd4 mov r0, r6                                |     r0 = r6;
    0x00001dd6 add r1, pc                                |     r1 += pc;
    0x00001dd8 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001ddc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00001dde beq.w 0x3bee                              |         goto label_74;
                                                         |     }
    0x00001de2 ldr.w r1, [pc, 0x5e8]                     |     
    0x00001de6 mov r0, r6                                |     r0 = r6;
    0x00001de8 add r1, pc                                |     r1 = 0x41ba;
    0x00001dea bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001dee cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00001df0 bne.w 0x4206                              |         goto label_75;
                                                         |     }
    0x00001df4 ldr.w r2, [pc, 0x5d8]                     |     r2 = *(0x000023d0);
    0x00001df8 movs r3, 5                                |     r3 = 5;
    0x00001dfa str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00001dfe subs r4, 1                                |     r4--;
    0x00001e00 adds r5, 4                                |     r5 += 4;
    0x00001e02 add r2, pc                                |     r2 += pc;
    0x00001e04 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00001e06 adds r3, 1                                |     r3++;
    0x00001e08 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00001e0a b 0x1a2e                                  |     goto label_0;
                                                         | label_66:
    0x00001e0c ldr r6, [r7, 0x18]                        |     r6 = *((r7 + 0x18));
                                                         | label_65:
    0x00001e0e ldr.w r0, [sl, 0x164]                     |     r0 = *((sl + 0x164));
    0x00001e12 cmp r0, 4                                 |     
                                                         |     if (r0 == 4) {
    0x00001e14 beq.w 0x3bbc                              |         goto label_76;
                                                         |     }
                                                         | label_41:
    0x00001e18 cmp r0, 5                                 |     
                                                         |     if (r0 == 5) {
    0x00001e1a beq.w 0x44b2                              |         goto label_77;
                                                         |     }
    0x00001e1e ldr.w r2, [pc, 0x5b4]                     |     r2 = *(0x000023d4);
    0x00001e22 add r2, pc                                |     r2 += pc;
    0x00001e24 ldr r3, [r2]                              |     r3 = *(r2);
    0x00001e26 cmp r3, 1                                 |     
                                                         |     if (r3 <= 1) {
    0x00001e28 ble.w 0x33fa                              |         goto label_78;
                                                         |     }
    0x00001e2c subs r3, 1                                |     r3--;
    0x00001e2e ldr r1, [r7, 0x40]                        |     r1 = *((r7 + 0x40));
    0x00001e30 str r3, [r2]                              |     *(r2) = r3;
    0x00001e32 ldr.w r3, [pc, 0x5a4]                     |     r3 = *(0x000023d8);
    0x00001e36 add.w r1, r6, r1, lsl 5                   |     r1 = r6 + (r1 << 5);
    0x00001e3a add r3, pc                                |     r3 += pc;
    0x00001e3c ldr r2, [r3, 0x10]                        |     r2 = *((r3 + 0x10));
    0x00001e3e cmp r6, r1                                |     
    0x00001e40 ldr r4, [r3]                              |     r4 = *(r3);
    0x00001e42 add.w r2, r2, 1                           |     r2++;
    0x00001e46 str r2, [r3, 0x10]                        |     *((r3 + 0x10)) = r2;
    0x00001e48 add.w r2, r4, 4                           |     r2 = r4 + 4;
    0x00001e4c str r2, [r3]                              |     *(r3) = r2;
                                                         |     if (r6 >= r1) {
    0x00001e4e bhs 0x1e72                                |         goto label_79;
                                                         |     }
    0x00001e50 movw r2, 0xe551                           |     
    0x00001e54 movt r2, 0x6474                           |     r2 = 0x6474e551;
    0x00001e58 b 0x1e60                                  |     
                                                         |     while (r3 != r2) {
    0x00001e5a adds r6, 0x20                             |         r6 += 0x20;
    0x00001e5c cmp r6, r1                                |         
                                                         |         if (r6 >= r1) {
    0x00001e5e bhs 0x1e72                                |             goto label_79;
                                                         |         }
    0x00001e60 ldr r3, [r6]                              |         r3 = *(r6);
    0x00001e62 cmp r3, r2                                |         
    0x00001e64 bne 0x1e5a                                |         
                                                         |     }
    0x00001e66 ldr.w r3, [pc, 0x574]                     |     r3 = *(0x000023dc);
    0x00001e6a ldr r2, [r6, 0x18]                        |     r2 = *((r6 + 0x18));
    0x00001e6c add r3, pc                                |     r3 += pc;
    0x00001e6e str.w r2, [r3, 0x878]                     |     __asm ("str.w r2, [r3, 0x878]");
                                                         | label_79:
    0x00001e72 bic r0, r0, 4                             |     r0 = BIT_MASK (r0, 4);
    0x00001e76 ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x00001e78 cmp r0, 2                                 |     
                                                         |     if (r0 == 2) {
    0x00001e7a beq.w 0x40b6                              |         goto label_80;
                                                         |     }
    0x00001e7e movs r3, 0                                |     r3 = 0;
    0x00001e80 mov.w r2, 0x20000000                      |     r2 = 0x20000000;
    0x00001e84 strd r2, r3, [sp]                         |     __asm ("strd r2, r3, [sp]");
    0x00001e88 mov r0, r3                                |     r0 = r3;
    0x00001e8a mov r2, r3                                |     r2 = r3;
    0x00001e8c bl 0x684c                                 |     fcn_0000684c (r0, r1, r2, r3, r4, r5);
                                                         | label_50:
    0x00001e90 ldr.w r3, [pc, 0x54c]                     |     r3 = *(0x000023e0);
    0x00001e94 ldr.w r2, [sl, 0x164]                     |     r2 = *((sl + 0x164));
    0x00001e98 add r3, pc                                |     r3 += pc;
    0x00001e9a ldr.w fp, [r3]                            |     fp = *(r3);
                                                         |     if (r2 == 0) {
    0x00001e9e cbnz r2, 0x1eca                           |         
    0x00001ea0 ldr.w r2, [r3, 0x5f0]                     |         r2 = *((r3 + 0x5f0));
                                                         |         if (r2 == 0) {
    0x00001ea4 cbz r2, 0x1eca                            |             goto label_81;
                                                         |         }
    0x00001ea6 ldr.w r1, [fp, 0x58]                      |         r1 = *(arg_58h);
                                                         |         if (r1 == 0) {
    0x00001eaa cbz r1, 0x1eca                            |             goto label_81;
                                                         |         }
    0x00001eac ldr.w r0, [r3, 0x5cc]                     |         r0 = *((r3 + 0x5cc));
    0x00001eb0 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x00001eb2 ldr r3, [r1, 4]                           |         r3 = *((r1 + 4));
    0x00001eb4 ldr r0, [r0, 4]                           |         r0 = *((r0 + 4));
    0x00001eb6 add r0, r2                                |         r0 += r2;
    0x00001eb8 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
    0x00001ebc ldr r1, [r2, 4]                           |         r1 = *((r2 + 4));
    0x00001ebe add r1, r3                                |         r1 += r3;
    0x00001ec0 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00001ec4 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00001ec6 beq.w 0x435e                              |             goto label_82;
                                                         |         }
                                                         |     }
                                                         | label_81:
    0x00001eca ldr.w r3, [pc, 0x518]                     |     r3 = *(0x000023e4);
    0x00001ece ldrh.w r2, [fp, 0x15c]                    |     r2 = *(arg_15ch);
    0x00001ed2 add r3, pc                                |     r3 += pc;
    0x00001ed4 str.w r3, [fp, 4]                         |     __asm ("str.w r3, [arg_4h]");
    0x00001ed8 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00001eda ldrd r6, r3, [fp, 0x154]                  |     __asm ("ldrd r6, r3, [arg_154h]");
    0x00001ede ldr r2, [r7, 0x3c]                        |     r2 = *((r7 + 0x3c));
    0x00001ee0 str r3, [r2]                              |     *(r2) = r3;
    0x00001ee2 ldr r3, [r7, 0x2c]                        |     r3 = *((r7 + 0x2c));
    0x00001ee4 ldr r3, [r3]                              |     r3 = *(r3);
    0x00001ee6 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00001ee8 beq.w 0x2ed2                              |         goto label_11;
                                                         |     }
    0x00001eec ldr.w r1, [pc, 0x4f8]                     |     r1 = *(0x000023e8);
    0x00001ef0 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00001ef2 ldrd r5, r4, [r7, 0x3c]                   |     __asm ("ldrd r5, r4, [r7, 0x3c]");
    0x00001ef6 add r1, pc                                |     r1 += pc;
    0x00001ef8 ldr r0, [r1]                              |     r0 = *(r1);
                                                         | label_9:
    0x00001efa subs r3, 3                                |     r3 -= 3;
    0x00001efc cmp r3, 0x1c                              |     
                                                         |     if (r3 > 0x1c) {
    0x00001efe bhi.w 0x2ec8                              |         goto label_83;
                                                         |     }
                                                         |     /* switch table (29 cases) at 0x1f06 */
    0x00001f02 tbh [pc, r3, lsl 1]                       |     __asm ("tbh [pc, r3, lsl 1]");
                                                         | label_10:
    0x00001f88 ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00001f8a mov.w r1, -1                              |     r1 = -1;
    0x00001f8e ldr.w r2, [fp, 0x194]                     |     r2 = *(arg_194h);
    0x00001f92 str.w r1, [fp, 0x1b4]                     |     __asm ("str.w r1, [arg_1b4h]");
    0x00001f96 lsls r3, r3, 5                            |     r3 <<= 5;
    0x00001f98 adds r2, 1                                |     r2++;
    0x00001f9a str.w r2, [fp, 0x194]                     |     __asm ("str.w r2, [arg_194h]");
    0x00001f9e movs r2, 0                                |     r2 = 0;
    0x00001fa0 adds r4, r6, r3                           |     r4 = r6 + r3;
    0x00001fa2 strd r2, r2, [fp, 0x1b8]                  |     __asm ("strd r2, r2, [fp, 0x1b8]");
    0x00001fa6 cmp r6, r4                                |     
                                                         |     if (r6 >= r4) {
    0x00001fa8 bhs.w 0x37f6                              |         goto label_84;
                                                         |     }
    0x00001fac ldr.w r3, [pc, 0x444]                     |     r3 = *(0x000023f4);
    0x00001fb0 movw r5, 0xe551                           |     
    0x00001fb4 ldr.w r1, [pc, 0x440]                     |     r1 = *(0x000023f8);
    0x00001fb8 add.w r8, r4, 0x20                        |     r8 = r4 + 0x20;
    0x00001fbc ldr.w r0, [pc, 0x43c]                     |     r0 = *(0x000023fc);
    0x00001fc0 movt r5, 0x6474                           |     r5 = 0x6474e551;
    0x00001fc4 add r3, pc                                |     r3 += pc;
    0x00001fc6 ldr.w sb, [pc, 0x438]                     |     sb = *(0x00002400);
    0x00001fca ldr r3, [r3, 0x10]                        |     r3 = *((r3 + 0x10));
    0x00001fcc add r1, pc                                |     r1 += pc;
    0x00001fce str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00001fd0 movw r2, 0xe552                           |     
    0x00001fd4 add r0, pc                                |     r0 += pc;
    0x00001fd6 str r1, [r7, 0x28]                        |     *((r7 + 0x28)) = r1;
    0x00001fd8 rsbs r3, r3, 0                            |     r3 -= ;
    0x00001fda adds r1, 0x14                             |     r1 += 0x14;
    0x00001fdc str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x00001fde add sb, pc                                |     sb += pc;
    0x00001fe0 ldr.w r3, [pc, 0x420]                     |     r3 = *(0x00002404);
    0x00001fe4 movt r2, 0x6474                           |     r2 = 0x6474e552;
    0x00001fe8 str r1, [r7, 0x20]                        |     *((r7 + 0x20)) = r1;
    0x00001fea add.w r1, r0, 0x20                        |     r1 = r0 + 0x20;
    0x00001fee str r0, [r7, 0x14]                        |     *((r7 + 0x14)) = r0;
    0x00001ff0 add r3, pc                                |     r3 += pc;
    0x00001ff2 str r1, [r7, 0x10]                        |     *((r7 + 0x10)) = r1;
    0x00001ff4 str r3, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r3;
    0x00001ff6 ldr.w r3, [pc, 0x410]                     |     r3 = *(0x00002408);
    0x00001ffa str r4, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r4;
    0x00001ffc add r3, pc                                |     r3 += pc;
    0x00001ffe str r3, [r7, 0x18]                        |     *((r7 + 0x18)) = r3;
    0x00002000 add.w r3, r6, 0x20                        |     r3 = r6 + 0x20;
                                                         |     do {
                                                         | label_4:
    0x00002004 ldr r1, [r3, -0x20]                       |         r1 = *((r3 - 0x20));
    0x00002008 cmp r1, 7                                 |         
                                                         |         if (r1 <= 7) {
    0x0000200a bhi 0x2026                                |             
                                                         |             if (r1 == 0) {
    0x0000200c cbz r1, 0x2040                            |                 goto label_3;
                                                         |             }
    0x0000200e subs r1, 1                                |             r1--;
    0x00002010 cmp r1, 6                                 |             
                                                         |             if (r1 > 6) {
    0x00002012 bhi 0x2040                                |                 goto label_3;
                                                         |             }
                                                         |             /* switch table (8 cases) at 0x2018 */
    0x00002014 tbh [pc, r1, lsl 1]                       |             __asm ("tbh [pc, r1, lsl 1]");
                                                         |         }
    0x00002026 cmp r1, r5                                |         
                                                         |         if (r1 == r5) {
    0x00002028 beq.w 0x2e40                              |             goto label_85;
                                                         |         }
    0x0000202c cmp r1, r2                                |         
                                                         |         if (r1 == r2) {
    0x0000202e bne 0x2040                                |             
    0x00002030 ldr r1, [r3, -0x18]                       |             r1 = *((r3 - 0x18));
    0x00002034 str.w r1, [fp, 0x250]                     |             __asm ("str.w r1, [arg_250h]");
    0x00002038 ldr r1, [r3, -0xc]                        |             r1 = *((r3 - 0xc));
    0x0000203c str.w r1, [fp, 0x254]                     |             __asm ("str.w r1, [arg_254h]");
                                                         |         }
                                                         | label_3:
    0x00002040 adds r3, 0x20                             |         r3 += 0x20;
    0x00002042 cmp r8, r3                                |         
    0x00002044 bne 0x2004                                |         
                                                         |     } while (r8 != r3);
                                                         | label_5:
    0x00002046 ldr r4, [r7, 0x3c]                        |     r4 = *((r7 + 0x3c));
                                                         | label_64:
    0x00002048 movw r5, 0xe553                           |     
    0x0000204c movt r5, 0x6474                           |     r5 = 0x6474e553;
    0x00002050 b 0x2056                                  |     
                                                         |     while (r3 != r5) {
    0x00002052 cmp r6, r4                                |         
                                                         |         if (r6 == r4) {
    0x00002054 beq 0x206e                                |             goto label_86;
                                                         |         }
                                                         | label_1:
    0x00002056 ldr r3, [r4, -0x20]!                      |         r3 = *((r4 -= 0x20));
    0x0000205a cmp r3, r5                                |         
    0x0000205c bne 0x2052                                |         
                                                         |     }
    0x0000205e mov r2, r4                                |     r2 = r4;
    0x00002060 mov.w r1, -1                              |     r1 = -1;
    0x00002064 mov r0, fp                                |     r0 = fp;
    0x00002066 bl 0x596c                                 |     fcn_0000596c (r0, r1);
    0x0000206a cmp r6, r4                                |     
                                                         |     if (r6 != r4) {
    0x0000206c bne 0x2056                                |         goto label_1;
                                                         |     }
                                                         | label_86:
    0x0000206e ldr.w r3, [fp, 0x230]                     |     r3 = *(arg_230h);
    0x00002072 ldrd r2, r1, [fp, 0x1b8]                  |     __asm ("ldrd r2, r1, [arg_1b8h]");
                                                         |     if (r3 != 0) {
    0x00002076 cbz r3, 0x2082                            |         
                                                         | label_28:
    0x00002078 ldr.w r0, [fp]                            |         r0 = *(fp);
    0x0000207c add r3, r0                                |         r3 += r0;
    0x0000207e str.w r3, [fp, 0x230]                     |         __asm ("str.w r3, [arg_230h]");
                                                         |     }
                                                         |     if (r2 == 0) {
    0x00002082 cbnz r2, 0x208c                           |         
                                                         | label_49:
    0x00002084 mov.w r3, -1                              |         r3 = -1;
    0x00002088 str.w r3, [fp, 0x1b8]                     |         __asm ("str.w r3, [arg_1b8h]");
                                                         |     }
                                                         |     if (r1 == 0) {
    0x0000208c cbnz r1, 0x2096                           |         
    0x0000208e mov.w r3, -1                              |         r3 = -1;
    0x00002092 str.w r3, [fp, 0x1bc]                     |         __asm ("str.w r3, [arg_1bch]");
                                                         |     }
    0x00002096 ldr r3, [pc, 0x374]                       |     
    0x00002098 add r3, pc                                |     r3 = 0x44aa;
    0x0000209a ldr.w r2, [r3, 0x5b4]                     |     r2 = *(0x4a5e);
    0x0000209e cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000020a0 beq.w 0x323c                              |         goto label_87;
                                                         |     }
                                                         | label_12:
    0x000020a4 ldr r3, [pc, 0x368]                       |     
    0x000020a6 add r3, pc                                |     r3 = 0x44ba;
    0x000020a8 ldr.w r2, [r3, 0x5f0]                     |     r2 = *(0x4aaa);
                                                         |     if (r2 != 0) {
    0x000020ac cbz r2, 0x20e0                            |         
    0x000020ae ldr.w r1, [r3, 0x5cc]                     |         r1 = *((r3 + 0x5cc));
    0x000020b2 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x000020b4 ldr.w r5, [r3, 0x5b4]                     |         r5 = *((r3 + 0x5b4));
    0x000020b8 ldr r4, [r1, 4]                           |         r4 = *((r1 + 4));
    0x000020ba ldr r0, [r5]                              |         r0 = *(r5);
    0x000020bc add r4, r2                                |         r4 += r2;
    0x000020be mov r1, r4                                |         r1 = r4;
    0x000020c0 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |         if (r0 == 0) {
    0x000020c4 cbz r0, 0x20e0                            |             goto label_88;
                                                         |         }
    0x000020c6 ldr r3, [pc, 0x34c]                       |         
    0x000020c8 movs r2, 0                                |         r2 = 0;
    0x000020ca movs r1, 1                                |         r1 = 1;
    0x000020cc add r3, pc                                |         r3 = 0x44e6;
    0x000020ce str r2, [r3, 0x30]                        |         *((r3 + 0x30)) = r2;
    0x000020d0 ldr r2, [r5, 4]                           |         r2 = *((r5 + 4));
    0x000020d2 str r4, [r3, 0x2c]                        |         *((r3 + 0x2c)) = r4;
    0x000020d4 str r1, [r3, 0x34]                        |         *((r3 + 0x34)) = r1;
    0x000020d6 cmp r2, 0                                 |         
                                                         |         if (r2 != 0) {
    0x000020d8 bne.w 0x4476                              |             goto label_89;
                                                         |         }
    0x000020dc adds r3, 0x2c                             |         r3 += 0x2c;
    0x000020de str r3, [r5, 4]                           |         *((r5 + 4)) = r3;
                                                         |     }
                                                         | label_88:
    0x000020e0 ldr r3, [pc, 0x334]                       |     
    0x000020e2 add r3, pc                                |     r3 = 0x44fe;
    0x000020e4 ldrb.w r3, [r3, 0x730]                    |     r3 = *((r3 + 0x730));
    0x000020e8 lsls r3, r3, 0x1d                         |     r3 <<= 0x1d;
                                                         |     if (r3 >= r3) {
    0x000020ea bpl.w 0x4428                              |         goto label_90;
                                                         |     }
    0x000020ee ldr r3, [r7, 0x30]                        |     r3 = *((r7 + 0x30));
    0x000020f0 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000020f2 bne.w 0x22a0                              |         goto label_91;
                                                         |     }
    0x000020f6 ldr.w r2, [fp, 8]                         |     r2 = *(arg_8h);
    0x000020fa cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000020fc beq.w 0x227c                              |         goto label_92;
                                                         |     }
    0x00002100 ldr r3, [r2]                              |     r3 = *(r2);
    0x00002102 add.w r1, fp, 0x20                        |     r1 += arg_20h;
                                                         |     if (r3 == 0) {
    0x00002106 cbz r3, 0x2174                            |         goto label_93;
                                                         |     }
    0x00002108 movw r6, 0xfdff                           |     
    0x0000210c movw lr, 0xfeff                           |     
    0x00002110 movw r8, 0xff41                           |     
    0x00002114 movw ip, 0xfe35                           |     
    0x00002118 movs r5, 0x22                             |     r5 = 0x22;
    0x0000211a movt r6, 0x6fff                           |     r6 = 0x6ffffdff;
    0x0000211e movt lr, 0x6fff                           |     lr = 0x6ffffeff;
    0x00002122 movt r8, 0x6fff                           |     r8 = 0x6fffff41;
    0x00002126 movt ip, 0x6fff                           |     ip = 0x6ffffe35;
    0x0000212a movt r5, 0x7000                           |     r5 = (r5 & 0xFFFF) | 0x70000000;
    0x0000212e mvn r4, 0x90000000                        |     r4 = ~0x90000000;
                                                         |     do {
    0x00002132 cmp r3, 0x22                              |         
                                                         |         if (r3 >= 0x22) {
    0x00002134 bls 0x2168                                |             
    0x00002136 subs r0, r4, r3                           |             r0 = r4 - r3;
    0x00002138 cmp r0, 0xf                               |             
    0x0000213a it ls                                     |             
                                                         |             if (r0 > 0xf) {
    0x0000213c subls r3, r5, r3                          |                 r3 = r5 - r3;
                                                         |             }
                                                         |             if (r0 < 0xf) {
    0x0000213e bls 0x2168                                |                 goto label_94;
                                                         |             }
    0x00002140 sbfx r0, r3, 0, 0x1f                      |             __asm ("sbfx r0, r3, 0, 0x1f");
    0x00002144 cmn.w r0, 4                               |             
    0x00002148 it hi                                     |             
                                                         |             if (r0 > 4) {
    0x0000214a rsbhi r3, r0, 0x32                        |                 __asm ("rsbhi r3, r0, 0x32");
                                                         |             }
                                                         |             if (r0 > 4) {
    0x0000214e bhi 0x2168                                |                 goto label_94;
                                                         |             }
    0x00002150 subs r0, r6, r3                           |             r0 = r6 - r3;
    0x00002152 cmp r0, 0xb                               |             
    0x00002154 it ls                                     |             
                                                         |             if (r0 > 0xb) {
    0x00002156 subls r3, ip, r3                          |                 r3 = ip - r3;
                                                         |             }
                                                         |             if (r0 < 0xb) {
    0x0000215a bls 0x2168                                |                 goto label_94;
                                                         |             }
    0x0000215c sub.w r0, lr, r3                          |             r0 = lr - r3;
    0x00002160 cmp r0, 0xa                               |             
                                                         |             if (r0 > 0xa) {
    0x00002162 bhi 0x216c                                |                 goto label_95;
                                                         |             }
    0x00002164 sub.w r3, r8, r3                          |             r3 = r8 - r3;
                                                         |         }
                                                         | label_94:
    0x00002168 str.w r2, [r1, r3, lsl 2]                 |         __asm ("str.w r2, [r1, r3, lsl 2]");
                                                         | label_95:
    0x0000216c ldr r3, [r2, 8]!                          |         r3 = *((r2 += 8));
    0x00002170 cmp r3, 0                                 |         
    0x00002172 bne 0x2132                                |         
                                                         |     } while (r3 != 0);
                                                         | label_93:
    0x00002174 ldr.w r3, [fp]                            |     r3 = *(fp);
    0x00002178 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0000217a beq 0x21e8                                |         
    0x0000217c ldr.w r2, [fp, 0x30]                      |         r2 = *(arg_30h);
                                                         |         if (r2 != 0) {
    0x00002180 cbz r2, 0x2188                            |             
    0x00002182 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x00002184 add r1, r3                                |             r1 += r3;
    0x00002186 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x00002188 ldr.w r2, [fp, 0x2c]                      |         r2 = *(arg_2ch);
                                                         |         if (r2 != 0) {
    0x0000218c cbz r2, 0x2194                            |             
    0x0000218e ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x00002190 add r1, r3                                |             r1 += r3;
    0x00002192 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x00002194 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
                                                         |         if (r2 != 0) {
    0x00002198 cbz r2, 0x21a0                            |             
    0x0000219a ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x0000219c add r1, r3                                |             r1 += r3;
    0x0000219e str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021a0 ldr.w r2, [fp, 0x38]                      |         r2 = *(arg_38h);
                                                         |         if (r2 != 0) {
    0x000021a4 cbz r2, 0x21ac                            |             
    0x000021a6 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021a8 add r1, r3                                |             r1 += r3;
    0x000021aa str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021ac ldr.w r2, [fp, 0x3c]                      |         r2 = *(arg_3ch);
                                                         |         if (r2 != 0) {
    0x000021b0 cbz r2, 0x21b8                            |             
    0x000021b2 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021b4 add r1, r3                                |             r1 += r3;
    0x000021b6 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021b8 ldr.w r2, [fp, 0x64]                      |         r2 = *(arg_64h);
                                                         |         if (r2 != 0) {
    0x000021bc cbz r2, 0x21c4                            |             
    0x000021be ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021c0 add r1, r3                                |             r1 += r3;
    0x000021c2 str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021c4 ldr.w r2, [fp, 0x7c]                      |         r2 = *(arg_7ch);
                                                         |         if (r2 != 0) {
    0x000021c8 cbz r2, 0x21d0                            |             
    0x000021ca ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021cc add r1, r3                                |             r1 += r3;
    0x000021ce str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021d0 ldr.w r2, [fp, 0xe8]                      |         r2 = *(arg_e8h);
                                                         |         if (r2 != 0) {
    0x000021d4 cbz r2, 0x21dc                            |             
    0x000021d6 ldr r1, [r2, 4]                           |             r1 = *((r2 + 4));
    0x000021d8 add r1, r3                                |             r1 += r3;
    0x000021da str r1, [r2, 4]                           |             *((r2 + 4)) = r1;
                                                         |         }
    0x000021dc ldr.w r2, [fp, 0x150]                     |         r2 = *(arg_150h);
                                                         |         if (r2 == 0) {
    0x000021e0 cbz r2, 0x21e8                            |             goto label_96;
                                                         |         }
    0x000021e2 ldr r1, [r2, 4]                           |         r1 = *((r2 + 4));
    0x000021e4 add r1, r3                                |         r1 += r3;
    0x000021e6 str r1, [r2, 4]                           |         *((r2 + 4)) = r1;
                                                         |     }
                                                         | label_96:
    0x000021e8 ldr.w r3, [fp, 0x70]                      |     r3 = *(arg_70h);
                                                         |     if (r3 != 0) {
    0x000021ec cbz r3, 0x21fa                            |         
    0x000021ee ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000021f0 cmp r3, 7                                 |         
    0x000021f2 it ne                                     |         
                                                         |         if (r3 != 7) {
    0x000021f4 cmpne r3, 0x11                            |             __asm ("cmpne r3, 0x11");
                                                         |         }
                                                         |         if (r3 != 7) {
    0x000021f6 bne.w 0x43d6                              |             goto label_97;
                                                         |         }
                                                         |     }
    0x000021fa ldr.w r3, [fp, 0x3c]                      |     r3 = *(arg_3ch);
                                                         |     if (r3 != 0) {
    0x000021fe cbz r3, 0x220c                            |         
    0x00002200 ldr.w r3, [fp, 0x44]                      |         r3 = *(arg_44h);
    0x00002204 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002206 cmp r3, 0xc                               |         
                                                         |         if (r3 != 0xc) {
    0x00002208 bne.w 0x43b2                              |             goto label_98;
                                                         |         }
                                                         |     }
    0x0000220c ldr.w r3, [fp, 0x64]                      |     r3 = *(arg_64h);
                                                         |     if (r3 != 0) {
    0x00002210 cbz r3, 0x221e                            |         
    0x00002212 ldr.w r3, [fp, 0x6c]                      |         r3 = *(arg_6ch);
    0x00002216 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002218 cmp r3, 8                                 |         
                                                         |         if (r3 != 8) {
    0x0000221a bne.w 0x43c4                              |             goto label_99;
                                                         |         }
                                                         |     }
    0x0000221e ldr.w r2, [fp, 0x98]                      |     r2 = *(arg_98h);
                                                         |     if (r2 != 0) {
    0x00002222 cbz r2, 0x2242                            |         
    0x00002224 ldr r3, [r2, 4]                           |         r3 = *((r2 + 4));
    0x00002226 lsls r0, r3, 0x1e                         |         r0 = r3 << 0x1e;
    0x00002228 str.w r3, [fp, 0x210]                     |         __asm ("str.w r3, [arg_210h]");
    0x0000222c it mi                                     |         
                                                         |         if (r0 >= r3) {
    0x0000222e strmi r2, [fp, 0x60]                      |             *(arg_60h) = r2;
                                                         |         }
    0x00002232 lsls r1, r3, 0x1d                         |         r1 = r3 << 0x1d;
    0x00002234 it mi                                     |         
                                                         |         if (r1 >= r3) {
    0x00002236 strmi r2, [fp, 0x78]                      |             *(arg_78h) = r2;
                                                         |         }
    0x0000223a lsls r6, r3, 0x1c                         |         r6 = r3 << 0x1c;
    0x0000223c it mi                                     |         
                                                         |         if (r6 < r3) {
    0x0000223e strmi r2, [fp, 0x80]                      |             *(arg_80h) = r2;
                                                         |             goto label_100;
                                                         |         }
                                                         |     }
                                                         | label_100:
    0x00002242 ldr.w r3, [fp, 0xbc]                      |     r3 = *(arg_bch);
                                                         |     if (r3 != 0) {
    0x00002246 cbz r3, 0x2270                            |         
    0x00002248 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000224a lsls r5, r3, 0x1c                         |         r5 = r3 << 0x1c;
    0x0000224c str.w r3, [fp, 0x20c]                     |         __asm ("str.w r3, [arg_20ch]");
    0x00002250 itt mi                                    |         
                                                         |         if (r5 >= r3) {
    0x00002252 movmi r2, 1                               |             r2 = 1;
                                                         |         }
                                                         |         if (r5 >= r3) {
    0x00002254 strbmi r2, [fp, 0x19c]                    |             *(arg_19ch) = r2;
                                                         |         }
    0x00002258 ldr r2, [pc, 0x1c0]                       |         
    0x0000225a add r2, pc                                |         
    0x0000225c ldr r2, [r2]                              |         r2 = *(0x467a);
    0x0000225e lsls r4, r2, 0x19                         |         r4 = r2 << 0x19;
                                                         |         if (r4 < r2) {
    0x00002260 bmi.w 0x410c                              |             goto label_101;
                                                         |         }
                                                         | label_53:
    0x00002264 lsls r0, r3, 0x1f                         |         r0 = r3 << 0x1f;
    0x00002266 itt mi                                    |         
                                                         |         if (r0 >= r3) {
    0x00002268 ldrmi r3, [fp, 0xbc]                      |             r3 = *(arg_bch);
                                                         |         }
                                                         |         if (r0 >= r3) {
    0x0000226c str.w r3, [fp, 0x80]                      |             __asm ("str.w r3, [arg_80h]");
                                                         |             goto label_102;
                                                         |         }
                                                         |     }
                                                         | label_102:
    0x00002270 ldr.w r3, [fp, 0x94]                      |     r3 = *(arg_94h);
                                                         |     if (r3 != 0) {
    0x00002274 cbz r3, 0x227c                            |         
    0x00002276 movs r3, 0                                |         r3 = 0;
    0x00002278 str.w r3, [fp, 0x5c]                      |         __asm ("str.w r3, [arg_5ch]");
                                                         |     }
                                                         | label_92:
    0x0000227c ldr.w r3, [fp, 0x58]                      |     r3 = *(arg_58h);
                                                         |     if (r3 != 0) {
    0x00002280 cbz r3, 0x229a                            |         
    0x00002282 ldr.w r2, [fp, 0x34]                      |         r2 = *(arg_34h);
    0x00002286 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002288 ldr r1, [pc, 0x194]                       |         
    0x0000228a ldr r0, [r2, 4]                           |         r0 = *((r2 + 4));
    0x0000228c add r1, pc                                |         r1 = 0x46b0;
    0x0000228e add r0, r3                                |         r0 += r3;
    0x00002290 bl 0x14f30                                |         r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00002294 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00002296 beq.w 0x3450                              |             goto label_103;
                                                         |         }
                                                         |     }
                                                         | label_19:
    0x0000229a mov r0, fp                                |     r0 = fp;
    0x0000229c bl 0x8850                                 |     fcn_00008850 (r0);
                                                         | label_91:
    0x000022a0 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000022a4 cmp r3, 2                                 |     
                                                         |     if (r3 == 2) {
    0x000022a6 beq.w 0x3864                              |         goto label_104;
                                                         |     }
                                                         | label_29:
    0x000022aa ldr r4, [pc, 0x178]                       |     
    0x000022ac add r4, pc                                |     r4 = 0x46d6;
    0x000022ae ldr.w r3, [r4, 0x190]                     |     r3 = *(0x4866);
    0x000022b2 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000022b4 beq.w 0x2eaa                              |         goto label_105;
                                                         |     }
    0x000022b8 ldr r1, [pc, 0x16c]                       |     
    0x000022ba movs r6, 0                                |     r6 = 0;
    0x000022bc mov r3, r6                                |     r3 = r6;
    0x000022be movs r2, 1                                |     r2 = 1;
    0x000022c0 strd r6, r6, [sp]                         |     __asm ("strd r6, r6, [sp]");
    0x000022c4 add r1, pc                                |     r1 = 0x46f0;
    0x000022c6 mov r0, r1                                |     r0 = r1;
    0x000022c8 bl 0x8950                                 |     r0 = fcn_00008950 (r0, r1, r2, r3, r4, r5);
    0x000022cc mov r5, r0                                |     r5 = r0;
    0x000022ce cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000022d0 beq.w 0x2eaa                              |         goto label_105;
                                                         |     }
    0x000022d4 ldr.w r4, [r4, 0x190]                     |     r4 = *((r4 + 0x190));
    0x000022d8 mov r3, r6                                |     r3 = r6;
    0x000022da ldr r2, [r4, 0x1c]                        |     r2 = *((r4 + 0x1c));
    0x000022dc add r2, r4                                |     r2 += r4;
    0x000022de str.w r2, [r0, 0x154]                     |     __asm ("str.w r2, [r0, 0x154]");
    0x000022e2 ldrh r0, [r4, 0x2c]                       |     r0 = *((r4 + 0x2c));
    0x000022e4 strh.w r0, [r5, 0x15c]                    |     *((r5 + 0x15c)) = r0;
    0x000022e8 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x000022ea bne.w 0x2440                              |         goto label_2;
                                                         |     }
    0x000022ee b 0x2460                                  |     goto label_106;
                                                         |     do {
    0x0000242c cmp r1, 1                                 |         
                                                         |         if (r1 == 1) {
    0x0000242e beq.w 0x2e56                              |             goto label_107;
                                                         |         }
    0x00002432 cmp r1, 7                                 |         
                                                         |         if (r1 == 7) {
    0x00002434 beq.w 0x43f0                              |             goto label_108;
                                                         |         }
                                                         | label_6:
    0x00002438 adds r3, 1                                |         r3++;
    0x0000243a adds r2, 0x20                             |         r2 += 0x20;
    0x0000243c cmp r3, r0                                |         
                                                         |         if (r3 == r0) {
    0x0000243e beq 0x2460                                |             goto label_106;
                                                         |         }
                                                         | label_2:
    0x00002440 ldr r1, [r2]                              |         r1 = *(r2);
    0x00002442 cmp r1, 2                                 |         
    0x00002444 bne 0x242c                                |         
                                                         |     } while (r1 != 2);
    0x00002446 ldr r1, [r2, 8]                           |     r1 = *((r2 + 8));
    0x00002448 adds r3, 1                                |     r3++;
    0x0000244a cmp r3, r0                                |     
    0x0000244c add.w r2, r2, 0x20                        |     r2 += 0x20;
    0x00002450 str r1, [r5, 8]                           |     *((r5 + 8)) = r1;
    0x00002452 ldr r1, [r2, -0xc]                        |     r1 = *((r2 - 0xc));
    0x00002456 lsr.w r1, r1, 3                           |     r1 >>= 3;
    0x0000245a strh.w r1, [r5, 0x15e]                    |     *((r5 + 0x15e)) = r1;
                                                         |     if (r3 != r0) {
    0x0000245e bne 0x2440                                |         goto label_2;
                                                         |     }
                                                         | label_106:
    0x00002460 ldr r1, [r5]                              |     r1 = *(r5);
    0x00002462 ldr.w r3, [r5, 0x1b8]                     |     r3 = *((r5 + 0x1b8));
    0x00002466 ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x00002468 subs r1, r4, r1                           |     r1 = r4 - r1;
    0x0000246a str.w r4, [r5, 0x1b4]                     |     __asm ("str.w r4, [r5, 0x1b4]");
    0x0000246e add r3, r1                                |     r3 += r1;
    0x00002470 str r1, [r5]                              |     *(r5) = r1;
    0x00002472 str.w r3, [r5, 0x1b8]                     |     __asm ("str.w r3, [r5, 0x1b8]");
    0x00002476 adds r2, r0, r1                           |     r2 = r0 + r1;
    0x00002478 ldr.w r3, [r5, 0x1bc]                     |     r3 = *((r5 + 0x1bc));
    0x0000247c str r2, [r5, 8]                           |     *((r5 + 8)) = r2;
    0x0000247e add r3, r1                                |     r3 += r1;
    0x00002480 str.w r3, [r5, 0x1bc]                     |     __asm ("str.w r3, [r5, 0x1bc]");
    0x00002484 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00002486 beq.w 0x26ba                              |         goto label_109;
                                                         |     }
    0x0000248a ldr r3, [r0, r1]                          |     r3 = *((r0 + r1));
    0x0000248c add.w r0, r5, 0x20                        |     r0 = r5 + 0x20;
                                                         |     if (r3 == 0) {
    0x00002490 cbz r3, 0x2506                            |         goto label_110;
                                                         |     }
    0x00002492 movw lr, 0xfdff                           |     
    0x00002496 movw r8, 0xfeff                           |     
    0x0000249a movw sb, 0xfe35                           |     
    0x0000249e mov.w ip, 0x22                            |     
    0x000024a2 movw r4, 0xff41                           |     
    0x000024a6 movt lr, 0x6fff                           |     lr = 0x6ffffdff;
    0x000024aa movt r8, 0x6fff                           |     r8 = 0x6ffffeff;
    0x000024ae movt sb, 0x6fff                           |     sb = 0x6ffffe35;
    0x000024b2 movt ip, 0x7000                           |     
    0x000024b6 mvn r6, 0x90000000                        |     r6 = ~0x90000000;
    0x000024ba movt r4, 0x6fff                           |     r4 = 0x6fffff41;
    0x000024be str r4, [r7, 0x40]                        |     *((r7 + 0x40)) = r4;
                                                         |     do {
    0x000024c0 cmp r3, 0x22                              |         
                                                         |         if (r3 >= 0x22) {
    0x000024c2 bls 0x24fa                                |             
    0x000024c4 subs r4, r6, r3                           |             r4 = r6 - r3;
    0x000024c6 cmp r4, 0xf                               |             
    0x000024c8 it ls                                     |             
                                                         |             if (r4 > 0xf) {
    0x000024ca subls r3, ip, r3                          |                 r3 = ip - r3;
                                                         |             }
                                                         |             if (r4 < 0xf) {
    0x000024ce bls 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024d0 sbfx r4, r3, 0, 0x1f                      |             __asm ("sbfx r4, r3, 0, 0x1f");
    0x000024d4 cmn.w r4, 4                               |             
    0x000024d8 it hi                                     |             
                                                         |             if (r4 > 4) {
    0x000024da rsbhi r3, r4, 0x32                        |                 __asm ("rsbhi r3, r4, 0x32");
                                                         |             }
                                                         |             if (r4 > 4) {
    0x000024de bhi 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024e0 sub.w r4, lr, r3                          |             r4 = lr - r3;
    0x000024e4 cmp r4, 0xb                               |             
    0x000024e6 it ls                                     |             
                                                         |             if (r4 > 0xb) {
    0x000024e8 subls r3, sb, r3                          |                 r3 = sb - r3;
                                                         |             }
                                                         |             if (r4 < 0xb) {
    0x000024ec bls 0x24fa                                |                 goto label_111;
                                                         |             }
    0x000024ee sub.w r4, r8, r3                          |             r4 = r8 - r3;
    0x000024f2 cmp r4, 0xa                               |             
                                                         |             if (r4 > 0xa) {
    0x000024f4 bhi 0x24fe                                |                 goto label_112;
                                                         |             }
    0x000024f6 ldr r4, [r7, 0x40]                        |             r4 = *((r7 + 0x40));
    0x000024f8 subs r3, r4, r3                           |             r3 = r4 - r3;
                                                         |         }
                                                         | label_111:
    0x000024fa str.w r2, [r0, r3, lsl 2]                 |         __asm ("str.w r2, [r0, r3, lsl 2]");
                                                         | label_112:
    0x000024fe ldr r3, [r2, 8]!                          |         r3 = *((r2 += 8));
    0x00002502 cmp r3, 0                                 |         
    0x00002504 bne 0x24c0                                |         
                                                         |     } while (r3 != 0);
                                                         | label_110:
    0x00002506 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002508 beq.w 0x2634                              |         
    0x0000250c ldr r3, [r5, 0x30]                        |         r3 = *((r5 + 0x30));
                                                         |         if (r3 != 0) {
    0x0000250e cbz r3, 0x2526                            |             
    0x00002510 ldr.w r2, [pc, 0xc08]                     |             r2 = *(0x0000311c);
    0x00002514 ldrd r3, r0, [r3]                         |             __asm ("ldrd r3, r0, [r3]");
    0x00002518 add r2, pc                                |             r2 += pc;
    0x0000251a str r3, [r2, 4]                           |             *((r2 + 4)) = r3;
    0x0000251c add r0, r1                                |             r0 += r1;
    0x0000251e movs r3, 1                                |             r3 = 1;
    0x00002520 str r0, [r2, 8]                           |             *((r2 + 8)) = r0;
    0x00002522 adds r2, 4                                |             r2 += 4;
    0x00002524 str r2, [r5, 0x30]                        |             *((r5 + 0x30)) = r2;
                                                         |         }
    0x00002526 ldr r4, [r5, 0x2c]                        |         r4 = *((r5 + 0x2c));
                                                         |         if (r4 != 0) {
    0x00002528 cbz r4, 0x2546                            |             
    0x0000252a ldr.w r2, [pc, 0xbf4]                     |             r2 = *(0x00003120);
    0x0000252e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002530 add r2, pc                                |             r2 += pc;
    0x00002532 adds r2, 4                                |             r2 += 4;
    0x00002534 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002538 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000253c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000253e adds r3, 1                                |             r3++;
    0x00002540 add r0, r1                                |             r0 += r1;
    0x00002542 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002544 str r2, [r5, 0x2c]                        |             *((r5 + 0x2c)) = r2;
                                                         |         }
    0x00002546 ldr r4, [r5, 0x34]                        |         r4 = *((r5 + 0x34));
                                                         |         if (r4 != 0) {
    0x00002548 cbz r4, 0x2566                            |             
    0x0000254a ldr.w r2, [pc, 0xbd8]                     |             r2 = *(0x00003124);
    0x0000254e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002550 add r2, pc                                |             r2 += pc;
    0x00002552 adds r2, 4                                |             r2 += 4;
    0x00002554 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002558 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000255c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000255e adds r3, 1                                |             r3++;
    0x00002560 add r0, r1                                |             r0 += r1;
    0x00002562 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002564 str r2, [r5, 0x34]                        |             *((r5 + 0x34)) = r2;
                                                         |         }
    0x00002566 ldr r4, [r5, 0x38]                        |         r4 = *((r5 + 0x38));
                                                         |         if (r4 != 0) {
    0x00002568 cbz r4, 0x2586                            |             
    0x0000256a ldr.w r2, [pc, 0xbbc]                     |             r2 = *(0x00003128);
    0x0000256e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002570 add r2, pc                                |             r2 += pc;
    0x00002572 adds r2, 4                                |             r2 += 4;
    0x00002574 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002578 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000257c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000257e adds r3, 1                                |             r3++;
    0x00002580 add r0, r1                                |             r0 += r1;
    0x00002582 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002584 str r2, [r5, 0x38]                        |             *((r5 + 0x38)) = r2;
                                                         |         }
    0x00002586 ldr r4, [r5, 0x3c]                        |         r4 = *((r5 + 0x3c));
                                                         |         if (r4 != 0) {
    0x00002588 cbz r4, 0x25a6                            |             
    0x0000258a ldr.w r2, [pc, 0xba0]                     |             r2 = *(0x0000312c);
    0x0000258e ldr r0, [r4]                              |             r0 = *(r4);
    0x00002590 add r2, pc                                |             r2 += pc;
    0x00002592 adds r2, 4                                |             r2 += 4;
    0x00002594 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x00002598 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x0000259c ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x0000259e adds r3, 1                                |             r3++;
    0x000025a0 add r0, r1                                |             r0 += r1;
    0x000025a2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025a4 str r2, [r5, 0x3c]                        |             *((r5 + 0x3c)) = r2;
                                                         |         }
    0x000025a6 ldr r4, [r5, 0x64]                        |         r4 = *((r5 + 0x64));
                                                         |         if (r4 != 0) {
    0x000025a8 cbz r4, 0x25c6                            |             
    0x000025aa ldr.w r2, [pc, 0xb84]                     |             r2 = *(0x00003130);
    0x000025ae ldr r0, [r4]                              |             r0 = *(r4);
    0x000025b0 add r2, pc                                |             r2 += pc;
    0x000025b2 adds r2, 4                                |             r2 += 4;
    0x000025b4 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025b8 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025bc ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x000025be adds r3, 1                                |             r3++;
    0x000025c0 add r0, r1                                |             r0 += r1;
    0x000025c2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025c4 str r2, [r5, 0x64]                        |             *((r5 + 0x64)) = r2;
                                                         |         }
    0x000025c6 ldr r4, [r5, 0x7c]                        |         r4 = *((r5 + 0x7c));
                                                         |         if (r4 != 0) {
    0x000025c8 cbz r4, 0x25e6                            |             
    0x000025ca ldr.w r2, [pc, 0xb68]                     |             r2 = *(0x00003134);
    0x000025ce ldr r0, [r4]                              |             r0 = *(r4);
    0x000025d0 add r2, pc                                |             r2 += pc;
    0x000025d2 adds r2, 4                                |             r2 += 4;
    0x000025d4 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025d8 add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025dc ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x000025de adds r3, 1                                |             r3++;
    0x000025e0 add r0, r1                                |             r0 += r1;
    0x000025e2 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x000025e4 str r2, [r5, 0x7c]                        |             *((r5 + 0x7c)) = r2;
                                                         |         }
    0x000025e6 ldr.w r4, [r5, 0xe8]                      |         r4 = *((r5 + 0xe8));
                                                         |         if (r4 != 0) {
    0x000025ea cbz r4, 0x260a                            |             
    0x000025ec ldr.w r2, [pc, 0xb48]                     |             r2 = *(0x00003138);
    0x000025f0 ldr r0, [r4]                              |             r0 = *(r4);
    0x000025f2 add r2, pc                                |             r2 += pc;
    0x000025f4 adds r2, 4                                |             r2 += 4;
    0x000025f6 str.w r0, [r2, r3, lsl 3]                 |             __asm ("str.w r0, [r2, r3, lsl 3]");
    0x000025fa add.w r2, r2, r3, lsl 3                   |             r2 += (r3 << 3);
    0x000025fe ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x00002600 adds r3, 1                                |             r3++;
    0x00002602 add r0, r1                                |             r0 += r1;
    0x00002604 str r0, [r2, 4]                           |             *((r2 + 4)) = r0;
    0x00002606 str.w r2, [r5, 0xe8]                      |             __asm ("str.w r2, [r5, 0xe8]");
                                                         |         }
    0x0000260a ldr.w r4, [r5, 0x150]                     |         r4 = *((r5 + 0x150));
                                                         |         if (r4 == 0) {
    0x0000260e cbz r4, 0x2634                            |             goto label_113;
                                                         |         }
    0x00002610 ldr r0, [r4, 4]                           |         r0 = *((r4 + 4));
    0x00002612 cmp r3, 8                                 |         
    0x00002614 ldr.w r2, [pc, 0xb24]                     |         r2 = *(0x0000313c);
    0x00002618 add r0, r1                                |         r0 += r1;
    0x0000261a ldr r1, [r4]                              |         r1 = *(r4);
    0x0000261c add r2, pc                                |         r2 += pc;
    0x0000261e add.w r2, r2, 4                           |         r2 += 4;
    0x00002622 str.w r1, [r2, r3, lsl 3]                 |         __asm ("str.w r1, [r2, r3, lsl 3]");
    0x00002626 add.w r2, r2, r3, lsl 3                   |         r2 += (r3 << 3);
    0x0000262a str r0, [r2, 4]                           |         *((r2 + 4)) = r0;
    0x0000262c str.w r2, [r5, 0x150]                     |         __asm ("str.w r2, [r5, 0x150]");
                                                         |         if (r3 == 8) {
    0x00002630 beq.w 0x42a6                              |             goto label_114;
                                                         |         }
                                                         |     }
                                                         | label_113:
    0x00002634 ldr r3, [r5, 0x70]                        |     r3 = *((r5 + 0x70));
                                                         |     if (r3 != 0) {
    0x00002636 cbz r3, 0x2644                            |         
    0x00002638 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000263a cmp r3, 7                                 |         
    0x0000263c it ne                                     |         
                                                         |         if (r3 != 7) {
    0x0000263e cmpne r3, 0x11                            |             __asm ("cmpne r3, 0x11");
                                                         |         }
                                                         |         if (r3 != 7) {
    0x00002640 bne.w 0x43d6                              |             goto label_97;
                                                         |         }
                                                         |     }
    0x00002644 ldr r3, [r5, 0x3c]                        |     r3 = *((r5 + 0x3c));
                                                         |     if (r3 != 0) {
    0x00002646 cbz r3, 0x2652                            |         
    0x00002648 ldr r3, [r5, 0x44]                        |         r3 = *((r5 + 0x44));
    0x0000264a ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000264c cmp r3, 0xc                               |         
                                                         |         if (r3 != 0xc) {
    0x0000264e bne.w 0x43b2                              |             goto label_98;
                                                         |         }
                                                         |     }
    0x00002652 ldr r3, [r5, 0x64]                        |     r3 = *((r5 + 0x64));
                                                         |     if (r3 != 0) {
    0x00002654 cbz r3, 0x2660                            |         
    0x00002656 ldr r3, [r5, 0x6c]                        |         r3 = *((r5 + 0x6c));
    0x00002658 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x0000265a cmp r3, 8                                 |         
                                                         |         if (r3 != 8) {
    0x0000265c bne.w 0x43c4                              |             goto label_99;
                                                         |         }
                                                         |     }
    0x00002660 ldr.w r3, [r5, 0x98]                      |     r3 = *((r5 + 0x98));
                                                         |     if (r3 != 0) {
    0x00002664 cbz r3, 0x2680                            |         
    0x00002666 ldr r2, [r3, 4]                           |         r2 = *((r3 + 4));
    0x00002668 lsls r1, r2, 0x1e                         |         r1 = r2 << 0x1e;
    0x0000266a str.w r2, [r5, 0x210]                     |         __asm ("str.w r2, [r5, 0x210]");
    0x0000266e it mi                                     |         
                                                         |         if (r1 >= r2) {
    0x00002670 strmi r3, [r5, 0x60]                      |             *((r5 + 0x60)) = r3;
                                                         |         }
    0x00002672 lsls r6, r2, 0x1d                         |         r6 = r2 << 0x1d;
    0x00002674 it mi                                     |         
                                                         |         if (r6 >= r2) {
    0x00002676 strmi r3, [r5, 0x78]                      |             *((r5 + 0x78)) = r3;
                                                         |         }
    0x00002678 lsls r4, r2, 0x1c                         |         r4 = r2 << 0x1c;
    0x0000267a it mi                                     |         
                                                         |         if (r4 < r2) {
    0x0000267c strmi r3, [r5, 0x80]                      |             *((r5 + 0x80)) = r3;
                                                         |             goto label_115;
                                                         |         }
                                                         |     }
                                                         | label_115:
    0x00002680 ldr.w r3, [r5, 0xbc]                      |     r3 = *((r5 + 0xbc));
                                                         |     if (r3 != 0) {
    0x00002684 cbz r3, 0x26b0                            |         
    0x00002686 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00002688 lsls r0, r3, 0x1c                         |         r0 = r3 << 0x1c;
    0x0000268a str.w r3, [r5, 0x20c]                     |         __asm ("str.w r3, [r5, 0x20c]");
    0x0000268e itt mi                                    |         
                                                         |         if (r0 >= r3) {
    0x00002690 movmi r2, 1                               |             r2 = 1;
                                                         |         }
                                                         |         if (r0 >= r3) {
    0x00002692 strbmi r2, [r5, 0x19c]                    |             *((r5 + 0x19c)) = r2;
                                                         |         }
    0x00002696 ldr.w r2, [pc, 0xaa8]                     |         r2 = *(0x00003140);
    0x0000269a add r2, pc                                |         r2 += pc;
    0x0000269c ldr r2, [r2]                              |         r2 = *(r2);
    0x0000269e lsls r1, r2, 0x19                         |         r1 = r2 << 0x19;
                                                         |         if (r1 < r2) {
    0x000026a0 bmi.w 0x4084                              |             goto label_116;
                                                         |         }
                                                         | label_48:
    0x000026a4 lsls r2, r3, 0x1f                         |         r2 = r3 << 0x1f;
    0x000026a6 itt mi                                    |         
                                                         |         if (r2 >= r3) {
    0x000026a8 ldrmi r3, [r5, 0xbc]                      |             r3 = *((r5 + 0xbc));
                                                         |         }
                                                         |         if (r2 >= r3) {
    0x000026ac str.w r3, [r5, 0x80]                      |             __asm ("str.w r3, [r5, 0x80]");
                                                         |             goto label_117;
                                                         |         }
                                                         |     }
                                                         | label_117:
    0x000026b0 ldr.w r3, [r5, 0x94]                      |     r3 = *((r5 + 0x94));
                                                         |     if (r3 != 0) {
    0x000026b4 cbz r3, 0x26ba                            |         
    0x000026b6 movs r3, 0                                |         r3 = 0;
    0x000026b8 str r3, [r5, 0x5c]                        |         *((r5 + 0x5c)) = r3;
                                                         |     }
                                                         | label_109:
    0x000026ba mov r0, r5                                |     r0 = r5;
    0x000026bc bl 0x8850                                 |     fcn_00008850 (r0);
    0x000026c0 ldrb.w r3, [r5, 0x198]                    |     r3 = *((r5 + 0x198));
    0x000026c4 movs r2, 1                                |     r2 = 1;
    0x000026c6 ldr r1, [r5, 0x58]                        |     r1 = *((r5 + 0x58));
    0x000026c8 str.w r2, [r5, 0x204]                     |     __asm ("str.w r2, [r5, 0x204]");
    0x000026cc orr r3, r3, 4                             |     r3 |= 4;
    0x000026d0 strb.w r3, [r5, 0x198]                    |     *((r5 + 0x198)) = r3;
    0x000026d4 ldr.w r3, [r5, 0x1d8]                     |     r3 = *((r5 + 0x1d8));
    0x000026d8 str r2, [r3, 4]                           |     *((r3 + 4)) = r2;
    0x000026da add.w r2, r5, 0x14                        |     r2 = r5 + 0x14;
    0x000026de str r2, [r3]                              |     *(r3) = r2;
                                                         |     if (r1 != 0) {
    0x000026e0 cbz r1, 0x26f0                            |         
    0x000026e2 ldr r3, [r5, 0x34]                        |         r3 = *((r5 + 0x34));
    0x000026e4 ldr r2, [r1, 4]                           |         r2 = *((r1 + 4));
    0x000026e6 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000026e8 add r3, r2                                |         r3 += r2;
    0x000026ea ldr r2, [r5, 0x1c]                        |         r2 = *((r5 + 0x1c));
    0x000026ec str r3, [r2]                              |         *(r2) = r3;
    0x000026ee str r3, [r5, 4]                           |         *((r5 + 4)) = r3;
                                                         |     }
    0x000026f0 movs r1, 0                                |     r1 = 0;
    0x000026f2 mov r0, r5                                |     r0 = r5;
    0x000026f4 bl 0x88cc                                 |     fcn_000088cc (r0, r1);
    0x000026f8 ldr r3, [r5, 0xc]                         |     r3 = *((r5 + 0xc));
    0x000026fa cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000026fc bne.w 0x4416                              |         goto label_118;
                                                         |     }
    0x00002700 ldr r3, [r5, 0x10]                        |     r3 = *((r5 + 0x10));
    0x00002702 cmp fp, r3                                |     
                                                         |     if (fp != r3) {
    0x00002704 bne.w 0x443c                              |         goto label_119;
                                                         |     }
    0x00002708 ldr.w r3, [pc, 0xa38]                     |     r3 = *(0x00003144);
    0x0000270c add r3, pc                                |     r3 += pc;
    0x0000270e str.w r5, [r3, 0x5a4]                     |     __asm ("str.w r5, [r3, 0x5a4]");
    0x00002712 add.w r3, r3, 0x598                       |     r3 += 0x598;
    0x00002716 str r3, [r5, 0x10]                        |     *((r5 + 0x10)) = r3;
    0x00002718 ldr.w r3, [pc, 0xa2c]                     |     r3 = *(0x00003148);
    0x0000271c add r3, pc                                |     r3 += pc;
    0x0000271e str.w r5, [r3, 0x194]                     |     __asm ("str.w r5, [r3, 0x194]");
    0x00002722 add.w r3, r5, 0xc                         |     r3 = r5 + 0xc;
    0x00002726 str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
                                                         | label_8:
    0x00002728 ldr.w r3, [pc, 0xa20]                     |     r3 = *(0x0000314c);
    0x0000272c movs r4, 0                                |     r4 = 0;
    0x0000272e ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00002730 movs r2, 0x20                             |     r2 = 0x20;
    0x00002732 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00002736 ldr.w sb, [pc, 0xa18]                     |     sb = *(0x00003150);
    0x0000273a add r3, pc                                |     r3 += pc;
    0x0000273c add.w r8, r7, 0x50                        |     r8 = r7 + 0x50;
    0x00002740 str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x00002742 strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x00002746 add sb, pc                                |     sb += pc;
    0x00002748 str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x0000274a strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x0000274c str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x00002750 ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x00002752 stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x00002756 mov r2, r8                                |     r2 = r8;
    0x00002758 ldr.w r0, [pc, 0x9f8]                     |     r0 = *(0x00003154);
    0x0000275c add.w r3, r5, 0x1d8                       |     r3 = r5 + 0x1d8;
    0x00002760 mov r1, r5                                |     r1 = r5;
    0x00002762 strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x00002766 strd r6, r4, [sp]                         |     __asm ("strd r6, r4, [sp]");
    0x0000276a add r0, pc                                |     r0 += pc;
    0x0000276c ldr.w r4, [sb, 0x1b8]                     |     r4 = *((sb + 0x1b8));
    0x00002770 blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00002772 ldr.w r2, [r8]                            |     r2 = *(r8);
    0x00002776 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00002778 beq.w 0x36ac                              |         goto label_120;
                                                         |     }
    0x0000277c ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x0000277e movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x00002782 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00002784 cmp r3, r1                                |     
    0x00002786 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x00002788 cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x0000278a itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x0000278c movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x0000278e ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00002790 moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x00002792 add r3, r2                                |     r3 += r2;
    0x00002794 ldr.w r2, [pc, 0x9c0]                     |     r2 = *(0x00003158);
    0x00002798 add r2, pc                                |     r2 += pc;
    0x0000279a ldr.w ip, [r2, 0x194]                     |     ip = *((r2 + 0x194));
                                                         | label_27:
    0x0000279e ldr.w r5, [pc, 0x9bc]                     |     r5 = *(0x0000315c);
    0x000027a2 add r5, pc                                |     r5 += pc;
    0x000027a4 str.w r3, [r5, 0x198]                     |     __asm ("str.w r3, [r5, 0x198]");
    0x000027a8 cmp.w ip, 0                               |     
                                                         |     if (ip == 0) {
    0x000027ac beq.w 0x35bc                              |         goto label_121;
                                                         |     }
    0x000027b0 ldr.w r3, [pc, 0x9ac]                     |     r3 = *(0x00003160);
    0x000027b4 movs r4, 0                                |     r4 = 0;
    0x000027b6 ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x000027b8 movs r2, 0x20                             |     r2 = 0x20;
    0x000027ba add r3, pc                                |     r3 += pc;
    0x000027bc str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x000027be strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x000027c2 str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x000027c4 str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x000027c8 strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x000027ca ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x000027cc stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x000027d0 mov r2, r8                                |     r2 = r8;
    0x000027d2 ldr.w r0, [pc, 0x990]                     |     
    0x000027d6 add.w r3, ip, 0x1d8                       |     r3 = ip + 0x1d8;
    0x000027da mov r1, ip                                |     r1 = ip;
    0x000027dc strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x000027e0 strd r6, r4, [sp]                         |     __asm ("strd r6, r4, [sp]");
    0x000027e4 add r0, pc                                |     r0 = 0x594e;
    0x000027e6 ldr.w r4, [r5, 0x1b8]                     |     r4 = *((r5 + 0x1b8));
    0x000027ea blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000027ec ldr.w r2, [r8]                            |     r2 = *(r8);
    0x000027f0 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x000027f2 beq.w 0x36a2                              |         goto label_122;
                                                         |     }
    0x000027f6 ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x000027f8 movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x000027fc ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x000027fe cmp r3, r1                                |     
    0x00002800 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x00002802 cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x00002804 itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x00002806 movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x00002808 ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x0000280a moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x0000280c add r3, r2                                |     r3 += r2;
    0x0000280e ldr.w r2, [pc, 0x958]                     |     r2 = *(0x00003168);
    0x00002812 add r2, pc                                |     r2 += pc;
    0x00002814 ldr.w r5, [r2, 0x194]                     |     r5 = *((r2 + 0x194));
                                                         | label_26:
    0x00002818 ldr.w ip, [pc, 0x950]                     |     ip = *(0x0000316c);
    0x0000281c add ip, pc                                |     
    0x0000281e str.w r3, [ip, 0x19c]                     |     __asm ("str.w r3, [ip, 0x19c]");
    0x00002820 adds r1, 0x9c                             |     r1 += 0x9c;
    0x00002822 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00002824 beq.w 0x35c8                              |         goto label_123;
                                                         |     }
    0x00002828 ldr.w r3, [pc, 0x944]                     |     r3 = *(0x00003170);
    0x0000282c movs r4, 0                                |     r4 = 0;
    0x0000282e ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00002830 movs r2, 0x20                             |     r2 = 0x20;
    0x00002832 add r3, pc                                |     r3 += pc;
    0x00002834 str r4, [r1, 0xc]                         |     *((r1 + 0xc)) = r4;
    0x00002836 strd r4, r4, [r1]                         |     __asm ("strd r4, r4, [r1]");
    0x0000283a str r4, [r1, 8]                           |     *((r1 + 8)) = r4;
    0x0000283c str.w r1, [r8]                            |     __asm ("str.w r1, [r8]");
    0x00002840 strb r2, [r1, 0xc]                        |     *((r1 + 0xc)) = r2;
    0x00002842 ldm r3, {r0, r1, r2, r3}                  |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
    0x00002844 stm.w r6, {r0, r1, r2, r3}                |     *(r6) = r0;
                                                         |     *((r6 + 4)) = r1;
                                                         |     *((r6 + 8)) = r2;
                                                         |     *((r6 + 12)) = r3;
    0x00002848 mov r2, r8                                |     r2 = r8;
    0x0000284a ldr.w r0, [pc, 0x928]                     |     r0 = *(0x00003174);
    0x0000284e add.w r3, r5, 0x1d8                       |     r3 = r5 + 0x1d8;
    0x00002852 mov r1, r5                                |     r1 = r5;
    0x00002854 str r6, [sp]                              |     *(sp) = r6;
    0x00002856 strd r4, r4, [sp, 8]                      |     __asm ("strd r4, r4, [sp, 8]");
    0x0000285a add r0, pc                                |     r0 += pc;
    0x0000285c str r4, [sp, 4]                           |     *(arg_4h) = r4;
    0x0000285e ldr.w r4, [ip, 0x1b8]                     |     r4 = *((ip + 0x1b8));
    0x00002862 blx r4                                    |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00002864 ldr.w r2, [r8]                            |     r2 = *(r8);
    0x00002868 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x0000286a beq.w 0x35c8                              |         goto label_123;
                                                         |     }
    0x0000286e ldrh r3, [r2, 0xe]                        |     r3 = *((r2 + 0xe));
    0x00002870 movw r1, 0xfff1                           |     r1 = 0xfff1;
    0x00002874 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00002876 cmp r3, r1                                |     
    0x00002878 it ne                                     |     
                                                         |     if (r3 != r1) {
    0x0000287a cmpne r0, 0                               |         __asm ("cmpne r0, 0");
                                                         |     }
    0x0000287c itte ne                                   |     
                                                         |     if (r3 == r1) {
    0x0000287e movne r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 == r1) {
    0x00002880 ldrne r3, [r0]                            |         r3 = *(r0);
                                                         |     }
                                                         |     if (r3 != r1) {
    0x00002882 moveq r3, 0                               |         r3 = 0;
                                                         |     }
    0x00002884 add r3, r2                                |     r3 += r2;
                                                         | label_21:
    0x00002886 ldr.w r4, [pc, 0x8f0]                     |     r4 = *(0x00003178);
    0x0000288a add r4, pc                                |     r4 += pc;
    0x0000288c str.w r3, [r4, 0x1a0]                     |     __asm ("str.w r3, [r4, 0x1a0]");
    0x00002890 bl 0x11af8                                |     r0 = fcn_00011af8 ();
    0x00002894 cmp r0, 0                                 |     
                                                         |     if (r0 < 0) {
    0x00002896 blt.w 0x380c                              |         goto label_124;
                                                         |     }
    0x0000289a ldr r3, [r4, 4]                           |     r3 = *((r4 + 4));
    0x0000289c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0000289e bne.w 0x387e                              |         goto label_125;
                                                         |     }
                                                         | label_31:
    0x000028a2 ldr.w r3, [pc, 0x8d8]                     |     r3 = *(0x0000317c);
    0x000028a6 add r3, pc                                |     r3 += pc;
    0x000028a8 str r0, [r3, 4]                           |     *((r3 + 4)) = r0;
                                                         | label_30:
    0x000028aa movw r3, 0x1ff                            |     
    0x000028ae movt r3, 3                                |     r3 = 0x301ff;
    0x000028b2 cmp r0, r3                                |     
                                                         |     if (r0 <= r3) {
    0x000028b4 ble.w 0x43e8                              |         goto label_126;
                                                         |     }
    0x000028b8 ldr.w r4, [pc, 0x8c4]                     |     r4 = *(0x00003180);
    0x000028bc ldrd r2, r3, [sl, 0x15c]                  |     __asm ("ldrd r2, r3, [sl, 0x15c]");
    0x000028c0 ldrd r0, r1, [sl, 0x14c]                  |     __asm ("ldrd r0, r1, [sl, 0x14c]");
    0x000028c4 add r4, pc                                |     r4 += pc;
    0x000028c6 bl 0x5714                                 |     fcn_00005714 (r0, r1, r2, r3);
    0x000028ca ldr.w r0, [r4, 0x598]                     |     r0 = *((r4 + 0x598));
    0x000028ce movs r1, 0                                |     r1 = 0;
    0x000028d0 bl 0xbdf0                                 |     fcn_0000bdf0 (r0);
    0x000028d4 ldr.w r3, [r4, 0x59c]                     |     r3 = *((r4 + 0x59c));
    0x000028d8 movs r2, 0                                |     r2 = 0;
    0x000028da str r0, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r0;
    0x000028dc str r2, [r0, 0xc]                         |     *((r0 + 0xc)) = r2;
    0x000028de cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000028e0 beq.w 0x33ec                              |         goto label_127;
                                                         |     }
                                                         | label_17:
    0x000028e4 ldr.w r3, [pc, 0x89c]                     |     r3 = *(0x00003184);
    0x000028e8 movs r4, 1                                |     r4 = 1;
    0x000028ea ldr.w r0, [pc, 0x89c]                     |     r0 = *(0x00003188);
    0x000028ee add r3, pc                                |     r3 += pc;
    0x000028f0 ldrb.w r1, [r3, 0x730]                    |     r1 = *((r3 + 0x730));
    0x000028f4 add r0, pc                                |     r0 += pc;
    0x000028f6 ldr.w r2, [r3, 0x578]                     |     r2 = *((r3 + 0x578));
    0x000028fa add.w r5, r3, 0x598                       |     r5 = r3 + 0x598;
    0x000028fe bfi r1, r4, 0, 2                          |     value_0 = BIT_MASK (0, 2);
                                                         |     value_1 = r4 & value_0;
                                                         |     value_0 = ~value_0;
                                                         |     r1 &= value_0;
                                                         |     r1 |= value_1;
    0x00002902 strb.w r1, [r3, 0x730]                    |     *((r3 + 0x730)) = r1;
    0x00002906 adds r2, r2, r4                           |     r2 += r4;
    0x00002908 ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x0000290a add r1, r4                                |     r1 += r4;
    0x0000290c ldr.w r4, [r0, 0x16c]                     |     r4 = *((r0 + 0x16c));
    0x00002910 str r1, [r3, 4]                           |     *((r3 + 4)) = r1;
    0x00002912 ldr.w r1, [r3, 0x57c]                     |     r1 = *((r3 + 0x57c));
    0x00002916 str.w r5, [fp, 0xc]                       |     __asm ("str.w r5, [arg_ch]");
    0x0000291a str.w r2, [r3, 0x578]                     |     __asm ("str.w r2, [r3, 0x578]");
    0x0000291e adc r1, r1, 0                             |     __asm ("adc r1, r1, 0");
    0x00002922 adds r4, 2                                |     r4 += 2;
    0x00002924 str.w r1, [r3, 0x57c]                     |     __asm ("str.w r1, [r3, 0x57c]");
    0x00002928 str.w fp, [r3, 0x5a8]                     |     __asm ("str.w fp, [r3, 0x5a8]");
                                                         |     if (r4 == 2) {
    0x0000292c bne 0x293e                                |         
    0x0000292e ldr.w r3, [fp]                            |         r3 = *(fp);
    0x00002932 clz r3, r3                                |         r3 &= r3;
    0x00002936 lsrs r3, r3, 5                            |         r3 >>= 5;
    0x00002938 rsbs r3, r3, 0                            |         r3 -= ;
    0x0000293a str.w r3, [r0, 0x16c]                     |         __asm ("str.w r3, [r0, 0x16c]");
                                                         |     }
    0x0000293e ldr.w r1, [pc, 0x84c]                     |     r1 = *(0x0000318c);
    0x00002942 add r1, pc                                |     r1 += pc;
    0x00002944 ldrh r3, [r1, 0x28]                       |     r3 = *((r1 + 0x28));
    0x00002946 cmp r3, 0x34                              |     
                                                         |     if (r3 != 0x34) {
    0x00002948 bne.w 0x438a                              |         goto label_128;
                                                         |     }
    0x0000294c ldrh r3, [r1, 0x2a]                       |     r3 = *((r1 + 0x2a));
    0x0000294e cmp r3, 0x20                              |     
                                                         |     if (r3 != 0x20) {
    0x00002950 bne.w 0x439e                              |         goto label_129;
                                                         |     }
    0x00002954 ldr r3, [r1, 0x1c]                        |     r3 = *((r1 + 0x1c));
    0x00002956 movw r0, 0xe552                           |     
    0x0000295a ldrh r2, [r1, 0x2c]                       |     r2 = *((r1 + 0x2c));
    0x0000295c movt r0, 0x6474                           |     r0 = 0x6474e552;
    0x00002960 add r3, r1                                |     r3 += r1;
    0x00002962 ldr.w r1, [pc, 0x82c]                     |     r1 = *(0x00003190);
    0x00002966 add r1, pc                                |     r1 += pc;
    0x00002968 str.w r3, [r1, 0x6ec]                     |     __asm ("str.w r3, [r1, 0x6ec]");
    0x0000296c add.w r3, r3, r2, lsl 5                   |     r3 += (r2 << 5);
    0x00002970 strh.w r2, [r1, 0x6f4]                    |     *((r1 + 0x6f4)) = r2;
                                                         |     do {
                                                         |         if (r2 == 0) {
    0x00002974 cbz r2, 0x2994                            |             goto label_130;
                                                         |         }
    0x00002976 ldr r1, [r3, -0x20]                       |         r1 = *((r3 - 0x20));
    0x0000297a subs r2, 1                                |         r2--;
    0x0000297c subs r3, 0x20                             |         r3 -= 0x20;
    0x0000297e cmp r1, r0                                |         
    0x00002980 bne 0x2974                                |         
                                                         |     } while (r1 != r0);
    0x00002982 ldr.w r2, [pc, 0x810]                     |     r2 = *(0x00003194);
    0x00002986 ldr r1, [r3, 8]                           |     r1 = *((r3 + 8));
    0x00002988 ldr r3, [r3, 0x14]                        |     r3 = *((r3 + 0x14));
    0x0000298a add r2, pc                                |     r2 += pc;
    0x0000298c str.w r1, [r2, 0x7e8]                     |     __asm ("str.w r1, [r2, 0x7e8]");
    0x00002990 str.w r3, [r2, 0x7ec]                     |     __asm ("str.w r3, [r2, 0x7ec]");
                                                         | label_130:
    0x00002994 ldr.w r0, [pc, 0x800]                     |     r0 = *(0x00003198);
    0x00002998 add r0, pc                                |     r0 += pc;
    0x0000299a ldr.w r3, [r0, 0x7d0]                     |     r3 = *((r0 + 0x7d0));
    0x0000299e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000029a0 bne.w 0x3258                              |         goto label_131;
                                                         |     }
                                                         | label_13:
    0x000029a4 ldr.w r3, [fp, 0x134]                     |     r3 = *(arg_134h);
    0x000029a8 ldr.w r2, [fp, 0x34]                      |     r2 = *(arg_34h);
    0x000029ac ldr r4, [r2, 4]                           |     r4 = *((r2 + 4));
                                                         |     if (r3 != 0) {
    0x000029ae cbz r3, 0x29d4                            |         
    0x000029b0 ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000029b2 ldrb r2, [r4, r3]                         |         r2 = *((r4 + r3));
    0x000029b4 add r3, r4                                |         r3 += r4;
                                                         |         if (r2 == 0) {
    0x000029b6 cbz r2, 0x29d4                            |             goto label_132;
                                                         |         }
    0x000029b8 ldr.w r2, [sl, 0x40]                      |         r2 = *((sl + 0x40));
    0x000029bc cmp r2, 0x10                              |         
                                                         |         if (r2 == 0x10) {
    0x000029be beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000029c2 str.w r3, [sl, r2, lsl 2]                 |         __asm ("str.w r3, [sl, r2, lsl 2]");
    0x000029c6 adds r2, 1                                |         r2++;
    0x000029c8 cmp r2, 1                                 |         
    0x000029ca str.w r2, [sl, 0x40]                      |         __asm ("str.w r2, [sl, 0x40]");
    0x000029ce it eq                                     |         
                                                         |         if (r2 == 1) {
    0x000029d0 streq r3, [sl, 0x48]                      |             *((sl + 0x48)) = r3;
                                                         |             goto label_132;
                                                         |         }
                                                         |     }
                                                         | label_132:
    0x000029d4 ldr.w r3, [fp, 0x138]                     |     r3 = *(arg_138h);
                                                         |     if (r3 != 0) {
    0x000029d8 cbz r3, 0x2a00                            |         
    0x000029da ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x000029dc ldrb r2, [r4, r3]                         |         r2 = *((r4 + r3));
    0x000029de add r4, r3                                |         r4 += r3;
                                                         |         if (r2 == 0) {
    0x000029e0 cbz r2, 0x2a00                            |             goto label_134;
                                                         |         }
    0x000029e2 ldr.w r3, [sl, 0x40]                      |         r3 = *((sl + 0x40));
    0x000029e6 cmp r3, 0x10                              |         
                                                         |         if (r3 == 0x10) {
    0x000029e8 beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000029ec str.w r4, [sl, r3, lsl 2]                 |         __asm ("str.w r4, [sl, r3, lsl 2]");
    0x000029f0 adds r3, 1                                |         r3++;
    0x000029f2 cmp r3, 1                                 |         
    0x000029f4 ldr.w r2, [sl, 0x164]                     |         r2 = *((sl + 0x164));
    0x000029f8 str.w r3, [sl, 0x40]                      |         __asm ("str.w r3, [sl, 0x40]");
                                                         |         if (r3 == 1) {
    0x000029fc beq.w 0x3604                              |             goto label_135;
                                                         |         }
                                                         |     }
                                                         | label_134:
    0x00002a00 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002a04 cmp r3, 6                                 |     
                                                         |     if (r3 == 6) {
    0x00002a06 beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x00002a0a ldr.w r3, [sl, 0x40]                      |     r3 = *((sl + 0x40));
    0x00002a0e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a10 bne.w 0x3264                              |         goto label_136;
                                                         |     }
    0x00002a14 movs r3, 1                                |     r3 = 1;
    0x00002a16 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
                                                         | label_16:
    0x00002a18 bl 0xd498                                 |     fcn_0000d498 ();
    0x00002a1c ldr.w r3, [fp, 0x74]                      |     r3 = *(arg_74h);
    0x00002a20 str r0, [r7, 0x20]                        |     *((r7 + 0x20)) = r0;
                                                         |     if (r3 != 0) {
    0x00002a22 cbz r3, 0x2a28                            |         
    0x00002a24 ldr r2, [r7, 0x2c]                        |         r2 = *((r7 + 0x2c));
    0x00002a26 str r2, [r3, 4]                           |         *((r3 + 4)) = r2;
                                                         |     }
    0x00002a28 ldr.w r3, [pc, 0x770]                     |     r3 = *(0x0000319c);
    0x00002a2c add r3, pc                                |     r3 += pc;
    0x00002a2e ldr.w r3, [r3, 0x60c]                     |     r3 = *((r3 + 0x60c));
                                                         |     if (r3 != 0) {
    0x00002a32 cbz r3, 0x2a38                            |         
    0x00002a34 ldr r2, [r7, 0x2c]                        |         r2 = *((r7 + 0x2c));
    0x00002a36 str r2, [r3, 4]                           |         *((r3 + 4)) = r2;
                                                         |     }
    0x00002a38 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00002a3a movs r3, 1                                |     r3 = 1;
    0x00002a3c ldr.w r4, [pc, 0x760]                     |     r4 = *(0x000031a0);
    0x00002a40 str r3, [r2, 0xc]                         |     *((r2 + 0xc)) = r3;
    0x00002a42 add r4, pc                                |     r4 += pc;
    0x00002a44 bl 0xbdec                                 |     dl_debug_state ();
    0x00002a48 ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x00002a4c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a4e bne.w 0x38f2                              |         goto label_137;
                                                         |     }
                                                         | label_36:
    0x00002a52 ldr r3, [r7, 0x28]                        |     r3 = *((r7 + 0x28));
    0x00002a54 ldr r3, [r3]                              |     r3 = *(r3);
    0x00002a56 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002a58 bne.w 0x436e                              |         goto label_138;
                                                         |     }
    0x00002a5c ldr.w r4, [sl, 0x154]                     |     r4 = *((sl + 0x154));
    0x00002a60 cmp r4, 0                                 |     
                                                         |     if (r4 != 0) {
    0x00002a62 bne.w 0x393c                              |         goto label_139;
                                                         |     }
                                                         | label_37:
    0x00002a66 ldr.w r0, [sl, 0x158]                     |     r0 = *((sl + 0x158));
    0x00002a6a cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00002a6c bne.w 0x3a6a                              |         goto label_140;
                                                         |     }
                                                         | label_39:
    0x00002a70 ldr.w r5, [pc, 0x730]                     |     r5 = *(0x000031a4);
    0x00002a74 movs r1, 4                                |     r1 = 4;
    0x00002a76 add r5, pc                                |     r5 += pc;
    0x00002a78 mov r0, r5                                |     r0 = r5;
    0x00002a7a bl 0x146f8                                |     r0 = fcn_000146f8 ();
    0x00002a7e cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002a80 beq.w 0x3950                              |         goto label_141;
                                                         |     }
                                                         | label_38:
    0x00002a84 ldr r3, [r7, 0x28]                        |     r3 = *((r7 + 0x28));
    0x00002a86 ldr r1, [r3]                              |     r1 = *(r3);
    0x00002a88 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002a8a bne.w 0x38b0                              |         goto label_142;
                                                         |     }
                                                         | label_35:
    0x00002a8e ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002a92 movs r0, 0                                |     r0 = 0;
    0x00002a94 str r0, [sp]                              |     *(sp) = r0;
    0x00002a96 mov r2, r4                                |     r2 = r4;
    0x00002a98 mov r0, fp                                |     r0 = fp;
    0x00002a9a sub.w r3, r3, 3                           |     r3 -= 3;
    0x00002a9e clz r3, r3                                |     r3 &= r3;
    0x00002aa2 lsrs r3, r3, 5                            |     r3 >>= 5;
    0x00002aa4 bl 0xa720                                 |     fcn_0000a720 (r0, r1, r2, r3, r4, r5, r6);
    0x00002aa8 ldr.w r0, [fp, 0x164]                     |     r0 = *(arg_164h);
    0x00002aac cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002aae beq.w 0x3894                              |         goto label_143;
                                                         |     }
    0x00002ab2 ldr.w r4, [fp, 0x160]                     |     r4 = *(arg_160h);
    0x00002ab6 add.w r2, r4, r0, lsl 2                   |     r2 = r4 + (r0 << 2);
                                                         |     do {
    0x00002aba ldr r1, [r2, -0x4]!                       |         r1 = *((r2 -= 0x4));
    0x00002abe ldrb.w r3, [r1, 0x198]                    |         r3 = *((r1 + 0x198));
    0x00002ac2 cmp r2, r4                                |         
    0x00002ac4 orr r3, r3, 0x10                          |         r3 |= 0x10;
    0x00002ac8 strb.w r3, [r1, 0x198]                    |         *((r1 + 0x198)) = r3;
    0x00002acc bne 0x2aba                                |         
                                                         |     } while (r2 != r4);
    0x00002ace ldr.w r3, [pc, 0x6d8]                     |     r3 = *(0x000031a8);
    0x00002ad2 add r3, pc                                |     r3 += pc;
    0x00002ad4 ldr.w r2, [r3, 0x5a8]                     |     r2 = *((r3 + 0x5a8));
    0x00002ad8 ldr.w r1, [r3, 0x5a4]                     |     r1 = *((r3 + 0x5a4));
    0x00002adc str r1, [r2, 0xc]                         |     *((r2 + 0xc)) = r1;
    0x00002ade ldr.w r3, [r3, 0x5a4]                     |     r3 = *((r3 + 0x5a4));
                                                         |     if (r3 != 0) {
    0x00002ae2 cbz r3, 0x2ae6                            |         
                                                         | label_33:
    0x00002ae4 str r2, [r3, 0x10]                        |         *((r3 + 0x10)) = r2;
                                                         |     }
    0x00002ae6 cmp r0, 1                                 |     
    0x00002ae8 ldr.w r5, [sl, 0x164]                     |     r5 = *((sl + 0x164));
                                                         |     if (r0 < 1) {
    0x00002aec bls.w 0x2ea4                              |         goto label_144;
                                                         |     }
    0x00002af0 ldr.w ip, [pc, 0x6b8]                     |     ip = *(0x000031ac);
    0x00002af4 movs r3, 1                                |     r3 = 1;
    0x00002af6 ldr.w r6, [fp, 0x160]                     |     r6 = *(arg_160h);
    0x00002afa add ip, pc                                |     
    0x00002afc mov r2, r6                                |     r2 = r6;
    0x00002afe add.w r4, ip, 0x598                       |     r4 = ip + 0x598;
    0x00002b02 b 0x2b0c                                  |     
                                                         |     while (r1 != r4) {
    0x00002b04 adds r3, 1                                |         r3++;
    0x00002b06 cmp r0, r3                                |         
                                                         |         if (r0 == r3) {
    0x00002b08 beq.w 0x2ea4                              |             goto label_144;
                                                         |         }
    0x00002b0c ldr r1, [r2, 4]!                          |         r1 = *((r2 += 4));
    0x00002b10 cmp r1, r4                                |         
    0x00002b12 bne 0x2b04                                |         
                                                         |     }
    0x00002b14 add.w r2, r3, 0x40000000                  |     r2 = r3 + 0x40000000;
    0x00002b18 subs r2, 1                                |     r2--;
    0x00002b1a ldr.w r1, [r6, r2, lsl 2]                 |     offset_2 = r2 << 2;
                                                         |     r1 = *((r6 + offset_2));
    0x00002b1e lsls r2, r2, 2                            |     r2 <<= 2;
    0x00002b20 str.w r1, [ip, 0x5a8]                     |     __asm ("str.w r1, [ip, 0x5a8]");
    0x00002b24 cmp r5, 0                                 |     
                                                         |     if (r5 != 0) {
    0x00002b26 bne.w 0x3b5e                              |         goto label_145;
                                                         |     }
    0x00002b2a adds r3, 1                                |     r3++;
    0x00002b2c ldr.w r4, [pc, 0x680]                     |     r4 = *(0x000031b0);
    0x00002b30 cmp r3, r0                                |     
    0x00002b32 ldr.w r3, [pc, 0x680]                     |     r3 = *(0x000031b4);
    0x00002b36 itet lo                                   |     
                                                         |     if (r3 >= r0) {
    0x00002b38 addlo r2, r2, r6                          |         r2 += r6;
                                                         |     }
                                                         |     if (r3 < r0) {
    0x00002b3a movhs r0, r5                              |         r0 = r5;
                                                         |     }
                                                         |     if (r3 >= r0) {
    0x00002b3c ldrlo r0, [r2, 8]                         |         r0 = *((r2 + 8));
                                                         |     }
    0x00002b3e add r4, pc                                |     r4 += pc;
    0x00002b40 add r3, pc                                |     r3 += pc;
    0x00002b42 ldr.w r3, [r3, 0x194]                     |     r3 = *((r3 + 0x194));
    0x00002b46 str.w r0, [r4, 0x5a4]                     |     __asm ("str.w r0, [r4, 0x5a4]");
    0x00002b4a ldr r2, [r1, 0xc]                         |     r2 = *((r1 + 0xc));
                                                         |     if (r3 != 0) {
    0x00002b4c cbz r3, 0x2b64                            |         
    0x00002b4e subs r6, r3, r2                           |         r6 = r3 - r2;
    0x00002b50 cmp r3, r0                                |         
    0x00002b52 clz r6, r6                                |         r6 &= r6;
    0x00002b56 lsr.w r6, r6, 5                           |         r6 >>= 5;
    0x00002b5a it eq                                     |         
                                                         |         if (r3 != r0) {
    0x00002b5c moveq r6, 0                               |             r6 = 0;
                                                         |         }
    0x00002b5e cmp r6, 0                                 |         
                                                         |         if (r6 != 0) {
    0x00002b60 bne.w 0x3888                              |             goto label_146;
                                                         |         }
                                                         |     }
                                                         | label_32:
    0x00002b64 cmp r2, r0                                |     
                                                         |     if (r2 != r0) {
    0x00002b66 bne.w 0x444e                              |         goto label_147;
                                                         |     }
    0x00002b6a ldr.w r3, [pc, 0x64c]                     |     r3 = *(0x000031b8);
    0x00002b6e add r3, pc                                |     r3 += pc;
    0x00002b70 add.w r0, r3, 0x598                       |     r0 = r3 + 0x598;
    0x00002b74 str r0, [r1, 0xc]                         |     *((r1 + 0xc)) = r0;
    0x00002b76 ldr.w r3, [r3, 0x5a4]                     |     r3 = *((r3 + 0x5a4));
    0x00002b7a cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002b7c beq.w 0x35a4                              |         goto label_148;
                                                         |     }
    0x00002b80 ldr r2, [r3, 0x10]                        |     r2 = *((r3 + 0x10));
    0x00002b82 cmp r2, r1                                |     
    0x00002b84 ittt eq                                   |     
                                                         |     if (r2 != r1) {
    0x00002b86 streq r0, [r3, 0x10]                      |         *((r3 + 0x10)) = r0;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b88 moveq r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b8a streq r3, [r7, 0x34]                      |         *((r7 + 0x34)) = r3;
                                                         |     }
                                                         |     if (r2 != r1) {
    0x00002b8c bne.w 0x4402                              |         goto label_149;
                                                         |     }
                                                         | label_7:
    0x00002b90 clz r3, r5                                |     r3 &= r5;
    0x00002b94 sub.w r5, r5, 3                           |     r5 -= 3;
    0x00002b98 ldr.w r1, [pc, 0x620]                     |     r1 = *(0x000031bc);
    0x00002b9c clz r5, r5                                |     r5 &= r5;
    0x00002ba0 ldr.w r0, [pc, 0x61c]                     |     r0 = *(0x000031c0);
    0x00002ba4 lsrs r3, r3, 5                            |     r3 >>= 5;
    0x00002ba6 lsrs r5, r5, 5                            |     r5 >>= 5;
    0x00002ba8 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00002bac add r1, pc                                |     r1 += pc;
    0x00002bae strd r3, r5, [r6]                         |     __asm ("strd r3, r5, [r6]");
    0x00002bb2 add r0, pc                                |     r0 += pc;
    0x00002bb4 mov r2, r6                                |     r2 = r6;
    0x00002bb6 bl 0x12578                                |     fcn_00012578 (r0, r1);
    0x00002bba ldr.w r3, [pc, 0x608]                     |     r3 = *(0x000031c4);
    0x00002bbe add r3, pc                                |     r3 += pc;
    0x00002bc0 ldrb r3, [r3, 4]                          |     r3 = *((r3 + 4));
    0x00002bc2 str r3, [r7, 0x30]                        |     *((r7 + 0x30)) = r3;
    0x00002bc4 ldr r3, [r7, 0x38]                        |     r3 = *((r7 + 0x38));
    0x00002bc6 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002bc8 beq.w 0x3688                              |         goto label_150;
                                                         |     }
                                                         | label_25:
    0x00002bcc ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
                                                         |     if (r3 != 0) {
    0x00002bce cbz r3, 0x2bf6                            |         
    0x00002bd0 ldr.w r3, [pc, 0x5f4]                     |         r3 = *(0x000031c8);
    0x00002bd4 movs r5, 0                                |         r5 = 0;
    0x00002bd6 ldr r1, [r7, 0x24]                        |         r1 = *((r7 + 0x24));
    0x00002bd8 ldr.w r2, [pc, 0x5f0]                     |         r2 = *(0x31cc);
    0x00002bdc add r3, pc                                |         r3 += pc;
    0x00002bde ldr.w r4, [pc, 0x5f0]                     |         r4 = *(0x000031d0);
    0x00002be2 ldr r0, [r3]                              |         r0 = *(r3);
    0x00002be4 ldr r2, [r1, r2]                          |         r2 = *((r1 + r2));
    0x00002be6 add r4, pc                                |         r4 += pc;
    0x00002be8 ldr r1, [r0]                              |         r1 = *(r0);
    0x00002bea str r5, [r3]                              |         *(r3) = r5;
    0x00002bec ldr r3, [r0, 4]                           |         r3 = *((r0 + 4));
    0x00002bee bic r1, r1, 0xff                          |         r1 = BIT_MASK (r1, 0xff);
    0x00002bf2 str r1, [r2]                              |         *(r2) = r1;
    0x00002bf4 str r3, [r4, 0x44]                        |         *((r4 + 0x44)) = r3;
                                                         |     }
    0x00002bf6 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00002bfa cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002bfc bne.w 0x3a96                              |         goto label_151;
                                                         |     }
                                                         | label_45:
    0x00002c00 ldr.w r3, [fp, 0x140]                     |     r3 = *(arg_140h);
    0x00002c04 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00002c06 beq.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002c0a ldr.w r2, [pc, 0x5c8]                     |     r2 = *(0x000031d4);
    0x00002c0e add r2, pc                                |     r2 += pc;
    0x00002c10 ldr.w r1, [r2, 0x17c]                     |     r1 = *((r2 + 0x17c));
    0x00002c14 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002c16 bne.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002c1a ldr r2, [r2, 0x38]                        |     r2 = *((r2 + 0x38));
    0x00002c1c cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00002c1e bne.w 0x2f14                              |         goto label_152;
                                                         |     }
    0x00002d46 ldr r1, [r3, -0xc]                        |     r1 = *((r3 - 0xc));
    0x00002d4a cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00002d4c beq.w 0x2040                              |         goto label_3;
                                                         |     }
    0x00002d50 str.w r1, [fp, 0x238]                     |     __asm ("str.w r1, [arg_238h]");
    0x00002d54 ldr r1, [r3, -0x4]                        |     r1 = *((r3 - 0x4));
    0x00002d58 str.w r1, [fp, 0x23c]                     |     __asm ("str.w r1, [arg_23ch]");
    0x00002d5c ldr r0, [r3, -0x18]                       |     r0 = *((r3 - 0x18));
    0x00002d60 cmp r1, 0                                 |     
                                                         |     if (r1 != 0) {
    0x00002d62 bne.w 0x3406                              |         goto label_153;
                                                         |     }
                                                         | label_18:
    0x00002d66 str.w r1, [fp, 0x240]                     |     __asm ("str.w r1, [arg_240h]");
    0x00002d6a adds r3, 0x20                             |     r3 += 0x20;
    0x00002d6c ldr r1, [r3, -0x30]                       |     r1 = *((r3 - 0x30));
    0x00002d70 cmp r8, r3                                |     
    0x00002d72 strd r0, r1, [fp, 0x230]                  |     __asm ("strd r0, r1, [fp, 0x230]");
    0x00002d76 mov.w r1, 1                               |     r1 = 1;
    0x00002d7a ldr r0, [r7, 0x18]                        |     r0 = *((r7 + 0x18));
    0x00002d7c str.w r1, [fp, 0x248]                     |     __asm ("str.w r1, [arg_248h]");
    0x00002d80 str.w r1, [r0, 0x880]                     |     __asm ("str.w r1, [r0, 0x880]");
                                                         |     if (r8 != r3) {
    0x00002d84 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002d88 b.w 0x2046                                |     goto label_5;
    0x00002d8c ldr r1, [r3, -0x18]                       |     r1 = *((r3 - 0x18));
    0x00002d90 adds r3, 0x20                             |     r3 += 0x20;
    0x00002d92 cmp r8, r3                                |     
    0x00002d94 sub.w r1, r6, r1                          |     r1 = r6 - r1;
    0x00002d98 str.w r1, [fp]                            |     __asm ("str.w r1, [fp]");
                                                         |     if (r8 != r3) {
    0x00002d9c bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002da0 b.w 0x2046                                |     goto label_5;
    0x00002da4 ldr r1, [r3, -0x18]                       |     r1 = *((r3 - 0x18));
    0x00002da8 adds r3, 0x20                             |     r3 += 0x20;
    0x00002daa ldr.w r0, [fp]                            |     r0 = *(fp);
    0x00002dae cmp r8, r3                                |     
    0x00002db0 add r1, r0                                |     r1 += r0;
    0x00002db2 str.w r1, [fp, 8]                         |     __asm ("str.w r1, [arg_8h]");
                                                         |     if (r8 != r3) {
    0x00002db6 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002dba b.w 0x2046                                |     goto label_5;
    0x00002dbe ldr r0, [r3, -0x18]                       |     r0 = *((r3 - 0x18));
    0x00002dc2 ldr r4, [r7, 0x34]                        |     r4 = *((r7 + 0x34));
    0x00002dc4 ldr.w r1, [fp]                            |     r1 = *(fp);
    0x00002dc8 and.w lr, r0, r4                          |     lr = r0 & r4;
    0x00002dcc ldr.w r4, [fp, 0x1b4]                     |     r4 = *(arg_1b4h);
    0x00002dd0 add lr, r1                                |     lr += r1;
    0x00002dd2 cmp r4, lr                                |     
    0x00002dd4 it hi                                     |     
                                                         |     if (r4 <= lr) {
    0x00002dd6 strhi lr, [fp, 0x1b4]                     |         
                                                         |     }
    0x00002dda ldr r4, [r3, -0xc]                        |     r4 = *((r3 - 0xc));
    0x00002dde add r0, r4                                |     r0 += r4;
    0x00002de0 add r0, r1                                |     r0 += r1;
    0x00002de2 ldr.w r1, [fp, 0x1b8]                     |     r1 = *(arg_1b8h);
    0x00002de6 cmp r1, r0                                |     
    0x00002de8 it lo                                     |     
                                                         |     if (r1 >= r0) {
    0x00002dea strlo r0, [fp, 0x1b8]                     |         *(arg_1b8h) = r0;
                                                         |     }
    0x00002dee ldr r1, [r3, -0x8]                        |     r1 = *((r3 - 0x8));
    0x00002df2 lsls r1, r1, 0x1f                         |     r1 <<= 0x1f;
                                                         |     if (r1 >= r1) {
    0x00002df4 bpl.w 0x2040                              |         goto label_3;
                                                         |     }
    0x00002df8 ldr.w r1, [fp, 0x1bc]                     |     r1 = *(arg_1bch);
    0x00002dfc adds r3, 0x20                             |     r3 += 0x20;
    0x00002dfe cmp r1, r0                                |     
    0x00002e00 it lo                                     |     
                                                         |     if (r1 >= r0) {
    0x00002e02 strlo r0, [fp, 0x1bc]                     |         *(arg_1bch) = r0;
                                                         |     }
    0x00002e06 cmp r8, r3                                |     
                                                         |     if (r8 != r3) {
    0x00002e08 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e0c b.w 0x2046                                |     goto label_5;
    0x00002e10 ldr lr, [r3, -0x18]                       |     
    0x00002e14 ldr.w ip, [fp]                            |     ip = *(fp);
    0x00002e18 ldr r1, [r7, 0x20]                        |     r1 = *((r7 + 0x20));
    0x00002e1a ldr.w r0, [sb, 0x5a0]                     |     r0 = *((sb + 0x5a0));
    0x00002e1e ldr r4, [r7, 0x28]                        |     r4 = *((r7 + 0x28));
    0x00002e20 str.w r1, [sb, 0x5b4]                     |     __asm ("str.w r1, [sb, 0x5b4]");
    0x00002e24 add.w r1, lr, ip                          |     r1 = lr + ip;
    0x00002e28 str r1, [r4, 0x14]                        |     *((r4 + 0x14)) = r1;
    0x00002e2a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00002e2c beq.w 0x364c                              |         goto label_154;
                                                         |     }
                                                         | label_24:
    0x00002e30 adds r3, 0x20                             |     r3 += 0x20;
    0x00002e32 movs r1, 1                                |     r1 = 1;
    0x00002e34 cmp r8, r3                                |     
    0x00002e36 str r1, [r7, 0x40]                        |     *((r7 + 0x40)) = r1;
                                                         |     if (r8 != r3) {
    0x00002e38 bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e3c b.w 0x2046                                |     goto label_5;
                                                         | label_85:
    0x00002e40 ldr r1, [r3, -0x8]                        |     r1 = *((r3 - 0x8));
    0x00002e44 adds r3, 0x20                             |     r3 += 0x20;
    0x00002e46 ldr r0, [r7, 0x2c]                        |     r0 = *((r7 + 0x2c));
    0x00002e48 cmp r8, r3                                |     
    0x00002e4a str.w r1, [r0, 0x878]                     |     __asm ("str.w r1, [r0, 0x878]");
                                                         |     if (r8 != r3) {
    0x00002e4e bne.w 0x2004                              |         goto label_4;
                                                         |     }
    0x00002e52 b.w 0x2046                                |     goto label_5;
                                                         | label_107:
    0x00002e56 ldr r1, [r5]                              |     r1 = *(r5);
    0x00002e58 ldr r6, [r2, 8]                           |     r6 = *((r2 + 8));
                                                         |     if (r1 == 0) {
    0x00002e5a cbnz r1, 0x2e5e                           |         
    0x00002e5c str r6, [r5]                              |         *(r5) = r6;
                                                         |     }
    0x00002e5e ldr r1, [r2, 0x14]                        |     r1 = *((r2 + 0x14));
    0x00002e60 add r6, r1                                |     r6 += r1;
    0x00002e62 ldr.w r1, [r5, 0x1b8]                     |     r1 = *((r5 + 0x1b8));
    0x00002e66 cmp r6, r1                                |     
    0x00002e68 it hs                                     |     
                                                         |     if (r6 < r1) {
    0x00002e6a strhs r6, [r5, 0x1b8]                     |         *((r5 + 0x1b8)) = r6;
                                                         |     }
    0x00002e6e ldr r1, [r2, 0x18]                        |     r1 = *((r2 + 0x18));
    0x00002e70 lsls r1, r1, 0x1f                         |     r1 <<= 0x1f;
                                                         |     if (r1 >= r1) {
    0x00002e72 bpl.w 0x2438                              |         goto label_6;
                                                         |     }
    0x00002e76 ldr.w r1, [r5, 0x1bc]                     |     r1 = *((r5 + 0x1bc));
    0x00002e7a cmp r6, r1                                |     
    0x00002e7c it hs                                     |     
                                                         |     if (r6 < r1) {
    0x00002e7e strhs r6, [r5, 0x1bc]                     |         *((r5 + 0x1bc)) = r6;
                                                         |     }
    0x00002e82 b.w 0x2438                                |     goto label_6;
                                                         | label_67:
    0x00002e86 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00002e8a subs r4, 2                                |     r4 -= 2;
    0x00002e8c ldr r2, [pc, 0x354]                       |     
    0x00002e8e str.w r3, [sl, 0x14c]                     |     __asm ("str.w r3, [sl, 0x14c]");
    0x00002e92 ldr r3, [r7, 0x30]                        |     r3 = *((r7 + 0x30));
    0x00002e94 add r2, pc                                |     r2 = 0x607c;
    0x00002e96 str.w r3, [sl, 0x150]                     |     __asm ("str.w r3, [sl, 0x150]");
    0x00002e9a ldr r3, [r2, 0x10]                        |     r3 = *(0x608c);
    0x00002e9c adds r3, 2                                |     r3 += 2;
    0x00002e9e str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00002ea0 b.w 0x1a2e                                |     goto label_0;
                                                         | label_144:
    0x00002ea4 movs r3, 0                                |     r3 = 0;
    0x00002ea6 str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x00002ea8 b 0x2b90                                  |     goto label_7;
                                                         | label_105:
    0x00002eaa ldr r3, [pc, 0x33c]                       |     
    0x00002eac add r3, pc                                |     r3 = 0x609a;
    0x00002eae ldr.w r5, [r3, 0x194]                     |     r5 = *(0x622e);
    0x00002eb2 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00002eb4 beq.w 0x35ac                              |         goto label_155;
                                                         |     }
    0x00002eb8 ldr r3, [pc, 0x330]                       |     
    0x00002eba add r3, pc                                |     r3 = 0x60aa;
    0x00002ebc addw r3, r3, 0x5a4                        |     __asm ("addw r3, r3, 0x5a4");
    0x00002ec0 str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
    0x00002ec2 b 0x2728                                  |     goto label_8;
    0x00002ec4 ldr r3, [r5]                              |     r3 = *(r5);
    0x00002ec6 str r3, [r2, 4]                           |     *((r2 + 4)) = r3;
                                                         | label_83:
    0x00002ec8 ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002ecc cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002ece bne.w 0x1efa                              |         goto label_9;
                                                         |     }
                                                         | label_11:
    0x00002ed2 ldr r3, [r7, 0x20]                        |     r3 = *((r7 + 0x20));
                                                         |     if (r3 != 0) {
    0x00002ed4 cbz r3, 0x2ee0                            |         
    0x00002ed6 ldr r3, [pc, 0x318]                       |         
    0x00002ed8 ldr r2, [r7, 0x20]                        |         r2 = *((r7 + 0x20));
    0x00002eda add r3, pc                                |         
    0x00002edc ldr r3, [r3]                              |         r3 = *(0x60d0);
    0x00002ede str r2, [r3]                              |         *(r3) = r2;
                                                         |     }
    0x00002ee0 movs r3, 1                                |     r3 = 1;
    0x00002ee2 str r3, [r7, 0x30]                        |     *((r7 + 0x30)) = r3;
    0x00002ee4 b.w 0x1f88                                |     goto label_10;
    0x00002ee8 ldr r3, [r0]                              |     r3 = *(r0);
    0x00002eea str r3, [r2, 4]                           |     *((r2 + 4)) = r3;
    0x00002eec ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002ef0 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002ef2 bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002ef6 b 0x2ed2                                  |     goto label_11;
    0x00002ef8 str r4, [r2, 4]                           |     *((r2 + 4)) = r4;
    0x00002efa ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002efe cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002f00 bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002f04 b 0x2ed2                                  |     goto label_11;
    0x00002f06 str r6, [r2, 4]                           |     *((r2 + 4)) = r6;
    0x00002f08 ldr r3, [r2, 8]!                          |     r3 = *((r2 += 8));
    0x00002f0c cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00002f0e bne.w 0x1efa                              |         goto label_9;
                                                         |     }
    0x00002f12 b 0x2ed2                                  |     goto label_11;
                                                         | label_152:
    0x00002f14 ldr r3, [pc, 0x2dc]                       |     
    0x00002f16 add r3, pc                                |     r3 = 0x610e;
    0x00002f18 ldr r4, [r3]                              |     r4 = *(0x610e);
    0x00002f1a ldr r2, [pc, 0x2dc]                       |     
    0x00002f1c add.w r1, fp, 0x160                       |     r1 += arg_160h;
    0x00002f20 ldr r3, [pc, 0x2d8]                       |     
    0x00002f22 add r2, pc                                |     
    0x00002f24 str r1, [r2, 8]                           |     *((r2 + 8)) = r1;
    0x00002f26 add r3, pc                                |     r3 = 0x6126;
    0x00002f28 ldr.w r2, [r2, 0x590]                     |     r2 = *(0x66b0);
    0x00002f2c adds r3, 0x1c                             |     r3 += 0x1c;
    0x00002f2e ldm r1, {r0, r1}                          |     r0 = *(r1);
                                                         |     r1 = *((r1 + 4));
    0x00002f30 str.w r2, [r3, 0x170]                     |     __asm ("str.w r2, [r3, 0x170]");
    0x00002f34 stm.w r3, {r0, r1}                        |     *(r3) = r0;
                                                         |     *((r3 + 4)) = r1;
    0x00002f38 lsls r1, r4, 0x16                         |     r1 = r4 << 0x16;
                                                         |     if (r1 < r4) {
    0x00002f3a bmi.w 0x34a4                              |         goto label_156;
                                                         |     }
    0x00002f3e ldr r3, [pc, 0x2c0]                       |     
    0x00002f40 ldr.w r1, [fp, 0x164]                     |     r1 = *(arg_164h);
    0x00002f44 add r3, pc                                |     r3 = 0x614a;
    0x00002f46 ldr.w r6, [r3, 0x17c]                     |     r6 = *(0x62c6);
    0x00002f4a subs r4, r1, 1                            |     r4 = r1 - 1;
    0x00002f4c ldr r2, [r3, 0x30]                        |     r2 = *(0x617a);
    0x00002f4e subs r6, 0                                |     
    0x00002f50 it ne                                     |     
                                                         |     if (r6 == 0) {
    0x00002f52 movne r6, 1                               |         r6 = 1;
                                                         |     }
    0x00002f54 orrs r2, r6                               |     r2 |= r6;
    0x00002f56 str r2, [r3, 0x30]                        |     *((r3 + 0x30)) = r2;
    0x00002f58 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00002f5a beq 0x2fd0                                |         void (*0x2fd0)() ();
                                                         |     }
                                                         | label_68:
    0x00003098 ldr r2, [pc, 0x194]                       |     
    0x0000309a subs r4, 2                                |     r4 -= 2;
    0x0000309c ldr r3, [pc, 0x194]                       |     
    0x0000309e ldr r1, [r5, 8]!                          |     r1 = *((r5 += 8));
    0x000030a2 add r2, pc                                |     r2 = 0x62d6;
    0x000030a4 add r3, pc                                |     r3 = 0x62dc;
    0x000030a6 str.w r1, [r3, 0x164]                     |     __asm ("str.w r1, [r3, 0x164]");
    0x000030aa ldr r3, [r2, 0x10]                        |     r3 = *(0x62e6);
    0x000030ac adds r3, 2                                |     r3 += 2;
    0x000030ae str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x000030b0 b.w 0x1a2e                                |     goto label_0;
                                                         | label_87:
    0x0000323c ldr.w r1, [r3, 0x59c]                     |     r1 = *((r3 + 0x59c));
    0x00003240 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00003242 beq.w 0x3bda                              |         goto label_157;
                                                         |     }
    0x00003246 ldr.w r2, [pc, 0xc5c]                     |     r2 = *(0x00003ea4);
    0x0000324a add r2, pc                                |     r2 += pc;
    0x0000324c str r1, [r2, 0x14]!                       |     *((r2 += 0x14)) = r1;
    0x00003250 str.w r2, [r3, 0x5b4]                     |     __asm ("str.w r2, [r3, 0x5b4]");
    0x00003254 b.w 0x20a4                                |     goto label_12;
                                                         | label_131:
    0x00003258 add.w r0, r0, 0x598                       |     r0 += 0x598;
    0x0000325c bl 0xd3e0                                 |     fcn_0000d3e0 (r0);
    0x00003260 b.w 0x29a4                                |     goto label_13;
                                                         | label_136:
    0x00003264 ldr.w r3, [sl, 0x44]                      |     r3 = *((sl + 0x44));
    0x00003268 ldr.w r4, [sl, 0x48]                      |     r4 = *((sl + 0x48));
    0x0000326c str r3, [r7, 0x20]                        |     *((r7 + 0x20)) = r3;
    0x0000326e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003270 bne.w 0x3618                              |         goto label_158;
                                                         |     }
                                                         |     if (r4 == 0) {
    0x00003274 cbz r4, 0x328c                            |         goto label_159;
                                                         |     }
                                                         | label_23:
    0x00003276 movs r5, 0                                |     r5 = 0;
                                                         |     do {
    0x00003278 mov r0, sl                                |         r0 = sl;
    0x0000327a bl 0x1064                                 |         r0 = fcn_00001064 (r0);
                                                         |         if (r0 == 0) {
    0x0000327e cbz r0, 0x328a                            |             goto label_160;
                                                         |         }
    0x00003280 ldr.w r3, [sl, 0x48]                      |         r3 = *((sl + 0x48));
    0x00003284 adds r5, 1                                |         r5++;
    0x00003286 cmp r3, 0                                 |         
    0x00003288 bne 0x3278                                |         
                                                         |     } while (r3 != 0);
                                                         | label_160:
    0x0000328a str r5, [r7, 0x20]                        |     *((r7 + 0x20)) = r5;
                                                         | label_159:
    0x0000328c str.w r4, [sl, 0x48]                      |     __asm ("str.w r4, [sl, 0x48]");
    0x00003290 movs r4, 0                                |     r4 = 0;
    0x00003292 ldr r0, [r7, 0x20]                        |     r0 = *((r7 + 0x20));
    0x00003294 str.w r4, [sl, 0x44]                      |     __asm ("str.w r4, [sl, 0x44]");
    0x00003298 bl 0xec0                                  |     fcn_00000ec0 ();
    0x0000329c ldr.w r3, [pc, 0xc08]                     |     r3 = *(0x00003ea8);
    0x000032a0 ldr.w r2, [pc, 0xc08]                     |     r2 = *(0x3eac);
    0x000032a4 ldr r1, [r7, 0x24]                        |     r1 = *((r7 + 0x24));
    0x000032a6 add r3, pc                                |     r3 += pc;
    0x000032a8 str r0, [r7, 0x1c]                        |     *((r7 + 0x1c)) = r0;
    0x000032aa ldr r0, [r3]                              |     r0 = *(r3);
    0x000032ac ldr r6, [r1, r2]                          |     r6 = *((r1 + r2));
    0x000032ae ldr.w r5, [pc, 0xc00]                     |     r5 = *(0x00003eb0);
    0x000032b2 ldr r2, [r0]                              |     r2 = *(r0);
    0x000032b4 ldr.w r1, [sl, 0x48]                      |     r1 = *((sl + 0x48));
    0x000032b8 str r4, [r3]                              |     *(r3) = r4;
    0x000032ba add r5, pc                                |     r5 += pc;
    0x000032bc ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
    0x000032be bic r2, r2, 0xff                          |     r2 = BIT_MASK (r2, 0xff);
    0x000032c2 str r2, [r6]                              |     *(r6) = r2;
    0x000032c4 str r3, [r5, 0x44]                        |     *((r5 + 0x44)) = r3;
    0x000032c6 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x000032c8 beq.w 0x33d2                              |         goto label_161;
                                                         |     }
    0x000032cc ldr.w r3, [pc, 0xbe4]                     |     
    0x000032d0 ldr.w r2, [pc, 0xbe4]                     |     r2 = *(0x00003eb8);
    0x000032d4 str.w fp, [r7, 0x18]                      |     __asm ("str.w fp, [r7, 0x18]");
    0x000032d8 add r3, pc                                |     
    0x000032da ldr.w fp, [r7, 0x44]                      |     fp = *((r7 + 0x44));
    0x000032de add.w r3, r3, 0x380                       |     
    0x000032e2 add r2, pc                                |     r2 += pc;
    0x000032e4 str r3, [r7, 0x14]                        |     *((r7 + 0x14)) = r3;
    0x000032e6 ldr.w r3, [pc, 0xbd4]                     |     r3 = *(0x00003ebc);
    0x000032ea str r2, [r7, 0x34]                        |     *((r7 + 0x34)) = r2;
    0x000032ec ldr.w r2, [pc, 0xbd0]                     |     r2 = *(0x00003ec0);
    0x000032f0 add r3, pc                                |     
    0x000032f2 str r3, [r7, 0x10]                        |     *((r7 + 0x10)) = r3;
    0x000032f4 add.w r3, r3, 0x598                       |     r3 = 0xad9c;
    0x000032f8 add r2, pc                                |     r2 += pc;
    0x000032fa str r3, [r7, 0xc]                         |     *((r7 + 0xc)) = r3;
    0x000032fc str r2, [r7, 0x30]                        |     *((r7 + 0x30)) = r2;
    0x000032fe b 0x3364                                  |     
                                                         |     while (r6 == 0) {
    0x00003300 ldr.w r3, [pc, 0xbc0]                     |         r3 = *(0x00003ec4);
    0x00003304 add.w r6, r7, 0x64                        |         r6 = r7 + 0x64;
    0x00003308 ldr.w r1, [pc, 0xbbc]                     |         r1 = *(0x00003ec8);
    0x0000330c mov r0, sb                                |         r0 = sb;
    0x0000330e ldr.w r2, [fp, 4]                         |         r2 = *(arg_4h);
    0x00003312 add r3, pc                                |         r3 += pc;
    0x00003314 add r1, pc                                |         r1 += pc;
    0x00003316 strd r3, r2, [r6]                         |         __asm ("strd r3, r2, [r6]");
    0x0000331a mov r3, r1                                |         r3 = r1;
    0x0000331c str r1, [r7, 0x3c]                        |         *((r7 + 0x3c)) = r1;
    0x0000331e mov r2, r8                                |         r2 = r8;
    0x00003320 mov r1, r4                                |         r1 = r4;
    0x00003322 str r6, [sp]                              |         *(sp) = r6;
    0x00003324 blx 0xa04                                 |         fcn_00000a04 ();
    0x00003328 ldr r3, [r4]                              |         r3 = *(r4);
    0x0000332a cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x0000332c beq.w 0x3524                              |             goto label_162;
                                                         |         }
    0x00003330 ldr r1, [r7, 0x40]                        |         r1 = *((r7 + 0x40));
    0x00003332 ldr.w r0, [fp, 4]                         |         r0 = *(arg_4h);
    0x00003336 bl 0xfd4                                  |         fcn_00000fd4 (r0, r1);
    0x0000333a ldr r6, [r4]                              |         r6 = *(r4);
    0x0000333c mov r1, r5                                |         r1 = r5;
    0x0000333e ldrb.w r4, [r8]                           |         r4 = *(r8);
    0x00003342 ldr.w r0, [pc, 0xb88]                     |         
    0x00003346 mov r2, r6                                |         r2 = r6;
    0x00003348 add r0, pc                                |         r0 = 0x721a;
    0x0000334a bl 0xc284                                 |         fcn_0000c284 ();
                                                         |         if (r4 != 0) {
    0x0000334e cbz r4, 0x335c                            |             
    0x00003350 ldr.w r3, [pc, 0xb7c]                     |             r3 = *(0x00003ed0);
    0x00003354 mov r0, r6                                |             r0 = r6;
    0x00003356 add r3, pc                                |             r3 += pc;
    0x00003358 ldr r3, [r3]                              |             r3 = *(r3);
    0x0000335a blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                         |         }
                                                         | label_14:
    0x0000335c ldr.w r3, [sl, 0x48]                      |         r3 = *((sl + 0x48));
    0x00003360 cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x00003362 beq 0x33ce                                |             goto label_163;
                                                         |         }
                                                         | label_15:
    0x00003364 mov r0, sl                                |         r0 = sl;
    0x00003366 bl 0x1064                                 |         r0 = fcn_00001064 (r0);
    0x0000336a mov r5, r0                                |         r5 = r0;
                                                         |         if (r0 == 0) {
    0x0000336c cbz r0, 0x33ce                            |             goto label_163;
                                                         |         }
    0x0000336e add.w r4, r7, 0x50                        |         r4 = r7 + 0x50;
    0x00003372 movs r3, 0                                |         r3 = 0;
    0x00003374 str.w r3, [fp, 4]                         |         __asm ("str.w r3, [arg_4h]");
    0x00003378 add.w r8, r7, 0x4b                        |         r8 = r7 + 0x4b;
    0x0000337c str r3, [r4]                              |         *(r4) = r3;
    0x0000337e add.w sb, r7, 0x4c                        |         sb = r7 + 0x4c;
    0x00003382 ldr r3, [r7, 0x34]                        |         r3 = *((r7 + 0x34));
    0x00003384 mov r2, r8                                |         r2 = r8;
    0x00003386 str.w r0, [fp]                            |         __asm ("str.w r0, [fp]");
    0x0000338a mov r1, r4                                |         r1 = r4;
    0x0000338c mov r0, sb                                |         r0 = sb;
    0x0000338e ldr.w r3, [r3, 0x880]                     |         r3 = *((r3 + 0x880));
    0x00003392 str r3, [r7, 0x40]                        |         *((r7 + 0x40)) = r3;
    0x00003394 str.w fp, [sp]                            |         __asm ("str.w fp, [sp]");
    0x00003398 ldr r3, [r7, 0x30]                        |         r3 = *((r7 + 0x30));
    0x0000339a blx 0xa04                                 |         fcn_00000a04 ();
    0x0000339e ldr r6, [r4]                              |         r6 = *(r4);
    0x000033a0 cmp r6, 0                                 |         
    0x000033a2 beq 0x3300                                |         
                                                         |     }
    0x000033a4 ldrb.w r4, [r8]                           |     r4 = *(r8);
    0x000033a8 mov r1, r5                                |     r1 = r5;
    0x000033aa ldr.w r0, [pc, 0xb28]                     |     
    0x000033ae mov r2, r6                                |     r2 = r6;
    0x000033b0 add r0, pc                                |     r0 = 0x728a;
    0x000033b2 bl 0xc284                                 |     fcn_0000c284 ();
    0x000033b6 cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x000033b8 beq 0x335c                                |         goto label_14;
                                                         |     }
    0x000033ba ldr.w r3, [pc, 0xb1c]                     |     r3 = *(0x00003ed8);
    0x000033be mov r0, r6                                |     r0 = r6;
    0x000033c0 add r3, pc                                |     r3 += pc;
    0x000033c2 ldr r3, [r3]                              |     r3 = *(r3);
    0x000033c4 blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000033c6 ldr.w r3, [sl, 0x48]                      |     r3 = *((sl + 0x48));
    0x000033ca cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000033cc bne 0x3364                                |         goto label_15;
                                                         |     }
                                                         | label_163:
    0x000033ce ldr.w fp, [r7, 0x18]                      |     fp = *((r7 + 0x18));
                                                         | label_161:
    0x000033d2 ldr.w r4, [pc, 0xb08]                     |     r4 = *(0x00003edc);
    0x000033d6 add r4, pc                                |     r4 += pc;
    0x000033d8 ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x000033dc cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000033de bne.w 0x36b6                              |         goto label_164;
                                                         |     }
    0x000033e2 ldr r2, [r7, 0x1c]                        |     r2 = *((r7 + 0x1c));
    0x000033e4 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000033e6 str r2, [r7, 0x38]                        |     *((r7 + 0x38)) = r2;
    0x000033e8 b.w 0x2a18                                |     goto label_16;
                                                         | label_127:
    0x000033ec ldr.w r3, [r4, 0x5b4]                     |     r3 = *((r4 + 0x5b4));
    0x000033f0 ldr r3, [r3]                              |     r3 = *(r3);
    0x000033f2 str.w r3, [r4, 0x59c]                     |     __asm ("str.w r3, [r4, 0x59c]");
    0x000033f6 b.w 0x28e4                                |     goto label_17;
                                                         | label_78:
    0x000033fa cmp r0, 6                                 |     
                                                         |     if (r0 == 6) {
    0x000033fc beq 0x34c8                                |         goto label_22;
                                                         |     }
    0x000033fe ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x00003400 movs r1, 0                                |     r1 = 0;
    0x00003402 bl 0x12f50                                |     fcn_00012f50 (r0, r1);
                                                         | label_153:
    0x00003406 subs r1, 1                                |     r1--;
    0x00003408 ands r1, r0                               |     r1 &= r0;
    0x0000340a b 0x2d66                                  |     goto label_18;
                                                         | label_103:
    0x00003450 ldr.w r3, [pc, 0xa94]                     |     r3 = *(0x00003ee8);
    0x00003454 add r3, pc                                |     r3 += pc;
    0x00003456 str.w fp, [r3, 0x14]                      |     __asm ("str.w fp, [r3, 0x14]");
    0x0000345a b.w 0x229a                                |     goto label_19;
                                                         | label_156:
    0x000034a4 movs r4, 0                                |     r4 = 0;
    0x000034a6 ldr.w r0, [pc, 0xa54]                     |     
    0x000034aa mov r5, fp                                |     r5 = fp;
    0x000034ac add r0, pc                                |     r0 = 0x73ae;
    0x000034ae bl 0xc1f0                                 |     fcn_0000c1f0 ();
                                                         |     do {
    0x000034b2 mov r0, r5                                |         r0 = r5;
    0x000034b4 movs r1, 0                                |         r1 = 0;
    0x000034b6 bl 0xe51c                                 |         fcn_0000e51c (r0, r1, r2, r3);
    0x000034ba ldr r5, [r5, 0xc]                         |         r5 = *((r5 + 0xc));
    0x000034bc cmp r5, 0                                 |         
    0x000034be bne 0x34b2                                |         
                                                         |     } while (r5 != 0);
                                                         | label_22:
    0x000034c8 ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x000034ca mov r1, sl                                |     r1 = sl;
    0x000034cc bl 0x12fa0                                |     fcn_00012fa0 (r0, r1);
                                                         | label_71:
    0x000034d0 ldr.w r2, [pc, 0xa2c]                     |     r2 = *(0x00003f00);
    0x000034d4 subs r4, 2                                |     r4 -= 2;
    0x000034d6 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x000034da add r2, pc                                |     r2 += pc;
    0x000034dc str r3, [r7, 0x20]                        |     *((r7 + 0x20)) = r3;
    0x000034de ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x000034e0 adds r3, 2                                |     r3 += 2;
    0x000034e2 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x000034e4 b.w 0x1a2e                                |     goto label_0;
                                                         | label_162:
    0x00003524 ldr r2, [r6, 8]                           |     r2 = *((r6 + 8));
    0x00003526 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003528 beq.w 0x44e4                              |         goto label_165;
                                                         |     }
    0x0000352c movs r0, 1                                |     r0 = 1;
    0x0000352e str r3, [r7, 8]                           |     *((r7 + 8)) = r3;
    0x00003530 blx r2                                    |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
    0x00003532 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00003534 mov r2, r0                                |     r2 = r0;
    0x00003536 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003538 beq.w 0x3a7c                              |         goto label_166;
                                                         |     }
    0x0000353c cmp r0, 1                                 |     
                                                         |     if (r0 != 1) {
    0x0000353e bne.w 0x4056                              |         goto label_167;
                                                         |     }
    0x00003542 ldr.w r2, [pc, 0x9c0]                     |     r2 = *(0x00003f04);
    0x00003546 movs r0, 0x24                             |     r0 = 0x24;
    0x00003548 str r3, [r7, 8]                           |     *((r7 + 8)) = r3;
    0x0000354a add r2, pc                                |     r2 += pc;
    0x0000354c ldr r2, [r2]                              |     r2 = *(r2);
    0x0000354e blx r2                                    |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00003550 ldr r3, [r7, 8]                           |     r3 = *((r7 + 8));
    0x00003552 str r0, [r7, 0x40]                        |     *((r7 + 0x40)) = r0;
    0x00003554 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003556 beq.w 0x4366                              |         goto label_168;
                                                         |     }
    0x0000355a ldr r2, [r7, 0x40]                        |     r2 = *((r7 + 0x40));
    0x0000355c str.w fp, [r7, 8]                         |     __asm ("str.w fp, [r7, 8]");
    0x00003560 str.w sl, [r7, 4]                         |     __asm ("str.w sl, [r7, 4]");
    0x00003564 mov sl, r3                                |     sl = r3;
    0x00003566 subs r2, 4                                |     r2 -= 4;
    0x00003568 ldr r5, [r7, 0x14]                        |     r5 = *((r7 + 0x14));
    0x0000356a mov fp, r2                                |     
    0x0000356c b 0x358a                                  |     
                                                         |     while (r3 != 0) {
    0x0000356e movs r3, 0                                |         r3 = 0;
                                                         | label_20:
    0x00003570 mov r0, r5                                |         r0 = r5;
    0x00003572 str r3, [fp, 4]!                          |         *(arg_4h) = r3;
    0x00003576 movs r1, 0                                |         r1 = 0;
    0x00003578 add.w sl, sl, 1                           |         sl++;
    0x0000357c bl 0x15e20                                |         void (*0x15e20)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00003580 ldrb r3, [r0, 1]                          |         r3 = *((r0 + 1));
    0x00003582 adds r5, r0, 1                            |         r5 = r0 + 1;
    0x00003584 cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x00003586 beq.w 0x3816                              |             goto label_169;
                                                         |         }
    0x0000358a str r5, [r6]                              |         *(r6) = r5;
    0x0000358c mov r2, r8                                |         r2 = r8;
    0x0000358e str r6, [sp]                              |         *(sp) = r6;
    0x00003590 mov r1, r4                                |         r1 = r4;
    0x00003592 ldr r3, [r7, 0x3c]                        |         r3 = *((r7 + 0x3c));
    0x00003594 mov r0, sb                                |         r0 = sb;
    0x00003596 blx 0xa04                                 |         fcn_00000a04 ();
    0x0000359a ldr r3, [r4]                              |         r3 = *(r4);
    0x0000359c cmp r3, 0                                 |         
    0x0000359e bne 0x356e                                |         
                                                         |     }
    0x000035a0 ldr r3, [r6, 8]                           |     r3 = *((r6 + 8));
    0x000035a2 b 0x3570                                  |     goto label_20;
                                                         | label_148:
    0x000035a4 movs r3, 1                                |     r3 = 1;
                                                         | label_34:
    0x000035a6 str r3, [r7, 0x34]                        |     *((r7 + 0x34)) = r3;
    0x000035a8 b.w 0x2b90                                |     goto label_7;
                                                         | label_155:
    0x000035ac str.w r5, [r3, 0x198]                     |     __asm ("str.w r5, [r3, 0x198]");
    0x000035b0 ldr.w r3, [pc, 0x954]                     |     r3 = *(0x00003f08);
    0x000035b4 add r3, pc                                |     r3 += pc;
    0x000035b6 addw r3, r3, 0x5a4                        |     __asm ("addw r3, r3, 0x5a4");
    0x000035ba str r3, [r7, 0x28]                        |     *((r7 + 0x28)) = r3;
                                                         | label_121:
    0x000035bc ldr.w r3, [pc, 0x94c]                     |     r3 = *(0x00003f0c);
    0x000035c0 movs r2, 0                                |     r2 = 0;
    0x000035c2 add r3, pc                                |     r3 += pc;
    0x000035c4 str.w r2, [r3, 0x19c]                     |     __asm ("str.w r2, [r3, 0x19c]");
                                                         | label_123:
    0x000035c8 movs r3, 0                                |     r3 = 0;
    0x000035ca b.w 0x2886                                |     goto label_21;
                                                         | label_69:
    0x000035ce ldr r2, [r5, 8]                           |     r2 = *((r5 + 8));
    0x000035d0 ldrb r3, [r2]                             |     r3 = *(r2);
                                                         |     if (r3 != 0) {
    0x000035d2 cbz r3, 0x35f0                            |         
    0x000035d4 ldr.w r3, [sl, 0x40]                      |         r3 = *((sl + 0x40));
    0x000035d8 cmp r3, 0x10                              |         
                                                         |         if (r3 == 0x10) {
    0x000035da beq.w 0x4382                              |             goto label_133;
                                                         |         }
    0x000035de str.w r2, [sl, r3, lsl 2]                 |         __asm ("str.w r2, [sl, r3, lsl 2]");
    0x000035e2 adds r3, 1                                |         r3++;
    0x000035e4 cmp r3, 1                                 |         
    0x000035e6 str.w r3, [sl, 0x40]                      |         __asm ("str.w r3, [sl, 0x40]");
    0x000035ea it eq                                     |         
                                                         |         if (r3 == 1) {
    0x000035ec streq r2, [sl, 0x48]                      |             *((sl + 0x48)) = r2;
                                                         |             goto label_170;
                                                         |         }
                                                         |     }
                                                         | label_170:
    0x000035f0 ldr.w r2, [pc, 0x91c]                     |     r2 = *(0x00003f10);
    0x000035f4 subs r4, 2                                |     r4 -= 2;
    0x000035f6 adds r5, 8                                |     r5 += 8;
    0x000035f8 add r2, pc                                |     r2 += pc;
    0x000035fa ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x000035fc adds r3, 2                                |     r3 += 2;
    0x000035fe str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003600 b.w 0x1a2e                                |     goto label_0;
                                                         | label_135:
    0x00003604 cmp r2, 6                                 |     
    0x00003606 str.w r4, [sl, 0x48]                      |     __asm ("str.w r4, [sl, 0x48]");
                                                         |     if (r2 == 6) {
    0x0000360a beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x0000360e ldr.w r3, [sl, 0x44]                      |     r3 = *((sl + 0x44));
    0x00003612 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003614 beq.w 0x3276                              |         goto label_23;
                                                         |     }
                                                         | label_158:
    0x00003618 ldr.w r3, [pc, 0x8f8]                     |     
    0x0000361c mov.w r2, 0x116                           |     r2 = 0x116;
    0x00003620 ldr.w r1, [pc, 0x8f4]                     |     r1 = *(0x00003f18);
    0x00003624 ldr.w r0, [pc, 0x8f4]                     |     
    0x00003628 add r3, pc                                |     r3 = 0x7540;
    0x0000362a add r1, pc                                |     r1 += pc;
    0x0000362c add r0, pc                                |     r0 = 0x754c;
    0x0000362e bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_70:
    0x00003632 ldr.w r2, [pc, 0x8ec]                     |     r2 = *(0x00003f20);
    0x00003636 subs r4, 2                                |     r4 -= 2;
    0x00003638 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x0000363c add r2, pc                                |     r2 += pc;
    0x0000363e str.w r3, [sl, 0x158]                     |     __asm ("str.w r3, [sl, 0x158]");
    0x00003642 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00003644 adds r3, 2                                |     r3 += 2;
    0x00003646 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003648 b.w 0x1a2e                                |     goto label_0;
                                                         | label_154:
    0x0000364c ldrb.w ip, [lr, ip]                       |     ip = *((lr + ip));
    0x00003650 cmp.w ip, 0                               |     
                                                         |     if (ip == 0) {
    0x00003654 beq.w 0x2e30                              |         goto label_24;
                                                         |     }
    0x00003658 ldr r4, [r7, 0x3c]                        |     r4 = *((r7 + 0x3c));
    0x0000365a mov lr, r3                                |     lr = r3;
    0x0000365c mov r3, ip                                |     r3 = ip;
    0x0000365e mov ip, lr                                |     
                                                         |     do {
    0x00003660 adds r1, 1                                |         r1++;
    0x00003662 cmp r3, 0x2f                              |         
    0x00003664 it eq                                     |         
                                                         |         if (r3 != 0x2f) {
    0x00003666 moveq r0, r1                              |             r0 = r1;
                                                         |         }
    0x00003668 ldrb r3, [r1]                             |         r3 = *(r1);
    0x0000366a cmp r3, 0                                 |         
    0x0000366c bne 0x3660                                |         
                                                         |     } while (r3 != 0);
    0x0000366e mov r3, ip                                |     r3 = ip;
    0x00003670 str r4, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r4;
    0x00003672 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003674 beq.w 0x2e30                              |         goto label_24;
                                                         |     }
    0x00003678 ldr r1, [r7, 0x14]                        |     r1 = *((r7 + 0x14));
    0x0000367a str r0, [r1, 0x20]                        |     *((r1 + 0x20)) = r0;
    0x0000367c ldr r0, [r7, 0x10]                        |     r0 = *((r7 + 0x10));
    0x0000367e str r0, [r1, 0x18]                        |     *((r1 + 0x18)) = r0;
    0x00003680 movs r1, 1                                |     r1 = 1;
    0x00003682 str r1, [r7, 0x40]                        |     *((r7 + 0x40)) = r1;
    0x00003684 b.w 0x2040                                |     goto label_3;
                                                         | label_150:
    0x00003688 mov r0, r3                                |     r0 = r3;
    0x0000368a bl 0xec0                                  |     fcn_00000ec0 ();
    0x0000368e str r0, [r7, 0x38]                        |     *((r7 + 0x38)) = r0;
    0x00003690 b.w 0x2bcc                                |     goto label_25;
                                                         | label_122:
    0x000036a2 ldr.w r5, [r5, 0x194]                     |     r5 = *((r5 + 0x194));
    0x000036a6 mov r3, r2                                |     r3 = r2;
    0x000036a8 b.w 0x2818                                |     goto label_26;
                                                         | label_120:
    0x000036ac ldr.w ip, [sb, 0x194]                     |     ip = *((sb + 0x194));
    0x000036b0 mov r3, r2                                |     r3 = r2;
    0x000036b2 b.w 0x279e                                |     goto label_27;
                                                         | label_164:
    0x000036b6 mov r0, fp                                |     r0 = fp;
    0x000036b8 bl 0xaf0                                  |     fcn_00000af0 ();
    0x000036bc ldr.w r0, [pc, 0x864]                     |     r0 = *(0x00003f24);
    0x000036c0 add r0, pc                                |     r0 += pc;
    0x000036c2 add.w r0, r0, 0x598                       |     r0 += 0x598;
    0x000036c6 bl 0xaf0                                  |     fcn_00000af0 ();
    0x000036ca ldr.w r3, [r4, 0x1dc]                     |     r3 = *((r4 + 0x1dc));
    0x000036ce ldr r2, [r7, 0x20]                        |     r2 = *((r7 + 0x20));
    0x000036d0 cmp r3, r2                                |     
                                                         |     if (r3 > r2) {
    0x000036d2 bhi.w 0x44bc                              |         goto label_171;
                                                         |     }
    0x000036d6 ldr r3, [r7, 0x1c]                        |     r3 = *((r7 + 0x1c));
    0x000036d8 str r3, [r7, 0x38]                        |     *((r7 + 0x38)) = r3;
    0x000036da movs r3, 0                                |     r3 = 0;
    0x000036dc str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000036de b.w 0x2a18                                |     goto label_16;
                                                         |     if (r3 != 0) {
                                                         | label_84:
    0x000037f6 bne.w 0x4344                              |         goto label_172;
                                                         |     }
    0x000037fa ldr.w r3, [fp, 0x230]                     |     r3 = *(arg_230h);
    0x000037fe cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003800 beq.w 0x40ae                              |         goto label_173;
                                                         |     }
    0x00003804 mov r1, r2                                |     r1 = r2;
    0x00003806 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00003808 b.w 0x2078                                |     goto label_28;
                                                         | label_124:
    0x0000380c ldr.w r0, [pc, 0x738]                     |     
    0x00003810 add r0, pc                                |     r0 = 0x775c;
    0x00003812 bl 0xc2a4                                 |     dl_fatal_printf ()
                                                         | label_169:
    0x00003816 mov r2, sl                                |     r2 = sl;
    0x00003818 ldrd sl, fp, [r7, 4]                      |     __asm ("ldrd sl, fp, [r7, 4]");
    0x0000381c cmp r2, 8                                 |     
                                                         |     if (r2 != 8) {
    0x0000381e bne.w 0x4312                              |         goto label_174;
                                                         |     }
    0x00003822 ldr r2, [r7, 0x40]                        |     r2 = *((r7 + 0x40));
    0x00003824 str r3, [r2, 0x20]                        |     *((r2 + 0x20)) = r3;
    0x00003826 ldr r3, [r7, 0x38]                        |     r3 = *((r7 + 0x38));
    0x00003828 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x0000382a beq.w 0x412c                              |         goto label_175;
                                                         |     }
    0x0000382e ldr r2, [r7, 0x38]                        |     r2 = *((r7 + 0x38));
    0x00003830 ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00003832 str r3, [r2, 0x20]                        |     *((r2 + 0x20)) = r3;
    0x00003834 str r3, [r7, 0x38]                        |     *((r7 + 0x38)) = r3;
                                                         | label_54:
    0x00003836 ldr.w r1, [pc, 0x714]                     |     r1 = *(0x00003f4c);
    0x0000383a ldr.w r2, [fp, 4]                         |     r2 = *(arg_4h);
    0x0000383e ldrd r5, r4, [r7, 0xc]                    |     __asm ("ldrd r5, r4, [r7, 0xc]");
    0x00003842 add r1, pc                                |     r1 += pc;
    0x00003844 ldr.w r3, [r1, 0x1dc]                     |     r3 = *((r1 + 0x1dc));
    0x00003848 add.w r0, r3, 0xff                        |     r0 = r3 + 0xff;
    0x0000384c adds r3, 1                                |     r3++;
    0x0000384e str.w r5, [r4, r0, lsl 3]                 |     __asm ("str.w r5, [r4, r0, lsl 3]");
    0x00003852 str.w r3, [r1, 0x1dc]                     |     __asm ("str.w r3, [r1, 0x1dc]");
    0x00003856 ldrb.w r3, [r2, 0x199]                    |     r3 = *((r2 + 0x199));
    0x0000385a orr r3, r3, 8                             |     r3 |= 8;
    0x0000385e strb.w r3, [r2, 0x199]                    |     *((r2 + 0x199)) = r3;
    0x00003862 b 0x335c                                  |     goto label_14;
                                                         | label_104:
    0x00003864 ldr.w r3, [fp, 8]                         |     r3 = *(arg_8h);
    0x00003868 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x0000386a beq.w 0x41c8                              |         goto label_176;
                                                         |     }
                                                         | label_57:
    0x0000386e ldr r3, [r7, 0x40]                        |     r3 = *((r7 + 0x40));
    0x00003870 eor r0, r3, 1                             |     r0 = r3 ^ 1;
    0x00003874 lsls r0, r0, 1                            |     r0 <<= 1;
    0x00003876 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x0000387a b.w 0x22aa                                |     goto label_29;
                                                         | label_125:
    0x0000387e cmp r3, r0                                |     
                                                         |     if (r3 < r0) {
    0x00003880 bls.w 0x28aa                              |         goto label_30;
                                                         |     }
    0x00003884 b.w 0x28a2                                |     goto label_31;
                                                         | label_146:
    0x00003888 ldr r2, [r3, 0xc]                         |     r2 = *((r3 + 0xc));
    0x0000388a mov r1, r3                                |     r1 = r3;
    0x0000388c str.w r3, [r4, 0x5a8]                     |     __asm ("str.w r3, [r4, 0x5a8]");
    0x00003890 b.w 0x2b64                                |     goto label_32;
                                                         | label_143:
    0x00003894 ldr.w r2, [pc, 0x6b8]                     |     r2 = *(0x00003f50);
    0x00003898 ldr.w r5, [sl, 0x164]                     |     r5 = *((sl + 0x164));
    0x0000389c add r2, pc                                |     r2 += pc;
    0x0000389e ldr.w r3, [r2, 0x5a4]                     |     r3 = *((r2 + 0x5a4));
    0x000038a2 ldr.w r2, [r2, 0x5a8]                     |     r2 = *((r2 + 0x5a8));
    0x000038a6 str r3, [r2, 0xc]                         |     *((r2 + 0xc)) = r3;
    0x000038a8 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000038aa bne.w 0x2ae4                              |         goto label_33;
                                                         |     }
    0x000038ae b 0x35a6                                  |     goto label_34;
                                                         | label_142:
    0x000038b0 lsls r3, r4, 2                            |     r3 = r4 << 2;
    0x000038b2 adds r3, 7                                |     r3 += 7;
    0x000038b4 bic r3, r3, 7                             |     r3 = BIT_MASK (r3, 7);
    0x000038b8 sub.w sp, sp, r3                          |     
    0x000038bc movs r3, 0                                |     r3 = 0;
    0x000038be add r0, sp, 0x10                          |     r0 += arg_10h;
    0x000038c0 add r2, sp, 0xc                           |     r2 += arg_ch;
                                                         |     do {
    0x000038c2 str r1, [r2, 4]!                          |         *((r2 += 4)) = r1;
    0x000038c6 adds r3, 1                                |         r3++;
    0x000038c8 ldr r1, [r1, 0xc]                         |         r1 = *((r1 + 0xc));
    0x000038ca cmp r1, 0                                 |         
    0x000038cc bne 0x38c2                                |         
                                                         |     } while (r1 != 0);
    0x000038ce cmp r4, r3                                |     
    0x000038d0 it eq                                     |     
                                                         |     if (r4 == r3) {
    0x000038d2 moveq r1, r0                              |         r1 = r0;
                                                         |         goto label_177;
                                                         |     }
                                                         |     if (r4 == r3) {
                                                         | label_177:
    0x000038d4 beq.w 0x2a8e                              |         goto label_35;
                                                         |     }
    0x000038d8 ldr.w r3, [pc, 0x678]                     |     
    0x000038dc movw r2, 0x77e                            |     r2 = 0x77e;
    0x000038e0 ldr.w r1, [pc, 0x674]                     |     r1 = *(0x00003f58);
    0x000038e4 ldr.w r0, [pc, 0x674]                     |     
    0x000038e8 add r3, pc                                |     r3 = 0x7840;
    0x000038ea add r1, pc                                |     r1 += pc;
    0x000038ec add r0, pc                                |     r0 = 0x784c;
    0x000038ee bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_137:
    0x000038f2 ldr.w r8, [pc, 0x66c]                     |     r8 = *(0x00003f60);
    0x000038f6 add.w sb, fp, 0x260                       |     sb += arg_260h;
    0x000038fa ldr.w r3, [pc, 0x668]                     |     r3 = *(0x00003f64);
    0x000038fe movs r5, 0                                |     r5 = 0;
    0x00003900 ldr.w r6, [r4, 0x1d8]                     |     r6 = *((r4 + 0x1d8));
    0x00003904 add r8, pc                                |     r8 += pc;
    0x00003906 add r3, pc                                |     r3 += pc;
    0x00003908 add.w r8, r8, 0x7f8                       |     r8 += 0x7f8;
    0x0000390c add.w r3, r3, 0x598                       |     r3 += 0x598;
    0x00003910 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
                                                         |     do {
    0x00003912 ldr r3, [r6]                              |         r3 = *(r6);
                                                         |         if (r3 != 0) {
    0x00003914 cbz r3, 0x3924                            |             
    0x00003916 ldr r2, [r7, 0x3c]                        |             r2 = *((r7 + 0x3c));
    0x00003918 movs r1, 1                                |             r1 = 1;
    0x0000391a cmp fp, r2                                |             
    0x0000391c ite ne                                    |             
                                                         |             if (fp == r2) {
    0x0000391e movne r0, sb                              |                 r0 = sb;
                                                         |             }
                                                         |             if (fp != r2) {
    0x00003920 moveq r0, r8                              |                 r0 = r8;
                                                         |             }
    0x00003922 blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                         |         }
    0x00003924 ldr.w r3, [r4, 0x1dc]                     |         r3 = *((r4 + 0x1dc));
    0x00003928 adds r5, 1                                |         r5++;
    0x0000392a ldr r6, [r6, 0x20]                        |         r6 = *((r6 + 0x20));
    0x0000392c add.w r8, r8, 8                           |         r8 += 8;
    0x00003930 add.w sb, sb, 8                           |         sb += 8;
    0x00003934 cmp r3, r5                                |         
    0x00003936 bhi 0x3912                                |         
                                                         |     } while (r3 > r5);
    0x00003938 b.w 0x2a52                                |     goto label_36;
                                                         | label_139:
    0x0000393c ldr.w r2, [pc, 0x628]                     |     
    0x00003940 mov r0, r4                                |     r0 = r4;
    0x00003942 mov r1, fp                                |     r1 = fp;
    0x00003944 add r2, pc                                |     r2 = 0x78b0;
    0x00003946 bl 0x17b4                                 |     r0 = fcn_000017b4 (r0, r1, r2);
    0x0000394a mov r4, r0                                |     r4 = r0;
    0x0000394c b.w 0x2a66                                |     goto label_37;
                                                         | label_141:
    0x00003950 mov r0, r5                                |     r0 = r5;
    0x00003952 ldr r1, [r7, 0x44]                        |     r1 = *((r7 + 0x44));
    0x00003954 movs r2, 3                                |     r2 = 3;
    0x00003956 bl 0xc19c                                 |     r0 = fcn_0000c19c (r0, r1, r2);
    0x0000395a adds r6, r0, 1                            |     r6 = r0 + 1;
    0x0000395c mov r5, r0                                |     r5 = r0;
                                                         |     if (r6 == r0) {
    0x0000395e beq.w 0x2a84                              |         goto label_38;
                                                         |     }
    0x00003962 ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x00003964 add.w r6, r7, 0x64                        |     r6 = r7 + 0x64;
    0x00003968 str r0, [r6]                              |     *(r6) = r0;
    0x0000396a ldr.w sb, [r3]                            |     sb = *(r3);
    0x0000396e cmp.w sb, 0                               |     
                                                         |     if (sb == 0) {
    0x00003972 beq.w 0x4326                              |         goto label_178;
                                                         |     }
    0x00003976 mov r3, r0                                |     r3 = r0;
    0x00003978 mov.w r8, 0x20                            |     r8 = 0x20;
                                                         | label_47:
    0x0000397c movs r1, 0x23                             |     r1 = 0x23;
    0x0000397e mov r2, sb                                |     r2 = sb;
    0x00003980 mov r0, r3                                |     r0 = r3;
    0x00003982 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
    0x00003984 bl 0x16420                                |     r0 = fcn_00016420 (r0, r1);
    0x00003988 mov r1, r0                                |     r1 = r0;
                                                         |     if (r0 == 0) {
    0x0000398a cbz r0, 0x39b6                            |         goto label_179;
                                                         |     }
    0x0000398c ldr r3, [r7, 0x3c]                        |     r3 = *((r7 + 0x3c));
    0x0000398e subs r3, r0, r3                           |     r3 = r0 - r3;
    0x00003990 sub.w r2, sb, r3                          |     r2 = sb - r3;
    0x00003994 mov r3, r0                                |     r3 = r0;
    0x00003996 subs r0, r2, 1                            |     r0 = r2 - 1;
    0x00003998 add r1, r0                                |     r1 += r0;
    0x0000399a subs r0, r3, 1                            |     r0 = r3 - 1;
    0x0000399c add r0, r2                                |     r0 += r2;
    0x0000399e b 0x39aa                                  |     
                                                         |     while (r3 != r1) {
    0x000039a0 ldrb r2, [r3, 1]!                         |         r2 = *((r3 += 1));
    0x000039a4 cmp r2, 0xa                               |         
                                                         |         if (r2 == 0xa) {
    0x000039a6 beq.w 0x4080                              |             goto label_180;
                                                         |         }
    0x000039aa cmp r3, r1                                |         
    0x000039ac sub.w sb, r0, r3                          |         sb = r0 - r3;
    0x000039b0 strb.w r8, [r3]                           |         *(r3) = r8;
    0x000039b4 bne 0x39a0                                |         
                                                         |     }
                                                         | label_179:
    0x000039b6 ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x000039b8 ldr r3, [r3]                              |     r3 = *(r3);
    0x000039ba subs r2, r3, 1                            |     r2 = r3 - 1;
    0x000039bc ldrb r1, [r5, r2]                         |     r1 = *((r5 + r2));
    0x000039be add r2, r5                                |     r2 += r5;
    0x000039c0 cmp r1, 0x20                              |     
    0x000039c2 it ne                                     |     
                                                         |     if (r1 != 0x20) {
    0x000039c4 cmpne r1, 0x3a                            |         __asm ("cmpne r1, 0x3a");
                                                         |     }
    0x000039c6 sub.w r1, r1, 9                           |     r1 -= 9;
    0x000039ca ite ne                                    |     
                                                         |     if (r1 == 0x20) {
    0x000039cc movne r0, 1                               |         r0 = 1;
                                                         |     }
                                                         |     if (r1 != 0x20) {
    0x000039ce moveq r0, 0                               |         r0 = 0;
                                                         |     }
    0x000039d0 cmp r1, 1                                 |     
    0x000039d2 ite ls                                    |     
                                                         |     if (r1 > 1) {
    0x000039d4 movls r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r1 <= 1) {
    0x000039d6 andhi r0, r0, 1                           |         r0 &= 1;
                                                         |     }
    0x000039da cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x000039dc bne.w 0x42c6                              |         goto label_181;
                                                         |     }
                                                         | label_62:
    0x000039e0 mov.w r8, 0                               |     r8 = 0;
    0x000039e4 strb.w r8, [r2]                           |     *(r2) = r8;
    0x000039e8 cmp r5, 0                                 |     
                                                         |     if (r5 != 0) {
    0x000039ea beq 0x3a5c                                |         
                                                         | label_60:
    0x000039ec ldr.w r3, [pc, 0x57c]                     |         r3 = *(0x00003f6c);
    0x000039f0 ldr.w sb, [pc, 0x57c]                     |         
    0x000039f4 str r5, [r6]                              |         *(r6) = r5;
    0x000039f6 add r3, pc                                |         r3 += pc;
    0x000039f8 add sb, pc                                |         sb = 0x796c;
    0x000039fa str r3, [r7, 0x3c]                        |         *((r7 + 0x3c)) = r3;
    0x000039fc b 0x3a06                                  |         void (*0x3a06)() ();
                                                         | label_61:
    0x00003a14 cmp.w r8, 0                               |         
                                                         |         if (r8 == 0) {
    0x00003a18 beq 0x3a5c                                |             goto label_182;
                                                         |         }
    0x00003a1a ldr r3, [r7, 0x44]                        |         r3 = *((r7 + 0x44));
    0x00003a1c mov r0, r8                                |         r0 = r8;
    0x00003a1e movs r6, 0                                |         r6 = 0;
    0x00003a20 ldr r1, [r3]                              |         r1 = *(r3);
    0x00003a22 sub.w r3, r8, r5                          |         r3 = r8 - r5;
    0x00003a26 subs r1, r1, r3                           |         r1 -= r3;
    0x00003a28 bl 0x1561c                                |         r0 = fcn_0001561c (r0, r1);
    0x00003a2c add.w r3, r0, 8                           |         r3 = r0 + 8;
    0x00003a30 mov r2, r0                                |         r2 = r0;
    0x00003a32 bic r3, r3, 7                             |         r3 = BIT_MASK (r3, 7);
    0x00003a36 mov r1, r8                                |         r1 = r8;
    0x00003a38 sub.w sp, sp, r3                          |         
    0x00003a3c add.w r0, sp, 0x17                        |         r0 += arg_17h;
    0x00003a40 lsrs r3, r0, 3                            |         r3 = r0 >> 3;
    0x00003a42 bic r0, r0, 7                             |         r0 = BIT_MASK (r0, 7);
    0x00003a46 strb.w r6, [r2, r3, lsl 3]                |         offset_3 = r3 << 3;
                                                         |         *((r2 + offset_3)) = r6;
    0x00003a4a blx 0x15f40                               |         fcn_00015f40 (r0, r1);
    0x00003a4e ldr.w r2, [pc, 0x524]                     |         r2 = fcn.00014c70;
    0x00003a52 mov r1, fp                                |         r1 = fp;
    0x00003a54 add r2, pc                                |         r2 += pc;
    0x00003a56 bl 0xc64                                  |         r0 = fcn_00000c64 (r0);
    0x00003a5a add r4, r0                                |         r4 += r0;
                                                         |     }
                                                         | label_182:
    0x00003a5c ldr r3, [r7, 0x44]                        |     r3 = *((r7 + 0x44));
    0x00003a5e mov r0, r5                                |     r0 = r5;
    0x00003a60 ldr r1, [r3]                              |     r1 = *(r3);
    0x00003a62 bl 0x14ae0                                |     fcn_00014ae0 (r0);
    0x00003a66 b.w 0x2a84                                |     goto label_38;
                                                         | label_140:
    0x00003a6a ldr.w r2, [pc, 0x50c]                     |     
    0x00003a6e mov r1, fp                                |     r1 = fp;
    0x00003a70 add r2, pc                                |     r2 = 0x79ee;
    0x00003a72 bl 0x17b4                                 |     r0 = fcn_000017b4 (r0, r1, r2);
    0x00003a76 add r4, r0                                |     r4 += r0;
    0x00003a78 b.w 0x2a70                                |     goto label_39;
                                                         | label_166:
    0x00003a7c ldr.w r3, [pc, 0x4fc]                     |     r3 = *(0x00003f7c);
    0x00003a80 add r3, pc                                |     r3 += pc;
    0x00003a82 ldr r3, [r3]                              |     r3 = *(r3);
    0x00003a84 lsls r3, r3, 0x19                         |     r3 <<= 0x19;
                                                         |     if (r3 < r3) {
    0x00003a86 bmi.w 0x3c92                              |         goto label_183;
                                                         |     }
                                                         | label_43:
    0x00003a8a ldr r1, [r7, 0x40]                        |     r1 = *((r7 + 0x40));
    0x00003a8c ldr.w r0, [fp, 4]                         |     r0 = *(arg_4h);
    0x00003a90 bl 0xfd4                                  |     fcn_00000fd4 (r0, r1);
    0x00003a94 b 0x335c                                  |     goto label_14;
                                                         | label_151:
    0x00003a96 ldr.w r2, [pc, 0x4e8]                     |     r2 = *(0x00003f80);
    0x00003a9a add r2, pc                                |     r2 += pc;
    0x00003a9c ldr r1, [r2]                              |     r1 = *(r2);
    0x00003a9e lsls r0, r1, 0x14                         |     r0 = r1 << 0x14;
                                                         |     if (r0 >= r1) {
    0x00003aa0 bpl.w 0x3c0e                              |         goto label_184;
                                                         |     }
    0x00003aa4 ldr.w r2, [fp, 0x164]                     |     r2 = *(arg_164h);
    0x00003aa8 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003aaa beq.w 0x3cb8                              |         goto label_55;
                                                         |     }
    0x00003aae ldr.w r3, [pc, 0x4d4]                     |     r3 = *(0x00003f84);
    0x00003ab2 movs r5, 0                                |     r5 = 0;
    0x00003ab4 ldr.w sb, [pc, 0x4d0]                     |     sb = *(0x00003f88);
    0x00003ab8 mov r8, r6                                |     r8 = r6;
    0x00003aba add r3, pc                                |     r3 += pc;
    0x00003abc str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003abe add sb, pc                                |     sb += pc;
    0x00003ac0 ldr.w r3, [pc, 0x4c8]                     |     
    0x00003ac4 add r3, pc                                |     r3 = 0x7a54;
    0x00003ac6 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x00003ac8 b 0x3ae6                                  |     
                                                         |     while (r1 != 0) {
    0x00003aca ldr.w r0, [pc, 0x4c4]                     |         
    0x00003ace mov r2, r6                                |         r2 = r6;
    0x00003ad0 ldr.w r3, [r4, 0x244]                     |         r3 = *((r4 + 0x244));
    0x00003ad4 add r0, pc                                |         r0 = 0x7a6a;
    0x00003ad6 bl 0xc264                                 |         fcn_0000c264 ();
                                                         | label_40:
    0x00003ada ldr.w r3, [fp, 0x164]                     |         r3 = *(arg_164h);
    0x00003ade adds r5, 1                                |         r5++;
    0x00003ae0 cmp r3, r5                                |         
                                                         |         if (r3 < r5) {
    0x00003ae2 bls.w 0x3cb2                              |             goto label_185;
                                                         |         }
    0x00003ae6 ldr.w r3, [fp, 0x160]                     |         r3 = *(arg_160h);
    0x00003aea ldr.w r4, [r3, r5, lsl 2]                 |         offset_4 = r5 << 2;
                                                         |         r4 = *((r3 + offset_4));
    0x00003aee ldrb.w r3, [r4, 0x199]                    |         r3 = *((r4 + 0x199));
    0x00003af2 lsls r6, r3, 0x1e                         |         r6 = r3 << 0x1e;
                                                         |         if (r6 < r3) {
    0x00003af4 bmi.w 0x3ca4                              |             goto label_186;
                                                         |         }
    0x00003af8 ldr r6, [r7, 0x44]                        |         r6 = *((r7 + 0x44));
    0x00003afa mov r1, r4                                |         r1 = r4;
    0x00003afc ldr.w r0, [r6, 0x184]                     |         r0 = *((r6 + 0x184));
    0x00003b00 bl 0xc2c0                                 |         r0 = fcn_0000c2c0 (r0, r1);
                                                         |         if (r0 != 0) {
    0x00003b04 cbz r0, 0x3b0a                            |             
    0x00003b06 str.w r4, [r6, 0x188]                     |             __asm ("str.w r4, [r6, 0x188]");
                                                         |         }
    0x00003b0a ldr r3, [r4, 0x1c]                        |         r3 = *((r4 + 0x1c));
    0x00003b0c ldr r1, [r3]                              |         r1 = *(r3);
    0x00003b0e ldrb r3, [r1]                             |         r3 = *(r1);
                                                         |         if (r3 == 0) {
    0x00003b10 cbnz r3, 0x3b22                           |             
    0x00003b12 ldr.w r3, [pc, 0x480]                     |             r3 = *(0x00003f94);
    0x00003b16 add r3, pc                                |             r3 += pc;
    0x00003b18 ldr r3, [r3]                              |             r3 = *(r3);
    0x00003b1a ldr r1, [r3]                              |             r1 = *(r3);
    0x00003b1c cmp r1, 0                                 |             
                                                         |             if (r1 == 0) {
    0x00003b1e beq.w 0x40fc                              |                 goto label_187;
                                                         |             }
                                                         |         }
                                                         | label_51:
    0x00003b22 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00003b24 ldrb r3, [r2]                             |         r3 = *(r2);
                                                         |         if (r3 == 0) {
    0x00003b26 cbnz r3, 0x3b38                           |             
    0x00003b28 ldr.w r3, [pc, 0x46c]                     |             r3 = *(0x00003f98);
    0x00003b2c add r3, pc                                |             r3 += pc;
    0x00003b2e ldr r3, [r3]                              |             r3 = *(r3);
    0x00003b30 ldr r2, [r3]                              |             r2 = *(r3);
    0x00003b32 cmp r2, 0                                 |             
                                                         |             if (r2 == 0) {
    0x00003b34 beq.w 0x4104                              |                 goto label_188;
                                                         |             }
                                                         |         }
                                                         | label_52:
    0x00003b38 ldr r3, [r4]                              |         r3 = *(r4);
    0x00003b3a movs r6, 8                                |         r6 = 8;
    0x00003b3c str r6, [sp, 4]                           |         *(arg_4h) = r6;
    0x00003b3e mov r0, sb                                |         r0 = sb;
    0x00003b40 str r3, [sp, 8]                           |         *(arg_8h) = r3;
    0x00003b42 ldr.w r3, [r4, 0x1b4]                     |         r3 = *((r4 + 0x1b4));
    0x00003b46 str r3, [sp]                              |         *(sp) = r3;
    0x00003b48 mov r3, r6                                |         r3 = r6;
    0x00003b4a bl 0xc264                                 |         fcn_0000c264 ();
    0x00003b4e ldr.w r1, [r4, 0x248]                     |         r1 = *((r4 + 0x248));
    0x00003b52 cmp r1, 0                                 |         
    0x00003b54 bne 0x3aca                                |         
                                                         |     }
    0x00003b56 ldr r0, [r7, 0x40]                        |     r0 = *((r7 + 0x40));
    0x00003b58 bl 0xc264                                 |     fcn_0000c264 ();
    0x00003b5c b 0x3ada                                  |     goto label_40;
                                                         | label_145:
    0x00003b5e ldr r0, [r1, 0xc]                         |     r0 = *((r1 + 0xc));
    0x00003b60 str.w r0, [ip, 0x5a4]                     |     __asm ("str.w r0, [ip, 0x5a4]");
    0x00003b64 ldr r2, [r1, 0xc]                         |     r2 = *((r1 + 0xc));
    0x00003b66 b.w 0x2b64                                |     goto label_32;
                                                         | label_76:
    0x00003bbc bl 0x11280                                |     fcn_00011280 ();
    0x00003bc0 movs r0, 0                                |     r0 = 0;
    0x00003bc2 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x00003bc6 ldr.w r0, [sl, 0x164]                     |     r0 = *((sl + 0x164));
    0x00003bca b.w 0x1e18                                |     goto label_41;
                                                         | label_157:
    0x00003bda ldr r3, [pc, 0x3cc]                       |     
    0x00003bdc movw r2, 0x637                            |     r2 = 0x637;
    0x00003be0 ldr r1, [pc, 0x3c8]                       |     
    0x00003be2 ldr r0, [pc, 0x3cc]                       |     
    0x00003be4 add r3, pc                                |     r3 = 0x7b92;
    0x00003be6 add r1, pc                                |     r1 = 0x7b96;
    0x00003be8 add r0, pc                                |     r0 = 0x7b9e;
    0x00003bea bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_74:
    0x00003bee ldr r2, [pc, 0x3c4]                       |     
    0x00003bf0 movs r3, 4                                |     r3 = 4;
    0x00003bf2 str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00003bf6 subs r4, 1                                |     r4--;
    0x00003bf8 adds r5, 4                                |     r5 += 4;
    0x00003bfa add r2, pc                                |     r2 = 0x7bb4;
    0x00003bfc ldr r3, [r2, 0x10]                        |     r3 = *(0x7bc4);
    0x00003bfe adds r3, 1                                |     r3++;
    0x00003c00 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00003c02 b.w 0x1a2e                                |     goto label_0;
                                                         | label_184:
    0x00003c0e lsls r0, r1, 0x17                         |     r0 = r1 << 0x17;
                                                         |     if (r0 >= r1) {
    0x00003c10 bpl.w 0x4152                              |         goto label_189;
                                                         |     }
    0x00003c14 ldr r3, [r2, 0x30]                        |     r3 = *((r2 + 0x30));
    0x00003c16 mov r2, r6                                |     r2 = r6;
    0x00003c18 ldr r1, [pc, 0x39c]                       |     
    0x00003c1a ldr r0, [pc, 0x3a0]                       |     
    0x00003c1c cmp r3, 0                                 |     
    0x00003c1e mov.w r3, 1                               |     
    0x00003c22 movt r3, 0x200                            |     r3 = 0x2000001;
    0x00003c26 it eq                                     |     
                                                         |     if (r3 != 0) {
    0x00003c28 moveq r3, 0x2000000                       |         r3 = 0x2000000;
                                                         |     }
    0x00003c2c add r0, pc                                |     r0 = 0x7bee;
    0x00003c2e add r1, pc                                |     r1 = 0x7bea;
    0x00003c30 str.w fp, [r6]                            |     __asm ("str.w fp, [r6]");
    0x00003c34 str r3, [r6, 4]                           |     *((r6 + 4)) = r3;
    0x00003c36 bl 0x12578                                |     fcn_00012578 (r0, r1);
    0x00003c3a ldr.w r4, [fp, 8]                         |     r4 = *(arg_8h);
    0x00003c3e ldr r0, [r4]                              |     r0 = *(r4);
    0x00003c40 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00003c42 beq.w 0x4148                              |         goto label_190;
                                                         |     }
    0x00003c46 ldr r3, [pc, 0x378]                       |     
    0x00003c48 mov r5, fp                                |     r5 = fp;
    0x00003c4a ldr.w sb, [pc, 0x378]                     |     sb = *(0x00003fc4);
    0x00003c4e ldr.w r8, [pc, 0x378]                     |     
    0x00003c52 add r3, pc                                |     r3 = 0x7c18;
    0x00003c54 str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003c56 add sb, pc                                |     sb += pc;
    0x00003c58 add r8, pc                                |     r8 = 0x7c26;
    0x00003c5a movs r3, 1                                |     r3 = 1;
    0x00003c5c b 0x3c68                                  |     
                                                         |     while (r0 != 1) {
                                                         | label_42:
    0x00003c5e ldr r0, [r4, 8]!                          |         r0 = *((r4 += 8));
    0x00003c62 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00003c64 beq.w 0x4144                              |             goto label_191;
                                                         |         }
    0x00003c68 cmp r0, 1                                 |         
    0x00003c6a bne 0x3c5e                                |         
                                                         |     }
    0x00003c6c ldr r5, [r5, 0xc]                         |     r5 = *((r5 + 0xc));
    0x00003c6e ldr.w r2, [sb, 0x194]                     |     r2 = *((sb + 0x194));
    0x00003c72 cmp r2, r5                                |     
    0x00003c74 it eq                                     |     
                                                         |     if (r2 != r5) {
    0x00003c76 ldreq r5, [r5, 0xc]                       |         r5 = *((r5 + 0xc));
                                                         |     }
    0x00003c78 ldr.w r2, [r5, 0x204]                     |     r2 = *((r5 + 0x204));
    0x00003c7c cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00003c7e bne 0x3c5e                                |         goto label_42;
                                                         |     }
    0x00003c80 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003c82 bne.w 0x4286                              |         goto label_192;
                                                         |     }
                                                         | label_59:
    0x00003c86 ldr r1, [r5, 4]                           |     r1 = *((r5 + 4));
    0x00003c88 mov r0, r8                                |     r0 = r8;
    0x00003c8a bl 0xc264                                 |     fcn_0000c264 ();
    0x00003c8e movs r3, 0                                |     r3 = 0;
    0x00003c90 b 0x3c5e                                  |     goto label_42;
                                                         | label_183:
    0x00003c92 ldr.w r3, [fp, 4]                         |     r3 = *(arg_4h);
    0x00003c96 ldr r0, [pc, 0x334]                       |     
    0x00003c98 ldr r2, [r3, 0x18]                        |     r2 = *((r3 + 0x18));
    0x00003c9a ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x00003c9c add r0, pc                                |     r0 = 0x7c6e;
    0x00003c9e bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00003ca2 b 0x3a8a                                  |     goto label_43;
                                                         | label_186:
    0x00003ca4 ldr r3, [r4, 0x1c]                        |     r3 = *((r4 + 0x1c));
    0x00003ca6 ldr r0, [pc, 0x328]                       |     
    0x00003ca8 ldr r1, [r3]                              |     r1 = *(r3);
    0x00003caa add r0, pc                                |     r0 = 0x7c80;
    0x00003cac bl 0xc264                                 |     fcn_0000c264 ();
    0x00003cb0 b 0x3ada                                  |     goto label_40;
                                                         | label_185:
    0x00003cb2 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00003cb6 mov r6, r8                                |     r6 = r8;
                                                         | label_55:
    0x00003cb8 cmp r3, 3                                 |     
                                                         |     if (r3 != 3) {
    0x00003cba bne.w 0x4224                              |         goto label_193;
                                                         |     }
    0x00003cbe ldr r2, [pc, 0x314]                       |     
    0x00003cc0 add r2, pc                                |     r2 = 0x7c9a;
    0x00003cc2 ldr r3, [r2, 0x30]                        |     r3 = *(0x7cca);
    0x00003cc4 cmp r3, 0                                 |     
                                                         |     if (r3 < 0) {
    0x00003cc6 blt 0x3d54                                |         goto label_194;
                                                         |     }
    0x00003cc8 ldr r2, [r2, 0x28]                        |     r2 = *((r2 + 0x28));
    0x00003cca cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003ccc beq 0x3d54                                |         goto label_194;
                                                         |     }
    0x00003cce ldr.w r2, [fp, 0x164]                     |     r2 = *(arg_164h);
    0x00003cd2 cmp r3, 0                                 |     
    0x00003cd4 mov.w r3, 1                               |     
    0x00003cd8 movt r3, 0x200                            |     r3 = 0x2000001;
    0x00003cdc it eq                                     |     
                                                         |     if (r3 != 0) {
    0x00003cde moveq r3, 0x2000000                       |         r3 = 0x2000000;
                                                         |     }
    0x00003ce2 subs r4, r2, 1                            |     r4 = r2 - 1;
    0x00003ce4 str r3, [r6, 4]                           |     *((r6 + 4)) = r3;
                                                         |     if (r2 == 0) {
    0x00003ce6 cbz r2, 0x3d24                            |         goto label_195;
                                                         |     }
    0x00003ce8 ldr r5, [pc, 0x2ec]                       |     
    0x00003cea ldr.w sb, [pc, 0x2f0]                     |     sb = *(0x00003fdc);
    0x00003cee ldr.w r8, [pc, 0x2f0]                     |     r8 = *(0x00003fe0);
    0x00003cf2 add r5, pc                                |     
    0x00003cf4 add.w r5, r5, 0x598                       |     r5 = 0x8266;
    0x00003cf8 add sb, pc                                |     sb += pc;
    0x00003cfa add r8, pc                                |     r8 += pc;
    0x00003cfc b 0x3d02                                  |     
    0x00003d02 ldr.w r3, [fp, 0x1f8]                     |     r3 = *(arg_1f8h);
    0x00003d06 ldr.w r3, [r3, r4, lsl 2]                 |     offset_5 = r4 << 2;
                                                         |     r3 = *((r3 + offset_5));
    0x00003d0a cmp r3, r5                                |     
                                                         |     if (r3 == r5) {
    0x00003d0c beq 0x3cfe                                |         void (*0x3cfe)() ();
                                                         |     }
                                                         | label_195:
    0x00003d24 ldr r3, [pc, 0x2bc]                       |     
    0x00003d26 ldr r2, [r7, 0x34]                        |     r2 = *((r7 + 0x34));
    0x00003d28 add r3, pc                                |     
    0x00003d2a ldr r3, [r3]                              |     r3 = *(0x7d10);
    0x00003d2c ands.w r3, r2, r3, lsr 11                 |     r3 = r2 & (r3 >> 11);
                                                         |     if (r3 != r2) {
    0x00003d30 beq 0x3d54                                |         
    0x00003d32 ldr r0, [pc, 0x2b4]                       |         
    0x00003d34 movs r3, 0                                |         r3 = 0;
    0x00003d36 mov.w r2, 0x2000000                       |         r2 = 0x2000000;
    0x00003d3a add r0, pc                                |         
    0x00003d3c ldrb.w r1, [r0, 0x730]                    |         r1 = *((r0 + 0x730));
    0x00003d40 add.w r0, r0, 0x598                       |         r0 = 0x82c0;
    0x00003d44 bfc r1, 2, 1                              |         value_6 = BIT_MASK (1, );
                                                         |         value_6 = ~value_6;
                                                         |         r1 &= value_6;
    0x00003d48 strb.w r1, [r0, 0x198]                    |         *((r0 + 0x198)) = r1;
    0x00003d4c ldr.w r1, [fp, 0x1d4]                     |         r1 = *(arg_1d4h);
    0x00003d50 bl 0x8e78                                 |         fcn_00008e78 (r0, r1, r2, r3, r4, r5, r6);
                                                         |     }
                                                         | label_194:
    0x00003d54 ldrb.w r3, [sl, 0x169]                    |     r3 = *((sl + 0x169));
    0x00003d58 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003d5a beq.w 0x3e98                              |         goto label_58;
                                                         |     }
    0x00003d5e ldr r3, [pc, 0x28c]                       |     
    0x00003d60 str.w fp, [r7, 0x2c]                      |     __asm ("str.w fp, [r7, 0x2c]");
    0x00003d64 str.w fp, [r7, 0x28]                      |     __asm ("str.w fp, [r7, 0x28]");
    0x00003d68 add r3, pc                                |     r3 = 0x7d5a;
    0x00003d6a str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00003d6c ldr r3, [pc, 0x280]                       |     
    0x00003d6e add r3, pc                                |     r3 = 0x7d62;
    0x00003d70 str r3, [r7, 0x3c]                        |     *((r7 + 0x3c)) = r3;
    0x00003d72 movs r3, 1                                |     r3 = 1;
                                                         | label_44:
    0x00003d74 ldr r0, [r7, 0x2c]                        |     r0 = *((r7 + 0x2c));
    0x00003d76 ldr.w r2, [r0, 0xb0]                      |     r2 = *((r0 + 0xb0));
    0x00003d7a cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00003d7c beq.w 0x3e88                              |         goto label_196;
                                                         |     }
    0x00003d80 ldr r1, [r0, 0x34]                        |     r1 = *((r0 + 0x34));
    0x00003d82 ldr r2, [r2, 4]                           |     r2 = *((r2 + 4));
    0x00003d84 ldr.w r8, [r1, 4]                         |     r8 = *((r1 + 4));
    0x00003d88 ldr r1, [r0]                              |     r1 = *(r0);
    0x00003d8a add.w sb, r1, r2                          |     sb = r1 + r2;
    0x00003d8e cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x00003d90 bne.w 0x4014                              |         goto label_197;
                                                         |     }
                                                         | label_46:
    0x00003d94 ldr r3, [r7, 0x2c]                        |     r3 = *((r7 + 0x2c));
    0x00003d96 ldr r1, [r3, 4]                           |     r1 = *((r3 + 4));
    0x00003d98 ldrb r3, [r1]                             |     r3 = *(r1);
                                                         |     if (r3 != 0) {
    0x00003d9a cbnz r3, 0x3daa                           |         void (*0x3daa)() ();
                                                         |     }
                                                         | label_196:
    0x00003e88 ldr r2, [r7, 0x2c]                        |     r2 = *((r7 + 0x2c));
    0x00003e8a ldr r2, [r2, 0xc]                         |     r2 = *((r2 + 0xc));
    0x00003e8c str r2, [r7, 0x2c]                        |     *((r7 + 0x2c)) = r2;
    0x00003e8e cmp r2, 0                                 |     
                                                         |     if (r2 != 0) {
    0x00003e90 bne.w 0x3d74                              |         goto label_44;
                                                         |     }
    0x00003e94 ldr.w fp, [r7, 0x28]                      |     fp = *((r7 + 0x28));
                                                         | label_58:
    0x00003e98 movs r0, 0                                |     r0 = 0;
    0x00003e9a bl 0x14c28                                |     fcn_00014c28 (r0);
    0x00003e9e b.w 0x2c00                                |     goto label_45;
                                                         | label_197:
    0x00004014 ldr.w r0, [pc, 0x510]                     |     
    0x00004018 add r0, pc                                |     r0 = 0x8544;
    0x0000401a bl 0xc264                                 |     fcn_0000c264 ();
    0x0000401e b 0x3d94                                  |     goto label_46;
                                                         | label_72:
    0x0000403c ldr.w r2, [pc, 0x4f0]                     |     r2 = *(0x00004530);
    0x00004040 subs r4, 2                                |     r4 -= 2;
    0x00004042 ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00004046 add r2, pc                                |     r2 += pc;
    0x00004048 str.w r3, [sl, 0x15c]                     |     __asm ("str.w r3, [sl, 0x15c]");
    0x0000404c ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x0000404e adds r3, 2                                |     r3 += 2;
    0x00004050 str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x00004052 b.w 0x1a2e                                |     goto label_0;
                                                         | label_167:
    0x00004056 ldr.w r0, [pc, 0x4dc]                     |     r0 = *(0x00004534);
    0x0000405a mov r1, r5                                |     r1 = r5;
    0x0000405c movs r3, 1                                |     r3 = 1;
    0x0000405e add r0, pc                                |     r0 += pc;
    0x00004060 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00004064 b 0x3a8a                                  |     goto label_43;
                                                         | label_73:
    0x00004066 ldr.w r2, [pc, 0x4d0]                     |     r2 = *(0x00004538);
    0x0000406a subs r4, 2                                |     r4 -= 2;
    0x0000406c ldr r3, [r5, 8]!                          |     r3 = *((r5 += 8));
    0x00004070 add r2, pc                                |     r2 += pc;
    0x00004072 str.w r3, [sl, 0x160]                     |     __asm ("str.w r3, [sl, 0x160]");
    0x00004076 ldr r3, [r2, 0x10]                        |     r3 = *((r2 + 0x10));
    0x00004078 adds r3, 2                                |     r3 += 2;
    0x0000407a str r3, [r2, 0x10]                        |     *((r2 + 0x10)) = r3;
    0x0000407c b.w 0x1a2e                                |     goto label_0;
                                                         | label_180:
    0x00004080 ldr r3, [r6]                              |     r3 = *(r6);
    0x00004082 b 0x397c                                  |     goto label_47;
                                                         | label_116:
    0x00004084 bic r1, r3, 0x8000800                     |     r1 = BIT_MASK (r3, 0x8000800);
    0x00004088 bic r1, r1, 0xe9                          |     r1 = BIT_MASK (r1, 0xe9);
    0x0000408c cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x0000408e beq.w 0x26a4                              |         goto label_48;
                                                         |     }
    0x00004092 ldr.w r0, [pc, 0x4a8]                     |     r0 = *(0x0000453c);
    0x00004096 add r0, pc                                |     r0 += pc;
    0x00004098 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x0000409c ldr.w r3, [r5, 0x20c]                     |     r3 = *((r5 + 0x20c));
    0x000040a0 b.w 0x26a4                                |     goto label_48;
                                                         | label_173:
    0x000040ae mov r1, r3                                |     r1 = r3;
    0x000040b0 str r3, [r7, 0x40]                        |     *((r7 + 0x40)) = r3;
    0x000040b2 b.w 0x2084                                |     goto label_49;
                                                         | label_80:
    0x000040b6 ldr r4, [r7, 0x44]                        |     r4 = *((r7 + 0x44));
    0x000040b8 movs r2, 0                                |     r2 = 0;
    0x000040ba str r2, [r7, 0x68]                        |     *((r7 + 0x68)) = r2;
    0x000040bc add.w r3, r7, 0x64                        |     r3 = r7 + 0x64;
    0x000040c0 str r1, [r7, 0x64]                        |     *((r7 + 0x64)) = r1;
    0x000040c2 add.w r0, r7, 0x50                        |     r0 = r7 + 0x50;
    0x000040c6 str r2, [r4]                              |     *(r4) = r2;
    0x000040c8 mov.w r2, 0x20000000                      |     r2 = 0x20000000;
    0x000040cc str r2, [r7, 0x6c]                        |     *((r7 + 0x6c)) = r2;
    0x000040ce mov r1, r4                                |     r1 = r4;
    0x000040d0 str r3, [sp]                              |     *(sp) = r3;
    0x000040d2 add.w r2, r7, 0x4c                        |     r2 = r7 + 0x4c;
    0x000040d6 ldr.w r3, [pc, 0x468]                     |     r3 = *(0x00004540);
    0x000040da add r3, pc                                |     r3 += pc;
    0x000040dc blx 0xa04                                 |     fcn_00000a04 ();
    0x000040e0 ldr r3, [r4]                              |     r3 = *(r4);
    0x000040e2 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000040e4 beq.w 0x1e90                              |         goto label_50;
                                                         |     }
    0x000040e8 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000040ec cmp r3, 6                                 |     
                                                         |     if (r3 == 6) {
    0x000040ee beq.w 0x34c8                              |         goto label_22;
                                                         |     }
    0x000040f2 movs r0, 1                                |     r0 = 1;
    0x000040f4 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x000040f8 b.w 0x1e90                                |     goto label_50;
                                                         | label_187:
    0x000040fc ldr.w r1, [pc, 0x444]                     |     
    0x00004100 add r1, pc                                |     r1 = 0x8648;
    0x00004102 b 0x3b22                                  |     goto label_51;
                                                         | label_188:
    0x00004104 ldr.w r2, [pc, 0x440]                     |     
    0x00004108 add r2, pc                                |     r2 = 0x8654;
    0x0000410a b 0x3b38                                  |     goto label_52;
                                                         | label_101:
    0x0000410c bic r1, r3, 0x8000800                     |     r1 = BIT_MASK (r3, 0x8000800);
    0x00004110 bic r1, r1, 0xe9                          |     r1 = BIT_MASK (r1, 0xe9);
    0x00004114 cmp r1, 0                                 |     
                                                         |     if (r1 == 0) {
    0x00004116 beq.w 0x2264                              |         goto label_53;
                                                         |     }
    0x0000411a ldr.w r0, [pc, 0x430]                     |     r0 = *(0x0000454c);
    0x0000411e add r0, pc                                |     r0 += pc;
    0x00004120 bl 0xc1f0                                 |     fcn_0000c1f0 ();
    0x00004124 ldr.w r3, [fp, 0x20c]                     |     r3 = *(arg_20ch);
    0x00004128 b.w 0x2264                                |     goto label_53;
                                                         | label_175:
    0x0000412c ldr.w r3, [pc, 0x420]                     |     r3 = *(0x00004550);
    0x00004130 str r2, [r7, 0x38]                        |     *((r7 + 0x38)) = r2;
    0x00004132 add r3, pc                                |     r3 += pc;
    0x00004134 str.w r2, [r3, 0x1d8]                     |     __asm ("str.w r2, [r3, 0x1d8]");
    0x00004138 b.w 0x3836                                |     goto label_54;
                                                         | label_191:
    0x00004144 eor r0, r3, 1                             |     r0 = r3 ^ 1;
                                                         | label_190:
    0x00004148 bl 0x14c28                                |     fcn_00014c28 (r0);
    0x0000414c ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x00004150 b 0x3cb8                                  |     goto label_55;
                                                         | label_189:
    0x00004152 ldr.w r2, [fp, 0x24]                      |     r2 = *(arg_24h);
    0x00004156 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00004158 beq.w 0x42b8                              |         goto label_198;
                                                         |     }
    0x0000415c ldr.w r4, [fp, 0xc]                       |     r4 = *(arg_ch);
    0x00004160 cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x00004162 beq.w 0x3cb8                              |         goto label_55;
                                                         |     }
    0x00004166 ldr r3, [pc, 0x3f0]                       |     
    0x00004168 ldr.w r8, [pc, 0x3f0]                     |     r8 = *(0x0000455c);
    0x0000416c ldr.w sb, [pc, 0x3f0]                     |     sb = *(0x00004560);
    0x00004170 add r3, pc                                |     r3 = 0x86ce;
    0x00004172 add r8, pc                                |     r8 += pc;
    0x00004174 str r3, [r7, 0x44]                        |     *((r7 + 0x44)) = r3;
    0x00004176 add sb, pc                                |     sb += pc;
    0x00004178 b 0x4188                                  |     
                                                         |     while (r0 == 0) {
    0x0000417a mov r1, r5                                |         r1 = r5;
    0x0000417c movs r2, 8                                |         r2 = 8;
    0x0000417e mov r0, sb                                |         r0 = sb;
    0x00004180 bl 0xc264                                 |         fcn_0000c264 ();
                                                         | label_56:
    0x00004184 ldr r4, [r4, 0xc]                         |         r4 = *((r4 + 0xc));
                                                         |         if (r4 == 0) {
    0x00004186 cbz r4, 0x41c2                            |             goto label_199;
                                                         |         }
    0x00004188 ldr r3, [r4, 0x1c]                        |         r3 = *((r4 + 0x1c));
    0x0000418a ldr r5, [r3]                              |         r5 = *(r3);
    0x0000418c ldrb.w r3, [r4, 0x199]                    |         r3 = *((r4 + 0x199));
    0x00004190 lsls r1, r3, 0x1e                         |         r1 = r3 << 0x1e;
                                                         |         if (r1 < r3) {
    0x00004192 bmi 0x41b8                                |             goto label_200;
                                                         |         }
    0x00004194 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00004196 mov r0, r5                                |         r0 = r5;
    0x00004198 mov r1, r2                                |         r1 = r2;
    0x0000419a str r2, [r7, 0x40]                        |         *((r7 + 0x40)) = r2;
    0x0000419c bl 0x14f30                                |         fcn_00014f30 (r0, r1, r2, r3);
    0x000041a0 ldr.w r3, [r4, 0x1b4]                     |         r3 = *((r4 + 0x1b4));
    0x000041a4 ldr r2, [r7, 0x40]                        |         r2 = *((r7 + 0x40));
    0x000041a6 cmp r0, 0                                 |         
    0x000041a8 beq 0x417a                                |         
                                                         |     }
    0x000041aa str r3, [sp]                              |     *(sp) = r3;
    0x000041ac mov r1, r5                                |     r1 = r5;
    0x000041ae movs r3, 8                                |     r3 = 8;
    0x000041b0 mov r0, r8                                |     r0 = r8;
    0x000041b2 bl 0xc264                                 |     fcn_0000c264 ();
    0x000041b6 b 0x4184                                  |     goto label_56;
                                                         | label_200:
    0x000041b8 ldr r0, [r7, 0x44]                        |     r0 = *((r7 + 0x44));
    0x000041ba mov r1, r5                                |     r1 = r5;
    0x000041bc bl 0xc264                                 |     fcn_0000c264 ();
    0x000041c0 b 0x4184                                  |     goto label_56;
                                                         | label_199:
    0x000041c2 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000041c6 b 0x3cb8                                  |     goto label_55;
                                                         | label_176:
    0x000041c8 movs r0, 1                                |     r0 = 1;
    0x000041ca bl 0x14c28                                |     fcn_00014c28 (r0);
    0x000041ce b.w 0x386e                                |     goto label_57;
                                                         | label_75:
    0x00004206 ldr r1, [pc, 0x368]                       |     
    0x00004208 mov r0, r6                                |     r0 = r6;
    0x0000420a add r1, pc                                |     r1 = 0x8780;
    0x0000420c bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00004210 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00004212 bne.w 0x44f8                              |         goto label_201;
                                                         |     }
    0x00004216 movs r3, 6                                |     r3 = 6;
    0x00004218 subs r4, 1                                |     r4--;
    0x0000421a adds r5, 4                                |     r5 += 4;
    0x0000421c str.w r3, [sl, 0x164]                     |     __asm ("str.w r3, [sl, 0x164]");
    0x00004220 b.w 0x1a2e                                |     goto label_0;
                                                         | label_193:
    0x00004224 ldr r3, [pc, 0x34c]                       |     
    0x00004226 add r3, pc                                |     
    0x00004228 ldr r3, [r3]                              |     r3 = *(0x879e);
    0x0000422a cmp r3, 1                                 |     
                                                         |     if (r3 < 1) {
    0x0000422c bls.w 0x3e98                              |         goto label_58;
                                                         |     }
    0x00004230 ldr r5, [pc, 0x344]                       |     
    0x00004232 movs r4, 1                                |     r4 = 1;
    0x00004234 ldr.w r8, [pc, 0x344]                     |     r8 = *(0x0000457c);
    0x00004238 add r5, pc                                |     r5 = 0x87b4;
    0x0000423a add r8, pc                                |     r8 += pc;
                                                         |     do {
    0x0000423c ldr r3, [r5]                              |         r3 = *(r5);
    0x0000423e movs r2, 0                                |         r2 = 0;
    0x00004240 mov r1, fp                                |         r1 = fp;
    0x00004242 ldr.w r0, [r3, r4, lsl 2]                 |         offset_7 = r4 << 2;
                                                         |         r0 = *((r3 + offset_7));
    0x00004246 ldr.w r3, [fp, 0x1d4]                     |         r3 = *(arg_1d4h);
    0x0000424a str r2, [r6]                              |         *(r6) = r2;
    0x0000424c str r2, [sp, 0xc]                         |         *(arg_ch) = r2;
    0x0000424e str r2, [sp]                              |         *(sp) = r2;
    0x00004250 movs r2, 1                                |         r2 = 1;
    0x00004252 strd r2, r2, [sp, 4]                      |         __asm ("strd r2, r2, [sp, 4]");
    0x00004256 mov r2, r6                                |         r2 = r6;
    0x00004258 bl 0x7ac8                                 |         fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x0000425c lsls r1, r4, 2                            |         r1 = r4 << 2;
    0x0000425e mov r2, r0                                |         r2 = r0;
                                                         |         if (r0 != 0) {
    0x00004260 cbz r0, 0x4264                            |             
    0x00004262 ldr r2, [r0]                              |             r2 = *(r0);
                                                         |         }
    0x00004264 ldr r0, [r5]                              |         r0 = *(r5);
    0x00004266 adds r4, 1                                |         r4++;
    0x00004268 ldr r3, [r6]                              |         r3 = *(r6);
    0x0000426a ldr r1, [r0, r1]                          |         r1 = *((r0 + r1));
    0x0000426c mov r0, r8                                |         r0 = r8;
    0x0000426e ldr r3, [r3, 4]                           |         r3 = *((r3 + 4));
    0x00004270 str r2, [sp, 4]                           |         *(arg_4h) = r2;
    0x00004272 movs r2, 8                                |         r2 = 8;
    0x00004274 str r2, [sp]                              |         *(sp) = r2;
    0x00004276 bl 0xc264                                 |         fcn_0000c264 ();
    0x0000427a ldr r3, [pc, 0x304]                       |         
    0x0000427c add r3, pc                                |         
    0x0000427e ldr r3, [r3]                              |         r3 = *(0x8802);
    0x00004280 cmp r3, r4                                |         
    0x00004282 bhi 0x423c                                |         
                                                         |     } while (r3 > r4);
    0x00004284 b 0x3e98                                  |     goto label_58;
                                                         | label_192:
    0x00004286 ldr r0, [r7, 0x44]                        |     r0 = *((r7 + 0x44));
    0x00004288 bl 0xc264                                 |     fcn_0000c264 ();
    0x0000428c b 0x3c86                                  |     goto label_59;
                                                         | label_114:
    0x000042a6 ldr r3, [pc, 0x2dc]                       |     
    0x000042a8 movs r2, 0x6e                             |     r2 = 0x6e;
    0x000042aa ldr r1, [pc, 0x2dc]                       |     
    0x000042ac ldr r0, [pc, 0x2dc]                       |     
    0x000042ae add r3, pc                                |     r3 = 0x8838;
    0x000042b0 add r1, pc                                |     r1 = 0x883e;
    0x000042b2 add r0, pc                                |     r0 = 0x8842;
    0x000042b4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_198:
    0x000042b8 ldr r0, [pc, 0x2d4]                       |     
    0x000042ba add r0, pc                                |     r0 = 0x884e;
    0x000042bc bl 0xc264                                 |     fcn_0000c264 ();
    0x000042c0 ldr.w r3, [sl, 0x164]                     |     r3 = *((sl + 0x164));
    0x000042c4 b 0x3cb8                                  |     goto label_55;
                                                         | label_181:
    0x000042c6 add r3, r5                                |     r3 += r5;
    0x000042c8 cmp r5, r3                                |     
                                                         |     if (r5 >= r3) {
    0x000042ca bhs 0x4340                                |         goto label_202;
                                                         |     }
    0x000042cc mov r0, r3                                |     r0 = r3;
    0x000042ce b 0x42d4                                  |     
                                                         |     while (r1 != 0) {
    0x000042d0 cmp r5, r0                                |         
                                                         |         if (r5 == r0) {
    0x000042d2 beq 0x4340                                |             goto label_202;
                                                         |         }
    0x000042d4 ldrb r2, [r0, -0x1]                       |         r2 = *((r0 - 0x1));
    0x000042d8 mov r8, r0                                |         r8 = r0;
    0x000042da subs r0, 1                                |         r0--;
    0x000042dc mov r3, r0                                |         r3 = r0;
    0x000042de cmp r2, 0x20                              |         
    0x000042e0 it ne                                     |         
                                                         |         if (r2 != 0x20) {
    0x000042e2 cmpne r2, 0x3a                            |             __asm ("cmpne r2, 0x3a");
                                                         |         }
    0x000042e4 sub.w r2, r2, 9                           |         r2 -= 9;
    0x000042e8 ite ne                                    |         
                                                         |         if (r2 == 0x20) {
    0x000042ea movne r1, 1                               |             r1 = 1;
                                                         |         }
                                                         |         if (r2 != 0x20) {
    0x000042ec moveq r1, 0                               |             r1 = 0;
                                                         |         }
    0x000042ee cmp r2, 1                                 |         
    0x000042f0 ite ls                                    |         
                                                         |         if (r2 > 1) {
    0x000042f2 movls r1, 0                               |             r1 = 0;
                                                         |         }
                                                         |         if (r2 <= 1) {
    0x000042f4 andhi r1, r1, 1                           |             r1 &= 1;
                                                         |         }
    0x000042f8 cmp r1, 0                                 |         
    0x000042fa bne 0x42d0                                |         
                                                         |     }
    0x000042fc cmp r5, r8                                |     
    0x000042fe it lo                                     |     
                                                         |     if (r5 < r8) {
    0x00004300 strblo r1, [r8, -0x1]                     |         *((r8 - 0x1)) = r1;
                                                         |         goto label_203;
                                                         |     }
                                                         |     if (r5 <= r8) {
                                                         | label_203:
    0x00004304 blo.w 0x39ec                              |         goto label_60;
                                                         |     }
                                                         | label_63:
    0x00004308 cmp r8, r5                                |     
                                                         |     if (r8 == r5) {
    0x0000430a beq.w 0x3a14                              |         goto label_61;
                                                         |     }
    0x0000430e b.w 0x39ec                                |     goto label_60;
                                                         | label_174:
    0x00004312 ldr r3, [pc, 0x280]                       |     
    0x00004314 movw r2, 0x414                            |     r2 = 0x414;
    0x00004318 ldr r1, [pc, 0x27c]                       |     
    0x0000431a ldr r0, [pc, 0x280]                       |     
    0x0000431c add r3, pc                                |     r3 = 0x88b6;
    0x0000431e add r1, pc                                |     r1 = 0x88ba;
    0x00004320 add r0, pc                                |     r0 = 0x88c2;
    0x00004322 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_178:
    0x00004326 ldrb r3, [r0, -0x1]                       |     r3 = *((r0 - 0x1));
    0x0000432a subs r2, r0, 1                            |     r2 = r0 - 1;
    0x0000432c cmp r3, 0x20                              |     
    0x0000432e it ne                                     |     
                                                         |     if (r3 == 0x20) {
    0x00004330 cmpne r3, 0x3a                            |         __asm ("cmpne r3, 0x3a");
                                                         |         goto label_204;
                                                         |     }
                                                         |     if (r3 == 0x20) {
                                                         | label_204:
    0x00004332 beq.w 0x39e0                              |         goto label_62;
                                                         |     }
    0x00004336 subs r3, 9                                |     r3 -= 9;
    0x00004338 cmp r3, 1                                 |     
                                                         |     if (r3 < 1) {
    0x0000433a bls.w 0x39e0                              |         goto label_62;
                                                         |     }
    0x0000433e mov r3, r5                                |     r3 = r5;
                                                         | label_202:
    0x00004340 mov r8, r3                                |     r8 = r3;
    0x00004342 b 0x4308                                  |     goto label_63;
                                                         | label_172:
    0x00004344 str r2, [r7, 0x40]                        |     *((r7 + 0x40)) = r2;
    0x00004346 b.w 0x2048                                |     goto label_64;
                                                         | label_82:
    0x0000435e ldr r0, [pc, 0x24c]                       |     
    0x00004360 add r0, pc                                |     r0 = 0x8912;
    0x00004362 bl 0xc2a4                                 |     dl_fatal_printf ()
                                                         | label_168:
    0x00004366 ldr r0, [pc, 0x248]                       |     
    0x00004368 add r0, pc                                |     r0 = 0x891e;
    0x0000436a bl 0xc2a4                                 |     dl_fatal_printf ()
                                                         | label_138:
    0x0000436e ldr r3, [pc, 0x244]                       |     
    0x00004370 movw r2, 0x70a                            |     r2 = 0x70a;
    0x00004374 ldr r1, [pc, 0x240]                       |     
    0x00004376 ldr r0, [pc, 0x244]                       |     
    0x00004378 add r3, pc                                |     r3 = 0x8932;
    0x0000437a add r1, pc                                |     r1 = 0x8936;
    0x0000437c add r0, pc                                |     r0 = 0x893e;
    0x0000437e bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_133:
    0x00004382 ldr r0, [pc, 0x23c]                       |     
    0x00004384 add r0, pc                                |     r0 = 0x894a;
    0x00004386 bl 0xc2a4                                 |     dl_fatal_printf ()
                                                         | label_128:
    0x0000438a ldr r3, [pc, 0x238]                       |     
    0x0000438c movw r2, 0x6a6                            |     r2 = 0x6a6;
    0x00004390 ldr r1, [pc, 0x234]                       |     
    0x00004392 ldr r0, [pc, 0x238]                       |     
    0x00004394 add r3, pc                                |     r3 = 0x895e;
    0x00004396 add r1, pc                                |     r1 = 0x8962;
    0x00004398 add r0, pc                                |     r0 = 0x896a;
    0x0000439a bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_129:
    0x0000439e ldr r3, [pc, 0x230]                       |     
    0x000043a0 movw r2, 0x6a7                            |     r2 = 0x6a7;
    0x000043a4 ldr r1, [pc, 0x22c]                       |     
    0x000043a6 ldr r0, [pc, 0x230]                       |     
    0x000043a8 add r3, pc                                |     r3 = 0x897e;
    0x000043aa add r1, pc                                |     r1 = 0x8982;
    0x000043ac add r0, pc                                |     r0 = 0x898a;
    0x000043ae bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_98:
    0x000043b2 ldr r3, [pc, 0x228]                       |     
    0x000043b4 movs r2, 0x7e                             |     r2 = 0x7e;
    0x000043b6 ldr r1, [pc, 0x228]                       |     
    0x000043b8 ldr r0, [pc, 0x228]                       |     
    0x000043ba add r3, pc                                |     r3 = 0x899c;
    0x000043bc add r1, pc                                |     r1 = 0x89a2;
    0x000043be add r0, pc                                |     r0 = 0x89a6;
    0x000043c0 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_99:
    0x000043c4 ldr r3, [pc, 0x220]                       |     
    0x000043c6 movs r2, 0x82                             |     r2 = 0x82;
    0x000043c8 ldr r1, [pc, 0x220]                       |     
    0x000043ca ldr r0, [pc, 0x224]                       |     
    0x000043cc add r3, pc                                |     r3 = 0x89b8;
    0x000043ce add r1, pc                                |     r1 = 0x89be;
    0x000043d0 add r0, pc                                |     r0 = 0x89c6;
    0x000043d2 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_97:
    0x000043d6 ldr r3, [pc, 0x21c]                       |     
    0x000043d8 movs r2, 0x78                             |     r2 = 0x78;
    0x000043da ldr r1, [pc, 0x21c]                       |     
    0x000043dc ldr r0, [pc, 0x21c]                       |     
    0x000043de add r3, pc                                |     r3 = 0x89d8;
    0x000043e0 add r1, pc                                |     r1 = 0x89de;
    0x000043e2 add r0, pc                                |     r0 = 0x89e2;
    0x000043e4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_126:
    0x000043e8 ldr r0, [pc, 0x214]                       |     
    0x000043ea add r0, pc                                |     r0 = 0x89ee;
    0x000043ec bl 0xc2a4                                 |     dl_fatal_printf ()
                                                         | label_108:
    0x000043f0 ldr r3, [pc, 0x210]                       |     
    0x000043f2 movs r2, 0x3d                             |     r2 = 0x3d;
    0x000043f4 ldr r1, [pc, 0x210]                       |     
    0x000043f6 ldr r0, [pc, 0x214]                       |     
    0x000043f8 add r3, pc                                |     r3 = 0x8a00;
    0x000043fa add r1, pc                                |     r1 = 0x8a06;
    0x000043fc add r0, pc                                |     r0 = 0x8a0e;
    0x000043fe bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_149:
    0x00004402 ldr r3, [pc, 0x20c]                       |     
    0x00004404 movw r2, 0x7bb                            |     r2 = 0x7bb;
    0x00004408 ldr r1, [pc, 0x208]                       |     
    0x0000440a ldr r0, [pc, 0x20c]                       |     
    0x0000440c add r3, pc                                |     r3 = 0x8a22;
    0x0000440e add r1, pc                                |     r1 = 0x8a26;
    0x00004410 add r0, pc                                |     r0 = 0x8a2e;
    0x00004412 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_118:
    0x00004416 ldr r3, [pc, 0x204]                       |     
    0x00004418 movs r2, 0x61                             |     r2 = 0x61;
    0x0000441a ldr r1, [pc, 0x204]                       |     
    0x0000441c ldr r0, [pc, 0x204]                       |     
    0x0000441e add r3, pc                                |     r3 = 0x8a40;
    0x00004420 add r1, pc                                |     r1 = 0x8a46;
    0x00004422 add r0, pc                                |     r0 = 0x8a4a;
    0x00004424 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_90:
    0x00004428 ldr r3, [pc, 0x1fc]                       |     
    0x0000442a movw r2, 0x64b                            |     r2 = 0x64b;
    0x0000442e ldr r1, [pc, 0x1fc]                       |     
    0x00004430 ldr r0, [pc, 0x1fc]                       |     
    0x00004432 add r3, pc                                |     r3 = 0x8a5e;
    0x00004434 add r1, pc                                |     r1 = 0x8a66;
    0x00004436 add r0, pc                                |     r0 = 0x8a6a;
    0x00004438 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_119:
    0x0000443c ldr r3, [pc, 0x1f4]                       |     
    0x0000443e movs r2, 0x62                             |     r2 = 0x62;
    0x00004440 ldr r1, [pc, 0x1f4]                       |     
    0x00004442 ldr r0, [pc, 0x1f8]                       |     
    0x00004444 add r3, pc                                |     r3 = 0x8a7c;
    0x00004446 add r1, pc                                |     r1 = 0x8a82;
    0x00004448 add r0, pc                                |     r0 = 0x8a8a;
    0x0000444a bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_147:
    0x0000444e ldr r3, [pc, 0x1f0]                       |     
    0x00004450 movw r2, 0x7b7                            |     r2 = 0x7b7;
    0x00004454 ldr r1, [pc, 0x1ec]                       |     
    0x00004456 ldr r0, [pc, 0x1f0]                       |     
    0x00004458 add r3, pc                                |     r3 = 0x8a9e;
    0x0000445a add r1, pc                                |     r1 = 0x8aa2;
    0x0000445c add r0, pc                                |     r0 = 0x8aaa;
    0x0000445e bl 0x11f30                                |     fcn_00011f30 (r0);
    0x00004462 ldr r3, [pc, 0x1e8]                       |     
    0x00004464 movw r2, 0x58f                            |     r2 = 0x58f;
    0x00004468 ldr r1, [pc, 0x1e4]                       |     
    0x0000446a ldr r0, [pc, 0x1e8]                       |     
    0x0000446c add r3, pc                                |     r3 = 0x8abe;
    0x0000446e add r1, pc                                |     r1 = 0x8ac2;
    0x00004470 add r0, pc                                |     r0 = 0x8aca;
    0x00004472 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_89:
    0x00004476 ldr r3, [pc, 0x1e0]                       |     
    0x00004478 movw r2, 0x646                            |     r2 = 0x646;
    0x0000447c ldr r1, [pc, 0x1dc]                       |     
    0x0000447e ldr r0, [pc, 0x1e0]                       |     
    0x00004480 add r3, pc                                |     r3 = 0x8ade;
    0x00004482 add r1, pc                                |     r1 = 0x8ae2;
    0x00004484 add r0, pc                                |     r0 = 0x8aea;
    0x00004486 bl 0x11f30                                |     fcn_00011f30 (r0);
    0x0000448a ldr r3, [pc, 0x1d8]                       |     
    0x0000448c movw r2, 0x597                            |     r2 = 0x597;
    0x00004490 ldr r1, [pc, 0x1d4]                       |     
    0x00004492 ldr r0, [pc, 0x1d8]                       |     
    0x00004494 add r3, pc                                |     r3 = 0x8afe;
    0x00004496 add r1, pc                                |     r1 = 0x8b02;
    0x00004498 add r0, pc                                |     r0 = 0x8b0a;
    0x0000449a bl 0x11f30                                |     fcn_00011f30 (r0);
    0x0000449e ldr r3, [pc, 0x1d0]                       |     
    0x000044a0 movw r2, 0x8c7                            |     r2 = 0x8c7;
    0x000044a4 ldr r1, [pc, 0x1cc]                       |     
    0x000044a6 ldr r0, [pc, 0x1d0]                       |     
    0x000044a8 add r3, pc                                |     r3 = 0x8b1e;
    0x000044aa add r1, pc                                |     r1 = 0x8b22;
    0x000044ac add r0, pc                                |     r0 = 0x8b2a;
    0x000044ae bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_77:
    0x000044b2 ldr r3, [pc, 0x1c8]                       |     
    0x000044b4 add r3, pc                                |     r3 = 0x8b36;
    0x000044b6 ldr r0, [r3]                              |     r0 = *(0x8b36);
    0x000044b8 bl 0x134a8                                |     fcn_000134a8 (r0);
                                                         | label_171:
    0x000044bc ldr r3, [pc, 0x1c0]                       |     
    0x000044be movw r2, 0x6db                            |     r2 = 0x6db;
    0x000044c2 ldr r1, [pc, 0x1c0]                       |     
    0x000044c4 ldr r0, [pc, 0x1c0]                       |     
    0x000044c6 add r3, pc                                |     r3 = 0x8b4a;
    0x000044c8 add r1, pc                                |     r1 = 0x8b52;
    0x000044ca add r0, pc                                |     r0 = 0x8b56;
    0x000044cc bl 0x11f30                                |     fcn_00011f30 (r0);
    0x000044d0 ldr r3, [pc, 0x1b8]                       |     
    0x000044d2 movw r2, 0x983                            |     r2 = 0x983;
    0x000044d6 ldr r1, [pc, 0x1b8]                       |     
    0x000044d8 ldr r0, [pc, 0x1b8]                       |     
    0x000044da add r3, pc                                |     r3 = 0x8b6a;
    0x000044dc add r1, pc                                |     r1 = 0x8b72;
    0x000044de add r0, pc                                |     r0 = 0x8b76;
    0x000044e0 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_165:
    0x000044e4 ldr r3, [pc, 0x1b0]                       |     
    0x000044e6 mov.w r2, 0x3d0                           |     r2 = 0x3d0;
    0x000044ea ldr r1, [pc, 0x1b0]                       |     
    0x000044ec ldr r0, [pc, 0x1b0]                       |     
    0x000044ee add r3, pc                                |     r3 = 0x8b8a;
    0x000044f0 add r1, pc                                |     r1 = 0x8b92;
    0x000044f2 add r0, pc                                |     r0 = 0x8b96;
    0x000044f4 bl 0x11f30                                |     fcn_00011f30 (r0);
                                                         | label_201:
    0x000044f8 ldr r1, [pc, 0x1a8]                       |     
    0x000044fa mov sb, r6                                |     sb = r6;
    0x000044fc mov r0, sb                                |     r0 = sb;
    0x000044fe ldr r6, [r7, 0x18]                        |     r6 = *((r7 + 0x18));
    0x00004500 add r1, pc                                |     r1 = 0x8ba8;
    0x00004502 bl 0x14f30                                |     r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                         |     if (r0 == 0) {
    0x00004506 cbz r0, 0x4524                            |         goto label_205;
                                                         |     }
    0x00004508 ldrb.w r3, [sb]                           |     r3 = *(sb);
    0x0000450c cmp r3, 0x2d                              |     
                                                         |     if (r3 != 0x2d) {
    0x0000450e bne.w 0x1e0e                              |         goto label_65;
                                                         |     }
    0x00004512 ldrb.w r3, [sb, 1]                        |     r3 = *((sb + 1));
    0x00004516 cmp r3, 0x2d                              |     
                                                         |     if (r3 != 0x2d) {
    0x00004518 bne.w 0x1e0e                              |         goto label_65;
                                                         |     }
    0x0000451c ldr r0, [r7, 0x1c]                        |     r0 = *((r7 + 0x1c));
    0x0000451e mov r1, sb                                |     r1 = sb;
    0x00004520 bl 0x12f50                                |     r0 = fcn_00012f50 (r0, r1);
                                                         | label_205:
    0x00004524 bl 0x12f8c                                |     fcn_00012f8c ();
    0x00004528 cmp r4, r3                                |     
    0x0000452a movs r1, r0                               |     r1 = r0;
    0x0000452c strh r0, [r3, 0x10]                       |     *((r3 + 0x10)) = r0;
    0x0000452e movs r2, r0                               |     r2 = r0;
    0x00004530 ldr r0, [sp, 0x238]                       |     r0 = *(arg_238h);
    0x00004532 movs r2, r0                               |     r2 = r0;
    0x00004534 cmp r2, r1                                |     
    0x00004536 movs r1, r0                               |     r1 = r0;
    0x00004538 ldr r0, [sp, 0x190]                       |     r0 = *(arg_190h);
    0x0000453a movs r2, r0                               |     r2 = r0;
    0x0000453c subs r7, 0xe2                             |     r7 -= 0xe2;
    0x0000453e movs r1, r0                               |     r1 = r0;
    0x00004540 ldm r3, {r0, r1, r2, r3, r5, r6, r7}      |     r0 = *(r3);
                                                         |     r1 = *((r3 + 4));
                                                         |     r2 = *((r3 + 8));
                                                         |     r3 = *((r3 + 12));
                                                         |     r5 = *((r3 + 16));
                                                         |     r6 = *((r3 + 20));
                                                         |     r7 = *((r3 + 24));
    0x00004542 invalid                                   |     
                                                         |     do {
    0x00009c2e ldr r1, [r5, 8]                           |         r1 = *((r5 + 8));
    0x00009c30 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x00009c32 add r3, r1                                |         r3 += r1;
    0x00009c34 add r3, r2                                |         r3 += r2;
    0x00009c36 str.w r3, [sl, sb]                        |         __asm ("str.w r3, [sl, sb]");
    0x00009c3a b 0x9b44                                  |         void (*0x9b44)() ();
    0x0000a56a str r1, [r7, 0x44]                        |         *((r7 + 0x44)) = r1;
    0x0000a56c bl 0x8dbc                                 |         fcn_00008dbc (r0);
    0x0000a570 ldr r1, [r7, 0x44]                        |         r1 = *((r7 + 0x44));
    0x0000a572 ldr r2, [r7, 0x54]                        |         r2 = *((r7 + 0x54));
    0x0000a574 ldr.w r3, [r1, 0x244]                     |         r3 = *((r1 + 0x244));
    0x0000a578 b.w 0x9c2e                                |         
                                                         |     } while (1);
                                                         | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x7328).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xc9b0 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0000c9b0 ()                                          | void fcn_0000c9b0 (int16_t arg_10h, int16_t arg_17ch, int16_t arg_180h) {
                                                                     |     int16_t var_0h;
                                                                     |     int8_t var_8h_3;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int32_t var_ch_2;
                                                                     |     int32_t var_10h_2;
                                                                     |     int32_t var_14h;
                                                                     |     int32_t var_18h;
                                                                     |     int32_t var_1ch;
                                                                     |     int32_t var_20h;
                                                                     |     int32_t var_24h;
                                                                     |     int16_t var_2ch;
                                                                     |     int32_t var_2ch_2;
                                                                     |     int32_t var_34h;
                                                                     |     int32_t var_34h_2;
                                                                     |     int32_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int32_t var_0h_2;
                                                                     |     int32_t var_8h_2;
                                                                     |     int32_t var_ch;
                                                                     |     int16_t var_50h;
                                                                     |     int32_t var_58h;
                                                                     |     int32_t var_5bh;
                                                                     |     int8_t var_1fh;
                                                                     |     int16_t var_60h;
                                                                     |     int32_t var_10h;
                                                                     |     int32_t var_28h;
                                                                     |     int32_t var_28h_2;
                                                                     |     int16_t var_d0h;
                                                                     |     int16_t var_264h;
    0x0000c9b0 ldr.w r3, [pc, 0x4cc]                                 |     r3 = *(0x0000ce80);
    0x0000c9b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0000c9b8 sub.w sp, sp, 0x26c                                   |     
    0x0000c9bc add r7, sp, 8                                         |     r7 += var_8h;
    0x0000c9be add r3, pc                                            |     r3 += pc;
    0x0000c9c0 ldr.w ip, [r3, 0x584]                                 |     ip = *((r3 + 0x584));
    0x0000c9c4 ldrh.w r1, [ip, 0x15c]                                |     r1 = *((ip + 0x15c));
    0x0000c9c8 ldr.w r3, [ip, 0x154]                                 |     r3 = *((ip + 0x154));
    0x0000c9cc lsls r1, r1, 5                                        |     r1 <<= 5;
    0x0000c9ce adds r2, r3, r1                                       |     r2 = r3 + r1;
    0x0000c9d0 cmp r3, r2                                            |     
                                                                     |     if (r3 >= r2) {
    0x0000c9d2 bhs.w 0xce1c                                          |         goto label_7;
                                                                     |     }
    0x0000c9d6 ldr.w r2, [pc, 0x4ac]                                 |     r2 = *(0x0000ce84);
    0x0000c9da add r1, r3                                            |     r1 += r3;
    0x0000c9dc adds r1, 0x20                                         |     r1 += 0x20;
    0x0000c9de adds r3, 0x20                                         |     r3 += 0x20;
    0x0000c9e0 movs r0, 0                                            |     r0 = 0;
    0x0000c9e2 mov.w r4, -1                                          |     r4 = -1;
    0x0000c9e6 add r2, pc                                            |     r2 += pc;
    0x0000c9e8 ldr r5, [r2, 0x10]                                    |     r5 = *((r2 + 0x10));
    0x0000c9ea rsb.w lr, r5, 0                                       |     lr = r5 - ;
    0x0000c9ee subs r5, 1                                            |     r5--;
    0x0000c9f0 b 0xc9f8                                              |     
                                                                     |     while (r2 != 1) {
                                                                     | label_0:
    0x0000c9f2 adds r3, 0x20                                         |         r3 += 0x20;
    0x0000c9f4 cmp r1, r3                                            |         
                                                                     |         if (r1 == r3) {
    0x0000c9f6 beq 0xca2e                                            |             goto label_8;
                                                                     |         }
                                                                     | label_1:
    0x0000c9f8 ldr r2, [r3, -0x20]                                   |         r2 = *((r3 - 0x20));
    0x0000c9fc cmp r2, 1                                             |         
    0x0000c9fe bne 0xc9f2                                            |         
                                                                     |     }
    0x0000ca00 ldr r2, [r3, -0x8]                                    |     r2 = *((r3 - 0x8));
    0x0000ca04 lsls r2, r2, 0x1f                                     |     r2 <<= 0x1f;
                                                                     |     if (r2 >= r2) {
    0x0000ca06 bpl 0xc9f2                                            |         goto label_0;
                                                                     |     }
    0x0000ca08 ldr r2, [r3, -0x18]                                   |     r2 = *((r3 - 0x18));
    0x0000ca0c adds r3, 0x20                                         |     r3 += 0x20;
    0x0000ca0e and.w r6, r2, lr                                      |     r6 = r2 & lr;
    0x0000ca12 cmp r4, r6                                            |     
    0x0000ca14 it hs                                                 |     
                                                                     |     if (r4 < r6) {
    0x0000ca16 movhs r4, r6                                          |         r4 = r6;
                                                                     |     }
    0x0000ca18 ldr r6, [r3, -0x2c]                                   |     r6 = *((r3 - 0x2c));
    0x0000ca1c add r2, r6                                            |     r2 += r6;
    0x0000ca1e add r2, r5                                            |     r2 += r5;
    0x0000ca20 and.w r2, r2, lr                                      |     r2 &= lr;
    0x0000ca24 cmp r0, r2                                            |     
    0x0000ca26 it lo                                                 |     
                                                                     |     if (r0 >= r2) {
    0x0000ca28 movlo r0, r2                                          |         r0 = r2;
                                                                     |     }
    0x0000ca2a cmp r1, r3                                            |     
                                                                     |     if (r1 != r3) {
    0x0000ca2c bne 0xc9f8                                            |         goto label_1;
                                                                     |     }
                                                                     | label_8:
    0x0000ca2e mov r1, r4                                            |     r1 = r4;
    0x0000ca30 mov r2, r0                                            |     r2 = r0;
                                                                     | label_3:
    0x0000ca32 ldr.w r3, [ip]                                        |     r3 = *(ip);
    0x0000ca36 ldr.w r5, [pc, 0x450]                                 |     r5 = *(0x0000ce88);
    0x0000ca3a add r4, r3                                            |     r4 += r3;
    0x0000ca3c adds r3, 3                                            |     r3 += 3;
    0x0000ca3e add r3, r0                                            |     r3 += r0;
    0x0000ca40 add r5, pc                                            |     r5 += pc;
    0x0000ca42 bic r3, r3, 3                                         |     r3 = BIT_MASK (r3, 3);
    0x0000ca46 bic r4, r4, 3                                         |     r4 = BIT_MASK (r4, 3);
    0x0000ca4a str r3, [r7, 0x18]                                    |     var_18h = r3;
    0x0000ca4c str r4, [r5, 4]                                       |     *((r5 + 4)) = r4;
    0x0000ca4e subs r4, r3, r4                                       |     r4 = r3 - r4;
    0x0000ca50 movs r3, 0                                            |     r3 = 0;
    0x0000ca52 add.w r0, r4, r4, lsl 1                               |     r0 = r4 + (r4 << 1);
    0x0000ca56 str r3, [r5]                                          |     *(r5) = r3;
    0x0000ca58 movs r3, 4                                            |     r3 = 4;
    0x0000ca5a str r3, [r5, 0xc]                                     |     *((r5 + 0xc)) = r3;
    0x0000ca5c movw r3, 0x1387                                       |     r3 = 0x1387;
    0x0000ca60 cmp r0, r3                                            |     
    0x0000ca62 str r4, [r5, 8]                                       |     *((r5 + 8)) = r4;
                                                                     |     if (r0 > r3) {
    0x0000ca64 bhi.w 0xcc04                                          |         goto label_9;
                                                                     |     }
    0x0000ca68 movs r3, 0x32                                         |     r3 = 0x32;
    0x0000ca6a str r3, [r5, 0x10]                                    |     *((r5 + 0x10)) = r3;
    0x0000ca6c mov.w r3, 0x190                                       |     r3 = 0x190;
    0x0000ca70 str r3, [r7, 0x1c]                                    |     var_1ch = r3;
    0x0000ca72 mov.w r3, 0x1300                                      |     r3 = 0x1300;
                                                                     |     do {
                                                                     | label_6:
    0x0000ca76 lsr.w ip, r4, 2                                       |         
    0x0000ca7a movw r6, 0x6d67                                       |         
    0x0000ca7e movw r0, 0xffff                                       |         
    0x0000ca82 str r3, [r7, 0x24]                                    |         var_24h = r3;
    0x0000ca84 mov.w sb, 0                                           |         sb = 0;
    0x0000ca88 add.w r3, r7, 0x2c                                    |         r3 += var_2ch;
    0x0000ca8c add.w r5, r7, 0x40                                    |         r5 += var_40h;
    0x0000ca90 movt r6, 0x6e6f                                       |         r6 = 0x6e6f6d67;
    0x0000ca94 movt r0, 1                                            |         r0 = 0x1ffff;
    0x0000ca98 str r3, [r7, 0x20]                                    |         var_20h = r3;
    0x0000ca9a str.w ip, [r5, 8]                                     |         __asm ("str.w ip, [var_8h_2]");
    0x0000ca9e strd r1, r2, [r5]                                     |         __asm ("strd r1, r2, [r5]");
    0x0000caa2 strd r6, r0, [r7, 0x2c]                               |         __asm ("strd r6, r0, [var_2ch]");
    0x0000caa6 ldr.w fp, [pc, 0x3e4]                                 |         fp = *(0x0000ce8c);
    0x0000caaa strd sb, sb, [r7, 0x34]                               |         __asm ("strd sb, sb, [var_34h]");
    0x0000caae str.w sb, [r7, 0x3c]                                  |         __asm ("str.w sb, [var_3ch]");
    0x0000cab2 bl 0x14384                                            |         fcn_00014384 ();
    0x0000cab6 ldr r2, [pc, 0x3d8]                                   |         
    0x0000cab8 add fp, pc                                            |         
    0x0000caba ldr.w r6, [fp, 0x180]                                 |         r6 = *(arg_180h);
    0x0000cabe str r0, [r5, 0xc]                                     |         var_ch = r0;
    0x0000cac0 add r2, pc                                            |         r2 = 0x19956;
    0x0000cac2 str.w sb, [r7, 0x58]                                  |         __asm ("str.w sb, [var_58h]");
    0x0000cac4 str r0, [sp, 0x160]                                   |         *((sp + 0x160)) = r0;
    0x0000cac6 ldm.w r2, {r0, r1}                                    |         r0 = *(r2);
                                                                     |         r1 = *((r2 + 4));
    0x0000caca add.w r2, r7, 0x50                                    |         r2 += var_50h;
    0x0000cace str.w sb, [r7, 0x5b]                                  |         __asm ("str.w sb, [var_5bh]");
    0x0000cad2 stm.w r2, {r0, r1}                                    |         *(r2) = r0;
                                                                     |         *((r2 + 4)) = r1;
    0x0000cad6 movs r2, 0x73                                         |         r2 = 0x73;
    0x0000cad8 mov r0, r6                                            |         r0 = r6;
    0x0000cada strb r2, [r5, 0x1f]                                   |         var_1fh = r2;
    0x0000cadc bl 0x15540                                            |         fcn_00015540 (r0, r1);
    0x0000cae0 ldr.w r8, [fp, 0x17c]                                 |         r8 = *(arg_17ch);
    0x0000cae4 mov sl, r0                                            |         sl = r0;
    0x0000cae6 mov r0, r8                                            |         r0 = r8;
    0x0000cae8 bl 0x15540                                            |         r0 = fcn_00015540 (r0, r1);
    0x0000caec add sl, r0                                            |         sl += r0;
    0x0000caee mov r1, r6                                            |         r1 = r6;
    0x0000caf0 add.w sl, sl, 0x11                                    |         sl += 0x11;
    0x0000caf4 bic sl, sl, 7                                         |         sl = BIT_MASK (sl, 7);
    0x0000caf8 sub.w sp, sp, sl                                      |         
    0x0000cafc add r6, sp, 8                                         |         r6 += var_8h;
    0x0000cafe mov r0, r6                                            |         r0 = r6;
    0x0000cb00 bl 0x15220                                            |         fcn_00015220 ();
    0x0000cb04 movs r2, 0x2f                                         |         r2 = 0x2f;
    0x0000cb06 mov r1, r8                                            |         r1 = r8;
    0x0000cb08 strb r2, [r0], 1                                      |         *(r0) = r2;
                                                                     |         r0++;
    0x0000cb0c bl 0x15220                                            |         fcn_00015220 ();
    0x0000cb10 ldr.w lr, [pc, 0x380]                                 |         
    0x0000cb14 mov ip, r0                                            |         
    0x0000cb16 mov.w r2, 0x1b6                                       |         r2 = 0x1b6;
    0x0000cb1a add lr, pc                                            |         lr += pc;
    0x0000cb1c ldm.w lr!, {r0, r1}                                   |         r0 = *(lr!);
                                                                     |         r1 = *((lr! + 4));
    0x0000cb20 str.w r1, [ip, 4]                                     |         __asm ("str.w r1, [ip, 4]");
    0x0000cb24 ldrb.w r1, [lr]                                       |         r1 = *(lr);
    0x0000cb28 str.w r0, [ip]                                        |         __asm ("str.w r0, [ip]");
    0x0000cb2c mov r0, r6                                            |         r0 = r6;
    0x0000cb2e strb.w r1, [ip, 8]                                    |         var_8h_3 = r1;
    0x0000cb32 movw r1, 0x8042                                       |         r1 = 0x8042;
    0x0000cb36 bl 0x1488c                                            |         r0 = fcn_0001488c (r0);
    0x0000cb3a cmp.w r0, -1                                          |         
    0x0000cb3e ldr r3, [r7, 0x24]                                    |         r3 = var_24h;
    0x0000cb40 mov sl, r0                                            |         sl = r0;
                                                                     |         if (r0 == -1) {
    0x0000cb42 beq 0xcc34                                            |             goto label_10;
                                                                     |         }
    0x0000cb44 add.w r8, r7, 0x60                                    |         r8 += var_60h;
    0x0000cb48 str r3, [r7, 0x24]                                    |         var_24h = r3;
    0x0000cb4a mov r1, r8                                            |         r1 = r8;
    0x0000cb4c bl 0x143c8                                            |         r0 = fcn_000143c8 (r0, r1);
    0x0000cb50 cmp r0, 0                                             |         
                                                                     |         if (r0 < 0) {
    0x0000cb52 blt.w 0xce28                                          |             goto label_11;
                                                                     |         }
    0x0000cb56 ldr.w r2, [r8, 0x10]                                  |         r2 = var_10h;
    0x0000cb5a and r2, r2, 0xf000                                    |         r2 &= 0xf000;
    0x0000cb5e cmp.w r2, 0x8000                                      |         
                                                                     |         if (r2 != 0x8000) {
    0x0000cb62 bne 0xcc60                                            |             goto label_12;
                                                                     |         }
    0x0000cb64 ldr r3, [r7, 0x24]                                    |         r3 = var_24h;
    0x0000cb66 lsrs r0, r4, 1                                        |         r0 = r4 >> 1;
    0x0000cb68 ldrd r1, r2, [r8, 0x28]                               |         __asm ("ldrd r1, r2, [var_28h]");
    0x0000cb6c str r0, [r7, 0x14]                                    |         var_14h = r0;
    0x0000cb6e adds r3, r0, r3                                       |         r3 = r0 + r3;
    0x0000cb70 str r3, [r7, 0x24]                                    |         var_24h = r3;
    0x0000cb72 orrs.w r3, r1, r2                                     |         r3 = r1 | r2;
                                                                     |         if (r3 == r1) {
    0x0000cb76 beq.w 0xcdac                                          |             goto label_13;
                                                                     |         }
    0x0000cb7a ldr r0, [r7, 0x24]                                    |         r0 = var_24h;
    0x0000cb7c asrs r3, r0, 0x1f                                     |         r3 = r0 >> 0x1f;
    0x0000cb7e cmp r2, r3                                            |         
    0x0000cb80 it eq                                                 |         
                                                                     |         if (r2 == r3) {
    0x0000cb82 cmpeq r1, r0                                          |             __asm ("cmpeq r1, r0");
                                                                     |         }
                                                                     |         if (r2 != r3) {
    0x0000cb84 bne 0xcc72                                            |             goto label_14;
                                                                     |         }
                                                                     | label_2:
    0x0000cb86 mov.w fp, 0                                           |         
    0x0000cb8a str.w sl, [sp]                                        |         __asm ("str.w sl, [sp]");
    0x0000cb8e str.w fp, [sp, 4]                                     |         __asm ("str.w fp, [var_4h]");
    0x0000cb92 movs r3, 1                                            |         r3 = 1;
    0x0000cb94 ldr r1, [r7, 0x24]                                    |         r1 = *((r7 + 0x24));
    0x0000cb96 movs r2, 3                                            |         r2 = 3;
    0x0000cb98 mov r0, fp                                            |         r0 = fp;
    0x0000cb9a bl 0x14a98                                            |         r0 = fcn_00014a98 (r0, r1);
    0x0000cb9e cmp.w r0, -1                                          |         
    0x0000cba2 mov sb, r0                                            |         sb = r0;
                                                                     |         if (r0 == -1) {
    0x0000cba4 beq.w 0xce38                                          |             goto label_15;
                                                                     |         }
    0x0000cba8 mov r0, sl                                            |         r0 = sl;
    0x0000cbaa bl 0x14720                                            |         fcn_00014720 ();
    0x0000cbae ldr r1, [r7, 0x14]                                    |         r1 = *((r7 + 0x14));
    0x0000cbb0 add.w r3, sb, 0x38                                    |         r3 = sb + 0x38;
    0x0000cbb4 str r3, [r7, 0x10]                                    |         *((r7 + 0x10)) = r3;
    0x0000cbb6 ldr r2, [pc, 0x2e0]                                   |         
    0x0000cbb8 add.w sl, r1, 4                                       |         sl = r1 + 4;
    0x0000cbbc add sl, r3                                            |         sl += r3;
    0x0000cbbe ldrd r3, r1, [r8, 0x28]                               |         __asm ("ldrd r3, r1, [r8, 0x28]");
    0x0000cbc2 add r2, pc                                            |         r2 = "%s: cannot map file: %s\n";
    0x0000cbc4 add.w r0, sl, 4                                       |         r0 = sl + 4;
    0x0000cbc8 str.w sl, [r2, 0x14]                                  |         __asm ("str.w sl, [r2, 0x14]");
    0x0000cbcc orrs r3, r1                                           |         r3 |= r1;
    0x0000cbce str r0, [r2, 0x18]                                    |         *((r2 + 0x18)) = r0;
                                                                     |         if (r3 == r1) {
    0x0000cbd0 beq 0xcc94                                            |             goto label_16;
                                                                     |         }
    0x0000cbd2 ldr r1, [r7, 0x20]                                    |         r1 = *((r7 + 0x20));
    0x0000cbd4 movs r2, 0x14                                         |         r2 = 0x14;
    0x0000cbd6 mov r0, sb                                            |         r0 = sb;
    0x0000cbd8 bl 0x157dc                                            |         r0 = fcn_000157dc (r0, r1, r2);
                                                                     |         if (r0 == 0) {
    0x0000cbdc cbnz r0, 0xcbfa                                       |             
    0x0000cbde ldr.w r3, [sb, 0x14]                                  |             r3 = *((sb + 0x14));
                                                                     |             if (r3 != 0) {
    0x0000cbe2 cbnz r3, 0xcbfa                                       |                 goto label_17;
                                                                     |             }
    0x0000cbe4 mov r1, r5                                            |             r1 = r5;
    0x0000cbe6 movs r2, 0x20                                         |             r2 = 0x20;
    0x0000cbe8 add.w r0, sb, 0x18                                    |             r0 = sb + 0x18;
    0x0000cbec bl 0x157dc                                            |             r0 = fcn_000157dc (r0, r1, r2);
                                                                     |             if (r0 != 0) {
    0x0000cbf0 cbnz r0, 0xcbfa                                       |                 goto label_17;
                                                                     |             }
    0x0000cbf2 ldr r3, [sl, -0x4]                                    |             r3 = *((sl - 0x4));
    0x0000cbf6 cmp r3, 1                                             |             
                                                                     |             if (r3 == 1) {
    0x0000cbf8 beq 0xccde                                            |                 goto label_18;
                                                                     |             }
                                                                     |         }
                                                                     | label_17:
    0x0000cbfa ldr r1, [r7, 0x24]                                    |         r1 = *((r7 + 0x24));
    0x0000cbfc mov r0, sb                                            |         r0 = sb;
    0x0000cbfe bl 0x14ae0                                            |         fcn_00014ae0 (r0);
    0x0000cc02 b 0xcc78                                              |         goto label_19;
                                                                     | label_9:
    0x0000cc04 movw r3, 0x851f                                       |         
                                                                     |         /* if there is a right shift of 5, then it's a division by 1/100 */
    0x0000cc08 movt r3, 0x51eb                                       |         r3 = 0x51eb851f;
    0x0000cc0c umull r6, r3, r3, r0                                  |         r6:r3 = r3 * r0;
    0x0000cc10 movs r6, 0x63                                         |         
    0x0000cc12 movt r6, 0x640                                        |         r6 = 0x6400063;
    0x0000cc16 cmp r0, r6                                            |         
    0x0000cc18 lsr.w r3, r3, 5                                       |         r3 >>= 5;
                                                                     |         if (r0 < r6) {
    0x0000cc1c bls.w 0xce6e                                          |             goto label_20;
                                                                     |         }
    0x0000cc20 mov.w r3, 0x100000                                    |         r3 = 0x100000;
    0x0000cc24 mov.w r0, 0x800000                                    |         r0 = 0x800000;
    0x0000cc28 str r3, [r5, 0x10]                                    |         *((r5 + 0x10)) = r3;
    0x0000cc2a movs r3, 0x40                                         |         r3 = 0x40;
    0x0000cc2c str r0, [r7, 0x1c]                                    |         var_1ch = r0;
    0x0000cc2e movt r3, 0x600                                        |         r3 = (r3 & 0xFFFF) | 0x6000000;
    0x0000cc32 b 0xca76                                              |         
                                                                     |     } while (1);
                                                                     | label_10:
    0x0000cc34 ldr r3, [pc, 0x264]                                   |     
    0x0000cc36 ldr r4, [pc, 0x268]                                   |     
    0x0000cc38 add r3, pc                                            |     r3 = 0x19ad8;
    0x0000cc3a ldr r5, [r3]                                          |     r5 = *(0x19ad8);
    0x0000cc3c add r4, pc                                            |     r4 = 0x19ae2;
                                                                     |     do {
    0x0000cc3e add.w r1, r7, 0xd0                                    |         r1 += var_d0h;
    0x0000cc42 mov r0, r5                                            |         r0 = r5;
    0x0000cc44 mov.w r2, 0x190                                       |         r2 = 0x190;
    0x0000cc48 bl 0x11e14                                            |         fcn_00011e14 (r0, r1);
    0x0000cc4c mov r1, r6                                            |         r1 = r6;
    0x0000cc4e mov r2, r0                                            |         r2 = r0;
    0x0000cc50 mov r0, r4                                            |         r0 = r4;
    0x0000cc52 bl 0xc284                                             |         fcn_0000c284 ();
    0x0000cc56 add.w r7, r7, 0x264                                   |         r7 += var_264h;
    0x0000cc5a mov sp, r7                                            |         
    0x0000cc5c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_12:
    0x0000cc60 ldr r4, [pc, 0x240]                                   |         
    0x0000cc62 add r4, pc                                            |         r4 = 0x19b0a;
                                                                     | label_4:
    0x0000cc64 ldr r3, [pc, 0x240]                                   |         
    0x0000cc66 mov r0, sl                                            |         r0 = sl;
    0x0000cc68 add r3, pc                                            |         r3 = 0x19b14;
    0x0000cc6a ldr r5, [r3]                                          |         r5 = GLIBC_PRIVATE;
    0x0000cc6c bl 0x14720                                            |         fcn_00014720 ();
    0x0000cc70 b 0xcc3e                                              |         
                                                                     |     } while (1);
                                                                     | label_14:
    0x0000cc72 mov r0, sl                                            |     r0 = sl;
    0x0000cc74 bl 0x14720                                            |     fcn_00014720 ();
                                                                     | label_19:
    0x0000cc78 ldr r3, [pc, 0x230]                                   |     
    0x0000cc7a mov r1, r6                                            |     r1 = r6;
    0x0000cc7c ldr r0, [pc, 0x230]                                   |     
    0x0000cc7e add r3, pc                                            |     r3 = 0x19b2e;
    0x0000cc80 ldr.w r2, [r3, 0x17c]                                 |     r2 = *(0x19caa);
    0x0000cc84 add r0, pc                                            |     r0 = 0x19b38;
    0x0000cc86 bl 0xc284                                             |     fcn_0000c284 ();
    0x0000cc8a add.w r7, r7, 0x264                                   |     r7 += 0x264;
    0x0000cc8e mov sp, r7                                            |     
    0x0000cc90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_16:
    0x0000cc94 ldr r6, [r7, 0x20]                                    |     r6 = *((r7 + 0x20));
    0x0000cc96 mov.w ip, 1                                           |     
    0x0000cc9a str.w fp, [sb, 0x14]                                  |     __asm ("str.w fp, [sb, 0x14]");
    0x0000cc9e ldm r6!, {r0, r1, r2, r3}                             |     r0 = *(r6!);
                                                                     |     r1 = *((r6! + 4));
                                                                     |     r2 = *((r6! + 8));
                                                                     |     r3 = *((r6! + 12));
    0x0000cca0 str.w r0, [sb]                                        |     __asm ("str.w r0, [sb]");
    0x0000cca4 ldr r0, [r6]                                          |     r0 = *(r6);
    0x0000cca6 str.w r1, [sb, 4]                                     |     __asm ("str.w r1, [sb, 4]");
    0x0000ccaa str.w r2, [sb, 8]                                     |     __asm ("str.w r2, [sb, 8]");
    0x0000ccae str.w r3, [sb, 0xc]                                   |     __asm ("str.w r3, [sb, 0xc]");
    0x0000ccb2 str.w r0, [sb, 0x10]                                  |     __asm ("str.w r0, [sb, 0x10]");
    0x0000ccb6 ldm r5!, {r0, r1, r2, r3}                             |     r0 = *(r5!);
                                                                     |     r1 = *((r5! + 4));
                                                                     |     r2 = *((r5! + 8));
                                                                     |     r3 = *((r5! + 12));
    0x0000ccb8 str.w r0, [sb, 0x18]                                  |     __asm ("str.w r0, [sb, 0x18]");
    0x0000ccbc str.w r1, [sb, 0x1c]                                  |     __asm ("str.w r1, [sb, 0x1c]");
    0x0000ccc0 str.w r2, [sb, 0x20]                                  |     __asm ("str.w r2, [sb, 0x20]");
    0x0000ccc4 str.w r3, [sb, 0x24]                                  |     __asm ("str.w r3, [sb, 0x24]");
    0x0000ccc8 ldm r5!, {r0, r1, r2, r3}                             |     r0 = *(r5!);
                                                                     |     r1 = *((r5! + 4));
                                                                     |     r2 = *((r5! + 8));
                                                                     |     r3 = *((r5! + 12));
    0x0000ccca str.w r0, [sb, 0x28]                                  |     __asm ("str.w r0, [sb, 0x28]");
    0x0000ccce str.w r1, [sb, 0x2c]                                  |     __asm ("str.w r1, [sb, 0x2c]");
    0x0000ccd2 str.w r2, [sb, 0x30]                                  |     __asm ("str.w r2, [sb, 0x30]");
    0x0000ccd6 str.w r3, [sb, 0x34]                                  |     __asm ("str.w r3, [sb, 0x34]");
    0x0000ccda str ip, [sl, -0x4]                                    |     *((sl - 0x4)) = ip;
                                                                     | label_18:
    0x0000ccde ldr r3, [r7, 0x14]                                    |     r3 = *((r7 + 0x14));
    0x0000cce0 movs r1, 1                                            |     r1 = 1;
    0x0000cce2 ldr r0, [r7, 0x1c]                                    |     r0 = *((r7 + 0x1c));
    0x0000cce4 add r0, r3                                            |     r0 += r3;
    0x0000cce6 ldr r3, [pc, 0x1cc]                                   |     
    0x0000cce8 add r3, pc                                            |     
    0x0000ccea ldr r3, [r3]                                          |     r3 = *(0x19ba2);
    0x0000ccec blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000ccee ldr r2, [pc, 0x1c8]                                   |     
    0x0000ccf0 add r2, pc                                            |     r2 = 0x19bae;
    0x0000ccf2 str r0, [r2, 0x1c]                                    |     *((r2 + 0x1c)) = r0;
    0x0000ccf4 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000ccf6 beq.w 0xce5e                                          |         goto label_21;
                                                                     |     }
    0x0000ccfa ldr r5, [r7, 0x14]                                    |     r5 = *((r7 + 0x14));
    0x0000ccfc movs r3, 0                                            |     r3 = 0;
    0x0000ccfe ldr r1, [r2, 0x14]                                    |     r1 = *((r2 + 0x14));
    0x0000cd00 str r3, [r2, 0x24]                                    |     *((r2 + 0x24)) = r3;
    0x0000cd02 add.w ip, r0, r5                                      |     
    0x0000cd06 ldr r3, [r2, 0x10]                                    |     r3 = *((r2 + 0x10));
    0x0000cd08 str.w ip, [r2, 0x20]                                  |     __asm ("str.w ip, [r2, 0x20]");
    0x0000cd0c ldr r2, [r1]                                          |     r2 = *(r1);
    0x0000cd0e ldr r6, [pc, 0x1ac]                                   |     
    0x0000cd10 cmp r2, r3                                            |     
    0x0000cd12 it lo                                                 |     
                                                                     |     if (r2 >= r3) {
    0x0000cd14 ldrlo r3, [r1]                                        |         r3 = *(r1);
                                                                     |     }
    0x0000cd16 add r6, pc                                            |     r6 = 0x19bd8;
    0x0000cd18 str r3, [r6, 0x28]                                    |     *((r6 + 0x28)) = r3;
                                                                     |     if (r3 == 0) {
    0x0000cd1a cbz r3, 0xcd58                                        |         goto label_22;
                                                                     |     }
    0x0000cd1c ldr.w r8, [r6, 0x18]                                  |     r8 = *((r6 + 0x18));
    0x0000cd20 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0000cd24 add.w r2, r8, r3, lsl 2                               |     r2 = r8 + (r3 << 2);
    0x0000cd28 subs r2, 0xc                                          |     r2 -= 0xc;
                                                                     |     do {
    0x0000cd2a ldr r1, [r2, 4]                                       |         r1 = *((r2 + 4));
    0x0000cd2c cmp r2, r8                                            |         
    0x0000cd2e ldr r3, [r6, 0x24]                                    |         r3 = *((r6 + 0x24));
    0x0000cd30 lsr.w r1, r1, 2                                       |         r1 >>= 2;
    0x0000cd34 add.w lr, r3, 1                                       |         lr = r3 + 1;
    0x0000cd38 str.w lr, [r6, 0x24]                                  |         __asm ("str.w lr, [r6, 0x24]");
    0x0000cd3c add.w lr, ip, r3, lsl 3                               |         lr = ip + (r3 << 3);
    0x0000cd40 ldrh.w sb, [r0, r1, lsl 1]                            |         offset_0 = r1 << 1;
                                                                     |         sb = *((r0 + offset_0));
    0x0000cd44 str.w r2, [ip, r3, lsl 3]                             |         __asm ("str.w r2, [ip, r3, lsl 3]");
    0x0000cd48 uxth r3, r3                                           |         r3 = (int16_t) r3;
    0x0000cd4a sub.w r2, r2, 0xc                                     |         r2 -= 0xc;
    0x0000cd4e strh.w sb, [lr, 4]                                    |         *((lr + 4)) = sb;
    0x0000cd52 strh.w r3, [r0, r1, lsl 1]                            |         offset_1 = r1 << 1;
                                                                     |         *((r0 + offset_1)) = r3;
    0x0000cd56 bne 0xcd2a                                            |         
                                                                     |     } while (r2 != r8);
                                                                     | label_22:
    0x0000cd58 ldr r3, [pc, 0x164]                                   |     
    0x0000cd5a add r3, pc                                            |     r3 = 0x19c1e;
    0x0000cd5c ldr r6, [r3, 4]                                       |     r6 = *(0x19c22);
    0x0000cd5e ldr r3, [r7, 0x18]                                    |     r3 = *((r7 + 0x18));
    0x0000cd60 subs r5, r3, r6                                       |     r5 = r3 - r6;
    0x0000cd62 ldr r3, [r7, 0x14]                                    |     r3 = *((r7 + 0x14));
    0x0000cd64 cmp r5, r3                                            |     
    0x0000cd66 it ls                                                 |     
                                                                     |     if (r5 > r3) {
    0x0000cd68 movls r3, 0x10000                                     |         r3 = 0x10000;
                                                                     |     }
                                                                     |     if (r5 >= r3) {
    0x0000cd6c bls 0xcd90                                            |         
    0x0000cd6e ldr r1, [r7, 0x14]                                    |         r1 = *((r7 + 0x14));
    0x0000cd70 mov r0, r5                                            |         r0 = r5;
    0x0000cd72 bl 0x16608                                            |         r0 = fcn_00016608 (r0, r1, r2);
    0x0000cd76 cmp.w r0, 0x10000                                     |         
    0x0000cd7a it hs                                                 |         
                                                                     |         if (r0 < 0x10000) {
    0x0000cd7c movhs r3, 1                                           |             r3 = 1;
                                                                     |         }
                                                                     |         if (r0 >= 0x10000) {
    0x0000cd7e bhs 0xcd90                                            |             goto label_5;
                                                                     |         }
    0x0000cd80 cmp r0, 0xff                                          |         
                                                                     |         if (r0 < 0xff) {
    0x0000cd82 bls 0xce3e                                            |             goto label_23;
                                                                     |         }
    0x0000cd84 mov r1, r0                                            |         r1 = r0;
    0x0000cd86 mov.w r0, 0x10000                                     |         r0 = 0x10000;
    0x0000cd8a bl 0x16608                                            |         r0 = fcn_00016608 (r0, r1, r2);
    0x0000cd8e mov r3, r0                                            |         r3 = r0;
                                                                     |     }
                                                                     | label_5:
    0x0000cd90 ldrd r0, r1, [r7, 0x10]                               |     __asm ("ldrd r0, r1, [r7, 0x10]");
    0x0000cd94 mov r2, r6                                            |     r2 = r6;
    0x0000cd96 bl 0x14304                                            |     fcn_00014304 (r0, r1, r2, r3);
    0x0000cd9a ldr r3, [pc, 0x128]                                   |     
    0x0000cd9c movs r2, 1                                            |     r2 = 1;
    0x0000cd9e add.w r7, r7, 0x264                                   |     r7 += 0x264;
    0x0000cda2 add r3, pc                                            |     r3 = "listp->slotinfo[cnt].gen <= GL(dl_tls_generation)";
    0x0000cda4 str r2, [r3]                                          |     *(r3) = r2;
    0x0000cda6 mov sp, r7                                            |     
    0x0000cda8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_13:
    0x0000cdac ldr.w r2, [fp, 0x10]                                  |     r2 = *(arg_10h);
    0x0000cdb0 mov r1, sb                                            |     r1 = sb;
    0x0000cdb2 str.w sp, [r7, 0x10]                                  |     __asm ("str.w sp, [var_10h_2]");
    0x0000cdb6 adds r3, r2, 7                                        |     r3 = r2 + 7;
    0x0000cdb8 str r2, [r7, 0xc]                                     |     var_ch_2 = r2;
    0x0000cdba bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0000cdbe sub.w sp, sp, r3                                      |     
    0x0000cdc2 add r3, sp, 8                                         |     r3 += var_8h;
    0x0000cdc4 mov r0, r3                                            |     r0 = r3;
    0x0000cdc6 str r3, [r7, 8]                                       |     *((r7 + 8)) = r3;
    0x0000cdc8 blx 0x15da0                                           |     fcn_00015da0 (r0, r1);
    0x0000cdcc ldr r2, [r7, 0xc]                                     |     r2 = *((r7 + 0xc));
    0x0000cdce mov r0, sl                                            |     r0 = sl;
    0x0000cdd0 ldr r3, [r7, 0x24]                                    |     r3 = *((r7 + 0x24));
    0x0000cdd2 rsbs r1, r2, 0                                        |     r1 = r2 - ;
    0x0000cdd4 mov r2, sb                                            |     r2 = sb;
    0x0000cdd6 ands r1, r3                                           |     r1 &= r3;
    0x0000cdd8 bl 0x146a8                                            |     fcn_000146a8 (r0, r1);
    0x0000cddc adds r0, 1                                            |     r0++;
                                                                     |     if (r0 == 1) {
    0x0000cdde beq 0xce2e                                            |         goto label_24;
                                                                     |     }
    0x0000cde0 ldr.w sb, [pc, 0xe4]                                  |     sb = *(0x0000cec8);
    0x0000cde4 str r4, [r7, 0xc]                                     |     *((r7 + 0xc)) = r4;
    0x0000cde6 str r5, [r7, 4]                                       |     *((r7 + 4)) = r5;
    0x0000cde8 add sb, pc                                            |     sb += pc;
    0x0000cdea ldr r4, [r7, 0x24]                                    |     r4 = *((r7 + 0x24));
    0x0000cdec mov r5, sb                                            |     r5 = sb;
    0x0000cdee ldr.w sb, [r7, 8]                                     |     sb = *((r7 + 8));
    0x0000cdf2 b 0xcdfa                                              |     
                                                                     |     while (r3 == r0) {
    0x0000cdf4 ldr r2, [r5]                                          |         r2 = *(r5);
    0x0000cdf6 cmp r2, 4                                             |         
                                                                     |         if (r2 != 4) {
    0x0000cdf8 bne 0xce2e                                            |             goto label_24;
                                                                     |         }
    0x0000cdfa ldr.w r2, [fp, 0x10]                                  |         r2 = *(arg_10h);
    0x0000cdfe mov r1, sb                                            |         r1 = sb;
    0x0000ce00 mov r0, sl                                            |         r0 = sl;
    0x0000ce02 subs r2, 1                                            |         r2--;
    0x0000ce04 ands r2, r4                                           |         r2 &= r4;
    0x0000ce06 bl 0x14940                                            |         r0 = fcn_00014940 ();
    0x0000ce0a adds r3, r0, 1                                        |         r3 = r0 + 1;
    0x0000ce0c beq 0xcdf4                                            |         
                                                                     |     }
    0x0000ce0e cmp r0, 0                                             |     
    0x0000ce10 ldr r4, [r7, 0xc]                                     |     r4 = *((r7 + 0xc));
    0x0000ce12 ldr r5, [r7, 4]                                       |     r5 = *((r7 + 4));
                                                                     |     if (r0 >= 0) {
    0x0000ce14 blt 0xce2e                                            |         
    0x0000ce16 ldr.w sp, [r7, 0x10]                                  |         sp = *((r7 + 0x10));
    0x0000ce1a b 0xcb86                                              |         goto label_2;
                                                                     | label_7:
    0x0000ce1c movs r2, 0                                            |         r2 = 0;
    0x0000ce1e mov.w r1, -1                                          |         r1 = -1;
    0x0000ce22 mov r0, r2                                            |         r0 = r2;
    0x0000ce24 mov r4, r1                                            |         r4 = r1;
    0x0000ce26 b 0xca32                                              |         goto label_3;
                                                                     | label_11:
    0x0000ce28 ldr r4, [pc, 0xa0]                                    |         
    0x0000ce2a add r4, pc                                            |         r4 = 0x19cfa;
    0x0000ce2c b 0xcc64                                              |         goto label_4;
                                                                     |     }
                                                                     | label_24:
    0x0000ce2e ldr r4, [pc, 0xa0]                                    |     
    0x0000ce30 ldr.w sp, [r7, 0x10]                                  |     sp = *((r7 + 0x10));
    0x0000ce34 add r4, pc                                            |     r4 = 0x19d0a;
    0x0000ce36 b 0xcc64                                              |     goto label_4;
                                                                     | label_15:
    0x0000ce38 ldr r4, [pc, 0x98]                                    |     
    0x0000ce3a add r4, pc                                            |     r4 = 0x19d12;
    0x0000ce3c b 0xcc64                                              |     goto label_4;
                                                                     | label_23:
    0x0000ce3e cmp.w r5, 0x1000000                                   |     
    0x0000ce42 itete lo                                              |     
                                                                     |     if (r5 >= 0x1000000) {
    0x0000ce44 ldrlo r1, [r7, 0x14]                                  |         r1 = *((r7 + 0x14));
                                                                     |     }
                                                                     |     if (r5 < 0x1000000) {
    0x0000ce46 lsrhs r1, r4, 9                                       |         r1 = r4 >> 9;
                                                                     |     }
                                                                     |     if (r5 >= 0x1000000) {
    0x0000ce48 lsllo r0, r5, 8                                       |         r0 = r5 << 8;
                                                                     |     }
                                                                     |     if (r5 < 0x1000000) {
    0x0000ce4a movhs r0, r5                                          |         r0 = r5;
                                                                     |     }
    0x0000ce4c bl 0x16608                                            |     r0 = fcn_00016608 (r0, r1, r2);
    0x0000ce50 mov r1, r0                                            |     r1 = r0;
    0x0000ce52 mov.w r0, 0x1000000                                   |     r0 = 0x1000000;
    0x0000ce56 bl 0x16608                                            |     r0 = fcn_00016608 (r0, r1, r2);
    0x0000ce5a mov r3, r0                                            |     r3 = r0;
    0x0000ce5c b 0xcd90                                              |     goto label_5;
                                                                     | label_21:
    0x0000ce5e ldr r1, [r7, 0x24]                                    |     r1 = *((r7 + 0x24));
    0x0000ce60 mov r0, sb                                            |     r0 = sb;
    0x0000ce62 bl 0x14ae0                                            |     fcn_00014ae0 (r0);
    0x0000ce66 ldr r0, [pc, 0x70]                                    |     
    0x0000ce68 add r0, pc                                            |     r0 = 0x19d46;
    0x0000ce6a bl 0xc2a4                                             |     dl_fatal_printf ()
                                                                     | label_20:
    0x0000ce6e movs r0, 0x60                                         |     r0 = 0x60;
    0x0000ce70 str r3, [r5, 0x10]                                    |     *((r5 + 0x10)) = r3;
    0x0000ce72 mul r0, r3, r0                                        |     r0 = r3 * r0;
    0x0000ce76 lsls r3, r3, 3                                        |     r3 <<= 3;
    0x0000ce78 str r3, [r7, 0x1c]                                    |     var_1ch = r3;
    0x0000ce7a add.w r3, r0, 0x40                                    |     r3 = r0 + 0x40;
    0x0000ce7e b 0xca76                                              |     goto label_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/ld-linux-armhf.so.3 @ 0xd1e8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0000d1e8 ()                                  | void fcn_0000d1e8 () {
    0x0000d1e8 mul r5, r0, r5                                |     r5 = r0 * r5;
    0x0000d1ec cmp r5, 0                                     |     
                                                             |     if (r5 != 0) {
    0x0000d1ee beq 0xd2c6                                    |         
    0x0000d1f0 ldrd r1, r2, [r4, 0x230]                      |         __asm ("ldrd r1, r2, [r4, 0x230]");
    0x0000d1f4 mov r0, r5                                    |         r0 = r5;
    0x0000d1f6 blx 0x15f40                                   |         fcn_00015f40 (r0, r1);
    0x0000d1fa ldrd r3, r2, [r4, 0x234]                      |         __asm ("ldrd r3, r2, [r4, 0x234]");
    0x0000d1fe movs r1, 0                                    |         r1 = 0;
    0x0000d200 add r0, r3                                    |         r0 += r3;
    0x0000d202 subs r2, r2, r3                               |         r2 -= r3;
    0x0000d204 blx 0x15da0                                   |         fcn_00015da0 (r0, r1);
    0x0000d208 ldr r3, [r7]                                  |         r3 = *(r7);
    0x0000d20a str.w r5, [r6, r3, lsl 3]                     |         __asm ("str.w r5, [r6, r3, lsl 3]");
    0x0000d20e add.w r6, r6, r3, lsl 3                       |         r6 += (r3 << 3);
    0x0000d212 str.w r8, [r6, 4]                             |         __asm ("str.w r8, [r6, 4]");
    0x0000d216 cmp.w r8, 0                                   |         
                                                             |         if (r8 != 0) {
    0x0000d21a beq 0xd2b2                                    |             
    0x0000d21c ldr r0, [r7, 4]                               |             r0 = *((r7 + 4));
    0x0000d21e add r0, r5                                    |             r0 += r5;
    0x0000d220 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |             
                                                             |         }
    0x0000d2b2 ldr r3, [pc, 0x38]                            |         
    0x0000d2b4 movw r2, 0x382                                |         r2 = 0x382;
    0x0000d2b8 ldr r1, [pc, 0x34]                            |         
    0x0000d2ba ldr r0, [pc, 0x38]                            |         
    0x0000d2bc add r3, pc                                    |         r3 = 0x1a5ae;
    0x0000d2be add r1, pc                                    |         r1 = 0x1a5b2;
    0x0000d2c0 add r0, pc                                    |         r0 = 0x1a5ba;
    0x0000d2c2 bl 0x11f30                                    |         fcn_00011f30 (r0);
                                                             |     }
    0x0000d2c6 ldr r0, [pc, 0x30]                            |     
    0x0000d2c8 add r0, pc                                    |     r0 = 0x1a5c6;
    0x0000d2ca bl 0xc2a4                                     |     dl_fatal_printf ()
    0x0000d2ce nop                                           |     
    0x0000d2d0 stc2 p0, c0, [r4, -4]                         |     __asm ("stc2 p0, c0, [r4, -4]");
    0x0000d2d4 stc2l p0, c0, [r4, 4]!                        |     __asm ("stc2l p0, c0, [r4, 4]!");
    0x0000d2d8 ldc2 p0, c0, [ip, 4]!                         |     __asm ("ldc2 p0, c0, [ip, 4]!");
    0x0000d2dc ldc2 p0, c0, [r6], {1}                        |     __asm ("ldc2 p0, c0, [r6], {1}");
    0x0000d2e0 ldc2l p0, c0, [ip], -4                        |     __asm ("ldc2l p0, c0, [ip], -4");
    0x0000d2e4 mrrc2 p0, 0, r0, lr, c1                       |     __asm ("mrrc2 p0, 0, r0, lr, c1");
    0x0000d2e8 stc2l p0, c0, [r0], -4                        |     __asm ("stc2l p0, c0, [r0], -4");
    0x0000d2ec ldm r2, {r2, r6, r7}                          |     r2 = *(r2);
                                                             |     r6 = *((r2 + 4));
                                                             |     r7 = *((r2 + 8));
    0x0000d2ee movs r0, r0                                   |     
    0x0000d2f0 ldm r0!, {r1, r3, r6}                         |     r1 = *(r0!);
                                                             |     r3 = *((r0! + 4));
                                                             |     r6 = *((r0! + 8));
    0x0000d2f2 movs r0, r0                                   |     
    0x0000d2f4 ldm r0!, {r2, r4, r6}                         |     r2 = *(r0!);
                                                             |     r4 = *((r0! + 4));
                                                             |     r6 = *((r0! + 8));
    0x0000d2f6 movs r0, r0                                   |     
    0x0000d2f8 ldm r0!, {r2, r5, r6}                         |     r2 = *(r0!);
                                                             |     r5 = *((r0! + 4));
                                                             |     r6 = *((r0! + 8));
    0x0000d2fa movs r0, 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/ld-linux-armhf.so.3 @ 0xd2fc */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000d2fc ()                          | void fcn_0000d2fc (uint32_t arg1, int16_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0000d2fc ldr r2, [pc, 0x64]                    |     
    0x0000d2fe push {r3, r4, r5, r6, r7, lr}         |     
    0x0000d300 mov r4, r1                            |     r4 = r1;
    0x0000d302 adds r1, 0x10                         |     r1 += 0x10;
    0x0000d304 ldr r6, [r0, -0x8]                    |     r6 = *((r0 - 0x8));
    0x0000d308 add r2, pc                            |     r2 = 0x1a670;
    0x0000d30a lsls r1, r1, 3                        |     r1 <<= 3;
    0x0000d30c ldr.w r7, [r2, 0x894]                 |     r7 = *(0x1af04);
    0x0000d310 add.w r5, r4, 0xe                     |     r5 = r4 + 0xe;
    0x0000d314 cmp r7, r0                            |     
                                                     |     if (r7 == r0) {
    0x0000d316 beq 0xd33e                            |         goto label_0;
                                                     |     }
    0x0000d318 ldr r2, [pc, 0x4c]                    |     
    0x0000d31a subs r0, 8                            |     r0 -= 8;
    0x0000d31c add r2, pc                            |     r2 = 0x1a688;
    0x0000d31e ldr r3, [r2]                          |     r3 = *(0x1a688);
    0x0000d320 blx r3                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0000d322 mov r4, r0                            |     r4 = r0;
                                                     |     if (r0 == 0) {
    0x0000d324 cbz r0, 0xd35c                        |         goto label_1;
                                                     |     }
    0x0000d326 adds r7, r6, 2                        |     r7 = r6 + 2;
    0x0000d328 lsls r7, r7, 3                        |     r7 <<= 3;
                                                     |     do {
    0x0000d32a subs r2, r5, r6                       |         r2 = r5 - r6;
    0x0000d32c str r5, [r4]                          |         *(r4) = r5;
    0x0000d32e lsls r2, r2, 3                        |         r2 <<= 3;
    0x0000d330 movs r1, 0                            |         r1 = 0;
    0x0000d332 adds r0, r4, r7                       |         r0 = r4 + r7;
    0x0000d334 blx 0x15da0                           |         fcn_00015da0 (r0, r1);
    0x0000d338 add.w r0, r4, 8                       |         r0 = r4 + 8;
    0x0000d33c pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_0:
    0x0000d33e ldr r3, [pc, 0x2c]                    |         
    0x0000d340 mov r0, r1                            |         r0 = r1;
    0x0000d342 add r3, pc                            |         
    0x0000d344 ldr r3, [r3]                          |         r3 = "Operation not permitted";
    0x0000d346 blx r3                                |         r0 = uint32_t (*r3)(uint32_t, char*) (r0, "Operation not permitted");
    0x0000d348 mov r4, r0                            |         r4 = r0;
                                                     |         if (r0 == 0) {
    0x0000d34a cbz r0, 0xd35c                        |             goto label_1;
                                                     |         }
    0x0000d34c sub.w r1, r7, 8                       |         r1 = r7 - 8;
    0x0000d350 adds r7, r6, 2                        |         r7 = r6 + 2;
    0x0000d352 lsls r7, r7, 3                        |         r7 <<= 3;
    0x0000d354 mov r2, r7                            |         r2 = r7;
    0x0000d356 blx 0x15f40                           |         fcn_00015f40 (r0, r1);
    0x0000d35a b 0xd32a                              |         
                                                     |     } while (1);
                                                     | label_1:
    0x0000d35c ldr r0, [pc, 0x10]                    |     
    0x0000d35e add r0, pc                            |     r0 = 0x1a6d2;
    0x0000d360 bl 0xc2a4                             |     dl_fatal_printf ()
    0x0000d364 stc2 p0, c0, [r4, -4]                 |     __asm ("stc2 p0, c0, [r4, -4]");
    0x0000d368 smlal r0, r0, r8, r1                  |     __asm ("smlal r0, r0, r8, r1");
    0x0000d36c 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/ld-linux-armhf.so.3 @ 0xfb40 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0000fb40 ()                                      | void fcn_0000fb40 (int16_t arg_18h, int16_t arg_28h, int16_t arg_40h, int16_t arg_58h, int16_t arg_60h, int16_t arg_70h, int16_t arg_98h, int16_t arg_188h, int16_t arg_1b0h, int16_t arg_1d0h, int16_t arg_1e0h, int16_t arg_208h, int16_t arg_250h, int16_t arg_268h, int16_t arg_2a0h, int16_t arg_2a8h, int16_t arg_308h, int16_t arg_338h, int16_t arg_390h, int16_t arg_398h, int16_t arg_3c0h, int16_t arg1) {
                                                                 |     r0 = arg1;
                                                                 | label_10:
    0x0000eefa ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0000eefc str.w sp, [r7, 0x18]                              |     __asm ("str.w sp, [r7, 0x18]");
    0x0000ef00 str.w fp, [r3]                                    |     __asm ("str.w fp, [r3]");
    0x0000ef04 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0000ef06 ldrd r3, sb, [r3]                                 |     __asm ("ldrd r3, sb, [r3]");
    0x0000ef0a add.w r1, sb, 7                                   |     r1 = sb + 7;
    0x0000ef0e lsl.w r2, sb, 2                                   |     r2 = sb << 2;
    0x0000ef12 bic r1, r1, 7                                     |     r1 = BIT_MASK (r1, 7);
    0x0000ef16 sub.w sp, sp, r1                                  |     
    0x0000ef1a adds r2, 7                                        |     r2 += 7;
    0x0000ef1c mov r8, sp                                        |     r8 = sp;
    0x0000ef1e bic r2, r2, 7                                     |     r2 = BIT_MASK (r2, 7);
    0x0000ef22 sub.w sp, sp, r1                                  |     
    0x0000ef26 mov r4, sp                                        |     r4 = sp;
    0x0000ef28 sub.w sp, sp, r2                                  |     
    0x0000ef2c mov r2, sp                                        |     r2 = sp;
    0x0000ef2e str r2, [r7, 0x28]                                |     *((r7 + 0x28)) = r2;
    0x0000ef30 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000ef32 beq.w 0xf742                                      |         goto label_57;
                                                                 |     }
    0x0000ef36 subs r1, r2, 4                                    |     r1 = r2 - 4;
    0x0000ef38 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x0000ef3a str.w r2, [r3, 0x214]                             |         __asm ("str.w r2, [r3, 0x214]");
    0x0000ef3e adds r2, 1                                        |         r2++;
    0x0000ef40 str r3, [r1, 4]!                                  |         *((r1 += 4)) = r3;
    0x0000ef44 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0000ef46 cmp r3, 0                                         |         
    0x0000ef48 bne 0xef3a                                        |         
                                                                 |     } while (r3 != 0);
                                                                 | label_28:
    0x0000ef4a cmp sb, r2                                        |     
                                                                 |     if (sb != r2) {
    0x0000ef4c bne.w 0xf9ce                                      |         goto label_58;
                                                                 |     }
    0x0000ef50 movs r1, 0                                        |     r1 = 0;
    0x0000ef52 mov r2, sb                                        |     r2 = sb;
    0x0000ef54 mov r0, r8                                        |     r0 = r8;
    0x0000ef56 blx 0x15da0                                       |     fcn_00015da0 (r0, r1);
    0x0000ef5a mov r2, sb                                        |     r2 = sb;
    0x0000ef5c movs r1, 0                                        |     r1 = 0;
    0x0000ef5e mov r0, r4                                        |     r0 = r4;
    0x0000ef60 blx 0x15da0                                       |     fcn_00015da0 (r0, r1);
    0x0000ef64 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0000ef68 beq.w 0xf8be                                      |         goto label_59;
                                                                 |     }
    0x0000ef6c ldr.w lr, [r7, 0x28]                              |     
    0x0000ef70 movs r2, 0                                        |     r2 = 0;
    0x0000ef72 mov.w ip, -1                                      |     
    0x0000ef76 str.w sl, [r7, 0x5c]                              |     __asm ("str.w sl, [r7, 0x5c]");
    0x0000ef7a b 0xef8a                                          |     goto label_4;
                                                                 | label_0:
    0x0000ef7c ldr.w r0, [r5, 0x1fc]                             |     r0 = *((r5 + 0x1fc));
    0x0000ef80 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000ef82 bne 0xf020                                        |         goto label_60;
                                                                 |     }
                                                                 |     do {
                                                                 | label_3:
    0x0000ef84 adds r2, 1                                        |         r2++;
    0x0000ef86 cmp r2, sb                                        |         
                                                                 |         if (r2 >= sb) {
    0x0000ef88 bhs 0xf06e                                        |             goto label_61;
                                                                 |         }
                                                                 | label_4:
    0x0000ef8a ldrb r3, [r4, r2]                                 |         r3 = *((r4 + r2));
    0x0000ef8c ldr.w r5, [lr, r2, lsl 2]                         |         offset_0 = r2 << 2;
                                                                 |         r5 = *((lr + offset_0));
    0x0000ef90 cmp r3, 0                                         |         
    0x0000ef92 bne 0xef84                                        |         
                                                                 |     } while (r3 != 0);
    0x0000ef94 ldrb.w r3, [r5, 0x198]                            |     r3 = *((r5 + 0x198));
    0x0000ef98 and r3, r3, 3                                     |     r3 &= 3;
    0x0000ef9c cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0000ef9e beq.w 0xf2e0                                      |         goto label_62;
                                                                 |     }
                                                                 | label_11:
    0x0000efa2 strb.w fp, [r8, r2]                               |     *((r8 + r2)) = fp;
    0x0000efa6 ldr.w r1, [r5, 0x1f8]                             |     r1 = *((r5 + 0x1f8));
    0x0000efaa strb.w fp, [r4, r2]                               |     *((r4 + r2)) = fp;
    0x0000efae str.w ip, [r5, 0x214]                             |     __asm ("str.w ip, [r5, 0x214]");
    0x0000efb2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000efb4 beq 0xef7c                                        |         goto label_0;
                                                                 |     }
    0x0000efb6 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0000efb8 adds r1, 4                                        |     r1 += 4;
                                                                 |     if (r3 != 0) {
    0x0000efba cbnz r3, 0xefe2                                   |         goto label_63;
                                                                 |     }
    0x0000efbc b 0xef7c                                          |     goto label_0;
                                                                 | label_2:
    0x0000efbe cmp r3, sb                                        |     
                                                                 |     if (r3 >= sb) {
    0x0000efc0 bhs 0xefee                                        |         goto label_64;
                                                                 |     }
    0x0000efc2 ldrb.w r0, [r8, r3]                               |     r0 = *((r8 + r3));
                                                                 |     if (r0 == 0) {
    0x0000efc6 cbnz r0, 0xefda                                   |         
    0x0000efc8 strb.w fp, [r8, r3]                               |         *((r8 + r3)) = fp;
    0x0000efcc ldr r3, [r1]                                      |         r3 = *(r1);
    0x0000efce ldr.w r3, [r3, 0x214]                             |         r3 = *((r3 + 0x214));
    0x0000efd2 cmp r3, r2                                        |         
    0x0000efd4 it le                                             |         
                                                                 |         if (r3 <= r2) {
    0x0000efd6 addle r2, r3, -1                                  |             r2 = r3 + -1;
                                                                 |             goto label_1;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x0000efda ldr r3, [r1, 4]!                                  |     r3 = *((r1 += 4));
    0x0000efde cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000efe0 beq 0xef7c                                        |         goto label_0;
                                                                 |     }
                                                                 | label_63:
    0x0000efe2 ldr.w r3, [r3, 0x214]                             |     r3 = *((r3 + 0x214));
    0x0000efe6 adds r6, r3, 1                                    |     r6 = r3 + 1;
                                                                 |     if (r6 == r3) {
    0x0000efe8 beq 0xefda                                        |         goto label_1;
                                                                 |     }
    0x0000efea cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x0000efec bge 0xefbe                                        |         goto label_2;
                                                                 |     }
                                                                 | label_64:
    0x0000efee ldr.w r3, [pc, 0xa20]                             |     
    0x0000eff2 movs r2, 0xe2                                     |     r2 = 0xe2;
    0x0000eff4 ldr.w r1, [pc, 0xa1c]                             |     r1 = *(0x0000fa14);
    0x0000eff8 ldr.w r0, [pc, 0xa1c]                             |     
    0x0000effc add r3, pc                                        |     r3 = 0x1ea12;
    0x0000effe add r1, pc                                        |     r1 += pc;
    0x0000f000 add r0, pc                                        |     r0 = 0x1ea1c;
    0x0000f002 bl 0x11f30                                        |     fcn_00011f30 (r0);
    0x0000f006 ldr r1, [r7, 0x14]                                |     r1 = *((r7 + 0x14));
    0x0000f008 str r3, [r1]                                      |     *(r1) = r3;
    0x0000f00a ldr.w r3, [pc, 0xa10]                             |     r3 = *(0x0000fa1c);
    0x0000f00e add r3, pc                                        |     r3 += pc;
    0x0000f010 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f012 lsls r3, r3, 0x19                                 |     r3 <<= 0x19;
                                                                 |     if (r3 < r3) {
    0x0000f014 bmi.w 0xf724                                      |         goto label_65;
                                                                 |     }
                                                                 | label_27:
    0x0000f018 adds r7, 0x64                                     |     r7 += 0x64;
    0x0000f01a mov sp, r7                                        |     
    0x0000f01c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_60:
    0x0000f020 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0000f022 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f024 beq 0xef84                                        |         goto label_3;
                                                                 |     }
    0x0000f026 movs r1, 0                                        |     r1 = 0;
    0x0000f028 mov sl, r4                                        |     sl = r4;
                                                                 |     do {
    0x0000f02a add.w r3, r0, r1, lsl 2                           |         r3 = r0 + (r1 << 2);
    0x0000f02e ldr r6, [r3, 4]                                   |         r6 = *((r3 + 4));
    0x0000f030 ldr.w r3, [r6, 0x214]                             |         r3 = *((r6 + 0x214));
    0x0000f034 adds r4, r3, 1                                    |         r4 = r3 + 1;
                                                                 |         if (r4 != r3) {
    0x0000f036 beq 0xf05e                                        |             
    0x0000f038 cmp r3, 0                                         |             
                                                                 |             if (r3 < 0) {
    0x0000f03a blt.w 0xf730                                      |                 goto label_66;
                                                                 |             }
    0x0000f03e cmp r3, sb                                        |             
                                                                 |             if (r3 >= sb) {
    0x0000f040 bhs.w 0xf730                                      |                 goto label_66;
                                                                 |             }
    0x0000f044 ldrb.w r4, [r8, r3]                               |             r4 = *((r8 + r3));
                                                                 |             if (r4 != 0) {
    0x0000f048 cbnz r4, 0xf05e                                   |                 goto label_67;
                                                                 |             }
    0x0000f04a strb.w fp, [r8, r3]                               |             *((r8 + r3)) = fp;
    0x0000f04e ldr.w r3, [r6, 0x214]                             |             r3 = *((r6 + 0x214));
    0x0000f050 adds r2, 0x14                                     |             r2 += 0x14;
    0x0000f052 ldr.w r0, [r5, 0x1fc]                             |             r0 = *((r5 + 0x1fc));
    0x0000f056 cmp r3, r2                                        |             
    0x0000f058 it le                                             |             
                                                                 |             if (r3 <= r2) {
    0x0000f05a addle r2, r3, -1                                  |                 r2 = r3 + -1;
                                                                 |                 goto label_67;
                                                                 |             }
                                                                 |         }
                                                                 | label_67:
    0x0000f05e ldr r3, [r0]                                      |         r3 = *(r0);
    0x0000f060 adds r1, 1                                        |         r1++;
    0x0000f062 cmp r3, r1                                        |         
    0x0000f064 bhi 0xf02a                                        |         
                                                                 |     } while (r3 > r1);
    0x0000f066 adds r2, 1                                        |     r2++;
    0x0000f068 mov r4, sl                                        |     r4 = sl;
    0x0000f06a cmp r2, sb                                        |     
                                                                 |     if (r2 <= sb) {
    0x0000f06c blo 0xef8a                                        |         goto label_4;
                                                                 |     }
                                                                 | label_61:
    0x0000f06e ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x0000f070 movs r3, 1                                        |     r3 = 1;
    0x0000f072 ldr r0, [r7, 0x28]                                |     r0 = *((r7 + 0x28));
    0x0000f074 ldr r4, [r7, 0x10]                                |     r4 = *((r7 + 0x10));
    0x0000f076 add.w r2, r8, r1                                  |     r2 = r8 + r1;
    0x0000f07a sub.w r1, sb, r1                                  |     r1 = sb - r1;
    0x0000f07e ldr.w sl, [r7, 0x5c]                              |     sl = *((r7 + 0x5c));
    0x0000f082 add r0, r4                                        |     r0 += r4;
    0x0000f084 bl 0xff98                                         |     fcn_0000ff98 (r0, r1, r2, r3);
    0x0000f088 ldr.w r3, [pc, 0x994]                             |     r3 = *(0x0000fa20);
    0x0000f08c add r3, pc                                        |     r3 += pc;
    0x0000f08e ldr.w r3, [r3, 0x1dc]                             |     r3 = *((r3 + 0x1dc));
    0x0000f092 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f094 beq.w 0xf400                                      |         goto label_68;
                                                                 |     }
    0x0000f098 ldr.w r3, [pc, 0x988]                             |     r3 = *(0x0000fa24);
    0x0000f09c ldr r2, [r7, 0x3c]                                |     r2 = *((r7 + 0x3c));
    0x0000f09e add r3, pc                                        |     r3 += pc;
    0x0000f0a0 ldr r3, [r3, r2]                                  |     r3 = *((r3 + r2));
    0x0000f0a2 ldrb.w r3, [r3, 0x199]                            |     r3 = *((r3 + 0x199));
    0x0000f0a6 eor r3, r3, 8                                     |     r3 ^= 8;
    0x0000f0aa ubfx r3, r3, 3, 1                                 |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x0000f0ae str r3, [r7, 0x48]                                |     *((r7 + 0x48)) = r3;
                                                                 | label_19:
    0x0000f0b0 ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x0000f0b2 movs r6, 0                                        |     r6 = 0;
    0x0000f0b4 mov.w r2, -1                                      |     r2 = -1;
    0x0000f0b8 strd r6, sb, [r7, 0x50]                           |     __asm ("strd r6, sb, [r7, 0x50]");
    0x0000f0bc str r6, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r6;
    0x0000f0be subs r3, 4                                        |     r3 -= 4;
    0x0000f0c0 str r2, [r7, 0x58]                                |     *((r7 + 0x58)) = r2;
    0x0000f0c2 str r3, [r7, 0x5c]                                |     *((r7 + 0x5c)) = r3;
    0x0000f0c4 add.w r3, r8, -1                                  |     r3 = r8 + -1;
    0x0000f0c8 mov sb, r3                                        |     sb = r3;
    0x0000f0ca str r6, [r7, 0x24]                                |     *((r7 + 0x24)) = r6;
    0x0000f0cc str.w r8, [r7, 4]                                 |     __asm ("str.w r8, [r7, 4]");
    0x0000f0d0 b 0xf146                                          |     
                                                                 |     while (r2 == 0) {
    0x0000f0d2 cmp r1, 2                                         |         
                                                                 |         if (r1 != 2) {
    0x0000f0d4 bne.w 0xf8aa                                      |             goto label_69;
                                                                 |         }
    0x0000f0d8 ldrb.w r2, [r4, 0x19b]                            |         r2 = *((r4 + 0x19b));
    0x0000f0dc cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0000f0de bne.w 0xf8aa                                      |             goto label_69;
                                                                 |         }
    0x0000f0e2 lsls r2, r3, 0x1c                                 |         r2 = r3 << 0x1c;
                                                                 |         if (r2 < r3) {
    0x0000f0e4 bpl 0xf10c                                        |             
    0x0000f0e6 ldr.w r3, [pc, 0x940]                             |             r3 = *(0x0000fa28);
    0x0000f0ea add r3, pc                                        |             r3 += pc;
    0x0000f0ec ldr r3, [r3]                                      |             r3 = *(r3);
    0x0000f0ee lsls r3, r3, 0x1e                                 |             r3 <<= 0x1e;
                                                                 |             if (r3 < r3) {
    0x0000f0f0 bmi.w 0xf38e                                      |                 goto label_70;
                                                                 |             }
                                                                 | label_15:
    0x0000f0f4 ldr.w r3, [r4, 0x88]                              |             r3 = *((r4 + 0x88));
    0x0000f0f8 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0000f0fa beq.w 0xf30e                                      |                 goto label_71;
                                                                 |             }
                                                                 | label_12:
    0x0000f0fe ldr.w r1, [pc, 0x92c]                             |             r1 = *(0x0000fa2c);
    0x0000f102 mov r2, r4                                        |             r2 = r4;
    0x0000f104 movs r0, 0                                        |             r0 = 0;
    0x0000f106 add r1, pc                                        |             r1 += pc;
    0x0000f108 blx 0x9d0                                         |             fcn_000009d0 ();
                                                                 |         }
    0x0000f10c ldr r3, [r7, 0x48]                                |         r3 = *((r7 + 0x48));
    0x0000f10e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0000f110 bne.w 0xf31e                                      |             goto label_72;
                                                                 |         }
                                                                 | label_13:
    0x0000f114 ldrb.w r3, [r4, 0x199]                            |         r3 = *((r4 + 0x199));
    0x0000f118 orr r3, r3, 0x20                                  |         r3 |= 0x20;
    0x0000f11c strb.w r3, [r4, 0x199]                            |         *((r4 + 0x199)) = r3;
    0x0000f120 ldrb.w r3, [r4, 0x198]                            |         r3 = *((r4 + 0x198));
    0x0000f124 lsls r5, r3, 0x1b                                 |         r5 = r3 << 0x1b;
                                                                 |         if (r5 < r3) {
    0x0000f126 bpl 0xf12e                                        |             
    0x0000f128 ldr r3, [r7, 0x4c]                                |             r3 = *((r7 + 0x4c));
    0x0000f12a adds r3, 1                                        |             r3++;
    0x0000f12c str r3, [r7, 0x4c]                                |             *((r7 + 0x4c)) = r3;
                                                                 |         }
    0x0000f12e ldr r3, [r7, 0x58]                                |         r3 = *((r7 + 0x58));
    0x0000f130 cmp r3, r6                                        |         
    0x0000f132 it hs                                             |         
                                                                 |         if (r3 < r6) {
    0x0000f134 movhs r3, r6                                      |             r3 = r6;
                                                                 |         }
    0x0000f136 str r3, [r7, 0x58]                                |         *((r7 + 0x58)) = r3;
    0x0000f138 movs r3, 1                                        |         r3 = 1;
    0x0000f13a str r3, [r7, 0x50]                                |         *((r7 + 0x50)) = r3;
                                                                 | label_5:
    0x0000f13c ldr r3, [r7, 0x54]                                |         r3 = *((r7 + 0x54));
    0x0000f13e adds r6, 1                                        |         r6++;
    0x0000f140 cmp r3, r6                                        |         
                                                                 |         if (r3 < r6) {
    0x0000f142 bls.w 0xf2be                                      |             goto label_73;
                                                                 |         }
                                                                 | label_9:
    0x0000f146 ldr r3, [r7, 0x5c]                                |         r3 = *((r7 + 0x5c));
    0x0000f148 ldr r4, [r3, 4]!                                  |         r4 = *((r3 += 4));
    0x0000f14c str r3, [r7, 0x5c]                                |         *((r7 + 0x5c)) = r3;
    0x0000f14e ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
    0x0000f150 cmp r3, sl                                        |         
                                                                 |         if (r3 != sl) {
    0x0000f152 bne.w 0xf818                                      |             goto label_74;
                                                                 |         }
    0x0000f156 ldrb r2, [sb, 1]!                                 |         r2 = *((sb += 1));
    0x0000f15a ldrb.w r3, [r4, 0x198]                            |         r3 = *((r4 + 0x198));
    0x0000f15e and r1, r3, 3                                     |         r1 = r3 & 3;
    0x0000f162 cmp r2, 0                                         |         
    0x0000f164 beq 0xf0d2                                        |         
                                                                 |     }
    0x0000f166 cmp r1, 2                                         |     
                                                                 |     if (r1 != 2) {
    0x0000f168 bne 0xf13c                                        |         goto label_5;
                                                                 |     }
    0x0000f16a ldr.w r3, [r4, 0x160]                             |     r3 = *((r4 + 0x160));
    0x0000f16e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f170 beq.w 0xf39e                                      |         goto label_75;
                                                                 |     }
    0x0000f174 ldr.w r3, [r4, 0x1d4]                             |     r3 = *((r4 + 0x1d4));
    0x0000f178 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0000f17a str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x0000f17c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000f17e beq.w 0xf296                                      |         goto label_14;
                                                                 |     }
    0x0000f182 mov.w ip, 1                                       |     
    0x0000f186 movs r3, 0                                        |     r3 = 0;
    0x0000f188 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
                                                                 | label_16:
    0x0000f18a ldr r0, [r7, 0x40]                                |     r0 = *((r7 + 0x40));
    0x0000f18c add.w r5, r4, 0x168                               |     r5 = r4 + 0x168;
    0x0000f190 mov r1, r2                                        |     r1 = r2;
    0x0000f192 mov.w r8, 0                                       |     r8 = 0;
    0x0000f196 b 0xf1b8                                          |     
                                                                 |     while (r5 != r1) {
    0x0000f198 sub.w r1, r1, 0x160                               |         r1 -= 0x160;
    0x0000f19c ldr r3, [r1, 0x18]                                |         r3 = *((r1 + 0x18));
    0x0000f19e cmp r3, sl                                        |         
                                                                 |         if (r3 != sl) {
    0x0000f1a0 bne.w 0xf9f0                                      |             goto label_37;
                                                                 |         }
    0x0000f1a4 ldr.w r3, [r1, 0x214]                             |         r3 = *((r1 + 0x214));
    0x0000f1a8 adds r3, 1                                        |         r3++;
    0x0000f1aa it ne                                             |         
                                                                 |         if (r3 == 1) {
    0x0000f1ac movne r8, 1                                       |             r8 = 1;
                                                                 |         }
                                                                 |         if (r3 == 1) {
    0x0000f1b0 beq 0xf1bc                                        |             goto label_76;
                                                                 |         }
    0x0000f1b2 ldr r1, [r0, 4]!                                  |         r1 = *((r0 += 4));
                                                                 |         if (r1 == 0) {
    0x0000f1b6 cbz r1, 0xf1c8                                    |             goto label_77;
                                                                 |         }
                                                                 | label_6:
    0x0000f1b8 cmp r5, r1                                        |         
    0x0000f1ba bne 0xf198                                        |         
                                                                 |     }
                                                                 | label_76:
    0x0000f1bc ldr r1, [r0, 4]!                                  |     r1 = *((r0 += 4));
    0x0000f1c0 add.w ip, ip, 1                                   |     
    0x0000f1c4 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0000f1c6 bne 0xf1b8                                        |         goto label_6;
                                                                 |     }
                                                                 | label_77:
    0x0000f1c8 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0000f1cc beq.w 0xf380                                      |         goto label_78;
                                                                 |     }
    0x0000f1d0 ldr r0, [r7, 0x40]                                |     r0 = *((r7 + 0x40));
    0x0000f1d2 add.w r3, r4, 0x1c0                               |     r3 = r4 + 0x1c0;
    0x0000f1d6 mov r1, r3                                        |     r1 = r3;
    0x0000f1d8 cmp.w ip, 3                                       |     
    0x0000f1dc str r3, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r3;
    0x0000f1de ite hi                                            |     
                                                                 |     if (ip <= 3) {
    0x0000f1e0 movhi r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (ip > 3) {
    0x0000f1e2 movls r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0000f1e4 cmp r1, r0                                        |     
    0x0000f1e6 it eq                                             |     
                                                                 |     if (r1 != r0) {
    0x0000f1e8 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0000f1ea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f1ec bne.w 0xf3ba                                      |         goto label_79;
                                                                 |     }
    0x0000f1f0 ldr.w r2, [r4, 0x1d0]                             |     r2 = *((r4 + 0x1d0));
    0x0000f1f4 ldr.w r3, [pc, 0x838]                             |     r3 = *(0x0000fa30);
    0x0000f1f8 str r2, [r7, 0x20]                                |     *((r7 + 0x20)) = r2;
    0x0000f1fa add r3, pc                                        |     r3 += pc;
    0x0000f1fc lsls r0, r2, 2                                    |     r0 = r2 << 2;
    0x0000f1fe ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f200 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0000f202 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000f204 beq.w 0xf9e0                                      |         goto label_80;
                                                                 |     }
    0x0000f208 ldr.w r3, [r4, 0x1d4]                             |     r3 = *((r4 + 0x1d4));
    0x0000f20c ldr r2, [r3]                                      |     r2 = *(r3);
    0x0000f20e str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x0000f210 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000f212 beq.w 0xf720                                      |         goto label_81;
                                                                 |     }
                                                                 | label_17:
    0x0000f216 movs r3, 0                                        |     r3 = 0;
    0x0000f218 str.w sb, [r7, 0x1c]                              |     __asm ("str.w sb, [r7, 0x1c]");
    0x0000f21c ldr.w lr, [r7, 0x40]                              |     
    0x0000f220 mov sb, r8                                        |     sb = r8;
    0x0000f222 mov ip, r3                                        |     
    0x0000f224 mov r8, r4                                        |     r8 = r4;
    0x0000f226 ldr r4, [r7, 0x38]                                |     r4 = *((r7 + 0x38));
    0x0000f228 str r6, [r7, 0x38]                                |     *((r7 + 0x38)) = r6;
    0x0000f22a b 0xf23e                                          |     goto label_8;
                                                                 |     if (r4 == 0) {
                                                                 | label_7:
    0x0000f22c cbz r4, 0xf238                                    |         void (*0xf238)() ();
                                                                 |     }
                                                                 | label_8:
    0x0000f23e cmp r5, r2                                        |     
    0x0000f240 add.w r1, r0, ip                                  |     r1 = r0 + ip;
                                                                 |     if (r5 == r2) {
    0x0000f244 beq 0xf24e                                        |         goto label_82;
                                                                 |     }
    0x0000f246 ldr.w r6, [r2, 0xb4]                              |     r6 = *((r2 + 0xb4));
    0x0000f24a adds r6, 1                                        |     r6++;
                                                                 |     if (r6 != 1) {
    0x0000f24c bne 0xf22c                                        |         goto label_7;
                                                                 |     }
                                                                 | label_82:
    0x0000f24e str r2, [r1]                                      |     *(r1) = r2;
    0x0000f250 adds r3, 1                                        |     r3++;
    0x0000f252 ldr r2, [lr, 4]!                                  |     r2 = *((lr += 4));
    0x0000f256 lsl.w ip, r3, 2                                   |     
    0x0000f25a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000f25c bne 0xf23e                                        |         goto label_8;
                                                                 |     }
    0x0000f25e mov r4, r8                                        |     r4 = r8;
    0x0000f260 ldr r6, [r7, 0x38]                                |     r6 = *((r7 + 0x38));
    0x0000f262 mov r8, sb                                        |     r8 = sb;
    0x0000f264 ldr.w sb, [r7, 0x1c]                              |     sb = *((r7 + 0x1c));
    0x0000f268 add ip, r0                                        |     
                                                                 | label_26:
    0x0000f26a movs r3, 0                                        |     r3 = 0;
    0x0000f26c str.w r3, [ip]                                    |     __asm ("str.w r3, [ip]");
    0x0000f270 ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x0000f272 str.w r0, [r4, 0x1d4]                             |     __asm ("str.w r0, [r4, 0x1d4]");
    0x0000f276 ldr r0, [r7, 0x40]                                |     r0 = *((r7 + 0x40));
    0x0000f278 cmp r3, r0                                        |     
    0x0000f27a it eq                                             |     
                                                                 |     if (r3 == r0) {
    0x0000f27c streq r8, [r7, 0x24]                              |         *((r7 + 0x24)) = r8;
                                                                 |         goto label_83;
                                                                 |     }
                                                                 |     if (r3 == r0) {
                                                                 | label_83:
    0x0000f280 beq 0xf290                                        |         void (*0xf290)() ();
                                                                 |     }
                                                                 | label_14:
    0x0000f296 ldr.w r3, [r4, 0x170]                             |     r3 = *((r4 + 0x170));
                                                                 |     if (r3 != 0) {
    0x0000f29a cbz r3, 0xf2aa                                    |         
    0x0000f29c ldr.w r3, [r3, 0x214]                             |         r3 = *((r3 + 0x214));
    0x0000f2a0 adds r3, 1                                        |         r3++;
    0x0000f2a2 itt ne                                            |         
                                                                 |         if (r3 == 1) {
    0x0000f2a4 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r3 != 1) {
    0x0000f2a6 strne r3, [r4, 0x170]                             |             *((r4 + 0x170)) = r3;
                                                                 |             goto label_84;
                                                                 |         }
                                                                 |     }
                                                                 | label_84:
    0x0000f2aa ldr r3, [r7, 0x58]                                |     r3 = *((r7 + 0x58));
    0x0000f2ac cmp r3, r6                                        |     
    0x0000f2ae it hs                                             |     
                                                                 |     if (r3 < r6) {
    0x0000f2b0 movhs r3, r6                                      |         r3 = r6;
                                                                 |     }
    0x0000f2b2 adds r6, 1                                        |     r6++;
    0x0000f2b4 str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f2b6 ldr r3, [r7, 0x54]                                |     r3 = *((r7 + 0x54));
    0x0000f2b8 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x0000f2ba bhi.w 0xf146                                      |         goto label_9;
                                                                 |     }
                                                                 | label_73:
    0x0000f2be mov sb, r3                                        |     sb = r3;
    0x0000f2c0 ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f2c2 ldr.w r8, [r7, 4]                                 |     r8 = *((r7 + 4));
    0x0000f2c6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f2c8 bne.w 0xf404                                      |         goto label_85;
                                                                 |     }
                                                                 | label_21:
    0x0000f2cc ldr.w r3, [pc, 0x764]                             |     r3 = *(0x0000fa34);
    0x0000f2d0 add r3, pc                                        |     r3 += pc;
    0x0000f2d2 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0000f2d4 cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x0000f2d6 bne.w 0xf89e                                      |         goto label_86;
                                                                 |     }
    0x0000f2da ldr.w sp, [r7, 0x18]                              |     sp = *((r7 + 0x18));
    0x0000f2de b 0xeefa                                          |     goto label_10;
                                                                 | label_62:
    0x0000f2e0 ldr.w r3, [r5, 0x194]                             |     r3 = *((r5 + 0x194));
    0x0000f2e4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f2e6 bne.w 0xefa2                                      |         goto label_11;
                                                                 |     }
    0x0000f2ea ldrb.w r3, [r5, 0x19b]                            |     r3 = *((r5 + 0x19b));
    0x0000f2ee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f2f0 bne.w 0xefa2                                      |         goto label_11;
                                                                 |     }
    0x0000f2f4 ldr.w r3, [r5, 0x24c]                             |     r3 = *((r5 + 0x24c));
    0x0000f2f8 dmb ish                                           |     __asm ("dmb ish");
    0x0000f2fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f2fe bne.w 0xefa2                                      |         goto label_11;
                                                                 |     }
    0x0000f302 ldrb.w r3, [r8, r2]                               |     r3 = *((r8 + r2));
    0x0000f306 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f308 bne.w 0xefa2                                      |         goto label_11;
                                                                 |     }
    0x0000f30c b 0xef84                                          |     goto label_3;
                                                                 | label_71:
    0x0000f30e ldr r3, [r4, 0x54]                                |     r3 = *((r4 + 0x54));
    0x0000f310 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f312 bne.w 0xf0fe                                      |         goto label_12;
                                                                 |     }
    0x0000f316 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x0000f318 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f31a beq.w 0xf114                                      |         goto label_13;
                                                                 |     }
                                                                 | label_72:
    0x0000f31e ldr.w r2, [pc, 0x718]                             |     r2 = *(0x0000fa38);
    0x0000f322 add r2, pc                                        |     r2 += pc;
    0x0000f324 ldrd r5, r3, [r2, 0x1d8]                          |     __asm ("ldrd r5, r3, [r2, 0x1d8]");
    0x0000f328 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f32a beq.w 0xf114                                      |         goto label_13;
                                                                 |     }
    0x0000f32e ldr.w r3, [pc, 0x70c]                             |     r3 = *(0x0000fa3c);
    0x0000f332 mov.w r8, 0                                       |     r8 = 0;
    0x0000f336 str.w sb, [r7, 0x50]                              |     __asm ("str.w sb, [r7, 0x50]");
    0x0000f33a str.w sl, [r7, 0x40]                              |     __asm ("str.w sl, [r7, 0x40]");
    0x0000f33e mov sl, r2                                        |     sl = r2;
    0x0000f340 add r3, pc                                        |     r3 += pc;
    0x0000f342 str r6, [r7, 0x38]                                |     *((r7 + 0x38)) = r6;
    0x0000f344 add.w r1, r3, 0x7f8                               |     r1 = r3 + 0x7f8;
    0x0000f348 add.w r3, r4, 0x260                               |     r3 = r4 + 0x260;
    0x0000f34c mov sb, r1                                        |     sb = r1;
    0x0000f34e mov r6, r3                                        |     r6 = r3;
                                                                 |     do {
    0x0000f350 ldr r2, [r5, 0x1c]                                |         r2 = *((r5 + 0x1c));
                                                                 |         if (r2 != 0) {
    0x0000f352 cbz r2, 0xf360                                    |             
    0x0000f354 ldr r3, [r7, 0x44]                                |             r3 = *((r7 + 0x44));
    0x0000f356 cmp r4, r3                                        |             
    0x0000f358 ite ne                                            |             
                                                                 |             if (r4 == r3) {
    0x0000f35a movne r0, r6                                      |                 r0 = r6;
                                                                 |             }
                                                                 |             if (r4 != r3) {
    0x0000f35c moveq r0, sb                                      |                 r0 = sb;
                                                                 |             }
    0x0000f35e blx r2                                            |             uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
                                                                 |         }
    0x0000f360 ldr.w r2, [sl, 0x1dc]                             |         r2 = *((sl + 0x1dc));
    0x0000f364 add.w r8, r8, 1                                   |         r8++;
    0x0000f368 ldr r5, [r5, 0x20]                                |         r5 = *((r5 + 0x20));
    0x0000f36a add.w sb, sb, 8                                   |         sb += 8;
    0x0000f36e adds r6, 8                                        |         r6 += 8;
    0x0000f370 cmp r2, r8                                        |         
    0x0000f372 bhi 0xf350                                        |         
                                                                 |     } while (r2 > r8);
    0x0000f374 ldr.w sb, [r7, 0x50]                              |     sb = *((r7 + 0x50));
    0x0000f378 ldr.w sl, [r7, 0x40]                              |     sl = *((r7 + 0x40));
    0x0000f37c ldr r6, [r7, 0x38]                                |     r6 = *((r7 + 0x38));
    0x0000f37e b 0xf114                                          |     goto label_13;
                                                                 | label_78:
    0x0000f380 ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0000f382 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f384 beq 0xf296                                        |         goto label_14;
                                                                 |     }
                                                                 | label_18:
    0x0000f386 movs r3, 0                                        |     r3 = 0;
    0x0000f388 strd r3, r3, [r4, 0x160]                          |     __asm ("strd r3, r3, [r4, 0x160]");
    0x0000f38c b 0xf296                                          |     goto label_14;
                                                                 | label_70:
    0x0000f38e ldr.w r0, [pc, 0x6b0]                             |     r0 = *(0x0000fa40);
    0x0000f392 mov r2, sl                                        |     r2 = sl;
    0x0000f394 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0000f396 add r0, pc                                        |     r0 += pc;
    0x0000f398 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x0000f39c b 0xf0f4                                          |     goto label_15;
                                                                 | label_75:
    0x0000f39e ldr.w r3, [r4, 0x1f8]                             |     r3 = *((r4 + 0x1f8));
    0x0000f3a2 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
                                                                 |     if (r3 != 0) {
    0x0000f3a4 cbnz r3, 0xf3c2                                   |         goto label_87;
                                                                 |     }
    0x0000f3a6 ldr.w r3, [r4, 0x1d4]                             |     r3 = *((r4 + 0x1d4));
    0x0000f3aa mov.w ip, 1                                       |     
    0x0000f3ae ldr r2, [r3]                                      |     r2 = *(r3);
    0x0000f3b0 str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x0000f3b2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000f3b4 bne.w 0xf18a                                      |         goto label_16;
                                                                 |     }
    0x0000f3b8 b 0xf296                                          |     goto label_14;
                                                                 | label_79:
    0x0000f3ba movs r3, 4                                        |     r3 = 4;
    0x0000f3bc ldr r0, [r7, 0x2c]                                |     r0 = *((r7 + 0x2c));
    0x0000f3be str r3, [r7, 0x20]                                |     *((r7 + 0x20)) = r3;
    0x0000f3c0 b 0xf216                                          |     goto label_17;
                                                                 | label_87:
    0x0000f3c2 ldr r2, [r7, 0x38]                                |     r2 = *((r7 + 0x38));
    0x0000f3c4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0000f3c6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f3c8 beq.w 0xf812                                      |         goto label_88;
                                                                 |     }
    0x0000f3cc adds r2, 4                                        |     r2 += 4;
    0x0000f3ce movs r3, 1                                        |     r3 = 1;
                                                                 |     do {
    0x0000f3d0 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0000f3d4 mov r0, r3                                        |         r0 = r3;
    0x0000f3d6 adds r3, 1                                        |         r3++;
    0x0000f3d8 cmp r1, 0                                         |         
    0x0000f3da bne 0xf3d0                                        |         
                                                                 |     } while (r1 != 0);
    0x0000f3dc adds r2, r0, 2                                    |     r2 = r0 + 2;
    0x0000f3de lsls r2, r2, 2                                    |     r2 <<= 2;
                                                                 | label_32:
    0x0000f3e0 ldr r1, [r7, 0x38]                                |     r1 = *((r7 + 0x38));
    0x0000f3e2 add r1, r2                                        |     r1 += r2;
    0x0000f3e4 add.w r2, r4, 0x160                               |     r2 = r4 + 0x160;
    0x0000f3e8 strd r1, r3, [r4, 0x160]                          |     __asm ("strd r1, r3, [r4, 0x160]");
    0x0000f3ec ldr.w r3, [r4, 0x1d4]                             |     r3 = *((r4 + 0x1d4));
    0x0000f3f0 str r2, [r7, 0x38]                                |     *((r7 + 0x38)) = r2;
    0x0000f3f2 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0000f3f4 str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x0000f3f6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000f3f8 beq 0xf386                                        |         goto label_18;
                                                                 |     }
    0x0000f3fa mov.w ip, 2                                       |     
    0x0000f3fe b 0xf18a                                          |     goto label_16;
                                                                 | label_68:
    0x0000f400 str r3, [r7, 0x48]                                |     *((r7 + 0x48)) = r3;
    0x0000f402 b 0xf0b0                                          |     goto label_19;
                                                                 | label_85:
    0x0000f404 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x0000f406 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f408 bne.w 0xf904                                      |         goto label_89;
                                                                 |     }
                                                                 | label_35:
    0x0000f40c mov r1, sl                                        |     r1 = sl;
    0x0000f40e movs r0, 0                                        |     r0 = 0;
    0x0000f410 bl 0xbdf0                                         |     fcn_0000bdf0 (r0);
    0x0000f414 movs r3, 2                                        |     r3 = 2;
    0x0000f416 str r0, [r7, 0x40]                                |     *((r7 + 0x40)) = r0;
    0x0000f418 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x0000f41a bl 0xbdec                                         |     dl_debug_state ();
    0x0000f41e ldr r3, [r7, 0x4c]                                |     r3 = *((r7 + 0x4c));
    0x0000f420 mrc p15, 0, lr, c13, c0, 3                        |     __asm ("mrc p15, 0, lr, c13, c0, 3");
    0x0000f424 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f426 bne.w 0xf7b0                                      |         goto label_90;
                                                                 |     }
    0x0000f42a sub.w lr, lr, 0x540                               |     lr -= 0x540;
    0x0000f42e ldr.w r3, [lr]                                    |     r3 = *(lr);
                                                                 |     if (r3 != 0) {
    0x0000f432 cbz r3, 0xf45c                                    |         
    0x0000f434 ldr r3, [r7, 0x24]                                |         r3 = *((r7 + 0x24));
                                                                 |         if (r3 == 0) {
    0x0000f436 cbnz r3, 0xf448                                   |             
    0x0000f438 ldr.w r3, [pc, 0x608]                             |             r3 = *(0x0000fa44);
    0x0000f43c add r3, pc                                        |             r3 += pc;
    0x0000f43e ldr.w r3, [r3, 0x89c]                             |             r3 = *((r3 + 0x89c));
                                                                 |             if (r3 == 0) {
    0x0000f442 cbz r3, 0xf45c                                    |                 goto label_29;
                                                                 |             }
                                                                 | label_30:
    0x0000f444 ldr r3, [r3]                                      |             r3 = *(r3);
                                                                 |             if (r3 == 0) {
    0x0000f446 cbz r3, 0xf45c                                    |                 goto label_29;
                                                                 |             }
                                                                 |         }
    0x0000f448 bl 0x10308                                        |         fcn_00010308 (r0);
    0x0000f44c ldr.w r3, [pc, 0x5f8]                             |         r3 = *(0x0000fa48);
    0x0000f450 add r3, pc                                        |         r3 += pc;
    0x0000f452 ldr.w r4, [r3, 0x89c]                             |         r4 = *((r3 + 0x89c));
    0x0000f456 cmp r4, 0                                         |         
                                                                 |         if (r4 != 0) {
    0x0000f458 bne.w 0xf78e                                      |             goto label_91;
                                                                 |         }
                                                                 |     }
                                                                 | label_29:
    0x0000f45c ldr.w r4, [pc, 0x5ec]                             |     r4 = *(0x0000fa4c);
    0x0000f460 ldr.w r3, [pc, 0x5ec]                             |     r3 = *(0x0000fa50);
    0x0000f464 add r4, pc                                        |     r4 += pc;
    0x0000f466 addw r4, r4, 0x55c                                |     __asm ("addw r4, r4, 0x55c");
    0x0000f46a add r3, pc                                        |     r3 += pc;
    0x0000f46c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f46e mov r0, r4                                        |     r0 = r4;
    0x0000f470 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f472 ldr r3, [r7, 0x58]                                |     r3 = *((r7 + 0x58));
    0x0000f474 cmp r3, sb                                        |     
                                                                 |     if (r3 >= sb) {
    0x0000f476 bhs.w 0xf99e                                      |         goto label_92;
                                                                 |     }
    0x0000f47a ldr r2, [r7, 0x58]                                |     r2 = *((r7 + 0x58));
    0x0000f47c add.w r3, sb, -1                                  |     r3 = sb + -1;
    0x0000f480 ldr r1, [r7, 0x28]                                |     r1 = *((r7 + 0x28));
    0x0000f482 str.w sl, [r7, 0x38]                              |     __asm ("str.w sl, [r7, 0x38]");
    0x0000f486 subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x0000f488 add r6, r8                                        |     r6 += r8;
    0x0000f48a add.w r5, r1, r2, lsl 2                           |     r5 = r1 + (r2 << 2);
    0x0000f48e add.w r2, r8, r3                                  |     r2 = r8 + r3;
    0x0000f492 ldr.w r3, [pc, 0x5c0]                             |     r3 = *(0x0000fa54);
    0x0000f496 mov r8, r2                                        |     r8 = r2;
    0x0000f498 ldr r1, [r7, 0x3c]                                |     r1 = *((r7 + 0x3c));
    0x0000f49a add r3, pc                                        |     r3 += pc;
    0x0000f49c add r3, r1                                        |     r3 += r1;
    0x0000f49e str r3, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r3;
    0x0000f4a0 ldr.w r3, [pc, 0x5b4]                             |     r3 = *(0x0000fa58);
    0x0000f4a4 add r3, pc                                        |     r3 += pc;
    0x0000f4a6 str r3, [r7, 0x5c]                                |     *((r7 + 0x5c)) = r3;
    0x0000f4a8 movs r3, 0                                        |     r3 = 0;
    0x0000f4aa str r3, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r3;
    0x0000f4ac strd r3, r3, [r7, 0x54]                           |     __asm ("strd r3, r3, [r7, 0x54]");
                                                                 | label_20:
    0x0000f4b0 ldrb r2, [r6, 1]!                                 |     r2 = *((r6 += 1));
    0x0000f4b4 ldr r4, [r5], 4                                   |     r4 = *(r5);
                                                                 |     r5 += 4;
    0x0000f4b8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000f4ba bne.w 0xf60c                                      |         goto label_93;
                                                                 |     }
    0x0000f4be ldrb.w r3, [r4, 0x198]                            |     r3 = *((r4 + 0x198));
    0x0000f4c2 and r1, r3, 3                                     |     r1 = r3 & 3;
    0x0000f4c6 cmp r1, 2                                         |     
                                                                 |     if (r1 != 2) {
    0x0000f4c8 bne.w 0xf98a                                      |         goto label_94;
                                                                 |     }
    0x0000f4cc ldr.w r1, [r4, 0x238]                             |     r1 = *((r4 + 0x238));
    0x0000f4d0 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0000f4d2 bne.w 0xf6d6                                      |         goto label_95;
                                                                 |     }
                                                                 | label_25:
    0x0000f4d6 ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
                                                                 |     if (r3 != 0) {
    0x0000f4d8 cbz r3, 0xf504                                    |         
    0x0000f4da ldr.w r3, [pc, 0x580]                             |         r3 = *(0x0000fa5c);
    0x0000f4de ldr r0, [r7, 0x30]                                |         r0 = *((r7 + 0x30));
    0x0000f4e0 add r3, pc                                        |         r3 += pc;
    0x0000f4e2 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f4e4 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f4e6 ldr.w r2, [pc, 0x578]                             |         r2 = *(0x0000fa60);
    0x0000f4ea ldr r3, [r7, 0x3c]                                |         r3 = *((r7 + 0x3c));
    0x0000f4ec add r2, pc                                        |         r2 += pc;
    0x0000f4ee add r2, r3                                        |         r2 += r3;
    0x0000f4f0 ldr r3, [r2, 0x30]                                |         r3 = *((r2 + 0x30));
    0x0000f4f2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0000f4f4 bne.w 0xf694                                      |             goto label_96;
                                                                 |         }
                                                                 | label_23:
    0x0000f4f8 ldr.w r3, [pc, 0x568]                             |         r3 = *(0x0000fa64);
    0x0000f4fc ldr r0, [r7, 0x30]                                |         r0 = *((r7 + 0x30));
    0x0000f4fe add r3, pc                                        |         r3 += pc;
    0x0000f500 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f502 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x0000f504 mov r0, r4                                        |     r0 = r4;
    0x0000f506 bl 0x115a0                                        |     fcn_000115a0 (r0);
    0x0000f50a ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x0000f50c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000f50e beq.w 0xf67a                                      |         goto label_97;
                                                                 |     }
    0x0000f512 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x0000f514 str r2, [r1, 0xc]                                 |     *((r1 + 0xc)) = r2;
                                                                 | label_22:
    0x0000f516 ldr r3, [r7, 0x5c]                                |     r3 = *((r7 + 0x5c));
    0x0000f518 ldr r0, [r7, 0x3c]                                |     r0 = *((r7 + 0x3c));
    0x0000f51a adds r0, r3, r0                                   |     r0 = r3 + r0;
    0x0000f51c ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0000f51e subs r3, 1                                        |     r3--;
    0x0000f520 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
                                                                 |     if (r2 != 0) {
    0x0000f522 cbz r2, 0xf526                                    |         
    0x0000f524 str r1, [r2, 0x10]                                |         *((r2 + 0x10)) = r1;
                                                                 |     }
    0x0000f526 ldr.w sb, [pc, 0x540]                             |     sb = *(0x0000fa68);
    0x0000f52a ldr.w r0, [r4, 0x174]                             |     r0 = *((r4 + 0x174));
    0x0000f52e add sb, pc                                        |     sb += pc;
    0x0000f530 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x0000f534 blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0000f536 ldr.w r0, [r4, 0x1b0]                             |     r0 = *((r4 + 0x1b0));
    0x0000f53a adds r3, r0, 1                                    |     r3 = r0 + 1;
                                                                 |     if (r3 != r0) {
    0x0000f53c beq 0xf544                                        |         
    0x0000f53e ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x0000f542 blx r3                                            |         uint32_t (*r3)(uint32_t) (r3);
                                                                 |     }
    0x0000f544 ldr.w r3, [pc, 0x524]                             |     r3 = *(0x0000fa6c);
    0x0000f548 ldr.w r0, [r4, 0x1fc]                             |     r0 = *((r4 + 0x1fc));
    0x0000f54c add r3, pc                                        |     r3 += pc;
    0x0000f54e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f550 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f552 ldr.w r3, [pc, 0x51c]                             |     r3 = *(0x0000fa70);
    0x0000f556 add r3, pc                                        |     r3 += pc;
    0x0000f558 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f55a lsls r1, r3, 0x19                                 |     r1 = r3 << 0x19;
                                                                 |     if (r1 < r3) {
    0x0000f55c bmi.w 0xf6c8                                      |         goto label_98;
                                                                 |     }
                                                                 | label_24:
    0x0000f560 ldr.w r3, [pc, 0x510]                             |     r3 = *(0x0000fa74);
    0x0000f564 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0000f566 ldr.w sb, [pc, 0x510]                             |     sb = *(0x0000fa78);
    0x0000f56a add r3, pc                                        |     r3 += pc;
    0x0000f56c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f56e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f570 ldr.w sl, [r4, 0x1c]                              |     sl = *((r4 + 0x1c));
    0x0000f574 mov r3, r4                                        |     r3 = r4;
    0x0000f576 add sb, pc                                        |     sb += pc;
    0x0000f578 mov r4, sl                                        |     r4 = sl;
    0x0000f57a mov sl, r3                                        |     sl = r3;
                                                                 |     do {
    0x0000f57c mov r0, r4                                        |         r0 = r4;
    0x0000f57e ldr r4, [r4, 4]                                   |         r4 = *((r4 + 4));
    0x0000f580 ldr r3, [r0, 8]                                   |         r3 = *((r0 + 8));
                                                                 |         if (r3 == 0) {
    0x0000f582 cbnz r3, 0xf58a                                   |             
    0x0000f584 ldr.w r3, [sb]                                    |             r3 = *(sb);
    0x0000f588 blx r3                                            |             uint32_t (*r3)(uint32_t) (r3);
                                                                 |         }
    0x0000f58a cmp r4, 0                                         |         
    0x0000f58c bne 0xf57c                                        |         
                                                                 |     } while (r4 != 0);
    0x0000f58e mov r4, sl                                        |     r4 = sl;
    0x0000f590 ldr.w sl, [pc, 0x4e8]                             |     sl = *(0x0000fa7c);
    0x0000f594 ldr.w r0, [r4, 0x1f8]                             |     r0 = *((r4 + 0x1f8));
    0x0000f598 add sl, pc                                        |     sl += pc;
    0x0000f59a ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x0000f59e blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
    0x0000f5a0 ldr.w r0, [r4, 0x1d4]                             |     r0 = *((r4 + 0x1d4));
    0x0000f5a4 add.w r2, r4, 0x1c0                               |     r2 = r4 + 0x1c0;
    0x0000f5a8 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x0000f5aa beq 0xf5b2                                        |         
    0x0000f5ac ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0000f5b0 blx r3                                            |         uint32_t (*r3)(uint32_t) (r3);
                                                                 |     }
    0x0000f5b2 ldrsb.w r3, [r4, 0x198]                           |     r3 = *((r4 + 0x198));
    0x0000f5b6 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0000f5b8 bge 0xf5c8                                        |         
    0x0000f5ba ldr.w r3, [pc, 0x4c4]                             |         r3 = *(0x0000fa80);
    0x0000f5be ldr.w r0, [r4, 0x154]                             |         r0 = *((r4 + 0x154));
    0x0000f5c2 add r3, pc                                        |         r3 += pc;
    0x0000f5c4 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f5c6 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x0000f5c8 ldr.w r0, [r4, 0x1a0]                             |     r0 = *((r4 + 0x1a0));
    0x0000f5cc adds r2, r0, 1                                    |     r2 = r0 + 1;
                                                                 |     if (r2 != r0) {
    0x0000f5ce beq 0xf5da                                        |         
    0x0000f5d0 ldr.w r3, [pc, 0x4b0]                             |         r3 = *(0x0000fa84);
    0x0000f5d4 add r3, pc                                        |         r3 += pc;
    0x0000f5d6 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f5d8 blx r3                                            |         uint32_t (*r3)(uint32_t) (r3);
                                                                 |     }
    0x0000f5da ldr.w r0, [r4, 0x1f0]                             |     r0 = *((r4 + 0x1f0));
    0x0000f5de adds r3, r0, 1                                    |     r3 = r0 + 1;
                                                                 |     if (r3 != r0) {
    0x0000f5e0 beq 0xf5ec                                        |         
    0x0000f5e2 ldr.w r3, [pc, 0x4a4]                             |         r3 = *(0x0000fa88);
    0x0000f5e6 add r3, pc                                        |         r3 += pc;
    0x0000f5e8 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f5ea blx r3                                            |         uint32_t (*r3)(uint32_t) (r3);
                                                                 |     }
    0x0000f5ec ldr.w r3, [pc, 0x49c]                             |     r3 = *(0x0000fa8c);
    0x0000f5f0 mov r0, r4                                        |     r0 = r4;
    0x0000f5f2 add r3, pc                                        |     r3 += pc;
    0x0000f5f4 ldr.w r2, [r3, 0x580]                             |     r2 = *((r3 + 0x580));
    0x0000f5f8 cmp r2, r4                                        |     
                                                                 | label_55:
    0x0000f5fa itt eq                                            |     
                                                                 |     if (r2 != r4) {
    0x0000f5fc moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 != r4) {
    0x0000f5fe streq r2, [r3, 0x580]                             |         *((r3 + 0x580)) = r2;
                                                                 |     }
    0x0000f602 ldr.w r3, [pc, 0x48c]                             |     r3 = *(0x0000fa90);
    0x0000f606 add r3, pc                                        |     r3 += pc;
    0x0000f608 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f60a blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                 | label_93:
    0x0000f60c cmp r8, r6                                        |     
                                                                 |     if (r8 != r6) {
    0x0000f60e bne.w 0xf4b0                                      |         goto label_20;
                                                                 |     }
    0x0000f612 ldr.w r4, [pc, 0x480]                             |     r4 = *(0x0000fa94);
    0x0000f616 ldr.w r3, [pc, 0x480]                             |     r3 = *(0x0000fa98);
    0x0000f61a ldr.w sl, [r7, 0x38]                              |     sl = *((r7 + 0x38));
    0x0000f61e add r4, pc                                        |     r4 += pc;
    0x0000f620 add r3, pc                                        |     r3 += pc;
    0x0000f622 addw r0, r4, 0x55c                                |     __asm ("addw r0, r4, 0x55c");
    0x0000f626 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000f628 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f62a ldr r3, [r7, 0x58]                                |     r3 = *((r7 + 0x58));
                                                                 |     if (r3 != 0) {
    0x0000f62c cbz r3, 0xf64c                                    |         
    0x0000f62e ldr.w r3, [r4, 0x898]                             |         r3 = *((r4 + 0x898));
    0x0000f632 adds r3, 1                                        |         r3++;
                                                                 |         if (r3 == 1) {
    0x0000f634 beq.w 0xf896                                      |             goto label_99;
                                                                 |         }
    0x0000f638 ldr r2, [r7, 0x4c]                                |         r2 = *((r7 + 0x4c));
    0x0000f63a str.w r3, [r4, 0x898]                             |         __asm ("str.w r3, [r4, 0x898]");
    0x0000f63e ldr.w r3, [r4, 0x88c]                             |         r3 = *((r4 + 0x88c));
    0x0000f642 cmp r3, r2                                        |         
    0x0000f644 itt eq                                            |         
                                                                 |         if (r3 != r2) {
    0x0000f646 ldreq r3, [r7, 0x54]                              |             r3 = *((r7 + 0x54));
                                                                 |         }
                                                                 |         if (r3 == r2) {
    0x0000f648 streq r3, [r4, 0x88c]                             |             *((r4 + 0x88c)) = r3;
                                                                 |             goto label_36;
                                                                 |         }
                                                                 |     }
                                                                 | label_36:
    0x0000f64c ldr.w r1, [pc, 0x44c]                             |     r1 = *(0x0000fa9c);
    0x0000f650 ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
    0x0000f652 add r1, pc                                        |     r1 += pc;
    0x0000f654 ldr r6, [r1, r3]                                  |     r6 = *((r1 + r3));
    0x0000f656 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x0000f658 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000f65a bne.w 0xf82c                                      |         goto label_100;
                                                                 |     }
                                                                 | label_34:
    0x0000f65e ldr.w r3, [pc, 0x440]                             |     r3 = *(0x0000faa0);
    0x0000f662 ldr r2, [r7, 0x3c]                                |     r2 = *((r7 + 0x3c));
    0x0000f664 add r3, pc                                        |     r3 += pc;
    0x0000f666 ldr r3, [r3, r2]                                  |     r3 = *((r3 + r2));
    0x0000f668 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f66a beq.w 0xf8d4                                      |         goto label_101;
                                                                 |     }
                                                                 | label_33:
    0x0000f66e ldr r2, [r7, 0x40]                                |     r2 = *((r7 + 0x40));
    0x0000f670 movs r3, 0                                        |     r3 = 0;
    0x0000f672 str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
    0x0000f674 bl 0xbdec                                         |     dl_debug_state ();
    0x0000f678 b 0xf2cc                                          |     goto label_21;
                                                                 | label_97:
    0x0000f67a ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0000f67c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f67e beq.w 0xf9aa                                      |         goto label_102;
                                                                 |     }
    0x0000f682 ldr.w r3, [pc, 0x420]                             |     r3 = *(0x0000faa4);
    0x0000f686 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x0000f688 ldr r0, [r7, 0x3c]                                |     r0 = *((r7 + 0x3c));
    0x0000f68a add r3, pc                                        |     r3 += pc;
    0x0000f68c str r2, [r3, r0]                                  |     *((r3 + r0)) = r2;
    0x0000f68e ldr r3, [r7, 0x40]                                |     r3 = *((r7 + 0x40));
    0x0000f690 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0000f692 b 0xf516                                          |     goto label_22;
                                                                 | label_96:
    0x0000f694 ldr r1, [r2, 0x34]                                |     r1 = *((r2 + 0x34));
    0x0000f696 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000f698 beq.w 0xf4f8                                      |         goto label_23;
                                                                 |     }
    0x0000f69c ldr.w ip, [r7, 0x2c]                              |     ip = *((r7 + 0x2c));
    0x0000f6a0 add.w r1, r3, r1, lsl 4                           |     r1 = r3 + (r1 << 4);
    0x0000f6a4 movs r0, 0                                        |     r0 = 0;
                                                                 |     do {
    0x0000f6a6 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
                                                                 |         if (r2 != 0) {
    0x0000f6a8 cbz r2, 0xf6c0                                    |             
    0x0000f6aa ldr r2, [r3, 0xc]                                 |             r2 = *((r3 + 0xc));
    0x0000f6ac cmp r2, r4                                        |             
    0x0000f6ae itttt eq                                          |             
                                                                 |             if (r2 == r4) {
    0x0000f6b0 strdeq r0, r0, [r3]                               |                 __asm ("strdeq r0, r0, [r3]");
                                                                 |             }
                                                                 |             if (r2 != r4) {
    0x0000f6b4 ldreq r2, [ip, 0x38]                              |                 r2 = *((ip + 0x38));
                                                                 |             }
                                                                 |             if (r2 == r4) {
    0x0000f6b8 add.w r2, r2, -1                                  |                 r2 += -1;
                                                                 |             }
                                                                 |             if (r2 != r4) {
    0x0000f6bc str.w r2, [ip, 0x38]                              |                 __asm ("str.w r2, [ip, 0x38]");
                                                                 |                 goto label_103;
                                                                 |             }
                                                                 |         }
                                                                 | label_103:
    0x0000f6c0 adds r3, 0x10                                     |         r3 += 0x10;
    0x0000f6c2 cmp r1, r3                                        |         
    0x0000f6c4 bne 0xf6a6                                        |         
                                                                 |     } while (r1 != r3);
    0x0000f6c6 b 0xf4f8                                          |     goto label_23;
                                                                 | label_98:
    0x0000f6c8 ldr r0, [pc, 0x3dc]                               |     
    0x0000f6ca ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0000f6cc ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0000f6ce add r0, pc                                        |     r0 = 0x1f17a;
    0x0000f6d0 bl 0xc1f0                                         |     fcn_0000c1f0 ();
    0x0000f6d4 b 0xf560                                          |     goto label_24;
                                                                 | label_95:
    0x0000f6d6 ldr.w sb, [pc, 0x3d4]                             |     sb = *(0x0000faac);
    0x0000f6da add sb, pc                                        |     sb += pc;
    0x0000f6dc ldr.w r1, [sb, 0x884]                             |     r1 = *((sb + 0x884));
                                                                 |     if (r1 != 0) {
    0x0000f6e0 cbz r1, 0xf6f8                                    |         
    0x0000f6e2 ldr.w r0, [r4, 0x248]                             |         r0 = *((r4 + 0x248));
    0x0000f6e6 ubfx r3, r3, 3, 1                                 |         r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x0000f6ea bl 0xedcc                                         |         r0 = fcn_0000edcc (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x0000f6ee cbnz r0, 0xf6f8                                   |             goto label_104;
                                                                 |         }
    0x0000f6f0 ldr.w r3, [sb, 0x888]                             |         r3 = *((sb + 0x888));
    0x0000f6f4 str.w r3, [sb, 0x880]                             |         __asm ("str.w r3, [sb, 0x880]");
                                                                 |     }
                                                                 | label_104:
    0x0000f6f8 ldr.w r3, [r4, 0x244]                             |     r3 = *((r4 + 0x244));
    0x0000f6fc adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0000f6fe cmp r2, 1                                         |     
                                                                 |     if (r2 < 1) {
    0x0000f700 bls 0xf71a                                        |         goto label_105;
                                                                 |     }
    0x0000f702 ldr r2, [r7, 0x54]                                |     r2 = *((r7 + 0x54));
                                                                 |     if (r2 != 0) {
    0x0000f704 cbnz r2, 0xf746                                   |         goto label_106;
                                                                 |     }
    0x0000f706 ldr.w r2, [r4, 0x238]                             |     r2 = *((r4 + 0x238));
    0x0000f70a add r3, r2                                        |     r3 += r2;
    0x0000f70c str r3, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r3;
    0x0000f70e ldr.w r3, [r4, 0x240]                             |     r3 = *((r4 + 0x240));
    0x0000f712 str r3, [r7, 0x54]                                |     *((r7 + 0x54)) = r3;
    0x0000f714 ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f716 str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f718 b 0xf4d6                                          |     goto label_25;
                                                                 |     do {
                                                                 | label_105:
    0x0000f71a ldr r3, [r7, 0x50]                                |         r3 = *((r7 + 0x50));
    0x0000f71c str r3, [r7, 0x58]                                |         *((r7 + 0x58)) = r3;
    0x0000f71e b 0xf4d6                                          |         goto label_25;
                                                                 | label_81:
    0x0000f720 mov ip, r0                                        |         
    0x0000f722 b 0xf26a                                          |         goto label_26;
                                                                 | label_65:
    0x0000f724 ldr r1, [r0, 4]                                   |         r1 = *((r0 + 4));
    0x0000f726 ldr r0, [pc, 0x388]                               |         
    0x0000f728 add r0, pc                                        |         r0 = 0x1f1de;
    0x0000f72a bl 0xc1f0                                         |         fcn_0000c1f0 ();
    0x0000f72e b 0xf018                                          |         goto label_27;
                                                                 | label_66:
    0x0000f730 ldr r3, [pc, 0x380]                               |         
    0x0000f732 movs r2, 0xfb                                     |         r2 = 0xfb;
    0x0000f734 ldr r1, [pc, 0x380]                               |         
    0x0000f736 ldr r0, [pc, 0x384]                               |         
    0x0000f738 add r3, pc                                        |         r3 = 0x1f1f0;
    0x0000f73a add r1, pc                                        |         r1 = 0x1f1f6;
    0x0000f73c add r0, pc                                        |         r0 = 0x1f1fe;
    0x0000f73e bl 0x11f30                                        |         fcn_00011f30 (r0);
                                                                 | label_57:
    0x0000f742 mov r2, r3                                        |         r2 = r3;
    0x0000f744 b 0xef4a                                          |         goto label_28;
                                                                 | label_106:
    0x0000f746 invalid                                           |         
                                                                 | label_38:
    0x0000f748 movs r2, 0x38                                     |         r2 = 0x38;
    0x0000f74a ldr r1, [r7, 0x4c]                                |         r1 = *((r7 + 0x4c));
    0x0000f74c add r3, r2                                        |         r3 += r2;
    0x0000f74e ldr.w r2, [r4, 0x240]                             |         r2 = *((r4 + 0x240));
    0x0000f752 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0000f754 beq 0xf786                                        |             goto label_107;
                                                                 |         }
    0x0000f756 ldr r1, [r7, 0x54]                                |         r1 = *((r7 + 0x54));
    0x0000f758 cmp r3, r1                                        |         
                                                                 |         if (r3 == r1) {
    0x0000f75a beq.w 0xf982                                      |             goto label_108;
                                                                 |         }
    0x0000f75e ldr.w ip, [pc, 0x360]                             |         ip = *(0x0000fac0);
    0x0000f762 add ip, pc                                        |         
    0x0000f764 ldr.w r0, [ip, 0x88c]                             |         r0 = *((ip + 0x88c));
    0x0000f768 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0000f76a beq.w 0xf978                                      |             goto label_109;
                                                                 |         }
    0x0000f76e ldr r1, [r7, 0x4c]                                |         r1 = *((r7 + 0x4c));
    0x0000f770 cmp r0, r1                                        |         
                                                                 |         if (r0 == r1) {
    0x0000f772 beq.w 0xf9be                                      |             goto label_110;
                                                                 |         }
    0x0000f776 ldr r1, [r7, 0x4c]                                |         r1 = *((r7 + 0x4c));
    0x0000f778 cmp r2, r1                                        |         
    0x0000f77a bls 0xf71a                                        |         
                                                                 |     } while (r2 < r1);
    0x0000f77c str r3, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r3;
    0x0000f77e ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f780 str r2, [r7, 0x54]                                |     *((r7 + 0x54)) = r2;
    0x0000f782 str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f784 b 0xf4d6                                          |     goto label_25;
                                                                 | label_107:
    0x0000f786 str r3, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r3;
    0x0000f788 ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f78a str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f78c b 0xf4d6                                          |     goto label_25;
                                                                 | label_91:
    0x0000f78e ldr r3, [r4]                                      |     r3 = *(r4);
    0x0000f790 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000f792 beq.w 0xf45c                                      |         goto label_29;
                                                                 |     }
    0x0000f796 ldr r5, [pc, 0x32c]                               |     
    0x0000f798 add r5, pc                                        |     r5 = 0x1f262;
                                                                 |     do {
    0x0000f79a subs r3, 1                                        |         r3--;
    0x0000f79c str r3, [r4]                                      |         *(r4) = r3;
    0x0000f79e add.w r3, r4, r3, lsl 2                           |         r3 = r4 + (r3 << 2);
    0x0000f7a2 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0000f7a4 ldr r3, [r5]                                      |         r3 = *(r5);
    0x0000f7a6 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f7a8 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0000f7aa cmp r3, 0                                         |         
    0x0000f7ac bne 0xf79a                                        |         
                                                                 |     } while (r3 != 0);
    0x0000f7ae b 0xf45c                                          |     goto label_29;
                                                                 | label_90:
    0x0000f7b0 ldr r3, [pc, 0x314]                               |     
    0x0000f7b2 ldr r2, [r7, 0x3c]                                |     r2 = *((r7 + 0x3c));
    0x0000f7b4 add r3, pc                                        |     r3 = 0x1f280;
    0x0000f7b6 add r3, r2                                        |     r3 += r2;
    0x0000f7b8 ldr r6, [r3, 8]                                   |     r6 = *(0x1f288);
    0x0000f7ba ldr r3, [r6, 4]                                   |     r3 = *(0x1f28c);
                                                                 |     if (r3 == 0) {
    0x0000f7bc cbz r3, 0xf7e4                                    |         goto label_31;
                                                                 |     }
    0x0000f7be ldr r5, [r6]                                      |     r5 = *(r6);
    0x0000f7c0 mov r2, r3                                        |     r2 = r3;
    0x0000f7c2 add.w r1, r5, r3, lsl 2                           |     r1 = r5 + (r3 << 2);
    0x0000f7c6 b 0xf7cc                                          |     
                                                                 |     while (r0 != r0) {
                                                                 | label_56:
    0x0000f7c8 subs r2, 1                                        |         r2--;
                                                                 |         if (r2 == 1) {
    0x0000f7ca beq 0xf7e2                                        |             goto label_111;
                                                                 |         }
    0x0000f7cc ldr r0, [r1, -0x4]!                               |         r0 = *((r1 -= 0x4));
    0x0000f7d0 ldrb.w r0, [r0, 0x199]                            |         r0 = *((r0 + 0x199));
    0x0000f7d4 ands r0, r0, 0x20                                 |         r0 &= 0x20;
    0x0000f7d8 bne 0xf7c8                                        |         
                                                                 |     }
    0x0000f7da ldr r1, [r7, 0x4c]                                |     r1 = *((r7 + 0x4c));
    0x0000f7dc add r1, r2                                        |     r1 += r2;
    0x0000f7de cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x0000f7e0 bne 0xf7ec                                        |         
                                                                 | label_111:
    0x0000f7e2 mov r3, r2                                        |         r3 = r2;
                                                                 | label_31:
    0x0000f7e4 str r3, [r6, 4]                                   |         *((r6 + 4)) = r3;
    0x0000f7e6 sub.w r3, lr, 0x540                               |         r3 = lr - 0x540;
    0x0000f7ea b 0xf444                                          |         goto label_30;
                                                                 |     }
    0x0000f7ec mov r3, r0                                        |     r3 = r0;
    0x0000f7ee sub.w ip, r5, 4                                   |     
    0x0000f7f2 mov r1, r0                                        |     r1 = r0;
                                                                 |     do {
    0x0000f7f4 ldr r0, [ip, 4]!                                  |         r0 = *((ip += 4));
    0x0000f7f8 ldrb.w r4, [r0, 0x199]                            |         r4 = *((r0 + 0x199));
    0x0000f7fc lsls r4, r4, 0x1a                                 |         r4 <<= 0x1a;
                                                                 |         if (r4 >= r4) {
    0x0000f7fe bmi 0xf80a                                        |             
    0x0000f800 cmp r3, r1                                        |             
    0x0000f802 it ne                                             |             
                                                                 |             if (r3 == r1) {
    0x0000f804 strne r0, [r5, r3, lsl 2]                         |                 offset_1 = r3 << 2;
                                                                 |                 *((r5 + offset_1)) = r0;
                                                                 |             }
    0x0000f808 adds r3, 1                                        |             r3++;
                                                                 |         }
    0x0000f80a adds r1, 1                                        |         r1++;
    0x0000f80c cmp r1, r2                                        |         
    0x0000f80e bne 0xf7f4                                        |         
                                                                 |     } while (r1 != r2);
    0x0000f810 b 0xf7e4                                          |     goto label_31;
                                                                 | label_88:
    0x0000f812 movs r2, 8                                        |     r2 = 8;
    0x0000f814 movs r3, 1                                        |     r3 = 1;
    0x0000f816 b 0xf3e0                                          |     goto label_32;
                                                                 | label_74:
    0x0000f818 ldr r3, [pc, 0x2b0]                               |     
    0x0000f81a movw r2, 0x119                                    |     r2 = 0x119;
    0x0000f81e ldr r1, [pc, 0x2b0]                               |     
    0x0000f820 ldr r0, [pc, 0x2b0]                               |     
    0x0000f822 add r3, pc                                        |     r3 = 0x1f2f2;
    0x0000f824 add r1, pc                                        |     r1 = 0x1f2fa;
    0x0000f826 add r0, pc                                        |     r0 = 0x1f2fe;
    0x0000f828 bl 0x11f30                                        |     fcn_00011f30 (r0);
                                                                 | label_100:
    0x0000f82c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0000f82e beq 0xf8d4                                        |         goto label_101;
                                                                 |     }
    0x0000f830 ldrb.w r3, [r6, 0x199]                            |     r3 = *((r6 + 0x199));
    0x0000f834 ands r3, r3, 8                                    |     r3 &= 8;
                                                                 |     if (r3 != r3) {
    0x0000f838 bne.w 0xf66e                                      |         goto label_33;
                                                                 |     }
    0x0000f83c ldr r5, [pc, 0x298]                               |     
    0x0000f83e add r5, pc                                        |     r5 = 0x1f31a;
    0x0000f840 ldrd r8, r2, [r5, 0x1d8]                          |     __asm ("ldrd r8, r2, [r5, 0x1d8]");
    0x0000f844 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000f846 beq.w 0xf66e                                      |         goto label_33;
                                                                 |     }
    0x0000f84a mov r2, r3                                        |     r2 = r3;
    0x0000f84c ldr r3, [pc, 0x28c]                               |     
    0x0000f84e add.w r4, r6, 0x260                               |     r4 = r6 + 0x260;
    0x0000f852 str.w sl, [r7, 0x58]                              |     __asm ("str.w sl, [r7, 0x58]");
    0x0000f856 add.w sb, r1, 0x7f8                               |     sb = r1 + 0x7f8;
    0x0000f85a mov sl, r5                                        |     sl = r5;
    0x0000f85c add r3, pc                                        |     
    0x0000f85e mov r5, r4                                        |     r5 = r4;
    0x0000f860 mov r4, r2                                        |     r4 = r2;
    0x0000f862 add.w r3, r3, 0x598                               |     r3 = 0x1f8d4;
    0x0000f866 str r3, [r7, 0x5c]                                |     *((r7 + 0x5c)) = r3;
                                                                 |     do {
    0x0000f868 ldr.w r3, [r8]                                    |         r3 = *(r8);
                                                                 |         if (r3 != 0) {
    0x0000f86c cbz r3, 0xf87c                                    |             
    0x0000f86e ldr r2, [r7, 0x5c]                                |             r2 = *((r7 + 0x5c));
    0x0000f870 movs r1, 0                                        |             r1 = 0;
    0x0000f872 cmp r6, r2                                        |             
    0x0000f874 ite ne                                            |             
                                                                 |             if (r6 == r2) {
    0x0000f876 movne r0, r5                                      |                 r0 = r5;
                                                                 |             }
                                                                 |             if (r6 != r2) {
    0x0000f878 moveq r0, sb                                      |                 r0 = sb;
                                                                 |             }
    0x0000f87a blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |         }
    0x0000f87c ldr.w r3, [sl, 0x1dc]                             |         r3 = *((sl + 0x1dc));
    0x0000f880 adds r4, 1                                        |         r4++;
    0x0000f882 ldr.w r8, [r8, 0x20]                              |         r8 = *((r8 + 0x20));
    0x0000f886 add.w sb, sb, 8                                   |         sb += 8;
    0x0000f88a adds r5, 8                                        |         r5 += 8;
    0x0000f88c cmp r3, r4                                        |         
    0x0000f88e bhi 0xf868                                        |         
                                                                 |     } while (r3 > r4);
    0x0000f890 ldr.w sl, [r7, 0x58]                              |     sl = *((r7 + 0x58));
    0x0000f894 b 0xf65e                                          |     goto label_34;
                                                                 | label_99:
    0x0000f896 ldr r0, [pc, 0x248]                               |     
    0x0000f898 add r0, pc                                        |     r0 = 0x1f37e;
    0x0000f89a bl 0xc2a4                                         |     dl_fatal_printf ()
    0x0000f89c invalid                                           |     
                                                                 | label_86:
    0x0000f89e movs r2, 0                                        |     r2 = 0;
    0x0000f8a0 str r2, [r3]                                      |     *(r3) = r2;
    0x0000f8a2 ldr.w sp, [r7, 0x18]                              |     sp = *((r7 + 0x18));
    0x0000f8a6 b.w 0xf018                                        |     goto label_27;
                                                                 | label_69:
    0x0000f8aa ldr r3, [pc, 0x238]                               |     
    0x0000f8ac movw r2, 0x11d                                    |     r2 = 0x11d;
    0x0000f8b0 ldr r1, [pc, 0x234]                               |     
    0x0000f8b2 ldr r0, [pc, 0x238]                               |     
    0x0000f8b4 add r3, pc                                        |     r3 = 0x1f39e;
    0x0000f8b6 add r1, pc                                        |     r1 = 0x1f3a2;
    0x0000f8b8 add r0, pc                                        |     r0 = 0x1f3aa;
    0x0000f8ba bl 0x11f30                                        |     fcn_00011f30 (r0);
                                                                 | label_59:
    0x0000f8be ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x0000f8c0 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x0000f8c2 ldr r0, [r7, 0x28]                                |     r0 = *((r7 + 0x28));
    0x0000f8c4 add.w r2, r8, r1                                  |     r2 = r8 + r1;
    0x0000f8c8 rsbs r1, r1, 0                                    |     r1 -= ;
    0x0000f8ca add r0, r3                                        |     r0 += r3;
    0x0000f8cc movs r3, 1                                        |     r3 = 1;
    0x0000f8ce bl 0xff98                                         |     fcn_0000ff98 (r0, r1, r2, r3);
    0x0000f8d2 b 0xf2cc                                          |     goto label_21;
                                                                 | label_101:
    0x0000f8d4 ldr r3, [pc, 0x218]                               |     
    0x0000f8d6 add r3, pc                                        |     r3 = 0x1f3ca;
    0x0000f8d8 ldr.w r2, [r3, 0x540]                             |     r2 = *(0x1f90a);
    0x0000f8da movs r5, 0x40                                     |     r5 = 0x40;
    0x0000f8dc subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x0000f8de cmp r1, sl                                        |     
                                                                 |     if (r1 != sl) {
    0x0000f8e0 bne.w 0xf66e                                      |         goto label_33;
                                                                 |     }
    0x0000f8e4 movs r1, 0x54                                     |     r1 = 0x54;
    0x0000f8e6 mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
    0x0000f8ea mov r2, sl                                        |     r2 = sl;
                                                                 |     do {
    0x0000f8ec ldr r0, [r3, -0xa8]                               |         r0 = *((r3 - 0xa8));
    0x0000f8f0 mov r1, r2                                        |         r1 = r2;
    0x0000f8f2 subs r3, 0x54                                     |         r3 -= 0x54;
    0x0000f8f4 subs r2, 1                                        |         r2--;
    0x0000f8f6 cmp r0, 0                                         |         
    0x0000f8f8 beq 0xf8ec                                        |         
                                                                 |     } while (r0 == 0);
    0x0000f8fa ldr r3, [pc, 0x1f8]                               |     
    0x0000f8fc add r3, pc                                        |     r3 = 0x1f3f6;
    0x0000f8fe str.w r1, [r3, 0x540]                             |     __asm ("str.w r1, [r3, 0x540]");
    0x0000f902 b 0xf66e                                          |     goto label_33;
                                                                 | label_89:
    0x0000f904 ldr r1, [pc, 0x1f0]                               |     
    0x0000f906 ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
    0x0000f908 add r1, pc                                        |     r1 = 0x1f404;
    0x0000f90a ldr r6, [r1, r3]                                  |     r6 = *(0x1f404);
    0x0000f90c ldrb.w r3, [r6, 0x199]                            |     r3 = *((r6 + 0x199));
    0x0000f910 ands r3, r3, 8                                    |     r3 &= 8;
                                                                 |     if (r3 != r3) {
    0x0000f914 bne.w 0xf40c                                      |         goto label_35;
                                                                 |     }
    0x0000f918 ldr r4, [pc, 0x1e0]                               |     
    0x0000f91a add r4, pc                                        |     r4 = 0x1f41a;
    0x0000f91c ldr.w r2, [r4, 0x1dc]                             |     r2 = *(0x1f5f6);
    0x0000f920 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000f922 beq.w 0xf40c                                      |         goto label_35;
                                                                 |     }
    0x0000f926 add.w r2, r1, 0x7f8                               |     r2 = r1 + 0x7f8;
    0x0000f92a str r3, [r7, 0x54]                                |     *((r7 + 0x54)) = r3;
    0x0000f92c str r2, [r7, 0x5c]                                |     *((r7 + 0x5c)) = r2;
    0x0000f92e add.w r5, r6, 0x260                               |     r5 = r6 + 0x260;
    0x0000f932 ldr r3, [pc, 0x1cc]                               |     
    0x0000f934 ldr.w r2, [r4, 0x1d8]                             |     r2 = *((r4 + 0x1d8));
    0x0000f938 str.w r8, [r7, 0x38]                              |     __asm ("str.w r8, [r7, 0x38]");
    0x0000f93c mov r8, r4                                        |     r8 = r4;
    0x0000f93e add r3, pc                                        |     
    0x0000f940 mov r4, r2                                        |     r4 = r2;
    0x0000f942 add.w r3, r3, 0x598                               |     r3 = 0x1f9dc;
    0x0000f946 str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
                                                                 |     do {
    0x0000f948 ldr r3, [r4]                                      |         r3 = *(r4);
                                                                 |         if (r3 != 0) {
    0x0000f94a cbz r3, 0xf95a                                    |             
    0x0000f94c ldr r0, [r7, 0x5c]                                |             r0 = *((r7 + 0x5c));
    0x0000f94e movs r1, 2                                        |             r1 = 2;
    0x0000f950 ldr r2, [r7, 0x40]                                |             r2 = *((r7 + 0x40));
    0x0000f952 cmp r6, r2                                        |             
    0x0000f954 it ne                                             |             
                                                                 |             if (r6 == r2) {
    0x0000f956 movne r0, r5                                      |                 r0 = r5;
                                                                 |             }
    0x0000f958 blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |         }
    0x0000f95a ldr r3, [r7, 0x5c]                                |         r3 = *((r7 + 0x5c));
    0x0000f95c adds r5, 8                                        |         r5 += 8;
    0x0000f95e ldr r2, [r7, 0x54]                                |         r2 = *((r7 + 0x54));
    0x0000f960 ldr r4, [r4, 0x20]                                |         r4 = *((r4 + 0x20));
    0x0000f962 adds r3, 8                                        |         r3 += 8;
    0x0000f964 str r3, [r7, 0x5c]                                |         *((r7 + 0x5c)) = r3;
    0x0000f966 adds r2, 1                                        |         r2++;
    0x0000f968 ldr.w r3, [r8, 0x1dc]                             |         r3 = *((r8 + 0x1dc));
    0x0000f96c str r2, [r7, 0x54]                                |         *((r7 + 0x54)) = r2;
    0x0000f96e cmp r3, r2                                        |         
    0x0000f970 bhi 0xf948                                        |         
                                                                 |     } while (r3 > r2);
    0x0000f972 ldr.w r8, [r7, 0x38]                              |     r8 = *((r7 + 0x38));
    0x0000f976 b 0xf40c                                          |     goto label_35;
                                                                 | label_109:
    0x0000f978 ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f97a str.w r2, [ip, 0x88c]                             |     __asm ("str.w r2, [ip, 0x88c]");
    0x0000f97e str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f980 b 0xf4d6                                          |     goto label_25;
                                                                 | label_108:
    0x0000f982 ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0000f984 str r2, [r7, 0x54]                                |     *((r7 + 0x54)) = r2;
    0x0000f986 str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0000f988 b 0xf4d6                                          |     goto label_25;
                                                                 | label_94:
    0x0000f98a ldr r3, [pc, 0x178]                               |     
    0x0000f98c movw r2, 0x232                                    |     r2 = 0x232;
    0x0000f990 ldr r1, [pc, 0x174]                               |     
    0x0000f992 ldr r0, [pc, 0x178]                               |     r0 = *(0xfb0e);
    0x0000f994 add r3, pc                                        |     r3 = 0x1f49e;
    0x0000f996 add r1, pc                                        |     r1 = 0x1f4a2;
                                                                 | label_44:
    0x0000f998 add r0, pc                                        |     r0 += pc;
    0x0000f99a bl 0x11f30                                        |     fcn_00011f30 (r0);
                                                                 | label_92:
    0x0000f99e ldr r3, [pc, 0x170]                               |     r3 = *(0xfb12);
                                                                 | label_41:
    0x0000f9a0 mov r0, r4                                        |     r0 = r4;
    0x0000f9a2 add r3, pc                                        |     r3 += pc;
                                                                 |     do {
    0x0000f9a4 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000f9a6 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f9a8 b 0xf64c                                          |         goto label_36;
                                                                 | label_102:
    0x0000f9aa ldr r3, [pc, 0x168]                               |         r3 = *(0xfb16);
                                                                 | label_50:
    0x0000f9ac movw r2, 0x2c5                                    |         r2 = 0x2c5;
    0x0000f9b0 ldr r1, [pc, 0x164]                               |         
    0x0000f9b2 ldr r0, [pc, 0x168]                               |         
    0x0000f9b4 add r3, pc                                        |         r3 += pc;
    0x0000f9b6 add r1, pc                                        |         r1 = 0x1f4d2;
    0x0000f9b8 add r0, pc                                        |         r0 = 0x1f4da;
    0x0000f9ba bl 0x11f30                                        |         fcn_00011f30 (r0);
                                                                 | label_110:
    0x0000f9be ldr r1, [r7, 0x54]                                |         r1 = *((r7 + 0x54));
    0x0000f9c0 str r3, [r7, 0x4c]                                |         *((r7 + 0x4c)) = r3;
    0x0000f9c2 ldr r3, [r7, 0x50]                                |         r3 = *((r7 + 0x50));
                                                                 | label_40:
    0x0000f9c4 str.w r1, [ip, 0x88c]                             |         __asm ("str.w r1, [ip, 0x88c]");
    0x0000f9c8 str r2, [r7, 0x54]                                |         *((r7 + 0x54)) = r2;
    0x0000f9ca str r3, [r7, 0x58]                                |         *((r7 + 0x58)) = r3;
    0x0000f9cc b 0xf4d6                                          |         goto label_25;
                                                                 | label_58:
    0x0000f9ce ldr r3, [pc, 0x150]                               |         r3 = *(0xfb22);
                                                                 | label_43:
    0x0000f9d0 movs r2, 0xb8                                     |         r2 = 0xb8;
    0x0000f9d2 ldr r1, [pc, 0x150]                               |         
    0x0000f9d4 ldr r0, [pc, 0x150]                               |         
    0x0000f9d6 add r3, pc                                        |         r3 += pc;
    0x0000f9d8 add r1, pc                                        |         r1 = 0x1f502;
    0x0000f9da add r0, pc                                        |         r0 = 0x1f506;
    0x0000f9dc bl 0x11f30                                        |         fcn_00011f30 (r0);
                                                                 | label_80:
    0x0000f9e0 ldr r3, [pc, 0x148]                               |         r3 = *(0xfb2c);
    0x0000f9e2 mov r2, r0                                        |         r2 = r0;
    0x0000f9e4 ldr r1, [pc, 0x148]                               |         r1 = *(0xfb30);
    0x0000f9e6 movs r0, 0xc                                      |         r0 = 0xc;
                                                                 | label_39:
    0x0000f9e8 add r3, pc                                        |         r3 += pc;
    0x0000f9ea add r1, pc                                        |         r1 += pc;
    0x0000f9ec blx 0x9f4                                         |         fcn_000009f4 ();
                                                                 | label_37:
    0x0000f9f0 ldr r3, [pc, 0x140]                               |         r3 = *(0xfb34);
    0x0000f9f2 invalid                                           |         
                                                                 | label_49:
    0x0000f9f4 asrs r7, r6, 9                                    |         r7 = r6 >> 9;
    0x0000f9f6 ldr r1, [pc, 0x140]                               |         
    0x0000f9f8 ldr r0, [pc, 0x140]                               |         
    0x0000f9fa add r3, pc                                        |         r3 += pc;
    0x0000f9fc add r1, pc                                        |         r1 = 0x1f53a;
    0x0000f9fe add r0, pc                                        |         r0 = 0x1f53e;
    0x0000fa00 bl 0x11f30                                        |         fcn_00011f30 (r0);
    0x0000fa04 invalid                                           |         
                                                                 |         if (r6 == 0) {
                                                                 | label_48:
    0x0000fa14 cbz r6, 0xfa3e                                    |             goto label_112;
                                                                 |         }
    0x0000fa16 movs r0, r0                                       |         
                                                                 |         if (r4 == 0) {
                                                                 | label_51:
    0x0000fa18 cbz r4, 0xfa58                                    |             goto label_113;
                                                                 |         }
    0x0000fa1a movs r0, r0                                       |         
                                                                 |         if (r0 >= r0) {
    0x0000fa1c bhs 0xfa9c                                        |             goto label_114;
                                                                 |         }
    0x0000fa1e movs r1, r0                                       |         r1 = r0;
    0x0000fa20 bne 0xf9a4                                        |         
                                                                 |     } while (r1 != r0);
    0x0000fa22 movs r1, r0                                       |     r1 = r0;
    0x0000fa24 svc 0x6e                                          |     __asm ("svc 0x6e");
    0x0000fa26 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 != r0) {
    0x0000fa28 bne 0xfaf0                                        |         goto label_115;
                                                                 |     }
    0x0000fa2a movs r1, r0                                       |     r1 = r0;
    0x0000fa2c stc2 p15, c15, [r3], {0xff}                       |     __asm ("stc2 p15, c15, [r3], {0xff}");
                                                                 |     if (r1 > r0) {
    0x0000fa30 bgt 0xf9f0                                        |         goto label_37;
                                                                 |     }
    0x0000fa32 movs r1, r0                                       |     r1 = r0;
                                                                 | label_47:
    0x0000fa34 b 0xf748                                          |     goto label_38;
                                                                 | label_112:
    0x0000fa3e movs r1, r0                                       |     r1 = r0;
                                                                 | label_52:
    0x0000fa40 adr r3, 0x2f8                                     |     r3 = 0x2f8;
    0x0000fa42 movs r0, r0                                       |     
                                                                 |     if (r0 < r0) {
                                                                 | label_42:
    0x0000fa44 blt 0xf9e8                                        |         goto label_39;
                                                                 |     }
    0x0000fa46 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_45:
    0x0000fa48 blt 0xf9c4                                        |         goto label_40;
                                                                 |     }
    0x0000fa4a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa4c blt 0xf9a0                                        |         goto label_41;
                                                                 |     }
    0x0000fa4e movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 >= r0) {
    0x0000fa50 bge 0xfb50                                        |         goto label_116;
                                                                 |     }
    0x0000fa52 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa54 blt 0xfb3c                                        |         goto label_117;
                                                                 |     }
    0x0000fa56 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_113:
    0x0000fa58 blt 0xfb2c                                        |         goto label_118;
                                                                 |     }
    0x0000fa5a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 >= r0) {
    0x0000fa5c bge 0xfa70                                        |         goto label_119;
                                                                 |     }
    0x0000fa5e movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa60 blt 0xfaa4                                        |         goto label_120;
                                                                 |     }
    0x0000fa62 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa64 bls 0xfa44                                        |         goto label_42;
                                                                 |     }
    0x0000fa66 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa68 bls 0xf9d0                                        |         goto label_43;
                                                                 |     }
    0x0000fa6a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa6c bls 0xf998                                        |         goto label_44;
                                                                 |     }
    0x0000fa6e movs r1, r0                                       |     r1 = r0;
                                                                 | label_119:
    0x0000fa70 ldm r4, {r1, r2, r4, r5, r6, r7}                  |     r1 = *(r4);
                                                                 |     r2 = *((r4 + 4));
                                                                 |     r4 = *((r4 + 8));
                                                                 |     r5 = *((r4 + 12));
                                                                 |     r6 = *((r4 + 16));
                                                                 |     r7 = *((r4 + 20));
    0x0000fa72 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_46:
    0x0000fa74 bls 0xfb64                                        |         goto label_121;
                                                                 |     }
    0x0000fa76 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa78 bls 0xfb50                                        |         goto label_116;
                                                                 |     }
    0x0000fa7a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa7c bls 0xfb10                                        |         goto label_122;
                                                                 |     }
    0x0000fa7e movs r1, r0                                       |     r1 = r0;
                                                                 |     do {
                                                                 |         if (r1 < r0) {
    0x0000fa80 bls 0xfac0                                        |             goto label_123;
                                                                 |         }
    0x0000fa82 movs r1, r0                                       |         r1 = r0;
                                                                 |         if (r1 < r0) {
    0x0000fa84 bls 0xfaa0                                        |             goto label_53;
                                                                 |         }
    0x0000fa86 movs r1, r0                                       |         r1 = r0;
    0x0000fa88 bhi 0xfa80                                        |         
                                                                 |     } while (r1 > r0);
    0x0000fa8a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 >= r0) {
    0x0000fa8c bge 0xfac4                                        |         goto label_124;
                                                                 |     }
    0x0000fa8e movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 > r0) {
    0x0000fa90 bhi 0xfa48                                        |         goto label_45;
                                                                 |     }
    0x0000fa92 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000fa94 bls 0xfa74                                        |         goto label_46;
                                                                 |     }
    0x0000fa96 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 > r0) {
    0x0000fa98 bhi 0xfa34                                        |         goto label_47;
                                                                 |     }
    0x0000fa9a movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_114:
    0x0000fa9c bls 0xfa14                                        |         goto label_48;
                                                                 |     }
    0x0000fa9e movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_53:
    0x0000faa0 bls 0xf9f4                                        |         goto label_49;
                                                                 |     }
    0x0000faa2 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
                                                                 | label_120:
    0x0000faa4 bls 0xf9ac                                        |         goto label_50;
                                                                 |     }
    0x0000faa6 movs r1, r0                                       |     r1 = r0;
    0x0000faa8 add r4, sp, 0x58                                  |     r4 += arg_58h;
    0x0000faaa movs r0, r0                                       |     
                                                                 |     if (r0 < r0) {
    0x0000faac bls 0xfb14                                        |         goto label_125;
                                                                 |     }
    0x0000faae movs r1, r0                                       |     r1 = r0;
    0x0000fab0 add r2, sp, 0x250                                 |     r2 += arg_250h;
    0x0000fab2 movs r0, r0                                       |     
    0x0000fab4 add r4, sp, 0x1b0                                 |     r4 += arg_1b0h;
    0x0000fab6 movs r0, r0                                       |     
    0x0000fab8 add r2, sp, 0x188                                 |     r2 += arg_188h;
    0x0000faba movs r0, r0                                       |     
    0x0000fabc add r2, sp, 0x390                                 |     r2 += arg_390h;
    0x0000fabe movs r0, r0                                       |     
                                                                 |     if (r0 > r0) {
                                                                 | label_123:
    0x0000fac0 bhi 0xfa18                                        |         goto label_51;
                                                                 |     }
    0x0000fac2 movs r1, r0                                       |     r1 = r0;
                                                                 | label_124:
    0x0000fac4 bvc 0xfb58                                        |     __asm ("bvc 0xfb58");
    0x0000fac6 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 > r0) {
    0x0000fac8 bhi 0xfb7c                                        |         goto label_126;
                                                                 |     }
    0x0000faca movs r1, r0                                       |     r1 = r0;
    0x0000facc add r3, sp, 0x208                                 |     r3 += arg_208h;
    0x0000face movs r0, r0                                       |     
    0x0000fad0 add r1, sp, 0x1e0                                 |     r1 += arg_1e0h;
    0x0000fad2 movs r0, r0                                       |     
    0x0000fad4 add r2, sp, 0x98                                  |     r2 += arg_98h;
    0x0000fad6 movs r0, r0                                       |     
                                                                 | label_54:
    0x0000fad8 ldm r2, {r1, r2, r3}                              |     r1 = *(r2);
                                                                 |     r2 = *((r2 + 4));
                                                                 |     r3 = *((r2 + 8));
    0x0000fada movs r1, r0                                       |     r1 = r0;
    0x0000fadc bvc 0xfa40                                        |     __asm ("bvc 0xfa40");
                                                                 |     goto label_52;
    0x0000fade movs r1, r0                                       |     r1 = r0;
    0x0000fae0 add r2, sp, 0x1d0                                 |     r2 += arg_1d0h;
    0x0000fae2 movs r0, r0                                       |     
    0x0000fae4 add r2, sp, 0x3c0                                 |     r2 += arg_3c0h;
    0x0000fae6 movs r0, r0                                       |     
    0x0000fae8 add r0, sp, 0x398                                 |     r0 += arg_398h;
    0x0000faea movs r0, r0                                       |     
    0x0000faec add r1, sp, 0x2a0                                 |     r1 += arg_2a0h;
    0x0000faee movs r0, r0                                       |     
                                                                 | label_115:
    0x0000faf0 bvc 0xfb60                                        |     __asm ("bvc 0xfb60");
    0x0000faf2 movs r1, r0                                       |     r1 = r0;
    0x0000faf4 bvc 0xfb18                                        |     __asm ("bvc 0xfb18");
    0x0000faf6 movs r1, r0                                       |     r1 = r0;
    0x0000faf8 bvc 0xfb04                                        |     __asm ("bvc 0xfb04");
    0x0000fafa movs r1, r0                                       |     r1 = r0;
    0x0000fafc ldm r1, {r1, r4, r5}                              |     r1 = *(r1);
                                                                 |     r4 = *((r1 + 4));
                                                                 |     r5 = *((r1 + 8));
    0x0000fafe movs r1, r0                                       |     r1 = r0;
    0x0000fb00 bvs 0xfaa0                                        |     __asm ("bvs 0xfaa0");
                                                                 |     goto label_53;
    0x0000fb02 movs r1, r0                                       |     r1 = r0;
    0x0000fb04 add r2, sp, 0x40                                  |     r2 += arg_40h;
    0x0000fb06 movs r0, r0                                       |     
    0x0000fb08 add r0, sp, 0x18                                  |     r0 += arg_18h;
    0x0000fb0a movs r0, r0                                       |     
    0x0000fb0c add r1, sp, 0x70                                  |     r1 += arg_70h;
    0x0000fb0e movs r0, r0                                       |     
                                                                 |     if (r0 >= r0) {
                                                                 | label_122:
    0x0000fb10 bpl 0xfba8                                        |         goto label_127;
                                                                 |     }
    0x0000fb12 movs r1, r0                                       |     r1 = r0;
                                                                 | label_125:
    0x0000fb14 add r1, sp, 0x3c0                                 |     r1 += arg_3c0h;
    0x0000fb16 movs r0, r0                                       |     
    0x0000fb18 adr r7, 0x398                                     |     r7 = 0x398;
    0x0000fb1a movs r0, r0                                       |     
    0x0000fb1c add r1, sp, 0x60                                  |     r1 += arg_60h;
    0x0000fb1e movs r0, r0                                       |     
    0x0000fb20 add r1, sp, 0x338                                 |     r1 += arg_338h;
    0x0000fb22 movs r0, r0                                       |     
    0x0000fb24 adr r7, 0x310                                     |     r7 = 0x310;
    0x0000fb26 movs r0, r0                                       |     
                                                                 |     do {
    0x0000fb28 add r0, sp, 0x28                                  |         r0 += arg_28h;
    0x0000fb2a movs r0, r0                                       |         
                                                                 | label_118:
    0x0000fb2c adr r6, 0x1d0                                     |         r6 = 0x1d0;
    0x0000fb2e movs r0, r0                                       |         
    0x0000fb30 add r0, sp, 0x308                                 |         r0 += arg_308h;
    0x0000fb32 movs r0, r0                                       |         
    0x0000fb34 add r1, sp, 0x2a8                                 |         r1 += arg_2a8h;
    0x0000fb36 movs r0, r0                                       |         
    0x0000fb38 adr r7, 0x280                                     |         r7 = 0x280;
    0x0000fb3a movs r0, r0                                       |         
                                                                 | label_117:
    0x0000fb3c add r0, sp, 0x268                                 |         r0 += arg_268h;
    0x0000fb3e movs r0, r0                                       |         
    0x0000fb40 push {r4, r5, r6, lr}                             |         
    0x0000fb42 mov r5, r0                                        |         r5 = r0;
    0x0000fb44 ldr r4, [pc, 0x54]                                |         
    0x0000fb46 ldr r3, [pc, 0x58]                                |         
    0x0000fb48 add r4, pc                                        |         r4 = 0x1f6e8;
    0x0000fb4a addw r4, r4, 0x544                                |         __asm ("addw r4, r4, 0x544");
    0x0000fb4e add r3, pc                                        |         r3 = 0x1f6f4;
                                                                 | label_116:
    0x0000fb50 mov r0, r4                                        |         r0 = r4;
    0x0000fb52 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000fb54 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000fb56 invalid                                           |         
    0x0000fb58 asrs r3, r3, 6                                    |         r3 >>= 6;
                                                                 |         if (r1 == 0) {
    0x0000fb5a cbnz r1, 0xfb76                                   |             
    0x0000fb5c ldr.w r6, [r5, 0x194]                             |             r6 = *((r5 + 0x194));
                                                                 |             if (r6 == 0) {
    0x0000fb60 cbz r6, 0xfb84                                    |                 goto label_128;
                                                                 |             }
    0x0000fb62 mov r0, r5                                        |             r0 = r5;
                                                                 | label_121:
    0x0000fb64 bl 0xee88                                         |             fcn_0000ee88 (r0, r1);
    0x0000fb68 ldr r3, [pc, 0x38]                                |             
    0x0000fb6a mov r0, r4                                        |             r0 = r4;
    0x0000fb6c pop.w {r4, r5, r6, lr}                            |             
    0x0000fb70 add r3, pc                                        |             
    0x0000fb72 ldr r3, [r3]                                      |             r3 = *(0x1f718);
    0x0000fb74 bx r3                                             |             return uint32_t (*r3)() ();
                                                                 |         }
    0x0000fb76 ldr r3, [pc, 0x30]                                |         r3 = *(0xfbaa);
    0x0000fb78 mov r0, r4                                        |         r0 = r4;
    0x0000fb7a invalid                                           |         
                                                                 | label_126:
    0x0000fb7c eors r0, r6                                       |         r0 ^= r6;
    0x0000fb7e add r3, pc                                        |         r3 += pc;
    0x0000fb80 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0000fb82 bx r3                                             |         return uint32_t (*r3)() ();
                                                                 | label_128:
    0x0000fb84 ldr r3, [pc, 0x24]                                |         
    0x0000fb86 mov r0, r4                                        |         r0 = r4;
    0x0000fb88 add r3, pc                                        |         
    0x0000fb8a ldr r3, [r3]                                      |         r3 = *(0x1f738);
    0x0000fb8c blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000fb8e ldr r3, [pc, 0x20]                                |         
    0x0000fb90 mov r2, r6                                        |         r2 = r6;
    0x0000fb92 ldr r1, [r5, 4]                                   |         r1 = *((r5 + 4));
    0x0000fb94 mov r0, r6                                        |         r0 = r6;
    0x0000fb96 add r3, pc                                        |         r3 = 0x1f74c;
    0x0000fb98 blx 0x9f4                                         |         fcn_000009f4 ();
    0x0000fb9c bmi 0xfb28                                        |         
                                                                 |     } while (r0 < r6);
    0x0000fb9e movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 <= r0) {
    0x0000fba0 blo 0xfad8                                        |         goto label_54;
                                                                 |     }
    0x0000fba2 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 > r0) {
    0x0000fba4 blo 0xfca0                                        |         
    0x0000fba6 movs r1, r0                                       |         r1 = r0;
                                                                 |         if (r1 > r0) {
                                                                 | label_127:
    0x0000fba8 blo 0xfc88                                        |             
    0x0000fbaa movs r1, r0                                       |             r1 = r0;
                                                                 |             if (r1 > r0) {
    0x0000fbac blo 0xfc78                                        |                 
    0x0000fbae movs r1, r0                                       |                 r1 = r0;
    0x0000fbb0 adr r7, 0x398                                     |                 r7 = 0x398;
    0x0000fbb2 movs r0, r0                                       |                 
    0x0000fbb4 movs r7, r3                                       |                 r7 = r3;
    0x0000fbb6 stmdb sp!, {r2}                                   |                 __asm ("stmdb sp!, {r2}");
    0x0000fbba b 0xf5fa                                          |                 goto label_55;
                                                                 |             }
    0x0000fc78 adds r0, 0                                        |             r0 += 0;
    0x0000fc7a b 0x1018c                                         |             goto label_129;
                                                                 |         }
    0x0000fc88 strb r4, [r1, 4]                                  |         *((r1 + 4)) = r4;
    0x0000fc8a b 0xf7c8                                          |         goto label_56;
                                                                 |     }
    0x0000fca0 mla pc, r1, r0, fp                                |     __asm ("mla pc, r1, r0, fp");
    0x0000fca4 adr r7, 0x70                                      |     r7 = 0x70;
    0x0000fca6 movs r0, r0                                       |     
    0x0000fca8 ldr r3, [pc, 0x10]                                |     
    0x0000fcaa add r3, pc                                        |     r3 = 0x1f96a;
    0x0000fcac cmp r3, r0                                        |     
                                                                 |     if (r3 != r0) {
    0x0000fcae beq 0xfcb8                                        |         
    0x0000fcb0 ldr r3, [pc, 0xc]                                 |         
    0x0000fcb2 add r3, pc                                        |         
    0x0000fcb4 ldr r3, [r3]                                      |         r3 = *(0x1f976);
    0x0000fcb6 bx r3                                             |         return uint32_t (*r3)() ();
                                                                 |     }
    0x0000fcb8 bx lr                                             |     return;
                                                                 |     do {
    0x0001013a movw ip, 0xfb98                                   |         
    0x0001013e movt ip, 0xffff                                   |         ip = 0xfffffb98;
    0x00010142 asr.w ip, ip, r3                                  |         
    0x00010146 ands r4, ip, 1                                    |         r4 = ip & 1;
                                                                 |         if (r4 != ip) {
    0x0001014a bne 0x1019c                                       |             goto label_130;
                                                                 |         }
    0x0001014c ldr r3, [r5, 0x34]                                |         r3 = *((r5 + 0x34));
    0x0001014e ldr r2, [r0, r2]                                  |         r2 = *((r0 + r2));
    0x00010150 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x00010152 add r0, r2                                        |         r0 += r2;
    0x00010154 bl 0x14f30                                        |         r0 = fcn_00014f30 (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x00010158 cbnz r0, 0x1019c                                  |             goto label_130;
                                                                 |         }
    0x0001015a ldr.w r3, [r5, 0x1ac]                             |         r3 = *((r5 + 0x1ac));
    0x0001015e ldrh.w r4, [r3, sb, lsl 1]                        |         offset_2 = sb << 1;
                                                                 |         r4 = *((r3 + offset_2));
    0x00010162 ldr.w r3, [r5, 0x174]                             |         r3 = *((r5 + 0x174));
    0x00010166 ubfx r4, r4, 0, 0xf                               |         r4 = (r4 >> 0) & ((1 << 0xf) - 1);
    0x0001016a lsls r4, r4, 4                                    |         r4 <<= 4;
    0x0001016c adds r2, r3, r4                                   |         r2 = r3 + r4;
    0x0001016e ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00010170 cmp r2, r7                                        |         
    0x00010172 it ne                                             |         
                                                                 |         if (r2 == r7) {
    0x00010174 movne r6, r0                                      |             r6 = r0;
                                                                 |         }
                                                                 |         if (r2 == r7) {
    0x00010176 bne 0x10186                                       |             
    0x00010178 ldr r0, [r3, r4]                                  |             r0 = *((r3 + r4));
    0x0001017a mov r1, r8                                        |             r1 = r8;
    0x0001017c bl 0x14f30                                        |             r0 = fcn_00014f30 (r0, r1, r2, r3);
    0x00010180 cmp r0, 0                                         |             
    0x00010182 it ne                                             |             
                                                                 |             if (r0 != 0) {
    0x00010184 movne r6, 0                                       |                 r6 = 0;
                                                                 |                 goto label_131;
                                                                 |             }
                                                                 |         }
                                                                 | label_131:
    0x00010186 mov r0, r6                                        |         r0 = r6;
    0x00010188 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |         
                                                                 | label_129:
    0x0001018c ldrh.w lr, [r6, 0xe]                              |         
    0x00010190 movw ip, 0xfff1                                   |         ip = 0xfff1;
    0x00010194 cmp lr, ip                                        |         
    0x00010196 it ne                                             |         
                                                                 |         if (lr != ip) {
    0x00010198 cmpne r3, 6                                       |             __asm ("cmpne r3, 6");
                                                                 |         }
    0x0001019a beq 0x1013a                                       |         
                                                                 |     } while (lr == ip);
                                                                 | label_130:
    0x0001019c movs r6, 0                                        |     r6 = 0;
    0x0001019e mov r0, r6                                        |     r0 = r6;
    0x000101a0 pop.w {r3, r4, r5, r6, r7, r8, sb, 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/ld-linux-armhf.so.3 @ 0xfc98 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.0000fc98 ()              | void fcn_0000fc98 () {
    0x0000fc98 ldr r0, [pc, 8]           |     
    0x0000fc9a push {r3, lr}             |     
    0x0000fc9c add r0, pc                |     r0 = 0x1f944;
    0x0000fc9e bl 0xc2a4                 |     dl_fatal_printf ()
    0x0000fca0 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/ld-linux-armhf.so.3 @ 0x10e24 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00010e24 ()                                      | void fcn_00010e24 (int16_t arg_0h, int16_t arg_1h, int16_t arg1) {
                                                                 |     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;
                                                                 |     int32_t var_30h_2;
                                                                 |     r0 = arg1;
    0x00010e24 ldr.w r3, [pc, 0x418]                             |     r3 = *(0x00011240);
    0x00010e28 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00010e2c mov r8, r0                                        |     r8 = r0;
    0x00010e2e sub sp, 0x3c                                      |     
    0x00010e30 add r3, pc                                        |     r3 += pc;
    0x00010e32 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00010e34 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00010e36 bne.w 0x111fa                                     |         goto label_20;
                                                                 |     }
                                                                 | label_15:
    0x00010e3a ldr.w r3, [pc, 0x408]                             |     r3 = *(0x00011244);
    0x00010e3e mov fp, r8                                        |     
    0x00010e40 add r3, pc                                        |     r3 += pc;
    0x00010e42 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00010e44 ldr.w r3, [pc, 0x400]                             |     r3 = "path.rtld";
    0x00010e48 add r3, pc                                        |     r3 += pc;
    0x00010e4a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00010e4c ldr r3, [pc, 0x3fc]                               |     
    0x00010e4e add r3, pc                                        |     r3 = 0x2209e;
    0x00010e50 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_1:
    0x00010e52 mov r0, fp                                        |     r0 = fp;
                                                                 | label_0:
    0x00010e54 mov r7, r0                                        |     r7 = r0;
    0x00010e56 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00010e58 beq.w 0x11120                                     |         goto label_21;
                                                                 |     }
    0x00010e5c ldr r4, [r0], 4                                   |     r4 = *(r0);
                                                                 |     r0 += 4;
    0x00010e60 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00010e62 beq.w 0x11120                                     |         goto label_21;
                                                                 |     }
    0x00010e66 ldrb r6, [r4]                                     |     r6 = *(r4);
    0x00010e68 mov fp, r0                                        |     
    0x00010e6a cmp r6, 0x3d                                      |     
    0x00010e6c it ne                                             |     
                                                                 |     if (r6 != 0x3d) {
    0x00010e6e cmpne r6, 0                                       |         __asm ("cmpne r6, 0");
                                                                 |     }
    0x00010e70 ite ne                                            |     
                                                                 |     if (r6 == 0x3d) {
    0x00010e72 movne r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r6 != 0x3d) {
    0x00010e74 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0x3d) {
    0x00010e76 beq.w 0x1111c                                     |         goto label_22;
                                                                 |     }
    0x00010e7a mov r2, r4                                        |     r2 = r4;
    0x00010e7c rsb.w r1, r4, 1                                   |     r1 = 1 - r4;
                                                                 |     do {
    0x00010e80 adds r5, r1, r2                                   |         r5 = r1 + r2;
    0x00010e82 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00010e86 cmp r3, 0                                         |         
    0x00010e88 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00010e8a cmpne r3, 0x3d                                    |             __asm ("cmpne r3, 0x3d");
                                                                 |         }
    0x00010e8c bne 0x10e80                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_12:
    0x00010e8e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00010e90 beq 0x10e54                                       |         goto label_0;
                                                                 |     }
    0x00010e92 mov r8, r4                                        |     r8 = r4;
    0x00010e94 ldr r4, [pc, 0x3b8]                               |     
    0x00010e96 adds r5, 1                                        |     r5++;
    0x00010e98 mov r0, r8                                        |     r0 = r8;
    0x00010e9a add.w r3, r8, r5                                  |     r3 = r8 + r5;
    0x00010e9e mov r1, r6                                        |     r1 = r6;
    0x00010ea0 add r4, pc                                        |     r4 = 0x220f4;
    0x00010ea2 movs r2, 0x47                                     |     r2 = 0x47;
    0x00010ea4 str r7, [sp, 4]                                   |     var_4h = r7;
    0x00010ea6 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00010ea8 b 0x10eb6                                         |     
                                                                 |     while (r3 == 0) {
    0x00010eaa ldrb r2, [r4, 1]!                                 |         r2 = *((r4 += 1));
    0x00010eae ldrb r1, [r0, 1]!                                 |         r1 = *((r0 += 1));
    0x00010eb2 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00010eb4 beq 0x10f6a                                       |             goto label_23;
                                                                 |         }
    0x00010eb6 clz r3, r1                                        |         r3 &= r1;
    0x00010eba lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x00010ebc cmp r1, r2                                        |         
    0x00010ebe it ne                                             |         
                                                                 |         if (r1 == r2) {
    0x00010ec0 orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x00010ec4 cmp r3, 0                                         |         
    0x00010ec6 beq 0x10eaa                                       |         
                                                                 |     }
                                                                 | label_4:
    0x00010ec8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00010eca movs r5, 0                                        |     r5 = 0;
    0x00010ecc ldr r7, [pc, 0x384]                               |     
    0x00010ece mov ip, r5                                        |     
    0x00010ed0 ldr.w sb, [r3]                                    |     sb = *(r3);
    0x00010ed4 add r7, pc                                        |     r7 = 0x2212c;
    0x00010ed6 b 0x10ee8                                         |     goto label_24;
                                                                 | label_2:
    0x00010ed8 add.w ip, ip, 1                                   |     
    0x00010edc adds r7, 0x70                                     |     r7 += 0x70;
    0x00010ede cmp.w ip, 0x18                                    |     
    0x00010ee2 add.w r5, r5, 0x70                                |     r5 += 0x70;
                                                                 |     if (ip == 0x18) {
    0x00010ee6 beq 0x10e52                                       |         goto label_1;
                                                                 |     }
                                                                 | label_24:
    0x00010ee8 ldrb.w r3, [r7, 0x50]                             |     r3 = *((r7 + 0x50));
    0x00010eec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00010eee bne 0x10ed8                                       |         goto label_2;
                                                                 |     }
    0x00010ef0 ldrb.w r2, [r7, 0x58]                             |     r2 = *((r7 + 0x58));
    0x00010ef4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00010ef6 beq 0x10ed8                                       |         goto label_2;
                                                                 |     }
    0x00010ef8 add.w lr, r7, 0x58                                |     lr = r7 + 0x58;
    0x00010efc mov r4, r8                                        |     r4 = r8;
    0x00010efe mov r6, lr                                        |     r6 = lr;
    0x00010f00 mov r0, r2                                        |     r0 = r2;
                                                                 | label_3:
    0x00010f02 ldrb r1, [r4], 1                                  |     r1 = *(r4);
                                                                 |     r4++;
    0x00010f06 clz r3, r1                                        |     r3 &= r1;
    0x00010f0a lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00010f0c cmp r0, r1                                        |     
    0x00010f0e it ne                                             |     
                                                                 |     if (r0 == r1) {
    0x00010f10 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00010f14 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00010f16 bne 0x10ed8                                       |         goto label_2;
                                                                 |     }
    0x00010f18 ldrb r0, [r6, 1]!                                 |     r0 = *((r6 += 1));
    0x00010f1c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00010f1e bne 0x10f02                                       |         goto label_3;
                                                                 |     }
    0x00010f20 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00010f22 cmp r3, 0x3d                                      |     
                                                                 |     if (r3 != 0x3d) {
    0x00010f24 bne 0x10ed8                                       |         goto label_2;
                                                                 |     }
    0x00010f26 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00010f2a beq 0x10f38                                       |         goto label_25;
                                                                 |     }
    0x00010f2c ldr r3, [r7, 0x54]                                |     r3 = *((r7 + 0x54));
    0x00010f2e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00010f30 beq.w 0x110ba                                     |         goto label_26;
                                                                 |     }
                                                                 | label_11:
    0x00010f34 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00010f36 bne 0x10ed8                                       |         goto label_2;
                                                                 |     }
                                                                 | label_25:
    0x00010f38 ldr r3, [pc, 0x31c]                               |     
    0x00010f3a rsb ip, ip, ip, lsl 3                             |     
    0x00010f3e add r3, pc                                        |     r3 = 0x2219a;
    0x00010f40 add.w r3, r3, ip, lsl 4                           |     r3 += (ip << 4);
    0x00010f44 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00010f46 cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x00010f48 beq.w 0x110b4                                     |         goto label_27;
                                                                 |     }
    0x00010f4c ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00010f4e movs r1, 0                                        |     r1 = 0;
    0x00010f50 bl 0xc338                                         |     fcn_0000c338 (r0, r1);
    0x00010f54 strd r0, r1, [sp, 0x30]                           |     __asm ("strd r0, r1, [var_30h]");
                                                                 | label_7:
    0x00010f58 ldr r0, [pc, 0x300]                               |     
    0x00010f5a movs r3, 0                                        |     r3 = 0;
    0x00010f5c mov r2, r3                                        |     r2 = r3;
    0x00010f5e add r1, sp, 0x30                                  |     r1 += var_30h;
    0x00010f60 add r0, pc                                        |     r0 = 0x221c0;
    0x00010f62 add r0, r5                                        |     r0 += r5;
    0x00010f64 bl 0x10d04                                        |     fcn_00010d04 (r0, r1, r2, r3);
    0x00010f68 b 0x10e52                                         |     goto label_1;
                                                                 | label_23:
    0x00010f6a cmp r1, 0x3d                                      |     
                                                                 |     if (r1 != 0x3d) {
    0x00010f6c bne 0x10ec8                                       |         goto label_4;
                                                                 |     }
    0x00010f6e mov r4, r2                                        |     r4 = r2;
    0x00010f70 mov r3, r8                                        |     r3 = r8;
    0x00010f72 b 0x10f7a                                         |     
                                                                 |     while (r6 != 0) {
    0x00010f74 ldrb r6, [r3, 1]!                                 |         r6 = *((r3 += 1));
    0x00010f78 mov r4, r0                                        |         r4 = r0;
    0x00010f7a adds r0, r4, 1                                    |         r0 = r4 + 1;
    0x00010f7c cmp r6, 0                                         |         
    0x00010f7e bne 0x10f74                                       |         
                                                                 |     }
    0x00010f80 bl 0x13a0c                                        |     r0 = fcn_00013a0c (r0);
    0x00010f84 cmp.w r0, -1                                      |     
    0x00010f88 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 == -1) {
    0x00010f8a beq.w 0x1122e                                     |         goto label_28;
                                                                 |     }
    0x00010f8e add.w r3, r8, r4                                  |     r3 = r8 + r4;
    0x00010f92 adds r2, r0, r4                                   |     r2 = r0 + r4;
                                                                 |     if (r4 == 0) {
    0x00010f94 cbz r4, 0x10fa2                                   |         goto label_29;
                                                                 |     }
                                                                 |     do {
    0x00010f96 ldrb r1, [r3, -0x1]!                              |         r1 = *((r3 -= 0x1));
    0x00010f9a cmp r3, r8                                        |         
    0x00010f9c strb r1, [r2, -0x1]!                              |         *((r2 -= 0x1)) = r1;
    0x00010fa0 bne 0x10f96                                       |         
                                                                 |     } while (r3 != r8);
                                                                 | label_29:
    0x00010fa2 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00010fa6 beq.w 0x110ac                                     |         goto label_30;
                                                                 |     }
    0x00010faa ldrb.w r0, [sb, r5]                               |     r0 = *((sb + r5));
    0x00010fae add.w r2, sb, r5                                  |     r2 = sb + r5;
    0x00010fb2 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00010fb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00010fb6 beq 0x110ac                                       |         goto label_30;
                                                                 |     }
    0x00010fb8 ldr r3, [pc, 0x2a4]                               |     
    0x00010fba mov lr, r2                                        |     lr = r2;
    0x00010fbc mov ip, r0                                        |     
    0x00010fbe str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x00010fc2 add r3, pc                                        |     
    0x00010fc4 ldr r3, [r3]                                      |     r3 = *(0x22226);
    0x00010fc6 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00010fc8 ldr r3, [pc, 0x298]                               |     
    0x00010fca add r3, pc                                        |     r3 = 0x22232;
    0x00010fcc str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00010fce movs r3, 0                                        |     r3 = 0;
    0x00010fd0 strd r3, sb, [sp, 0x18]                           |     __asm ("strd r3, sb, [var_1ch]");
                                                                 | label_6:
    0x00010fd4 cmp.w ip, 0x3d                                    |     
    0x00010fd8 it ne                                             |     
                                                                 |     if (ip != 0x3d) {
    0x00010fda cmpne ip, 0x3a                                    |         __asm ("cmpne ip, 0x3a");
                                                                 |     }
    0x00010fde ite ne                                            |     
                                                                 |     if (ip == 0x3d) {
    0x00010fe0 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (ip != 0x3d) {
    0x00010fe2 moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (ip == 0x3d) {
    0x00010fe4 beq.w 0x11226                                     |         goto label_31;
                                                                 |     }
    0x00010fe8 mov r2, lr                                        |     r2 = lr;
    0x00010fea mov r3, ip                                        |     r3 = ip;
    0x00010fec rsb.w r0, lr, 1                                   |     r0 = 1 - lr;
                                                                 |     do {
    0x00010ff0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00010ff2 beq 0x1109a                                       |             goto label_32;
                                                                 |         }
    0x00010ff4 adds r1, r0, r2                                   |         r1 = r0 + r2;
    0x00010ff6 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00010ffa cmp r3, 0x3d                                      |         
    0x00010ffc it ne                                             |         
                                                                 |         if (r3 != 0x3d) {
    0x00010ffe cmpne r3, 0x3a                                    |             __asm ("cmpne r3, 0x3a");
                                                                 |         }
    0x00011000 bne 0x10ff0                                       |         
                                                                 |     } while (r3 != 0x3d);
                                                                 | label_18:
    0x00011002 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011004 beq 0x1109a                                       |         goto label_32;
                                                                 |     }
    0x00011006 cmp r3, 0x3a                                      |     
    0x00011008 add.w r1, r1, 1                                   |     r1++;
    0x0001100c add.w r8, lr, r1                                  |     r8 = lr + r1;
                                                                 |     if (r3 == 0x3a) {
    0x00011010 beq 0x11092                                       |         goto label_33;
                                                                 |     }
    0x00011012 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00011014 ldrb.w r5, [lr, r1]                               |     r5 = *((lr + r1));
    0x00011018 sub.w fp, r8, r3                                  |     
    0x0001101c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001101e cmp r5, 0                                         |     
    0x00011020 it ne                                             |     
                                                                 |     if (r5 != 0) {
    0x00011022 cmpne r5, 0x3a                                    |         __asm ("cmpne r5, 0x3a");
                                                                 |     }
    0x00011024 ite ne                                            |     
                                                                 |     if (r5 == 0) {
    0x00011026 movne r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r5 != 0) {
    0x00011028 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x0001102a add fp, r3                                        |     
                                                                 |     if (r5 == 0) {
    0x0001102c beq.w 0x1121c                                     |         goto label_34;
                                                                 |     }
    0x00011030 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x00011034 movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x00011036 mov r7, r3                                        |         r7 = r3;
    0x00011038 ldrb r2, [r3], 1                                  |         r2 = *(r3);
                                                                 |         r3++;
    0x0001103c adds r5, 1                                        |         r5++;
    0x0001103e cmp r2, 0x3a                                      |         
    0x00011040 it ne                                             |         
                                                                 |         if (r2 != 0x3a) {
    0x00011042 cmpne r2, 0                                       |             __asm ("cmpne r2, 0");
                                                                 |         }
    0x00011044 bne 0x11036                                       |         
                                                                 |     } while (r2 != 0x3a);
                                                                 | label_16:
    0x00011046 ldr r6, [pc, 0x220]                               |     
    0x00011048 mov.w sl, 0                                       |     sl = 0;
    0x0001104c add r6, pc                                        |     r6 = 0x222ba;
                                                                 | label_5:
    0x0001104e ldrb r0, [r6]                                     |     r0 = *(r6);
    0x00011050 mov sb, r6                                        |     sb = r6;
    0x00011052 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00011054 beq 0x11126                                       |         goto label_35;
                                                                 |     }
    0x00011056 mov r4, lr                                        |     r4 = lr;
    0x00011058 mov r2, ip                                        |     r2 = ip;
    0x0001105a mov r1, r6                                        |     r1 = r6;
    0x0001105c mov r3, r0                                        |     r3 = r0;
    0x0001105e b 0x1106c                                         |     
                                                                 |     while (r3 == 0) {
    0x00011060 ldrb r3, [r1, 1]!                                 |         r3 = *((r1 += 1));
    0x00011064 ldrb r2, [r4, 1]!                                 |         r2 = *((r4 += 1));
    0x00011068 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001106a beq 0x11128                                       |             goto label_36;
                                                                 |         }
    0x0001106c subs r3, r3, r2                                   |         r3 -= r2;
    0x0001106e it ne                                             |         
                                                                 |         if (r3 == r3) {
    0x00011070 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00011072 cmp r2, 0                                         |         
    0x00011074 it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x00011076 orreq r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x0001107a cmp r3, 0                                         |         
    0x0001107c beq 0x11060                                       |         
                                                                 |     }
                                                                 | label_13:
    0x0001107e add.w sl, sl, 1                                   |     sl++;
    0x00011082 adds r6, 0x70                                     |     r6 += 0x70;
    0x00011084 cmp.w sl, 0x18                                    |     
                                                                 |     if (sl != 0x18) {
    0x00011088 bne 0x1104e                                       |         goto label_5;
                                                                 |     }
                                                                 | label_14:
    0x0001108a ldrb r3, [r7]                                     |     r3 = *(r7);
                                                                 |     if (r3 != 0) {
    0x0001108c cbz r3, 0x11092                                   |         
    0x0001108e adds r5, 1                                        |         r5++;
    0x00011090 add r8, r5                                        |         r8 += r5;
                                                                 |     }
                                                                 | label_33:
    0x00011092 ldrb.w ip, [r8]                                   |     ip = *(r8);
    0x00011096 mov lr, r8                                        |     lr = r8;
    0x00011098 b 0x10fd4                                         |     goto label_6;
                                                                 | label_32:
    0x0001109a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001109c ldrd sb, fp, [sp, 0x1c]                           |     __asm ("ldrd sb, fp, [var_1ch]");
                                                                 |     if (r3 != 0) {
    0x000110a0 cbz r3, 0x110ac                                   |         
    0x000110a2 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000110a4 mov.w r1, 0                                       |         r1 = 0;
    0x000110a8 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x000110aa strb r1, [r3, r2]                                 |         *((r3 + r2)) = r1;
                                                                 |     }
                                                                 | label_30:
    0x000110ac ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000110ae str.w sb, [r3]                                    |     __asm ("str.w sb, [r3]");
    0x000110b0 str r0, [sp]                                      |     *(sp) = r0;
    0x000110b2 b 0x10e52                                         |     goto label_1;
                                                                 | label_27:
    0x000110b4 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000110b6 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000110b8 b 0x10f58                                         |     goto label_7;
                                                                 | label_26:
    0x000110ba ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000110bc ldr r1, [r3]                                      |     r1 = *(r3);
    0x000110be mov fp, r3                                        |     
    0x000110c0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000110c2 beq.w 0x10ed8                                     |         goto label_2;
                                                                 |     }
    0x000110c6 ldr r4, [sp, 4]                                   |     r4 = var_4h;
                                                                 |     if (r2 == 0) {
    0x000110c8 cbz r2, 0x110fc                                   |         goto label_37;
                                                                 |     }
                                                                 | label_8:
    0x000110ca mov r3, r1                                        |     r3 = r1;
    0x000110cc mov r0, lr                                        |     r0 = lr;
    0x000110ce b 0x110d8                                         |     
                                                                 |     while (r2 == 0) {
    0x000110d0 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x000110d4 mov r1, r3                                        |         r1 = r3;
                                                                 |         if (r2 == 0) {
    0x000110d6 cbz r2, 0x110fc                                   |             goto label_37;
                                                                 |         }
    0x000110d8 ldrb r1, [r3], 1                                  |         r1 = *(r3);
                                                                 |         r3++;
    0x000110dc subs r2, r1, r2                                   |         r2 = r1 - r2;
    0x000110de it ne                                             |         
                                                                 |         if (r2 == r1) {
    0x000110e0 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x000110e2 cmp r1, 0                                         |         
    0x000110e4 it eq                                             |         
                                                                 |         if (r1 != 0) {
    0x000110e6 orreq r2, r2, 1                                   |             r2 |= 1;
                                                                 |         }
    0x000110ea cmp r2, 0                                         |         
    0x000110ec beq 0x110d0                                       |         
                                                                 |     }
                                                                 | label_9:
    0x000110ee ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000110f0 adds r4, 4                                        |     r4 += 4;
                                                                 |     if (r1 == 0) {
    0x000110f2 cbz r1, 0x11114                                   |         goto label_38;
                                                                 |     }
                                                                 | label_10:
    0x000110f4 ldrb.w r2, [r7, 0x58]                             |     r2 = *((r7 + 0x58));
    0x000110f8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000110fa bne 0x110ca                                       |         goto label_8;
                                                                 |     }
                                                                 | label_37:
    0x000110fc ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000110fe cmp r3, 0x3d                                      |     
                                                                 |     if (r3 != 0x3d) {
    0x00011100 bne 0x110ee                                       |         goto label_9;
                                                                 |     }
    0x00011102 mov r3, r4                                        |     r3 = r4;
                                                                 |     do {
    0x00011104 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00011106 str r2, [r3], 4                                   |         *(r3) = r2;
                                                                 |         r3 += 4;
    0x0001110a cmp r2, 0                                         |         
    0x0001110c bne 0x11104                                       |         
                                                                 |     } while (r2 != 0);
    0x0001110e ldr r1, [r4]                                      |     r1 = *(r4);
    0x00011110 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00011112 bne 0x110f4                                       |         goto label_10;
                                                                 |     }
                                                                 | label_38:
    0x00011114 ldr r3, [r7, 0x54]                                |     r3 = *((r7 + 0x54));
    0x00011116 ldr.w fp, [sp, 4]                                 |     fp = var_4h;
    0x0001111a b 0x10f34                                         |     goto label_11;
                                                                 | label_22:
    0x0001111c mov r3, r6                                        |     r3 = r6;
    0x0001111e b 0x10e8e                                         |     goto label_12;
                                                                 | label_21:
    0x00011120 add sp, 0x3c                                      |     
    0x00011122 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
    0x00011124 ldrh r0, [r6, 0x3e]                               |     r0 = *((r6 + 0x3e));
                                                                 | label_35:
    0x00011126 mov r2, ip                                        |     r2 = ip;
                                                                 | label_36:
    0x00011128 cmp r2, 0x3d                                      |     
                                                                 |     if (r2 != 0x3d) {
    0x0001112a bne 0x1107e                                       |         goto label_13;
                                                                 |     }
    0x0001112c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001112e lsl.w r2, sl, 3                                   |     r2 = sl << 3;
    0x00011132 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011134 beq 0x111bc                                       |         goto label_39;
                                                                 |     }
    0x00011136 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00011138 sub.w r3, r2, sl                                  |     r3 = r2 - sl;
    0x0001113c add.w r3, r1, r3, lsl 4                           |     r3 = r1 + (r3 << 4);
    0x00011140 ldr r3, [r3, 0x54]                                |     r3 = *((r3 + 0x54));
    0x00011142 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011144 beq 0x1108a                                       |         goto label_14;
                                                                 |     }
    0x00011146 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00011148 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001114a beq 0x11220                                       |         goto label_40;
                                                                 |     }
    0x0001114c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0001114e movs r3, 0x3a                                     |     r3 = 0x3a;
    0x00011150 adds r4, r1, 1                                    |     r4 = r1 + 1;
    0x00011152 str r4, [sp, 0x18]                                |     var_18h = r4;
    0x00011154 strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x00011156 adds r3, r1, 2                                    |     r3 = r1 + 2;
    0x00011158 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0001115a ldrb r0, [r6]                                     |     r0 = *(r6);
    0x0001115c add r1, r4                                        |     r1 += r4;
                                                                 | label_17:
    0x0001115e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00011160 beq 0x1122a                                       |         goto label_41;
                                                                 |     }
    0x00011162 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00011164 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00011166 subs r3, 1                                        |     r3--;
    0x00011168 add r3, r1                                        |     r3 += r1;
    0x0001116a rsb.w r4, r1, 2                                   |     r4 = 2 - r1;
                                                                 |     do {
    0x0001116e adds r1, r4, r3                                   |         r1 = r4 + r3;
    0x00011170 strb r0, [r3, 1]!                                 |         *((r3 += 1)) = r0;
    0x00011174 ldrb r0, [r6, 1]!                                 |         r0 = *((r6 += 1));
    0x00011178 cmp r0, 0                                         |         
    0x0001117a bne 0x1116e                                       |         
                                                                 |     } while (r0 != 0);
    0x0001117c adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x0001117e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00011180 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00011182 add r1, r3                                        |     r1 += r3;
                                                                 | label_19:
    0x00011184 movs r3, 0x3d                                     |     r3 = 0x3d;
    0x00011186 strb r3, [r1]                                     |     *(r1) = r3;
                                                                 |     if (r5 == 0) {
    0x00011188 cbz r5, 0x111aa                                   |         goto label_42;
                                                                 |     }
    0x0001118a ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0001118c add.w r3, fp, -1                                  |     r3 = fp + -1;
    0x00011190 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00011192 adds r4, r3, r5                                   |     r4 = r3 + r5;
    0x00011194 subs r1, 1                                        |     r1--;
    0x00011196 add r1, r0                                        |     r1 += r0;
                                                                 |     do {
    0x00011198 ldrb r0, [r3, 1]!                                 |         r0 = *((r3 += 1));
    0x0001119c cmp r4, r3                                        |         
    0x0001119e strb r0, [r1, 1]!                                 |         *((r1 += 1)) = r0;
    0x000111a2 bne 0x11198                                       |         
                                                                 |     } while (r4 != r3);
    0x000111a4 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000111a6 add r3, r5                                        |     r3 += r5;
    0x000111a8 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_42:
    0x000111aa ldr r3, [pc, 0xc0]                                |     
    0x000111ac sub.w r1, r2, sl                                  |     r1 = r2 - sl;
    0x000111b0 add r3, pc                                        |     r3 = 0x22422;
    0x000111b2 add.w r3, r3, r1, lsl 4                           |     r3 += (r1 << 4);
    0x000111b6 ldr r3, [r3, 0x54]                                |     r3 = *((r3 + 0x54));
    0x000111b8 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x000111ba bne 0x11236                                       |         goto label_43;
                                                                 |     }
                                                                 | label_39:
    0x000111bc sub.w r3, r2, sl                                  |     r3 = r2 - sl;
    0x000111c0 mov.w r2, 0                                       |     r2 = 0;
    0x000111c4 strb.w r2, [fp, r5]                               |     *((fp + r5)) = r2;
    0x000111c8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000111ca add.w r3, r2, r3, lsl 4                           |     r3 = r2 + (r3 << 4);
    0x000111ce ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000111d0 cmp r3, 3                                         |     
    0x000111d2 it eq                                             |     
                                                                 |     if (r3 != 3) {
    0x000111d4 streq fp, [sp, 0x30]                              |         var_30h = fp;
                                                                 |     }
                                                                 |     if (r3 != 3) {
    0x000111d8 beq 0x111e6                                       |         
    0x000111da mov r0, fp                                        |         r0 = fp;
    0x000111dc movs r1, 0                                        |         r1 = 0;
    0x000111de bl 0xc338                                         |         fcn_0000c338 (r0, r1);
    0x000111e2 strd r0, r1, [sp, 0x30]                           |         __asm ("strd r0, r1, [var_30h]");
                                                                 |     }
    0x000111e6 movs r3, 0                                        |     r3 = 0;
    0x000111e8 mov r0, sb                                        |     r0 = sb;
    0x000111ea mov r2, r3                                        |     r2 = r3;
    0x000111ec add r1, sp, 0x30                                  |     r1 += var_30h;
    0x000111ee bl 0x10d04                                        |     fcn_00010d04 (r0, r1, r2, r3);
    0x000111f2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000111f4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000111f6 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000111f8 b 0x1108a                                         |     goto label_14;
                                                                 | label_20:
    0x000111fa ldr r0, [pc, 0x74]                                |     
    0x000111fc movs r1, 0                                        |     r1 = 0;
    0x000111fe mov.w ip, 0x21                                    |     
    0x00011202 add r0, pc                                        |     r0 = 0x22478;
    0x00011204 bl 0x139d0                                        |     r0 = fcn_000139d0 ();
    0x00011208 cmn.w r0, 0x1000                                  |     
                                                                 |     if (r0 > 0x1000) {
    0x0001120c bhi.w 0x10e3a                                     |         goto label_15;
                                                                 |     }
    0x00011210 ldr r3, [pc, 0x60]                                |     
    0x00011212 movs r2, 2                                        |     r2 = 2;
    0x00011214 add r3, pc                                        |     r3 = 0x2248c;
    0x00011216 str.w r2, [r3, 0xa64]                             |     __asm ("str.w r2, [r3, 0xa64]");
    0x0001121a b 0x10e3a                                         |     goto label_15;
                                                                 | label_34:
    0x0001121c mov r7, r8                                        |     r7 = r8;
    0x0001121e b 0x11046                                         |     goto label_16;
                                                                 | label_40:
    0x00011220 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00011222 movs r3, 1                                        |     r3 = 1;
    0x00011224 b 0x1115e                                         |     goto label_17;
                                                                 | label_31:
    0x00011226 mov r3, ip                                        |     r3 = ip;
    0x00011228 b 0x11002                                         |     goto label_18;
                                                                 | label_41:
    0x0001122a str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0001122c b 0x11184                                         |     goto label_19;
                                                                 | label_28:
    0x0001122e ldr r0, [pc, 0x48]                                |     
    0x00011230 add r0, pc                                        |     r0 = 0x224ae;
    0x00011232 bl 0xc2a4                                         |     dl_fatal_printf ()
                                                                 | label_43:
    0x00011236 ldr r3, [pc, 0x44]                                |     
    0x00011238 add r3, pc                                        |     
    0x0001123a ldr r3, [r3]                                      |     r3 = *(0x224ba);
    0x0001123c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0001123e b 0x1108a                                         |     goto label_14;
                                                                 | }
    ; assembly                           | /* r2dec pseudo code output */
                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x11f18 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00011f18 ()              | void fcn_00011f18 (int16_t arg1) {
                                         |     r0 = arg1;
    0x00011f18 mov r1, r0                |     r1 = r0;
    0x00011f1a ldr r0, [pc, 8]           |     r0 = *(0x00011f24);
    0x00011f1c push {r3, lr}             |     
    0x00011f1e add r0, pc                |     r0 += pc;
    0x00011f20 bl 0xc2a4                 |     dl_fatal_printf ()
    0x00011f24 ldr r6, [r4, 0x14]        |     r6 = *((r4 + 0x14));
    0x00011f26 movs r0, r0               |     
    0x00011f28 movs r0, 0x7f             |     r0 = 0x7f;
    0x00011f2a push {r3, lr}             |     
    0x00011f2c bl 0x14c28                |     fcn_00014c28 (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/ld-linux-armhf.so.3 @ 0x11f30 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00011f30 ()              | void fcn_00011f30 (int16_t arg1) {
                                         |     int16_t var_0h;
                                         |     int16_t var_4h;
                                         |     r0 = arg1;
    0x00011f30 push {lr}                 |     
    0x00011f32 sub sp, 0xc               |     
                                         |     if (r3 == 0) {
    0x00011f34 cbz r3, 0x11f46           |         goto label_0;
                                         |     }
    0x00011f36 ldr r4, [pc, 0x18]        |     
    0x00011f38 add r4, pc                |     r4 = 0x23e8e;
                                         |     do {
    0x00011f3a str r0, [sp, 4]           |         var_4h = r0;
    0x00011f3c ldr r0, [pc, 0x14]        |         
    0x00011f3e str r4, [sp]              |         *(sp) = r4;
    0x00011f40 add r0, pc                |         r0 = 0x23e98;
    0x00011f42 bl 0xc2a4                 |         dl_fatal_printf ()
                                         | label_0:
    0x00011f46 ldr r3, [pc, 0x10]        |         
    0x00011f48 add r3, pc                |         r3 = 0x23ea6;
    0x00011f4a mov r4, r3                |         r4 = r3;
    0x00011f4c b 0x11f3a                 |         
                                         |     } while (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/ld-linux-armhf.so.3 @ 0x122fc */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.000122fc ()              | void fcn_000122fc (int16_t arg_0h, int16_t arg_4h, int16_t arg_10h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                         |     r0 = arg1;
                                         |     r1 = arg2;
                                         |     r2 = arg3;
                                         |     r3 = arg4;
    0x000122fc ldr.w ip, [pc, 0x68]      |     
    0x00012300 mov r5, r1                |     r5 = r1;
    0x00012302 push {r7, lr}             |     
    0x00012304 mov r4, r2                |     r4 = r2;
    0x00012306 sub.w sp, sp, 0x410       |     
    0x0001230a mov r6, r3                |     r6 = r3;
    0x0001230c add ip, pc                |     ip = 0x24678;
    0x0001230e ldr.w r7, [ip]            |     
    0x00012312 ldr r7, [r7]              |     r7 = *(0x24678);
                                         |     if (r7 == 0) {
    0x00012314 cbz r7, 0x1235a           |         goto label_2;
                                         |     }
                                         |     if (r4 == 0) {
    0x00012316 cbz r4, 0x12362           |         goto label_3;
                                         |     }
                                         | label_1:
    0x00012318 ldrb r3, [r5]             |     r3 = *(r5);
                                         |     if (r3 != 0) {
    0x0001231a cbnz r3, 0x12352          |         goto label_4;
                                         |     }
    0x0001231c ldr.w r8, [pc, 0x4c]      |     
    0x00012320 add r8, pc                |     r8 = 0x24690;
                                         |     if (r0 == 0) {
                                         | label_0:
    0x00012322 cbz r0, 0x1234a           |         goto label_5;
                                         |     }
    0x00012324 mov.w r2, 0x400           |     r2 = 0x400;
    0x00012328 add r1, sp, 0x10          |     r1 += arg_10h;
    0x0001232a bl 0x11e14                |     fcn_00011e14 (r0, r1);
    0x0001232e ldr r3, [pc, 0x40]        |     
    0x00012330 add r3, pc                |     r3 = 0x246a6;
                                         |     do {
    0x00012332 strd r3, r0, [sp, 8]      |         __asm ("strd r3, r0, [sp, 8]");
    0x00012336 mov r2, r4                |         r2 = r4;
    0x00012338 ldr r0, [pc, 0x38]        |         
    0x0001233a mov r3, r5                |         r3 = r5;
    0x0001233c mov r1, r7                |         r1 = r7;
    0x0001233e str r6, [sp, 4]           |         *(arg_4h) = r6;
    0x00012340 str.w r8, [sp]            |         __asm ("str.w r8, [sp]");
    0x00012344 add r0, pc                |         r0 = 0x246bc;
    0x00012346 bl 0xc2a4                 |         dl_fatal_printf ()
                                         | label_5:
    0x0001234a ldr r3, [pc, 0x2c]        |         
    0x0001234c add r3, pc                |         r3 = 0x246ca;
    0x0001234e mov r0, r3                |         r0 = r3;
    0x00012350 b 0x12332                 |         
                                         |     } while (1);
                                         | label_4:
    0x00012352 ldr.w r8, [pc, 0x28]      |     r8 = *(0x0001237c);
    0x00012356 add r8, pc                |     r8 += pc;
    0x00012358 b 0x12322                 |     goto label_0;
                                         | label_2:
    0x0001235a ldr r7, [pc, 0x24]        |     
    0x0001235c add r7, pc                |     r7 = 0x246e2;
    0x0001235e cmp r4, 0                 |     
                                         |     if (r4 != 0) {
    0x00012360 bne 0x12318               |         goto label_1;
                                         |     }
                                         | label_3:
    0x00012362 ldr r4, [pc, 0x20]        |     
    0x00012364 add r4, pc                |     r4 = 0x246ee;
    0x00012366 b 0x12318                 |     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/ld-linux-armhf.so.3 @ 0x999c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) switch.0x0000999c ()                             | void switch_0x0000999c (int16_t arg_28h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_70h, int16_t arg_7ch, int16_t arg_c4h, int16_t arg_e8h, int16_t arg_120h, int16_t arg_174h, int16_t arg_198h, int16_t arg_1a8h, int16_t arg_218h, int16_t arg_220h, int16_t arg_224h, int16_t arg_228h, int16_t arg_22ch, int16_t arg_254h, int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg2) {
                                                             |     r1 = arg2;
                                                             | label_24:
    0x00008f64 adds r1, r2, r6                               |     r1 = r2 + r6;
    0x00008f66 ldr r2, [r7, 0x30]                            |     r2 = *((r7 + 0x30));
    0x00008f68 ldr.w r4, [fp]                                |     r4 = *(fp);
    0x00008f6c str r1, [r7, 0x48]                            |     *((r7 + 0x48)) = r1;
    0x00008f6e ldr r2, [r2, 8]                               |     r2 = *((r2 + 8));
    0x00008f70 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00008f72 beq.w 0x94e2                                  |         goto label_73;
                                                             |     }
    0x00008f76 cmp r6, r1                                    |     
                                                             |     if (r6 >= r1) {
    0x00008f78 bhs 0x9068                                    |         goto label_10;
                                                             |     }
    0x00008f7a ldr.w r2, [pc, 0xab0]                         |     
    0x00008f7e ldr.w sl, [pc, 0xab0]                         |     sl = *(0x00009a30);
    0x00008f82 ldr.w sb, [pc, 0xab0]                         |     
    0x00008f86 add r2, pc                                    |     r2 = 0x129b8;
    0x00008f88 add sl, pc                                    |     sl += pc;
    0x00008f8a str r2, [r7, 0x44]                            |     *((r7 + 0x44)) = r2;
    0x00008f8c str.w sl, [r7, 0x48]                          |     __asm ("str.w sl, [r7, 0x48]");
    0x00008f90 add sb, pc                                    |     sb = 0x129ca;
    0x00008f92 mov sl, r1                                    |     sl = r1;
    0x00008f94 b 0x8fac                                      |     
                                                             |     while (r1 == 0x16) {
    0x00008f96 ldr.w r3, [fp, 0x218]                         |         r3 = *(arg_218h);
    0x00008f9a cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00008f9c bne.w 0x92a6                                  |             goto label_74;
                                                             |         }
    0x00008fa0 ldr r3, [r4, r5]                              |         r3 = *((r4 + r5));
    0x00008fa2 add r3, r4                                    |         r3 += r4;
    0x00008fa4 str r3, [r4, r5]                              |         *((r4 + r5)) = r3;
                                                             | label_1:
    0x00008fa6 adds r6, 8                                    |         r6 += 8;
    0x00008fa8 cmp sl, r6                                    |         
                                                             |         if (sl < r6) {
    0x00008faa bls 0x9068                                    |             goto label_10;
                                                             |         }
                                                             | label_0:
    0x00008fac ldrd r5, r3, [r6]                             |         __asm ("ldrd r5, r3, [r6]");
    0x00008fb0 add.w r8, r4, r5                              |         r8 = r4 + r5;
    0x00008fb4 uxtb r1, r3                                   |         r1 = (int8_t) r3;
    0x00008fb6 cmp r1, 0x16                                  |         
    0x00008fb8 beq 0x8f96                                    |         
                                                             |     }
    0x00008fba cmp r1, 0xd                                   |     
                                                             |     if (r1 != 0xd) {
    0x00008fbc bne.w 0xa326                                  |         goto label_75;
                                                             |     }
    0x00008fc0 ldr.w r2, [fp, 0x38]                          |     r2 = *(arg_38h);
    0x00008fc4 lsrs r3, r3, 8                                |     r3 >>= 8;
    0x00008fc6 lsls r0, r3, 4                                |     r0 = r3 << 4;
    0x00008fc8 ldr.w ip, [r2, 4]                             |     ip = *((r2 + 4));
    0x00008fcc ldr.w r2, [fp, 0xe8]                          |     r2 = *(arg_e8h);
    0x00008fd0 add.w r1, r0, ip                              |     r1 = r0 + ip;
                                                             |     if (r2 != 0) {
    0x00008fd4 cbz r2, 0x8fe8                                |         
    0x00008fd6 ldr r2, [r2, 4]                               |         r2 = *((r2 + 4));
    0x00008fd8 ldrh.w r3, [r2, r3, lsl 1]                    |         offset_0 = r3 << 1;
                                                             |         r3 = *((r2 + offset_0));
    0x00008fdc ldr.w r2, [fp, 0x174]                         |         r2 = *(arg_174h);
    0x00008fe0 ubfx r3, r3, 0, 0xf                           |         r3 = (r3 >> 0) & ((1 << 0xf) - 1);
    0x00008fe4 add.w r2, r2, r3, lsl 4                       |         r2 += (r3 << 4);
                                                             |     }
    0x00008fe8 str r1, [r7, 0x54]                            |     *((r7 + 0x54)) = r1;
    0x00008fea ldrb.w lr, [r1, 0xc]                          |     
    0x00008fee lsrs.w r3, lr, 4                              |     r3 = lr >> 4;
                                                             |     if (r3 == lr) {
    0x00008ff2 beq.w 0x985e                                  |         goto label_76;
                                                             |     }
    0x00008ff6 ldrb r3, [r1, 0xd]                            |     r3 = *((r1 + 0xd));
    0x00008ff8 and r3, r3, 3                                 |     r3 &= 3;
    0x00008ffc subs r3, 1                                    |     r3--;
    0x00008ffe cmp r3, 1                                     |     
                                                             |     if (r3 < 1) {
    0x00009000 bls.w 0x985e                                  |         goto label_76;
                                                             |     }
    0x00009004 ldr.w r3, [fp, 0x220]                         |     r3 = *(arg_220h);
    0x00009008 cmp r1, r3                                    |     
                                                             |     if (r1 == r3) {
    0x0000900a beq.w 0xa590                                  |         goto label_77;
                                                             |     }
                                                             | label_67:
    0x0000900e movs r3, 1                                    |     r3 = 1;
    0x00009010 str.w r1, [fp, 0x220]                         |     __asm ("str.w r1, [arg_220h]");
    0x00009014 str.w r3, [fp, 0x224]                         |     __asm ("str.w r3, [arg_224h]");
                                                             |     if (r2 != 0) {
    0x00009018 cbz r2, 0x9022                                |         
    0x0000901a ldr r3, [r2, 4]                               |         r3 = *((r2 + 4));
    0x0000901c cmp r3, 0                                     |         
    0x0000901e it eq                                         |         
                                                             |         if (r3 == 0) {
    0x00009020 moveq r2, 0                                   |             r2 = 0;
                                                             |             goto label_78;
                                                             |         }
                                                             |     }
                                                             | label_78:
    0x00009022 ldr.w r0, [r0, ip]                            |     r0 = *((r0 + ip));
    0x00009026 mov.w ip, 0                                   |     
    0x0000902a ldr r3, [r7, 0x38]                            |     r3 = *((r7 + 0x38));
    0x0000902c mov r1, fp                                    |     r1 = fp;
    0x0000902e str r2, [sp]                                  |     *(sp) = r2;
    0x00009030 add.w r2, r7, 0x54                            |     r2 = r7 + 0x54;
    0x00009034 add r0, r3                                    |     r0 += r3;
    0x00009036 movs r3, 9                                    |     r3 = 9;
    0x00009038 strd r3, ip, [sp, 8]                          |     __asm ("strd r3, ip, [sp, 8]");
    0x0000903c movs r3, 1                                    |     r3 = 1;
    0x0000903e str r3, [sp, 4]                               |     *(arg_4h) = r3;
    0x00009040 ldr r3, [r7, 0x3c]                            |     r3 = *((r7 + 0x3c));
    0x00009042 bl 0x7ac8                                     |     fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x00009046 ldr r1, [r7, 0x54]                            |     r1 = *((r7 + 0x54));
    0x00009048 mov r3, r0                                    |     r3 = r0;
    0x0000904a str.w r0, [fp, 0x228]                         |     __asm ("str.w r0, [arg_228h]");
    0x0000904e str.w r1, [fp, 0x22c]                         |     __asm ("str.w r1, [arg_22ch]");
                                                             | label_68:
    0x00009052 cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00009054 bne.w 0xa3b4                                  |         goto label_79;
                                                             |     }
                                                             | label_63:
    0x00009058 ldr.w r3, [pc, 0x9dc]                         |     
    0x0000905c add r3, pc                                    |     r3 = 0x12a98;
                                                             | label_18:
    0x0000905e adds r6, 8                                    |     r6 += 8;
    0x00009060 str.w r3, [r8, 4]                             |     __asm ("str.w r3, [r8, 4]");
    0x00009064 cmp sl, r6                                    |     
                                                             |     if (sl > r6) {
    0x00009066 bhi 0x8fac                                    |         goto label_0;
                                                             |     }
                                                             | label_10:
    0x00009068 ldr r3, [r7, 0x30]                            |     r3 = *((r7 + 0x30));
    0x0000906a ldr r2, [r7, 0x24]                            |     r2 = *((r7 + 0x24));
    0x0000906c cmp r3, r2                                    |     
                                                             |     if (r3 != r2) {
    0x0000906e bne.w 0x9a06                                  |         goto label_80;
                                                             |     }
    0x00009072 ldr r0, [r7, 0x20]                            |     r0 = *((r7 + 0x20));
    0x00009074 movs r2, 0x20                                 |     r2 = 0x20;
    0x00009076 movs r1, 0                                    |     r1 = 0;
    0x00009078 blx 0x15da0                                   |     fcn_00015da0 (r0, r1);
    0x0000907c ldr.w r3, [fp, 0x3c]                          |     r3 = *(arg_3ch);
    0x00009080 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00009082 beq.w 0x9ff4                                  |         goto label_81;
                                                             |     }
    0x00009086 ldr r2, [r3, 4]                               |     r2 = *((r3 + 4));
    0x00009088 ldr.w r3, [fp, 0x40]                          |     r3 = *(arg_40h);
    0x0000908c ldr.w r0, [fp, 0xc4]                          |     r0 = *(arg_c4h);
    0x00009090 ldr r1, [r3, 4]                               |     r1 = *((r3 + 4));
    0x00009092 adds r3, r2, r1                               |     r3 = r2 + r1;
                                                             |     if (r0 != 0) {
    0x00009094 cbz r0, 0x909a                                |         
    0x00009096 ldr r0, [r0, 4]                               |         r0 = *((r0 + 4));
    0x00009098 str r0, [r7, 0x60]                            |         *((r7 + 0x60)) = r0;
                                                             |     }
                                                             | label_47:
    0x0000909a ldr.w r0, [fp, 0x70]                          |     r0 = *(arg_70h);
                                                             |     if (r0 != 0) {
    0x0000909e cbz r0, 0x90a8                                |         
    0x000090a0 ldr r0, [r0, 4]                               |         r0 = *((r0 + 4));
    0x000090a2 cmp r0, 7                                     |         
                                                             |         if (r0 == 7) {
    0x000090a4 beq.w 0xa2e8                                  |             goto label_82;
                                                             |         }
                                                             |     }
                                                             | label_53:
    0x000090a8 ldr r3, [r7, 0x20]                            |     r3 = *((r7 + 0x20));
    0x000090aa str r3, [r7, 0x30]                            |     *((r7 + 0x30)) = r3;
    0x000090ac ldr.w r3, [pc, 0x98c]                         |     r3 = *(0x00009a3c);
    0x000090b0 add r3, pc                                    |     r3 += pc;
    0x000090b2 add.w r3, r3, 0x598                           |     r3 += 0x598;
    0x000090b6 str r3, [r7, 0x20]                            |     *((r7 + 0x20)) = r3;
    0x000090b8 ldr.w r3, [pc, 0x984]                         |     r3 = *(0x00009a40);
    0x000090bc add r3, pc                                    |     r3 += pc;
    0x000090be str r3, [r7, 0x28]                            |     *((r7 + 0x28)) = r3;
    0x000090c0 ldr.w r3, [pc, 0x980]                         |     r3 = *(0x00009a44);
    0x000090c4 add r3, pc                                    |     r3 += pc;
    0x000090c6 str r3, [r7, 0x14]                            |     *((r7 + 0x14)) = r3;
    0x000090c8 ldr.w r3, [pc, 0x97c]                         |     
    0x000090cc add r3, pc                                    |     r3 = 0x12b18;
    0x000090ce str r3, [r7, 0x10]                            |     *((r7 + 0x10)) = r3;
                                                             | label_3:
    0x000090d0 adds r3, r2, r1                               |     r3 = r2 + r1;
    0x000090d2 ldr r1, [r7, 0x20]                            |     r1 = *((r7 + 0x20));
    0x000090d4 str r3, [r7, 0x48]                            |     *((r7 + 0x48)) = r3;
    0x000090d6 ldr r3, [r7, 0x30]                            |     r3 = *((r7 + 0x30));
    0x000090d8 cmp fp, r1                                    |     
    0x000090da ldr.w sl, [fp]                                |     sl = *(fp);
    0x000090de ldr r5, [r3, 8]                               |     r5 = *((r3 + 8));
    0x000090e0 ldr.w r3, [fp, 0x38]                          |     r3 = *(arg_38h);
    0x000090e4 ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x000090e6 add.w r5, r5, r5, lsl 1                       |     r5 += (r5 << 1);
    0x000090ea add.w r5, r2, r5, lsl 2                       |     r5 = r2 + (r5 << 2);
    0x000090ee str r3, [r7, 0x4c]                            |     *((r7 + 0x4c)) = r3;
    0x000090f0 mov r3, r2                                    |     r3 = r2;
                                                             |     if (fp != r1) {
    0x000090f2 beq 0x9106                                    |         
    0x000090f4 cmp.w sl, 0                                   |         
                                                             |         if (sl != 0) {
    0x000090f8 bne.w 0x98a4                                  |             goto label_83;
                                                             |         }
    0x000090fc ldr.w r1, [fp, 0x120]                         |         r1 = *(arg_120h);
    0x00009100 cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x00009102 beq.w 0x98a4                                  |             goto label_83;
                                                             |         }
                                                             |     }
                                                             | label_19:
    0x00009106 ldr.w r3, [fp, 0xe8]                          |     r3 = *(arg_e8h);
    0x0000910a cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0000910c beq.w 0x98c6                                  |         goto label_84;
                                                             |     }
                                                             | label_20:
    0x00009110 ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x00009112 str r3, [r7, 0x40]                            |     *((r7 + 0x40)) = r3;
    0x00009114 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009116 cmp r3, r5                                    |     
                                                             |     if (r3 < r5) {
    0x00009118 bls.w 0x92ca                                  |         goto label_21;
                                                             |     }
                                                             |     do {
    0x0000911c ldrd r8, r4, [r5]                             |         __asm ("ldrd r8, r4, [r5]");
    0x00009120 ldr r2, [r7, 0x40]                            |         r2 = *((r7 + 0x40));
    0x00009122 ldr.w r0, [fp, 0x174]                         |         r0 = *(arg_174h);
    0x00009126 add.w r3, sl, r8                              |         r3 = sl + r8;
    0x0000912a str r3, [r7, 0x44]                            |         *((r7 + 0x44)) = r3;
    0x0000912c lsrs r3, r4, 8                                |         r3 = r4 >> 8;
    0x0000912e uxtb r4, r4                                   |         r4 = (int8_t) r4;
    0x00009130 ldrh.w r1, [r2, r3, lsl 1]                    |         offset_1 = r3 << 1;
                                                             |         r1 = *((r2 + offset_1));
    0x00009134 lsl.w sb, r3, 4                               |         sb = r3 << 4;
    0x00009138 ldr r3, [r7, 0x4c]                            |         r3 = *((r7 + 0x4c));
    0x0000913a cmp r4, 0x17                                  |         
    0x0000913c add.w r6, r3, sb                              |         r6 = r3 + sb;
    0x00009140 str r6, [r7, 0x54]                            |         *((r7 + 0x54)) = r6;
                                                             |         if (r4 == 0x17) {
    0x00009142 beq.w 0x9404                                  |             goto label_85;
                                                             |         }
    0x00009146 cmp r4, 0                                     |         
                                                             |         if (r4 != 0) {
    0x00009148 beq.w 0x92c0                                  |             
    0x0000914c ldrb r2, [r6, 0xc]                            |             r2 = *((r6 + 0xc));
    0x0000914e lsrs r3, r2, 4                                |             r3 = r2 >> 4;
                                                             |             if (r3 == r2) {
    0x00009150 beq.w 0x931a                                  |                 goto label_86;
                                                             |             }
    0x00009154 ldrb r3, [r6, 0xd]                            |             r3 = *((r6 + 0xd));
    0x00009156 and r3, r3, 3                                 |             r3 &= 3;
    0x0000915a subs r3, 1                                    |             r3--;
    0x0000915c cmp r3, 1                                     |             
                                                             |             if (r3 < 1) {
    0x0000915e bls.w 0x931a                                  |                 goto label_86;
                                                             |             }
    0x00009162 sub.w r3, r4, 0x14                            |             r3 = r4 - 0x14;
    0x00009166 ldr.w r2, [fp, 0x220]                         |             r2 = *(arg_220h);
    0x0000916a clz r3, r3                                    |             r3 &= r3;
    0x0000916e sub.w ip, r4, 0x15                            |             
    0x00009172 lsrs r3, r3, 5                                |             r3 >>= 5;
    0x00009174 clz ip, ip                                    |             
    0x00009178 lsr.w ip, ip, 5                               |             
    0x0000917c cmp r6, r2                                    |             
    0x0000917e lsl.w r3, r3, 1                               |             r3 <<= 1;
    0x00009182 orr.w r3, r3, ip, lsl 2                       |             r3 |= (ip << 2);
    0x00009186 sub.w ip, r4, 0xd                             |             
                                                             |             if (r6 == r2) {
    0x0000918a beq.w 0x99cc                                  |                 goto label_87;
                                                             |             }
    0x0000918e cmp.w ip, 9                                   |             
                                                             |             if (ip <= 9) {
    0x00009192 bhi 0x91a0                                    |                 
                                                             | label_22:
    0x00009194 ldr.w r2, [pc, 0x8b4]                         |                 
    0x00009198 add r2, pc                                    |                 
    0x0000919a ldr.w r2, [r2, ip, lsl 2]                     |                 r2 = *(0x12be8);
    0x0000919e orrs r3, r2                                   |                 r3 |= r2;
                                                             |             }
                                                             | label_36:
    0x000091a0 ubfx r2, r1, 0, 0xf                           |             r2 = (r1 >> 0) & ((1 << 0xf) - 1);
    0x000091a4 strd r6, r3, [fp, 0x220]                      |             __asm ("strd r6, r3, [fp, 0x220]");
    0x000091a8 adds.w r2, r0, r2, lsl 4                      |             r2 = r0 + (r2 << 4);
                                                             |             if (r2 != r0) {
    0x000091ac beq 0x91b6                                    |                 
    0x000091ae ldr r1, [r2, 4]                               |                 r1 = *((r2 + 4));
    0x000091b0 cmp r1, 0                                     |                 
    0x000091b2 it eq                                         |                 
                                                             |                 if (r1 == 0) {
    0x000091b4 moveq r2, 0                                   |                     r2 = 0;
                                                             |                     goto label_88;
                                                             |                 }
                                                             |             }
                                                             | label_88:
    0x000091b6 ldr r1, [r7, 0x4c]                            |             r1 = *((r7 + 0x4c));
    0x000091b8 ldr.w r0, [r1, sb]                            |             r0 = *((r1 + sb));
    0x000091bc mov r1, fp                                    |             r1 = fp;
    0x000091be strd r2, r3, [sp]                             |             __asm ("strd r2, r3, [sp]");
    0x000091c2 movs r2, 0                                    |             r2 = 0;
    0x000091c4 ldr r3, [r7, 0x38]                            |             r3 = *((r7 + 0x38));
    0x000091c6 add r0, r3                                    |             r0 += r3;
    0x000091c8 movs r3, 9                                    |             r3 = 9;
    0x000091ca strd r3, r2, [sp, 8]                          |             __asm ("strd r3, r2, [sp, 8]");
    0x000091ce add.w r2, r7, 0x54                            |             r2 = r7 + 0x54;
    0x000091d2 ldr r3, [r7, 0x3c]                            |             r3 = *((r7 + 0x3c));
    0x000091d4 bl 0x7ac8                                     |             r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x000091d8 mov r1, r0                                    |             r1 = r0;
    0x000091da str.w r0, [fp, 0x228]                         |             __asm ("str.w r0, [arg_228h]");
    0x000091de ldr r0, [r7, 0x54]                            |             r0 = *((r7 + 0x54));
    0x000091e0 str.w r0, [fp, 0x22c]                         |             __asm ("str.w r0, [arg_22ch]");
                                                             | label_23:
    0x000091e4 cmp r0, 0                                     |             
                                                             |             if (r0 != 0) {
    0x000091e6 bne.w 0x9400                                  |                 goto label_89;
                                                             |             }
    0x000091ea cmp r4, 0x16                                  |             
                                                             |             if (r4 > 0x16) {
    0x000091ec bhi.w 0x92fc                                  |                 goto label_6;
                                                             |             }
    0x000091f0 subs r3, r4, 1                                |             r3 = r4 - 1;
    0x000091f2 cmp r3, 0x15                                  |             
                                                             |             if (r3 <= 0x15) {
    0x000091f4 bhi 0x92aa                                    |                 
                                                             |                 /* switch table (22 cases) at 0x91fa */
    0x000091f6 tbb [pc, r3]                                  |                 __asm ("tbb [0x000091fc]");
                                                             | label_2:
    0x00009210 ldr r3, [r7, 0x2c]                            |                 r3 = *((r7 + 0x2c));
    0x00009212 cmp r3, 0                                     |                 
                                                             |                 if (r3 != 0) {
    0x00009214 bne.w 0xa4ec                                  |                     goto label_90;
                                                             |                 }
                                                             | label_64:
    0x00009218 ldrb.w r3, [fp, 0x198]                        |                 r3 = *(arg_198h);
    0x0000921c movs r4, 2                                    |                 
    0x0000921e movt r4, 0xf                                  |                 r4 = 0xf0002;
    0x00009222 orr r3, r3, 4                                 |                 r3 |= 4;
    0x00009226 strb.w r3, [fp, 0x198]                        |                 *(arg_198h) = r3;
    0x0000922a ldr r3, [r7, 0x1c]                            |                 r3 = *((r7 + 0x1c));
    0x0000922c mov r5, r3                                    |                 r5 = r3;
    0x0000922e cmp r3, 0                                     |                 
                                                             |                 if (r3 != 0) {
    0x00009230 bne.w 0x9e1e                                  |                     goto label_41;
                                                             |                 }
                                                             | label_40:
    0x00009234 ldr.w r3, [fp, 0x254]                         |                 r3 = *(arg_254h);
    0x00009238 cmp r3, 0                                     |                 
                                                             |                 if (r3 != 0) {
    0x0000923a bne.w 0x9daa                                  |                     goto label_91;
                                                             |                 }
    0x0000923e adds r7, 0x7c                                 |                 r7 += 0x7c;
    0x00009240 mov sp, r7                                    |                 
    0x00009242 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |                 
                                                             | label_74:
    0x000092a6 str r3, [r4, r5]                              |                 *((r4 + r5)) = r3;
    0x000092a8 b 0x8fa6                                      |                 goto label_1;
                                                             |             }
                                                             | label_5:
    0x000092aa invalid                                       |             
                                                             | label_11:
    0x000092ac movs r2, 0                                    |             r2 = 0;
    0x000092ae mov r1, sl                                    |             r1 = sl;
    0x000092b0 mov r0, fp                                    |             r0 = fp;
    0x000092b2 bl 0x8e34                                     |             fcn_00008e34 (r0, r1, r2);
    0x000092b6 movs r3, 0                                    |             r3 = 0;
    0x000092b8 invalid                                       |             
    0x000092ba add r2, r3                                    |             r2 += r3;
    0x000092bc str.w r2, [sl, r8]                            |             __asm ("str.w r2, [sl, r8]");
                                                             |         }
                                                             | label_4:
    0x000092c0 ldr r3, [r7, 0x48]                            |         r3 = *((r7 + 0x48));
    0x000092c2 adds r5, 0xc                                  |         r5 += 0xc;
    0x000092c4 cmp r3, r5                                    |         
    0x000092c6 bhi.w 0x911c                                  |         
                                                             |     } while (r3 > r5);
                                                             | label_21:
    0x000092ca ldr r3, [r7, 0x30]                            |     r3 = *((r7 + 0x30));
    0x000092cc ldr r2, [r7, 0x24]                            |     r2 = *((r7 + 0x24));
    0x000092ce cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x000092d0 beq 0x9210                                    |         goto label_2;
                                                             |     }
    0x000092d2 ldr r3, [r7, 0x30]                            |     r3 = *((r7 + 0x30));
    0x000092d4 ldrd r2, r1, [r3, 0x10]                       |     __asm ("ldrd r2, r1, [r3, 0x10]");
    0x000092d8 adds r3, 0x10                                 |     r3 += 0x10;
    0x000092da str r3, [r7, 0x30]                            |     *((r7 + 0x30)) = r3;
    0x000092dc b 0x90d0                                      |     goto label_3;
    0x000092de cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x000092e0 beq 0x92c0                                    |         goto label_4;
                                                             |     }
    0x000092e2 ldr.w r3, [r1, 0x248]                         |     r3 = *((r1 + 0x248));
    0x000092e6 str.w r3, [sl, r8]                            |     __asm ("str.w r3, [sl, r8]");
    0x000092e8 adds r0, 8                                    |     r0 += 8;
    0x000092ea b 0x92c0                                      |     goto label_4;
    0x000092ec movs r3, 0                                    |     r3 = 0;
    0x000092ee mov r1, r3                                    |     r1 = r3;
    0x000092f0 ldr r2, [r7, 0x44]                            |     r2 = *((r7 + 0x44));
    0x000092f2 ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x000092f4 mov r0, fp                                    |     r0 = fp;
    0x000092f6 bl 0x8bf8                                     |     fcn_00008bf8 (r0, r1, r2, r3);
    0x000092fa b 0x92c0                                      |     goto label_4;
                                                             | label_6:
    0x000092fc cmp r4, 0xa0                                  |     
                                                             |     if (r4 != 0xa0) {
    0x000092fe bne 0x92aa                                    |         goto label_5;
                                                             |     }
    0x00009300 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x00009302 ldr.w r3, [fp]                                |     r3 = *(fp);
    0x00009306 add r3, r2                                    |     r3 += r2;
    0x00009308 ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
                                                             |     if (r2 == 0) {
    0x0000930a cbnz r2, 0x9314                               |         
                                                             | label_9:
    0x0000930c ldr r2, [r7, 0x28]                            |         r2 = *((r7 + 0x28));
    0x0000930e ldr r0, [r2, 0x48]                            |         r0 = *((r2 + 0x48));
    0x00009310 blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
    0x00009312 mov r3, r0                                    |         r3 = r0;
                                                             |     }
    0x00009314 str.w r3, [sl, r8]                            |     __asm ("str.w r3, [sl, r8]");
    0x00009318 b 0x92c0                                      |     goto label_4;
                                                             | label_86:
    0x0000931a mov r1, fp                                    |     r1 = fp;
    0x0000931c mov r0, r6                                    |     r0 = r6;
                                                             | label_7:
    0x0000931e ldrh.w ip, [r0, 0xe]                          |     ip = *((r0 + 0xe));
    0x00009322 movw r3, 0xfff1                               |     r3 = 0xfff1;
    0x00009326 ldr r0, [r0, 4]                               |     r0 = *((r0 + 4));
    0x00009328 and r2, r2, 0xf                               |     r2 &= 0xf;
    0x0000932c cmp ip, r3                                    |     
    0x0000932e ite ne                                        |     
                                                             |     if (ip == r3) {
    0x00009330 ldrne r3, [r1]                                |         r3 = *(r1);
                                                             |     }
                                                             |     if (ip != r3) {
    0x00009332 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00009334 cmp r2, 0xa                                   |     
    0x00009336 add r3, r0                                    |     r3 += r0;
                                                             |     if (r2 == 0xa) {
    0x00009338 beq 0x9412                                    |         goto label_92;
                                                             |     }
                                                             | label_8:
    0x0000933a cmp r4, 0x16                                  |     
                                                             |     if (r4 > 0x16) {
    0x0000933c bhi 0x92fc                                    |         goto label_6;
                                                             |     }
    0x0000933e subs r2, r4, 1                                |     r2 = r4 - 1;
    0x00009340 cmp r2, 0x15                                  |     
                                                             |     if (r2 > 0x15) {
    0x00009342 bhi 0x92aa                                    |         goto label_5;
                                                             |     }
    0x00009344 adr r0, 8                                     |     r0 = 8;
    0x00009346 ldr.w r2, [r0, r2, lsl 2]                     |     offset_2 = r2 << 2;
                                                             |     r2 = *((r0 + offset_2));
    0x00009348 movs r0, 0x22                                 |     r0 = 0x22;
    0x0000934a add r0, r2                                    |     r0 += r2;
                                                             |     /* switch table (22 cases) at 0x9350 */
    0x0000934c bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_89:
    0x00009400 ldrb r2, [r0, 0xc]                            |     r2 = *((r0 + 0xc));
    0x00009402 b 0x931e                                      |     goto label_7;
                                                             | label_85:
    0x00009404 ldr.w r3, [fp]                                |     r3 = *(fp);
    0x00009408 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x0000940a add r3, r2                                    |     r3 += r2;
    0x0000940c str.w r3, [sl, r8]                            |     __asm ("str.w r3, [sl, r8]");
    0x00009410 b 0x92c0                                      |     goto label_4;
                                                             | label_92:
    0x00009412 ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
    0x00009414 cmp.w ip, 0                                   |     
    0x00009418 clz r2, r2                                    |     r2 &= r2;
    0x0000941c lsr.w r2, r2, 5                               |     r2 >>= 5;
    0x00009420 it eq                                         |     
                                                             |     if (ip != 0) {
    0x00009422 moveq r2, 0                                   |         r2 = 0;
                                                             |     }
    0x00009424 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00009426 beq 0x933a                                    |         goto label_8;
                                                             |     }
    0x00009428 ldr.w r2, [pc, 0x634]                         |     r2 = *(0x00009a60);
    0x0000942c str r1, [r7, 0x18]                            |     *((r7 + 0x18)) = r1;
    0x0000942e add r2, pc                                    |     r2 += pc;
    0x00009430 ldr r0, [r2, 0x48]                            |     r0 = *((r2 + 0x48));
    0x00009432 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00009434 cmp r4, 0x16                                  |     
    0x00009436 mov r3, r0                                    |     r3 = r0;
                                                             |     if (r4 > 0x16) {
    0x00009438 bhi 0x94d2                                    |         goto label_93;
                                                             |     }
    0x0000943a subs r2, r4, 1                                |     r2 = r4 - 1;
    0x0000943c ldr r1, [r7, 0x18]                            |     r1 = *((r7 + 0x18));
    0x0000943e cmp r2, 0x15                                  |     
                                                             |     if (r2 > 0x15) {
    0x00009440 bhi.w 0x92aa                                  |         goto label_5;
                                                             |     }
    0x00009444 adr r0, 8                                     |     r0 = 8;
    0x00009446 ldr.w r2, [r0, r2, lsl 2]                     |     offset_3 = r2 << 2;
                                                             |     r2 = *((r0 + offset_3));
    0x0000944a add r0, r2                                    |     r0 += r2;
                                                             |     /* switch table (22 cases) at 0x9450 */
    0x0000944c bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_93:
    0x000094d2 cmp r4, 0xa0                                  |     
                                                             |     if (r4 != 0xa0) {
    0x000094d4 bne.w 0x92aa                                  |         goto label_5;
                                                             |     }
    0x000094d8 ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x000094da ldr.w r2, [fp]                                |     r2 = *(fp);
    0x000094de add r3, r2                                    |     r3 += r2;
    0x000094e0 b 0x930c                                      |     goto label_9;
                                                             | label_73:
    0x000094e2 ldr.w r3, [pc, 0x580]                         |     r3 = *(0x00009a64);
    0x000094e6 add.w sl, r6, r2, lsl 3                       |     sl = r6 + (r2 << 3);
    0x000094ea ldr.w r2, [fp, 0x38]                          |     r2 = *(arg_38h);
    0x000094ee add r3, pc                                    |     r3 += pc;
    0x000094f0 ldr r2, [r2, 4]                               |     r2 = *((r2 + 4));
    0x000094f2 add.w r3, r3, 0x598                           |     r3 += 0x598;
    0x000094f6 cmp r4, 0                                     |     
    0x000094f8 it ne                                         |     
                                                             |     if (r4 != 0) {
    0x000094fa cmpne fp, r3                                  |         __asm ("cmpne fp, r3");
                                                             |     }
    0x000094fc str r2, [r7, 0x4c]                            |     *((r7 + 0x4c)) = r2;
                                                             |     if (r4 != 0) {
    0x000094fe bne.w 0x9e88                                  |         goto label_94;
                                                             |     }
                                                             | label_44:
    0x00009502 ldr.w r3, [fp, 0xe8]                          |     r3 = *(arg_e8h);
    0x00009506 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00009508 beq.w 0x9ea6                                  |         goto label_95;
                                                             |     }
                                                             | label_45:
    0x0000950c ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x0000950e str r3, [r7, 0x40]                            |     *((r7 + 0x40)) = r3;
    0x00009510 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009512 cmp r3, sl                                    |     
                                                             |     if (r3 < sl) {
    0x00009514 bls.w 0x9068                                  |         goto label_10;
                                                             |     }
    0x00009518 ldr.w r3, [pc, 0x54c]                         |     r3 = *(0x00009a68);
    0x0000951c mov sb, r4                                    |     sb = r4;
    0x0000951e add r3, pc                                    |     r3 += pc;
    0x00009520 str r3, [r7, 0x10]                            |     *((r7 + 0x10)) = r3;
                                                             |     do {
                                                             | label_13:
    0x00009522 ldrd r4, r5, [sl]                             |         __asm ("ldrd r4, r5, [sl]");
    0x00009526 ldr r2, [r7, 0x40]                            |         r2 = *((r7 + 0x40));
    0x00009528 ldr.w r0, [fp, 0x174]                         |         r0 = *(arg_174h);
    0x0000952c add.w r3, sb, r4                              |         r3 = sb + r4;
    0x00009530 str r3, [r7, 0x44]                            |         *((r7 + 0x44)) = r3;
    0x00009532 lsrs r3, r5, 8                                |         r3 = r5 >> 8;
    0x00009534 uxtb r5, r5                                   |         r5 = (int8_t) r5;
    0x00009536 ldrh.w r2, [r2, r3, lsl 1]                    |         offset_4 = r3 << 1;
                                                             |         r2 = *((r2 + offset_4));
    0x0000953a lsl.w r8, r3, 4                               |         r8 = r3 << 4;
    0x0000953e ldr r3, [r7, 0x4c]                            |         r3 = *((r7 + 0x4c));
    0x00009540 cmp r5, 0x17                                  |         
    0x00009542 add.w r6, r3, r8                              |         r6 = r3 + r8;
    0x00009546 str r6, [r7, 0x54]                            |         *((r7 + 0x54)) = r6;
                                                             |         if (r5 == 0x17) {
    0x00009548 beq.w 0x9842                                  |             goto label_96;
                                                             |         }
    0x0000954c cmp r5, 0                                     |         
                                                             |         if (r5 != 0) {
    0x0000954e beq 0x9634                                    |             
    0x00009550 ldrb r1, [r6, 0xc]                            |             r1 = *((r6 + 0xc));
    0x00009552 lsrs r3, r1, 4                                |             r3 = r1 >> 4;
                                                             |             if (r3 == r1) {
    0x00009554 beq.w 0x967a                                  |                 goto label_97;
                                                             |             }
    0x00009558 ldrb r3, [r6, 0xd]                            |             r3 = *((r6 + 0xd));
    0x0000955a and r3, r3, 3                                 |             r3 &= 3;
    0x0000955e subs r3, 1                                    |             r3--;
    0x00009560 cmp r3, 1                                     |             
                                                             |             if (r3 < 1) {
    0x00009562 bls.w 0x967a                                  |                 goto label_97;
                                                             |             }
    0x00009566 sub.w r3, r5, 0x15                            |             r3 = r5 - 0x15;
    0x0000956a ldr.w r1, [fp, 0x220]                         |             r1 = *(arg_220h);
    0x0000956e clz r3, r3                                    |             r3 &= r3;
    0x00009572 sub.w ip, r5, 0x14                            |             
    0x00009576 lsrs r3, r3, 5                                |             r3 >>= 5;
    0x00009578 clz ip, ip                                    |             
    0x0000957c lsr.w ip, ip, 5                               |             
    0x00009580 cmp r6, r1                                    |             
    0x00009582 lsl.w r3, r3, 2                               |             r3 <<= 2;
    0x00009586 orr.w r3, r3, ip, lsl 1                       |             r3 |= (ip << 1);
    0x0000958a sub.w ip, r5, 0xd                             |             
                                                             |             if (r6 == r1) {
    0x0000958e beq.w 0x9d6a                                  |                 goto label_98;
                                                             |             }
    0x00009592 cmp.w ip, 9                                   |             
                                                             |             if (ip <= 9) {
    0x00009596 bhi 0x95a4                                    |                 
                                                             | label_38:
    0x00009598 ldr.w r1, [pc, 0x4d0]                         |                 
    0x0000959c add r1, pc                                    |                 
    0x0000959e ldr.w r1, [r1, ip, lsl 2]                     |                 r1 = *(0x1300c);
    0x000095a2 orrs r3, r1                                   |                 r3 |= r1;
                                                             |             }
                                                             | label_34:
    0x000095a4 ubfx r2, r2, 0, 0xf                           |             r2 = (r2 >> 0) & ((1 << 0xf) - 1);
    0x000095a8 strd r6, r3, [fp, 0x220]                      |             __asm ("strd r6, r3, [fp, 0x220]");
    0x000095ac adds.w r2, r0, r2, lsl 4                      |             r2 = r0 + (r2 << 4);
                                                             |             if (r2 != r0) {
    0x000095b0 beq 0x95ba                                    |                 
    0x000095b2 ldr r1, [r2, 4]                               |                 r1 = *((r2 + 4));
    0x000095b4 cmp r1, 0                                     |                 
    0x000095b6 it eq                                         |                 
                                                             |                 if (r1 == 0) {
    0x000095b8 moveq r2, 0                                   |                     r2 = 0;
                                                             |                     goto label_99;
                                                             |                 }
                                                             |             }
                                                             | label_99:
    0x000095ba ldr r1, [r7, 0x4c]                            |             r1 = *((r7 + 0x4c));
    0x000095bc mov.w ip, 0                                   |             
    0x000095c0 ldr.w r0, [r1, r8]                            |             r0 = *((r1 + r8));
    0x000095c4 mov r1, fp                                    |             r1 = fp;
    0x000095c6 strd r2, r3, [sp]                             |             __asm ("strd r2, r3, [sp]");
    0x000095ca add.w r2, r7, 0x54                            |             r2 = r7 + 0x54;
    0x000095ce ldr r3, [r7, 0x38]                            |             r3 = *((r7 + 0x38));
    0x000095d0 add r0, r3                                    |             r0 += r3;
    0x000095d2 movs r3, 9                                    |             r3 = 9;
    0x000095d4 strd r3, ip, [sp, 8]                          |             __asm ("strd r3, ip, [sp, 8]");
    0x000095d8 ldr r3, [r7, 0x3c]                            |             r3 = *((r7 + 0x3c));
    0x000095da bl 0x7ac8                                     |             r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x000095de mov r2, r0                                    |             r2 = r0;
    0x000095e0 str.w r0, [fp, 0x228]                         |             __asm ("str.w r0, [arg_228h]");
    0x000095e4 ldr r0, [r7, 0x54]                            |             r0 = *((r7 + 0x54));
    0x000095e6 str.w r0, [fp, 0x22c]                         |             __asm ("str.w r0, [arg_22ch]");
                                                             | label_35:
    0x000095ea cmp r0, 0                                     |             
                                                             |             if (r0 != 0) {
    0x000095ec bne.w 0x983e                                  |                 goto label_100;
                                                             |             }
    0x000095f0 cmp r5, 0x16                                  |             
                                                             |             if (r5 > 0x16) {
    0x000095f2 bhi 0x965c                                    |                 goto label_16;
                                                             |             }
    0x000095f4 subs r3, r5, 1                                |             r3 = r5 - 1;
    0x000095f6 cmp r3, 0x15                                  |             
                                                             |             if (r3 <= 0x15) {
    0x000095f8 bhi 0x962a                                    |                 
                                                             |                 /* switch table (23 cases) at 0x95fe */
    0x000095fa tbh [pc, r3, lsl 1]                           |                 __asm ("tbh [pc, r3, lsl 1]");
                                                             |             }
                                                             | label_14:
    0x0000962a invalid                                       |             
    0x0000962c b 0x92ac                                      |             goto label_11;
    0x0000962e movs r3, 0                                    |             r3 = 0;
                                                             | label_15:
    0x00009630 invalid                                       |             
    0x00009632 adds r0, 4                                    |             r0 += 4;
                                                             |         }
                                                             | label_12:
    0x00009634 ldr r3, [r7, 0x48]                            |         r3 = *((r7 + 0x48));
    0x00009636 add.w sl, sl, 8                               |         sl += 8;
    0x0000963a cmp r3, sl                                    |         
    0x0000963c bhi.w 0x9522                                  |         
                                                             |     } while (r3 > sl);
    0x00009640 b 0x9068                                      |     goto label_10;
    0x00009642 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00009644 beq 0x9634                                    |         goto label_12;
                                                             |     }
    0x00009646 ldr.w r3, [r2, 0x248]                         |     r3 = *((r2 + 0x248));
    0x0000964a add.w sl, sl, 8                               |     sl += 8;
    0x0000964e str.w r3, [sb, r4]                            |     __asm ("str.w r3, [sb, r4]");
    0x00009652 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009654 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x00009656 bhi.w 0x9522                                  |         goto label_13;
                                                             |     }
    0x0000965a b 0x9068                                      |     goto label_10;
                                                             | label_16:
    0x0000965c cmp r5, 0xa0                                  |     
                                                             |     if (r5 != 0xa0) {
    0x0000965e bne 0x962a                                    |         goto label_14;
                                                             |     }
    0x00009660 ldr.w r2, [sb, r4]                            |     r2 = *((sb + r4));
    0x00009664 ldr.w r3, [fp]                                |     r3 = *(fp);
    0x00009668 add r3, r2                                    |     r3 += r2;
    0x0000966a ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
    0x0000966c cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0000966e bne 0x9630                                    |         goto label_15;
                                                             |     }
                                                             | label_32:
    0x00009670 ldr r2, [r7, 0x10]                            |     r2 = *((r7 + 0x10));
    0x00009672 ldr r0, [r2, 0x48]                            |     r0 = *((r2 + 0x48));
    0x00009674 blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
    0x00009676 mov r3, r0                                    |     r3 = r0;
    0x00009678 b 0x9630                                      |     goto label_15;
                                                             | label_97:
    0x0000967a mov r2, fp                                    |     r2 = fp;
    0x0000967c mov r0, r6                                    |     r0 = r6;
                                                             | label_17:
    0x0000967e ldrh.w ip, [r0, 0xe]                          |     ip = *((r0 + 0xe));
    0x00009682 movw r3, 0xfff1                               |     r3 = 0xfff1;
    0x00009686 ldr r0, [r0, 4]                               |     r0 = *((r0 + 4));
    0x00009688 and r1, r1, 0xf                               |     r1 &= 0xf;
    0x0000968c cmp ip, r3                                    |     
    0x0000968e ite ne                                        |     
                                                             |     if (ip == r3) {
    0x00009690 ldrne r3, [r2]                                |         r3 = *(r2);
                                                             |     }
                                                             |     if (ip != r3) {
    0x00009692 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00009694 cmp r1, 0xa                                   |     
    0x00009696 add r3, r0                                    |     r3 += r0;
                                                             |     if (r1 == 0xa) {
    0x00009698 beq.w 0x9a98                                  |         goto label_101;
                                                             |     }
                                                             | label_25:
    0x0000969c cmp r5, 0x16                                  |     
                                                             |     if (r5 > 0x16) {
    0x0000969e bhi 0x965c                                    |         goto label_16;
                                                             |     }
    0x000096a0 subs r1, r5, 1                                |     r1 = r5 - 1;
    0x000096a2 cmp r1, 0x15                                  |     
                                                             |     if (r1 > 0x15) {
    0x000096a4 bhi 0x962a                                    |         goto label_14;
                                                             |     }
    0x000096a6 adr r0, 8                                     |     r0 = 8;
    0x000096a8 ldr.w r1, [r0, r1, lsl 2]                     |     offset_5 = r1 << 2;
                                                             |     r1 = *((r0 + offset_5));
    0x000096ac add r0, r1                                    |     r0 += r1;
                                                             |     /* switch table (22 cases) at 0x96b0 */
    0x000096ae bx r0                                         |     return uint32_t (*r0)() ();
    0x00009708 movs r3, 0                                    |     r3 = 0;
    0x0000970a ldr r2, [r7, 0x18]                            |     r2 = *((r7 + 0x18));
    0x0000970c cmp fp, r2                                    |     
                                                             |     if (fp == r2) {
    0x0000970e beq.w 0x9fd8                                  |         goto label_102;
                                                             |     }
                                                             | label_46:
    0x00009712 ldr.w r2, [sb, r4]                            |     r2 = *((sb + r4));
    0x00009716 add.w sl, sl, 8                               |     sl += 8;
    0x0000971a add r3, r2                                    |     r3 += r2;
    0x0000971c str.w r3, [sb, r4]                            |     __asm ("str.w r3, [sb, r4]");
    0x00009720 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009722 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x00009724 bhi.w 0x9522                                  |         goto label_13;
                                                             |     }
    0x00009728 b 0x9068                                      |     goto label_10;
    0x0000972a movs r3, 0                                    |     r3 = 0;
    0x0000972c ldr.w r0, [sb, r4]                            |     r0 = *((sb + r4));
    0x0000972e movs r4, r0                                   |     r4 = r0;
    0x00009730 mov r1, r3                                    |     r1 = r3;
    0x00009732 ldr r2, [r7, 0x44]                            |     r2 = *((r7 + 0x44));
    0x00009734 add.w sl, sl, 8                               |     sl += 8;
    0x00009738 sbfx r3, r0, 0, 0x18                          |     __asm ("sbfx r3, r0, 0, 0x18");
    0x0000973c mov r0, fp                                    |     r0 = fp;
    0x0000973e lsls r3, r3, 2                                |     r3 <<= 2;
    0x00009740 bl 0x8bf8                                     |     fcn_00008bf8 (r0, r1, r2, r3);
    0x00009744 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009746 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x00009748 bhi.w 0x9522                                  |         goto label_13;
                                                             |     }
    0x0000974c b 0x9068                                      |     goto label_10;
                                                             | label_100:
    0x0000983e ldrb r1, [r0, 0xc]                            |     r1 = *((r0 + 0xc));
    0x00009840 b 0x967e                                      |     goto label_17;
                                                             | label_96:
    0x00009842 ldr.w r3, [sb, r4]                            |     r3 = *((sb + r4));
    0x00009846 add.w sl, sl, 8                               |     sl += 8;
    0x0000984a ldr.w r2, [fp]                                |     r2 = *(fp);
    0x0000984e add r3, r2                                    |     r3 += r2;
    0x00009850 str.w r3, [sb, r4]                            |     __asm ("str.w r3, [sb, r4]");
    0x00009854 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009856 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x00009858 bhi.w 0x9522                                  |         goto label_13;
                                                             |     }
    0x0000985c b 0x9068                                      |     goto label_10;
                                                             | label_76:
    0x0000985e mov r3, fp                                    |     r3 = fp;
                                                             | label_60:
    0x00009860 ldrh r2, [r1, 0xe]                            |     r2 = *((r1 + 0xe));
    0x00009862 movw r0, 0xfff1                               |     r0 = 0xfff1;
    0x00009866 ldr r1, [r1, 4]                               |     r1 = *((r1 + 4));
    0x00009868 and lr, lr, 0xf                               |     lr &= 0xf;
    0x0000986c cmp r2, r0                                    |     
    0x0000986e ite ne                                        |     
                                                             |     if (r2 == r0) {
    0x00009870 ldrne r0, [r3]                                |         r0 = *(r3);
                                                             |     }
                                                             |     if (r2 != r0) {
    0x00009872 moveq r0, 0                                   |         r0 = 0;
                                                             |     }
    0x00009874 cmp.w lr, 0xa                                 |     
    0x00009878 str r1, [r7, 0x4c]                            |     *((r7 + 0x4c)) = r1;
                                                             |     if (lr == 0xa) {
    0x0000987a beq.w 0xa4bc                                  |         goto label_103;
                                                             |     }
                                                             | label_61:
    0x0000987e ldr r2, [r7, 0x54]                            |     r2 = *((r7 + 0x54));
                                                             | label_62:
    0x00009880 ldr r1, [r6, 4]                               |     r1 = *((r6 + 4));
    0x00009882 lsrs r1, r1, 8                                |     r1 >>= 8;
    0x00009884 ldr.w r1, [r3, 0x244]                         |     r1 = *((r3 + 0x244));
    0x00009888 ite eq                                        |     
                                                             |     if (r1 != r1) {
    0x0000988a ldreq r2, [r4, r5]                            |         r2 = *((r4 + r5));
                                                             |     }
                                                             |     if (r1 == r1) {
    0x0000988c ldrne r2, [r2, 4]                             |         r2 = *((r2 + 4));
                                                             |     }
    0x0000988e adds r0, r1, 1                                |     r0 = r1 + 1;
                                                             |     if (r0 == r1) {
    0x00009890 beq.w 0xa558                                  |         goto label_70;
                                                             |     }
    0x00009894 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00009896 beq.w 0xa614                                  |         goto label_104;
                                                             |     }
                                                             | label_71:
    0x0000989a add r1, r2                                    |     r1 += r2;
    0x0000989c mov r3, sb                                    |     r3 = sb;
    0x0000989e str r1, [r4, r5]                              |     *((r4 + r5)) = r1;
    0x000098a0 b.w 0x905e                                    |     goto label_18;
                                                             | label_83:
    0x000098a4 cmp r2, r5                                    |     
                                                             |     if (r2 >= r5) {
    0x000098a6 bhs.w 0x9106                                  |         goto label_19;
                                                             |     }
                                                             |     do {
    0x000098aa ldr r2, [r3, 8]                               |         r2 = *((r3 + 8));
    0x000098ac adds r3, 0xc                                  |         r3 += 0xc;
    0x000098ae ldr r1, [r3, -0xc]                            |         r1 = *((r3 - 0xc));
    0x000098b2 cmp r5, r3                                    |         
    0x000098b4 add r2, sl                                    |         r2 += sl;
    0x000098b6 str.w r2, [r1, sl]                            |         __asm ("str.w r2, [r1, sl]");
    0x000098ba bhi 0x98aa                                    |         
                                                             |     } while (r5 > r3);
    0x000098bc ldr.w r3, [fp, 0xe8]                          |     r3 = *(arg_e8h);
    0x000098c0 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000098c2 bne.w 0x9110                                  |         goto label_20;
                                                             |     }
                                                             | label_84:
    0x000098c6 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x000098c8 cmp r3, r5                                    |     
                                                             |     if (r3 < r5) {
    0x000098ca bls.w 0x92ca                                  |         goto label_21;
                                                             |     }
    0x000098ce ldr r3, [pc, 0x1b0]                           |     
    0x000098d0 add r3, pc                                    |     r3 = 0x13356;
    0x000098d2 str r3, [r7, 0x40]                            |     *((r7 + 0x40)) = r3;
    0x000098d4 ldr r3, [pc, 0x1ac]                           |     
    0x000098d6 add r3, pc                                    |     r3 = 0x1335e;
    0x000098d8 str r3, [r7, 0x18]                            |     *((r7 + 0x18)) = r3;
    0x000098da ldr r3, [pc, 0x1ac]                           |     
    0x000098dc add r3, pc                                    |     r3 = 0x1336a;
    0x000098de str r3, [r7, 0xc]                             |     *((r7 + 0xc)) = r3;
                                                             | label_26:
    0x000098e0 ldrd sb, r4, [r5]                             |     __asm ("ldrd sb, r4, [r5]");
    0x000098e4 add.w r3, sl, sb                              |     r3 = sl + sb;
    0x000098e8 lsr.w r8, r4, 8                               |     r8 = r4 >> 8;
    0x000098ec str r3, [r7, 0x44]                            |     *((r7 + 0x44)) = r3;
    0x000098ee uxtb r4, r4                                   |     r4 = (int8_t) r4;
    0x000098f0 ldr r3, [r7, 0x4c]                            |     r3 = *((r7 + 0x4c));
    0x000098f2 lsl.w r8, r8, 4                               |     r8 <<= 4;
    0x000098f4 adds r0, r1, r0                               |     r0 = r1 + r0;
    0x000098f6 cmp r4, 0x17                                  |     
    0x000098f8 add.w r6, r3, r8                              |     r6 = r3 + r8;
    0x000098fc str r6, [r7, 0x54]                            |     *((r7 + 0x54)) = r6;
                                                             |     if (r4 == 0x17) {
    0x000098fe beq.w 0x9ca2                                  |         goto label_105;
                                                             |     }
    0x00009902 cmp r4, 0                                     |     
                                                             |     if (r4 == 0) {
    0x00009904 beq.w 0x9b44                                  |         goto label_27;
                                                             |     }
    0x00009908 ldrb r2, [r6, 0xc]                            |     r2 = *((r6 + 0xc));
    0x0000990a lsrs r3, r2, 4                                |     r3 = r2 >> 4;
                                                             |     if (r3 == r2) {
    0x0000990c beq.w 0x9b7e                                  |         goto label_106;
                                                             |     }
    0x00009910 ldrb r3, [r6, 0xd]                            |     r3 = *((r6 + 0xd));
    0x00009912 and r3, r3, 3                                 |     r3 &= 3;
    0x00009916 subs r3, 1                                    |     r3--;
    0x00009918 cmp r3, 1                                     |     
                                                             |     if (r3 < 1) {
    0x0000991a bls.w 0x9b7e                                  |         goto label_106;
                                                             |     }
    0x0000991e sub.w r3, r4, 0x14                            |     r3 = r4 - 0x14;
    0x00009922 ldr.w r1, [fp, 0x220]                         |     r1 = *(arg_220h);
    0x00009926 clz r3, r3                                    |     r3 &= r3;
    0x0000992a sub.w r2, r4, 0x15                            |     r2 = r4 - 0x15;
    0x0000992e lsrs r3, r3, 5                                |     r3 >>= 5;
    0x00009930 clz r2, r2                                    |     r2 &= r2;
    0x00009934 lsrs r2, r2, 5                                |     r2 >>= 5;
    0x00009936 cmp r6, r1                                    |     
    0x00009938 lsl.w r3, r3, 1                               |     r3 <<= 1;
    0x0000993c orr.w r3, r3, r2, lsl 2                       |     r3 |= (r2 << 2);
    0x00009940 sub.w r2, r4, 0xd                             |     r2 = r4 - 0xd;
                                                             |     if (r6 == r1) {
    0x00009944 beq.w 0x9e46                                  |         goto label_107;
                                                             |     }
    0x00009948 cmp r2, 9                                     |     
                                                             |     if (r2 <= 9) {
    0x0000994a bhi 0x9956                                    |         
                                                             | label_42:
    0x0000994c ldr r1, [pc, 0x13c]                           |         
    0x0000994e add r1, pc                                    |         r1 = 0x133de;
    0x00009950 ldr.w r2, [r1, r2, lsl 2]                     |         r2 = *(0x133de);
    0x00009954 orrs r3, r2                                   |         r3 |= r2;
                                                             |     }
                                                             | label_58:
    0x00009956 ldr r2, [r7, 0x4c]                            |     r2 = *((r7 + 0x4c));
    0x00009958 mov r1, fp                                    |     r1 = fp;
    0x0000995a strd r6, r3, [fp, 0x220]                      |     __asm ("strd r6, r3, [fp, 0x220]");
    0x0000995e ldr.w r0, [r2, r8]                            |     r0 = *((r2 + r8));
    0x00009962 add.w r2, r7, 0x54                            |     r2 = r7 + 0x54;
    0x00009966 str r3, [sp, 4]                               |     *(arg_4h) = r3;
    0x00009968 ldr r3, [r7, 0x38]                            |     r3 = *((r7 + 0x38));
    0x0000996a add r0, r3                                    |     r0 += r3;
                                                             | label_43:
    0x00009988 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000998a bne.w 0x9c9e                                  |         goto label_108;
                                                             |     }
    0x0000998e cmp r4, 0x16                                  |     
                                                             |     if (r4 > 0x16) {
    0x00009990 bhi.w 0x9b60                                  |         goto label_29;
                                                             |     }
    0x00009994 subs r3, r4, 1                                |     r3 = r4 - 1;
    0x00009996 cmp r3, 0x15                                  |     
                                                             |     if (r3 > 0x15) {
    0x00009998 bhi.w 0x9b30                                  |         goto label_28;
                                                             |     }
                                                             |     /* switch table (23 cases) at 0x99a0 */
    0x0000999c tbh [pc, r3, lsl 1]                           |     __asm ("tbh [pc, r3, lsl 1]");
                                                             | label_87:
    0x000099cc cmp.w ip, 9                                   |     
                                                             |     if (ip > 9) {
    0x000099d0 bhi.w 0x9d96                                  |         goto label_109;
                                                             |     }
    0x000099d4 ldr r2, [pc, 0xb8]                            |     
    0x000099d6 add r2, pc                                    |     
    0x000099d8 ldr.w r2, [r2, ip, lsl 2]                     |     r2 = *(0x1346a);
    0x000099dc orr.w lr, r3, r2                              |     lr = r3 | r2;
    0x000099e0 ldr.w r2, [fp, 0x224]                         |     r2 = *(arg_224h);
    0x000099e4 cmp r2, lr                                    |     
                                                             |     if (r2 != lr) {
    0x000099e6 bne.w 0x9194                                  |         goto label_22;
                                                             |     }
                                                             | label_37:
    0x000099ea ldr r2, [pc, 0xa8]                            |     
    0x000099ec ldr.w r0, [fp, 0x22c]                         |     r0 = *(arg_22ch);
    0x000099f0 ldr.w r1, [fp, 0x228]                         |     r1 = *(arg_228h);
    0x000099f4 add r2, pc                                    |     r2 = 0x1348e;
    0x000099f6 ldr.w r3, [r2, 0x58c]                         |     r3 = *(0x13a1a);
    0x000099fa str r0, [r7, 0x54]                            |     *((r7 + 0x54)) = r0;
    0x000099fc adds r3, 1                                    |     r3++;
    0x000099fe str.w r3, [r2, 0x58c]                         |     __asm ("str.w r3, [r2, 0x58c]");
    0x00009a02 b.w 0x91e4                                    |     goto label_23;
                                                             | label_80:
    0x00009a06 ldr r1, [r7, 0x30]                            |     r1 = *((r7 + 0x30));
    0x00009a08 ldr r3, [r1, 0x1c]                            |     r3 = *((r1 + 0x1c));
    0x00009a0a ldrd r6, r2, [r1, 0x10]                       |     __asm ("ldrd r6, r2, [r1, 0x10]");
    0x00009a0e adds r1, 0x10                                 |     r1 += 0x10;
    0x00009a10 str r1, [r7, 0x30]                            |     *((r7 + 0x30)) = r1;
    0x00009a12 b.w 0x8f64                                    |     goto label_24;
                                                             | label_101:
    0x00009a98 ldr r1, [r7, 0x34]                            |     r1 = *((r7 + 0x34));
    0x00009a9a cmp.w ip, 0                                   |     
    0x00009a9e clz r1, r1                                    |     r1 &= r1;
    0x00009aa2 lsr.w r1, r1, 5                               |     r1 >>= 5;
    0x00009aa6 it eq                                         |     
                                                             |     if (ip != 0) {
    0x00009aa8 moveq r1, 0                                   |         r1 = 0;
                                                             |     }
    0x00009aaa cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00009aac beq.w 0x969c                                  |         goto label_25;
                                                             |     }
    0x00009ab0 ldr.w r1, [pc, 0xba4]                         |     r1 = *(0x0000a658);
    0x00009ab4 str r2, [r7, 4]                               |     *((r7 + 4)) = r2;
    0x00009ab6 add r1, pc                                    |     r1 += pc;
    0x00009ab8 ldr r0, [r1, 0x48]                            |     r0 = *((r1 + 0x48));
    0x00009aba blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00009abc cmp r5, 0x16                                  |     
    0x00009abe mov r3, r0                                    |     r3 = r0;
                                                             |     if (r5 > 0x16) {
    0x00009ac0 bhi.w 0x9d48                                  |         goto label_110;
                                                             |     }
    0x00009ac4 subs r1, r5, 1                                |     r1 = r5 - 1;
    0x00009ac6 ldr r2, [r7, 4]                               |     r2 = *((r7 + 4));
    0x00009ac8 cmp r1, 0x15                                  |     
                                                             |     if (r1 > 0x15) {
    0x00009aca bhi.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x00009ace adr r0, 8                                     |     r0 = 8;
    0x00009ad0 ldr.w r1, [r0, r1, lsl 2]                     |     offset_6 = r1 << 2;
                                                             |     r1 = *((r0 + offset_6));
    0x00009ad4 add r0, r1                                    |     r0 += r1;
                                                             |     /* switch table (22 cases) at 0x9ad8 */
    0x00009ad6 bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_28:
    0x00009b30 invalid                                       |     
    0x00009b32 mov r1, r4                                    |     r1 = r4;
    0x00009b34 mov r0, fp                                    |     r0 = fp;
    0x00009b36 bl 0x8e34                                     |     fcn_00008e34 (r0, r1, r2);
    0x00009b3a movs r3, 0                                    |     r3 = 0;
    0x00009b3c invalid                                       |     
    0x00009b3e add r2, r3                                    |     r2 += r3;
    0x00009b40 str.w r2, [sl, sb]                            |     __asm ("str.w r2, [sl, sb]");
                                                             | label_27:
    0x00009b44 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009b46 adds r5, 0xc                                  |     r5 += 0xc;
    0x00009b48 cmp r3, r5                                    |     
                                                             |     if (r3 > r5) {
    0x00009b4a bhi.w 0x98e0                                  |         goto label_26;
                                                             |     }
    0x00009b4e b.w 0x92ca                                    |     goto label_21;
    0x00009b52 invalid                                       |     
                                                             |     if (r3 == r5) {
    0x00009b54 beq 0x9b44                                    |         goto label_27;
                                                             |     }
    0x00009b56 ldr.w r3, [r1, 0x248]                         |     r3 = *((r1 + 0x248));
    0x00009b5a str.w r3, [sl, sb]                            |     __asm ("str.w r3, [sl, sb]");
    0x00009b5e b 0x9b44                                      |     goto label_27;
                                                             | label_29:
    0x00009b60 cmp r4, 0xa0                                  |     
                                                             |     if (r4 != 0xa0) {
    0x00009b62 bne 0x9b30                                    |         goto label_28;
                                                             |     }
    0x00009b64 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x00009b66 ldr.w r3, [fp]                                |     r3 = *(fp);
    0x00009b6a add r3, r2                                    |     r3 += r2;
    0x00009b6c ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
                                                             |     if (r2 == 0) {
    0x00009b6e cbnz r2, 0x9b78                               |         
                                                             | label_33:
    0x00009b70 ldr r2, [r7, 0x40]                            |         r2 = *((r7 + 0x40));
    0x00009b72 ldr r0, [r2, 0x48]                            |         r0 = *((r2 + 0x48));
    0x00009b74 blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
    0x00009b76 mov r3, r0                                    |         r3 = r0;
                                                             |     }
    0x00009b78 str.w r3, [sl, sb]                            |     __asm ("str.w r3, [sl, sb]");
    0x00009b7c b 0x9b44                                      |     goto label_27;
                                                             | label_106:
    0x00009b7e mov r1, fp                                    |     r1 = fp;
    0x00009b80 mov r0, r6                                    |     r0 = r6;
                                                             | label_30:
    0x00009b82 ldrh.w ip, [r0, 0xe]                          |     ip = *((r0 + 0xe));
    0x00009b86 movw r3, 0xfff1                               |     r3 = 0xfff1;
    0x00009b8a ldr r0, [r0, 4]                               |     r0 = *((r0 + 4));
    0x00009b8c and r2, r2, 0xf                               |     r2 &= 0xf;
    0x00009b90 cmp ip, r3                                    |     
    0x00009b92 ite ne                                        |     
                                                             |     if (ip == r3) {
    0x00009b94 ldrne r3, [r1]                                |         r3 = *(r1);
                                                             |     }
                                                             |     if (ip != r3) {
    0x00009b96 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00009b98 cmp r2, 0xa                                   |     
    0x00009b9a add r3, r0                                    |     r3 += r0;
                                                             |     if (r2 == 0xa) {
    0x00009b9c beq.w 0x9cb0                                  |         goto label_111;
                                                             |     }
                                                             | label_31:
    0x00009ba0 cmp r4, 0x16                                  |     
                                                             |     if (r4 > 0x16) {
    0x00009ba2 bhi 0x9b60                                    |         goto label_29;
                                                             |     }
    0x00009ba4 subs r2, r4, 1                                |     r2 = r4 - 1;
    0x00009ba6 cmp r2, 0x15                                  |     
                                                             |     if (r2 > 0x15) {
    0x00009ba8 bhi 0x9b30                                    |         goto label_28;
                                                             |     }
    0x00009baa adr r0, 8                                     |     r0 = 8;
    0x00009bac ldr.w r2, [r0, r2, lsl 2]                     |     offset_7 = r2 << 2;
                                                             |     r2 = *((r0 + offset_7));
    0x00009bb0 add r0, r2                                    |     r0 += r2;
                                                             |     /* switch table (22 cases) at 0x9bb4 */
    0x00009bb2 bx r0                                         |     return uint32_t (*r0)() ();
    0x00009c0c movs r3, 0                                    |     r3 = 0;
    0x00009c0e invalid                                       |     
    0x00009c10 ldr r2, [r7, 0x44]                            |     r2 = *((r7 + 0x44));
    0x00009c12 ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x00009c14 mov r0, fp                                    |     r0 = fp;
    0x00009c16 bl 0x8bf8                                     |     fcn_00008bf8 (r0, r1, r2, r3);
    0x00009c1a b 0x9b44                                      |     goto label_27;
                                                             | label_108:
    0x00009c9e ldrb r2, [r0, 0xc]                            |     r2 = *((r0 + 0xc));
    0x00009ca0 b 0x9b82                                      |     goto label_30;
                                                             | label_105:
    0x00009ca2 ldr.w r3, [fp]                                |     r3 = *(fp);
    0x00009ca6 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x00009ca8 add r3, r2                                    |     r3 += r2;
    0x00009caa str.w r3, [sl, sb]                            |     __asm ("str.w r3, [sl, sb]");
    0x00009cae b 0x9b44                                      |     goto label_27;
                                                             | label_111:
    0x00009cb0 ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
    0x00009cb2 cmp.w ip, 0                                   |     
    0x00009cb6 clz r2, r2                                    |     r2 &= r2;
    0x00009cba lsr.w r2, r2, 5                               |     r2 >>= 5;
    0x00009cbe it eq                                         |     
                                                             |     if (ip != 0) {
    0x00009cc0 moveq r2, 0                                   |         r2 = 0;
                                                             |     }
    0x00009cc2 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00009cc4 beq.w 0x9ba0                                  |         goto label_31;
                                                             |     }
    0x00009cc8 ldr.w r2, [pc, 0x994]                         |     r2 = *(0x0000a660);
    0x00009ccc str r1, [r7, 8]                               |     *((r7 + 8)) = r1;
    0x00009cce add r2, pc                                    |     r2 += pc;
    0x00009cd0 ldr r0, [r2, 0x48]                            |     r0 = *((r2 + 0x48));
    0x00009cd2 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00009cd4 cmp r4, 0x16                                  |     
    0x00009cd6 mov r3, r0                                    |     r3 = r0;
                                                             |     if (r4 > 0x16) {
    0x00009cd8 bhi 0x9d5a                                    |         goto label_112;
                                                             |     }
    0x00009cda subs r2, r4, 1                                |     r2 = r4 - 1;
    0x00009cdc ldr r1, [r7, 8]                               |     r1 = *((r7 + 8));
    0x00009cde cmp r2, 0x15                                  |     
                                                             |     if (r2 > 0x15) {
    0x00009ce0 bhi.w 0x9b30                                  |         goto label_28;
                                                             |     }
    0x00009ce4 adr r0, 8                                     |     r0 = 8;
    0x00009ce6 ldr.w r2, [r0, r2, lsl 2]                     |     offset_8 = r2 << 2;
                                                             |     r2 = *((r0 + offset_8));
    0x00009cea add r0, r2                                    |     r0 += r2;
                                                             |     /* switch table (22 cases) at 0x9cf0 */
    0x00009cec bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_110:
    0x00009d48 cmp r5, 0xa0                                  |     
                                                             |     if (r5 != 0xa0) {
    0x00009d4a bne.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x00009d4e ldr.w r3, [sb, r4]                            |     r3 = *((sb + r4));
    0x00009d52 ldr.w r2, [fp]                                |     r2 = *(fp);
    0x00009d56 add r3, r2                                    |     r3 += r2;
    0x00009d58 b 0x9670                                      |     goto label_32;
                                                             | label_112:
    0x00009d5a cmp r4, 0xa0                                  |     
                                                             |     if (r4 != 0xa0) {
    0x00009d5c bne.w 0x9b30                                  |         goto label_28;
                                                             |     }
    0x00009d60 ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x00009d62 ldr.w r2, [fp]                                |     r2 = *(fp);
    0x00009d66 add r3, r2                                    |     r3 += r2;
    0x00009d68 b 0x9b70                                      |     goto label_33;
                                                             | label_98:
    0x00009d6a cmp.w ip, 9                                   |     
                                                             |     if (ip < 9) {
    0x00009d6e bls 0x9db8                                    |         goto label_113;
                                                             |     }
    0x00009d70 ldr.w r1, [fp, 0x224]                         |     r1 = *(arg_224h);
    0x00009d74 cmp r1, r3                                    |     
                                                             |     if (r1 != r3) {
    0x00009d76 bne.w 0x95a4                                  |         goto label_34;
                                                             |     }
                                                             | label_39:
    0x00009d7a ldr.w r2, [pc, 0x8e8]                         |     r2 = *(0x0000a664);
    0x00009d7e ldr.w r0, [fp, 0x22c]                         |     r0 = *(arg_22ch);
    0x00009d82 add r2, pc                                    |     r2 += pc;
    0x00009d84 ldr.w r3, [r2, 0x58c]                         |     r3 = *((r2 + 0x58c));
    0x00009d88 str r0, [r7, 0x54]                            |     *((r7 + 0x54)) = r0;
    0x00009d8a adds r3, 1                                    |     r3++;
    0x00009d8c str.w r3, [r2, 0x58c]                         |     __asm ("str.w r3, [r2, 0x58c]");
    0x00009d90 ldr.w r2, [fp, 0x228]                         |     r2 = *(arg_228h);
    0x00009d94 b 0x95ea                                      |     goto label_35;
                                                             | label_109:
    0x00009d96 ldr.w r2, [fp, 0x224]                         |     r2 = *(arg_224h);
    0x00009d9a cmp r2, r3                                    |     
                                                             |     if (r2 != r3) {
    0x00009d9c bne.w 0x91a0                                  |         goto label_36;
                                                             |     }
    0x00009da0 b 0x99ea                                      |     goto label_37;
                                                             | label_91:
    0x00009daa mov r0, fp                                    |     r0 = fp;
    0x00009dac bl 0x8de4                                     |     fcn_00008de4 (r0);
    0x00009db0 adds r7, 0x7c                                 |     r7 += 0x7c;
    0x00009db2 mov sp, r7                                    |     
    0x00009db4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |     
                                                             | label_113:
    0x00009db8 ldr.w r1, [pc, 0x8ac]                         |     
    0x00009dbc add r1, pc                                    |     r1 = 0x14428;
    0x00009dbe add.w r1, r1, ip, lsl 2                       |     r1 += (ip << 2);
    0x00009dc2 ldr r1, [r1, 0x40]                            |     r1 = *((r1 + 0x40));
    0x00009dc4 orr.w lr, r3, r1                              |     lr = r3 | r1;
    0x00009dc8 ldr.w r1, [fp, 0x224]                         |     r1 = *(arg_224h);
    0x00009dcc cmp r1, lr                                    |     
                                                             |     if (r1 != lr) {
    0x00009dce bne.w 0x9598                                  |         goto label_38;
                                                             |     }
    0x00009dd2 b 0x9d7a                                      |     goto label_39;
    0x00009de8 ldr.w r3, [pc, 0x884]                         |     
    0x00009dec add.w sl, sl, 8                               |     sl += 8;
    0x00009df0 ldr r2, [r7, 0x44]                            |     r2 = *((r7 + 0x44));
    0x00009df2 add r3, pc                                    |     r3 = 0x14466;
    0x00009df4 str r3, [r2, 4]                               |     *((r2 + 4)) = r3;
    0x00009df6 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009df8 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x00009dfa bhi.w 0x9522                                  |         goto label_13;
                                                             |     }
    0x00009dfe b.w 0x9068                                    |     goto label_10;
                                                             | label_41:
    0x00009e1e ldrd r1, r2, [r5, 4]                          |     __asm ("ldrd r1, r2, [r5, 4]");
    0x00009e22 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00009e24 bl 0x14b10                                    |     r0 = fcn_00014b10 (r0);
    0x00009e28 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00009e2a blt.w 0xa64c                                  |         goto label_114;
                                                             |     }
    0x00009e2e ldrd r0, r1, [r5]                             |     __asm ("ldrd r0, r1, [r5]");
    0x00009e32 movs r2, 0                                    |     r2 = 0;
    0x00009e34 mov ip, r4                                    |     
    0x00009e36 add r1, r0                                    |     r1 += r0;
    0x00009e38 bl 0x139d0                                    |     fcn_000139d0 ();
    0x00009e3c ldr r5, [r5, 0xc]                             |     r5 = *((r5 + 0xc));
    0x00009e3e cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00009e40 beq.w 0x9234                                  |         goto label_40;
                                                             |     }
    0x00009e44 b 0x9e1e                                      |     goto label_41;
                                                             | label_107:
    0x00009e46 cmp r2, 9                                     |     
                                                             |     if (r2 > 9) {
    0x00009e48 bhi.w 0xa3a8                                  |         goto label_115;
                                                             |     }
    0x00009e4c ldr.w r1, [pc, 0x82c]                         |     
    0x00009e50 ldr.w r0, [fp, 0x224]                         |     r0 = *(arg_224h);
    0x00009e54 add r1, pc                                    |     
    0x00009e56 ldr.w r1, [r1, r2, lsl 2]                     |     r1 = *(0x144d4);
    0x00009e5a orrs r1, r3                                   |     r1 |= r3;
    0x00009e5c cmp r1, r0                                    |     
                                                             |     if (r1 != r0) {
    0x00009e5e bne.w 0x994c                                  |         goto label_42;
                                                             |     }
                                                             | label_59:
    0x00009e62 ldr.w r2, [pc, 0x81c]                         |     r2 = *(0x0000a680);
    0x00009e66 ldr.w r0, [fp, 0x22c]                         |     r0 = *(arg_22ch);
    0x00009e6a ldr.w r1, [fp, 0x228]                         |     r1 = *(arg_228h);
    0x00009e6e add r2, pc                                    |     r2 += pc;
    0x00009e70 ldr.w r3, [r2, 0x58c]                         |     r3 = *((r2 + 0x58c));
    0x00009e74 str r0, [r7, 0x54]                            |     *((r7 + 0x54)) = r0;
    0x00009e76 adds r3, 1                                    |     r3++;
    0x00009e78 str.w r3, [r2, 0x58c]                         |     __asm ("str.w r3, [r2, 0x58c]");
    0x00009e7c b 0x9988                                      |     goto label_43;
                                                             | label_94:
    0x00009e88 cmp r6, sl                                    |     
                                                             |     if (r6 >= sl) {
    0x00009e8a bhs.w 0x9502                                  |         goto label_44;
                                                             |     }
                                                             |     do {
    0x00009e8e ldr r2, [r6], 8                               |         r2 = *(r6);
                                                             |         r6 += 8;
    0x00009e92 ldr r3, [r4, r2]                              |         r3 = *((r4 + r2));
    0x00009e94 cmp sl, r6                                    |         
    0x00009e96 add r3, r4                                    |         r3 += r4;
    0x00009e98 str r3, [r4, r2]                              |         *((r4 + r2)) = r3;
    0x00009e9a bhi 0x9e8e                                    |         
                                                             |     } while (sl > r6);
    0x00009e9c ldr.w r3, [fp, 0xe8]                          |     r3 = *(arg_e8h);
    0x00009ea0 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00009ea2 bne.w 0x950c                                  |         goto label_45;
                                                             |     }
                                                             | label_95:
    0x00009ea6 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x00009ea8 cmp r3, sl                                    |     
                                                             |     if (r3 < sl) {
    0x00009eaa bls.w 0x9068                                  |         goto label_10;
                                                             |     }
    0x00009eae ldr.w r3, [pc, 0x7d8]                         |     r3 = *(0x0000a688);
    0x00009eb2 mov sb, r4                                    |     sb = r4;
    0x00009eb4 add r3, pc                                    |     r3 += pc;
    0x00009eb6 str r3, [r7, 0x40]                            |     *((r7 + 0x40)) = r3;
                                                             | label_48:
    0x00009eb8 ldrd r4, r5, [sl]                             |     __asm ("ldrd r4, r5, [sl]");
    0x00009ebc add.w r3, sb, r4                              |     r3 = sb + r4;
    0x00009ec0 lsr.w r8, r5, 8                               |     r8 = r5 >> 8;
    0x00009ec4 str r3, [r7, 0x44]                            |     *((r7 + 0x44)) = r3;
    0x00009ec6 uxtb r5, r5                                   |     r5 = (int8_t) r5;
    0x00009ec8 ldr r3, [r7, 0x4c]                            |     r3 = *((r7 + 0x4c));
    0x00009eca lsl.w r8, r8, 4                               |     r8 <<= 4;
    0x00009ece cmp r5, 0x17                                  |     
    0x00009ed0 add.w r6, r3, r8                              |     r6 = r3 + r8;
    0x00009ed4 str r6, [r7, 0x54]                            |     *((r7 + 0x54)) = r6;
                                                             |     if (r5 == 0x17) {
    0x00009ed6 beq.w 0xa202                                  |         goto label_116;
                                                             |     }
    0x00009eda cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00009edc beq.w 0xa002                                  |         goto label_117;
                                                             |     }
    0x00009ee0 ldrb r1, [r6, 0xc]                            |     r1 = *((r6 + 0xc));
    0x00009ee2 lsrs r3, r1, 4                                |     r3 = r1 >> 4;
                                                             |     if (r3 == r1) {
    0x00009ee4 beq.w 0xa062                                  |         goto label_118;
                                                             |     }
    0x00009ee8 ldrb r3, [r6, 0xd]                            |     r3 = *((r6 + 0xd));
    0x00009eea and r3, r3, 3                                 |     r3 &= 3;
    0x00009eee subs r3, 1                                    |     r3--;
    0x00009ef0 cmp r3, 1                                     |     
                                                             |     if (r3 < 1) {
    0x00009ef2 bls.w 0xa062                                  |         goto label_118;
                                                             |     }
    0x00009ef6 sub.w r3, r5, 0x15                            |     r3 = r5 - 0x15;
    0x00009efa ldr.w r1, [fp, 0x220]                         |     r1 = *(arg_220h);
    0x00009efe clz r3, r3                                    |     r3 &= r3;
    0x00009f02 sub.w r2, r5, 0x14                            |     r2 = r5 - 0x14;
    0x00009f06 lsrs r3, r3, 5                                |     r3 >>= 5;
    0x00009f08 clz r2, r2                                    |     r2 &= r2;
    0x00009f0c lsrs r2, r2, 5                                |     r2 >>= 5;
    0x00009f0e cmp r6, r1                                    |     
    0x00009f10 lsl.w r3, r3, 2                               |     r3 <<= 2;
    0x00009f14 orr.w r3, r3, r2, lsl 1                       |     r3 |= (r2 << 1);
    0x00009f18 sub.w r2, r5, 0xd                             |     r2 = r5 - 0xd;
                                                             |     if (r6 == r1) {
    0x00009f1c beq.w 0xa372                                  |         goto label_119;
                                                             |     }
    0x00009f20 cmp r2, 9                                     |     
                                                             |     if (r2 <= 9) {
    0x00009f22 bhi 0x9f30                                    |         
                                                             | label_56:
    0x00009f24 ldr.w r1, [pc, 0x764]                         |         
    0x00009f28 add r1, pc                                    |         r1 = 0x145b8;
    0x00009f2a ldr.w r2, [r1, r2, lsl 2]                     |         r2 = *(0x145b8);
    0x00009f2e orrs r3, r2                                   |         r3 |= r2;
                                                             |     }
                                                             | label_65:
    0x00009f30 ldr r2, [r7, 0x4c]                            |     r2 = *((r7 + 0x4c));
    0x00009f32 mov r1, fp                                    |     r1 = fp;
    0x00009f34 strd r6, r3, [fp, 0x220]                      |     __asm ("strd r6, r3, [fp, 0x220]");
    0x00009f38 ldr.w r0, [r2, r8]                            |     r0 = *((r2 + r8));
    0x00009f3c add.w r2, r7, 0x54                            |     r2 = r7 + 0x54;
    0x00009f40 str r3, [sp, 4]                               |     *(arg_4h) = r3;
    0x00009f42 ldr r3, [r7, 0x38]                            |     r3 = *((r7 + 0x38));
    0x00009f44 add r0, r3                                    |     r0 += r3;
    0x00009f46 movs r3, 0                                    |     r3 = 0;
    0x00009f48 str r3, [sp, 0xc]                             |     *(arg_ch) = r3;
    0x00009f4a str r3, [sp]                                  |     *(sp) = r3;
    0x00009f4c movs r3, 9                                    |     r3 = 9;
    0x00009f4e str r3, [sp, 8]                               |     *(arg_8h) = r3;
    0x00009f50 ldr r3, [r7, 0x3c]                            |     r3 = *((r7 + 0x3c));
    0x00009f52 bl 0x7ac8                                     |     r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
    0x00009f56 mov r2, r0                                    |     r2 = r0;
    0x00009f58 str.w r0, [fp, 0x228]                         |     __asm ("str.w r0, [arg_228h]");
    0x00009f5c ldr r0, [r7, 0x54]                            |     r0 = *((r7 + 0x54));
    0x00009f5e str.w r0, [fp, 0x22c]                         |     __asm ("str.w r0, [arg_22ch]");
                                                             | label_57:
    0x00009f62 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00009f64 bne.w 0xa1fe                                  |         goto label_120;
                                                             |     }
    0x00009f68 cmp r5, 0x16                                  |     
                                                             |     if (r5 > 0x16) {
    0x00009f6a bhi 0xa042                                    |         goto label_50;
                                                             |     }
    0x00009f6c subs r3, r5, 1                                |     r3 = r5 - 1;
    0x00009f6e cmp r3, 0x15                                  |     
                                                             |     if (r3 > 0x15) {
    0x00009f70 bhi.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x00009f74 adr r1, 8                                     |     r1 = 8;
    0x00009f76 ldr.w r3, [r1, r3, lsl 2]                     |     offset_9 = r3 << 2;
                                                             |     r3 = *((r1 + offset_9));
    0x00009f7a add r1, r3                                    |     r1 += r3;
                                                             |     /* switch table (22 cases) at 0x9f80 */
    0x00009f7c bx r1                                         |     return uint32_t (*r1)() ();
                                                             | label_102:
    0x00009fd8 ldrh r1, [r6, 0xe]                            |     r1 = *((r6 + 0xe));
    0x00009fda movw r2, 0xfff1                               |     r2 = 0xfff1;
    0x00009fde cmp r1, r2                                    |     
    0x00009fe0 itet ne                                       |     
                                                             |     if (r1 == r2) {
    0x00009fe2 ldrne r2, [r7, 0xc]                           |         r2 = *((r7 + 0xc));
                                                             |     }
                                                             |     if (r1 != r2) {
    0x00009fe4 moveq r1, 0                                   |         r1 = 0;
                                                             |     }
                                                             |     if (r1 == r2) {
    0x00009fe6 ldrne r1, [r2, 0x598]                         |         r1 = *((r2 + 0x598));
                                                             |     }
    0x00009fea ldr r2, [r6, 4]                               |     r2 = *((r6 + 4));
    0x00009fec subs r3, r3, r2                               |     r3 -= r2;
    0x00009fee subs r3, r3, r1                               |     r3 -= r1;
    0x00009ff0 b.w 0x9712                                    |     goto label_46;
                                                             | label_81:
    0x00009ff4 mov r1, r3                                    |     r1 = r3;
    0x00009ff6 mov r2, r3                                    |     r2 = r3;
    0x00009ff8 b.w 0x909a                                    |     goto label_47;
                                                             | label_49:
    0x00009ffe invalid                                       |     
    0x0000a000 adds r0, 4                                    |     r0 += 4;
                                                             | label_117:
    0x0000a002 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x0000a004 add.w sl, sl, 8                               |     sl += 8;
    0x0000a008 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x0000a00a bhi.w 0x9eb8                                  |         goto label_48;
                                                             |     }
    0x0000a00e b.w 0x9068                                    |     goto label_10;
                                                             | label_50:
    0x0000a042 cmp r5, 0xa0                                  |     
                                                             |     if (r5 != 0xa0) {
    0x0000a044 bne.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x0000a048 ldr.w r2, [sb, r4]                            |     r2 = *((sb + r4));
    0x0000a04c ldr.w r3, [fp]                                |     r3 = *(fp);
    0x0000a050 add r3, r2                                    |     r3 += r2;
    0x0000a052 ldr r2, [r7, 0x34]                            |     r2 = *((r7 + 0x34));
    0x0000a054 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0000a056 bne 0x9ffe                                    |         goto label_49;
                                                             |     }
                                                             | label_54:
    0x0000a058 ldr r2, [r7, 0x40]                            |     r2 = *((r7 + 0x40));
    0x0000a05a ldr r0, [r2, 0x48]                            |     r0 = *((r2 + 0x48));
    0x0000a05c blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
    0x0000a05e mov r3, r0                                    |     r3 = r0;
    0x0000a060 b 0x9ffe                                      |     goto label_49;
                                                             | label_118:
    0x0000a062 mov r2, fp                                    |     r2 = fp;
    0x0000a064 mov r0, r6                                    |     r0 = r6;
                                                             | label_51:
    0x0000a066 ldrh.w ip, [r0, 0xe]                          |     ip = *((r0 + 0xe));
    0x0000a06a movw r3, 0xfff1                               |     r3 = 0xfff1;
    0x0000a06e ldr r0, [r0, 4]                               |     r0 = *((r0 + 4));
    0x0000a070 and r1, r1, 0xf                               |     r1 &= 0xf;
    0x0000a074 cmp ip, r3                                    |     
    0x0000a076 ite ne                                        |     
                                                             |     if (ip == r3) {
    0x0000a078 ldrne r3, [r2]                                |         r3 = *(r2);
                                                             |     }
                                                             |     if (ip != r3) {
    0x0000a07a moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x0000a07c cmp r1, 0xa                                   |     
    0x0000a07e add r3, r0                                    |     r3 += r0;
                                                             |     if (r1 == 0xa) {
    0x0000a080 beq.w 0xa220                                  |         goto label_121;
                                                             |     }
                                                             | label_52:
    0x0000a084 cmp r5, 0x16                                  |     
                                                             |     if (r5 > 0x16) {
    0x0000a086 bhi 0xa042                                    |         goto label_50;
                                                             |     }
    0x0000a088 subs r1, r5, 1                                |     r1 = r5 - 1;
    0x0000a08a cmp r1, 0x15                                  |     
                                                             |     if (r1 > 0x15) {
    0x0000a08c bhi.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x0000a090 adr r0, 8                                     |     r0 = 8;
    0x0000a092 ldr.w r1, [r0, r1, lsl 2]                     |     offset_10 = r1 << 2;
                                                             |     r1 = *((r0 + offset_10));
    0x0000a096 add r0, r1                                    |     r0 += r1;
                                                             |     /* switch table (22 cases) at 0xa09c */
    0x0000a098 bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_55:
    0x0000a162 cmp r2, r1                                    |     
    0x0000a164 ldr r0, [r7, 0x44]                            |     r0 = *((r7 + 0x44));
    0x0000a166 it hs                                         |     
                                                             |     if (r2 < r1) {
    0x0000a168 movhs r2, r1                                  |         r2 = r1;
                                                             |     }
    0x0000a16a mov r1, r3                                    |     r1 = r3;
    0x0000a16c blx 0x15f40                                   |     fcn_00015f40 (r0, r1);
    0x0000a170 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x0000a172 add.w sl, sl, 8                               |     sl += 8;
    0x0000a176 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x0000a178 bhi.w 0x9eb8                                  |         goto label_48;
                                                             |     }
    0x0000a17c b.w 0x9068                                    |     goto label_10;
                                                             | label_120:
    0x0000a1fe ldrb r1, [r0, 0xc]                            |     r1 = *((r0 + 0xc));
    0x0000a200 b 0xa066                                      |     goto label_51;
                                                             | label_116:
    0x0000a202 ldr.w r3, [sb, r4]                            |     r3 = *((sb + r4));
    0x0000a206 add.w sl, sl, 8                               |     sl += 8;
    0x0000a20a ldr.w r2, [fp]                                |     r2 = *(fp);
    0x0000a20e add r3, r2                                    |     r3 += r2;
    0x0000a210 str.w r3, [sb, r4]                            |     __asm ("str.w r3, [sb, r4]");
    0x0000a214 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x0000a216 cmp r3, sl                                    |     
                                                             |     if (r3 > sl) {
    0x0000a218 bhi.w 0x9eb8                                  |         goto label_48;
                                                             |     }
    0x0000a21c b.w 0x9068                                    |     goto label_10;
                                                             | label_121:
    0x0000a220 ldr r1, [r7, 0x34]                            |     r1 = *((r7 + 0x34));
    0x0000a222 cmp.w ip, 0                                   |     
    0x0000a226 clz r1, r1                                    |     r1 &= r1;
    0x0000a22a lsr.w r1, r1, 5                               |     r1 >>= 5;
    0x0000a22e it eq                                         |     
                                                             |     if (ip != 0) {
    0x0000a230 moveq r1, 0                                   |         r1 = 0;
                                                             |     }
    0x0000a232 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0000a234 beq.w 0xa084                                  |         goto label_52;
                                                             |     }
    0x0000a238 ldr.w r1, [pc, 0x460]                         |     r1 = *(0x0000a69c);
    0x0000a23c str r2, [r7, 0x10]                            |     *((r7 + 0x10)) = r2;
    0x0000a23e add r1, pc                                    |     r1 += pc;
    0x0000a240 ldr r0, [r1, 0x48]                            |     r0 = *((r1 + 0x48));
    0x0000a242 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0000a244 cmp r5, 0x16                                  |     
    0x0000a246 mov r3, r0                                    |     r3 = r0;
                                                             |     if (r5 > 0x16) {
    0x0000a248 bhi 0xa314                                    |         goto label_122;
                                                             |     }
    0x0000a24a subs r1, r5, 1                                |     r1 = r5 - 1;
    0x0000a24c ldr r2, [r7, 0x10]                            |     r2 = *((r7 + 0x10));
    0x0000a24e cmp r1, 0x15                                  |     
                                                             |     if (r1 > 0x15) {
    0x0000a250 bhi.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x0000a254 adr r0, 8                                     |     r0 = 8;
    0x0000a256 ldr.w r1, [r0, r1, lsl 2]                     |     offset_11 = r1 << 2;
                                                             |     r1 = *((r0 + offset_11));
    0x0000a25a add r0, r1                                    |     r0 += r1;
                                                             |     /* switch table (22 cases) at 0xa260 */
    0x0000a25c bx r0                                         |     return uint32_t (*r0)() ();
                                                             | label_82:
    0x0000a2e8 ldr.w r0, [fp, 0x7c]                          |     r0 = *(arg_7ch);
    0x0000a2ec ldr r4, [r0, 4]                               |     r4 = *((r0 + 4));
    0x0000a2ee ldr.w r0, [fp, 0x28]                          |     r0 = *(arg_28h);
    0x0000a2f2 ldr r0, [r0, 4]                               |     r0 = *((r0 + 4));
    0x0000a2f4 adds r5, r4, r0                               |     r5 = r4 + r0;
    0x0000a2f6 cmp r5, r3                                    |     
    0x0000a2f8 ldr r5, [r7, 0x28]                            |     r5 = *((r7 + 0x28));
    0x0000a2fa itt eq                                        |     
                                                             |     if (r5 != r3) {
    0x0000a2fc subeq r1, r1, r0                              |         r1 -= r0;
                                                             |     }
                                                             |     if (r5 != r3) {
    0x0000a2fe addeq r3, r1, r2                              |         r3 = r1 + r2;
                                                             |     }
                                                             |     if (r5 != 0) {
    0x0000a300 cbnz r5, 0xa30c                               |         goto label_123;
                                                             |     }
    0x0000a302 cmp r4, r3                                    |     
    0x0000a304 it eq                                         |     
                                                             |     if (r4 == r3) {
    0x0000a306 addeq r1, r1, r0                              |         r1 += r0;
                                                             |         goto label_124;
                                                             |     }
                                                             |     if (r4 == r3) {
                                                             | label_124:
    0x0000a308 beq.w 0x90a8                                  |         goto label_53;
                                                             |     }
                                                             | label_123:
    0x0000a30c strd r4, r0, [r7, 0x68]                       |     __asm ("strd r4, r0, [r7, 0x68]");
    0x0000a310 b.w 0x90a8                                    |     goto label_53;
                                                             | label_122:
    0x0000a314 cmp r5, 0xa0                                  |     
                                                             |     if (r5 != 0xa0) {
    0x0000a316 bne.w 0x962a                                  |         goto label_14;
                                                             |     }
    0x0000a31a ldr.w r3, [sb, r4]                            |     r3 = *((sb + r4));
    0x0000a31e ldr.w r2, [fp]                                |     r2 = *(fp);
    0x0000a322 add r3, r2                                    |     r3 += r2;
    0x0000a324 b 0xa058                                      |     goto label_54;
                                                             | label_75:
    0x0000a326 movs r2, 1                                    |     r2 = 1;
    0x0000a328 mov r0, fp                                    |     r0 = fp;
    0x0000a32a bl 0x8e34                                     |     fcn_00008e34 (r0, r1, r2);
    0x0000a32e ldr r2, [pc, 0x370]                           |     
    0x0000a330 add r2, pc                                    |     
    0x0000a332 ldr r2, [r2]                                  |     r2 = *(0x149d6);
    0x0000a334 ldr r1, [r2]                                  |     r1 = *(0x149d6);
    0x0000a336 ldr.w r2, [fp, 0x34]                          |     r2 = *(arg_34h);
    0x0000a33a ldr r0, [r2, 4]                               |     r0 = *(0x149da);
    0x0000a33c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0000a33e beq.w 0xa5d0                                  |         goto label_125;
                                                             |     }
                                                             | label_69:
    0x0000a342 str r3, [r7, 0x10]                            |     *((r7 + 0x10)) = r3;
    0x0000a344 ldr r3, [r7, 0x4c]                            |     r3 = *((r7 + 0x4c));
    0x0000a346 ldr.w r2, [r3, r8]                            |     r2 = *((r3 + r8));
    0x0000a34a add r2, r0                                    |     r2 += r0;
    0x0000a34c ldr r0, [pc, 0x354]                           |     
    0x0000a34e add r0, pc                                    |     r0 = 0x149f6;
    0x0000a350 bl 0xc284                                     |     fcn_0000c284 ();
    0x0000a354 ldr r2, [r7, 0x54]                            |     r2 = *((r7 + 0x54));
    0x0000a356 ldr r1, [r6, 8]                               |     r1 = *((r6 + 8));
    0x0000a358 ldr r3, [r7, 0x10]                            |     r3 = *((r7 + 0x10));
    0x0000a35a ldr r2, [r2, 8]                               |     r2 = *((r2 + 8));
    0x0000a35c b 0xa162                                      |     goto label_55;
                                                             | label_119:
    0x0000a372 cmp r2, 9                                     |     
                                                             |     if (r2 > 9) {
    0x0000a374 bhi.w 0xa53a                                  |         goto label_126;
                                                             |     }
    0x0000a378 ldr r1, [pc, 0x32c]                           |     
    0x0000a37a ldr.w r0, [fp, 0x224]                         |     r0 = *(arg_224h);
    0x0000a37e add r1, pc                                    |     r1 = 0x14a2a;
    0x0000a380 add.w r1, r1, r2, lsl 2                       |     r1 += (r2 << 2);
    0x0000a384 ldr r1, [r1, 0x40]                            |     r1 = *((r1 + 0x40));
    0x0000a386 orrs r1, r3                                   |     r1 |= r3;
    0x0000a388 cmp r0, r1                                    |     
                                                             |     if (r0 != r1) {
    0x0000a38a bne.w 0x9f24                                  |         goto label_56;
                                                             |     }
                                                             | label_66:
    0x0000a38e ldr r2, [pc, 0x31c]                           |     
    0x0000a390 ldr.w r0, [fp, 0x22c]                         |     r0 = *(arg_22ch);
    0x0000a394 add r2, pc                                    |     r2 = 0x14a46;
    0x0000a396 ldr.w r3, [r2, 0x58c]                         |     r3 = *(0x14fd2);
    0x0000a39a str r0, [r7, 0x54]                            |     *((r7 + 0x54)) = r0;
    0x0000a39c adds r3, 1                                    |     r3++;
    0x0000a39e str.w r3, [r2, 0x58c]                         |     __asm ("str.w r3, [r2, 0x58c]");
    0x0000a3a2 ldr.w r2, [fp, 0x228]                         |     r2 = *(arg_228h);
    0x0000a3a6 b 0x9f62                                      |     goto label_57;
                                                             | label_115:
    0x0000a3a8 ldr.w r2, [fp, 0x224]                         |     r2 = *(arg_224h);
    0x0000a3ac cmp r2, r3                                    |     
                                                             |     if (r2 != r3) {
    0x0000a3ae bne.w 0x9956                                  |         goto label_58;
                                                             |     }
    0x0000a3b2 b 0x9e62                                      |     goto label_59;
                                                             | label_79:
    0x0000a3b4 ldrb.w lr, [r1, 0xc]                          |     
    0x0000a3b8 b.w 0x9860                                    |     goto label_60;
                                                             | label_103:
    0x0000a4bc ldr r1, [r7, 0x34]                            |     r1 = *((r7 + 0x34));
    0x0000a4be cmp r2, 0                                     |     
    0x0000a4c0 clz r1, r1                                    |     r1 &= r1;
    0x0000a4c4 lsr.w r1, r1, 5                               |     r1 >>= 5;
    0x0000a4c8 it eq                                         |     
                                                             |     if (r2 != 0) {
    0x0000a4ca moveq r1, 0                                   |         r1 = 0;
                                                             |     }
    0x0000a4cc cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0000a4ce beq.w 0x987e                                  |         goto label_61;
                                                             |     }
    0x0000a4d2 ldr r1, [r7, 0x4c]                            |     r1 = *((r7 + 0x4c));
    0x0000a4d4 str r3, [r7, 0x40]                            |     *((r7 + 0x40)) = r3;
    0x0000a4d6 ldr r3, [r7, 0x48]                            |     r3 = *((r7 + 0x48));
    0x0000a4d8 add r1, r0                                    |     r1 += r0;
    0x0000a4da ldr r0, [r3, 0x48]                            |     r0 = *((r3 + 0x48));
    0x0000a4dc blx r1                                        |     uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000a4de ldr r2, [r7, 0x54]                            |     r2 = *((r7 + 0x54));
    0x0000a4e0 ldr r3, [r7, 0x40]                            |     r3 = *((r7 + 0x40));
    0x0000a4e2 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0000a4e4 bne.w 0x9880                                  |         goto label_62;
                                                             |     }
    0x0000a4e8 b.w 0x9058                                    |     goto label_63;
                                                             | label_90:
    0x0000a4ec ldr.w r3, [fp, 0x28]                          |     r3 = *(arg_28h);
    0x0000a4f0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0000a4f2 beq.w 0x9218                                  |         goto label_64;
                                                             |     }
    0x0000a4f6 ldr.w r2, [fp, 0x70]                          |     r2 = *(arg_70h);
    0x0000a4fa ldr r0, [r3, 4]                               |     r0 = *((r3 + 4));
    0x0000a4fc ldr r3, [r2, 4]                               |     r3 = *((r2 + 4));
    0x0000a4fe cmp r3, 7                                     |     
    0x0000a500 ite eq                                        |     
                                                             |     if (r3 != 7) {
    0x0000a502 moveq r1, 0xc                                 |         r1 = 0xc;
                                                             |     }
                                                             |     if (r3 == 7) {
    0x0000a504 movne r1, 8                                   |         r1 = 8;
                                                             |     }
    0x0000a506 bl 0x16608                                    |     fcn_00016608 (r0, r1, r2);
    0x0000a50a ldr r3, [pc, 0x1bc]                           |     
    0x0000a50c mov r1, r0                                    |     r1 = r0;
    0x0000a50e movs r0, 0x18                                 |     r0 = 0x18;
    0x0000a510 add r3, pc                                    |     
    0x0000a512 ldr r3, [r3]                                  |     r3 = *(0x14bde);
    0x0000a514 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000a516 str.w r0, [fp, 0x1a8]                         |     __asm ("str.w r0, [arg_1a8h]");
    0x0000a51a cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000a51c bne.w 0x9218                                  |         goto label_64;
                                                             |     }
    0x0000a520 ldr r3, [pc, 0x1a8]                           |     
    0x0000a522 add r3, pc                                    |     
    0x0000a524 ldr r3, [r3]                                  |     r3 = *(0x14bf2);
    0x0000a526 ldr r1, [r3]                                  |     r1 = *(0x14bf2);
    0x0000a528 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0000a52a beq.w 0xa652                                  |         goto label_127;
                                                             |     }
                                                             | label_72:
    0x0000a52e ldr r0, [pc, 0x1a0]                           |     
    0x0000a530 ldr.w r2, [fp, 4]                             |     r2 = *(arg_4h);
    0x0000a534 add r0, pc                                    |     r0 = 0x14c0a;
    0x0000a536 bl 0xc2a4                                     |     dl_fatal_printf ()
                                                             | label_126:
    0x0000a53a ldr.w r2, [fp, 0x224]                         |     r2 = *(arg_224h);
    0x0000a53e cmp r2, r3                                    |     
                                                             |     if (r2 != r3) {
    0x0000a540 bne.w 0x9f30                                  |         goto label_65;
                                                             |     }
    0x0000a544 b 0xa38e                                      |     goto label_66;
                                                             | label_70:
    0x0000a558 mov r0, r3                                    |     r0 = r3;
    0x0000a55a mov r1, r2                                    |     r1 = r2;
    0x0000a55c bl 0x113cc                                    |     fcn_000113cc (r0, r1, r2);
    0x0000a560 ldr r3, [r7, 0x44]                            |     r3 = *((r7 + 0x44));
    0x0000a562 str r0, [r4, r5]                              |     *((r4 + r5)) = r0;
    0x0000a564 b.w 0x905e                                    |     goto label_18;
                                                             | label_77:
    0x0000a590 ldr.w r3, [fp, 0x224]                         |     r3 = *(arg_224h);
    0x0000a594 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x0000a596 bne.w 0x900e                                  |         goto label_67;
                                                             |     }
    0x0000a59a ldr r2, [pc, 0x13c]                           |     
    0x0000a59c ldr.w r1, [fp, 0x22c]                         |     r1 = *(arg_22ch);
    0x0000a5a0 add r2, pc                                    |     r2 = 0x14c7e;
    0x0000a5a2 ldr.w r3, [r2, 0x58c]                         |     r3 = *(0x1520a);
    0x0000a5a6 str r1, [r7, 0x54]                            |     *((r7 + 0x54)) = r1;
    0x0000a5a8 adds r3, 1                                    |     r3++;
    0x0000a5aa str.w r3, [r2, 0x58c]                         |     __asm ("str.w r3, [r2, 0x58c]");
    0x0000a5ae ldr.w r3, [fp, 0x228]                         |     r3 = *(arg_228h);
    0x0000a5b2 b.w 0x9052                                    |     goto label_68;
                                                             | label_125:
    0x0000a5d0 ldr r1, [pc, 0x108]                           |     
    0x0000a5d2 add r1, pc                                    |     r1 = 0x14cb2;
    0x0000a5d4 b 0xa342                                      |     goto label_69;
                                                             | label_104:
    0x0000a614 mov r0, r3                                    |     r0 = r3;
    0x0000a616 movs r1, 1                                    |     r1 = 1;
    0x0000a618 str r2, [r7, 0x40]                            |     *((r7 + 0x40)) = r2;
    0x0000a61a str r3, [r7, 0x4c]                            |     *((r7 + 0x4c)) = r3;
    0x0000a61c bl 0x8d04                                     |     fcn_00008d04 (r0);
    0x0000a620 ldr r3, [r7, 0x4c]                            |     r3 = *((r7 + 0x4c));
    0x0000a622 ldr r2, [r7, 0x40]                            |     r2 = *((r7 + 0x40));
    0x0000a624 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000a626 bne 0xa558                                    |         goto label_70;
                                                             |     }
    0x0000a628 ldr.w r1, [r3, 0x244]                         |     r1 = *((r3 + 0x244));
    0x0000a62c b.w 0x989a                                    |     goto label_71;
                                                             |     do {
    0x0000a63c ldr r0, [pc, 0xa8]                            |         
    0x0000a63e movs r2, 0                                    |         r2 = 0;
    0x0000a640 ldr.w r1, [fp, 4]                             |         r1 = *(arg_4h);
    0x0000a644 add r0, pc                                    |         
    0x0000a646 ldr r0, [r0]                                  |         r0 = *(0x14d30);
    0x0000a648 blx 0x9f4                                     |         fcn_000009f4 ();
                                                             | label_114:
    0x0000a64c ldr r3, [pc, 0x9c]                            |         
    0x0000a64e add r3, pc                                    |         r3 = 0x14d3e;
    0x0000a650 b 0xa63c                                      |         
                                                             |     } while (1);
                                                             | label_127:
    0x0000a652 ldr r1, [pc, 0x9c]                            |     
    0x0000a654 add r1, pc                                    |     r1 = 0x14d4a;
    0x0000a656 b 0xa52e                                      |     goto label_72;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xfd5c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym._dl_exception_create_format ()                   | void dl_exception_create_format (int16_t arg_2h, int16_t arg1, uint32_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0000fd5c push {r2, r3}                                     |     
    0x0000fd5e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0000fd62 sub sp, 0x1c                                      |     
    0x0000fd64 mov sb, r0                                        |     sb = r0;
    0x0000fd66 ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x0000fd68 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000fd6a beq.w 0xff4a                                      |         goto label_15;
                                                                 |     }
    0x0000fd6e mov r0, r1                                        |     r0 = r1;
    0x0000fd70 mov sl, r1                                        |     sl = r1;
    0x0000fd72 bl 0x15540                                        |     r0 = fcn_00015540 (r0, r1);
    0x0000fd76 adds r7, r0, 2                                    |     r7 = r0 + 2;
    0x0000fd78 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0000fd7a str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_5:
    0x0000fd7c ldrb r2, [r6]                                     |     r2 = *(r6);
    0x0000fd7e add r5, sp, 0x44                                  |     r5 += var_44h;
    0x0000fd80 str r5, [sp, 0x14]                                |     var_14h = r5;
                                                                 |     if (r2 == 0) {
    0x0000fd82 cbz r2, 0xfdca                                    |         goto label_16;
                                                                 |     }
    0x0000fd84 mov r3, r6                                        |     r3 = r6;
    0x0000fd86 b 0xfd8e                                          |     
                                                                 |     while (r2 != 0x25) {
                                                                 | label_1:
    0x0000fd88 ldrb r2, [r4, 1]                                  |         r2 = *((r4 + 1));
    0x0000fd8a adds r3, r4, 1                                    |         r3 = r4 + 1;
                                                                 |         if (r2 == 0) {
    0x0000fd8c cbz r2, 0xfdc4                                    |             goto label_17;
                                                                 |         }
                                                                 | label_0:
    0x0000fd8e cmp r2, 0x25                                      |         
    0x0000fd90 add.w r4, r3, 1                                   |         r4 = r3 + 1;
    0x0000fd94 itt ne                                            |         
                                                                 |         if (r2 == 0x25) {
    0x0000fd96 addne r7, 1                                       |             r7++;
                                                                 |         }
                                                                 |         if (r2 == 0x25) {
    0x0000fd98 movne r4, r3                                      |             r4 = r3;
                                                                 |         }
    0x0000fd9a bne 0xfd88                                        |         
                                                                 |     }
    0x0000fd9c ldrb r2, [r3, 1]                                  |     r2 = *((r3 + 1));
    0x0000fd9e ldrb r1, [r3, 2]                                  |     r1 = *((r3 + 2));
    0x0000fda0 subs r2, 0x6c                                     |     r2 -= 0x6c;
    0x0000fda2 cmp r2, 0xe                                       |     
                                                                 |     if (r2 <= 0xe) {
    0x0000fda4 bhi 0xfdba                                        |         
                                                                 |         /* switch table (15 cases) at 0xfdaa */
    0x0000fda6 tbb [pc, r2]                                      |         __asm ("tbb [0x0000fdac]");
                                                                 |     }
    0x0000fdba ldrb r2, [r4, 1]                                  |     r2 = *((r4 + 1));
    0x0000fdbc adds r7, 1                                        |     r7++;
    0x0000fdbe adds r3, r4, 1                                    |     r3 = r4 + 1;
    0x0000fdc0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000fdc2 bne 0xfd8e                                        |         goto label_0;
                                                                 |     }
                                                                 | label_17:
    0x0000fdc4 cmp r7, 0                                         |     
                                                                 |     if (r7 < 0) {
    0x0000fdc6 blt.w 0xff2e                                      |         goto label_18;
                                                                 |     }
                                                                 | label_16:
    0x0000fdca ldr r3, [pc, 0x198]                               |     
    0x0000fdcc mov r0, r7                                        |     r0 = r7;
    0x0000fdce add r3, pc                                        |     
    0x0000fdd0 ldr r3, [r3]                                      |     r3 = *(0x1fd38);
    0x0000fdd2 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000fdd4 mov r4, r0                                        |     r4 = r0;
    0x0000fdd6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000fdd8 beq.w 0xff2e                                      |         goto label_18;
                                                                 |     }
    0x0000fddc ldr r3, [pc, 0x188]                               |     
    0x0000fdde str.w r0, [sb, 4]                                 |     __asm ("str.w r0, [sb, 4]");
    0x0000fde2 add r3, pc                                        |     
    0x0000fde4 ldr r3, [r3]                                      |     r3 = *(0x1fd4e);
                                                                 |     if (r3 != 0) {
    0x0000fde6 cbz r3, 0xfdf6                                    |         
    0x0000fde8 ldrb.w r3, [r3, 0x198]                            |         r3 = *((r3 + 0x198));
    0x0000fdec tst.w r3, 4                                       |         
    0x0000fdf0 ite ne                                            |         
                                                                 |         if ((r3 & 4) == 0) {
    0x0000fdf2 movne r3, r0                                      |             r3 = r0;
                                                                 |         }
                                                                 |         if ((r3 & 4) == 0) {
    0x0000fdf4 moveq r3, 0                                       |             r3 = 0;
                                                                 |             goto label_19;
                                                                 |         }
                                                                 |     }
                                                                 | label_19:
    0x0000fdf6 str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x0000fdfa add r7, r4                                        |     r7 += r4;
    0x0000fdfc ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0000fdfe str r5, [sp, 0x14]                                |     var_14h = r5;
    0x0000fe00 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000fe02 beq 0xfea8                                        |         goto label_20;
                                                                 |     }
    0x0000fe04 mov.w fp, 0                                       |     
    0x0000fe08 b 0xfe1e                                          |     
                                                                 |     while (r3 != 0x25) {
    0x0000fe0a cmp r7, r4                                        |         
                                                                 |         if (r7 == r4) {
    0x0000fe0c beq.w 0xff2a                                      |             goto label_21;
                                                                 |         }
    0x0000fe10 mov r5, r6                                        |         r5 = r6;
                                                                 | label_4:
    0x0000fe12 strb r3, [r4], 1                                  |         *(r4) = r3;
                                                                 |         r4++;
                                                                 | label_3:
    0x0000fe16 ldrb r3, [r5, 1]                                  |         r3 = *((r5 + 1));
    0x0000fe18 adds r6, r5, 1                                    |         r6 = r5 + 1;
    0x0000fe1a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0000fe1c beq 0xfea8                                        |             goto label_20;
                                                                 |         }
                                                                 | label_2:
    0x0000fe1e cmp r3, 0x25                                      |         
    0x0000fe20 bne 0xfe0a                                        |         
                                                                 |     }
    0x0000fe22 ldrb r2, [r6, 1]                                  |     r2 = *((r6 + 1));
    0x0000fe24 adds r5, r6, 1                                    |     r5 = r6 + 1;
    0x0000fe26 cmp r2, 0x25                                      |     
                                                                 |     if (r2 == 0x25) {
    0x0000fe28 beq 0xff24                                        |         goto label_22;
                                                                 |     }
    0x0000fe2a sub.w r3, r2, 0x6c                                |     r3 = r2 - 0x6c;
    0x0000fe2e uxtb r2, r3                                       |     r2 = (int8_t) r3;
    0x0000fe30 cmp r2, 0xe                                       |     
                                                                 |     if (r2 > 0xe) {
    0x0000fe32 bhi.w 0xff5c                                      |         goto label_23;
                                                                 |     }
    0x0000fe36 cmp r3, 0xe                                       |     
                                                                 |     if (r3 > 0xe) {
    0x0000fe38 bhi.w 0xff5c                                      |         goto label_23;
                                                                 |     }
                                                                 |     /* switch table (15 cases) at 0xfe40 */
    0x0000fe3c tbb [pc, r3]                                      |     __asm ("tbb [0x0000fe44]");
    0x0000fe50 cmp r1, 0x78                                      |     
    0x0000fe52 itt eq                                            |     
                                                                 |     if (r1 != 0x78) {
    0x0000fe54 addeq r7, 8                                       |         r7 += 8;
                                                                 |     }
                                                                 |     if (r1 == 0x78) {
    0x0000fe56 addeq r4, r3, 2                                   |         r4 = r3 + 2;
                                                                 |         goto label_24;
                                                                 |     }
                                                                 |     if (r1 == 0x78) {
                                                                 | label_24:
    0x0000fe58 beq 0xfd88                                        |         goto label_1;
                                                                 |     }
    0x0000fe5a adds r7, 8                                        |     r7 += 8;
    0x0000fe5c b 0xfd88                                          |     goto label_1;
    0x0000fe5e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0000fe60 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0000fe62 ldr r0, [r3]                                      |     r0 = *(r3);
    0x0000fe64 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0000fe66 bl 0x15540                                        |     r0 = fcn_00015540 (r0, r1);
    0x0000fe6a add r7, r0                                        |     r7 += r0;
    0x0000fe6c b 0xfd88                                          |     goto label_1;
    0x0000fe6e ldrb r3, [r6, 2]                                  |     r3 = *((r6 + 2));
    0x0000fe70 cmp r3, 0x78                                      |     
                                                                 |     if (r3 != 0x78) {
    0x0000fe72 bne 0xff5c                                        |         goto label_23;
                                                                 |     }
    0x0000fe74 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0000fe76 add.w r8, r4, 8                                   |     r8 = r4 + 8;
    0x0000fe7a mov r2, r8                                        |     r2 = r8;
    0x0000fe7c movs r1, 0                                        |     r1 = 0;
    0x0000fe7e ldr r0, [r3]                                      |     r0 = *(r3);
    0x0000fe80 adds r3, 4                                        |     r3 += 4;
    0x0000fe82 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000fe84 movs r3, 0x10                                     |     r3 = 0x10;
    0x0000fe86 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0000fe8a bl 0x1223c                                        |     r0 = fcn_0001223c (r0, r1, r2, r3, r4);
    0x0000fe8e cmp r0, r4                                        |     
                                                                 |     if (r0 != r4) {
    0x0000fe90 beq 0xfe9c                                        |         
    0x0000fe92 subs r2, r0, r4                                   |         r2 = r0 - r4;
    0x0000fe94 movs r1, 0x30                                     |         r1 = 0x30;
    0x0000fe96 mov r0, r4                                        |         r0 = r4;
    0x0000fe98 blx 0x15da0                                       |         fcn_00015da0 (r0, r1);
                                                                 |     }
    0x0000fe9c ldrb r3, [r6, 3]                                  |     r3 = *((r6 + 3));
    0x0000fe9e adds r5, r6, 2                                    |     r5 = r6 + 2;
    0x0000fea0 mov r4, r8                                        |     r4 = r8;
    0x0000fea2 adds r6, r5, 1                                    |     r6 = r5 + 1;
    0x0000fea4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000fea6 bne 0xfe1e                                        |         goto label_2;
                                                                 |     }
                                                                 | label_20:
    0x0000fea8 cmp r7, r4                                        |     
                                                                 |     if (r7 == r4) {
    0x0000feaa beq 0xff2a                                        |         goto label_21;
                                                                 |     }
    0x0000feac mov r0, r4                                        |     r0 = r4;
    0x0000feae movs r3, 0                                        |     r3 = 0;
    0x0000feb0 strb r3, [r0], 1                                  |     *(r0) = r3;
                                                                 |     r0++;
    0x0000feb4 subs r7, r7, r0                                   |     r7 -= r0;
    0x0000feb6 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0000feb8 cmp r7, r3                                        |     
                                                                 |     if (r7 != r3) {
    0x0000feba bne 0xff2a                                        |         goto label_21;
                                                                 |     }
    0x0000febc mov r2, r3                                        |     r2 = r3;
    0x0000febe mov r1, sl                                        |     r1 = sl;
    0x0000fec0 blx 0x15f40                                       |     fcn_00015f40 (r0, r1);
    0x0000fec4 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x0000fec8 add sp, 0x1c                                      |     
    0x0000feca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0000fece add sp, 8                                         |     
    0x0000fed0 bx lr                                             |     return;
    0x0000fed2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0000fed4 add.w r6, r4, 8                                   |     r6 = r4 + 8;
    0x0000fed8 mov r2, r6                                        |     r2 = r6;
    0x0000feda movs r1, 0                                        |     r1 = 0;
    0x0000fedc ldr r0, [r3]                                      |     r0 = *(r3);
    0x0000fede adds r3, 4                                        |     r3 += 4;
    0x0000fee0 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000fee2 movs r3, 0x10                                     |     r3 = 0x10;
    0x0000fee4 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0000fee8 bl 0x1223c                                        |     r0 = fcn_0001223c (r0, r1, r2, r3, r4);
    0x0000feec cmp r0, r4                                        |     
                                                                 |     if (r0 == r4) {
    0x0000feee beq 0xff58                                        |         goto label_25;
                                                                 |     }
    0x0000fef0 subs r2, r0, r4                                   |     r2 = r0 - r4;
    0x0000fef2 movs r1, 0x30                                     |     r1 = 0x30;
    0x0000fef4 mov r0, r4                                        |     r0 = r4;
    0x0000fef6 mov r4, r6                                        |     r4 = r6;
    0x0000fef8 blx 0x15da0                                       |     fcn_00015da0 (r0, r1);
    0x0000fefc b 0xfe16                                          |     goto label_3;
    0x0000fefe ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0000ff00 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x0000ff04 adds r3, 4                                        |     r3 += 4;
    0x0000ff06 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000ff08 mov r0, r8                                        |     r0 = r8;
    0x0000ff0a bl 0x15540                                        |     fcn_00015540 (r0, r1);
    0x0000ff0e subs r3, r7, r4                                   |     r3 = r7 - r4;
    0x0000ff10 mov r6, r0                                        |     r6 = r0;
    0x0000ff12 cmp r3, r0                                        |     
                                                                 |     if (r3 <= r0) {
    0x0000ff14 blo 0xff2a                                        |         goto label_21;
                                                                 |     }
    0x0000ff16 mov r0, r4                                        |     r0 = r4;
    0x0000ff18 mov r2, r6                                        |     r2 = r6;
    0x0000ff1a mov r1, r8                                        |     r1 = r8;
    0x0000ff1c blx 0x15f40                                       |     r0 = fcn_00015f40 (r0, r1);
    0x0000ff20 adds r4, r0, r6                                   |     r4 = r0 + r6;
    0x0000ff22 b 0xfe16                                          |     goto label_3;
                                                                 | label_22:
    0x0000ff24 cmp r7, r4                                        |     
                                                                 |     if (r7 != r4) {
    0x0000ff26 bne.w 0xfe12                                      |         goto label_4;
                                                                 |     }
                                                                 | label_21:
    0x0000ff2a bl 0xfc98                                         |     fcn_0000fc98 ();
                                                                 | label_18:
    0x0000ff2e ldr r2, [pc, 0x3c]                                |     
    0x0000ff30 movs r1, 0                                        |     r1 = 0;
    0x0000ff32 ldr r3, [pc, 0x3c]                                |     
    0x0000ff34 str.w r1, [sb, 8]                                 |     __asm ("str.w r1, [sb, 8]");
    0x0000ff38 add r2, pc                                        |     r2 = 0x1feaa;
    0x0000ff3a add r3, pc                                        |     r3 = 0x1feb0;
    0x0000ff3c strd r2, r3, [sb]                                 |     __asm ("strd r2, r3, [sb]");
    0x0000ff40 add sp, 0x1c                                      |     
    0x0000ff42 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0000ff46 add sp, 8                                         |     
    0x0000ff48 bx lr                                             |     return;
                                                                 | label_15:
    0x0000ff4a ldr.w sl, [pc, 0x28]                              |     
    0x0000ff4e movs r3, 1                                        |     r3 = 1;
    0x0000ff50 movs r7, 2                                        |     r7 = 2;
    0x0000ff52 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0000ff54 add sl, pc                                        |     sl = 0x1fece;
    0x0000ff56 b 0xfd7c                                          |     goto label_5;
                                                                 | label_25:
    0x0000ff58 mov r4, r6                                        |     r4 = r6;
    0x0000ff5a b 0xfe16                                          |     goto label_3;
                                                                 | label_23:
    0x0000ff5c ldr r0, [pc, 0x18]                                |     
    0x0000ff5e add r0, pc                                        |     r0 = 0x1feda;
    0x0000ff60 bl 0xc2a4                                         |     dl_fatal_printf ()
                                                                 |     if (r7 != 2) {
    0x0000ff64 bne 0xff7c                                        |         void (*0xff7c)() ();
                                                                 |     }
    0x0000ff66 movs r1, r0                                       |     r1 = r0;
                                                                 |     if (r1 < r0) {
    0x0000ff68 bhs 0xffc0                                        |         
    0x0000ff6a movs r1, r0                                       |         r1 = r0;
    0x0000ff6c ldrh r4, [r5, 0x3a]                               |         r4 = *((r5 + 0x3a));
    0x0000ff6e movs r0, r0                                       |         
    0x0000ff70 adr r4, 0x3c8                                     |         r4 = 0x3c8;
    0x0000ff72 movs r0, r0                                       |         
    0x0000ff74 ldrh r0, [r2, 0x3a]                               |         r0 = *((r2 + 0x3a));
    0x0000ff76 movs r0, r0                                       |         
    0x0000ff78 adr r4, 0x268                                     |         r4 = 0x268;
    0x0000ff7a movs r0, r0                                       |         
                                                                 |     }
    0x0000ffc0 adds r3, r2, 7                                    |     r3 = r2 + 7;
    0x0000ffc2 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x0000ffc6 mov r1, r6                                        |     r1 = r6;
    0x0000ffc8 sub.w sp, sp, r3                                  |     
    0x0000ffcc mov fp, r6                                        |     
    0x0000ffce mov sl, sp                                        |     sl = sp;
    0x0000ffd0 mov.w sb, 1                                       |     sb = 1;
    0x0000ffd4 mov r0, sl                                        |     r0 = sl;
    0x0000ffd6 str r6, [r7, 0x28]                                |     *((r7 + 0x28)) = r6;
    0x0000ffd8 blx 0x15da0                                       |     fcn_00015da0 (r0, r1);
                                                                 | label_6:
    0x0000ffdc ldrh.w r3, [sl, fp]                               |     r3 = *((sl + fp));
    0x0000ffe0 add.w r2, sl, fp                                  |     r2 = sl + fp;
    0x0000ffe4 str r2, [r7, 0x24]                                |     *((r7 + 0x24)) = r2;
    0x0000ffe6 ldr r2, [r7, 0x28]                                |     r2 = *((r7 + 0x28));
    0x0000ffe8 adds r3, 1                                        |     r3++;
    0x0000ffea uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0000ffec str r3, [r7, 0x10]                                |     *((r7 + 0x10)) = r3;
    0x0000ffee strh.w r3, [sl, fp]                               |     *((sl + fp)) = r3;
    0x0000fff2 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0000fff4 ldr r4, [r3, r2]                                  |     r4 = *((r3 + r2));
    0x0000fff6 adds r0, r3, r2                                   |     r0 = r3 + r2;
    0x0000fff8 ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x0000fffa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000fffc bne 0x100f0                                       |         goto label_26;
                                                                 |     }
                                                                 | label_14:
    0x0000fffe ldr r5, [r7, 0xc]                                 |     r5 = *((r7 + 0xc));
    0x00010000 cmp r5, r6                                        |     
                                                                 |     if (r5 < r6) {
    0x00010002 bls 0x1001e                                       |         goto label_13;
                                                                 |     }
    0x00010004 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
                                                                 |     do {
    0x00010006 mov r8, r3                                        |         r8 = r3;
    0x00010008 ldr r2, [r3], -4                                  |         r2 = *(r3);
                                                                 |         r3 += -4;
    0x0001000c ldr.w r1, [r2, 0x1f8]                             |         r1 = *((r2 + 0x1f8));
                                                                 |         if (r1 != 0) {
    0x00010010 cbnz r1, 0x10048                                  |             goto label_27;
                                                                 |         }
                                                                 | label_7:
    0x00010012 ldr r1, [r7, 0x2c]                                |         r1 = *((r7 + 0x2c));
    0x00010014 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x00010016 bne 0x100aa                                       |             goto label_28;
                                                                 |         }
                                                                 | label_10:
    0x00010018 subs r5, 1                                        |         r5--;
    0x0001001a cmp r6, r5                                        |         
    0x0001001c bne 0x10006                                       |         
                                                                 |     } while (r6 != r5);
                                                                 | label_13:
    0x0001001e ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00010020 cmp r3, sb                                        |     
                                                                 |     if (r3 == sb) {
    0x00010022 beq 0x10106                                       |         goto label_29;
                                                                 |     }
                                                                 | label_9:
    0x00010024 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00010026 lsl.w fp, sb, 1                                   |     
    0x0001002a movs r1, 0                                        |     r1 = 0;
    0x0001002c add.w r0, sl, fp                                  |     r0 = sl + fp;
    0x00010030 mov r6, sb                                        |     r6 = sb;
    0x00010032 sub.w r2, r3, sb                                  |     r2 = r3 - sb;
    0x00010036 lsl.w r3, sb, 2                                   |     r3 = sb << 2;
    0x0001003a lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0001003c add.w sb, sb, 1                                   |     sb++;
    0x00010040 str r3, [r7, 0x28]                                |     *((r7 + 0x28)) = r3;
    0x00010042 blx 0x15da0                                       |     fcn_00015da0 (r0, r1);
    0x00010046 b 0xffdc                                          |     goto label_6;
                                                                 | label_27:
    0x00010048 sub.w ip, r1, 4                                   |     
                                                                 | label_8:
    0x0001004c ldr r1, [ip, 4]!                                  |     r1 = *((ip += 4));
    0x00010050 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00010052 beq 0x10012                                       |         goto label_7;
                                                                 |     }
    0x00010054 cmp r1, r4                                        |     
                                                                 |     if (r1 != r4) {
    0x00010056 bne 0x1004c                                       |         goto label_8;
                                                                 |     }
                                                                 | label_11:
    0x00010058 ldr r2, [r7, 0x28]                                |     r2 = *((r7 + 0x28));
    0x0001005a subs r3, r5, r6                                   |     r3 = r5 - r6;
    0x0001005c str r3, [r7, 0x14]                                |     *((r7 + 0x14)) = r3;
    0x0001005e adds r1, r2, 4                                    |     r1 = r2 + 4;
    0x00010060 ldr r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x00010062 add r1, r2                                        |     r1 += r2;
    0x00010064 lsls r2, r3, 2                                    |     r2 = r3 << 2;
    0x00010066 blx 0x15a80                                       |     fcn_00015a80 (r0, r1);
    0x0001006a ldr r1, [r7, 0x1c]                                |     r1 = *((r7 + 0x1c));
    0x0001006c ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0001006e str.w r4, [r8]                                    |     __asm ("str.w r4, [r8]");
                                                                 |     if (r1 != 0) {
    0x00010072 cbz r1, 0x10088                                   |         
    0x00010074 mov r2, r3                                        |         r2 = r3;
    0x00010076 mov r3, r1                                        |         r3 = r1;
    0x00010078 ldrb r4, [r1, r6]                                 |         r4 = *((r1 + r6));
    0x0001007a adds r0, r3, r6                                   |         r0 = r3 + r6;
    0x0001007c add r1, sb                                        |         r1 += sb;
    0x0001007e blx 0x15a80                                       |         fcn_00015a80 (r0, r1);
    0x00010082 ldr r3, [r7, 0x1c]                                |         r3 = *((r7 + 0x1c));
    0x00010084 strb r4, [r3, r5]                                 |         *((r3 + r5)) = r4;
    0x00010086 ldr r3, [r7, 0x14]                                |         r3 = *((r7 + 0x14));
                                                                 |     }
    0x00010088 ldr r2, [r7, 0x24]                                |     r2 = *((r7 + 0x24));
    0x0001008a ldrh r1, [r2, 2]                                  |     r1 = *((r2 + 2));
    0x0001008c ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x0001008e subs r2, r2, r6                                   |     r2 -= r6;
    0x00010090 cmp r1, r2                                        |     
                                                                 |     if (r1 > r2) {
    0x00010092 bhi 0x10024                                       |         goto label_9;
                                                                 |     }
    0x00010094 add.w r1, fp, 2                                   |     r1 += arg_2h;
    0x00010098 lsls r2, r3, 1                                    |     r2 = r3 << 1;
    0x0001009a ldr r0, [r7, 0x24]                                |     r0 = *((r7 + 0x24));
    0x0001009c add r1, sl                                        |     r1 += sl;
    0x0001009e blx 0x15a80                                       |     fcn_00015a80 (r0, r1);
    0x000100a2 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x000100a4 strh.w r3, [sl, r5, lsl 1]                        |     offset_0 = r5 << 1;
                                                                 |     *((sl + offset_0)) = r3;
    0x000100a8 b 0xffdc                                          |     goto label_6;
                                                                 | label_28:
    0x000100aa ldr.w r1, [r2, 0x1fc]                             |     r1 = *((r2 + 0x1fc));
    0x000100ae cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000100b0 beq 0x10018                                       |         goto label_10;
                                                                 |     }
    0x000100b2 ldr.w ip, [r1]                                    |     ip = *(r1);
    0x000100b6 mov lr, r3                                        |     lr = r3;
    0x000100b8 str.w ip, [r7, 0x14]                              |     __asm ("str.w ip, [r7, 0x14]");
    0x000100bc add.w r1, r1, ip, lsl 2                           |     r1 += (ip << 2);
    0x000100c0 mov ip, r2                                        |     
    0x000100c2 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
                                                                 |     do {
                                                                 |         if (r2 == 0) {
    0x000100c4 cbz r2, 0x10112                                   |             goto label_30;
                                                                 |         }
    0x000100c6 ldr r3, [r1], -4                                  |         r3 = *(r1);
                                                                 |         r1 += -4;
    0x000100ca subs r2, 1                                        |         r2--;
    0x000100cc cmp r3, r4                                        |         
    0x000100ce bne 0x100c4                                       |         
                                                                 |     } while (r3 != r4);
    0x000100d0 ldr.w r1, [r4, 0x1f8]                             |     r1 = *((r4 + 0x1f8));
    0x000100d4 mov r2, ip                                        |     r2 = ip;
    0x000100d6 mov r3, lr                                        |     r3 = lr;
    0x000100d8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000100da beq 0x10058                                       |         goto label_11;
                                                                 |     }
    0x000100dc sub.w ip, r1, 4                                   |     
    0x000100e0 b 0x100e6                                         |     goto label_31;
                                                                 | label_12:
    0x000100e2 cmp r2, r1                                        |     
                                                                 |     if (r2 == r1) {
    0x000100e4 beq 0x10018                                       |         goto label_10;
                                                                 |     }
                                                                 | label_31:
    0x000100e6 ldr r1, [ip, 4]!                                  |     r1 = *((ip += 4));
    0x000100ea cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000100ec bne 0x100e2                                       |         goto label_12;
                                                                 |     }
    0x000100ee b 0x10058                                         |     goto label_11;
                                                                 | label_26:
    0x000100f0 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x000100f2 cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x000100f4 bne 0x1001e                                       |         goto label_13;
                                                                 |     }
    0x000100f6 ldr.w r3, [r4, 0x214]                             |     r3 = *((r4 + 0x214));
    0x000100fa adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x000100fc bne.w 0xfffe                                      |         goto label_14;
                                                                 |     }
    0x00010100 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00010102 cmp r3, sb                                        |     
                                                                 |     if (r3 != sb) {
    0x00010104 bne 0x10024                                       |         goto label_9;
                                                                 |     }
                                                                 | label_29:
    0x00010106 ldr.w sp, [r7, 4]                                 |     sp = *((r7 + 4));
    0x0001010a adds r7, 0x34                                     |     r7 += 0x34;
    0x0001010c mov sp, r7                                        |     
    0x0001010e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_30:
    0x00010112 mov r3, lr                                        |     r3 = lr;
    0x00010114 b 0x10018                                         |     goto label_10;
                                                                 | }

[*] Function printf used 17 times ld-linux-armhf.so.3