U
    [dڊ                     @   s  d dl mZ eZd dlmZ d dlZdddddd	d
dddddddddddddddddgZi Zedd ed< ddddd	d
ged< dged< ed ed  ed< dddged < dged!< dged"< dddged#< dged$< dged%< dged&< dged'< ddddddddged(< d
ddged)< dged*< ddged+< ddged,< edd ed-< ed- 	d ed dd ddddg ed.< ed. 	d ed. 	d ed dg ed/< ed/ dg ed0< dddged1< edd ed2< ed1 D ]Z
ed2 	e
 qdddddged+  ed)  ed*  ed3< edd ed4< ed3 D ]Z
ed4 	e
 q:ddddddged5< ed# dg ed&  ed6< edd ed7< ed6 D ]Z
ed7 	e
 qdd	dged8< edd ed9< ed9 	d i ZeD ]Zegee< e D ]Zee Zeekrqg Zg Zee D ]HZeekr:ee n,eee eek r\ee n
ee q eeg e ee< qqG d:d; d;ZG d<d= d=ZG d>d? d?eZG d@dA dAeZG dBdC dCZe Zi ZddEdFZddGdHZdIdJ Z e! Z"dKdL Z#dMdN Z$dOdP Z%e&dQZ'dDa(dRdS Z)dTdU Z*dVdW Z+dXdY Z,ddZd[Z-d\d] Z.d^d_ Z/d`da Z0dbdc Z1ddde Z2dfdg Z3dhdi Z4djdk Z5dldm Z6dndo Z7dpdq Z8drds Z9dtdu Z:dvdw Z;dxdy Z<dzd{ Z=d|d} Z>d~d Z?dd Z@dd ZAe! ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdddZIdd ZJdddZKdd ZLdd ZMdd ZNdd ZOeddZPePQ \ZRZSeSD ]ZTeUeT qveOdeE eOdeF eOdeG eOdeH eOdeK eOdeN eOdeL eOdeM edd e  dS )    )print_function)OptionParserNZemuZi386_pcZi386_efiZ	i386_qemuZi386_corebootZi386_multibootZi386_ieee1275Z
x86_64_efiZi386_xenZ
x86_64_xenZi386_xen_pvhZmips_loongsonZsparc64_ieee1275Zpowerpc_ieee1275Zmips_arcZia64_efiZmips_qemu_mipsZ	arm_ubootZarm_efiZ	arm64_efiZarm_corebootZloongarch64_efiZriscv32_efiZriscv64_eficommonZi386Zx86_64Zx86ZmipsZsparc64ZpowerpcZarmZarm64Zloongarch64Zriscv32Zriscv64ZefiZieee1275ZubootZxenZcorebootZnoemuZcmospciZusbZvideoinkernelZvideomodulesZterminfoinkernelZterminfomoduleZfdtZsoftdivZ
no_softdivZi386_coreboot_multiboot_qemuZnopcc                   @   s0   e Zd Zed\ZZZZZZ	Z
ZZZZZZZdS )AutogenToken   N)__name__
__module____qualname__rangeautogendefinitionseofvar_name
other_namestringnumber	semicolonequalscommalbracerbracelbracketrbracket r   r   F/home/jack/SDK/immortalwrt-23.05/build_dir/hostpkg/grub-2.12/gentpl.pyr      s         r   c                   @   s,   e Zd Zed\ZZZZZZ	Z
ZZZZZdS )AutogenState   N)r   r	   r
   r   initneed_defneed_tpl	need_semi	need_name	have_name
need_valueneed_idxneed_rbracket	indx_name
have_valuedoner   r   r   r   r      s       r   c                       s(   e Zd Z fddZ fddZ  ZS )AutogenParseErrorc                    s    t t| | || _|| _d S N)superr*   __init__pathline)selfmessager.   r/   	__class__r   r   r-      s    zAutogenParseError.__init__c                    s   t t|  d| j| jf  S )Nz at file %s line %d)r,   r*   __str__r.   r/   r0   r2   r   r   r4      s    zAutogenParseError.__str__)r   r	   r
   r-   r4   __classcell__r   r   r2   r   r*      s   r*   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	AutogenDefinitionc                    sN   zt t| |W S  tk
