安全研究
CVE-2024-38475 Apache HTTPD mod_rewrite 路径穿越:从 BlackHat 2024 到 RCE
Thinking
2024-07-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
Apache HTTPD mod_rewrite 的路径匹配逻辑缺陷,CVSS 9.1,BlackHat 2024 上披露,攻击者构造特殊 URL 绕过 rewrite 规则访问受限文件。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9237686c78e2d6d0cc05eab1afdb80b1d7bd06329a8b40074c6feed63be8fee9a02393cd06aa30c73b6d11b176662a547cd1643cb638c90ab0a469401a0b7ab60be4900233782bf6a0a764cc250c8be307e1c38d0e6c5c15fab5f38ea48bfe5ed98664ae6ffed19ab514d36491b613bc24a295e96ed89edfa7cf0d033304fc3d86f6d098dd462ac6f78478e322887dac9d3fc65a9d6c6cc5d0c5543bd2badb99660dfb60c63c3039c8c238987a2bed786e6b96f674e1927e1216704cfe81b585896c09115b7530b8226f5854958a7482a64e426a23be491a21d189619ffa76c6578aeda7e44d51d1baa65e90eed45ac16a67718f43320f3173f7d2eb6cbf9f48afd8de2745a5456964b0ec2cd7f0b4ed8256cecbeaf471a6bcf72f88362a98dfe813969e2ec48112cdf37c08b590c12d497c29123bb1df387afb6974e7cae3a676b6ff6f69c1e7d5bc1bd8fa0282525064876f2c295582bb55b8087b0752f7a381c6b904e15000bda6ce20a24a19c1806c46526890a782dc4e51a5af4dfbd255e055ef5d684caab8ba00c9d3193072a56c915a8a02a2734b4aadacbf1890a2c39822756c884ed67d613cbb509d74e8abdc555989f156f3a0ecb81fd9295445a6f8b1da4b2125ac330769043b92cd71d87b74dd5644e31e9b5e2ae78edfaa36b4e67a17a44854a1a61bb160f0f75918b43be21302b7a01517421660fbadd8e3492c0563dbd643caf55a8c78f8341d98662df66b44dfb8fe6af1020035ed443eb8c4e3f0d5184667c479d0bb8b2f66f3d8262e62bfe321ca779d6f88c71cae2b5b858a2bfd8fdbd27763247bbef460a187490233b25478ba25b041ee6782b8dd661730cdd39fda5a11bf707ef432b7176474db80bb55421ea3d57cc6a9e2bdfc5d5d890e29b4623a047a1c0ad22c4cddb45a8cd467d1568860d452821ab87da4d5a65034d9b141a2a530b2419a49ef9884d380015d16731d28cfc1586d43135c49bd95cc5e8ac6c42ee104efc247e77ec3111dd75a788bde8a8e51e0bddf1d0756da27db2a54465455a010be30f5266cfaecdb7293b70a62c85268db5eea223c4a137784add681709cef85b1dfe9697516728addd243e3760a2eb018798e46db9dda7ff42e36de1b4c7b118611c7f86c9326fc2d7adf5902d50712465df6770e2701849280fbdc3e7b7b3f9f4f9f9c0190c0414c6bd5047f4ef6d397fe862a90b9da305d6c06cc93e09013614264272c4f8b3470e7482dad053a5e2a66f877cabc5eedaa0fd7dd0fc1b598e7deb717322111f94f4ae97b7ef90578b461dcb70ee7bc1d2decce57c6c518d7d5d7973fef182f72e01d4127b2fea2628b40dc647d7a9864680c6fcac774edffc0010ff03022155d2bfd540b3337bbb5ddacbad6f03a5bf1c331762742e888999697096054cbdb06e58a0fdfd11a031f1223be3b80b299a25327ede4c597ff5047dddd66b209570390a7b19f7822c4cc029c94828eb83755ff0b30def6dea91b5aa36918829e4c58dc0d64e20b9eff9ca2118023445069d10cdce0528d0647116a0baaf2edec0ed3f9aaa36a6ed44b035e0ea578515824d24d3cebb4d98fb22b4fc5f339d3d29593846adf87f609de836a56cdfefeaa8310eec0548f7f53c449843ec6dc28dd34ab932d248e2c1e90657baffb4a785d69825d0fd29fc3ae41f914f18ddfedf201b303cd3bbe9bceb4bde89be2a3cb15f5ca2c5122368534052494a4e0ded5b2b39a7f2367de56bbf3d1136f42e84cf060ff91ec9c99f178f2763eb03cc93bc85523a22d54fb61965394ad9bc3927d0c2e2429da3ed97e71f052ea1cdebf9e751ac75f7db4499715e86f1a64fa2658bca9739ccc675258fd588d82510b933c497d38aa6be420dc73ec2877344bf88927eb6155a7aea067906dd4fe43d94422d0c9e3066e2cd93ae118ac9565018fbeac1b3f1d66495279e20468e964674c61b7fe76c80e194733112ee2ebda99182bee91c7c17b11e0974117f232ccc9b5c023659dcded8208e7c774936991c2effdd5a3aa82c75200dd559415152dfe1f8ef701b5ec253511447d4b7c4800e3aff760d75c647f02483816df2b2bfd5c5de468f686ef887010a44c224771518d17ef58368fac56a80186d0aa7595fd1dbf5ca5cf71b411f02172e48c82ca57b5e5b7456bf38a52a23365fd529ed84f12c86ae724808576d765f8904be3012b5e562ed4b6c0769afc6c88708a2535dacbbf4f7c4e27d4fe6c23765e01379e151e3fa94fd824bcc756ae951d116ca2530349963d764a82c5c7b7b5da9d52d688fe7be30849fae0427e0b4cdf46b0b31a542f69dd6d21deabbb319937c81c7aba82d4536b6930f12197669d7ae80afc223dac73dd36cd08bc845c722f93012188877ed8b71390f9dc9d771b45f55683c79da2f3af28f8368fa024f06a505ef232146bb83b042bd520a3af90334013bf6a5432d88292d9e630b66c8efccabc039099104cc1bf3699cd5dc368b7c96734d3a49fe12ebdbb931d67ef796431c70eee13167c9094f3e25444417df04984d66d9674b43a0ddb86a3c245eaf283db19b5419cc1857b8dd076ee7599bdb736d3c8bbb020c536522069178fab4e18881a31155e61f896a8837acb632f22325d6695319256df2f42134ffe85827c8878aa7488db5e0842917d3a6c90b2b7651f63405c40d99c5872e9b70de1dc280e09ced40cfc66c3cb66c7eddb7697863d81b5b53af1063f5e4fa926acda70ad036ede043fbca9838563f6e490eeecd1fbb81d95ad6a629fef096c1262ca0f0f57f93a317ef477d8307b05ecf509a0f459b05acb924b6c98f464da2f3f05fd6c0410284257cf3c8f672c143c7554abc43d39c23c4871470a8667e3cc4ad9149aab17ee8e24751eb5020a35726adceb0665a43a6960fe81be6bb365b9251c8fbb4edaf957d450b79fdd7e5a1469b9923f564d747acec72326f4ff7f12d40e019e4a7b2b8200c5b560c02e7f8cbc75a3598206839c436f440eb67f6963ebff5d1892d663d0a05b9076d15c1f3a765798fd5ab14910c12698d16ce46989de0df46018fc4c52b30bd28b853060845d39dfb90eb612934bdf04e4d1bfdd87ee73bc4a6aced1c5dc1688872787b0fa252af930129ea80ae1658048ec0423bf2aed642203b1d97d6d9b70129709c5585f8f7509c8b693f25ef813431c207f5f64838185077c646faa0dbcf4f76a7df60a8838473c6150190435bdcc71cf670a0e8982f2f8988cefa762ad9c7071d0a7dd7a0d6da46c50f3fe3e95050cc5fcaced53defbcf493d581e0b8dbd567a8c51a69ee80454569206e52567c96f797171467aff2ff5b3a14d7ec223635ce3ce0b280eb79440d3063b8fe8db6fb7de09c37736cba0341359a4180ce6050af55998c9f3125b355feaacff75ec79c850f0a883ab155bd2932d93272cfb37503d8e8c329bd1c34f03ddf33c3a2a73a12104e80037eb567941d56d6b169bf344b7c4df3c75b564be1919ce1898b94d04d004bdf13d484efb2800be34dff93882b7ad8519d9656e094878ed355b0f859a2a5285abdc694d1a4879e2d528671e85985322f22246a51a0ef2a50f3bad09a2a772f91d5c7b16b5a3370be242b4332337db57ca206345c31d3e88ea68f8fffe6d7b45ef6db87eedd59f6a0fab8cf878ff439934ce6b0d79acdc11c4c461a278f6a5b523134a75be9397055cb100b9b9c30fb4bb89c682ec455bc5d9ca5c1c79ecd334c45e5d6738df2e9cb352dbc9f4e41c18f15117011d12187d9f2f13c8b0d925e932088484f938286f7bbf7d93c8400f2ec210e0be232d3999cc282a6766996359725259ffdcf56fe671fb7c8a32a65d383472a01841b3718ff2f41684e6c883c4c3b02996a36c865d659dfa733429065f15dbfb9ef0e73a3cfeef7204feff7ee62477bf86659395f0d434b9fb281292665941fabf5e69f813fe80f1c549cc18e7a4afe340c6f88b6055d364dac136412274a53a7156235dfd50946aeb52bc1b135b809991a9cf92b5d17289f9f9be652605892aa937347c871659d13131e955d8b8285843531532c2704023557b435727081cf56dbed8342a99cae1d850932a9969fa9ad99e4da8478c4aecadd328a1bf2c31d9bff0d530638ef2dbdfb952add1804a161a3fd37c71dda888d3ffe9b68fe6beda8cb26dd7d3ade1703904b81677f38262cfbd4a6c0134777c22d4e0637410a9ea9d1cf0d4f4058d5faf1486372642acb84367cb97dea7a4bd0c87ac45f4eb7007505736b673186a7107b9f9d364afb39552546844decbf690cad9d122683ab19e21e914d6f0faf7ee429c3cab0855d78f74f3785a2377d3578aaab66172cff0f6237065fcf0e66e5957fb7d10424ce251e99d8baf8048516325c513b581b938746c68e18d0491c5a62b599f2c5c6ff6eb5fb1d6e9636549a198c4ff5245e751919966f490d1e6a586718a869431213789022d2c3e5f9b9245b50408832cc3b76ca505bf9b9c262a1b0f6cfc329bd8871511d0a5de0131caeee4d9675dba1f427da8141540f0c90f686c558e48d52c9410508bebf350d3823ee5fd7ee1de43868ceb104b58f6f4cfdc122e59cb97af7da083372b779a3f4f293224e25c26f75982a134181a67d1682218e0cadd8e70be5db5baf9c273b5f02a36206117bf56cf1a0b3fc9d85af6310309c2037294546fdf1802c6bf8cb13bd5f6a4ef98111d7d7369ba80ca00a47ee136611326a033d767438c9be9d3760ff23718a5a04230f3886fe966e8be80aaf1941748be903bb8d56bc39cb4a402406bf91b590b94a00eb57dab340b95b678ad99356c48d20466fb85b2fcad781d3f8c43b7a2f6886a994d3fffdf0675359c2f3f1bab465d12e17d8fa901c51176e2df7ca68904a361d5682358e2d0eb8459d5cee436de638f3e1a0d0f36a0bbb8d5179c8f04b1a8221f985163c61f85be0b9c933bd086f5b9a71a65406daeee511c002bf2222bfff75634f6ec64de14e575776c1fa7273cffeabf8094f8a198ab95bdb03a19f25ab5cbe7383a6cf7040bf485a8bbc56bb16f3bc8580fa9c9d672dd262af0e54d43293f28baada6d1bbb85b71b1e845f55f5d9b13d0b466237677f0ca6b69897a860d9ca2647f21405332c98839c4a8f9600b0cb796ebfd377ecc4b8465a8a8a7a4a6eb09993b0feb5d5fd55adf9dd6a2100bb74f7cbafe50c709778829e7af41357cd59a167a80c300ccd77be77d2dde5dcc0258fdcb0cbb97c77b7ec60cfecc5bbe1e983bfd3cd921491e35280437086e20c563e0a52d46ea38d48901f04724b237e2e59862933e2fa7c49581148c49a81973a95780478e69b1b09c341c1b58474e6675b08e0ec4e36f6f7e47b25559be9410fabe44b301ba8b7112107f39890557f7c555c550a6b4e34c5f9bab2882560d64113609148f7f8cfe0b229574fbb252b766c9af3c5ff02cf094186274be7c4016f3537fe95c536a6d3bdbbc3d3954dc4193eb96569aa27cbde8c03c5a947dd1d3da3018aade99ef8730025f691e4c1434f7fff99446d9129794503e0ae3f98aacf53cf7e94a7725a57b86778539683537aa73fd3d367357b674de11e84df5f3c4d17939074dccf69b49943c8737c4015c6ea744dd8d6890d7fb1b6bd233c352280d7208624d074ad1fbf78cef173337f22523d4f5bdb76c07cd2b44e6e848df3adc6748403ab3f24345f2d86f87ef778b12308d25a72662b0202e431f098ec9ff6e4fde723a4dd2c1547c3095fee48286410a364f8da9e95ce0c72361483921d252e9569217e76ee3bef0ac19d1ee95fb0b260d811c11e3a8434386b0d670cae0693c307e79fe2b5cac571374faf3124f45c9567f06a8ee5c20e874a0f44add7f1cc4652d92329ab99d5132215ca9c77b3836edbb2cbde3482b764805323bf8b347c9fb48ed343ff62313381f4c26dbf0cfe581ce7ade0cd6416c38881d15735655a42bd823ab7c3f16f00fd6ad5988208af41fad2a6913bd1124567212287ec5bdc0713ad6d83f8779cbb6fcad7e5b5c0aac1b154b159d9f9aec0c54e9604033b02394628d492c78d1ad82386e15b3853a3b0ae6e3331ffde07e759a1aad5e5c3e10ed4c010856047adf9033d2e4748d175de8808f946e41b7f428cfe1c00348be18069dc96df950ea12918f4e35f0ad4fe328f99062b1640c0c13bf5aec842f6d6131d32f38bbafeb54b625f821a170635890c360308f825aed7c4e70a1a2dc69ea3c2b9738f0cce894648decf12bfbea9ce13a4462ded5d7cd1c8638ca76d415586a57c3d0eeac97208065edb0cd76c29d525b07871ae245630944d9d61be1b36adbd25ea07b907c0407b7c101eabeda1cb7468743b809fbb079862abc3bb0f7654158a2dbe2d918567d9b6b6c727c3991c9906ba34b486dde33b90919a11c5875100c58e2ad0e6257ec9aba5b884e017fc981f1fda6c68410a86eba2f28278c6c75b4e3cb50801c99bf30cc2831e85612c91a9dfd2d1ba634937d889a49e6e4066a4eaa7a2f1a9ca296561fc0190e7af8330fe6c0c7563972b37fd8f7e6edab778f6689022ff83c65a39314814e26d06fa392e272bbbb44d8bd70048d209b9c2a82ccfd45f0172b43c3e1e1790c18fd50571fcb27cf2624222881b47595ced051cf993ba40e560b1e803f6b40a10b035c77e689ff2117c55cef73c95974a07456c2147a2fa229c0d115fc2286cc54409d61837ef3eee86e950878adf6dcbbae4359789202cb4ba85e66aa11a9ea046e845430ccd2e73feaa54cead0e85f09014256ffd9e85fa76cb4ad7c14213c55fb446c88f373068e87acd4e9d2238755adff2297019790abfa1c9b0806c00573c37c07a47aa1566a9e295420635309733a55e102ebcb28951ffb8e94c17e96c49dc43f5681b7c83a94fb7e086b38830245a62aabfe8237060eb60b86e9444731dc51f3954482919c0a2c1a5fefc1625ad3711eb77e02ac2b3db9a6d2f61eb1c76a5859c394b347069286c606c393f7f1ed5832a9875e2855ea18f5c012fc036311c075e302fc9e68d3eb7a2377d6b4c0fea259b200e599b4cb63e09c1bb15d6ad2e983359bbd82f9207c21b1e0ecdd80f4bb57d1a1d79b9127d8203c22ebd44bcb0ed5b4f333209d78a91e58cd4a72290cd92d99493309a35798e659a642e0ca633b6d859d0398de9da09a36cc52b43c05dafecaf0daaa4010c599d10e9633319a05ec8f3329cc06b487df9d3d31ad747e0a1e1c50c1fc9249e2ab7c922fe5dcc2f54ba229adb364b4b2bdabe99ab12950148af5f9e3504cfcd39d627d1deaf2546f0e9f0bb85fa7d4557a981ef460b08e5ec7c7a8818adb834efe909dcc35eca52bcc7b5a35f36ed0a39f698edb12fd6824b0dc990ce69d7039ecda5b3853e2120fd2930cad55c7c1fa7f3d1c1c8b15882088d1a5d3974bae6cbd8396001d7eb6f37dbed59916a7883250ae50b7709a712cc21579c5eb8c128e176f167454a2199061c40a4c86e8c37f191dfb413250ae7acfd6231dd976ee3babf83678b390472ad82a11d11421e15cd205003c3fbd65adfc8d855b59c658c7c78b620acc8f0cc8bbbb5574cab0f1e463ce3184a9ded3466809d2342697f1cdfa9125dc256ac6afbfb877ed2d835d8da7d2212662e74fbd8227dc5a9ffd459d6ad2f73792578f8f22ef9ae2fc33e980dfaf06ce1c2debde85a2265ba15559f1286fdfae61857ac317301cd0325d9e935e797b737b3ea6663f47222232920bca8ff5f200b3c3053670349f32946acee17d2a98f3ed306558a37cbc0c6affa0ce667405dddc9b5b79fed30f372bfb9adda0c270f2c68f4858a3fc599e65eaccc26c7bf9feb1e40169c053a7a53bdf6fdc4b4bd216afc8e0043853bbc17b3f7c0357e0abe7d77e61fb527c46fc66431ccbbe377d176014051de02c1b0202d7c8582996dafab66c87d04b151ef37828f183e1a22e13be334d24be13df7ddd787b59bf039742197faeb2cec84a3b92c041b3bbaa4ee5eec0da1ea2382808490a792bb8db91dcb20307dbe8280e1136e7b10c921bab0bfed849328b263757ca1172aca59bcdc2b3cb45f3ac0e7d208e06c94efd8cf6ad90e463e0777bd05bebd47915d79bfa0aa479e5bb1b52ab534f4bb09dabbbac08befedb4575f18c094c8ffe81884312698643dcdabce97d27de664e136f6a2d4a61ae308db95b1bb74e0a39672aeb20ae1846f42731d47ce0b0fe290d07fe4e6284ff5c37de648b7730cf161f41a2964ade2e87f9b6c55023f49b54ee2f54e45b10eb68ceef72c93cce5ddbd8106891449c36a9d0e2c990cf81cb3976566f08dcd19d31412ba175501d6b86a51c38d959f65f77c1029bfdd466baee26beb18e6fca0f1c255d08b0db514923d80e942894e110205941136ea0d60ec802ad6cffc4bf3e66c978f9cf23116b7c9dc7045e504b643ea2e1972c9c333d67d2824cc4560fa685ca6786aa7400eb633acb6eb2df6bea7a77456c4a350930828841d70947dd02f0067421c9095960a9e53415b2a5e3a48b480fca0ad3459c1ec3f2d61baf44c799869a5377f5796c39e6ba53bed5370f5c6d306847ae8371ee2ccd7e2175642b8edb9340aa8c5b6e01478457f16b829328b0d421f694f6ee8edc782cdd4f333b47bdf90fecf15765babb9e63f802dd9ad7db455dd927f52161152f79a3d2c1db58f609c140f3e77def06fc2bdfc4323b8889ebbef64a0b3b6c1332e4ffed4b8656bbfcb217380ba07f6dde537733ee0488175b5c8d6c14cfdda8d4ecb55a2e4d5c12b9e50b5d9652c809f09d83bee92be9079a8ec8a109aac94aff9800eb58a93a5f314b01c66cfdf2d1b441de6a390ca337d921fc94d56c2b1daedd01a457b542aa6621cbaa975e32f7913ee33b6307e8414ad118358c8307e8c40840516599891a17c8786b821643f65554eea60176c1ff669a0aec270d6ef5d1265484a828e672a410143491ab3b37251488be9b5c8c099705cc5ca595c4604dac193e4e598971c2df6e99a5ad226932735cda6863d988643011930416c49ae86330de7729b5c1cc1dbb092a2784a8347fae020b410b517f1fd3630225ca032f29a6149198d5942492abe9f056c1869ea0eb9b1eb15540b3b896c71a4f347b2165bc8d23d6c956aa5f82787f92a0cbb787dd317222150088a32f827444e13ba5aa913351a2fe79de0276930f7f15c32b5c1713bfe28ab0e2e4a2aa8a61b8324d6425e2315256c90428867a8e4b8a0ec7f21b43ac5e747499f6c11a52765d261999a1eca957bf764ca32db135c5b55333867d2d0ee80664497ff5429a46a76c0848e08cf676fd90fa95b59f791c83f11a3c2569145a830e280929fd4894bc3a6c1fb59b1d60971db326b8f9b9db244c7657c24367966c4176fed23f5afab9e766438ecc028c8a987611ac66bca5f3e5aa193e1446c676a235b999a6a7876a9da890f593596257bb32c419286be65c1e087467518d88415daa596c94d2c02db52a3a81e8ac33da08ca0a58e476080ee972051a15d02ec18d2b168bb224b521568a28cb27bb864b636789f594b526b4ff7ac00df6677a3f0d7901bcc21bc2501b04b5c5c5e6edfc0c4139d272a1184e97132638d4bbf0bcb826d0822f23e3498e0d9647ca3f1efa49f2d90e6bafc130948306cce6b4b6f56ba06b45b981a017cd0875f11bf906166120dbd6162495253fefb41ee6f3e9c4f3e37ae6d77d9b15096e28457cbb2f9705087d09a97eec03f8bc3804342edc18b45a1db377be10e9cd1c8104ae929bd19fa8fc40bcd4d57507e8223156d555ab0f4874f4e1bf568809b125c9dc3ccc1eea877d4a75adcd934b663c0713f32a39678c6a53cb7ecbe5e543d7f5bcddd0f60e15564636c07a9d6adcca7f6abe31ab8341cb8a667bbbf64e3015fd6ff167c34635666528c4fd20b9c8bb846947d11c6e1cb4ae4e835a19dbbe4ddefe45a2ace9fccc80f17db77130dfa383bbdcfdf4585126564e365d6b15649b7de1d85f5c08f7f8fedecfb1b07421120b643a2546951f304f60ea18712d7b567f6a0baa99580cc75ed2f96585b705e28b7a159fb1aeb7541c6919e40f83c06cd19a8ca1eab09791e715d3a5d9786f0507cf4627fdbaada6bf7c7735ca606879944ee3a52746801db74bd3d0424aea57cb6c203de1092147a7dc3a1403af1b47807d61e7338d2d4266720e5d46dc53a66f89d3e654823e1754819ea835337ac870b6a5d2d559a1f5583dd38d9cac36b85ac9aeb2ba910694a8d73abd7048f867923ad24e427141403daf26915c6ae3cc97c35eddbaf4ed8295874de3eec81c29e2e9153869508c31808c3b94aa6dd81c04edd9698889cee95d927df4b430a3f0876c4a058f587e5fb6495e0f14bcf6743b862e96345bdf26d0f759f777713f39bf0f7b71a0f23199982cc7bdaa7f15ca758a57aae495ef40bfab92a4f1777dda8d18a35f568b4d899a28e0283c855b894d0d1c2ac0aaa40fef4e1292cc19853297b985fc77f401b255da0da71e984ac866b51d09ff23a453f9baeadf78b3a3adb6769515797727bb854d200f1412aed51f052915cea4d4a35761a9bf113cf83d14f482f3620b59ca07802b7718fc6f4f6ddb23f7523b28087673ec968c86f5e1ba83f1df9df827dc9847f4f856dfb5fa896f5c54466ffddc3ab90da90afe344a2940dcb5d417d48e133d50c9718becd5861b9cbe7ec59c1210fdbe9e780ed51b33579fa91296fe2830258e016a00ef41a39a1c2e15d4ec6977e5cf4d83e27160d887673b67164762c1523155869762aa402493e2fbf4b2c944b16efb4fdd1004188ee23646631dc7467bb1bb1f1a95eb66a72c45d24f5fda408e1c50cdd1238c220e4193b95f73bfb119739be595d69e3749bda35689c5e93ab85dfde872b863c2d6685f2645b4c94a7e0482e9aa7b5ef01cdb4b87d573bce695b778f56d7813370ae0a6d5f3c1127232a9a9eb8d5084d9865b6ef48cda58c3f8ad8a73700caebf5d149ce49375ef6ca3d3b231ba48be544fbc7dc79348960cd3484d8b5e134762b487bc58ae785094b17959b15bb33cc42dbadb36abd804dbf1bdd8df319ff3bacb48ce249a4c75061327890ada8f451f4579f76f4c4a30f60d4076567b121a01afe1accd73863a58592d3adfe905a63e9906a584672adde823fea15ca2d9cae1c25cd3469bd3dcef55cbfdfed39c38695d4c73e7809a34ce1d816097882b12ad0a37cd2c62505d8173d2402efc0803e580b197d046035f795857854fb7d47e28bf15c5a09bf619e3fba5633667c2f44d079d515e5940ffc1f92f9faff355cce9b11c29ddabb32c48122b52db585da798e2b1fba4a77c5f462d1a12949019a7b67c81f0c06ff16bf3b81b8ff3ca726422611a690353d759dbc6fdc535be250034f6294a90c49adf74492b38e3934ba2fbb1bc7befe91544ad6bb14e87a33ef2e0a07674aaeceb4