
    d`                         d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)  G d de*      Z+ G d	 d
e      Z,y)    )valid_ident   )!UBInt8UBInt16UBInt32UBInt64ULInt8ULInt16ULInt32ULInt64SBInt8SBInt16SBInt32SBInt64SLInt8SLInt16SLInt32SLInt64AdapterStructConstructErrorIfEnumArrayPrefixedArrayCStringEmbedStaticField
IfThenElse	ConstructRenameSequenceStringSwitchValue)RepeatUntilExcludingULEB128SLEB128StreamOffset   )*c                        e Zd ZdZi Zd f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d Zd Z xZS )DWARFStructsao   Exposes Construct structs suitable for parsing information from DWARF
        sections. Each compile unit in DWARF info can have its own structs
        object. Keep in mind that these structs have to be given a name (by
        calling them with a name) before being used for parsing (like other
        Construct structs). Those that should be used without a name are marked
        by (+).

        Accessible attributes (mostly as described in chapter 7 of the DWARF
        spec v3):

            Dwarf_[u]int{8,16,32,64):
                Data chunks of the common sizes

            Dwarf_offset:
                32-bit or 64-bit word, depending on dwarf_format

            Dwarf_length:
                32-bit or 64-bit word, depending on dwarf_format

            Dwarf_target_addr:
                32-bit or 64-bit word, depending on address size

            Dwarf_initial_length:
                "Initial length field" encoding
                section 7.4

            Dwarf_{u,s}leb128:
                ULEB128 and SLEB128 variable-length encoding

            Dwarf_CU_header (+):
                Compilation unit header

            Dwarf_abbrev_declaration (+):
                Abbreviation table declaration - doesn't include the initial
                code, only the contents.

            Dwarf_dw_form (+):
                A dictionary mapping 'DW_FORM_*' keys into construct Structs
                that parse such forms. These Structs have already been given
                dummy names.

            Dwarf_lineprog_header (+):
                Line program header

            Dwarf_lineprog_file_entry (+):
                A single file entry in a line program header or instruction

            Dwarf_CIE_header (+):
                A call-frame CIE

            Dwarf_FDE_header (+):
                A call-frame FDE

        See also the documentation of public methods.
    c                 .   ||||f}|| j                   v r| j                   |   S t        | 	  |       }|dk(  s|dk(  sJ |dk(  s|dk(  sJ t        |             ||_        ||_        ||_        ||_        |j                          || j                   |<   |S )a{   dwarf_version:
                Numeric DWARF version

            little_endian:
                True if the file is little endian, False if big

            dwarf_format:
                DWARF Format: 32 or 64-bit (see spec section 7.4)

            address_size:
                Target machine address size, in bytes (4 or 8). (See spec
                section 7.5.1)
            @         )	_structs_cachesuper__new__strlittle_endiandwarf_formataddress_sizedwarf_version_create_structs)clsr7   r8   r9   r:   keyself	__class__s          8/usr/lib/python3/dist-packages/elftools/dwarf/structs.pyr5   zDWARFStructs.__new__U   s     lL-H#$$$%%c**ws#r!\R%777q LA$5Hs<7HH5*((*"&3    c                 (    | j                   dk(  rdS dS )z* Size of an initial length field.
        r/   r2      )r8   r>   s    r@   initial_length_field_sizez&DWARFStructs.initial_length_field_sizes   s     %%+q33rA   c                    | j                   rt        | _        t        | _        t
        | _        t        | _        | j                  dk(  rt
        nt        | _
        | j                  dk(  rt
        nt        | _        | j                  dk(  rt
        nt        | _        t        | _        t         | _        t$        | _        t(        | _        nt,        | _        t.        | _        t0        | _        t2        | _        | j                  dk(  rt0        nt2        | _
        | j                  dk(  rt0        nt2        | _        | j                  dk(  rt0        nt2        | _        t4        | _        t6        | _        t8        | _        t:        | _        | j=                          | j?                          | jA                          | jC                          | jE                          | jG                          | jI                          | jK                          | jM                          | jO                          | jQ                          | jS                          | jU                          | jW                          | jY                          y )Nr/   r2   )-r7   r	   Dwarf_uint8r
   Dwarf_uint16r   Dwarf_uint32r   Dwarf_uint64r8   Dwarf_offsetDwarf_lengthr9   Dwarf_target_addrr   
Dwarf_int8r   Dwarf_int16r   Dwarf_int32r   Dwarf_int64r   r   r   r   r   r   r   r   _create_initial_length_create_leb128_create_cu_header_create_abbrev_declaration_create_dw_form_create_lineprog_header_create_callframe_entry_headers_create_aranges_header_create_nameLUT_header#_create_string_offsets_table_header_create_address_table_header_create_loclists_parsers_create_rnglists_parsers_create_debugsup_create_gnu_debugaltlinkrD   s    r@   r;   zDWARFStructs._create_structsx   s   %D 'D 'D 'D+/+<+<+BD+/+<+<+BD,,1w "$DO&D&D&D%D 'D 'D 'D+/+<+<+BD+/+<+<+BD,,1w "$DO&D&D&D##% '')$$&,,.##%##%002))+%%'%%'%%'rA   c                       fd}| _         y )Nc                     t        t        | j                  d      t        d j	                  d      d                   S )Nfirstc                      | j                   dk(  S )N    )rc   ctxs    r@   <lambda>zMDWARFStructs._create_initial_length.<locals>._InitialLength.<locals>.<lambda>   s    399
#: rA   second)	elsevalue)_InitialLengthAdapterr   rI   r   rJ   )namer>   s    r@   _InitialLengthz;DWARFStructs._create_initial_length.<locals>._InitialLength   sF     )t%%g.:))(3"&()* *rA   )Dwarf_initial_length)r>   rm   s   ` r@   rR   z#DWARFStructs._create_initial_length   s    		* %3!rA   c                 0    t         | _        t        | _        y N)r'   Dwarf_uleb128r(   Dwarf_sleb128rD   s    r@   rS   zDWARFStructs._create_leb128   s    $$rA   c                    t        d| j                  d      | j                  d            }t        d| j                  d      | j                  d            }t        d| j                  d      | j                  d      | j                  d            }t        d| j                  d      | j                  d      | j                  d      | j                  d            }t        dt	        | j                  d      fi t
        t        t        dd ||||||d	                  }t        d
