a
    ;hX                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZmZmZmZ dd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zd0ddZd1eedddZddddeejeejeejejejeej eej!eej"eej#eej$eej%eej&eej'eej(eej)eej*eeedZ+h dZ,dZ-e.e/e/ddd Z0d Z1d!Z2G d"d# d#Z3G d$d% d%e	Z4G d&d' d'e	Z5G d(d) d)e	Z6G d*d+ d+e j7Z8G d,d- d-Z9G d.d/ d/Z:dS )2    N   )
NO_DEFAULTExtractorErrorfunction_with_repr
js_to_jsonremove_quotestruncate_stringunified_timestampwrite_stringc                    s   dd  fdd}|S )Nc                 S   s`   | d t fv rdS tt* t| r6W d    dS W d    n1 sJ0    Y  tt| S Nr   )JS_Undefined
contextlibsuppress	TypeErrormathisnanintfloat)x r   T/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/yt_dlp/jsinterp.pyzeroise   s    
.z_js_bit_op.<locals>.zeroisec                    s    | |d@ S )Nl    r   abopr   r   r   wrapped   s    z_js_bit_op.<locals>.wrappedr   r   r   r   r   r   
_js_bit_op   s    r   c                    s    fdd}|S )Nc                    s&   t | |fv rtdS  | pd|p"dS Nnanr   r   r   r   r   r   r   r   &   s    z_js_arith_op.<locals>.wrappedr   r   r   r#   r   _js_arith_op$   s    r$   c                 C   s4   t | |fv s| s|stdS |r,| p&d| S tdS )Nr!   r   infr"   r   r   r   r   _js_div.   s    r&   c                 C   s$   t | |fv s|stdS | pd| S r    r"   r   r   r   r   _js_mod4   s    r'   c                 C   s(   |sdS t | |fv rtdS | p"d| S )Nr   r!   r   r"   r   r   r   r   _js_exp:   s
    r(   c                    s    fdd}|S )Nc                    s$   | |hd t hkr | | S  | |S N)r   r   r#   r   r   r   D   s    
z_js_eq_op.<locals>.wrappedr   r   r   r#   r   	_js_eq_opB   s    r*   c                    s    fdd}|S )Nc                    sP   t | |fv rdS t| ts$t|tr> t| p.dt|p8dS  | pFd|pLdS )NFr   )r   
isinstancestrr   r#   r   r   r   N   s
    z_js_comp_op.<locals>.wrappedr   r   r   r#   r   _js_comp_opL   s    r-   TFc                 C   s`   | ddddt fv r|S tt, t| r>|W  d   S W d   n1 sR0    Y  |S )z6Simulate JS's ternary operator (cndn?if_true:if_false)FNr    )r   r   r   r   r   r   )cndnif_trueif_falser   r   r   _js_ternaryX   s    
0r2   
   )valradixc           
         s  |t d fv rd}|tddv s&J dt| r4dS | dkr@dS t| rZ| dk rVdS d	S |dkrbd
 t }| dk }t| } t| \}}t	t
dtjt| d }||kr|d ||krv||9 }t|| \}}|t| |dkp|dkot|d@ }|r|| dkrttdt|D ]6}	||	 d |k r\||	  d7  <  qv|  q0|d7 }qvqtt||\}}|| |dkrt||\}}|| q|r|d t fdd|D dS )Nr3      %   z:radix must be an integer at least 2 and no greater than 36NaNr   0z	-InfinityInfinitys&   0123456789abcdefghijklmnopqrstuvwxyz.-g        g      ?r   c                 3   s   | ]} | V  qd S r)   r   ).0digitZALPHABETr   r   	<genexpr>       z&js_number_to_string.<locals>.<genexpr>ascii)r   ranger   r   isinfcollectionsdequeabsmodfmax	nextafterr%   ulpappendr   reversedlenpopdivmod
appendleftbytesdecode)
r4   r5   resultsignfractionintegerdeltar>   Zneeds_roundingindexr   r?   r   js_number_to_stringc   sN    



 