rH   | D ]\}}||kr&|   Y S q&Y nX d S r+   )r,   r7   __getitem__	TypeErrorr0   keynamevaluer2   r   r   r8      s    zAutogenDefinition.__getitem__c                 C   s    | D ]\}}||kr dS qdS NTFr   r:   r   r   r   __contains__   s    zAutogenDefinition.__contains__c                 C   s"   | D ]\}}||kr|  S q|S r+   r   )r0   r;   defaultr<   r=   r   r   r   get   s    
zAutogenDefinition.getc                 c   s    | D ]\}}||kr|V  qd S r+   r   r:   r   r   r   find_all   s    zAutogenDefinition.find_all)r   r	   r
   r8   r?   rA   rB   r6   r   r   r2   r   r7      s   r7   c                   @   s   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zdd Z	d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 )AutogenParserc                 C   s2   t  | _d| jfg| _d | _d | _d | _d| _d S )N r   )r7   r   	def_stackcurdefnew_nameZcur_pathcur_liner5   r   r   r   r-      s    zAutogenParser.__init__c                 C   s&   t | tt dt dd ko$| dkS )N!~   z#,;<=>[\]`{}?*'"())ordr   cr   r   r   is_unquotable_char   s    z AutogenParser.is_unquotable_charc                 C   s   | dkp|   S )Nz:^-_)isalnumrM   r   r   r   is_value_name_char   s    z AutogenParser.is_value_name_charc                 C   s   t || j| jd S r+   )r*   cur_filerH   )r0   r1   r   r   r   error   s    zAutogenParser.errorc                 c   sT  |  }t|}d}||k rD||k rV||  rV|| dkrL|  jd7  _|d7 }q||krbqD|| }|dkrL|d7 }z |d|}||| }|}W n$ tk
r   ||d  }|}Y nX |d d\}}	|dkr<z<|d|}
|
td }|  j||| d7  _|}W n  tk
r8   | d Y nX n| d|  q|d	krlt	j
|fV  |d7 }q|d
krt	j|fV  |d7 }q|dkrt	j|fV  |d7 }q|dkrt	j|fV  |d7 }q|dkrt	j|fV  |d7 }q|dkrt	j|fV  |d7 }q|dkr,t	j|fV  |d7 }q|dkrg }|d7 }||krV| d || dkrr|  jd7  _|| dkr|d7 }||kr| d || dkr|  jd7  _|d |||  n*|| |kr|d7 }q n|||  q:t	jd|fV  q|dkr|d7 }|| dkr|d7 }z<|d|}|td }|  j||| d7  _|}W n  tk
r   | d Y nX n6|| dkrBz|d|}W n tk
r   Y nX q| s|dkrN||d k rN||d   rN|d }||k r4||  r4|d7 }qt	j||| fV  |}q| |r4|}||k r| || r|d7 }q^||k r| || r||k r| || r|d7 }qt	j||| fV  |}nT||| }| dkrt	j|fV  n(| dkr"t	j|fV  nt	j|fV  |}q| d|  qt	jd fV  d S )Nr   
rK   #ifz
#endifz#if without matching #endifzUnhandled directive '#%s'{=}[];,)'"zEOF in quoted string\rD   /*z*/z/* without matching */-r   r   zInvalid input character '%s')readlenisspacerH   index
ValueErrorsplitcountrS   r   r   r   r   r   r   r   r   appendr   joinisdigitr   rO   rQ   r   lowerr   r   r   r   )r0   fdataendoffsetrN   Zend_directiveZ	directiver<   r=   Zend_ifZ
new_offsetsZend_commentZ
end_numberZend_namer   r   r   read_tokens   s    





