| j                  d      | j                  d      t        dd t        |      t        |                  | _        y )N debug_abbrev_offsetr9   dwo_idtype_signaturetype_offset	unit_typec                     | j                   S rp   )ry   rf   s    r@   rh   z0DWARFStructs._create_cu_header.<locals>.<lambda>   s
     rA   )DW_UT_compileDW_UT_partialDW_UT_skeletonDW_UT_split_compile
DW_UT_typeDW_UT_split_typeDwarf_CU_headerunit_lengthversionc                     | d   dk\  S )Nr       rf   s    r@   rh   z0DWARFStructs._create_cu_header.<locals>.<lambda>   s    s9~': rA   )r   rK   rG   rJ   r   
ENUM_DW_UTr   r$   rn   rH   r   r   )r>   dwarfv4_CU_headerdwarfv5_CP_CU_headerdwarfv5_SS_CU_headerdwarfv5_TS_CU_headerdwarfv5_CU_headers         r@   rT   zDWARFStructs._create_cu_header   sz   "234^,
  &b^,34 

  &b^,34h' 
  &b^,34./m,	 
 #2!!+.=*=&6(<(<(<(<(<(< 
  &&7%%m4i(r:'('( rA   c                 t   t        dt        | j                  d      fi t        t        | j	                  d      fi t
        t        d t        dt        | j                  d      fi t        t        | j                  d      fi t        t        d | j                  d	                              | _        y )
NDwarf_abbrev_entrytagchildren_flagc                 B    | j                   dk(  xr | j                  dk(  S )N
DW_AT_nullDW_FORM_null)rl   formobjrg   s     r@   rh   z9DWARFStructs._create_abbrev_declaration.<locals>.<lambda>   s!    HH,K^1K rA   	attr_specrl   r   c                     | d   dk(  S )Nr   DW_FORM_implicit_constr   rf   s    r@   rh   z9DWARFStructs._create_abbrev_declaration.<locals>.<lambda>   s    3v;2J#J rA   value)r   r   rq   ENUM_DW_TAGrG   ENUM_DW_CHILDRENr&   
ENUM_DW_ATENUM_DW_FORMr   rr   Dwarf_abbrev_declarationrD   s    r@   rU   z'DWARFStructs._create_abbrev_declaration   s    (./C##E*:k:!!/2G6FG L{++F3BzB++F3D|DJ**73567
)8%rA   c                 x    t        d| j                  d      | j                  d      t        d            | _        y )NElf_debugsupr   is_supplementarysup_filename)r   rO   rG   r   Dwarf_debugsuprD   s    r@   r_   zDWARFStructs._create_debugsup   s6    $^Y'/0N#%rA   c                 P    t        dt        d      t        dd            | _        y )NElf_debugaltlinkr   sup_checksum   )length)r   r   r#   Dwarf_debugaltlinkrD   s    r@   r`   z%DWARFStructs._create_gnu_debugaltlink   s$    "();N#>"-#/rA   c                    t        d0i d| j                  d      d| j                  d      d| j                  d      d| j	                  d      d| j                  d      d| j                  | j                        d| j                  | j                        d	| j                  | j
                        d
