
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aÜ}  ã                   @   s:  d ddddddddd	d
ddgZ ddlZddlZddlZddlZddlZddlmZ ddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ejdded�Zeƒ  ej¡ ejdd„ ƒZdd „ Zdd„ Zdd„ Zdd„ ZG dd„ dƒZG dd„ dƒZdZe
 d¡Z dKd d!„Z!d"d#„ Z"e
 d$e
j#¡Z$d%d&„ Z%d'd(„ Z&d)d*„ Z'G d+d,„ d,ƒZ(G d-d.„ d.ƒZ)G d/d0„ d0e)ƒZ*d1d2„ Z+G d3d„ de,ƒZ-d4d5d6d7d8œZ.e/ƒ Z0G d9d:„ d:ƒZ1d;d<„ Z2e3e4e5eje6fZ7G d=d>„ d>e/ƒZ8d?d@„ Z9e:e;e+e(e*dA�e<e;e9e1e8dA�iZ=ddBe;dCœdDd„Z>ddBe;dCœdEd
„Z?e:dBdFdGœdHd	„Z@e:dFdBdIœdJd„ZAdS )LÚ	readPlistÚ
writePlistÚreadPlistFromBytesÚwritePlistToBytesÚDataÚInvalidFileExceptionÚFMT_XMLÚ
FMT_BINARYÚloadÚdumpÚloadsÚdumpsÚUIDé    N)ÚBytesIO)Úwarn)ÚParserCreateÚPlistFormatzFMT_XML FMT_BINARY)Úmodulec              	   c   s2   t | tƒr(t| |ƒ�}|V  W 5 Q R X n| V  d S ©N)Ú
isinstanceÚstrÚopen)Ú
pathOrFileÚmodeÚfp© r   ú-/opt/alt/python38/lib64/python3.8/plistlib.pyÚ_maybe_openO   s    
r   c              
   C   s<   t dtdƒ t| dƒ�}t|d dd�W  5 Q R £ S Q R X d S )Nz8The readPlist function is deprecated, use load() insteadé   ÚrbF©ÚfmtÚuse_builtin_types)r   ÚDeprecationWarningr   r	   )r   r   r   r   r   r   Y   s     ÿc              	   C   s8   t dtdƒ t|dƒ�}t| |tddd� W 5 Q R X d S )Nz9The writePlist function is deprecated, use dump() insteadr   ÚwbTF©r!   Ú	sort_keysÚskipkeys)r   r#   r   r
   r   )Úvaluer   r   r   r   r   r   f   s     ÿc                 C   s   t dtdƒ tt| ƒd dd�S )NzBThe readPlistFromBytes function is deprecated, use loads() insteadr   Fr    )r   r#   r	   r   ©Údatar   r   r   r   s   s
     ÿc                 C   s,   t dtdƒ tƒ }t| |tddd� | ¡ S )NzAThe writePlistToBytes function is deprecated, use dumps() insteadr   TFr%   )r   r#   r   r
   r   Úgetvalue)r(   Úfr   r   r   r   ~   s     ÿc                   @   s:   e Zd Zdd„ Zedd„ ƒZddd„Zdd	„ Zd
d„ ZdS )r   c                 C   s   t |tƒstdƒ‚|| _d S )Nzdata must be as bytes)r   ÚbytesÚ	TypeErrorr*   ©Úselfr*   r   r   r   Ú__init__’   s    
zData.__init__c                 C   s   | t |ƒƒS r   )Ú_decode_base64)Úclsr*   r   r   r   Ú
fromBase64—   s    zData.fromBase64éL   c                 C   s   t | j|ƒS r   )Ú_encode_base64r*   )r0   Úmaxlinelengthr   r   r   ÚasBase64�   s    zData.asBase64c                 C   s4   t || jƒr| j|jkS t |tƒr,| j|kS tS d S r   )r   Ú	__class__r*   r-   ÚNotImplemented©r0   Úotherr   r   r   Ú__eq__    s
    