zAutogenParser.read_tokensc                 C   s   t | jdkr| d d S )NrK   z Definition blocks were left open)re   rE   rS   r0   tokenr   r   r   do_need_name_endB  s    zAutogenParser.do_need_name_endc                 C   s
   || _ d S r+   rG   ru   r   r   r   do_need_name_var_nameF  s    z#AutogenParser.do_need_name_var_namec                 C   s@   t | jdkr| d | j \}}||| jf || _d S )NrK   zToo many close braces)re   rE   rS   poprk   rF   )r0   rv   rG   Z
parent_defr   r   r   do_end_blockI  s
    
zAutogenParser.do_end_blockc                 C   s   | j | jdf d S NrD   rF   rk   rG   ru   r   r   r   do_empty_valP  s    zAutogenParser.do_empty_valc                 C   s   | j | j|f d S r+   r}   ru   r   r   r   do_str_valueS  s    zAutogenParser.do_str_valuec                 C   s    | j | j| jf t | _d S r+   )rE   rk   rG   rF   r7   ru   r   r   r   do_start_blockV  s    zAutogenParser.do_start_blockc                 C   s
   || _ d S r+   rx   ru   r   r   r   do_indexed_nameZ  s    zAutogenParser.do_indexed_namec                 C   s  | j | _d| _tj}tjtjtjd fitjtj tjd fitjtj	tj
d ftjtj
d ftjtj
d fitj
tjtjd fitjtjtjd ftjtj| jftj	tj| jftjtj| jfitjtjtj| jftjtjd ftjtjd fitjtj	tj| jftjtj| jftjtj| jftjtj| jftjtj| jfitjtj	tj | j!ftjtj | j!fitj tj"tj#d fitj#tjtj| jftjtjd fitjtjtjd ftj$tjd fii}| %|D ]`\}}||| kr|| | \}}|d k	r|| n| &d||f  |tjkr q
qd S )Nr   z.Parse error in state %s: unexpected token '%s')'r   rF   rH   r   r   r   r   r   r    r   r!   r   r   r   r"   r   r)   rw   r#   ry   r   r(   r{   r~   r   r$   r   r%   r   r   r   r   r&   r   r   r'   r   rt   rS   )r0   ro   stateZtransitionscoderv   Zhandlerr   r   r   read_definitions_file]  s            
                 =

 z#AutogenParser.read_definitions_filec              	   C   s(   || _ t|}| | W 5 Q R X d S r+   )rR   openr   )r0   r.   ro   r   r   r   read_definitions  s    
zAutogenParser.read_definitionsN)r   r	   r
   r-   staticmethodrO   rQ   rS   rt   rw   ry   r{   r~   r   r   r   r   r   r   r   r   r   rC      s    

}QrC   rD   c                 C   s*   | dkrd S t |g  t | |  d S r|   )outputs
setdefaultrk   )rs   sectionr   r   r   output  s    r   c                 C   s"   t | g D ]}t|dd qd S )NrD   )rq   )r   rA   print)r   rs   r   r   r   write_output  s    r   c                 C   s   t | d | d  d S Nz += rT   r   varr=   r   r   r   gvar_add  s    r   c                 G   s@   | d }|t kr<|tkr<|D ]}t|d dd qt| d S )Nr<   z  = 
declr   )seen_target	seen_varsr   add)defnZvar_listr<   r   r   r   r   	vars_init  s
    r   c                 C   s   t | d | d  d S )Nz  = rT   r   r   r   r   r   var_set  s    r   c                 C   s   t | d | d  d S r   r   r   r   r   r   var_add  s    r   z[^0-9A-Za-z@_]c                 C   s   | a d S r+   )canonical_name_suffix)suffixr   r   r   set_canonical_name_suffix  s    r   c                 C   s   t d| d t S )N_r<   )canonical_name_resubr   r   r   r   r   cname  s    r   c                 C   s^   |d dkr2t d|  d | |dd d  n(t d|  d | d |dd d  d S )Nr   rT   z: z
	)r   replace)targetsourcecmdr   r   r   rule  s    &r   c                 C   s2   |  |D ]"}t| D ]}||kr  dS qq