| j                  | j                        d| j                  d      d| j	                  d      d| j                  d      d| j                  d      dt        d| j                  d            d| j                  d      d| j                  d      dt        d      d| j                  d      d| j                  d      d| j                  d      d| j                  d      d| j	                  d      d| j                  d      d| j                  d      d| j                  d      d| j                  d      d| j	                  d      d| j                  d      d| j                  d      d | j                  d      d!| j                  d      d"| j                  d      d#| j                  d$k(  r| j                  d      n| j                  d      d%| j                  d      d&t        dd'      d(| j                  d      d)| j                  | j                        d*| j                  d      d+| j                  d      d,| j                  d      d-| j                  d      d.| j                  d      d/| j                  d      | _        y )1NDW_FORM_addrrt   DW_FORM_addrxDW_FORM_addrx1DW_FORM_addrx2DW_FORM_addrx4DW_FORM_block1DW_FORM_block2DW_FORM_block4DW_FORM_blockDW_FORM_data1DW_FORM_data2DW_FORM_data4DW_FORM_data8DW_FORM_data16   DW_FORM_sdataDW_FORM_udataDW_FORM_stringDW_FORM_strpDW_FORM_strp_supDW_FORM_line_strpDW_FORM_strx1DW_FORM_strx2DW_FORM_strx4DW_FORM_flagDW_FORM_refDW_FORM_ref1DW_FORM_ref2DW_FORM_ref4DW_FORM_ref_sup4DW_FORM_ref8DW_FORM_ref_sup8DW_FORM_ref_udataDW_FORM_ref_addrr   DW_FORM_indirectDW_FORM_flag_presentr   DW_FORM_sec_offsetDW_FORM_exprlocDW_FORM_ref_sig8DW_FORM_GNU_strp_altDW_FORM_GNU_ref_altDW_AT_GNU_all_call_sitesDW_FORM_loclistxDW_FORM_rnglistxr   )dictrM   rq   rG   rH   rI   _make_block_structrJ   r   rr   r   rK   r:   r   Dwarf_dw_formrD   s    r@   rV   zDWARFStructs._create_dw_form   s   ! 9
//39
,,R09
  ++B/9
  ,,R0	9
  ,,R09
  2243C3CD9
  2243D3DE9
  2243D3DE9
 11$2D2DE9
 **2.9
 ++B/9
  ++B/!9
