python-lxml-docs-3.2.1-4.el7>t  DH`pS0!$ƨ6?ȯn\lYU CDsA@}5 -M+1BͤϰmP5bQ1!=~R>Fo8-x $3#tQ6pX؁-OUx#һx7m(J{ .I:_*y3u94'd0>M}7͊8wj.J% Xb[S&ъKz~ћp##o}DZL8C˒N uP(9LDd(tqi*Yf IUk.oWB#n %ªx{wc܏*Cq&IַvPn b%ֆ_)wt)Kҫe,SaVR-Z!E21{IoM-Z8d;{q9O.MeDW]L?"qoJ T(یsٰƼDXoJQi7C4/wrγ39b15404ca420ecd857a35c3d07c18db947e9541S0!$ƨRP5GoTURMJ ә_ס\@ ѿ$0ב-j!ΒnHraUǴOh(ERESWÒ"88,A}I18-bt]3>ݭܘrv (( rL3UJ7fY8@;{慈ɸ+.tpE{pb0Ml{`5-TB3˱:F*"Y77ZĊ#b,'|g2i{"I7 .= RH-cK7lab{]ę )5vFj@d[Cs2 9rk}5mVpr/ߣ}I1Rյ@,f{f̨NfGJw JmCg;% 7ȴ8g% ^;?+J/IeB߉lhs?B %x$k I\>7d?Td  =   @   X  p        $ ` ð7(S8\K9ňK:rKGZ Hb Ik Xm$Ym(\m4 ]ud ^ bdeflt u v$w x  PCpython-lxml-docs3.2.14.el7Documentation for python-lxmlThis package provides the documentation for python-lxml, e.g. the API as html.Sworker1.bsys.centos.orgHCentOSBSDCentOS BuildSystem Documentationhttp://lxml.delinuxnoarchKd, d# SKwLF B=F i59D>'A+:v/ ~bjSf0IIs5P*1,#lFx&h$'?z$3:tA?o(14% 8'4!18UXfK*lT7#-!!<*=I""".":J/-D$"/+s0) < aM3(-8g-"&,#>m-%Q"@/C`2##]3"#C7#6##7"M$f7)k"A2#*# #)&7`7:"###(@TA"#@ """^0|8r!q4>()O0!.:@8BO1C-4N!(*2.D2J/H. ?3+&ci(78A8P9tSB3J;Z>fN+4'"{N ['<2@1>a]/=1YI<ZxL\,cYvN5STOS]7>H*?sK@%A<e,`!)lVHQa&+4k(!W4$g]y@-'4]R5%sa=P${b,j7ٺG$[neFH+sREmF99=>%z~$VU(iN[$N' GOZCq$#s$Wf29/2/r*j=,$*Ru$hQp$tB& c1o1z$y$r$6\h0sT%4Z1^Zu/:DBH, RSa<_CI 3X3#,$s &B$L$ S La[Co@ {t+sE00LG)M'zMdlF[5x(QX%_aHPt.J h>xK,.a-@ /FH >**d+d (*e_L (9:H<Uu\Q1'!-=WQPYA큤A큤A큤A큤A큤A큤AA큤SQg;QQg;PePePqP܋PeP܋QjQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPeN]QQQN]N]QN]N]N]N]PeN]N]Q}mQjN]P܋N]PqQU|Qg;N]N]N]N]QN]ShN]N]ShN]N]QN]N]QShN]N]N]ShN]N]N]N]ShN]N]N]N]N]N]Qg;PePqPe3f5c4a617af530665976f79fef421f203509bee785bb3aabd89d1a5b1e5e3d9ae60d95565ee35790e701ceee2433a6387182a71aee1e0b18b2eca78500f2d55e2254f263381fa6d9c24e0f25f9b90a97111813c264687cfc1a3943511f663cb7f468d5df8fae19c23e0138ecc78f2506801d207f1e3dba85c8d4e3762bf6a037b95d0a07dfcb96e24837e2704fa4e45eead72fb68c1e0218ba4bdb06bdb844adb84ff35f0898310b577f85047b237cbb4e198e0d3b71560ced6ba808b09533f091137b8f247945981c087688a041ca4ec51c4e4a18a3717a5560e5df90c7ca6a897f2a34c366ce2b590f53488d04f7ee86a547ff52ac13565fb16bb660b88dd735664893dd7cb3e578fd295b821d1043309688e55f81356cad5907f97979700a7ebbabf3f0e8c4d44362215f6de62c60cb351a3ac3f066e4beab2df6d9b26daa918d650961408889f8e4176109b9f4d7bc8165f365150139af55c898e124cf70057f5c4acb1effc27665e27e5f143594145afbb54f82ea1f166997c34254ed8210699a99366c52fc02ca90aaa9c6f6e00a8bf156f6c403863ea35996a6e7eed57473ed4fee5d6549fe15529133a1de50636b6052a291b2a418af2d375923696238a3d4796feccf3850f9090ec6a1bb758811bbdae93ee2fa16c798592ca768239783976cdeb1caef69ed6181cfe7d2ebb11a1e7a6e5f49f3f0556b282508691a30ff1949f3aa07d81f16097f9d58026ab71777aa872c1e0f5253b37c2ad601d19ebd68b5c86a53b10cd7da7fafa12259aef473cb23cf36cc0ebd38d28e9207d661d7f46f5724425c2d138d7f209659f783c9e08d2a605616cca66d196a6dce3c7e2317fbaf4f0c0bab4fccfd2e1507e12826fe1c605115d0e4bd0e484ca7ff8893b7c889fe3c46589627a4cf41f96a1fa49d27b43c1dd9cd7cdaa1ddeabf41bd73348cf481ecc54b4f08db7ca6d81bb7828e3f0f61ddb25d2ca69b2298baaf022e0015f7c0d39c84cd35894bcf524968817f899d2f26a22b002cad0606d734265454f89c51bf01298058555c4ea225c45c217e7fd9bb5854ecd0ca50eb56050d5f286817b7972a3a17ba3771fd1b657c2f86679f0d3ebd535cc656e7c7d2eaf9d322a446defe6c2fd65dce4dda36cd8b82f2fa60c35c7b82b90f8cb500ffc8a286d56f2142073e0d078225b86b8462e210059d780f2285e2cc3da9af17824be378a2b02c280f45bbac97d1cd2850391e1d64dd1d25d5a5121c8b3a382e44e08d5df3ede908428f7892d57a50516ae51e70d4f131dc1fab927316e6814c16e3266bcc55f1eb06005235526e74e596cd962cf2637bf84b1f166395919982ba03f784ff76397aba86487b991d8459182b4d1e6ce808df119de26bec1e134020e40d92e4760855edaafcda4deb8e560771e2ae5cbc4cc2e1d28f9a5453adbea0487b4ccbe37d3ae7c6ac7edff998124f4d3b7685cee8a95800b81d3a4ee35ffe94c81ad422915b3921b52f322e1ac7e50a5b3e4693325f6f2124033815797a52a73142a88e46cc512aa73c63c94e862024945d8e44c19c4d4306c17c65a156e1da9218cb0ce203502f03aa48d1649c7c26e4edaaed274d5cb7dcdc05e375a67e19b95032c0f8dd5f3f143cfe68baca0826224377bb015821f5ecc023afcb714e1dca1f33bcb51eab8271cfe2100ffbe7b9898f6891015a736a5313c3061617412dd029a2235ef4ccb747828c64d2a5e7a8806203bd33721c6395321ad8e6fb259617caace23154c57b69e16ecb3292d6249aa8a3cb1ddc00cdc7f3a6c9b5e5143896b72642d15b0109b05bb9c39c3601ce14aa3b1d341701bc88f96b2afd434bdf0cf43a566cbfc2fc38e261751c5bb661df0837d3c8a58bc6f7d9db5caf7640e9b439f109915b58db298a8858553471ceda2a7c513daa7fe3f94c4e23836e62c95c65142a9a95e7c33360faddce515b1295c7310a9c77b1982f5fd7d4896ed982a04dac57deb9b6be1942eba184651201677a00e5f1ee1cfb7065ffba5c890399ce47499478876f238320e429541d51dcc62486a6fc4e0afb52a48c772f2163edc0b0c61abbfc74396992622768f22faf7a70010dc5f1b955ec45e054706b8a479ce68ea2aa5fe2347f919c5779da70ccec11efc834731d811b095d83eb0ecda69b04bb217cee5b19ec06ea8948936c8c9f60014666b5fcf99648a40dd22b5981224c26444aa15cae30e59c53b742caa16a2a1348d9bbf99114864298079346c2555620f40020cf4faac08262444ff2a0e1704d4cf2f988587a45c90e502a1cd90a13455ab53bff3f6ce9755fb5f9e5f8a490a0a4c92ab33e16d24a755649300a672e0015f7c0d39c84cd35894bcf524968817f899d2f26a22b002cad0606d7342648ab895736b797d835e17e7f1b534d9c006b0339048a98c9b3242a3509c317641d6fb8a37d9e7d24a63b70a3f2a359350be6cf2451b36f7b061402cfe37b0ad91f260100fdb885303ddca6758d04cf035afe43b735ccf478724b407f39502ffe1e52fa3d268746fb38edc23709134b4a2a588eeaf28e152d1cc10744cd46071652a8484e6e6cce13f6814eb8bfc1318a0b8138ca5f017746d02469756fbb290f553750376cff63d9c67e153dcb8737c5d70798cdc2f679b5a5289e53b513d4b03b5c004fa845146e9b56d0b9f947cc0994392174451efd82a39a1feed7be5d4ecb5261111a1e38b97c0d9f15539b63540de4f00197371452a896e4045d7ea9f89a8081a5d6f216856e1626243ab2b9b2981377cd6e9204b7aee7f2cb6f17c6e25cb90d56ff718905892171159c3cb8ff827c67d21ede5492c63c9bb8111975a5b29e4f5218677e6dce3d38dad711852526fe475bd9b41f2f98538ebe4c361750f72ddef6c3d5dd45f168ee95970ab135481e1b70872e5a1288b661611847f34b3d84f8fbe49143ffc0abe2962454e797c2346335670040887847b64220e9937c07b57a46291dd91a974b3e7c20893e1ff7271555bec1349f1a52e2c9b8fb56a15b590e2573133142969ff6d18c12e3535e95a44e56d66e47d3cbebc19b5012d0feb4e95b2ca04293198bc4aac115fc5f06a8aaa2ba1d53b0319e2e4c4ccb8c067bd78d05a5509b23733bd04ae9c01eaf831f9b24cde70d9d1f5579011dc92d17e7162960325b91e281d5d1c460edb92a830f668f1b8724c1d0ccdfc6fbf11076fc53b256d520c4bcf5a7203be8a64d2b3e2d4cbe23bbe0acc3ee81a7bff854cf6a4d5534bb60d64c3183cbee56c8cf40e333f5793756385b226b495966f9cc5cf2c9cf1efc6c1a26cbe6540815f421db964dfc35dfef9cc1075d18419ab39490db02732c47e5a7a1981f6bdc9ab2fe894a5491c693095bb6efb3676840fd0af33bffc32da83bba7819e9b54881def96c7b898c2e797171a55dec37742c928104c1af7894c888779a7133a48813b75de57118f5388f1902ce4847fc258efdb011f695c8e671509da9fd530904543b61e68c71e6762fa6051c4d7c23a24caed26600fcc01a7f5129782925ef8236c56b5d49c73cebcef26e7c53c4f2034f076c79b91843b90498e4094362de64a3939d88a92a68de838a7d016d856c0212ce9797104cd910b1b10d4ace95bf5c4b60cc3e07f74e4a141651145f3dbe1c681d9fc4ce370b50acc483c85c28db59d22ff0707bbd642467885ddb28e03a68fbc1a2656b4679947b830ac5da35d02cf58f84745a227de7a9ee4ef78269364906c2f613d9ac299b3098381a849acce2abbc5f09c5d09a9b2470dc2cec11b5e011bb1a70c2451611129b14b4c3933e0f6e92ce0de267ad4ea9ee7781f2714f51f97afe3089a8471ff5a957fb8c4d01d7733c1e0c93f5eb1486dcc71ad506f988ec2a09fbe2dba85bbc6d719ad9f084f7b20ab2cc054d81b55dc496d6929e7502d24bcafda6c522f94cff1f4353a0ee80bf20924a6e5ff1b7407512efe7a1ecd7beab145a202660b9b2ca82f4e95553c0344a3000e6ec5ef1f128dc7ece86c9a856bd17d6249372192a23705d4e5b6cdf57cb7493e7c0cb85217b07c4e597840eeef4785528c60ef7c1529a500156f7baf246c46d7ee8a6dad92326d2279ab9103c0e9b1e9c575baa26b905a3ce7451f6055576f0542b665229c563eda9a249a463f96616fd7143dc42b1a47f6f895ae1f98b20b574bc10dcf4ffee0f27984b91a2cc5badc29d59cd7dff20931b7b8227d0561e78eeaf120b881320d6a6274605b2c64711207ccdb0761c3ea617ff1e6f877bdb3019adc04457631f2173bf1e61244952181654cbfe5944bae06c28a6ac48a865ad6a0a01567e4e07383d87dee806815a08600a6d29c1024f6a3bcc465b8a2f8366e5e971f454cb49f29e47a0c56e49dde56993b9b08e4c703802a6bb1fa7d911c0b6f4cbe0e6a00b0c5dc4c9963fa6bea3116717920b482e3b3b60ccfbdc1f0bb0993bd63d9d94e63b5d8549dc4df604577efb2255f844a2bd94cbb434f412d133dcbb8e9bc56a2000adb24474900a4a630b1f4fe53eaefaf0707272604a40009a8584342c341b3e27e476f01dfca517ab12217f24ea79ca4c0b235313dd7d09d49e0ae68b6fdb9d558d8be3dab117c4f34ef00b1c13ab7fcd4f08951d7885f7ca9ad294348125d64b6e2f37795018c85991c81f3ffa6826c6fc631e0dc00a98c5f5d95d8d133d4978cfcf0571f244d8b4a053c65580129e319fffa9f4aca1d3c8cd0c8a7c4f177a1cf28cac1ba4581f05fce2f89777796bd8d734f8c4758137149d78c7a546e51da7cb4c0ba973df2ae5151751c844d13103aa7c31a1442e1fdf370ca4c55b5d97f2433126b75416a88b63c69547eea6089a49a2fe5c1bed9cb2ff682c35d60ca6c3730c3f7b818fb56adc4e7041109200cf25f0d83ac790acab851baa02d6e17488bcf37fef65e58d274f934ca8fb9d2da74d9caf851b024b1592aed203abd60b07c71dd86f60c9cf8c3b901d00933401416b64817e58013ecb03554e72398d88333065b59f09acf34d30423c14cd1ffe36c22565a3a14b9282658be0fa9a54334dc9c65f71ce083497416bd26167addbf3d3e62b7fc4047fc147db707a3781d79ccc5f4c2242033e78b39bd6abe5803e3d549ca56e38bab405e5dc661ef1e6629a82b5f8b945eed963259f21bb9ed244986c4e888656b33860a85f00d7c9f0c661db29a72b7d3bfa18e69e15b9ec7fa02976b6bf786941ae96d93846abc2a7a0be15ac1cd55a364435fc2e676ac74e388fdba676474d561ed9afee9fd008303289853088ce2fce0a9510844ed43edc4b757fea94dbc8fe617c93fbac6dbfb23b5747fc4a53c8ed061b1d330b91198bdfbe0b75b12616dcc99177d7899603da8ffa5ccc113887e41fa30a9410a33f7aa9a1dd058ff07177353937cee3ab21076e046538e38d094555a7d58c6b7f39d8a49fe65f00023d42bacba19798ac64432d0596b3accbd6f857f239143331c4d7b76980389e31c984cd50734bdc265a97bb35c93b319d729027ad781b59f1895c065fe36a34ae291dd95010676a1e4ee79bfeb18766362f6be9dd25802748caa400c68786e11c5a7ec8908b8470e5aceab688e78bbdbfce7f8ffb427a224c14431e7c83618984dc4bc1f582cbd9bcb337d9c438cbd3ee5074b4b04ced58a7a6ca7f3a25b77ac9b2581ea7c5524041028bce7c81675a2206b47746b4234ef106c8d23d3b3f2783845e4b1ce5e410c83fa6e1ad66d91b67060e347ec1e7ecc70a11007d1cf380bcb53940513b32815f98f93b7b75ce47439354eb483b51edf8fb4b7906b421cf026d0c95c17c43fcf9554aeca4e037a9ac6c82b3264723f54bbb58a5fd5d813bb07a06abec7ddad514e1e3cccac5af29efb72e87da9b25cef6470f3daf0faed669ffe36daea30790011afd088542d760a1f8966b012f38bd7022b66b97e9de667aef322bf941932cde596c388eb7fd1a5cbba09825394ea8ba07e9cfed761033414156ebbeb1f169f0e9cbd5c2da182acecb93d5b4483576d2ed93a70066fc7475e1d3a878b393682b372e29a4b54b59dbeb1db57158b9f5faefd1a0ba5b9de02cead83e09547666d36889cee9a32f6488b8c7d28353d0f2d1612144a48c6c8d0cfd6bd9bfbf6c8d69c391f5129537eff6446e04036043e86ca9f3c1848da95ba31d29b93065648aa4c5c6efaaf8f10bd225819b2fb17b3d382c0c22eb7f8848a3700a3b3729d870da4dad238f987b1f22aa543cd3c2168bf65cd855af59893e74907fe020bd18cd79d1c2bbab156895fa9b03cc8ec867790e3effb3a57d47ba637207c0fb658be6e8f5c39a1e2bbcc26c58b7e2b863ea72fe3ee6bf9a5603e79039c2e6d0542fdfc5ba4d3ac9b67aca5c34fccfa337dd773532fc730f337e2e0f91cef0472c81e94bc3b93828d6594c06495bcd782f3eb1c53c4c5ff821cc43ed9be0de59ad9796b26198266cd3ef3427b4f437095c374d4b621749393a4b81a2dfa45d0ee65731df6e57339d321ba1f3d958fb999d3b5b186414ce91040a14922413b9f6504e285ad87bb2aa28471ef4f791d9d38a07ec0313c48895d185aff184ac11ac0639cf58ef1905d735cdc59ea98ae56b877fe2699b30e0bde8f816d02d7ad2e54c1ddafe94913dfb1570611d20fc754b846a478d3062ade1305ea570ee2655607d321c1045f6244d7f43b6d430eb6bd22d19a79726f959fc8430fd0fe9814847c348f85b0498c52e026bf003233908989ca21587437277877608120f86ab6d9277919cb4e5509c17de363c37416703353fa9f9f948fc8c391166ffbce8fcd68939b1fb3ddd3b8ed9d714e1dd11664ac06fbd245dfc44a5f63de5381ff88702844a3b843ce62b4dad4dbe402895a97071a3ed87b7e038206e5494f4468deda33b13d6b63b3c241bf6ed88807ef7f6be25d4e4d935bfdff8a52cf04c06b0adfd716dd97eb0a65982ab5169455e7552ac49984bffe2ab269408f8f7749814982ab925b1bd3189b21a75a9e7543535f6ba863e391264da506aaa1dfa74ea48dc5e6b76028430bd0fd070e78f5903dedfdc60bb9e9b0b6eeab2cc7b863fbc8c3c7dc561ce2202c3e97a11c04fce49b0c61fafc469d73d9f94a01894411e301eed2b5365893339e31f9df7c21ef50f6f39be728dd92751329f686cdf4e4254351052abc6fd9aeeab0dc320687ccea3f130890b858e3d82c1767915891a4f180744f22d678a1bf6b83c8100585d1bb2852c48b3780825ad2dea7e41379d0907400e0a2a625f84e310a289530425b293181d7c172f65804c9a99a7915fa13a46f5c63faf378e19f1f62d41a379dc80420d2713f33413edea111a06e5820da97fad5e375b23a1a16416b7b8eb00c9d07b88ed94926a761ef358daf514c20db40e5bb59d712641951887671f5a33a8535e1ed52b90aa2d9091ce0320a94fa969969d4ba0a2505029165f8bd81867b1ead8bfaa24d474e156dadc356ef4000d5268e61ad04c201099bfb91f874f79d31186319940aa7ddb7ed3892654e56fb1890a278a7b5db2461b989170694644d8425cf2cfcff0089f50f98de50c02569fa2f07f9c174af14e9cdadcfdadc233d21923fdfcc656eda30e418da3b3387b11b0063f44573377cb187e01a02cc5f04986ac6824e1725c216734ca7ef6b474015938b6f882e60dae0be2b4a2a92ecaf58efc0276886f9d7a5b98c70fdb42b1d62687b8d3efcb7f8e94474e1a3aee4bb48faa131f3e0b07efd64913ef78b5105deb693a00ae6a0439ee3b992bbb3ce8dd3a4338c3b807bdb6b5bc96cd9ab9f73528d4b717727d797115c22c162948c090bb35004623276f7b5bd93046e79839d6feb8bb7e88c1fa8d07fdecd662299e5bb1a0363e0fdfff3f5e62fb46fa8c2430e0b57eb076820ad7e6f2e718f9291a5d0143e08a2e59df534cd7c1a8737b35543cb9ac03eaff52c3ec0972e7c4f97f4ee10ee9b6e55fb92771eb1239e0b2565229fdbcdd7d7160ee249457fe3f6febaf306218dd69b0d5c06a1ccc5a5db89e2ee348a1a8ac6eac88c70dae13f3229db9f6a3003477a9a83992ff5298808265c3e39940982665ea074e74e87f18e26e4520660485aab0f31f78fff53343e352a4f62d911d1da4c70e21a96afb274a6071faac909c737aad6fdf791c09d4d653f6140c6756758bbb696c92292a5ba781330072d976500c73aa752c5e171a82c400406b7a04b70d45fa76b7838e9de1cee43f36c18f337e739f3d04c0e8b81e2a682874ffdc131abac00f141317eccc8382abd3938cbe8feffcf328fca698b688fc3dd54ff66f617d586cf6373b3feecd5493d099740419f51b02eb4ba5c63b6406174e4c997e9fe3c5109012ed01a5cf0652730119b568f51f58afa7490262b0cd31b320a00fbc38f46a46120ada9e572bde6427df2865a7e81fb28928741b9c09506065cf6300fdb6dab2852bd446ff86676ff6f542e95cbd4336623db153da12c2b0bbf12429bea1846abed9b8b8a4e099750be9d65b2630f0c69032b218c8fd809ff0b6968cffcb8866dca7dbef57e0b1998e43033f13fb2f98d635b548d52e8cd533ff3b8d5ed73cd875e9a02b128564fc298c17453c6f703caf44dedf0e51464180e7bcfa32f395ea8b5effbb7ea5b671955979f97466ee10e8e94585a90b9de6f4e29ec11db6f9bb59d643fe1a40c95ea1d2fa17c6dece51c6e20a80f1aa9dffbe4990c2b2756d818df8172861de84b1cfab862e1b8904bf45e95a3e98cd7ccc40618f7259ff5b5c5b094a1510006985a9abead97a01bec7e3ed62366e8ed14526b4518e23d907e9bf8d2bb501b3b099c467b01a81979fdac7abf177447720cd26f6b056930652a13d1e8dda6260de0a78251c6fbf49cba0cbc4c82f5e3dcf4dfa9055953442326aa774ee61b5292aac915fba4e53911e3459ec6cbdb7bf17da0b93b22fb9c8e030dfe48543a2d15a36b35e6a30761c5472035cef2f9bce264a7a6f4a864908066a7468da3e3ad1219b7ef0e106826eb1b7e2cc01be7c916de6760d2d43816b851251067ca1c3c5a6744932bb0d1b65e5f18e83b87575dc6250bec50af0985e23565b3063477a5ba7fb94dbc86935c243632993c15c05567e74986d18316f6b31a9aa50ec4ed5e1f19d162eda0d5ed9ff7320e6e25d201a83438a9a4ace42e76c9a021ace51a73dfb8b54dc581424639658ed1e9d5a10e53bd6685676effa8bfd3540c6c51631b9a64db6686b476d561c82c10db0b42365689a54df8370b9c8937e92f76496c81d7d0c09959d41eb51b2aa3bcbf10ecf8c28550a88b2ed105345be6983590d465634fbfd43f0790df1ef21d038b1ba73aab19ea4771afeb0c1bd8dffc8756d040d4368e8cc843808815e5e019c5f9abd093eff9af949b3acc383f34d39c0754e362a585ab8d060d8a47b1b8f38924474d15b719f7b6a40ce0a172c542a4caedd1c94fae1ff2d61cd73b811f14e15b1d2c8ec85a35b7372160c301a394667bc7e1fbcc32bfb04269c9e18637862b54fd58bfa132059dce8dbc8e00432b1056470b99d572c6c4c11140089b0e1ed077aa262c12b145d1ce0c034a6650b4beef217badcced211a66fe72939e3d1cdf2a9abcf720567858d0e0a36482dee1de9d09e25676f59055fa3c93e85b19631b01b1261fb4b30eed27c0607e8c94adf186d3425b0e415709a10fa8e8a203a69b9dd7f59b96421ef2c97801ccf2fa28f7c9716839541ccd1ca233305e3736d1ea62ee93334fcb240d2d779bf48c4e789c0deb5ea47912079a1e9930e7a9aad23cb42398d53e6535cce9d7e8489401d4c0c5ae5c684e76fdb52813220beaa0ddfab04ff155fe2ccea9610326d4007f7c819f1d3540c148e82f8c2d8d2f1e7415fc71b886babde1c8b7bfb133ded3124a56a3207eb4c3041b96248a4fe73af76190b9138008cd0cd681ccc9cbc90579ff8cb99e734d7d6d656203ba861b5c23da89cf7ca43284b73d4cc4f025d76fe255ae99327043645a351581938de592fac3a54d66f4ca8647fbb4a818b32e2a86b99cb35733627e93047991ca09a8e6527a5cc3515ed34ec83af7794122dfe024b93047a94acb1047b6418dea60d30190651225d5b1d1c657b5a3192caad15fb697e5151b0e61fe326ddc7fbdae538fdeb6f722e1f951f1c7ba858518ccaeded511a48c19afeaab7a72937b6d0387099d1aaa9a2fe6a8fbcb26492ec562a35a6028f77180eeb092236e754d3cc1daecd8173503862d51de1d85a1dff326cb51cdefde9f167f964b237437d7b4d5b80a146d60b7a438d67b22b945841a35ac09837aee0864be3fb5835e7fbbc0d79ea760928501e4e5df04ba5040c9c88937693df425f55b302d1d3813264ce487c04f6e180365ea426ff76ce46b837b63df6001cd377112273babfbd25a665cda4e6f5dbab80e25f3fa933172c9cdd18b4067582f25d9f60d7a9646b7d7b4b27b6c7531a22082b97175dc11323824f864bd185d68e341452635302e0d0230856afb2c8715cb368b3345adb6f104ad9c0e03caa144f3cda84f3d19d15868358fee63c209b507f3212a94151e91cb069e4782462feef32cf24915a8201973134fc2703e108d8fb9fea0e37a50b0259caa9a10470259948ee7a78a473b640487b10e969851617eed30def6d016c5670be897f6afd50cd8ae92ebf763e94978e46be0648d9263d495ec12db7caabcd0efcbc32c538ffcce08ba5e8f1dcdd7afe3b9f7b27dd51c3ec6ed22190d42dcdb7ab10de02fddc83be82eb063cfa91782b3250643f822335e2f926417185eeb30dfa379e81b13870ee220cf6f9584192205abe18d847a96129c7b34d73673cbb1c2eaf45606654b93c463b9e06d267ff95e17688bf77140f322d6e67f9484b6be1efa4a46fb2d67eb7c202459848819d9dfd16f1365354b50e36af11ff506711d3061870d46f92e70fb25a6bad611a18dffc6c51ec5bf25285b67a4cb344955975d5ea113190df1c58dffaa71dcb237d03e841b6863e39c680788398a19c546097a8473d49a6e7723decd3abdd9a9a8fcc813dd8d88b9715813b8ff59ac7eb1e55f9cd9440cb1b8a93ec2500ec37e8be35eacd6d1b0932c2dc0e359ad3b63b3513b6fe674eeb620854292a0cb8bf08cda238e3fdbe3692aeb37f124400a14f92b847e1541c8961a4826217c45256265845152c88bc97d53685da85887df4ec0b29bfb62491faa96e86716c1ab9743d78cf00e21889fb506de009306c1e1378567119b82c5873b992b74f90ddc92ee909021ee89587b4334ca01b3d5661a0c136c0300a5501a503541bfca32bd898c01b4a5d5413c5986286395ed17cf2a33f37ca5e05a6ab794be197728c67135cb072714f4ccf7de7423f005a1cd1f331de8b73a232e35f2e1837e19e6b02200ed0ae271a9fbd139f97de3da6efb52a891b48e042f2c0ad646f081966e21d99f75f33efac2efd185e4490aa97a9d6292f7b8f662d936fc4fb340a37b7b6482a770ae8f8e44085787cb50ff4af69d877d39146b825bd13006dddb83dddce019c402eb4e984642266a34d37e1a1d4bcc5dc136090d2239f2def848ab104acf4c81bc4591a79a15a6b8457d42821a37235bda5d1ffc7e51402f1012c61613720158532ea9b64e66c1f9be3c5cb66828defc7d98730981da5a0f2f54192c3e8bb12e7da0919f8cc188c1c2f108e4634016312834df988aa5c207e661d1ffc31688b6a34f89dba9fdaf4ddcc93e7af91736985f5be7421c71ea206f6cfae140b77ad90b13bb298b299112b1fded6660be74515ebd6f5ae315d6b5f31ed479eaac43c24ed1a2d92df9130acd07c85e49103d03d73db1848c63a2f7fd94273652b4d188187b50f250c265fdb817f3fcb0a6416d42047c06bc02f429d330e0c28221b5fbdda83d4a7cee03f428bf12c8690d03b176879df22f64e017f84903b4776a6a53d7c2b8dba778072573ce83fc5fdac21c9cb02b0d61afb72334b6c2f425a44cdea032d1ce4fbf5163a135b6e98633aa047bf640791b46dc9f51b33bd361ddb27d6433894b300a3b16d4473f1fd988d5f9c31a05d839a05a1e90b5a75987bf76103d7d14c37486a5084ad6585d77f967639400b9eda878ff8d04c0316fed1af848998ea67792d0274de8b5e06cfff7ce4e36c5445ef9f9d679a9d5cf3cae81acb488acebeb08bde626b213c2b25620e0f4f158bd649a6ce0fa955c701f2c99ca0df6dfea40e073773e7645da885789652113ffaefa0847a063b422da26ba9315d145edfeb1969c32f98d40caa1184254069bc5a5516276c2e121dbd0cc8dee739d265b34f0f4b77f379b7219cbc6b475185f23d1f9b7cfe750b83fafbca083b3c46e7e0d55405c458da12e63195f23792f810757d65e41da9f92b8321f1ed02a3bd16c5d4d551c9e340f8a680bffd81712e496368ff5644d8bfe4ea21ec0916df913030f83559464138847cea2ec7b5c8ff989e5dbd611bdd6de86e4dbf3e31af4d35d4aeb950e302960f49888a0dd3a406f9464b0103f392ab370a3ba3c3a52899c140b077dff087edf8e3249437e6a55dd118e8ef30bacdb8b69ba816ac3a7b5eb603665fc8f90321999a228ccaa8baf2f78cd5f58978b33d98c60c0d24fe68abd8672590e4a9eefe4f1fc2650331c8b194ff0646204596093de1600f70c50ce9a094939031e6b80975682b406d1346ee38f54a2f4ce7d5e68bc6e02215d25f0f71ff9180c220b9d7a0cd448dc468fd55bb3535920ba5ad77fa8938162086d0f00d96179bbf04612f96182e78357578e2dbaf18dd0e112daa9aacf555dec0ec668940668f720c7ac3e6b280788625379a0051e302a99340540e44aee49d7dc30334415b870769ee465a19efd502db5d841d6a4e8ec5f0b440fc98c1a1507459e62092914434ca93200d9ac397a1046b3d7d29b44a0fac312c8c1fd1f635ccdfe58f79a364603a96686a2fd37ce0526d5ae24cf3ff04d784943d720565d6e164ddb460e8e9817e91facd028cf2ce8e1b50f65c938a3a3840c35ecc0f312ffec19ac0773d670dbb33a327291c0c0731b93829a474875c8e04398aa63dcdf5a09e6e4a42437a91ea4a5910629147626a145961238f06b7875df52d9da320d172ec5321651f65bac55f9c0843a7d57d8449aa31469749baacc71a77615632c4602da184ae1599d8f5f5d99696f9e7f4d00dbaf5194987997e42d22f6d7dfb26881c7f0eb1875ac6f470c704316a2ba85d1f0412dee5b3ddc2b87b93e3e67ae21030ca65990816fe91159ab6dd8ff87cbe26153a54f77404d77f52f5c3bbe7273904f6fd204f6a52da94295bc6fb13fa323939c0847e6726ac295787f472ad233f6b08d60a40913d77d0fdf87272ae859d3980d768ee9051b297aad680e56a7be3d4450c64953585455fa20a233fbbbdc08d7c4262216a7267922b5efa7038fcf57d211b1d2b9b7867db9a3b8f1b035b8cd0c142dc4a070c8bb7fec5ad353974d8a40df6a13bd89a6afa47a08278ca482d10740b2209fa265d1756d5dcf097389dbe7377ac89626867fda1675edf1c69d0068801ea1ba85f52bf24d807378f11b7e89d8e83c50bcbf9118a650a5b815ad7f2745cca6e1b672f6813bd24930967957e229df953aa3a9cba4c1d5a9febd03a73a635fcab22da6b6fb24ada0e4f726ecb462678959667939687f5f774c2017944eb2db07d2d2ff0decb149798573ab96be514811df33149649333524060dbb1d6c6cd1fdf4b1ba41b14c84c737466a54650c31cd43c19e7bcb73eeeb89a5668f357d9a7a5f5a59a922d61a32259f8623adb6c730227c73b7a6237c6c7a1df6f79711b62b01526376bb750f159c2ee0b2e84c52d16266567382ea857b4378d9104925fb084d82d8da7e3b99213107ba00698262a4502d36a1ea04aadf4f4309d893dccdc8eedc67facfd54083c142367d67743e6a9945b05020cfeb05ba2a32ab6010cdf01e7562950809e977914abead8d099a7cf860f35cc1fed7d76f3091a1321f85aaa08be45dcd7da2851277331572f4aa8f876cc1087dcb843e56da00e262fbfde29cbd5ffb6c8d8714e059813e6c85624cbd101553b097cd2b2eaac6869628cff4e38d8b16e295c2bcbf9689653d91cbdbecc19acaed7b101fccd6fb8682e26a587eb5e4614464803af887439749c134d8b89a481d5f486e9b8139985ee03d24907eadf3b053573c856a33ebdd1b7e28a50cd059f4132de91aa21b9568f2d28798ded136f64a457e4844493cab89af2be1fc05ea7dc198abb2f89e1212a1b66682f6b6864e0b41b84f25c1b1e016a904a394d7d91a811781a35d400f1e75f6acd2bece5ed5d8deefb8b64ff0718dc58cdb8171898bd6edba0f1844bad1f9cea730e83fa21ab0ad61b25d39658c473b0d50ed57933b590bb7ca75de502d540ada04a211671e7f81a60110a366756003c6cbf685aaf9ac5eaede76e1064091a965de04c255f8c44a2694fea182e16bf6e72e13c8bbaa99e306d1d0833d5c6bf16f08c57a72773326fd3f4e5ff073a4fc7e820525b617d2eb636886da25940773ab105e7a4808b1fb23e530eaf98aeeae988aa6fe979cda8fd0c3d10557b1b031087c9420e3194c0a76986c50dc3495b22066fb1556e9948c3bb277d0499734a54b8e78c4677e1e1ee22ab50f1fbf94946d11b82de61ef40a408d49c6bf671cb2afef2f676517358d7a2e369a44b4712dd68b988c7eea733abfa9046034aa85b458066dce1e27d146db27deb17f2e2af020f1d60a4a47f9854ec80aafff939ffe00c3a8d8d82ea6dd07c262a28080a28a7aa55175289ef1af1c45698e334ac4e23aedbc0a93556a8e3cf09676e3e6371616b446e3f7deee464372f35e05ee476c421c5e4cb0f869dd33c57b2b56c7e470f8131c26e96203e25daba3c381195b14e7adcc2e1f29d983d8bdc3ae9c2e7dd7936449e673e15298c33e993d30a4b768e4e2f8c186b5b245e108c8104bba39a7f1df7074633add8ae6fd887a03b2b8d0c5b0c7c4de741d19b0ab5a3139da2cd85a6d5646db491d71a4cea9a6eea2f8340b651ea2916a4713d3b70e9945c6e8fbc5c7284475ee306fd6332a75edc1e32883b6509abf830b14ae69492a72f09246c8b2367a2d641a9c15f162e52dc0ebcf14bd9ba4cdf190d27ec05d71f9b1a5bab3917978346f7504e4c4cc4a2d7495012df5a912ebaca0f4b5c5b179b9f1f0d9dfa967dad7f91533c38c9e3dcb6d44140e38580be15667f73e02b62230079b31a21214cd1cef5f6441c103fd1cddcae2869e104227c03a9175bbeded1a5e91e5cb146007493550ca0a14651ddb7b105ef37629b13a3f98118ebbe44a4c12f92805f2b042e7f9e53bdf6dda5298397365a233f91a417fc9b1076f653c93bb55b1d9d952285bf4ad1a54bc1a123aea0201c69110cb664a25b19707e004c65d544bc00c8813ae1d8301e375d549ddfa44df5142782ca2fd054d8d1c2b8aa75ff6b9c7ea832fbe12eaf5e26b30a686d222e6056c68ebaf8d78dffb61cb06c4777cc33988af91113e091c5bbff40b2a25e8f218d459891b651db90ffb8d37f248f3ff50e49d1df233669201301781e8bbc4d7ef52a8dc9e15b34d08d9125e578ea0bb1f6dc5740662886e33cacfedfce5f33e64ad681544587164f2583b614e4d481e0c8ca9e9881b7d35324a5220c69d4d0afe4af0502368d1b77cef5a22cb46552afa7436299ebcfece0dfd3205fb76eb52ac1dc5471ef40ac2122e0c7321466ef528e129114b946d4715d8925cc539f68ebea15f92fe6bf13e9392138ce5288280bd0c5bab934db920123ee0647cc97d09c06e80f419ee91d89e5ca04714f6f33cec65bbf48263ba3f9b7203ec06851fbf11d58eb7e463fc09c9fbe16f42804df094685252e3e84a79181250cf88669f5b8502890420164530b8bcb38f50d1bde0574f136ed56317ce94873407f66f3cc1e4fdf9a0f43aab2d96b936e71f48894b9ecd896b868a98d05001b0f5668725661bc4be39df559dd7f3d9463a56248c472a0d0c04c53fe51a79c97076588d9d2061d87593f24d39e9cde46d3a0b8e7902a47de1c0180e536712a6daf14bfcd3a708d5dcefd600f90318c1919930b4a6b86b2a1eaf239437e3fc355b1efa738e54d80596acdcb377c6891a30471b35339e1a904bbee08da48dcbed27b7c6e177869bdc98b23e3da09f5905dab0b3ccf5e06168fbdcc36a61e87f7fc5642268375228fc7ac787f62e25dd59ef26682cdc5da918240253db6aa88419d79dbe3958ab047903c48ebae3db6998e335c64676805ca5efb7605c3268f177aa43d151591387f929a06e33f227430037bf48a2973ca4f9f7302d0d209316316473ec74ceff04075ff205644b9f4b22263a7326f9487af28f127712c81de01ce445bfcb261cf4fa083ddbf4753013b08c2479f2bfd116ca6f55d07646e647a09c9ea7a98ad606618ea7590efba760342b3874d0ab6f7beeefddbab9deaa61614cc900d79a0919eee4088e121a6648c3ed1ca55e30979e1bf34cd7cf1801dd42db28118f9130413bf310e06e819cfbf6f4a0e7bedbaedb3877fb5a01617e523fcc2750286b138d943a8ffb81b476670844162449d823ecc123c95ad600dce4f4ab5f8d727448c8c084da21e687beb70788bec347b61a217d2ee9ccb0ed05788ef020decc0d17ffb83373af0a1045bcccf4d0d3a98f6f07cafdb2d90867221de45a0b67d0df15ec9616c09818fedee31e699dee0692a67541f9663abb32b8ba9ea952392d87640d073482f2048870fe3a13d5e399be4d7fff862f189f9a844fe29096f4662a2094e20d7352e9074fe82b08d4b057d9e1f17e031aefaf22d7aa1e8abb62fe4854065607d7b0f46c536c599561234674efa4451dc38afde75f314a7f4f3149cce19e34b13850dd3a389224ad094f92b043c2689cd667992e1ed73b22ed24400dff2b5bc41b1e22bd20c5740cb76de94891f541f5bd8a809eed15951bb2e9f0eef33e726e0ac7245315b1475353a1ad652eba3decb050f32fa1b435b27a20072ff2b603e60ff6895c4bf5a77534d05511c40ef4f8eac85485c1482672bc14ff63a867f104ebcd9e858df6c6e1e4a703356beee672d041ea1842590cf223ed8622b183e1929959e32b75db76a3c499a6e22ca506285a3e0d3e8ad2e732f810ee91aa11fa2cf5f4d5c0e8c8e0420855aad8cea40719adbf50131ea31966a464134ea32c48c4b2b8f518e884a14ea48c8d2a38c0013c488d7dc2119f13d239b0e228e85c9e98cc7755bcc8069acbff554317b3fa6609da9bd6a6fe3533ee9b5a9835694614027e4de7133139dce520c0fdb2fcff691508e51d5d4c0a0c694e9a587ca65c8835e77f06b9e7983319e27aca6eb52b4212ef757c7fbffafbac8f2f0d5c49f5c1b8b49be1efd17f6bd7fc0c1cef8ee52c7ce02ceeb3442cae17f7b1c1b7310317b629cbe4da93a875d001d54af84b87b6509bf541d0198f04e85c7f459a4d962825d7cd31d19633049c3c1b621885020bd5cc2e1beed49b7bf06707add50a436174d3184840465c3174446da4564c392168af8db11c3761c11926ff797005f0225374fe2642799244a59db508ff0147e14f83fd9e909b2e8d1980fd0ba43ef9718907084a768f4b506d6a4be644767d54ab646da18286a09999a533ed62537016c23967de257ae765d717752ab0b07373551f4463b564a12c1e02c4fc802ea8c7437fa7a7ba3ea34380389ae7e3498c253b114438953652349c608b46ab37cb6105084db9de3ccb70f21a38a29dc2d4b4efe80b0d68597dbd85b47e9675cf9e2d1d0ba4d4ede821148fc5feeae17323a0f6efedc5bc06f961cacdfd25c49bf0bea16c79e14b613367867b8ce0d6fa6364d5d6a28d29d2a73a4649b278f789098536e548595734ebda086bb403b9eccf3fdbf1ce5884735937750e3e937473d76a388afbba986bc9ead9b16c820a3a32861dffccf7cfd61822aa42ec28ba1f0521c20901b4bee23a84213211cf1bd560d65c06c48a2ad9265d721284882910530c01d429df9b42903788c8f1693ca4004e36657f1ba6aee9b8c699f8e7788516b84d8c21d81d2aec52a3fdf75958a24950ac5937680699a9b65c5e5a1b355dbf63f61027e4c06a8770bbf2e99055cfde132b567182af653f8a8c1a71c1bbb8098eacec3294de48cf8d0c7e076d14f59a253bc76fe2805f568a6ba2583b40ced1e089d41085811a72293edc0df653ed762f5d40d21a6ac42bf3ffe45d88157e0eacdf379b544d4fa962b7cddb61b4af54fd76d65b428a9d6f393ac99a1c98b1f97561c53759c3f34d56aef0635f234b2977b848adffa4c310529516a522594908061d40726de0592cb345c09b943b9c29a7b94f24fb1181188a5db42e84d812f9f8fdb605579e9d2514b03522efcb81bac3aae0a1127c723ac0fc47c2f7b4753cf0531bb46ce869e367f2ab408b293b4f60b027b74fdd8479113c2be9bcf461ad3a6f8fdbd30a3dffb3d6953a238547f978a09a6ea99d852696ab83b7df1be8d15dd20d33c568cad43041c40430c0c9f9d24ce0d40e903da107c576d91ce176ad4fea84af980657d683ede920de4f440e2bcf44cd13dc2b8211a7059ec1d917b0abc91bf48ef87a243a54afc6f946abd9bbcbac581a6162b9de5b4fb11e2fc82bffefa9f66ff404e695729f7da34afb1b7242145252d7cb416f702f90c19f8b076645e6a9df7d9aad48249e8eeb9b9d2893d30386d8c88773a7f86a62867271e370cd14a6f5492faf72db4136822fb49d7d08a14dae165b3c982aa6e70d50639255b075fc4fd3002a438810a6beca4b903a04bb3ad8cf276cc6edce87c90686449595c96ab8bf6213cdff9edc7aa0247f164a29779555e99b871e5752e69177f0fc3c54ad95a2c9f73cd3b75ad9733fd4704cf570ab76f40675b78950e4db22d2b4d4c7f77d0991a374b410742d876107f0aa3bd065704d7ecdc504cf03f83b343f72e991afe8cee3335c0bcf85450e74d403a489859f5ff9ba2cab7104b50358011306cddcb8a7a947da3b8702435733501d262951f3a7849fa7b55b7098f1b0aa97cb21c3e48d2e766af88ad42a32b8bcd56ce7f2f9972041b73d9175e73c3f0e5912c2ed984cfd419d3f202db5697dc08a3fbdcf7280d389fbc5691b3d36ac3ce965007f7d4806ab184d1145dd5957ada4d3fac0736a89a3fdb5afede16942a7e789507eeae070dc9f3ec6f5f0560568668876623aecc255bc63519230ae9299098116a3d1f0c5de54bd0a2bb36233916cef4f8ac76f3bd2eae961cc844f40446ef55a4d3c5cca9c8d878f86c227dd023a26a28d29d2a73a4649b278f789098536e548595734ebda086bb403b9eccf3fdbfc627fc975ec8f7c1598f60b8c1aae7a6b6b56f34b3498b1b116cadd1b625458ee40b9c0fb45c0eae064f09c3cf3af39d64232093850fb55ca04ec72d961133b102b08c8db096f14776699876d796ce4d9c69e3fbb557eaf1cce26f99daee5cd6f3e895f808a530ed326caac89dac1ca4adaa30cc84400c2a23075f5739df913a6bed25c2911906217ef5fe83fbc7d080f8ca5dfc886b99cd8c14569efc67efd0b2bc3e6652bd162ac41e6352effb3b8f9ced7a3507e21ce7edae77e5088368073b923608e2772fda57d88fd2ac6b4e96b3b5e0e173a70ed9d8d5c71655b4cfae5b5e22a5ab3174550249bc6111d93dc55edd132badb93c16fa8600809c52439c4ad5a75247843a07ac9244999c1d22b62e9bf8b3018addd0f092f2da379863fce70145300b932099b14d504c7a301f4ad83557664732a7124c79fc1597a9fae3115ab699a4530ee97a52b009c607a9e58e4a47777164dae4761b05f6608b3e38efde31969cd62c21247904b2545b40157b9151fb9fe2833c43ebc89308e05a8ba42fca552838587b34872242db8a278ba55601c7c842bc7575d991de88b365fea59b2b7c370f385f42069d37b87f7ddf1116c52ac26f10a2af9fa1c58a3bc4f2063d91b940ade220f7957127d0c47ba8572cab30a2f44c4d2a53aee700fd6e59f1efafa0527205b1a07f688d32432e01cff93baa7585c26a56470b3960fec8aae9ffcdb2b9ed88ee93289e577dfc8bd8c4749839aa7e83d7bef6803191675c20bccb2c7e940b90c3737b4ade238dc3c5603603249d1edc93c07f4b68b32745dd3489727cc66c3290e57a49d43c8920765d7f93977f41fffabcf75a62d1f7ac29f16e832dafa81c9b98f9cd95b1960da8bc23142b2556f52da8706abc77bd45401aae0180199ed5653ec0fcec88f6944d8252dddefdac0af55d38f1701d32d7a3151f5b8be2a5574d583b4df2c8bc645184fc1caaafa4671f3b2b5377f35a236dcc1d0803e1b44774dbd4985dffecd1b85b0cf15b5781d4651c00ffe448ecb77132da6fe030aaa4606aec3f84a93c28e8e954894acbe196ca8f3f7335b8709364c5536ad777e8722c10260e495fa7f279fa1a0ab346c201a960dc97d1bcbdc6fc4738d1cb388db058bbc97911bf0c43d555e7e45ecdd68240277780a5d5060990e4a6fe72bd93679432cbe269c05796e29228c04e33c49e23e86ad126a093c02c3b2a56ddd0a6c92d84e431d194ec6dfd611ebdc99036e96e7f03703d2a450b086256ac2618bdc463a6f9fea25e0c7f002063e6e30ee98adf024c2e3d7fcc178781161d847e6a29e65b0eb521f17fcad9f29e5c35f1a989e7765845bd52ca9f380d404c5ca29c23fba6b5631728dd39af49feb0fbd40e6080d1698809d1e9880b33481190785524c3122f81b742a76e939715f929a13e66fe8370c1e2bd41390bdd400ffe4916e9ce8e6733b77bebe3bcdad351419b8a3ba5f1efb1599c309ab5f65d150f33304a5b5a3e9a9b49b8dfc2e45a63f3a2974a960650562fc6ef357fe352981d9788c2dd38a79307328d9d7c97e4e64667f99e214304822147cb6143456a7b92a8a8ef3cf501141613ab71e6a19397980bb90999b4dc90ef0550ece9a588af61b1e5d7acd8c23f894195edaa6e135ada73b5a8e64f402b05c2b78a743f99d78f2797ae046844614813cb8fde43a6977f23de3a2d1fca8aca70e87734d938e284b802eec62388ca86fd497beb639170238117bdde0d9cd52c8820747aba47e05687de09bddad374450d5e5c932f9195296d5c07be1cb7a97a0ba3b0bbf73c6dae871d2cc0243f4289ebe1c7537ca699e9d1ba65e31b0cf9016f6d60d369edb445c1335a8312d4c09271847e9956d84f0d9f724d125340cc3fad767b2a32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670b313ce38bf9e705c82ad591103bcf2a0edaa4c702c598a5989787dd0b23c72be0497ae8138811ef4466ede653bab7a59feb3d3c14f9ed50fc33a00aeb5bec32ebc0dda5fbba7adf79add0c1a440c5636bed1591ecebde941263f171f2133a3b1d8d425aafaa1f407255a7de15493a4951b19df16f185be018f5c1234603e72d77fa62ea0b2b19da166397e048b817b72476426943f646af5202369da97dbd15b7af48c82b40b018425afb29aaeb7ff61add8112d03b9ecc9408d0c316799940ec3ba5b69405b07007c12c47d831a9382ee4739da5398d8e69752927b656e679ce37db45d93c04abd58fc8b245888f0dcbd2ad4ffc9bddabc3aeaa68f2ca977fd42435bb4ddd62e642d8a247bc66ec36886f2fc31a9b0b5d1ffefc82d32431e39d917f925fcd597c3b075ef109b6614835374716e182b7950d219801f337d08f8af3a21127d45c35fa750961a93557c8b577870892d0a5eeaa575347f0be2650f4ee3378ff2b7c9d6916ef18a481a4d88fce6c62f9bef4dc515e872843fc310198661fd83cb4d29f6a1e9b4d4ec6b4e2da7290702a1c8203f5db5e2a67fe847e50d404c5ca29c23fba6b5631728dd39af49feb0fbd40e6080d1698809d1e9880b85a36f1fdbd1c86501e7d43d624c83ad4912c974c9044835fd2a88aad191482af072c68fc7dbd1d84f521a1c908da30af1b4cb3f1e3cab7b3b6a64dc41ee2b9e6af4dd9c6ef882883e3dacf18ec5f16bc5462c09d35953d816e56364651fed5b532949b1a2285459f44b5244a27f3c21de3800fa8d114a640bc05fc5bc087b488d82bbb1c2027a711cf4024ff83477f07bfad0a1cef1ed4830a72e7380334fabcff22715e6ee2c86dc768d9c1964400bb15cb058067935d9b8cf020211b37ea4d3ca8a72105130026ded0d3fe5ca20dcc3b5d625f9b6feefc0a6650df6e6dc933112b29204728cff0d10addf50d53b130bf891c2cb7506134e83ce93c15ffb3089a31eedc112790ce15c2ef8d59e060221c9c72ea7f0ffa0db51d381da8b4e520662763b82c64f06c2312a784bf55a1a9cc9e9eb46947d95ed07851be943c42056cc5fd780e7c544210bb33a4b37f92549d4444e86f1309656cc7b39e171e6459927f45c169685c5d090d0b6bd3f4bbf06244c98f042e67ea14a8c24af2d92262f561b02a49376e3679acd5975e3790abdff09ecbadfa1e1858c7ba26e3ffcef48800e65ad08120618b3252ae309a3605e4d0cbd9f6c649c3126cb16f96363e0b4d57dfdbb995fae1b66170197fedec3f25005a0d189b74b7656194f715a7d4b01e7f76300c0f91faa690bada69c7e3994b2e6a2a161aeea70c023547412b7a4f10c7edc5124f2a349353ce5688037c316894d6d7e7f8b6ee19e9d3a45d9d310b0612c3573670ad60b581536dbab7867438758c72097e1f2ceefb2f543fe85502398cb20f5ba227b38f274deaae434d0c0e673d7e941b250f01b7e4a62f779fd3e2274ead9ebaee4beaa50b6a148995fb0138c219a4f7298bbdc19a7fe6b439ebc318ca2ca2252dbc6a2f25b57e9d001d25e1319ab1390cc909c51da3a66fa28f7574235ee483f6c72f03144a4c87d433730c85f1f8f4bd2d8d7a2675ea0c8097bec966cdca26bcf6a4ae7d30a9051cc17e142fd00888243e23c8d91df7a054c73bbb7de1a33617394228e03713771855f4fd9c9a5bb2f3062ec84742b6add2a9927f45c169685c5d090d0b6bd3f4bbf06244c98f042e67ea14a8c24af2d922643566170a7ce4f452aca10f73143c763e8fed201de73df6ceb2d026e6bd7550fa1fd98554152adcab3c8c3f0fc3b01f7d245a5661dc459a61f92ea0a7248ed0feacd3fe06940e5264a8a436f35a0e6019274d28bb36af8f9729a60be0ceb98438ef52f2a294fd5976d89eccca8b320bac76f637d4e9587b6a0b121d6b7b113cdd97b9bbef0ed17c65c293eaf2ad496c4b7f73d09b55f9542724affb3dc2492252cfd0aad9104d3cf69b2c5c1caa65c2f08e55e42170309207787eb0d0d563aefrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython-lxml-3.2.1-4.el7.src.rpmpython-lxml-docs    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.11.1RURkQޞ@Q@Q@Q9QP{Puc@Pd?Pd?PP@P ONNMy@MQ0@M"LLLs@Lq@LMxLMxLMxLH2KK@Ky7@KO@J@J@J@JlE@J> J%@I@II@II|T@IBR@I/@I*@I*@I!\H@H@H[HA=H"@G:G GGG=@GFֱ@F_F@FEE - 3.2.1-4Daniel Mach - 3.2.1-3Jiri Popelka - 3.2.1-2Jeffrey Ollie - 3.2.1-1Jeffrey Ollie - 3.2.0-1Jeffrey Ollie - 3.1.0-1Fedora Release Engineering - 3.0.1-2Jeffrey Ollie - 3.0.1-1Jeffrey Ollie - 3.0-1Jeffrey Ollie - 2.3.5-1Jeffrey Ollie - 2.3.4-1David Malcolm - 2.3.3-4David Malcolm - 2.3.3-3Fedora Release Engineering - 2.3.3-2Jeffrey C. Ollie - 2.3.3-1Jeffrey C. Ollie - 2.3.2-1Jeffrey C. Ollie - 2.3.1-1Jeffrey C. Ollie - 2.3-1Fedora Release Engineering - 2.2.8-4David Malcolm - 2.2.8-3Jeffrey C. Ollie - 2.2.8-2Jeffrey C. Ollie - 2.2.8-1Jeffrey C. Ollie - 2.2.7-3Jeffrey C. Ollie - 2.2.7-2Jeffrey C. Ollie - 2.2.7-1David Malcolm - 2.2.6-4David Malcolm - 2.2.6-3David Malcolm - 2.2.6-2Jeffrey C. Ollie - 2.2.6-1Jeffrey C. Ollie - 2.2.5-1Thomas Spura - 2.2.4-2Jeffrey C. Ollie - 2.2.4-1Jeffrey C. Ollie - 2.2.3-3Jeffrey C. Ollie - 2.2.3-2Jeffrey C. Ollie - 2.2.3-1Fedora Release Engineering - 2.2.2-2Jeffrey C. Ollie - 2.2.2-1Jeffrey C. Ollie - 2.2.1-1Jeffrey C. Ollie - 2.2-1Jeffrey C. Ollie - 2.2-0.8.beta4Fedora Release Engineering - 2.2-0.7.beta3Jeffrey C. Ollie - 2.2-0.6.beta3Jeffrey C. Ollie - 2.2-0.5.beta2Jeffrey C. Ollie - 2.2-0.4.beta1Jeffrey C. Ollie - 2.2-0.3.alpha1Jeffrey C. Ollie - 2.2-0.2.alpha1Jeffrey C. Ollie - 2.2-0.1.alpha1Jeffrey C. Ollie - 2.1.3-1Jeffrey C. Ollie - 2.1.2-1Jeffrey C. Ollie - 2.1.1-1Jeffrey C. Ollie - 2.0.7-1Jeffrey C. Ollie - 2.0.6-1Jeffrey C. Ollie - 2.0.5-1Jeffrey C. Ollie - 2.0.3-1Jeffrey C. Ollie - 2.0.2-1Jeffrey C. Ollie - 2.0.1-1Fedora Release Engineering - 1.3.6-2Jeffrey C. Ollie - 1.3.6-1Jeffrey C. Ollie - 1.3.5-1Jeffrey C. Ollie - 1.3.4-1Fedora Release Engineering - 1.3.3-3Jeffrey C. Ollie - 1.3.3-2Jeffrey C. Ollie - 1.3.3-1Jeffrey C. Ollie - 1.1.2-1Jason L Tibbitts III - 1.0.3-3Shahms E. King 1.0.3-2Shahms E. King 1.0.3-1Shahms E. King 1.0.2-2Shahms E. King 1.0.2-1Shahms E. King 1.0.1-1Shahms E. King 1.0-1Shahms E. King 0.9.1-3Shahms E. King 0.9.1-2Shahms E. King 0.9.1-1Shahms E. King 0.8-1- Mass rebuild 2014-01-24- Mass rebuild 2013-12-27- spurious XMLSyntaxError after finishing iterparse() (bug #874546)- 3.2.1 (2013-05-11) - ================== - - Features added - -------------- - - * The methods ``apply_templates()`` and ``process_children()`` of XSLT - extension elements have gained two new boolean options ``elements_only`` - and ``remove_blank_text`` that discard either all strings or - whitespace-only strings from the result list. - - Bugs fixed - ---------- - - * When moving Elements to another tree, the namespace cleanup mechanism - no longer drops namespace prefixes from attributes for which it finds - a default namespace declaration, to prevent them from appearing as - unnamespaced attributes after serialisation. - - * Returning non-type objects from a custom class lookup method could lead - to a crash. - - * Instantiating and using subtypes of Comments and ProcessingInstructions - crashed.- 3.2.0 (2013-04-28) - ================== - - Features added - -------------- - - Bugs fixed - ---------- - - * LP#690319: Leading whitespace could change the behaviour of the string - parsing functions in ``lxml.html``. - - * LP#599318: The string parsing functions in ``lxml.html`` are more robust - in the face of uncommon HTML content like framesets or missing body tags. - Patch by Stefan Seelmann. - - * LP#712941: I/O errors while trying to access files with paths that - contain non-ASCII characters could raise ``UnicodeDecodeError`` instead - of properly reporting the ``IOError``. - - * LP#673205: Parsing from in-memory strings disabled network access in the - default parser and made subsequent attempts to parse from a URL fail. - - * LP#971754: lxml.html.clean appends 'nofollow' to 'rel' attributes instead - of overwriting the current value. - - * LP#715687: lxml.html.clean no longer discards scripts that are explicitly - allowed by the user provided whitelist. Patch by Christine Koppelt. - - 3.1.2 (2013-04-12) - ================== - - Bugs fixed - ---------- - - * LP#1136509: Passing attributes through the namespace-unaware API of - the sax bridge (i.e. the ``handler.startElement()`` method) failed - with a ``TypeError``. Patch by Mike Bayer. - - * LP#1123074: Fix serialisation error in XSLT output when converting - the result tree to a Unicode string. - - * GH#105: Replace illegal usage of ``xmlBufLength()`` in libxml2 2.9.0 - by properly exported API function ``xmlBufUse()``. - - 3.1.1 (2013-03-29) - ================== - - Features added - -------------- - - Bugs fixed - ---------- - - * LP#1160386: Write access to ``lxml.html.FormElement.fields`` raised - an AttributeError in Py3. - - * Illegal memory access during cleanup in incremental xmlfile writer. - - Other changes - ------------- - - * The externally useless class ``lxml.etree._BaseParser`` was removed - from the module dict.- 3.1.0 (2013-02-10) - ================== - - Features added - -------------- - - * GH#89: lxml.html.clean allows overriding the set of attributes that it - considers 'safe'. Patch by Francis Devereux. - - Bugs fixed - ---------- - - * LP#1104370: ``copy.copy(el.attrib)`` raised an exception. It now returns - a copy of the attributes as a plain Python dict. - - * GH#95: When used with namespace prefixes, the ``el.find*()`` methods - always used the first namespace mapping that was provided for each - path expression instead of using the one that was actually passed - in for the current run. - - * LP#1092521, GH#91: Fix undefined C symbol in Python runtimes compiled - without threading support. Patch by Ulrich Seidl. - - Other changes - ------------- - - - 3.1beta1 (2012-12-21) - ===================== - - Features added - -------------- - - * New build-time option ``--with-unicode-strings`` for Python 2 that - makes the API always return Unicode strings for names and text - instead of byte strings for plain ASCII content. - - * New incremental XML file writing API ``etree.xmlfile()``. - - * E factory in lxml.objectify is callable to simplify the creation of - tags with non-identifier names without having to resort to getattr(). - - Bugs fixed - ---------- - - * When starting from a non-namespaced element in lxml.objectify, searching - for a child without explicitly specifying a namespace incorrectly found - namespaced elements with the requested local name, instead of restricting - the search to non-namespaced children. - - * GH#85: Deprecation warnings were fixed for Python 3.x. - - * GH#33: lxml.html.fromstring() failed to accept bytes input in Py3. - - * LP#1080792: Static build of libxml2 2.9.0 failed due to missing file. - - Other changes - ------------- - - * The externally useless class ``_ObjectifyElementMakerCaller`` was - removed from the module API of lxml.objectify. - - * LP#1075622: lxml.builder is faster for adding text to elements with - many children. Patch by Anders Hammarquist.- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild- 3.0.1 (2012-10-14) - Bugs fixed - - * LP#1065924: Element proxies could disappear during garbage collection - in PyPy without proper cleanup. - * GH#71: Failure to work with libxml2 2.6.x. - * LP#1065139: static MacOS-X build failed in Py3.- 3.0 (2012-10-08) - ================ - - Features added - -------------- - - Bugs fixed - ---------- - - * End-of-file handling was incorrect in iterparse() when reading from - a low-level C file stream and failed in libxml2 2.9.0 due to its - improved consistency checks. - - Other changes - ------------- - - * The build no longer uses Cython by default unless the generated C files - are missing. To use Cython, pass the option "--with-cython". To ignore - the fatal build error when Cython is required but not available (e.g. to - run special setup.py commands that do not actually run a build), pass - "--without-cython". - - - 3.0beta1 (2012-09-26) - ===================== - - Features added - -------------- - - * Python level access to (optional) libxml2 memory debugging features - to simplify debugging of memory leaks etc. - - Bugs fixed - ---------- - - * Fix a memory leak in XPath by switching to Cython 0.17.1. - - * Some tests were adapted to work with PyPy. - - Other changes - ------------- - - * The code was adapted to work with the upcoming libxml2 2.9.0 release. - - - 3.0alpha2 (2012-08-23) - ====================== - - Features added - -------------- - - * The .iter() method of elements now accepts tag arguments like "{*}name" - to search for elements with a given local name in any namespace. With - this addition, all combinations of wildcards now work as expected: - "{ns}name", "{}name", "{*}name", "{ns}*", "{}*" and "{*}*". Note that - "name" is equivalent to "{}name", but "*" is "{*}*". The same change - applies to the .getiterator(), .itersiblings(), .iterancestors(), - .iterdescendants(), .iterchildren() and .itertext() methods, the - strip_attributes(), strip_elements() and strip_tags() functions as well - as the iterparse() function. - - * C14N allows specifying the inclusive prefixes to be promoted to - top-level during exclusive serialisation. - - Bugs fixed - ---------- - - * Passing long Unicode strings into the feed() parser interface failed to - read the entire string. - - Other changes - ------------- - - - 3.0alpha1 (2012-07-31) - ====================== - - Features added - -------------- - - * Initial support for building in PyPy (through cpyext). - - * DTD objects gained an API that allows read access to their - declarations. - - * xpathgrep.py gained support for parsing line-by-line (e.g. - from grep output) and for surrounding the output with a new root - tag. - - * E-factory in lxml.builder accepts subtypes of known data - types (such as string subtypes) when building elements around them. - - * Tree iteration and iterparse() with a selective tag - argument supports passing a set of tags. Tree nodes will be - returned by the iterators if they match any of the tags. - - Bugs fixed - ---------- - - * The .find*() methods in lxml.objectify no longer use XPath - internally, which makes them faster in many cases (especially when - short circuiting after a single or couple of elements) and fixes - some behavioural differences compared to lxml.etree. Note that - this means that they no longer support arbitrary XPath expressions - but only the subset that the ElementPath language supports. - The previous implementation was also redundant with the normal - XPath support, which can be used as a replacement. - - * el.find('*') could accidentally return a comment or processing - instruction that happened to be in the wrong spot. (Same for the - other .find*() methods.) - - * The error logging is less intrusive and avoids a global setup where - possible. - - * Fixed undefined names in html5lib parser. - - * xpathgrep.py did not work in Python 3. - - * Element.attrib.update() did not accept an attrib of - another Element as parameter. - - * For subtypes of ElementBase that make the .text or .tail - properties immutable (as in objectify, for example), inserting text - when creating Elements through the E-Factory feature of the class - constructor would fail with an exception, stating that the text - cannot be modified. - - Other changes - -------------- - - * The code base was overhauled to properly use 'const' where the API - of libxml2 and libxslt requests it. This also has an impact on the - public C-API of lxml itself, as defined in etreepublic.pxd, as - well as the provided declarations in the lxml/includes/ directory. - Code that uses these declarations may have to be adapted. On the - plus side, this fixes several C compiler warnings, also for user - code, thus making it easier to spot real problems again. - - * The functionality of "lxml.cssselect" was moved into a separate PyPI - package called "cssselect". To continue using it, you must install - that package separately. The "lxml.cssselect" module is still - available and provides the same interface, provided the "cssselect" - package can be imported at runtime. - - * Element attributes passed in as an attrib dict or as keyword - arguments are now sorted by (namespaced) name before being created - to make their order predictable for serialisation and iteration. - Note that adding or deleting attributes afterwards does not take - that order into account, i.e. setting a new attribute appends it - after the existing ones. - - * Several classes that are for internal use only were removed - from the lxml.etree module dict: - _InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext, - _ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext, - __ContentOnlyElement, _AttribIterator, _NamespaceRegistry, - _ClassNamespaceRegistry, _FunctionNamespaceRegistry, - _XPathFunctionNamespaceRegistry, _ParserDictionaryContext, - _FileReaderContext, _ParserContext, _PythonSaxParserTarget, - _TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy, - _ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper, - _OpaqueDocumentWrapper, _ModifyContentOnlyProxy, - _ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy, - _AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter, - _ParserSchemaValidationContext, _XPathContext, - _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam - - * Several internal classes can no longer be inherited from: - _InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult, - _IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry, - _XPathFunctionNamespaceRegistry, _ParserDictionaryContext, - _FileReaderContext, _PythonSaxParserTarget, _TargetParserContext, - _ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper, - _ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy, - _AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext, - _XPathContext, _XSLTResolverContext, _XSLTContext, - _XSLTQuotedStringParam, _XSLTResultTree, _XSLTProcessingInstruction- Bugs fixed - - * Crash when merging text nodes in element.remove(). - * Crash in sax/target parser when reporting empty doctype.- Bugs fixed - - * Crash when building an nsmap (Element property) with empty namespace - URIs. - * Crash due to race condition when errors (or user messages) occur during - threaded XSLT processing (or compilation). - * XSLT stylesheet compilation could ignore compilation errors.- rebuild for https://fedoraproject.org/wiki/Features/Python_3.3- remove rhel logic from with_python3 conditional- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild- 2.3.3 (2012-01-04) - Features added - - * lxml.html.tostring() gained new serialisation options with_tail and - doctype. - - Bugs fixed - - * Fixed a crash when using iterparse() for HTML parsing and requesting - start events. - * Fixed parsing of more selectors in cssselect. Whitespace before pseudo- - elements and pseudo-classes is significant as it is a descendant - combinator. "E :pseudo" should parse the same as "E *:pseudo", not - "E:pseudo". Patch by Simon Sapin. - * lxml.html.diff no longer raises an exception when hitting 'img' tags - without 'src' attribute.- 2.3.2 (2011-11-11) - Features added - - * lxml.objectify.deannotate() has a new boolean option - cleanup_namespaces to remove the objectify namespace declarations - (and generally clean up the namespace declarations) after removing - the type annotations. - * lxml.objectify gained its own SubElement() function as a copy of - etree.SubElement to avoid an otherwise redundant import of - lxml.etree on the user side. - - Bugs fixed - - * Fixed the "descendant" bug in cssselect a second time (after a first - fix in lxml 2.3.1). The previous change resulted in a serious - performance regression for the XPath based evaluation of the - translated expression. Note that this breaks the usage of some - of the generated XPath expressions as XSLT location paths that - previously worked in 2.3.1. - * Fixed parsing of some selectors in cssselect. Whitespace after - combinators ">", "+" and "~" is now correctly ignored. Previously - it was parsed as a descendant combinator. For example, "div> .foo" - was parsed the same as "div>* .foo" instead of "div>.foo". Patch by - Simon Sapin.- Features added - -------------- - - * New option kill_tags in lxml.html.clean to remove specific - tags and their content (i.e. their whole subtree). - - * pi.get() and pi.attrib on processing instructions to parse - pseudo-attributes from the text content of processing instructions. - - * lxml.get_include() returns a list of include paths that can be - used to compile external C code against lxml.etree. This is - specifically required for statically linked lxml builds when code - needs to compile against the exact same header file versions as lxml - itself. - - * Resolver.resolve_file() takes an additional option - close_file that configures if the file(-like) object will be - closed after reading or not. By default, the file will be closed, - as the user is not expected to keep a reference to it. - - Bugs fixed - ---------- - - * HTML cleaning didn't remove 'data:' links. - - * The html5lib parser integration now uses the 'official' - implementation in html5lib itself, which makes it work with newer - releases of the library. - - * In lxml.sax, endElementNS() could incorrectly reject a plain - tag name when the corresponding start event inferred the same plain - tag name to be in the default namespace. - - * When an open file-like object is passed into parse() or - iterparse(), the parser will no longer close it after use. This - reverts a change in lxml 2.3 where all files would be closed. It is - the users responsibility to properly close the file(-like) object, - also in error cases. - - * Assertion error in lxml.html.cleaner when discarding top-level elements. - - * In lxml.cssselect, use the xpath 'A//B' (short for - 'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for the - css descendant selector ('A B'). This makes a few edge cases to be - consistent with the selector behavior in WebKit and Firefox, and makes - more css expressions valid location paths (for use in xsl:template - match). - - * In lxml.html, non-selected