// File: 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:
subq $0x88, %rsp
movq %rdi, 0x78(%rsp)
movq %rsi, 0x70(%rsp)
movq %rdx, 0x68(%rsp)
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
cmpq (%rcx), %rax
jne 0x25a592
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movq 0x78(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x60(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0x58(%rsp)
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2d, %eax
cmpl %ecx, %eax
sete %al
andb $0x1, %al
movb %al, 0x57(%rsp)
testb $0x1, 0x57(%rsp)
jne 0x25a5d8
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2b, %eax
cmpl %ecx, %eax
jne 0x25a5ff
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25a5fd
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
jmp 0x25a5ff
movb $0x0, 0x56(%rsp)
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2e, %eax
cmpl %ecx, %eax
je 0x25a78e
movq 0x60(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x70(%rsp), %rcx
xorl %eax, %eax
cmpq 0x60(%rsp), %rcx
movb %al, 0x1e(%rsp)
je 0x25a64b
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x30, %eax
cmpl %ecx, %eax
sete %al
movb %al, 0x1e(%rsp)
movb 0x1e(%rsp), %al
testb $0x1, %al
jne 0x25a655
jmp 0x25a665
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
jmp 0x25a623
jmp 0x25a667
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25a77b
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x44(%rsp)
cmpl $0xa, %eax
jae 0x25a6b2
movsd 0x58(%rsp), %xmm0
movl 0x44(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x340a66(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
jmp 0x25a6b7
jmp 0x25a77b
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25a6d4
jmp 0x25a77b
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x44(%rsp)
cmpl $0xa, %eax
jae 0x25a70f
movsd 0x58(%rsp), %xmm0
movl 0x44(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x340a09(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
jmp 0x25a711
jmp 0x25a77b
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25a72b
jmp 0x25a77b
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x44(%rsp)
cmpl $0xa, %eax
jae 0x25a766
movsd 0x58(%rsp), %xmm0
movl 0x44(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x3409b2(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
jmp 0x25a768
jmp 0x25a77b
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
jmp 0x25a667
movq 0x48(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25a78c
movb $0x1, 0x56(%rsp)
jmp 0x25a78e
movl $0x0, 0x40(%rsp)
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25ac31
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x2e, %eax
cmpl %ecx, %eax
jne 0x25a960
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
movq %rax, 0x38(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25a8eb
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x2c(%rsp)
cmpl $0xa, %eax
jae 0x25a822
movsd 0x30(%rsp), %xmm0
movl 0x2c(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x3408f6(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rsp)
jmp 0x25a827
jmp 0x25a8eb
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25a844
jmp 0x25a8eb
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x2c(%rsp)
cmpl $0xa, %eax
jae 0x25a87f
movsd 0x30(%rsp), %xmm0
movl 0x2c(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x340899(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rsp)
jmp 0x25a881
jmp 0x25a8eb
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25a89b
jmp 0x25a8eb
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
subl $0x30, %eax
movl %eax, 0x2c(%rsp)
cmpl $0xa, %eax
jae 0x25a8d6
movsd 0x30(%rsp), %xmm0
movl 0x2c(%rsp), %eax
cvtsi2sd %rax, %xmm1
movsd 0x340842(%rip), %xmm2   # 0x59b108
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rsp)
jmp 0x25a8d8
jmp 0x25a8eb
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
jmp 0x25a7d7
movq 0x38(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25a95e
movb $0x1, 0x56(%rsp)
movq 0x38(%rsp), %rdi
movq 0x60(%rsp), %rsi
callq 0x22cb80
movq %rax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movl %eax, 0x28(%rsp)
movl 0x28(%rsp), %eax
movl %eax, 0x18(%rsp)
leaq 0x27(%rsp), %rdi
callq 0x233dd0
movl 0x18(%rsp), %edi
callq 0x25ad00
testb $0x1, %al
jne 0x25a943
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movsd 0x30(%rsp), %xmm0
movl 0x28(%rsp), %edi
callq 0x25ad30
addsd 0x58(%rsp), %xmm0
movsd %xmm0, 0x58(%rsp)
jmp 0x25a960
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25ac2f
movq 0x60(%rsp), %rax
movb (%rax), %al
movb %al, 0x26(%rsp)
movsbl 0x26(%rsp), %ecx
movl $0x65, %eax
cmpl %ecx, %eax
je 0x25a997
movsbl 0x26(%rsp), %ecx
movl $0x45, %eax
cmpl %ecx, %eax
jne 0x25a9f7
movl $0x0, 0x20(%rsp)
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
movq 0x70(%rsp), %rsi
leaq 0x60(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0x25ae40
testb $0x1, %al
jne 0x25a9eb
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
jne 0x25a9de
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movq 0x60(%rsp), %rax
movb (%rax), %al
movb %al, 0x26(%rsp)
jmp 0x25a9eb
movl 0x20(%rsp), %eax
addl 0x40(%rsp), %eax
movl %eax, 0x40(%rsp)
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
je 0x25ac2d
movsbl 0x26(%rsp), %ecx
movl $0x66, %eax
cmpl %ecx, %eax
je 0x25aa3f
movsbl 0x26(%rsp), %ecx
movl $0x46, %eax
cmpl %ecx, %eax
je 0x25aa3f
movsbl 0x26(%rsp), %ecx
movl $0x6c, %eax
cmpl %ecx, %eax
je 0x25aa3f
movsbl 0x26(%rsp), %ecx
movl $0x4c, %eax
cmpl %ecx, %eax
jne 0x25aa52
movq 0x60(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x60(%rsp)
jmp 0x25ac2b
movsbl 0x26(%rsp), %ecx
movl $0x23, %eax
cmpl %ecx, %eax
jne 0x25ab5a
movq 0x70(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $0x1, %rcx
movq %rcx, 0x60(%rsp)
cmpq %rcx, %rax
jne 0x25aa89
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x49, %eax
cmpl %ecx, %eax
jg 0x25ab4d
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x6e, %eax
jg 0x25ab4d
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x69, %eax
cmpl %ecx, %eax
je 0x25aad1
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x49, %eax
cmpl %ecx, %eax
jne 0x25aafc
movq 0x70(%rsp), %rsi
movq 0x68(%rsp), %rdx
movb 0x57(%rsp), %al
leaq 0x60(%rsp), %rdi
andb $0x1, %al
movzbl %al, %ecx
callq 0x134320
andb $0x1, %al
movb %al, 0x87(%rsp)
jmp 0x25ace9
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x6e, %eax
cmpl %ecx, %eax
je 0x25ab1e
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x4e, %eax
cmpl %ecx, %eax
jne 0x25ab40
movq 0x70(%rsp), %rsi
movq 0x68(%rsp), %rdx
leaq 0x60(%rsp), %rdi
callq 0x134450
andb $0x1, %al
movb %al, 0x87(%rsp)
jmp 0x25ace9
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x49, %eax
cmpl %ecx, %eax
jg 0x25ac1e
movq 0x60(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x6e, %eax
jg 0x25ac1e
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x69, %eax
cmpl %ecx, %eax
je 0x25aba2
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x49, %eax
cmpl %ecx, %eax
jne 0x25abcd
movq 0x70(%rsp), %rsi
movq 0x68(%rsp), %rdx
movb 0x57(%rsp), %al
leaq 0x60(%rsp), %rdi
andb $0x1, %al
movzbl %al, %ecx
callq 0x134320
andb $0x1, %al
movb %al, 0x87(%rsp)
jmp 0x25ace9
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x6e, %eax
cmpl %ecx, %eax
je 0x25abef
movq 0x60(%rsp), %rax
movsbl (%rax), %ecx
movl $0x4e, %eax
cmpl %ecx, %eax
jne 0x25ac11
movq 0x70(%rsp), %rsi
movq 0x68(%rsp), %rdx
leaq 0x60(%rsp), %rdi
callq 0x134450
andb $0x1, %al
movb %al, 0x87(%rsp)
jmp 0x25ace9
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
jmp 0x25ac2d
jmp 0x25ac2f
jmp 0x25ac31
movq 0x70(%rsp), %rax
cmpq 0x60(%rsp), %rax
jne 0x25ac44
testb $0x1, 0x56(%rsp)
jne 0x25ac51
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
movl 0x40(%rsp), %eax
movl %eax, 0x14(%rsp)
leaq 0x1f(%rsp), %rdi
callq 0x233dd0
movl 0x14(%rsp), %edi
callq 0x25ad00
testb $0x1, %al
jne 0x25ac7a
movb $0x0, 0x87(%rsp)
jmp 0x25ace9
cmpl $0x0, 0x40(%rsp)
je 0x25ac96
movsd 0x58(%rsp), %xmm0
movl 0x40(%rsp), %edi
callq 0x25ad30
movsd %xmm0, 0x58(%rsp)
jmp 0x25ac98
jmp 0x25ac9a
testb $0x1, 0x57(%rsp)
je 0x25acc6
movsd 0x58(%rsp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0x25acd2
movsd 0x58(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x8(%rsp), %xmm0
movq 0x68(%rsp), %rax
movsd %xmm0, (%rax)
movb $0x1, 0x87(%rsp)
movb 0x87(%rsp), %al
andb $0x1, %al
addq $0x88, %rsp
retq
nopw (%rax,%rax)