" ++B/#9
$ !T%5%5b%9:%9
& ,,R0'9
( ,,R0)9
, #2;-9
. **2./9
0 "..r219
2 #//339
4 **2.59
6 ++B/79
: ++B/;9
< ))"-=9
@ ))"-A9
B ))"-C9
D **2.E9
F **2.G9
H "..r2I9
J **2.K9
L "..r2M9
N #004O9
P <@;M;MQR;RT33B7X\XiXijlXmQ9
T "//3U9
Z $/r1#5[9
\ "&!2!22!6]9
^ #55d6H6HI_9
`  $004a9
d "&!2!22!6e9
f !% 1 1" 5g9
h &*%7%7%;i9
n "//3o9
p "//3q9
rA   c           
          t        d| j                  d      | j                  d      | j                  d      | j	                  d      | j	                  d            | _        y )NDwarf_aranges_headerr   r   debug_info_offsetr9   segment_size)r   rn   rH   rK   rG   r   rD   s    r@   rY   z#DWARFStructs._create_aranges_header6  sY    $*+A%%m4i(12^,^,%!rA   c           	          t        d| j                  d      | j                  d      | j                  d      | j	                  d            | _        y )NDwarf_nameLUT_headerr   r   r   debug_info_length)r   rn   rH   rK   rL   r   rD   s    r@   rZ   z#DWARFStructs._create_nameLUT_header?  sL    $*+A%%m4i(1212	%!rA   c                     t        d| j                  d      | j                  d      | j                  d            | _        y )N Dwarf_string_offets_table_headerr   r   padding)r   rn   rH   !Dwarf_string_offsets_table_headerrD   s    r@   r[   z0DWARFStructs._create_string_offsets_table_headerG  s<    17.%%m4i(i(	2.rA   c           	          t        d| j                  d      | j                  d      | j                  d      | j                  d            | _        y )NDwarf_address_table_headerr   r   r9   segment_selector_size)r   rn   rH   rG   r   rD   s    r@   r\   z)DWARFStructs._create_address_table_headerO  sK    *01M%%m4i(^,45	+'rA   c                    t        dt        d      t        d t        t        d| j	                  d      | j	                  d      | j	                  d                              | _         G d d	t              }d
 }t        d| j                  d      | j                  d      t        || j                  d      d       t        || j                  d      d       | j                  d      | j                  d      t        d | j                  d      d      | j                  d      | j                  d      | j                  d      | j                  d      t        d | j                  d            t        |t        t        dt        | j	                  d      fi t        t        | j	                  d      fi t               | j                  d                  t        |t         |d| d      | j	                  d                   t        |t        t        d!t        | j	                  d      fi t        t        | j	                  d      fi t               | j                  d"                  t        |t         |d#| d!      | j	                  d$                  t        d% t#        d& t        d'                  t        d( t#        d) | j
                                    | _        y )*N
file_entryrl   c                 2    t        | j                        dk7  S Nr   lenrl   rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>\  s    3sxx=A- rA   rt   	dir_indexmtimer   c                       e Zd Zd Zd Zy)<DWARFStructs._create_lineprog_header.<locals>.FormattedEntryc                 L    t        j                  | |       || _        || _        y rp   )r    __init__structsformat_field)r>   rl   r   r   s       r@   r   zEDWARFStructs._create_lineprog_header.<locals>.FormattedEntry.__init__g  s!    ""4.&$0!rA   c                       j                   dz   |v r| j                   dz      }n?t         fd| j                      D              }t        dg| }|| j                   dz   <   |j                  ||      S )N_parserc              3      K   | ];  }t        |j                  j                  j                  |j                            = y wrp   )r!   content_typer   r   r   ).0fr>   s     r@   	<genexpr>zVDWARFStructs._create_lineprog_header.<locals>.FormattedEntry._parse.<locals>.<genexpr>q  s7      #= q~~t||/I/I!&&/QR#=s   AAformatted_entry)r   tupler   _parse)r>   streamcontextparserfieldss   `    r@   r   zCDWARFStructs._create_lineprog_header.<locals>.FormattedEntry._parsel  s    $$y0G;$T%6%6%BCF" #=!():):!;#= =F $$5??F=CGD--	9:}}VW55rA   N)__name__
__module____qualname__r   r   r   rA   r@   FormattedEntryr   b  s    
1

6rA   r  c                      | j                   dk\  S Nr   r   rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>x      3;;!+ rA   Dwarf_lineprog_headerr   r   r9   r   header_lengthminimum_instruction_lengthc                      | j                   dk\  S )Nr2   r  rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>  r  rA   "maximum_operations_per_instructionr*   default_is_stmt	line_base
line_rangeopcode_basec                      | j                   dz
  S )Nr*   )r  rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>  s    coo1 rA   standard_opcode_lengthsdirectory_entry_formatr   r   directory_entry_format_countdirectoriesdirectories_countfile_name_entry_formatfile_name_entry_format_count
