
    "eRj              	       P   d Z ddlm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	 dZ
dZdZdZdZefZ	  eg j$                        ZddlZddlZdD ]  Z ej0                  e         G d	 d
      ZdZdZdZ ej:                         dk(  Zej                  dk(  Z	 ej@                  Z!erd Z!dZ#dZ$dZ%ddl&Z&ddl'm(Z( ej                  dk(  Z)ej                  dv Z*ej                  dk(  Z+ej                  dk(  xs ej                  dk(  Z,ejZ                  dkD  Z. e(j^                         e(j`                  jb                  k(  Z2 ej:                         dk(  Z3e2rFddl4Z5e5jl                  jn                  jq                  d      js                         ju                  d      Z) e;ed       xs e3Z<e<xr e3xs eZ=e<rMe2r;dd l>m?Z? dd!l@mAZA 	  eAj                  d"      ZCd$eC_D        eCj                  eA      ZFd% ZGne=ri ZHd& ZGn eId'      ej                  ZGd(ej                  js                         v ZKd)ZL ej:                         Zedk(  rd$ZLej                  d*k\  ZNej                  d+k\  ZOej                  d,k\  ZPej                  d-k\  ZQej                  d.k\  ZRej                  d/k\  ZSd0 ZT eTej                        ZU	  eTej                  j                        ZW	 ej                  j                  ZYd2ZZd3Z[d4 Z\d5 Z]d6 Z^ e\d7      Z_ e\d8      Z` e\d9      Za e&j                  d:d;      Zce_Zdej                  d<v xs  e&j                  d=      duZe e&j                  d>      Zfef*efjs                         ZfefeZvrefe[vr eId?efd@eZdAe[dB      eLsdCZf e&j                  dDd1      js                         Zg e^dEdF      Zh e^dGd      Zi e^dHdI      Zj e^dJdI      Zk e\dK      ZldLZm e&j                  dM      Znenr3 eodN enj                  dO      D              Zm eqem      dk(  s
J dPen        e&j                  dQd1      js                         Zr e&j                  dRdS      js                         eZv Zs e\dT      Zt e\dU      ZudVZvdWZwdXZxdYZy e^dZdW      Zz e^d[d\      Z{ e^d]d^      Z| e]d_d`      Z} e]dadb      Z~ e\dc      Z e]ddde      Z e]dfdg      Z e&j                  dhdS      js                         eZv ZdiZdjZdkZ e\dl      Zerde_         e&j                  dm      e_        dn Zedr e        ddolmZmZ g ae2rddpZn G dq dre      Zds Z e       Zej$                  Zdt Ze	du        Zdv Zdw Zdx Ze2rdy ZnI ej4                         Zdz Z ej:                  e       d{ Z	  e        d| Z ej:                  e       d~ Zd Zi Zd Zd Zd Zd Z G d d      Z e       Z G d de      Zd ZdZdZdZdZdZdZdZdZdZ G d d      Zd Zd Zd Z G d d      Zd ZeZd Zedk(  r& e       rejz                  j}                  d       yyy#  dZY 
xY w# e"$ r d Z!Y w xY w# e?$ r  eAj                  d#      ZCY w xY w# e"$ r d1ZWY w xY w# e"$ r d1ZYY w xY w# e$ r d} ZY w xY w)zQ
This module holds the constants used for specifying the states of the debugger.
    )nested_scopesN)contextmanager         )asciiutf8zutf-8latin1zlatin-1idnac                       e Zd ZdZdZy)DebugInfoHolderr   N)__name__
__module____qualname__DEBUG_TRACE_LEVELPYDEVD_DEBUG_FILE     A/usr/lib/python3/dist-packages/_pydevd_bundle/pydevd_constants.pyr   r   #   s    
 r   r   )z<frozen z<builtinz<attrsz<__array_function__)z<ipython)<CPythonclic                  J    	 t        j                         S # t        $ r Y y w xY wN)sys	_getframe
ValueErrorr   r   r   	get_framer   F   s%    }}& s    	""c                      t        d      )NzNsys._getframe not available (possible causes: enable -X:Frames on IronPython?))AssertionErrorr   r   r   r   r   N   s    mnnr   i  __pydevd_ret_val_dictzlen())pydevd_vm_typewin32)linuxlinux2darwin
emscriptenwasil        PyPyzos.namewindows_current_frames)NoSuchFieldException)ThreadStateMappingglobalThreadStatescachedThreadStateTc                      t         j                         j                         } i }| D ]K  }|j                         }||j	                         }|)|j
                  }|8|| |j                         <   M |S r   )thread_statesentrySettoArraygetKeygetValueframegetId)as_arrayretthread_to_statethreadthread_stater6   s         r   r+   r+   }   s    $--/779HC#+ ,(//1>.779'$**=&+LFLLN#, Jr   c                      t         S r   )constructed_tid_to_last_framer   r   r   r+   r+      s    00r   zTUnable to proceed (sys._current_frames not available in this Python implementation).	stacklessF)r      )r      )r      )r   	   )r   
   )r      c                 p    dj                  d | d d D              dj                  d | dd  D              z   S )N.c              3   2   K   | ]  }t        |        y wr   str.0xs     r   	<genexpr>zversion_str.<locals>.<genexpr>   s     +SV+   r    c              3   2   K   | ]  }t        |        y wr   rI   rK   s     r   rN   zversion_str.<locals>.<genexpr>   s     7N1A7NrO   )join)vs    r   version_strrT      s7    88+QrU+,rww7N!"7N/OOOr   rP   )yestrue1)nofalse0c                     t        | t              r| D ]  }t        |      s y yt        j                  | d      j                         t        v S )NTFrP   )
isinstancetupleis_true_in_envosgetenvlowerENV_TRUE_LOWER_VALUES)env_keyrS   s     r   r^   r^      sK    '5! 	Aa 	 yy"%++-1FFFr   c                     t        j                  |       }||S 	 t        |      S # t        $ r t	        d| d|      w xY w)N"Error: expected the env variable: z$ to be set to a float value. Found: )r_   r`   float	ExceptionRuntimeErrorrc   defaultvalues      r   as_float_in_envrl      sO    IIgE}!U| ! ! 	!!	   
& Ac                     t        j                  |       }||S 	 t        |      S # t        $ r t	        d| d|      w xY w)Nre   z" to be set to a int value. Found: )r_   r`   intrg   rh   ri   s      r   as_int_in_envrp      sO    IIgE}!5z ! ! 	!!rm   GEVENT_SUPPORTGEVENT_SHOW_PAUSED_GREENLETSPYDEVD_DISABLE_FILE_VALIDATIONGEVENT_SUPPORT_NOT_SET_MSGzIt seems that the gevent monkey-patching is being used.
Please set an environment variable with:
GEVENT_SUPPORT=True
to enable gevent support in the debugger.)r&   r#   DISPLAYPYDEVD_USE_CYTHONz(Unexpected value for PYDEVD_USE_CYTHON: z (enable with one of: z, disable with one of: )rX   PYDEVD_USE_FRAME_EVAL'PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMSd   PYDEVD_CONTAINER_BUCKET_SIZE(PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMSi   PYDEVD_CONTAINER_NUMPY_MAX_ITEMS#PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING)zinteractiveshell.pyrun_coderun_ast_nodesPYDEVD_IPYTHON_CONTEXTc              #   <   K   | ]  }|j                           y wr   )striprK   s     r   rN   rN   (  s     "N1779"Ns   ,z Invalid PYDEVD_IPYTHON_CONTEXT: PYDEVD_LOAD_NATIVE_LIBPYDEVD_LOG_TIMErV   'PYDEVD_SHOW_COMPILE_CYTHON_COMMAND_LINEPYDEVD_LOAD_VALUES_ASYNC__pydevd_value_async<   __pydev_val__builtinsPYDEVD_PANDAS_MAX_ROWSPYDEVD_PANDAS_MAX_COLSrD   PYDEVD_PANDAS_MAX_COLWIDTH2    PYDEVD_WARN_SLOW_RESOLVE_TIMEOUTg      ?PYDEVD_WARN_EVALUATION_TIMEOUTg      @-PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUTPYDEVD_UNBLOCK_THREADS_TIMEOUTg      PYDEVD_INTERRUPT_THREAD_TIMEOUT,PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS	UNHANDLEDUSER_UNHANDLEDHANDLED)PYCHARM_DEBUGPYDEV_DEBUGPYDEVD_DEBUGr   c                  >   g d} | D ]  }	 t        |        t        t        j                  j	                         D cg c]  \  }}|| v r||f c}}      }|D ]  }t        j                  |=  ddl}|D ]  }||   t        j                  |<    y#  Y xY wc c}}w )a>  
    In this function we delete some modules from `sys.modules` dictionary and import them again inside
      `_pydev_saved_modules` in order to save their original copies there. After that we can use these
      saved modules within the debugger to protect them from patching by external libraries (e.g. gevent).
    )	threadingr;   _threadtimesocketqueueselect	xmlrpclibSimpleXMLRPCServerBaseHTTPServerSocketServerzxmlrpc.clientzxmlrpc.serverzhttp.serversocketserverr   N)