zData.__eq__c                 C   s   d| j jt| jƒf S ©Nz%s(%s)©r9   Ú__name__Úreprr*   ©r0   r   r   r   Ú__repr__¨   s    zData.__repr__N)r5   )	r@   Ú
__module__Ú__qualname__r1   Úclassmethodr4   r8   r=   rC   r   r   r   r   r   ‹   s   

c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r   c                 C   s<   t |tƒstdƒ‚|dkr"tdƒ‚|dk r2tdƒ‚|| _d S )Nzdata must be an intì            zUIDs cannot be >= 2**64r   úUIDs must be positive)r   Úintr.   Ú
ValueErrorr*   r/   r   r   r   r1   ³   s    
zUID.__init__c                 C   s   | j S r   r)   rB   r   r   r   Ú	__index__¼   s    zUID.__index__c                 C   s   d| j jt| jƒf S r>   r?   rB   r   r   r   rC   ¿   s    zUID.__repr__c                 C   s   | j | jffS r   )r9   r*   rB   r   r   r   Ú
__reduce__Â   s    zUID.__reduce__c                 C   s   t |tƒstS | j|jkS r   )r   r   r:   r*   r;   r   r   r   r=   Å   s    
z
UID.__eq__c                 C   s
   t | jƒS r   )Úhashr*   rB   r   r   r   Ú__hash__Ê   s    zUID.__hash__N)	r@   rD   rE   r1   rK   rC   rL   r=   rN   r   r   r   r   r   ²   s   	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]r5   c                 C   sP   |d d }g }t dt| ƒ|ƒD ]$}| ||| … }| t |¡¡ q d |¡S )Né   é   r   ó    )ÚrangeÚlenÚappendÚbinasciiZ
b2a_base64Újoin)Úsr7   Z
maxbinsizeÚpiecesÚiÚchunkr   r   r   r6   ß   s    r6   c                 C   s(   t | tƒrt |  d¡¡S t | ¡S d S )Núutf-8)r   r   rU   Z
a2b_base64Úencode)rW   r   r   r   r2   è   s    
r2   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                 C   sL   d}t  | ¡ ¡ }g }|D ]&}|| }|d kr2 qB| t|ƒ¡ qtj|Ž S )N©ZyearZmonthZdayZhourZminuteÚsecond)Ú_dateParserÚmatchÚ	groupdictrT   rI   Údatetime)rW   ÚorderZgdZlstÚkeyÚvalr   r   r   Ú_date_from_stringõ   s    rf   c                 C   s    d| j | j| j| j| j| jf S )Nz%04d-%02d-%02dT%02d:%02d:%02dZr]   )Údr   r   r   Ú_date_to_string  s        þrh   c                 C   sZ   t  | ¡}|d k	rtdƒ‚|  dd¡} |  dd¡} |  dd¡} |  dd¡} |  d	d
¡} | S )Nz<strings can't contains control characters; use bytes insteadz
Ú
úú&z&amp;ú<z&lt;ú>z&gt;)Ú_controlCharPatÚsearchrJ   Úreplace)ÚtextÚmr   r   r   Ú_escape  s    
rs   c                   @   s¬   e Z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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 )*Ú_PlistParserc                 C   s"   g | _ d | _d | _|| _|| _d S r   )ÚstackÚcurrent_keyÚrootÚ_use_builtin_typesÚ
_dict_type©r0   r"   Ú	dict_typer   r   r   r1     s
    z_PlistParser.__init__c                 C   sB   t ƒ | _| j| j_| j| j_| j| j_| j| j_	| j 
|¡ | jS r   )r   ÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚhandle_dataZCharacterDataHandlerÚhandle_entity_declZEntityDeclHandlerZ	ParseFilerw   )r0   Zfileobjr   r   r   Úparse  s    



