From: Girish Subject: [PATCH] Validate e_value_offs for in-inode EAs Date: Thu, 12 Feb 2009 15:52:00 +0530 Message-ID: <1234434120.3522.19.camel@jadoo> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_X9skd/i6HTbKSEzQEPZg+w)" Cc: adilger@Sun.COM, linux-ext4@vger.kernel.org To: tytso@mit.edu Return-path: Received: from sineb-mail-1.sun.com ([192.18.19.6]:44351 "EHLO sineb-mail-1.sun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756678AbZBLKUk (ORCPT ); Thu, 12 Feb 2009 05:20:40 -0500 Received: from fe-apac-06.sun.com (fe-apac-06.sun.com [192.18.19.177] (may be forged)) by sineb-mail-1.sun.com (8.13.6+Sun/8.12.9) with ESMTP id n1CAKOpC004006 for ; Thu, 12 Feb 2009 10:20:37 GMT Received: from conversion-daemon.mail-apac.sun.com by mail-apac.sun.com (Sun Java(tm) System Messaging Server 7.0-3.01 64bit (built Dec 23 2008)) id <0KEY00M007C1RT00@mail-apac.sun.com> for linux-ext4@vger.kernel.org; Thu, 12 Feb 2009 18:20:24 +0800 (SGT) Sender: linux-ext4-owner@vger.kernel.org List-ID: --Boundary_(ID_X9skd/i6HTbKSEzQEPZg+w) Content-type: text/plain Content-transfer-encoding: 7BIT Hi Ted, We came across a corruption in which e_value_offs for an in-inode EA was corrupt and the overflow was causing a segfault. We should validate e_value_offs for in-inode EAs as well. I have also attached the regression test for this problem. Signed-off-by: Girish Shilamkar -- Thanks, Girish --Boundary_(ID_X9skd/i6HTbKSEzQEPZg+w) Content-type: text/x-patch; charset=UTF-8; name=e2fsprogs-bad-ininode-ea.patch Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=e2fsprogs-bad-ininode-ea.patch Index: e2fsprogs-1.41.1/e2fsck/pass1.c =================================================================== --- e2fsprogs-1.41.1.orig/e2fsck/pass1.c 2008-08-28 19:56:31.000000000 +0530 +++ e2fsprogs-1.41.1/e2fsck/pass1.c 2009-02-04 16:21:14.000000000 +0530 @@ -318,6 +318,13 @@ goto fix; } + /* Value size cannot be larger than EA space in inode */ + if (entry->e_value_offs > storage_size || + entry->e_value_offs + entry->e_value_size > storage_size) { + problem = PR_1_INODE_EA_BAD_VALUE; + goto fix; + } + hash = ext2fs_ext_attr_hash_entry(entry, start + entry->e_value_offs); Index: e2fsprogs-1.41.1/e2fsck/problem.c =================================================================== --- e2fsprogs-1.41.1.orig/e2fsck/problem.c 2008-08-28 19:56:31.000000000 +0530 +++ e2fsprogs-1.41.1/e2fsck/problem.c 2009-02-04 16:20:06.000000000 +0530 @@ -908,6 +908,11 @@ N_("Pass 1C: Scanning directories for @is with @m @bs\n"), PROMPT_NONE, 0 }, + /* Bad extended attribute value in inode */ + { PR_1_INODE_EA_BAD_VALUE, + N_("@a in @i %i is corrupt (@n value)."), + PROMPT_CLEAR, 0}, + /* Pass 1D: Reconciling multiply-claimed blocks */ { PR_1D_PASS_HEADER, Index: e2fsprogs-1.41.1/e2fsck/problem.h =================================================================== --- e2fsprogs-1.41.1.orig/e2fsck/problem.h 2008-08-28 08:37:00.000000000 +0530 +++ e2fsprogs-1.41.1/e2fsck/problem.h 2009-02-04 16:20:06.000000000 +0530 @@ -560,6 +560,9 @@ /* Couldn't clone file (error) */ #define PR_1D_CLONE_ERROR 0x013008 +/* Bad extended attribute value in inode */ +#define PR_1_INODE_EA_BAD_VALUE 0x01006D + /* * Pass 2 errors */ --Boundary_(ID_X9skd/i6HTbKSEzQEPZg+w) Content-type: text/x-patch; charset=UTF-8; name=e2fsprogs-tests-f_bad_ea_value.patch Content-transfer-encoding: BASE64 Content-disposition: attachment; filename=e2fsprogs-tests-f_bad_ea_value.patch SW5kZXg6IGUyZnNwcm9ncy0xLjQxLjEvdGVzdHMvZl9iYWRfZWFfdmFsdWUvZXhw ZWN0LjENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSAvZGV2L251bGwNCisrKyBl MmZzcHJvZ3MtMS40MS4xL3Rlc3RzL2ZfYmFkX2VhX3ZhbHVlL2V4cGVjdC4xDQpA QCAtMCwwICsxLDExIEBADQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2Nr cywgYW5kIHNpemVzDQorRXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlIDEzIGlz IGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLkNsZWFyPyB5ZXMNCisNCitQYXNzIDI6 IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUNCitQYXNzIDM6IENoZWNraW5n IGRpcmVjdG9yeSBjb25uZWN0aXZpdHkNCitQYXNzIDQ6IENoZWNraW5nIHJlZmVy ZW5jZSBjb3VudHMNCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5m b3JtYXRpb24NCisNCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdB UyBNT0RJRklFRCAqKioqKg0KK3Rlc3RfZmlsZXN5czogMTMvMjA0OCBmaWxlcyAo MC4wJSBub24tY29udGlndW91cyksIDEyOTMvMjA0OCBibG9ja3MNCitFeGl0IHN0 YXR1cyBpcyAxDQpJbmRleDogZTJmc3Byb2dzLTEuNDEuMS90ZXN0cy9mX2JhZF9l YV92YWx1ZS9leHBlY3QuMg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIC9kZXYv bnVsbA0KKysrIGUyZnNwcm9ncy0xLjQxLjEvdGVzdHMvZl9iYWRfZWFfdmFsdWUv ZXhwZWN0LjINCkBAIC0wLDAgKzEsNyBAQA0KK1Bhc3MgMTogQ2hlY2tpbmcgaW5v ZGVzLCBibG9ja3MsIGFuZCBzaXplcw0KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0 b3J5IHN0cnVjdHVyZQ0KK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5l Y3Rpdml0eQ0KK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cw0KK1Bh c3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbg0KK3Rlc3Rf ZmlsZXN5czogMTMvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEy OTMvMjA0OCBibG9ja3MNCitFeGl0IHN0YXR1cyBpcyAwDQpJbmRleDogZTJmc3By b2dzLTEuNDEuMS90ZXN0cy9mX2JhZF9lYV92YWx1ZS9uYW1lDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gL2Rldi9udWxsDQorKysgZTJmc3Byb2dzLTEuNDEuMS90 ZXN0cy9mX2JhZF9lYV92YWx1ZS9uYW1lDQpAQCAtMCwwICsxIEBADQoraW52YWxp ZCB2YWx1ZSBvZiBpbi1pbm9kZSBFQSBvZmZzZXQNCi0tLSAvZGV2L251bGwJMjAw OS0wMi0wNCAxMDozOTo1MC40MjA1NTcwNDcgKzA1MzANCisrKyBlMmZzcHJvZ3Mt MS40MS4xL3Rlc3RzL2ZfYmFkX2VhX3ZhbHVlL2ltYWdlLmd6CTIwMDktMDItMDQg MTM6MjE6MTguMDAwMDAwMDAwICswNTMwDQpAQCAtMCwwICsxLDQgQEANCisfiwgI 9kiJSQIDaW1hZ2UA7N0HfBR1wsfhJIAgoGDv54odDBAs2AUFEUFAsPeEhKKQICT2 3rH33nvvFRv23nvvvYu9vr8Fcqec3n3eOwsnz/PhuzubmWTLPwkzs7uTkhJgmtVi UkNyNqEsNZ/04bLJlew2uSyzaY+xvTfoNbZ3SclcJYM+Ki0pzYcnXu73wcTPKZ38 JVtN/gIrTv4aTdLIcftf1e+K1fY75fbFPhnUp9M3f+Tda/T8UxcdfvP1/X48fcLm Tc/bbr9ty0r/MW+D3LeWudwqtU4zpBlTm9Q2zZRmTrOkWdNsafbSKa+t2z9df6nv MAAApiKN6+dNJ67/T2heNnENCisAAAD4K/lxajf/NH7/AQAA4H9g+9r+DwAAAPjz NW4Hb9hjbO/GvCpi2vFB95y0nTT+VZObNKfJz9473fR3eiPzvIYAAOAPtdvuORnf 7RfW/0t/tv73n5h+inVGx8KZSsd/8nGLphz/toV/LPffHxsJgKnJ+O6Tfv3/8/// ZSU/+fVf0iy/z6dLzVOL3/B3u/0/f64zd590vkXGvbHfem1txDHjNv61eY42M3WM f3G/79Cf7f/979f/G43M+Ldu9q/Gv+zdZqWTnotovM7KqsHVFYbnd1N8fIt5JAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4 M5Sl1iWlZR3/Pl1W1jEXWmV61pKWZSPqxtR3GFLXUFtdnFesSWlV5eiSGTJ9d5sm pUPq6jyIAAAAMJVrNcX2/2dtJm3/AwAAAH8xbT0EAAAAYPsfAAAAsP0PAAAAAAAA APyZxq+w3LE5azrpUtvGydLU7JeWHzlu/6v6XbHafqfcvtgng/p0+mbysgAAAMDU v/1f3IYvHv6/ya8s1ji/2eTzppPOS4vnLT2KAAAAMHX7cf5p/P4DAADANKDxSf/i E/mflU1oXtb4VgAAAAAA4H/e+O456VZSsmGPsb0bmzSnrKTwk+WalZaUTJeapxa/ 4RE/5jUEf6ozd590vkXGvbFJH/ntBnnEMeM2/rV59jZPHeNflXGvTlW/w/iP/Lfj X/Zus9JRE6+wxeSPV1YNrq4wPL+b4uNbzCMBMG375/V/pgUfFLf/2k4a/6qfrf81 +fu62MT1tN/pKI+2/wAA/li7Fff/je/2C+v/pT9b//tPTD/FOqMDhU+l4198Augn 24CNo9W28I/lWmbwWqXWaYY0Y2qT2qaZ0sxpljRrmi3NbrD/JxRf/9+6pLSs49+n y8o65kKrTM9a0rJsRN2Y+g5D6hpqq4vzijUpraocXTJDpu9u06R0SF2dBxEAAACm cpOP/182OQAAAOCvu/1ffLVG8TCAzX5lscb9A5P/DmCz4ksB/N0/AAAAAJjKOf7f tM3x/4x/UfG4L0OnOP5fi9/oOorH/2vd7F+Nv+P//dEc/w9g2jbV/4HC+afx+w8A AAC/geKL+ptM3g8/oWxC8zLPyAAAAMBfzhylJSVzprnS3GmeNG+aL/0tzZ8NCitp gdQuLZgWSgunRdKiabG0eGqfOqQlUnnqmDqlzqkidUlLpqXS0mmZ1DUtm5ZLy6cV 0opppbRyWiV1S93Tqmm11CP1TKunXmmN1Dutmfqkvmmt1C/1TwPS2mlgGpTWSeum 9dL6aYO0YdoobZw2SZumzdLmaYtUmarS4FSdatKQNDQNS8PTlmmrNCKNTLWpLhVf 2bh1Gp3GpPrUkLZJ26bt0vZph7Rj2intnHZJu6bd0u5pj7Rn2ivtnfZJ+6b90ti0 fzogHZgOSgenQ9Kh6bB0eDoiHZmOSkenY9Kx6bh0fDohnZhOSienU9Kp6bR0ejoj nZnOSmenc9K56bx0frogXZguShenS9Kl6bJ0eboiXZmuSlena9K16bo0Ll2fbkg3 ppvSzWl8uiXdmm5Lt6c70p3prnR3uifdm+5L96cH0oPpofRweiQ9mh5Lj6cn0pPp qfR0eiY9m55Lz6cX0ovppfRyeiW9ml5Lr6c30pvprfR2eie9m95L76cP0ofpo/Rx +iR9miakz9Ln6Yv0ZfoqfZ2+Sd+m79L36Yf04+QjbpSmstQkNS0egSNNl5qnFmn6 1DK1Sq3TDGnG1Ca1TTOlmdMsadY0W5o9zZHmTHOludM8ad40X/pbmj8V0gKpXVow LZQWToukRdNiafHUPnVIS6Ty1DF1Sp1TReqSlkxLpaXTMqlrWjYtl5ZPK6QV00pp 5bRK6pa6p1XTaqlH6plWT73SGql3WjP1SX3TWqlf6p8GpLXTwDQorZPWTeul9dMG acO0Udo4bZI2TZulzdMWqTJVpcGpOtWkIWloGpaGpy3TVmlEGplqU10albZOo9OY VJ8a0jZp27Rd2j7tkHZMO6Wd0y5p17Rb2j3tkfZMe6W90z5p37RfGpv2TwekA9NB 6eB0SDo0HZYOT0ekI9NR6eh0TDo2HZeOTyekE9NJ6eR0Sjo1nZZOT2ekM9NZ6ex0 Tjo3nZfOTxekC9NF6eJ0Sbo0XZYuT1ekK9NV6ep0Tbo2XZfGpevTDenGdFO6OY1P t6Rb023p9nRHujPdle5O96R7033p/vRAejA9lB5Oj6RH02Pp8fREejI9lZ5Oz6Rn 03Pp+fRCejG9lF5Or6RX02vp9fRGejO9ld5O76R303vp/fRB+jB9lD5On6RPy4r7 2PPznz5PX6Qv01fp6/RN+jZ9l75PP6TGHfSlqSw1SU1TszRdap5apOlTy9QqtU4z pBlTm9Q2zZRmTrOkWdNsafY0R5ozzZXmTvOkedN86W9p/lRIC6R2acG0UFo4LZIW TYulxVP71CEtkcpTx9QpdU4VqUtaMi2Vlk7LpK5p2bRcWj6tkFZMK6WV0yqpW+qe Vk2rpR6pZ1o99UprpN5pzdQn9U1rpX6pfxqQ1k4D06C0Tlo3rZfWTxukDdNGaeO0 Sdo0bZY2T1ukylSVBqfqVJOGpKFpWBqetkxbpRFpZKpNdWlU2jqNTmNSfWpI26Rt 03Zp+7RD2jHtlHZOu6Rd025p97RH2jPtlfZO+6R9035pbNo/HZAOTAelg9Mh6dB0 WDo8HZGOTEelo9Mx6dh0XDo+nZBOTCelk9Mp6dR0Wjo9nZHOTGels9M56dx0Xjo/ XZAuTBeli9Ml6dJ0Wbo8XZGuTFelq9M16dp0XRqXrk83pBvTTenmND7dkm5Nt6Xb 0x3pznRXujvdk+5N96X70wPpwfRQejg9kh5Nj6XH0xPpyfRUejo9k55Nz6Xn0wvp xfRSejm9kl5Nr6XX0xvpzfRWeju9k95N76X30wfpw/RR+jh9kj5NE9Jn6fP0Rfoy fZW+Tt+kb9N36fv0Q/px8pNzpaksNUlNU7M0XWqeWqTpU8vUKrVOM6QZU5vUNs2U Zk6zpFnTbGn2NEeaM82V5k7zpHnTfOlvaf5USAukdmnBtFBaOC2SFk2LpcVT+9Qh LZHKU8fUKXVOFalLWjItlZZOy6Suadm0XFo+rZBWTCulldMqqVvqnlZNq6UeqWda PfVKa6Teac3UJ/VNa6V+qX8akNZOA9OgtE5aN62X1k8bpA3TRmnjtEnaNG2WNk9b pMpUlQan6lSThqShaVganrZMW6URaWSqTXVpVNo6jU5jUn1qSNukbdN2afu0Q9ox 7ZR2TrukXdNuafe0R9oz7ZX2TvukfdN+aWzaPx2QDkwHpYPTIenQdFg6PB2RjkxH paPTMenYdFw6Pp2QTkwnpZPTKenUdFo6PZ2RzkxnpbPTOencdF46P12QLkwXpYvT JenSdFm6PF2RrkxXpavTNenadF0al65PN6Qb003p5jQ+3ZJuTbel29Md6c50V7o7 3ZPuTfel+9MD6cH0UHo4PZIeTY+lx9MT6cn0VHo6PZOeTc+l59ML6cX0Uno5vZJe Ta+l19Mb6c30Vno7vZPeTe+l99MH6cP0Ufo4fZI+TRPSZ+nz9EX6Mn2Vvk7fpG/T d+n79EP6sfh0fLP8/Key1CQ1Tc3SdKl5apGmTy1Tq2b/3z0AZcXNlonv9uwzoHKm Kec2LT10xuJ5cTu2ON97xgAAAPgttP+5lqnQdYmKisLES4VCoX1hdE318DH1o4dX NdTXVBcaaqtrRhfqh9UUevVbtzCgoWrE8MGFvsMH19SOqek48RM65TT/FqyuGTK8 tqbQs8vqgwYM7N9r0OY9uq/Ts9Cuomv5mg21NeVdOndetl3L8l9Ybr2eAwf17t8v i3ZcqqJjRRYqLy/eqC6FTJT/ATeqw7+/UR3HNNRWFJfs1L5QXVe7aH1hSN3ooTX1 hfq6QsOo6sr6msKoyvrBw2rGdFptWGXt0Jq+dUNzK3769/+a+O4DAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCPV/ZuaU6L9RlQOdOUc5uWHjpj8byudNL8 yqrB1R4zAAAA/lvtf65lKnRdoqKiMPFSoVBoXxhdUz18TP3o4VUN9TXVhYba6prR hfphNYVe/dYtDGioGjF8cKHv8ME1tWNqOk78hE45zb8Fq2uGDK+tKfTssvqgAQP7 9xq0eY/u6/QstKvoWr5mQ21NeZfOnZdt17L8F5Zbr+fAQb3798uiHZeq6FiRhcrL izeqSyET5X/Ajerw729UxzENtRXFJTu1L1TX1S5aXxhSN3poTX2hvq7QMKq6sr6m MKqyfvCwmjGdVhtWWTu0pm/d0NwNCivfcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAP/XHhwSAAAAAAj6/9oVNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAgFWQAGt9AACAAA0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlDQo= --Boundary_(ID_X9skd/i6HTbKSEzQEPZg+w)--