anchor.diff:      function NextNode(ACurNode : PTrieBranchNode; ALevel, AChildIndex : Byte) : Pointer; inline;
       function GetItem(Index: Integer): Pointer;
       function IteratorBacktrack(var AIterator : TTrieIterator) : Boolean;
  -    procedure PackNode(var AIterator : TTrieIterator; const ChildrenBackup : array of Pointer); overload;
       procedure FreeTrieBranchNodeArray(const Arr : PTrieNodeArray; ChildrenCount, Level : Byte);
       procedure FreeTrieLeafNodeArray(const Arr : PTrieLeafNodeArray; ChildrenCount, Level : Byte);
       procedure CleanLowBitsIteratorLastResult(var AIterator : TTrieIterator; ATrieDepth : Byte); inline;
  -    procedure PackNode(var AIterator: TTrieIterator; const ChildrenBackup: array of Byte); overload;
  +    procedure FreeTopNodeChildren(var AIterator: TTrieIterator);
  +    procedure PackNode(var AIterator: TTrieIterator; const ChildrenBackup: array of Byte; AObjectSize: Cardinal); overload;
       function TrieDepthToHashSize(ATrieDepth: Byte): Byte; inline;
     protected
       procedure InitLeaf(var Leaf);
  
positive.code:   if AIterator.NodeStack[AIterator.Level]^.ChildrenCount > 0 then
    begin
      ReallocMem(PTrieBranchNode(AIterator.NodeStack[AIterator.Level])^.Children,
                 AIterator.NodeStack[AIterator.Level]^.ChildrenCount * LeafSize);
      j := 0;
      for BitFieldIndex := 0 to ChildrenPerBucket - 1 do
        if GetBusyIndicator(AIterator.NodeStack[AIterator.Level], BitFieldIndex) then
        begin
          move(ChildrenBackup[BitFieldIndex * LeafSize],
               PTrieLeafNodeArray(PTrieBranchNode(AIterator.NodeStack[AIterator.Level])^.Children)^[j * LeafSize],
               LeafSize);
          SetChildIndex(PTrieBranchNode(AIterator.NodeStack[AIterator.Level]), BitFieldIndex, j);
          inc(j);
        end;
    end
    else
    begin
      FreeMem(PTrieBranchNode(AIterator.NodeStack[AIterator.Level])^.Children);
      PTrieBranchNode(AIterator.NodeStack[AIterator.Level])^.Children := nil;
      inc(AIterator.BreadCrumbs[AIterator.Level]);
    end;
  end;
  
  function TTrie.TrieDepthToHashSize(ATrieDepth: Byte): Byte;
  
negative.code:   Result := True;
  end;
  
  procedure TTrie.FreeTrieBranchNodeArray(const Arr: PTrieNodeArray;
    ChildrenCount, Level: Byte);
  var
  