PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` yyMa9c@swdZdddddddgZdd lZdd lZdd lmZdd lZd dZd dZd dZ ddZ GdddZ ej dej ZddZddZej dZddZdZGddde ZGdddeZGdddeZGdddeZd d!d"ZGd#ddZGd$d%d%Zd S(&uplistlib.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 writePlist(rootObject, pathOrFile) function. 'rootObject' is the top level object, 'pathOrFile' is a filename or a (writable) file object. To parse a plist from a file, use the readPlist(pathOrFile) function, with a file name or 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 readPlistFromBytes() and writePlistToBytes(). Values can be strings, integers, floats, booleans, tuples, lists, dictionaries (but only with string keys), Data or datetime.datetime objects. String values (including dictionary keys) have to be unicode strings -- they will be written out as UTF-8. The plist type is supported through the Data class. This is a thin wrapper around a Python bytes object. Use 'Data' if your strings contain control characters. Generate Plist example: pl = dict( aString = "Doodah", aList = ["A", "B", 12, 32.1, [1, 2, 3]], aFloat = 0.1, anInt = 728, aDict = dict( anotherString = "", aUnicodeValue = "M\xe4ssig, Ma\xdf", aTrueValue = True, aFalseValue = False, ), someData = Data(b""), someMoreData = Data(b"" * 10), aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())), ) writePlist(pl, fileName) Parse Plist example: pl = readPlist(pathOrFile) print pl["aKey"] u readPlistu writePlistureadPlistFromBytesuwritePlistToBytesuPlistuDatauDictiN(uBytesIOc Csdd}zCt|tr0t|d}d}nt}|j|}Wd|r_|jnX|S(uRead a .plist file. 'pathOrFile' may either be a file name or a (readable) file object. Return the unpacked root object (which usually is a dictionary). urbNFT(uFalseu isinstanceustruopenuTrueu PlistParseruparseuclose(u pathOrFileudidOpenupu rootObject((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu readPlistAs  c Csd}z^t|tr0t|d}d}nt|}|jd|j||jdWd|rz|jnXdS(uqWrite 'rootObject' to a .plist file. 'pathOrFile' may either be a file name or a (writable) file object. uwbuuNFT( uFalseu isinstanceustruopenuTrueu PlistWriteruwritelnu writeValueuclose(u rootObjectu pathOrFileudidOpenuwriter((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu writePlistSs    cCstt|S(uCRead a plist data from a bytes object. Return the root object. (u readPlistuBytesIO(udata((u-/opt/alt/python33/lib64/python3.3/plistlib.pyureadPlistFromBytesescCs t}t|||jS(u;Return 'rootObject' as a plist-formatted bytes object. (uBytesIOu writePlistugetvalue(u rootObjectuf((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuwritePlistToBytesks  cBsY|EeZdZddddZddZddZd d d Zd d Zd S(u DumbXMLWriteriu cCs(||_g|_||_||_dS(N(ufileustacku indentLeveluindent(uselfufileu indentLeveluindent((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu__init__ts   uDumbXMLWriter.__init__cCs4|jj||jd||jd7_dS(Nu<%s>i(ustackuappenduwritelnu indentLevel(uselfuelement((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu beginElementzsuDumbXMLWriter.beginElementcCsT|jdkst|jj|ks0t|jd8_|jd|dS(Niiu(u indentLeveluAssertionErrorustackupopuwriteln(uselfuelement((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu endElementsuDumbXMLWriter.endElementcCsJ|dk r5t|}|jd|||fn|jd|dS(Nu <%s>%su<%s/>(uNoneu_escapeuwriteln(uselfuelementuvalue((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu simpleElements  uDumbXMLWriter.simpleElementcCsh|rTt|tr'|jd}n|jj|j|j|jj|n|jjddS(Nuutf-8s (u isinstanceustruencodeufileuwriteu indentLeveluindent(uselfuline((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuwritelns uDumbXMLWriter.writelnN( u__name__u __module__u __qualname__u__init__u beginElementu endElementuNoneu simpleElementuwriteln(u __locals__((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu DumbXMLWriterss   u DumbXMLWriteru{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsld}tj|j}g}x;|D]3}||}|dkrHPn|jt|q(Wtj|S(Nuyearumonthudayuhouruminuteusecond(uyearumonthudayuhouruminuteusecond(u _dateParserumatchu groupdictuNoneuappenduintudatetime(usuorderugdulstukeyuval((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu_dateFromStrings   u_dateFromStringcCs,d|j|j|j|j|j|jfS(Nu%04d-%02d-%02dT%02d:%02d:%02dZ(uyearumonthudayuhouruminuteusecond(ud((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu _dateToStringsu _dateToStringuv[\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]cCstj|}|dk r*tdn|jdd}|jdd}|jdd}|jdd}|jd d }|S( NuDstrings can't contains control characters; use plistlib.Data insteadu u u u&u&uu>(u_controlCharPatusearchuNoneu ValueErrorureplace(utextum((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu_escapes u_escapes cBsY|EeZdZdddddZddZdd Zd d Zd d ZdS(u PlistWriteris icCs0|r|jtntj||||dS(N(uwriteu PLISTHEADERu DumbXMLWriteru__init__(uselfufileu indentLeveluindentu writeHeader((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu__init__suPlistWriter.__init__cCsMt|tr"|jd|n't|trW|rG|jdqI|jdnt|tr}|jdd|nt|tr|jdt|nt|tr|j|nt|t r|j |nft|t j r|jdt |n;t|t tfr3|j|ntdt|dS( Nustringutrueufalseuintegeru%durealudateuunsupported type: %s(u isinstanceustru simpleElementubooluintufloatureprudictu writeDictuDatau writeDataudatetimeu _dateToStringutupleulistu writeArrayu TypeErrorutype(uselfuvalue((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu writeValues&uPlistWriter.writeValuecCs|jd|jd8_tddt|jjdd |j}x6|j|jdD]}|rd|j|qdqdW|jd7_|j ddS( NudataiiiLs s is s ( u beginElementu indentLevelumaxulenuindentureplaceuasBase64usplituwritelnu endElement(uselfudatau maxlinelengthuline((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu writeDatas uPlistWriter.writeDatacCs|r|jdt|j}xO|D]G\}}t|tsVtdn|jd||j|q,W|jdn |jddS(Nudictukeys must be stringsukey( u beginElementusorteduitemsu isinstanceustru TypeErroru simpleElementu writeValueu endElement(uselfuduitemsukeyuvalue((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu writeDicts uPlistWriter.writeDictcCsR|rA|jdx|D]}|j|qW|jdn |jddS(Nuarray(u beginElementu writeValueu endElementu simpleElement(uselfuarrayuvalue((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu writeArrays   uPlistWriter.writeArrayN(u__name__u __module__u __qualname__u__init__u writeValueu writeDatau writeDictu writeArray(u __locals__((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu PlistWriters   u PlistWritercBs8|EeZdZddZddZddZdS(u _InternalDictc CsSy||}Wntk r.t|YnXddlm}|dtd|S(Ni(uwarnuLAttribute access from plist dicts is deprecated, use d[key] notation insteadi(uKeyErroruAttributeErroruwarningsuwarnuDeprecationWarning(uselfuattruvalueuwarn((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu __getattr__ s  u_InternalDict.__getattr__cCs.ddlm}|dtd||||j|kSt|t|kSdS(N(u isinstanceu __class__udataustruid(uselfuother((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu__eq__bs  u Data.__eq__cCsd|jjt|jfS(Nu%s(%s)(u __class__u__name__ureprudata(uself((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu__repr__jsu Data.__repr__N( u__name__u __module__u __qualname__u__doc__u__init__u classmethodu fromBase64uasBase64u__eq__u__repr__(u __locals__((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuDataPs   cBs|EeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'S((u PlistParsercCsg|_d|_d|_dS(N(ustackuNoneu currentKeyuroot(uself((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu__init__os  uPlistParser.__init__cCs`ddlm}||_|j|j_|j|j_|j|j_|jj ||j S(Ni(u ParserCreate( uxml.parsers.expatu ParserCreateuparseruhandleBeginElementuStartElementHandleruhandleEndElementuEndElementHandleru handleDatauCharacterDataHandleru ParseFileuroot(uselfufileobju ParserCreate((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuparsets uPlistParser.parsecCs<g|_t|d|d}|dk r8||ndS(Nubegin_(udataugetattruNone(uselfuelementuattrsuhandler((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuhandleBeginElement}s  uPlistParser.handleBeginElementcCs0t|d|d}|dk r,|ndS(Nuend_(ugetattruNone(uselfuelementuhandler((u-/opt/alt/python33/lib64/python3.3/plistlib.pyuhandleEndElements uPlistParser.handleEndElementcCs|jj|dS(N(udatauappend(uselfudata((u-/opt/alt/python33/lib64/python3.3/plistlib.pyu handleDatasuPlistParser.handleDatacCs|jdk rdt|jdtisDtd|jjn||jd|j2s2        &   B