
    F\hbt              	          S r / SQrSSKrSSKrSSKrSSKrSSKJr  SSKrSSK	r	SSK
r
SSKrSSKJr  \R                  " SS\S9r\" 5       R%                  \R&                  5         " S	 S
5      rSr\
R,                  " S5      rS1S jrS r\
R,                  " S\
R4                  5      rS rS rS r " S S5      r " S S5      r  " S S\ 5      r!S r" " S S\#5      r$SSSSS .r%\&" 5       r' " S! S"5      r(S# r)\*\+\,\R                  \-4r. " S$ S%\&5      r/S& r0\1\2" \"\\!S'9\3\2" \0\(\/S'90r4S\2S(S).S* jr5S\2S(S).S+ jr6\1S,S(S(S-.S. jr7\1S(S,S(S/.S0 jr8g)2a>  plistlib.py -- a tool to generate and parse MacOSX .plist files.

The property list (.plist) file format is a simple XML pickle supporting
basic object types, like dictionaries, lists, numbers and strings.
Usually the top level object is a dictionary.

To write out a plist file, use the dump(value, file)
function. 'value' is the top level object, 'file' is
a (writable) file object.

To parse a plist from a file, use the load(file) function,
with a (readable) file object as the only argument. It
returns the top level object (again, usually a dictionary).

To work with plist data in bytes objects, you can use loads()
and dumps().

Values can be strings, integers, floats, booleans, tuples, lists,
dictionaries (but only with string keys), Data, bytes, bytearray, or
datetime.datetime objects.

Generate Plist example:

    import datetime
    import plistlib

    pl = dict(
        aString = "Doodah",
        aList = ["A", "B", 12, 32.1, [1, 2, 3]],
        aFloat = 0.1,
        anInt = 728,
        aDict = dict(
            anotherString = "<hello & hi there!>",
            aThirdString = "M\xe4ssig, Ma\xdf",
            aTrueValue = True,
            aFalseValue = False,
        ),
        someData = b"<binary gunk>",
        someMoreData = b"<lots of binary gunk>" * 10,
        aDate = datetime.datetime.now()
    )
    print(plistlib.dumps(pl).decode())

