// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/./exprtk.hpp
// Function: bool exprtk::details::string_to_real<char const*, double>(char const*&, char const*, double&, exprtk::details::numeric::details::real_type_tag)
inline bool string_to_real(Iterator& itr_external, const Iterator end, T& t, numeric::details::real_type_tag)
      {
         if (end == itr_external) return false;

         Iterator itr = itr_external;

         T d = T(0);

         const bool negative = ('-' == (*itr));

         if (negative || '+' == (*itr))
         {
            if (end == ++itr)
               return false;
         }

         bool instate = false;

         static const char_t zero = static_cast<uchar_t>('0');

         #define parse_digit_1(d)          \
         if ((digit = (*itr - zero)) < 10) \
            { d = d * T(10) + digit; }     \
         else                              \
            { break; }                     \
         if (end == ++itr) break;          \

         #define parse_digit_2(d)          \
         if ((digit = (*itr - zero)) < 10) \
            { d = d * T(10) + digit; }     \
         else                              \
            { break; }                     \
            ++itr;                         \

         if ('.' != (*itr))
         {
            const Iterator curr = itr;

            while ((end != itr) && (zero == (*itr))) ++itr;

            while (end != itr)
            {
               unsigned int digit;
               parse_digit_1(d)
               parse_digit_1(d)
               parse_digit_2(d)
            }

            if (curr != itr) instate = true;
         }

         int exponent = 0;

         if (end != itr)
         {
            if ('.' == (*itr))
            {
               const Iterator curr = ++itr;
               T tmp_d = T(0);

               while (end != itr)
               {
                  unsigned int digit;
                  parse_digit_1(tmp_d)
                  parse_digit_1(tmp_d)
                  parse_digit_2(tmp_d)
               }

               if (curr != itr)
               {
                  instate = true;

                  const int frac_exponent = static_cast<int>(-std::distance(curr, itr));

                  if (!valid_exponent<T>(frac_exponent, numeric::details::real_type_tag()))
                     return false;

                  d += compute_pow10(tmp_d, frac_exponent);
               }

               #undef parse_digit_1
               #undef parse_digit_2
            }

            if (end != itr)
            {
               typename std::iterator_traits<Iterator>::value_type c = (*itr);

               if (('e' == c) || ('E' == c))
               {
                  int exp = 0;

                  if (!details::string_to_type_converter_impl_ref(++itr, end, exp))
                  {
                     if (end == itr)
                        return false;
                     else
                        c = (*itr);
                  }

                  exponent += exp;
               }

               if (end != itr)
               {
                  if (('f' == c) || ('F' == c) || ('l' == c) || ('L' == c))
                     ++itr;
                  else if ('#' == c)
                  {
                     if (end == ++itr)
                        return false;
                     else if (('I' <= (*itr)) && ((*itr) <= 'n'))
                     {
                        if (('i' == (*itr)) || ('I' == (*itr)))
                        {
                           return parse_inf(itr, end, t, negative);
                        }
                        else if (('n' == (*itr)) || ('N' == (*itr)))
                        {
                           return parse_nan(itr, end, t);
                        }
                        else
                           return false;
                     }
                     else
                        return false;
                  }
                  else if (('I' <= (*itr)) && ((*itr) <= 'n'))
                  {
                     if (('i' == (*itr)) || ('I' == (*itr)))
                     {
                        return parse_inf(itr, end, t, negative);
                     }
                     else if (('n' == (*itr)) || ('N' == (*itr)))
                     {
                        return parse_nan(itr, end, t);
                     }
                     else
                        return false;
                  }
                  else
                     return false;
               }
            }
         }

         if ((end != itr) || (!instate))
            return false;
         else if (!valid_exponent<T>(exponent, numeric::details::real_type_tag()))
            return false;
         else if (exponent)
            d = compute_pow10(d,exponent);

         t = static_cast<T>((negative) ? -d : d);
         return true;
      }