dS r>   )rB   RMAP)r   platformtagr=   groupr   r   r   platform_tagged  s
    r   c                 C   s    t | ||r|S |d k	r|S d S r+   )r   )r   r   r   Z
snippet_ifZsnippet_elser   r   r   if_platform_tagged  s    r   c                 C   s,   g }|  |D ]}||| qd|S r|   )rB   rk   rl   )r   r   closurerr=   r   r   r   foreach_value  s    r   c           	      C   sl   g }t | D ]6}t| || }|r|D ]}||| q* qbq| |D ]}||| qNd|S r|   )r   listrB   rk   rl   )	r   r   r   nonetagr   r   r   valuesr=   r   r   r   foreach_platform_specific_value!  s    r   c                 C   sF   g }t | D ]&}| || D ]}||| qq|  d|S r|   )r   rB   rk   sortrl   )r   r   r   r   r   r   r=   r   r   r   foreach_platform_value7  s    r   c                 C   s$   t d|  d  ||  t d d S )Nz	
if COND_rT   endif
r   )r   r   r   r   r   platform_conditional?  s    r   c                 C   sB   d| kr*t D ]}t| |drt|| qnt D ]}t|| q.d S )Nenable)GRUB_PLATFORMSr   r   )r   r   r   r   r   r   foreach_enabled_platformT  s    r   c                 C   s>   t t| |dddd  || | t t| |dddd  d S )NZ
_condition	conditionc                 S   s   d|  d S )Nzif rT   r   Zcondr   r   r   <lambda>l      z6under_platform_specific_conditionals.<locals>.<lambda>c                 S   s   d|  d S )Nzendif rT   r   r   r   r   r   r   n  r   )r   r   )r   r   r   r   r   r   $under_platform_specific_conditionalsk  s    
r   c                 C   s   t | |||dd S )Nc                 S   s   | d S N r   r=   r   r   r   r   r  r   z*platform_specific_values.<locals>.<lambda>)r   )r   r   r   r   r   r   r   platform_specific_valuesp  s    
r   c                 C   s   t | ||dd S )Nc                 S   s   | d S r   r   r   r   r   r   r   u  r   z!platform_values.<locals>.<lambda>)r   )r   r   r   r   r   r   platform_valuest  s    r   c                 C   s   t | ddd S )N
extra_distc                 S   s   | d S r   r   r   r   r   r   r   x  r   zextra_dist.<locals>.<lambda>)r   r   r   r   r   r   w  s    r   c                 C   s   t | |dS r|   r   r   pr   r   r   platform_sourcesz  r   r   c                 C   s   t | |dS )N_nodistr   r   r   r   r   platform_nodist_sources{  r   r   c                 C   s   t | |ddS )NZ_startupstartupr   r   r   r   r   platform_startup}  r   r   c                 C   s   t | |ddS )NZ_ldaddldaddr   r   r   r   r   platform_ldadd~  r   r   c                 C   s   t | |ddS )NZ_dependenciesdependenciesr   r   r   r   r   platform_dependencies  r   r   c                 C   s   t | |ddS )NZ_cflagscflagsr   r   r   r   r   platform_cflags  r   r   c                 C   s   t | |ddS )NZ_ldflagsldflagsr   r   r   r   r   platform_ldflags  r   r   c                 C   s   t | |ddS )NZ	_cppflagscppflagsr   r   r   r   r   platform_cppflags  r   r   c                 C   s   t | |ddS )NZ
_ccasflags	ccasflagsr   r   r   r   r   platform_ccasflags  r   r   c                 C   s   t | |ddS )NZ_stripflags
stripflagsr   r   r   r   r   platform_stripflags  r   r   c                 C   s   t | |ddS )NZ_objcopyflagsobjcopyflagsr   r   r   r   r   platform_objcopyflags  r   r   c                 C   s   | d t kr|S dS )Nr<   rD   )r   )r   Zsnippetr   r   r   
first_time  s    r   c                 C   s   d| krdS dD ]>}t | td |}tdd  D ]}|t | ||kr0  dS q0qdD ]J}t| td d| |}tdd  D ]"}|t| |d| |krz  dS qzqTdD ]>}t| td |}tdd  D ]}|t| ||kr  dS qqd	S )
Nr   F)rD   r   r   rK   )
r   r   r   r   r   r   r   r   r   r   r   )nostripT)r   r   r   r   )r   r   templater   r   r   r   r   is_platform_independent  s$    r   c                 C   s  | d }t d td|d  td|d  tt| d t| |d  tdt|  d t| |d	  tt| d
 t| | tt| d dt| |  tt| d dt| |  tt| d dt	| |  tt| d dt