__import__dictr   modulesitems"_pydev_bundle._pydev_saved_modules)patchednamekrS   patched_modules_pydev_bundles         r   protect_libraries_from_patchingr   j  s    PG  	t s{{/@/@/B -tq! G| F - .O   KK . 2+D1D2	-s   BB
B)r;   r   c                 V    | rt        j                         S t        j                         S r   )r   RLockLock)rlocks    r   ForkSafeLockr     s    ??$$>>##r   c                   *    e Zd ZdZddZd Zd Zd Zy)r   a  
        A lock which is fork-safe (when a fork is done, `pydevd_constants.after_fork()`
        should be called to reset the locks in the new process to avoid deadlocks
        from a lock which was locked during the fork).

        Note:
            Unlike `threading.Lock` this class is not completely atomic, so, doing:

            lock = ForkSafeLock()
            with lock:
                ...

            is different than using `threading.Lock` directly because the tracing may
            find an additional function call on `__enter__` and on `__exit__`, so, it's
            not recommended to use this in all places, only where the forking may be important
            (so, for instance, the locks on PyDB should not be changed to this lock because
            of that -- and those should all be collected in the new process because PyDB itself
            should be completely cleared anyways).

            It's possible to overcome this limitation by using `ForkSafeLock.acquire` and
            `ForkSafeLock.release` instead of the context manager (as acquire/release are
            bound to the original implementation, whereas __enter__/__exit__ is not due to Python
            limitations).
        c                     || _         | j                          t        j                  t	        j
                  |              y r   )_rlock_init_fork_safe_locksappendweakrefref)selfr   s     r   __init__zForkSafeLock.__init__  s)    DKJJL##GKK$56r   c                 6    | j                   j                         S r   )_lock	__enter__r   s    r   r   zForkSafeLock.__enter__  s    ::''))r   c                 <    | j                   j                  |||      S r   )r   __exit__)r   exc_typeexc_valexc_tbs       r   r   zForkSafeLock.__exit__  s    ::&&x&AAr   c                 >   | j                   rt        j                         | _        nt	        j
                         | _        | j                  j                  | _        | j                  j                  | _        t        j                  t        j                  |              y r   )r   r   r   r   r;   allocate_lockacquirereleaser   r   r   r   r   s    r   r   zForkSafeLock._init  s`    {{&__.
#113
::--DL::--DL##GKK$56r   NF)r   r   r   __doc__r   r   r   r   r   r   r   r   r     s    	2	7
	*	B	7r   r   c                  \    t         dd } g a | D ]  } |       }||j                           y)zN
    Must be called after a fork operation (will reset the ForkSafeLock).
    N)r   r   )lockslocks     r   
after_forkr     s9    
 QE vJJLr   c                 *    t        | t              sJ | S r   )r\   rJ   )ss    r   as_strr     s    aHr   c               #      K   t        j                         5  t        j                  d       d  d d d        y # 1 sw Y   y xY ww)Nignore)warningscatch_warningsfilterwarningsr   r   r   filter_all_warningsr     s7     		 	 	" )  s   A:	AAAc                 B     t        j                          fd       }|S )Nc                  T    t               5   | i |cd d d        S # 1 sw Y   y xY wr   )r   )argskwargsfuncs     r   new_funcz,silence_warnings_decorator.<locals>.new_func  s+     " 	)((	) 	) 	)s   ')	functoolswrapsr   r   s   ` r   silence_warnings_decoratorr     s%    __T) ) Or   c                 v    t        | j                         d       }ddj                  d |D              z   dz   S )Nc                     t        | d         S Nr   rI   )rM   s    r   <lambda>z"sorted_dict_repr.<locals>.<lambda>  s    s1Q4y r   )key{z, c              3   &   K   | ]	  }d |z    yw)z%r: %rNr   rK   s     r   rN   z#sorted_dict_repr.<locals>.<genexpr>  s     5aHqL5s   })sortedr   rR   )dr   s     r   sorted_dict_reprr     s4    qwwy01A51555;;r   c           	          t        | t              r4t        t        j                  t        t        |             dz   |             S t        |       S )Nc)r\   bytesiterstructunpackrJ   len)bs    r   
