安全研究
CVE-2021-3129 Laravel Ignition RCE:Debug 模式下的 phar 反序列化路径
Thinking
2021-02-02
4 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
Laravel 的 Ignition 错误页面给了开发者一个「点击修复」按钮——但这个按钮的底层逻辑是 phar 反序列化,攻击者只要能写入一个被 Laravel 当日志的 PHP 文件,就能拿到整个进程的控制权。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9267686ce882378cabe692476ddba0b0876d96359d2d47e02c63d0e9d61096b4c9486f779faa3af8c50841158e49576c706eb0a9426e51f72ccd743ea293e32e47cf8dbbf8a4a3edad4ea2616b07c77946742615214676ba247d4e5008d6301697dd08f281488b847b2c8c9ba9f92a018fa9e833693d9d89bd60450c8ecc53733e6bfa90e18992a9db6c73fe96786c0d9e5e16efe430417dfae0a37be41c7a0e015c1d9b68b44d3130ff461063a535d75002fbdbfce8a799416d89c10268cdcf35c6ccd71bd3642b64791be181cb72156688f7dbe55a1b7d37009e644d0fa0d6de31612ab82ae364bc274af62fa3de6220dc7c62ef047cabef8a6c0e0a796a3d8b4d9a706131757dfdba85e4ca6f98107c5e531727bf2c62eeb72fbd1e761197775e3e9721bc1dad9538f7a67efabd64f01013181c42393f4ec3f66ace61497354f4aa9d9c13c564ce3fdab973f076b3164209ed320d4f77f97302824b8f189a1617eb69eab8817d528ab5c3a8b9c04428d3326d6497d37c1e6044cf8daf827400745ab85c9ccabd5a60281269e44301b833ce4b0273e32b3a8dcefe587182cfc2d8d924f493aff3e90165d338d0291acdf5f97cd4429224e95d57d3073c183af038711bb184879d69b199149a103c594fd5d83393165acb8b1e134b8aef660493166b28703bbd0b325ff1a147182c30ff92cbbc9818cd2b9ab84fe37107ff33529c9e0455c11df3d193c662fd05e0d8c607bcb20b1debbee5abadcb199c51c6dd3e6e16e827c760b14c439b1fc5d37816e53fd32a7ce4cff040fdc3b4137586ee52d7a465975a0cef5af517cf4a093a17d622816558db3395409f2542283cb696e51ec23fba9ac901bd3649698a0c0fc0ce874f11d73af624b90388418c9d7ca8e51107c0969a55cb4968a6c8b999e48e4900b7c103c86d4a4f2be1f4a9665665502408142574512596751a9d0b6dc14710b0f9e673691c185088486746681da8b03c5f6e2605aea4e5eae687877f12052915599e0feb5ecb2024a8fa28720a020037e71c3989f13272a80d5e7ba150c7570939fb72da3428408f1a88b6ac0a33f7f508f244a09c5f8591ae99b974c6730bd842e3e37fb7b1e39c4d460a75e543fafd235d70201c48912631c6684d5336fffefa5e5be83bca95e13ffc6a524685e5db2d6db90d2c3e7ccad87cb8b86cc87e061bf4b48f4db503b6ac363a91d5948fb606819963b73661d6aeba4f60a0731cb4104a3809040d89dbc11df43c5a7d387c9c3ed96d9164ecf65e16973acc1f11d3805514c09d150801400ca73b062dcd39dcdf36125d144cd507a6afce1b1fb121885527b19ee7d55e6449202d7611ded0127137ae9815131b59b2ce592d2eacce2d45aa06c03f815d785e23b5aa7b9192a4a353279f489da2531c55651bffe6318e5ffe313bb6fa26f3de3e60c24872531718e290d3af8483c9f93273ec3a6a4d8f2eb09188ccc8e63d21e7793c03d52befc59aa60ba94beb97ad0daad2a07557129c2ce7eb2a4c17a0b667b1143905382805171da792508255f4ebb3174ef019eab32b1fa4bf8fd3411c4749004bee2403f4add006223b3d35c0d97302a4935778ef87a759efe39e0aa3f1a5b44fa0ee149d54f60fbcb049e79c0120390f074b012bf72160d87cbd580b5eaccd8ff7dcea272fec861d577dfe13c3b6dafca87a61ce2efd9b36b93c3b94844a32136ba836d3a292d663a16471a57f23197c1082baf7cf05278f0ffb12bddb6dd16466aef41c6922d8e155de926c493bb9a97e3d950e1ee86ac9da7bde63f428adf9b3193cd91989b7e227f04377b3364d05f8d708e68f7325fe74d0b17e477dcb68913ccc6752593dad09e3747f36991859a9feabc5d1f896f8dc07244ad9f9064f8131860e05f7e47d040e07cc16a33269e3066e2cd93b2598581061c1ae4f88fe2be9165953589225cc090046ecc4276ab6284efd321f6888f6d84e0c997e1ba083a85304a15222861092ccc9b5c023645988bca699b30755624d74d61b8dc5a28bf2e6f6e0b97434b08549dece3e46a0a128896c47a2fdee39baaa99c35b08b951347f411a5b05fb73b175dcbd8468866bd493aceffb849e3a29ae81ab84e2dbb487ea551eceec14ad89204550f0099bd3f20450f676852834da90f2141fbf251ec1fc0ef918f3afb377e78cf4ca65a7bcd9c80f49e67875ee29d7215a5a15a0d6f74c3aecac85b85350881e6a3ffb9925039a6cd7714f4b1c3308e65244f7153a1043362af21eb41bb0843628d28b05b26236f534b43457eabae276d71b0301c5ce3ff527784cf240632a85ee2801237dd7c61458d66934812723ad0c7b14a5a84db90addf756b18370aa57c028722bc706a980bd038b22c6a5ddb32acd9326d0d97cfd52aa5575d7c79769470a127334698264d050fe4588d2e6f09efc6bd00f1010d38ad1d5d4d7aa5f65e2fda6c6293315966cca3d1b7897e569718c70ee46480da8c1aa95c962d1c6a18bf03ed072885111bd42e8ad4fa3570b1a171868c9e89091717e900dd5978d1605d5e643462ffd4e7c47beff56170c5ec6f94845a4ff48777c01378a5b4ae57040c135d65200d9168ebbaf09a81a1385acf3484448834b88f34d62b27c9405f02056cdadc2106f0e56e37c886aea46a84b4e484241ff6adc9032d417652c1d344e57107e305d715ee7596b5b5f4e62ca9db2667ba060ae1d0017807bf2e2831847a39dd8cbb9330a4af61ab1984730a9ff8c1564c71305e768ff744fab7b202fdc76dc4aedfeb5463869f914ccfc61da13668fa6fb205ac77f25263df43b6f758a1a0e649cc371f2dd3382b98d472a7b73a4806bb40b72792389f2e94895f85bf53028c261e3d9ed5b60fcf92148de5a6d32b98bc6499ae35adcf5f2630a8fec70b882c52a686185ff3d5b7ebbe9b564c0947f4d5c380498d922dda42da56afee661e607ae134b8e4e02dcfa7b696f899ae020e05e8edcf0bf5989e2d65ed45fc78ba50857533fb067d1e098eeaebe5df3d8cedc7012917e4bf2160aa23b20d3a7c8c16ff44b9bf0252b3947f1a42f29c12c768e6d2a046d79afaadc36e0c00bcfd404c17fa1edb49e65dfcc2d86020dfcc3f8dbd7e35b04ed7920a7f321603d3f2854b79d6fb2a4bcd13784b0b9bd795d47f6f735a28afae965cf437a5bbef3610c5f505d416b8741e3d1ff04bc156412c4093be2d2cd7ad9ba961ba4647d1d08704c7b900952a1749a6f40685d7c5793dd0cb273a0b74dda7ddf99155f3f8ade50303ce2e90d99ca93d383b434677017e764567abff176af18e776c653e565f607b9cd6a0f483a52c1209dbece3389430746cdf58b7b6ff2598c2fac7e00f003e5932dc56f96f4d18c10e2359a332fbc6350389f3aea6803ff433ec203538469710969913d5068379a150a8fe1a5b3e8350040aa1aeeb43dd384736e400c2470461a754123e31b9bcd753b642388f8321837a6a2a60fcc1116a0dcfc5b3878c81b2de7c3b41ec26716a37346cf865a35b423895aa47d73740ba687f6b4715883211fda2cfa0852e280f11067773aa854db4a551ee591b65ebec82114fa3a31e3c2871efa4c3182706f625753470f94755097e7db46c8b21d1dfcec8447e697cf0f170353632ca8f95afb3ba7cb13c1bfd813f6625a86f80745c5094f7f2da91acaf97e53662317902ec05f2582470ad5908f8c725a808860da576db3f01f85a3865c4aefb3c7d56e4d04d80c4e626aa827a18ea41fda5da9ccafd76e408051ce42c9e75995f9ce5c36726f39bcfb9989a9e28e754e96404763edd109a0a636bd6a77466923392797a9abe408213dde353596cc0e12e2190988901d3f0a113da166a4f799f3c4f213c94540d0ea005c11142a39b583ab7dd3a07249414e1c39c9a353f5438608e97be8c50134a5a6febb61c5050a5f0be1081ca5245570fcbb2449cbc7b09d76926850e560688f15a425d22a1720033601842c6426651a6f88c3687955487ea64cc5b15d05b7dea9699e16f257e3bd4d6e15a125d2368d36575e284f9e22f8b6b086666a0e2b0b8f2ab011d61b53971729ac057d2c68779b4703bd803e0f82a795d45415b602924b26e5b4e21dc42f51904dc767be4fe93dc0b2debb5d5c643c3874fb62e53c246ef2040d73e9cf54b9ce50a2812d05eb0e8588c73d563e0e99dbbdca33d245777a80c28f05d2f08422814cd0e710681010a5f8e82e3210e4dc9981469f3128e21817703a2c30b9d6130e01916774dcce3d56fda11709ae24ccf5ea59cd1b73cab3023a1e4d2f40626c338d1138336f4a9c165ef00f9511c7713b19fdda38f19679a387163257cf87564c6483b03e8d835d8f72b56badee9474fd6b8d52fb9c5fc54ed3b78247d77e2ef13519b191fb3153038391c91f843796d2da73336e7e4297426bb8727b72dadaeb09bb8e90d684e6f6f013f15c90954b69b8767a82c3488b1b6aea08cd620e545c99255b5ad3f6a2a25e46113a29a07d8ec5622471705851582740827c27e80dfc668af9e370c3e41dbe9e69d75b507f9c960170a82b2f89c4b4ae73e594cda9b20e07970ed70c44fe37526d15f624ae828249bfaf4ba449cfcf3b1237023ce6040951813865b71f1cf4a3bf36088f262e70039f2095aa95d3817c8dc841d67c68341c9cad8ecdcac13411ec873395b0f4f764257f8e11d3f5ae3d883bf90e44491866f536ad5e355026193b79be3803035657f22e0ff9a2d3bea282ec600172f56239cf0cd798dea4bff8db6b10b0fd23a6b86d55cf4485c345db88bb8dc3ab99976ae0524b65cc8a956173109705beaa4933089ca5b31415a4c15a591e9f94f735e3438b1de7d4f55c0f6b80112a840d5f04f783fd78ed43a25f1c72a8651325d48907a03f9d629b179ca02aefd16fa6572428fbaeede5143e5399fc4065cbf7299b57796a96fa218784adf7541780dc05839744c590e059708f950dcdf382b9ae3f2e156d506fcaad0a25c6daff458292355366bc256c733ef4d93064cb95fa961d9243a01b5c16bbe844353c077b677607f6f76e0d57c6ea2691887bb337ea3c9e7a3c56515a0a771d3d303b08b6c0047196d4965373efbed4f59615874c12c7ae7e5259eb8e2893c5e24eb5c09ba3f28b1ee39505dfe84f9c38f334dbd8d20b99f9cb4f1ac81b5588ee4d432141ca072f2853c27c0f661a8024cd651dd9541a87626ba337129c57fbe0bc9dfead1be6cc0d399ecbe7f70f9a57cc9fef09de8fb879adfdaef62d0e25e97446e8ad9051877064edc7699814589614d3d41262daa9a54bedd0f738de39cd7d901352351e648024539b616d6b0428839317b9f6e95cb833a56c9ed2ba7d8686b5581a0430eef5389d68b4e76452441f39ad54b6878426b53454d6e05fbad9affdd236dc5131b618a49b2a09be9f3391805b636357e7f8dbf8aff01c7511c886802eec57f2f7a74c5b8e7363a1b3e303c339568fe343fb9f48b05a90c1c0fe70a3fbc3595a7408b615b787b01fbe4a067461251db83ea003dd1b26ca198a692095cf9797509bc0454d2ec20c4957aa295bb96976440e329c5d563256a334fb48337000dbbebebdcb617f0ab17f0ac7ec6727b5510c5fd7b6dd4c699092b346e28b8c4f61cc08673c7289778bd4bb779d9fc4204517b15615a46c933be1f9ff04ee24421765716f42ccf34ceefa8b8fae39cb804a677ece8419c8fe6bcd38522fff0a7f59efae2f7f722b2d171567bc00e5ee30e326407a66eff84ca99cd5c6d32129084322d258e73256834b534fc0bd4814bfe02b6fd6cd703d2123b93322a6a167101a215859111bad1e1b7d4c9797857af2f74f94ec176eb268e653fca1183bad8743c792687c162f8a9054859cbbd812b56249c846fcdaac7d8078abe62910331e3c27e7882a5828801f1523133cba4c56ca608fb4958dcbbf4cb6616e384c2da51767e5647f882b06d787bbce37e88115d6ad96ab904527f3db016f2c4bcde08ece25f9c111abb25fbf3758dbe7ec6d7aead818eb7d62ced1a8aaee6a38619c94302091b34122781d1ce974eca7c89bb5c3c45e4a1b5742c2ef98a6fe65aaa80b66e4d02862211108e7b57b4ee0373afc4bc5fa5751dd53ad30dcde48b629d790e7482ebc165c0ecc49e44f3032fc5ab0143c6ac70d2db40607d23c7ca39b49ee242bfd5021134bd91d6e3cd0a341ace6f0e0e3495441a0a12f832a6cccfa3164679c4c7ee9df233dc68c88a5d0f8ce71cbffbe891519f5732e35b60d1ed6584a73e244b91a9646913edc2587b4951c71be862378325990652fb38167486419069c74265aabd3eaf1cbe10d50f3f760c10ffe7adc47e0b336e969bbc0d8565fbd1bb0c7d1d19e620a32b94cc2b98aeb79527cf9801d04afd76ff9499e321959dd804cc9c460b919022c8e27c17c2a0ada884e11efc8e1559d36b7f1550cdacaca5da69c6c45d4d2ee11400c6cee816878e0581722180b8ded2d0a67d5226d089a685775177a0e2bca2b4f3af29206bfc0f80f7a3c225e5610b3b318a536efdcc315fcff068f26f9477f889c64137740116f07c00fc3f6b773fbcb6428b934f58971da3c7a21d88de4d7e42b43c23182e85decbdc765dd3e76ca42b4135f70a425d6ff74a04e898b05be465e8b44cd4b50706f47cc73b6e92f01467459ae32e9d931e0d5862580ef6ed34da1d1053c22c299b2b4b835f37af71e297bd579dc49862e0b2e23c948e626fb9b2ccfe79b059cefa1db10501678f7d35e4bb41ceb160cafbe819733cf09e9ff77ccd6ec5cb5b52b548a977d19436695bdf568f63d52c373b01d5f73532406107b8aa94a683710f561c21976b0bb246279fec9f0b110d71893ae561162edda4925db7cacf715fc9715cdc42b5344206ccfd0af9b9cfba90282d0939e9fceb357b7da237b874d74d7306d30e7c52556442dceddbadf6fb5929af7403eb77e127dea1948260246cfe157ba5889b715b7b2e623e756a7572182c56c28a2b8e3cf88b44a183455a63d0116251464f556f83f79a3fffb04b2e2a004dbb7b89654c1a9b4ce97f509ce118ddbb2e813556de8a2fda4e8853130899dc1351f73b00027af60871d1038420a112e5b3f459446e370eca8791fddab9fb479d8dc78dc5cc66cc622b81659a646d40ea60adc54bc929d6b29c11ba21e16a0e8214a3f4b51df4e70d1704961ff53e3c36977ffabf64dedc206c49b6fad129f718a6ae91b7167cc619a36489954beb2784051a9a78b1cf1d0b673ee2c1d5e347d74d48a940db33058fcb2e8962c79dff5c12b5bbffb492ed315a56ff8eef460b08e5ec7c7f8818a4be3ad0c309dcc353894dad9eacb45f3981330abf87b2ee56828c0c42dacfcb6f961ed2c6b2a2de777d2187464cd2d0666e0eaae0858382c855d24ddf54183f74a7faddd8367f4887a63e758cc91ade6a3291250de51b731cc4558268038354a4873efd7ff972560d67e6433640a4c56e8922fdccdeeb4d7f08fdacaf3762f9d421aeb5a8df66c22b0f3cf393f001450b5b1e972a554d89dddb1adfc48514f9932bcd677fb22aff89c2f5a3f6d14d66ff4e591565b5084fd5ac326497c6700367732ce69428048619f169c9c0dc1dcca946cefa341b6c37052d82e773569cd6b3f41afb9d6d34446b40edb93491892f8e7bcc06e3e725ecf6f886901f3865a34b0ce15a9cd7faa54e12a1783a1bcf3b08dea574b2f0d456fda67b2e93222d776c28bcf5e810765b356c07731257ec3e4ef4f715f6eadc6dd16905d964c69083f0b94bf3686b50cb96c0d5fda974e528e3c7a2884d6a432a6cbc8a8520c78cbc04eb8623d3b591ef5a1715885d732514f8b1a3cba3a63523b5d71863b531a65bf2e8c037780ee1253ee176fa69cd63c66c3ac3f5a222a95c014051930ed8e93120688294d013b5ab70e27d04bc51ed2b9c8e4d6c4471eb50a075960ecb3df7dd9384abce9e6c37758dfaa26ba2cdf7fd634d7274f4f0af51f01f93ee3881da8dc5e387f6dffa38ff005329fbd687e912393a079d68aaf3e8afdb9931b9067d3ffa51568f15b08e6879b8096f8ca2874dbf7390ed81da54d900463e0b3ceb40faa101c33b37958ae213ca0babdc65fb7dbdbd01c2ef8ac0caa1a99e7d52189cbec8ffe518d06876dd0e52fa8c82b2ad34a12aa862bfeddefa13a16798c0e5fe79b3ecda27faf645a8c74878532c0191566189dc9c77a6a96c16f9ab30f853e90c16e45df2053278a5fcaf2ec43d054b7b4bbc49c8f52f06f24be6d8f4f76dce9caed7b18e068112499f288d0e2ce749b648ccc33c36b5e28255d31404ba157114c7b43e538bdaefd32cb43d4460f0934921f0ad229266a7a8f5a2bd169fcf13b75ac071c7ad1bc12a131805967777a94c67e6b212f6dcfb4de9b52398bda4ab3e1aa2b7bff98337be77b16dffeccb1c3c1fc34a1f609f173eab0a1fea2532fc0f1b8431ac9eb72ceda4f5f86e5b9ba54b860d389256618832c57f092a5e18818893018155604c2249615dfad7fcbaad6f4487b8616c3fe2a2052a957da03d6a3e92ce9227b073bb5768aa9f8a4c913cb67349a4cce3c63b0f15b5bce2774ff583f5fb53624b7c0cbf564ce72a59123cdfb76b39556da2a2bd7cf0275f4c1207f2badc7e7966aa71759a2cb54fd23c70b58ddf97b523df003f13b89160ce28750344f5be2bc2fca61037a2b4d1feeb3b306d2f1fd8fbc72c3135b0bcbb83afbc7f8613fb94a0b1b2fb63f856f64f27452fa6b88acc04bb54b3fcd5c9389e5f311186ba276a628a7ab5d73722bde7d9cd1a95cfc0ea8bd542f087576154d02d83a17b572d605a17e8d75645ebf14ae6479fbe4b72576f14e9c1aea145ab315ef635981aa59f858630870271508008fc37d00dbfe78c37c12f59cc4c12669c522b6ac7f7cb80d08528f48ae235f669adaeb511d1acd6d091d9f83b099cfccbe08acdfe7139a0fcc7403e3c7e765ef0fd0047ee9ba9cd532f72623e0225d4df99d9991882b05cceb01959e55896c94910172d236c4aae973d0d20c92ac1b01551606533a99dcd08afa45d8014a104fcec0f4c838c61be3877044037b47a0d081aead44f300e499371bea6ab705b4c6cf07b62bfbd49b1143bd9d63560936efb842988ef3b16a7383390500a5b125ad971bdb4baad8616c76cd49589f62dd4b3753575f6db11b20476b4a3097ee51cfbc4997e2f9152b15587c2d176216cbd0bc326b3fea5bfbc2561be3591f15c4c857d43ae676a9c35d3d11cd7d461fd71917dc211505d462f6272d79eb3dd601e9dbd023fba2f6dd18e905e87503bd55bfe3e4df295ef4530bac0579e4ce4b36c651a4930029225cfa4f54fb4d70d33b87224d0c39320ab30aec3b574491afd43ee7c8d6e6c45179a85a22f41af175e05fe9103b925d9e1a32c13062b76667b3440c1c634373ab2cbc6084a3bce283df9795797c8ff58f2b69758324995c91295beb6cb4d4370db07fce15fa2c938b3caaaa7a41b10bcc9a2740dde570af71fd2f865ac2d5d581354be88dd5ce82be86d2c11adb494adbc8391408a1734cca785d94f89217591d037978780e9b041373c6a80272f1999a96d4822ce03fa0b8ed03f2633ce36219fa9986269eebfaca197359ca9babc0d5a413113802f416d56d574b47d85061a6be19e1736b58163390f4ee7616b525c5bf9e147ef2e748b453e54c1297ddb9b0c96b1d04d9db2b67f4a86d781d9ae833fdaf7827f4af9aeb77988b65331b64716390da9852ea354ed767024729b524c7438d5454e3c0f3fe9b2d91b0c900aa3164fc2d66802460a2e27822ce41fdf947cc933d5673f3aba962c454cf0735b3ccdc1e4fb972059fd826ba789e89fa2774d394862287e68b761b0826f21c17213ff7cedb74501f1f8f6c584caf32882669345057ff632b9886d257c8209529169032223684350adf47e07637fe1c49f3484e418b5945af6ca47930e656974b5142186ad30058d2a3b1039c811205d7dd380e6d98c15860e8ae3b209db50f83f43c44d4484744d52ff0b0a60b3469d51c3e6b796f2326aa3689c5df39137185ab47ee4c941f70a43ed466d79d9c5e2fcfd364050b4f621acf21b7011a7215496eaac4d9a864cd82b56777307c13ef7a6ccce4127c5734c8218af17d3bbec554b89aa2b54f2ec5cc1fdbb7c1be4e0fc056dbc19b2b41d9b327d5416c943079d3873dfd05b1ce1bcf5e8b319d4be0e1ce4501e2bef574f1a1bd835cea9c1529b1d1cec1d629666e9e5488ad5e4e0a2993a50576fc95ceda7221c1779c93a527dd972c19bf7a30f9304c9d334c7184d81e20ff0cc5463e81418331b7023041fe95796e1d7849ead693f817d1d306dfb4c6d4f9240ee9912d632c0c96545e6dbde0ca8c7b72c2f5cb8e25d407e5cc19214e1687544f571f93caa27d18a71b22d0e909caac8013b685f8d69b937514e0a37d03e75813e2f0157517b971c9d724636b3a2112dd3fdfc2b8e7fc2979bb8882c68ae683c003ed68650042b93ece709347c7a0aedaa67b5eeef8204cfac00cc04814ae6a343824de540da6095d9afa5ad2127a77a5370f6587f6c77d7def532449c38dad621656a6a87dcf93e715fd2abd41c96264ecc1c83c2584354ce5a55cac95aec44822c102056ecc25e7216380506033e30f915af3ac70c0f226ab923865dc228f0c04a2fe49ebff10793605bc6aabed9bc4de06a3da2886a3bb5db4b4eef21b01ef54867ead2b20c1b84d9734eba856b7f0b53da3627a629312a7c426c0756262768eb5b0d663b69ec9842ecb5362e5fdd1211d0a52d5e7b25d12d3efd06e6aff51df56a64860970a0edfe56a890118349678b75ba502d9ac02beb0c8365ec0d3226b232d48371308885110252535225963ae595df5372fa8efc137266dbf907126752bc1a1308aac2aa1bc9f9a52ee60231b5d80a93baf88eb286a3fc31146d7490991fdfde3ac76d7f03bf52781bef9b2a337b619146f0ece44c12a68bfb96075f55fe214a42a185287118890d09347de2c29996e07e5f5f08d4fb80401c996db54395501f61c62855fb1bc95730258777e86e3a597cee755fe4b487ed4b232c23f4458544cf204f3dddf668d5d5ce649909ce76a71e73a373e7ddd392f9bac547b32727b2dfd4a42a67549468c57fb24a03a2f436adb132981f6cc3696767ea2d148d0c4591a590349a7a6cc3ace792c36b82f02b87db4444844e2dffbf4c1838be82a7afa9b6f3ec797b5cf0e42eccc738075c88f6a3bd7882e419e4eaedfaf5c35ca35eba31239a28ae31216f53eddc4f439921457a07e7692cf72ba36c091f685892a269c4ef1d63db01688d91872dadf378c9a1b923e108e3170421850af0efbacf2b2aedbae74b30d609c7e231f6b89cd22b956e54a1e81dcefc8d0338a87dfa4f93ebfdaf681e81f494892b4f143426bacc11dee009b23c0c53a5d04fabb1a525ed7c80ee07b593a35c17d815ebefb948834f519b276e6f5cfac0300c77eed52ac6cb1fda92875f0a0c83c3af61b92523a49a29a021f1e5025c2e3ea9d74d5f0777b8dd2b2a0c41c17712049c046994ca4e5ce97b01694c5d85d1765b343e1c1433fe3313411dd03b6e194b220d55db421a3e73492c325816c242654194733e81ec4dc7099c7d482531a62a3ff4ffdf45336ebb8e04951d5fdca24822efc386311aafa1f66ba9216e574ba4fdc608378d27c3f33349a6cfc10916104df4b31bd6a5c80d0af925e41c74b832da8968e9b75b97cd476d5aadbbe54a31a3494e2ddda0ac6537ce607ee1ced02bbd171259249dc89f0bb7075427e55526850f1896dd1bc7d2de1961489ec7424d7477873e3af5e1e7121f3a96b95cf604d286627ad575e763e92853e54084562c7f47f8895b310df88ae1f0994045222a5f7a6008bccc767b276b5e600c30edd138b32135e1466d9d767f2248bb0f1b8102bdf7f4231968aab7d86d88b90661afa4376c053eb992c9e9ee48acddee894ddef7f16ed77adc73aeb4eea315689930a7dedb768873ddb97aaf0d5f4c5a16a94999d231b91b7825d813bc2ad7cb5f7ea9e9afc1237885f00ac8a4a2327f9fadca3c61d18cecb5e5aebb0ff96d492d13b74c9a7f81e9ace5d74762447825beb08047221ff137c1ee00de8b7543f217f6128beae2400bb30cca898f614bcedf7b8796e3d81e9de1f277c4cbd7f3adec8e6170f74076ec743b223b03742660a52821bc5b21117616a9804f696548af63123da31b6a3c322f9bb4a29bda14ec5c17227a29621a7c7f2e69512a51810018b5745a8d8531e4d8e17537ecfd51045c338c079d4dde7f5e79fbc3614c17498ab14355b71068096f391b2566a802fd2b17c35b78e909df12475f8dba37f2ab8b9fdbc6a2a51dae7988900bd574769a65e11b47d9ddcad879d729c25d253e50e68933b83bf01d2be2cf8397035c769bd554177b43adc312ccdffc825d976ef138312166f8bbc9f9867ffb106cca8437c52cc1c00c32f15463708845841a236bd61491f8b4638a4248839747a395cf47c280726ab47eb2733e3728045769b468049075782130aa191f628d297889809ca9e8a04b93c78f1139b27bdfd52caa6cb79b79da2b1ddf30dd7b86ddd7bddedf1ff47bbc75e8535df2edaa3db220dbe247c2031d57cedff150a892b9aafcab76ee69b096fe7a6e86b7c2dfaede3f63c2198c1d5f7cc55ab6b40c5db60dc85ae77544d4d0aec5ec1baf3873c5ba3fa7702882359c304050c719def4295b68f3601f4ee09d8b4136deb3ebde6db5edaeac1a3e45f4aa571cf1606851a009e58ad4195140dc8235af3346a21f9dff777598a8368b08b766cc5af129dff43c115f06fa3533a4455bdab26c3b7d22e83c7da53b408d8e3cd8520ed4fc1f7cde255b6f35e99ea72a2251a0c42faca96f460c2c74d28f938c06567da73b2bb4b1378b22243eefd08d7c274560054536ba32d2caf36ae64e7091b9bf1e5a6b6667c059e750d5279ca3c2794bcefec0bf92d6c22bb6788c1f6bbfb5d5afbf6dc7b8351a85d0ef737662623beaa0ee5451eb26dd00b3ca5d0ecd844566c7f453e6a912ee7c808c1dd40a800f8adfec5c3ebf64f60eedeb28a8053c5424ff47926d5559f4ce5fbaf9144960d329854d0c1e7d7748ff8e3a3a6dd2d4ad5d509d77fe0e6e6375358ed8dc42b321022af740e31fcc06a909fd58b0d663f240cdef30f5cec7c642efd51ba0b142078f24835dc12663d97f980774129380378f0ecbe5acc1462c73249d8e13d59953a7e8d2aae8dec8abf7da59ebd2b3591758172f884ed9345f2b9d9d8eea617bc5fb497d6cee5a2022a120f08ad3cf89cd51b1e7ac3c2001c29d8bd0276b86d6aa180d7c54ab521b06d255c44280b1c6629c480da3aa3e3b13d1ed30a2010d9758f9194efbfeed880f0e989992d90537f3ecf80e42fef1c9f669c931239effe5ea30d87dff6bad987e2ecaa2d77a7135078c437d82afefbda0b61c7bf90fff251b35c1d8c1d2c49ed486c55e7ce91a3100850f9fbd8728aded538e5eae65080ae3d47bf7fcee458db4e261579e81f59623df91b8dba2d44ba5b851d38cb3af22fdd952fe65016302fb62362da44b559e660649c98db8a7f51bebfc01b26bb4a20b747b77d4ddac0338bddca3cc1e1c33c41d9fbf1f449164286199a06a6862c24cac6070315a1a56b91fbdb812edc5018296a8d760a643ce072db2b2d5a2e03aadd7f39cbac4835837c4bd3d85aac19ba1774a678b43e6d037d9ead2287efb736d7ce9f889d7ba13dc7a6040be3d96f8566cf3e69debbc92e6ab07d4c3261be2eaf6f481aa533ee22a9762f646bcf57734c9fbbb740abe845e5651c50d8c98d0c841c47f29e249384b2916c22998b508836615fede9ca753881c49289de37991dd51315ca327057796354770fbc1c35785d934277bb091d7bbaa1b8481f1660e4e46cb9027232b583031558517a91a011ac4271e3e58190d60d182e8714e1df775b652570979ddc12a0eea8cb30bb113d17b7afad706d15c19f1b0884f610b7c11045770bcafb3ded93fbd7545d7992d261a50e83ec3e1c518609cc0635c6b43ec970f250be42ca1f0d36aa45957d69d0111b4984abf2f52439144b101b12b60655f886f78a0956ec0c52bae9794427ec017d16f17529d0e542385e416e2630160128f5246a56cc71efb32e2cd47969a45fb65d99bdac0a314e217a34e2ed67cbfc0c23622e5b2b771a1bbcde75d9ef48093263f3d392fb4a495d3ef50fec884fac75d5b74ac4250364387aa0d2d5f5257ff72a9e9e171d3bd96d4388cb503fba7319ebed5353c8a93e0cb2277d2ed12cfce89ebb2e326779ec94a93f6ec61c71665c1c53c1cc4d4dc96bf4cc9484d7d8f80c0ade22d9ec1b2120acd3acdf1cbe9201054c8b6ec50314b9c53f88dfe1dda0695777c8377bef8cf8f8ac0e32f9c0d0e4030011c294ef0e022bb906cafbb5f23a239cccb10e6187c442c8070ca4b8a4315594453456bb56cf477868df384c373e4d34d25cfe287cda1dfd0d22fea91080a15e814b59a292f0b9a4cf62e5e3df5e73db5c09a9b16575c077418f58a756b62d6804a725f7780ce93e499e487a83a77f6df3f59bccf34396cb96bc27839bc3b72f82eae183505c698e9dcac0b264929091cf214380cc72e59c182225babb6a660f07034f391ab534e100b115bafa643fffddbe623df1f2981664130ffa7af2f35f68db5d1aaf4519ec6b37bd0382f66a6968dd0bdbc3f58051ee16b28997d9eb46aabaa26fcbce5d58d7be4799d96c314f0624e12a4881331340619b4b8010db6217bd7a9eb684fc582713e64e42a30c7c071c5d3ff518fddb967f572d007e15c9b6b782ea93a89600df97258a0a883bb34c4afaf1978ad5975aa427403311469a8f0d5e9f4f8fbd78f45b072adf85d9ea3a6d881b8890b798a3a38920c779f80759e7b94f6a157ade67508ecba4181ddc9107c8b200b9377782853b4941fa2e76b529ca9c6a64ec831a64959e345605b3c15246f634acd091ee6dc740949e2a23bd0be13f207a87a6b77c9175e34ad5057770f0bafbe21c0adef6a093146f51137e0a87945be627cfbdd7af2b6e4b2a344a6ba7f7ce3f1ac2fae2655353f73e9c4d099c79c4ca56bbd757f3bd9380ac7a81cf0d59d0b96f75a90ed9cd4a986bdb5a60dd621fe7a7f3f01949a22f465a8743f506ab6c7ab543c108e423438116a633a581b5ddac6e67231af1d8de9b6c29dec547336b45b753d319de9ef1a3738be24924e190ebf492eec1d7b56cdf446a35e1bdf390d5d32e61705747da87ee37d2a2cdb9ea28d1a2670b2c59e2bb7e1c08ce14d326d7dd9df10b31a225d5b4d753dc20a37f8d3b127da4cf1b2b53b99e84c6e8ec37b91ac049586b43d0d3895ebd2d136c081e08bfb86143d051ce8ff075ffd552d90096a3a171a79c465e85b6fd5bb67b9dc2619254e48662196178532e25d601cdcfd902bd9b819d569c6efc4ff93d0e17c1422e7801a5faa239ebaab96879b567ec692c8692199013bdc37f5702214bbdf847fdb3926279121c6d538fc7da2ffa6fd2e5e72b3e627f62d2293dfe0f3365602f25c8d4e8eb93bc6002a2a9ca11555fe96d18cfc76b90093bc4c252c159cff4150721616426b95518cd7f8ee1cae8488d95442906e1ce4330d2a87ff32b9affe323d60026f0a84945e799b5b60f3979c007c71fa5dcdf37f5bfd617cc1e4240170c4a4411ed3d23ee3c7504fab9b1996bfa190cb18acdc1975632b211c77c5b7f718991f67509f95081bd2b55ceb972c61beb42f3a8da92fa6764ee8501f071061b013698ec73d9c8dbef39f5a688df876a61e232731e7d02021803d8b3772fe90c349f7d363968a2a89bd070540dc6909a272ebc600e926a5d7bc35c4997d837a07eab5856adc1dbc59e6371c432d4562e9ff1c1210f505fcb17c78dacde7f0a66e3f5fe03b65333da461693dbeafee514e4108474b29dd23adb8d1a89353f718b5178d91dd539db877ef2c2cb41cfc83b1542a5e7f70cdb03b76ca1b4ea37ae5ee9beaabbcebb0234147cbeafc228aded5e38216d15d3f0a408d8fff62142cf3b5b76cfea621d24762a1065373285797312c902103ba80740411760cc7ccfa1631abf5657506862b687991c5e7d339db555ab1d90ca85560201227b42c627852922a86eb4585933bb7cce120502826fbbce237a8d04a3fcbe4222f67436ef14eae207205754b0e7f099811c0e02509470ed7ad18f15a23e62201402bfb511ab431153e58491877130f214619b9be0ca703949bcd831b91d6a4845178c4965c0b70e1c6f517e1f993b55a87a814504f5f92096dc6a42b21162aa25b588b8ad8472617d95afb0cf6f97455736bc36bf7785f4ad5667eba6eb38d0b4de631e6dc9c7b0941f56280a902339e17e0a3edb442b168c07c5ae64087dfa5dfcdb7da34394fb2f04b93cad9bb37a55bce5f43374da8d9ca1ae3204e2eeb3a7a2108e59cffbc5ee6749d274d22da77568dec6f50c5452cfdf3ebf815529d874c9c2f2402e5558e66c6b5d05425f20d2526ce012d3f4599b83bf7f4e79c1749b1f14fdb21fdcfe7943eb2e6c8f85cb896247dd7b2e5a3ed948862ece3e1f19d9ac74123ed715d70fd8475d44ba50b47c942e662c1817ddb4e928355f4f1833c41733553a789af9bd4452ee5e56e4cc7fcd93dae4f2d7330f5bce565ef10ea7410840e84ec59577c88bfe42d66c486a8587ca95f012e610988f845c2f7782c33f271217a26caae08ec221e01986271b64f4c6a2d7bcdc99f6b8462bce7e651c730219b0790f80c500fc1b788e1a2bc5fe4e7f1c485e76b6845f7e2f5dc19c3afbaac713ef9758767c24f84e8985fde758b4e3371b07660ef9e020d5d9eee9e0ecf2ba32b3ca6bcaf88eeb717b0e57043397ce35b84bc28329aca9fef609c03bfd61687a0580c082a2a7b0baff8cd680adb30f85c416b9195c8dfd88ec161a757131cee50950efe7722009e511a8cebdc48efa843761d9b6296cc3d8081620bf87a789fdf481c17c0ad9660d7bbe4a1a4384e6bed9f2f6626818fe6da08238bd6e306c2745b1b9cf853985c446309a10fbf8ef0bf5177c8ac0fc873cc1653e382268e5c1043961dc25b156db607acffe6b058bc23295de0703adf054dcb6902e24c23337f8f32b692ee7cf43c32f7b90e6412bccfbcbb093c8edee702f6d2ee26c2cffe4528fcfa560dec5cce34af472ecd264c118337236a3013bc06b4fd0d382cafaca08a18b4f11d6d1662c78c295f5ae19dc739a2a43af3660b1f7b1c6c66acdcef62aaf04bbbbd8a6949045f753479c3e6b34b1a8de94325769b4031fec420df629cefd65f355ba3748048c0cc3e26af768b163a7d3826c1a680731b2e89ddc820ca553946da31b4cb508b7fff3dea3f437e9ddf07d4076f1bb238fe3a433a2b82f03bf3afdfceb32222cf00b4bd6020c9a3572e9790833c7070311c752b5407f72401d77b15d0bb08648161190441e8349ec1f87330e9e1bb94c7a3fd07aaec57ddcfdac4596977e4714afebc02ee9d4dd356ded42418708fc83799a3b1c58bffbbb54502d35b77911a7348113e8bf5e9696d38c207fc6cfab8710fafb07649108489bd5f14efa5ef91df5ae9591676c4ca4553f182c01469a485f557d181e4bb719f22e58111016d397d02f2f0fa1b53355a7e94d2c90747419719d1bafaa520eb82ef4ad0e0fa443239ba2fa77351a37f2edda63c4622a18c88ff8eacb6988676c1695baace13294f52b632128f49f87731b104cdefd004fa88b77aa2e5bb51a6f1195b25cdb0a2f688e1a610c5d79c11ad657e24fb03bbd557e236b7f98f1fe70360b473aa8c5f45a3a2773bc13adc056a73f8baaef4963ef8058c60774b1cc31353022dab4d8288b551fc1adeacabea8aa6323d37990a7bcc1c01fb61283b5af48e280309924c9f1d65e5d4f23e88e6d59cc010300b1912b2ee5e7f29b47505f0990e2a830190a6b46b6464333da7e19305ddcd633340cb0543f03300ebc72714bfd4857fa53eda834e6273f4eb58b4d6ba1824def3d7a657b5ad4a6d175da90c85fdeb679f53c1851cb2546f735a7fcb5e88a186b0b87dafae37bd1c2040b443fe4d1704361da6ab9a5423e7d2f94053ed5657e6d965d33e84d281db4cff8fa7374d454ca739cadb2795b0f95e64f63bef4e311427395d60cb25f3510ab9a75aedab68118ae311b540776294a3f5c6bdb5505d1641f53f07975d49ec2c63821fe9809c93f55ea2e90b47bf7273216a6557a121af727c786b8c870bf77b79802e8413adfe6a738ce3e563529d49f18d8712c4993e6ea67c7bf1411d9d027305b626360193415683bda4a44f455305dbf5d017a53dc4dc2b0fe29ab259a114df409588235438010c161497f772cb7a9d2297eac34fd6020d303e78bc0acd3c809271fdf100252042f4b4f58c85f4c691bd92c2d8272e7d1dbabc6c15ba4dd6dce08d9b45d43a4ed0454965e3d80efcf337be96add29cb02cd2b1760032e8d79487fe8ed1e02e2e3d8b671acef3651ec55230e7f4a236200f537042b1c4a034256fccdbde971bf40029e2fddcdf920d7d7914ad6936c10e83