RtlpHpVsFreeChunkInsert

CHAR __stdcall RtlpHpVsFreeChunkInsert(UINT64 *a1, INT64 a2, _WORD *a3){
  __int64 v4; 
  unsigned int v5; 
  unsigned __int64 v6; 
  unsigned int v8; 
  __int16 v9; 
  unsigned int v10; 
  unsigned __int64 v11; 
  UINT64 v12; 
  BOOL v13; 
  UINT64 v14; 

  v4 = 16 * (WORD1(RtlpHpHeapGlobals) ^ ((unsigned int)a3 >> 16) ^ (unsigned __int16)a3[1]);
  v5 = ((_DWORD)a3 - a2 + 4127) & 0xFFFFF000;
  v6 = v4 + ((unsigned __int16)a3 & 0xFFF) + 4095i64;
  v8 = ((_DWORD)a3 + v4 - a2) & 0xFFFFF000;
  v9 = (v6 >> 12)
     - (((unsigned __int64)(16 * (WORD1(RtlpHpHeapGlobals) ^ ((unsigned int)a3 >> 16) ^ (unsigned __int16)a3[1])) + 4095) >> 12);
  if( v5 >= v8 )
  {
    v10 = 0;
    v11 = 0i64;
  }
  else
  {
    v10 = v8 - v5;
    v11 = *(_QWORD *)(a2 + 16) & (-1i64 << (v5 >> 12)) & (0xFFFFFFFFFFFFFFFFui64 >> (63
                                                                                   - (unsigned __int8)((unsigned __int64)(v8 - 1) >> 12)));
  }
  a1[7] += (unsigned int)((0x101010101010101i64
                         * ((((v11 - ((v11 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                           + (((v11 - ((v11 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
                           + ((((v11 - ((v11 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                             + (((v11 - ((v11 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24;
  *a3 = RtlpHpHeapGlobals ^ (unsigned __int16)a3 ^ (v9
                                                  + (v10 >> 12)
                                                  - ((0x101010101010101i64
                                                    * ((((v11 - ((v11 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                                      + (((v11 - ((v11 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
                                                      + ((((v11 - ((v11 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                                        + (((v11 - ((v11 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56));
  v12 = a1[2];
  if( (a1[3] & 1) != 0 && v12 )
    v12 ^= (unsigned __int64)(a1 + 2);
  v13 = 0;
  if( v12 )
  {
    while( 1 )
    {
      if( ((unsigned int)RtlpHpHeapGlobals ^ (unsigned int)a3 ^ *(_DWORD *)a3) < ((unsigned int)RtlpHpHeapGlobals ^ ((_DWORD)v12 - 8) ^ *(_DWORD *)(v12 - 8)) )
      {
        v14 = *(_QWORD *)v12;
        if( (a1[3] & 1) != 0 )
        {
          if( !v14 )
            goto LABEL_17;
          v14 ^= v12;
        }
        if( !v14 )
        {
LABEL_17:
          v13 = 0;
          return RtlRbInsertNodeEx(a1 + 2, v12, v13, (UINT64)(a3 + 4));
        }
      }
      else
      {
        v14 = *(_QWORD *)(v12 + 8);
        if( (a1[3] & 1) != 0 )
        {
          if( !v14 )
            goto LABEL_18;
          v14 ^= v12;
        }
        if( !v14 )
        {
LABEL_18:
          v13 = 1;
          return RtlRbInsertNodeEx(a1 + 2, v12, v13, (UINT64)(a3 + 4));
        }
      }
      v12 = v14;
    }
  }
  return RtlRbInsertNodeEx(a1 + 2, v12, v13, (UINT64)(a3 + 4));
}

Referenced by:

RtlpHpVsChunkFree
RtlpHpVsChunkSplit
RtlpHpVsContextFree