iter_charsr     s:     !UFMM#c!f+"3Q7887Nr   c                      y r   r   r6   eventargs      r   	NO_FTRACEr        r   c                      y r   r   r   s      r   _temp_tracer    r  r   c                  >    dt        j                         _        d} d} y)zA
        Will throw an error when executing a line event
        Nr   r   )r   r   f_trace)_line_events    r   _check_ftrace_set_noner	    s     #'r   c                     d | _         y r   )r  r   s      r   r  r    s     EMr   c                      y r   r   r   s      r   r  r    s     r   c                      	 t        j                         S # t        $ r^ 	 dd l} | j                  j
                  j                  j                         j                         }|j                  dd      cY S #  Y Y yxY ww xY w)Nr   @_000001)
r_   getpidAttributeError&java.lang.management.ManagementFactorylang
managementManagementFactorygetRuntimeMXBeangetNamereplace)javapids     r   get_pidr  .  sl    
yy{ 	9))&&88IIKSSUC;;sC((	s'    	A=AA41A=4A96A=9A=c                 |    t         5  	 | j                  dk7  r| `d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nconsole_main)_thread_id_lock__pydevd_id__r  )r;   s    r   clear_cached_thread_idr   <  sN    	 	##~5 (   		 s   2#	/2/2;c                     t         5  t        | dd       }||cd d d        S | t        t        |       <   t	               }d|dt        |       }|| _        d d d        |S # 1 sw Y   S xY w)Nr  pid__id_)r  getattr_thread_id_to_thread_foundidr  r  )r;   is_current_threadtidr  s       r   #_get_or_compute_thread_id_with_lockr)  K  ss    	 #fot4?	# # 28"2f:. i #RZ0"# J# Js   A 4A  A*c                 t    	 | j                   }|
t               	 |S # t        $ r t        | d      }Y |S w xY w)z
    Note: the difference from get_current_thread_id to get_thread_id is that
    for the current thread we can get the thread id while the thread.ident
    is still not set in the Thread instance.
    Tr'  r  r  r)  r;   r(  s     r   get_current_thread_idr.  ^  sS    	R""; !""	  J  R1&DQJR    77c                 t    	 | j                   }|
t               	 |S # t        $ r t        | d      }Y |S w xY w)NFr+  r,  r-  s     r   get_thread_idr1  r  sS    	S""; !""	  J  S1&ERJSr/  c                 H    t         5  || _        d d d        y # 1 sw Y   y xY wr   )r  r  )r;   	thread_ids     r   set_thread_idr4    s"    	 )() ) )s   !c                   j    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)NullzT
    Gotten from: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/68205
    c                      y r   r   r   r   r   s      r   r   zNull.__init__  r  r   c                     | S r   r   r8  s      r   __call__zNull.__call__      r   c                     | S r   r   r8  s      r   r   zNull.__enter__  r;  r   c                     | S r   r   r8  s      r   r   zNull.__exit__  r;  r   c                 X    t        |      dkD  r|d d dk(  r|dd  dk(  rt        |      | S )N   r   __)r   r  )r   mnames     r   __getattr__zNull.__getattr__  s7    u:>eBQi4/E"#J$4F ''r   c                     | S r   r   )r   r   rk   s      r   __setattr__zNull.__setattr__  r;  r   c                     | S r   r   )r   r   s     r   __delattr__zNull.__delattr__  r;  r   c                      y)Nz<Null>r   r   s    r   __repr__zNull.__repr__  s    r   c                      y)Nr6  r   r   s    r   __str__zNull.__str__  s    r   c                      yr   r   r   s    r   __len__zNull.__len__      r   c                     | S r   r   r   s    r   __getitem__zNull.__getitem__  r;  r   c                      y r   r   r8  s      r   __setitem__zNull.__setitem__      r   c                      y r   r   r8  s      r   writez
Null.write  rS  r   c                      yr   r   r   s    r   __nonzero__zNull.__nonzero__  rN  r   c                     t        d      S )Nr   )r   r   s    r   __iter__zNull.__iter__  s    Bxr   N)r   r   r   r   r   r:  r   r   rC  rE  rG  rI  rK  rM  rP  rR  rU  rW  rY  r   r   r   r6  r6    sR    r   r6  c                       e Zd Zd Zd Zd Zy)
KeyifyListc                      || _         || _        y r   )innerr   )r   r]  r   s      r   r   zKeyifyList.__init__  s    
r   c                 ,    t        | j                        S r   )r   r]  r   s    r   rM  zKeyifyList.__len__  s    4::r   c                 >    | j                  | j                  |         S r   )r   r]  )r   r   s     r   rP  zKeyifyList.__getitem__  s    xx