rZ   )???||&&|^&===!====!=<=>=<>z>>z<<+-*%/z**>   rb   rf   rd   rh   ri   re   rc   rg   z[a-zA-Z_$][\w$]*z()z{}[]z'"/z&[^[\]]+(?:\[[^[\]]+(?:\[[^\]]+\])?\])?c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )JS_Breakc                 C   s   t | d d S )NzInvalid breakr   __init__selfr   r   r   ru      s    zJS_Break.__init__Nrp   rq   rr   ru   r   r   r   r   rs      s   rs   c                   @   s   e Zd Zdd ZdS )JS_Continuec                 C   s   t | d d S )NzInvalid continuert   rv   r   r   r   ru      s    zJS_Continue.__init__Nrx   r   r   r   r   ry      s   ry   c                   @   s   e Zd Zdd ZdS )JS_Throwc                 C   s   || _ t| d|  d S )NzUncaught exception )errorr   ru   )rw   er   r   r   ru      s    zJS_Throw.__init__Nrx   r   r   r   r   rz      s   rz   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LocalNameSpacec                 C   s4   | j D ]}||v r|||<  d S q|| j d |< d S r   maps)rw   keyvalueZscoper   r   r   __setitem__   s
    
zLocalNameSpace.__setitem__c                 C   s   t dd S )NzDeleting is not supported)NotImplementedErrorrw   r   r   r   r   __delitem__   s    zLocalNameSpace.__delitem__c                 C   s   || j d |< d S r   r~   )rw   r   r   r   r   r   	set_local   s    zLocalNameSpace.set_localc                 C   s    || j d v r| j d | S tS r   )r   r   r   r   r   r   	get_local   s    zLocalNameSpace.get_localN)rp   rq   rr   r   r   r   r   r   r   r   r   r}      s   r}   c                   @   s@   e Zd ZddlZdodejv ZeddddZed	d
 Z	dS )Debuggerr   NFZpytestd   levelc                 G   s0   t ddd|    ddd |D  d d S )Nz[debug] JS: z  r    c                 s   s   | ]}t t|d d V  qdS )2   N)r   r,   r=   r   r   r   r   r@      rA   z!Debugger.write.<locals>.<genexpr>
)r
   join)r   argsr   r   r   write   s    zDebugger.writec                    s    fdd}|S )Nc           	   
      s    j r| r j||d z$| |||g|R i |\}}W nP ty } z8 j rzt|trf|j} jd|d||d  W Y d }~n
d }~0 0  j r| r|st||krЈ jddg| t|d||d ||fS )Nr   z
=> Raises:z<-|z->z=>)ENABLEDstripr   	Exceptionr+   r   Zorig_msgrepr)	rw   stmt
local_varsallow_recursionr   kwargsretZ
should_retr|   clsfr   r   interpret_statement   s    $
 z6Debugger.wrap_interpreter.<locals>.interpret_statementr   )r   r   r   r   r   r   wrap_interpreter   s    zDebugger.wrap_interpreter)
rp   rq   rr   sysmodulesr   staticmethodr   classmethodr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZddejejejejddZ	d,ddZ
G d	d
 d
eZdd Zedd Zed-ddZed.ddZdd Zd/ddZdd Zejd0ddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ ZdS )1JSInterpreterr   i   i   i   )dgimsuyNc                 C   s,   |i  | _ | _|d u ri n|| _t | _d S r)   )code
_functions_objectsset_undefined_varnames)rw   r   Zobjectsr   r   r   ru     s    zJSInterpreter.__init__c                       s   e Zd Zd fdd	Z  ZS )zJSInterpreter.ExceptionNc                    s@   |d ur"|   dt|dd }t j|g|R i | d S )Nz in: r   )rstripr   superru   )rw   msgexprr   r   	__class__r   r   ru     s    z JSInterpreter.Exception.__init__)N)rp   rq   rr   ru   __classcell__r   r   r   r   r     s   r   c                 C   sL   |  j d7  _ d| j  }t|r@t|ts@t|d| j  d}|||< |S )Nr   Z__yt_dlp_jsinterp_objF<ri   )$_JSInterpreter__named_object_countercallabler+   r   )rw   	namespaceobjnamer   r   r   _named_object"  s    zJSInterpreter._named_objectc                 C   sR   d}|s||fS t |D ]$\}}|| jvr. q>|| j| O }q|||d d  fS )Nr   r   )	enumerate	_RE_FLAGS)r   r   flagsidxchr   r   r   _regex_flags*  s    
zJSInterpreter._regex_flags,c                 c   s  d}| sd S t t d}dddt|d f\}}}}d\}	}
}}t| D ]z\}}|	sx|tv rx|t|   d7  < nx|	s||v r|| r||  d8  < nR|
s|tv r|	|d fv r|	s|s|dkr|	r|sd n|}	n|	dkr|dv r|dk}|
 o|	o|dk}