Parse Plist example:

    import plistlib

    plist = b'''<plist version="1.0">
    <dict>
        <key>foo</key>
        <string>bar</string>
    </dict>
    </plist>'''
    pl = plistlib.loads(plist)
    print(pl["foo"])
)InvalidFileExceptionFMT_XML
FMT_BINARYloaddumploadsdumpsUID    N)BytesIO)ParserCreatePlistFormatzFMT_XML FMT_BINARY)modulec                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r	   M   c                     [        U[        5      (       d  [        S5      eUS:  a  [        S5      eUS:  a  [        S5      eXl        g )Nzdata must be an int            zUIDs cannot be >= 2**64r
   UIDs must be positive)
isinstanceint	TypeError
ValueErrordataselfr   s     /usr/lib/python3.13/plistlib.py__init__UID.__init__N   sF    $$$1227?677!8455	    c                     U R                   $ Nr   r   s    r   	__index__UID.__index__W   s    yyr   c                 d    U R                   R                  < S[        U R                  5      < S3$ )N())	__class____name__reprr   r"   s    r   __repr__UID.__repr__Z   s    >>22DODDr   c                 4    U R                   U R                  44$ r    )r(   r   r"   s    r   
__reduce__UID.__reduce__]   s    ~~		|++r   c                 j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ r    )r   r	   NotImplementedr   )r   others     r   __eq__
UID.__eq__`   s(    %%%!!yyEJJ&&r   c                 ,    [        U R                  5      $ r    )hashr   r"   s    r   __hash__UID.__hash__e   s    DIIr   r!   N)r)   
__module____qualname____firstlineno__r   r#   r+   r.   r3   r7   __static_attributes__ r   r   r	   r	   M   s!    E,'
r   r	   s   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]c                     US-  S-  n/ n[        S[        U 5      U5       H.  nXXB-    nUR                  [        R                  " U5      5        M0     SR                  U5      $ )N      r
   r   )rangelenappendbinascii
b2a_base64join)smaxlinelength
maxbinsizepiecesichunks         r   _encode_base64rM   y   sa    "A%JF1c!fj)an%h))%01 * 88Fr   c                     [        U [        5      (       a%  [        R                  " U R	                  S5      5      $ [        R                  " U 5      $ )Nutf-8)r   strrD   
a2b_base64encode)rG   s    r   _decode_base64rS      s<    !S""188G#455 ""1%%r   z{(?P<year>\d\d\d\d)(?:-(?P<month>\d\d)(?:-(?P<day>\d\d)(?:T(?P<hour>\d\d)(?::(?P<minute>\d\d)(?::(?P<second>\d\d))?)?)?)?)?Zc                 $   Sn[         R                  U 5      R                  5       n/ nU H&  nX5   nUc    OUR                  [	        U5      5        M(     U(       a$  [
        R
                  " US[
        R                  06$ [
        R
                  " U6 $ )N)yearmonthdayhourminutesecondtzinfo)_dateParsermatch	groupdictrC   r   datetimeUTC)rG   aware_datetimeordergdlstkeyvals          r   _date_from_stringrg      s~    @E			1		'	'	)B
Cg;

3s8	 
   #;hll;;c""r   c                     U(       a  U R                  [        R                  5      n SU R                  U R                  U R
                  U R                  U R                  U R                  4-  $ )Nz%04d-%02d-%02dT%02d:%02d:%02dZ)	
astimezoner_   r`   rU   rV   rW   rX   rY   rZ   )dra   s     r   _date_to_stringrk      sO    LL&+		!((/  r   c                     [         R                  U 5      nUb  [        S5      eU R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  S	S
5      n U $ )Nz;strings can't contain control characters; use bytes insteadz

&z&amp;<z&lt;>z&gt;)_controlCharPatsearchr   replace)textms     r   _escaperw      s~    t$A} - . 	.<<%D<<d#D<<W%D<<V$D<<V$DKr   c                       \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rSrg)_PlistParser   c                 F    / U l         S U l        S U l        Xl        X l        g r    )stackcurrent_keyroot
_dict_type_aware_datetimer   	dict_typera   s      r   r   _PlistParser.__init__   s#    
	#-r   c                 F   [        5       U l        U R                  U R                  l        U R                  U R                  l        U R                  U R                  l        U R                  U R                  l	        U R                  R                  U5        U R                  $ r    )r   parserhandle_begin_elementStartElementHandlerhandle_end_elementEndElementHandlerhandle_dataCharacterDataHandlerhandle_entity_declEntityDeclHandler	ParseFiler~   )r   fileobjs     r   parse_PlistParser.parse   so    "n*.*C*C'(,(?(?%+/+;+;((,(?(?%g&yyr   c                     [        S5      e)Nz8XML entity declarations are not supported in plist files)r   )r   entity_nameis_parameter_entityvaluebase	system_id	public_idnotation_names           r   r   _PlistParser.handle_entity_decl   s     ##]^^r   c                 J    / U l         [        U SU-   S 5      nUb	  U" U5        g g )Nbegin_)r   getattr)r   elementattrshandlers       r   r   !_PlistParser.handle_begin_element   s.    	$7 2D9EN r   c                 :    [        U SU-   S 5      nUb  U" 5         g g )Nend_)r   )r   r   r   s      r   r   _PlistParser.handle_end_element   s%    $ 0$7I r   c                 :    U R                   R                  U5        g r    )r   rC   r   s     r   r   _PlistParser.handle_data   s    		r   c                    U R                   bg  [        U R                  S   [        5      (       d"  [	        SU R
                  R                  -  5      eXR                  S   U R                   '   S U l         g U R                  (       d  Xl        g [        U R                  S   [        5      (       d"  [	        SU R
                  R                  -  5      eU R                  S   R                  U5        g )Nzunexpected element at line %d)
r}   r   r|   dictr   r   CurrentLineNumberr~   listrC   r   r   s     r   
add_object_PlistParser.add_object   s    'djjnd33 !@!%!>!>"? @ @/4JJrN4++,#DIdjjnd33 !@!%!>!>"? @ @JJrN!!%(r   c                 J    SR                  U R                  5      n/ U l        U$ )N )rF   r   r   s     r   get_data_PlistParser.get_data   s     wwtyy!	r   c                 |    U R                  5       nU R                  U5        U R                  R                  U5        g r    )r   r   r|   rC   )r   r   rj   s      r   
begin_dict_PlistParser.begin_dict   s,    OO