1&&r   N)r   r   r   r   rM  rP  r   r   r   r[  r[    s    'r   r[  c                 $      fdd_         S )z
    To be used as a decorator

    @call_only_once
    def func():
        print 'Calling func only this time'

    Actually, in PyDev it must be called as:

    func = call_only_once(func) to support older versions of Python.
    c                  <    j                   sd_          | i |S y )NT_called)r   r   r   r   s     r   r   z call_only_once.<locals>.new_func  s)    #H(((  r   Frb  r   s   `@r   call_only_oncerd    s    )
 HOr   zquoted-linezprotocol-quoted-linehttpzprotocol-httpjsonzjson-dap	http_jsonzjson-dap-httpppidc                       e Zd ZeZy)_GlobalSettingsN)r   r   r   QUOTED_LINE_PROTOCOLprotocolr   r   r   rj  rj    s    #Hr   rj  c                 h    t         t        t        t        f}| |v sJ d| d|       | t        _        y )Nz
Protocol (z) should be one of: )HTTP_PROTOCOLrk  JSON_PROTOCOLHTTP_JSON_PROTOCOLrj  rl  )rl  expecteds     r   set_protocolrr    s;    3]DVWHx ("   (Or   c                  "    t         j                  S r   )rj  rl  r   r   r   get_protocolrt  
  s    ###r   c                  :    t         j                  t        t        fv S r   )rj  rl  ro  rp  r   r   r   is_json_protocolrv    s    ##7I'JJJr   c                       e Zd ZdZdZy)GlobalDebuggerHolderz-
        Holder for the global debugger.
    N)r   r   r   r   