| |  tt| d dt| |  tdt|  tddt|  d  tddt|  d  td|d  td|d  td|d  td| d t|  d  t|  d! t|  d"  d S )#Nr<   z.moduleplatform_PROGRAMSZMODULE_FILESz.module$(EXEEXT)_SOURCESz ## platform sourcesnodist_ ## platform nodist sources_LDADD_CFLAGSz$(AM_CFLAGS) $(CFLAGS_MODULE) _LDFLAGSz $(AM_LDFLAGS) $(LDFLAGS_MODULE) 	_CPPFLAGSz"$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) 
_CCASFLAGSz$$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) _DEPENDENCIESz$(TARGET_OBJ2ELF) dist_noinst_DATABUILT_SOURCES	$(nodist_	_SOURCES)
CLEANFILESZ	MOD_FILESz.modZMARKER_FILESz.markerrT   z.marker: $(z_SOURCES) $(nodist_zk_SOURCES)
	$(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zq_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1)
	grep 'MARKER' $@.new | grep -v '^#' > $@; rm -f $@.new
)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r   r   r   module  sF     r   c                 C   s  | d }t d td|d  tt| d t| | tt| d t| | tdt|  d t| |d  tt| d t| | tt| d d	t	| |  tt| d
 dt
| |  tt| d dt| |  tt| d dt| |  tt| d dt| |  tt| d d tdt|  tddt|  d  tddt|  d  td|d  td|d  t|d |d t| |dddt|  d d  t|  d! d  t|  d"  d S )#Nr<   z.execr   r   r   r   r   r   z$(AM_CFLAGS) $(CFLAGS_KERNEL) r   z $(AM_LDFLAGS) $(LDFLAGS_KERNEL) r   z"$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) r   z$$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) Z_STRIPFLAGSz&$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) r   z$(TARGET_OBJ2ELF)r   r   r   r   r   platform_DATA.imgz.exec$(EXEEXT)r   a1  if test x$(TARGET_APPLE_LINKER) = x1; then      $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@;    elif test ! -z '$(TARGET_OBJ2ELF)'; then      $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1);    else cp $< $@; fizEif test x$(TARGET_APPLE_LINKER) = x1; then   $(TARGET_STRIP) -S -x $(z) -o $@.bin $<;   $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@;   rm -f $@.bin;    elif test ! -z '$(TARGET_OBJ2ELF)'; then      z$(TARGET_STRIP) $(z{_STRIPFLAGS) -o $@.bin $< &&      $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1);      rm -f $@.bin; else z_STRIPFLAGS) -o $@ $<; fi)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   kernel  sP     r   c                 C   st  | d }t d td|d  tt| d t| | tdt|  d t| |d  tt| d t| | tt| d d	t| |  tt| d
 dt| |  tt| d dt	| |  tt| d dt