|	 o&| o&|d	vo&|d
v }|	s<||v r<|n| oH|}||| ksrt| sr|	sr|rzd}qLn||kr|d7 }qL| |||  V  |d d }}|d7 }|rL||krL qqL| |d  V  d S )Nz+-*/%&|^=<>!,;{}:[r   r   )NFTFrn   ro   [\)TFz-+)	dictfromkeys_MATCHING_PARENSvaluesrN   r   _QUOTESisspaceany)r   delimZ	max_splitZOP_CHARSZcountersstartsplitsposZ	delim_lenZin_quoteZescapingZafter_opZin_regex_char_groupr   charZin_unary_opr   r   r   	_separate5  sJ    "(
zJSInterpreter._separatec                 C   sh   |d u r|ot |d  }t| ||d}t|dk rH| d| ||d dd   |d  fS )Nr   r   r6   zNo terminating paren )r   listr   rN   r   r   )r   r   r   	separatedr   r   r   _separate_at_paren\  s    z JSInterpreter._separate_at_parenc           	   
   C   s   |dv r|dkt |A rZ|S n<|dkr8|d tfvrZ|S n"|dkrZt |g| |ddR  }| |||}t|sv|S zt| ||W S  ty } z.| jd|d| d|||d	W Y d }~n
d }~0 0 d S )
N)r]   r^   r^   r\   r[   :r   zFailed to evaluate r   cause)r2   r   r   interpret_expression
_OPERATORSgetr   )	rw   r   left_val
right_exprr   r   r   Z	right_valr|   r   r   r   	_operatore  s    
zJSInterpreter._operatorFc              
   C   s   |dkrt |S z t|tr(|t| n|| W S  ty } z:|rTtW  Y d }~S | jd| t||dW Y d }~n
d }~0 0 d S )NlengthzCannot get index r   )rN   r+   r   r   r   r   r   )rw   r   r   Zallow_undefinedr|   r   r   r   _indexx  s     zJSInterpreter._indexc                 C   s0   zt |W S  ty*   | || Y S 0 d S r)   )jsondumpsr   r   )rw   r   r   r   r   r   _dump  s    zJSInterpreter._dumpr   c           7         s   dk r d d8  d}t|dp2dg}|   }|D ]&}| \}}|rH||f  S qHtd|}	|	r|t|		dd   |		drt
 |		d	 }|pt|		d	}sd |fS d tv rld d\}
}d d
kr0|\}}|
 d
| }
ntt|
 d  dd}