z_PlistParser.parsec                 C   s   t dƒ‚d S )Nz8XML entity declarations are not supported in plist files)r   )r0   Zentity_nameZis_parameter_entityr(   ÚbaseZ	system_idZ	public_idZnotation_namer   r   r   r€   $  s    z_PlistParser.handle_entity_declc                 C   s*   g | _ t| d| d ƒ}|d k	r&||ƒ d S )NZbegin_)r*   Úgetattr)r0   ÚelementÚattrsÚhandlerr   r   r   r}   *  s    z!_PlistParser.handle_begin_elementc                 C   s"   t | d| d ƒ}|d k	r|ƒ  d S )NZend_)rƒ   )r0   r„   r†   r   r   r   r~   0  s    z_PlistParser.handle_end_elementc                 C   s   | j  |¡ d S r   )r*   rT   r/   r   r   r   r   5  s    z_PlistParser.handle_datac                 C   sŒ   | j d k	rFt| jd ti ƒƒs.td| jj ƒ‚|| jd | j < d | _ nB| jsT|| _n4t| jd tg ƒƒsxtd| jj ƒ‚| jd  |¡ d S )Néÿÿÿÿzunexpected element at line %d)	rv   r   ru   ÚtyperJ   r|   ÚCurrentLineNumberrw   rT   ©r0   r(   r   r   r   Ú
add_object8  s    
ÿÿz_PlistParser.add_objectc                 C   s   d  | j¡}g | _|S )NÚ )rV   r*   r/   r   r   r   Úget_dataH  s    z_PlistParser.get_datac                 C   s"   |   ¡ }|  |¡ | j |¡ d S r   )ry   r‹   ru   rT   )r0   r…   rg   r   r   r   Ú
begin_dictO  s    
z_PlistParser.begin_dictc                 C   s*   | j rtd| j | jjf ƒ‚| j ¡  d S )Nz%missing value for key '%s' at line %d)rv   rJ   r|   r‰   ru   ÚpoprB   r   r   r   Úend_dictT  s
    ÿz_PlistParser.end_dictc                 C   s8   | j st| jd ti ƒƒs*td| jj ƒ‚|  ¡ | _ d S )Nr‡   zunexpected key at line %d)rv   r   ru   rˆ   rJ   r|   r‰   r�   rB   r   r   r   Úend_keyZ  s
    ÿz_PlistParser.end_keyc                 C   s   g }|   |¡ | j |¡ d S r   )r‹   ru   rT   )r0   r…   Úar   r   r   Úbegin_array`  s    
z_PlistParser.begin_arrayc                 C   s   | j  ¡  d S r   )ru   r�   rB   r   r   r   Ú	end_arraye  s    z_PlistParser.end_arrayc                 C   s   |   d¡ d S )NT©r‹   rB   r   r   r   Úend_trueh  s    z_PlistParser.end_truec                 C   s   |   d¡ d S )NFr•   rB   r   r   r   Ú	end_falsek  s    z_PlistParser.end_falsec                 C   s@   |   ¡ }| d¡s| d¡r.|  t|dƒ¡ n|  t|ƒ¡ d S )NZ0xZ0Xé   )r�   Ú
startswithr‹   rI   )r0   Úrawr   r   r   Úend_integern  s    z_PlistParser.end_integerc                 C   s   |   t|  ¡ ƒ¡ d S r   )r‹   Úfloatr�   rB   r   r   r   Úend_realu  s    z_PlistParser.end_realc                 C   s   |   |  ¡ ¡ d S r   )r‹   r�   rB   r   r   r   Ú
end_stringx  s    z_PlistParser.end_stringc                 C   s2   | j r|  t|  ¡ ƒ¡ n|  t |  ¡ ¡¡ d S r   )rx   r‹   r2   r�   r   r4   rB   r   r   r   Úend_data{  s    z_PlistParser.end_datac                 C   s   |   t|  ¡ ƒ¡ d S r   )r‹   rf   r�   rB   r   r   r   Úend_date‚  s    z_PlistParser.end_dateN)r@   rD   rE   r1   r�   r€   r}   r~   r   r‹   r�   rŽ   r�   r‘   r“   r”   r–   r—   r›   r�   rž   rŸ   r    r   r   r   r   rt     s(   	rt   c                   @   s8   e Zd Zddd„Zdd„ Zdd„ Zdd
d„Zdd„ Zd	S )Ú_DumbXMLWriterr   ú	c                 C   s   || _ g | _|| _|| _d S r   )Úfileru   Ú_indent_levelÚindent)r0   r£   Úindent_levelr¥   r   r   r   r1   ‡  s    z_DumbXMLWriter.__init__c                 C   s,   | j  |¡ |  d| ¡ |  jd7  _d S )Nz<%s>é   )ru   rT   Úwritelnr¤   ©r0   r„   r   r   r   Úbegin_element�  s    z_DumbXMLWriter.begin_elementc                 C   s    |  j d8  _ |  d| ¡ d S )Nr§   z</%s>)r¤   r¨   r©   r   r   r   Úend_element’  s    z_DumbXMLWriter.end_elementNc                 C   s8   |d k	r&t |ƒ}|  d|||f ¡ n|  d| ¡ d S )Nz<%s>%s</%s>z<%s/>)rs   r¨   )r0   r„   r(   r   r   r   Úsimple_element˜  s    z_DumbXMLWriter.simple_elementc                 C   sH   |r8t |tƒr| d¡}| j | j| j ¡ | j |¡ | j d¡ d S )Nr[   ó   
)r   r   r\   r£   Úwriter¤   r¥   )r0   Úliner   r   r   r¨      s    

z_DumbXMLWriter.writeln)r   r¢   )N)r@   rD   rE   r1   rª   r«   r¬   r¨   r   r   r   r   r¡   †  s
   

r¡   c                   @   sF   e Zd Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Z	dS )Ú_PlistWriterr   ó   	r§   TFc                 C   s.   |r|  t¡ t | |||¡ || _|| _d S r   )r®   ÚPLISTHEADERr¡   r1   Ú
_sort_keysÚ	_skipkeys)r0   r£   r¦   r¥   ZwriteHeaderr&   r'   r   r   r   r1   ­  s
    
z_PlistWriter.__init__c                 C   s"   |   d¡ |  |¡ |   d¡ d S )Nz<plist version="1.0">z</plist>)r¨   Úwrite_valuerŠ   r   r   r   r®   ·  s    

z_PlistWriter.writec                 C   s4  t |tƒr|  d|¡ �n|dkr0|  d¡ �n |dkrD|  d¡ nìt |tƒr‚d|  krbdk rxn n|  dd	| ¡ nt|ƒ‚n®t |tƒrž|  d
t|ƒ¡ n’t |tƒr´|  |¡ n|t |t	ƒrÊ|  
|¡ nft |ttfƒrä|  |¡ nLt |tjƒ�r|  dt|ƒ¡ n,t |ttfƒ�r |  |¡ ntdt|ƒ ƒ‚d S )NÚstringTÚtrueFZfalselûÿÿÿ         rG   Zintegerz%dÚrealÚdatezunsupported type: %s)r   r   r¬   rI   ÚOverflowErrorrœ   rA   ÚdictÚ
write_dictr   Ú
write_datar-   Ú	bytearrayÚwrite_bytesrb   rh   ÚtupleÚlistÚwrite_arrayr.   rˆ   rŠ   r   r   r   rµ   ¼  s.    





z_PlistWriter.write_valuec                 C   s   |   |j¡ d S r   )r¿   r*   r/   r   r   r   r½   á  s    z_PlistWriter.write_datac                 C   sz   |   d¡ |  jd8  _tddt| j dd¡| j ƒ ƒ}t||ƒ d¡D ]}|rJ|  |¡ qJ|  jd7  _|  	d¡ d S )Nr*   r§   r˜   r5   r±   s           r­   )
rª   r¤   ÚmaxrS   r¥   rp   r6   Úsplitr¨   r«   )r0   r*   r7   r¯   r   r   r   r¿   ä  s    
þz_PlistWriter.write_bytesc                 C   s‚   |rt|   d¡ | jr"t| ¡ ƒ}n| ¡ }|D ]8\}}t|tƒsP| jrHq.tdƒ‚|  d|¡ |  	|¡ q.|  
d¡ n
|  d¡ d S )Nr»   úkeys must be stringsrd   )rª   r³   ÚsortedÚitemsr   r   r´   r.   r¬   rµ   r«   )r0   rg   rÇ   rd   r(   r   r   r   r¼   ñ  s    

z_PlistWriter.write_dictc                 C   s<   |r.|   d¡ |D ]}|  |¡ q|  d¡ n
|  d¡ d S )NÚarray)rª   rµ   r«   r¬   )r0   rÈ   r(   r   r   r   rÂ     s    
z_PlistWriter.write_arrayN)r   r±   r§   TF)
r@   rD   rE   r1   r®   rµ   r½   r¿   r¼   rÂ   r   r   r   r   r°   ¬  s           þ

%r°   c                 C   sŽ   d}|D ]}|   |¡r dS qtjdftjdftjdffD ]N\}}|   |¡sNq:|D ]4}|| d¡ |¡ }| d t|ƒ… |krR  dS qRq:dS )N)s   <?xmls   <plistTr[   z	utf-16-bez	utf-16-leÚasciiF)r™   ÚcodecsÚBOM_UTF8ÚBOM_UTF16_BEÚBOM_UTF16_LEÚdecoder\   rS   )ÚheaderÚprefixesZpfxZbomÚencodingÚstartÚprefixr   r   r   Ú_is_fmt_xml  s    
ý
rÔ   c                   @   s   e Zd Zddd„ZdS )r   úInvalid filec                 C   s   t  | |¡ d S r   )rJ   r1   )r0   Úmessager   r   r   r1   2  s    zInvalidFileException.__init__N)rÕ   )r@   rD   rE   r1   r   r   r   r   r   1  s   ÚBÚHÚLÚQ)r§   r   rO   é   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú_BinaryPlistParserc                 C   s   || _ || _d S r   )rx   ry   rz   r   r   r   r1   A  s    z_BinaryPlistParser.__init__c                 C   sª   z~|| _ | j  dtj¡ | j  d¡}t|ƒdkr6tƒ ‚t d|¡\}| _	}}}| j  |¡ |  
||¡| _tg| | _|  |¡W S  tttjttfk
r¤   tƒ ‚Y nX d S )Niàÿÿÿé    z>6xBBQQQ)Ú_fpÚseekÚosÚSEEK_ENDÚreadrS   r   ÚstructÚunpackÚ	_ref_sizeÚ
_read_intsÚ_object_offsetsÚ
_undefinedÚ_objectsÚ_read_objectÚOSErrorÚ
IndexErrorÚerrorrº   rJ   )r0   r   ÚtrailerÚoffset_sizeÚnum_objectsÚ
top_objectÚoffset_table_offsetr   r   r   r�   E  s*    
ý   ÿz_BinaryPlistParser.parsec                 C   sL   |dkrH| j  d¡d d@ }d|> }dt|  }t || j  |¡¡d S |S )Né   r§   r   rP   rm   )rÞ   râ   Ú_BINARY_FORMATrã   rä   )r0   ÚtokenLrr   rW   r,   r   r   r   Ú	_get_size^  s    z_BinaryPlistParser._get_sizec                    st   | j  ˆ| ¡‰ ˆtkr2t d|› tˆ › �ˆ ¡S ˆrFtˆ ƒˆ| krLtƒ ‚t‡ ‡fdd„tdˆ| ˆƒD ƒƒS d S )Nrm   c                 3   s&   | ]}t  ˆ ||ˆ … d ¡V  qdS )ÚbigN)rI   Ú
from_bytes)Ú.0rY   ©r*   Úsizer   r   Ú	<genexpr>o  s   ÿz0_BinaryPlistParser._read_ints.<locals>.<genexpr>r   )	rÞ   râ   rô   rã   rä   rS   r   rÀ   rR   )r0   Únrû   r   rú   r   ræ   h  s    ÿz_BinaryPlistParser._read_intsc                 C   s   |   || j¡S r   )ræ   rå   )r0   rý   r   r   r   Ú
_read_refsr  s    z_BinaryPlistParser._read_refsc                    s  ˆ j | }|tk	r|S ˆ j| }ˆ j |¡ ˆ j d¡d }|d@ |d@  }}|dkr^d }�n°|dkrnd}�n |dkr~d}�n�|dkrŽd	}�n€|d
krºtjˆ j d|> ¡d|dkd�}�nT|dkrÞt 	dˆ j d¡¡d }�n0|dk�rt 	dˆ j d¡¡d }�n
|dk�rDt 	dˆ j d¡¡d }t
 
ddd¡t
j|d� }�nÊ|dk�rŒˆ  |¡}ˆ j |¡}t|ƒ|k�rxtƒ ‚ˆ j�st|ƒ}�n‚|dk�rÎˆ  |¡}ˆ j |¡}	t|	ƒ|k�rÀtƒ ‚|	 d¡}�n@|dk�rˆ  |¡d }ˆ j |¡}	t|	ƒ|k�rtƒ ‚|	 d¡}nü|dk�r:tt ˆ j d| ¡d¡ƒ}nÔ|dk�r€ˆ  |¡}ˆ  |¡}
g }|ˆ j |< | ‡ fdd„|
D ƒ¡ nŽ|d k�rˆ  |¡}ˆ  |¡}ˆ  |¡}
ˆ  ¡ }|ˆ j |< z.t||
ƒD ]\}}ˆ  |¡|ˆ  |¡< �qÆW n tk
�r   tƒ ‚Y nX ntƒ ‚|ˆ j |< |S )!Nr§   r   éð   ró   rÛ   Fé	   TrQ   r˜   r÷   rP   ©Zsignedé"   z>frO   é#   z>dé3   éÑ  )Zsecondsé@   éP   rÉ   é`   r   úutf-16beé€   é    c                 3   s   | ]}ˆ   |¡V  qd S r   )rê   )rù   ÚxrB   r   r   rü   Ã  s     z2_BinaryPlistParser._read_object.<locals>.<genexpr>éÐ   )ré   rè   rç   rÞ   rß   râ   rI   rø   rã   rä   rb   Z	timedeltarö   rS   r   rx   r   rÎ   r   rþ   Úextendry   Úziprê   r.   )r0   ÚrefÚresultÚoffsetÚtokenZtokenHrõ   r,   rW   r*   Zobj_refsZkey_refsÚkÚor   rB   r   rê   u  sŒ    

 ÿ



