From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1CrPqK-0002a6-0l for qemu-devel@nongnu.org; Wed, 19 Jan 2005 19:06:32 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1CrPqH-0002Xk-OY for qemu-devel@nongnu.org; Wed, 19 Jan 2005 19:06:30 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1CrPlU-000195-58 for qemu-devel@nongnu.org; Wed, 19 Jan 2005 19:01:32 -0500 Received: from [64.233.184.205] (helo=wproxy.gmail.com) by monty-python.gnu.org with esmtp (Exim 4.34) id 1CrPKl-00055Q-Jc for qemu-devel@nongnu.org; Wed, 19 Jan 2005 18:33:55 -0500 Received: by wproxy.gmail.com with SMTP id 36so1083796wri for ; Wed, 19 Jan 2005 15:33:54 -0800 (PST) Message-ID: Date: Thu, 20 Jan 2005 00:33:54 +0100 From: Magnus Damm Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_661_12691051.1106177634411" Subject: [Qemu-devel] [PATCH] cirrus_vga.c and win95 Reply-To: Magnus Damm , qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_661_12691051.1106177634411 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, I recently tried to install win95 (swedish version) using QEMU CVS, but after the first reboot the text on the screen was somewhat corrupted. The background, mouse pointer and widget background were still ok though. The attaches pictures shows you what I am talking about. If -std-vga was enabled everything was just fine. Anyway, the attached patch solves three things: Hunk 1: Small typo fix. Hunk 2: Fix for cirrus_mem_writeb_mode4and5_8bpp(), this was the actual bug. Hunk 3: Similar fix for cirrus_mem_writeb_mode4and5_16bpp(), untested. Please apply. / magnus ------=_Part_661_12691051.1106177634411 Content-Type: text/x-patch; name=qemu-cvs_20050118-cirrus_win95.patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="qemu-cvs_20050118-cirrus_win95.patch" --- qemu-20050108/hw/cirrus_vga.c 2004-11-21 19:45:57.000000000 +0100 +++ qemu-mmap_20050108/hw/cirrus_vga.c 2005-01-18 13:18:11.989624016 +0100 @@ -790,7 +790,7 @@ blt_rop = s->gr[0x32]; #ifdef DEBUG_BITBLT - printf("rop=0x%02x mode=0x%02x modeext=0x%02x w=%d h=%d dpitch=%d spicth=%d daddr=0x%08x saddr=0x%08x writemask=0x%02x\n", + printf("rop=0x%02x mode=0x%02x modeext=0x%02x w=%d h=%d dpitch=%d spitch=%d daddr=0x%08x saddr=0x%08x writemask=0x%02x\n", blt_rop, s->cirrus_blt_mode, s->cirrus_blt_modeext, @@ -1780,11 +1780,12 @@ dst = s->vram_ptr + offset; for (x = 0; x < 8; x++) { if (val & 0x80) { - *dst++ = s->cirrus_shadow_gr1; + *dst = s->cirrus_shadow_gr1; } else if (mode == 5) { - *dst++ = s->cirrus_shadow_gr0; + *dst = s->cirrus_shadow_gr0; } val <<= 1; + dst++; } cpu_physical_memory_set_dirty(s->vram_offset + offset); cpu_physical_memory_set_dirty(s->vram_offset + offset + 7); @@ -1802,13 +1803,14 @@ dst = s->vram_ptr + offset; for (x = 0; x < 8; x++) { if (val & 0x80) { - *dst++ = s->cirrus_shadow_gr1; - *dst++ = s->gr[0x11]; + *dst = s->cirrus_shadow_gr1; + *(dst + 1) = s->gr[0x11]; } else if (mode == 5) { - *dst++ = s->cirrus_shadow_gr0; - *dst++ = s->gr[0x10]; + *dst = s->cirrus_shadow_gr0; + *(dst + 1) = s->gr[0x10]; } val <<= 1; + dst += 2; } cpu_physical_memory_set_dirty(s->vram_offset + offset); cpu_physical_memory_set_dirty(s->vram_offset + offset + 15); ------=_Part_661_12691051.1106177634411 Content-Type: image/jpeg; name=without_patch.jpg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="without_patch.jpg" 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 +80dcTdlvcsN7fWR++RZfyl8oqF595o64m7Le5OfeaOuJuy3uXmGZfSKhefeaOuJuy3uTn3mjrib st7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3u Tn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefe aOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7k BfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3m jribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJ uy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSK hefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjribst7kBfSKhefeaOuJuy3uTn3mjrib st7kBfSw1v4jUfdO/YqL595o64m7Le5fefOZngsdi0rmuuCC1u/+5VZgh+TfedhFtcmh/M/vKL38 N+y/b9DT2h//2Q== ------=_Part_661_12691051.1106177634411 Content-Type: image/jpeg; name=with_patch.jpg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="with_patch.jpg" /9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/2wBDAAoHBwgHBgoI CAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/ 2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozv/wAARCABpAWwDASIAAhEBAxEB/8QAGwABAQADAQEBAAAAAAAAAAAAAAYDBQcE AgH/xABFEAABAwMCAwUFBgQDBAsAAAABAAIDBAUREiEGF1QTIjGT0hRBUXOUFTIzNGGxByNxskJS gTaRs/AWN1ZidHWCg8PR4f/EABkBAQADAQEAAAAAAAAAAAAAAAABAgMEBf/EACgRAQABAwMDAwQD AAAAAAAAAAABAgMSBBEVFCFSIjHwE0FRsTJC4f/aAAwDAQACEQMRAD8A9nGHF99svEdLZ7JbaWrd NRslbGaQyyOcQc40+Ozc+HxU1J/FPiqGmhqpbVb44KjV2Mr6JwbJpODpJO+Dtt4KpqP+vXh//wAu /wDilU2LRS8Ucc2q4VlV7Rw5cJTDTlhEIptLS5lI5o2jIOGgDGoHLTk5XrWotREZ0x7b/tnO7yc3 +IeitP0p9SzU/wDFPiqr7X2a1W+bsYzLJ2dE52hgxlxwdgPj4LY0HC9gZSQ3C62HsqplmrayptXb zRaTFK0Ruw5xe3U3UNyQcZA8V9VVtoLTwHfpqOkYxlxtFrq3wF7yyOSSR4OnLtWAQHDJO/jkbK81 aae1NHf/AHY9TWVf8U+KqGpfTVlqt9POzGqKaicx7ds7gnbbB/1WHm/xD0Vp+lPqVFV8D2GC+1VP QWb23TeKWklp+1lf7LSvga50vdcHDLi7vOJG3hsUof4f2S4X22R01r7aiirLlFc9M78RiOQtga46 sg4LcAbkbnIyUi5pNu9BtUneb/EPRWn6U+pOb/EPRWn6U+pbCl4X4ekuVqppKDd/DQuPZxvke+rq SPuhusatgXBrC0k53x4Yrpw7YqWycQ1sVnlgqKSjonMhqpC0wSSuc1x0NkcW5GlwbISQfHbZXirS zMRh89j1fl5Ob/EPRWn6U+pOb/EPRWn6U+pbym4As4oWtq6TtJKaotzfbKdkrIKxsz2teGSOkcJB h3i1rMHGPHCjpbdQSfxNFobRsioBdxSdgx78GMShh3JLskDc58TtjZWo6WuZ2o9o3ROUfdteb/EP RWn6U+pOb/EPRWn6U+pb+7cG8OG01boLUylljpbpMyWKeUuBpZ2sj2c4jBbnVt79sLw13BFrpeF6 uaWk1VND7EW1lOXQQVYlLQ7RNI97HDDt3hrA04OMbLOK9JP9E+r8vJT/AMU+KqvtfZrVb5+xjMsn Z0TndmwYy44OwHxSP+KfFU1NNVRWq3yQU+ntZW0Ti2PUcDUc7ZO2/iqSgsFntPEdxgfRvtdBUWCq NQWzOdIyPtGhxMbtTmuaMjUC5j9Ic33haa18HW2orrz9oWeKGOOst3sTYKmSSJ1PNPoLmPz3w5n+ L4k4DfAVivTTvOHY7tdzf4h6K0/Sn1Jzf4h6K0/Sn1LYV9p4QpHfadRZfZ6Gj4hktU8TKqVwfEI9 5HHJdlrgXANxttv4rFVcHWei4np+G4DFV1Vuo5qmukeyUurHEFzIo4Q9uXhpaRpeM5OfAg6ROlnv 9P58/aPV+Xk5v8Q9FafpT6k5v8Q9FafpT6ls7/wjYrXYbxcIrY9szLZQVEUVQ6Rns8kz3xv7mskH ug6XOdgjGSNl6abgCziha2rpO0kpqi3D2ynZKyCsbM9rXhkjpHCQYd4tazBx8cKuek23w+fJT3aP m/xD0Vp+lPqTm/xD0Vp+lPqX5xhZLJDY6y4Wu3fZ76K+yWwNbO+QSMbHnU7UTvqBxjGxwc4yoVdV mzp7tOUUKzMwu+b/ABD0Vp+lPqTm/wAQ9FafpT6lCItejseKMpXfN/iHorT9KfUnN/iHorT9KfUo RE6Ox4mUrvm/xD0Vp+lPqTm/xD0Vp+lPqUIidHY8TKV3zf4h6K0/Sn1Jzf4h6K0/Sn1KEROjseJl K75v8Q9FafpT6k5v8Q9FafpT6lCInR2PEyld83+IeitP0p9Sc3+IeitP0p9ShETo7HiZSu+b/EPR Wn6U+pOb/EPRWn6U+pQiJ0djxMpXfN/iHorT9KfUnN/iHorT9KfUoRE6Ox4mUrvm/wAQ9FafpT6k 5v8AEPRWn6U+pQiJ0djxMpXfN/iHorT9KfUnN/iHorT9KfUoRE6Ox4mUrvm/xD0Vp+lPqTm/xD0V p+lPqUIidHY8TKV3zf4h6K0/Sn1Jzf4h6K0/Sn1KEROjseJlK75v8Q9FafpT6lR0l/r73a6K4zkQ yzRu1NpWljNpHt8PjgBchXS+HP8AZe2fLk/4r1wa/T2qLUTTH3WiZbHj/gq5cR36Cso56VkbKOKM iZ7g4nc7Yaf8w96mOVd96u3+Y/0Lr9X+MPlx/wBoWBcNvW3bdOMLzTEuT8qr71dv8x/oTlVfert/ mP8AQusItOQvGEOcWzgjiuz6TRVVla9kglbJJTslex22CHPiJGCNt14Zv4Y8Q1Ez5566hllkcXPk fNI5ziTkkksyTv711VFSNdciZmNt5MYcn5VX3q7f5j/QnKq+9Xb/ADH+hdYRX5C8YQ5PyqvvV2/z H+hOVV96u3+Y/wBC6wicheMIcn5VX3q7f5j/AEJyqvvV2/zH+hdYROQvGEOT8qr71dv8x/oTlVfe rt/mP9C6wicheMIcn5VX3q7f5j/QnKq+9Xb/ADH+hdYROQvGEOT8qr71dv8AMf6E5VX3q7f5j/Qu sInIXjCHJ+VV96u3+Y/0JyqvvV2/zH+hdYRORvGEOT8qr71dv8x/oTlVfert/mP9C6wicjeRhDk/ Kq+9Xb/Mf6E5VX3q7f5j/QusInI3jCHJ+VV96u3+Y/0JyqvvV2/zH+hdYRORvGEOT8qr71dv8x/o TlVfert/mP8AQusInI3jCHJ+VV96u3+Y/wBCcqr71dv8x/oXWETkbxhDk/Kq+9Xb/Mf6E5VX3q7f 5j/QusInI3jCHJ+VV96u3+Y/0JyqvvV2/wAx/oXWETkbxhDk/Kq+9Xb/ADH+hOVV96u3+Y/0LrCJ yN4whyflVfert/mP9Ccqr71dv8x/oXWETkbxhDk/Kq+9Xb/Mf6E5VX3q7f5j/QusInI3jCHJ+VV9 6u3+Y/0JyqvvV2/zH+hdYRORvGEOT8qr71dv8x/oTlVfert/mP8AQusInI3jCHJ+Vd96u3+Y/wBC oqa1z2O10VuqXRvlhidqdGSW7yPdtnHuKtlP3788z5Y/crG7qrt6nGU4wp6v8Zvy4/7QsCz1f4zf lx/2hYFyrCw+1xHcCUj3FsTyCP0IG6ygB1RCxwDmuL9TT4HEbnf67gbe/wAPeoXmfd5bm+gprLST yiZ0TA0AF5BI/wAv6LW1YuXpmKI327omqI91r7XF/lm8h/8A9L8dWwM0mRzo2ueGB0kbmAuPgMkD c/71rpr1xLDbnzG12907GlxiBbpP9HY+H6eK1d5uwu5tcmdD2T0gmpwNPYTdszW0twMHP+8Ae7Cp MTHurTcor/jO6sREVVxFBUNTcX8O2W3yP7tO+hnkmw3+ZE6SPsmafduXjOSf5G474W8n4gq4bn3Y o32+R8sLJpQImNkjY8u1SaycZicM9mB78nHeChRSUt2rGXKjmn7ETx01TFLIWOY2n79Pl0jMkjTn fDiCMO1Brst9n2jXycQ1NtoY6KHL5C+aSJzj3Y6YgkAjUf5unxGwbv3cEKFFoaO/VlaKVraVrJK5 sE8OznMbC5odJqdtlzdLhkDAMkWfvLxScS3MytbDFEIazQ+hqJYAGmN00TM6RKS7uzA76DkDbfDQ q0UvdeJa+hfUzQU7ZaMNnZDI+INAlije45IkLnd6Jw+40e8O8NW4oKusfcKiirWw9pHFFMDDq0tD y8aMnx0mM97Azkd0Y3DYIplvENe2mopntpnfacDJacNjcPZ9UkTAHHUe0x24O2nOg+Gct+pX3OTi GjhZUUDqqOnqWPmaxxa0Zp3DMWrIduBgv8CHZ8GoKRFo6m+1b7Ja6uho9VRc9GiPZ/Z5jMh2LmB2 A3H3h8f0OIXy5imaJKOMVFRGYqcNw9oqGyFju00uOBgtfpBJAZLknTuFCilariW7QsraplFGKWL2 pkTpNABfCJDnPaan5MR7ugHBJz3cnPUV9z+3Lfb5pIY5PaI5XGIO0GN8VR/LOT3iDF944ySDpGME KNFLzcU1LKG2vijglqq2gZO6Jv3mvfJCxmAXDu5ldgEjOnGobleGuq6yruFCK+FkU8MoYQ0tGR7V ROBLWvfpPe8NRyMHbOAFsi0dqvVXWXVsMsOaSqgfUUk3ZiPVGC3HhI4uyJAckMIx93fu6612iSpm fUx2+ggcLnO817XH2gtbUuJbjR/iALD3/un3/dQVqKSsd8kp+GKNrjC0xy0NHCHbaw+OAu9+7gJH kY/y+Gy9lFernK+jmkhiqYa+idVx01PGGSx7xYaXvkDXYEpycN+74e5BQope68S19C+pmgp2y0Yb OyGR8QaBLFG9xyRIXO70Th9xo94d4avVJdrnHcW2t/sjaqcxlkoY5zIg5sztJbqBfjsCNWW51A4G MEN8ijpTPJww+klo21Oq5nXI8NbBK/7QwWEZc4Z38QQAfElZJaVtkrKKuqYKS3UragudTUZL42aK aoc6TZje8QQNhnDBufABWopqDiG4U9WILtBFSsjex008rWxNZG9suD3ZXhvfiaMl2+vGM4JyS3y7 NtlAW2qVldV9m06msLdRidI/DDI093QQQ5zfHYnGCFCil/8ApDd+xq5nQUkbbfR+0ztcdbnlr5ml g0uIbnss+LtB2Id7sUV4rLLbp6p8UMtKayvDIgXB5LXTylxd4Afyy3SGn3HP+FBWopdlxvU1yt9L VsbSyCsYXHDW9pGYZyWmNkr8fh7OLsE747m+KHiS9T0kM7qOGnFc2F9M6VrToD5Y2Y0iUukGJc5w zGBkd7ACtREQEREBERAU/fvzzPlj9yqBT9+/PM+WP3KCnq/xm/Lj/tCwLPV/jN+XH/aFgQGfm4P/ AHP+E9ck4ZqqSl46kNXow+omYwuxhri84OT4f/q6hWwXGpia621lJRyRSlpkqY3SZyzcBo/R43z/ AKe9eVtLxhExrI+KLY1jQA1raWUAAeA8V16XU9Pl23yjZncoiunGXqrSG0VQXbYicSTt7v8An/nx jK6uhunE09ZSvJgdWUDGtOxc5j2Nc/HwJbjJ3OjB8Fll4IcZnF17sUZB70TIpo4x7saA4N/qMb7r 5v1JVe10Gl1AKimDGUc9I0tp6hzQ09i9u2h/cBbjbGMHIyIop+vVjHaXFZs9LEzM7wu0Wn4SuE91 4bpq2pdqkkdL/oBI4NHgM4AA8N8Z963C5piaZ2l6MTu8dA6jr7RRzQ07W0skUcsMTmNwwbObsMgY 28PDC+vsy3+3/aHsNN7X1HYt7Tw0/exnw28f08FP0VluFLw9FRS0/bSugpjK4vbqc2Ms105GcEad bW47p1O1YyXP+qPh/t7oySqtjYbbpnMdG8sLYtQgAaWNJbu6OR+BkZIJ7ygbij9hiqTSUNvaxtGe xL4o2MbCXASOAHj/AJCcDBL2+ODj0w0NHTOD4KWGJzRpBjja0gYaMZx8GNH/AKQPdtICx3SO1Onn LaatJD5ayWZoLMW8x63SAk4Epdvv7z78pbGQVV4dcrJaWx0tKYXOhpnQfzXBlQ06Sx5YXDtWE5cC Bv8ADIWUdLTxdn2cEbOxZ2celoGhu2WjbYd0bfoPgvOyz2yOokqWW6kbPIdT5GwtDnHUHZJA3OoA /wBR8RlTTOHrlLDcJJqVsM8zQAYpGPLmGrmlkjaXDB1Mc3Z4DTkBw2OM9vsdZSVEU9PSaDDBVGmb WmLEMjuyDO7EA1gOh/3M7EknLiAG+ls9snqX1UtupJJ5GlrpXwNLnAjTguI8NJI3PgvUIoxK6URt Ejmhrnho1EDJAJ9+C44+GT8VG09jq4oK2JlrqPZXdi5lPO2lAc8GTUeyjIjePwwdWCQMh2WtVbRi RtO2KSF0Tog1p1S9oHd0E4edyASRlwBOPDcZD5ZbKCP2js6GmZ7X+Y0xNHbeP3tu94nOfifiV9U9 DR0jY201LDCImubGI42tDATkgAAYyQCficH3LOiDBJQ0c1H7FLSwyUoAb2Do2lmB4DSRjbHw936L 6bS07GQsZBE1lPjsWhgAj20jSMbYaSP6HHvWVEHmdbKB88076GmdNUR9nLIYml0jfAtccd4EADHh t+iyvpaeR5e+CNznacuc0EnSSW5OPc4kj4ZWREGvrYLZbqCtrZKCExtimlnDIW6pARmT4Z1Bozk7 4HwX3SUdrfSwmlo6dsUWoRsEAZ2R16nDTgaSHtGR4hzfDIWHib/ZW7/+Bn/sK3nFVPSWwG9Nqqaj ke4MmjqJmRMqttsOcQBKGt2JO4Gk4Aa5ga2C2UFNVyVdPQ00VRLntJo4mte/JycuxvuN8lZ4444W lsbGsBJcQ0Abk5Jx+pOVioa6muVHFWUczZoJm6mPb4Ef0P8Az+izoPKLZQB7Hihpg+ONsbHCJuWM actaDjYBwBAG2QD7l5Lbw9SW24S3ASOmqpWlrpXxRMJyQXZ7NjdRJAJznGNsZK2qIPHLZ7ZPUvqp bdSSTyNLXSvgaXOBGnBcR4aSRufBZaiho6tsjamlhmErWtkEkbXB4ByAQQc4JJHwOT71nRBgioaO CmZSxUsMcEbg5sTI2hrXA6shuPHVg/13WV8UcjmPfG1zozqYXNB0nBBIJ8NiR/Q/qvpEGsHD1tje z2amipImyNkkipomRtmc06masNz3XAEYI38cgkL31NLT1kDoKqCKeF+NUcrA5rveNiD7wD/UBZEQ YBQ0YidEKSERuiELmCNuDGMgMxj7veIA/Xw3X2KWnbp0wRDQ8yNw0DS45y4beJ1Oyf8AvH4rIiDz QWygpaf2enoaaGHWJOzjha1uoEEOxgb5aCD4ggfBI7ZQRPlfHQ0zHzPEkrmxNBkcDqDiQNyHb5+O /ivSiAiIgIiICIiAp+/fnmfLH7lUCn79+eZ8sfuUFPV/jN+XH/aFgWer/Gb8uP8AtCwINXc6isY2 SjjstRXQyP7UyQ1MceNmjTu5pGCzO3jnH6LF9sXf/sxWfUwetblFG33RtG+6Vlpo55XzS/w/jkkk cXOe/wBlLnOO+SdXvJzlJaCetoha4OFo7bTySh73SGAxA+9xYxxJOw295A3A3FUilLy2y209pt8N DStIiiBxnG5Jy4kADxJJ2GN16kRAREQEREBERAREQEREBERAREQea50X2jaquh7Ts/aYHw68atOo ac4/1Wvr4TSGR01eGiqxJ7ZWS6WQ1bMujke7YMY8aonke4xsaANluUQY6af2mlin7KWLtWB/Zyt0 vZkeBHuO+D/RZERAREQEREBERAREQEREBERAREQEREBERAU/fvzzPlj9yqBT9+/PM+WP3KCnq/xm /Lj/ALQsCz1f4zflx/2hYEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERA REQEREBERAREQEREBT9+/PM+WP3KoFP3788z5Y/coKer/Gb8uP8AtCwKTrfz0/zXfuVgQWaKMRBZ ooxEFmijEQWaKMRBZooxEFmijEQWaKMRBZooxEFmijEQWaKMRBZooxEFmijEQWaKMRBZooxEFmij EQWaKMRBZooxEFmijEQWaKMRBZooxEFmijEQWan79+eZ8sfuVrEQf//Z ------=_Part_661_12691051.1106177634411--