python311-aiohttp-3.9.3-150400.10.27.1<>,:XgD8p9|=`\RD ? d ) S8<HLe      2 36$9g<<?t??B (Bn8BxA9C|A:H/AFGHIPXY\,]^b9cdkepfsluuv$ w,xydz    I L X n p t z Cpython311-aiohttp3.9.3150400.10.27.1Asynchronous HTTP client/server frameworkAsynchronous HTTP client/server framework for Python. - Supports both the client and server side of HTTP protocol. - Supports both client and server WebSockets out-of-the-box. - Web-server has middleware and pluggable routing.gD8h01-ch5a0SUSE Linux Enterprise 15SUSE LLC Apache-2.0https://www.suse.com/Unspecifiedhttps://github.com/aio-libs/aiohttplinuxx86_64LiR-,-,V(O@@--DD##NN3S%r%rBB((88T*st$$  F*^}^}FFEESMy{Q^^33MMop1FF23!,w,w[xNyA2525PQ.ljk/a/D#m | $!S+>6vQ2 Ph\-pE~4'-UQdN;K?G(x-+yZpTlQ- H rLAA큤A큤큤큤큤큤A큤A큤gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8gD8eIeIeIgD8eIceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f15089f80d0db7d755a941db4572172c270ecbd8f082ba215ddd095985942ed94a9ebe4c94901f241791e0353b06db9369907e43b65fbce8809733861256f42106fa26a4f3737561b36e17a8faf16207a54dfe6b109106610b7cb2710fa0311e45de0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85503c5fbc1a7211de8123e85ae166b58887ac9a0219d6742b37d8a79854d45a02f8aff8921a69c99397e852868dd09a985c2a76d1458c75b2de3bca3cffd7bf11a6ea7e37aaa6ff03937cf4be3ec71980b864121c3fb57c315ce82d863d83dbd166d5e6320ac0594e066e3dd6c78d0d3a7360e67c5b84f4ae06d954cbca23be3316d5e6320ac0594e066e3dd6c78d0d3a7360e67c5b84f4ae06d954cbca23be331783acdd0d78434bfae400540be8f87c81a202b98d28bc916383d6ee11db863e7783acdd0d78434bfae400540be8f87c81a202b98d28bc916383d6ee11db863e72bced037dc56e988155c62380a020635fce2dfcf3903edc85f85e9ad7853fc13fd382cff6fcdf53363df243cf7cc6b726ae8be7d8618720807de21e1de2e6c2da291b3cc3a32f1384448251c20e131d22935f25ecc1b205a419e756e944226aba3d89460877172c563c13b094da958274c2aa40f0fd3d8cf7890d6cf8fec71a45cf9875f08e8afa51790179381cf00130fe260333f2039bf5e4b961bf33c4c315cf9875f08e8afa51790179381cf00130fe260333f2039bf5e4b961bf33c4c315fef74c4ab7d97a51b2f86dbe1776c83e41cbcd3f252cc49e2e930c23702863b5fef74c4ab7d97a51b2f86dbe1776c83e41cbcd3f252cc49e2e930c23702863b8f7f246130200fa007b5584c55757e0bf6c7dc61915cf8f13780c16f464103ca582e7997ed1a589d0c2cee360e07ebabfbb0d217e20234ac58ab40ca1adb0a708fc7e83c9c34d089fcb5423843e1c6c77b86c441bc1f58bd20c209945c12df108fc7e83c9c34d089fcb5423843e1c6c77b86c441bc1f58bd20c209945c12df109c95afcd0d7af8c4b895bfe6e230d0ec231f3461b597e781e012a2b5a7fcebb89c95afcd0d7af8c4b895bfe6e230d0ec231f3461b597e781e012a2b5a7fcebb8c114c34191ca84b15ca0d5ee28d221bef1f5af146a079c0b96ffe8f102fb7bc32f333dbeebc8bcda2965f5f2bf67c3d890d1f3e76439c7fbeac3707a905f3e845f5603b23e0e545917c3610b88161df1ed1cb3b99753edd2bdae140852dafb68fab45004ec8ef8c1e6ec602e32841e750dc111f96a07551c06baaa8c25d3d8c343e841b52bf14a7e17f2ef3c41fe0cdcbc7ad06f0448dc787970f66d27bbf396addc6684e5a0d95ec68b8b97e537dc704da900dc98da7ae60f2d38aa657f42001c6d59a597de9d1698d31be6bd19af6758754e448840b416a347323c8f37de5b1c6d59a597de9d1698d31be6bd19af6758754e448840b416a347323c8f37de5bcab967b2b42c01d9b6925bd81ce7d92992576c7f3b753cac974708a69cbdd803cab967b2b42c01d9b6925bd81ce7d92992576c7f3b753cac974708a69cbdd803e239a2b4566fb2782ce03a6bec0ee5f3dd18da0dbf3ee40bea162fb21ebf130ee239a2b4566fb2782ce03a6bec0ee5f3dd18da0dbf3ee40bea162fb21ebf130ed8eaa78e477eaa87c39bed3682c7a671541fef7d33604e3fd829962f3790a14ad8eaa78e477eaa87c39bed3682c7a671541fef7d33604e3fd829962f3790a14a00d21b92bcc43a3c80aadef4fa1a456a702e045aa3361ba761144f33ce2f20034dc2000cbca3732f8ee4629c0bae0c92a014779e3835f983eb0059dbe47be4d2f387434b73efd938ae11b818678266c01698b1cfd98b866417d3bf89ca658481f873fd47f3576978d39b15e802c72dbb0d3153164c47bfb44871f0cae1cfaf9c659f2a0ea1792284e9dd502b44ef89816e2f6f29fde8a2517d8e78b71f7a4bdc659f2a0ea1792284e9dd502b44ef89816e2f6f29fde8a2517d8e78b71f7a4bdc760a3685ca944e46c8c102f0986ee7d38710bc37c8034b35b2500fa4e3234252760a3685ca944e46c8c102f0986ee7d38710bc37c8034b35b2500fa4e323425216ab75aa5742d86ee8880b197ca199669eb8d0dd97dab0d5117273096c90af7c16ab75aa5742d86ee8880b197ca199669eb8d0dd97dab0d5117273096c90af7c552ad175b30d7fb709c6a3b96f7b32603a042ae82014dadb06495a99c5e2f5efe7d575aa7804a5650245bbaca53edfe40b492ae06616095ac6426e5ac8dc2345d3d6b8219143d8700f8559560ce94e55130c7d9a71cf79d5749da23ca9d5cf8bd3d6b8219143d8700f8559560ce94e55130c7d9a71cf79d5749da23ca9d5cf8bcff432800cf67c60e1f56da55f0ca321dcbc63095af353a9ebc0b732aad7dad2cff432800cf67c60e1f56da55f0ca321dcbc63095af353a9ebc0b732aad7dad2bb6776293624ab5be115023f34226232265f1f88a9cc0b32de0cedac235adfc78503443d3e0ef235c3c8f8dc12b22546c588708c2d20e64a2314474a594915334d32a88da7e923dfb5d65a7f9ef8ee2dd91351eb770d7be4bcd49eff231ab93e97b81776c73b3bab6c90bb2ddffc43e086ef22ab0cb074dca0f9dcf40ec74a9b33240931ebecfe095bc3220a74a1978612dd5205c7011c835383f4f2e0e152432d03631d6907992a117f9d4daac694dc03cf4397f39a939cc58d3cf80f2057558ee0c456f4dc99719e7e5f57a559eb265b645bed6f3c21470664949bed41c9978ee0c456f4dc99719e7e5f57a559eb265b645bed6f3c21470664949bed41c99750cded6bf0eb6a8e082a8068e308a60e68cf0e94e8f13f46e150c57f5f4a382f5143b929b78fe6e78bf8f5515d5c82abefe0a37257a62971ab7239fb2d0bae6da11f89de25cef55586dd43454f3bb4f4a0fe9e51f72d32c0b90ce9f059e7d0e0a11f89de25cef55586dd43454f3bb4f4a0fe9e51f72d32c0b90ce9f059e7d0e0d970e821811be5e6b69f9c763fa232ddb19e787b22307c35a7e21dd551251f5dd970e821811be5e6b69f9c763fa232ddb19e787b22307c35a7e21dd551251f5d5c488f7f1c5380c08e0f9ed4907212cca46f19ac6d079599ca7a9c2fb928de751c4fdd3749e9169c43a40c699d418923cf1162b8b1632dfed3f2f4de035a04551c39720eabc7282cd35d080016b56e9ab64098bcc6abecd793d5e1e34ea7181740967b781123888517408e83401006d7a2ff1cc5bf68766ab934c7c719d5b45b674f3829e157014748972d90461dc3deec461dd827a5b8d314ab502ec980a33e674f3829e157014748972d90461dc3deec461dd827a5b8d314ab502ec980a33e7c077053b7f55f32cb6cc4f8e3146acad20e8773ac66f0d0d6f0441cc8b7c1ac3e72bc76fc285edaacc7fc4f280740be6363b980af73528dcc1434a1151b967dbb7caabeb9b5c2dd075496d36003b36a932cd6ab9cdabdc7e168b7fd1183f064bb7caabeb9b5c2dd075496d36003b36a932cd6ab9cdabdc7e168b7fd1183f064fe91eaaf1948e1e6bf8aaaafeea30615f6a197c05f3ef43ef5bfdf9bc07f77790a2cb7ac4b331b8702ba2fc3f4a98e139aba822617e3a65f935468110f4126e907b1f674655e0cc3cde1dd18788b4119fdda296dbe9b7cc85f9eaa4325d4882590644367f7d1f6a7fd15320d3e34ddff209972033b47b6d8e7d9fcf7ca8c29f9fec09af92543341322298c949e123e142fdf76d862302a15764b66953eb20edfac60e0093adb4180d99e3c2c4024a5ee069589f2134583c53218ef946c8bb3989ec8a74da930d98f39e60e740eebed5d89e4e776cf3888b271f69e0741db4a633390c471efb8672ab614f5dff57e29c3485601cb3c772af6330a26f2206a0b8a60e807182e7c0a5f3d14dc58dd66a458d9fc93467b82f3be5b3074b7ff87d6aa60e807182e7c0a5f3d14dc58dd66a458d9fc93467b82f3be5b3074b7ff87d6aa53f4b8e945bdb28e2b431a3658e0be21e3543f10f6947a92ca0614d4a4eaeff72be18611647f80c6d0b14b0394a1405db27b99ee6bf76434978f224c07a9ba55d30028721148e4010bbd49333144bbf51fc50080419e193fc55b64c7a8a347b9d30028721148e4010bbd49333144bbf51fc50080419e193fc55b64c7a8a347b99af138ec5a7ea0755950e0a7ab2cce095e8ee0dee8e7d9f08d977d4d99295c21fbfaa3c4afa1751f1f7cf40f1ac47b5986b4eb423a4914ed62c676f054228c0e619fe66a627884f3ec2bf8541739c065d35cbf480ee7e2e099f0401051182ca71e846596465bd814a4236f1bcdf92fd038d2cf89ff1969c9fb32a800849285b7524378785756a06698d6b7439dd83697468990eb57e40abeacc188a18fc6f95d2f5498ef6925d3a246991e235d7a53feaa25632a1a6403014a5b2304f2933c26f2318883e549f69de597009a914603b0f1b10381e265ef5d98af499ad973fb98d067f01423cddb3c442933b5fcc039b18ab651fcec1bc91c577693aafc25cf789fbd35936f1d54f8f0467c798fa2e92612d37e3eddaaedaf26dedfd0eeb43b28508288d382883cf6a9667055f98a84d565ee9099709a9c25afb129824f468eed6682a22524b9d4fc442e123672622be7bdfb6238d9709b7b15b2113b7ca6d52b5de2db35fb795ffe227e2f1007c8ba4f2ad1b9aca28cc48edc80c779203cf6e3bb2cf7bf555751eef13555be1a281a30e929d6030cc58a8b4868976590d391047f32b0c1595c1a71957a218ece8d3977ed9171caad97df8fcd82aa80addfc5d2ed78414526633ba931c71d4327f9db655debc45de6955490597444d43b286b336881c0a7c838655e646c645d99971efaf5e310bc3633a7c62b226e39d81842ac55233ad1116b736e2fa2b3915da1a86f21470c641e7ed772407b3758dd1faba6d57b8e48d0c26f20ebcc5e6e300da2b2a6aeb12b3c9768d64cb0e53432ccf48a5866791c7d21a021fbeea6884936faf3dca0a52f42c5f2a481408e7208d4da5ae49532b881b029feec1617f460b027937ebf864488c419cfe21374f5174c1869d8429913495c20c2e38da3190a102eff619a48d8fc4ee9aa861c201049a937a4ee5c7f61601ab944153b183f45e856f47644df8e1a9379469952477c2ae66fe04973066af756841c9862a2dfadac3d766a7dbbc8c1021182fd8fa9398c856871b1fd0dde8bc01ee7049d37779e824ebfd323ca92febc8651ebbc4d89b597c6729cdaf0bb5c00d14dc1d1c36c56beb541f5764bad1b6ca7da6571df5bb925165e182901349aabc9b321893406c2aaa13919da4cba511590fff94bd1b6767994445808a8eb9552f1c4e5cbfae0d89ee58707ff8a641628bd6c1493e75420d836463ddbec3a20dab0361850e3da6807eeb85273478089c871e3badd3662267f37c3ab68297a233d345b25fde4855711d9ed07b3e916ccf3f06e8c444c928a10931dbb39f96a09ff8d789dda1fa4cba63464043c06b3de4c62c31abfb07a231cb6caae4675345dcd42e7a8a744b8ce95cd6fe126dc06c78dc0f79735e21ac2c6580af28f23f311fbd0e5a39df4d603d578e0d47bf3940fc443eb52dccc5e2015a707ecb385154c2ad387d9b27640f8d3f99ee91de9cda2f1d68cf3e7a38f79dd6d240fd17c1a40f0eb194ea6fff6b9b9095b05c04b1b29b7c9e30ff64c9f06f8850466f83caf248ce9be4c5d462579c65d88b3f9b57f8584462e1b316c9ff60e938f7f1a72463fd2dd670197d7f1c45d39b7c61801403ed235b96ff3e355296e4f76c11605a3553cd8bc0105dab0536e0910f6a84c094a69a25dd85b5f0ca8644dbe05b34ac7d7b754c226d31623648d087010684bbc2375e21e49a88913bfaa2b68b0bb1ea1adf287fc42e0ca1ea7187f2dc93ceefc1aebf6aa997ee4cf68581e31c4ad3867e4d26a8faa89854c9e984a1bdfbac8ebe8a86b1904cede8144b89fd07804bc4be5167cb90431abd18cfd94bbd6a60b73e76d5efdc074cd0e8466627fb28c3db284f03fd4ff80401049587b19bf3ce79874e0dc2686cd967be2518193dc8c29bb1b45894545192fd98ad5aeaaf102486817416bc25b7d760764da54b6f297978c1e3cdafd218351129fcee8a7a7fe51e2d793f7c0331428ff6dc493a3bcd0b2d24e51ed796749fb324c44009010f843db4d660366efa1aa970f138e8905269da9559a0693050d15a785a691f78d4df4c88367b6dd4ebc6009bd025be37d70beaca857c55d03b45650f3246adabf9a027f46e4a707b1fff6c15defb2b15bde20160c45b5748158c5386a36eb387eb5989e261254667f2c4d530e85c0807fe13304181003134b89352d92380c00be4b42df351e5a184deb319e134cd3751c54d06a86152b9a4cdd89b1349b5997d7c6ad121d16cfcd865a317bbfe5263de1c5c3a9957e291d31327521438ef56ec100088b28238fc190327785a5f21bf2ee722e8b0859dfdbc927d2ab5aa02b03941c59b51daa4cf608bc04a496a978dfd5421af7ea1aa2773b16b371404d6ba47c949fd19aec31754bc99c41052511670ce7cec46ca1d94ecae4aff0e8eec82dd7c672ce2a39dcc7c4ec23dbe93773a7aba8b4186895bd49691adb1b666a7cf3ecc520a407c18b437794a906f28574460f1108a19c8bff707b0d74caca03f6d310f0e29f67903d8f91dbc9fe05e59edfcce4306addba42c7efd5433fa5f860582a279baf1c6d5edacc9c4f062acb4afc896a497540c88b22a2e50ea77fa8e3a9b1450b9074cf489f5b928c7c4f18930c6390cf55aec3d6e269dfb1cfe985eb3bc09dd41ac4b43c92f9f96339474f937d00cde494e72bef60195461bdf8b8d8a3cbc974705680dcc32ec9a2fdaa0a7c05e4ffbdb8f0a83c40e42bd20b6ef1179a490958f8674f1073770017c2f7b2c8397bd42e78651e727399ab8e02a5f2890a35a2fc85c7a87003526221fe6ce58b5f911a0445e27a4d6e3845dc295977fa44cd32fa3e62575ec6a081f3492e8815db6e4a3311ddab033412d2ab389279e7a653a6699e1335d62da965d25f1f5d8c47506eef004fc3896a7526b30a602ff1a5cbe7b60bf9a1562758d2810bc9b95598f18805d3a7603239a007772ccf7062c8c44c77ec803da6333487db12b079bcc0127db0d87aa0ba352ae1eb308a459816da78102d5c39a8c9a655b8acd2f1d3ac9f80d0db7d755a941db4572172c270ecbd8f082ba215ddd095985942ed94a9ebrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython-aiohttp-3.9.3-150400.10.27.1.src.rpmpython311-aiohttppython311-aiohttp(x86-64)@@@@@@@       (python311-charset-normalizer >= 2.0 with python311-charset-normalizer < 4)(python311-multidict >= 4.5 with python311-multidict < 7)(python311-yarl >= 1.0 with python311-yarl < 2)libc.so.6()(64bit)libc.so.6(GLIBC_2.14)(64bit)libc.so.6(GLIBC_2.2.5)(64bit)libc.so.6(GLIBC_2.3.4)(64bit)libc.so.6(GLIBC_2.4)(64bit)libpthread.so.0()(64bit)python(abi)python311-aiosignalpython311-attrspython311-frozenlistrpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PartialHardlinkSets)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)rpmlib(RichDependencies)3.111.1.217.3.01.1.13.0.4-14.6.0-14.0.4-14.0-15.2-14.12.0-14.14.3g<}f(@fCR@eeez@edeaeJ&e*d@d]@dI@dEdBzd7dcccch@c< @c.@brjb@Qaa)@aa;Ha9@a8`[``;`!'_<_$_]@^g@^g@]@]@]{]^\]@\v{\=@[@[[-[-[0@Z@ZJ@Z@Z@ZH@Z-!Z'Z#@Zr@ZC@YX@YzYdaniel.garcia@suse.comsteven.kowalik@suse.comadrian.glaubitz@suse.comadrian.glaubitz@suse.comdaniel.garcia@suse.comcode@bnavigator.dedmueller@suse.comdmueller@suse.comdmueller@suse.commcepl@cepl.eudmueller@suse.commartin.schreiner@suse.comdaniel.garcia@suse.commcepl@suse.comdmueller@suse.commcepl@suse.comdaniel.garcia@suse.comcode@bnavigator.dedaniel.garcia@suse.comdaniel.garcia@suse.comcode@bnavigator.dedmueller@suse.comdmueller@suse.comadrian.glaubitz@suse.comcode@bnavigator.decode@bnavigator.desteven.kowalik@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commichael@stroeder.comadrian.glaubitz@suse.comjayvdb@gmail.comcode@bnavigator.dejayvdb@gmail.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.combuschmann23@opensuse.orgtchvatal@suse.comtchvatal@suse.commimi.vx@gmail.commimi.vx@gmail.comaplanas@suse.comadrian.glaubitz@suse.commcepl@suse.comtchvatal@suse.comadrian@suse.deadrian@suse.dearun@gmx.dearun@gmx.detbechtold@suse.comalarrosa@suse.comadrian@suse.deadrian@suse.dearun@gmx.dearun@gmx.dearun@gmx.dearun@gmx.dealoisio@gmx.comjengelh@inai.desebix+novell.com@sebix.at- Add upstream patch CVE-2024-52304.patch, gh#aio-libs/aiohttp@259edc369075 (bsc#1233447, CVE-2024-52304)- Add patch CVE-2024-42367-path-traversal-via-symlink.patch: * Do not follow symlinks for compressed file variants. (CVE-2024-42367, bsc#1229226)- Add patch to fix XSS on index pages for static file handling * CVE-2024-27306.patch (bsc#1223098, CVE-2024-27306) - Add patch to remove pytest.mark.internal marker to enable CVE-2024-27306 tests * remove-pytest.mark.internal.patch- Update to version 3.9.3 * Fixed backwards compatibility breakage (in 3.9.2) of ``ssl`` parameter when set outside of ``ClientSession`` (e.g. directly in ``TCPConnector``) * Improved test suite handling of paths and temp files to consistently use pathlib and pytest fixtures. - from version 3.9.2 (bsc#1219341, CVE-2024-23334, bsc#1219342, CVE-2024-23829) * Fixed server-side websocket connection leak. * Fixed ``web.FileResponse`` doing blocking I/O in the event loop. * Fixed double compress when compression enabled and compressed file exists in server file responses. * Added runtime type check for ``ClientSession`` ``timeout`` parameter. * Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon. * Improved validation of paths for static resources requests to the server. * Added support for passing :py:data:`True` to ``ssl`` parameter in ``ClientSession`` while deprecating :py:data:`None`. * Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon. * Fixed examples of ``fallback_charset_resolver`` function in the :doc:`client_advanced` document. * The Sphinx setup was updated to avoid showing the empty changelog draft section in the tagged release documentation builds on Read The Docs. * The changelog categorization was made clearer. The contributors can now mark their fragment files more accurately. * Updated :ref:`contributing/Tests coverage ` section to show how we use ``codecov``. * Replaced all ``tmpdir`` fixtures with ``tmp_path`` in test suite. - Refresh patches for new version * remove-re-assert.patch- Disable broken tests with openssl 3.2 and python < 3.11 bsc#1217782- Fix pytest call - Update requirements- update to 3.9.1: * Fixed importing aiohttp under PyPy on Windows. * Fixed async concurrency safety in websocket compressor. * Fixed ``ClientResponse.close()`` releasing the connection instead of closing. * Fixed a regression where connection may get closed during upgrade. -- by :user:`Dreamsorcerer` * Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer`- update to 3.9.0: (bsc#1217684, CVE-2023-49081, bsc#1217682, CVE-2023-49082) * Introduced ``AppKey`` for static typing support of ``Application`` storage. * Added a graceful shutdown period which allows pending tasks to complete before the application's cleanup is called. * Added `handler_cancellation`_ parameter to cancel web handler on client disconnection. * This (optionally) reintroduces a feature removed in a previous release. * Recommended for those looking for an extra level of protection against denial-of-service attacks. * Added support for setting response header parameters ``max_line_size`` and ``max_field_size``. * Added ``auto_decompress`` parameter to ``ClientSession.request`` to override ``ClientSession._auto_decompress``. * Changed ``raise_for_status`` to allow a coroutine. * Added client brotli compression support (optional with runtime check). * Added ``client_max_size`` to ``BaseRequest.clone()`` to allow overriding the request body size. -- :user:`anesabml`. * Added a middleware type alias ``aiohttp.typedefs.Middleware``. * Exported ``HTTPMove`` which can be used to catch any redirection request that has a location -- :user:`dreamsorcerer`. * Changed the ``path`` parameter in ``web.run_app()`` to accept a ``pathlib.Path`` object. * Performance: Skipped filtering ``CookieJar`` when the jar is empty or all cookies have expired. * Performance: Only check origin if insecure scheme and there are origins to treat as secure, in ``CookieJar.filter_cookies()``. * Performance: Used timestamp instead of ``datetime`` to achieve faster cookie expiration in ``CookieJar``. * Added support for passing a custom server name parameter to HTTPS connection. * Added support for using Basic Auth credentials from :file:`.netrc` file when making HTTP requests with the * :py:class:`~aiohttp.ClientSession` ``trust_env`` argument is set to ``True``. -- by :user:`yuvipanda`. * Turned access log into no-op when the logger is disabled. * Added typing information to ``RawResponseMessage``. -- by :user:`Gobot1234` * Removed ``async-timeout`` for Python 3.11+ (replaced with ``asyncio.timeout()`` on newer releases). * Added support for ``brotlicffi`` as an alternative to ``brotli`` (fixing Brotli support on PyPy). * Added ``WebSocketResponse.get_extra_info()`` to access a protocol transport's extra info. * Allow ``link`` argument to be set to None/empty in HTTP 451 exception. * Fixed client timeout not working when incoming data is always available without waiting. -- by :user:`Dreamsorcerer`. * Fixed ``readuntil`` to work with a delimiter of more than one character. * Added ``__repr__`` to ``EmptyStreamReader`` to avoid ``AttributeError``. * Fixed bug when using ``TCPConnector`` with ``ttl_dns_cache=0``. * Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer` * Avoided raising ``UnicodeDecodeError`` in multipart and in HTTP headers parsing. * Changed ``sock_read`` timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro` * Fixed missing query in tracing method URLs when using ``yarl`` 1.9+. * Changed max 32-bit timestamp to an aware datetime object, for consistency with the non-32-bit one, and to avoid a ``DeprecationWarning`` on Python 3.12. * Fixed ``EmptyStreamReader.iter_chunks()`` never ending. * Fixed a rare ``RuntimeError: await wasn't used with future`` exception. * Fixed issue with insufficient HTTP method and version validation. * Added check to validate that absolute URIs have schemes. * Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates. * Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator. * Fixed Python HTTP parser not treating 204/304/1xx as an empty body. * Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3. * Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:`Dreamsorcerer` * Edge Case Handling for ResponseParser for missing reason value. * Fixed ``ClientWebSocketResponse.close_code`` being erroneously set to ``None`` when there are concurrent async tasks receiving data and closing the connection. * Added HTTP method validation. * Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer` * Performance: Fixed increase in latency with small messages from websocket compression changes. * Improved Documentation * Fixed the `ClientResponse.release`'s type in the doc. Changed from `comethod` to `method`. * Added information on behavior of base_url parameter in `ClientSession`. * Completed ``trust_env`` parameter description to honor ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env. * Dropped Python 3.6 support. * Dropped Python 3.7 support. -- by :user:`Dreamsorcerer` * Removed support for abandoned ``tokio`` event loop. * Made ``print`` argument in ``run_app()`` optional. * Improved performance of ``ceil_timeout`` in some cases. * Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer` * Improved import time by replacing ``http.server`` with ``http.HTTPStatus``. * Fixed annotation of ``ssl`` parameter to disallow ``True``. - drop Update-update_query-calls-to-work-with-latest-yarl.patch (upstream)- update to 3.8.6 (bsc#1217181, CVE-2023-47627): * Security bugfixes * Upgraded the vendored copy of llhttp_ to v9.1.3 * https://github.com/aio-libs/aiohttp/security/advisories/GHSA- pjjw-qhg8-p2p9. * Updated Python parser to comply with RFCs 9110/9112 * https://github.com/aio-libs/aiohttp/security/advisories/GHSA- gfw2-4jvh-wgfg. * Added ``fallback_charset_resolver`` parameter in ``ClientSession`` to allow a user-supplied character set detection function. Character set detection will no longer be included in 3.9 as a default. If this feature is needed, please use `fallback_charset_resolver * Enabled lenient response parsing for more flexible parsing in the client * Fixed ``PermissionError`` when ``.netrc`` is unreadable due to permissions. * Fixed output of parsing errors * Fixed ``GunicornWebWorker`` max_requests_jitter not working. * Fixed sorting in ``filter_cookies`` to use cookie with longest path. * Fixed display of ``BadStatusLine`` messages from llhttp_.- Add remove-re-assert.patch, we really don’t need beautifuly presented exceptions for our testing; remove re-assert BR.- switch from unmaintained brotlipy to Brotli- Remove py3109-compat.patch, no longer required. The current spec builds successfully on Python 3.9, 3.10 and 3.11. - Update to 3.8.5: * Upgraded the vendored copy of llhttp to v8.1.1. More information here: https://github.com/aio-libs/aiohttp/security/advisories/GHSA-45c4-8wx5-qw6w * Added information to C parser exceptions to show which character caused the error. * Fixed a transport is None error.- Add Update-update_query-calls-to-work-with-latest-yarl.patch to fix problems with latest python-yarl - Delete aiohttp-pr7057-bump-charset-normalizer.patch not needed anymore - Update to 3.8.4: * Fixed incorrectly overwriting cookies with the same name and domain, but different path. (#6638) * Fixed ConnectionResetError not being raised after client disconnection in SSL environments. (#7180)- Move documentation into the main package for SLE15- add sle15_python_module_pythons (jsc#PED-68)- Make calling of %{sle15modernpython} optional.- Disable DeprecationWarning to avoid error with the latest setuptools and pkg_resources deprecation- Don't assume python3 to be present for d:l:p:backports/15.4_py39 - Requires pytest 6.2.0 when pytest.TempPathFactory was introduced.- Update py3109-compat.patch to work with python <= 3.10.8 too.- Add py3109-compat.patch to make tests compatible with python 3.10.9. These tests are not present anymore in upstream master version so this patch could be removed in future releases.- Drop ignore-pytest-deprecationwarning.patch - Add aiohttp-pr7057-bump-charset-normalizer.patch * gh#aio-libs/aiohttp#7057 * Sync requirement with rpm specs- skip more tests- update to 3.8.3: * Increased the upper boundary of the :doc:`multidict:index` dependency to allow for the version 6 -- by :user:`hugovk`. * Added support for registering :rfc:`OPTIONS <9110#OPTIONS>` HTTP method handlers via :py:class:`~aiohttp.web.RouteTableDef`. * Started supporting :rfc:`authority-form <9112#authority-form>` and :rfc:`absolute-form <9112#absolute-form>` URLs on the server-side. * Fixed Python 3.11 incompatibilities by using Cython 0.29.25. * Extended the ``sock`` argument typing declaration of the :py:func:`~aiohttp.web.run_app` function as optionally accepting iterables. * Fixed a regression where :py:exc:`~asyncio.CancelledError` occurs on client disconnection. * Started exporting :py:class:`~aiohttp.web.PrefixedSubAppResource` under :py:mod:`aiohttp.web` -- by :user:`Dreamsorcerer`. * Dropped the :class:`object` type possibility from the :py:attr:`aiohttp.ClientSession.timeout` property return type declaration.- Update in SLE-15 (bsc#1197831)- Add ignore-pytest-deprecationwarning.patch * gh#aio-libs/aiohttp#6663- Update to version 3.8.1 * Bugfixes * Fix the error in handling the return value of getaddrinfo. getaddrinfo will return an (int, bytes) tuple, if CPython could not handle the address family. It will cause a index out of range error in aiohttp. For example, if user compile CPython with --disable-ipv6 option but his system enable the ipv6. [#5901] * Do not install "examples" as a top-level package. #6189 * Restored ability to connect IPv6-only host. #6195 * Remove Signal from __all__, replace aiohttp.Signal with aiosignal.Signal in docs #6201 * Made chunked encoding HTTP header check stricter. #6305 * Improved Documentation * update quick starter demo codes. #6240 * Added an explanation of how tiny timeouts affect performance to the client reference document. #6274 * Add flake8-docstrings to flake8 configuration, enable subset of checks. #6276 * Added information on running complex applications with additional tasks/processes -- :user:`Dreamsorcerer`. #6278 - Release 3.8.0 (2021-10-31) (bsc#1217174, CVE-2023-47641) * Features * Added a GunicornWebWorker feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return web.AppRunner object. #2988 * Switch from http-parser to llhttp #3561 * Use Brotli instead of brotlipy #3803 * Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python mode is significantly slower than compiled one. [#3828] * Make access log use local time with timezone #3853 * Implemented readuntil in StreamResponse #4054 * FileResponse now supports ETag. #4594 * Add a request handler type alias aiohttp.typedefs.Handler. [#4686] * AioHTTPTestCase is more async friendly now. * For people who use unittest and are used to use :py:exc:`~unittest.TestCase` it will be easier to write new test cases like the sync version of the :py:exc:`~unittest.TestCase` class, without using the decorator @unittest_run_loop, just async def test_*. The only difference is that for the people using python3.7 and below a new dependency is needed, it is asynctestcase. #4700 * Add validation of HTTP header keys and values to prevent header injection. #4818 * Add predicate to AbstractCookieJar.clear. Add AbstractCookieJar.clear_domain to clean all domain and subdomains cookies only. #4942 * Add keepalive_timeout parameter to web.run_app. #5094 * Tracing for client sent headers #5105 * Make type hints for http parser stricter #5267 * Add final declarations for constants. #5275 * Switch to external frozenlist and aiosignal libraries. #5293 * Don't send secure cookies by insecure transports. * By default, the transport is secure if https or wss scheme is used. Use CookieJar(treat_as_secure_origin="http://127.0.0.1") to override the default security checker. #5571 * Always create a new event loop in aiohttp.web.run_app(). This adds better compatibility with asyncio.run() or if trying to run multiple apps in sequence. #5572 * Add aiohttp.pytest_plugin.AiohttpClient for static typing of pytest plugin. #5585 * Added a socket_factory argument to BaseTestServer. #5844 * Add compression strategy parameter to enable_compression method. #5909 * Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`. [#5927] * Switched chardet to charset-normalizer for guessing the HTTP payload body encoding -- :user:`Ousret`. #5930 * Added optional auto_decompress argument for HttpRequestParser [#5957] * Added support for HTTPS proxies to the extent CPython's :py:mod:`asyncio` supports it -- by :user:`bmbouter`, :user:`jborean93` and :user:`webknjaz`. #5992 * Added base_url parameter to the initializer of :class:`~aiohttp.ClientSession`. #6013 * Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`. #6079 * Started shipping platform-specific wheels with the musl tag targeting typical Alpine Linux runtimes — :user:`asvetlov`. [#6139] * Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`. #6139 * Bugfixes * Modify _drain_helper() to handle concurrent await resp.write(...) or ws.send_json(...) calls without race-condition. #2934 * Started using MultiLoopChildWatcher when it's available under POSIX while setting up the test I/O loop. #3450 * Only encode content-disposition filename parameter using percent-encoding. Other parameters are encoded to quoted-string or RFC2231 extended parameter value. #4012 * Fixed HTTP client requests to honor no_proxy environment variables. #4431 * Fix supporting WebSockets proxies configured via environment variables. #4648 * Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations. #4748 * Ensure a cleanup context is cleaned up even when an exception occurs during startup. #4799 * Added a new exception type for Unix socket client errors which provides a more useful error message. #4984 * Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse #5106 * Only depend on typing_extensions for Python <3.8 #5107 * Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode #5192 * Fix cookies disappearing from HTTPExceptions. #5233 * StaticResource prefixes no longer match URLs with a non-folder prefix. For example routes.static('/foo', '/foo') no longer matches the URL /foobar. Previously, this would attempt to load the file /foo/ar. #5250 * Acquire the connection before running traces to prevent race condition. #5259 * Add missing slots to `_RequestContextManager and _WSRequestContextManager #5329 * Ensure sending a zero byte file does not throw an exception (round 2) #5380 * Set "text/plain" when data is an empty string in client requests. #5392 * Stop automatically releasing the ClientResponse object on calls to the ok property for the failed requests. #5403 * Include query parameters from params keyword argument in tracing URL. #5432 * Fix annotations #5466 * Fixed the multipart POST requests processing to always release file descriptors for the tempfile.Temporaryfile-created _io.BufferedRandom instances of files sent within multipart request bodies via HTTP POST requests -- by :user:`webknjaz`. [#5494] * Fix 0 being incorrectly treated as an immediate timeout. #5527 * Fixes failing tests when an environment variable _proxy is set. #5554 * Replace deprecated app handler design in tests/autobahn/server.py with call to web.run_app; replace deprecated aiohttp.ws_connect calls in tests/autobahn/client.py with aiohttp.ClienSession.ws_connect. #5606 * Fixed test for HTTPUnauthorized that access the text argument. This is not used in any part of the code, so it's removed now. [#5657] * Remove incorrect default from docs #5727 * Remove external test dependency to http://httpbin.org #5840 * Don't cancel current task when entering a cancelled timer. [#5853] * Added params keyword argument to ClientSession.ws_connect. -- :user:`hoh`. #5868 * Uses :py:class:`~asyncio.ThreadedChildWatcher` under POSIX to allow setting up test loop in non-main thread. #5877 * Fix the error in handling the return value of getaddrinfo. getaddrinfo will return an (int, bytes) tuple, if CPython could not handle the address family. It will cause a index out of range error in aiohttp. For example, if user compile CPython with --disable-ipv6 option but his system enable the ipv6. [#5901] * Removed the deprecated loop argument from the asyncio.sleep/gather calls #5905 * Return None from request.if_modified_since, request.if_unmodified_since, request.if_range and response.last_modified when corresponding http date headers are invalid. #5925 * Fix resetting SIGCHLD signals in Gunicorn aiohttp Worker to fix subprocesses that capture output having an incorrect returncode. #6130 * Raise 400: Content-Length can't be present with Transfer-Encoding if both Content-Length and Transfer-Encoding are sent by peer by both C and Python implementations #6182 * Improved Documentation * Refactored OpenAPI/Swagger aiohttp addons, added aio-openapi [#5326] * Fixed docs on request cookies type, so it matches what is actually used in the code (a read-only dictionary-like object). [#5725] * Documented that the HTTP client Authorization header is removed on redirects to a different host or protocol. #5850 - Drop patches * backport_fix_for_setting_cookies.patch * remove_deprecated_loop_argument.patch * stdlib-typing_extensions.patch * unbundle-http-parser.patch -- replaced by llhttp, nothing else than the bundled llhttp available. - Disable building the docs (no sphinxcontrib-towncrier)- Drop python39-failures.patch, no longer required.- Update python39-failures.patch to only fire with Python 3.9.7.- Restore python39-failures.patch, which is actually still needed.- Remove python39-failures.patch and replace it with actual fix of the issue in remove_deprecated_loop_argument.patch. - Add backport_fix_for_setting_cookies.patch for backport of fixes from 3.8 branch.- Add python39-failures.patch to fix test problems with Python 3.9.7+ (gh#aio-libs/aiohttp#5991).- Remove pytest-asyncio dependency which is actually harmful (gh#aio-libs/aiohttp#5787).- Add stdlib-typing_extensions.patch to avoid necessity for BR python-typing_extensions (gh#aio-libs/aiohttp#5374).- Update to 3.7.4 (bsc#1184745, CVE-2021-21330): * obsoletes CVE-2021-21330.patch in older dists * Fixes https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg- Include in SLE-15 (bsc#1176785, jsc#ECO-3105, jsc#PM-2352)- Allow use with chardet v4- Update to v3.7.3 Features * Made exceptions pickleable. Also changed the repr of some exceptions. #4077 Bugfixes * Raise a ClientResponseError instead of an AssertionError for a blank HTTP Reason Phrase. #3532 * Fix web_middlewares.normalize_path_middleware behavior for patch without slash. #3669 * Fix overshadowing of overlapped sub-applications prefixes. [#3701] * Make BaseConnector.close() a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax. #3736 * Reset the sock_read timeout each time data is received for a aiohttp.client response. #3808 * Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View #3880 * Fixed querying the address families from DNS that the current host supports. #5156 * Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator. #5163 * Provide x86 Windows wheels. #5230 * Improved Documentation * Add documentation for aiohttp.web.FileResponse. #3958 * Removed deprecation warning in tracing example docs #3964 * Fixed wrong "Usage" docstring of aiohttp.client.request. #4603 * Add aiohttp-pydantic to third party libraries #5228 Misc * #4102 - Also clean header files in sitearch - Remove hidden .hash directory (remnant from build process) - Fix python 3.6 build * For Leap * For TW with python36 flavor gh#openSUSE/python-rpm-macros#66 * Always BuildRequire idna_ssl * Skip a failing test on python 3.6 * Next upstream release will drop python 3.6- Re-activate tests - Update to v3.7.2 * Fixed static files handling for loops without .sendfile() support - from v3.7.1 * Fixed a type error caused by the conditional import of Protocol * Server doesn't send Content-Length for 1xx or 204 * Fix run_app typing * Always require typing_extensions library * Fix a variable-shadowing bug causing ThreadedResolver.resolve to return the resolved IP as the ``hostname`` in each record, which prevented validation of HTTPS connections * Added annotations to all public attributes * Fix flaky test_when_timeout_smaller_second * Ensure sending a zero byte file does not throw an exception - from v3.7.0 * Response headers are now prepared prior to running ``on_response_prepare`` hooks, directly before headers are sent to the client * Add a ``quote_cookie`` option to ``CookieJar``, a way to skip quotation wrapping of cookies containing special characters * Call AccessLogger.log with the current exception available from sys.exc_info() * web.UrlDispatcher.add_routes and web.Application.add_routes return a list of registered AbstractRoute instances. `AbstractRouteDef.register` (and all subclasses) return a list of registered resources registered resource * Added properties of default ClientSession params to ClientSession class so it is available for introspection * Don't cancel web handler on peer disconnection, raise `OSError` on reading/writing instead. * Implement BaseRequest.get_extra_info() to access a protocol transports' extra info. * Added `ClientSession.timeout` property * Allow use of SameSite in cookies * Use loop.sendfile() instead of custom implementation if available * Apply SO_REUSEADDR to test server's socket * Use .raw_host instead of slower .host in client API * Allow configuring the buffer size of input stream by passing ``read_bufsize`` argument * Add method and url attributes to TraceRequestChunkSentParams and TraceResponseChunkReceivedParams. * Add ClientResponse.ok property for checking status code under 400 * Don't ceil timeouts that are smaller than 5 seconds. * TCPSite now listens by default on all interfaces instead of just IPv4 when `None` is passed in as the host * Bump ``http_parser`` to 2.9.4 * Fix keepalive connections not being closed in time * Fix failed websocket handshake leaving connection hanging. * Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact. * Don't start heartbeat until _writer is set * Fix handling of multipart file uploads without a content type * Preserve view handler function attributes across middlewares * Fix the string representation of ServerDisconnectedError * Raising RuntimeError when trying to get encoding from not read body * Remove warning messages from noop. * Raise ClientPayloadError if FormData re-processed. * Fix a warning about unfinished task in web_protocol.py * Fixed 'deflate' compression. According to RFC 2616 now. * Fixed OverflowError on platforms with 32-bit time_t * Fixed request.body_exists returns wrong value for methods without body * Fix connecting to link-local IPv6 addresses. * Fix a problem with connection waiters that are never awaited * Always make sure transport is not closing before reuse a connection. Reuse a protocol based on keepalive in headers is unreliable. For example, uWSGI will not support keepalive even it serves a HTTP 1.1 request, except explicitly configure uWSGI with a ``--http-keepalive`` option. Servers designed like uWSGI could cause aiohttp intermittently raise a ConnectionResetException when the protocol poll runs out and some protocol is reused. * Handle the last CRLF correctly even if it is received via separate TCP segment. * Fix the register_resource function to validate route name before splitting it so that route name can include python keywords * Fix resolver task is not awaited when connector is cancelled * Fix Aiohttp doesn't return any error on invalid request methods * Fix HEAD requests for static content. * Fix incorrect size calculation for memoryview * Add HTTPMove to _all__. * Fixed the type annotations in the ``tracing`` module. * Fix typing for multipart ``__aiter__``. * Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit. * Add forced UTF-8 encoding for ``application/rdap+json`` responses. * Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL * Fix connection closing issue in HEAD request. * Fix type hint on BaseRunner.addresses (from ``List[str]`` to ``List[Any]``) - from v3.6.3 * Pin yarl to `<1.6.0` to avoid buggy behavior- Update to 3.6.2: * more compatibility fixes with python 3.8 - Disable tests as they explode in upstream git too and all other distributions also gave up on it- Do remove pytest configuration to not error out on deprecation warnings - Unbundle http parser headers: * unbundle-http-parser.patch- Update to 3.6.1: * Compatibility with Python 3.8. #4056 * correct some exception string format #4068 * Emit a warning when ssl.OP_NO_COMPRESSION is unavailable because the runtime is built against an outdated OpenSSL. #4052 * Update multidict requirement to >= 4.5 #4057 - Drop merged patch aiohttp-3.6.0-fix-typeerror.patch- Add patch to fix type error with old multidict: * aiohttp-3.6.0-fix-typeerror.patch - Require python-multidict 4.5 or newer- Update to 3.6.0: * Add support for Named Pipes * Removed Transfer-Encoding: chunked header * Accept non-GET request for starting websocket handshake on server side - Drop merged patch pytest5.patch- Add patch to work well with pytest 5: * pytest5.patch- Fix Requires and BuildRequires- update to 3.5.4 - drop invalid-escapes-in-tests.patch and rename-request-fixture.patch * big list of changes from 3.4.4 - https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst- Remove version dependency from Cython (boo#1121578).- Add patch to address name collision issue with pytest fixtures + rename-request-fixture.patch- Upgrade to 3.4.4: - Multiple small bugfixes - Remove remove-failing-tests-due-to-pytest-timeout-issues.patch - Add invalid-escapes-in-tests.patch to fix invalid escapes in non-raw regexp strings.- Match up requirements to the setup.py- update to version 3.4.0: * please check the longer list in CHANGES.rst- update to version 3.3.2: * Raise ``ConnectionResetError`` instead of ``CancelledError`` on trying to write to a closed stream. (`#2499 `_) * Implement ``ClientTimeout`` class and support socket read timeout. (`#2768 `_) * Enable logging when ``aiohttp.web`` is used as a program (`#2956 `_) * Add canonical property to resources (`#2968 `_) * Forbid reading response BODY after release (`#2983 `_) * Implement base protocol class to avoid a dependency from internal ``asyncio.streams.FlowControlMixin`` (`#2986 `_) * Cythonize ``@helpers.reify``, 5% boost on macro benchmark (`#2995 `_) * Optimize HTTP parser (`#3015 `_) * Implement ``runner.addresses`` property. (`#3036 `_) * Use ``bytearray`` instead of a list of ``bytes`` in websocket reader. It improves websocket message reading a little. (`#3039 `_) * Remove heartbeat on closing connection on keepalive timeout. The used hack violates HTTP protocol. (`#3041 `_) * Limit websocket message size on reading to 4 MB by default. (`#3045 `_)- update to version 3.1.3: * Fix cancellation broadcast during DNS resolve (#2910)- update to version 3.1.2: * Make LineTooLong exception more detailed about actual data size (#2863) * Call on_chunk_sent when write_eof takes as a param the last chunk (#2909) - changes from version 3.1.1: * Support asynchronous iterators (and asynchronous generators as well) in both client and server API as request / response BODY payloads. (#2802)- update to 3.1.0: - Relax JSON content-type checking in the ``ClientResponse.json()`` to allow "application/xxx+json" instead of strict "application/json". (#2206) - Bump C HTTP parser to version 2.8 (#2730) - Accept a coroutine as an application factory in ``web.run_app`` and gunicorn worker. (#2739) - Implement application cleanup context (``app.cleanup_ctx`` property). (#2747) - Make ``writer.write_headers`` a coroutine. (#2762) - Add tracking signals for getting request/response bodies. (#2767) - Deprecate ClientResponseError.code in favor of .status to keep similarity with response classes. (#2781) - Implement ``app.add_routes()`` method. (#2787) - Implement ``web.static()`` and ``RouteTableDef.static()`` API. (#2795) - Install a test event loop as default by ``asyncio.set_event_loop()``. The change affects aiohttp test utils but backward compatibility is not broken for 99.99% of use cases. (#2804) - Refactor ``ClientResponse`` constructor: make logically required constructor arguments mandatory, drop ``_post_init()`` method. (#2820) - Use ``app.add_routes()`` in server docs everywhere (#2830) - Websockets refactoring, all websocket writer methods are converted into coroutines. (#2836) - Provide ``Content-Range`` header for ``Range`` requests (#2844) - Fix websocket client return EofStream. (#2784) - Fix websocket demo. (#2789) - Property ``BaseRequest.http_range`` now returns a python-like slice when requesting the tail of the range. It's now indicated by a negative value in ``range.start`` rather then in ``range.stop`` (#2805) - Close a connection if an unexpected exception occurs while sending a request - Fix firing DNS tracing events. (#2841) - Change ``ClientResponse.json()`` documentation to reflect that it now allows "application/xxx+json" content-types (#2206) - Document behavior when cchardet detects encodings that are unknown to Python. - Add diagrams for tracing request life style. (#2748) - Drop removed functionality for passing ``StreamReader`` as data at client side. (#2793)- update to version 3.0.1 * async/await everywhere. The minimal supported Python version is 3.5.3 now. * Application Runners. * Client Tracing. Now it is possible by registering special signal handlers on every request processing stage. * HTTPS support * Dropped obsolete API. The release dropped a lot of already deprecated features. * The full changelog can be read at https://aiohttp.readthedocs.io/en/stable/changes.html - Add python3-idna_ssl, python3-Pygments and python3-aiohttp-theme to BuildRequires. - Add Requires: python3-idna_ssl - Fix tests by removing a file and adding a patch to remove another failing test due to a DeprecationWarning being issued by pytest because of a problem in python-pytest-timeout. * remove-failing-tests-due-to-pytest-timeout-issues.patch- update to version 2.3.7- add MarkupSafe as build depdency to fix documentaion generation- update to version 2.3.6: * Correct request.app context (for handlers not just middlewares). (#2577)- specfile: * require pluggy - update to version 2.3.5: * Fix compatibility with pytest 3.3+ (#2565) - changes from version 2.3.4: * Make request.app point to proper application instance when using nested applications (with middlewares). (#2550) * Change base class of ClientConnectorSSLError to ClientSSLError from ClientConnectorError. (#2563) * Return client connection back to free pool on error in connector.connect(). (#2567)- update to version 2.3.3: * Having a ; in Response content type does not assume it contains a charset anymore. (#2197) * Use getattr(asyncio, ‘async’) for keeping compatibility with Python 3.7. (#2476) * Ignore NotImplementedError raised by set_child_watcher from uvloop. (#2491) * Fix warning in ClientSession.__del__ by stopping to try to close it. (#2523) * Fixed typo’s in Third-party libraries page. And added async-v20 to the list (#2510)- specfile: * updated requirements according to requirement/ci-wheel.txt in tar-ball * removed 'changes' from %doc - update to version 2.3.2: * Fix passing client max size on cloning request obj. (#2385) * Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy connector. (#2408) * Drop generated _http_parser shared object from tarball distribution. (#2414) * Fix connector convert OSError to ClientConnectorError. (#2423) * Fix connection attempts for multiple dns hosts. (#2424) * Fix ValueError for AF_INET6 sockets if a preexisting INET6 socket to the aiohttp.web.run_app function. (#2431) * _SessionRequestContextManager closes the session properly now. (#2441) * Rename from_env to trust_env in client reference. (#2451) - changes from version 2.3.1: * Relax attribute lookup in warning about old-styled middleware (#2340) - changes from version 2.3.0: * Features + Add SSL related params to ClientSession.request (#1128) + Make enable_compression work on HTTP/1.0 (#1828) + Deprecate registering synchronous web handlers (#1993) + Switch to multidict 3.0. All HTTP headers preserve casing now but compared in case-insensitive way. (#1994) + Improvement for normalize_path_middleware. Added possibility to handle URLs with query string. (#1995) + Use towncrier for CHANGES.txt build (#1997) + Implement trust_env=True param in ClientSession. (#1998) + Added variable to customize proxy headers (#2001) + Implement router.add_routes and router decorators. (#2004) + Deprecated BaseRequest.has_body in favor of BaseRequest.can_read_body Added BaseRequest.body_exists attribute that stays static for the lifetime of the request (#2005) + Provide BaseRequest.loop attribute (#2024) + Make _CoroGuard awaitable and fix ClientSession.close warning message (#2026) + Responses to redirects without Location header are returned instead of raising a RuntimeError (#2030) + Added get_client, get_server, setUpAsync and tearDownAsync methods to AioHTTPTestCase (#2032) + Add automatically a SafeChildWatcher to the test loop (#2058) + add ability to disable automatic response decompression (#2110) + Add support for throttling DNS request, avoiding the requests saturation when there is a miss in the DNS cache and many requests getting into the connector at the same time. (#2111) + Use request for getting access log information instead of message/transport pair. Add RequestBase.remote property for accessing to IP of client initiated HTTP request. (#2123) + json() raises a ContentTypeError exception if the content-type does not meet the requirements instead of raising a generic ClientResponseError. (#2136) + Make the HTTP client able to return HTTP chunks when chunked transfer encoding is used. (#2150) + add append_version arg into StaticResource.url and StaticResource.url_for methods for getting an url with hash (version) of the file. (#2157) + Fix parsing the Forwarded header. * commas and semicolons are allowed inside quoted-strings; * empty forwarded-pairs (as in for=_1;;by=_2) are allowed; * non-standard parameters are allowed (although this alone could be easily done in the previous parser). (#2173) + Don’t require ssl module to run. aiohttp does not require SSL to function. The code paths involved with SSL will only be hit upon SSL usage. Raise RuntimeError if HTTPS protocol is required but ssl module is not present. (#2221) + Accept coroutine fixtures in pytest plugin (#2223) + Call shutdown_asyncgens before event loop closing on Python 3.6. (#2227) + Speed up Signals when there are no receivers (#2229) + Raise InvalidURL instead of ValueError on fetches with invalid URL. (#2241) + Move DummyCookieJar into cookiejar.py (#2242) + run_app: Make print=None disable printing (#2260) + Support brotli encoding (generic-purpose lossless compression algorithm) (#2270) + Add server support for WebSockets Per-Message Deflate. Add client option to add deflate compress header in WebSockets request header. If calling ClientSession.ws_connect() with compress=15 the client will support deflate compress negotiation. (#2273) + Support verify_ssl, fingerprint, ssl_context and proxy_headers by client.ws_connect. (#2292) + Added aiohttp.ClientConnectorSSLError when connection fails due ssl.SSLError (#2294) + aiohttp.web.Application.make_handler support access_log_class (#2315) + Build HTTP parser extension in non-strict mode by default. (#2332) * Bugfixes + Clear auth information on redirecting to other domain (#1699) + Fix missing app.loop on startup hooks during tests (#2060) + Fix issue with synchronous session closing when using ClientSession as an asynchronous context manager. (#2063) + Fix issue with CookieJar incorrectly expiring cookies in some edge cases. (#2084) + Force use of IPv4 during test, this will make tests run in a Docker container (#2104) + Warnings about unawaited coroutines now correctly point to the user’s code. (#2106) + Fix issue with IndexError being raised by the StreamReader.iter_chunks() generator. (#2112) + Support HTTP 308 Permanent redirect in client class. (#2114) + Fix FileResponse sending empty chunked body on 304. (#2143) + Do not add Content-Length: 0 to GET/HEAD/TRACE/OPTIONS requests by default. (#2167) + Fix parsing the Forwarded header according to RFC 7239. (#2170) + Securely determining remote/scheme/host #2171 (#2171) + Fix header name parsing, if name is split into multiple lines (#2183) + Handle session close during connection, KeyError: (#2193) + Fixes uncaught TypeError in helpers.guess_filename if name is not a string (#2201) + Raise OSError on async DNS lookup if resolved domain is an alias for another one, which does not have an A or CNAME record. (#2231) + Fix incorrect warning in StreamReader. (#2251) + Properly clone state of web request (#2284) + Fix C HTTP parser for cases when status line is split into different TCP packets. (#2311) + Fix web.FileResponse overriding user supplied Content-Type (#2317) * Improved Documentation + Add a note about possible performance degradation in await resp.text() if charset was not provided by Content-Type HTTP header. Pass explicit encoding to solve it. (#1811) + Drop disqus widget from documentation pages. (#2018) + Add a graceful shutdown section to the client usage documentation. (#2039) + Document connector_owner parameter. (#2072) + Update the doc of web.Application (#2081) + Fix mistake about access log disabling. (#2085) + Add example usage of on_startup and on_shutdown signals by creating and disposing an aiopg connection engine. (#2131) + Document encoded=True for yarl.URL, it disables all yarl transformations. (#2198) + Document that all app’s middleware factories are run for every request. (#2225) + Reflect the fact that default resolver is threaded one starting from aiohttp 1.1 (#2228) * Deprecations and Removals + Drop deprecated Server.finish_connections (#2006) + Drop %O format from logging, use %b instead. Drop %e format from logging, environment variables are not supported anymore. (#2123) + Drop deprecated secure_proxy_ssl_header support (#2171) + Removed TimeService in favor of simple caching. TimeService also had a bug where it lost about 0.5 seconds per second. (#2176) + Drop unused response_factory from static files API (#2290) * Misc + #2013, #2014, #2048, #2094, #2149, #2187, #2214, #2225, #2243, [#2248]- Fixed build on non Factory targets- Repair package description grammar.- first singlespec package - fixes boo#1054580 boo#1054581h01-ch5a 1732524249  !"#$$&&((**,-./0022446788::<=>?@ABBDEFFHHJKLMNNPQRRTUVWXYZ[\\^_``bcdefghijklmnopqrstuvwxyz{|}~3.9.3-150400.10.27.13.9.3-150400.10.27.1aiohttpaiohttp-3.9.3.dist-infoINSTALLERLICENSE.txtMETADATARECORDREQUESTEDWHEELtop_level.txt__init__.py__pycache____init__.cpython-311.opt-1.pyc__init__.cpython-311.pycabc.cpython-311.opt-1.pycabc.cpython-311.pycbase_protocol.cpython-311.opt-1.pycbase_protocol.cpython-311.pycclient.cpython-311.opt-1.pycclient.cpython-311.pycclient_exceptions.cpython-311.opt-1.pycclient_exceptions.cpython-311.pycclient_proto.cpython-311.opt-1.pycclient_proto.cpython-311.pycclient_reqrep.cpython-311.opt-1.pycclient_reqrep.cpython-311.pycclient_ws.cpython-311.opt-1.pycclient_ws.cpython-311.pyccompression_utils.cpython-311.opt-1.pyccompression_utils.cpython-311.pycconnector.cpython-311.opt-1.pycconnector.cpython-311.pyccookiejar.cpython-311.opt-1.pyccookiejar.cpython-311.pycformdata.cpython-311.opt-1.pycformdata.cpython-311.pychdrs.cpython-311.opt-1.pychdrs.cpython-311.pychelpers.cpython-311.opt-1.pychelpers.cpython-311.pychttp.cpython-311.opt-1.pychttp.cpython-311.pychttp_exceptions.cpython-311.opt-1.pychttp_exceptions.cpython-311.pychttp_parser.cpython-311.opt-1.pychttp_parser.cpython-311.pychttp_websocket.cpython-311.opt-1.pychttp_websocket.cpython-311.pychttp_writer.cpython-311.opt-1.pychttp_writer.cpython-311.pyclocks.cpython-311.opt-1.pyclocks.cpython-311.pyclog.cpython-311.opt-1.pyclog.cpython-311.pycmultipart.cpython-311.opt-1.pycmultipart.cpython-311.pycpayload.cpython-311.opt-1.pycpayload.cpython-311.pycpayload_streamer.cpython-311.opt-1.pycpayload_streamer.cpython-311.pycpytest_plugin.cpython-311.opt-1.pycpytest_plugin.cpython-311.pycresolver.cpython-311.opt-1.pycresolver.cpython-311.pycstreams.cpython-311.opt-1.pycstreams.cpython-311.pyctcp_helpers.cpython-311.opt-1.pyctcp_helpers.cpython-311.pyctest_utils.cpython-311.opt-1.pyctest_utils.cpython-311.pyctracing.cpython-311.opt-1.pyctracing.cpython-311.pyctypedefs.cpython-311.opt-1.pyctypedefs.cpython-311.pycweb.cpython-311.opt-1.pycweb.cpython-311.pycweb_app.cpython-311.opt-1.pycweb_app.cpython-311.pycweb_exceptions.cpython-311.opt-1.pycweb_exceptions.cpython-311.pycweb_fileresponse.cpython-311.opt-1.pycweb_fileresponse.cpython-311.pycweb_log.cpython-311.opt-1.pycweb_log.cpython-311.pycweb_middlewares.cpython-311.opt-1.pycweb_middlewares.cpython-311.pycweb_protocol.cpython-311.opt-1.pycweb_protocol.cpython-311.pycweb_request.cpython-311.opt-1.pycweb_request.cpython-311.pycweb_response.cpython-311.opt-1.pycweb_response.cpython-311.pycweb_routedef.cpython-311.opt-1.pycweb_routedef.cpython-311.pycweb_runner.cpython-311.opt-1.pycweb_runner.cpython-311.pycweb_server.cpython-311.opt-1.pycweb_server.cpython-311.pycweb_urldispatcher.cpython-311.opt-1.pycweb_urldispatcher.cpython-311.pycweb_ws.cpython-311.opt-1.pycweb_ws.cpython-311.pycworker.cpython-311.opt-1.pycworker.cpython-311.pyc_cparser.pxd_find_header.pxd_headers.pxi_helpers.cpython-311-x86_64-linux-gnu.so_helpers.pyi_helpers.pyx_http_parser.cpython-311-x86_64-linux-gnu.so_http_parser.pyx_http_writer.cpython-311-x86_64-linux-gnu.so_http_writer.pyx_websocket.cpython-311-x86_64-linux-gnu.so_websocket.pyxabc.pybase_protocol.pyclient.pyclient_exceptions.pyclient_proto.pyclient_reqrep.pyclient_ws.pycompression_utils.pyconnector.pycookiejar.pyformdata.pyhdrs.pyhelpers.pyhttp.pyhttp_exceptions.pyhttp_parser.pyhttp_websocket.pyhttp_writer.pylocks.pylog.pymultipart.pypayload.pypayload_streamer.pypy.typedpytest_plugin.pyresolver.pystreams.pytcp_helpers.pytest_utils.pytracing.pytypedefs.pyweb.pyweb_app.pyweb_exceptions.pyweb_fileresponse.pyweb_log.pyweb_middlewares.pyweb_protocol.pyweb_request.pyweb_response.pyweb_routedef.pyweb_runner.pyweb_server.pyweb_urldispatcher.pyweb_ws.pyworker.pypython311-aiohttpCHANGES.rstCONTRIBUTORS.txtREADME.rstpython311-aiohttpLICENSE.txt/usr/lib64/python3.11/site-packages//usr/lib64/python3.11/site-packages/aiohttp-3.9.3.dist-info//usr/lib64/python3.11/site-packages/aiohttp//usr/lib64/python3.11/site-packages/aiohttp/__pycache__//usr/share/doc/packages//usr/share/doc/packages/python311-aiohttp//usr/share/licenses//usr/share/licenses/python311-aiohttp/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:36489/SUSE_SLE-15-SP4_Update/441a7e89521c9b9b2eaf6ec0f7b6df54-python-aiohttp.SUSE_SLE-15-SP4_Updatedrpmxz5x86_64-suse-linux     directoryASCII textUTF-8 Unicode textASCII text, with CRLF line terminatorsemptyPython script, ASCII text executableELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=27e46212d7f0cf3acefeb4124041ee06b94e09f9, strippedELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=9bd16e592d80444d4b6d3bd8e2a8bf70fbb34a8d, strippedELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f877c5a0020cd31c1e9568b6a8f701065d2eb03f, strippedELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=2493e2872598edf3991e6d6100ed95fe2b19c383, strippedPython script, UTF-8 Unicode text executableUTF-8 Unicode text, with very long lines  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^cdelmstyz{|}~R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R RRRRR R R RRRRRRR R RRRRRR R RRRRR R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R &46MИ&Vpython311-Brotlipython311-aiodnspython311-cChardetpython311-aiohttp-docutf-8396686e60ed4837ab62f657e2a9926a5d780a49892921bd2e8b928d512b75b7e?7zXZ !t/(]"k%0a I;cRkAג/G}EN#'إ=+XE`ۑ(nB|HQw}ZI}HX:o2M"^ӍI>)m2J3?a7m8]:m-`Bn?A,w= XLu`0qtۊc 5:Džzb8uBͣXUFt՗ |;DaS6P)ڧA RfX>U߾i*I>u{XD^#]ҵ «j@3B6{b;]TbNnpaGxK&VCF]bP(#g6ɋ|j*EDr`S}ۜÊ%?gi_va9iJ w؅87$DxVkCk e.Er\gL4*pe7.^O g:h]qG<\WÎ\?IM=b8>hX݈~Py>pOeϨjhXx@uyLk6Lq [I-m"4"Iib.ddhsvF SՙAz lpob$߿XN|1XϲW_ph\,8WcPMGb,lQ~$p1&BVQ7ݜzr94agp攌Q|SEZIl?x ̀䧘Zkhbo4 r jcM8,Qrla |U] -[L76E+% &0Ѡ>Aqo4I9vhrդ6ӘΕK|NOޛFW)V X_|IԳ@iHS_oi6jfA7|Ǖ5̓tay%&Azs쟽ķJB COm ,ןCdO"įWe9QnY,7rP,AB$B¢'HDR0)1ngޥӦ`^fYs4b&̙:/:PP$7S' :ìVkFU<lǷco\`1(> 9RU'}r^]*Z1Ӏ4p݁%mX8(a/S]PEܔ9:r*o^GTVu1׏B6poVWVj_n@Ta}zQen Խ-MWfm[6)WX5kVG30OMRc8AܦJ O&x9™#x,V.Rp=*aElW4TZ㯖 ^fHhrh`'u*֩•rD!6첊8YIB.g|5Nآ7yL;1*EE_;.?d$U8-XLC@2ِcM?c%sᾺV+ 1z3&5!rhciP='J(x ;- G<{Ϊ1쬖)]`o5e C\œ˘)"g}F›3A82%ֳF>=%}){}C`;s,T͕ aT2!*G].c0K)k/<,h",WK;RC;z{!wG58!ۑԩ412Y}yi+k7&&Nix K8<7H/0T;edq`a"΋CvC= Z}413wa޺gb=DzQjWCYA,͢\!޿G#S?m܉+׹A=y)%;:ŏtɓol$&iqB dZ~EcrRX4G"3Y-PMJs+_!eHgŸi;:у{B b9#9y6x]AmcXed haxX[c ?E^sbѩ_/X:SpŽn?E9(\QuLXmpW'وVe o([S\!/.?I^ܔ@@8Fe0;10o:P`܆B&_I2qƪ,'O_jPLW\|IM__B$Z 0e#ީ ^k}(afH8!vQhɢGJ+.+AͻNF#u; Ѹ:6w{ ^Ef4 -;[0?bǑZ7nBx |<|QK@-܎@wKc*`0Rt3V`REDFy 'N/F+C.1;ju|9/g[q!2*(`Cɕ 7sVf7EfN?0ş܃êvYw¯cn򮗧 ;S8yd}3=lzo;h֫L/Fo؟J&xUGhM}y9Θi31&_0I[kFoϴ}ICi@@iCQR*ϑX|1\#1Y |yc@'7O#:"cK|\@8\Cm$*czgOc?5PybycLbp,!M{ aOӻ@ <̥߆hjW o{Ww.vF9GFΪ7dݤ;W6qeX,tR: o bj/GIӢP/[W>;?!Lja9&&v>!ׁN 6V:;~WcAzQt&'q(4aɧ]`Gm 2uenvnOnޞ) œLuJ3!-Z$i⍦I; Ϙ %=Ĕz"ќjcFT9#"&s +ok%,[?JK_f0jMY[Ո)֒6)N@p;+Dx%WÆ@7w(-fj%$'|l0 ng rYML[gg;?;E] ^PqؼKJ[.mtȈRqPlZ$(r~8{H"eh+Y$|5Ed{6z *PeAGuI:Jczc{e4s'4ߠ.</fu\ϬV~>"& _ QY _fA-(=-&!~?l4^-4fYMւ^ !&50 K,KzmA߸JvIV99Cuʊ3|l9`k3cq6P쟬&z2 B1$C\0AeB|ukOw)*aA;`jJqd"e>J 7m-~