anchor.diff:  
          function LookAssertion(const Position,WhichLookAssertionString:longint;const LookBehind,Negative:boolean):boolean;
   
  +       function BackReferenceAssertion(const CaptureStart,CaptureEnd,BackReferenceStart,BackReferenceEnd:longint;const IgnoreCase:boolean):boolean;
  +
          function ParallelNFAStateAllocate(const Count:longint;const SubMatchesBitmap,UsedCheckBitmapSize:longword):PFLREParallelNFAState; {$ifdef caninline}inline;{$endif}
          function ParallelNFAStateAcquire(const State:PFLREParallelNFAState):PFLREParallelNFAState; {$ifdef caninline}inline;{$endif}
          procedure ParallelNFAStateRelease(const State:PFLREParallelNFAState); {$ifdef caninline}inline;{$endif}
  
positive.code:     exit;
     end;
    end;
    if (CaptureEnd=0) or (BackReferenceEnd=0) then begin
     exit;
    end;
    if IgnoreCase then begin
     if rfUTF8 in Instance.Flags then begin
      result:=true;
      CapturePosition:=CaptureStart;
      BackReferencePosition:=BackReferenceStart;
      while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
       if UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,CapturePosition))<>UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,BackReferencePosition)) then begin
        result:=false;
        exit;
       end;
      end;
     end else begin
      if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
       result:=true;
       CapturePosition:=CaptureStart;
       BackReferencePosition:=BackReferenceStart;
       while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
        if UnicodeToLower(byte(ansichar(Input[CapturePosition])))<>UnicodeToLower(byte(ansichar(Input[BackReferencePosition]))) then begin
         result:=false;
         exit;
        end;
        inc(CapturePosition);
        inc(BackReferencePosition);
       end;
      end;
     end;
    end else begin
     if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
      result:=true;
      CapturePosition:=CaptureStart;
      BackReferencePosition:=BackReferenceStart;
      while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
       if Input[CapturePosition]<>Input[BackReferencePosition] then begin
        result:=false;
        exit;
       end;
       inc(CapturePosition);
       inc(BackReferencePosition);
      end;
     end;
    end;
   end;
  end;
  
  
negative.code:        Instructions[i1].Value:=CapturesToSubMatchesMap[Node^.Group] shl 1;
         Instructions[i1].Next:=pointer(ptrint(CountInstructions));
         Instructions[i1].OtherNext:=pointer(ptrint(i0));
        end;
       end;
       else begin
        raise EFLRE.Create('Internal error');
  