CmpConcatenateValueLists

INT64 __fastcall CmpConcatenateValueLists(UINT64 a1, UINT64 *a2, UINT64 *a3, UINT64 a4, UINT64 *a5){
  int v5; 
  unsigned int v7; 
  unsigned int v8; 
  UINT64 *v11; 
  int v12; 
  char *v13; 
  int v14; 
  unsigned int v15; 
  const VOID *v16; 
  const VOID *v17; 
  UINT64 *v18; 
  VOID *CellAddress; 
  __int64 v21; 
  _HV_GET_CELL_CONTEXT CellAddressContext; 

  CellAddressContext = 0i64;
  v21 = 0i64;
  v5 = *(_DWORD *)a3;
  v7 = *(_DWORD *)a2;
  CellAddress = 0i64;
  v8 = v7 + v5;
  CellAddressContext.Cell = -1;
  LODWORD(v21) = -1;
  if( v8 < v7 )
  {
    return(unsigned int)-1073741670;
  }
  else if( v8 )
  {
    v12 = HvAllocateCell(a1, 4 * v8, a4, &CellAddress, &CellAddressContext);
    v13 = (char *)CellAddress;
    v14 = v12;
    if( v12 == -1 )
    {
      v8 = -1073741670;
    }
    else
    {
      v15 = 0;
      if( *(_DWORD *)a2 )
      {
        v16 = (const VOID *)(*(__int64(__fastcall **)(UINT64, _QWORD, __int64 *))(a1 + 8))(
                              a1,
                              *((unsigned int *)a2 + 1),
                              &v21);
        memmove(v13, v16, 4 * *(_DWORD *)a2);
        (*(void(__fastcall **)(UINT64, __int64 *))(a1 + 16))(a1, &v21);
        v15 = *(_DWORD *)a2;
      }
      if( *(_DWORD *)a3 )
      {
        v17 = (const VOID *)(*(__int64(__fastcall **)(UINT64, _QWORD, __int64 *))(a1 + 8))(
                              a1,
                              *((unsigned int *)a3 + 1),
                              &v21);
        memmove(&v13[4 * v15], v17, 4 * *(_DWORD *)a3);
        (*(void(__fastcall **)(UINT64, __int64 *))(a1 + 16))(a1, &v21);
      }
      v18 = a5;
      *(_DWORD *)a5 = v8;
      v8 = 0;
      *((_DWORD *)v18 + 1) = v14;
    }
    if( v13 )
      (*(void(__fastcall **)(UINT64, _HV_GET_CELL_CONTEXT *))(a1 + 16))(a1, &CellAddressContext);
  }
  else
  {
    v11 = a5;
    *(_DWORD *)a5 = 0;
    *((_DWORD *)v11 + 1) = -1;
  }
  return v8;
}

Referenced by:

CmpFullPromoteSingleKeyFromKeyNodeStacks