!r   c                     U R                   (       a.  [        SU R                   U R                  R                  4-  5      eU R                  R                  5         g )Nz%missing value for key '%s' at line %d)r}   r   r   r   r|   popr"   s    r   end_dict_PlistParser.end_dict   sI    D"..t{{/L/LMN O O

r   c                     U R                   (       d"  [        U R                  S   [        5      (       d"  [	        SU R
                  R                  -  5      eU R                  5       U l         g )Nr   zunexpected key at line %d)r}   r   r|   r   r   r   r   r   r"   s    r   end_key_PlistParser.end_key   sO    :djjnd#C#C8![[::; < <==?r   c                 `    / nU R                  U5        U R                  R                  U5        g r    )r   r|   rC   )r   r   as      r   begin_array_PlistParser.begin_array   s%    

!r   c                 8    U R                   R                  5         g r    )r|   r   r"   s    r   	end_array_PlistParser.end_array  s    

r   c                 &    U R                  S5        g )NTr   r"   s    r   end_true_PlistParser.end_true  s    r   c                 &    U R                  S5        g )NFr   r"   s    r   	end_false_PlistParser.end_false	  s    r   c                     U R                  5       nUR                  S5      (       d  UR                  S5      (       a  U R                  [        US5      5        g U R                  [        U5      5        g )N0x0X   )r   
startswithr   r   )r   raws     r   end_integer_PlistParser.end_integer  sL    mmo>>$3>>$#7#7OOCRL)OOCH%r   c                 T    U R                  [        U R                  5       5      5        g r    )r   floatr   r"   s    r   end_real_PlistParser.end_real  s    dmmo./r   c                 B    U R                  U R                  5       5        g r    )r   r   r"   s    r   
end_string_PlistParser.end_string  s    (r   c                 T    U R                  [        U R                  5       5      5        g r    )r   rS   r   r"   s    r   end_data_PlistParser.end_data  s    t}}78r   c                 f    U R                  [        U R                  5       U R                  S95        g )N)ra   )r   rg   r   r   r"   s    r   end_date_PlistParser.end_date  s)    )$--/9=9M9MO 	Pr   )r   r   r}   r   r   r~   r|   NF)r)   r9   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   ry   ry      sh    ._
) 
+
&0)9Pr   ry   c                   :    \ rS rSrS	S jrS rS rS
S jrS rSr	g)_DumbXMLWriteri!  c                 6    Xl         / U l        X l        X0l        g r    )filer|   _indent_levelindent)r   r   indent_levelr   s       r   r   _DumbXMLWriter.__init__"  s    	
)r   c                     U R                   R                  U5        U R                  SU-  5        U =R                  S-  sl        g )Nz<%s>   )r|   rC   writelnr   r   r   s     r   begin_element_DumbXMLWriter.begin_element(  s6    

'"Vg%&ar   c                     U R                   S:  d   eU R                  R                  5       U:X  d   eU =R                   S-  sl         U R                  SU-  5        g )Nr
   r   z</%s>)r   r|   r   r   r   s     r   end_element_DumbXMLWriter.end_element-  sQ    !!A%%%zz~~7***aWw&'r   Nc           	          Ub*  [        U5      nU R                  SU< SU< SU< S35        g U R                  SU-  5        g )Nrp   rq   z</z<%s/>)rw   r   )r   r   r   s      r   simple_element_DumbXMLWriter.simple_element3  s7    ENELL'5'BC LL7*+r   c                 .   U(       as  [        U[        5      (       a  UR                  S5      nU R                  R	                  U R
                  U R                  -  5        U R                  R	                  U5        U R                  R	                  S5        g )NrO      
)r   rP   rR   r   writer   r   )r   lines     r   r   _DumbXMLWriter.writeln;  sa     $$${{7+IIOOD..<=IIOOD!		r   )r   r   r   r|   )r
   	r    )
