int __fastcall sub_40120C(int a1, int a2, int a3, int a4, int a5) { int v9; // r6 __int64 v11; // r0 int v12; // lr __int64 v13; // r4 int *v14; // r7 int v15; // r6 int v16; // r2 int v17; // r3 int v18; // r6 int *v19; // r0 unsigned int *v20; // r0 unsigned int v21; // r0 int v22; // r0 int v23; // [sp+4h] [bp-268h] BYREF _DWORD v24[128]; // [sp+8h] [bp-264h] BYREF int v25; // [sp+208h] [bp-64h] int v26; // [sp+20Ch] [bp-60h] int v27; // [sp+210h] [bp-5Ch] int v28; // [sp+214h] [bp-58h] int v29; // [sp+218h] [bp-54h] int v30; // [sp+21Ch] [bp-50h] int *v31; // [sp+220h] [bp-4Ch] int v32; // [sp+224h] [bp-48h] int v33; // [sp+230h] [bp-3Ch] BYREF _DWORD v34[3]; // [sp+234h] [bp-38h] BYREF int v35; // [sp+240h] [bp-2Ch] BYREF int v36; // [sp+244h] [bp-28h] BYREF _BYTE v37[32]; // [sp+248h] [bp-24h] BYREF int v38; // [sp+268h] [bp-4h] v38 = dword_401954; sub_401130(a1: v37, a2: 32); v35 = 0; v36 = 0; if ( a1 != 0 ) { v9 = sub_401A54(a1: -1610612720, a2: 256, a3: &v35); if ( v9 == 0 ) { v34[1] = a3; v34[2] = a4; v34[0] = -1073741824; v9 = sub_401B86(a1: v35, a2: v34, a3: 1); if ( v9 == 0 ) { v9 = sub_401A24(a1: &v36, a2: 805307920, a3: 4, a4: 256); if ( v9 == 0 ) { v9 = sub_401BB6(a1: v36, a2: v35); if ( v9 == 0 ) { sub_401B5C(a1: v36, a2: 0, a3: 0); v33 = 32; v9 = sub_401B18(a1: v36, a2: a1, a3: a2, a4: v37, a5: &v33); if ( v9 == 0 ) { sub_401000(a1: a5, a2: v37, a3: 16); v9 = 0; } } } } } if ( v36 != 0 ) sub_401AD6(); if ( v35 != 0 ) sub_401AF6(); } else { v9 = -65525; } if ( dword_401954 == v38 ) return v9; v11 = ((__int64 (__fastcall *)(int))loc_401958)(a1: dword_401954 - v38); v26 = a4; v27 = a1; v28 = v9; v29 = a3; v30 = a2; v31 = &dword_401954; v32 = v12; v13 = v11; v25 = dword_401954; sub_401130(a1: v24, a2: 512); v23 = 0; if ( (_DWORD)v13 != 0 && HIDWORD(v13) != 0 ) { v14 = &dword_406004[6]; v15 = 0; *(_DWORD *)HIDWORD(v13) = 0xFFFF; while ( *(v14 - 5) != 0 ) { ++v15; v14 += 7; if ( v15 == 16 ) goto LABEL_25; } sub_401130(a1: v14 - 5, a2: 24); *(v14 - 5) = 1; *(_DWORD *)HIDWORD(v13) = v15; *(v14 - 6) = *(_DWORD *)v13; if ( sub_401638(a1: v13 + 4, a2: 256, a3: v24, a4: &v23) != 0 ) { sub_401130(a1: v14 - 6, a2: 28); } else { v16 = v24[1]; v17 = v24[2]; v18 = v24[3]; v19 = v14 - 4; *v19 = v24[0]; v19[1] = v16; v19[2] = v17; v19[3] = v18; *v14 = v24[4]; if ( *(_DWORD *)v13 <= 6u ) *((_DWORD *)nullsub_3 + *(_DWORD *)v13 + 113) = 0; } } LABEL_25: if ( dword_401954 == v25 ) __asm { POPEQ.W {R4-R9,PC} } v20 = (unsigned int *)((int (__fastcall *)(int))loc_401958)(a1: dword_401954 - v25); if ( v20 == nullptr ) return 2; v21 = *v20; if ( v21 > 0xF ) return 1; v22 = 28 * v21 + 4218880; if ( *(_DWORD *)(v22 + 8) != 1 ) return 1; sub_401130(a1: v22 + 4, a2: 28); return 0; }