| |  tt| d dt| |  tdt|  tddt|  d  tddt|  d  td|d  td|d  t|d |d dt|  d  d S )Nr<   z.imager   r   r   z## platform nodist sourcesr   r   z$(AM_CFLAGS) $(CFLAGS_IMAGE) r   z$(AM_LDFLAGS) $(LDFLAGS_IMAGE) r   z!$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) r   z#$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) Z_OBJCOPYFLAGSz$(OBJCOPYFLAGS_IMAGE) r   r   r   r   r   r   r   z.image$(EXEEXT)z]
if test x$(TARGET_APPLE_LINKER) = x1; then   $(MACHO2IMG) $< $@; else   $(TARGET_OBJCOPY) $(z_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx -R .interp $< $@; fi
)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   image  s*     r   c                 C   sB  | d }t d t| t| d dt|  d t| d t| d t| d  |tkr`td| tt| d t| | tdt|  d t| | tt| d t| d	t	| |  tt| d t| d
t
| |  tt| d t| dt| |  tdt|  |tkr>tddt|  d  tddt|  d  d S )Nr<   rD   r   r   r   r   r   Znoinst_LIBRARIESz$(AM_CFLAGS) $(CFLAGS_LIBRARY) z#$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) z%$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   library  s(    




"""
r   binc                 C   s   |  d|S )N
installdir)rA   )r   r@   r   r   r   r   !  s    r   c                 C   s   | d }| d }t d td|d |  t|d | |d | d| d | d	 | d
 | d  td|d |  t d d S )Nr<   
mansectionzif COND_MAN_PAGES
Zman_MANS.r   z
chmod a+x zF
PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=z -i $(top_srcdir)/docs/man/z.h2m -o $@ rT   r   r   )r   r   r   )r   Zadddepsr<   r   r   r   r   manpage$  s.    r   Fc                 C   sJ  | d }t d d| kr,td| d  | n$tt| d | d| krPt| d tt| d t| | tdt|  d t| | tt| d	 t	| | tt| d
 dt
| |  tt| d dt| |  tt| d dt| |  tt| d dt| |  tdt|  tddt|  d  tddt|  d  d S )Nr<   rD   testcaseZcheck_PROGRAMS_Z	_PROGRAMSr   r   r   r   r   z$(AM_CFLAGS) $(CFLAGS_PROGRAM) r   z!$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) r   z#$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) r   z%$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   Ztestr<   r   r   r   program1  s"    
r  c                 C   s.   t dt|  d t| | tdt|  d S )NZdist__DATAr   )r   r   r   r   r   )r   r   r   r   r   rp   I  s    rp   c                 C   s|   | d }t t| d | t|dt| | t| | dt| | d | d  td| tdt|  td	t| | d S )
Nr<   r  $(top_builddir)/config.status 
(for x in V; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
chmod a+x rT   r   
EXTRA_DISTr   )r   r   r   r   r   r   r   r   r   r   r   transform_dataM  s    
r  c                 C   s   | d }d| kr$t d| d  | n$tt| d | d| krHt| d t|dt| | t| | dt| | d	 | d
  t d| t dt|  t dt| | d S )Nr<   r   Zcheck_SCRIPTS_Z_SCRIPTSr   zgrub-mkconfig_libr  r  r  rT   r   r  r   )r   r   r   r   r   r   r   r   r   r   r   r   script[  s$    

r  c                    sb   t   t  tj| D ]@tr:ttd   nt	 fdd t 
d  qd S )Nr   c                    s   t |  S r+   )r   )r   r   r   r   r   r   x  r   zrules.<locals>.<lambda>r<   )r   clearr   	defparserr   rB   r   r   r   r   r   )r   r   r   r	  r   rulesn  s    r  z%prog DEFINITION-FILES)Zusager   r   )rD   )rD   )N)r   )F)VZ
__future__r   typeZ__metaclass__Zoptparser   rer   GROUPSremoveir   r   keyskvZbiggerZsmallerr   rk   re   r   r   	Exceptionr*   r   r7   rC   r  r   r   r   r   setr   r   r   r   compiler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rp   r  r  r  ZparserZ
parse_argsr   argsargr   r   r   r   r   <module>   s>  
             







  
  
  *   

 
    



'











