anchor.diff:      FDuplicatesMode: TDuplicatesMode;
       FAutoFreeValue : Boolean;
       FAutoFreeValueMode : TAutoFreeMode;
  -    function AttemptReplaceObject(Key: Pointer; KeySize: Cardinal; Value: Pointer): Boolean;
     protected
       function LeafSize : Cardinal; override;
       procedure InitLeaf(var Leaf); override;
  
positive.code:   kvpNode : PKeyValuePairNode;
    WasNodeBusy : Boolean;
    ChildIndex : Byte;
    procedure CheckForDuplicates;
    begin
      kvpNode := PHashTrieNodeArray(Node^.Children)^[ChildIndex];
      while kvpNode <> nil do
      begin
        if CompareKeys(kvpNode^.KVP.Key, kvpNode^.KVP.KeySize, kvp.Key, kvp.KeySize) then
        begin
          if WasNodeBusy then
            dec(FCount); // Rollback prior addition of FCount
          RaiseDuplicateKeysNotAllowed;
        end;
        kvpNode := kvpNode^.Next;
      end;
    end;
    procedure AllocNewKVPAndAddToList;
    begin
  
negative.code:     ChildIndex := GetChildIndex(PTrieBranchNode(Node), GetBitFieldIndex(Hash, TrieDepth - 1));
      inc(FCount);
    end;
    if WasNodeBusy and (FDuplicatesMode in [dmNotAllow, dmReplaceExisting]) and
       CheckForDuplicatesOrReplaceNode then
    begin
      Result := False;
      exit;
    end;
    AllocNewKVPAndAddToList;
    Result := True;
  end;
  
  function THashTrie.InternalFind(key: Pointer; KeySize: Cardinal; out
  