anchor.diff:   if assigned(Key) and (Key.CountInstructions>0) then begin
     result:=HashData(@Key.Instructions[0],Key.CountInstructions*sizeof(PFLREInstruction));
     result:=result xor ((longword(Key.CountInstructions) shr 16) or (longword(Key.CountInstructions) shl 16));
  -  result:=result xor HashData(@Key.IndirectInstructions[0],Key.CountIndirectInstructions*sizeof(longint));
  -  result:=result xor ((longword(Key.CountIndirectInstructions) shr 16) or (longword(Key.CountIndirectInstructions) shl 16));
  +  result:=result xor HashData(@Key.WorkQueueItems[0],Key.CountWorkQueueItems*sizeof(longint));
  +  result:=result xor ((longword(Key.CountWorkQueueItems) shr 16) or (longword(Key.CountWorkQueueItems) shl 16));
     result:=result xor ((Key.Flags shl 19) or (Key.Flags shr 13));
     if result=0 then begin
      result:=$ffffffff;
  
positive.code:      PPFLREDFANextStatesByteBlock=^TPFLREDFANextStatesByteBlock;
       TPFLREDFANextStatesByteBlock=array[byte] of PFLREDFAState;
  
       TFLREIndirectInstructions=array of longint;
  
       TFLREDFAState=record
        Flags:longword;
        Instructions:TPFLREInstructions;
        CountInstructions:longint;
        IndirectInstructions:TFLREIndirectInstructions;
        CountIndirectInstructions:longint;
        NextStates:TPFLREDFANextStatesByteBlock;
       end;
  
  
negative.code:  end;
  
   NewState.Flags:=Flags or (NeedFlags shl sfDFANeedShift);
   NewState.WorkQueueItems:=copy(QueueInstructionArray,0,n);
   NewState.CountWorkQueueItems:=n;
  
   result:=CacheState(@NewState);
  
  