long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeRedistribute

unsigned __int64 __fastcall B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeRedistribute(
        __int64 a1,
        __int64 a2){
  __int64 v2; 
  __int64 v3; 
  __int64 v4; 
  __int64 v5; 
  _DWORD *v6; 
  unsigned int v7; 
  void **v8; 
  void **p_Size; 
  unsigned __int64 v10; 
  _DWORD *v11; 
  unsigned __int64 v12; 
  _DWORD *v13; 
  unsigned int v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int v17; 
  __int64 v18; 
  unsigned int v19; 
  _DWORD *v20; 
  char v21; 
  __int64 v22; 
  unsigned int v23; 
  __int64 v24; 
  unsigned int v25; 
  __int64 v26; 
  __int64 v27; 
  unsigned int v28; 
  char *v29; 
  char *v30; 
  char v31; 
  size_t v32; 
  struct NP_CONTEXT::NP_CTX *v34; 
  int v35; 
  unsigned int v36; 
  __int64 v37; 
  __int64 v38; 
  __int64 v39; 
  __int64 v40; 
  __int64 v41; 
  _DWORD *v42; 
  __int64 Size; 
  _DWORD *v44; 
  VOID *v45; 

  Size = 0i64;
  v42 = 0i64;
  v2 = 1i64;
  v3 = *(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1);
  v4 = 16i64;
  v5 = *(_QWORD *)(v3 - 16);
  v6 = *(_DWORD **)(v3 - 8);
  v7 = *(_BYTE *)(*(_QWORD *)v3 + 3i64) != 0 ? 1020 : 255;
  if( v6 == (_DWORD *)(v5 + 16 * ((unsigned __int16)*(_DWORD *)v5 + 1i64)) )
  {
    v6 -= 4;
    v42 = *(_DWORD **)v3;
    p_Size = (void **)&Size;
    v8 = (void **)(v6 - 2);
    if( (unsigned __int64)v6 <= v5 + 16 )
      v8 = (void **)(v5 + 8);
  }
  else
  {
    Size = *(_QWORD *)v3;
    v8 = (void **)(v6 + 2);
    p_Size = (void **)&v42;
    v2 = 0i64;
  }
  if( **(_DWORD **)((a1 + 16) & -(__int64)(a1 != 0)) == -1 || *(_BYTE *)(v5 + 2) != 2 )
  {
    v10 = (unsigned __int64)*v8;
    *p_Size = *v8;
  }
  else
  {
    v34 = (struct NP_CONTEXT::NP_CTX *)((a1 + 16) & -(__int64)(a1 != 0));
    if( **(_DWORD **)v34 == -1 )
      v10 = (unsigned __int64)*v8;
    else
      v10 = (unsigned __int64)NP_CONTEXT::NpLeafRefInternal(v34, v8, 0);
    *p_Size = (void *)v10;
    if( !v10 )
      return 0i64;
  }
  v11 = v42;
  v12 = v10 | v2;
  v13 = (_DWORD *)Size;
  v14 = (unsigned __int16)*v42;
  v15 = (unsigned __int16)*(_DWORD *)Size;
  v16 = v15 + v14;
  if( v15 + v14 >= v7 && v16 < 2 * v7 - 1 )
  {
    v17 = v16 >> 1;
    if( v15 <= v14 )
    {
      v18 = (__int64)v42;
      v19 = v17 - v15;
      v20 = (_DWORD *)Size;
    }
    else
    {
      v18 = Size;
      v19 = v15 - v17;
      v20 = (_DWORD *)Size;
      v13 = v42;
    }
    v21 = *(_BYTE *)(v18 + 3);
    v44 = v20;
    LOBYTE(v42) = v21;
    v22 = v14 < v15 ? v17 : 0;
    v23 = 0;
    v40 = v22;
    if( v15 <= v14 )
      v23 = v15;
    v24 = v23;
    v41 = v23;
    if( v21 )
    {
      v25 = 4;
      v4 = 4i64;
      v26 = 4i64;
    }
    else
    {
      v25 = 16;
      v26 = 16i64;
    }
    v27 = v26 * v23;
    v28 = v25 * v19;
    v29 = (char *)v13 + v27 + 16;
    v30 = (char *)(v18 + v22 * v4 + 16);
    v45 = v29;
    LODWORD(Size) = v25 * v19;
    if( (_DWORD *)v18 == v20 )
    {
      memmove(&v29[v28], v29, v25 * (unsigned __int16)*v13);
      v31 = *(_BYTE *)(v18 + 3);
      v28 = Size;
      v29 = (char *)v45;
      v20 = v44;
      v22 = v40;
      v24 = v41;
    }
    else
    {
      v31 = (char)v42;
      LODWORD(Size) = v25 * v19;
    }
    if( v31 )
    {
      v32 = v28;
    }
    else
    {
      v35 = *v6;
      v36 = v19 - 1;
      if( (_DWORD *)v18 == v20 )
      {
        v37 = 2i64 * v36;
        v13[4 * v36 + 4] = v35;
        v38 = *((_QWORD *)v13 + 1);
      }
      else
      {
        v37 = 2 * v24;
        v29 += v25;
        v13[2 * v37 + 4] = v35;
        v38 = *(_QWORD *)(v18 + 8);
      }
      *(_QWORD *)&v13[2 * v37 + 6] = v38;
      if( (_DWORD *)v18 == v20 )
      {
        v39 = 2 * v22;
        v30 += v25;
        *v6 = *(_DWORD *)(v18 + 8 * v39 + 16);
        *((_QWORD *)v13 + 1) = *(_QWORD *)(v18 + 8 * v39 + 24);
      }
      else
      {
        v36 = v19 - 1;
        *v6 = *(_DWORD *)(v18 + 16i64 * (v19 - 1) + 16);
        *(_QWORD *)(v18 + 8) = *(_QWORD *)(v18 + 16i64 * (v19 - 1) + 24);
      }
      v32 = v25 * v36;
    }
    memmove(v29, v30, v32);
    *(_WORD *)v13 += v19;
    *(_WORD *)v18 -= v19;
    if( (_DWORD *)v18 == v11 )
      memmove(v30, &v30[(unsigned int)Size], v25 * (unsigned __int16)*(_DWORD *)v18);
    if( *((_BYTE *)v11 + 3) )
      *v6 = v11[4];
  }
  return v12;
}

Referenced by:

No references.