[*] Binary protection state of libscene_proto.so

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


[*] Function fprintf tear down of libscene_proto.so

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libscene_proto.so @ 0x2208 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                             |                                ((n & 0x0000ff00) <<  8) | \
                                                             |                                ((n & 0x00ff0000) >>  8) | \
                                                             |                                ((n & 0xff000000) >> 24)))
                                                             |  
    ; (fcn) sym.scene_serialize_protobuf ()                  | void scene_serialize_protobuf (int16_t arg_50h, uint32_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_8h_3;
                                                             |     int16_t var_8h_2;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int32_t var_4h_2;
                                                             |     int32_t var_4h_3;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_40h;
                                                             |     int32_t var_44h;
                                                             |     int32_t var_48h;
                                                             |     int32_t var_48h_2;
                                                             |     int16_t var_64h;
                                                             |     int32_t var_68h;
                                                             |     int16_t var_6ch;
                                                             |     int32_t var_74h;
                                                             |     int32_t var_74h_2;
                                                             |     int32_t var_7ch;
                                                             |     int32_t var_80h;
                                                             |     int32_t var_84h;
                                                             |     int32_t var_88h;
                                                             |     int32_t var_88h_2;
                                                             |     int32_t var_90h;
                                                             |     int32_t var_98h;
                                                             |     int32_t var_98h_2;
                                                             |     int32_t var_a4h;
                                                             |     int16_t var_0h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x00002208 svcmi 0xf0e92d                                |     __asm ("svcmi 0xf0e92d");
    0x0000220c cmp r1, 0                                     |     
    0x0000220e it ne                                         |     
                                                             |     if (r1 != 0) {
    0x00002210 cmpne r0, 0                                   |         __asm ("cmpne r0, 0");
                                                             |     }
    0x00002212 ldr.w r5, [pc, 0xcdc]                         |     r5 = *(0x00002ef0);
    0x00002216 ldr.w r4, [pc, 0xcdc]                         |     
    0x0000221a add r5, pc                                    |     r5 += pc;
    0x0000221c vpush {d8}                                    |     __asm ("vpush {d8}");
    0x00002220 sub sp, 0xb4                                  |     
    0x00002222 ldr r4, [r5, r4]                              |     r4 = *((r5 + r4));
    0x00002224 add r7, sp, 8                                 |     r7 += var_8h;
    0x00002226 ldr.w r5, [r7, 0xe4]                          |     r5 = *((r7 + 0xe4));
    0x0000222a ldr r4, [r4]                                  |     r4 = *(0x2ef6);
    0x0000222c str.w r4, [r7, 0xa4]                          |     __asm ("str.w r4, [var_a4h]");
    0x00002230 mov.w r4, 0                                   |     r4 = 0;
    0x00002234 strd r2, r3, [r7, 0x48]                       |     __asm ("strd r2, r3, [var_48h]");
    0x00002238 ldr.w r3, [pc, 0xcbc]                         |     r3 = *(0x00002ef8);
    0x0000223c ldrb.w r4, [r7, 0xd8]                         |     r4 = *((r7 + 0xd8));
    0x00002240 str r1, [r7, 0x30]                            |     var_30h = r1;
    0x00002242 add r3, pc                                    |     r3 += pc;
    0x00002244 str r4, [r7, 0x3c]                            |     var_3ch = r4;
    0x00002246 str r3, [r7, 0x44]                            |     var_44h = r3;
    0x00002248 ldrb.w r4, [r7, 0xdc]                         |     r4 = *((r7 + 0xdc));
    0x0000224c ldr.w r3, [r7, 0xe0]                          |     r3 = *((r7 + 0xe0));
    0x00002250 str r4, [r7, 0x38]                            |     var_38h = r4;
    0x00002252 ite eq                                        |     
                                                             |     if (r1 != 0) {
    0x00002254 moveq r4, 1                                   |         r4 = 1;
                                                             |     }
                                                             |     if (r1 == 0) {
    0x00002256 movne r4, 0                                   |         r4 = 0;
                                                             |     }
    0x00002258 str r3, [r7, 0x24]                            |     var_24h = r3;
                                                             |     if (r1 == 0) {
    0x0000225a beq.w 0x2360                                  |         goto label_1;
                                                             |     }
    0x0000225e movs r2, 0x34                                 |     r2 = 0x34;
    0x00002260 mov sb, r0                                    |     sb = r0;
    0x00002262 mov r1, r4                                    |     r1 = r4;
    0x00002264 add.w r0, r7, 0x6c                            |     r0 += var_6ch;
    0x00002268 blx 0x1ff4                                    |     fcn_00001ff4 ();
    0x0000226c ldr.w r3, [pc, 0xc8c]                         |     r3 = *(0x2efc);
    0x00002270 ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002272 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002274 str r3, [r7, 0x68]                            |     var_68h = r3;
    0x00002276 cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00002278 beq 0x22f2                                    |         goto label_21;
                                                             |     }
    0x0000227a mov r0, r5                                    |     r0 = r5;
    0x0000227c ldr.w r5, [pc, 0xc80]                         |     
    0x00002280 blx 0x1ef8                                    |     r0 = fcn_00001ef8 ();
    0x00002284 mov r8, r0                                    |     r8 = r0;
    0x00002286 add r5, pc                                    |     r5 = 0x518a;
    0x00002288 mov r1, r5                                    |     r1 = r5;
    0x0000228a blx 0x2054                                    |     r0 = fcn_00002054 ();
    0x0000228e cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002290 beq.w 0x2fa0                                  |         goto label_29;
                                                             |     }
    0x00002294 ldr.w r6, [pc, 0xc6c]                         |     
    0x00002298 vmov.i32 d8, 0                                |     __asm ("vmov.i32 d8, 0");
    0x0000229c add r6, pc                                    |     r6 = 0x51a4;
    0x0000229e b 0x22d0                                      |     
                                                             |     while (r0 != 0) {
    0x000022a0 adds r0, 0xa                                  |         r0 += 0xa;
    0x000022a2 movs r2, 0xa                                  |         r2 = 0xa;
    0x000022a4 add.w r1, r7, 0x64                            |         r1 += var_64h;
    0x000022a8 blx 0x200c                                    |         fcn_0000200c ();
    0x000022ac ldr r3, [r7, 0x64]                            |         r3 = var_64h;
    0x000022ae strd r0, r1, [r7, 0x98]                       |         __asm ("strd r0, r1, [var_98h]");
    0x000022b2 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000022b4 beq.w 0x23e8                                  |             goto label_30;
                                                             |         }
    0x000022b8 ldrb r3, [r3]                                 |         r3 = *(r3);
    0x000022ba cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x000022bc bne.w 0x23e8                                  |             goto label_30;
                                                             |         }
    0x000022c0 movs r3, 2                                    |         r3 = 2;
    0x000022c2 str.w r3, [r7, 0x90]                          |         __asm ("str.w r3, [var_90h]");
                                                             | label_3:
    0x000022c6 mov r1, r5                                    |         r1 = r5;
    0x000022c8 movs r0, 0                                    |         r0 = 0;
    0x000022ca blx 0x2054                                    |         r0 = fcn_00002054 ();
                                                             |         if (r0 == 0) {
    0x000022ce cbz r0, 0x22e8                                |             goto label_31;
                                                             |         }
                                                             | label_0:
    0x000022d0 mov r1, r6                                    |         r1 = r6;
    0x000022d2 blx 0x1e84                                    |         r0 = strstr (r0, r1);
    0x000022d6 cmp r0, 0                                     |         
    0x000022d8 bne 0x22a0                                    |         
                                                             |     }
    0x000022da mov r1, r5                                    |     r1 = r5;
    0x000022dc movs r0, 0                                    |     r0 = 0;
    0x000022de adds r4, 1                                    |     r4++;
    0x000022e0 blx 0x2054                                    |     r0 = fcn_00002054 ();
    0x000022e4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000022e6 bne 0x22d0                                    |         goto label_0;
                                                             |     }
                                                             | label_31:
    0x000022e8 mov r0, r8                                    |     r0 = r8;
    0x000022ea blx 0x1ec8                                    |     fcn_00001ec8 ();
    0x000022ee cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x000022f0 bne 0x2360                                    |         goto label_1;
                                                             |     }
                                                             | label_21:
    0x000022f2 movs r1, 0                                    |     r1 = 0;
    0x000022f4 mov r0, sb                                    |     r0 = sb;
    0x000022f6 blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x000022fa mov fp, r0                                    |     
    0x000022fc cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000022fe beq.w 0x2fc6                                  |         goto label_32;
                                                             |     }
    0x00002302 ldr r3, [r7, 0x48]                            |     r3 = var_48h;
    0x00002304 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00002306 bne 0x238c                                    |         goto label_33;
                                                             |     }
    0x00002308 ldr r3, [r7, 0x38]                            |     r3 = var_38h;
    0x0000230a cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0000230c bne 0x23f0                                    |         goto label_34;
                                                             |     }
    0x0000230e ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
    0x00002310 vmov.f32 s16, 5.000000e-01                    |     __asm ("vmov.f32 s16, 5");
    0x00002314 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00002316 beq.w 0x270c                                  |         goto label_35;
                                                             |     }
    0x0000231a ldr.w r8, [r7, 0x38]                          |     r8 = var_38h;
    0x0000231e movs r4, 1                                    |     r4 = 1;
    0x00002320 mov r1, r0                                    |     r1 = r0;
    0x00002322 b 0x235a                                      |     
                                                             |     while (r5 < r3) {
    0x00002324 ldr.w r3, [sb, 0x18]                          |         r3 = *((sb + 0x18));
    0x00002328 mov r0, sb                                    |         r0 = sb;
    0x0000232a lsl.w r3, r4, r3                              |         r3 = r4 << r3;
    0x0000232e vmov s15, r3                                  |         __asm ("vmov s15, r3");
    0x00002332 ldrsh.w r3, [r1, 0x18]                        |         r3 = *((r1 + 0x18));
    0x00002336 vcvt.f32.u32 s15, s15                         |         __asm ("vcvt.f32.u32 s15, s15");
    0x0000233a vadd.f32 s15, s15, s16                        |         __asm ("vadd.f32 s15, s15, s16");
    0x0000233e vcvt.s32.f32 s15, s15                         |         __asm ("vcvt.s32.f32 s15, s15");
    0x00002342 vmov r2, s15                                  |         __asm ("vmov r2, s15");
    0x00002346 cmp r2, r3                                    |         
    0x00002348 it le                                         |         
                                                             |         if (r2 > r3) {
    0x0000234a addle r8, r8, 1                               |             r8++;
                                                             |         }
    0x0000234e blx 0x2084                                    |         r0 = fcn_00002084 ();
    0x00002352 mov r1, r0                                    |         r1 = r0;
    0x00002354 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00002356 beq.w 0x2468                                  |             goto label_9;
                                                             |         }
    0x0000235a ldr r3, [r1, 8]                               |         r3 = *((r1 + 8));
    0x0000235c lsls r5, r3, 0x19                             |         r5 = r3 << 0x19;
    0x0000235e bmi 0x2324                                    |         
                                                             |     }
                                                             |     do {
                                                             | label_1:
    0x00002360 mov.w r0, -1                                  |         r0 = -1;
                                                             | label_8:
    0x00002364 ldr.w r2, [pc, 0xba0]                         |         r2 = *(0x00002f08);
    0x00002368 ldr.w r3, [pc, 0xb88]                         |         r3 = *(0x2ef4);
    0x0000236c add r2, pc                                    |         r2 += pc;
    0x0000236e ldr r3, [r2, r3]                              |         r3 = *((r2 + r3));
    0x00002370 ldr r2, [r3]                                  |         r2 = *(0x2ef4);
    0x00002372 ldr.w r3, [r7, 0xa4]                          |         r3 = var_a4h;
    0x00002376 eors r2, r3                                   |         r2 ^= r3;
    0x00002378 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0000237c bne.w 0x3046                                  |             goto label_36;
                                                             |         }
    0x00002380 adds r7, 0xac                                 |         r7 += 0xac;
    0x00002382 mov sp, r7                                    |         
    0x00002384 vpop {d8}                                     |         __asm ("vpop {d8}");
    0x00002388 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}    |         
                                                             | label_33:
    0x0000238c ldr r3, [r7, 0x38]                            |         r3 = var_38h;
    0x0000238e cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00002390 bne 0x2412                                    |             goto label_37;
                                                             |         }
    0x00002392 ldr r3, [r7, 0x4c]                            |         r3 = var_48h_2;
    0x00002394 vmov.f32 s16, 5.000000e-01                    |         __asm ("vmov.f32 s16, 5");
    0x00002398 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x0000239a beq.w 0x2748                                  |             goto label_38;
                                                             |         }
    0x0000239e ldr.w r8, [r7, 0x38]                          |         r8 = var_38h;
    0x000023a2 movs r4, 1                                    |         r4 = 1;
    0x000023a4 mov r1, r0                                    |         r1 = r0;
    0x000023a6 b 0x23e0                                      |         goto label_39;
                                                             | label_2:
    0x000023a8 lsls r6, r3, 0x19                             |         r6 = r3 << 0x19;
    0x000023aa bpl 0x2360                                    |         
                                                             |     } while (r6 >= r3);
    0x000023ac ldr.w r3, [sb, 0x18]                          |     r3 = *((sb + 0x18));
    0x000023b0 mov r0, sb                                    |     r0 = sb;
    0x000023b2 lsl.w r3, r4, r3                              |     r3 = r4 << r3;
    0x000023b6 vmov s15, r3                                  |     __asm ("vmov s15, r3");
    0x000023ba ldrsh.w r3, [r1, 0x18]                        |     r3 = *((r1 + 0x18));
    0x000023be vcvt.f32.u32 s15, s15                         |     __asm ("vcvt.f32.u32 s15, s15");
    0x000023c2 vadd.f32 s15, s15, s16                        |     __asm ("vadd.f32 s15, s15, s16");
    0x000023c6 vcvt.s32.f32 s15, s15                         |     __asm ("vcvt.s32.f32 s15, s15");
    0x000023ca vmov r2, s15                                  |     __asm ("vmov r2, s15");
    0x000023ce cmp r2, r3                                    |     
    0x000023d0 it le                                         |     
                                                             |     if (r2 > r3) {
    0x000023d2 addle r8, r8, 1                               |         r8++;
                                                             |     }
    0x000023d6 blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x000023da mov r1, r0                                    |     r1 = r0;
    0x000023dc cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000023de beq 0x2468                                    |         goto label_9;
                                                             |     }
                                                             | label_39:
    0x000023e0 ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x000023e2 lsls r2, r3, 0x1a                             |     r2 = r3 << 0x1a;
                                                             |     if (r2 >= r3) {
    0x000023e4 bpl 0x2360                                    |         goto label_1;
                                                             |     }
    0x000023e6 b 0x23a8                                      |     goto label_2;
                                                             | label_30:
    0x000023e8 adds r4, 1                                    |     r4++;
    0x000023ea vstr d8, [r7, 0x98]                           |     __asm ("vstr d8, [r7, 0x98]");
    0x000023ee b 0x22c6                                      |     goto label_3;
                                                             | label_34:
    0x000023f0 ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
                                                             |     if (r3 == 0) {
    0x000023f2 cbz r3, 0x2454                                |         goto label_40;
                                                             |     }
    0x000023f4 ldr.w r8, [r7, 0x48]                          |     r8 = var_48h;
    0x000023f8 mov r1, r0                                    |     r1 = r0;
    0x000023fa b 0x240a                                      |     goto label_41;
                                                             | label_4:
    0x000023fc mov r0, sb                                    |     r0 = sb;
    0x000023fe add.w r8, r8, 1                               |     r8++;
    0x00002402 blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x00002406 mov r1, r0                                    |     r1 = r0;
                                                             |     if (r0 == 0) {
    0x00002408 cbz r0, 0x2468                                |         goto label_9;
                                                             |     }
                                                             | label_41:
    0x0000240a ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x0000240c lsls r4, r3, 0x19                             |     r4 = r3 << 0x19;
                                                             |     if (r4 >= r3) {
    0x0000240e bpl 0x2360                                    |         goto label_1;
                                                             |     }
    0x00002410 b 0x23fc                                      |     goto label_4;
                                                             | label_37:
    0x00002412 ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
                                                             |     if (r3 == 0) {
    0x00002414 cbz r3, 0x2438                                |         goto label_42;
                                                             |     }
    0x00002416 mov.w r8, 0                                   |     r8 = 0;
    0x0000241a mov r1, r0                                    |     r1 = r0;
    0x0000241c b 0x2430                                      |     goto label_43;
                                                             | label_5:
    0x0000241e lsls r0, r3, 0x19                             |     r0 = r3 << 0x19;
                                                             |     if (r0 >= r3) {
    0x00002420 bpl 0x2360                                    |         goto label_1;
                                                             |     }
    0x00002422 mov r0, sb                                    |     r0 = sb;
    0x00002424 add.w r8, r8, 1                               |     r8++;
    0x00002428 blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x0000242c mov r1, r0                                    |     r1 = r0;
                                                             |     if (r0 == 0) {
    0x0000242e cbz r0, 0x2468                                |         goto label_9;
                                                             |     }
                                                             | label_43:
    0x00002430 ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x00002432 lsls r4, r3, 0x1a                             |     r4 = r3 << 0x1a;
                                                             |     if (r4 >= r3) {
    0x00002434 bpl 0x2360                                    |         goto label_1;
                                                             |     }
    0x00002436 b 0x241e                                      |     goto label_5;
                                                             | label_42:
    0x00002438 mov r8, r3                                    |     r8 = r3;
    0x0000243a mov r1, r0                                    |     r1 = r0;
    0x0000243c b 0x244c                                      |     goto label_44;
                                                             | label_6:
    0x0000243e mov r0, sb                                    |     r0 = sb;
    0x00002440 add.w r8, r8, 1                               |     r8++;
    0x00002444 blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x00002448 mov r1, r0                                    |     r1 = r0;
                                                             |     if (r0 == 0) {
    0x0000244a cbz r0, 0x2468                                |         goto label_9;
                                                             |     }
                                                             | label_44:
    0x0000244c ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x0000244e lsls r5, r3, 0x1a                             |     r5 = r3 << 0x1a;
                                                             |     if (r5 >= r3) {
    0x00002450 bpl 0x2360                                    |         goto label_1;
                                                             |     }
    0x00002452 b 0x243e                                      |     goto label_6;
                                                             | label_40:
    0x00002454 mov r8, r3                                    |     r8 = r3;
    0x00002456 mov r1, r0                                    |     r1 = r0;
                                                             |     do {
    0x00002458 mov r0, sb                                    |         r0 = sb;
    0x0000245a add.w r8, r8, 1                               |         r8++;
    0x0000245e blx 0x2084                                    |         r0 = fcn_00002084 ();
    0x00002462 mov r1, r0                                    |         r1 = r0;
    0x00002464 cmp r0, 0                                     |         
    0x00002466 bne 0x2458                                    |         
                                                             |     } while (r0 != 0);
                                                             | label_9:
    0x00002468 ldr.w r2, [sb, 0x14]                          |     r2 = *((sb + 0x14));
    0x0000246c lsl.w r3, r8, 2                               |     r3 = r8 << 2;
    0x00002470 str.w sp, [r7, 0x18]                          |     __asm ("str.w sp, [var_18h]");
    0x00002474 movs r4, 0                                    |     r4 = 0;
    0x00002476 adds r3, 0xb                                  |     r3 += 0xb;
    0x00002478 mov fp, r8                                    |     
    0x0000247a str r2, [r7, 0x40]                            |     var_40h = r2;
    0x0000247c adds r2, 1                                    |     r2++;
    0x0000247e lsls r2, r2, 2                                |     r2 <<= 2;
    0x00002480 bic r3, r3, 7                                 |     r3 = BIT_MASK (r3, 7);
    0x00002484 sub.w sp, sp, r3                              |     
    0x00002488 str.w r8, [r7, 0x74]                          |     __asm ("str.w r8, [var_74h]");
    0x0000248c adds r3, r2, 7                                |     r3 = r2 + 7;
    0x0000248e str r4, [sp, 8]                               |     var_8h = r4;
    0x00002490 bic r3, r3, 7                                 |     r3 = BIT_MASK (r3, 7);
    0x00002494 str r2, [r7, 0x10]                            |     var_10h = r2;
    0x00002496 add r2, sp, 8                                 |     r2 += var_8h;
    0x00002498 sub.w sp, sp, r3                              |     
    0x0000249c movs r3, 1                                    |     r3 = 1;
    0x0000249e str r2, [r7, 0x1c]                            |     var_1ch = r2;
    0x000024a0 str.w r3, [r7, 0x84]                          |     __asm ("str.w r3, [var_84h]");
    0x000024a4 add r3, sp, 8                                 |     r3 += var_8h;
    0x000024a6 str r3, [r7, 0x20]                            |     var_20h = r3;
    0x000024a8 ldrd r2, r3, [sb, 0x28]                       |     __asm ("ldrd r2, r3, [sb, 0x28]");
    0x000024ac str r4, [r7, 0x78]                            |     var_74h_2 = r4;
    0x000024ae str r4, [sp, 8]                               |     var_8h = r4;
    0x000024b0 strd r2, r3, [r7, 0x88]                       |     __asm ("strd r2, r3, [var_88h]");
    0x000024b4 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x000024b8 bne.w 0x2848                                  |         goto label_45;
                                                             |     }
                                                             | label_20:
    0x000024bc ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x000024be movs r4, 0                                    |     r4 = 0;
    0x000024c0 str.w r4, [r7, 0x80]                          |     __asm ("str.w r4, [var_80h]");
    0x000024c4 str r3, [r7, 0x7c]                            |     var_7ch = r3;
    0x000024c6 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000024c8 beq.w 0x282a                                  |         goto label_46;
                                                             |     }
    0x000024cc ldr r3, [r7, 0x10]                            |     r3 = var_10h;
    0x000024ce subs r0, r3, 4                                |     r0 = r3 - 4;
    0x000024d0 blx 0x1f80                                    |     fcn_00001f80 ();
    0x000024d4 str r0, [r7, 0x48]                            |     var_48h = r0;
    0x000024d6 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000024d8 beq.w 0x2f6e                                  |         goto label_47;
                                                             |     }
    0x000024dc ldr r5, [r7, 0x20]                            |     r5 = var_20h;
    0x000024de mov sl, r4                                    |     sl = r4;
    0x000024e0 strd fp, r8, [r7, 0x38]                       |     __asm ("strd fp, r8, [var_3ch]");
    0x000024e4 mov fp, r0                                    |     
    0x000024e6 str r5, [r7, 0x4c]                            |     var_48h_2 = r5;
                                                             | label_7:
    0x000024e8 mov r1, r4                                    |     r1 = r4;
    0x000024ea mov r0, sb                                    |     r0 = sb;
    0x000024ec blx 0x206c                                    |     r0 = fcn_0000206c ();
    0x000024f0 mov r4, r0                                    |     r4 = r0;
    0x000024f2 ldr r0, [r0, 0x1c]                            |     r0 = *((r0 + 0x1c));
    0x000024f4 bic.w r0, r0, r0, asr 31                      |     r0 = BIT_MASK (r0, r0);
    0x000024f8 blx 0x1fdc                                    |     r0 = fcn_00001fdc ();
    0x000024fc mov r6, r0                                    |     r6 = r0;
    0x000024fe cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002500 beq.w 0x2f6a                                  |         goto label_48;
                                                             |     }
    0x00002504 blx 0x2060                                    |     fcn_00002060 ();
    0x00002508 ldr r3, [r4, 8]                               |     r3 = *((r4 + 8));
    0x0000250a ldr r2, [r0, 0x14]                            |     r2 = *((r0 + 0x14));
    0x0000250c lsls r3, r3, 0x16                             |     r3 <<= 0x16;
    0x0000250e itt mi                                        |     
                                                             |     if (r3 >= r3) {
    0x00002510 ldrmi r3, [r4, 0x14]                          |         r3 = *((r4 + 0x14));
                                                             |     }
                                                             |     if (r3 >= r3) {
    0x00002512 strmi r3, [r0, 0x10]                          |         *((r0 + 0x10)) = r3;
                                                             |     }
    0x00002514 ldr r3, [r4, 0x10]                            |     r3 = *((r4 + 0x10));
    0x00002516 str r3, [r0, 0xc]                             |     *((r0 + 0xc)) = r3;
    0x00002518 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0000251a beq 0x2590                                    |         goto label_11;
                                                             |     }
    0x0000251c ldr r3, [r4, 0x18]                            |     r3 = *((r4 + 0x18));
    0x0000251e add.w ip, r2, -1                              |     
    0x00002522 ldr r1, [r0, 0x18]                            |     r1 = *((r0 + 0x18));
    0x00002524 adds r0, r3, 4                                |     r0 = r3 + 4;
    0x00002526 subs r0, r1, r0                               |     r0 = r1 - r0;
    0x00002528 cmp r0, 8                                     |     
    0x0000252a it hi                                         |     
                                                             |     if (r0 > 8) {
    0x0000252c cmphi ip, 5                                   |         __asm ("cmphi ip, 5");
                                                             |     }
    0x00002530 ite hi                                        |     
                                                             |     if (r0 <= 8) {
    0x00002532 movhi r0, 1                                   |         r0 = 1;
                                                             |     }
                                                             |     if (r0 > 8) {
    0x00002534 movls r0, 0                                   |         r0 = 0;
                                                             |     }
                                                             |     if (r0 < 8) {
    0x00002536 bls.w 0x2790                                  |         goto label_49;
                                                             |     }
    0x0000253a lsr.w lr, r2, 2                               |     lr = r2 >> 2;
    0x0000253e ldr r5, [r7, 0x4c]                            |     r5 = var_48h_2;
    0x00002540 mov r0, r3                                    |     r0 = r3;
    0x00002542 add.w lr, r3, lr, lsl 4                       |     lr = r3 + (lr << 4);
    0x00002546 mov ip, r1                                    |     
                                                             |     do {
    0x00002548 vld1.32 {d16, d17}, [r0]!                     |         __asm ("vld1.32 {d16, d17}, [r0]!");
    0x0000254c cmp r0, lr                                    |         
    0x0000254e vst1.32 {d16, d17}, [ip]!                     |         __asm ("vst1.32 {d16, d17}, [ip]!");
    0x00002552 bne 0x2548                                    |         
                                                             |     } while (r0 != lr);
    0x00002554 bic r0, r2, 3                                 |     r0 = BIT_MASK (r2, 3);
    0x00002558 str r5, [r7, 0x4c]                            |     var_48h_2 = r5;
    0x0000255a cmp r2, r0                                    |     
                                                             |     if (r2 != r0) {
    0x0000255c beq 0x2590                                    |         
    0x0000255e ldr.w r5, [r3, r0, lsl 2]                     |         offset_0 = r0 << 2;
                                                             |         r5 = *((r3 + offset_0));
    0x00002562 add.w lr, r0, 1                               |         lr = r0 + 1;
    0x00002566 cmp r2, lr                                    |         
    0x00002568 lsl.w ip, r0, 2                               |         
    0x0000256c str.w r5, [r1, r0, lsl 2]                     |         __asm ("str.w r5, [r1, r0, lsl 2]");
                                                             |         if (r2 < lr) {
    0x00002570 bls 0x2590                                    |             goto label_11;
                                                             |         }
    0x00002572 add.w lr, ip, 4                               |         lr = ip + 4;
    0x00002576 adds r0, 2                                    |         r0 += 2;
    0x00002578 ldr.w r5, [r3, lr]                            |         r5 = *((r3 + lr));
    0x0000257c cmp r2, r0                                    |         
    0x0000257e str.w r5, [r1, lr]                            |         __asm ("str.w r5, [r1, lr]");
                                                             |         if (r2 < r0) {
    0x00002582 bls 0x2590                                    |             goto label_11;
                                                             |         }
    0x00002584 add.w ip, ip, 8                               |         
    0x00002588 ldr.w r3, [r3, ip]                            |         r3 = *((r3 + ip));
    0x0000258c str.w r3, [r1, ip]                            |         __asm ("str.w r3, [r1, ip]");
                                                             |     }
                                                             | label_11:
    0x00002590 mov r0, r6                                    |     r0 = r6;
    0x00002592 blx 0x2060                                    |     fcn_00002060 ();
    0x00002596 ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
    0x00002598 str.w r0, [fp, sl, lsl 2]                     |     __asm ("str.w r0, [fp, sl, lsl 2]");
    0x0000259c add.w sl, sl, 1                               |     sl++;
    0x000025a0 str r6, [r3, 4]!                              |     *((r3 += 4)) = r6;
    0x000025a4 str r3, [r7, 0x4c]                            |     var_48h_2 = r3;
    0x000025a6 ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x000025a8 cmp sl, r3                                    |     
                                                             |     if (sl != r3) {
    0x000025aa bne 0x24e8                                    |         goto label_7;
                                                             |     }
    0x000025ac ldr r3, [r7, 0x48]                            |     r3 = var_48h;
    0x000025ae add.w r0, r7, 0x68                            |     r0 += var_68h;
    0x000025b2 ldrd fp, r8, [r7, 0x38]                       |     __asm ("ldrd fp, r8, [var_3ch]");
    0x000025b6 str.w r3, [r7, 0x80]                          |     __asm ("str.w r3, [var_80h]");
    0x000025ba ldr r3, [r7, 0x30]                            |     r3 = var_30h;
    0x000025bc adds r1, r3, 4                                |     r1 = r3 + 4;
    0x000025be blx 0x1fa4                                    |     r0 = protobuf_c_message_unpack ();
    0x000025c2 mov r6, r0                                    |     r6 = r0;
    0x000025c4 cmp.w r8, 0                                   |     
                                                             |     if (r8 == 0) {
    0x000025c8 beq.w 0x2fb8                                  |         goto label_50;
                                                             |     }
    0x000025cc movs r3, 0                                    |     r3 = 0;
    0x000025ce str r3, [r7, 0x4c]                            |     var_48h_2 = r3;
                                                             | label_12:
    0x000025d0 cmp.w r8, 8                                   |     
                                                             |     if (r8 < 8) {
    0x000025d4 bls.w 0x2fb0                                  |         goto label_51;
                                                             |     }
    0x000025d8 ldr r3, [r7, 0x1c]                            |     r3 = var_1ch;
    0x000025da sub.w sb, r8, 9                               |     sb = r8 - 9;
    0x000025de bic sb, sb, 7                                 |     sb = BIT_MASK (sb, 7);
    0x000025e2 mov.w sl, 0                                   |     sl = 0;
    0x000025e6 add.w r5, r3, 0x3c                            |     r5 = r3 + 0x3c;
    0x000025ea add.w r3, sb, 8                               |     r3 = sb + 8;
    0x000025ee str r3, [r7, 0x44]                            |     var_44h = r3;
                                                             |     do {
    0x000025f0 ldr r0, [r5, -0x38]                           |         r0 = *((r5 - 0x38));
    0x000025f4 pld [r5]                                      |         __asm ("pld [r5]");
    0x000025f8 adds r5, 0x20                                 |         r5 += 0x20;
    0x000025fa blx 0x20a8                                    |         fcn_000020a8 ();
    0x000025fe ldr r0, [r5, -0x54]                           |         r0 = *((r5 - 0x54));
    0x00002602 blx 0x20a8                                    |         fcn_000020a8 ();
    0x00002606 ldr r0, [r5, -0x50]                           |         r0 = *((r5 - 0x50));
    0x0000260a blx 0x20a8                                    |         fcn_000020a8 ();
    0x0000260e ldr r0, [r5, -0x4c]                           |         r0 = *((r5 - 0x4c));
    0x00002612 blx 0x20a8                                    |         fcn_000020a8 ();
    0x00002616 ldr r0, [r5, -0x48]                           |         r0 = *((r5 - 0x48));
    0x0000261a blx 0x20a8                                    |         fcn_000020a8 ();
    0x0000261e ldr r0, [r5, -0x44]                           |         r0 = *((r5 - 0x44));
    0x00002622 blx 0x20a8                                    |         fcn_000020a8 ();
    0x00002626 ldr r0, [r5, -0x40]                           |         r0 = *((r5 - 0x40));
    0x0000262a blx 0x20a8                                    |         fcn_000020a8 ();
    0x0000262e ldr r0, [r5, -0x3c]                           |         r0 = *((r5 - 0x3c));
    0x00002632 blx 0x20a8                                    |         fcn_000020a8 ();
    0x00002636 cmp sl, sb                                    |         
    0x00002638 add.w sl, sl, 8                               |         sl += 8;
    0x0000263c bne 0x25f0                                    |         
                                                             |     } while (sl != sb);
                                                             | label_23:
    0x0000263e ldr r3, [r7, 0x44]                            |     r3 = var_44h;
    0x00002640 ldr r2, [r7, 0x1c]                            |     r2 = var_1ch;
    0x00002642 adds r4, r3, 1                                |     r4 = r3 + 1;
    0x00002644 add.w r5, r2, r3, lsl 2                       |     r5 = r2 + (r3 << 2);
    0x00002648 b 0x264c                                      |     
                                                             |     while (r4 <= r8) {
    0x0000264a adds r4, 1                                    |         r4++;
    0x0000264c ldr r0, [r5, 4]!                              |         r0 = *((r5 += 4));
    0x00002650 blx 0x20a8                                    |         fcn_000020a8 ();
    0x00002654 cmp r4, r8                                    |         
    0x00002656 blo 0x264a                                    |         
                                                             |     }
    0x00002658 mov r0, fp                                    |     r0 = fp;
    0x0000265a blx 0x1ec8                                    |     fcn_00001ec8 ();
    0x0000265e ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x00002660 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00002662 beq 0x26e2                                    |         goto label_52;
                                                             |     }
                                                             | label_24:
    0x00002664 ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x00002666 cmp r3, 8                                     |     
    0x00002668 sub.w sl, r3, 7                               |     sl = r3 - 7;
                                                             |     if (r3 < 8) {
    0x0000266c bls.w 0x2faa                                  |         goto label_53;
                                                             |     }
    0x00002670 ldr r3, [r7, 0x20]                            |     r3 = var_20h;
    0x00002672 movs r5, 0                                    |     r5 = 0;
    0x00002674 add.w r4, r3, 0x3c                            |     r4 = r3 + 0x3c;
                                                             |     do {
    0x00002678 ldr r0, [r4, -0x38]                           |         r0 = *((r4 - 0x38));
    0x0000267c add.w r8, r5, 9                               |         r8 = r5 + 9;
    0x00002680 pld [r4]                                      |         __asm ("pld [r4]");
    0x00002684 adds r5, 8                                    |         r5 += 8;
    0x00002686 blx 0x1f40                                    |         fcn_00001f40 ();
    0x0000268a ldr r0, [r4, -0x34]                           |         r0 = *((r4 - 0x34));
    0x0000268e adds r4, 0x20                                 |         r4 += 0x20;
    0x00002690 blx 0x1f40                                    |         fcn_00001f40 ();
    0x00002694 ldr r0, [r4, -0x50]                           |         r0 = *((r4 - 0x50));
    0x00002698 blx 0x1f40                                    |         fcn_00001f40 ();
    0x0000269c ldr r0, [r4, -0x4c]                           |         r0 = *((r4 - 0x4c));
    0x000026a0 blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026a4 ldr r0, [r4, -0x48]                           |         r0 = *((r4 - 0x48));
    0x000026a8 blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026ac ldr r0, [r4, -0x44]                           |         r0 = *((r4 - 0x44));
    0x000026b0 blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026b4 ldr r0, [r4, -0x40]                           |         r0 = *((r4 - 0x40));
    0x000026b8 blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026bc ldr r0, [r4, -0x3c]                           |         r0 = *((r4 - 0x3c));
    0x000026c0 blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026c4 cmp sl, r8                                    |         
    0x000026c6 bhi 0x2678                                    |         
                                                             |     } while (sl > r8);
                                                             | label_22:
    0x000026c8 ldr r3, [r7, 0x20]                            |     r3 = var_20h;
    0x000026ca ldr r4, [r7, 0x40]                            |     r4 = var_40h;
    0x000026cc add.w sb, r3, r5, lsl 2                       |     sb = r3 + (r5 << 2);
    0x000026d0 adds r5, 1                                    |     r5++;
    0x000026d2 b 0x26d6                                      |     
                                                             |     while (r5 <= r4) {
    0x000026d4 adds r5, 1                                    |         r5++;
    0x000026d6 ldr r0, [sb, 4]!                              |         r0 = *((sb += 4));
    0x000026da blx 0x1f40                                    |         fcn_00001f40 ();
    0x000026de cmp r5, r4                                    |         
    0x000026e0 blo 0x26d4                                    |         
                                                             |     }
                                                             | label_52:
    0x000026e2 ldr r0, [r7, 0x48]                            |     r0 = var_48h;
    0x000026e4 blx 0x1ec8                                    |     fcn_00001ec8 ();
    0x000026e8 ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
    0x000026ea cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000026ec bne.w 0x3024                                  |         goto label_54;
                                                             |     }
                                                             | label_28:
    0x000026f0 cmp r6, 0                                     |     
    0x000026f2 ldr.w sp, [r7, 0x18]                          |     sp = var_18h;
                                                             |     if (r6 <= 0) {
    0x000026f6 ble.w 0x3028                                  |         goto label_55;
                                                             |     }
    0x000026fa ldr r3, [r7, 0x24]                            |     r3 = var_24h;
    0x000026fc adds r6, 4                                    |     r6 += 4;
                                                             |     if (r3 != 0) {
    0x000026fe cbz r3, 0x2702                                |         
    0x00002700 str r6, [r3]                                  |         *(r3) = r6;
                                                             |     }
    0x00002702 ldr r3, [r7, 0x30]                            |     r3 = var_30h;
    0x00002704 rev r6, r6                                    |     r6 = SWAP32 (r6);
    0x00002706 movs r0, 0                                    |     r0 = 0;
    0x00002708 str r6, [r3]                                  |     *(r3) = r6;
    0x0000270a b 0x2364                                      |     goto label_8;
                                                             | label_35:
    0x0000270c mov r8, r3                                    |     r8 = r3;
    0x0000270e movs r4, 1                                    |     r4 = 1;
    0x00002710 mov r1, r0                                    |     r1 = r0;
                                                             |     do {
    0x00002712 ldr.w r3, [sb, 0x18]                          |         r3 = *((sb + 0x18));
    0x00002716 mov r0, sb                                    |         r0 = sb;
    0x00002718 lsl.w r3, r4, r3                              |         r3 = r4 << r3;
    0x0000271c vmov s15, r3                                  |         __asm ("vmov s15, r3");
    0x00002720 ldrsh.w r3, [r1, 0x18]                        |         r3 = *((r1 + 0x18));
    0x00002724 vcvt.f32.u32 s15, s15                         |         __asm ("vcvt.f32.u32 s15, s15");
    0x00002728 vadd.f32 s15, s15, s16                        |         __asm ("vadd.f32 s15, s15, s16");
    0x0000272c vcvt.s32.f32 s15, s15                         |         __asm ("vcvt.s32.f32 s15, s15");
    0x00002730 vmov r2, s15                                  |         __asm ("vmov r2, s15");
    0x00002734 cmp r2, r3                                    |         
    0x00002736 it le                                         |         
                                                             |         if (r2 > r3) {
    0x00002738 addle r8, r8, 1                               |             r8++;
                                                             |         }
    0x0000273c blx 0x2084                                    |         r0 = fcn_00002084 ();
    0x00002740 mov r1, r0                                    |         r1 = r0;
    0x00002742 cmp r0, 0                                     |         
    0x00002744 bne 0x2712                                    |         
                                                             |     } while (r0 != 0);
    0x00002746 b 0x2468                                      |     goto label_9;
                                                             | label_38:
    0x00002748 mov r8, r3                                    |     r8 = r3;
    0x0000274a movs r4, 1                                    |     r4 = 1;
    0x0000274c mov r1, r0                                    |     r1 = r0;
    0x0000274e b 0x2786                                      |     goto label_56;
                                                             | label_10:
    0x00002750 ldr.w r3, [sb, 0x18]                          |     r3 = *((sb + 0x18));
    0x00002754 mov r0, sb                                    |     r0 = sb;
    0x00002756 lsl.w r3, r4, r3                              |     r3 = r4 << r3;
    0x0000275a vmov s15, r3                                  |     __asm ("vmov s15, r3");
    0x0000275e ldrsh.w r3, [r1, 0x18]                        |     r3 = *((r1 + 0x18));
    0x00002762 vcvt.f32.u32 s15, s15                         |     __asm ("vcvt.f32.u32 s15, s15");
    0x00002766 vadd.f32 s15, s15, s16                        |     __asm ("vadd.f32 s15, s15, s16");
    0x0000276a vcvt.s32.f32 s15, s15                         |     __asm ("vcvt.s32.f32 s15, s15");
    0x0000276e vmov r2, s15                                  |     __asm ("vmov r2, s15");
    0x00002772 cmp r3, r2                                    |     
    0x00002774 it ge                                         |     
                                                             |     if (r3 < r2) {
    0x00002776 addge r8, r8, 1                               |         r8++;
                                                             |     }
    0x0000277a blx 0x2084                                    |     r0 = fcn_00002084 ();
    0x0000277e mov r1, r0                                    |     r1 = r0;
    0x00002780 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002782 beq.w 0x2468                                  |         goto label_9;
                                                             |     }
                                                             | label_56:
    0x00002786 ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x00002788 lsls r0, r3, 0x1a                             |     r0 = r3 << 0x1a;
                                                             |     if (r0 >= r3) {
    0x0000278a bpl.w 0x2360                                  |         goto label_1;
                                                             |     }
    0x0000278e b 0x2750                                      |     goto label_10;
                                                             | label_49:
    0x00002790 cmp r2, 8                                     |     
                                                             |     if (r2 < 8) {
    0x00002792 bls.w 0x3006                                  |         goto label_57;
                                                             |     }
    0x00002796 sub.w ip, r2, 9                               |     
    0x0000279a add.w lr, r3, 0x64                            |     lr = r3 + 0x64;
    0x0000279e bic r5, ip, 7                                 |     r5 = BIT_MASK (ip, 7);
    0x000027a2 mov r8, r1                                    |     r8 = r1;
    0x000027a4 add.w ip, r5, 8                               |     
    0x000027a8 str r5, [r7, 0x44]                            |     var_44h = r5;
    0x000027aa ldr r5, [r7, 0x4c]                            |     r5 = var_48h_2;
    0x000027ac str r4, [r7, 0x34]                            |     var_34h = r4;
    0x000027ae str r3, [r7, 0x2c]                            |     var_2ch = r3;
                                                             |     do {
    0x000027b0 ldr r4, [lr, -0x64]                           |         r4 = *((lr - 0x64));
    0x000027b4 add.w r8, r8, 0x20                            |         r8 += 0x20;
    0x000027b8 pld [lr]                                      |         __asm ("pld [lr]");
    0x000027bc add.w lr, lr, 0x20                            |         lr += 0x20;
    0x000027c0 ldr r3, [r7, 0x44]                            |         r3 = var_44h;
    0x000027c2 str r4, [r8, -0x20]                           |         *((r8 - 0x20)) = r4;
    0x000027c6 ldr r4, [lr, -0x80]                           |         r4 = *((lr - 0x80));
    0x000027ca cmp r0, r3                                    |         
    0x000027cc add.w r0, r0, 8                               |         r0 += 8;
    0x000027d0 str r4, [r8, -0x1c]                           |         *((r8 - 0x1c)) = r4;
    0x000027d4 ldr r4, [lr, -0x7c]                           |         r4 = *((lr - 0x7c));
    0x000027d8 str r4, [r8, -0x18]                           |         *((r8 - 0x18)) = r4;
    0x000027dc ldr r4, [lr, -0x78]                           |         r4 = *((lr - 0x78));
    0x000027e0 str r4, [r8, -0x14]                           |         *((r8 - 0x14)) = r4;
    0x000027e4 ldr r4, [lr, -0x74]                           |         r4 = *((lr - 0x74));
    0x000027e8 str r4, [r8, -0x10]                           |         *((r8 - 0x10)) = r4;
    0x000027ec ldr r4, [lr, -0x70]                           |         r4 = *((lr - 0x70));
    0x000027f0 str r4, [r8, -0xc]                            |         *((r8 - 0xc)) = r4;
    0x000027f4 ldr r4, [lr, -0x6c]                           |         r4 = *((lr - 0x6c));
    0x000027f8 str r4, [r8, -0x8]                            |         *((r8 - 0x8)) = r4;
    0x000027fc ldr r4, [lr, -0x68]                           |         r4 = *((lr - 0x68));
    0x00002800 str r4, [r8, -0x4]                            |         *((r8 - 0x4)) = r4;
    0x00002804 bne 0x27b0                                    |         
                                                             |     } while (r0 != r3);
    0x00002806 ldr r4, [r7, 0x34]                            |     r4 = var_34h;
    0x00002808 ldr r3, [r7, 0x2c]                            |     r3 = var_2ch;
    0x0000280a str r5, [r7, 0x4c]                            |     var_48h_2 = r5;
                                                             | label_25:
    0x0000280c lsl.w r0, ip, 2                               |     r0 = ip << 2;
    0x00002810 ldr r5, [r7, 0x4c]                            |     r5 = var_48h_2;
    0x00002812 add r3, r0                                    |     r3 += r0;
    0x00002814 add r1, r0                                    |     r1 += r0;
                                                             |     do {
    0x00002816 ldr r0, [r3], 4                               |         r0 = *(r3);
                                                             |         r3 += 4;
    0x0000281a add.w ip, ip, 1                               |         
    0x0000281e cmp r2, ip                                    |         
    0x00002820 str r0, [r1], 4                               |         *(r1) = r0;
                                                             |         r1 += 4;
    0x00002824 bhi 0x2816                                    |         
                                                             |     } while (r2 > ip);
    0x00002826 str r5, [r7, 0x4c]                            |     var_48h_2 = r5;
    0x00002828 b 0x2590                                      |     goto label_11;
                                                             | label_46:
    0x0000282a ldr r3, [r7, 0x30]                            |     r3 = var_30h;
    0x0000282c add.w r0, r7, 0x68                            |     r0 += var_68h;
    0x00002830 adds r1, r3, 4                                |     r1 = r3 + 4;
    0x00002832 blx 0x1fa4                                    |     r0 = protobuf_c_message_unpack ();
    0x00002836 mov r6, r0                                    |     r6 = r0;
    0x00002838 cmp.w r8, 0                                   |     
                                                             |     if (r8 == 0) {
    0x0000283c beq.w 0x303c                                  |         goto label_58;
                                                             |     }
    0x00002840 ldr r3, [r7, 0x40]                            |     r3 = var_40h;
    0x00002842 strd r3, r3, [r7, 0x48]                       |     __asm ("strd r3, r3, [var_48h]");
    0x00002846 b 0x25d0                                      |     goto label_12;
                                                             | label_45:
    0x00002848 lsl.w r1, r8, 2                               |     r1 = r8 << 2;
    0x0000284c movs r0, 1                                    |     r0 = 1;
    0x0000284e blx 0x1e78                                    |     r0 = calloc (r0, r1);
    0x00002852 mov fp, r0                                    |     
    0x00002854 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002856 beq.w 0x2f92                                  |         goto label_59;
                                                             |     }
    0x0000285a ldr r3, [r7, 0x1c]                            |     r3 = var_1ch;
    0x0000285c str.w r8, [r7, 0x2c]                          |     __asm ("str.w r8, [var_2ch]");
    0x00002860 mov r8, r4                                    |     r8 = r4;
    0x00002862 vmov.f32 s16, 5.000000e-01                    |     __asm ("vmov.f32 s16, 5");
    0x00002866 str r3, [r7, 0x34]                            |     var_34h = r3;
    0x00002868 str r0, [r7, 0x28]                            |     var_28h = r0;
    0x0000286a b 0x28ac                                      |     
                                                             |     while (r3 == 0) {
                                                             | label_13:
    0x0000286c ldr r3, [r7, 0x4c]                            |         r3 = var_48h_2;
    0x0000286e cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00002870 bne.w 0x2a02                                  |             goto label_60;
                                                             |         }
                                                             | label_14:
    0x00002874 ldr r3, [r7, 0x3c]                            |         r3 = var_3ch;
    0x00002876 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00002878 bne.w 0x2c1a                                  |             goto label_61;
                                                             |         }
                                                             | label_15:
    0x0000287c tst.w fp, 0x20000                             |         
                                                             |         if ((fp & 0x20000) != 0) {
    0x00002880 bne.w 0x2cc4                                  |             goto label_62;
                                                             |         }
                                                             | label_16:
    0x00002884 tst.w fp, 0x100000                            |         
                                                             |         if ((fp & 0x100000) != 0) {
    0x00002888 bne.w 0x2d20                                  |             goto label_63;
                                                             |         }
                                                             | label_17:
    0x0000288c mov r0, r6                                    |         r0 = r6;
    0x0000288e blx 0x1f10                                    |         fcn_00001f10 ();
    0x00002892 ldr r3, [r7, 0x28]                            |         r3 = var_28h;
    0x00002894 str.w r0, [r3, r8, lsl 2]                     |         __asm ("str.w r0, [r3, r8, lsl 2]");
    0x00002898 add.w r8, r8, 1                               |         r8++;
    0x0000289c ldr r3, [r7, 0x34]                            |         r3 = var_34h;
    0x0000289e str r6, [r3, 4]!                              |         *((r3 += 4)) = r6;
    0x000028a2 str r3, [r7, 0x34]                            |         var_34h = r3;
    0x000028a4 ldr r3, [r7, 0x2c]                            |         r3 = var_2ch;
    0x000028a6 cmp r3, r8                                    |         
                                                             |         if (r3 == r8) {
    0x000028a8 beq.w 0x2f80                                  |             goto label_64;
                                                             |         }
    0x000028ac mov r1, r4                                    |         r1 = r4;
    0x000028ae mov r0, sb                                    |         r0 = sb;
    0x000028b0 blx 0x2084                                    |         fcn_00002084 ();
    0x000028b4 ldr r3, [r7, 0x38]                            |         r3 = var_38h;
    0x000028b6 mov r4, r0                                    |         r4 = r0;
    0x000028b8 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000028ba beq.w 0x2e60                                  |             goto label_65;
                                                             |         }
                                                             | label_18:
    0x000028be ldr r3, [r7, 0x4c]                            |         r3 = var_48h_2;
    0x000028c0 ldr r2, [r4, 8]                               |         r2 = *((r4 + 8));
    0x000028c2 mov r0, r3                                    |         r0 = r3;
    0x000028c4 ubfx r2, r2, 0x12, 1                          |         r2 = (r2 >> 0x12) & ((1 << 1) - 1);
                                                             |         if (r3 != 0) {
    0x000028c8 cbz r3, 0x28cc                                |             
    0x000028ca ldr r0, [r4, 0x28]                            |             r0 = *((r4 + 0x28));
                                                             |         }
    0x000028cc ldr r3, [r7, 0x3c]                            |         r3 = var_3ch;
    0x000028ce ldr r1, [r4, 0x60]                            |         r1 = *((r4 + 0x60));
    0x000028d0 str r3, [sp, 4]                               |         var_4h = r3;
    0x000028d2 ldr r3, [r7, 0x4c]                            |         r3 = var_48h_2;
    0x000028d4 str r3, [sp]                                  |         *(sp) = r3;
    0x000028d6 ldr r3, [r7, 0x48]                            |         r3 = var_48h;
    0x000028d8 blx 0x2078                                    |         r0 = fcn_00002078 ();
    0x000028dc mov r6, r0                                    |         r6 = r0;
    0x000028de cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000028e0 beq.w 0x2f8e                                  |             goto label_66;
                                                             |         }
    0x000028e4 ldr.w sl, [sb, 0x18]                          |         sl = *((sb + 0x18));
    0x000028e8 blx 0x1f10                                    |         fcn_00001f10 ();
    0x000028ec ldr.w fp, [r4, 8]                             |         fp = *((r4 + 8));
    0x000028f0 mov r5, r0                                    |         r5 = r0;
    0x000028f2 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x000028f4 tst.w fp, 0x8000                              |         
    0x000028f8 str r3, [r0, 0x10]                            |         *((r0 + 0x10)) = r3;
    0x000028fa mov.w r3, 1                                   |         r3 = 1;
    0x000028fe str r3, [r0, 0xc]                             |         *((r0 + 0xc)) = r3;
                                                             |         if ((fp & 0x8000) != 0) {
    0x00002900 beq 0x292e                                    |             
    0x00002902 ldr r2, [r7, 0x44]                            |             r2 = var_44h;
    0x00002904 ldr.w r3, [pc, 0x604]                         |             r3 = *(0x2f0c);
    0x00002908 ldr r3, [r2, r3]                              |             r3 = *((r2 + r3));
    0x0000290a ldrsh.w r2, [r4, 0x18]                        |             r2 = *((r4 + 0x18));
    0x0000290e vmov s15, r2                                  |             __asm ("vmov s15, r2");
    0x00002912 and r2, sl, 0x1f                              |             r2 = sl & 0x1f;
    0x00002916 add.w r3, r3, r2, lsl 2                       |             r3 += (r2 << 2);
    0x0000291a vcvt.f32.s32 s15, s15                         |             __asm ("vcvt.f32.s32 s15, s15");
    0x0000291e vldr s14, [r3]                                |             __asm ("vldr s14, [r3]");
    0x00002922 movs r3, 2                                    |             r3 = 2;
    0x00002924 str r3, [r0, 0x14]                            |             *((r0 + 0x14)) = r3;
    0x00002926 vmul.f32 s15, s15, s14                        |             __asm ("vmul.f32 s15, s15, s14");
    0x0000292a vstr s15, [r0, 0x18]                          |             __asm ("vstr s15, [r0, 0x18]");
                                                             |         }
    0x0000292e tst.w fp, 0x40000                             |         
                                                             |         if ((fp & 0x40000) != 0) {
    0x00002932 beq 0x293e                                    |             
    0x00002934 ldr r3, [r5, 0x20]                            |             r3 = *((r5 + 0x20));
    0x00002936 ldr r3, [r3, 0xc]                             |             r3 = *((r3 + 0xc));
    0x00002938 cmp r3, 1                                     |             
                                                             |             if (r3 == 1) {
    0x0000293a beq.w 0x2ea2                                  |                 goto label_67;
                                                             |             }
                                                             |         }
                                                             | label_19:
    0x0000293e tst.w fp, 0x80000                             |         
                                                             |         if ((fp & 0x80000) != 0) {
    0x00002942 beq 0x296c                                    |             
    0x00002944 ldr r2, [r7, 0x44]                            |             r2 = var_44h;
    0x00002946 ldr.w r3, [pc, 0x5c4]                         |             r3 = *(0x2f0e);
    0x0000294a vldr s15, [r4, 0x58]                          |             __asm ("vldr s15, [r4, 0x58]");
    0x0000294e ldr r3, [r2, r3]                              |             r3 = *((r2 + r3));
    0x00002950 and r2, sl, 0x1f                              |             r2 = sl & 0x1f;
    0x00002954 vcvt.f32.s32 s15, s15                         |             __asm ("vcvt.f32.s32 s15, s15");
    0x00002958 add.w r3, r3, r2, lsl 2                       |             r3 += (r2 << 2);
    0x0000295c vldr s14, [r3]                                |             __asm ("vldr s14, [r3]");
    0x00002960 movs r3, 8                                    |             r3 = 8;
    0x00002962 str r3, [r5, 0x44]                            |             *((r5 + 0x44)) = r3;
    0x00002964 vmul.f32 s15, s15, s14                        |             __asm ("vmul.f32 s15, s15, s14");
    0x00002968 vstr s15, [r5, 0x48]                          |             __asm ("vstr s15, [r5, 0x48]");
                                                             |         }
    0x0000296c ldr r3, [r7, 0x48]                            |         r3 = var_48h;
    0x0000296e cmp r3, 0                                     |         
    0x00002970 beq.w 0x286c                                  |         
                                                             |     }
    0x00002974 mov r0, r6                                    |     r0 = r6;
    0x00002976 blx 0x1eac                                    |     r0 = fcn_00001eac ();
    0x0000297a cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000297c beq.w 0x286c                                  |         goto label_13;
                                                             |     }
    0x00002980 ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002982 adds r0, 0xc                                  |     r0 += 0xc;
    0x00002984 ldr.w r3, [pc, 0x584]                         |     r3 = *(0x2f0c);
    0x00002988 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x0000298a ldrsh.w r2, [r4, 0x1a]                        |     r2 = *((r4 + 0x1a));
    0x0000298e vmov s15, r2                                  |     __asm ("vmov s15, r2");
    0x00002992 ldrsh.w r2, [r4, 0x1c]                        |     r2 = *((r4 + 0x1c));
    0x00002996 vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x0000299a vmov s14, r2                                  |     __asm ("vmov s14, r2");
    0x0000299e and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
    0x000029a2 add.w r3, r3, r2, lsl 2                       |     r3 += (r2 << 2);
    0x000029a6 vcvt.f32.s32 s14, s14                         |     __asm ("vcvt.f32.s32 s14, s14");
    0x000029aa vldr s13, [r3]                                |     __asm ("vldr s13, [r3]");
    0x000029ae ldrsh.w r3, [r4, 0x20]                        |     r3 = *((r4 + 0x20));
    0x000029b2 vmul.f32 s14, s14, s13                        |     __asm ("vmul.f32 s14, s14, s13");
    0x000029b6 vmov s12, r3                                  |     __asm ("vmov s12, r3");
    0x000029ba ldrsh.w r3, [r4, 0x1e]                        |     r3 = *((r4 + 0x1e));
    0x000029be vcvt.f32.s32 s12, s12                         |     __asm ("vcvt.f32.s32 s12, s12");
    0x000029c2 vmov.f32 s11, s14                             |     __asm ("vmov.f32 s11, s14");
    0x000029c6 vmul.f32 s15, s15, s13                        |     __asm ("vmul.f32 s15, s15, s13");
    0x000029ca vstr s14, [r7, 0x5c]                          |     __asm ("vstr s14, [r7, 0x5c]");
    0x000029ce vmla.f32 s11, s12, s13                        |     __asm ("vmla.f32 s11, s12, s13");
    0x000029d2 vmov s12, r3                                  |     __asm ("vmov s12, r3");
    0x000029d6 movs r3, 4                                    |     r3 = 4;
    0x000029d8 vstr s15, [r7, 0x50]                          |     __asm ("vstr s15, [r7, 0x50]");
    0x000029dc vcvt.f32.s32 s12, s12                         |     __asm ("vcvt.f32.s32 s12, s12");
    0x000029e0 vmla.f32 s15, s12, s13                        |     __asm ("vmla.f32 s15, s12, s13");
    0x000029e4 vstr s11, [r7, 0x54]                          |     __asm ("vstr s11, [r7, 0x54]");
    0x000029e8 vstr s15, [r7, 0x58]                          |     __asm ("vstr s15, [r7, 0x58]");
    0x000029ec vldr d16, [r7, 0x50]                          |     __asm ("vldr d16, [r7, 0x50]");
    0x000029f0 vldr d17, [r7, 0x58]                          |     __asm ("vldr d17, [r7, 0x58]");
    0x000029f4 vst1.32 {d16, d17}, [r0]                      |     __asm ("vst1.32 {d16, d17}, [r0]");
    0x000029f8 str r3, [r5, 0x24]                            |     *((r5 + 0x24)) = r3;
    0x000029fa ldr r3, [r7, 0x4c]                            |     r3 = var_48h_2;
    0x000029fc cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000029fe beq.w 0x2874                                  |         goto label_14;
                                                             |     }
                                                             | label_60:
    0x00002a02 mov r0, r6                                    |     r0 = r6;
    0x00002a04 blx 0x2090                                    |     r0 = fcn_00002090 ();
    0x00002a08 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002a0a beq.w 0x2874                                  |         goto label_14;
                                                             |     }
    0x00002a0e str r0, [r7, 0x14]                            |     var_14h = r0;
    0x00002a10 mov r0, r6                                    |     r0 = r6;
    0x00002a12 blx 0x1f64                                    |     fcn_00001f64 ();
    0x00002a16 str r0, [r7, 0xc]                             |     var_ch = r0;
    0x00002a18 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002a1a beq.w 0x2874                                  |         goto label_14;
                                                             |     }
    0x00002a1e ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002a20 ldr.w r3, [pc, 0x4e8]                         |     r3 = *(0x2f0c);
    0x00002a24 ldr r1, [r7, 0x14]                            |     r1 = var_14h;
    0x00002a26 ldr.w lr, [r4, 0x24]                          |     
    0x00002a2a ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002a2c and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
    0x00002a30 cmp r1, 8                                     |     
    0x00002a32 add.w r3, r3, r2, lsl 2                       |     r3 += (r2 << 2);
    0x00002a36 vldr s13, [r3]                                |     __asm ("vldr s13, [r3]");
                                                             |     if (r1 < 8) {
    0x00002a3a bls.w 0x301c                                  |         goto label_68;
                                                             |     }
    0x00002a3e sub.w r3, r1, 9                               |     r3 = r1 - 9;
    0x00002a42 movs r2, 0                                    |     r2 = 0;
    0x00002a44 bic r3, r3, 7                                 |     r3 = BIT_MASK (r3, 7);
    0x00002a48 add.w ip, lr, 0x3a                            |     
    0x00002a4c str r3, [r7, 0x14]                            |     var_14h = r3;
    0x00002a4e adds r3, 8                                    |     r3 += 8;
    0x00002a50 strd r3, r1, [r7, 4]                          |     __asm ("strd r3, r1, [var_4h_2]");
    0x00002a54 adds r0, 0x38                                 |     r0 += 0x38;
    0x00002a56 mov r3, r2                                    |     r3 = r2;
    0x00002a58 mov r2, ip                                    |     r2 = ip;
                                                             |     do {
    0x00002a5a ldrsh r1, [r2, -0x3a]                         |         r1 = *((r2 - 0x3a));
    0x00002a5e ldr ip, [r0, -0x38]                           |         ip = *((r0 - 0x38));
    0x00002a62 pld [r0]                                      |         __asm ("pld [r0]");
    0x00002a66 adds r0, 0x20                                 |         r0 += 0x20;
    0x00002a68 pld [r2]                                      |         __asm ("pld [r2]");
    0x00002a6c adds r2, 0x20                                 |         r2 += 0x20;
    0x00002a6e vmov s3, r1                                   |         __asm ("vmov s3, r1");
    0x00002a72 ldrsh r1, [r2, -0x58]                         |         r1 = *((r2 - 0x58));
    0x00002a76 vcvt.f32.s32 s3, s3                           |         __asm ("vcvt.f32.s32 s3, s3");
    0x00002a7a vmov s4, r1                                   |         __asm ("vmov s4, r1");
    0x00002a7e ldrsh r1, [r2, -0x56]                         |         r1 = *((r2 - 0x56));
    0x00002a82 vcvt.f32.s32 s4, s4                           |         __asm ("vcvt.f32.s32 s4, s4");
    0x00002a86 vmul.f32 s3, s3, s13                          |         __asm ("vmul.f32 s3, s3, s13");
    0x00002a8a vmov s5, r1                                   |         __asm ("vmov s5, r1");
    0x00002a8e ldrsh r1, [r2, -0x54]                         |         r1 = *((r2 - 0x54));
    0x00002a92 vcvt.f32.s32 s5, s5                           |         __asm ("vcvt.f32.s32 s5, s5");
    0x00002a96 vmul.f32 s4, s4, s13                          |         __asm ("vmul.f32 s4, s4, s13");
    0x00002a9a vmov s6, r1                                   |         __asm ("vmov s6, r1");
    0x00002a9e ldrsh r1, [r2, -0x52]                         |         r1 = *((r2 - 0x52));
    0x00002aa2 vcvt.f32.s32 s6, s6                           |         __asm ("vcvt.f32.s32 s6, s6");
    0x00002aa6 vmul.f32 s5, s5, s13                          |         __asm ("vmul.f32 s5, s5, s13");
    0x00002aaa vmov s7, r1                                   |         __asm ("vmov s7, r1");
    0x00002aae ldrsh r1, [r2, -0x50]                         |         r1 = *((r2 - 0x50));
    0x00002ab2 vcvt.f32.s32 s7, s7                           |         __asm ("vcvt.f32.s32 s7, s7");
    0x00002ab6 vmul.f32 s6, s6, s13                          |         __asm ("vmul.f32 s6, s6, s13");
    0x00002aba vmov s8, r1                                   |         __asm ("vmov s8, r1");
    0x00002abe ldrsh r1, [r2, -0x4e]                         |         r1 = *((r2 - 0x4e));
    0x00002ac2 vcvt.f32.s32 s8, s8                           |         __asm ("vcvt.f32.s32 s8, s8");
    0x00002ac6 vmul.f32 s7, s7, s13                          |         __asm ("vmul.f32 s7, s7, s13");
    0x00002aca vmov s9, r1                                   |         __asm ("vmov s9, r1");
    0x00002ace ldrsh r1, [r2, -0x4c]                         |         r1 = *((r2 - 0x4c));
    0x00002ad2 vcvt.f32.s32 s9, s9                           |         __asm ("vcvt.f32.s32 s9, s9");
    0x00002ad6 vmul.f32 s8, s8, s13                          |         __asm ("vmul.f32 s8, s8, s13");
    0x00002ada vmov s10, r1                                  |         __asm ("vmov s10, r1");
    0x00002ade ldrsh r1, [r2, -0x4a]                         |         r1 = *((r2 - 0x4a));
    0x00002ae2 vcvt.f32.s32 s10, s10                         |         __asm ("vcvt.f32.s32 s10, s10");
    0x00002ae6 vmul.f32 s9, s9, s13                          |         __asm ("vmul.f32 s9, s9, s13");
    0x00002aea vmov s11, r1                                  |         __asm ("vmov s11, r1");
    0x00002aee ldrsh r1, [r2, -0x48]                         |         r1 = *((r2 - 0x48));
    0x00002af2 vcvt.f32.s32 s11, s11                         |         __asm ("vcvt.f32.s32 s11, s11");
    0x00002af6 vmul.f32 s10, s10, s13                        |         __asm ("vmul.f32 s10, s10, s13");
    0x00002afa vmov s12, r1                                  |         __asm ("vmov s12, r1");
    0x00002afe ldrsh r1, [r2, -0x46]                         |         r1 = *((r2 - 0x46));
    0x00002b02 vcvt.f32.s32 s12, s12                         |         __asm ("vcvt.f32.s32 s12, s12");
    0x00002b06 vmul.f32 s11, s11, s13                        |         __asm ("vmul.f32 s11, s11, s13");
    0x00002b0a vmov s14, r1                                  |         __asm ("vmov s14, r1");
    0x00002b0e ldrsh r1, [r2, -0x44]                         |         r1 = *((r2 - 0x44));
    0x00002b12 vstr s3, [ip, 0xc]                            |         __asm ("vstr s3, [ip, 0xc]");
    0x00002b16 vstr s4, [ip, 0x10]                           |         __asm ("vstr s4, [ip, 0x10]");
    0x00002b1a ldr ip, [r0, -0x54]                           |         ip = *((r0 - 0x54));
    0x00002b1e vmov s15, r1                                  |         __asm ("vmov s15, r1");
    0x00002b22 vcvt.f32.s32 s14, s14                         |         __asm ("vcvt.f32.s32 s14, s14");
    0x00002b26 vstr s5, [ip, 0xc]                            |         __asm ("vstr s5, [ip, 0xc]");
    0x00002b2a vstr s6, [ip, 0x10]                           |         __asm ("vstr s6, [ip, 0x10]");
    0x00002b2e ldr ip, [r0, -0x50]                           |         ip = *((r0 - 0x50));
    0x00002b32 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002b36 vmul.f32 s12, s12, s13                        |         __asm ("vmul.f32 s12, s12, s13");
    0x00002b3a vstr s7, [ip, 0xc]                            |         __asm ("vstr s7, [ip, 0xc]");
    0x00002b3e vstr s8, [ip, 0x10]                           |         __asm ("vstr s8, [ip, 0x10]");
    0x00002b42 ldr ip, [r0, -0x4c]                           |         ip = *((r0 - 0x4c));
    0x00002b46 vmul.f32 s14, s14, s13                        |         __asm ("vmul.f32 s14, s14, s13");
    0x00002b4a vmul.f32 s15, s15, s13                        |         __asm ("vmul.f32 s15, s15, s13");
    0x00002b4e vstr s9, [ip, 0xc]                            |         __asm ("vstr s9, [ip, 0xc]");
    0x00002b52 vstr s10, [ip, 0x10]                          |         __asm ("vstr s10, [ip, 0x10]");
    0x00002b56 ldr ip, [r0, -0x48]                           |         ip = *((r0 - 0x48));
    0x00002b5a vstr s11, [ip, 0xc]                           |         __asm ("vstr s11, [ip, 0xc]");
    0x00002b5e vstr s12, [ip, 0x10]                          |         __asm ("vstr s12, [ip, 0x10]");
    0x00002b62 ldr ip, [r0, -0x44]                           |         ip = *((r0 - 0x44));
    0x00002b66 vstr s14, [ip, 0xc]                           |         __asm ("vstr s14, [ip, 0xc]");
    0x00002b6a vstr s15, [ip, 0x10]                          |         __asm ("vstr s15, [ip, 0x10]");
    0x00002b6e ldr ip, [r0, -0x40]                           |         ip = *((r0 - 0x40));
    0x00002b72 ldrsh r1, [r2, -0x42]                         |         r1 = *((r2 - 0x42));
    0x00002b76 vmov s15, r1                                  |         __asm ("vmov s15, r1");
    0x00002b7a ldrsh r1, [r2, -0x40]                         |         r1 = *((r2 - 0x40));
    0x00002b7e vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002b82 vmul.f32 s15, s15, s13                        |         __asm ("vmul.f32 s15, s15, s13");
    0x00002b86 vstr s15, [ip, 0xc]                           |         __asm ("vstr s15, [ip, 0xc]");
    0x00002b8a vmov s15, r1                                  |         __asm ("vmov s15, r1");
    0x00002b8e ldrsh r1, [r2, -0x3e]                         |         r1 = *((r2 - 0x3e));
    0x00002b92 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002b96 vmov s14, r1                                  |         __asm ("vmov s14, r1");
    0x00002b9a vmul.f32 s15, s15, s13                        |         __asm ("vmul.f32 s15, s15, s13");
    0x00002b9e ldrsh r1, [r2, -0x3c]                         |         r1 = *((r2 - 0x3c));
    0x00002ba2 vcvt.f32.s32 s14, s14                         |         __asm ("vcvt.f32.s32 s14, s14");
    0x00002ba6 vstr s15, [ip, 0x10]                          |         __asm ("vstr s15, [ip, 0x10]");
    0x00002baa vmov s15, r1                                  |         __asm ("vmov s15, r1");
    0x00002bae ldr r1, [r7, 0x14]                            |         r1 = var_14h;
    0x00002bb0 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002bb4 vmul.f32 s14, s14, s13                        |         __asm ("vmul.f32 s14, s14, s13");
    0x00002bb8 ldr ip, [r0, -0x3c]                           |         ip = *((r0 - 0x3c));
    0x00002bbc cmp r3, r1                                    |         
    0x00002bbe add.w r3, r3, 8                               |         r3 += 8;
    0x00002bc2 vmul.f32 s15, s15, s13                        |         __asm ("vmul.f32 s15, s15, s13");
    0x00002bc6 vstr s14, [ip, 0xc]                           |         __asm ("vstr s14, [ip, 0xc]");
    0x00002bca vstr s15, [ip, 0x10]                          |         __asm ("vstr s15, [ip, 0x10]");
    0x00002bce bne.w 0x2a5a                                  |         
                                                             |     } while (r3 != r1);
    0x00002bd2 ldrd r3, r1, [r7, 4]                          |     __asm ("ldrd r3, r1, [var_4h_2]");
                                                             | label_26:
    0x00002bd6 ldr r2, [r7, 0xc]                             |     r2 = var_ch;
    0x00002bd8 add.w ip, lr, 2                               |     
    0x00002bdc add.w r0, r2, r3, lsl 2                       |     r0 = r2 + (r3 << 2);
                                                             |     do {
    0x00002be0 ldrsh.w r2, [lr, r3, lsl 2]                   |         offset_1 = r3 << 2;
                                                             |         r2 = *((lr + offset_1));
    0x00002be4 vmov s14, r2                                  |         __asm ("vmov s14, r2");
    0x00002be8 ldrsh.w r2, [ip, r3, lsl 2]                   |         offset_2 = r3 << 2;
                                                             |         r2 = *((ip + offset_2));
    0x00002bec adds r3, 1                                    |         r3++;
    0x00002bee vcvt.f32.s32 s14, s14                         |         __asm ("vcvt.f32.s32 s14, s14");
    0x00002bf2 cmp r1, r3                                    |         
    0x00002bf4 vmov s15, r2                                  |         __asm ("vmov s15, r2");
    0x00002bf8 vmul.f32 s14, s14, s13                        |         __asm ("vmul.f32 s14, s14, s13");
    0x00002bfc vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002c00 ldr r2, [r0], 4                               |         r2 = *(r0);
                                                             |         r0 += 4;
    0x00002c04 vmul.f32 s15, s15, s13                        |         __asm ("vmul.f32 s15, s15, s13");
    0x00002c08 vstr s14, [r2, 0xc]                           |         __asm ("vstr s14, [r2, 0xc]");
    0x00002c0c vstr s15, [r2, 0x10]                          |         __asm ("vstr s15, [r2, 0x10]");
    0x00002c10 bhi 0x2be0                                    |         
                                                             |     } while (r1 > r3);
    0x00002c12 ldr r3, [r7, 0x3c]                            |     r3 = var_3ch;
    0x00002c14 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00002c16 beq.w 0x287c                                  |         goto label_15;
                                                             |     }
                                                             | label_61:
    0x00002c1a mov r0, r6                                    |     r0 = r6;
    0x00002c1c blx 0x1ed4                                    |     fcn_00001ed4 ();
    0x00002c20 str r0, [r7, 0x14]                            |     var_14h = r0;
    0x00002c22 mov r0, r6                                    |     r0 = r6;
    0x00002c24 blx 0x1e90                                    |     fcn_00001e90 ();
    0x00002c28 ldr r1, [r7, 0x14]                            |     r1 = var_14h;
    0x00002c2a cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00002c2c beq.w 0x2f10                                  |         goto label_69;
                                                             |     }
    0x00002c30 and ip, fp, 0x80                              |     
    0x00002c34 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002c36 beq.w 0x2e20                                  |         goto label_70;
                                                             |     }
    0x00002c3a tst.w fp, 0x10000                             |     
                                                             |     if ((fp & 0x10000) == 0) {
    0x00002c3e beq.w 0x2e20                                  |         goto label_70;
                                                             |     }
    0x00002c42 ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002c44 ldr r3, [pc, 0x2c4]                           |     r3 = *(0x2f0c);
    0x00002c46 vldr s12, [r4, 0x3c]                          |     __asm ("vldr s12, [r4, 0x3c]");
    0x00002c4a vldr s14, [r4, 0x40]                          |     __asm ("vldr s14, [r4, 0x40]");
    0x00002c4e ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002c50 and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
    0x00002c54 vldr s15, [r4, 0x44]                          |     __asm ("vldr s15, [r4, 0x44]");
    0x00002c58 vcvt.f32.s32 s9, s12                          |     __asm ("vcvt.f32.s32 s9, s12");
    0x00002c5c vcvt.f32.s32 s10, s14                         |     __asm ("vcvt.f32.s32 s10, s14");
    0x00002c60 add.w lr, r3, r2, lsl 2                       |     lr = r3 + (r2 << 2);
    0x00002c64 vcvt.f32.s32 s11, s15                         |     __asm ("vcvt.f32.s32 s11, s15");
    0x00002c68 vldr s13, [lr]                                |     __asm ("vldr s13, [lr]");
    0x00002c6c vmul.f32 s9, s9, s13                          |     __asm ("vmul.f32 s9, s9, s13");
    0x00002c70 vmul.f32 s10, s10, s13                        |     __asm ("vmul.f32 s10, s10, s13");
    0x00002c74 vmul.f32 s11, s11, s13                        |     __asm ("vmul.f32 s11, s11, s13");
    0x00002c78 cmp.w ip, 0                                   |     
                                                             |     if (ip == 0) {
    0x00002c7c beq.w 0x2f34                                  |         goto label_71;
                                                             |     }
    0x00002c80 vldr s15, [r4, 0x2c]                          |     __asm ("vldr s15, [r4, 0x2c]");
    0x00002c84 movs r3, 6                                    |     r3 = 6;
    0x00002c86 tst.w fp, 0x20000                             |     
    0x00002c8a vcvt.f32.s32 s14, s15                         |     __asm ("vcvt.f32.s32 s14, s15");
    0x00002c8e vldr s15, [r4, 0x30]                          |     __asm ("vldr s15, [r4, 0x30]");
    0x00002c92 str r3, [r5, 0x34]                            |     *((r5 + 0x34)) = r3;
    0x00002c94 mov.w r3, 0xa                                 |     r3 = 0xa;
    0x00002c98 str r3, [r5, 0x54]                            |     *((r5 + 0x54)) = r3;
    0x00002c9a mov.w r3, 3                                   |     r3 = 3;
    0x00002c9e vmul.f32 s14, s14, s13                        |     __asm ("vmul.f32 s14, s14, s13");
    0x00002ca2 vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x00002ca6 vstr s14, [r1, 0xc]                           |     __asm ("vstr s14, [r1, 0xc]");
    0x00002caa vmul.f32 s15, s15, s13                        |     __asm ("vmul.f32 s15, s15, s13");
    0x00002cae vstr s15, [r1, 0x10]                          |     __asm ("vstr s15, [r1, 0x10]");
    0x00002cb2 vstr s9, [r0, 0xc]                            |     __asm ("vstr s9, [r0, 0xc]");
    0x00002cb6 vstr s10, [r0, 0x10]                          |     __asm ("vstr s10, [r0, 0x10]");
    0x00002cba vstr s11, [r0, 0x18]                          |     __asm ("vstr s11, [r0, 0x18]");
    0x00002cbe str r3, [r0, 0x14]                            |     *((r0 + 0x14)) = r3;
                                                             |     if ((fp & 0x20000) == 0) {
    0x00002cc0 beq.w 0x2884                                  |         goto label_16;
                                                             |     }
                                                             | label_62:
    0x00002cc4 mov r0, r6                                    |     r0 = r6;
    0x00002cc6 blx 0x1f28                                    |     fcn_00001f28 ();
    0x00002cca vldr s15, [r4, 0x48]                          |     __asm ("vldr s15, [r4, 0x48]");
    0x00002cce tst.w fp, 0x100000                            |     
    0x00002cd2 ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002cd4 ldr r3, [pc, 0x234]                           |     r3 = *(0x2f0c);
    0x00002cd6 vcvt.f32.s32 s13, s15                         |     __asm ("vcvt.f32.s32 s13, s15");
    0x00002cda vldr s15, [r4, 0x4c]                          |     __asm ("vldr s15, [r4, 0x4c]");
    0x00002cde ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002ce0 and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
    0x00002ce4 vcvt.f32.s32 s14, s15                         |     __asm ("vcvt.f32.s32 s14, s15");
    0x00002ce8 vldr s15, [r4, 0x50]                          |     __asm ("vldr s15, [r4, 0x50]");
    0x00002cec add.w r3, r3, r2, lsl 2                       |     r3 += (r2 << 2);
    0x00002cf0 vldr s12, [r3]                                |     __asm ("vldr s12, [r3]");
    0x00002cf4 mov.w r3, 3                                   |     r3 = 3;
    0x00002cf8 str r3, [r0, 0x14]                            |     *((r0 + 0x14)) = r3;
    0x00002cfa mov.w r3, 7                                   |     r3 = 7;
    0x00002cfe vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x00002d02 vmul.f32 s13, s13, s12                        |     __asm ("vmul.f32 s13, s13, s12");
    0x00002d06 vmul.f32 s14, s14, s12                        |     __asm ("vmul.f32 s14, s14, s12");
    0x00002d0a vmul.f32 s15, s15, s12                        |     __asm ("vmul.f32 s15, s15, s12");
    0x00002d0e vstr s13, [r0, 0xc]                           |     __asm ("vstr s13, [r0, 0xc]");
    0x00002d12 vstr s14, [r0, 0x10]                          |     __asm ("vstr s14, [r0, 0x10]");
    0x00002d16 vstr s15, [r0, 0x18]                          |     __asm ("vstr s15, [r0, 0x18]");
    0x00002d1a str r3, [r5, 0x3c]                            |     *((r5 + 0x3c)) = r3;
                                                             |     if ((fp & 0x100000) == 0) {
    0x00002d1c beq.w 0x288c                                  |         goto label_17;
                                                             |     }
                                                             | label_63:
    0x00002d20 mov r0, r6                                    |     r0 = r6;
    0x00002d22 blx 0x209c                                    |     r0 = fcn_0000209c ();
    0x00002d26 mov r5, r0                                    |     r5 = r0;
    0x00002d28 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002d2a beq.w 0x288c                                  |         goto label_17;
                                                             |     }
    0x00002d2e mov r0, r6                                    |     r0 = r6;
    0x00002d30 blx 0x1f58                                    |     r0 = fcn_00001f58 ();
    0x00002d34 mov lr, r0                                    |     lr = r0;
    0x00002d36 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002d38 beq.w 0x288c                                  |         goto label_17;
                                                             |     }
    0x00002d3c ldr r3, [pc, 0x1cc]                           |     r3 = *(0x2f0c);
    0x00002d3e and sl, sl, 0x1f                              |     sl &= 0x1f;
    0x00002d42 ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002d44 cmp r5, 8                                     |     
    0x00002d46 ldr.w fp, [r4, 0x5c]                          |     fp = *((r4 + 0x5c));
    0x00002d4a ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002d4c add.w r3, r3, sl, lsl 2                       |     r3 += (sl << 2);
    0x00002d50 vldr s14, [r3]                                |     __asm ("vldr s14, [r3]");
                                                             |     if (r5 < 8) {
    0x00002d54 bls.w 0x3020                                  |         goto label_72;
                                                             |     }
    0x00002d58 sub.w r3, r5, 9                               |     r3 = r5 - 9;
    0x00002d5c mov r1, r0                                    |     r1 = r0;
    0x00002d5e bic sl, r3, 7                                 |     sl = BIT_MASK (r3, 7);
    0x00002d62 add.w r2, fp, 0x50                            |     r2 += arg_50h;
    0x00002d66 add.w r3, sl, 8                               |     r3 = sl + 8;
    0x00002d6a movs r0, 0                                    |     r0 = 0;
                                                             |     do {
    0x00002d6c vldr s15, [r2, -0x50]                         |         __asm ("vldr s15, [r2, -0x50]");
    0x00002d70 cmp r0, sl                                    |         
    0x00002d72 pld [r2]                                      |         __asm ("pld [r2]");
    0x00002d76 add.w r1, r1, 0x20                            |         r1 += 0x20;
    0x00002d7a add.w r2, r2, 0x20                            |         r2 += 0x20;
    0x00002d7e add.w r0, r0, 8                               |         r0 += 8;
    0x00002d82 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002d86 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002d8a vstr s15, [r1, -0x20]                         |         __asm ("vstr s15, [r1, -0x20]");
    0x00002d8e vldr s15, [r2, -0x6c]                         |         __asm ("vldr s15, [r2, -0x6c]");
    0x00002d92 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002d96 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002d9a vstr s15, [r1, -0x1c]                         |         __asm ("vstr s15, [r1, -0x1c]");
    0x00002d9e vldr s15, [r2, -0x68]                         |         __asm ("vldr s15, [r2, -0x68]");
    0x00002da2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002da6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002daa vstr s15, [r1, -0x18]                         |         __asm ("vstr s15, [r1, -0x18]");
    0x00002dae vldr s15, [r2, -0x64]                         |         __asm ("vldr s15, [r2, -0x64]");
    0x00002db2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002db6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002dba vstr s15, [r1, -0x14]                         |         __asm ("vstr s15, [r1, -0x14]");
    0x00002dbe vldr s15, [r2, -0x60]                         |         __asm ("vldr s15, [r2, -0x60]");
    0x00002dc2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002dc6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002dca vstr s15, [r1, -0x10]                         |         __asm ("vstr s15, [r1, -0x10]");
    0x00002dce vldr s15, [r2, -0x5c]                         |         __asm ("vldr s15, [r2, -0x5c]");
    0x00002dd2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002dd6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002dda vstr s15, [r1, -0xc]                          |         __asm ("vstr s15, [r1, -0xc]");
    0x00002dde vldr s15, [r2, -0x58]                         |         __asm ("vldr s15, [r2, -0x58]");
    0x00002de2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002de6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002dea vstr s15, [r1, -8]                            |         __asm ("vstr s15, [r1, -8]");
    0x00002dee vldr s15, [r2, -0x54]                         |         __asm ("vldr s15, [r2, -0x54]");
    0x00002df2 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002df6 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002dfa vstr s15, [r1, -4]                            |         __asm ("vstr s15, [r1, -4]");
    0x00002dfe bne 0x2d6c                                    |         
                                                             |     } while (r0 != sl);
                                                             | label_27:
    0x00002e00 lsls r2, r3, 2                                |     r2 = r3 << 2;
    0x00002e02 add.w r1, fp, r2                              |     r1 = fp + r2;
    0x00002e06 add lr, r2                                    |     lr += r2;
                                                             |     do {
    0x00002e08 vldmia r1!, {s15}                             |         __asm ("vldmia r1!, {s15}");
    0x00002e0c adds r3, 1                                    |         r3++;
    0x00002e0e cmp r5, r3                                    |         
    0x00002e10 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002e14 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002e18 vstmia lr!, {s15}                             |         __asm ("vstmia lr!, {s15}");
    0x00002e1c bhi 0x2e08                                    |         
                                                             |     } while (r5 > r3);
    0x00002e1e b 0x288c                                      |     goto label_17;
                                                             | label_70:
    0x00002e20 cmp.w ip, 0                                   |     
                                                             |     if (ip == 0) {
    0x00002e24 beq.w 0x287c                                  |         goto label_15;
                                                             |     }
    0x00002e28 movs r2, 6                                    |     r2 = 6;
    0x00002e2a ldr r3, [pc, 0xe0]                            |     r3 = *(0x2f0e);
    0x00002e2c str r2, [r5, 0x34]                            |     *((r5 + 0x34)) = r2;
    0x00002e2e ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002e30 vldr s15, [r4, 0x2c]                          |     __asm ("vldr s15, [r4, 0x2c]");
    0x00002e34 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002e36 and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
    0x00002e3a vcvt.f32.s32 s14, s15                         |     __asm ("vcvt.f32.s32 s14, s15");
    0x00002e3e vldr s15, [r4, 0x30]                          |     __asm ("vldr s15, [r4, 0x30]");
    0x00002e42 add.w r3, r3, r2, lsl 2                       |     r3 += (r2 << 2);
    0x00002e46 vldr s13, [r3]                                |     __asm ("vldr s13, [r3]");
    0x00002e4a vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x00002e4e vmul.f32 s14, s14, s13                        |     __asm ("vmul.f32 s14, s14, s13");
    0x00002e52 vmul.f32 s15, s15, s13                        |     __asm ("vmul.f32 s15, s15, s13");
    0x00002e56 vstr s14, [r1, 0xc]                           |     __asm ("vstr s14, [r1, 0xc]");
    0x00002e5a vstr s15, [r1, 0x10]                          |     __asm ("vstr s15, [r1, 0x10]");
    0x00002e5e b 0x287c                                      |     goto label_15;
                                                             | label_65:
    0x00002e60 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002e62 beq.w 0x304a                                  |         goto label_73;
                                                             |     }
    0x00002e66 mov r1, r0                                    |     r1 = r0;
    0x00002e68 b 0x2e78                                      |     
                                                             |     while (r3 < r2) {
    0x00002e6a mov r0, sb                                    |         r0 = sb;
    0x00002e6c blx 0x2084                                    |         r0 = fcn_00002084 ();
    0x00002e70 mov r1, r0                                    |         r1 = r0;
    0x00002e72 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00002e74 beq.w 0x304a                                  |             goto label_73;
                                                             |         }
    0x00002e78 ldr.w r3, [sb, 0x18]                          |         r3 = *((sb + 0x18));
    0x00002e7c movs r2, 1                                    |         r2 = 1;
    0x00002e7e lsl.w r3, r2, r3                              |         r3 = r2 << r3;
    0x00002e82 vmov s15, r3                                  |         __asm ("vmov s15, r3");
    0x00002e86 ldrsh.w r3, [r1, 0x18]                        |         r3 = *((r1 + 0x18));
    0x00002e8a vcvt.f32.u32 s15, s15                         |         __asm ("vcvt.f32.u32 s15, s15");
    0x00002e8e vadd.f32 s15, s15, s16                        |         __asm ("vadd.f32 s15, s15, s16");
    0x00002e92 vcvt.s32.f32 s15, s15                         |         __asm ("vcvt.s32.f32 s15, s15");
    0x00002e96 vmov r2, s15                                  |         __asm ("vmov r2, s15");
    0x00002e9a cmp r3, r2                                    |         
    0x00002e9c blt 0x2e6a                                    |         
                                                             |     }
    0x00002e9e mov r4, r1                                    |     r4 = r1;
    0x00002ea0 b 0x28be                                      |     goto label_18;
                                                             | label_67:
    0x00002ea2 movs r1, 0                                    |     r1 = 0;
    0x00002ea4 mov r0, r6                                    |     r0 = r6;
    0x00002ea6 str r3, [r7, 0x14]                            |     var_14h = r3;
    0x00002ea8 blx 0x2024                                    |     r0 = fcn_00002024 ();
    0x00002eac cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002eae beq.w 0x293e                                  |         goto label_19;
                                                             |     }
    0x00002eb2 ldr r1, [r5, 0x14]                            |     r1 = *((r5 + 0x14));
    0x00002eb4 ldr r2, [r4, 0x54]                            |     r2 = *((r4 + 0x54));
    0x00002eb6 ldr r3, [r7, 0x14]                            |     r3 = var_14h;
    0x00002eb8 strd r3, r2, [r0, 0xc]                        |     __asm ("strd r3, r2, [r0, 0xc]");
                                                             |     if (r1 != 0) {
    0x00002ebc cbz r1, 0x2ee8                                |         
    0x00002ebe ldr r2, [r7, 0x44]                            |         r2 = var_44h;
    0x00002ec0 ldr r3, [pc, 0x48]                            |         r3 = *(0x2f0c);
    0x00002ec2 ldr r3, [r2, r3]                              |         r3 = *((r2 + r3));
    0x00002ec4 ldrsh.w r2, [r4, 0x18]                        |         r2 = *((r4 + 0x18));
    0x00002ec8 vmov s15, r2                                  |         __asm ("vmov s15, r2");
    0x00002ecc and r2, sl, 0x1f                              |         r2 = sl & 0x1f;
    0x00002ed0 add.w r3, r3, r2, lsl 2                       |         r3 += (r2 << 2);
    0x00002ed4 vcvt.f32.s32 s15, s15                         |         __asm ("vcvt.f32.s32 s15, s15");
    0x00002ed8 vldr s14, [r3]                                |         __asm ("vldr s14, [r3]");
    0x00002edc movs r3, 2                                    |         r3 = 2;
    0x00002ede str r3, [r0, 0x14]                            |         *((r0 + 0x14)) = r3;
    0x00002ee0 vmul.f32 s15, s15, s14                        |         __asm ("vmul.f32 s15, s15, s14");
    0x00002ee4 vstr s15, [r0, 0x18]                          |         __asm ("vstr s15, [r0, 0x18]");
                                                             |     }
    0x00002ee8 movs r3, 0                                    |     r3 = 0;
    0x00002eea str r3, [r0, 0x1c]                            |     *((r0 + 0x1c)) = r3;
    0x00002eec b 0x293e                                      |     goto label_19;
                                                             | label_69:
    0x00002f10 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00002f12 beq.w 0x287c                                  |         goto label_15;
                                                             |     }
    0x00002f16 tst.w fp, 0x10000                             |     
                                                             |     if ((fp & 0x10000) == 0) {
    0x00002f1a beq.w 0x287c                                  |         goto label_15;
                                                             |     }
    0x00002f1e ldr r2, [r7, 0x44]                            |     r2 = var_44h;
    0x00002f20 ldr r3, [pc, 0x130]                           |     r3 = *(0x3054);
    0x00002f22 vldr s12, [r4, 0x3c]                          |     __asm ("vldr s12, [r4, 0x3c]");
    0x00002f26 vldr s14, [r4, 0x40]                          |     __asm ("vldr s14, [r4, 0x40]");
    0x00002f2a vldr s15, [r4, 0x44]                          |     __asm ("vldr s15, [r4, 0x44]");
    0x00002f2e ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x00002f30 and r2, sl, 0x1f                              |     r2 = sl & 0x1f;
                                                             | label_71:
    0x00002f34 add.w r3, r3, r2, lsl 2                       |     r3 += (r2 << 2);
    0x00002f38 vcvt.f32.s32 s13, s12                         |     __asm ("vcvt.f32.s32 s13, s12");
    0x00002f3c vcvt.f32.s32 s14, s14                         |     __asm ("vcvt.f32.s32 s14, s14");
    0x00002f40 vldr s11, [r3]                                |     __asm ("vldr s11, [r3]");
    0x00002f44 movs r3, 6                                    |     r3 = 6;
    0x00002f46 vcvt.f32.s32 s15, s15                         |     __asm ("vcvt.f32.s32 s15, s15");
    0x00002f4a str r3, [r5, 0x34]                            |     *((r5 + 0x34)) = r3;
    0x00002f4c movs r3, 3                                    |     r3 = 3;
    0x00002f4e str r3, [r1, 0x14]                            |     *((r1 + 0x14)) = r3;
    0x00002f50 vmul.f32 s13, s13, s11                        |     __asm ("vmul.f32 s13, s13, s11");
    0x00002f54 vmul.f32 s14, s14, s11                        |     __asm ("vmul.f32 s14, s14, s11");
    0x00002f58 vmul.f32 s15, s15, s11                        |     __asm ("vmul.f32 s15, s15, s11");
    0x00002f5c vstr s13, [r1, 0xc]                           |     __asm ("vstr s13, [r1, 0xc]");
    0x00002f60 vstr s14, [r1, 0x10]                          |     __asm ("vstr s14, [r1, 0x10]");
    0x00002f64 vstr s15, [r1, 0x18]                          |     __asm ("vstr s15, [r1, 0x18]");
    0x00002f68 b 0x287c                                      |     goto label_15;
                                                             | label_48:
    0x00002f6a ldrd fp, r8, [r7, 0x38]                       |     __asm ("ldrd fp, r8, [var_3ch]");
                                                             | label_47:
    0x00002f6e cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00002f72 beq 0x300a                                    |         
    0x00002f74 mov.w r3, -1                                  |         r3 = -1;
    0x00002f78 movs r6, 0                                    |         r6 = 0;
    0x00002f7a str r3, [r7, 0x4c]                            |         var_48h_2 = r3;
    0x00002f7c b.w 0x25d0                                    |         goto label_12;
                                                             | label_64:
    0x00002f80 ldr.w fp, [r7, 0x28]                          |         fp = var_28h;
    0x00002f84 mov r8, r3                                    |         r8 = r3;
    0x00002f86 str.w fp, [r7, 0x78]                          |         __asm ("str.w fp, [var_74h_2]");
    0x00002f8a b.w 0x24bc                                    |         goto label_20;
                                                             | label_66:
    0x00002f8e ldrd fp, r8, [r7, 0x28]                       |         __asm ("ldrd fp, r8, [var_2ch]");
                                                             | label_59:
    0x00002f92 movs r6, 0                                    |         r6 = 0;
    0x00002f94 mov.w r3, -1                                  |         r3 = -1;
    0x00002f98 strd r6, r3, [r7, 0x48]                       |         __asm ("strd r6, r3, [var_48h]");
    0x00002f9c b.w 0x25d0                                    |         goto label_12;
                                                             | label_29:
    0x00002fa0 mov r0, r8                                    |         r0 = r8;
    0x00002fa2 blx 0x1ec8                                    |         fcn_00001ec8 ();
    0x00002fa6 b.w 0x22f2                                    |         goto label_21;
                                                             | label_53:
    0x00002faa movs r5, 0                                    |         r5 = 0;
    0x00002fac b.w 0x26c8                                    |         goto label_22;
                                                             | label_51:
    0x00002fb0 movs r3, 0                                    |         r3 = 0;
    0x00002fb2 str r3, [r7, 0x44]                            |         var_44h = r3;
    0x00002fb4 b.w 0x263e                                    |         goto label_23;
                                                             | label_50:
    0x00002fb8 mov r0, fp                                    |         r0 = fp;
    0x00002fba blx 0x1ec8                                    |         fcn_00001ec8 ();
    0x00002fbe str.w r8, [r7, 0x4c]                          |         __asm ("str.w r8, [var_48h_2]");
    0x00002fc2 b.w 0x2664                                    |         goto label_24;
                                                             | label_32:
    0x00002fc6 ldr.w r3, [sb, 0x14]                          |         r3 = *((sb + 0x14));
    0x00002fca mov r8, r0                                    |         r8 = r0;
    0x00002fcc str.w sp, [r7, 0x18]                          |         __asm ("str.w sp, [var_18h]");
    0x00002fd0 sub sp, 8                                     |         
    0x00002fd2 str r0, [sp, 8]                               |         var_8h_2 = r0;
    0x00002fd4 str r3, [r7, 0x40]                            |         var_40h = r3;
    0x00002fd6 adds r3, 1                                    |         r3++;
    0x00002fd8 lsls r2, r3, 2                                |         r2 = r3 << 2;
    0x00002fda add r3, sp, 8                                 |         r3 += var_8h_2;
    0x00002fdc str r3, [r7, 0x1c]                            |         var_1ch = r3;
    0x00002fde movs r3, 1                                    |         r3 = 1;
    0x00002fe0 str.w r3, [r7, 0x84]                          |         __asm ("str.w r3, [var_84h]");
    0x00002fe4 adds r3, r2, 7                                |         r3 = r2 + 7;
    0x00002fe6 bic r3, r3, 7                                 |         r3 = BIT_MASK (r3, 7);
    0x00002fea str r2, [r7, 0x10]                            |         var_10h = r2;
    0x00002fec sub.w sp, sp, r3                              |         
    0x00002ff0 strd r0, r0, [r7, 0x74]                       |         __asm ("strd r0, r0, [var_74h]");
    0x00002ff4 add r3, sp, 8                                 |         r3 += var_8h_2;
    0x00002ff6 str r0, [sp, 8]                               |         var_8h_2 = r0;
    0x00002ff8 str r3, [r7, 0x20]                            |         var_20h = r3;
    0x00002ffa ldrd r2, r3, [sb, 0x28]                       |         __asm ("ldrd r2, r3, [sb, 0x28]");
    0x00002ffe strd r2, r3, [r7, 0x88]                       |         __asm ("strd r2, r3, [var_88h]");
    0x00003002 b.w 0x24bc                                    |         goto label_20;
                                                             | label_57:
    0x00003006 mov ip, r0                                    |         
    0x00003008 b 0x280c                                      |         goto label_25;
                                                             |     }
    0x0000300a mov r0, fp                                    |     r0 = fp;
    0x0000300c mov r6, r8                                    |     r6 = r8;
    0x0000300e blx 0x1ec8                                    |     fcn_00001ec8 ();
    0x00003012 mov.w r3, -1                                  |     r3 = -1;
    0x00003016 str r3, [r7, 0x4c]                            |     var_48h_2 = r3;
    0x00003018 b.w 0x2664                                    |     goto label_24;
                                                             | label_68:
    0x0000301c movs r3, 0                                    |     r3 = 0;
    0x0000301e b 0x2bd6                                      |     goto label_26;
                                                             | label_72:
    0x00003020 movs r3, 0                                    |     r3 = 0;
    0x00003022 b 0x2e00                                      |     goto label_27;
                                                             | label_54:
    0x00003024 ldr.w sp, [r7, 0x18]                          |     sp = var_18h;
                                                             | label_55:
    0x00003028 ldr r2, [r7, 0x24]                            |     r2 = var_24h;
    0x0000302a cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0000302c beq.w 0x2360                                  |         goto label_1;
                                                             |     }
    0x0000302e add r1, sp, 0x260                             |     r1 = sp + 0x260;
    0x00003030 movs r3, 0                                    |     r3 = 0;
    0x00003032 mov.w r0, -1                                  |     r0 = -1;
    0x00003036 str r3, [r2]                                  |     *(r2) = r3;
    0x00003038 b.w 0x2364                                    |     goto label_8;
                                                             | label_58:
    0x0000303c mov r0, fp                                    |     r0 = fp;
    0x0000303e blx 0x1ec8                                    |     fcn_00001ec8 ();
    0x00003042 b.w 0x26f0                                    |     goto label_28;
                                                             | label_36:
    0x00003046 blx 0x1f04                                    |     fcn_00001f04 ();
                                                             | label_73:
    0x0000304a movs r3, 0                                    |     r3 = 0;
    0x0000304c ldrd r2, r3, [r3, 8]                          |     __asm ("ldrd r2, r3, [r3, 8]");
    0x00003050 udf 0xff                                      |     __asm ("udf 0xff");
                                                             | }

[*] Function fprintf used 1 times libscene_proto.so