file_namesfile_names_countc                      | j                   dk  S r
  r  rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>      3;;? rA   c                     | dk(  S )NrA   r   r   s     r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>  s
    SCZ rA   include_directoryc                      | j                   dk  S r
  r  rf   s    r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>  r!  rA   c                 2    t        | j                        dk(  S r   r   r   s     r@   rh   z6DWARFStructs._create_lineprog_header.<locals>.<lambda>  s    S]a%7 rA   )r   r   r   r   rq   Dwarf_lineprog_file_entryr    rn   rH   rG   rK   rN   r   r   r   ENUM_DW_LNCTr   r&   r  )r>   r  ver5s      r@   rW   z$DWARFStructs._create_lineprog_headerW  s    *0FO-fR&&{3&&w/&&x02 34*5&	6Y 	6, ,%+,C%%m4i(t  0 t  !89 o.9:+  !EF ./OOK(\*]+1""#<=?t3T//?P<PT//7H<HJ $$%CD	FG t"=$8PQ&&':;=> t3T//?P<PT//7H<HJ $$%CD	FG t"<7OP&&'9:<=
 *$//023 *$72245[1&
"rA   c                    t        d| j                  d      | j                  d      | j                  d      t	        d      | j                  d      | j                  d      | j                  d            | _        | j                  | _        | j                  d	k(  rt        d| j                  d      | j                  d      | j                  d      t	        d      | j                  d
      | j                  d      | j                  d      | j                  d      | j                  d      
      | _        t        d| j                  d      | j                  d      | j                  d      | j                  d            | _        y )NDwarf_CIE_headerr   CIE_idr   augmentationcode_alignment_factordata_alignment_factorreturn_address_registerr2   r9   r   Dwarf_FDE_headerCIE_pointerinitial_locationaddress_range)r   rn   rK   rG   r   rq   rr   r*  EH_CIE_headerr:   rM   r0  rD   s    r@   rX   z,DWARFStructs._create_callframe_entry_headers  sg    &'9%%h/h'Y'N#676789!; "22 "$*+=))(3!!(+  +'  0  0""#:;""#:;""#<=	%?D! !''9%%h/m,""#56""?3	!5rA   c                 F    t        | j                  d       |d            S )z1 Create a struct for DW_FORM_block<size>
        elemrt   )subconlength_field)r   rG   )r>   r8  s     r@   r   zDWARFStructs._make_block_struct  s'     ++F3!-b!13 	3rA   c                    t        dt        d      | j                  d      t        dd       t        d      | j	                  d      | j                  d      | j                  d	      | j                  d
      t        d      
      | _        t        | j                  d      | j                  d            x}| _
        t        d t        dt        d      t        | j                  d      fi t        t        t        dd t        d      t        d| j                  d            t        d| j                  d      | j                  d      |      t        d| j                  d      | j                  d      |      t        d| j                  d      | j                  d      |      t        d|      t        d| j!                  d            t        d| j!                  d       | j!                  d!      |      t        d"| j!                  d       | j                  d      |      d#	            t        d$      t        d%d&                   | _        t        d't        d      | j                  d(      | j                  d)            | _        y*)+zE Create a struct for debug_loclists CU header, DWARFv5, 7,29
        Dwarf_loclists_CU_header	cu_offsetr   is64c                     | j                   S rp   r<  rf   s    r@   rh   z7DWARFStructs._create_loclists_parsers.<locals>.<lambda>  
    chh rA   offset_after_lengthr   r9   r   offset_countoffset_table_offsetloc_exprrt   c                      | j                   dk(  S )NDW_LLE_end_of_list
entry_typer   s     r@   rh   z7DWARFStructs._create_loclists_parsers.<locals>.<lambda>      S^^/CC rA   entryentry_offsetrG  c                     | j                   S rp   rF  rf   s    r@   rh   z7DWARFStructs._create_loclists_parsers.<locals>.<lambda>  
    S^^ rA   end_of_listbase_addressxindexstartx_endxstart_index	end_indexr   start_offset
