anchor.diff:  
   const FLREVersion=$00000004;
   
  -      FLREVersionString='1.00.2016.02.05.08.51.0000';
  +      FLREVersionString='1.00.2016.02.05.14.59.0000';
   
         FLREMaxPrefixCharClasses=32;
   
  
positive.code:  end;
   result:=-1;
  end;
  
  function FLREPtrCopy(const Src:PFLRERawByteChar;const From,Len:longint):TFLRERawByteString;
  begin
  
negative.code: {$endif}
  
  function PtrPosBoyerMoore(const Pattern:TFLRERawByteString;const Text:PFLRERawByteChar;const TextLength:longint;const Skip:TFLRECharPatternBitMasks;const Next:TFLREBoyerMooreNext;Position:longint=0):longint;
  {$if defined(cpux86_64) and defined(Windows) and not defined(fpc)}assembler; register;
  asm
   // r15 = Pattern
   // r14 = Text
   // eax = TextLength
   // r13 = Skip
   // r12 = Next
   // edi = Position
   // esi = result
   // ecx = PatternPosition
   // eax = BadSkip
   // edx = GoodSkip
   // ebx = PatternLength
  
   lea rsp,qword ptr [rsp-96]
   mov qword ptr [rbp-64],rbx
   mov qword ptr [rbp-56],rdi
   mov qword ptr [rbp-48],rsi
   mov qword ptr [rbp-40],r12
   mov qword ptr [rbp-32],r13
   mov qword ptr [rbp-24],r14
   mov qword ptr [rbp-16],r15
   mov r15,rcx
   mov r14,rdx
   mov eax,r8d
   mov qword ptr [rbp-8],rax
   mov r13,r9
   mov r12,qword ptr [rbp+48]
   mov edi,dword ptr [rbp+56]
  
   // PatternLength:=length(Pattern);
   mov rax,r15
   test rax,rax
   je @SkipPatternLengthRead
   mov rax,qword ptr [rax-8]
   @SkipPatternLengthRead:
  
   mov ebx,eax
  
   // result:=-1;
   mov esi,-1
  
   // if PatternLength<>0 then begin
   test ebx,ebx
   je @Done
  
   // Position:=PtrPosChar(Pattern[1],Text,TextLength,Position);
   mov r9d,edi
   mov eax,dword ptr [rbp-8]
   mov r8d,eax
   mov rdx,r14
   movzx ecx,byte ptr [r15]
  
   call PtrPosChar
   mov edi,eax
  
   // if Position>=0 then begin
   cmp edi,0
   jnge @Done
  
   // inc(Position,PatternLength-1);
   lea eax,dword ptr [ebx-1]
   add edi,eax
  
   // while Position<TextLength do begin
   jmp @Loop0Start
  
   .align 8
  @Loop0:
  
   // PatternPosition:=0;
   mov ecx,0
  
   // while (PatternPosition<PatternLength) and (Text[Position-PatternPosition]=Pattern[PatternLength-PatternPosition]) do begin
   jmp @Loop1Start
  
   .align 8
  @Loop1:
  
   // inc(PatternPosition);
   add ecx,1
  
  @Loop1Start:
   cmp ecx,ebx
   jnl @Loop1Break
  
   movsxd r9,edi
   movsxd r8,ecx
   sub r9,r8
   mov r10,r9
   movsxd r9,ebx
   sub r9,r8
   mov r8b,byte ptr [r14+r10*1]
   cmp r8b,byte ptr [r15+r9*1-1]
   je @Loop1
  
  @Loop1Break:
  
   // if PatternPosition<>PatternLength then begin
   cmp ecx,ebx
   je @Break
  
   // BadSkip:=Skip[Text[Position-PatternPosition]];
   movsxd r8,edi
   movsxd r9,ecx
   sub r8,r9
   movzx r8d,byte ptr [r14+r8*1]
   mov eax,dword ptr [r13+r8*4]
  
   // GoodSkip:=Next[PatternPosition];
   movsxd r8,ecx
   mov edx,dword ptr [r12+r8*4]
  
   // if BadSkip>GoodSkip then begin
   cmp eax,edx
   jng @GoodSkip
  
   // inc(Position,BadSkip-PatternPosition);
   mov r8d,eax
   sub r8d,ecx
   add edi,r8d
   jmp @NextInLoop0
  
  @GoodSkip:
  
   // inc(Position,GoodSkip);
   add edi,edx
   jmp @NextInLoop0
  
  @Break:
   // result:=(Position-PatternLength)+1;
   mov r8d,edi
   sub r8d,ebx
   lea r8d,dword ptr [r8d+1]
   mov esi,r8d
  
   // exit;
   jmp @Done
  
  @NextInLoop0:
  @Loop0Start:
  
   mov r8d,dword ptr [rbp-8]
   cmp edi,r8d
   jl @Loop0
  
  @Done:
  
   // end;
   mov eax,esi
   mov rbx,qword ptr [rbp-64]
   mov rdi,qword ptr [rbp-56]
   mov rsi,qword ptr [rbp-48]
   mov r12,qword ptr [rbp-40]
   mov r13,qword ptr [rbp-32]
   mov r14,qword ptr [rbp-24]
   mov r15,qword ptr [rbp-16]
  end;
  {$else}
  var PatternPosition,BadSkip,GoodSkip,PatternLength:longint;
  begin
   PatternLength:=length(Pattern);
  