PopIdleWakeFindOrAllocateWakeSource

_BYTE *__fastcall PopIdleWakeFindOrAllocateWakeSource(INT64 a1, INT64 a2, INT64 a3, UINT8 a4){
  int v4; 
  int v6; 
  _BYTE *v8; 
  int v9; 
  _BYTE *i; 

  v4 = a2;
  v6 = a4;
  if( (unsigned int)a2 <= 4 )
    return(_BYTE *)(696i64 * (int)a2 + a1 + 280);
  v9 = 5;
  for( i = (_BYTE *)(a1 + 4076); ; i += 696 )
  {
    v8 = i - 316;
    if( !*((_DWORD *)i - 1) )
      break;
    if( v4 == *(_DWORD *)v8 && (_BYTE)v6 == (*i & 1) && PopIdleWakeAreIdenticalWakeSources(v4, i - 308, (_QWORD *)a3) )
      return v8;
    if( (unsigned int)++v9 >= 0x19 )
      return(_BYTE *)(a1 + 3064);
  }
  *(_DWORD *)v8 = v4;
  *(_OWORD *)(v8 + 8) = *(_OWORD *)a3;
  *(_OWORD *)(v8 + 24) = *(_OWORD *)(a3 + 16);
  *(_OWORD *)(v8 + 40) = *(_OWORD *)(a3 + 32);
  *(_OWORD *)(v8 + 56) = *(_OWORD *)(a3 + 48);
  *(_OWORD *)(v8 + 72) = *(_OWORD *)(a3 + 64);
  *(_OWORD *)(v8 + 88) = *(_OWORD *)(a3 + 80);
  *(_OWORD *)(v8 + 104) = *(_OWORD *)(a3 + 96);
  *(_OWORD *)(v8 + 120) = *(_OWORD *)(a3 + 112);
  *((_QWORD *)v8 + 17) = *(_QWORD *)(a3 + 128);
  *(_DWORD *)i ^= (*(_DWORD *)i ^ v6) & 1;
  return v8;
}

Referenced by:

PopIdleWakeStopActiveIntervalAccounting