[*] Binary protection state of fwmgr

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


[*] Function strcpy tear down of fwmgr

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/fwmgr @ 0x67a8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000067a8 ()                                      | void fcn_000067a8 (uint32_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     char * str;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_1ch;
                                                                 |     char * dest;
                                                                 |     int16_t var_60h;
                                                                 |     char * path;
                                                                 |     char * s2;
                                                                 |     int16_t var_e4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000067a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000067ac sub sp, 0xec                                      |     
    0x000067ae ldr.w r4, [pc, 0x530]                             |     r4 = *(0x00006ce0);
    0x000067b2 ldr.w r2, [pc, 0x530]                             |     
    0x000067b6 add r4, pc                                        |     r4 += pc;
    0x000067b8 ldr.w r6, [pc, 0x52c]                             |     r6 = *(0x00006ce8);
    0x000067bc ldr.w r3, [pc, 0x52c]                             |     r3 = *(0x6cec);
    0x000067c0 ldr r2, [r4, r2]                                  |     r2 = *((r4 + r2));
    0x000067c2 add r6, pc                                        |     r6 += pc;
    0x000067c4 ldr r2, [r2]                                      |     r2 = *(0x6ce6);
    0x000067c6 str r2, [sp, 0xe4]                                |     var_e4h = r2;
    0x000067c8 mov.w r2, 0                                       |     r2 = 0;
    0x000067cc ldr r3, [r6, r3]                                  |     r3 = *((r6 + r3));
    0x000067ce ldrb r3, [r3]                                     |     r3 = *(r3);
                                                                 |     if (r3 == 0) {
    0x000067d0 cbz r3, 0x6804                                    |         goto label_13;
                                                                 |     }
    0x000067d2 ldr.w r7, [pc, 0x51c]                             |     r7 = *(0x00006cf0);
    0x000067d6 add r7, pc                                        |     r7 += pc;
    0x000067d8 ldrb r3, [r7, 8]                                  |     r3 = *((r7 + 8));
    0x000067da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000067dc beq.w 0x6986                                      |         goto label_14;
                                                                 |     }
                                                                 |     do {
                                                                 | label_0:
    0x000067e0 movs r4, 0                                        |         r4 = 0;
                                                                 | label_1:
    0x000067e2 ldr.w r2, [pc, 0x510]                             |         r2 = *(0x00006cf4);
    0x000067e6 ldr.w r3, [pc, 0x4fc]                             |         r3 = *(0x6ce6);
    0x000067ea add r2, pc                                        |         r2 += pc;
    0x000067ec ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x000067ee ldr r2, [r3]                                      |         r2 = *(0x6ce6);
    0x000067f0 ldr r3, [sp, 0xe4]                                |         r3 = var_e4h;
    0x000067f2 eors r2, r3                                       |         r2 ^= r3;
    0x000067f4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000067f8 bne.w 0x6cdc                                      |             goto label_15;
                                                                 |         }
    0x000067fc mov r0, r4                                        |         r0 = r4;
    0x000067fe add sp, 0xec                                      |         
    0x00006800 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_13:
    0x00006804 ldr.w r3, [pc, 0x4f0]                             |         r3 = *(0x00006cf8);
    0x00006808 mov r4, r0                                        |         r4 = r0;
    0x0000680a add r3, pc                                        |         r3 += pc;
    0x0000680c ldr r2, [r3]                                      |         r2 = *(r3);
    0x0000680e cmp r2, r0                                        |         
    0x00006810 beq 0x67e0                                        |         
                                                                 |     } while (r2 == r0);
    0x00006812 ldr.w r2, [r3, 0xc4]                              |     r2 = *((r3 + 0xc4));
    0x00006816 cmp r2, r0                                        |     
                                                                 |     if (r2 == r0) {
    0x00006818 beq 0x67e0                                        |         goto label_0;
                                                                 |     }
    0x0000681a sub.w r7, r1, 1                                   |     r7 = r1 - 1;
    0x0000681e mov r5, r1                                        |     r5 = r1;
    0x00006820 clz r7, r7                                        |     r7 &= r7;
    0x00006824 lsrs r7, r7, 5                                    |     r7 >>= 5;
    0x00006826 lsls r1, r7, 2                                    |     r1 = r7 << 2;
    0x00006828 add.w sb, r3, r1                                  |     sb = r3 + r1;
    0x0000682c ldr.w r8, [sb, 0x188]                             |     r8 = *((sb + 0x188));
    0x0000682e strh r0, [r1, 0xc]                                |     *((r1 + 0xc)) = r0;
    0x00006830 cmp.w r8, 0                                       |     
                                                                 |     if (r8 < 0) {
    0x00006834 blt.w 0x6a90                                      |         goto label_16;
                                                                 |     }
    0x00006838 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0000683c beq 0x67e0                                        |         goto label_0;
                                                                 |     }
                                                                 | label_2:
    0x0000683e blx 0x2f88                                        |     cxa_finalize ();
    0x00006842 cmp.w r8, 1                                       |     
    0x00006846 mov sl, r0                                        |     sl = r0;
                                                                 |     if (r8 > 1) {
    0x00006848 bgt.w 0x6be4                                      |         goto label_17;
                                                                 |     }
    0x0000684a strh r4, [r1, 0xe]                                |     *((r1 + 0xe)) = r4;
    0x0000684c ldr.w r3, [pc, 0x4ac]                             |     r3 = *(0x00006cfc);
    0x00006850 add r3, pc                                        |     r3 += pc;
    0x00006852 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00006854 adds r2, 1                                        |     r2++;
                                                                 |     if (r2 == 1) {
    0x00006856 beq.w 0x6ac8                                      |         goto label_18;
                                                                 |     }
    0x0000685a ldr.w r3, [r3, 0xc4]                              |     r3 = *((r3 + 0xc4));
    0x0000685e adds r3, 1                                        |     r3++;
    0x00006860 it eq                                             |     
                                                                 |     if (r3 != 1) {
    0x00006862 moveq fp, 1                                       |         
                                                                 |     }
                                                                 |     if (r3 != 1) {
    0x00006866 bne.w 0x6c3e                                      |         goto label_19;
                                                                 |     }
                                                                 | label_4:
    0x0000686a cmp r5, 4                                         |     
                                                                 |     if (r5 == 4) {
    0x0000686c beq.w 0x6bfa                                      |         goto label_20;
                                                                 |     }
    0x00006870 cmp r5, 1                                         |     
                                                                 |     if (r5 < 1) {
    0x00006872 bls.w 0x6b18                                      |         goto label_21;
                                                                 |     }
    0x00006874 strh r1, [r2, 0xa]                                |     *((r2 + 0xa)) = r1;
    0x00006876 movs r3, 0xc4                                     |     r3 = 0xc4;
    0x00006878 ldr.w ip, [pc, 0x484]                             |     ip = *(0x00006d00);
    0x0000687c mul r7, r3, fp                                    |     r7 = r3 * fp;
    0x00006880 ldr.w sb, [pc, 0x480]                             |     sb = *(0x00006d04);
    0x00006884 add ip, pc                                        |     
    0x00006886 add sb, pc                                        |     sb += pc;
    0x00006888 add.w ip, ip, 0x4c                                |     
    0x0000688a lsrs r4, r1, 0x11                                 |     r4 = r1 >> 0x11;
    0x0000688c add.w r3, sb, r7                                  |     r3 = sb + r7;
    0x00006890 add.w r2, r7, 0x44                                |     r2 = r7 + 0x44;
    0x00006894 add.w lr, r3, 4                                   |     lr = r3 + 4;
    0x00006898 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0000689a str r2, [sp, 0xc]                                 |     var_ch_2 = r2;
    0x0000689c add.w r8, r7, 4                                   |     r8 = r7 + 4;
    0x000068a0 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x000068a4 add r8, sb                                        |     r8 += sb;
    0x000068a6 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x000068aa ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x000068ae stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x000068b2 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x000068b6 stm.w lr!, {r0, r1, r2, r3}                       |     *(lr!) = r0;
                                                                 |     *((lr! + 4)) = r1;
                                                                 |     *((lr! + 8)) = r2;
                                                                 |     *((lr! + 12)) = r3;
    0x000068ba ldm.w ip, {r0, r1, r2, r3}                        |     r0 = *(ip);
                                                                 |     r1 = *((ip + 4));
                                                                 |     r2 = *((ip + 8));
                                                                 |     r3 = *((ip + 12));
    0x000068be stm.w lr, {r0, r1, r2, r3}                        |     *(lr) = r0;
                                                                 |     *((lr + 4)) = r1;
                                                                 |     *((lr + 8)) = r2;
                                                                 |     *((lr + 12)) = r3;
    0x000068c2 movs r1, 0x40                                     |     r1 = 0x40;
    0x000068c4 ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x000068c6 add.w r0, sb, r2                                  |     r0 = sb + r2;
    0x000068ca movs r2, 0                                        |     r2 = 0;
    0x000068cc blx 0x2abc                                        |     r0 = fcn_00002abc ();
    0x000068d0 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x000068d2 blt.w 0x6aba                                      |         goto label_8;
                                                                 |     }
    0x000068d6 cmp r5, 3                                         |     
                                                                 |     if (r5 != 3) {
    0x000068d8 bne.w 0x6c26                                      |         goto label_22;
                                                                 |     }
    0x000068dc movs r3, 0xc4                                     |     r3 = 0xc4;
    0x000068de rsb.w r0, fp, 1                                   |     r0 = 1 - fp;
    0x000068e2 mla r0, r3, r0, sb                                |     __asm ("mla r0, r3, r0, sb");
    0x000068e6 add r5, sp, 0xa4                                  |     r5 += s2;
    0x000068e8 mov r2, r5                                        |     r2 = r5;
    0x000068ea movs r1, 0xc0                                     |     r1 = 0xc0;
    0x000068ec adds r0, 4                                        |     r0 += 4;
    0x000068ee mov r7, r5                                        |     r7 = r5;
    0x000068f0 blx 0x27cc                                        |     SHA512 ();
    0x000068f4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000068f6 add.w fp, r3, 0x84                                |     
    0x000068fa ldm r7!, {r0, r1, r2, r3}                         |     r0 = *(r7!);
                                                                 |     r1 = *((r7! + 4));
                                                                 |     r2 = *((r7! + 8));
                                                                 |     r3 = *((r7! + 12));
    0x000068fc stm.w fp!, {r0, r1, r2, r3}                       |     *(fp!) = r0;
                                                                 |     *((fp! + 4)) = r1;
                                                                 |     *((fp! + 8)) = r2;
                                                                 |     *((fp! + 12)) = r3;
    0x00006900 ldm r7!, {r0, r1, r2, r3}                         |     r0 = *(r7!);
                                                                 |     r1 = *((r7! + 4));
                                                                 |     r2 = *((r7! + 8));
                                                                 |     r3 = *((r7! + 12));
    0x00006902 stm.w fp!, {r0, r1, r2, r3}                       |     *(fp!) = r0;
                                                                 |     *((fp! + 4)) = r1;
                                                                 |     *((fp! + 8)) = r2;
                                                                 |     *((fp! + 12)) = r3;
    0x00006906 ldm r7!, {r0, r1, r2, r3}                         |     r0 = *(r7!);
                                                                 |     r1 = *((r7! + 4));
                                                                 |     r2 = *((r7! + 8));
                                                                 |     r3 = *((r7! + 12));
    0x00006908 stm.w fp!, {r0, r1, r2, r3}                       |     *(fp!) = r0;
                                                                 |     *((fp! + 4)) = r1;
                                                                 |     *((fp! + 8)) = r2;
                                                                 |     *((fp! + 12)) = r3;
    0x0000690c ldm.w r7, {r0, r1, r2, r3}                        |     r0 = *(r7);
                                                                 |     r1 = *((r7 + 4));
                                                                 |     r2 = *((r7 + 8));
                                                                 |     r3 = *((r7 + 12));
    0x00006910 stm.w fp, {r0, r1, r2, r3}                        |     *(fp) = r0;
                                                                 |     *((fp + 4)) = r1;
                                                                 |     *((fp + 8)) = r2;
                                                                 |     *((fp + 12)) = r3;
                                                                 | label_9:
    0x00006914 ldr r3, [pc, 0x3f0]                               |     
    0x00006916 movs r1, 1                                        |     r1 = 1;
    0x00006918 movs r2, 0x40                                     |     r2 = 0x40;
    0x0000691a mov r0, r5                                        |     r0 = r5;
    0x0000691c str r4, [sp]                                      |     *(sp) = r4;
    0x0000691e add r3, pc                                        |     r3 = 0xd62a;
    0x00006920 blx 0x2e80                                        |     strncmp (r0, r1, r2);
    0x00006924 ldr r0, [pc, 0x3e4]                               |     
    0x00006926 movw r1, 0x1ed                                    |     r1 = 0x1ed;
    0x0000692a add r0, pc                                        |     r0 = 0xd63a;
    0x0000692c bl 0x10804                                        |     r0 = fcn_00010804 (r0, r1);
    0x00006930 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006932 bne.w 0x6aba                                      |         goto label_8;
                                                                 |     }
    0x00006936 mov r3, r0                                        |     r3 = r0;
    0x00006938 movs r2, 0xc0                                     |     r2 = 0xc0;
    0x0000693a mov r1, r8                                        |     r1 = r8;
    0x0000693c mov r0, r5                                        |     r0 = r5;
    0x0000693e bl 0x10488                                        |     r0 = fcn_00010488 (r0, r1, r2, r3);
    0x00006942 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006944 bne.w 0x6aba                                      |         goto label_8;
                                                                 |     }
    0x00006948 ldr r0, [pc, 0x3c4]                               |     
    0x0000694a add r0, pc                                        |     r0 = 0xd65e;
    0x0000694c bl 0x102dc                                        |     r0 = fcn_000102dc (r0);
    0x00006950 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006952 bne.w 0x6aba                                      |         goto label_8;
                                                                 |     }
                                                                 | label_3:
    0x00006956 movs r1, 0xc0                                     |     r1 = 0xc0;
    0x00006958 mov r2, r5                                        |     r2 = r5;
    0x0000695a mov r0, r8                                        |     r0 = r8;
    0x0000695c blx 0x27cc                                        |     SHA512 ();
    0x00006960 ldr r3, [pc, 0x3b0]                               |     r3 = *(0x6d14);
    0x00006962 ldr r1, [pc, 0x3b4]                               |     
    0x00006964 ldr r0, [r6, r3]                                  |     r0 = *((r6 + r3));
    0x00006966 add r1, pc                                        |     r1 = 0xd684;
    0x00006968 blx 0x2f70                                        |     r0 = vdprintf_chk ();
    0x0000696c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000696e bne.w 0x6afc                                      |         goto label_23;
                                                                 |     }
    0x00006972 ldr r1, [pc, 0x3a8]                               |     
    0x00006974 add r1, pc                                        |     r1 = 0xd696;
                                                                 | label_6:
    0x00006976 movs r0, 2                                        |     r0 = 2;
    0x00006978 bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x0000697c movs r3, 0x16                                     |     r3 = 0x16;
    0x0000697e mov r4, r3                                        |     r4 = r3;
    0x00006980 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00006984 b 0x67e2                                          |     goto label_1;
                                                                 | label_14:
    0x00006986 add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006988 mov r0, r5                                        |     r0 = r5;
    0x0000698a bl 0x65e0                                         |     r0 = fcn_000065e0 (r0);
    0x0000698e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006990 bne.w 0x6bd2                                      |         goto label_24;
                                                                 |     }
    0x00006994 ldr r3, [pc, 0x37c]                               |     r3 = *(0x6d14);
    0x00006996 ldr r1, [pc, 0x388]                               |     
    0x00006998 ldr r0, [r6, r3]                                  |     r0 = *((r6 + r3));
    0x0000699a add r1, pc                                        |     r1 = 0xd6c0;
    0x0000699c blx 0x2f70                                        |     vdprintf_chk ();
    0x0000699e invalid                                           |     
                                                                 |     if (r0 != 0) {
    0x000069a2 bne.w 0x6b02                                      |         goto label_25;
                                                                 |     }
    0x000069a6 ldr r1, [pc, 0x37c]                               |     
    0x000069a8 movs r2, 0x40                                     |     r2 = 0x40;
    0x000069aa ldr r3, [pc, 0x37c]                               |     
    0x000069ac add.w r0, r7, 0xc                                 |     r0 = r7 + 0xc;
    0x000069b0 ldr.w sb, [pc, 0x378]                             |     
    0x000069b4 subs r6, r7, 1                                    |     r6 = r7 - 1;
    0x000069b6 add r1, pc                                        |     r1 = 0xd6e0;
    0x000069b8 add.w r4, r7, 0x14                                |     r4 = r7 + 0x14;
    0x000069bc str r1, [sp]                                      |     *(sp) = r1;
    0x000069be add r3, pc                                        |     r3 = 0xd6ec;
    0x000069c0 movs r1, 1                                        |     r1 = 1;
    0x000069c2 add sb, pc                                        |     sb = 0xd6f2;
    0x000069c4 add.w r8, r7, 7                                   |     r8 = r7 + 7;
    0x000069c8 blx 0x2e80                                        |     strncmp (r0, r1, r2);
                                                                 |     do {
    0x000069cc ldrb r2, [r6, 1]!                                 |         r2 = *((r6 += 1));
    0x000069d0 mov r0, r4                                        |         r0 = r4;
    0x000069d2 mov r3, sb                                        |         r3 = sb;
    0x000069d4 movs r1, 1                                        |         r1 = 1;
    0x000069d6 adds r4, 2                                        |         r4 += 2;
    0x000069d8 str r2, [sp]                                      |         *(sp) = r2;
    0x000069da mov.w r2, -1                                      |         r2 = -1;
    0x000069de blx 0x2e80                                        |         strncmp (r0, r1, r2);
    0x000069e2 cmp r8, r6                                        |         
    0x000069e4 bne 0x69cc                                        |         
                                                                 |     } while (r8 != r6);
    0x000069e6 mov r6, r5                                        |     r6 = r5;
    0x000069e8 add r7, sp, 0x20                                  |     r7 += dest;
    0x000069ea ldm r6!, {r0, r1, r2, r3}                         |     r0 = *(r6!);
                                                                 |     r1 = *((r6! + 4));
                                                                 |     r2 = *((r6! + 8));
                                                                 |     r3 = *((r6! + 12));
    0x000069ec mov.w r8, 0x40                                    |     r8 = 0x40;
    0x000069f0 mov r4, r7                                        |     r4 = r7;
    0x000069f2 mov.w ip, 0                                       |     
    0x000069f6 str.w r8, [sp, 0x60]                              |     __asm ("str.w r8, [var_60h]");
    0x000069fa str.w ip, [sp, 0x1c]                              |     __asm ("str.w ip, [var_1ch]");
    0x000069fe stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00006a00 ldm r6!, {r0, r1, r2, r3}                         |     r0 = *(r6!);
                                                                 |     r1 = *((r6! + 4));
                                                                 |     r2 = *((r6! + 8));
                                                                 |     r3 = *((r6! + 12));
    0x00006a02 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00006a04 ldm r6!, {r0, r1, r2, r3}                         |     r0 = *(r6!);
                                                                 |     r1 = *((r6! + 4));
                                                                 |     r2 = *((r6! + 8));
                                                                 |     r3 = *((r6! + 12));
    0x00006a06 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00006a08 ldm.w r6, {r0, r1, r2, r3}                        |     r0 = *(r6);
                                                                 |     r1 = *((r6 + 4));
                                                                 |     r2 = *((r6 + 8));
                                                                 |     r3 = *((r6 + 12));
    0x00006a0c stm.w r4, {r0, r1, r2, r3}                        |     *(r4) = r0;
                                                                 |     *((r4 + 4)) = r1;
                                                                 |     *((r4 + 8)) = r2;
                                                                 |     *((r4 + 12)) = r3;
    0x00006a10 mov r1, ip                                        |     r1 = ip;
    0x00006a12 mvn r0, 2                                         |     r0 = ~2;
    0x00006a16 blx 0x2980                                        |     r0 = fcn_00002980 ();
    0x00006a1a adds r2, r0, 1                                    |     r2 = r0 + 1;
                                                                 |     if (r2 == r0) {
    0x00006a1c beq.w 0x6c52                                      |         goto label_26;
                                                                 |     }
    0x00006a20 ldr r4, [pc, 0x30c]                               |     
    0x00006a22 movs r3, 0x48                                     |     r3 = 0x48;
    0x00006a24 ldr.w sb, [pc, 0x30c]                             |     
    0x00006a28 add r2, sp, 0x1c                                  |     r2 += var_1ch;
    0x00006a2a str r0, [sp]                                      |     *(sp) = r0;
    0x00006a2c add r4, pc                                        |     r4 = 0xd760;
    0x00006a2e add sb, pc                                        |     sb = 0xd766;
    0x00006a30 adds r4, 0xc                                      |     r4 += 0xc;
    0x00006a32 mov r1, r4                                        |     r1 = r4;
    0x00006a34 mov r0, sb                                        |     r0 = sb;
    0x00006a36 blx 0x2f4c                                        |     r0 = strcmp (r0, r1);
    0x00006a3a adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00006a3c mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 == r0) {
    0x00006a3e beq.w 0x6c64                                      |         goto label_27;
                                                                 |     }
    0x00006a42 mvn r1, 3                                         |     r1 = ~3;
    0x00006a46 blx 0x2cd0                                        |     r0 = bootblock_get ();
    0x00006a4a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006a4c bne 0x6ace                                        |         goto label_28;
                                                                 |     }
    0x00006a4e movs r1, 0                                        |     r1 = 0;
    0x00006a50 mov r0, r6                                        |     r0 = r6;
    0x00006a52 movt r1, 0xc19                                    |     r1 = (r1 & 0xFFFF) | 0xc190000;
    0x00006a56 blx 0x2e10                                        |     r0 = fcn_00002e10 ();
    0x00006a5a cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00006a5c blt.w 0x6cae                                      |         goto label_29;
                                                                 |     }
    0x00006a60 ldr r1, [pc, 0x2d4]                               |     
    0x00006a62 mov r3, r6                                        |     r3 = r6;
    0x00006a64 mov r2, sb                                        |     r2 = sb;
    0x00006a66 movs r0, 6                                        |     r0 = 6;
    0x00006a68 str r4, [sp]                                      |     *(sp) = r4;
    0x00006a6a add r1, pc                                        |     r1 = 0xd7a6;
    0x00006a6c bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006a70 mov r1, r8                                        |     r1 = r8;
    0x00006a72 mov r0, r7                                        |     r0 = r7;
    0x00006a74 movs r2, 0x44                                     |     r2 = 0x44;
    0x00006a76 blx 0x2b2c                                        |     strcpy (r0, r1)
    0x00006a7a mov r2, r8                                        |     r2 = r8;
    0x00006a7c mov r1, r8                                        |     r1 = r8;
    0x00006a7e mov r0, r5                                        |     r0 = r5;
    0x00006a80 blx 0x2b2c                                        |     strcpy (r0, r1)
                                                                 | label_5:
    0x00006a84 ldr r3, [pc, 0x2b4]                               |     
    0x00006a86 movs r2, 1                                        |     r2 = 1;
    0x00006a88 movs r4, 0                                        |     r4 = 0;
    0x00006a8a add r3, pc                                        |     r3 = 0xd7ca;
    0x00006a8c strb r2, [r3, 8]                                  |     *((r3 + 8)) = r2;
    0x00006a8e b 0x67e2                                          |     goto label_1;
                                                                 | label_16:
    0x00006a90 ldr r0, [pc, 0x2ac]                               |     
    0x00006a92 add.w r3, r3, 0x188                               |     r3 += 0x188;
    0x00006a96 add r1, r3                                        |     r1 += r3;
    0x00006a98 mov r2, r7                                        |     r2 = r7;
    0x00006a9a add r0, pc                                        |     r0 = 0xd7de;
    0x00006a9c adds r0, 0x4c                                     |     r0 += 0x4c;
    0x00006a9e add.w r0, r0, r7, lsl 6                           |     r0 += (r7 << 6);
    0x00006aa2 bl 0x6e58                                         |     r0 = fcn_00006e58 (r0, r1, r2);
    0x00006aa6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006aa8 bne.w 0x6c1e                                      |         goto label_30;
                                                                 |     }
    0x00006aac ldr.w r8, [sb, 0x188]                             |     r8 = *((sb + 0x188));
    0x00006ab0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00006ab4 bne.w 0x683e                                      |         goto label_2;
                                                                 |     }
    0x00006ab8 b 0x67e0                                          |     goto label_0;
                                                                 | label_8:
    0x00006aba ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x00006abe cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00006ac0 bne.w 0x67e2                                      |         goto label_1;
                                                                 |     }
                                                                 | label_7:
    0x00006ac4 add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006ac6 b 0x6956                                          |     goto label_3;
                                                                 | label_18:
    0x00006ac8 mov.w fp, 0                                       |     
    0x00006acc b 0x686a                                          |     goto label_4;
                                                                 | label_28:
    0x00006ace ldr r1, [pc, 0x274]                               |     
    0x00006ad0 add r1, pc                                        |     r1 = 0xd81a;
                                                                 | label_11:
    0x00006ad2 mov r2, r6                                        |     r2 = r6;
    0x00006ad4 movs r0, 3                                        |     r0 = 3;
    0x00006ad6 bl 0xfcdc                                         |     r0 = fcn_0000fcdc (r0);
    0x00006ada blx 0x2f88                                        |     r0 = cxa_finalize ();
    0x00006ade ldr r4, [r0]                                      |     r4 = *(r0);
                                                                 | label_10:
    0x00006ae0 movs r2, 0x44                                     |     r2 = 0x44;
    0x00006ae2 movs r1, 0x40                                     |     r1 = 0x40;
    0x00006ae4 mov r0, r7                                        |     r0 = r7;
    0x00006ae6 blx 0x2b2c                                        |     strcpy (r0, r1)
    0x00006aea movs r2, 0x40                                     |     r2 = 0x40;
    0x00006aec mov r0, r5                                        |     r0 = r5;
    0x00006aee mov r1, r2                                        |     r1 = r2;
    0x00006af0 blx 0x2b2c                                        |     strcpy (r0, r1)
    0x00006af4 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00006af6 bne.w 0x67e2                                      |         goto label_1;
                                                                 |     }
    0x00006afa b 0x6a84                                          |     goto label_5;
                                                                 | label_23:
    0x00006afc ldr r1, [pc, 0x248]                               |     
    0x00006afe add r1, pc                                        |     r1 = 0xd84a;
    0x00006b00 b 0x6976                                          |     goto label_6;
                                                                 | label_25:
    0x00006b02 ldr r1, [pc, 0x248]                               |     
    0x00006b04 movs r0, 2                                        |     r0 = 2;
    0x00006b06 add r1, pc                                        |     r1 = 0xd858;
    0x00006b08 bl 0xfcdc                                         |     r0 = fcn_0000fcdc (r0);
    0x00006b0c blx 0x2f88                                        |     cxa_finalize ();
    0x00006b10 movs r3, 0x16                                     |     r3 = 0x16;
    0x00006b12 mov r4, r3                                        |     r4 = r3;
    0x00006b14 str r3, [r0]                                      |     *(r0) = r3;
    0x00006b16 b 0x67e2                                          |     goto label_1;
                                                                 | label_21:
    0x00006b18 ldr r3, [pc, 0x234]                               |     
    0x00006b1a add.w sb, sp, 0x64                                |     sb += path;
    0x00006b1e movs r2, 0x40                                     |     r2 = 0x40;
    0x00006b20 movs r1, 1                                        |     r1 = 1;
    0x00006b22 mov r0, sb                                        |     r0 = sb;
    0x00006b24 str r4, [sp]                                      |     *(sp) = r4;
    0x00006b26 add r3, pc                                        |     r3 = 0xd87a;
    0x00006b28 blx 0x2e80                                        |     strncmp (r0, r1, r2);
    0x00006b2c movs r1, 0                                        |     r1 = 0;
    0x00006b2e mov r0, sb                                        |     r0 = sb;
    0x00006b30 blx 0x2730                                        |     open (r0, r1, r2);
    0x00006b34 subs r3, r0, 0                                    |     r3 -= path;
                                                                 |     if (r3 < path) {
    0x00006b36 blt.w 0x6cb4                                      |         goto label_31;
                                                                 |     }
    0x00006b3a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00006b3c movs r1, 0xc4                                     |     r1 = 0xc4;
    0x00006b3e ldr r3, [pc, 0x214]                               |     
    0x00006b40 movs r2, 0xc0                                     |     r2 = 0xc0;
    0x00006b42 add r3, pc                                        |     r3 = 0xd89c;
    0x00006b44 mla r8, r1, fp, r3                                |     __asm ("mla r8, r1, fp, r3");
    0x00006b48 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00006b4a add.w r8, r8, 4                                   |     r8 += 4;
    0x00006b4e mov r1, r8                                        |     r1 = r8;
    0x00006b50 invalid                                           |     
    0x00006b54 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00006b56 str r0, [sp, 0xc]                                 |     var_ch_2 = r0;
    0x00006b58 mov r0, r3                                        |     r0 = r3;
    0x00006b5a and fp, sb, 0xa000000                             |     
    0x00006b5e ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x00006b60 cmp r2, 0xbf                                      |     
                                                                 |     if (r2 <= 0xbf) {
    0x00006b62 ble.w 0x6c76                                      |         goto label_32;
                                                                 |     }
    0x00006b64 strh r0, [r1, 4]                                  |     *((r1 + 4)) = r0;
    0x00006b66 ldr r1, [pc, 0x1f0]                               |     
    0x00006b68 movs r2, 0x40                                     |     r2 = 0x40;
    0x00006b6a mov r0, r8                                        |     r0 = r8;
    0x00006b6c add r1, pc                                        |     r1 = 0xd8ca;
    0x00006b6e adds r1, 0x4c                                     |     r1 += 0x4c;
    0x00006b70 add.w r1, r1, r7, lsl 6                           |     r1 += (r7 << 6);
    0x00006b74 blx 0x27e4                                        |     r0 = memcmp (r0, r1, r2);
    0x00006b78 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00006b7a bne.w 0x6cc6                                      |         goto label_33;
                                                                 |     }
    0x00006b7e cmp r5, 1                                         |     
                                                                 |     if (r5 != 1) {
    0x00006b80 bne 0x6ac4                                        |         goto label_7;
                                                                 |     }
    0x00006b82 movs r3, 0xc4                                     |     r3 = 0xc4;
    0x00006b84 rsb.w r7, fp, 1                                   |     r7 = 1 - fp;
    0x00006b88 mul r7, r3, r7                                    |     r7 = r3 * r7;
    0x00006b8c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00006b8e add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006b90 ldr r3, [r3, r7]                                  |     r3 = *((r3 + r7));
    0x00006b92 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00006b94 beq.w 0x6956                                      |         goto label_3;
                                                                 |     }
    0x00006b98 movs r1, 0xc0                                     |     r1 = 0xc0;
    0x00006b9a mov r2, r5                                        |     r2 = r5;
    0x00006b9c mov r0, r8                                        |     r0 = r8;
    0x00006b9e blx 0x27cc                                        |     SHA512 ();
    0x00006ba2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00006ba4 add.w r0, r7, 0x84                                |     r0 = r7 + 0x84;
    0x00006ba8 movs r2, 0x40                                     |     r2 = 0x40;
    0x00006baa mov r1, r5                                        |     r1 = r5;
    0x00006bac add r0, r3                                        |     r0 += r3;
    0x00006bae blx 0x27e4                                        |     r0 = memcmp (r0, r1, r2);
    0x00006bb2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00006bb4 beq.w 0x6956                                      |         goto label_3;
                                                                 |     }
    0x00006bb8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00006bba mov r2, r4                                        |     r2 = r4;
    0x00006bbc ldr r1, [pc, 0x19c]                               |     
    0x00006bbe movs r0, 3                                        |     r0 = 3;
    0x00006bc0 ldr r3, [r3, r7]                                  |     r3 = *((r3 + r7));
    0x00006bc2 add r1, pc                                        |     r1 = 0xd922;
    0x00006bc4 bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006bc8 movs r3, 0xd                                      |     r3 = 0xd;
    0x00006bca mov r4, r3                                        |     r4 = r3;
    0x00006bcc str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00006bd0 b 0x67e2                                          |     goto label_1;
                                                                 | label_24:
    0x00006bd2 ldr r1, [pc, 0x18c]                               |     
    0x00006bd4 movs r0, 2                                        |     r0 = 2;
    0x00006bd6 add r1, pc                                        |     r1 = 0xd93c;
    0x00006bd8 bl 0xfcdc                                         |     r0 = fcn_0000fcdc (r0);
    0x00006bdc blx 0x2f88                                        |     r0 = cxa_finalize ();
    0x00006be0 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00006be2 b 0x67e2                                          |     goto label_1;
                                                                 | label_17:
    0x00006be4 ldr r1, [pc, 0x17c]                               |     
    0x00006be6 mov r2, r8                                        |     r2 = r8;
    0x00006be8 movs r0, 2                                        |     r0 = 2;
    0x00006bea add r1, pc                                        |     r1 = 0xd952;
    0x00006bec bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006bf0 movs r3, 0x47                                     |     r3 = 0x47;
    0x00006bf2 mov r4, r3                                        |     r4 = r3;
    0x00006bf4 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00006bf8 b 0x67e2                                          |     goto label_1;
                                                                 | label_20:
    0x00006bfa ldr r1, [pc, 0x16c]                               |     
    0x00006bfc movs r3, 0xc4                                     |     r3 = 0xc4;
    0x00006bfe rsb.w r2, fp, 1                                   |     r2 = 1 - fp;
    0x00006c02 add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006c04 add r1, pc                                        |     r1 = 0xd972;
    0x00006c06 mla r8, r3, fp, r1                                |     __asm ("mla r8, r3, fp, r1");
    0x00006c0a mla r1, r3, r2, r1                                |     __asm ("mla r1, r3, r2, r1");
    0x00006c0e add.w r8, r8, 4                                   |     r8 += 4;
    0x00006c12 movs r2, 0xc0                                     |     r2 = 0xc0;
    0x00006c14 mov r0, r8                                        |     r0 = r8;
    0x00006c16 adds r1, 4                                        |     r1 += 4;
    0x00006c18 blx 0x2b08                                        |     EVP_MD_CTX_new ();
    0x00006c1c b 0x6956                                          |     goto label_3;
                                                                 | label_30:
    0x00006c1e blx 0x2f88                                        |     r0 = cxa_finalize ();
    0x00006c22 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00006c24 b 0x67e2                                          |     goto label_1;
                                                                 | label_22:
    0x00006c26 add.w r0, r7, 0x84                                |     r0 = r7 + 0x84;
    0x00006c2a movs r2, 0                                        |     r2 = 0;
    0x00006c2c add r0, sb                                        |     r0 += sb;
    0x00006c2e movs r1, 0x40                                     |     r1 = 0x40;
    0x00006c30 blx 0x2abc                                        |     r0 = fcn_00002abc ();
    0x00006c34 cmp r0, 0                                         |     
                                                                 |     if (r0 < 0) {
    0x00006c36 blt.w 0x6aba                                      |         goto label_8;
                                                                 |     }
    0x00006c3a add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006c3c b 0x6914                                          |     goto label_9;
                                                                 | label_19:
    0x00006c3e ldr r1, [pc, 0x12c]                               |     
    0x00006c40 movs r0, 2                                        |     r0 = 2;
    0x00006c42 add r1, pc                                        |     r1 = 0xd9b4;
    0x00006c44 bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006c48 movs r3, 0xe                                      |     r3 = 0xe;
    0x00006c4a mov r4, r3                                        |     r4 = r3;
    0x00006c4c str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00006c50 b 0x67e2                                          |     goto label_1;
                                                                 | label_26:
    0x00006c52 ldr r1, [pc, 0x11c]                               |     
    0x00006c54 movs r0, 3                                        |     r0 = 3;
    0x00006c56 add r1, pc                                        |     r1 = 0xd9cc;
    0x00006c58 bl 0xfcdc                                         |     r0 = fcn_0000fcdc (r0);
    0x00006c5c blx 0x2f88                                        |     r0 = cxa_finalize ();
    0x00006c60 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00006c62 b 0x6ae0                                          |     goto label_10;
                                                                 | label_27:
    0x00006c64 ldr r1, [pc, 0x10c]                               |     
    0x00006c66 movs r0, 3                                        |     r0 = 3;
    0x00006c68 add r1, pc                                        |     r1 = 0xd9e0;
    0x00006c6a bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006c6c invalid                                           |     
    0x00006c70 invalid                                           |     
    0x00006c74 b 0x6ae0                                          |     goto label_10;
                                                                 | label_32:
    0x00006c76 ldr r1, [pc, 0x100]                               |     
    0x00006c78 cmp r2, 0                                         |     
    0x00006c7a it ge                                             |     
                                                                 |     if (r2 < 0) {
    0x00006c7c movge r3, 0x47                                    |         r3 = 0x47;
                                                                 |     }
    0x00006c7e mov r2, sb                                        |     r2 = sb;
    0x00006c80 mov.w r0, 2                                       |     r0 = 2;
    0x00006c84 it ge                                             |     
                                                                 |     if (r2 < 0) {
    0x00006c86 strge r3, [sl]                                    |         *(sl) = r3;
                                                                 |     }
    0x00006c8a add r1, pc                                        |     r1 = 0xda08;
    0x00006c8c bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006c90 ldr.w r4, [sl]                                    |     r4 = *(sl);
                                                                 | label_12:
    0x00006c94 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00006c96 bne.w 0x67e2                                      |         goto label_1;
                                                                 |     }
    0x00006c9a ldr.w r8, [pc, 0xe0]                              |     r8 = *(0x00006d7c);
    0x00006c9e movs r3, 0xc4                                     |     r3 = 0xc4;
    0x00006ca0 add r5, sp, 0xa4                                  |     r5 += s2;
    0x00006ca2 add r8, pc                                        |     r8 += pc;
    0x00006ca4 mla r8, r3, fp, r8                                |     __asm ("mla r8, r3, fp, r8");
    0x00006ca8 add.w r8, r8, 4                                   |     r8 += 4;
    0x00006cac b 0x6956                                          |     goto label_3;
                                                                 | label_29:
    0x00006cae ldr r1, [pc, 0xd0]                                |     
    0x00006cb0 add r1, pc                                        |     r1 = 0xda36;
    0x00006cb2 b 0x6ad2                                          |     goto label_11;
                                                                 | label_31:
    0x00006cb4 ldr r1, [pc, 0xcc]                                |     
    0x00006cb6 mov r2, sb                                        |     r2 = sb;
    0x00006cb8 movs r0, 2                                        |     r0 = 2;
    0x00006cba add r1, pc                                        |     r1 = 0xda42;
    0x00006cbc bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006cc0 ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x00006cc4 b 0x6c94                                          |     goto label_12;
                                                                 | label_33:
    0x00006cc6 ldr r1, [pc, 0xc0]                                |     
    0x00006cc8 mov r2, r4                                        |     r2 = r4;
    0x00006cca movs r0, 3                                        |     r0 = 3;
    0x00006ccc add r1, pc                                        |     r1 = 0xda5a;
    0x00006cce bl 0xfcdc                                         |     fcn_0000fcdc (r0);
    0x00006cd2 movs r3, 0xd                                      |     r3 = 0xd;
    0x00006cd4 mov r4, r3                                        |     r4 = r3;
    0x00006cd6 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00006cda b 0x67e2                                          |     goto label_1;
                                                                 | label_15:
    0x00006cdc blx 0x2cdc                                        |     fprintf_chk ();
    0x00006ce0 strh r6, [r0, 0x24]                               |     *((r0 + 0x24)) = r6;
    0x00006ce2 movs r2, r0                                       |     r2 = r0;
    0x00006ce4 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00006ce6 movs r0, r0                                       |     
    0x00006ce8 strh r2, [r7, 0x22]                               |     *((r7 + 0x22)) = r2;
    0x00006cea movs r2, r0                                       |     r2 = r0;
    0x00006cec lsls r4, r4, 0xe                                  |     r4 <<= 0xe;
    0x00006cee movs r0, r0                                       |     
    0x00006cf0 ldrh r2, [r7, 0xe]                                |     r2 = *((r7 + 0xe));
    0x00006cf2 movs r2, r0                                       |     r2 = r0;
    0x00006cf4 strh r2, [r2, 0x22]                               |     *((r2 + 0x22)) = r2;
    0x00006cf6 movs r2, r0                                       |     r2 = r0;
    0x00006cf8 strh r6, [r7, 0x3e]                               |     *((r7 + 0x3e)) = r6;
    0x00006cfa movs r2, r0                                       |     r2 = r0;
    0x00006cfc strh r0, [r7, 0x3c]                               |     *((r7 + 0x3c)) = r0;
    0x00006cfe movs r2, r0                                       |     r2 = r0;
    0x00006d00 ldrh r4, [r1, 0xa]                                |     r4 = *((r1 + 0xa));
    0x00006d02 movs r2, r0                                       |     r2 = r0;
    0x00006d04 strh r2, [r0, 0x3c]                               |     *((r0 + 0x3c)) = r2;
    0x00006d06 movs r2, r0                                       |     r2 = r0;
    0x00006d08 lsrs r2, r4, 0xc                                  |     r2 = r4 >> 0xc;
    0x00006d0a movs r1, r0                                       |     r1 = r0;
    0x00006d0c lsrs r2, r1, 0x10                                 |     r2 = r1 >> 0x10;
    0x00006d0e movs r1, r0                                       |     r1 = r0;
    0x00006d10 lsrs r2, r1, 0x10                                 |     r2 = r1 >> 0x10;
    0x00006d12 movs r1, r0                                       |     r1 = r0;
    0x00006d14 lsls r0, r2, 0xd                                  |     r0 = r2 << 0xd;
    0x00006d16 movs r0, r0                                       |     
    0x00006d18 lsrs r6, r4, 5                                    |     r6 = r4 >> 5;
    0x00006d1a movs r1, r0                                       |     r1 = r0;
    0x00006d1c lsrs r0, r6, 0xf                                  |     r0 = r6 >> 0xf;
    0x00006d1e movs r1, r0                                       |     r1 = r0;
    0x00006d20 lsrs r2, r6, 4                                    |     r2 = r6 >> 4;
    0x00006d22 movs r1, r0                                       |     r1 = r0;
    0x00006d24 lsrs r2, r4, 4                                    |     r2 = r4 >> 4;
    0x00006d26 movs r1, r0                                       |     r1 = r0;
    0x00006d28 lsrs r6, r2, 4                                    |     r6 = r2 >> 4;
    0x00006d2a movs r1, r0                                       |     r1 = r0;
    0x00006d2c lsrs r6, r3, 4                                    |     r6 = r3 >> 4;
    0x00006d2e movs r1, r0                                       |     r1 = r0;
    0x00006d30 strh r4, [r4, 0x3c]                               |     *((r4 + 0x3c)) = r4;
    0x00006d32 movs r2, r0                                       |     r2 = r0;
    0x00006d34 lsrs r6, r3, 3                                    |     r6 = r3 >> 3;
    0x00006d36 movs r1, r0                                       |     r1 = r0;
    0x00006d38 lsrs r6, r5, 4                                    |     r6 = r5 >> 4;
    0x00006d3a movs r1, r0                                       |     r1 = r0;
    0x00006d3c strh r6, [r0, 0x3a]                               |     *((r0 + 0x3a)) = r6;
    0x00006d3e movs r2, r0                                       |     r2 = r0;
    0x00006d40 strh r6, [r6, 0x38]                               |     *((r6 + 0x38)) = r6;
    0x00006d42 movs r2, r0                                       |     r2 = r0;
    0x00006d44 lsrs r0, r5, 1                                    |     r0 = r5 >> 1;
    0x00006d46 movs r1, r0                                       |     r1 = r0;
    0x00006d48 lsrs r2, r7, 2                                    |     r2 = r7 >> 2;
    0x00006d4a movs r1, r0                                       |     r1 = r0;
    0x00006d4c lsrs r2, r6, 2                                    |     r2 = r6 >> 2;
    0x00006d4e movs r1, r0                                       |     r1 = r0;
    0x00006d50 lsrs r2, r3, 4                                    |     r2 = r3 >> 4;
    0x00006d52 movs r1, r0                                       |     r1 = r0;
    0x00006d54 strh r6, [r0, 0x26]                               |     *((r0 + 0x26)) = r6;
    0x00006d56 movs r2, r0                                       |     r2 = r0;
    0x00006d58 strh r4, [r4, 0x32]                               |     *((r4 + 0x32)) = r4;
    0x00006d5a movs r2, r0                                       |     r2 = r0;
    0x00006d5c lsrs r6, r3, 4                                    |     r6 = r3 >> 4;
    0x00006d5e movs r1, r0                                       |     r1 = r0;
    0x00006d60 lsls r2, r1, 0x1b                                 |     r2 = r1 << 0x1b;
    0x00006d62 movs r1, r0                                       |     r1 = r0;
    0x00006d64 lsrs r2, r1, 0x20                                 |     r2 = r1 >> 0x20;
    0x00006d66 movs r1, r0                                       |     r1 = r0;
    0x00006d68 strh r4, [r0, 0x20]                               |     *((r0 + 0x20)) = r4;
    0x00006d6a movs r2, r0                                       |     r2 = r0;
    0x00006d6c lsls r6, r2, 0x1f                                 |     r6 = r2 << 0x1f;
    0x00006d6e movs r1, r0                                       |     r1 = r0;
    0x00006d70 lsls r2, r2, 0x1a                                 |     r2 <<= 0x1a;
    0x00006d72 movs r1, r0                                       |     r1 = r0;
    0x00006d74 lsls r4, r5, 0x1a                                 |     r4 = r5 << 0x1a;
    0x00006d76 movs r1, r0                                       |     r1 = r0;
    0x00006d78 lsls r6, r6, 0x1f                                 |     r6 <<= 0x1f;
    0x00006d7a movs r1, r0                                       |     r1 = r0;
    0x00006d7c strh r6, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r6;
    0x00006d7e movs r2, r0                                       |     r2 = r0;
    0x00006d80 lsls r0, r7, 0x1a                                 |     r0 = r7 << 0x1a;
    0x00006d82 movs r1, r0                                       |     r1 = r0;
    0x00006d84 lsls r6, r5, 0x1e                                 |     r6 = r5 << 0x1e;
    0x00006d86 movs r1, r0                                       |     r1 = r0;
    0x00006d88 lsls r4, r2, 0x1f                                 |     r4 = r2 << 0x1f;
    0x00006d8a movs r1, r0                                       |     r1 = r0;
    0x00006d8c push {r4, lr}                                     |     
    0x00006d8e sub sp, 0x50                                      |     
    0x00006d90 ldr r4, [pc, 0x70]                                |     
    0x00006d92 ldr r1, [pc, 0x74]                                |     r1 = *(0x6e0a);
    0x00006d94 add r4, pc                                        |     r4 = 0xdb9c;
    0x00006d96 ldr r3, [pc, 0x74]                                |     
    0x00006d98 ldr r2, [pc, 0x74]                                |     r2 = *(0x6e10);
    0x00006d9a ldr r1, [r4, r1]                                  |     
    0x00006d9c add r3, pc                                        |     
    0x00006d9e ldr r1, [r1]                                      |     r1 = *(0xdb9c);
    0x00006da0 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x00006da2 mov.w r1, 0                                       |     r1 = 0;
    0x00006da6 ldr r3, [r3, r2]                                  |     r3 = *(0xdbae);
    0x00006da8 ldrb r3, [r3]                                     |     r3 = *(r3);
                                                                 |     if (r3 == 0) {
    0x00006daa cbnz r3, 0x6de8                                   |         
    0x00006dac ldr r3, [pc, 0x64]                                |         
    0x00006dae add r4, sp, 0xc                                   |         r4 += str;
    0x00006db0 movs r1, 1                                        |         r1 = 1;
    0x00006db2 add r3, pc                                        |         r3 = 0xdbca;
    0x00006db4 ldr r2, [r3]                                      |         r2 = *(0xdbca);
    0x00006db6 cmp r2, r0                                        |         
    0x00006db8 itt eq                                            |         
                                                                 |         if (r2 != r0) {
    0x00006dba moveq r2, -1                                      |             r2 = -1;
                                                                 |         }
                                                                 |         if (r2 == r0) {
    0x00006dbe str r2, [r3]                                      |             *(r3) = r2;
                                                                 |         }
    0x00006dc0 ldr r3, [pc, 0x54]                                |         
    0x00006dc2 add r3, pc                                        |         r3 = 0xdbde;
    0x00006dc4 ldr.w r2, [r3, 0xc4]                              |         r2 = *(0xdca2);
    0x00006dc8 cmp r2, r0                                        |         
    0x00006dca itt eq                                            |         
                                                                 |         if (r2 != r0) {
    0x00006dcc moveq r2, -1                                      |             r2 = -1;
                                                                 |         }
                                                                 |         if (r2 == r0) {
    0x00006dd0 str.w r2, [r3, 0xc4]                              |             __asm ("str.w r2, [r3, 0xc4]");
                                                                 |         }
    0x00006dd4 movs r2, 0x40                                     |         r2 = 0x40;
    0x00006dd6 ldr r3, [pc, 0x44]                                |         
    0x00006dd8 str r0, [sp]                                      |         *(sp) = r0;
    0x00006dda mov r0, r4                                        |         r0 = r4;
    0x00006ddc add r3, pc                                        |         r3 = 0xdbfe;
    0x00006dde blx 0x2e80                                        |         strncmp (r0, r1, r2);
    0x00006de2 mov r0, r4                                        |         r0 = r4;
    0x00006de4 blx 0x2acc                                        |         strtoul (r0, r1, r2);
                                                                 |     }
    0x00006de8 ldr r2, [pc, 0x34]                                |     
    0x00006dea ldr r3, [pc, 0x1c]                                |     r3 = *(0x6e0a);
    0x00006dec add r2, pc                                        |     r2 = 0xdc10;
    0x00006dee ldr r3, [r2, r3]                                  |     r3 = *(0xdc10);
    0x00006df0 ldr r2, [r3]                                      |     r2 = *(0xdc10);
    0x00006df2 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00006df4 eors r2, r3                                       |     r2 ^= r3;
    0x00006df6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00006dfa bne 0x6e00                                        |         
    0x00006dfc add sp, 0x50                                      |         
    0x00006dfe pop {r4, pc}                                      |         
                                                                 |     }
    0x00006e00 blx 0x2cdc                                        |     fprintf_chk ();
    0x00006e04 ldrb r0, [r5, 0x1a]                               |     r0 = *((r5 + 0x1a));
    0x00006e06 movs r2, r0                                       |     r2 = r0;
    0x00006e08 lsls r4, r1, 0xd                                  |     r4 = r1 << 0xd;
    0x00006e0a movs r0, r0                                       |     
    0x00006e0c ldrb r0, [r4, 0x1a]                               |     r0 = *((r4 + 0x1a));
    0x00006e0e movs r2, r0                                       |     r2 = r0;
    0x00006e10 lsls r4, r4, 0xe                                  |     r4 <<= 0xe;
    0x00006e12 movs r0, r0                                       |     
    0x00006e14 strh r6, [r2, 0x12]                               |     *((r2 + 0x12)) = r6;
    0x00006e16 movs r2, r0                                       |     r2 = r0;
    0x00006e18 strh r6, [r0, 0x12]                               |     *((r0 + 0x12)) = r6;
    0x00006e1a movs r2, r0                                       |     r2 = r0;
    0x00006e1c lsls r4, r4, 0x19                                 |     r4 <<= 0x19;
    0x00006e1e movs r1, r0                                       |     r1 = r0;
    0x00006e20 ldrb r0, [r2, 0x19]                               |     r0 = *((r2 + 0x19));
    0x00006e22 movs r2, r0                                       |     r2 = r0;
                                                                 | }

[*] Function strcpy used 5 times fwmgr