global_dbgr   r   r   rx  rx    s     Jr   rx  c                  "    t         j                  S r   rx  ry  r   r   r   get_global_debuggerr|    s    ***r   c                     | t         _        y r   r{  )dbgs    r   set_global_debuggerr     s    &)#r   __main__zhere
r   )r   
__future__r   platformr   r   r   r   
contextlibr   	STATE_RUNSTATE_SUSPENDPYTHON_SUSPENDDJANGO_SUSPENDJINJA2_SUSPENDro   	int_typestyperK  MethodWrapperTyper   codecs_codecs_codeclookupr   IGNORE_BASENAMES_STARTING_WITH!USER_CODE_BASENAMES_STARTING_WITH$LIBRARY_CODE_BASENAMES_STARTING_WITHpython_implementation
IS_CPYTHONIS_IRONPYTHONr   r   r  $MAXIMUM_VARIABLE_REPRESENTATION_SIZERETURN_VALUES_DICTGENERATED_LEN_ATTR_NAMEr_   _pydevd_bundler"   
IS_WINDOWSIS_LINUXIS_MACIS_WASMmaxsizeIS_64BIT_PROCESSget_vm_typePydevdVmTypeJYTHON	IS_JYTHONIS_PYPYjava.lang.Systemr  r  SystemgetPropertyra   
startswithhasattrUSE_CUSTOM_SYS_CURRENT_FRAMES!USE_CUSTOM_SYS_CURRENT_FRAMES_MAP	java.langr,   org.python.corer-   getDeclaredFieldr/   
accessiblegetr1   r+   r>   rh   versionIS_PYTHON_STACKLESSCYTHON_SUPPORTEDversion_infoIS_PY36_OR_GREATERIS_PY37_OR_GREATERIS_PY38_OR_GREATERIS_PY39_OR_GREATERIS_PY310_OR_GREATERIS_PY311_OR_GREATERrT   PY_VERSION_STRimplementationPY_IMPL_VERSION_STRr   PY_IMPL_NAMErb   ENV_FALSE_LOWER_VALUESr^   rl   rp   SUPPORT_GEVENTrr   DISABLE_FILE_VALIDATIONr`   rt   USE_LIB_COPYINTERACTIVE_MODE_AVAILABLEUSE_CYTHON_FLAGrx   ry   r{   r|   r}   r~   r   _ipython_ctxr]   splitr   LOAD_NATIVE_LIB_FLAGLOG_TIME SHOW_COMPILE_CYTHON_COMMAND_LINELOAD_VALUES_ASYNCDEFAULT_VALUEASYNC_EVAL_TIMEOUT_SECNEXT_VALUE_SEPARATORBUILTINS_MODULE_NAMEPANDAS_MAX_ROWSPANDAS_MAX_COLSPANDAS_MAX_COLWIDTHr   r   r   r   r   r   EXCEPTION_TYPE_UNHANDLEDEXCEPTION_TYPE_USER_UNHANDLEDEXCEPTION_TYPE_HANDLEDSHOW_DEBUG_INFO_ENVr   r   r   r   r;   r   r   r   objectr   r  	get_identthread_get_identr   r   r   r   r   r  gettrace_curr_tracer  settracer	  	TypeErrorr  r   r%  r)  r.  r1  r4  r6  NULLr[  rd  rk  ARGUMENT_QUOTED_LINE_PROTOCOLrn  ARGUMENT_HTTP_PROTOCOLro  ARGUMENT_JSON_PROTOCOLrp  ARGUMENT_HTTP_JSON_PROTOCOLARGUMENT_PPIDrj  rr  rt  rv  rx  r|  GetGlobalDebuggerr  r   stdoutrU  r   r   r   <module>r     sz   %      %	F	RZZ(  E FGNN6  "[  %2 ! (. $+X++-:
 %oI	 (, $, !  	 ) \\W$
<<..		!
,,,
&
@#,,&*@;;'* &N&&(N,G,G,N,NN	
((
(
(
*f
4!!--i8>>@KKIVJ$+C1B$C C Nw $A$`wG_R_ !  26	Y C 2 C CDX Y (,$)--.@A	$ 
+(*%	1 qrr))O!S[[%6%6%88  6668 I%
 %%/ %%/ %%/ %%/ &&'1 &&'1 P S--.%c&8&8&@&@A%%**L - - G	!	!   01
  ..LM ()IJ &RYY 0   \\-@@dIBIIiDX`dDd 
 "))/0%++-O33Oe8e24JL M 	M 
 "		"92>DDF   +88acf*g ',-KTR +89ceh+i (#01SUX#Y  &45Z&[ # N ryy12""Nl6H6H6M"NN%&!+cUa-cc+ !ryy!92>DDF 299&/557;PP#12[#\  "#=> & & !    8"= 8"=#$@"E  $33UW[#\   "11QSU!V  1??n0o - "11QSV!W  #22SUW"X  09ryy9gio/p/v/v/x  }R  0R ,&  0 " $%UV ()O%$-BII.A$B !2: #% @ $-7v -7`
 .## 
  <
  #,,.K CLL 	" CLL   &()3 3n v
' 
'0 %  6 
 (  #  ! - $ $($K + ( * zv

"  Yf  oooX $ 	Y C 2 C CDW X	Yz  
  LB  		se   Y Y Y 1Y= Z 
Z YYYY:9Y:=ZZZZZ%$Z%