end_offsetdefault_locationbase_addressaddress	start_endstart_addressend_addressstart_length)	rE  DW_LLE_base_addressxDW_LLE_startx_endxDW_LLE_startx_lengthDW_LLE_offset_pairDW_LLE_default_locationDW_LLE_base_addressDW_LLE_start_endDW_LLE_start_lengthentry_end_offsetentry_lengthc                 4    | j                   | j                  z
  S rp   rd  rJ  rf   s    r@   rh   z7DWARFStructs._create_loclists_parsers.<locals>.<lambda>      #2F2FIYIY2Y rA   locview_pairbeginendN)r   r)   rn   r%   rH   rG   rI   r:  r   rq   +Dwarf_loclists_counted_location_descriptionr&   r   ENUM_DW_LLEr   r$   rM   Dwarf_loclists_entriesDwarf_locview_pair)r>   clds     r@   r]   z%DWARFStructs._create_loclists_parsers  s    )//I%%%m4&././i(^,45n-./	)1% BOtO_O_`jOkmqmm  AC  nD  BE  	Ed>&:C7^,T%%l3C{CfR!;06}0E06HZHZ[bHc0d06}dFXFXYfFgimi{i{  }H  jI  KN  1O06}dFXFXYfFgimi{i{  }E  jF  HK  1L06}dFXFXYgFhjnj|j|  ~J  kK  MP  1Q067I30O06~tG]G]^gGh0i06{DDZDZ[jDkmq  nD  nD  ER  nS  UX  1Y06~tG]G]^mGnpt  qC  qC  DL  qM  OR  1S
  /0n&YZ!\']#( #)($*<*<W*EtGYGYZ_G`#brA   c                    t        dt        d      | j                  d      t        dd       t        d      | j	                  d      | j                  d      | j                  d	      | j                  d
      t        d      
      | _        t        d t        dt        d      t        | j                  d      fi t        t        t        dd t        d      t        d| j                  d            t        d| j                  d      | j                  d            t        d| j                  d      | j                  d            t        d| j                  d      | j                  d            t        d| j                  d            t        d| j                  d      | j                  d            t        d | j                  d      | j                  d            d!            t        d"      t        d#d$                   | _        y )%NDwarf_rnglists_CU_headerr;  r   r<  c                     | j                   S rp   r>  rf   s    r@   rh   z7DWARFStructs._create_rnglists_parsers.<locals>.<lambda>  r?  rA   r@  r   r9   r   rA  rB  c                      | j                   dk(  S )NDW_RLE_end_of_listrF  r   s     r@   rh   z7DWARFStructs._create_rnglists_parsers.<locals>.<lambda>  rH  rA   rI  rJ  rG  rt   c                     | j                   S rp   rF  rf   s    r@   rh   z7DWARFStructs._create_rnglists_parsers.<locals>.<lambda>
  rL  rA   rM  rN  rO  rP  rQ  rR  r   rS  rT  rV  rW  rX  rY  rZ  r[  )ru  DW_RLE_base_addressxDW_RLE_startx_endxDW_RLE_startx_lengthDW_RLE_offset_pairDW_RLE_base_addressDW_RLE_start_endDW_RLE_start_lengthrd  re  c                 4    | j                   | j                  z
  S rp   rg  rf   s    r@   rh   z7DWARFStructs._create_rnglists_parsers.<locals>.<lambda>  rh  rA   )r   r)   rn   r%   rH   rG   rI   rr  r&   r   ENUM_DW_RLEr   r$   rq   rM   Dwarf_rnglists_entriesrD   s    r@   r^   z%DWARFStructs._create_rnglists_parsers  s   (./I%%%m4&././i(^,45n-./	)1% ';C7^,T%%l3C{CfR!;06}0E06HZHZ[bHc0d06}dFXFXYfFgimi{i{  }H  jI  1J06}dFXFXYfFgimi{i{  }E  jF  1G06}dFXFXYgFhjnj|j|  ~J  kK  1L06~tG]G]^gGh0i06{DDZDZ[jDkmq  nD  nD  ER  nS  1T06~tG]G]^mGnpt  qC  qC  DL  qM  1N	
 
 /0n&YZ\']#rA   )r   )r  r  r  __doc__r3   r5   rE   r;   rR   rS   rT   rU   r_   r`   rV   rY   rZ   r[   r\   rW   rX   r   r]   r^   __classcell__)r?   s   @r@   r-   r-      sw    6v N<4
+(Z3%)V8%/
:
xT
l5<3%bN]rA   r-   c                       e Zd ZdZd Zy)rk   z{ A standard Construct adapter that expects a sub-construct
        as a struct with one or two values (first, second).
    c                     |j                   dk  rd|d<   |j                   S |j                   dk(  rd|d<   |j                  S t        d|j                   z        )Nl     Fr<  re   Tz%Failed decoding initial length for %X)rc   ri   r   )r>   r   r  s      r@   _decodez_InitialLengthAdapter._decode  s\    99z!#GFO99yyJ&"&zz!$%LII&    rA   N)r  r  r  r  r  r   rA   r@   rk   rk     s    
 rA   rk   N)-logging.configr   	constructr   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%   common.construct_utilsr&   r'   r(   r)   enumsobjectr-   rk   r   rA   r@   <module>r     sa    '          ]6 ]D G  rA   