ÿ















z_BinaryPlistParser._read_objectN)	r@   rD   rE   r1   r�   rö   ræ   rþ   rê   r   r   r   r   rÜ   9  s   

rÜ   c                 C   s,   | dk rdS | dk rdS | dk r$dS dS d S )Né   r§   é   r   ì        rO   rÛ   r   )Úcountr   r   r   Ú_count_to_sizeÜ  s    r  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú_BinaryPlistWriterc                 C   s   || _ || _|| _d S r   )rÞ   r³   r´   )r0   r   r&   r'   r   r   r   r1   ì  s    z_BinaryPlistWriter.__init__c           
      C   sà   g | _ i | _i | _|  |¡ t| j ƒ}dg| | _t|ƒ| _t| j | _	| j
 d¡ | j D ]}|  |¡ qZ|  |¡}| j
 ¡ }t|ƒ}dt| |  }| j
 tj|f| jžŽ ¡ d}||| j|||f}	| j
 tjd|	žŽ ¡ d S )Nr   ó   bplist00rm   ú	>5xBBBQQQ)r  )Ú_objlistÚ	_objtableÚ_objidtableÚ_flattenrS   rç   r  rå   rô   Ú_ref_formatrÞ   r®   Ú_write_objectÚ
_getrefnumÚtellrã   Úpack)
r0   r(   rð   Úobjrñ   rò   rï   Zoffset_formatZsort_versionrî   r   r   r   r®   ñ  s2    





    þz_BinaryPlistWriter.writec           	      C   sr  t |tƒr"t|ƒ|f| jkrZd S n8t |tƒrHt|jƒ|jf| jkrZd S nt|ƒ| jkrZd S t| j	ƒ}| j	 
|¡ t |tƒrŽ|| jt|ƒ|f< n0t |tƒr°|| jt|jƒ|jf< n|| jt|ƒ< t |tƒ�rHg }g }| ¡ }| jrèt|ƒ}|D ]:\}}t |tƒ�s| j�r
qìtdƒ‚| 
|¡ | 
|¡ qìt ||¡D ]}|  |¡ �q4n&t |ttfƒ�rn|D ]}|  |¡ �q\d S )NrÅ   )r   Ú_scalarsrˆ   r  r   r*   Úidr   rS   r  rT   r»   rÇ   r³   rÆ   r   r´   r.   Ú	itertoolsÚchainr!  rÁ   rÀ   )	r0   r(   ZrefnumÚkeysÚvaluesrÇ   r  Úvr  r   r   r   r!    sB    





z_BinaryPlistWriter._flattenc                 C   sN   t |tƒr| jt|ƒ|f S t |tƒr<| jt|jƒ|jf S | jt|ƒ S d S r   )r   r(  r  rˆ   r   r*   r   r)  rŠ   r   r   r   r$  N  s
    

