anchor.diff:    LastState:=State;
     State:=State^.NextStates[LocalByteMap[byte(ansichar(LocalInput[Position]))]];
     if not assigned(State) then begin
  -   State:=DFAProcessNextState(LastState,LocalInput[Position],true);
  +   State:=DFAFastProcessNextState(LastState,LocalInput[Position],true);
      if not assigned(State) then begin
       result:=DFAError;
       exit;
  
positive.code:   inc(Generation);
    GetMem(DFAUnanchoredStartState,DFAStateSize);
    FillChar(DFAUnanchoredStartState^,DFAStateSize,AnsiChar(#0));
    DFAAddInstructionThread(DFAUnanchoredStartState,Instance.UnanchoredStartInstruction);
    DFAUnanchoredStartState^.Flags:=DFAUnanchoredStartState^.Flags or sfDFAStart;
    DFAStateCache.Add(DFAUnanchoredStartState);
    inc(DFACountStatesCached);
  
negative.code:   case Instruction^.IndexAndOpcode and $ff of
     opSINGLECHAR:begin
      if byte(ansichar(CurrentChar))=Instruction^.Value then begin
       DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
      end;
     end;
     opCHAR:begin
      if CurrentChar in PFLRECharClass(pointer(ptruint(Instruction^.Value)))^ then begin
       DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
      end;
     end;
     opANY:begin
      DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
     end;
     opMATCH:begin
      if not ((rfLONGEST in Instance.Flags) or Reversed) then begin
  