anchor.diff:    end;
     if State<>ucACCEPT then begin
      result:=$fffd;
  +  end;
  + end;
  +end;
  +
  +function UTF8PtrCodeUnitGetCharFallback(const s:pansichar;Len,CodeUnit:longint):longword;
  +var Value,CharClass,State:longword;
  +    StartCodeUnit:longint;
  +begin
  + result:=0;
  + if (CodeUnit>=0) and (CodeUnit<Len) then begin
  +  StartCodeUnit:=CodeUnit;
  +  State:=ucACCEPT;
  +  for CodeUnit:=CodeUnit to Len-1 do begin
  +   Value:=byte(ansichar(s[CodeUnit]));
  +   CharClass:=UTF8DFACharClasses[ansichar(Value)];
  +   if State=ucACCEPT then begin
  +    result:=Value and ($ff shr CharClass);
  +   end else begin
  +    result:=(result shl 6) or (Value and $3f);
  +   end;
  +   State:=UTF8DFATransitions[State+CharClass];
  +   if State<=ucERROR then begin
  +    break;
  +   end;
  +  end;
  +  if State<>ucACCEPT then begin
  +   result:=byte(ansichar(s[StartCodeUnit]));
     end;
    end;
   end;
  
positive.code: begin
   TwoCountOfCaptures:=CountParens*2;
  
   State:=OnePassNFAStart;
   Nodes:=OnePassNFANodes;
   StateSize:=OnePassNFAStateSize;
  
negative.code:      end;
      end else begin
       if LastPosition<Captures[0].Start then begin
        result:=result+PtrCopy(PAnsiChar(Input),LastPosition,Captures[0].Start-LastPosition);
       end;
       CurrentPosition:=Captures[0].Start+Captures[0].Length;
       if CurrentPosition<Next then begin
  