// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::lexer::helper::commutative_inserter::insert(exprtk::lexer::token const&, exprtk::lexer::token const&, exprtk::lexer::token&)
inline int insert(const lexer::token& t0, const lexer::token& t1, lexer::token& new_token) exprtk_override
            {
               bool match         = false;
               new_token.type     = lexer::token::e_mul;
               new_token.value    = "*";
               new_token.position = t1.position;

               if (t0.type == lexer::token::e_symbol)
               {
                  if (ignore_set_.end() != ignore_set_.find(t0.value))
                  {
                     return -1;
                  }
                  else if (!t0.value.empty() && ('$' == t0.value[0]))
                  {
                     return -1;
                  }
               }

               if (t1.type == lexer::token::e_symbol)
               {
                  if (ignore_set_.end() != ignore_set_.find(t1.value))
                  {
                     return -1;
                  }
               }
               if      ((t0.type == lexer::token::e_number     ) && (t1.type == lexer::token::e_symbol     )) match = true;
               else if ((t0.type == lexer::token::e_number     ) && (t1.type == lexer::token::e_lbracket   )) match = true;
               else if ((t0.type == lexer::token::e_number     ) && (t1.type == lexer::token::e_lcrlbracket)) match = true;
               else if ((t0.type == lexer::token::e_number     ) && (t1.type == lexer::token::e_lsqrbracket)) match = true;
               else if ((t0.type == lexer::token::e_symbol     ) && (t1.type == lexer::token::e_number     )) match = true;
               else if ((t0.type == lexer::token::e_rbracket   ) && (t1.type == lexer::token::e_number     )) match = true;
               else if ((t0.type == lexer::token::e_rcrlbracket) && (t1.type == lexer::token::e_number     )) match = true;
               else if ((t0.type == lexer::token::e_rsqrbracket) && (t1.type == lexer::token::e_number     )) match = true;
               else if ((t0.type == lexer::token::e_rbracket   ) && (t1.type == lexer::token::e_symbol     )) match = true;
               else if ((t0.type == lexer::token::e_rcrlbracket) && (t1.type == lexer::token::e_symbol     )) match = true;
               else if ((t0.type == lexer::token::e_rsqrbracket) && (t1.type == lexer::token::e_symbol     )) match = true;
               else if ((t0.type == lexer::token::e_symbol     ) && (t1.type == lexer::token::e_symbol     )) match = true;

               return (match) ? 1 : -1;
            }

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq %rsi, 0x40(%rsp)
movq %rdx, 0x38(%rsp)
movq %rcx, 0x30(%rsp)
movq 0x48(%rsp), %rax
movq %rax, (%rsp)
movb $0x0, 0x2f(%rsp)
movq 0x30(%rsp), %rax
movl $0x2a, (%rax)
movq 0x30(%rsp), %rdi
addq $0x8, %rdi
leaq 0x3606f9(%rip), %rsi    # 0x5b4d3a
callq 0x11b340
movq 0x38(%rsp), %rax
movq 0x28(%rax), %rcx
movq 0x30(%rsp), %rax
movq %rcx, 0x28(%rax)
movq 0x40(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x2546f6
movq (%rsp), %rdi
addq $0x10, %rdi
callq 0x256550
movq (%rsp), %rdi
movq %rax, 0x20(%rsp)
addq $0x10, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
callq 0x256580
movq %rax, 0x18(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x2343f0
testb $0x1, %al
jne 0x2546a8
jmp 0x2546b5
movl $0xffffffff, 0x54(%rsp) # imm = 0xFFFFFFFF
jmp 0x2548d6
movq 0x40(%rsp), %rdi
addq $0x8, %rdi
callq 0x11b260
testb $0x1, %al
jne 0x2546f2
movq 0x40(%rsp), %rdi
addq $0x8, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x11b770
movsbl (%rax), %ecx
movl $0x24, %eax
cmpl %ecx, %eax
jne 0x2546f2
movl $0xffffffff, 0x54(%rsp) # imm = 0xFFFFFFFF
jmp 0x2548d6
jmp 0x2546f4
jmp 0x2546f6
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x254751
movq (%rsp), %rdi
addq $0x10, %rdi
callq 0x256550
movq (%rsp), %rdi
movq %rax, 0x10(%rsp)
addq $0x10, %rdi
movq 0x38(%rsp), %rsi
addq $0x8, %rsi
callq 0x256580
movq %rax, 0x8(%rsp)
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2343f0
testb $0x1, %al
jne 0x254742
jmp 0x25474f
movl $0xffffffff, 0x54(%rsp) # imm = 0xFFFFFFFF
jmp 0x2548d6
jmp 0x254751
movq 0x40(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x25476f
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x25476f
movb $0x1, 0x2f(%rsp)
jmp 0x2548be
movq 0x40(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x25478d
movq 0x38(%rsp), %rax
cmpl $0x28, (%rax)
jne 0x25478d
movb $0x1, 0x2f(%rsp)
jmp 0x2548bc
movq 0x40(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x2547ab
movq 0x38(%rsp), %rax
cmpl $0x7b, (%rax)
jne 0x2547ab
movb $0x1, 0x2f(%rsp)
jmp 0x2548ba
movq 0x40(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x2547c9
movq 0x38(%rsp), %rax
cmpl $0x5b, (%rax)
jne 0x2547c9
movb $0x1, 0x2f(%rsp)
jmp 0x2548b8
movq 0x40(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x2547e7
movq 0x38(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x2547e7
movb $0x1, 0x2f(%rsp)
jmp 0x2548b6
movq 0x40(%rsp), %rax
cmpl $0x29, (%rax)
jne 0x254805
movq 0x38(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x254805
movb $0x1, 0x2f(%rsp)
jmp 0x2548b4
movq 0x40(%rsp), %rax
cmpl $0x7d, (%rax)
jne 0x254823
movq 0x38(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x254823
movb $0x1, 0x2f(%rsp)
jmp 0x2548b2
movq 0x40(%rsp), %rax
cmpl $0x5d, (%rax)
jne 0x25483e
movq 0x38(%rsp), %rax
cmpl $0x7, (%rax)
jne 0x25483e
movb $0x1, 0x2f(%rsp)
jmp 0x2548b0
movq 0x40(%rsp), %rax
cmpl $0x29, (%rax)
jne 0x254859
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x254859
movb $0x1, 0x2f(%rsp)
jmp 0x2548ae
movq 0x40(%rsp), %rax
cmpl $0x7d, (%rax)
jne 0x254874
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x254874
movb $0x1, 0x2f(%rsp)
jmp 0x2548ac
movq 0x40(%rsp), %rax
cmpl $0x5d, (%rax)
jne 0x25488f
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x25488f
movb $0x1, 0x2f(%rsp)
jmp 0x2548aa
movq 0x40(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x2548a8
movq 0x38(%rsp), %rax
cmpl $0x8, (%rax)
jne 0x2548a8
movb $0x1, 0x2f(%rsp)
jmp 0x2548aa
jmp 0x2548ac
jmp 0x2548ae
jmp 0x2548b0
jmp 0x2548b2
jmp 0x2548b4
jmp 0x2548b6
jmp 0x2548b8
jmp 0x2548ba
jmp 0x2548bc
jmp 0x2548be
movb 0x2f(%rsp), %dl
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl $0x1, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, 0x54(%rsp)
movl 0x54(%rsp), %eax
addq $0x58, %rsp
retq
nop