// Assembly:
movq (%rdi), %rax
cmpq %rsi, %rax
je 0x1f4feb
pushq %rbp
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rax, (%rsp)
movzbl (%rax), %ebp
cmpl $0x2d, %ebp
je 0x1f4fd7
cmpl $0x2b, %ebp
jne 0x1f4fee
incq %rax
movq %rax, (%rsp)
cmpq %rsi, %rax
je 0x1f53e5
movb (%rax), %cl
jmp 0x1f4ff0
xorl %eax, %eax
retq
movl %ebp, %ecx
cmpb $0x2e, %cl
jne 0x1f5003
xorl %edx, %edx
xorpd %xmm0, %xmm0
movq %rax, %rdi
jmp 0x1f50ca
movq %rax, %rdi
cmpb $0x30, (%rdi)
jne 0x1f5016
incq %rdi
cmpq %rsi, %rdi
jne 0x1f5006
movq %rsi, %rdi
movq %rdi, (%rsp)
cmpq %rsi, %rdi
je 0x1f50a7
addq $0x2, %rdi
xorpd %xmm0, %xmm0
movsd 0x19401d(%rip), %xmm1   # 0x389050
movq %rdi, %rcx
movsbl -0x2(%rcx), %edx
addl $-0x30, %edx
cmpl $0x9, %edx
ja 0x1f50ad
xorps %xmm2, %xmm2
cvtsi2sd %edx, %xmm2
mulsd %xmm1, %xmm0
addsd %xmm2, %xmm0
leaq -0x1(%rcx), %rdi
cmpq %rsi, %rdi
je 0x1f50a2
movsbl (%rdi), %edx
addl $-0x30, %edx
cmpl $0x9, %edx
ja 0x1f50b4
xorps %xmm2, %xmm2
cvtsi2sd %edx, %xmm2
mulsd %xmm1, %xmm0
addsd %xmm2, %xmm0
cmpq %rsi, %rcx
je 0x1f50a2
movsbl (%rcx), %edx
addl $-0x30, %edx
cmpl $0x9, %edx
ja 0x1f50b1
xorps %xmm2, %xmm2
cvtsi2sd %edx, %xmm2
mulsd %xmm1, %xmm0
addsd %xmm2, %xmm0
leaq 0x3(%rcx), %rdx
incq %rcx
cmpq %rsi, %rcx
movq %rdx, %rcx
jne 0x1f5036
movq %rsi, %rdi
jmp 0x1f50b4
xorpd %xmm0, %xmm0
jmp 0x1f50b4
addq $-0x2, %rcx
movq %rcx, %rdi
movq %rdi, (%rsp)
cmpq %rdi, %rax
setne %dl
cmpq %rsi, %rdi
je 0x1f5289
movq %rdi, %rax
cmpb $0x2e, (%rax)
jne 0x1f5215
leaq 0x1(%rax), %rcx
cmpq %rsi, %rcx
je 0x1f5182
movq %rsi, %rcx
subq %rdi, %rcx
xorpd %xmm1, %xmm1
movl $0x3, %edi
movsd 0x193f59(%rip), %xmm2   # 0x389050
movsbl -0x2(%rax,%rdi), %r8d
addl $-0x30, %r8d
cmpl $0x9, %r8d
ja 0x1f518e
xorps %xmm3, %xmm3
cvtsi2sd %r8d, %xmm3
mulsd %xmm2, %xmm1
addsd %xmm3, %xmm1
leaq (%rax,%rdi), %r8
decq %r8
cmpq %rsi, %r8
je 0x1f5195
movsbl (%r8), %r8d
addl $-0x30, %r8d
cmpl $0x9, %r8d
ja 0x1f51a4
xorps %xmm3, %xmm3
cvtsi2sd %r8d, %xmm3
mulsd %xmm2, %xmm1
addsd %xmm3, %xmm1
leaq (%rax,%rdi), %r8
cmpq %rsi, %r8
je 0x1f5195
movsbl (%r8), %r8d
addl $-0x30, %r8d
cmpl $0x9, %r8d
ja 0x1f51a7
xorps %xmm3, %xmm3
cvtsi2sd %r8d, %xmm3
mulsd %xmm2, %xmm1
addsd %xmm3, %xmm1
leaq (%rax,%rdi), %r8
incq %r8
addq $0x3, %rdi
cmpq %rsi, %r8
jne 0x1f50f7
jmp 0x1f5195
movq %rcx, (%rsp)
movq %rcx, %rax
jmp 0x1f5215
addq $-0x2, %rdi
movq %rdi, %rcx
addq %rcx, %rax
movq %rax, (%rsp)
cmpq $0x1, %rcx
jne 0x1f51b1
jmp 0x1f5215
decq %rdi
addq %rdi, %rax
movq %rax, (%rsp)
movq %rdi, %rcx
leal 0x133(%rcx), %edx
cmpl $0x268, %edx            # imm = 0x268
ja 0x1f53e5
movl $0x1, %edx
subl %ecx, %edx
cmpl $0xfffffecd, %edx       # imm = 0xFFFFFECD
jl 0x1f51ef
movl %edx, %ecx
negl %ecx
cmovsl %edx, %ecx
leaq 0x1d1ed0(%rip), %rdi    # 0x3c70b0
movsd (%rdi,%rcx,8), %xmm2
testl %edx, %edx
jle 0x1f520b
mulsd %xmm2, %xmm1
jmp 0x1f520f
divsd 0x194019(%rip), %xmm1   # 0x389210
addl $0xfffffecc, %ecx       # imm = 0xFFFFFECC
leaq 0x1d1eac(%rip), %rdx    # 0x3c70b0
divsd (%rdx,%rcx,8), %xmm1
jmp 0x1f520f
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movb $0x1, %dl
cmpq %rsi, %rax
je 0x1f5289
movb (%rax), %r8b
movl %r8d, %edi
andb $-0x21, %dil
xorl %ecx, %ecx
cmpb $0x45, %dil
jne 0x1f5290
leaq 0x1(%rax), %rdi
movq %rdi, (%rsp)
xorl %ecx, %ecx
cmpq %rsi, %rdi
je 0x1f534b
movzbl (%rdi), %r9d
cmpl $0x2d, %r9d
je 0x1f524f
cmpl $0x2b, %r9d
jne 0x1f5263
addq $0x2, %rax
movq %rax, (%rsp)
movq %rax, %rdi
cmpq %rsi, %rax
je 0x1f534b
cmpq %rsi, %rdi
je 0x1f529f
cmpb $0x30, (%rdi)
jne 0x1f529b
incq %rdi
cmpq %rsi, %rdi
je 0x1f5298
leaq 0x1(%rdi), %rax
cmpb $0x30, (%rdi)
movq %rax, %rdi
je 0x1f5270
decq %rax
movq %rax, %rdi
jmp 0x1f529b
xorl %ecx, %ecx
jmp 0x1f5382
movq %rax, %rdi
jmp 0x1f5357
movq %rsi, %rdi
movq %rdi, (%rsp)
movq %rsi, %rcx
subq %rdi, %rcx
xorl %eax, %eax
cmpq $0x4, %rcx
ja 0x1f5340
decq %rcx
cmpq $0x3, %rcx
ja 0x1f532e
leaq 0x194237(%rip), %r10    # 0x3894f8
movslq (%r10,%rcx,4), %rcx
addq %r10, %rcx
jmpq *%rcx
leaq 0x1(%rdi), %rcx
movq %rcx, (%rsp)
movsbl (%rdi), %eax
addl $-0x30, %eax
cmpl $0x9, %eax
ja 0x1f533b
movq %rcx, %rdi
movq %rdi, %rcx
incq %rdi
movq %rdi, (%rsp)
movsbl (%rcx), %ecx
addl $-0x30, %ecx
cmpl $0x9, %ecx
ja 0x1f5340
leal (%rax,%rax,4), %eax
leal (%rcx,%rax,2), %eax
movq %rdi, %rcx
incq %rdi
movq %rdi, (%rsp)
movsbl (%rcx), %ecx
addl $-0x30, %ecx
cmpl $0x9, %ecx
ja 0x1f5340
leal (%rax,%rax,4), %eax
leal (%rcx,%rax,2), %eax
movsbl (%rdi), %ecx
addl $-0x30, %ecx
cmpl $0x9, %ecx
ja 0x1f5340
leal (%rax,%rax,4), %eax
leal (%rcx,%rax,2), %eax
incq %rdi
movq %rdi, (%rsp)
movl %eax, %ecx
negl %ecx
cmpb $0x2d, %r9b
cmovnel %eax, %ecx
jmp 0x1f5357
xorl %eax, %eax
movq %rcx, %rdi
movl %eax, %ecx
negl %ecx
cmpb $0x2d, %r9b
cmovnel %eax, %ecx
cmpq %rsi, %rdi
je 0x1f53e5
movb (%rdi), %r8b
cmpq %rsi, %rdi
je 0x1f5382
movzbl %r8b, %eax
leal -0x46(%rax), %r8d
cmpl $0x26, %r8d
ja 0x1f53b7
movabsq $0x4100000041, %r9      # imm = 0x4100000041
btq %r8, %r9
jae 0x1f53b7
incq %rdi
cmpq %rsi, %rdi
jne 0x1f53e5
xorl %eax, %eax
testb %dl, %dl
je 0x1f53e7
leal 0x134(%rcx), %edx
cmpl $0x268, %edx            # imm = 0x268
ja 0x1f53e7
testl %ecx, %ecx
je 0x1f53a1
movl %ecx, %edi
callq 0x1f5418
cmpb $0x2d, %bpl
jne 0x1f53af
xorpd 0x194081(%rip), %xmm0   # 0x389430
movsd %xmm0, (%rbx)
movb $0x1, %al
jmp 0x1f53e7
cmpl $0x23, %eax
jne 0x1f53c8
incq %rdi
movq %rdi, (%rsp)
cmpq %rsi, %rdi
je 0x1f53e5
movzbl (%rdi), %ecx
leal -0x49(%rcx), %eax
cmpb $0x25, %al
ja 0x1f53e5
xorl %eax, %eax
cmpl $0x68, %ecx
jg 0x1f53ee
cmpl $0x49, %ecx
je 0x1f53f8
cmpl $0x4e, %ecx
je 0x1f540e
jmp 0x1f53e7
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
cmpl $0x6e, %ecx
je 0x1f540e
cmpl $0x69, %ecx
jne 0x1f53e7
xorl %ecx, %ecx
cmpb $0x2d, %bpl
sete %cl
movq %rsp, %rdi
movq %rbx, %rdx
callq 0x133ed1
jmp 0x1f5416
movq %rbx, %rdx
callq 0x133f36
jmp 0x1f53e7