z_BinaryPlistWriter._getrefnumc                 C   s´   |dk r"| j  t d||B ¡¡ nŽ|dk rH| j  t d|dB d|¡¡ nh|dk rn| j  t d|dB d|¡¡ nB|d	k r”| j  t d
|dB d|¡¡ n| j  t d|dB d|¡¡ d S )Nró   z>Br  z>BBBr˜   r  z>BBHé   r  z>BBLé   z>BBQé   )rÞ   r®   rã   r&  )r0   r  rû   r   r   r   Ú_write_sizeV  s    z_BinaryPlistWriter._write_sizec                    s¢  ˆ   |¡}ˆ j ¡ ˆ j|< |d kr2ˆ j d¡ �nl|dkrJˆ j d¡ �nT|dkrbˆ j d¡ �n<t|tƒ�rl|dk r´zˆ j t dd|¡¡ W n  tj	k
r°   t
|ƒd ‚Y nX n´|d	k rÔˆ j t d
d|¡¡ n”|dk rôˆ j t dd|¡¡ nt|dk �rˆ j t dd|¡¡ nR|dk �r8ˆ j t dd|¡¡ n0|dk �r`ˆ j d|jdddd� ¡ nt
|ƒ‚�n2t|tƒ�r’ˆ j t dd|¡¡ �nt|tjƒ�rÐ|t ddd¡  ¡ }ˆ j t dd|¡¡ �nÎt|tƒ�r ˆ  dt|jƒ¡ ˆ j |j¡ �nžt|ttfƒ�r0ˆ  dt|ƒ¡ ˆ j |¡ �nnt|tƒ�r z| d¡}ˆ  dt|ƒ¡ W n4 tk
�rŽ   | d ¡}ˆ  d!t|ƒd" ¡ Y nX ˆ j |¡ �nþt|tƒ�r^|jdk �rÂtd#ƒ‚n˜|jd	k �ræˆ j t d
d$|¡¡ nt|jdk �r
ˆ j t dd%|¡¡ nP|jdk �r.ˆ j t dd&|¡¡ n,|jdk �rRˆ j t dd'|¡¡ nt
|ƒ‚�n@t|ttfƒ�r¸‡ fd(d)„|D ƒ}t|ƒ}ˆ  d*|¡ ˆ j tjd+ˆ j|  f|žŽ ¡ næt|tƒ�r–g g  }}ˆ j�rät|  ¡ ƒ}	n|  ¡ }	|	D ]J\}
}t|
tƒ�sˆ j!�r�qðt"d,ƒ‚| #ˆ   |
¡¡ | #ˆ   |¡¡ �qðt|ƒ}ˆ  d-|¡ ˆ j tjd+ˆ j|  f|žŽ ¡ ˆ j tjd+ˆ j|  f|žŽ ¡ nt"|ƒ‚d S ).Nó    Fó   Tr±   r   z>Bqr1  r  z>BBr˜   r  z>BHr/  r  z>BLr0  l            z>BQrG   ó   r÷   r  z>Bdr  r  r§   r  r  rÉ   r  r	  r  r   rH   r
  é�   éƒ   é‡   c                    s   g | ]}ˆ   |¡‘qS r   )r$  )rù   r  rB   r   r   Ú
<listcomp>­  s     z4_BinaryPlistWriter._write_object.<locals>.<listcomp>r  rm   rÅ   r  )$r$  rÞ   r%  rç   r®   r   rI   rã   r&  rí   rº   Úto_bytesrœ   rb   Ztotal_secondsr   r2  rS   r*   r-   r¾   r   r\   ÚUnicodeEncodeErrorr   rJ   rÁ   rÀ   r"  r»   r³   rÆ   rÇ   r´   r.   rT   )r0   r(   r  r,   ÚtZrefsrW   ZkeyRefsZvalRefsZ	rootItemsr  r.  r   rB   r   r#  f  sœ    






$
"$z _BinaryPlistWriter._write_objectN)	r@   rD   rE   r1   r®   r!  r$  r2  r#  r   r   r   r   r  ë  s   -0r  c                 C   s   | d d… dkS )NrÛ   r  r   )rÏ   r   r   r   Ú_is_fmt_binaryË  s    r=  )Údetectr|   ÚwriterT©r!   r"   r{   c                C   sl   |d krJ|   d¡}|  d¡ t ¡ D ]}|d |ƒr$|d } qVq$tƒ ‚nt| d }|||d�}| | ¡S )NrÝ   r   r>  r|   )r"   r{   )râ   rß   Ú_FORMATSr-  r   r�   )r   r!   r"   r{   rÏ   ÚinfoÚPÚpr   r   r   r	   á  s    

c                C   s   t | ƒ}t||||d�S )Nr@  )r   r	   )r(   r!   r"   r{   r   r   r   r   r   ÷  s       ÿFr%   c                C   s:   |t krtd|f ƒ‚t | d |||d�}| | ¡ d S )NzUnsupported format: %rr?  )r&   r'   )rA  rJ   r®   )r(   r   r!   r&   r'   r?  r   r   r   r
      s    ©r!   r'   r&   c                C   s    t ƒ }t| ||||d� | ¡ S )NrE  )r   r
   r+   )r(   r!   r'   r&   r   r   r   r   r     s    )r5   )BÚ__all__rU   rÊ   Ú
contextlibrb   ÚenumÚior   r*  rà   Úrerã   Úwarningsr   Zxml.parsers.expatr   ÚEnumr@   r   ÚglobalsÚupdateÚ__members__Úcontextmanagerr   r   r   r   r   r   r   r²   Úcompilern   r6   r2   ÚASCIIr_   rf   rh   rs   rt   r¡   r°   rÔ   rJ   r   rô   Úobjectrè   rÜ   r  r   rI   rœ   r-   r(  r  r=  r   r»   r   rA  r	   r   r
   r   r   r   r   r   Ú<module>1   s˜             ý

	'"ÿ
	
s&d! $ a	 ý ýú	