CmpKeyEnumStackEntryNotifyPromotion

INT64 __fastcall CmpKeyEnumStackEntryNotifyPromotion(_QWORD *a1){
  int v2; 
  __int64 v3; 
  _DWORD *v4; 
  int v5; 
  __int64 v6; 
  __int64 v7; 
  _QWORD *v8; 
  __int64 v9; 
  INT16 *v10; 
  unsigned int SubKeyByNumber; 
  unsigned int v12; 
  INT64 result; 

  v2 = 0;
  v3 = 0i64;
  v4 = a1 + 4;
  v5 = 2;
  while( *v4 == *(_DWORD *)((char *)v4 + a1[1] - (_QWORD)a1 - 12) )
  {
    ++v2;
    ++v3;
    ++v4;
    if( v3 >= 2 )
      goto LABEL_6;
  }
  v5 = v2;
LABEL_6:
  a1[15] = 0i64;
  v6 = v5;
  *((_DWORD *)a1 + 28) = -1;
  v7 = v5;
  if( a1[v7 + 10] )
  {
    (*(void(__fastcall **)(_QWORD, _QWORD *))(*a1 + 16i64))(*a1, &a1[v7 + 12]);
    a1[v6 + 10] = 0i64;
    *((_DWORD *)a1 + v6 + 18) = -1;
  }
  v8 = &a1[v7];
  if( a1[v6 + 5] )
  {
    (*(void(__fastcall **)(_QWORD, _QWORD *))(*a1 + 16i64))(*a1, v8 + 7);
    a1[v6 + 5] = 0i64;
  }
  v9 = a1[1];
  *((_DWORD *)a1 + v6 + 8) = *(_DWORD *)(v9 + 4 * v6 + 20);
  v10 = (INT16 *)(*(__int64(__fastcall **)(_QWORD, _QWORD, _QWORD *))(*a1 + 8i64))(
                   *a1,
                   *(unsigned int *)(v9 + 4 * v6 + 28),
                   v8 + 7);
  a1[v6 + 5] = v10;
  SubKeyByNumber = CmpDoFindSubKeyByNumber(*a1, v10, *((unsigned int *)a1 + v6 + 6));
  *((_DWORD *)a1 + v6 + 18) = SubKeyByNumber;
  v12 = SubKeyByNumber;
  result = (*(__int64(__fastcall **)(_QWORD, _QWORD, _QWORD *))(*a1 + 8i64))(*a1, SubKeyByNumber, v8 + 12);
  a1[v6 + 10] = result;
  *((_DWORD *)a1 + 28) = v12;
  a1[15] = result;
  return result;
}

Referenced by:

CmpKeyEnumStackNotifyPromotion