|s\|
|fS |
| drdd  }|dr|dd  \}}t| d}|d u rֈ d|t|d | n d| dr,dd   }d |fS dr؈\}
}fdd|
D }tdd |D r fddtfdd|D |fS |
 \}
}|r|r|
|p|fS |
| dr.\}
}|
 \}
}|r|r|
|p|fS |
| drt\}
} fdd|
D }|| td }	|	r|	 ni }|d!r>|	 d d  \} \}d }td"}	|	r|	 d d  \}t| }|r"|n| \}}|r>|dfS |d#r|	 d d  \}d }z&| \}}|r|dfW S W n* t y } z|}W Y d }~n
d }~0 0 d$}td%t d&}	|	rN|	 d d  \}|rNi }|		d'r0t |t
r"|j!n|||		d'< "|}d ||  }}td(}	|	r|	 d d  \}| \}}|r|dfS |\}}|r|dfS |r2|np|d)r|	 d d  \}}|dr|\} nXtd*|}!|!rV||! d d  \}"}|d+\} d,|"| f } n
|d } |d\}#}}$|#  t| sq2z&|  \}}|r|dfW S W n, t#y   Y q2Y n t$y   Y n0 |$  qn0|d-r2|	 d d  \}"}|" }"|d+\} | %d.d/&d0dd  }%d1D ]}&d}'|%D ]}(d2d |(d3dD \})}|&r|'p|)d4k}'n"|'s|)d4ko|"|) k}'|'s֐qtz*| \}}|r|W     S W n t#y   Y  q"Y n0 qt|'rh q2qh|rX \}}||pT|fS t}t|dkr|D ].}j| |d5\}}|rx|df  S qx|dfS td6t d7t' d8d9(t)tj*t+t,t-  d:}	|	
r |		d;}*|		d<	sb.|		d=|*|		d> }+|	rB/|		d;|+ n|+|		d;< |		d; |fS |*d t0fv 	r d?|		d; |		d< },t |,tt1f	s d@|, dAt|,},.|		d=2|*|,|		d> |*|,< |*|, |fS t3dBt dCt dDD ]}	|		dE
p2|		dF}-|	4 \}#}.|		dG
pT|		dH}/|- }|-  |/d dIk
rxdndJ7  < |		dG
r|- }d |# | |.d   
q
sd |fS tdKt dLt dMt' dNt dOt dP}	5 rt|fS dQkrt#ndRkr,t$ndSkr>t0|fS dTkrTt1dT|fS |	r|		dUr|		dV}-|r6|-}/|-| n&|-t7}|t7u rt0}j89|- ||fS t:;t<& ttdd|fW  d    S 1 s0    Y  |	rB|		dWrB|		dX }0|		dY },2|0|,|fS t,D ]}1t|1}2|2 }3|1dZv rt|2dkr|2dJ  s|2  n |2r|1d[kr|3d\sq|1 |3 }3|1d]krb|2  |1 |3 }3qb|2sqF|1(|2 }*.|1|*|3 |f  S |	r|		d^r|		d	d_d`\	sZ|		da |	 d  dr\}n
d  }fdbdc 	f	ddde}4|r|4 |  \}}||p|fS |4 |fS n|	r|		dfr|		dg}5 fdhd|		diD }6|5v rX|5 |6 dj|fS |5j=vrt>|5j=|5< j=|5 |6 dj|fS  dk|krt?dldlnd |d S )mNr   zRecursion limit reachedr   F;r.   zJ(?P<var>(?:var|const|let)\s)|return(?:\s+|(?=["\'])|$)|(?P<throw>throw\s+)throwvarrn   T)strictznew    zDate(zFailed to parse date i  zUnsupported object zvoid    {c                    s"   g | ]}t  | d dqS )r   r   )r   r   r   r=   sub_exprrv   r   r   
<listcomp>  rA   z5JSInterpreter.interpret_statement.<locals>.<listcomp>c                 s   s   | ]}t |d kV  qdS )r6   N)rN   r   r   r   r   r@     rA   z4JSInterpreter.interpret_statement.<locals>.<genexpr>c                    s4    | }tt| r"| |fS  |  |fS r)   )r   rematch_NAME_RE)r   r4   r   r   rw   r   r   	dict_item  s    z4JSInterpreter.interpret_statement.<locals>.dict_itemc                 3   s   | ]\}} ||V  qd S r)   r   )r=   kv)r   r   r   r@     rA   (r   c                    s   g | ]} | qS r   r   )r=   itemr   r   r   r     s   z(?x)
                (?P<try>try)\s*\{|
                (?P<if>if)\s*\(|
                (?P<switch>switch)\s*\(|
                (?P<for>for)\s*\(
                ifzelse\s*{try)NFzcatch\s*(?P<err>\(\s*z	\s*\))?\{errzfinally\s*\{forzswitch\s*\(}zswitch(%s){%s}switchzdefault:zcase default:zcase )FTc                 s   s   | ]}|  V  qd S r)   r   )r=   r   r   r   r   r@   =  rA   r   default)_is_var_declarationz(?x)
                (?P<out>z)(?:\[(?P<index>z )\])?\s*
                (?P<op>r_   z3)?
                =(?!=)(?P<expr>.*)$
            outrY   r   r   z Cannot index undefined variable zList index z must be integerz3(?x)
                (?P<pre_sign>\+\+|--)(?P<var1>z)|
                (?P<var2>z)(?P<post_sign>\+\+|--)Zvar1Zvar2Zpre_signZ	post_signrj   r<   za(?x)
            (?P<return>
                (?!if|return|true|false|null|undefined|NaN)(?P<name>z8)$
            )|(?P<attribute>
                (?P<var>z`)(?:
                    (?P<nullish>\?)?\.(?P<member>[^(]+)|
                    \[(?P<member2>zL)\]
                )\s*
            )|(?P<indexing>
                (?P<in>zH)\[(?P<idx>.+)\]$
            )|(?P<function>
                (?P<fname>z )\((?P<args>.*)\)$
            )breakcontinueZ	undefinedr8   returnr   Zindexinginr   z?<>*-r[   .rk   	attributemembernullishZmember2c                    s   | s  d|  dS )z3 assert, but without risk of getting optimized out r   N)r   )r/   r   )r   r  rw   r   r   	assertion  s    z4JSInterpreter.interpret_statement.<locals>.assertionc                     s  fdkr2t jr.t 
d d d S tttd} | ttu r
j	vrz


j	< W n 
jy   	s Y n0 
j	t	rtu rtS d u rʈ
	S 
fdd
D }ttrdrdd	 d\}}}|d
 t|d d  |dkrP|^}nH|dkrt|d	kd |\}t|td n
d| |tu rވdkrʈ|d
 dtt|S 
d nHtu r&dkrt|d	kd |d |d  S 
d dkrl|d
 t|dkd |d rd|d S tS dkrttd t|dkd |d S dkrȈ| d   S dkrtttfd  t|d	kd! tg |d R   S d"kr҈ttd |d
 ttg |td d	 \}}|dk rj|t7 }|d	d  }g }t|t|| tD ]}|| qt|D ]\}	}
 ||	 |
 q|S d#krttd |d
 t!|D ]}
 d|
 qS d$krNttd | d sFd S  S d%krp|d
 "| S d&krʈ|d
 t|d	kd' g |dd d	 \  fd(dtD S d)kr0|d
 t|d	kd' g |dd d	 \}}z#||W S  t$y,   Y d*S 0 nfd+krttd, t|dkd t|d trt|d nd}|tkrd S t%| S ttrtn}| |d-S ).N)consoledebugr   ])StringZMathArrayc                    s   g | ]} | qS r   r   r=   r   r   r   r   r     s   zJJSInterpreter.interpret_statement.<locals>.eval_method.<locals>.<listcomp>z
prototype.r	  r6   ztakes one or more argumentsr   zneeds binding to type callapplyztakes two argumentsz"second argument needs to be a listzUnsupported Function method ZfromCharCoder.   zUnsupported String method powr   zUnsupported Math method splitz&with limit argument is not implementedr   zmust be applied on a listztakes exactly one argumentreversezdoes not take any argumentsslicez#must be applied on a list or stringztakes between 0 and 2 argumentsZspliceZunshiftrO   pushZforEachztakes at-most 2 argumentsc                    s&   g | ]\}}||fd i qS )thisr   )r=   r   r   )r   r   r   r  r   r   r   C  rA   indexOfr<   Z
charCodeAtzmust be applied on a stringr   )&r   r   r   r   r,   r   r   r   r   r   extract_objectr   r   r   r   r+   type
startswith	partitionrN   r   mapchrr  r  r  r   rC   minrL   rO   r   insertrM   extendrY   
ValueErrorord)typesargvals
new_member_Zfunc_prototyperY   Zhow_manyZ	add_itemsresr   r   r   r   )	r   arg_strr  r   r   r  r  rw   variable)r   r   r  r   eval_method  s    











 




"












z6JSInterpreter.interpret_statement.<locals>.eval_methodfunctionfnamec                    s   g | ]} | qS r   r   r  r   r   r   r   a  s   r   r  zUnsupported JS expression    )@r   r   r   rO   r   r   r   r   rN   grouprz   r   boolr   r   r   loadsr   r   r   r   r	   r   r   allr   	groupdictr   endlstripr2   r   r+   r{   	new_childrs   ry   replacer  _NESTED_BRACKETSr   r"  escaper   r   _COMP_OPERATORSr   r   r   r   r   finditerspanisdigitr   r   r   addr   r   r'  r   extract_functionr   )7rw   r   r   r   r  should_returnZsub_statementsZsub_stmtr   r   innerouterr   r   leftrightdateZsub_expressionsshould_abortr   Zmdr/   Zif_exprZ	else_exprZtry_exprr   r|   pendingr   Z
catch_varsconstructor	remainingbodyZswitch_mZ
switch_valr   	incrementitemsr  matchedr   Zcaser   Zeval_resultr   r   r9  rU   r4   r   r   r   r0  r2  r*  r   )
r   r.  r  r   r   r   r  r  rw   r/  r   r     sZ   


 





 "(







6&


 

 z!JSInterpreter.interpret_statementc                 C   s&   |  |||\}}|r"| d||S )Nz Cannot return from an expression)r   r   )rw   r   r   r   r   rE  r   r   r   r   l  s    z"JSInterpreter.interpret_expressionc                 G   s   d}i }t dt ||f | j}|s8| d| |d}t d|tf |}|D ]N}|dd}	t	|d}
t
| j|	|d	g|R  d
|
 d||
< qZ|S )Nz1(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')z(?x)
                (?<![a-zA-Z$0-9.])%s\s*=\s*{\s*
                    (?P<fields>(%s\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*)
                }\s*;
            zCould not find object fieldszg(?x)
                (?P<key>%s)\s*:\s*function\s*\((?P<args>(?:%s|,)*)\){(?P<code>[^}]+)}
            r   r   r   r   r   ri   )r   searchr>  r   r   r4  r@  r   r  r   r   build_function)rw   Zobjnameglobal_stackZ_FUNC_NAME_REr   Zobj_mrS  Zfields_mr   argnamesr   r   r   r   r  r  s0    
"
zJSInterpreter.extract_objectc                 C   sh   t ddt |i | j}|du r6| d| d| |d\}}dd |d	d
D |fS )z @returns argnames, code a  (?xs)
                (?:
                    function\s+%(name)s|
                    [{;,]\s*%(name)s\s*=\s*function|
                    (?:var|const|let)\s+%(name)s\s*=\s*function
                )\s*
                \((?P<args>[^)]*)\)\s*
                (?P<code>{.+})r   NzCould not find JS function ""r   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r     rA   z7JSInterpreter.extract_function_code.<locals>.<listcomp>r   r   )r   rT  r>  r   r   r   r4  r  )rw   funcnameZfunc_mr   r,  r   r   r   extract_function_code  s    
z#JSInterpreter.extract_function_codec                 G   s(   t | jg | ||R  d| dS )Nr   ri   )r   extract_function_from_coderZ  )rw   rY  rV  r   r   r   rD    s    
zJSInterpreter.extract_functionc                 G   s   i }t d|}|d u rq| \}}| ||d d  \}}	| || jdd |ddD ||g|R  }
|d | |
 |	 }q| j|||g|R  S )Nzfunction\((?P<args>[^)]*)\)\s*{r   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r     rA   z<JSInterpreter.extract_function_from_code.<locals>.<listcomp>r   r   )	r   rT  rA  r   r   r[  r4  r  rU  )rw   rW  r   rV  r   Zmobjr   Z
body_startrO  rN  r   r   r   r   r[    s    

z(JSInterpreter.extract_function_from_codec                 G   s   |  ||S r)   )rD  )rw   rY  r   r   r   r   call_function  s    zJSInterpreter.call_functionc                    s2   t pi gt  i df fdd	}|S )Nr   c                    sZ   d  tj | d d d  | t }dd||d \}}|rV|S d S )Nr   )	fillvaluer   r   r   )update	itertoolszip_longestr}   r   r<  )r   r   r   Z	var_stackr   rK  rW  r   rV  rw   r   r   resf  s    z*JSInterpreter.build_function.<locals>.resf)r   tuple)rw   rW  r   rV  rb  r   ra  r   rU    s    zJSInterpreter.build_function)N)r   N)N)F)r   F) rp   rq   rr   r   r   IMSUr   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rZ  rD  r[  r\  rU  r   r   r   r   r     sB   


&

   fr   )TF)r3   );rE   r   r_  r   r   operatorr   utilsr   r   r   r   r   r   r	   r
   r   r$   r&   r'   r(   r*   r-   r2   r   r   rZ   or_xorand_is_is_noteqnelegeltgtrshiftlshiftrC  submulr   r?  r   r   zipr   r   r=  r   rs   ry   rz   ChainMapr}   r   r   r   r   r   r   <module>   sh   (


8 