r)   r9   r:   r;   r   r   r   r   r   r<   r=   r   r   r   r   !  s     
(,	r   r   c                   @    \ rS rSr  S
S jrS rS rS rS rS r	Sr
g	)_PlistWriteriG  c                     U(       a  UR                  [        5        [        R                  XX#5        XPl        X`l        Xpl        g r    )r   PLISTHEADERr   r   
_sort_keys	_skipkeysr   )r   r   r   r   writeHeader	sort_keysskipkeysra   s           r   r   _PlistWriter.__init__H  s3     JJ{#LA#!-r   c                 j    U R                  S5        U R                  U5        U R                  S5        g )Nz<plist version="1.0">z</plist>)r   write_valuer   s     r   r   _PlistWriter.writeS  s)    ./Z r   c                 V   [        U[        5      (       a  U R                  SU5        g USL a  U R                  S5        g USL a  U R                  S5        g [        U[        5      (       a1  SUs=::  a  S:  a  O  OU R                  SS	U-  5        g [	        U5      e[        U[
        5      (       a  U R                  S
[        U5      5        g [        U[        5      (       a  U R                  U5        g [        U[        [        45      (       a  U R                  U5        g [        U[        R                  5      (       a&  U R                  S[        XR                  5      5        g [        U[        [         45      (       a  U R#                  U5        g [%        S['        U5      -  5      e)NstringTtrueFfalsel         r   integerz%drealdatezunsupported type: %s)r   rP   r   r   OverflowErrorr   r*   r   
write_dictbytes	bytearraywrite_bytesr_   rk   r   tupler   write_arrayr   typer   s     r   r  _PlistWriter.write_valueX  sF   eS!!%0d]'e^(s##5*7*##Ite|<#E**u%%U4t$$OOE"y122U#x0011 /7K7K LN t}--U# 2T%[@AAr   c           
         U R                  S5        U =R                  S-  sl        [        SS[        U R                  R                  SS5      U R                  -  5      -
  5      n[        X5      R                  S5       H  nU(       d  M  U R                  U5        M     U =R                  S-  sl        U R                  S5        g )Nr   r   r   L      	s           r   )
r   r   maxrB   r   rt   rM   splitr   r   )r   r   rH   r   s       r   r  _PlistWriter.write_bytes{  s    6"aT[[((9D<N<NNOOQ #47==eDDtT" E 	a r   c                    U(       a  U R                  S5        U R                  (       a  [        UR                  5       5      nOUR                  5       nU H[  u  p4[	        U[
        5      (       d  U R                  (       a  M-  [        S5      eU R                  SU5        U R                  U5        M]     U R                  S5        g U R                  S5        g )Nr   keys must be stringsre   )r   r   sorteditemsr   rP   r   r   r   r  r   )r   rj   r!  re   r   s        r   r  _PlistWriter.write_dict  s    v&qwwy)	#
!#s++~~ #$:;;##E3/  ' $ V$ 'r   c                     U(       a=  U R                  S5        U H  nU R                  U5        M     U R                  S5        g U R                  S5        g )Narray)r   r  r   r   )r   r$  r   s      r   r  _PlistWriter.write_array  sI    w'  ' W% (r   )r   r   r   N)r
   r  r   TFF)r)   r9   r:   r;   r   r   r  r  r  r  r<   r=   r   r   r   r   G  s(    BC;@	.!
!BF!(()r   r   c                 v   SnU H  nU R                  U5      (       d  M    g   [        R                  S4[        R                  S4[        R                  S44 H]  u  p4U R                  U5      (       d  M  U H:  nX5R                  S5      R                  U5      -   nU S [        U5       U:X  d  M9      g   M_     g)N)s   <?xmls   <plistTrO   z	utf-16-bez	utf-16-leasciiF)r   codecsBOM_UTF8BOM_UTF16_BEBOM_UTF16_LEdecoderR   rB   )headerprefixespfxbomencodingstartprefixs          r   _is_fmt_xmlr4    s    $HS!!  '*$$k2$$k2   %%E<<077AAFls6{#v-   r   c                       \ rS rSrSS jrSrg)r   i  c                 .    [         R                  X5        g r    )r   r   )r   messages     r   r   InvalidFileException.__init__  s    D*r   r=   N)zInvalid file)r)   r9   r:   r;   r   r<   r=   r   r   r   r     s    +r   r   BHLQ)r      r?      c                   @    \ rS rSrSrSS jrS rS rS rS r	S r
S	rg
)_BinaryPlistParseri  z
Read or write a binary plist file, following the description of the binary
format.  Raise InvalidFileException in case of error, otherwise return the
root object.

see also: http://opensource.apple.com/source/CF/CF-744.18/CFBinaryPList.c
c                     Xl         X l        g r    )r   _aware_datimer   s      r   r   _BinaryPlistParser.__init__  s    #+r   c                     Xl         U R                   R                  S[        R                  5        U R                   R	                  S5      n[        U5      S:w  a
  [        5       e[        R                  " SU5      u  o0l	        pEnU R                   R                  U5        U R                  XC5      U l        [        /U-  U l        U R                  U5      $ ! [        [         [        R"                  [$        [&        4 a    [        5       ef = f)Ni    z>6xBBQQQ)_fpseekosSEEK_ENDreadrB   r   structunpack	_ref_size
_read_ints_object_offsets
_undefined_objects_read_objectOSError
IndexErrorerrorr  r   )r   fptraileroffset_sizenum_objects
top_objectoffset_table_offsets          r   r   _BinaryPlistParser.parse  s    	) HHHMM#r{{+hhmmB'G7|r!*,, j'2^[#HHMM-.#'??;#LD 'L;6DM$$Z00V\\= 	)&((	)s   CC 4Dc                     US:X  ad  U R                   R                  S5      S   S-  nSU-  nS[        U   -   n[        R                  " X@R                   R                  U5      5      S   $ U$ )z#return the size of the next object.   r   r
   r@   rq   )rF  rJ  _BINARY_FORMATrK  rL  )r   tokenLrv   rG   fs        r   	_get_size_BinaryPlistParser._get_size  sc    S=a #c)AQAnQ''A==HHMM!$45a88r   c                 *  ^^ U R                   R                  TU-  5      mT[        ;   a#  [        R                  " SU [        T    3T5      $ T(       a  [        T5      TU-  :w  a
  [        5       e[        UU4S j[        STU-  T5       5       5      $ )Nrq   c              3   Z   >#    U  H   n[         R                  TXT-    S 5      v   M"     g7f)bigN)r   
from_bytes).0rK   r   sizes     r   	<genexpr>0_BinaryPlistParser._read_ints.<locals>.<genexpr>  s/      <":Q QD(95AA":s   (+r
   )	rF  rJ  r_  rK  rL  rB   r   r  rA   )r   nri  r   s     `@r   rN  _BinaryPlistParser._read_ints  s    xx}}TAX&>!==1QCt(<'=!>EE3t9q0*,, <"'4!8T":< < <r   c                 8    U R                  XR                  5      $ r    )rN  rM  )r   rl  s     r   
_read_refs_BinaryPlistParser._read_refs	  s    q..11r   c                    U R                   U   nU[        La  U$ U R                  U   nU R                  R	                  U5        U R                  R                  S5      S   nUS-  US-  peUS:X  a  SnGOUS:X  a  SnGOUS:X  a  S	nGOUS:X  a  S
nGOUS:X  a6  [        R                  U R                  R                  SU-  5      SUS:  S9nGO`US:X  a5  [        R                  " SU R                  R                  S5      5      S   nGO%US:X  a5  [        R                  " SU R                  R                  S5      5      S   nGOUS:X  a  [        R                  " SU R                  R                  S5      5      S   nU R                  (       a&  [        R                  " SSS[        R                  S9nO[        R                  " SSS5      nU[        R                  " US9-   nGOIUS:X  aG  U R                  U5      n	U R                  R                  U	5      n[        U5      U	:w  a
  [!        5       eGOUS:X  aX  U R                  U5      n	U R                  R                  U	5      n
[        U
5      U	:w  a
  [!        5       eU
R#                  S5      nGOUS:X  a[  U R                  U5      S-  n	U R                  R                  U	5      n
[        U
5      U	:w  a
  [!        5       eU
R#                  S5      nGO=US:X  a<  [%        [        R                  U R                  R                  SU-   5      S5      5      nOUS:X  a\  U R                  U5      n	U R'                  U	5      n/ nX R                   U'   U H#  nUR)                  U R+                  U5      5        M%     OUS :X  a  U R                  U5      n	U R'                  U	5      nU R'                  U	5      nU R-                  5       nX R                   U'    [/        X5       H'  u  pU R+                  U5      X R+                  U5      '   M)     O
[!        5       eX R                   U'   U$ ! [0         a    [!        5       ef = f)!z`
read the object by reference.

May recursively read sub-objects (content of an array/dict/set)
r   r
      r^  Nr>  F	   Tr   r   rf  r@   signed"   z>fr?   #   z>d3     r[   )seconds@   P   r'  `   r=  utf-16be         )rQ  rP  rO  rF  rG  rJ  r   rg  rK  rL  rB  r_   r`   	timedeltarb  rB   r   r,  r	   ro  rC   rR  r   zipr   )r   refresultoffsettokentokenHr`  ra  epochrG   r   obj_refsxkey_refskos                   r   rR  _BinaryPlistParser._read_object  s    s##M%%c*fa #ut|D=Fd]Fd]F
 d]Ft^^^DHHMM!v+$>$)&A+ $ ?F d]]]4q)9:1=Fd]]]4q)9:1=Fd]dDHHMM!$45a8A !! ))$1X\\J ))$15X//::Ft^v&AXX]]1%F6{a*,,   t^v&A88==#D4yA~*,,[[)Ft^v&*A88==#D4yA~*,,[[,Ft^a&j(A5IJFt^v&Aq)HF!'MM#d//23  t^v&Aq)Hq)H__&F!'MM#-3DA373D3DQ3GF,,Q/0 4
 '((#c  -*,,-s   /6Q   Q)rB  r   rF  rO  rQ  rM  Nr   )r)   r9   r:   r;   __doc__r   r   rb  rN  ro  rR  r<   r=   r   r   r@  r@    s&    ,)2<2gr   r@  c                 .    U S:  a  gU S:  a  gU S:  a  gg)N   r      r=          r?   r>  r=   )counts    r   _count_to_sizer  u  s%    v~		 r   c                   <    \ rS rSrS
S jrS rS rS rS rS r	Sr
g	)_BinaryPlistWriteri  c                 4    Xl         X l        X0l        X@l        g r    )rF  r   r   r   )r   rV  r  r  ra   s        r   r   _BinaryPlistWriter.__init__  s    #!-r   c                    / U l         0 U l        0 U l        U R                  U5        [	        U R                   5      nS/U-  U l        [        U5      U l        [        U R                     U l	        U R                  R                  S5        U R                    H  nU R                  U5        M     U R                  U5      nU R                  R                  5       n[        U5      nS[        U   U-  -   nU R                  R                  [        R                   " U/U R
                  Q76 5        SnXU R                  UXE4n	U R                  R                  [        R                   " S/U	Q76 5        g )Nr
      bplist00rq   z	>5xBBBQQQ)_objlist	_objtable_objidtable_flattenrB   rO  r  rM  r_  _ref_formatrF  r   _write_object
_getrefnumtellrK  pack)
r   r   rY  objrZ  r[  rX  offset_formatsort_versionrW  s
             r   r   _BinaryPlistWriter.write  s4      	e $--( !s;'4)$..9 	{# ==Cs# ! __U+
"hhmmo$%89n[9KGGv{{=H43G3GHI t~~{
 	v{{;99:r   c                    [        U[        5      (       a  [        U5      U4U R                  ;   a  g O[	        U5      U R
                  ;   a  g [        U R                  5      nU R                  R                  U5        [        U[        5      (       a  X R                  [        U5      U4'   OX R
                  [	        U5      '   [        U[        5      (       a  / n/ nUR                  5       nU R                  (       a  [        U5      nU HZ  u  pg[        U[        5      (       d  U R                  (       a  M-  [        S5      eUR                  U5        UR                  U5        M\     [         R"                  " X45       H  nU R%                  U5        M     g [        U[&        [(        45      (       a  U H  nU R%                  U5        M     g g )Nr  )r   _scalarsr  r  idr  rB   r  rC   r   r!  r   r   rP   r   r   	itertoolschainr  r   r  )	r   r   refnumkeysvaluesr!  r  vr  s	            r   r  _BinaryPlistWriter._flatten  sd    eX&&UU#t~~5 6 Y$*** T]]#U#eX&&39NNDK/0*0RY' eT""DFKKMEu!!S))~~ #$:;;Aa   __T2a  3 e}--a   .r   c                     [        U[        5      (       a  U R                  [        U5      U4   $ U R                  [        U5         $ r    )r   r  r  r  r  r  r   s     r   r  _BinaryPlistWriter._getrefnum  s<    eX&&>>4;"677##BuI..r   c                 H   US:  a3  U R                   R                  [        R                  " SX-  5      5        g US:  a6  U R                   R                  [        R                  " SUS-  SU5      5        g US:  a6  U R                   R                  [        R                  " SUS-  SU5      5        g US	:  a6  U R                   R                  [        R                  " S
US-  SU5      5        g U R                   R                  [        R                  " SUS-  SU5      5        g )Nr^  z>Br  z>BBBr   r  z>BBH   r  z>BBL   z>BBQ   )rF  r   rK  r  )r   r  ri  s      r   _write_size_BinaryPlistWriter._write_size  s    "9HHNN6;;tU\:;F]HHNN6;;vus{D$GHG^HHNN6;;vus{D$GHG^HHNN6;;vus{D$GH HHNN6;;vus{D$GHr   c           	      F   U R                  U5      nU R                  R                  5       U R                  U'   Uc  U R                  R	                  S5        g USL a  U R                  R	                  S5        g USL a  U R                  R	                  S5        g [        U[        5      (       GaX  US:  a3   U R                  R	                  [        R                  " SSU5      5        g US	:  a2  U R                  R	                  [        R                  " S
SU5      5        g US:  a2  U R                  R	                  [        R                  " SSU5      5        g US:  a2  U R                  R	                  [        R                  " SSU5      5        g US:  a2  U R                  R	                  [        R                  " SSU5      5        g US:  a.  U R                  R	                  SUR                  SSSS9-   5        g [        U5      e[        U[        5      (       a2  U R                  R	                  [        R                  " SSU5      5        g [        U[        R                  5      (       a  U R                  (       aX  UR                  [        R                   5      nU[        R                  " SSS[        R                   S9-
  nUR#                  5       nO)U[        R                  " SSS5      -
  R#                  5       nU R                  R	                  [        R                  " SSU5      5        g [        U[$        [&        45      (       a7  U R)                  S[+        U5      5        U R                  R	                  U5        g [        U[,        5      (       aI   UR/                  S5      nU R)                  S [+        U5      5        U R                  R	                  U5        g [        U[2        5      (       Ga.  UR4                  S:  a  [7        S$5      eUR4                  S	:  a2  U R                  R	                  [        R                  " S
S%U5      5        g UR4                  S:  a2  U R                  R	                  [        R                  " SS&U5      5        g UR4                  S:  a2  U R                  R	                  [        R                  " SS'U5      5        g UR4                  S:  a2  U R                  R	                  [        R                  " SS(U5      5        g [        U5      e[        U[8        [:        45      (       a~  U Vs/ s H  opR                  U5      PM     nn[+        U5      n	U R)                  S)U	5        U R                  R	                  [        R                  " S*U R<                  U	-  -   /UQ76 5        g [        U[>        5      (       GaZ  / / pU R@                  (       a  [C        URE                  5       5      nOURE                  5       nU Hx  u  p[        U[,        5      (       d  U RF                  (       a  M-  [I        S+5      eU
RK                  U R                  U5      5        URK                  U R                  U5      5        Mz     [+        U
5      n	U R)                  S,U	5        U R                  R	                  [        R                  " S*U R<                  U	-  -   /U
Q76 5        U R                  R	                  [        R                  " S*U R<                  U	-  -   /UQ76 5        g [I        U5      e! [        R                   a    [        U5      S ef = f! [0         a3    UR/                  S!5      nU R)                  S"[+        U5      S#-  5         GNf = fs  snf )-N    F   Tr  r
   z>Bqr  r  z>BBr   r  z>BHr  r  z>BLr  l            z>BQr      rf  rt  z>Bdrw  ry  r   rz  rx  r|  r'  r}  r  r~  r=  r   r           r  rq   r  r  )&r  rF  r  rO  r   r   r   rK  r  rU  r  to_bytesr   r_   r   ri   r`   total_secondsr  r  r  rB   rP   rR   UnicodeEncodeErrorr	   r   r   r   r  r  r   r   r   r!  r   r   rC   )r   r   r  dtr  ra  tr  refsrG   keyRefsvalRefs	rootItemsr  r  s                  r   r   _BinaryPlistWriter._write_object  sd   ooe$$(HHMMOS!=HHNN7#e^HHNN7#d]HHNN7#s##qy9HHNN6;;udE#BC v{{5$>?v{{5$>?v{{5$>?v{{5$>?wE$)OOP#E**u%%HHNN6;;udE:;x0011##%%hll3h//a8<<PP((*X..tQ::IIKHHNN6;;udA67y122T3u:.HHNN5!s##4LL)  s5z2
 HHNN1s##zzA~ !899f$v{{5$>?g%v{{5$>?g%v{{5$>?g%v{{5$>?#E**e}--0561OOA&D6D	AT1%HHNN6;;sT-=-=-A'AIDIJt$$!2W"5;;=1	!KKM	!!!S))~~ #$:;;tq12tq12 " GAT1%HHNN6;;sT-=-=-A'ALGLMHHNN6;;sT-=-=-A'ALGLM E""g || 9'.D89F & 4LL,  s1v{34* 7s$   71\: ,] ^:!]9^^)
r   rF  rO  r  r  r  r  rM  r   r   Nr   )r)   r9   r:   r;   r   r   r  r  r  r  r<   r=   r   r   r  r    s$    .+;Z(!T/I c#r   r  c                     U S S S:H  $ )Nr>  r  r=   )r-  s    r   _is_fmt_binaryr  ^  s    "1:$$r   )detectr   writerFfmtr   ra   c                
   Uc^  U R                  S5      nU R                  S5        [        R                  5        H  nUS   " U5      (       d  M  US   n  O   [	        5       e[        U   S   nU" X#S9nUR                  U 5      $ )zRead a .plist file. 'fp' should be a readable and binary file object.
Return the unpacked root object (which usually is a dictionary).
rE  r
   r  r   )r   ra   )rJ  rG  _FORMATSr  r   r   )rV  r  r   ra   r-  infoPps           r   r   r   t  s     {

OO%DH~f%%N & '(( SM(#	I=A772;r   c                    [        U [        5      (       a%  U[        :X  a  [        S5      eU R	                  5       n [        U 5      n[        XAX#S9$ )ziRead a .plist file from a bytes object.
Return the unpacked root object (which usually is a dictionary).
z6value must be bytes-like object when fmt is FMT_BINARYr  )r   rP   r   r   rR   r   r   )r   r  r   ra   rV  s        r   r   r     sL     %* ) * *	ByPPr   T)r  r  r  ra   c                |    U[         ;  a  [        SU< 35      e[         U   S   " XUUS9nUR                  U 5        g)zOWrite 'value' to a .plist file. 'fp' should be a writable,
binary file object.
zUnsupported format: r  )r  r  ra   N)r  r   r   )r   rV  r  r  r  ra   r  s          r   r   r     sA    
 (3899c]8$Rx4BDF
LLr   r  r  r  ra   c          	      N    [        5       n[        XXUUS9  UR                  5       $ )z?Return a bytes object with the contents for a .plist file.
    r  )r   r   getvalue)r   r  r  r  ra   rV  s         r   r   r     s(     
B)&(;;=r   )r  )9r  __all__rD   r(  r_   enumior   r  rH  rerK  xml.parsers.expatr   Enumr)   r   globalsupdate__members__r	   r   compilerr   rM   rS   ASCIIr\   rg   rk   rw   ry   r   r   r4  r   r   r_  objectrP  r@  r  rP   r   r   r  r  r  r  r   r   r   r  r   r   r   r   r=   r   r   <module>r     s  7p       	 	  * ii';HM 	  (( ) B **IJ& jj  X  Z\  Zb  Zb  c#
mP mP`# #L])> ])@B+J + SSS1X
c cJ eX..6W#& W#t% T
 !!
 D , U 
Q #dU
  %4r   