PopCopyWakeSource

VOID __fastcall PopCopyWakeSource(INT64 a1, INT64 a2, INT64 a3){
  int v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned int v7; 
  int v8; 
  int v9; 
  UINT8 *v10; 
  UINT64 v11; 
  UINT8 *v12; 
  v3 = PopWakeSourceSize(a3);
  *(_DWORD *)(v4 + 4) = v3;
  v7 = *(_DWORD *)(v6 + 16);
  if( !v7 )
  {
    *(_DWORD *)v4 = 0;
    v12 = (UINT8 *)(v4 + 10);
    *(_WORD *)(v4 + 8) = *(_WORD *)(v5 + 24);
    v11 = *(unsigned __int16 *)(v5 + 24);
    v10 = *(UINT8 **)(v5 + 32);
LABEL_17:
    memmove(v12, v10, v11);
    return;
  }
  if( v7 == 1 )
  {
    *(_DWORD *)v4 = 1;
    if( *(_DWORD *)(v5 + 24) != 1 )
    {
      if( *(_DWORD *)(v5 + 24) != 2 )
        return;
      goto LABEL_14;
    }
LABEL_15:
    *(_DWORD *)(v4 + 8) = 0;
    return;
  }
  if( v7 <= 3 )
  {
    *(_DWORD *)v4 = (v7 != 2) + 2;
    v10 = *(UINT8 **)(v5 + 24);
    if( !v10 )
    {
      *(_QWORD *)(v4 + 8) = 0i64;
      return;
    }
    v11 = *(_QWORD *)v10;
    v12 = (UINT8 *)(v4 + 8);
    goto LABEL_17;
  }
  if( v7 != 4 )
    return;
  *(_DWORD *)v4 = 4;
  v8 = *(_DWORD *)(v5 + 24);
  if( !v8 )
    goto LABEL_15;
  v9 = v8 - 1;
  if( !v9 )
  {
LABEL_14:
    *(_DWORD *)(v4 + 8) = 1;
    return;
  }
  if( v9 == 1 )
    *(_DWORD *)(v4 + 8) = 2;
}

Referenced by:

PopGetWakeSource