summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/image
diff options
context:
space:
mode:
authorJo Asplin <jo.asplin@nokia.com>2011-08-31 17:11:06 +0200
committerJo Asplin <jo.asplin@nokia.com>2011-09-01 10:59:49 +0200
commita90f50942e5304e6bf1c8a3e32f1f65c7a38f60b (patch)
tree6ed9a3d0a0a3dd09a78593d89c000f29d3494b89 /tests/auto/gui/image
parenta863eb1c7bbd5d40a741151f811bd7c62cf51e2d (diff)
Moved gui autotests into new directory structure
Task-number: QTBUG-21133 Change-Id: I83b8f652935cf92151265ca2530a3cf81c31fdef Reviewed-on: http://codereview.qt.nokia.com/3996 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jo Asplin <jo.asplin@nokia.com>
Diffstat (limited to 'tests/auto/gui/image')
-rw-r--r--tests/auto/gui/image/image.pro18
-rw-r--r--tests/auto/gui/image/qicoimageformat/.gitignore1
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.icobin0 -> 1078 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICObin0 -> 1078 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.icobin0 -> 1078 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/App.icobin0 -> 318 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.icobin0 -> 25214 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/Qt.icobin0 -> 31371 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.icobin0 -> 2862 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICObin0 -> 1078 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.icobin0 -> 3310 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.icobin0 -> 3310 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.icobin0 -> 22486 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.icobin0 -> 25214 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.icobin0 -> 3006 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/qicoimageformat.pro28
-rw-r--r--tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp338
-rw-r--r--tests/auto/gui/image/qicon/.gitignore1
-rw-r--r--tests/auto/gui/image/qicon/heart.svg55
-rw-r--r--tests/auto/gui/image/qicon/heart.svgzbin0 -> 1506 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.pngbin0 -> 897 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.pngbin0 -> 1411 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.pngbin0 -> 2399 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/index.theme492
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg425
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.pngbin0 -> 796 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.pngbin0 -> 897 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.pngbin0 -> 924 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.pngbin0 -> 1411 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.pngbin0 -> 1897 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.pngbin0 -> 2399 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/index.theme492
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg389
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg425
-rw-r--r--tests/auto/gui/image/qicon/image.pngbin0 -> 14743 bytes
-rw-r--r--tests/auto/gui/image/qicon/qicon.pro30
-rw-r--r--tests/auto/gui/image/qicon/rect.pngbin0 -> 175 bytes
-rw-r--r--tests/auto/gui/image/qicon/rect.svg76
-rw-r--r--tests/auto/gui/image/qicon/trash.svg58
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.cpp781
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.qrc20
-rw-r--r--tests/auto/gui/image/qimage/.gitignore1
-rw-r--r--tests/auto/gui/image/qimage/images/image.bmpbin0 -> 306 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.gifbin0 -> 1089 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.icobin0 -> 10134 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.jpgbin0 -> 696 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.pbm8
-rw-r--r--tests/auto/gui/image/qimage/images/image.pgm10
-rw-r--r--tests/auto/gui/image/qimage/images/image.pngbin0 -> 549 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.ppm7
-rw-r--r--tests/auto/gui/image/qimage/images/image.tifbin0 -> 2242 bytes
-rw-r--r--tests/auto/gui/image/qimage/images/image.xbm5
-rw-r--r--tests/auto/gui/image/qimage/images/image.xpm261
-rw-r--r--tests/auto/gui/image/qimage/qimage.pro23
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp2014
-rw-r--r--tests/auto/gui/image/qimageiohandler/.gitignore1
-rw-r--r--tests/auto/gui/image/qimageiohandler/qimageiohandler.pro9
-rw-r--r--tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp96
-rw-r--r--tests/auto/gui/image/qimagereader/.gitignore2
-rw-r--r--tests/auto/gui/image/qimagereader/baseline/35floppy.pngbin0 -> 329 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/baseline/connect.pngbin0 -> 12943 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/baseline/kde_favicon.pngbin0 -> 514 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/baseline/semitransparent.pngbin0 -> 545 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/16bpp.bmpbin0 -> 153654 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/4bpp-rle.bmpbin0 -> 23662 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpgbin0 -> 3699 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.pngbin0 -> 230 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpgbin0 -> 2045 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/away.pngbin0 -> 753 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/ball.mngbin0 -> 34394 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/bat1.gifbin0 -> 953 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/bat2.gifbin0 -> 980 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/beavis.jpgbin0 -> 20688 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/black.pngbin0 -> 697 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/black.xpm65
-rw-r--r--tests/auto/gui/image/qimagereader/images/colorful.bmpbin0 -> 65002 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm26
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt-data.tifbin0 -> 8590 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm11
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm7
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.bmpbin0 -> 116 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.gifbin0 -> 2608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.jpgbin0 -> 18 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.mngbin0 -> 183 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.pngbin0 -> 95 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.svg32
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.svgzbin0 -> 407 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/corrupt.xbm5
-rw-r--r--tests/auto/gui/image/qimagereader/images/crash-signed-char.bmpbin0 -> 45748 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/earth.gifbin0 -> 51712 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/endless-anim.gifbin0 -> 819 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/fire.mngbin0 -> 44430 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/font.bmpbin0 -> 1026 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/four-frames.gifbin0 -> 427 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/gnus.xbm622
-rw-r--r--tests/auto/gui/image/qimagereader/images/grayscale-ref.tifbin0 -> 256182 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/grayscale.tifbin0 -> 64162 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/image.pbm8
-rw-r--r--tests/auto/gui/image/qimagereader/images/image.pgm10
-rw-r--r--tests/auto/gui/image/qimagereader/images/image.pngbin0 -> 549 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/image.ppm7
-rw-r--r--tests/auto/gui/image/qimagereader/images/image_100dpi.tifbin0 -> 2242 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/kollada-noextbin0 -> 13907 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/kollada.pngbin0 -> 13907 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/marble.xpm470
-rw-r--r--tests/auto/gui/image/qimagereader/images/namedcolors.xpm18
-rw-r--r--tests/auto/gui/image/qimagereader/images/negativeheight.bmpbin0 -> 24630 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/noclearcode.bmpbin0 -> 326 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/noclearcode.gifbin0 -> 130 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/nontransparent.xpm788
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt-gif-anim.gifbin0 -> 1661 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gifbin0 -> 1642 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt.gifbin0 -> 26504 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt1.gifbin0 -> 7216 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt2.gifbin0 -> 5559 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt3.gifbin0 -> 4702 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt4.gifbin0 -> 4310 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt5.gifbin0 -> 4234 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt6.gifbin0 -> 4732 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt7.gifbin0 -> 5265 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qt8.gifbin0 -> 6144 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpgbin0 -> 8250 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rect.svg462
-rw-r--r--tests/auto/gui/image/qimagereader/images/rect.svgzbin0 -> 5082 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tifbin0 -> 4784 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tifbin0 -> 26690 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tifbin0 -> 160384 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tifbin0 -> 160388 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tifbin0 -> 161370 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tifbin0 -> 14728 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/runners.ppmbin0 -> 960016 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/teapot.ppm31
-rw-r--r--tests/auto/gui/image/qimagereader/images/test.ppm2
-rw-r--r--tests/auto/gui/image/qimagereader/images/test.xpm260
-rw-r--r--tests/auto/gui/image/qimagereader/images/test32bfv4.bmpbin0 -> 232874 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/test32v5.bmpbin0 -> 174858 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiffbin0 -> 7740 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiffbin0 -> 9570 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiffbin0 -> 11392 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiffbin0 -> 2382 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiffbin0 -> 1608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiffbin0 -> 5922 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiffbin0 -> 786 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiffbin0 -> 12608 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiffbin0 -> 15560 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiffbin0 -> 17972 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiffbin0 -> 17324 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiffbin0 -> 17324 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiffbin0 -> 17648 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiffbin0 -> 17324 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiffbin0 -> 17324 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiffbin0 -> 17324 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/transparent.xpm788
-rw-r--r--tests/auto/gui/image/qimagereader/images/trolltech.gifbin0 -> 42629 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tst7.bmpbin0 -> 582 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/images/tst7.pngbin0 -> 167 bytes
-rwxr-xr-xtests/auto/gui/image/qimagereader/images/txts.pngbin0 -> 5413 bytes
-rw-r--r--tests/auto/gui/image/qimagereader/qimagereader.pro36
-rw-r--r--tests/auto/gui/image/qimagereader/qimagereader.qrc71
-rw-r--r--tests/auto/gui/image/qimagereader/tst_qimagereader.cpp2026
-rw-r--r--tests/auto/gui/image/qimagewriter/.gitignore1
-rw-r--r--tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpgbin0 -> 3699 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpgbin0 -> 2045 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/beavis.jpgbin0 -> 20688 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/colorful.bmpbin0 -> 65002 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/earth.gifbin0 -> 51712 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/font.bmpbin0 -> 1026 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/gnus.xbm622
-rw-r--r--tests/auto/gui/image/qimagewriter/images/kollada.pngbin0 -> 13907 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/marble.xpm329
-rw-r--r--tests/auto/gui/image/qimagewriter/images/ship63.pbmbin0 -> 111 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/teapot.ppm31
-rw-r--r--tests/auto/gui/image/qimagewriter/images/teapot.tiffbin0 -> 262274 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/images/trolltech.gifbin0 -> 42629 bytes
-rw-r--r--tests/auto/gui/image/qimagewriter/qimagewriter.pro25
-rw-r--r--tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp628
-rw-r--r--tests/auto/gui/image/qmovie/.gitignore1
-rw-r--r--tests/auto/gui/image/qmovie/animations/comicsecard.gifbin0 -> 12112 bytes
-rw-r--r--tests/auto/gui/image/qmovie/animations/corrupt.gifbin0 -> 847 bytes
-rw-r--r--tests/auto/gui/image/qmovie/animations/dutch.mngbin0 -> 18534 bytes
-rw-r--r--tests/auto/gui/image/qmovie/animations/trolltech.gifbin0 -> 70228 bytes
-rw-r--r--tests/auto/gui/image/qmovie/qmovie.pro28
-rw-r--r--tests/auto/gui/image/qmovie/resources.qrc5
-rw-r--r--tests/auto/gui/image/qmovie/tst_qmovie.cpp225
-rw-r--r--tests/auto/gui/image/qpicture/.gitignore1
-rw-r--r--tests/auto/gui/image/qpicture/qpicture.pro6
-rw-r--r--tests/auto/gui/image/qpicture/tst_qpicture.cpp289
-rw-r--r--tests/auto/gui/image/qpixmap/.gitignore1
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.pngbin0 -> 26622 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.pngbin0 -> 149 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.pngbin0 -> 26532 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.pngbin0 -> 160 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.icobin0 -> 285478 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.pngbin0 -> 754 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.pngbin0 -> 16269 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.pngbin0 -> 1745 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.pngbin0 -> 2618 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.icobin0 -> 7406 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.pngbin0 -> 1454 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.pngbin0 -> 1721 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.pngbin0 -> 1967 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/designer.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.pngbin0 -> 4385 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.pngbin0 -> 4104 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.pngbin0 -> 4243 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.pngbin0 -> 4116 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.pngbin0 -> 4367 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.pngbin0 -> 4157 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.pngbin0 -> 4271 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.pngbin0 -> 4188 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.pngbin0 -> 4248 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.pngbin0 -> 4196 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.pngbin0 -> 4243 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.pngbin0 -> 4220 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.pngbin0 -> 4189 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gifbin0 -> 3317 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.pngbin0 -> 2431 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gifbin0 -> 4075 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gifbin0 -> 2086 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.pngbin0 -> 1405 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gifbin0 -> 4138 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpgbin0 -> 11810 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.pngbin0 -> 4282 bytes
-rw-r--r--tests/auto/gui/image/qpixmap/qpixmap.pro33
-rw-r--r--tests/auto/gui/image/qpixmap/qpixmap.qrc29
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp1787
-rw-r--r--tests/auto/gui/image/qpixmapcache/.gitignore1
-rw-r--r--tests/auto/gui/image/qpixmapcache/qpixmapcache.pro6
-rw-r--r--tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp521
-rw-r--r--tests/auto/gui/image/qpixmapfilter/noise.pngbin0 -> 7517 bytes
-rw-r--r--tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro13
-rw-r--r--tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp450
-rw-r--r--tests/auto/gui/image/qvolatileimage/qvolatileimage.pro10
-rw-r--r--tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp403
257 files changed, 17256 insertions, 0 deletions
diff --git a/tests/auto/gui/image/image.pro b/tests/auto/gui/image/image.pro
new file mode 100644
index 0000000000..fe089f5e75
--- /dev/null
+++ b/tests/auto/gui/image/image.pro
@@ -0,0 +1,18 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+ qimagereader \
+ qicoimageformat \
+ qpixmap \
+ qpixmapcache \
+ qimage \
+ qpixmapfilter \
+ qimageiohandler \
+ qimagewriter \
+ qmovie \
+ qvolatileimage \
+ qicon \
+ qpicture \
+
+!contains(QT_CONFIG, private_tests): SUBDIRS -= \
+ qpixmapcache \
+
diff --git a/tests/auto/gui/image/qicoimageformat/.gitignore b/tests/auto/gui/image/qicoimageformat/.gitignore
new file mode 100644
index 0000000000..9f673c5635
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/.gitignore
@@ -0,0 +1 @@
+tst_qicoimageformat
diff --git a/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico b/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico
new file mode 100644
index 0000000000..96087612fb
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/invalid/35floppy.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO b/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO
new file mode 100644
index 0000000000..e9551d6390
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/35FLOPPY.ICO
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico
new file mode 100644
index 0000000000..3368d3634a
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/AddPerfMon.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico
new file mode 100644
index 0000000000..03b80a68f8
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/App.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico
new file mode 100644
index 0000000000..8da119efdd
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Obj_N2_Internal_Mem.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico
new file mode 100644
index 0000000000..fef1dee146
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Qt.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico
new file mode 100644
index 0000000000..d05782cce9
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/Status_Play.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO b/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO
new file mode 100644
index 0000000000..5563beec8c
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/TIMER01.ICO
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico
new file mode 100644
index 0000000000..7a8ab39f56
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLD.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico
new file mode 100644
index 0000000000..c2b48f8d99
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/WORLDH.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico
new file mode 100644
index 0000000000..e78a15c42b
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/abcardWindow.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico
new file mode 100644
index 0000000000..893ceb254c
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/semitransparent.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico b/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico
new file mode 100644
index 0000000000..3e02a53e58
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/valid/trolltechlogo_tiny.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro b/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro
new file mode 100644
index 0000000000..c150c9af9f
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/qicoimageformat.pro
@@ -0,0 +1,28 @@
+load(qttest_p4)
+SOURCES+= tst_qicoimageformat.cpp
+
+wince*: {
+ DEFINES += SRCDIR=\\\".\\\"
+ addFiles.files = icons
+ addFiles.path = .
+ CONFIG(debug, debug|release):{
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4d.dll
+ } else {
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4.dll
+ }
+ addPlugins.path = imageformats
+ DEPLOYMENT += addFiles addPlugins
+} else:symbian {
+ addFiles.files = icons
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+ qt_not_deployed {
+ addPlugins.files = qico.dll
+ addPlugins.path = imageformats
+ DEPLOYMENT += addPlugins
+ }
+ TARGET.UID3 = 0xE0340004
+ DEFINES += SYMBIAN_SRCDIR_UID=$$lower($$replace(TARGET.UID3,"0x",""))
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD\\\"
+}
diff --git a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
new file mode 100644
index 0000000000..3aace12fdb
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
@@ -0,0 +1,338 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtTest/QtTest>
+#include <QtGui>
+#include <QtCore>
+
+#if defined(Q_OS_SYMBIAN)
+# define STRINGIFY(x) #x
+# define TOSTRING(x) STRINGIFY(x)
+# define SRCDIR "C:/Private/" TOSTRING(SYMBIAN_SRCDIR_UID) "/"
+#endif
+
+class tst_QIcoImageFormat : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QIcoImageFormat();
+ virtual ~tst_QIcoImageFormat();
+
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+private slots:
+ void format();
+ void canRead_data();
+ void canRead();
+ void SequentialFile_data();
+ void SequentialFile();
+ void imageCount_data();
+ void imageCount();
+ void jumpToNextImage_data();
+ void jumpToNextImage();
+ void loopCount_data();
+ void loopCount();
+ void nextImageDelay_data();
+ void nextImageDelay();
+ void pngCompression_data();
+ void pngCompression();
+
+private:
+ QString m_IconPath;
+};
+
+
+tst_QIcoImageFormat::tst_QIcoImageFormat()
+{
+ m_IconPath = QLatin1String(SRCDIR) + "/icons";
+ qDebug() << m_IconPath;
+}
+
+tst_QIcoImageFormat::~tst_QIcoImageFormat()
+{
+
+}
+
+void tst_QIcoImageFormat::init()
+{
+
+}
+
+void tst_QIcoImageFormat::cleanup()
+{
+
+}
+
+void tst_QIcoImageFormat::initTestCase()
+{
+
+}
+
+void tst_QIcoImageFormat::cleanupTestCase()
+{
+
+}
+
+void tst_QIcoImageFormat::format()
+{
+ QImageReader reader(m_IconPath + "/valid/35FLOPPY.ICO", "ico");
+ QByteArray fmt = reader.format();
+ QCOMPARE(const_cast<const char*>(fmt.data()), "ico" );
+}
+
+void tst_QIcoImageFormat::canRead_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("isValid");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 1;
+ QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 1;
+ QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
+ QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 1;
+ QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 1;
+ QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 1;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 1;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 1;
+ QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
+ QTest::newRow("103x16px, 24BPP") << "valid/trolltechlogo_tiny.ico" << 1;
+ QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 1;
+ QTest::newRow("PNG compression") << "valid/Qt.ico" << 1;
+}
+
+void tst_QIcoImageFormat::canRead()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, isValid);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+ QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
+}
+
+class QSequentialFile : public QFile
+{
+public:
+ QSequentialFile(const QString &name) : QFile(name) {}
+
+ virtual ~QSequentialFile() {}
+
+ virtual bool isSequential() const {
+ return true;
+ }
+
+};
+
+void tst_QIcoImageFormat::SequentialFile_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("isValid");
+
+ QTest::newRow("floppy (16,32 pixels - 16 colors)") << "valid/35FLOPPY.ICO" << 1;
+
+ QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
+
+
+}
+
+void tst_QIcoImageFormat::SequentialFile()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, isValid);
+
+ QSequentialFile *file = new QSequentialFile(m_IconPath + "/" + fileName);
+ QVERIFY(file);
+ QVERIFY(file->open(QFile::ReadOnly));
+ QImageReader reader(file);
+
+ // Perform the check twice. If canRead() does not restore the sequential device back to its original state,
+ // it will fail on the second try.
+ QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
+ QCOMPARE(reader.canRead(), (isValid == 0 ? false : true));
+ file->close();
+}
+
+
+void tst_QIcoImageFormat::imageCount_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("count");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
+ QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
+ QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
+ QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
+ QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
+ QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3;
+ QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
+ QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
+ QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
+
+}
+
+void tst_QIcoImageFormat::imageCount()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, count);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+ QCOMPARE(reader.imageCount(), count);
+
+}
+
+void tst_QIcoImageFormat::jumpToNextImage_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("count");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
+ QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
+ QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
+ QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
+ QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
+ QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3;
+ QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
+ QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
+}
+
+void tst_QIcoImageFormat::jumpToNextImage()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, count);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+ bool bJumped = reader.jumpToImage(0);
+ while (bJumped) {
+ count--;
+ bJumped = reader.jumpToNextImage();
+ }
+ QCOMPARE(count, 0);
+}
+
+void tst_QIcoImageFormat::loopCount_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("count");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 0;
+ QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
+}
+
+void tst_QIcoImageFormat::loopCount()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, count);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+ QCOMPARE(reader.loopCount(), count);
+}
+
+void tst_QIcoImageFormat::nextImageDelay_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("count");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "valid/35FLOPPY.ICO" << 2;
+ QTest::newRow("16px,32px,48px - 256,16M colors") << "valid/abcardWindow.ico" << 6;
+ QTest::newRow("16px - 16 colors") << "valid/App.ico" << 1;
+ QTest::newRow("16px,32px,48px - 16,256,16M colors") << "valid/Obj_N2_Internal_Mem.ico" << 9;
+ QTest::newRow("16px - 16,256,16M colors") << "valid/Status_Play.ico" << 3;
+ QTest::newRow("16px,32px - 16 colors") << "valid/TIMER01.ICO" << 2;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3;
+ QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3;
+ QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1;
+ QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9;
+ QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
+}
+
+void tst_QIcoImageFormat::nextImageDelay()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, count);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+ if (count == -1) {
+ QCOMPARE(reader.nextImageDelay(), 0);
+ } else {
+ int i;
+ for (i = 0; i < count; i++) {
+ QVERIFY(reader.jumpToImage(i));
+ QCOMPARE(reader.nextImageDelay(), 0);
+ }
+ }
+}
+
+void tst_QIcoImageFormat::pngCompression_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<int>("width");
+ QTest::addColumn<int>("height");
+
+ QTest::newRow("PNG compression") << "valid/Qt.ico" << 4 << 256 << 256;
+}
+
+void tst_QIcoImageFormat::pngCompression()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, index);
+ QFETCH(int, width);
+ QFETCH(int, height);
+
+ QImageReader reader(m_IconPath + "/" + fileName);
+
+ QImage image;
+ reader.jumpToImage(index);
+ reader.read(&image);
+
+ QCOMPARE(image.width(), width);
+ QCOMPARE(image.height(), height);
+}
+
+QTEST_MAIN(tst_QIcoImageFormat)
+#include "tst_qicoimageformat.moc"
+
diff --git a/tests/auto/gui/image/qicon/.gitignore b/tests/auto/gui/image/qicon/.gitignore
new file mode 100644
index 0000000000..c101ef9d28
--- /dev/null
+++ b/tests/auto/gui/image/qicon/.gitignore
@@ -0,0 +1 @@
+tst_qicon
diff --git a/tests/auto/gui/image/qicon/heart.svg b/tests/auto/gui/image/qicon/heart.svg
new file mode 100644
index 0000000000..8c982cd93c
--- /dev/null
+++ b/tests/auto/gui/image/qicon/heart.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) --><svg viewBox="100 200 550 500" height="841.88976pt" id="svg1" inkscape:version="0.40+cvs" sodipodi:docbase="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\submissions" sodipodi:docname="heart-left-highlight.svg" sodipodi:version="0.32" width="595.27559pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
+<metadata>
+<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<cc:Work rdf:about="">
+<dc:title>Heart Left-Highlight</dc:title>
+<dc:description>This is a normal valentines day heart.</dc:description>
+<dc:subject>
+<rdf:Bag>
+<rdf:li>holiday</rdf:li>
+<rdf:li>valentines</rdf:li>
+<rdf:li></rdf:li>
+<rdf:li>valentine</rdf:li>
+<rdf:li>hash(0x8a091c0)</rdf:li>
+<rdf:li>hash(0x8a0916c)</rdf:li>
+<rdf:li>signs_and_symbols</rdf:li>
+<rdf:li>hash(0x8a091f0)</rdf:li>
+<rdf:li>day</rdf:li>
+</rdf:Bag>
+</dc:subject>
+<dc:publisher>
+<cc:Agent rdf:about="http://www.openclipart.org">
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:publisher>
+<dc:creator>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:creator>
+<dc:rights>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:rights>
+<dc:date></dc:date>
+<dc:format>image/svg+xml</dc:format>
+<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
+<dc:language>en</dc:language>
+</cc:Work>
+<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
+<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+</cc:License>
+</rdf:RDF>
+</metadata>
+<defs id="defs3"/>
+<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="549.40674" inkscape:cy="596.00159" inkscape:document-units="px" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="615" inkscape:window-width="866" inkscape:window-x="88" inkscape:window-y="116" inkscape:zoom="0.35000000" pagecolor="#ffffff" showguides="true"/>
+<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
+<path d="M 263.41570,235.14588 C 197.17570,235.14588 143.41575,288.90587 143.41575,355.14588 C 143.41575,489.90139 279.34890,525.23318 371.97820,658.45392 C 459.55244,526.05056 600.54070,485.59932 600.54070,355.14588 C 600.54070,288.90588 546.78080,235.14587 480.54070,235.14588 C 432.49280,235.14588 391.13910,263.51631 371.97820,304.33338 C 352.81740,263.51630 311.46370,235.14587 263.41570,235.14588 z " id="path7" sodipodi:nodetypes="ccccccc" style="fill:#e60000;fill-opacity:1.0000000;stroke:#000000;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/>
+<path d="M 265.00000,253.59375 C 207.04033,253.59375 160.00000,300.63407 160.00000,358.59375 C 160.00000,476.50415 278.91857,507.43251 359.96875,624.00000 C 366.52868,614.08205 220.00000,478.47309 220.00000,378.59375 C 220.00000,320.63407 267.04033,273.59375 325.00000,273.59375 C 325.50453,273.59375 325.99718,273.64912 326.50000,273.65625 C 309.22436,261.07286 288.00557,253.59374 265.00000,253.59375 z " id="path220" sodipodi:nodetypes="ccccccc" style="fill:#e6e6e6;fill-opacity:0.64556962;stroke:none;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/>
+</g>
+</svg>
diff --git a/tests/auto/gui/image/qicon/heart.svgz b/tests/auto/gui/image/qicon/heart.svgz
new file mode 100644
index 0000000000..0f0913ffa7
--- /dev/null
+++ b/tests/auto/gui/image/qicon/heart.svgz
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png
new file mode 100644
index 0000000000..18b7c6781e
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/testtheme/16x16/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png
new file mode 100644
index 0000000000..d676ffd463
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/testtheme/22x22/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png
new file mode 100644
index 0000000000..85daef3b0b
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/testtheme/32x32/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/index.theme b/tests/auto/gui/image/qicon/icons/testtheme/index.theme
new file mode 100644
index 0000000000..e18736ab43
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/testtheme/index.theme
@@ -0,0 +1,492 @@
+[Icon Theme]
+_Name=Test
+_Comment=Test Theme
+Inherits=crystalsvg, themeparent
+Example=x-directory-normal
+
+# KDE Specific Stuff
+DisplayDepth=32
+LinkOverlay=link_overlay
+LockOverlay=lock_overlay
+ZipOverlay=zip_overlay
+DesktopDefault=48
+DesktopSizes=16,22,32,48,64,72,96,128
+ToolbarDefault=22
+ToolbarSizes=16,22,32,48
+MainToolbarDefault=22
+MainToolbarSizes=16,22,32,48
+SmallDefault=16
+SmallSizes=16
+PanelDefault=32
+PanelSizes=16,22,32,48,64,72,96,128
+
+# Directory list
+Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status
+
+[16x16/actions]
+Size=16
+Context=Actions
+Type=Fixed
+
+[16x16/apps]
+Size=16
+Context=Applications
+Type=Fixed
+
+[16x16/categories]
+Size=16
+Context=Categories
+Type=Fixed
+
+[16x16/devices]
+Size=16
+Context=Devices
+Type=Fixed
+
+[16x16/emblems]
+Size=16
+Context=Emblems
+Type=Fixed
+
+[16x16/emotes]
+Size=16
+Context=Emotes
+Type=Fixed
+
+[16x16/mimetypes]
+Size=16
+Context=MimeTypes
+Type=Fixed
+
+[16x16/places]
+Size=16
+Context=Places
+Type=Fixed
+
+[16x16/status]
+Size=16
+Context=Status
+Type=Fixed
+
+[22x22/actions]
+Size=22
+Context=Actions
+Type=Fixed
+
+[22x22/apps]
+Size=22
+Context=Applications
+Type=Fixed
+
+[22x22/categories]
+Size=22
+Context=Categories
+Type=Fixed
+
+[22x22/devices]
+Size=22
+Context=Devices
+Type=Fixed
+
+[22x22/emblems]
+Size=22
+Context=Emblems
+Type=Fixed
+
+[22x22/emotes]
+Size=22
+Context=Emotes
+Type=Fixed
+
+[22x22/mimetypes]
+Size=22
+Context=MimeTypes
+Type=Fixed
+
+[22x22/places]
+Size=22
+Context=Places
+Type=Fixed
+
+[22x22/status]
+Size=22
+Context=Status
+Type=Fixed
+
+[24x24/actions]
+Size=24
+Context=Actions
+Type=Fixed
+
+[24x24/apps]
+Size=24
+Context=Applications
+Type=Fixed
+
+[24x24/categories]
+Size=24
+Context=Categories
+Type=Fixed
+
+[24x24/devices]
+Size=24
+Context=Devices
+Type=Fixed
+
+[24x24/emblems]
+Size=24
+Context=Emblems
+Type=Fixed
+
+[24x24/emotes]
+Size=24
+Context=Emotes
+Type=Fixed
+
+[24x24/mimetypes]
+Size=24
+Context=MimeTypes
+Type=Fixed
+
+[24x24/places]
+Size=24
+Context=Places
+Type=Fixed
+
+[24x24/status]
+Size=24
+Context=Status
+Type=Fixed
+
+[32x32/actions]
+Size=32
+Context=Actions
+Type=Fixed
+
+[32x32/apps]
+Size=32
+Context=Applications
+Type=Fixed
+
+[32x32/categories]
+Size=32
+Context=Categories
+Type=Fixed
+
+[32x32/devices]
+Size=32
+Context=Devices
+Type=Fixed
+
+[32x32/emblems]
+Size=32
+Context=Emblems
+Type=Fixed
+
+[32x32/emotes]
+Size=32
+Context=Emotes
+Type=Fixed
+
+[32x32/mimetypes]
+Size=32
+Context=MimeTypes
+Type=Fixed
+
+[32x32/places]
+Size=32
+Context=Places
+Type=Fixed
+
+[32x32/status]
+Size=32
+Context=Status
+Type=Fixed
+
+[48x48/actions]
+Size=48
+Context=Actions
+Type=Fixed
+
+[48x48/apps]
+Size=48
+Context=Applications
+Type=Fixed
+
+[48x48/categories]
+Size=48
+Context=Categories
+Type=Fixed
+
+[48x48/devices]
+Size=48
+Context=Devices
+Type=Fixed
+
+[48x48/emblems]
+Size=48
+Context=Emblems
+Type=Fixed
+
+[48x48/emotes]
+Size=48
+Context=Emotes
+Type=Fixed
+
+[48x48/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Fixed
+
+[48x48/places]
+Size=48
+Context=Places
+Type=Fixed
+
+[48x48/status]
+Size=48
+Context=Status
+Type=Fixed
+
+[64x64/actions]
+Size=64
+Context=Actions
+Type=Fixed
+
+[64x64/apps]
+Size=64
+Context=Applications
+Type=Fixed
+
+[64x64/categories]
+Size=64
+Context=Categories
+Type=Fixed
+
+[64x64/devices]
+Size=64
+Context=Devices
+Type=Fixed
+
+[64x64/emblems]
+Size=64
+Context=Emblems
+Type=Fixed
+
+[64x64/emotes]
+Size=64
+Context=Emotes
+Type=Fixed
+
+[64x64/mimetypes]
+Size=64
+Context=MimeTypes
+Type=Fixed
+
+[64x64/places]
+Size=64
+Context=Places
+Type=Fixed
+
+[64x64/status]
+Size=64
+Context=Status
+Type=Fixed
+
+[72x72/actions]
+Size=72
+Context=Actions
+Type=Fixed
+
+[72x72/apps]
+Size=72
+Context=Applications
+Type=Fixed
+
+[72x72/categories]
+Size=72
+Context=Categories
+Type=Fixed
+
+[72x72/devices]
+Size=72
+Context=Devices
+Type=Fixed
+
+[72x72/emblems]
+Size=72
+Context=Emblems
+Type=Fixed
+
+[72x72/emotes]
+Size=72
+Context=Emotes
+Type=Fixed
+
+[72x72/mimetypes]
+Size=72
+Context=MimeTypes
+Type=Fixed
+
+[72x72/places]
+Size=72
+Context=Places
+Type=Fixed
+
+[72x72/status]
+Size=72
+Context=Status
+Type=Fixed
+
+[96x96/actions]
+Size=96
+Context=Actions
+Type=Fixed
+
+[96x96/apps]
+Size=96
+Context=Applications
+Type=Fixed
+
+[96x96/categories]
+Size=96
+Context=Categories
+Type=Fixed
+
+[96x96/devices]
+Size=96
+Context=Devices
+Type=Fixed
+
+[96x96/emblems]
+Size=96
+Context=Emblems
+Type=Fixed
+
+[96x96/emotes]
+Size=96
+Context=Emotes
+Type=Fixed
+
+[96x96/mimetypes]
+Size=96
+Context=MimeTypes
+Type=Fixed
+
+[96x96/places]
+Size=96
+Context=Places
+Type=Fixed
+
+[96x96/status]
+Size=96
+Context=Status
+Type=Fixed
+
+[128x128/actions]
+Size=128
+Context=Actions
+Type=Fixed
+
+[128x128/apps]
+Size=128
+Context=Applications
+Type=Fixed
+
+[128x128/categories]
+Size=128
+Context=Categories
+Type=Fixed
+
+[128x128/devices]
+Size=128
+Context=Devices
+Type=Fixed
+
+[128x128/emblems]
+Size=128
+Context=Emblems
+Type=Fixed
+
+[128x128/emotes]
+Size=128
+Context=Emotes
+Type=Fixed
+
+[128x128/mimetypes]
+Size=128
+Context=MimeTypes
+Type=Fixed
+
+[128x128/places]
+Size=128
+Context=Places
+Type=Fixed
+
+[128x128/status]
+Size=128
+Context=Status
+Type=Fixed
+
+[scalable/actions]
+Size=48
+Context=Actions
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/apps]
+Size=48
+Context=Applications
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/categories]
+Size=48
+Context=Categories
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/devices]
+Size=48
+Context=Devices
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/emblems]
+Size=48
+Context=Emblems
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/emotes]
+Size=48
+Context=Emotes
+Type=Scalable
+Minsize=32
+MaxSize=256
+
+[scalable/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/places]
+Size=48
+Context=Places
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/status]
+Size=48
+Context=Status
+Type=Scalable
+MinSize=32
+MaxSize=256
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg b/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg
new file mode 100644
index 0000000000..4cb14f82f0
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/testtheme/scalable/actions/svg-only.svg
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="90.000000"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
+ width="48px"
+ height="48px"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
+ sodipodi:docname="appointment-new.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective59" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5204">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5206" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5208" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5196">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5198" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5200" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12512">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop12513" />
+ <stop
+ style="stop-color:#fff520;stop-opacity:0.89108908;"
+ offset="0.50000000"
+ id="stop12517" />
+ <stop
+ style="stop-color:#fff300;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop12514" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12512"
+ id="radialGradient278"
+ gradientUnits="userSpaceOnUse"
+ cx="55.000000"
+ cy="125.00000"
+ fx="55.000000"
+ fy="125.00000"
+ r="14.375000" />
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop10655" />
+ <stop
+ style="stop-color:#9193af;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop10657" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop42176" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop42178" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ style="stop-color:#fffffd;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2147" />
+ <stop
+ style="stop-color:#cbcbc9;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2149" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ id="stop37937"
+ offset="0.0000000"
+ style="stop-color:#9497b3;stop-opacity:1.0000000;" />
+ <stop
+ id="stop37939"
+ offset="1.0000000"
+ style="stop-color:#4c4059;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2152">
+ <stop
+ id="stop2154"
+ offset="0.0000000"
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2156"
+ offset="1.0000000"
+ style="stop-color:#b5beb5;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3816">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3820" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient3822"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2152"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)"
+ x1="8.9156475"
+ y1="37.197018"
+ x2="9.8855033"
+ y2="52.090678" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient4309"
+ gradientUnits="userSpaceOnUse"
+ cx="11.329200"
+ cy="10.583970"
+ fx="11.329200"
+ fy="10.583970"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient4311"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ x1="6.3422160"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5196"
+ id="radialGradient5202"
+ cx="23.375"
+ cy="10.972863"
+ fx="23.375"
+ fy="10.972863"
+ r="3.3478092"
+ gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5204"
+ id="linearGradient5210"
+ x1="19.667364"
+ y1="4.2570662"
+ x2="20.329933"
+ y2="5.2845874"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5212"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#c4a000"
+ fill="#babdb6"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="13.2248"
+ inkscape:cy="25.106052"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="833"
+ inkscape:window-height="772"
+ inkscape:window-x="305"
+ inkscape:window-y="76" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:title>New Appointment</dc:title>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>appointment</rdf:li>
+ <rdf:li>new</rdf:li>
+ <rdf:li>meeting</rdf:li>
+ <rdf:li>rvsp</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4318"
+ style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path14341"
+ d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z "
+ style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path18921"
+ d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z "
+ style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path27786"
+ style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path35549"
+ style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4120"
+ sodipodi:cx="23.375"
+ sodipodi:cy="11.875"
+ sodipodi:rx="8.5"
+ sodipodi:ry="8.5"
+ d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z"
+ transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)"
+ sodipodi:start="3.8052902"
+ sodipodi:end="4.7074114" />
+ <path
+ transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)"
+ d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z"
+ sodipodi:ry="1.21875"
+ sodipodi:rx="1.21875"
+ sodipodi:cy="17.28125"
+ sodipodi:cx="15.1875"
+ id="path34778"
+ style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ id="path35559"
+ d="M 22.176614,20.718014 L 13.155702,13.140282"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ id="path35561"
+ d="M 19.408614,29.776506 L 22.368655,25.283228"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:nodetypes="cc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35563"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35565"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35567"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35569"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10651"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
+ id="path12511"
+ sodipodi:cx="55"
+ sodipodi:cy="125"
+ sodipodi:rx="14.375"
+ sodipodi:ry="14.375"
+ d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
+ transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)"
+ inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
+ inkscape:export-xdpi="33.852203"
+ inkscape:export-ydpi="33.852203" />
+ </g>
+</svg>
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png
new file mode 100644
index 0000000000..2098cfdf36
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/address-book-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png
new file mode 100644
index 0000000000..18b7c6781e
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/16x16/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png
new file mode 100644
index 0000000000..fad446cd92
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/address-book-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png
new file mode 100644
index 0000000000..d676ffd463
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/22x22/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png
new file mode 100644
index 0000000000..420139d307
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/address-book-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png
new file mode 100644
index 0000000000..85daef3b0b
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/32x32/actions/appointment-new.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/index.theme b/tests/auto/gui/image/qicon/icons/themeparent/index.theme
new file mode 100644
index 0000000000..e536a0bf2f
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/index.theme
@@ -0,0 +1,492 @@
+[Icon Theme]
+_Name=Test
+_Comment=Test Theme
+Inherits=gnome,crystalsvg
+Example=x-directory-normal
+
+# KDE Specific Stuff
+DisplayDepth=32
+LinkOverlay=link_overlay
+LockOverlay=lock_overlay
+ZipOverlay=zip_overlay
+DesktopDefault=48
+DesktopSizes=16,22,32,48,64,72,96,128
+ToolbarDefault=22
+ToolbarSizes=16,22,32,48
+MainToolbarDefault=22
+MainToolbarSizes=16,22,32,48
+SmallDefault=16
+SmallSizes=16
+PanelDefault=32
+PanelSizes=16,22,32,48,64,72,96,128
+
+# Directory list
+Directories=16x16/actions,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/mimetypes,22x22/places,22x22/status,24x24/actions,24x24/apps,24x24/categories,24x24/devices,24x24/emblems,24x24/emotes,24x24/mimetypes,24x24/places,24x24/status,32x32/actions,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/mimetypes,64x64/places,64x64/status,72x72/actions,72x72/apps,72x72/categories,72x72/devices,72x72/emblems,72x72/emotes,72x72/mimetypes,72x72/places,72x72/status,96x96/actions,96x96/apps,96x96/categories,96x96/devices,96x96/emblems,96x96/emotes,96x96/mimetypes,96x96/places,96x96/status,128x128/actions,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/mimetypes,128x128/places,128x128/status,scalable/actions,scalable/apps,scalable/categories,scalable/devices,scalable/emblems,scalable/emotes,scalable/mimetypes,scalable/places,scalable/status
+
+[16x16/actions]
+Size=16
+Context=Actions
+Type=Fixed
+
+[16x16/apps]
+Size=16
+Context=Applications
+Type=Fixed
+
+[16x16/categories]
+Size=16
+Context=Categories
+Type=Fixed
+
+[16x16/devices]
+Size=16
+Context=Devices
+Type=Fixed
+
+[16x16/emblems]
+Size=16
+Context=Emblems
+Type=Fixed
+
+[16x16/emotes]
+Size=16
+Context=Emotes
+Type=Fixed
+
+[16x16/mimetypes]
+Size=16
+Context=MimeTypes
+Type=Fixed
+
+[16x16/places]
+Size=16
+Context=Places
+Type=Fixed
+
+[16x16/status]
+Size=16
+Context=Status
+Type=Fixed
+
+[22x22/actions]
+Size=22
+Context=Actions
+Type=Fixed
+
+[22x22/apps]
+Size=22
+Context=Applications
+Type=Fixed
+
+[22x22/categories]
+Size=22
+Context=Categories
+Type=Fixed
+
+[22x22/devices]
+Size=22
+Context=Devices
+Type=Fixed
+
+[22x22/emblems]
+Size=22
+Context=Emblems
+Type=Fixed
+
+[22x22/emotes]
+Size=22
+Context=Emotes
+Type=Fixed
+
+[22x22/mimetypes]
+Size=22
+Context=MimeTypes
+Type=Fixed
+
+[22x22/places]
+Size=22
+Context=Places
+Type=Fixed
+
+[22x22/status]
+Size=22
+Context=Status
+Type=Fixed
+
+[24x24/actions]
+Size=24
+Context=Actions
+Type=Fixed
+
+[24x24/apps]
+Size=24
+Context=Applications
+Type=Fixed
+
+[24x24/categories]
+Size=24
+Context=Categories
+Type=Fixed
+
+[24x24/devices]
+Size=24
+Context=Devices
+Type=Fixed
+
+[24x24/emblems]
+Size=24
+Context=Emblems
+Type=Fixed
+
+[24x24/emotes]
+Size=24
+Context=Emotes
+Type=Fixed
+
+[24x24/mimetypes]
+Size=24
+Context=MimeTypes
+Type=Fixed
+
+[24x24/places]
+Size=24
+Context=Places
+Type=Fixed
+
+[24x24/status]
+Size=24
+Context=Status
+Type=Fixed
+
+[32x32/actions]
+Size=32
+Context=Actions
+Type=Fixed
+
+[32x32/apps]
+Size=32
+Context=Applications
+Type=Fixed
+
+[32x32/categories]
+Size=32
+Context=Categories
+Type=Fixed
+
+[32x32/devices]
+Size=32
+Context=Devices
+Type=Fixed
+
+[32x32/emblems]
+Size=32
+Context=Emblems
+Type=Fixed
+
+[32x32/emotes]
+Size=32
+Context=Emotes
+Type=Fixed
+
+[32x32/mimetypes]
+Size=32
+Context=MimeTypes
+Type=Fixed
+
+[32x32/places]
+Size=32
+Context=Places
+Type=Fixed
+
+[32x32/status]
+Size=32
+Context=Status
+Type=Fixed
+
+[48x48/actions]
+Size=48
+Context=Actions
+Type=Fixed
+
+[48x48/apps]
+Size=48
+Context=Applications
+Type=Fixed
+
+[48x48/categories]
+Size=48
+Context=Categories
+Type=Fixed
+
+[48x48/devices]
+Size=48
+Context=Devices
+Type=Fixed
+
+[48x48/emblems]
+Size=48
+Context=Emblems
+Type=Fixed
+
+[48x48/emotes]
+Size=48
+Context=Emotes
+Type=Fixed
+
+[48x48/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Fixed
+
+[48x48/places]
+Size=48
+Context=Places
+Type=Fixed
+
+[48x48/status]
+Size=48
+Context=Status
+Type=Fixed
+
+[64x64/actions]
+Size=64
+Context=Actions
+Type=Fixed
+
+[64x64/apps]
+Size=64
+Context=Applications
+Type=Fixed
+
+[64x64/categories]
+Size=64
+Context=Categories
+Type=Fixed
+
+[64x64/devices]
+Size=64
+Context=Devices
+Type=Fixed
+
+[64x64/emblems]
+Size=64
+Context=Emblems
+Type=Fixed
+
+[64x64/emotes]
+Size=64
+Context=Emotes
+Type=Fixed
+
+[64x64/mimetypes]
+Size=64
+Context=MimeTypes
+Type=Fixed
+
+[64x64/places]
+Size=64
+Context=Places
+Type=Fixed
+
+[64x64/status]
+Size=64
+Context=Status
+Type=Fixed
+
+[72x72/actions]
+Size=72
+Context=Actions
+Type=Fixed
+
+[72x72/apps]
+Size=72
+Context=Applications
+Type=Fixed
+
+[72x72/categories]
+Size=72
+Context=Categories
+Type=Fixed
+
+[72x72/devices]
+Size=72
+Context=Devices
+Type=Fixed
+
+[72x72/emblems]
+Size=72
+Context=Emblems
+Type=Fixed
+
+[72x72/emotes]
+Size=72
+Context=Emotes
+Type=Fixed
+
+[72x72/mimetypes]
+Size=72
+Context=MimeTypes
+Type=Fixed
+
+[72x72/places]
+Size=72
+Context=Places
+Type=Fixed
+
+[72x72/status]
+Size=72
+Context=Status
+Type=Fixed
+
+[96x96/actions]
+Size=96
+Context=Actions
+Type=Fixed
+
+[96x96/apps]
+Size=96
+Context=Applications
+Type=Fixed
+
+[96x96/categories]
+Size=96
+Context=Categories
+Type=Fixed
+
+[96x96/devices]
+Size=96
+Context=Devices
+Type=Fixed
+
+[96x96/emblems]
+Size=96
+Context=Emblems
+Type=Fixed
+
+[96x96/emotes]
+Size=96
+Context=Emotes
+Type=Fixed
+
+[96x96/mimetypes]
+Size=96
+Context=MimeTypes
+Type=Fixed
+
+[96x96/places]
+Size=96
+Context=Places
+Type=Fixed
+
+[96x96/status]
+Size=96
+Context=Status
+Type=Fixed
+
+[128x128/actions]
+Size=128
+Context=Actions
+Type=Fixed
+
+[128x128/apps]
+Size=128
+Context=Applications
+Type=Fixed
+
+[128x128/categories]
+Size=128
+Context=Categories
+Type=Fixed
+
+[128x128/devices]
+Size=128
+Context=Devices
+Type=Fixed
+
+[128x128/emblems]
+Size=128
+Context=Emblems
+Type=Fixed
+
+[128x128/emotes]
+Size=128
+Context=Emotes
+Type=Fixed
+
+[128x128/mimetypes]
+Size=128
+Context=MimeTypes
+Type=Fixed
+
+[128x128/places]
+Size=128
+Context=Places
+Type=Fixed
+
+[128x128/status]
+Size=128
+Context=Status
+Type=Fixed
+
+[scalable/actions]
+Size=48
+Context=Actions
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/apps]
+Size=48
+Context=Applications
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/categories]
+Size=48
+Context=Categories
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/devices]
+Size=48
+Context=Devices
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/emblems]
+Size=48
+Context=Emblems
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/emotes]
+Size=48
+Context=Emotes
+Type=Scalable
+Minsize=32
+MaxSize=256
+
+[scalable/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/places]
+Size=48
+Context=Places
+Type=Scalable
+MinSize=32
+MaxSize=256
+
+[scalable/status]
+Size=48
+Context=Status
+Type=Scalable
+MinSize=32
+MaxSize=256
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg
new file mode 100644
index 0000000000..600a82c1b0
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/address-book-new.svg
@@ -0,0 +1,389 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg1256"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
+ sodipodi:docname="address-book-new.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective58" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5060">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop5062" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5064" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="0"
+ id="stop5050" />
+ <stop
+ id="stop5056"
+ offset="0.5"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5052" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12512">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop12513" />
+ <stop
+ style="stop-color:#fff520;stop-opacity:0.89108908;"
+ offset="0.50000000"
+ id="stop12517" />
+ <stop
+ style="stop-color:#fff300;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop12514" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12512"
+ id="radialGradient278"
+ gradientUnits="userSpaceOnUse"
+ cx="55.000000"
+ cy="125.00000"
+ fx="55.000000"
+ fy="125.00000"
+ r="14.375000" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2116">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2118" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop2120" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2094">
+ <stop
+ style="stop-color:#d6e3f0;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2096" />
+ <stop
+ style="stop-color:#95b1cf;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2098" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2803">
+ <stop
+ id="stop2805"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2807"
+ offset="1.0000000"
+ style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2795">
+ <stop
+ id="stop2797"
+ offset="0.0000000"
+ style="stop-color:#000000;stop-opacity:0.068627454;" />
+ <stop
+ id="stop2799"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="4.9530048"
+ x2="41.219128"
+ y1="4.9530050"
+ x1="35.433035"
+ gradientTransform="matrix(0.254000,0.000000,1.822151e-16,3.759813,0.788629,0.148567)"
+ id="linearGradient2801"
+ xlink:href="#linearGradient2795"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="84.287079"
+ x2="10.219901"
+ y1="93.338043"
+ x1="10.496115"
+ gradientTransform="matrix(2.262742,0.000000,0.000000,0.441942,1.000000,-0.875000)"
+ id="linearGradient2813"
+ xlink:href="#linearGradient2803"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2094"
+ id="linearGradient2100"
+ gradientTransform="matrix(0.957750,0.000000,0.000000,1.027989,1.000000,-0.571911)"
+ x1="6.5871811"
+ y1="22.132999"
+ x2="14.511404"
+ y2="22.132999"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2116"
+ id="linearGradient2112"
+ gradientTransform="matrix(1.025428,0.000000,0.000000,0.957303,0.000000,-0.806758)"
+ x1="73.361984"
+ y1="26.652197"
+ x2="-2.7582901"
+ y2="21.270376"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient5013"
+ gradientUnits="userSpaceOnUse"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient5016"
+ gradientUnits="userSpaceOnUse"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient5020"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient5027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient5029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient5031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.27843137"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-111.52422"
+ inkscape:cy="10.167608"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="872"
+ inkscape:window-height="688"
+ inkscape:window-x="562"
+ inkscape:window-y="160"
+ fill="#ef2929"
+ stroke="#cc0000"
+ inkscape:showpageshadow="false" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Addess Book - New</dc:title>
+ <dc:date />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>address</rdf:li>
+ <rdf:li>contact</rdf:li>
+ <rdf:li>book</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="opacity:1;color:#000000;fill:#edd400;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 33.096456,4.6520202 L 40.521077,4.6520202 C 41.228184,4.6520202 41.758513,4.8287969 41.93529,5.71268 L 42.819174,12.606972 C 42.907562,13.667632 42.443523,14.021185 41.493349,14.021185 L 32.919679,14.021185 L 33.096456,4.6520202 z "
+ id="path21630"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path21632"
+ d="M 34.10295,5.638875 L 40.463507,5.638875 C 40.771656,5.638875 40.940266,5.669037 40.986054,5.960473 L 41.777489,12.344449 C 41.847258,12.775421 41.959897,13.019804 41.637211,13.034341 L 33.963412,13.034341 L 34.10295,5.638875 z "
+ style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path21634"
+ d="M 35.596456,12.40202 L 43.021077,12.40202 C 43.728184,12.40202 44.258513,12.578797 44.43529,13.46268 L 45.319174,20.356972 C 45.407562,21.417632 44.943523,21.771185 43.993349,21.771185 L 35.419679,21.771185 L 35.596456,12.40202 z "
+ style="opacity:1;color:#000000;fill:#9db029;fill-opacity:1;fill-rule:evenodd;stroke:#727e0a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 36.60295,13.388875 L 42.963507,13.388875 C 43.271656,13.388875 43.440266,13.419037 43.486054,13.710473 L 44.277489,20.094449 C 44.347258,20.525421 44.459897,20.769804 44.137211,20.784341 L 36.463412,20.784341 L 36.60295,13.388875 z "
+ id="path21636"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:1;color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:#cc0000;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 36.06451,20.776498 L 44.50992,20.776498 C 45.314245,20.776498 45.917487,20.995896 46.118569,22.092882 L 47.123975,30.649381 C 47.224515,31.965765 46.696677,32.40456 45.615866,32.40456 L 35.863428,32.40456 L 36.06451,20.776498 z "
+ id="path21638"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path21640"
+ d="M 37.209384,21.763574 L 44.444435,21.763574 C 44.79495,21.763574 44.986742,21.801928 45.038825,22.172513 L 45.939072,30.290267 C 46.018433,30.838284 46.146559,31.149038 45.779508,31.167522 L 37.050661,31.167522 L 37.209384,21.763574 z "
+ style="opacity:0.48538011;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <g
+ id="g5022"
+ transform="matrix(2.165152e-2,0,0,4.307902e-2,43.08625,34.04509)">
+ <rect
+ y="-150.69685"
+ x="-1559.2523"
+ height="478.35718"
+ width="1339.6335"
+ id="rect4173"
+ style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path5058"
+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+ id="path5018"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <path
+ style="color:#000000;fill:#5b6b94;fill-opacity:1;fill-rule:nonzero;stroke:#364878;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 6.3643222,5.5185897 C 6.4551049,3.6036003 7.3719758,2.5542814 9.0788784,2.549044 L 38.405776,2.4590577 C 38.652361,2.4583011 38.974317,2.6592071 38.999012,2.9089888 L 42.257491,35.867228 L 40.942189,35.923862 L 41.571429,42.369516 C 41.632441,42.994499 41.390059,43.52882 40.5,43.533035 L 9.7893046,43.678474 C 7.25676,43.690468 4.6538454,41.59976 4.7759337,39.024403 L 6.3643222,5.5185897 z "
+ id="rect1408"
+ sodipodi:nodetypes="csssccsssss" />
+ <path
+ id="path2489"
+ d="M 40.125,34.875 L 10.9375,35 C 9.3809819,35.177868 8.125,36.39612 8.125,38 C 8.125,39.60388 9.3809819,40.822132 10.9375,41 L 40.125,41.125 L 40.125,41.0625 C 38.469378,40.984348 37.125,39.674851 37.125,38 C 37.125,36.325149 38.469378,35.015652 40.125,34.9375 L 40.125,34.875 z "
+ style="color:#000000;fill:url(#linearGradient2813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccccssc"
+ id="path2784"
+ d="M 9.6875,2.8125 C 7.9805897,2.8125 7.050103,3.8215062 6.96875,5.6738658 L 5.3125,37.825772 C 5.22054,40.904199 7.1393732,42.654485 9.125,43.15625 C 4.875,41.525579 5.4375,34.164455 10.75,34.195222 L 41.648286,34.195222 L 38.335786,3.2432432 C 38.310025,3.0025304 37.987878,2.8125 37.742036,2.8125 L 9.6875,2.8125 z "
+ style="color:#000000;fill:url(#linearGradient2100);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ y="3.968539"
+ x="9.7886267"
+ height="29.604792"
+ width="2"
+ id="rect2793"
+ style="opacity:0.48044691;color:#000000;fill:url(#linearGradient2801);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.60818715;visibility:visible;display:inline;overflow:visible"
+ transform="matrix(1.000000,0.000000,-3.582731e-2,0.999358,0.000000,0.000000)" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2112);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:20;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 9.8751008,3.3336831 C 8.1912014,3.3336831 7.5384236,4.0658459 7.4581673,5.887831 L 6.1592633,35.777198 C 7.0925916,34.170451 8.5988591,33.594437 11.011665,33.594437 L 40.963081,33.594437 L 38.137179,3.7573631 C 38.114727,3.5203092 37.793961,3.3336831 37.551434,3.3336831 L 9.8751008,3.3336831 z "
+ id="path2104"
+ sodipodi:nodetypes="cccscssc" />
+ <path
+ style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:120.00000477%;writing-mode:lr-tb;text-anchor:start;fill:#ad7fa8;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 21.12553,18.381288 C 21.050283,19.50227 21.269376,20.384155 21.782812,21.026947 C 22.296751,21.661909 23.039741,21.979388 24.011788,21.979387 C 24.97597,21.979388 25.754005,21.65799 26.345892,21.01519 C 26.945589,20.372398 27.282799,19.49443 27.357529,18.381288 C 27.431173,17.283839 27.207372,16.413709 26.686123,15.770905 C 26.165371,15.120279 25.426826,14.794959 24.470482,14.79495 C 23.521952,14.794959 22.743917,15.11636 22.136378,15.759145 C 21.536656,16.401952 21.199707,17.275998 21.12553,18.381288 M 27.29793,21.897075 C 26.787062,22.500679 26.216183,22.947501 25.58529,23.237544 C 24.962734,23.519747 24.247754,23.66085 23.44035,23.660849 C 22.092032,23.66085 21.027197,23.174832 20.245835,22.202797 C 19.472826,21.222925 19.138938,19.949092 19.244172,18.381288 C 19.349395,16.813498 19.858197,15.539665 20.770584,14.559781 C 21.682954,13.579917 22.809375,13.089981 24.149854,13.089969 C 24.957257,13.089981 25.656689,13.238924 26.24815,13.536791 C 26.840107,13.826846 27.347352,14.269749 27.76988,14.865501 L 27.873267,13.325141 L 29.554732,13.325141 L 28.973868,21.979387 C 30.129917,21.806931 31.058551,21.285637 31.759769,20.415508 C 32.469312,19.537544 32.870659,18.404812 32.963808,17.017304 C 33.020082,16.178542 32.947536,15.390722 32.746168,14.653848 C 32.552597,13.916994 32.226018,13.235002 31.766435,12.607873 C 31.020085,11.580979 30.077151,10.79708 28.937625,10.256176 C 27.806428,9.707462 26.551007,9.433097 25.171361,9.433081 C 24.207151,9.433097 23.27347,9.56244 22.370314,9.821111 C 21.467662,10.071974 20.623234,10.448244 19.837027,10.949925 C 18.552629,11.749517 17.517932,12.79994 16.732929,14.101199 C 15.956279,15.394643 15.517185,16.797819 15.415642,18.310738 C 15.331983,19.557142 15.476998,20.725151 15.85069,21.814765 C 16.232213,22.904387 16.822316,23.864664 17.621,24.695594 C 18.389368,25.51085 19.300238,26.130129 20.353615,26.553435 C 21.406448,26.984578 22.54823,27.20015 23.778962,27.200153 C 24.790178,27.20015 25.793384,27.027692 26.788584,26.682781 C 27.791068,26.345701 28.72125,25.859684 29.579139,25.224728 L 30.549801,26.529919 C 29.518874,27.2903 28.409917,27.870384 27.222932,28.270174 C 26.043227,28.677799 24.857618,28.881612 23.666104,28.881616 C 22.215881,28.881612 20.865341,28.622926 19.614483,28.105557 C 18.36308,27.596019 17.268571,26.851316 16.330955,25.871444 C 15.393328,24.89157 14.705054,23.758838 14.266133,22.47324 C 13.827731,21.179813 13.658252,19.792311 13.757696,18.310738 C 13.853452,16.88405 14.211263,15.523986 14.831129,14.230542 C 15.450993,12.937121 16.287663,11.800469 17.34115,10.820582 C 18.419191,9.825045 19.638236,9.0646655 20.998287,8.5394366 C 22.358842,8.0064001 23.779908,7.7398759 25.261489,7.7398585 C 26.923341,7.7398759 28.440813,8.080872 29.813913,8.7628469 C 31.194815,9.444854 32.325282,10.41297 33.205316,11.667193 C 33.741656,12.435425 34.132443,13.270279 34.377679,14.171752 C 34.630708,15.073243 34.724877,16.006082 34.660187,16.970271 C 34.521787,19.031929 33.789414,20.658519 32.463064,21.850041 C 31.136671,23.04157 29.374449,23.66085 27.17639,23.707883 L 27.29793,21.897075"
+ id="text21625" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
+ id="path12511"
+ sodipodi:cx="55"
+ sodipodi:cy="125"
+ sodipodi:rx="14.375"
+ sodipodi:ry="14.375"
+ d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
+ transform="matrix(0.611127,0.000000,0.000000,0.611127,-24.94992,-67.63529)"
+ inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
+ inkscape:export-xdpi="33.852203"
+ inkscape:export-ydpi="33.852203" />
+ </g>
+</svg>
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg
new file mode 100644
index 0000000000..4cb14f82f0
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/themeparent/scalable/actions/appointment-new.svg
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="90.000000"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
+ width="48px"
+ height="48px"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
+ sodipodi:docname="appointment-new.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective59" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5204">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5206" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5208" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5196">
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="0"
+ id="stop5198" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:0;"
+ offset="1"
+ id="stop5200" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12512">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop12513" />
+ <stop
+ style="stop-color:#fff520;stop-opacity:0.89108908;"
+ offset="0.50000000"
+ id="stop12517" />
+ <stop
+ style="stop-color:#fff300;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop12514" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12512"
+ id="radialGradient278"
+ gradientUnits="userSpaceOnUse"
+ cx="55.000000"
+ cy="125.00000"
+ fx="55.000000"
+ fy="125.00000"
+ r="14.375000" />
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop10655" />
+ <stop
+ style="stop-color:#9193af;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop10657" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop42176" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop42178" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ style="stop-color:#fffffd;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2147" />
+ <stop
+ style="stop-color:#cbcbc9;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2149" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ id="stop37937"
+ offset="0.0000000"
+ style="stop-color:#9497b3;stop-opacity:1.0000000;" />
+ <stop
+ id="stop37939"
+ offset="1.0000000"
+ style="stop-color:#4c4059;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2152">
+ <stop
+ id="stop2154"
+ offset="0.0000000"
+ style="stop-color:#9aa29a;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2156"
+ offset="1.0000000"
+ style="stop-color:#b5beb5;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3816">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3820" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient3822"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2152"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.123841,0.000000,0.000000,0.969691,-31.88758,-19.59492)"
+ x1="8.9156475"
+ y1="37.197018"
+ x2="9.8855033"
+ y2="52.090678" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient4309"
+ gradientUnits="userSpaceOnUse"
+ cx="11.329200"
+ cy="10.583970"
+ fx="11.329200"
+ fy="10.583970"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient4311"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ x1="6.3422160"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5196"
+ id="radialGradient5202"
+ cx="23.375"
+ cy="10.972863"
+ fx="23.375"
+ fy="10.972863"
+ r="3.3478092"
+ gradientTransform="matrix(3.630420,1.654030e-15,-1.608743e-15,3.742066,-61.48607,-29.18618)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5204"
+ id="linearGradient5210"
+ x1="19.667364"
+ y1="4.2570662"
+ x2="20.329933"
+ y2="5.2845874"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5212"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#c4a000"
+ fill="#babdb6"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="13.2248"
+ inkscape:cy="25.106052"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="833"
+ inkscape:window-height="772"
+ inkscape:window-x="305"
+ inkscape:window-y="76" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ <dc:title>New Appointment</dc:title>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>appointment</rdf:li>
+ <rdf:li>new</rdf:li>
+ <rdf:li>meeting</rdf:li>
+ <rdf:li>rvsp</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4318"
+ style="opacity:1;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(2.563158,0.000000,0.000000,1.219602,-55.98414,14.04144)" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path14341"
+ d="M 18.587591,1.403729 L 4.226755,18.096665 L 5.4854717,19.339844 L 18.587591,1.403729 z "
+ style="color:#000000;fill:url(#linearGradient4307);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path18921"
+ d="M 18.467176,1.3138035 L 5.6605716,19.072612 L 7.4900985,20.687913 L 18.467176,1.3138035 z "
+ style="fill:#fefefe;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ transform="matrix(1.431529,0.000000,0.000000,1.431529,0.569459,-1.654618)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path27786"
+ style="fill:url(#radialGradient5212);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:0.69855404;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.163838,0.000000,0.000000,1.163838,4.824801,2.777556)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path35549"
+ style="fill:url(#radialGradient4311);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4313);stroke-width:0.71139598;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:url(#radialGradient5202);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5210);stroke-width:0.56498736;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4120"
+ sodipodi:cx="23.375"
+ sodipodi:cy="11.875"
+ sodipodi:rx="8.5"
+ sodipodi:ry="8.5"
+ d="M 16.679382,6.6387137 A 8.5,8.5 0 0 1 23.332691,3.3751053 L 23.375,11.875 z"
+ transform="matrix(1.769951,0.000000,0.000000,1.769951,-17.02424,1.610741)"
+ sodipodi:start="3.8052902"
+ sodipodi:end="4.7074114" />
+ <path
+ transform="matrix(2.073295,0.000000,0.000000,2.073295,-7.310224,-13.13682)"
+ d="M 16.40625 17.28125 A 1.21875 1.21875 0 1 1 13.96875,17.28125 A 1.21875 1.21875 0 1 1 16.40625 17.28125 z"
+ sodipodi:ry="1.21875"
+ sodipodi:rx="1.21875"
+ sodipodi:cy="17.28125"
+ sodipodi:cx="15.1875"
+ id="path34778"
+ style="fill:#f3f3f3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.48232403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ id="path35559"
+ d="M 22.176614,20.718014 L 13.155702,13.140282"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ id="path35561"
+ d="M 19.408614,29.776506 L 22.368655,25.283228"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:nodetypes="cc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,-12.40939)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35563"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-22.30073,14.80922)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35565"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-35.91004,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35567"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(2.749493,0.000000,0.000000,2.749493,-8.691448,1.199890)"
+ d="M 17.324117 7.6932044 A 0.61871845 0.61871845 0 1 1 16.08668,7.6932044 A 0.61871845 0.61871845 0 1 1 17.324117 7.6932044 z"
+ sodipodi:ry="0.61871845"
+ sodipodi:rx="0.61871845"
+ sodipodi:cy="7.6932044"
+ sodipodi:cx="16.705399"
+ id="path35569"
+ style="fill:#b6b9b1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36871839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4309);stroke-width:0.73656511;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path10651"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ transform="matrix(1.357654,0.000000,0.000000,1.357654,1.769896,-0.493735)" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block"
+ id="path12511"
+ sodipodi:cx="55"
+ sodipodi:cy="125"
+ sodipodi:rx="14.375"
+ sodipodi:ry="14.375"
+ d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z"
+ transform="matrix(0.611127,0.000000,0.000000,0.611127,5.544052,-66.92818)"
+ inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
+ inkscape:export-xdpi="33.852203"
+ inkscape:export-ydpi="33.852203" />
+ </g>
+</svg>
diff --git a/tests/auto/gui/image/qicon/image.png b/tests/auto/gui/image/qicon/image.png
new file mode 100644
index 0000000000..8d703640c1
--- /dev/null
+++ b/tests/auto/gui/image/qicon/image.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro
new file mode 100644
index 0000000000..cc87fae539
--- /dev/null
+++ b/tests/auto/gui/image/qicon/qicon.pro
@@ -0,0 +1,30 @@
+load(qttest_p4)
+
+QT += widgets
+SOURCES += tst_qicon.cpp
+RESOURCES = tst_qicon.qrc
+
+wince* {
+ QT += xml svg
+ addFiles.files += $$_PRO_FILE_PWD_/*.png
+ addFiles.files += $$_PRO_FILE_PWD_/*.svg
+ addFiles.files += $$_PRO_FILE_PWD_/*.svgz
+ addFiles.files += $$_PRO_FILE_PWD_/tst_qicon.cpp
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+
+ DEPLOYMENT_PLUGIN += qsvg
+ DEFINES += SRCDIR=\\\".\\\"
+} else:symbian {
+ QT += xml svg
+ addFiles.files = *.png tst_qicon.cpp *.svg *.svgz
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+ qt_not_deployed {
+ plugins.files = qsvgicon.dll
+ plugins.path = iconengines
+ DEPLOYMENT += plugins
+ }
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD\\\"
+}
diff --git a/tests/auto/gui/image/qicon/rect.png b/tests/auto/gui/image/qicon/rect.png
new file mode 100644
index 0000000000..b5d3ecbddf
--- /dev/null
+++ b/tests/auto/gui/image/qicon/rect.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/rect.svg b/tests/auto/gui/image/qicon/rect.svg
new file mode 100644
index 0000000000..8eb24727be
--- /dev/null
+++ b/tests/auto/gui/image/qicon/rect.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="40px"
+ height="5px"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="test.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="1005"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="13.6"
+ inkscape:cx="20"
+ inkscape:cy="2.5"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 2.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="40 : 2.5 : 1"
+ inkscape:persp3d-origin="20 : 1.6666667 : 1"
+ id="perspective9" />
+ </defs>
+ <g
+ id="layer1">
+ <rect
+ width="40px"
+ height="5px"
+ x="0px"
+ y="0px"
+ id="rect2393"
+ style="fill:#ff0000" />
+ </g>
+ <rect
+ style="fill:#000000"
+ id="rect2382"
+ width="2"
+ height="2"
+ x="19"
+ y="1.5" />
+</svg>
diff --git a/tests/auto/gui/image/qicon/trash.svg b/tests/auto/gui/image/qicon/trash.svg
new file mode 100644
index 0000000000..c44e4c75a2
--- /dev/null
+++ b/tests/auto/gui/image/qicon/trash.svg
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 10, SVG Export Plug-In . SVG Version: 3.0.0 Build 76) --><svg enable-background="new 0 0 347 348" height="348" i:pageBounds="0 792 612 0" i:rulerOrigin="0 0" i:viewOrigin="131 567" overflow="visible" space="preserve" viewBox="-20 -20 387 388" width="347" xmlns="http://www.w3.org/2000/svg" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:xlink="http://www.w3.org/1999/xlink">
+<metadata>
+<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<cc:Work rdf:about="">
+<dc:title>Keep Tidy Inside</dc:title>
+<dc:description></dc:description>
+<dc:subject>
+<rdf:Bag>
+<rdf:li></rdf:li>
+<rdf:li>symbol</rdf:li>
+<rdf:li>bin</rdf:li>
+<rdf:li>signs_and_symbols</rdf:li>
+<rdf:li>clean</rdf:li>
+<rdf:li>rubish</rdf:li>
+<rdf:li>trash</rdf:li>
+<rdf:li>inside</rdf:li>
+<rdf:li>garbage</rdf:li>
+<rdf:li>sign</rdf:li>
+</rdf:Bag>
+</dc:subject>
+<dc:publisher>
+<cc:Agent rdf:about="http://www.openclipart.org">
+<dc:title>Martin Owens</dc:title>
+</cc:Agent>
+</dc:publisher>
+<dc:creator>
+<cc:Agent>
+<dc:title>Martin Owens</dc:title>
+</cc:Agent>
+</dc:creator>
+<dc:rights>
+<cc:Agent>
+<dc:title>Martin Owens</dc:title>
+</cc:Agent>
+</dc:rights>
+<dc:date></dc:date>
+<dc:format>image/svg+xml</dc:format>
+<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
+<dc:language>en</dc:language>
+</cc:Work>
+<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
+<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+</cc:License>
+</rdf:RDF>
+</metadata>
+<g i:dimmedPercent="50" i:knockout="Off" i:layer="yes" i:rgbTrio="#4F008000FFFF" id="Layer_1">
+<path d="M347,174c0,96.098-77.679,174-173.5,174C77.679,348,0,270.098,0,174 C0,77.902,77.679,0,173.5,0C269.321,0,347,77.902,347,174z" fill="#10A040" i:knockout="Off"/>
+<path d="M238,53c0,13.807-11.864,25-26.5,25S185,66.807,185,53s11.864-25,26.5-25 S238,39.193,238,53z" fill="#FFFFFF" i:knockout="Off"/>
+<path d="M66,175c1.055,6.355,19.333,126.417,19.333,126.417h68.333 c0,0,14.105-122.524,14.333-126.417c6.224-0.622,6.667-13-2-13c-12.164,0-89.205-0.059-98,0S61.167,174.487,66,175z" fill="#FFFFFF" i:knockout="Off"/>
+<path d="M78,141c17.292-5.325,24.179-23.532,27-31c14.513,6.596,40.333,12.265,59,8 c3.683,19.419-28.043,19.31-23,37C132.577,145.705,89.404,167.292,78,141z" fill="#FFFFFF" i:knockout="Off"/>
+<path d="M103,82l139-1c-0.6,3.421,33.633,57.497,29,67c-4.089,0.418-67,5-67,5 c6.109-9.379-13-43-13-43L103,82z" fill="#FFFFFF" i:knockout="Off"/>
+<path d="M270,156l-66-3c0,0-23.565,143.355-24,145s1.855,2.536,3,1s51-82,51-82 s19.754,80.701,20,82s3.721,1.209,4,0S270,156,270,156z" fill="#FFFFFF" i:knockout="Off"/>
+</g>
+</svg>
diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
new file mode 100644
index 0000000000..4c430f9435
--- /dev/null
+++ b/tests/auto/gui/image/qicon/tst_qicon.cpp
@@ -0,0 +1,781 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QImageReader>
+#include <qicon.h>
+
+#if defined(Q_OS_SYMBIAN)
+#define SRCDIR "."
+#endif
+#include <qiconengine.h>
+
+Q_DECLARE_METATYPE(QSize)
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QIcon : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QIcon();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void actualSize_data(); // test with 1 pixmap
+ void actualSize();
+ void actualSize2_data(); // test with 2 pixmaps with different aspect ratio
+ void actualSize2();
+ void svgActualSize();
+ void isNull();
+ void swap();
+ void bestMatch();
+ void cacheKey();
+ void detach();
+ void svg();
+ void addFile();
+ void availableSizes();
+ void name();
+ void streamAvailableSizes_data();
+ void streamAvailableSizes();
+ void fromTheme();
+
+ void task184901_badCache();
+ void task223279_inconsistentAddFile();
+ void task239461_custom_iconengine_crash();
+
+private:
+ bool haveImageFormat(QByteArray const&);
+
+ QString oldCurrentDir;
+
+ const static QIcon staticIcon;
+};
+
+// Creating an icon statically should not cause a crash.
+// But we do not officially support this. See QTBUG-8666
+const QIcon tst_QIcon::staticIcon = QIcon::fromTheme("edit-find");
+
+void tst_QIcon::init()
+{
+ QString srcdir(QLatin1String(SRCDIR));
+ if (!srcdir.isEmpty()) {
+ oldCurrentDir = QDir::current().absolutePath();
+ QDir::setCurrent(srcdir);
+ }
+}
+
+void tst_QIcon::cleanup()
+{
+ if (!oldCurrentDir.isEmpty()) {
+ QDir::setCurrent(oldCurrentDir);
+ }
+}
+
+bool tst_QIcon::haveImageFormat(QByteArray const& desiredFormat)
+{
+ return QImageReader::supportedImageFormats().contains(desiredFormat);
+}
+
+tst_QIcon::tst_QIcon()
+{
+}
+
+void tst_QIcon::actualSize_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QSize>("argument");
+ QTest::addColumn<QSize>("result");
+
+ // square image
+ QTest::newRow("resource0") << ":/image.png" << QSize(128, 128) << QSize(128, 128);
+ QTest::newRow("resource1") << ":/image.png" << QSize( 64, 64) << QSize( 64, 64);
+ QTest::newRow("resource2") << ":/image.png" << QSize( 32, 64) << QSize( 32, 32);
+ QTest::newRow("resource3") << ":/image.png" << QSize( 16, 64) << QSize( 16, 16);
+ QTest::newRow("resource4") << ":/image.png" << QSize( 16, 128) << QSize( 16, 16);
+ QTest::newRow("resource5") << ":/image.png" << QSize( 128, 16) << QSize( 16, 16);
+ QTest::newRow("resource6") << ":/image.png" << QSize( 150, 150) << QSize( 128, 128);
+ // rect image
+ QTest::newRow("resource7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40);
+ QTest::newRow("resource8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20);
+ QTest::newRow("resource9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30);
+ QTest::newRow("resource10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40);
+
+ const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/");
+ QTest::newRow("external0") << prefix + "image.png" << QSize(128, 128) << QSize(128, 128);
+ QTest::newRow("external1") << prefix + "image.png" << QSize( 64, 64) << QSize( 64, 64);
+ QTest::newRow("external2") << prefix + "image.png" << QSize( 32, 64) << QSize( 32, 32);
+ QTest::newRow("external3") << prefix + "image.png" << QSize( 16, 64) << QSize( 16, 16);
+ QTest::newRow("external4") << prefix + "image.png" << QSize( 16, 128) << QSize( 16, 16);
+ QTest::newRow("external5") << prefix + "image.png" << QSize( 128, 16) << QSize( 16, 16);
+ QTest::newRow("external6") << prefix + "image.png" << QSize( 150, 150) << QSize( 128, 128);
+ // rect image
+ QTest::newRow("external7") << ":/rect.png" << QSize( 20, 40) << QSize( 20, 40);
+ QTest::newRow("external8") << ":/rect.png" << QSize( 10, 20) << QSize( 10, 20);
+ QTest::newRow("external9") << ":/rect.png" << QSize( 15, 50) << QSize( 15, 30);
+ QTest::newRow("external10") << ":/rect.png" << QSize( 25, 50) << QSize( 20, 40);
+}
+
+void tst_QIcon::actualSize()
+{
+ QFETCH(QString, source);
+ QFETCH(QSize, argument);
+ QFETCH(QSize, result);
+
+ {
+ QPixmap pixmap(source);
+ QIcon icon(pixmap);
+ QCOMPARE(icon.actualSize(argument), result);
+ QCOMPARE(icon.pixmap(argument).size(), result);
+ }
+
+ {
+ QIcon icon(source);
+ QCOMPARE(icon.actualSize(argument), result);
+ QCOMPARE(icon.pixmap(argument).size(), result);
+ }
+}
+
+void tst_QIcon::actualSize2_data()
+{
+ QTest::addColumn<QSize>("argument");
+ QTest::addColumn<QSize>("result");
+
+ // two images - 128x128 and 20x40. Let the games begin
+ QTest::newRow("trivial1") << QSize( 128, 128) << QSize( 128, 128);
+ QTest::newRow("trivial2") << QSize( 20, 40) << QSize( 20, 40);
+
+ // QIcon chooses the one with the smallest area to choose the pixmap
+ QTest::newRow("best1") << QSize( 100, 100) << QSize( 100, 100);
+ QTest::newRow("best2") << QSize( 20, 20) << QSize( 10, 20);
+ QTest::newRow("best3") << QSize( 15, 30) << QSize( 15, 30);
+ QTest::newRow("best4") << QSize( 5, 5) << QSize( 2, 5);
+ QTest::newRow("best5") << QSize( 10, 15) << QSize( 7, 15);
+}
+
+void tst_QIcon::actualSize2()
+{
+ QIcon icon;
+ const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/");
+
+ icon.addPixmap(QPixmap(prefix + "image.png"));
+ icon.addPixmap(QPixmap(prefix + "rect.png"));
+
+ QFETCH(QSize, argument);
+ QFETCH(QSize, result);
+
+ QCOMPARE(icon.actualSize(argument), result);
+ QCOMPARE(icon.pixmap(argument).size(), result);
+}
+
+void tst_QIcon::svgActualSize()
+{
+ if (!haveImageFormat("svg")) {
+ QSKIP("SVG support is not available", SkipAll);
+ }
+
+ const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/");
+ QIcon icon(prefix + "rect.svg");
+ QCOMPARE(icon.actualSize(QSize(16, 16)), QSize(16, 2));
+ QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 2));
+
+ QPixmap p(16, 16);
+ p.fill(Qt::cyan);
+ icon.addPixmap(p);
+
+ QCOMPARE(icon.actualSize(QSize(16, 16)), QSize(16, 16));
+ QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 16));
+
+ QCOMPARE(icon.actualSize(QSize(16, 14)), QSize(16, 2));
+ QCOMPARE(icon.pixmap(QSize(16, 14)).size(), QSize(16, 2));
+}
+
+void tst_QIcon::isNull() {
+ // test default constructor
+ QIcon defaultConstructor;
+ QVERIFY(defaultConstructor.isNull());
+
+ // test copy constructor
+ QVERIFY(QIcon(defaultConstructor).isNull());
+
+ // test pixmap constructor
+ QPixmap nullPixmap;
+ QVERIFY(QIcon(nullPixmap).isNull());
+
+ // test string constructor with empty string
+ QIcon iconEmptyString = QIcon(QString());
+ QVERIFY(iconEmptyString.isNull());
+ QVERIFY(!iconEmptyString.actualSize(QSize(32, 32)).isValid());;
+
+ // test string constructor with non-existing file
+ QIcon iconNoFile = QIcon("imagedoesnotexist");
+ QVERIFY(!iconNoFile.isNull());
+ QVERIFY(!iconNoFile.actualSize(QSize(32, 32)).isValid());
+
+ // test string constructor with non-existing file with suffix
+ QIcon iconNoFileSuffix = QIcon("imagedoesnotexist.png");
+ QVERIFY(!iconNoFileSuffix.isNull());
+ QVERIFY(!iconNoFileSuffix.actualSize(QSize(32, 32)).isValid());
+
+ const QString prefix = QLatin1String(SRCDIR) + QLatin1String("/");
+ // test string constructor with existing file but unsupported format
+ QIcon iconUnsupportedFormat = QIcon(prefix + "tst_qicon.cpp");
+ QVERIFY(!iconUnsupportedFormat.isNull());
+ QVERIFY(!iconUnsupportedFormat.actualSize(QSize(32, 32)).isValid());
+
+ // test string constructor with existing file and supported format
+ QIcon iconSupportedFormat = QIcon(prefix + "image.png");
+ QVERIFY(!iconSupportedFormat.isNull());
+ QVERIFY(iconSupportedFormat.actualSize(QSize(32, 32)).isValid());
+}
+
+void tst_QIcon::swap()
+{
+ QPixmap p1(1, 1), p2(2, 2);
+ p1.fill(Qt::black);
+ p2.fill(Qt::black);
+
+ QIcon i1(p1), i2(p2);
+ const qint64 i1k = i1.cacheKey();
+ const qint64 i2k = i2.cacheKey();
+ QVERIFY(i1k != i2k);
+ i1.swap(i2);
+ QCOMPARE(i1.cacheKey(), i2k);
+ QCOMPARE(i2.cacheKey(), i1k);
+}
+
+void tst_QIcon::bestMatch()
+{
+ QPixmap p1(1, 1);
+ QPixmap p2(2, 2);
+ QPixmap p3(3, 3);
+ QPixmap p4(4, 4);
+ QPixmap p5(5, 5);
+ QPixmap p6(6, 6);
+ QPixmap p7(7, 7);
+ QPixmap p8(8, 8);
+
+ p1.fill(Qt::black);
+ p2.fill(Qt::black);
+ p3.fill(Qt::black);
+ p4.fill(Qt::black);
+ p5.fill(Qt::black);
+ p6.fill(Qt::black);
+ p7.fill(Qt::black);
+ p8.fill(Qt::black);
+
+ for (int i = 0; i < 4; ++i) {
+ for (int j = 0; j < 2; ++j) {
+ QIcon::State state = (j == 0) ? QIcon::On : QIcon::Off;
+ QIcon::State oppositeState = (state == QIcon::On) ? QIcon::Off
+ : QIcon::On;
+ QIcon::Mode mode;
+ QIcon::Mode oppositeMode;
+
+ QIcon icon;
+
+ switch (i) {
+ case 0:
+ default:
+ mode = QIcon::Normal;
+ oppositeMode = QIcon::Active;
+ break;
+ case 1:
+ mode = QIcon::Active;
+ oppositeMode = QIcon::Normal;
+ break;
+ case 2:
+ mode = QIcon::Disabled;
+ oppositeMode = QIcon::Selected;
+ break;
+ case 3:
+ mode = QIcon::Selected;
+ oppositeMode = QIcon::Disabled;
+ }
+
+ /*
+ The test mirrors the code in
+ QPixmapIconEngine::bestMatch(), to make sure that
+ nobody breaks QPixmapIconEngine by mistake. Before
+ you change this test or the code that it tests,
+ please talk to the maintainer if possible.
+ */
+ if (mode == QIcon::Disabled || mode == QIcon::Selected) {
+ icon.addPixmap(p1, oppositeMode, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p1.size());
+
+ icon.addPixmap(p2, oppositeMode, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p2.size());
+
+ icon.addPixmap(p3, QIcon::Active, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p3.size());
+
+ icon.addPixmap(p4, QIcon::Normal, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p4.size());
+
+ icon.addPixmap(p5, mode, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p5.size());
+
+ icon.addPixmap(p6, QIcon::Active, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p6.size());
+
+ icon.addPixmap(p7, QIcon::Normal, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p7.size());
+
+ icon.addPixmap(p8, mode, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p8.size());
+ } else {
+ icon.addPixmap(p1, QIcon::Selected, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p1.size());
+
+ icon.addPixmap(p2, QIcon::Disabled, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p2.size());
+
+ icon.addPixmap(p3, QIcon::Selected, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p3.size());
+
+ icon.addPixmap(p4, QIcon::Disabled, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p4.size());
+
+ icon.addPixmap(p5, oppositeMode, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p5.size());
+
+ icon.addPixmap(p6, mode, oppositeState);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p6.size());
+
+ icon.addPixmap(p7, oppositeMode, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p7.size());
+
+ icon.addPixmap(p8, mode, state);
+ QVERIFY(icon.pixmap(100, mode, state).size() == p8.size());
+ }
+ }
+ }
+}
+
+void tst_QIcon::cacheKey()
+{
+ QIcon icon1("image.png");
+ qint64 icon1_key = icon1.cacheKey();
+ QIcon icon2 = icon1;
+
+ QVERIFY(icon2.cacheKey() == icon1.cacheKey());
+ icon2.detach();
+ QVERIFY(icon2.cacheKey() != icon1.cacheKey());
+ QVERIFY(icon1.cacheKey() == icon1_key);
+}
+
+void tst_QIcon::detach()
+{
+ QImage img(32, 32, QImage::Format_ARGB32_Premultiplied);
+ img.fill(0xffff0000);
+ QIcon icon1(QPixmap::fromImage(img));
+ QIcon icon2 = icon1;
+ icon2.addFile("image.png", QSize(64, 64));
+
+ QImage img1 = icon1.pixmap(64, 64).toImage();
+ QImage img2 = icon2.pixmap(64, 64).toImage();
+ QVERIFY(img1 != img2);
+
+ img1 = icon1.pixmap(32, 32).toImage();
+ img2 = icon2.pixmap(32, 32).toImage();
+ QVERIFY(img1 == img2);
+}
+
+void tst_QIcon::svg()
+{
+ if (!haveImageFormat("svg")) {
+ QSKIP("SVG support is not available", SkipAll);
+ }
+ QIcon icon1("heart.svg");
+
+ QVERIFY(!icon1.pixmap(32).isNull());
+ QImage img1 = icon1.pixmap(32).toImage();
+ QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull());
+ QImage img2 = icon1.pixmap(32, QIcon::Disabled).toImage();
+
+ icon1.addFile("trash.svg", QSize(), QIcon::Disabled);
+ QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull());
+ QImage img3 = icon1.pixmap(32, QIcon::Disabled).toImage();
+ QVERIFY(img3 != img2);
+ QVERIFY(img3 != img1);
+
+ QPixmap pm("image.png");
+ icon1.addPixmap(pm, QIcon::Normal, QIcon::On);
+ QVERIFY(!icon1.pixmap(128, QIcon::Normal, QIcon::On).isNull());
+ QImage img4 = icon1.pixmap(128, QIcon::Normal, QIcon::On).toImage();
+ QVERIFY(img4 != img3);
+ QVERIFY(img4 != img2);
+ QVERIFY(img4 != img1);
+
+ QIcon icon2;
+ icon2.addFile("heart.svg");
+ QVERIFY(icon2.pixmap(57).toImage() == icon1.pixmap(57).toImage());
+
+ QIcon icon3("trash.svg");
+ icon3.addFile("heart.svg");
+ QVERIFY(icon3.pixmap(57).toImage() == icon1.pixmap(57).toImage());
+
+ QIcon icon4("heart.svg");
+ icon4.addFile("image.png", QSize(), QIcon::Active);
+ QVERIFY(!icon4.pixmap(32).isNull());
+ QVERIFY(!icon4.pixmap(32, QIcon::Active).isNull());
+ QVERIFY(icon4.pixmap(32).toImage() == img1);
+ QIcon pmIcon(pm);
+ QVERIFY(icon4.pixmap(pm.size(), QIcon::Active).toImage() == pmIcon.pixmap(pm.size(), QIcon::Active).toImage());
+
+#ifndef QT_NO_COMPRESS
+ QIcon icon5("heart.svgz");
+ QVERIFY(!icon5.pixmap(32).isNull());
+#endif
+}
+
+void tst_QIcon::addFile()
+{
+ QIcon icon;
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png"));
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-32.png"));
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-128.png"));
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png"), QSize(), QIcon::Selected);
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-32.png"), QSize(), QIcon::Selected);
+ icon.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-128.png"), QSize(), QIcon::Selected);
+
+#ifndef Q_OS_WINCE
+ QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")).toImage());
+ QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-32.png")).toImage());
+ QVERIFY(icon.pixmap(128, QIcon::Normal).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-128.png")).toImage());
+ QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png")).toImage());
+ QVERIFY(icon.pixmap(32, QIcon::Selected).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-32.png")).toImage());
+ QVERIFY(icon.pixmap(128, QIcon::Selected).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-128.png")).toImage());
+#else
+ // WinCE only includes the 16x16 images for size reasons
+ QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png")).toImage());
+ QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() ==
+ QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-save-16.png")).toImage());
+#endif
+}
+
+static bool sizeLess(const QSize &a, const QSize &b)
+{
+ return a.width() < b.width();
+}
+
+void tst_QIcon::availableSizes()
+{
+ {
+ QIcon icon;
+ icon.addFile("image.png", QSize(32,32));
+ icon.addFile("image.png", QSize(64,64));
+ icon.addFile("image.png", QSize(128,128));
+ icon.addFile("image.png", QSize(256,256), QIcon::Disabled);
+ icon.addFile("image.png", QSize(16,16), QIcon::Normal, QIcon::On);
+
+ QList<QSize> availableSizes = icon.availableSizes();
+ QCOMPARE(availableSizes.size(), 3);
+ qSort(availableSizes.begin(), availableSizes.end(), sizeLess);
+ QCOMPARE(availableSizes.at(0), QSize(32,32));
+ QCOMPARE(availableSizes.at(1), QSize(64,64));
+ QCOMPARE(availableSizes.at(2), QSize(128,128));
+
+ availableSizes = icon.availableSizes(QIcon::Disabled);
+ QCOMPARE(availableSizes.size(), 1);
+ QCOMPARE(availableSizes.at(0), QSize(256,256));
+
+ availableSizes = icon.availableSizes(QIcon::Normal, QIcon::On);
+ QCOMPARE(availableSizes.size(), 1);
+ QCOMPARE(availableSizes.at(0), QSize(16,16));
+ }
+
+ if (haveImageFormat("svg")) {
+ // checks that there are no availableSizes for scalable images.
+ QIcon icon("heart.svg");
+ QList<QSize> availableSizes = icon.availableSizes();
+ QVERIFY(availableSizes.isEmpty());
+ }
+
+ if (haveImageFormat("svg")) {
+ // even if an a scalable image contain added pixmaps,
+ // availableSizes still should be empty.
+ QIcon icon("heart.svg");
+ icon.addFile("image.png", QSize(32,32));
+ QList<QSize> availableSizes = icon.availableSizes();
+ QVERIFY(availableSizes.isEmpty());
+ }
+
+ {
+ // we try to load an icon from resources
+ QIcon icon(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png"));
+ QList<QSize> availableSizes = icon.availableSizes();
+ QCOMPARE(availableSizes.size(), 1);
+ QCOMPARE(availableSizes.at(0), QSize(16, 16));
+ }
+
+ {
+ // load an icon from binary data.
+ QPixmap pix;
+ QFile file(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png"));
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ uchar *data = file.map(0, file.size());
+ QVERIFY(data != 0);
+ pix.loadFromData(data, file.size());
+ QIcon icon(pix);
+
+ QList<QSize> availableSizes = icon.availableSizes();
+ QCOMPARE(availableSizes.size(), 1);
+ QCOMPARE(availableSizes.at(0), QSize(16,16));
+ }
+
+ {
+ // there shouldn't be available sizes for invalid images!
+ QVERIFY(QIcon(QLatin1String("")).availableSizes().isEmpty());
+ QVERIFY(QIcon(QLatin1String("non-existing.png")).availableSizes().isEmpty());
+ }
+}
+
+void tst_QIcon::name()
+{
+ {
+ // No name if icon does not come from a theme
+ QIcon icon(":/image.png");
+ QString name = icon.name();
+ QVERIFY(name.isEmpty());
+ }
+
+ {
+ // Getting the name of an icon coming from a theme should work
+ QString searchPath = QLatin1String(":/icons");
+ QIcon::setThemeSearchPaths(QStringList() << searchPath);
+ QString themeName("testtheme");
+ QIcon::setThemeName(themeName);
+
+ QIcon icon = QIcon::fromTheme("appointment-new");
+ QString name = icon.name();
+ QCOMPARE(name, QLatin1String("appointment-new"));
+ }
+}
+
+void tst_QIcon::streamAvailableSizes_data()
+{
+ QTest::addColumn<QIcon>("icon");
+
+ QIcon icon;
+ icon.addFile(":/image.png", QSize(32,32));
+ QTest::newRow( "32x32" ) << icon;
+ icon.addFile(":/image.png", QSize(64,64));
+ QTest::newRow( "64x64" ) << icon;
+ icon.addFile(":/image.png", QSize(128,128));
+ QTest::newRow( "128x128" ) << icon;
+ icon.addFile(":/image.png", QSize(256,256));
+ QTest::newRow( "256x256" ) << icon;
+}
+
+void tst_QIcon::streamAvailableSizes()
+{
+ QFETCH(QIcon, icon);
+
+ QByteArray ba;
+ // write to QByteArray
+ {
+ QBuffer buffer(&ba);
+ buffer.open(QIODevice::WriteOnly);
+ QDataStream stream(&buffer);
+ stream << icon;
+ }
+
+ // read from QByteArray
+ {
+ QBuffer buffer(&ba);
+ buffer.open(QIODevice::ReadOnly);
+ QDataStream stream(&buffer);
+ QIcon i;
+ stream >> i;
+ QCOMPARE(i.isNull(), icon.isNull());
+ QCOMPARE(i.availableSizes(), icon.availableSizes());
+ }
+}
+
+
+static inline bool operator<(const QSize &lhs, const QSize &rhs)
+{
+ if (lhs.width() < rhs.width())
+ return true;
+ else if (lhs.width() == lhs.width())
+ return lhs.height() < lhs.height();
+ return false;
+}
+
+void tst_QIcon::task184901_badCache()
+{
+ QPixmap pm("image.png");
+ QIcon icon(pm);
+
+ //the disabled icon must have an effect (grayed)
+ QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() != icon.pixmap(32, QIcon::Disabled).toImage());
+
+ icon.addPixmap(pm, QIcon::Disabled);
+ //the disabled icon must now be the same as the normal one.
+ QVERIFY( icon.pixmap(32, QIcon::Normal).toImage() == icon.pixmap(32, QIcon::Disabled).toImage() );
+}
+
+void tst_QIcon::fromTheme()
+{
+ QString searchPath = QLatin1String(":/icons");
+ QIcon::setThemeSearchPaths(QStringList() << searchPath);
+ QVERIFY(QIcon::themeSearchPaths().size() == 1);
+ QCOMPARE(searchPath, QIcon::themeSearchPaths()[0]);
+
+ QString themeName("testtheme");
+ QIcon::setThemeName(themeName);
+ QCOMPARE(QIcon::themeName(), themeName);
+
+ // Test normal icon
+ QIcon appointmentIcon = QIcon::fromTheme("appointment-new");
+ QVERIFY(!appointmentIcon.isNull());
+ QVERIFY(!appointmentIcon.availableSizes(QIcon::Normal, QIcon::Off).isEmpty());
+ QVERIFY(appointmentIcon.availableSizes().contains(QSize(16, 16)));
+ QVERIFY(appointmentIcon.availableSizes().contains(QSize(32, 32)));
+ QVERIFY(appointmentIcon.availableSizes().contains(QSize(22, 22)));
+
+ // Test icon from parent theme
+ QIcon abIcon = QIcon::fromTheme("address-book-new");
+ QVERIFY(!abIcon.isNull());
+ QVERIFY(QIcon::hasThemeIcon("address-book-new"));
+ QVERIFY(!abIcon.availableSizes().isEmpty());
+
+ // Test non existing icon
+ QIcon noIcon = QIcon::fromTheme("broken-icon");
+ QVERIFY(noIcon.isNull());
+ QVERIFY(!QIcon::hasThemeIcon("broken-icon"));
+
+ // Test non existing icon with fallback
+ noIcon = QIcon::fromTheme("broken-icon", abIcon);
+ QVERIFY(noIcon.cacheKey() == abIcon.cacheKey());
+
+ // Test svg-only icon
+ noIcon = QIcon::fromTheme("svg-icon", abIcon);
+ QVERIFY(!noIcon.availableSizes().isEmpty());
+
+ QByteArray ba;
+ // write to QByteArray
+ {
+ QBuffer buffer(&ba);
+ buffer.open(QIODevice::WriteOnly);
+ QDataStream stream(&buffer);
+ stream << abIcon;
+ }
+
+ // read from QByteArray
+ {
+ QBuffer buffer(&ba);
+ buffer.open(QIODevice::ReadOnly);
+ QDataStream stream(&buffer);
+ QIcon i;
+ stream >> i;
+ QCOMPARE(i.isNull(), abIcon.isNull());
+ QCOMPARE(i.availableSizes(), abIcon.availableSizes());
+ }
+
+ // Make sure setting the theme name clears the state
+ QIcon::setThemeName("");
+ abIcon = QIcon::fromTheme("address-book-new");
+ QVERIFY(abIcon.isNull());
+}
+
+
+void tst_QIcon::task223279_inconsistentAddFile()
+{
+ QIcon icon1;
+ icon1.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png"));
+ icon1.addFile(QLatin1String("IconThatDoesntExist"), QSize(32, 32));
+ QPixmap pm1 = icon1.pixmap(32, 32);
+
+ QIcon icon2;
+ icon2.addFile(QLatin1String(":/trolltech/styles/commonstyle/images/standardbutton-open-16.png"));
+ icon2.addFile(QLatin1String("IconThatDoesntExist"));
+ QPixmap pm2 = icon1.pixmap(32, 32);
+
+ QCOMPARE(pm1.isNull(), false);
+ QCOMPARE(pm1.size(), QSize(16,16));
+ QCOMPARE(pm1.isNull(), pm2.isNull());
+ QCOMPARE(pm1.size(), pm2.size());
+}
+
+
+// During detach, v2 engines are cloned, while v1 engines are only
+// passed on, so v1 engines need to be referenced counted. This test
+// verifies that the engine is destroyed once and only once.
+
+class IconEngine : public QIconEngine
+{
+public:
+ ~IconEngine() { destructorCalled++; }
+ virtual void paint(QPainter *, const QRect &, QIcon::Mode, QIcon::State) { }
+ static int destructorCalled;
+};
+int IconEngine::destructorCalled = 0;
+
+void tst_QIcon::task239461_custom_iconengine_crash()
+{
+ QIconEngine *engine = new IconEngine();
+ {
+ QIcon icon(engine);
+ QIcon icon2 = icon;
+
+ QPixmap pixmap(32, 32);
+ icon.addPixmap(pixmap);
+ }
+ QCOMPARE(IconEngine::destructorCalled, 1);
+}
+
+
+QTEST_MAIN(tst_QIcon)
+#include "tst_qicon.moc"
diff --git a/tests/auto/gui/image/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc
new file mode 100644
index 0000000000..7925a33c84
--- /dev/null
+++ b/tests/auto/gui/image/qicon/tst_qicon.qrc
@@ -0,0 +1,20 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+<file>image.png</file>
+<file>rect.png</file>
+<file>./icons/testtheme/16x16/actions/appointment-new.png</file>
+<file>./icons/testtheme/22x22/actions/appointment-new.png</file>
+<file>./icons/testtheme/32x32/actions/appointment-new.png</file>
+<file>./icons/testtheme/index.theme</file>
+<file>./icons/testtheme/scalable/actions/svg-only.svg</file>
+<file>./icons/themeparent/16x16/actions/address-book-new.png</file>
+<file>./icons/themeparent/16x16/actions/appointment-new.png</file>
+<file>./icons/themeparent/22x22/actions/address-book-new.png</file>
+<file>./icons/themeparent/22x22/actions/appointment-new.png</file>
+<file>./icons/themeparent/32x32/actions/address-book-new.png</file>
+<file>./icons/themeparent/32x32/actions/appointment-new.png</file>
+<file>./icons/themeparent/index.theme</file>
+<file>./icons/themeparent/scalable/actions/address-book-new.svg</file>
+<file>./icons/themeparent/scalable/actions/appointment-new.svg</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/gui/image/qimage/.gitignore b/tests/auto/gui/image/qimage/.gitignore
new file mode 100644
index 0000000000..d8afbffa72
--- /dev/null
+++ b/tests/auto/gui/image/qimage/.gitignore
@@ -0,0 +1 @@
+tst_qimage
diff --git a/tests/auto/gui/image/qimage/images/image.bmp b/tests/auto/gui/image/qimage/images/image.bmp
new file mode 100644
index 0000000000..39640e43e9
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.gif b/tests/auto/gui/image/qimage/images/image.gif
new file mode 100644
index 0000000000..2c5a7f87e9
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.ico b/tests/auto/gui/image/qimage/images/image.ico
new file mode 100644
index 0000000000..7312d20f87
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.ico
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.jpg b/tests/auto/gui/image/qimage/images/image.jpg
new file mode 100644
index 0000000000..7611322b1b
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.pbm b/tests/auto/gui/image/qimage/images/image.pbm
new file mode 100644
index 0000000000..67e5efa3e9
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.pbm
@@ -0,0 +1,8 @@
+P1
+16 6
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
diff --git a/tests/auto/gui/image/qimage/images/image.pgm b/tests/auto/gui/image/qimage/images/image.pgm
new file mode 100644
index 0000000000..443bf40964
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.pgm
@@ -0,0 +1,10 @@
+P2
+24 7
+15
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
+0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
+0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
+0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
+0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/tests/auto/gui/image/qimage/images/image.png b/tests/auto/gui/image/qimage/images/image.png
new file mode 100644
index 0000000000..7d4890a7ff
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.png
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.ppm b/tests/auto/gui/image/qimage/images/image.ppm
new file mode 100644
index 0000000000..2a5640e189
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.ppm
@@ -0,0 +1,7 @@
+P3
+4 4
+15
+ 0 0 0 0 0 0 0 0 0 15 0 15
+ 0 0 0 0 15 7 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 15 7 0 0 0
+15 0 15 0 0 0 0 0 0 0 0 0 \ No newline at end of file
diff --git a/tests/auto/gui/image/qimage/images/image.tif b/tests/auto/gui/image/qimage/images/image.tif
new file mode 100644
index 0000000000..ee0637cf25
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimage/images/image.xbm b/tests/auto/gui/image/qimage/images/image.xbm
new file mode 100644
index 0000000000..d0e0fcf2c1
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.xbm
@@ -0,0 +1,5 @@
+#define Cloverleaf_width 9
+#define Cloverleaf_height 9
+static unsigned char Cloverleaf_bits[] = {
+ 0xc6, 0x00, 0x29, 0x01, 0x29, 0x01, 0xfe, 0x00, 0x28, 0x00, 0xfe, 0x00,
+ 0x29, 0x01, 0x29, 0x01, 0xc6, 0x00, };
diff --git a/tests/auto/gui/image/qimage/images/image.xpm b/tests/auto/gui/image/qimage/images/image.xpm
new file mode 100644
index 0000000000..264ba401e6
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/image.xpm
@@ -0,0 +1,261 @@
+/* XPM */
+static char * foo_xpm[] = {
+"256 256 2 1",
+" c None",
+". c #E22626",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................................"};
diff --git a/tests/auto/gui/image/qimage/qimage.pro b/tests/auto/gui/image/qimage/qimage.pro
new file mode 100644
index 0000000000..b517bc1237
--- /dev/null
+++ b/tests/auto/gui/image/qimage/qimage.pro
@@ -0,0 +1,23 @@
+load(qttest_p4)
+SOURCES += tst_qimage.cpp
+
+QT += core-private gui-private
+
+wince*: {
+ addImages.files = images/*
+ addImages.path = images
+ DEPLOYMENT += addImages
+ DEFINES += SRCDIR=\\\".\\\"
+} else:symbian {
+ TARGET.EPOCHEAPSIZE = 0x200000 0x800000
+ addImages.files = images/*
+ addImages.path = images
+ DEPLOYMENT += addImages
+ qt_not_deployed {
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll qtiff.dll qico.dll
+ imagePlugins.path = imageformats
+ DEPLOYMENT += imagePlugins
+ }
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD\\\"
+}
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
new file mode 100644
index 0000000000..dce2957ae4
--- /dev/null
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -0,0 +1,2014 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include <qimage.h>
+#include <qimagereader.h>
+#include <qlist.h>
+#include <qmatrix.h>
+#include <stdio.h>
+
+#include <qpainter.h>
+#include <private/qdrawhelper_p.h>
+
+
+//TESTED_CLASS=
+//TESTED_FILES=
+#if defined(Q_OS_SYMBIAN)
+# define SRCDIR ""
+#endif
+
+Q_DECLARE_METATYPE(QImage::Format)
+Q_DECLARE_METATYPE(Qt::GlobalColor)
+
+class tst_QImage : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QImage();
+
+private slots:
+ void swap();
+ void create();
+ void createInvalidXPM();
+ void createFromUChar();
+ void formatHandlersInput_data();
+ void formatHandlersInput();
+
+ void setAlphaChannel_data();
+ void setAlphaChannel();
+
+ void alphaChannel();
+
+ void convertToFormat_data();
+ void convertToFormat();
+
+ void convertToFormatRgb888ToRGB32();
+
+ void createAlphaMask_data();
+ void createAlphaMask();
+#ifndef QT_NO_IMAGE_HEURISTIC_MASK
+ void createHeuristicMask();
+#endif
+
+ void dotsPerMeterZero();
+
+ void convertToFormatPreserveDotsPrMeter();
+#ifndef QT_NO_IMAGE_TEXT
+ void convertToFormatPreserveText();
+#endif
+
+ void rotate_data();
+ void rotate();
+
+ void copy();
+
+ void setPixel_data();
+ void setPixel();
+
+ void setColorCount();
+ void setColor();
+
+ void rasterClipping();
+
+ void pointOverloads();
+ void destructor();
+ void cacheKey();
+
+ void smoothScale();
+ void smoothScale2();
+ void smoothScale3();
+
+ void smoothScaleBig();
+ void smoothScaleAlpha();
+
+ void transformed_data();
+ void transformed();
+ void transformed2();
+
+ void scaled();
+
+ void paintEngine();
+ void setAlphaChannelWhilePainting();
+
+ void smoothScaledSubImage();
+
+ void nullSize_data();
+ void nullSize();
+
+ void premultipliedAlphaConsistency();
+
+ void compareIndexed();
+
+ void fillColor_data();
+ void fillColor();
+
+ void fillColorWithAlpha();
+
+ void rgbSwapped_data();
+ void rgbSwapped();
+
+ void deepCopyWhenPaintingActive();
+ void scaled_QTBUG19157();
+};
+
+tst_QImage::tst_QImage()
+
+{
+}
+
+void tst_QImage::swap()
+{
+ QImage i1( 16, 16, QImage::Format_RGB32 ), i2( 32, 32, QImage::Format_RGB32 );
+ i1.fill( Qt::white );
+ i2.fill( Qt::black );
+ const qint64 i1k = i1.cacheKey();
+ const qint64 i2k = i2.cacheKey();
+ i1.swap(i2);
+ QCOMPARE(i1.cacheKey(), i2k);
+ QCOMPARE(i1.size(), QSize(32,32));
+ QCOMPARE(i2.cacheKey(), i1k);
+ QCOMPARE(i2.size(), QSize(16,16));
+}
+
+// Test if QImage (or any functions called from QImage) throws an
+// exception when creating an extremely large image.
+// QImage::create() should return "false" in this case.
+void tst_QImage::create()
+{
+ bool cr = true;
+#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE)
+ QT_TRY {
+#endif
+ //QImage image(7000000, 7000000, 8, 256, QImage::IgnoreEndian);
+ QImage image(7000000, 7000000, QImage::Format_Indexed8);
+ image.setColorCount(256);
+ cr = !image.isNull();
+#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE)
+ } QT_CATCH (...) {
+ }
+#endif
+ QVERIFY( !cr );
+}
+
+void tst_QImage::createInvalidXPM()
+{
+ QTest::ignoreMessage(QtWarningMsg, "QImage::QImage(), XPM is not supported");
+ const char *xpm[] = {""};
+ QImage invalidXPM(xpm);
+ QVERIFY(invalidXPM.isNull());
+}
+
+void tst_QImage::createFromUChar()
+{
+ uchar data[] = {
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ 0xFF,
+#endif
+ 1,1,1, 0xFF, 2,2,2, 0xFF, 3,3,3, 0xFF, 4,4,4,
+#if Q_BYTE_ORDER != Q_BIG_ENDIAN
+ 0xFF,
+#endif
+ };
+
+ // When the data is const, nothing you do to the image will change the source data.
+ QImage i1((const uchar*)data, 2, 2, 8, QImage::Format_RGB32);
+ QCOMPARE(i1.pixel(0,0), 0xFF010101U);
+ QCOMPARE(i1.pixel(1,0), 0xFF020202U);
+ QCOMPARE(i1.pixel(0,1), 0xFF030303U);
+ QCOMPARE(i1.pixel(1,1), 0xFF040404U);
+ {
+ QImage i(i1);
+ i.setPixel(0,0,5);
+ }
+ QCOMPARE(i1.pixel(0,0), 0xFF010101U);
+ QCOMPARE(*(QRgb*)data, 0xFF010101U);
+ *((QRgb*)i1.bits()) = 7U;
+ QCOMPARE(i1.pixel(0,0), 7U);
+ QCOMPARE(*(QRgb*)data, 0xFF010101U);
+
+ // Changing copies should not change the original image or data.
+ {
+ QImage i(i1);
+ i.setPixel(0,0,5);
+ QCOMPARE(*(QRgb*)data, 0xFF010101U);
+ i1.setPixel(0,0,9);
+ QCOMPARE(i1.pixel(0,0), 0xFF000009U);
+ QCOMPARE(i.pixel(0,0), 0xFF000005U);
+ }
+ QCOMPARE(i1.pixel(0,0), 0xFF000009U);
+
+ // When the data is non-const, nothing you do to copies of the image will change the source data,
+ // but changing the image (here via bits()) will change the source data.
+ QImage i2((uchar*)data, 2, 2, 8, QImage::Format_RGB32);
+ QCOMPARE(i2.pixel(0,0), 0xFF010101U);
+ QCOMPARE(i2.pixel(1,0), 0xFF020202U);
+ QCOMPARE(i2.pixel(0,1), 0xFF030303U);
+ QCOMPARE(i2.pixel(1,1), 0xFF040404U);
+ {
+ QImage i(i2);
+ i.setPixel(0,0,5);
+ }
+ QCOMPARE(i2.pixel(0,0), 0xFF010101U);
+ QCOMPARE(*(QRgb*)data, 0xFF010101U);
+ *((QRgb*)i2.bits()) = 7U;
+ QCOMPARE(i2.pixel(0,0), 7U);
+ QCOMPARE(*(QRgb*)data, 7U);
+
+ // Changing the data will change the image in either case.
+ QImage i3((uchar*)data, 2, 2, 8, QImage::Format_RGB32);
+ QImage i4((const uchar*)data, 2, 2, 8, QImage::Format_RGB32);
+ *(QRgb*)data = 6U;
+ QCOMPARE(i3.pixel(0,0), 6U);
+ QCOMPARE(i4.pixel(0,0), 6U);
+}
+
+void tst_QImage::formatHandlersInput_data()
+{
+ QTest::addColumn<QString>("testFormat");
+ QTest::addColumn<QString>("testFile");
+ #ifdef Q_OS_SYMBIAN
+ const QString prefix = QLatin1String(SRCDIR) + "images/";
+ #else
+ const QString prefix = QLatin1String(SRCDIR) + "/images/";
+ #endif
+
+ // add a new line here when a file is added
+ QTest::newRow("ICO") << "ICO" << prefix + "image.ico";
+ QTest::newRow("PNG") << "PNG" << prefix + "image.png";
+ QTest::newRow("GIF") << "GIF" << prefix + "image.gif";
+ QTest::newRow("BMP") << "BMP" << prefix + "image.bmp";
+ QTest::newRow("JPEG") << "JPEG" << prefix + "image.jpg";
+ QTest::newRow("PBM") << "PBM" << prefix + "image.pbm";
+ QTest::newRow("PGM") << "PGM" << prefix + "image.pgm";
+ QTest::newRow("PPM") << "PPM" << prefix + "image.ppm";
+ QTest::newRow("XBM") << "XBM" << prefix + "image.xbm";
+ QTest::newRow("XPM") << "XPM" << prefix + "image.xpm";
+#if defined QTEST_HAVE_TIFF
+ QTest::newRow("TIFF") << "TIFF" << prefix + "image.tif";
+#endif
+}
+
+void tst_QImage::formatHandlersInput()
+{
+ QFETCH(QString, testFormat);
+ QFETCH(QString, testFile);
+ QList<QByteArray> formats = QImageReader::supportedImageFormats();
+ // qDebug("Image input formats : %s", formats.join(" | ").latin1());
+
+ bool formatSupported = false;
+ for (QList<QByteArray>::Iterator it = formats.begin(); it != formats.end(); ++it) {
+ if (*it == testFormat.toLower()) {
+ formatSupported = true;
+ break;
+ }
+ }
+ if (formatSupported) {
+// qDebug(QImage::imageFormat(testFile));
+ QCOMPARE(testFormat.toLatin1().toLower(), QImageReader::imageFormat(testFile));
+ } else {
+ QString msg = "Format not supported : ";
+ QSKIP(QString(msg + testFormat).toLatin1(), SkipSingle);
+ }
+}
+
+void tst_QImage::setAlphaChannel_data()
+{
+ QTest::addColumn<int>("red");
+ QTest::addColumn<int>("green");
+ QTest::addColumn<int>("blue");
+ QTest::addColumn<int>("alpha");
+ QTest::addColumn<bool>("gray");
+
+ QTest::newRow("red at 0%, gray") << 255 << 0 << 0 << 0 << true;
+ QTest::newRow("red at 25%, gray") << 255 << 0 << 0 << 63 << true;
+ QTest::newRow("red at 50%, gray") << 255 << 0 << 0 << 127 << true;
+ QTest::newRow("red at 100%, gray") << 255 << 0 << 0 << 191 << true;
+ QTest::newRow("red at 0%, 32bit") << 255 << 0 << 0 << 0 << false;
+ QTest::newRow("red at 25%, 32bit") << 255 << 0 << 0 << 63 << false;
+ QTest::newRow("red at 50%, 32bit") << 255 << 0 << 0 << 127 << false;
+ QTest::newRow("red at 100%, 32bit") << 255 << 0 << 0 << 191 << false;
+
+ QTest::newRow("green at 0%, gray") << 0 << 255 << 0 << 0 << true;
+ QTest::newRow("green at 25%, gray") << 0 << 255 << 0 << 63 << true;
+ QTest::newRow("green at 50%, gray") << 0 << 255 << 0 << 127 << true;
+ QTest::newRow("green at 100%, gray") << 0 << 255 << 0 << 191 << true;
+ QTest::newRow("green at 0%, 32bit") << 0 << 255 << 0 << 0 << false;
+ QTest::newRow("green at 25%, 32bit") << 0 << 255 << 0 << 63 << false;
+ QTest::newRow("green at 50%, 32bit") << 0 << 255 << 0 << 127 << false;
+ QTest::newRow("green at 100%, 32bit") << 0 << 255 << 0 << 191 << false;
+
+ QTest::newRow("blue at 0%, gray") << 0 << 0 << 255 << 0 << true;
+ QTest::newRow("blue at 25%, gray") << 0 << 0 << 255 << 63 << true;
+ QTest::newRow("blue at 50%, gray") << 0 << 0 << 255 << 127 << true;
+ QTest::newRow("blue at 100%, gray") << 0 << 0 << 255 << 191 << true;
+ QTest::newRow("blue at 0%, 32bit") << 0 << 0 << 255 << 0 << false;
+ QTest::newRow("blue at 25%, 32bit") << 0 << 0 << 255 << 63 << false;
+ QTest::newRow("blue at 50%, 32bit") << 0 << 0 << 255 << 127 << false;
+ QTest::newRow("blue at 100%, 32bit") << 0 << 0 << 255 << 191 << false;
+}
+
+void tst_QImage::setAlphaChannel()
+{
+ QFETCH(int, red);
+ QFETCH(int, green);
+ QFETCH(int, blue);
+ QFETCH(int, alpha);
+ QFETCH(bool, gray);
+
+ int width = 100;
+ int height = 100;
+
+ QImage image(width, height, QImage::Format_RGB32);
+ image.fill(qRgb(red, green, blue));
+
+ // Create the alpha channel
+ QImage alphaChannel;
+ if (gray) {
+ alphaChannel = QImage(width, height, QImage::Format_Indexed8);
+ alphaChannel.setColorCount(256);
+ for (int i=0; i<256; ++i)
+ alphaChannel.setColor(i, qRgb(i, i, i));
+ alphaChannel.fill(alpha);
+ } else {
+ alphaChannel = QImage(width, height, QImage::Format_ARGB32);
+ alphaChannel.fill(qRgb(alpha, alpha, alpha));
+ }
+
+ image.setAlphaChannel(alphaChannel);
+ image = image.convertToFormat(QImage::Format_ARGB32);
+ QVERIFY(image.format() == QImage::Format_ARGB32);
+
+ // alpha of 0 becomes black at a=0 due to premultiplication
+ QRgb pixel = alpha == 0 ? 0 : qRgba(red, green, blue, alpha);
+ bool allPixelsOK = true;
+ for (int y=0; y<height; ++y) {
+ for (int x=0; x<width; ++x) {
+ allPixelsOK &= image.pixel(x, y) == pixel;
+ }
+ }
+ QVERIFY(allPixelsOK);
+
+ QImage outAlpha = image.alphaChannel();
+ QCOMPARE(outAlpha.size(), image.size());
+
+ bool allAlphaOk = true;
+ for (int y=0; y<height; ++y) {
+ for (int x=0; x<width; ++x) {
+ allAlphaOk &= outAlpha.pixelIndex(x, y) == alpha;
+ }
+ }
+ QVERIFY(allAlphaOk);
+
+}
+
+void tst_QImage::alphaChannel()
+{
+ QImage img(10, 10, QImage::Format_Mono);
+ img.setColor(0, Qt::transparent);
+ img.setColor(1, Qt::black);
+ img.fill(0);
+
+ QPainter p(&img);
+ p.fillRect(2, 2, 6, 6, Qt::black);
+ p.end();
+
+ QCOMPARE(img.alphaChannel(), img.convertToFormat(QImage::Format_ARGB32).alphaChannel());
+}
+
+void tst_QImage::convertToFormat_data()
+{
+ QTest::addColumn<int>("inFormat");
+ QTest::addColumn<uint>("inPixel");
+ QTest::addColumn<int>("resFormat");
+ QTest::addColumn<uint>("resPixel");
+
+ QTest::newRow("red rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> argb32") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("red rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_RGB16) << 0xffff0000;
+ QTest::newRow("green rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_RGB16) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_RGB16) << 0xff0000ff;
+ QTest::newRow("funky rgb32 -> rgb16") << int(QImage::Format_RGB32) << 0xfff0c080
+ << int(QImage::Format_RGB16) << 0xfff7c384;
+
+ QTest::newRow("red rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_ARGB32_Premultiplied) << 0xffff0000;
+ QTest::newRow("green rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_ARGB32_Premultiplied) <<0xff00ff00;
+ QTest::newRow("blue rgb32 -> argb32_pm") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_ARGB32_Premultiplied) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u;
+ QTest::newRow("semigreen argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u;
+ QTest::newRow("semiblue argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu;
+ QTest::newRow("semiwhite argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7fffffffu
+ << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu;
+ QTest::newRow("semiblack argb32 -> pm") << int(QImage::Format_ARGB32) << 0x7f000000u
+ << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u;
+
+ QTest::newRow("semired pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_ARGB32) << 0x7fff0000u;
+ QTest::newRow("semigreen pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_ARGB32) << 0x7f00ff00u;
+ QTest::newRow("semiblue pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_ARGB32) << 0x7f0000ffu;
+ QTest::newRow("semiwhite pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_ARGB32) << 0x7fffffffu;
+ QTest::newRow("semiblack pm -> argb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_ARGB32) << 0x7f000000u;
+
+ QTest::newRow("semired pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_RGB32) << 0xffff0000u;
+ QTest::newRow("semigreen pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_RGB32) << 0xff00ff00u;
+ QTest::newRow("semiblue pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_RGB32) << 0xff0000ffu;
+ QTest::newRow("semiwhite pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_RGB32) << 0xffffffffu;
+ QTest::newRow("semiblack pm -> rgb32") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_RGB32) << 0xff000000u;
+
+ QTest::newRow("semired argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_RGB32) << 0xffff0000u;
+ QTest::newRow("semigreen argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_RGB32) << 0xff00ff00u;
+ QTest::newRow("semiblue argb32 -> rgb32") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_RGB32) << 0xff0000ffu;
+ QTest::newRow("semiwhite argb -> rgb32") << int(QImage::Format_ARGB32) << 0x7fffffffu
+ << int(QImage::Format_RGB32) << 0xffffffffu;
+ QTest::newRow("semiblack argb -> rgb32") << int(QImage::Format_ARGB32) << 0x7f000000u
+ << int(QImage::Format_RGB32) << 0xff000000u;
+
+ QTest::newRow("black mono -> rgb32") << int(QImage::Format_Mono) << 0x00000000u
+ << int(QImage::Format_RGB32) << 0xff000000u;
+
+ QTest::newRow("white mono -> rgb32") << int(QImage::Format_Mono) << 0x00000001u
+ << int(QImage::Format_RGB32) << 0xffffffffu;
+ QTest::newRow("red rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> argb32") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+ QTest::newRow("red rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_RGB16) << 0xffff0000;
+ QTest::newRow("green rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_RGB16) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> rgb16") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_RGB16) << 0xff0000ff;
+ QTest::newRow("semired argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_RGB16) << 0xffff0000;
+ QTest::newRow("semigreen argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_RGB16) << 0xff00ff00;
+ QTest::newRow("semiblue argb32 -> rgb16") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_RGB16) << 0xff0000ff;
+ QTest::newRow("semired pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_RGB16) << 0xffff0000u;
+
+ QTest::newRow("semigreen pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_RGB16) << 0xff00ff00u;
+ QTest::newRow("semiblue pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_RGB16) << 0xff0000ffu;
+ QTest::newRow("semiwhite pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_RGB16) << 0xffffffffu;
+ QTest::newRow("semiblack pm -> rgb16") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_RGB16) << 0xff000000u;
+
+ QTest::newRow("mono -> mono lsb") << int(QImage::Format_Mono) << 1u
+ << int(QImage::Format_MonoLSB) << 0xffffffffu;
+ QTest::newRow("mono lsb -> mono") << int(QImage::Format_MonoLSB) << 1u
+ << int(QImage::Format_Mono) << 0xffffffffu;
+
+ QTest::newRow("red rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_RGB666) << 0xffff0000;
+ QTest::newRow("green rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_RGB666) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> rgb666") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_RGB666) << 0xff0000ff;
+
+ QTest::newRow("red rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_RGB666) << 0xffff0000;
+ QTest::newRow("green rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_RGB666) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> rgb666") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_RGB666) << 0xff0000ff;
+
+ QTest::newRow("red rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_RGB555) << 0xffff0000;
+ QTest::newRow("green rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_RGB555) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_RGB555) << 0xff0000ff;
+ QTest::newRow("funky rgb32 -> rgb15") << int(QImage::Format_RGB32) << 0xfff0c080
+ << int(QImage::Format_RGB555) << 0xfff7c684;
+
+ QTest::newRow("red rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_RGB555) << 0xffff0000;
+ QTest::newRow("green rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_RGB555) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_RGB555) << 0xff0000ff;
+ QTest::newRow("funky rgb16 -> rgb15") << int(QImage::Format_RGB16) << 0xfff0c080
+ << int(QImage::Format_RGB555) << 0xfff7c684;
+
+ QTest::newRow("red rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000;
+ QTest::newRow("green rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> argb8565") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff;
+
+ QTest::newRow("red rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000;
+ QTest::newRow("green rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> argb8565") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff;
+
+ QTest::newRow("red argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue argb8565 -> argb32") << int(QImage::Format_ARGB8565_Premultiplied) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b0000u;
+ QTest::newRow("semigreen argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f007d00u;
+ QTest::newRow("semiblue argb32 -> argb8565") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f00007bu;
+
+ QTest::newRow("semired pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b0000u;
+ QTest::newRow("semigreen pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f007d00u;
+ QTest::newRow("semiblue pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f00007bu;
+ QTest::newRow("semiwhite pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f7b7d7bu;
+ QTest::newRow("semiblack pm -> argb8565") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_ARGB8565_Premultiplied) << 0x7f000000u;
+
+ QTest::newRow("red rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue rgb666 -> argb32") << int(QImage::Format_RGB666) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_RGB666) << 0xffff0000;
+ QTest::newRow("semigreen argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_RGB666) << 0xff00ff00;
+ QTest::newRow("semiblue argb32 -> rgb666") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_RGB666) << 0xff0000ff;
+
+ QTest::newRow("semired pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_RGB666) << 0xffff0000u;
+ QTest::newRow("semigreen pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_RGB666) << 0xff00ff00u;
+ QTest::newRow("semiblue pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_RGB666) << 0xff0000ffu;
+ QTest::newRow("semiwhite pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_RGB666) << 0xffffffffu;
+ QTest::newRow("semiblack pm -> rgb666") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_RGB666) << 0xff000000u;
+
+ QTest::newRow("red rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue rgb15 -> argb32") << int(QImage::Format_RGB555) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_RGB555) << 0xffff0000;
+ QTest::newRow("semigreen argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_RGB555) << 0xff00ff00;
+ QTest::newRow("semiblue argb32 -> rgb15") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_RGB555) << 0xff0000ff;
+
+ QTest::newRow("semired pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_RGB555) << 0xffff0000u;
+ QTest::newRow("semigreen pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_RGB555) << 0xff00ff00u;
+ QTest::newRow("semiblue pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_RGB555) << 0xff0000ffu;
+ QTest::newRow("semiwhite pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_RGB555) << 0xffffffffu;
+ QTest::newRow("semiblack pm -> rgb15") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_RGB555) << 0xff000000u;
+
+
+ QTest::newRow("red rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000;
+ QTest::newRow("green rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> argb8555") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff;
+
+ QTest::newRow("red rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000;
+ QTest::newRow("green rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> argb8555") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff;
+
+ QTest::newRow("red argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue argb8555 -> argb32") << int(QImage::Format_ARGB8555_Premultiplied) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b0000u;
+ QTest::newRow("semigreen argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f007b00u;
+ QTest::newRow("semiblue argb32 -> argb8555") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f00007bu;
+
+ QTest::newRow("semired pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b0000u;
+ QTest::newRow("semigreen pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f007b00u;
+ QTest::newRow("semiblue pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f00007bu;
+ QTest::newRow("semiwhite pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f7b7b7bu;
+ QTest::newRow("semiblack pm -> argb8555") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_ARGB8555_Premultiplied) << 0x7f000000u;
+
+ QTest::newRow("red rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xffff0000
+ << int(QImage::Format_RGB888) << 0xffff0000;
+ QTest::newRow("green rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xff00ff00
+ << int(QImage::Format_RGB888) << 0xff00ff00;
+ QTest::newRow("blue rgb32 -> rgb888") << int(QImage::Format_RGB32) << 0xff0000ff
+ << int(QImage::Format_RGB888) << 0xff0000ff;
+
+ QTest::newRow("red rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xffff0000
+ << int(QImage::Format_RGB888) << 0xffff0000;
+ QTest::newRow("green rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xff00ff00
+ << int(QImage::Format_RGB888) << 0xff00ff00;
+ QTest::newRow("blue rgb16 -> rgb888") << int(QImage::Format_RGB16) << 0xff0000ff
+ << int(QImage::Format_RGB888) << 0xff0000ff;
+
+ QTest::newRow("red rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xffff0000
+ << int(QImage::Format_ARGB32) << 0xffff0000;
+ QTest::newRow("green rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xff00ff00
+ << int(QImage::Format_ARGB32) << 0xff00ff00;
+ QTest::newRow("blue rgb888 -> argb32") << int(QImage::Format_RGB888) << 0xff0000ff
+ << int(QImage::Format_ARGB32) << 0xff0000ff;
+
+ QTest::newRow("semired argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7fff0000u
+ << int(QImage::Format_RGB888) << 0xffff0000;
+ QTest::newRow("semigreen argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7f00ff00u
+ << int(QImage::Format_RGB888) << 0xff00ff00;
+ QTest::newRow("semiblue argb32 -> rgb888") << int(QImage::Format_ARGB32) << 0x7f0000ffu
+ << int(QImage::Format_RGB888) << 0xff0000ff;
+
+ QTest::newRow("semired pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f0000u
+ << int(QImage::Format_RGB888) << 0xffff0000u;
+ QTest::newRow("semigreen pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f007f00u
+ << int(QImage::Format_RGB888) << 0xff00ff00u;
+ QTest::newRow("semiblue pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f00007fu
+ << int(QImage::Format_RGB888) << 0xff0000ffu;
+ QTest::newRow("semiwhite pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f7f7f7fu
+ << int(QImage::Format_RGB888) << 0xffffffffu;
+ QTest::newRow("semiblack pm -> rgb888") << int(QImage::Format_ARGB32_Premultiplied) << 0x7f000000u
+ << int(QImage::Format_RGB888) << 0xff000000u;
+}
+
+
+void tst_QImage::convertToFormat()
+{
+ QFETCH(int, inFormat);
+ QFETCH(uint, inPixel);
+ QFETCH(int, resFormat);
+ QFETCH(uint, resPixel);
+
+ QImage src(32, 32, QImage::Format(inFormat));
+
+ if (inFormat == QImage::Format_Mono) {
+ src.setColor(0, qRgba(0,0,0,0xff));
+ src.setColor(1, qRgba(255,255,255,0xff));
+ }
+
+ for (int y=0; y<src.height(); ++y)
+ for (int x=0; x<src.width(); ++x)
+ src.setPixel(x, y, inPixel);
+
+ QImage result = src.convertToFormat(QImage::Format(resFormat));
+
+ QCOMPARE(src.width(), result.width());
+ QCOMPARE(src.height(), result.height());
+
+ bool same = true;
+ for (int y=0; y<result.height(); ++y) {
+ for (int x=0; x<result.width(); ++x) {
+ QRgb pixel = result.pixel(x, y);
+ same &= (pixel == resPixel);
+ if (!same) {
+ printf("expect=%08x, result=%08x\n", resPixel, pixel);
+ y = 100000;
+ break;
+ }
+
+ }
+ }
+ QVERIFY(same);
+
+ // repeat tests converting from an image with nonstandard stride
+
+ int dp = (src.depth() < 8 || result.depth() < 8) ? 8 : 1;
+ QImage src2(src.bits() + (dp*src.depth())/8,
+ src.width() - dp*2,
+ src.height(), src.bytesPerLine(),
+ src.format());
+ if (src.depth() < 8)
+ src2.setColorTable(src.colorTable());
+
+ const QImage result2 = src2.convertToFormat(QImage::Format(resFormat));
+
+ QCOMPARE(src2.width(), result2.width());
+ QCOMPARE(src2.height(), result2.height());
+
+ QImage expected2(result.bits() + (dp*result.depth())/8,
+ result.width() - dp*2,
+ result.height(), result.bytesPerLine(),
+ result.format());
+ if (result.depth() < 8)
+ expected2.setColorTable(result.colorTable());
+
+ result2.save("result2.xpm", "XPM");
+ expected2.save("expected2.xpm", "XPM");
+
+ QCOMPARE(result2, expected2);
+ QFile::remove(QLatin1String("result2.xpm"));
+ QFile::remove(QLatin1String("expected2.xpm"));
+}
+
+void tst_QImage::convertToFormatRgb888ToRGB32()
+{
+ // 545 so width % 4 != 0. This ensure there is padding at the end of the scanlines
+ const int height = 545;
+ const int width = 545;
+ QImage source(width, height, QImage::Format_RGB888);
+ for (int y = 0; y < height; ++y) {
+ uchar *srcPixels = source.scanLine(y);
+ for (int x = 0; x < width * 3; ++x)
+ srcPixels[x] = x;
+ }
+
+ QImage rgb32Image = source.convertToFormat(QImage::Format_RGB888);
+ QCOMPARE(rgb32Image.format(), QImage::Format_RGB888);
+ for (int x = 0; x < width; ++x) {
+ for (int y = 0; y < height; ++y)
+ QCOMPARE(rgb32Image.pixel(x, y), source.pixel(x, y));
+ }
+}
+
+void tst_QImage::createAlphaMask_data()
+{
+ QTest::addColumn<int>("x");
+ QTest::addColumn<int>("y");
+ QTest::addColumn<int>("alpha1");
+ QTest::addColumn<int>("alpha2");
+
+ int alphas[] = { 0, 127, 255 };
+
+ for (unsigned a1 = 0; a1 < sizeof(alphas) / sizeof(int); ++a1) {
+ for (unsigned a2 = 0; a2 < sizeof(alphas) / sizeof(int); ++a2) {
+ if (a1 == a2)
+ continue;
+ for (int x=10; x<18; x+=3) {
+ for (int y=100; y<108; y+=3) {
+ QTest::newRow(qPrintable(QString::fromLatin1("x=%1, y=%2, a1=%3, a2=%4").arg(x).arg(y).arg(alphas[a1]).arg(alphas[a2])))
+ << x << y << alphas[a1] << alphas[a2];
+ }
+ }
+ }
+ }
+}
+
+void tst_QImage::createAlphaMask()
+{
+ QFETCH(int, x);
+ QFETCH(int, y);
+ QFETCH(int, alpha1);
+ QFETCH(int, alpha2);
+
+ QSize size(255, 255);
+ int pixelsInLines = size.width() + size.height() - 1;
+ int pixelsOutofLines = size.width() * size.height() - pixelsInLines;
+
+ // Generate an white image with two lines, horizontal at y and vertical at x.
+ // Lines have alpha of alpha2, rest has alpha of alpha1
+ QImage image(size, QImage::Format_ARGB32);
+ for (int cy=0; cy<image.height(); ++cy) {
+ for (int cx=0; cx<image.width(); ++cx) {
+ int alpha = (y == cy || x == cx) ? alpha2 : alpha1;
+ image.setPixel(cx, cy, qRgba(255, 255, 255, alpha));
+ }
+ }
+
+ QImage mask = image.createAlphaMask(Qt::OrderedAlphaDither);
+
+ // Sanity check...
+ QCOMPARE(mask.width(), image.width());
+ QCOMPARE(mask.height(), image.height());
+
+ // Sum up the number of pixels set for both lines and other area
+ int sumAlpha1 = 0;
+ int sumAlpha2 = 0;
+ for (int cy=0; cy<image.height(); ++cy) {
+ for (int cx=0; cx<image.width(); ++cx) {
+ int *alpha = (y == cy || x == cx) ? &sumAlpha2 : &sumAlpha1;
+ *alpha += mask.pixelIndex(cx, cy);
+ }
+ }
+
+ // Compare the set bits to whats expected for that alpha.
+ const int threshold = 5;
+ QVERIFY(qAbs(sumAlpha1 * 255 / pixelsOutofLines - alpha1) < threshold);
+ QVERIFY(qAbs(sumAlpha2 * 255 / pixelsInLines - alpha2) < threshold);
+}
+
+void tst_QImage::dotsPerMeterZero()
+{
+ QImage img(100, 100, QImage::Format_RGB32);
+ QVERIFY(!img.isNull());
+
+ int defaultDpmX = img.dotsPerMeterX();
+ int defaultDpmY = img.dotsPerMeterY();
+ QVERIFY(defaultDpmX != 0);
+ QVERIFY(defaultDpmY != 0);
+
+ img.setDotsPerMeterX(0);
+ img.setDotsPerMeterY(0);
+
+ QCOMPARE(img.dotsPerMeterX(), defaultDpmX);
+ QCOMPARE(img.dotsPerMeterY(), defaultDpmY);
+}
+
+void tst_QImage::rotate_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+ QTest::addColumn<int>("degrees");
+
+ QVector<int> degrees;
+ degrees << 0 << 90 << 180 << 270;
+
+ foreach (int d, degrees) {
+ QString title = QString("%1 %2").arg(d);
+ QTest::newRow(qPrintable(title.arg("Format_RGB32")))
+ << QImage::Format_RGB32 << d;
+ QTest::newRow(qPrintable(title.arg("Format_ARGB32")))
+ << QImage::Format_ARGB32 << d;
+ QTest::newRow(qPrintable(title.arg("Format_ARGB32_Premultiplied")))
+ << QImage::Format_ARGB32_Premultiplied << d;
+ QTest::newRow(qPrintable(title.arg("Format_RGB16")))
+ << QImage::Format_RGB16 << d;
+ QTest::newRow(qPrintable(title.arg("Format_ARGB8565_Premultiplied")))
+ << QImage::Format_ARGB8565_Premultiplied << d;
+ QTest::newRow(qPrintable(title.arg("Format_RGB666")))
+ << QImage::Format_RGB666 << d;
+ QTest::newRow(qPrintable(title.arg("Format_RGB555")))
+ << QImage::Format_RGB555 << d;
+ QTest::newRow(qPrintable(title.arg("Format_ARGB8555_Premultiplied")))
+ << QImage::Format_ARGB8555_Premultiplied << d;
+ QTest::newRow(qPrintable(title.arg("Format_RGB888")))
+ << QImage::Format_RGB888 << d;
+ QTest::newRow(qPrintable(title.arg("Format_Indexed8")))
+ << QImage::Format_Indexed8 << d;
+ }
+}
+
+void tst_QImage::rotate()
+{
+ QFETCH(QImage::Format, format);
+ QFETCH(int, degrees);
+
+ // test if rotate90 is lossless
+ int w = 54;
+ int h = 13;
+ QImage original(w, h, format);
+ original.fill(qRgb(255,255,255));
+
+ if (format == QImage::Format_Indexed8) {
+ original.setColorCount(256);
+ for (int i = 0; i < 255; ++i)
+ original.setColor(i, qRgb(0, i, i));
+ }
+
+ if (original.colorTable().isEmpty()) {
+ for (int x = 0; x < w; ++x) {
+ original.setPixel(x,0, qRgb(x,0,128));
+ original.setPixel(x,h - 1, qRgb(0,255 - x,128));
+ }
+ for (int y = 0; y < h; ++y) {
+ original.setPixel(0, y, qRgb(y,0,255));
+ original.setPixel(w - 1, y, qRgb(0,255 - y,255));
+ }
+ } else {
+ const int n = original.colorTable().size();
+ for (int x = 0; x < w; ++x) {
+ original.setPixel(x, 0, x % n);
+ original.setPixel(x, h - 1, n - (x % n) - 1);
+ }
+ for (int y = 0; y < h; ++y) {
+ original.setPixel(0, y, y % n);
+ original.setPixel(w - 1, y, n - (y % n) - 1);
+ }
+ }
+
+ // original.save("rotated90_original.png", "png");
+
+ // Initialize the matrix manually (do not use rotate) to avoid rounding errors
+ QMatrix matRotate90;
+ matRotate90.rotate(degrees);
+ QImage dest = original;
+ // And rotate it 4 times, then the image should be identical to the original
+ for (int i = 0; i < 4 ; ++i) {
+ dest = dest.transformed(matRotate90);
+ }
+
+ // Make sure they are similar in format before we compare them.
+ dest = dest.convertToFormat(format);
+
+ // dest.save("rotated90_result.png","png");
+ QCOMPARE(original, dest);
+
+ // Test with QMatrix::rotate 90 also, since we trust that now
+ matRotate90.rotate(degrees);
+ dest = original;
+ // And rotate it 4 times, then the image should be identical to the original
+ for (int i = 0; i < 4 ; ++i) {
+ dest = dest.transformed(matRotate90);
+ }
+
+ // Make sure they are similar in format before we compare them.
+ dest = dest.convertToFormat(format);
+
+ QCOMPARE(original, dest);
+}
+
+void tst_QImage::copy()
+{
+ // Task 99250
+ {
+ QImage img(16,16,QImage::Format_ARGB32);
+ img.copy(QRect(1000,1,1,1));
+ }
+}
+
+void tst_QImage::setPixel_data()
+{
+ QTest::addColumn<int>("format");
+ QTest::addColumn<uint>("value");
+ QTest::addColumn<uint>("expected");
+
+ QTest::newRow("ARGB32 red") << int(QImage::Format_ARGB32)
+ << 0xffff0000 << 0xffff0000;
+ QTest::newRow("ARGB32 green") << int(QImage::Format_ARGB32)
+ << 0xff00ff00 << 0xff00ff00;
+ QTest::newRow("ARGB32 blue") << int(QImage::Format_ARGB32)
+ << 0xff0000ff << 0xff0000ff;
+ QTest::newRow("RGB16 red") << int(QImage::Format_RGB16)
+ << 0xffff0000 << 0xf800u;
+ QTest::newRow("RGB16 green") << int(QImage::Format_RGB16)
+ << 0xff00ff00 << 0x07e0u;
+ QTest::newRow("RGB16 blue") << int(QImage::Format_RGB16)
+ << 0xff0000ff << 0x001fu;
+ QTest::newRow("ARGB8565_Premultiplied red") << int(QImage::Format_ARGB8565_Premultiplied)
+ << 0xffff0000 << 0xffff0000;
+ QTest::newRow("ARGB8565_Premultiplied green") << int(QImage::Format_ARGB8565_Premultiplied)
+ << 0xff00ff00 << 0xff00ff00;
+ QTest::newRow("ARGB8565_Premultiplied blue") << int(QImage::Format_ARGB8565_Premultiplied)
+ << 0xff0000ff << 0xff0000ff;
+ QTest::newRow("RGB666 red") << int(QImage::Format_RGB666)
+ << 0xffff0000 << 0xffff0000;
+ QTest::newRow("RGB666 green") << int(QImage::Format_RGB666)
+ << 0xff00ff00 << 0xff00ff00;;
+ QTest::newRow("RGB666 blue") << int(QImage::Format_RGB666)
+ << 0xff0000ff << 0xff0000ff;
+ QTest::newRow("RGB555 red") << int(QImage::Format_RGB555)
+ << 0xffff0000 << 0x7c00u;
+ QTest::newRow("RGB555 green") << int(QImage::Format_RGB555)
+ << 0xff00ff00 << 0x03e0u;
+ QTest::newRow("RGB555 blue") << int(QImage::Format_RGB555)
+ << 0xff0000ff << 0x001fu;
+ QTest::newRow("ARGB8555_Premultiplied red") << int(QImage::Format_ARGB8555_Premultiplied)
+ << 0xffff0000 << 0xffff0000;
+ QTest::newRow("ARGB8555_Premultiplied green") << int(QImage::Format_ARGB8555_Premultiplied)
+ << 0xff00ff00 << 0xff00ff00;
+ QTest::newRow("ARGB8555_Premultiplied blue") << int(QImage::Format_ARGB8555_Premultiplied)
+ << 0xff0000ff << 0xff0000ff;
+ QTest::newRow("RGB888 red") << int(QImage::Format_RGB888)
+ << 0xffff0000 << 0xffff0000;
+ QTest::newRow("RGB888 green") << int(QImage::Format_RGB888)
+ << 0xff00ff00 << 0xff00ff00;
+ QTest::newRow("RGB888 blue") << int(QImage::Format_RGB888)
+ << 0xff0000ff << 0xff0000ff;
+}
+
+void tst_QImage::setPixel()
+{
+ QFETCH(int, format);
+ QFETCH(uint, value);
+ QFETCH(uint, expected);
+
+ const int w = 13;
+ const int h = 15;
+
+ QImage img(w, h, QImage::Format(format));
+
+ // fill image
+ for (int y = 0; y < h; ++y)
+ for (int x = 0; x < w; ++x)
+ img.setPixel(x, y, value);
+
+ // check pixel values
+ switch (format) {
+ case int(QImage::Format_RGB32):
+ case int(QImage::Format_ARGB32):
+ case int(QImage::Format_ARGB32_Premultiplied):
+ {
+ for (int y = 0; y < h; ++y) {
+ const quint32 *row = (const quint32*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ quint32 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%08x, result=%08x\n",
+ x, y, expected, result);
+ QCOMPARE(uint(result), expected);
+ }
+ }
+ break;
+ }
+ case int(QImage::Format_RGB555):
+ case int(QImage::Format_RGB16):
+ {
+ for (int y = 0; y < h; ++y) {
+ const quint16 *row = (const quint16*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ quint16 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%04x, result=%04x\n",
+ x, y, expected, result);
+ QCOMPARE(uint(result), expected);
+ }
+ }
+ break;
+ }
+ case int(QImage::Format_RGB666):
+ {
+ for (int y = 0; y < h; ++y) {
+ const qrgb666 *row = (const qrgb666*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ quint32 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%04x, result=%04x\n",
+ x, y, expected, result);
+ QCOMPARE(result, expected);
+ }
+ }
+ break;
+ }
+ case int(QImage::Format_ARGB8565_Premultiplied):
+ {
+ for (int y = 0; y < h; ++y) {
+ const qargb8565 *row = (const qargb8565*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ quint32 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%04x, result=%04x\n",
+ x, y, expected, result);
+ QCOMPARE(result, expected);
+ }
+ }
+ break;
+ }
+ case int(QImage::Format_ARGB8555_Premultiplied):
+ {
+ for (int y = 0; y < h; ++y) {
+ const qargb8555 *row = (const qargb8555*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ quint32 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%04x, result=%04x\n",
+ x, y, expected, result);
+ QCOMPARE(result, expected);
+ }
+ }
+ break;
+ }
+ case int(QImage::Format_RGB888):
+ {
+ for (int y = 0; y < h; ++y) {
+ const qrgb888 *row = (const qrgb888*)(img.scanLine(y));
+ for (int x = 0; x < w; ++x) {
+ qrgb888 result = row[x];
+ if (result != expected)
+ printf("[x,y]: %d,%d, expected=%04x, result=%04x\n",
+ x, y, expected, quint32(result));
+ QCOMPARE(uint(result), expected);
+ }
+ }
+ break;
+ }
+ default:
+ qFatal("Test not implemented for format %d", format);
+ }
+}
+
+void tst_QImage::convertToFormatPreserveDotsPrMeter()
+{
+ QImage img(100, 100, QImage::Format_ARGB32_Premultiplied);
+
+ int dpmx = 123;
+ int dpmy = 234;
+ img.setDotsPerMeterX(dpmx);
+ img.setDotsPerMeterY(dpmy);
+ img.fill(0x12345678);
+
+ img = img.convertToFormat(QImage::Format_RGB32);
+
+ QCOMPARE(img.dotsPerMeterX(), dpmx);
+ QCOMPARE(img.dotsPerMeterY(), dpmy);
+}
+
+#ifndef QT_NO_IMAGE_TEXT
+void tst_QImage::convertToFormatPreserveText()
+{
+ QImage img(100, 100, QImage::Format_ARGB32_Premultiplied);
+
+ img.setText("foo", "bar");
+ img.setText("foo2", "bar2");
+ img.fill(0x12345678);
+
+ QStringList listResult;
+ listResult << "foo" << "foo2";
+ QString result = "foo: bar\n\nfoo2: bar2";
+
+ QImage imgResult1 = img.convertToFormat(QImage::Format_RGB32);
+ QCOMPARE(imgResult1.text(), result);
+ QCOMPARE(imgResult1.textKeys(), listResult);
+
+ QVector<QRgb> colorTable(4);
+ for (int i = 0; i < 4; ++i)
+ colorTable[i] = QRgb(42);
+ QImage imgResult2 = img.convertToFormat(QImage::Format_MonoLSB,
+ colorTable);
+ QCOMPARE(imgResult2.text(), result);
+ QCOMPARE(imgResult2.textKeys(), listResult);
+}
+#endif // QT_NO_IMAGE_TEXT
+
+void tst_QImage::setColorCount()
+{
+ QImage img(0, 0, QImage::Format_Indexed8);
+ QTest::ignoreMessage(QtWarningMsg, "QImage::setColorCount: null image");
+ img.setColorCount(256);
+ QCOMPARE(img.colorCount(), 0);
+}
+
+void tst_QImage::setColor()
+{
+ QImage img(0, 0, QImage::Format_Indexed8);
+ img.setColor(0, qRgba(18, 219, 108, 128));
+ QCOMPARE(img.colorCount(), 0);
+
+ QImage img2(1, 1, QImage::Format_Indexed8);
+ img2.setColor(0, qRgba(18, 219, 108, 128));
+ QCOMPARE(img2.colorCount(), 1);
+}
+
+/* Just some sanity checking that we don't draw outside the buffer of
+ * the image. Hopefully this will create crashes or at least some
+ * random test fails when broken.
+ */
+void tst_QImage::rasterClipping()
+{
+ QImage image(10, 10, QImage::Format_RGB32);
+ image.fill(0xffffffff);
+
+ QPainter p(&image);
+
+ p.drawLine(-1000, 5, 5, 5);
+ p.drawLine(-1000, 5, 1000, 5);
+ p.drawLine(5, 5, 1000, 5);
+
+ p.drawLine(5, -1000, 5, 5);
+ p.drawLine(5, -1000, 5, 1000);
+ p.drawLine(5, 5, 5, 1000);
+
+ p.setBrush(Qt::red);
+
+ p.drawEllipse(3, 3, 4, 4);
+ p.drawEllipse(-100, -100, 210, 210);
+
+ p.drawEllipse(-1000, 0, 2010, 2010);
+ p.drawEllipse(0, -1000, 2010, 2010);
+ p.drawEllipse(-2010, -1000, 2010, 2010);
+ p.drawEllipse(-1000, -2010, 2010, 2010);
+ QVERIFY(true);
+}
+
+// Tests the new QPoint overloads in QImage in Qt 4.2
+void tst_QImage::pointOverloads()
+{
+ QImage image(100, 100, QImage::Format_RGB32);
+ image.fill(0xff00ff00);
+
+ // IsValid
+ QVERIFY(image.valid(QPoint(0, 0)));
+ QVERIFY(image.valid(QPoint(99, 0)));
+ QVERIFY(image.valid(QPoint(0, 99)));
+ QVERIFY(image.valid(QPoint(99, 99)));
+
+ QVERIFY(!image.valid(QPoint(50, -1))); // outside on the top
+ QVERIFY(!image.valid(QPoint(50, 100))); // outside on the bottom
+ QVERIFY(!image.valid(QPoint(-1, 50))); // outside on the left
+ QVERIFY(!image.valid(QPoint(100, 50))); // outside on the right
+
+ // Test the pixel setter
+ image.setPixel(QPoint(10, 10), 0xff0000ff);
+ QCOMPARE(image.pixel(10, 10), 0xff0000ff);
+
+ // pixel getter
+ QCOMPARE(image.pixel(QPoint(10, 10)), 0xff0000ff);
+
+ // pixelIndex()
+ QImage indexed = image.convertToFormat(QImage::Format_Indexed8);
+ QCOMPARE(indexed.pixelIndex(10, 10), indexed.pixelIndex(QPoint(10, 10)));
+}
+
+void tst_QImage::destructor()
+{
+ QPolygon poly(6);
+ poly.setPoint(0,-1455, 1435);
+
+ QImage image(100, 100, QImage::Format_RGB32);
+ QPainter ptPix(&image);
+ ptPix.setPen(Qt::black);
+ ptPix.setBrush(Qt::black);
+ ptPix.drawPolygon(poly, Qt::WindingFill);
+ ptPix.end();
+
+}
+
+
+/* XPM */
+static const char *monoPixmap[] = {
+/* width height ncolors chars_per_pixel */
+"4 4 2 1",
+"x c #000000",
+". c #ffffff",
+/* pixels */
+"xxxx",
+"x..x",
+"x..x",
+"xxxx"
+};
+
+
+#ifndef QT_NO_IMAGE_HEURISTIC_MASK
+void tst_QImage::createHeuristicMask()
+{
+ QImage img(monoPixmap);
+ img = img.convertToFormat(QImage::Format_MonoLSB);
+ QImage mask = img.createHeuristicMask();
+ QImage newMask = mask.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+
+ // line 2
+ QVERIFY(newMask.pixel(0,1) != newMask.pixel(1,1));
+ QVERIFY(newMask.pixel(1,1) == newMask.pixel(2,1));
+ QVERIFY(newMask.pixel(2,1) != newMask.pixel(3,1));
+
+ // line 3
+ QVERIFY(newMask.pixel(0,2) != newMask.pixel(1,2));
+ QVERIFY(newMask.pixel(1,2) == newMask.pixel(2,2));
+ QVERIFY(newMask.pixel(2,2) != newMask.pixel(3,2));
+}
+#endif
+
+void tst_QImage::cacheKey()
+{
+ QImage image1(2, 2, QImage::Format_RGB32);
+ qint64 image1_key = image1.cacheKey();
+ QImage image2 = image1;
+
+ QVERIFY(image2.cacheKey() == image1.cacheKey());
+ image2.detach();
+ QVERIFY(image2.cacheKey() != image1.cacheKey());
+ QVERIFY(image1.cacheKey() == image1_key);
+}
+
+void tst_QImage::smoothScale()
+{
+ unsigned int data[2] = { qRgba(0, 0, 0, 0), qRgba(128, 128, 128, 128) };
+
+ QImage imgX((unsigned char *)data, 2, 1, QImage::Format_ARGB32_Premultiplied);
+ QImage imgY((unsigned char *)data, 1, 2, QImage::Format_ARGB32_Premultiplied);
+
+ QImage scaledX = imgX.scaled(QSize(4, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QImage scaledY = imgY.scaled(QSize(1, 4), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ uint *scaled[2] = {
+ (unsigned int *)scaledX.bits(),
+ (unsigned int *)scaledY.bits()
+ };
+
+ int expected[4] = { 0, 32, 96, 128 };
+ for (int image = 0; image < 2; ++image) {
+ for (int index = 0; index < 4; ++index) {
+ for (int component = 0; component < 4; ++component) {
+ int pixel = scaled[image][index];
+ int val = (pixel >> (component * 8)) & 0xff;
+
+ QCOMPARE(val, expected[index]);
+ }
+ }
+ }
+}
+
+// test area sampling
+void tst_QImage::smoothScale2()
+{
+ int sizes[] = { 2, 4, 8, 10, 16, 20, 32, 40, 64, 100, 101, 128, 0 };
+ QImage::Format formats[] = { QImage::Format_ARGB32, QImage::Format_RGB32, QImage::Format_Invalid };
+ for (int i = 0; sizes[i] != 0; ++i) {
+ for (int j = 0; formats[j] != QImage::Format_Invalid; ++j) {
+ int size = sizes[i];
+
+ QRgb expected = formats[j] == QImage::Format_ARGB32 ? qRgba(63, 127, 255, 255) : qRgb(63, 127, 255);
+
+ QImage img(size, size, formats[j]);
+ img.fill(expected);
+
+ // scale x down, y down
+ QImage scaled = img.scaled(QSize(1, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QRgb pixel = scaled.pixel(0, 0);
+ QCOMPARE(qAlpha(pixel), qAlpha(expected));
+ QCOMPARE(qRed(pixel), qRed(expected));
+ QCOMPARE(qGreen(pixel), qGreen(expected));
+ QCOMPARE(qBlue(pixel), qBlue(expected));
+
+ // scale x down, y up
+ scaled = img.scaled(QSize(1, size * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ for (int y = 0; y < scaled.height(); ++y) {
+ pixel = scaled.pixel(0, y);
+ QCOMPARE(qAlpha(pixel), qAlpha(expected));
+ QCOMPARE(qRed(pixel), qRed(expected));
+ QCOMPARE(qGreen(pixel), qGreen(expected));
+ QCOMPARE(qBlue(pixel), qBlue(expected));
+ }
+
+ // scale x up, y down
+ scaled = img.scaled(QSize(size * 2, 1), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ for (int x = 0; x < scaled.width(); ++x) {
+ pixel = scaled.pixel(x, 0);
+ QCOMPARE(qAlpha(pixel), qAlpha(expected));
+ QCOMPARE(qRed(pixel), qRed(expected));
+ QCOMPARE(qGreen(pixel), qGreen(expected));
+ QCOMPARE(qBlue(pixel), qBlue(expected));
+ }
+
+ // scale x up, y up
+ scaled = img.scaled(QSize(size * 2, size * 2), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ for (int y = 0; y < scaled.height(); ++y) {
+ for (int x = 0; x < scaled.width(); ++x) {
+ pixel = scaled.pixel(x, y);
+ QCOMPARE(qAlpha(pixel), qAlpha(expected));
+ QCOMPARE(qRed(pixel), qRed(expected));
+ QCOMPARE(qGreen(pixel), qGreen(expected));
+ QCOMPARE(qBlue(pixel), qBlue(expected));
+ }
+ }
+ }
+ }
+}
+
+static inline int rand8()
+{
+ return int(256. * (qrand() / (RAND_MAX + 1.0)));
+}
+
+// compares img.scale against the bilinear filtering used by QPainter
+void tst_QImage::smoothScale3()
+{
+ QImage img(128, 128, QImage::Format_RGB32);
+ for (int y = 0; y < img.height(); ++y) {
+ for (int x = 0; x < img.width(); ++x) {
+ const int red = rand8();
+ const int green = rand8();
+ const int blue = rand8();
+ const int alpha = 255;
+
+ img.setPixel(x, y, qRgba(red, green, blue, alpha));
+ }
+ }
+
+ qreal scales[2] = { .5, 2 };
+
+ for (int i = 0; i < 2; ++i) {
+ QImage a = img.scaled(img.size() * scales[i], Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QImage b(a.size(), a.format());
+ b.fill(0x0);
+
+ QPainter p(&b);
+ p.setRenderHint(QPainter::SmoothPixmapTransform);
+ p.scale(scales[i], scales[i]);
+ p.drawImage(0, 0, img);
+ p.end();
+ int err = 0;
+
+ for (int y = 0; y < a.height(); ++y) {
+ for (int x = 0; x < a.width(); ++x) {
+ QRgb ca = a.pixel(x, y);
+ QRgb cb = b.pixel(x, y);
+
+ // tolerate a little bit of rounding errors
+ bool r = true;
+ r &= qAbs(qRed(ca) - qRed(cb)) <= 18;
+ r &= qAbs(qGreen(ca) - qGreen(cb)) <= 18;
+ r &= qAbs(qBlue(ca) - qBlue(cb)) <= 18;
+ if (!r)
+ err++;
+ }
+ }
+ QCOMPARE(err, 0);
+ }
+}
+
+void tst_QImage::smoothScaleBig()
+{
+#if defined(Q_OS_WINCE)
+ int bigValue = 2000;
+#elif defined(Q_OS_SYMBIAN)
+ int bigValue = 2000;
+#else
+ int bigValue = 200000;
+#endif
+ QImage tall(4, bigValue, QImage::Format_ARGB32);
+ tall.fill(0x0);
+
+ QImage wide(bigValue, 4, QImage::Format_ARGB32);
+ wide.fill(0x0);
+
+ QImage tallScaled = tall.scaled(4, tall.height() / 4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QImage wideScaled = wide.scaled(wide.width() / 4, 4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ QCOMPARE(tallScaled.pixel(0, 0), QRgb(0x0));
+ QCOMPARE(wideScaled.pixel(0, 0), QRgb(0x0));
+}
+
+void tst_QImage::smoothScaleAlpha()
+{
+ QImage src(128, 128, QImage::Format_ARGB32_Premultiplied);
+ src.fill(0x0);
+
+ QPainter srcPainter(&src);
+ srcPainter.setPen(Qt::NoPen);
+ srcPainter.setBrush(Qt::white);
+ srcPainter.drawEllipse(QRect(QPoint(), src.size()));
+ srcPainter.end();
+
+ QImage dst(32, 32, QImage::Format_ARGB32_Premultiplied);
+ dst.fill(0xffffffff);
+ QImage expected = dst;
+
+ QPainter dstPainter(&dst);
+ dstPainter.drawImage(0, 0, src.scaled(dst.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ dstPainter.end();
+
+ QCOMPARE(dst, expected);
+}
+
+static int count(const QImage &img, int x, int y, int dx, int dy, QRgb pixel)
+{
+ int i = 0;
+ while (x >= 0 && x < img.width() && y >= 0 && y < img.height()) {
+ i += (img.pixel(x, y) == pixel);
+ x += dx;
+ y += dy;
+ }
+ return i;
+}
+
+const int transformed_image_width = 128;
+const int transformed_image_height = 128;
+
+void tst_QImage::transformed_data()
+{
+ QTest::addColumn<QTransform>("transform");
+
+ {
+ QTransform transform;
+ transform.translate(10.4, 10.4);
+ QTest::newRow("Translate") << transform;
+ }
+ {
+ QTransform transform;
+ transform.scale(1.5, 1.5);
+ QTest::newRow("Scale") << transform;
+ }
+ {
+ QTransform transform;
+ transform.rotate(30);
+ QTest::newRow("Rotate 30") << transform;
+ }
+ {
+ QTransform transform;
+ transform.rotate(90);
+ QTest::newRow("Rotate 90") << transform;
+ }
+ {
+ QTransform transform;
+ transform.rotate(180);
+ QTest::newRow("Rotate 180") << transform;
+ }
+ {
+ QTransform transform;
+ transform.rotate(270);
+ QTest::newRow("Rotate 270") << transform;
+ }
+ {
+ QTransform transform;
+ transform.translate(transformed_image_width/2, transformed_image_height/2);
+ transform.rotate(155, Qt::XAxis);
+ transform.translate(-transformed_image_width/2, -transformed_image_height/2);
+ QTest::newRow("Perspective 1") << transform;
+ }
+ {
+ QTransform transform;
+ transform.rotate(155, Qt::XAxis);
+ transform.translate(-transformed_image_width/2, -transformed_image_height/2);
+ QTest::newRow("Perspective 2") << transform;
+ }
+}
+
+void tst_QImage::transformed()
+{
+ QFETCH(QTransform, transform);
+
+ QImage img(transformed_image_width, transformed_image_height, QImage::Format_ARGB32_Premultiplied);
+ QPainter p(&img);
+ p.fillRect(0, 0, img.width(), img.height(), Qt::red);
+ p.drawRect(0, 0, img.width()-1, img.height()-1);
+ p.end();
+
+ QImage transformed = img.transformed(transform, Qt::SmoothTransformation);
+
+ // all borders should have touched pixels
+
+ QVERIFY(count(transformed, 0, 0, 1, 0, 0x0) < transformed.width());
+ QVERIFY(count(transformed, 0, 0, 0, 1, 0x0) < transformed.height());
+
+ QVERIFY(count(transformed, 0, img.height() - 1, 1, 0, 0x0) < transformed.width());
+ QVERIFY(count(transformed, img.width() - 1, 0, 0, 1, 0x0) < transformed.height());
+
+ QImage transformedPadded(transformed.width() + 2, transformed.height() + 2, img.format());
+ transformedPadded.fill(0x0);
+
+ p.begin(&transformedPadded);
+ p.setRenderHint(QPainter::SmoothPixmapTransform);
+ p.setRenderHint(QPainter::Antialiasing);
+ p.setTransform(transformed.trueMatrix(transform, img.width(), img.height()) * QTransform().translate(1, 1));
+ p.drawImage(0, 0, img);
+ p.end();
+
+ // no borders should have touched pixels since we have a one-pixel padding
+
+ QCOMPARE(count(transformedPadded, 0, 0, 1, 0, 0x0), transformedPadded.width());
+ QCOMPARE(count(transformedPadded, 0, 0, 0, 1, 0x0), transformedPadded.height());
+
+ QCOMPARE(count(transformedPadded, 0, transformedPadded.height() - 1, 1, 0, 0x0), transformedPadded.width());
+ QCOMPARE(count(transformedPadded, transformedPadded.width() - 1, 0, 0, 1, 0x0), transformedPadded.height());
+}
+
+void tst_QImage::transformed2()
+{
+ QImage img(3, 3, QImage::Format_Mono);
+ QPainter p(&img);
+ p.fillRect(0, 0, 3, 3, Qt::white);
+ p.fillRect(0, 0, 3, 3, Qt::Dense4Pattern);
+ p.end();
+
+ QTransform transform;
+ transform.scale(3, 3);
+
+ QImage expected(9, 9, QImage::Format_Mono);
+ p.begin(&expected);
+ p.fillRect(0, 0, 9, 9, Qt::white);
+ p.setBrush(Qt::black);
+ p.setPen(Qt::NoPen);
+ p.drawRect(3, 0, 3, 3);
+ p.drawRect(0, 3, 3, 3);
+ p.drawRect(6, 3, 3, 3);
+ p.drawRect(3, 6, 3, 3);
+ p.end();
+
+ {
+ QImage actual = img.transformed(transform);
+
+ QCOMPARE(actual.format(), expected.format());
+ QCOMPARE(actual.size(), expected.size());
+ QCOMPARE(actual, expected);
+ }
+
+ {
+ transform.rotate(-90);
+ QImage actual = img.transformed(transform);
+
+ QCOMPARE(actual.convertToFormat(QImage::Format_ARGB32_Premultiplied),
+ expected.convertToFormat(QImage::Format_ARGB32_Premultiplied));
+ }
+}
+
+void tst_QImage::scaled()
+{
+ QImage img(102, 3, QImage::Format_Mono);
+ QPainter p(&img);
+ p.fillRect(0, 0, img.width(), img.height(), Qt::white);
+ p.end();
+
+ QImage scaled = img.scaled(1994, 10);
+
+ QImage expected(1994, 10, QImage::Format_Mono);
+ p.begin(&expected);
+ p.fillRect(0, 0, expected.width(), expected.height(), Qt::white);
+ p.end();
+
+ QCOMPARE(scaled, expected);
+}
+
+void tst_QImage::paintEngine()
+{
+ QImage img;
+
+ QPaintEngine *engine;
+ {
+ QImage temp(100, 100, QImage::Format_RGB32);
+ temp.fill(0xff000000);
+
+ QPainter p(&temp);
+ p.fillRect(80,80,10,10,Qt::blue);
+ p.end();
+
+ img = temp;
+
+ engine = temp.paintEngine();
+ }
+
+ {
+ QPainter p(&img);
+
+ p.fillRect(80,10,10,10,Qt::yellow);
+ p.end();
+ }
+
+ QImage expected(100, 100, QImage::Format_RGB32);
+ expected.fill(0xff000000);
+
+ QPainter p(&expected);
+ p.fillRect(80,80,10,10,Qt::blue);
+ p.fillRect(80,10,10,10,Qt::yellow);
+ p.end();
+
+ QCOMPARE(engine, img.paintEngine());
+ QCOMPARE(img, expected);
+}
+
+void tst_QImage::setAlphaChannelWhilePainting()
+{
+ QImage image(100, 100, QImage::Format_ARGB32);
+ image.fill(Qt::black);
+ QPainter p(&image);
+
+ image.setAlphaChannel(image.createMaskFromColor(QColor(Qt::black).rgb(), Qt::MaskInColor));
+}
+
+
+// See task 240047 for details
+void tst_QImage::smoothScaledSubImage()
+{
+ QImage original(128, 128, QImage::Format_RGB32);
+ QPainter p(&original);
+ p.fillRect(0, 0, 64, 128, Qt::black);
+ p.fillRect(64, 0, 64, 128, Qt::white);
+ p.end();
+
+ QImage subimage(((const QImage &) original).bits(), 32, 32, original.bytesPerLine(), QImage::Format_RGB32); // only in the black part of the source...
+
+ QImage scaled = subimage.scaled(8, 8, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ for (int y=0; y<scaled.height(); ++y)
+ for (int x=0; x<scaled.width(); ++x)
+ QCOMPARE(scaled.pixel(x, y), 0xff000000);
+}
+
+void tst_QImage::nullSize_data()
+{
+ QTest::addColumn<QImage>("image");
+ QTest::newRow("null image") << QImage();
+ QTest::newRow("zero-size image") << QImage(0, 0, QImage::Format_RGB32);
+}
+
+void tst_QImage::nullSize()
+{
+ QFETCH(QImage, image);
+ QCOMPARE(image.isNull(), true);
+ QCOMPARE(image.width(), image.size().width());
+ QCOMPARE(image.height(), image.size().height());
+}
+
+void tst_QImage::premultipliedAlphaConsistency()
+{
+ QImage img(256, 1, QImage::Format_ARGB32);
+ for (int x = 0; x < 256; ++x)
+ img.setPixel(x, 0, (x << 24) | 0xffffff);
+
+ QImage converted = img.convertToFormat(QImage::Format_ARGB8565_Premultiplied);
+ QImage pm32 = converted.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+
+ for (int i = 0; i < pm32.width(); ++i) {
+ QRgb pixel = pm32.pixel(i, 0);
+ QVERIFY(qRed(pixel) <= qAlpha(pixel));
+ QVERIFY(qGreen(pixel) <= qAlpha(pixel));
+ QVERIFY(qBlue(pixel) <= qAlpha(pixel));
+ }
+}
+
+void tst_QImage::compareIndexed()
+{
+ QImage img(256, 1, QImage::Format_Indexed8);
+
+ QVector<QRgb> colorTable(256);
+ for (int i = 0; i < 256; ++i)
+ colorTable[i] = qRgb(i, i, i);
+ img.setColorTable(colorTable);
+
+ for (int i = 0; i < 256; ++i) {
+ img.setPixel(i, 0, i);
+ }
+
+ QImage imgInverted(256, 1, QImage::Format_Indexed8);
+ QVector<QRgb> invertedColorTable(256);
+ for (int i = 0; i < 256; ++i)
+ invertedColorTable[255-i] = qRgb(i, i, i);
+ imgInverted.setColorTable(invertedColorTable);
+
+ for (int i = 0; i < 256; ++i) {
+ imgInverted.setPixel(i, 0, (255-i));
+ }
+
+ QCOMPARE(img, imgInverted);
+}
+
+void tst_QImage::fillColor_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+ QTest::addColumn<Qt::GlobalColor>("color");
+ QTest::addColumn<uint>("pixelValue");
+
+ QTest::newRow("Mono, color0") << QImage::Format_Mono << Qt::color0 << 0u;
+ QTest::newRow("Mono, color1") << QImage::Format_Mono << Qt::color1 << 1u;
+
+ QTest::newRow("MonoLSB, color0") << QImage::Format_MonoLSB << Qt::color0 << 0u;
+ QTest::newRow("MonoLSB, color1") << QImage::Format_MonoLSB << Qt::color1 << 1u;
+
+ const char *names[] = {
+ "Indexed8",
+ "RGB32",
+ "ARGB32",
+ "ARGB32pm",
+ "RGB16",
+ "ARGB8565pm",
+ "RGB666",
+ "ARGB6666pm",
+ "RGB555",
+ "ARGB8555pm",
+ "RGB888",
+ "RGB444",
+ "ARGB4444pm",
+ 0
+ };
+
+ QImage::Format formats[] = {
+ QImage::Format_Indexed8,
+ QImage::Format_RGB32,
+ QImage::Format_ARGB32,
+ QImage::Format_ARGB32_Premultiplied,
+ QImage::Format_RGB16,
+ QImage::Format_ARGB8565_Premultiplied,
+ QImage::Format_RGB666,
+ QImage::Format_ARGB6666_Premultiplied,
+ QImage::Format_RGB555,
+ QImage::Format_ARGB8555_Premultiplied,
+ QImage::Format_RGB888,
+ QImage::Format_RGB444,
+ QImage::Format_ARGB4444_Premultiplied
+ };
+
+ for (int i=0; names[i] != 0; ++i) {
+ QByteArray name;
+ name.append(names[i]).append(", ");
+
+ QTest::newRow(QByteArray(name).append("black").constData()) << formats[i] << Qt::black << 0xff000000;
+ QTest::newRow(QByteArray(name).append("white").constData()) << formats[i] << Qt::white << 0xffffffff;
+ QTest::newRow(QByteArray(name).append("red").constData()) << formats[i] << Qt::red << 0xffff0000;
+ QTest::newRow(QByteArray(name).append("green").constData()) << formats[i] << Qt::green << 0xff00ff00;
+ QTest::newRow(QByteArray(name).append("blue").constData()) << formats[i] << Qt::blue << 0xff0000ff;
+ }
+
+ QTest::newRow("RGB16, transparent") << QImage::Format_RGB16 << Qt::transparent << 0xff000000;
+ QTest::newRow("RGB32, transparent") << QImage::Format_RGB32 << Qt::transparent << 0xff000000;
+ QTest::newRow("ARGB32, transparent") << QImage::Format_ARGB32 << Qt::transparent << 0x00000000u;
+ QTest::newRow("ARGB32pm, transparent") << QImage::Format_ARGB32_Premultiplied << Qt::transparent << 0x00000000u;
+}
+
+void tst_QImage::fillColor()
+{
+ QFETCH(QImage::Format, format);
+ QFETCH(Qt::GlobalColor, color);
+ QFETCH(uint, pixelValue);
+
+ QImage image(1, 1, format);
+
+ if (image.depth() == 8) {
+ QVector<QRgb> table;
+ table << 0xff000000;
+ table << 0xffffffff;
+ table << 0xffff0000;
+ table << 0xff00ff00;
+ table << 0xff0000ff;
+ image.setColorTable(table);
+ }
+
+ image.fill(color);
+ if (image.depth() == 1) {
+ QCOMPARE(image.pixelIndex(0, 0), (int) pixelValue);
+ } else {
+ QCOMPARE(image.pixel(0, 0), pixelValue);
+ }
+
+ image.fill(QColor(color));
+ if (image.depth() == 1) {
+ QCOMPARE(image.pixelIndex(0, 0), (int) pixelValue);
+ } else {
+ QCOMPARE(image.pixel(0, 0), pixelValue);
+ }
+}
+
+void tst_QImage::fillColorWithAlpha()
+{
+ QImage argb32(1, 1, QImage::Format_ARGB32);
+ argb32.fill(QColor(255, 0, 0, 127));
+ QCOMPARE(argb32.pixel(0, 0), qRgba(255, 0, 0, 127));
+
+ QImage argb32pm(1, 1, QImage::Format_ARGB32_Premultiplied);
+ argb32pm.fill(QColor(255, 0, 0, 127));
+ QCOMPARE(argb32pm.pixel(0, 0), 0x7f7f0000u);
+}
+
+void tst_QImage::rgbSwapped_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8;
+ QTest::newRow("Format_RGB32") << QImage::Format_RGB32;
+ QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32;
+ QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("Format_RGB16") << QImage::Format_RGB16;
+ QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied;
+ QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied;
+ QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied;
+ QTest::newRow("Format_RGB666") << QImage::Format_RGB666;
+ QTest::newRow("Format_RGB555") << QImage::Format_RGB555;
+ QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied;
+ QTest::newRow("Format_RGB888") << QImage::Format_RGB888;
+ QTest::newRow("Format_RGB444") << QImage::Format_RGB444;
+}
+
+void tst_QImage::rgbSwapped()
+{
+ QFETCH(QImage::Format, format);
+
+ QImage image(100, 1, format);
+ image.fill(0);
+
+ QVector<QColor> testColor(image.width());
+
+ for (int i = 0; i < image.width(); ++i)
+ testColor[i] = QColor(i, 10 + i, 20 + i * 2, 30 + i);
+
+ if (format != QImage::Format_Indexed8) {
+ QPainter p(&image);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ for (int i = 0; i < image.width(); ++i)
+ p.fillRect(QRect(i, 0, 1, 1), testColor[i].rgb());
+ } else {
+ image.setColorCount(image.width());
+ for (int i = 0; i < image.width(); ++i) {
+ image.setColor(0, testColor[i].rgba());
+ image.setPixel(i, 0, i);
+ }
+ }
+
+ QImage imageSwapped = image.rgbSwapped();
+
+ for (int i = 0; i < image.width(); ++i) {
+ QColor referenceColor = QColor(image.pixel(i, 0));
+ QColor swappedColor = QColor(imageSwapped.pixel(i, 0));
+
+ QCOMPARE(swappedColor.alpha(), referenceColor.alpha());
+ QCOMPARE(swappedColor.red(), referenceColor.blue());
+ QCOMPARE(swappedColor.green(), referenceColor.green());
+ QCOMPARE(swappedColor.blue(), referenceColor.red());
+ }
+
+ QImage imageSwappedTwice = imageSwapped.rgbSwapped();
+
+ QCOMPARE(image, imageSwappedTwice);
+
+ QCOMPARE(memcmp(image.constBits(), imageSwappedTwice.constBits(), image.byteCount()), 0);
+}
+
+void tst_QImage::deepCopyWhenPaintingActive()
+{
+ QImage image(64, 64, QImage::Format_ARGB32_Premultiplied);
+ image.fill(0);
+
+ QPainter painter(&image);
+ QImage copy = image;
+
+ painter.setBrush(Qt::black);
+ painter.drawEllipse(image.rect());
+
+ QVERIFY(copy != image);
+}
+
+void tst_QImage::scaled_QTBUG19157()
+{
+ QImage foo(5000, 1, QImage::Format_RGB32);
+ foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
+ QVERIFY(!foo.isNull());
+}
+
+QTEST_MAIN(tst_QImage)
+#include "tst_qimage.moc"
diff --git a/tests/auto/gui/image/qimageiohandler/.gitignore b/tests/auto/gui/image/qimageiohandler/.gitignore
new file mode 100644
index 0000000000..6ea7bdb667
--- /dev/null
+++ b/tests/auto/gui/image/qimageiohandler/.gitignore
@@ -0,0 +1 @@
+tst_qimageiohandler
diff --git a/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro b/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro
new file mode 100644
index 0000000000..46e5cfb2cf
--- /dev/null
+++ b/tests/auto/gui/image/qimageiohandler/qimageiohandler.pro
@@ -0,0 +1,9 @@
+############################################################
+# Project file for autotest for file qimageiohandler.h
+############################################################
+
+load(qttest_p4)
+
+SOURCES += tst_qimageiohandler.cpp
+
+
diff --git a/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp
new file mode 100644
index 0000000000..dd132302f8
--- /dev/null
+++ b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include <qcoreapplication.h>
+#include <qdebug.h>
+#include <qimageiohandler.h>
+#include <qfile.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QImageIOHandler : public QObject
+{
+Q_OBJECT
+
+public:
+ tst_QImageIOHandler();
+ virtual ~tst_QImageIOHandler();
+
+private slots:
+ void getSetCheck();
+};
+
+class MyImageIOHandler : public QImageIOHandler
+{
+public:
+ MyImageIOHandler() : QImageIOHandler() { }
+ bool canRead() const { return true; }
+ bool read(QImage *) { return true; }
+};
+
+tst_QImageIOHandler::tst_QImageIOHandler()
+{
+}
+
+tst_QImageIOHandler::~tst_QImageIOHandler()
+{
+}
+
+// Testing get/set functions
+void tst_QImageIOHandler::getSetCheck()
+{
+ MyImageIOHandler obj1;
+ // QIODevice * QImageIOHandler::device()
+ // void QImageIOHandler::setDevice(QIODevice *)
+ QFile *var1 = new QFile;
+ obj1.setDevice(var1);
+ QCOMPARE(obj1.device(), (QIODevice *)var1);
+ obj1.setDevice((QIODevice *)0);
+ QCOMPARE(obj1.device(), (QIODevice *)0);
+ delete var1;
+}
+
+QTEST_MAIN(tst_QImageIOHandler)
+#include "tst_qimageiohandler.moc"
diff --git a/tests/auto/gui/image/qimagereader/.gitignore b/tests/auto/gui/image/qimagereader/.gitignore
new file mode 100644
index 0000000000..fdf03f239d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/.gitignore
@@ -0,0 +1,2 @@
+tst_qimagereader
+junk
diff --git a/tests/auto/gui/image/qimagereader/baseline/35floppy.png b/tests/auto/gui/image/qimagereader/baseline/35floppy.png
new file mode 100644
index 0000000000..56b9b44c47
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/baseline/35floppy.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/baseline/connect.png b/tests/auto/gui/image/qimagereader/baseline/connect.png
new file mode 100644
index 0000000000..9544bb9c76
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/baseline/connect.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png b/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png
new file mode 100644
index 0000000000..e19287b49d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/baseline/kde_favicon.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/baseline/semitransparent.png b/tests/auto/gui/image/qimagereader/baseline/semitransparent.png
new file mode 100644
index 0000000000..a3ad780699
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/baseline/semitransparent.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/16bpp.bmp b/tests/auto/gui/image/qimagereader/images/16bpp.bmp
new file mode 100644
index 0000000000..74ce63edd4
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/16bpp.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp b/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp
new file mode 100644
index 0000000000..ae71e678fd
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/4bpp-rle.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg
new file mode 100644
index 0000000000..b8aa9ea609
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png
new file mode 100644
index 0000000000..a24db1b13f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/YCbCr_cmyk.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg b/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg
new file mode 100644
index 0000000000..8771224cb5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/YCbCr_rgb.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/away.png b/tests/auto/gui/image/qimagereader/images/away.png
new file mode 100644
index 0000000000..0e21a37883
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/away.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/ball.mng b/tests/auto/gui/image/qimagereader/images/ball.mng
new file mode 100644
index 0000000000..81544780fd
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/ball.mng
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/bat1.gif b/tests/auto/gui/image/qimagereader/images/bat1.gif
new file mode 100644
index 0000000000..cb6f4f7a8e
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/bat1.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/bat2.gif b/tests/auto/gui/image/qimagereader/images/bat2.gif
new file mode 100644
index 0000000000..fbbda4ef76
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/bat2.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/beavis.jpg b/tests/auto/gui/image/qimagereader/images/beavis.jpg
new file mode 100644
index 0000000000..d55504779b
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/beavis.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/black.png b/tests/auto/gui/image/qimagereader/images/black.png
new file mode 100644
index 0000000000..6c94085ed5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/black.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/black.xpm b/tests/auto/gui/image/qimagereader/images/black.xpm
new file mode 100644
index 0000000000..d7925bf211
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/black.xpm
@@ -0,0 +1,65 @@
+/* XPM */
+static char * ddd_xpm[] = {
+/* $Id: ddd.xpm,v 1.5 1999/08/19 11:30:07 andreas Exp $
+ * DDD Logo. Copyright (C) 1997 TU Braunschweig, Germany.
+ * For details on DDD, see `http://www.gnu.org/software/ddd/'.
+ * width height ncolors chars_per_pixel */
+" 48 48 8 1",
+/* Colors */
+" c None m None g None g4 None s Background ",
+". c black m black g black g4 black s Legs ",
+"X c grey m white g grey g4 grey s Body ",
+"- c grey m white g grey g4 grey s Border ",
+"o c #000040 m black g grey25 g4 grey25 s Handle1 ",
+"O c blue4 m black g grey25 g4 grey25 s Handle2 ",
+"+ c white m white g white g4 white s Light ",
+"* c DarkGreen m black g grey25 g4 grey25 s Eye ",
+/* Pixels */
+" . . ",
+" . .. ",
+" . . ",
+" .. . ",
+" .. .. .. ",
+" .. . . . ",
+" . . . . .. ",
+" . .X. . ",
+" . *.X.* .. ",
+" .. .. .XXX. .. ... ",
+" . .X...XXX...X. . ",
+" .. ..XXX.XXX.XXX. .. ",
+" .....XXXX...XXXX. . ",
+" .. ..XXXXXXXXX.. .. ",
+" ...XXXXXXX..... ",
+" ......... ",
+" .XXXXXXX. ",
+" .....XXX..... ",
+" .XXXXXoOOOOOOX. ... ",
+" .. ..XXXoOOO-----OOO..... ",
+" .........XXoO-----..----O .. ",
+" .. ..X..oO--.........--O .. ",
+" . ..XXXoO--..++.......--O .. ",
+" .. .XXXXO-XXX+++XXXXXXXXX-O . ",
+" .. .....oO-XX+++XXXXXXXXXXX-O .. ",
+" .. .XXXoO--XX++XXXXXXXXXXXX-O .. ",
+" .. ..XXXoO-..+++............-O .. ",
+" . .. .XXoO--..++.............-OO .. ",
+" . ... ...oO--..................-O ",
+".. . .XXoO-XXXXXXXXXXXXXXXXXXX-O ",
+" .. .XXoO-XXXXXXXXXXXXXXXXXXX-O ",
+" .. .XoO-XXXXXXXXXXXXXXXXXXX-O. ",
+" . ...oO-.................-O .. ",
+" . .XXoO-.................-O .. ",
+" . ..XoO-.................-O .. ",
+" . ...oO-XXXXXXXXXXXXXXX-OOO . ",
+" .. .XoOO-XXXXXXXXXXXXX-OOOOO . ",
+" .. ..XoOO---.......---OOOOOO . ",
+" .. ....oOO---...----OOOOOOOO ",
+" . .XX..oOO-----OOOOOOOOOOO ",
+" . .....OOOOOOOOooOOOOOOOOO ",
+" . .XXooooooOo oOOOOOOOOO ",
+" . .XXX. ooOOOOOOO ",
+" .. ... ooOOOOOO ",
+" . ooOOOOOO ",
+" ooOOOOOO ",
+" ooOOOOOO ",
+" ooOOOOOO "};
diff --git a/tests/auto/gui/image/qimagereader/images/colorful.bmp b/tests/auto/gui/image/qimagereader/images/colorful.bmp
new file mode 100644
index 0000000000..8ea6f4acd7
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/colorful.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm
new file mode 100644
index 0000000000..f8d80edbbc
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt-colors.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static const char *marble_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 240 240 223 2",
+/* colors */
+".. c #959595",
+".# c #c5c5c5",
+".a c #adadad",
+".b c #dedede",
+".c c #b7b7b7",
+".d c #d2d2d2",
+".e c #bebebe",
+".f c #c9c9c9",
+".g c #b8b8b8",
+".h c #d6d6d6",
+".i c #9e9e9e",
+".j c #eaeaea",
+".k c #b2b2b2",
+".l c #cecece",
+".m c #a5a5a5",
+".n c #e4e4e4",
+".o c #c4c4c4",
+".p c #d9d9d9",
+".q c #b1b1b1",
+/* pixels */
+"aYbla9aN.N#x",
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-data.tif b/tests/auto/gui/image/qimagereader/images/corrupt-data.tif
new file mode 100644
index 0000000000..d63c688b27
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt-data.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm
new file mode 100644
index 0000000000..3a736ff262
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt-pixel-count.xpm
@@ -0,0 +1,11 @@
+/* XPM */
+static const char *marble_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"2 2 2 -2",
+/* colors */
+"a c #adadad",
+"b c #dedede",
+/* pixels */
+"ab",
+"ba"
+};
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm b/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm
new file mode 100644
index 0000000000..21031ee604
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt-pixels.xpm
@@ -0,0 +1,7 @@
+/* XPM */
+static char * test_xpm[] = {
+"256 256 1 1",
+" c grey",
+" ",
+" ",
+" "};
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.bmp b/tests/auto/gui/image/qimagereader/images/corrupt.bmp
new file mode 100644
index 0000000000..824190bdeb
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.gif b/tests/auto/gui/image/qimagereader/images/corrupt.gif
new file mode 100644
index 0000000000..07259454c9
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.jpg b/tests/auto/gui/image/qimagereader/images/corrupt.jpg
new file mode 100644
index 0000000000..1959662922
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.mng b/tests/auto/gui/image/qimagereader/images/corrupt.mng
new file mode 100644
index 0000000000..17fd43a5ca
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.mng
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.png b/tests/auto/gui/image/qimagereader/images/corrupt.png
new file mode 100644
index 0000000000..9d8911c64e
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.svg b/tests/auto/gui/image/qimagereader/images/corrupt.svg
new file mode 100644
index 0000000000..8747df008f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="40px"
+ height="5px"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="test.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="1005"
+ \ No newline at end of file
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.svgz b/tests/auto/gui/image/qimagereader/images/corrupt.svgz
new file mode 100644
index 0000000000..67fdceee0b
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.svgz
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/corrupt.xbm b/tests/auto/gui/image/qimagereader/images/corrupt.xbm
new file mode 100644
index 0000000000..8510634e6d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/corrupt.xbm
@@ -0,0 +1,5 @@
+#define noname_width 271
+#define noname_height 273
+static char noname_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f};
diff --git a/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp b/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp
new file mode 100644
index 0000000000..b35cda6c35
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/crash-signed-char.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/earth.gif b/tests/auto/gui/image/qimagereader/images/earth.gif
new file mode 100644
index 0000000000..2c229eb110
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/earth.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/endless-anim.gif b/tests/auto/gui/image/qimagereader/images/endless-anim.gif
new file mode 100644
index 0000000000..00df8da786
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/endless-anim.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/fire.mng b/tests/auto/gui/image/qimagereader/images/fire.mng
new file mode 100644
index 0000000000..c6695c8369
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/fire.mng
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/font.bmp b/tests/auto/gui/image/qimagereader/images/font.bmp
new file mode 100644
index 0000000000..28b8c66924
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/font.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/four-frames.gif b/tests/auto/gui/image/qimagereader/images/four-frames.gif
new file mode 100644
index 0000000000..6aff2e0af2
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/four-frames.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/gnus.xbm b/tests/auto/gui/image/qimagereader/images/gnus.xbm
new file mode 100644
index 0000000000..58d1ac845a
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/gnus.xbm
@@ -0,0 +1,622 @@
+#define noname_width 271
+#define noname_height 273
+static char noname_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05,
+ 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5,
+ 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,
+ 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4,
+ 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff,
+ 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42,
+ 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,
+ 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55,
+ 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49,
+ 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54,
+ 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52,
+ 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f,
+ 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9,
+ 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5,
+ 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff,
+ 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c,
+ 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94,
+ 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe,
+ 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a,
+ 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a,
+ 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe,
+ 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42,
+ 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a,
+ 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,
+ 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5,
+ 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54,
+ 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a,
+ 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55,
+ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a,
+ 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28,
+ 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff,
+ 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85,
+ 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff,
+ 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55,
+ 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff,
+ 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29,
+ 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f,
+ 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50,
+ 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2,
+ 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff,
+ 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff,
+ 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92,
+ 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff,
+ 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f,
+ 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48,
+ 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
+ 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1,
+ 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f,
+ 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff,
+ 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5,
+ 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5,
+ 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa,
+ 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40,
+ 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff,
+ 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff,
+ 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24,
+ 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff,
+ 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8,
+ 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa,
+ 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a,
+ 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92,
+ 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94,
+ 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff,
+ 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff,
+ 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97,
+ 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff,
+ 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85,
+ 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55,
+ 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff,
+ 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82,
+ 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf,
+ 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff,
+ 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0,
+ 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f,
+ 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4,
+ 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24,
+ 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5,
+ 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f,
+ 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff,
+ 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a,
+ 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff,
+ 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e,
+ 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05,
+ 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a,
+ 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4,
+ 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff,
+ 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff,
+ 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52,
+ 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff,
+ 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20,
+ 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff,
+ 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87,
+ 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a,
+ 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff,
+ 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff,
+ 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd,
+ 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55,
+ 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21,
+ 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff,
+ 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f,
+ 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f,
+ 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff,
+ 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6,
+ 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4,
+ 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08,
+ 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa,
+ 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff,
+ 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f,
+ 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5,
+ 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff,
+ 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f,
+ 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff,
+ 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,
+ 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1,
+ 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff,
+ 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14,
+ 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd,
+ 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b,
+ 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49,
+ 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a,
+ 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff,
+ 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54,
+ 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,
+ 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff,
+ 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa,
+ 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff,
+ 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4,
+ 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff,
+ 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,
+ 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff,
+ 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,
+ 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92,
+ 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff,
+ 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa,
+ 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2,
+ 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,
+ 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff,
+ 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14,
+ 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff,
+ 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf,
+ 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff,
+ 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff,
+ 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea,
+ 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff,
+ 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78,
+ 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff,
+ 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff,
+ 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,
+ 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5,
+ 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+ 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff,
+ 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,
+ 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa,
+ 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85,
+ 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff,
+ 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa,
+ 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2,
+ 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9,
+ 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03,
+ 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5,
+ 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f,
+ 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff,
+ 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc,
+ 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82,
+ 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5,
+ 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51,
+ 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f,
+ 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff,
+ 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff,
+ 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc,
+ 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3,
+ 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2,
+ 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff,
+ 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,
+ 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,
+ 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,
+ 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f};
diff --git a/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif b/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif
new file mode 100644
index 0000000000..960531ea86
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/grayscale-ref.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/grayscale.tif b/tests/auto/gui/image/qimagereader/images/grayscale.tif
new file mode 100644
index 0000000000..5f4e11429d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/grayscale.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/image.pbm b/tests/auto/gui/image/qimagereader/images/image.pbm
new file mode 100644
index 0000000000..67e5efa3e9
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/image.pbm
@@ -0,0 +1,8 @@
+P1
+16 6
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
diff --git a/tests/auto/gui/image/qimagereader/images/image.pgm b/tests/auto/gui/image/qimagereader/images/image.pgm
new file mode 100644
index 0000000000..443bf40964
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/image.pgm
@@ -0,0 +1,10 @@
+P2
+24 7
+15
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
+0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
+0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
+0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
+0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/tests/auto/gui/image/qimagereader/images/image.png b/tests/auto/gui/image/qimagereader/images/image.png
new file mode 100644
index 0000000000..7d4890a7ff
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/image.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/image.ppm b/tests/auto/gui/image/qimagereader/images/image.ppm
new file mode 100644
index 0000000000..2a5640e189
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/image.ppm
@@ -0,0 +1,7 @@
+P3
+4 4
+15
+ 0 0 0 0 0 0 0 0 0 15 0 15
+ 0 0 0 0 15 7 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 15 7 0 0 0
+15 0 15 0 0 0 0 0 0 0 0 0 \ No newline at end of file
diff --git a/tests/auto/gui/image/qimagereader/images/image_100dpi.tif b/tests/auto/gui/image/qimagereader/images/image_100dpi.tif
new file mode 100644
index 0000000000..fcf3cd89aa
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/image_100dpi.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/kollada-noext b/tests/auto/gui/image/qimagereader/images/kollada-noext
new file mode 100644
index 0000000000..2abd4bb763
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/kollada-noext
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/kollada.png b/tests/auto/gui/image/qimagereader/images/kollada.png
new file mode 100644
index 0000000000..2abd4bb763
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/kollada.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/marble.xpm b/tests/auto/gui/image/qimagereader/images/marble.xpm
new file mode 100644
index 0000000000..1c08049624
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/marble.xpm
@@ -0,0 +1,470 @@
+/* XPM */
+static const char *marble_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 240 240 223 2",
+/* colors */
+".. c #959595",
+".# c #c5c5c5",
+".a c #adadad",
+".b c #dedede",
+".c c #b7b7b7",
+".d c #d2d2d2",
+".e c #bebebe",
+".f c #c9c9c9",
+".g c #b8b8b8",
+".h c #d6d6d6",
+".i c #9e9e9e",
+".j c #eaeaea",
+".k c #b2b2b2",
+".l c #cecece",
+".m c #a5a5a5",
+".n c #e4e4e4",
+".o c #c4c4c4",
+".p c #d9d9d9",
+".q c #b1b1b1",
+".r c #d8d8d8",
+".s c #e0e0e0",
+".t c #d6d6d6",
+".u c #b6b6b6",
+".v c #bfbfbf",
+".w c #cbcbcb",
+".x c #a5a5a5",
+".y c #d1d1d1",
+".z c #cdcdcd",
+".A c #aaaaaa",
+".B c #9a9a9a",
+".C c #dedede",
+".D c #aeaeae",
+".E c #e6e6e6",
+".F c #d3d3d3",
+".G c #c8c8c8",
+".H c #bababa",
+".I c #c4c4c4",
+".J c #cccccc",
+".K c #bcbcbc",
+".L c #f0f0f0",
+".M c #b5b5b5",
+".N c #e3e3e3",
+".O c #c2c2c2",
+".P c #adadad",
+".Q c #c9c9c9",
+".R c #e1e1e1",
+".S c #a2a2a2",
+".T c #d1d1d1",
+".U c #bebebe",
+".V c #dbdbdb",
+".W c #dbdbdb",
+".X c #c8c8c8",
+".Y c #b9b9b9",
+".Z c #a8a8a8",
+".0 c #d3d3d3",
+".1 c #9f9f9f",
+".2 c #c1c1c1",
+".3 c #ebebeb",
+".4 c #b4b4b4",
+".5 c #d9d9d9",
+".6 c #cecece",
+".7 c #e8e8e8",
+".8 c #d6d6d6",
+".9 c #c5c5c5",
+"#. c #b0b0b0",
+"## c #dadada",
+"#a c #c5c5c5",
+"#b c #d1d1d1",
+"#c c #afafaf",
+"#d c #b1b1b1",
+"#e c #cbcbcb",
+"#f c #c1c1c1",
+"#g c #eeeeee",
+"#h c #9b9b9b",
+"#i c #c6c6c6",
+"#j c #c0c0c0",
+"#k c #cbcbcb",
+"#l c #bdbdbd",
+"#m c #a1a1a1",
+"#n c #b7b7b7",
+"#o c #a7a7a7",
+"#p c #e6e6e6",
+"#q c #c9c9c9",
+"#r c #bbbbbb",
+"#s c #e2e2e2",
+"#t c #b8b8b8",
+"#u c #cdcdcd",
+"#v c #d3d3d3",
+"#w c #cfcfcf",
+"#x c #e0e0e0",
+"#y c #d5d5d5",
+"#z c #bdbdbd",
+"#A c #cecece",
+"#B c #c0c0c0",
+"#C c #b7b7b7",
+"#D c #e5e5e5",
+"#E c #c4c4c4",
+"#F c #e3e3e3",
+"#G c #d3d3d3",
+"#H c #dddddd",
+"#I c #dddddd",
+"#J c #acacac",
+"#K c #a3a3a3",
+"#L c #eaeaea",
+"#M c #e1e1e1",
+"#N c #b9b9b9",
+"#O c #d5d5d5",
+"#P c #bababa",
+"#Q c #d7d7d7",
+"#R c #b5b5b5",
+"#S c #d1d1d1",
+"#T c #c6c6c6",
+"#U c #dcdcdc",
+"#V c #b4b4b4",
+"#W c #c6c6c6",
+"#X c #a8a8a8",
+"#Y c #a0a0a0",
+"#Z c #cbcbcb",
+"#0 c #bfbfbf",
+"#1 c #cbcbcb",
+"#2 c #a4a4a4",
+"#3 c #c0c0c0",
+"#4 c #bbbbbb",
+"#5 c #9c9c9c",
+"#6 c #a2a2a2",
+"#7 c #dcdcdc",
+"#8 c #c3c3c3",
+"#9 c #9d9d9d",
+"a. c #aaaaaa",
+"a# c #d5d5d5",
+"aa c #eeeeee",
+"ab c #b6b6b6",
+"ac c #b0b0b0",
+"ad c #b3b3b3",
+"ae c #c9c9c9",
+"af c #e9e9e9",
+"ag c #bdbdbd",
+"ah c #a0a0a0",
+"ai c #b0b0b0",
+"aj c #e8e8e8",
+"ak c #cacaca",
+"al c #c3c3c3",
+"am c #dbdbdb",
+"an c #d0d0d0",
+"ao c #d8d8d8",
+"ap c #c7c7c7",
+"aq c #dcdcdc",
+"ar c #c7c7c7",
+"as c #f0f0f0",
+"at c #a3a3a3",
+"au c #bfbfbf",
+"av c #d9d9d9",
+"aw c #dfdfdf",
+"ax c #d3d3d3",
+"ay c #c0c0c0",
+"az c #cacaca",
+"aA c #b3b3b3",
+"aB c #cfcfcf",
+"aC c #dadada",
+"aD c #b2b2b2",
+"aE c #e2e2e2",
+"aF c #d7d7d7",
+"aG c #c4c4c4",
+"aH c #b8b8b8",
+"aI c #cdcdcd",
+"aJ c #a6a6a6",
+"aK c #d2d2d2",
+"aL c #cecece",
+"aM c #acacac",
+"aN c #dfdfdf",
+"aO c #d5d5d5",
+"aP c #c9c9c9",
+"aQ c #bcbcbc",
+"aR c #c6c6c6",
+"aS c #cdcdcd",
+"aT c #bebebe",
+"aU c #f2f2f2",
+"aV c #b6b6b6",
+"aW c #e4e4e4",
+"aX c #c3c3c3",
+"aY c #e2e2e2",
+"aZ c #d2d2d2",
+"a0 c #dddddd",
+"a1 c #dcdcdc",
+"a2 c #ececec",
+"a3 c #eaeaea",
+"a4 c #cccccc",
+"a5 c #c7c7c7",
+"a6 c #c2c2c2",
+"a7 c #cccccc",
+"a8 c #a8a8a8",
+"a9 c #e7e7e7",
+"b. c #e4e4e4",
+"b# c #d9d9d9",
+"ba c #bababa",
+"bb c #cfcfcf",
+"bc c #d4d4d4",
+"bd c #d0d0d0",
+"be c #aeaeae",
+"bf c #e1e1e1",
+"bg c #d7d7d7",
+"bh c #cfcfcf",
+"bi c #b8b8b8",
+"bj c #e6e6e6",
+"bk c #c5c5c5",
+"bl c #e4e4e4",
+"bm c #d4d4d4",
+"bn c #dfdfdf",
+"bo c #dedede",
+"bp c #ececec",
+"bq c #bababa",
+"br c #bcbcbc",
+"bs c #b0b0b0",
+"bt c #cccccc",
+"bu c #a6a6a6",
+"bv c #c1c1c1",
+"bw c #bcbcbc",
+"bx c #ababab",
+"by c #d7d7d7",
+"bz c #b7b7b7",
+"bA c #b2b2b2",
+"bB c #b4b4b4",
+"bC c #bfbfbf",
+/* pixels */
+"aYbla9a9a9.7#D.N#L#La9.7a9#D#D.7#D#D#DaY#x#xa0ama0ama0am#xbnbnbnaYaYaYaYaY#DaYaYaYbn#x#x#xaY.N#Da9a9a9a9a9a9a9a9a9.7a9a9a9#Da9#D#L#L#L#L#L#La2#La2a2a2a2a2a2#ga2#ga2#ga2a2#ga2a2#L#L#L#Lafa9a9a9bl#Dbl#Da9a9a9#L#L#Laf#L#Laf#L#L#L#L#L#L#L#L#L#La2#La2a2a2#La2#L#L#Laf#L#Laf#L#Laf#L#Laf#L#Laf#Laf#Laf#Laf#Laf#L#D#DblblaYaYaCa0.t.Fb#bnbnaCbnblblblblblaYaY.RaYblblblblblblblbla9a9a9a9a9a9#pa9a9#pa9#pa9#pa9#pa9#pa9a9bl#D#D#D#pa9#pafa9a9a9a9#L#Lafa9a9a9#D#D#pbl#U.V.Vb#.8am#xbn#IaYbl.N.N#x",
+"am#I#Da9a9a9bj#D#La9.7#D#Da9#D#D#p#DaYaY#xbna0amamamb#a0a0a0a0bnawaYaYaYaYaYaYaY#xbnaY.R#xaYaY.Nafa9afa9afa9afa9.7a9.7a9bja9bja9#Lafa2afa2af#L#L.3#La2#La2bpa2#La2#ga2a2#ga2a2#g#L#Laf#L#La9afa9bl#Dbl#Da9afa9#L#Laf#L#Laf#L#Laf#L#L#L#L#L#L#L.7a2#La2a2#La2#La2#Laf#L#Laf#Laf#Lafajaf#L#Laf#L#L#Lafajafajafajaf.na9#s#Daw#xbnaCb#bg.Vbnbn.RaYaY#Mbl#pblaYblaYaYaYblblbl#D#Dbl#D#paf#pafa9#pa9afbla9#pa9#pa9#pa9#pa9#p#D#p#Da9#D#pa9#pa9#Da9#Da9af#L#La9.7#D#s#D#MaYbnaCb#aOb#aC#x#UaYaY#M#DaYbf",
+"aOambn.sa9bja9.7a9.7a9#Da9bj#D#D#D#DaYaY#x#xa0amaFaFbgb#aF.Va0.VaYaYaYaYaYaYaYaYbn#xaY#xaY.N#D#Da9a9a9a9a9a9a9a9a9bja9#Da9#Da9#D#L#L#L#L#L#La2#La2afa2a2a2a2#ga2#g#La2bpa2bpa2#L#L#L#L#Lafa9a9#p#DaY#D#Da9a9.7a9af#Laf#L#Laf#Laf#L.7#L#L.7#L#L#L#La2a2a2#La2#L.3#Laf#Laf#Lajaf#Laja9#Lajaf#Lajafaja9#La9#La9#La9a9a9blaYaYaYawa0b#b#.paYaYblaY.Rbla9#pblblaYblaYa9#p#D#pa9#pa9#pa9a9a9#pa9a9#pa9bl#pa9#pa9#pa9#pa9#pa9a9#D#Dbla9a9a9a9a9#pa9a9a9#L#Lafa9a9#D#D#Da9awbn.pb#bgamaCbn#xaw#D#D#D.N#x",
+"amamaC#x#D#s.7.7a9#Da9#D#D#D.N.N#xaYaYaY#xbna0a0aOaFb#aOb#bg.Vambna0bnaCa0aYaYaY#U.RaYaYaY#Dbl#Da9a9#La9af.7afa9.7a9.7a9bja9bja9#L#L.3#L.3#Laf#Lafa2#L#La2#La2bpa2a2#ga2#ga2a2#g#L#L#L#Lafa9afa9.Nblbl#Da9a9afa9#Laf#L#Laf#Laf#L#L#L#L#L#L#L.7#L#La2#L#La2aja2#Laj#Lafaj#Laf#L#Laf#Lafafajafaf#Lafaj#Lafajafaj#Laja9.n#D#MaY.R#xbga0bnbn.RaYbl#Ua9#pa9#D#Dbl#D#Dbl#Dbl#Dbla9#Da9a9#pafa9af#pa9#p#pa9#pa9#pa9#pa9#pa9#p#D#pa9#Da9a9af#pafa9af.7a9#Laf#L.7a9#s#D#saYaY#Ua0aObgao#x#IaYbl#D#s#D.sbf",
+"amaOama0.N.Na9a9bja9#Dbj#D#D#DaY.N#x#x#x#xbnaCa0#H.Vbgb#b#aFbgambnbn#Ubnbnbnbnbn#xaYawaYbl#Da9#Da9a9a9a9a9a9a9a9a9bja9#Da9#sa9#D#Laf#L#L#L#La2a2a2afa2#La2#ga2a2#g#L#g#La2bpa2#L#L#L#Laf#La9a9#pbl#Dbl#Da9a9.7a9#Lajaf#Lajaf#Lajafafajafafajafaf.j#L.3a2#Laf#La2af#Laf#Laf#Laf#L.n#L.n#La9#L#Lafa9afa9aja9#La9af.7afa9#Dbl#IaYawa0a0#UbnaYblblaY#pa9#pa9#D#D#D#Dafa9afa9af#pa9#pa9afa9#pa9a9a9a9#pa9#pa9#p#pa9#pa9#pa9a9#D#Dbla9a9a9a9a9a9.7a9.7af#Laja9a9#D#D#saYawbnaCb#aobn#x.Nbl#s#D#D#D.N.N",
+".CamaOao.WaY#D.7#s#Da9#D#D.NaY.N#x#I#xbn#xaY#x#U#xa0a0a0bgamb#ambga0ama0am#xa0a0.RaYaY#Dbl#Dbl#Da9a9a9a9afa9afa9.7a9#D.7#Dbja9.7af#La2#La2af#L#La2a2a2a2a2#L#g#L#ga2a2#ga2#ga2#g#L#L#L#Lafa9a9a9#Dawbl#Da9a9a9.7af#Laf#Laf#L#Laf#L#Laf#L#Laf#L#Laf#L.j#La2afajaf#Lafajaf.Eafaj#Laf#Laf#Lafaja9aj#Lajaf#Laf#Lafajafajaf.n#DblaYaYaCbn#xbnaYaYaY.Rbla9#p#Da9a9.7#La9a9a9a9a9afa9afa9a9afa9afa9afa9#p#pa9#pa9a9#pa9#pa9#p#D#pa9#Da9afafafaf.7a9a9.7#L#Lafa9.n#D#s#D#D#x#Ua0aCaC#x.saY.s#D.7a9.Ebj.N",
+"#xa0.8a#.8.Cbf.N#D#D.N.NaY.N.saY#x#xaY#IaYaYaYaYaYaY#x#x#xa0aCam.Vb#bg#yb#.Va0bnaYaYblaY#Da9#D#Da9afa9af.7a9a9a9.7a9bja9#s#Da9.7ajaf#Laf#L#La2#L.3#La2#La2a2#ga2a2bpa2#L#g#La2bp#L#L#Laf#La9af#paYbl#D#Da9a9a9a9#L#L#Laf#Laf#L#Lafafafafaf#Lafaf#La2#La2afajaf#Lajaf.7af#Lafa9aja9aja9#L.n#Lafafa9#L.n#L.n#La9#Laf#La9a9#Mbl#xaY#x#IaYawaYaYaYaYblbl#pa9a9.7#L.7afaf#Laf#Lafa9afa9a9a9a9a9a9a9a9a9#pa9#pa9#pa9#pa9#pa9a9#D#D#Da9af#Lafa9a9a9.7af#Laja9a9#D#D#D#M.N#I#xaCa0#UaY#D.NaY#D.n.7bj#Dbj",
+"#x#xa0#vbcaq#xbf#D#D.Nbl.s.NaYbf#x#x#xaYaYaYaYaYaY#M.NaY#x#x.Ca0b#bgb#bgbg.V.p.VawaYblbl#Dbl#Dafa9a9a9a9afa9afa9.7a9#Da9#D#s#Da9af#La2#La2#Laf#La2#La2#La2bpa2bpa2#ga2#ga2#ga2a2#L#L#L#Lafa9a9a9aYaYbl#Da9afa9a9ajaf#Lajaf#Lajafafaj#Lafajafafajafa2#La2#Laf#Lafa9#Lafaja9aj#Laf#Lafajaf#Laf.7afaj#Laf#Lafajaf.Eafajaf.n#Dbl#MaY#IaY#xaY.RaY.RaY#FaYa9a9a9#L#L#Lafa9afafa9#Laf#L#La9afa9afa9afa9#pa9#pa9#pa9#pa9#pa9#p#D#p#Da9a9afa9a9.7a9#L.7.7.naf#La9.n#D#s.N.N#x#UaCbnaY#s#DaY#sa9.7b..7#DaW",
+".7aw#x.CaoaB.y.5#s.N#I.Ca0a0ama0#x.N.NaY.NaY#D#Dbl#DblaYawaY#U.CbgbmaBaSaZbma0a0blaYaY#Dbla9a9#Da9af.7afa9a9a9a9bl#D#D#D#D.N#D#D.7a9a9a9a9a9#La9afafafafafaf#Lafa2#La2#L#L#L#La2a2a2af#La9a9#D#DawaY#sbla9b..7#La9a9a9a9.7a9a9a9afa9af.nafafafafafajafajafajafajafaja9a9bl#MaY#s#Da9#Da9#sa9.na9.7af.Eaf.7af#Lafafa9a9bl#M.NaY#Ibn#UaYaYaw#Da9a9.n#p#pa9a9.7.7.7.7a9.7a9.7a9a9#Lafafaf#Lafa9a9a9#pa9a9#pa9#pa9a9a9a9afa9.7af.7.7.7afa9a9a9a9a9a9#L.na9.na9.na9.n#Maw.Nawaw.N#D#D.E.7bj.7#Dbjb.#D",
+".7#D.s#x.5.y#va#.NaYbf.Ca0ao#xbn.s.N.N#D#D#Da9#Dbl#Dbl#DaYaYaYbn.p.taBan#uaZ.FbgbnawaYawbl#D#D#D#D#Dbl#D#D#D#D#D#Dblblawbl.N#D#Da9a9a9.7af.7a9a9afafafajafaf#L#L#La2a2a2a2a2#La2#La2af#La9#D#D#DaYaY#D#D#Da9a9.7a9a9.7a9a9a9.7a9#Lafafafaf#Lafafaja9af#pafa9af#pajaf.na9#s#DblaYa9a9.na9a9a9#Da9aj#Lafaj#La9aja9ajaf.nbl#DaYaw#xa0#x.b#xaY#D#D#p#p#p.na9a9a9#L.7a9a9a9a9a9.7a9#Lafafafafafafa9af#p.na9#pa9a9a9afa9af.7a9#L.7#L#La9a9.7a9a9.7.na9a9a9.na9.na9.na9#D#MaYaw.N#s#D.n.7.7.n.7.E#D#D.7",
+".7a9aY#xaCam#v#vaCaqa0aqama0#UaY.NaY#D#D#D#D#D#Da9#D#D#Dbl.NaY#Ibnambm#SaZa#a#b#aCa0a0#x#x#xaYbl#D#Da9#Dbl#Dbl#DblaYaYaYaYbl#D#Da9a9a9afa9afafafafafafafafaf#Laf#L#L#Laf#Laf#Laf.j#L#L.n.7a9#s#Daw#x#M#Da9#Daj.7a9.na9.7.na9a9.naf#Lafajafafajafafafajafajafafaf#pa9bl#Mbl#Daw#D.n#Da9#D.na9.na9a9af.7afafajaf#Lafa9a9#sblaY#x#IbnbnaYaYawbla9a9#p#pbl#pa9#D.7.7a9.7a9.7a9a9#L#Lafaf#Lafafa9a9a9a9#pa9.n#pa9a9a9afa9a9#L#Laf.7afa9a9a9a9.7a9a9a9.naf.na9.na9.na9#M.Nawaw#D#s#D#Daj.7aj.7#D.7b.a9",
+"a9#saY.s.Ca0aF#v#v.5#vaF.8a0#x#D#D.N#D#Da9bja9.7a9a9bl#D#DaYaY.N.R#Uama#aFaOaFaFb#b#b#a0aCa0#I#xaYblaYblbl#DblaYaw.R#IaYawaY#D#Da9a9a9a9a9a9a9a9a9#p.na9af#La9.7af#Laf#Lafajaf#L#L.3#La9#D#D.NaYaYaYbl#D#D.7a9.7a9.7a9a9a9.7a9.7a9a9a9a9.na9#pa9.n#pa9#pa9#p.na9#sbl#s#Dbl#DblaYa9a9a9.Ea9a9bja9a9.na9#sa9#Da9#Da9.nblbl#D#M#x#x#U#x#UaYaY#Da9#sa9#p.na9a9.7a9a9#La9a9#La9#L#L#L#Lafafa9#La9afa9#pa9#pa9a9a9a9.7#Laf#L#L#L.7#L.7.7a9.7.na9a9.na9.7.n#D#D#s#D#M#D#Mbl.s#D.s#Da9#D.7.na9a9.n.7#D.7",
+".N.N.NaY#Uaqamaoa#aB.0a#ambn#xbl#D#D#D#D#Da9.7a9a9.7a9#D#D.s.NaYaY.RaCamamaF.5b#amaob#amama0a0a0#IaYawaYaYaYaYaYbnbnbnaYaYaYbl#D.na9a9.7afa9a9a9a9af#paf.na9afa9.n.7#La9.7a9#L#Laf#La9a9#D#D.N.NaYaY#Dbl.n#D.7af.7a9.na9.na9a9.na9.na9a9#pa9.na9a9a9.na9.na9a9a9aY#MaYbl#sbl#s#D.n#Da9#Da9#sa9.n#Da9a9.7a9.na9.na9a9#DawaY#x#x#xbnbnaYawaYbla9a9a9a9#pa9#Da9a9.7a9.7af#L#L#La9#Laf#Laja9.7a9.7a9a9.n#pa9a9.7#Da9a9#L#La9#Laf.7afa9a9a9.7a9a9bja9#sa9#D#M#D#M#D#sbl#saY#saY#s#D#s.7a9.E.7#D#D#D#D",
+"#I.N#I#xamaCamaFaB.Gaz#u.8am#xaY#D#D#D.7a9bja9.7.7a9.7a9#D#D#D.N#Ubna0aCama0amao.Va0amaCama0aC.Cbnbnbnbn#x#Ubn#Uam#Ua0awaYaYaw#D#pa9a9#pa9a9a9#p.na9a9a9a9a9.7a9.7a9af.7afa9a9a9aj#La9.E#D#D#saYaY#Mbl#Dbja9.7.7a9a9a9.7a9#sa9#D#p#D#pbl#sbla9#D#sblbl#Dblbl#sblawaY.N#MaYbl#Dbla9.Ea9.na9.7a9a9#D#s#D#s#D#D#D#D#D#MaYbl.Naw#x#Ibn#I.R#xaY#Da9#Da9a9a9a9.na9a9a9.7a9a9#La9#La9a9#L#Laf#La9a9#Dbj#pa9a9a9#Da9.7.7afafa9.7a9.7#L.7a9.7a9a9#sa9.na9#D#D#D#s#D.sbl#Dawbl#saY#sbj#Da9#s#D.Nbl.saY.s.N",
+".Cbf.C.Cam.5aoa#.la5.G.waZ#va0.C#D#D#D.7a9a9#L#La9#L.7.7.7#D#D#D#x#x#x#x#x#xa0bnam.Va0.Va0a0#xbnaY#x#Ia0a0aCa0aCa0ambnbnaYawblbl#Dbl#M#Dblbl#D#Mbl#pa9a9#Da9a9.7a9.7a9.7a9.7a9a9#La9.n#D#D.NaY.NaYaY#D#Da9#Daja9.7a9a9a9a9.7a9.n#D#M#D#sbl#sblbl#D#M#D#M#D#M#D#M#x#xawaY#Dawa9#Ma9#Da9#Da9#sa9#s#D#D#D#D#D#s#D#sbla9blaw#x#x#xa0#UbnaYawaYbl#D.na9a9a9a9a9#Da9#pa9#La9#L#La9.7af#L#L#L.7#L.7.7.na9a9#D#s.7#D.7.7afa9#La9af.7a9.7.na9.na9a9a9#Da9#s#Dawblaw#D.sbl#sbl.s#D#D#s#D#saY.Naw#xaYbf#x#x",
+"aqaoamavam.8a##v.5#Saza7.w#u#vam#Da9#D.7a9.7a9a9.7#L.7#La9bj#D#D.Cbn#xbnaYaY#x#x.pb#.Vamaobnbn#xbnbn#xbn#xbn#xa0a0b#aCa0aw.R.Nblaw#Dbl#Dbl#Dblbl#pa9#Ma9a9.nbja9a9a9#La9a9a9.7a9.na9#D#D#DaY.N.NaYaYbl#D#sa9a9#La9.Ea9.7a9a9#Da9#M#Dbl#Mbl#sbl#s#Mbl#sbl#D#MaY#sa0#I.NaYaYblbl#Da9a9.na9.Ea9a9a9#D#D#s#D#s#D#D#D#Dbl#saY#x#xaC.Ca0#x.R#xaY#D#Da9a9a9a9a9a9#p.na9a9a9a9#La9#La9a9#L#L#L.7#La9.7.7a9a9a9#Da9.7af.7a9afa9.7a9.7#L.7a9a9bja9#s.7.na9#sbl.s.saYaw#saY#saY#saY#s#D#s#D#xaY#x.W.C.C.Waq",
+"amaFaOaFaOaFama0aY#x.8.0#u#uan#uam#xaY#Da9a9.7a9#Laf#L#La9#D#D.sbl#D#sbl#xaYaw#x.Rbn#Ub#.Va0b#b##Ubnbnbnbna0#xbnbnaYaYaYbnbn#UbnaYaYblaYblawblawa9.n#p#pa9#pafafa9a9a9.na9a9a9a9bl#Dbl#Dbl#sblblawaY#D#Da9.7.7#Laf#Laf.n.7#D.7#D.NaYawaY#xbn#Ua0#U#Ubn#UbnaC#UaY#xawaY#M#D.na9ajaY.N#Dbla9a9.na9.nbl#DblaYaYaw#x#MblaYawbn#Ibna0.b#U.RawaY#Mblbl.na9a9a9a9a9afa9#Dbj#D#D#D#D#D.7#Lafa9afa9.7#Da9#sa9a9a9#Da9.7.7afa9a9a9a9#D#s#D#D#Daw.N.NaY.NaY#D#sbl#saY#saY.N.na9#D#s#DaY.N.N#I#x.CamaoaFbya#",
+"bgb#amam.5aCa0.C#M#xa0aFaZ#uaB.0aO#xaY#Dafa9a9a9#L#L.7af.7#D#D#D#D#DaY#D.N.N#xaY.Cbna0a0b#aFb#aF.Vbnbna0#Ubnbn#x#U#x.R#xawaYbn#x.R#I.Raw.RaY#x.R#p#p#pbl.na9a9a9a9a9a9#Da9#s#D#M#Dblbl#sblbl#DblaY#Dbla9#Da9af.7ajaf#L.7a9.n#Da9#M#DaYaYaYaYbnaCbn.paCa0bgaoaC#UaC#I#xaY#MaYblbl#Mbl#M#D.na9a9.n#D#M#D#M#DaY#DaY#M#pawaY#Ibn.Ca0aYbnaY.RaYblbl#Da9a9.na9afa9a9af#D#D#D#D#D#Da9#Daf#L.7a9.7#Da9#D#pa9.na9a9b.a9.7.7a9.7a9bja9#D#D#D#D#DaY#Daw#Daw#D#D#M.N#saY.saY#sbl#sbl.Naw.Nawbna0aCa0.8a#aF.5",
+"amamaCa0a0#x#xaYblaY#Ia0bc#u#ua#amam#x#D#Da9.7a9#Laf#La9a9.7#D#Dbl#D#D#MaYaYboaYbna0a0aoamb#aOb#b#am.Va0bnbn#Ubnbn#xaYaY.R#xawaYbn#UbnaCbn#Ubn#U.RawaYblaYblawbl#D#D#D#Dbl#Dbl#Dbl#Dblbl#Dblbl#DaYaw#D#Da9bj.7#La9#Lafa9a9bja9bj#D#MblawaYaw.R#Ubn.V.8#vaB#S#waOaoa0aC#x#x.N#I.NaY.NaY#D#D#D.n#Dbl#sbl#Dbl#saYaYblawaYaYbnbnaCbn#U.baYawaY#M#Dbla9.na9a9.na9.na9#s#D#s#D#s#D#D#D.na9a9a9a9#D#D#D#pa9a9#Da9#D#L.7a9.na9#D.n#D#D#D.saY.saY.NaY.saY#sbl#s#Daw#DaY.NaY.NaY.saY.NaY#x.Wa0a0a0aOam.8a#",
+"#x#x#x#xaYaY.N.N.7#D#x#xb#aZ.ya#amaObn#Da9#Da9bj#L#L#D.7#Da9.7a9a9.nbl#D#DaYaY.NaC#xa0.Vamb#aFaF#vaFbga0a0bn#xaY#Ubn#U#xaYaYaYaYbn#xa0a0a0a0aCa0bn#Ubn.baYaYaYaYbl#D#M#Dbl#D#Dbl#Dbl#s#D#D#D#D#MaY#Dbl#D#Da9.7a9ajafaj.7a9a9#sa9a9#M#DaYaYaY.b#xbgb##vaBa7.Q.z#S.5aO.8aoao.Ca0.W#x#I.Naw.NawaY#DawaYblawaYaYawaYawaYaY#U.C#U.Ca0aY#x.RaY#xblbl#D#Dbla9a9a9a9a9a9#D#D#D.NaY.N#s#Da9a9#sa9a9#M#Dbl.na9a9a9a9bja9.7a9a9a9.7#D#D#D#saY#DaY#Daw#DaY.N#M#D#s#Dbl.s.N#M.Naw.N#xaY#x#I#x#Ua0a0aCamama0am",
+"aYaYbl.s#D#D#D#Da9#D#s.N.CaOa#aF.5ao#x#Dbl#Da9#Da9a9.7a9.7a9a9.7a9a9a9#Dbl.NblaY#x#xbna0a0amaFaFbmaFaFamaCbn#U#xbnbnbnaY.b#x.R#xaYbn#xbnaCa0bna0#Ubn#Ubnbn#I#xaY.NblaYaYawaYaw#Dbl#Dbl#D#M#Dbl#DaYaY#Dbl.na9.7a9#La9#La9a9bja9#D#MaYblawaY.R#x#U#S#SaB#uaz#u#vaO.8aOaOaOaOaOaOaO.Caoa0.W.C#I#x#I#x#I#x#x#I#x.NaY#x#Ubn#UbnaCbnaC#I.R#IaYawbl.sbl#M#D#Ma9#D.n#Dbl#D#D#s#D#D#D#D#D#Ma9bl#D#D#DblaYa9#p#sa9#D.n.7.7.na9#s#D#s#D.NaY.saY.saY.NaY.saY#s#D#p.s#saYaY.N#IaYaYaw#x#IaY#I#x#x#I#x#x#x#x#x",
+"#D#D#D.7.7.7.7.7.7a9a9#DaY.CaO.y.5.5bnaY#D#D#D#D#D#Da9bja9a9.7a9a9a9#Da9#sbl.N#MaYaY#xawbna0aCb#aOaFbgb#b#a0a0bn#Ibnaw#xaYaYaYaY#Ubn#IaYaYaYaYbnbn.R#xaw#x.R#Ibnaw#IaY.sbl.Nbl.N#D#M#Dbl#D#M#DblawaY#M#D#D#s.7a9aj#L.na9.n#D#s#D#DaY#IbnaY#UbnaCaB#SaB#u#uaBaO.5amaoam.8.5aO.y#1#1#u.yaOamamaoamamamaC.C.C#xbn#x#Ua0aC.CaCa0#Ia0.R#x#UaYaYblaY.N#D#p#D#sbl#Dbl#D#s#D#D#D#D#s#D#Da9#p#MblblawaYaY#Ma9bl#sa9bja9.7#Da9a9.7a9#Daw#DaY.saY#Daw#DaY#D#M#D#sbl.N#saY.saY#xbo.N.N.s.N.Naw.N#D#D#D#Da9#D",
+"a9.7.7af#Lajbp#L.7#L#La9#DaYa0#va#a0a0.Cbl#D#D#Dbj#D#Da9.7a9#L#L.na9a9a9a9#D#D#Dbl#DaYaY#xaYbna0b#aFb#b#aob#aoambnbnbnbn#U#x.R#xaY.RaY.R#IaYaYawblblaYblaYaYaYawbn#I#x#UaYawbl#Daw.N#D#D.NaY.NawaY#xbl#D#D#Da9.Eafaf#La9#D#D#D#D#I#x#xaCa0aCaoaO.FaO#v#u#u#uaFbgaC.Caoa0ao.5aB.z.U.Oaz.y.y#vbm.y#v#v.5amaoamao.8amaoa0aoa0#Ua0#x#U#xbnaw.N.saY#sbl#Dbl#Dbl#D#M#D#D#D#D#D#D#D#D#D.nbl#Dbl#xaYaYaY#pbla9bl#D#s.7.7.na9#Da9#s#D.NaY.NaY.Naw.Naw.Naw#D#M#D#D#Maw.Naw#x#IaYaY#s#Da9.nbj.7.7b..7.7bp#L",
+"#L.7#L#Lbpbp#Lbp.7#L#L.n#D.N.C.5a#amaCaoaY#D#D.N#Da9#Da9#La9#Lafafa9a9#Da9bl#Dbl.n#D.nblawaY#x.Ra0.Vbgamb#amaFaF#Ubn#U#xbnbnaYaYawaYawaYaYblaYaY.bblaYblblblaYaYaYaYaY#I#x#I#x#I.NaYaY.sbl.sbl.NaYaw.N#M#D#sa9.7a9a9.na9.n#D#s#D#xaCa0aoaob##SaBaOaF#S#uaB#v.5aoa0aCamaoao.8#v#v#3ar.wanazaz#3#C#3aX.w.yaOam.8amaCambga0aoa0aCbn#U#x#IaYaw.NaY.NaYaY#sbl#sbl#D#M#D#D#D#D#s#D#D#DblblaY#MaY#IaYawbl.nbl.n#D#Da9#D#Da9.Ea9#D#D#Daw#D#saY.Naw.NaY.N#M#D#s#D.saYawaY#I.N.N#sa9a9.7af#L.E#L#Laj#L#L#g",
+"#L#L#L#L#La2bpa2#L.j.7.7#D.Nbf#IaFaBa7an.5a0#Daf#D.7#D.7a9a9#L#L#D#Da9#D#M#D#Dbl#Dbl#Dbl#Dbl#sblaw.RbnaCb#aOaFa#bg.VambnaCbnaw#x.RaYaYaY.baYawbl#pbl.n#Da9a9#D.7#s#D#D#D#D#D#MaYaw#IawaY#x.N#I#x#IaYaY#D#Da9.na9aja9.n#D.N.N#x.CaCb##vaB#uaBaB#v#SaOaOaOaObg.8am.W.WaCaCamaOaB#u#a#faz#Sa#aBaBaz#u#u#uaz.w.wa7#u#uaB.yao.5aC.C#Ia0.pa0aCbnawaY.sbl#saYaYaY#DaYaY#D#s#D#D#D#D#D#D#s#D#sblaY#x#I#x#D#D#D#Da9.n#D#sa9#D#D#D#s#D#D#D#sbl#s#D#saY.saY#MblaY.C.W#I.N#s#Da9#sa9.7.na9.7#L#L#L#L#L#L#L#L",
+"bpaj#Lbp#Lbp#Lbpa2#L#L.7#D.Nbfbf.Va#an#uaB.8bn#D#Da9#Da9.7a9ajafa9bl#Dbl#D#D#M#D#D#Dbl#D#Dbl.NblaYawbnamb#aFbm#Sb#.Vaobn#xbnaYaY.baY#MaYblaYblaY#pbl#p.n#Da9.n#D#D#D#s#D#s#D#D#saY.s#x.s#I#x#Ibn.W#I#xaw.N#s#D#D#D#D.NaY#I#x.WaCaCaCaF#SaB#v#SaOaOaOb#aOb#bgamao#x#I.CaCao.8#u.w.OaG.G#SaBaBbmaB#v#v#va#aB#u.G.Galbk#Taz.w#v#v.5bg.5bga0ao.C#IaYaY#Dbl#DawaY#D#M.NaY#D#s#D#D#s#D#D#MaYblaY#I#x#x#M#s#D#s#D#D#D#D#Dbj#s#D#D#D#s#D#D#s#D#Daw#Daw.N#M#s#x#I.Cbf.s#D#D.n.7a9.7a9.7.E.7#L.7#L.7#L#L#L",
+"#Lbp#L#g#La2bpa2a2#g#La9bj#D.Nbf.RaCaOaZ.yaFa0aY#D#D#s#Da9a9a9a9#D#Da9#Dbl#D#Dbl#D#M#D#D#M#Dbl#saY#xbnaCa0aOaF#Sb#bg.VbnaCbnaY#xaYaYaY.baYblaYbl#Ma9#p#Da9a9#D.7#D#sbl#Da9#Da9#D#D#D#saY.N#I#I#Iaoao.W#xaY.Naw.N#I#I#U.WaCaoamaobnaCaO#vaF#vaOaFbgambgambg.5.8amav.WaC.CaoaF#uaza6.OazaZaB#vaF#vaFaFam.5aF#v#SaB.G.O#3bv.G.GaPaP.w#u#vaFama0.C.C#IawaYawaY.NaYaYaY#MaYaYaYblaYawblaYaw.NaY#I#x#I#D.N#M#D#D#s#D#s#D#s#D#D#s#D#Dbl#s#p#saY#s.Naw.Nblaw#I#xaY.N.N#sa9.7a9.Ea9.Ea9#L#L#L#L#L#L#L#L#L",
+"#La2bp#L#Lbp#Lbp#L#L#L.7#Dbj#D.NaYbna0aoa##vam.C#D#D#D#D.7#D.7a9a9#D#Dbl#D#Dbl#Dbl#Dbl#Dbl#D#DaYaYaYawbna0b#aO.Fbgb#ama0bnbn#IaY.bblawblaYaY#MaYa9#p#sa9a9#Da9#Da9a9a9a9a9.na9a9#s#D#D.saY.NaY#x.C.C.C.W#I#x#I.WaF.8a0a0a0a0aCa0aCaCb##vaFaO#vbgaob#aoaoamaoaCam.W.Caoa0.8#v#ubkab#aan#vaZ#vaFa#aoaobga0aoamamaOa#aBaZ#u.w.w.G#3#3#a.w.y.yaOb#aCbnbn#I#xbn#UaYawbfaYbfaw#x.s#xaY.NawaYbl#x#Ibn#I#Daw#D.s#D#s#D#D#D#D#D#D#D#D#s#D#D#Dbl#saY#saY.saYaw#xaw.N#s#D#D.7.n.7a9.7a9.7#La9aj.7#L.E#L.7#L",
+"bp#L#L#g#L#g#La2#g#L#L#L.7#D#DbjawaYaCamaoa#.8aF.N.s#D#D#D.n#Da9#sbl#D#D#M#D#D#M#D#M#D#Dbl#sbl#saYaY#x#UbnaCb#b#bgb#bga0aCbn#x.RaYaYaYaYawblaYbl#p.n#pa9a9.nbja9.7a9.7#sa9#D.7.na9a9#D#D#D#saY.s#x#I#I#x.C.Wa0aoaoama0.W.C.Wa0#Ibn.paO#S#v#v#S#Sbgaoaoa0aoa0avaCaqaoavao.8#v.w#T.Y#3an#va#aOamaOa0bnaoambgamaoam.pa0bgb#aoaFaO.ybk#T.GaXaz.waBbyaCa0a0bnaCa0#Ibn#I#x#x#x#x#x#xaC#x#I#x#I#x#I.C#IaY#saY#saY#D#M#D#s#D#M#D#M#D#D#D.n#M#D.s#DawaYaw#x#IaYaw#sa9.7.n.7#L.7aj.7#L#L#L#L#L#L#L#L#L#L#L",
+"#L#g#L#g#g#gbp#L#L#L#L.7af.7.7.7#D.N#xaob#.8a#a##DaY#D#D#D#Da9bjbl#D#Dbl#Dbl#D#DaY#DaY#D#M#DaYaYaYawaY#x#Ibna0aCbgb#bg.VaCbn#U#xaw.Raw#FaYblaYbl#D#p#Da9#Da9a9#Dafaj#Laf#Lajaf.7a9#Da9#sa9#D.Nbl.NaY.NaYaY#I.C.Wamaoaoaobga0aoa0aCam#vaBa##SaBaBaobgaoaoaC.Waqaoav.8ao.5aOaBazaX#4alaza##vaOam.5aC.Wa0.Wa0aob#.8bnaCaCaCaC.W.WaC.y.yaB#ubkbkaX.Oazae#vaO.5ao.pbga0a0a0#Ua0aCa0ao.CaCaCa0#IaCa0#IaYaw#D.sbl#s.N#s#Dbl#D#s#D#D#sbl#D#D#saYaw.saw.NaC#xaw#D#sa9.n.7a9aja9#La9aja9#L#L#L#L#L#L#L#L#L",
+"#Lbp#ga2bpa2#L#g#L#L#L#L#L#L#LafbjaYaY#xama0.5aO.N.NaY.s#D#D#Da9#Dbl#s#Dbl#Dbl#D#M#D#M#DaYblaw#D#MaY#I.R#U#x#U#Ub#b#bga0aCa0#x.R.Raw.RaYawaYblaw#p.n#pa9.na9#Da9aja9af.Eaf#Lafajafaja9#Da9#s#Daw#D#s#D#s.NaY.NaY#U#Ua0.paobgb#bgaO#vaB#u#u.y#ua5aObgaoamaoamaoavam.8.8#v#v#u.w.GaTbw.G.0#vaFaoamaoa0aoama0aqamaoamaCaqaC.W.W#I#Iaxbgaobg#va7.Oau.U#3#3a5#uaB#vaFaoaoa0amaCamaob#aoamaoaoa0aC#Ibn.sawaY.sbl#saY#s#D#s#DaY#saY#D#D#s#p#s#DawaY#Iaw.C#I.N.naf.Ea9.7aj#L#Laj#L#L#Laj#L#L#L#L#L#L#L#L",
+"a2#L#g#g#g#gbp#L#L#L#L#L.7#L.7#L.N.N.s#x#xao.5b#.NaY.N#D#D#D#D#D#M#D#Dbl#D#D#sbl#D#Dbl#Dbl.sblaY.NaY#x#I#x#U#UaC.Vbgb#bgaCaC#U#I.R#x.baY.RaYblaYa9#pa9#Da9#Da9bjaf#Laf#Laf#L#La9#La9a9a9.7#Da9#D#sa9a9a9#D.NaY.Na9#paY#Ua0aoaO.yaBaBazazan#u.Gbk.daOaO.8aoavao.8.8.8bd.yaL#uazaX#0#4#TaZaOaO.5aoa0.Camaoamaoamambcby.8.C.C.W.W.W#U.rbgaO#S.yaB#uaP#3.U#3arbk#u#vaFbgbgaob#aob#bgamaOaoaoaoaC#U#IawaY.sbl.s#D#Daw#DaY#s.N#M#D#s#D#s#D#M.NawaY.s#xaC.C#Ma9aj#L.7.naf#Laf#Lafaj#Laf#L#L#L#L#L#L#L#L",
+"#g#g#Lbp#Lbp#Lbpa2a2#L#L#L#L.7#L#D.N.NaYbo.C.C.W.Vbn.N#Dbjbj.E.7#D#D#D#D#s#D#D#D#D#s#D#s#D#D#D#sawawaYaw#x#U#xaCa0aCa0aC.Vamb#a0aYaw.RaY#M#p#M#pajafaj#pa9a9#Mbl.na9a9a9a9a9a9afajafaja9#D#s#D#Dbl#D#s#D#s#D.n#Dbl#saYaYaw#x#IaCaOaB#1a5.w.wbkaV.Qbt.ybcbc.8bcbcaBaB#u#uaz.waP#T.O#zbw.6aF#vaOaFambga0amamaOaoaOaoaCa0.WaC.W.C#I.WaCaoaOaoaOaobg#v#v#S#1.Q#3agaV#1aB.8aOamaoaCbg#v.8aoa0aC#x#U#Iawaw#D.s#D#s#D#s.N#saY#s#Daw#D#Mbl#saYaw#x#I#xaC#D#sbj#D#D.7#s.7.7.E#L.7#Laf#L#La2a2a2#ga2#g#g#g",
+"#gasbp#g#Lbp#Lbp#L#g#L#L#L.7af.7#D.NaYbf#x#x#x#xaCbn#I.N#Dbja9.7#D#D#D#D#D#D#D#D#D#D#D#D#D#s#D#DblawaYawbn#I.WbnaCa0.pa0aoa0aoam#UbnaYaYaYblblbl#paf#p.n#pa9bl#Da9a9a9aja9af.na9.7af.7a9a9a9#D#sa9#M#D#D#D#D#D#D#D#D#M.NaY#x#x#xa0am#vaB.z#u#Ebi#nbCaX.Q.y.y.QaXbka5#u#u.w.wbkaP.O#4#4.wa##v.5a#aoamambg.5aO.5a#aoamaC.WaC.W.W#IaCaC.WaCaoaoaoao.8bg.8#v#v#u#uaPagagaXbka5aBaBaB.y.z#S.8bgaoamaC#x#IaYaw#D#sbj#D.sbl.sbl.N#saY.s#D#MaYawaY#U#x#Ibj#s#Db.#Db.#Dbj.na9#La9aj.7#L#La2#ga2a2#g#gas#g",
+"#ga2#ga2#g#g.7bpa2a2#L#L#L#L.7#L#D#D.N#M.N#I#x#xa0a0#x.s.N.N#D#D#D#s#D#D#D#D#D#s#D#s#D#D#s#D#D#M#D#MblawaYaw#x#I#Ubn#Ua0.pa0.pa0aCbn#Ubnaw.Rawbl.n#p#p#pa9a9bl#Dafa9a9#pa9a9a9afajafaja9.7#D.n#D#Dbl#D#s#D.n#D#s#D#D#DaY#saYaw.N#UbnaCaOaO#vaBbkbq#Rbqag#3.U#zaVau#Tazazbkbkbv#3#E#0ab.2#uaOaF#vaFaOaOaFaObyaO.8aCaCaC.C.W.W#I.W.WaCaC.WaC.WaCaCaCaCaoao.8.8#v#vbbbbap#3.U.U.U#4a5#E#1#SaFaOaOaFaC.W#x#IaY.s#D#saY.s#xawawaY.saY.sbl.NaY.s#x#x#Ia9.7.E.7.E.7.n.7a9#L.E#L.7#L#L.7#L#L#L#L#ga2bpbp",
+"#g#g#L#gbp#g#Lbp#L#g#L#L#L#Laf.7#Da9#D#DaY.N.N.sbn#Ua0.C#x.N#s#D#D#D#D#D#s#D#D#Da9a9.na9a9a9a9#Dawbl#saYawaY#U#x#U#x#Ubn#Ibna0aCa0a0#UbnbnbnaY.Rbl.n#D#p.n#pa9bla9af.nafa9afa9a9#Laf#La9a9a9bja9a9a9.na9a9.7a9.7a9a9#s#D#DaY.Naw#xaw#xaCamaoaOaB.v.O.Obqadbx.abzbi.U#3#T#3bvagag#3#4#caT.w#vaF.y#v.5#vaOa#ao.5.5aC.CaC#I#I#I#Ibo#I#Iaw#Iawaw#I#U#7.W#IaC.WaCav.W.8#v#v.y.w.G#T#3.Oag.O.w#uaB.ya#aoamaC#x#I#x.N.s#xaw#I#x#Ibfaw.Nbl.s.Naw.NaY.saY.E.7af.Eaf.7#L.E.7aj.7#La9aj#Lafajafaja2#L#ga2#g",
+"#ga2#ga2#Lbp#Lbpa2a2#L#L#L#L.7#La9.7a9#D#D#DaY.NaY#xa0#U.CaYbl#D#D#D#D#D#D#D#D#Da9a9#Da9#sa9.na9#D#M#Dbl#saYawaYawaYaYawbn#Ibn#IbnaC#xbn#Ibna0bnblblbl#Dblbla9a9.na9a9a9a9.na9a9af#L#L.na9bja9#D.na9a9a9.n.7.n.7.Ea9.7a9#s#D#D#D#sblaw#IaCaobg.d.O#ia5.G#zadadadabadaVaVbq#3#3bvbqaba8.YbkaBaO#uaFaOaFao.5aoaqaC#I#I#Iaw#I.s.sawbobo.sbo.sbobo.s#M#M.s#7aw#Iaw#I#U#IaCao.8aO#v#u.Q#3biag#3aXazaZ#vaOam.C#x#I#IaY#I#x#I#I#x#I#xaw.Naw#D#s#D#s#Da9#Laj#L#Laj#Laj#L#La9#L.E#L#L.7#Laf#Laf.7#L#L#L#L",
+"a2a2#L#g#L#L#L#La2bp#L#L#L#L#L#L#L.7#La9.7#Da9#D#DaYbnama0#xaY#s#D#D#s#D#D#D#D#Daj#Lafajaf#La9a9.na9#M#D#MaY#MaYbl#MawaYaYaYaw#x.RaY.b#xbnbn#Ibnaw#xawbl#D#Ma9#pafa9afa9afa9afa9aj#Laf.7a9.n#Da9ajafa9aja9#L.7#Laf#L.E#L.7.Ea9#sblawaw#xaCaCaO.8aBazbka5.Gbk.U#3biad.a.a.DaVaVaV.M#d.S.Yaz#u.0.y#vaF.8a0.W.C#I.C#Iaw.Naw.s.s.s#s#s#s#s#s#s#s#s#s#s#s#s#M#s#s#s#s.n.n#M.raC#OaO#w#u#E.vbkazbkbkbk.w.yaOamaC.C.C#I#I#I#x#I#x#I#x#Ibf.s.N#s#D.7a9.E#L.E#L.E#L#L#L#L.7aj.7af#L#L#L#Laf.nafaj#L#L#Lbp",
+"#gaa#ga2#L#L#L#Lbpa2#L#L#L.7#L.7#Laf#L#L#La9.7#D#saY#xa0ama0aYaY#D#D#D#D#Da9#D#Daf.7aja9#L.n#Laj#p.n#p#Dbl#s#DaY#sbl#D#MawaYaYaY#Mblbl.baYawbnbnaYaYaYaYbl#D#pa9a9a9a9a9a9a9a9a9afafaja9a9bja9#Dafafajaf#L.Eaf.Ea2#Lafaja9a9#s#D#sawaw#IaC.WaoaoaO#uae#1#u#uaz#u.O.Ubi.D#d.D#J.D.abu#6.Y.G.w.yaZ.8aoam.W#xaw#I.saw.saw.s.s#s#sbj.Eb.#sb.b.#sb..E#s#s#s#s.s#s.E#s#s#s#s.r#U#IaCaCbd#1#SaOao.ya5bkaza5.waOamaoaC#x.WaC.W#I#x#I#x#I.Naw#D#D#s.7#L.7#Laj#L#Laj#Laj#Laja9#L.E.7.n.7.Ea9a9a9a9a9.7#Laf",
+"a2#g#L#g#L#L.7#La2#g#L#L#L#L#L#L#La2#Laf#Lbja9a9#DaY.C.VaFa0#xaw#D#D#D#D#D#D#D#Dajafaf#Laf#Lafaf#p.nbl.n#Dbl#M#D#Ma9#M#DaYaw#Dawbl#MaY#Mbn.RaYawbn#xaw#x#Mbla9.naf#paja9af.nafa9aja9#La9a9a9#s#Daja9#La9#Laf.7#L#Laj.n#L.7.n.7#s#Daw#x#I.CaC.8.8#v#v#v#vaO.z#1.z.Gbk.O#zbibBbBad.x#5#9.YaPaz.y.0bgaoam#Iaw.N#s#Dawaw.s#s#D#s#s#s.E.7.E.7.E.E.E.Eb..Eb..E.E.E.E.E.s.saw#IaC.WaC#Oam.d#vao.8aFaO.8.G#3.OaB.8amaCaCaC.Wa0#I#I#I#I#x.s.N#s#D.na9.n#Laj#L#Laj#Laj#Laj.7#L.7af#L#Laf#Lafa9a9.na9a9.7.7",
+"#L#L#L#L#L#L#L#L#La2bpa2#ga2bp#L#L#L#L#L.7a9.7.7.NaY#xbnao.VaF.V#xaY#Ma9.na9a9#D#La9aja9aja9aj.7.na9.na9.na9.na9#p#s#p#D.na9a9.n#p.nbla9#sbl#saYaYaYaYaYaYaYaYaY#pa9#p#pa9#pa9.nafafaja9#D#D.N.N.nafajafaja9ajafajaf.7.na9#D.n#D#Dawaw#I.W#IaCaCaobdaO#v#v.y.y.y#u.QaX.9#TbC#r#r.aatatbB.2aX.GanaC.W#Ibobf.sbf#I#s#s#s#sb.b.bj#s.7.E.E.E.7.Ea9.Eaj#Lajajajajajaj.s#s#I.s.s#I.s.WaCaCaCaCa0.W.W.W#v#vbtbkbk#uaB.0aObgaoaoamaC.C.W.n.na9.E.7.E.7#Lbjb..Ea9aj#L#La2a2.jbpaj#L.E.7bjajaf#La9#Laf#Laf",
+"#L#L#L#L#L#L#L#L#L#ga2a2bpa2a2a2#L#L#L#L#L.7#L.7#DaY#Ibnb#b#aOb##xaY#D#Da9.n.7#Dafajaf#Laf#Lafafa9aja9a9.na9.na9.na9.na9#p.na9a9afa9.n#p#D#M#DblaYawaYaw#xaw#xaY#p.na9a9a9a9#p#pafaf#pa9#D#s.N#sa9a9#La9#Laf#Laf.7aja9.n.7.n#Da9.saYaw#x#I#x.W.WaCao.8.8aObc#v.y#v#ubkbvbvaXbvbC.k.Dai.UaXbv.Ga7aOaoaNboaWbo.s.Nb.#sb.#D#s#sbjb.b.a9b.a9.E.7.Ebjajaja2aj#Laj.naj#D#s.sbo#I.sbo.saCaCaC#I#I#I.W#xavaoaO.y.z#1bkbkaBaBaO.5aoaoav.Wa9#s#L.E#L#L.7.E.7#D.7.E#L#L#Laja2bpa2#L#L#L#L.7af.7afajafaj#L#L",
+"a2#La2#ga2#ga2#ga2#L#ga2a2#g#L#g#L#L#L.7af.7a9.7#Daw#x#xam#SaZa#aC#xaYa9a9a9#Da9aja9#L.n#L.n#Lajafa9.naf.na9a9.na9a9.na9.na9a9.n.na9a9.na9#D#D#saY#x.R#xaYbn#x#xblblbl#Mblbl#Dbl.n#p.nbl#D#D.N.N.naf.nafaja9#L.n#L#La9.7.n#D#s#saYaw#I#I#I#U#Ia0.Wao.8aObc.8.y.y#u#ubk#3bCapbkag.kbqaX.Q.Qbka5#u#v#vamava1bob..E.na9b..E#s.7.E.E.7.E.7.E.7.E.7.naj#L.jaja2ajajaj.n#D.s#I.s#I.saY#I#U#x#I#x#x#Ibo#x#I.CaoaO#v.y#1bkbk#u#vbcam.C#I#sa9.n.7.E#L.E.7#s#s.7.n#Lajbpa2bp.jbp.j#Laj#L#Lajafajaf#La2afa2",
+"#ga2#ga2a2a2#g#La2#ga2#g#L#ga2a2#L#L#L#L.7.7#La9#D#D#xaCaF.0aZana0#xaYbla9.na9#D#Laf#Laf#Laf#La9af#L.na9af.nafa9ajaf#Laf#Lajaf#Lafajaf#L#D.n#D#DawaYaY#IaY#I#x#IaYawaYaYaYawaYawbl#Mbl#D#sbl.s#Da9.na9.7afajaf#Laf.Ea9.Ea9#sa9#s.N#I#x#I#x#Ia0#I.Wao.8.8aObc.ybba5bkaXaX#3bvag#n.c.#bt#baLbcbdaBaB.y#vam.Wbfb..7#s#s#s.7.E.E.E.7#s.E.E.7.n.7.E.7aj#g.ja2.jaja2#L.E.n#s.s.s#I.s.s#x#I#I#x.s#I.Nbo#x#I#I.CaoaoamaObkaz.Q.z#v.8.Wbf.N#s.N#s#D.sa9.E#D#D.E.7#L#Laj#Laj#g#L#g#L#gbp#L#L#L#L#L#La2bpa2",
+"a2bpa2bpa2bpa2a2#g#La2bpa2a2bpa2#L#L#La9#L.7a9.E.7aYaY.Cam#vaZaZaobn#xbla9a9a9#s#L.n#L.n#L.n#Lajaf#Laf.na9a9ajaf#L#Laj#Laf#L#Laj#L#L#Laj.7a9.7a9#D#Dbl.NaYaY#xaY#xaY#x#U#xbn#IbnblaY#MaY.NaY#s#D.na9aja9af.7af.E#Laja9a9b.#D#s#Daw#x#I#I#x#I.Wbn.Wa0aoao.5.8.y.QazaX#3.O#3aVai#n#8aLax#O.W.Wao.8#1aB.y.5.Ca1bo.sbo#D#sb.#D.E.7aj.7.E#D.E.7.E.7.7.ja2.j#gbp.jaj.j.7#s#s#s#s.N.s#Iawaw#D.saw.N.s.s#D.s#x.W.WaoaC.8.0.y#v#v#v.d.8ao#I#Ibf.s#Db.bj.7#Dbj#L#Laj#L#L#La2aj#gaj#ga2asasa2a2a2a2#La2a2#g",
+"#ga2a2a2#ga2a2#ga2a2#ga2a2#L#ga2#L#L#L#La9.7.7a9.7.N.s#xamaF#va#.5am#x.N#D.na9.7af#Laf#Laf#Lafa9#L.n#La9.naf#Laf#Lajaf#L#Laj#Lafa2ajaf#Laf.7.7.na9.n#D.nbl#D#DawaYawaY#U#x#U#x#UaYaw.Nblaw#D#D#sa9.na9.nafajaf#Lafaj.7.na9#sa9#saY#I#I#xaC#xao.CaCavaoao#v.yaI.Qae.O#zaV.Dah#Xag#b#O.r#7#7#7.W#QaObdaB.y#vaoaqbo#Ibobf.N.Ebj.E.7.E.E.7.E.7.E.7.Ebp.j#g#g.ja2#L.j.E.7#s.nb.#s#D.saw.Naw.s#D.s#s.N.s.sbo#I.C.Wam.8bgbgamao.C.8axbcaxaoaobo.N#s#Db.#s.7.E#L#L#L#Laj#L#g#La2#gas.jasbp.j#L#g.j#g#L#g",
+"a2asa2asa2aa#ga2#g#L#g#Lbpa2#L#L#L#L#L.7.7.n.7.7a9.saYaY.Wa0amam.5am#IaYbla9a9a9aja9aja9aja9ajaf#Laf#L.na9#L.n#Lajaf#L.jafa2a2.ja2a2#Laj#Laja9#L#Laf#Lafa9.n#D#DaY#xaYaYaYawaY#U#xbnawaY.Naw#D#sa9.na9af.na9.na9.Ea9.na9.E#D#s#D#I#x#I#x.WaCaoaoao.8.8.8.y#1#1.Q#T#3bq.D#m#haibkavao#7aE.sbo.W.W.s.Wbd.GazaBbc.8##avbobfbobjbjb..7.7.E.7.E.7.E.7#g.j#g.j#g.jaja2.Eaj.n#D.nb.#sb.#D#s#s#D#s#D#s#s.s.N.N#I#x.Wam.WaC#x#I#xaCa0av.8.8.8ao.W#Ibo#s#s#Dbj.7#Lajaj#L#Laj#gaj#g#gasasaU#g#g#ga2bp#ga2#g",
+"a2a2#ga2a2#ga2a2a2#ga2aja2bp.ja2#L.7#L#L.7a9.7a9bj.N.N.N#xa0a0aCaF.5bnaY#D.na9.7af#Laf#Laf#Laf#L.n#L.na9.naf#Laf#Laja2#La2aja2#La2aja2#Laf#L.E#L#Lajafaj#La9#L.nblblbl#MblaYaYawbn#U#x#xaw.N.s#D.nafa9.na9a9a9.na9aj.7#sa9#sa9#s#x#I#x.Wbnavamaoao.8aObd.ybt#ubbag.O#3bA.iaJ#3bbav.h#7b.b.boa1#IaE#I#QaB#uaPaz.Gbcbcavavbobfb.bj.E.7.E.7.7.E.7#L.j#g#g#gaj#g.jajaf.E.n#s#s#D.E#D#s#s#D.s#Db.aW#sbf.Nbo.C.Wav.Cam#Mblaw#x#Iaoaqaoaqavavaoav.s.Nb.#D#s.7.E#L#Laj#g#Lbpa2asas.jaUaU#ga2bpa2#g.jbpa2",
+"#ga2#g#g#ga2#g#ga2#g#g#ga2#g#Lbpa2#L#L#L#L#La9.Ea9a9#saY#I.C.Wam#x#U#x#IaY.N#D#Daj#Laj.7.7a9.7.7a9#Laf#L#L#L.n#Lafafafajafaf#Laj#L#L#Laj#Laf#Laf.jaf#Laf#Laja9#Da9.na9#Da9.n#D#DawaYawawaYaY#MaY.7.n.7.n.7.Ea9.7ajaf.Ea9#s#D#D#D#Ibn#UaCaoao.8#vao.d.d.y.z.y#1bbagaX#3aAbx.caLav#7#I.s#7b.#sb.b..sbo#Iav#QaOaKbtau.GaZaFaq#Ibf.s.7.n#L.E#L.7aja3.Ebp.jbpbpajbpa3#s#D#s#s#s#s#D#sa9.n#D#s#D#s#D#s#x#Iaw#I.N#s#s#D#saY#saYaY#I#I#I#I#U.W#IaC.8ao.C#sa9#L.7.n#L#L#L.ja2.j#gasasas.jas#g.jas#gas#gas",
+"a2#ga2#ga2#g#ga2#ga2a2bp#ga2bp#Lbpa2#L#Laja9.7#La9#D#D.N#x#x.C.CbnbnbnaYaY#D#D#D#L#La9aja9.7.E#D.nafajaf.Eafafaj#Lajaf#Lafajafaf#Lafajaf#L#Laj#L#La2afaj#La9a9.na9bja9.na9#D.na9awblaYawaYawaYawa9.na9.Ea9a9.na9ajaj#L.n#D#s#s.N#U#Ibn.WamaO.8#v#OaObdbd.yaLbb.Q#8.v#3aV.abCbd.8#7#7.sb..sb..sbj#s.s.s#I.Cav.8.8#u#uaB.ybcao.Wbf#D#s#D.7.E.7.Ea3ajbpajbpajbp#L.E#s#D#s#D#s#D#s#D.n.7#s#D#s#D.s.N#x#I.NaY.s.N#s#D#s#D#M.N.s#I#x#I#x#I#x#IaCbd.8ao#s#D#s#L.7aj#L#L.j#gas#g#g.j#gas.jas#gas#g.j#g#g",
+"#g#La2#ga2#ga2bpa2bpa2#L#L#L#g#La2aj#L#L.7.7a9.7.n#D#saY.s.N#x#I#x#xawaY#Ibl.N.Naf.E#La9.7#sa9#D.n#Laf#Laf#La9afaf#Lajaf#Lafaj#Laj#L#L#Lajaf#Laf.j#Laf#Laf#La9a9a9a9.n#Da9.na9#D#D#s.N#s#D#s.N#s#D.Ea9a9.Ea9.7.na9.na9#s#D.s.N#x#Ibnbn.Waobg.8.8.d.d#vbd#v.z#1bb.QaX#3aA.kaXbcao#7.s.sb.b.b.b.#s#s#D.s.N.s#x.CavaFam#v.y#u.ybyby#Ibf.s.Nb..7.E#L.7.E#L.7.E.7.E.7#s#s#D#s#D#s#D#s#D#s#D#s#D.s.N.s#x#IaYbo.s#D#saW.n.7#s#D#s.N.s.s#I#I#I.CaCax#vaO.saw#s#D.n#Lafaja2a2.j#gas#g#g#g#g#g.j#g#gas#g.j",
+"#ga2#ga2#g#L#ga2#ga2#g#L#g#L#L#L#g#L#L#L#L.n#L.7#D#D#D#DaYaY.N.NawaY#xaY#x.NaY#Ma9.7a9.Ea9#D#Da9a9af.7af.Eafaj#Lajafafafaj#Lafaf#Lafaj#Laf#Laj#La2af.j#Laf#La9.7a9.7a9.7a9#Da9a9#s#Dbl.saY#saY#s#D#s#D.na9.Ea9.7a9.n#D#s.N.s#xbobna0aCa0am.8aOaO.8#vbd#vbd.yaL#1.Qbk.Obi#R#8#v.rbo.saE#sb.#sbjb..7.E.n.E#s.s#I#xbo.Wavbc.y#u.yanaoaq.Cbo.N#D.E.7.E.7#L.E.7.E.7#s#D#s#D#s#D#s#D#D#s#s#s.N#s.Naw.N#x#xaw.N#s#D#sbj.n.7.E#DaE#saYboaCaCaoaoaoao#Oao#Iawaw#s#D.n.7a9aj#g#L#g.j#ga2#g.jas#gas.j#gasas",
+"a2bp.jbpa2#ga2bpa2bpa2#L#Lbp#L#L#La2#L.7#L.7a9.7#s#D#D#D#D#s.NaYaYaY.s#x.s#xaYaY#D#s#D#D#D#s#D#sa9ajaf#Laf#La9af#Lajaf#Lafajafaj#L#Lafaj#L#L#L#L#L.jafa2#Laja9a9.na9a9.na9.na9#s#D#D#s#D#s#D#s#D#sa9#sa9#Da9.n#D#s#D#D.saY#xaY#IamaCamaobgaObcbdaOax#vbd#v#v.yaL#1.Qa5#3#R.vbc.W#7#s.sb.b.bjb.bj.E.7.Ea9bj#s#Daw#s.Nbo.C.8#van#ubc#v.8a0bf.s#D#sbj.7bj.7#D.7#sbjawaY#saY#s#D#s#Daw#DaY.saY.NaY.saY.saY.N.s#D#s#D.Ea9#s#s.N.sboawao.8.d.daoaC#I#x.sawbo#M#D#Daj.7#L#L.jbpa2bpa2#g#g#g.j#gas#gas#g",
+"#ga2#ga2#g#L#g.ja2#g.jbpa2aj#Lbpaj#L#Laj#Laf.7af#D#D#s#D#D#D#D#D.N.saYaY#xaY#x#IaY.N#D#D#s#D#Da9#L.na9.na9ajafajaf#Lafajaf#Laf#Lafaj#L#Lajaf#L#La2a2a2#Laf#La9a9.7a9.7#Da9bja9a9.7#sa9#D#s#D#s#D#s#D#D#s#D#s#D#sa9#s.NawaY#I.C.WaF.8b#ao.8bg#vbd.8#vbd#vbd#v.d#v#1#1.wagbi#8ao#O.saE.sb.#sb.#s.Eaf.Ea9.E.n#D#s#Db.#s.N#Iaqambca#aB.y#vaO#I.Cbf#I#s#Db.#Db.#Dbj#saYawaw#D.saY#M.N#M.N#saY.s#x.s#x.s#x.s.N#s#Db.#D#Db..N.s.N#Ibo.W.CaoaxaoaxaCaC#I#x#I#I#Iaw#s#D.n#Laj#L#Lbp#L#L#L.j#ga2#g.ja2.j#g",
+"#L#g#L#g.j#ga2bp#g#L#g#L#Lbp#L#L#La2.7#L.7.Ea9.EaY#D#D#s#D#s#D#saYbl.NawaY#UbnbnawaYawbl#D#p.na9afa9.n#La9#La9#Lajaf#Lafajafajaf#L#Laf#L#L#La2.ja2#La2#L#Laf.7a9a9a9a9.na9.na9a9.7a9#s#D.n#D#s#D#s.N#sbj#D#D#s#DblaYaw#x#I.CaCamaOaF.8.8aO#vbdaO#v.d#vaO.8aObd#v.zaBa5.O#r.Q#O.Wbo.s.sb.aEbjb.bjb.a9.E.7.n#s#D#s#D#D.s.N#Ibf.W.C#v#va#aOaF.8aoam.s#D#s#D#s#D#s.saYawaYaYawblaYaw#DaYaYaYbl.N#x#xaY.saY.N#s.N#saWawaY#I#x#I#x#IaC.C.WamaCaC.W#I#I#I#x#I#I#I.s#sa9.E#L.E#Laja2bpa2a2.j#ga2#ga2#ga2",
+"aj#g.ja2#g#L#ga2#ga2#ga2bpa2#L#L#Lajaf.Eaf.7a9.7aY#s#D#D#D#Da9a9.saY.saYbn#x#xa0#I#x.NaY#M#Da9.na9aja9a9.nafajafafafajaf#Laf#Lafaj#Lajafaja2#L#La2.3#L.jaf#L.na9.7.n.7a9bja9#D.n.7#sa9.n#D#s#D#s#D#s#D#D#s#D#s#DawaY#Ibn#Ia0aoa0#v#vaOaFaObd#vax.ybc.d.8.8.8.8bd.y#1a5aX.v#1ao.W#7.saE.s#sb.#Db.#s.7.E#D#s#D#sa9#s#D#s#D#s#D.s.saFaFamaO.y#v#v.5#I#Iawbf.s#x.s#xawaYawaYblaw#DblaY#Mbl#saYaw#x#I#x.Naw.N#sbj#s#D#I.WaC.WaC.Wamao.8aoao.W#IaY.NaY.N.N.s#D.saw#s#D.n.Ea9aj#Laj#Laj#ga2#gas.j#g.j#g",
+"a2#ga2#ga2aj#L#L.ja2a2aj#L.E#Laj#pa9a9#pa9.n#pa9#M#Dbl#Dbl#MaYaYaYawaYaYawaY#UaYa0.p.VbnaYawa9#La9a9ajaf#L#Lafaj#L#L#Laj#Laj#L#Laf#L#L#L#L#La2#La2a2#La2#La2#L#L#L#L#L.Ea9.7#s#D#La9.E#D.na9.na9.n#s#D#saw.Naw#xaw#I#x#I#U.CaCaoao.VaoaoaO.8aO.8#Oaoaxao.haC#Oao.daO#uagbibk#vav.W#I#s.E.Eaj.Ea3aj.n#L.E.7.nb.#s.N.saY.N#I.N#IaY#I#I.C.8#v.yaBaPaBa#aFa#.5aqaqaN#xbfbf.N.NaY.Naw.NaYaY.Naw.NbfaYawaYaYaw#x#I#xa1#U#I#U#I#x#I.N.s#D#s#D#Dbj#sbj.E.7.Ea9.7.7#L.7.7.7.7.E.7#L.7#Lbpa2.jas#g#gas#gas",
+"a2.ja2#L.j#L#La2a2#g#L#Laf#L.7#La9#pa9a9#pa9#pa9bl#Dbl#sbl.NblawblaYblaY#xaYaY#Ubna0b##UbnaY.n.7#s#Da9.na9.n#Laf#Lajaf#Laf#Lafaj#Lajafaj#L#L#L.j#L.j#La2af#La9a9#L.7#L#La9.7a9#Da9.Ea9.n.7.n.7#s.na9#M#Daw#x.s#xawbn#I#U.CaCaCaCaobgaCaoaOaOax#vao.hao.W.W.Wav.haoax.y#E#zagapbc.Wbo.s#s.E.Ea3.E.7aja9.Ea9b.a9.EaY.Naw.Naw.Naw.N#I#x#Ia0amaF.yaBa7#u.ya#aoaqavaq#x.C#x#I.Naw.NaYaw#x#I#I#x.s#xboaYaY#I#x#I#x#IbfblaYbl.NaY#D.N.N#Dbj#sbj.Ebj.7bja9#L.E#Laj#Laj#L.E#L#L.7aj#La3ajas#g.jas.j#g.j#g",
+"a2#gas.ja2#L#Laja2#Laj#L#L#La9.7.na9a9#Da9#Da9a9#s#D#D#s#D#s#D#Dbl#sbl#D#M#DaYaYaY#Ubga0bnaY#s#D#s#Da9a9.na9ajafaj#Laj#Laj#L#Laf#L#L#Laf#L.j#L#La2a2#La2#Lafa9a9ajafaja9a9#s#D#s#Da9.n#D#sbl#s#D#M#s#D#Maw.N#I#I#I#I#x#I#IaC.CaC.paCaCaoao#O.8ao.h.W.W.W.W.W.W.W#I#Q#v.w.Obiagbk.W.r#I#sb..E.E.Eaja9.E.n.7.n#D.saY.saY.Naw.NaY.Naw.N.s#xaCaq.8aF#Sa7a7#u.yaFam.5ao.Ca0.C#x#x#x#Ibn.R#x#x#xaY#xaY#Ibn#UaC.W#xbf.sbl#s#D#sa9.Ea9.7.E.7.7#L#L#Laj#Laj#L#L#L#L#L#L#Lbpajbp#Lbpbp#Lbp#g#gas#g#gas#gas",
+"a2.ja2#La2aja2#L#L#Laf#L.Ea9aja9a9a9a9.na9a9.na9#D.n#Da9#Da9a9.na9a9#sa9#D#D#D#saY#xaCa0#U#x.N#s#D#D.na9a9.n#La9#L.n#Laf#Laf#Lajafaj#Laj#Laf#L#Lafajafafaj#L.Ea9#La9a9.n#D#D#D#D#D#s.Nbl#D#s.N#M#D#M#D.saYawaw#IaY#I#U#I#x#IaC.WaC.CaC#IaCavao.W.Wav.W.Wbo#I.W.Wbo.W#Q.y.w.Uau#3bd.8bo.s#s#sbjb.a9.E.n.7b.#sbj#s.Naw.Naw.NaY.saY#s#s#D#I#x#Ia0aoaFa#aBaBaBa##va#aoa0aoa0aoa0aC.Ca0#xaCbn#I#xaw#xa0aCa0#x.Caw.N.Na9a9a9a9.7a9.Ebj#L#Laj#L.E#L.7#L#L#Laj#L#Laj#Lajbp#L#Lbpajbpaj#Las.j#g.jas#g.j#g",
+"a2a2a2.ja2#Laf#Lajaf#Laja9a9.7a9a9.na9a9a9a9a9a9.7a9.7.n.7.7a9.7.7#L.7a9#s#D#D#D#D#Mbnbn#x#xaY.N.s#D#D#sa9a9#Laj#L#L#Laj#Laj#L#L#Laf#Lafaj#Laj#La2a2afajafafa9a9a9.na9#Da9#s#D#D#MaYblawaYawaYbl.s.Naw#D.saYawawawaw.s#I#I.C.W.W#U#I#I#x.WaC.W.W.W#I#Ibo#xbo#I#Ibo.Wavbc.y#u.G#3.Qbc.Wbfaw.s#sbj.n.7.n.7#s#D.s#D.saY.NaY.N#M.NaYb.#D#s#Daw#Ia0#UaFaOamam.5.8.yaB.8aO.5ao.5amam.8amaCa0a0#x.C#I#Iaoam#I#xaY#D.N#Da9.7.7.7a9.7.7.7aj#L#L#L#L#Lajbp#Lbp#L#Laj#L#L#L#Lajbpaj#L#Lbp#L.j#gas#gas#gas#g",
+"a2a2.j#La2#L#L#Laf#Lafa9a9a9#D#D.7#Laf#L#Lajafaj.7aj#L#L#L#Laj.7aj#Laj#Lbj.7.7b.a9#D#D#xaCa0.W.NaYaw#D#Da9.na9af#Lafajaf#Laf#Lafaj#Laj#L#L#Laf#L.3ajaf#La9aj.7a9a9a9a9a9bl#DblaY#DaY.NawaYblawaY.NaYaw.sbl#s#Maw.N.saw#x#I#I#I.C#I#x#I#I.W#Ibo#Ibo.Wbf#Ibo#Ibfbo#Ibo.W.8#Qbc.ybkbv.Q.8#I.s.s#s#sb..nbj#s.N#sbj#saY.Naw.saY.NaY.s#D#s.Nbo.N#I#I#xaCamao.Ca0b#aobyaOaF#v#vaB.y.ya#aOaF.5aCa0aC.CaCbn#xaY#D#D#D.7#D#Laj#L#Laj#L.7#L#Laj#L#Lajbp#Laj#L#gaja2bpa2bp#g.jas#gas#gas.j#gas#g#g#g.j#g.j#g",
+"a2.ja2#L.j#Lajafajafa9a9a9#Da9.n#L#L.7#L#L#L.7#Laf#L#L#Laf#Laf#L#L#L#Laj#Laj.7.7#L.n#DaY#x.W.C.C.s.NaY#s#D#Da9#s#Laj#L#Laj#Laj#Laf#Laf#Lajafaj#Laja2afajafafa9.na9#pa9#M#Dbl#DaYaYaYawaY#xaYaYaYaw.Naw#D#sbl#s#M#s#saY.s.s#x#I#I#Iawawawbo.N.s#I.s.s.sbo.N.s.s#I#I#x#Ia1.Wao#vaLbkap.yaobo.N.N.s.7#s#sbj#s#D.sbjaY.saY.Nbl.saY.N.s.N.s.N.N#I#x.sbfbf.C.WaCaqamaq.5aoa##v.0#u#u#ua##vaOaFama0#x#xaYaY#D#Da9.7#L.Eaf#Lafaj#Lbpbp#Lbpa2bp.jbpa2#L#ga2aj#g#L.jbp.j#L#g#g.j#g.j#gas#g.j#g.jas#gas#gas",
+"a2#L.ja2a2#L#L#Lafafa9.na9a9a9#D.7#L#Laj.7#L#L#L#L#Laj#L#Laj#Lajbpaj#Lbp#L.7.7bj#L.7#DaY#xa0.C.WaYaw.N#D#D#D#sa9aj#L.Eafajaf#Laf#Laj#Laj#L#L#L#L.3#L#Laf.7#La9a9a9a9#p#Dblbl.NblawaYaYaYaYawaYawaY.NaY.sbl#sa9.n#D#D#saw.s#I#I#xaw#x.saY.s.s.N.s.N.s.Naw#D.s.N.sbn#I#Iboa1#b.d.8#Tap.Qbcbo#D#sbo.nb.#D#s.Nb.#D.s.Naw.Naw.NaY.Naw.Nbf.s.N.sbfaY.N.saY.sbf.C.Waqavbga#a#a#.yaZ.0anaBbm#vaOaobn#I#xblaY#Ma9a9af#La2#L#L#Lbp#Lbpaj#L#g.ja2bpa2aj#gaja2#g#L#g#L#g#L#g.j#gas#gas#g.j#gas#gas.j#g#g.j#g",
+"as.j#g#La2aj#Laja9ajaf#L#L.n#Laf#Laj#L#L#La2#ga2#ga2a2a2#ga2a2#g#L#Lbpaj#Laj#Laj#D.s#DblaY.VaObm.C#IaYaw#D#s#D#Dbl#Ma9a9af.7aj#Lajaf#Laf#Lajafaj#Lajafaj#Laj#L#Lajafa9a9.7#sa9#DaYaYaYaYaY#xaY#x.N#s#D#s#D#s#Db..n#sbj.n#D.sbfbo.s.s.N.s.N.s.s.N#s#D#s#D.s.N#Ibf.s#Ibo#I.Wav.8bcbta5.U#3aB.5.W.N#x#I#x.saY.s.N.N.s#D#Ma9b..E.7.nbfaw.NaY#xaY#Ibf#D#s.N.N#x.Waqavb#ambga#aO.0.y.yaoaCa0#x#xaY.N#D.Ebj.7.7.7.7.7.7#ga2#ga2#ga2#g#ga2#ga2aj#g#g#L#g#g#L.jbp#Lajbp#L#g.jas.jas#gas.j#ga2#ga2#g.jas#g",
+".ja2#Laj#L#L.7.7af#Lafajaf#Laf#Lbpa2#La2#L#L#Lbp.ja2#g#ga2#ga2#g#L#L#L#L#L#L#L#L.7#D.NaYaYaobmaZamaCbn#x.NaY.N.N#Mbla9.nafajaf.7a9#Laj#Lajaf#L#Laf#L#L#Laf#Lafaja9af.7.n#Da9bja9#xawaYaYawaYaYaw#Dbl#s#D#D#s.7.n.7b..nbj#sbj.s.saw.s#D#saw#D.s#D#s#s.s.N.sbfawbf#Ibf.sbo#Iav.8bc#uaz#3bi.G#vaq.W#I#x#I#x#x#x.s#DaY#s#D#s#D#s#Db.aY.saY.N#I#I#x#x#I#x#I.C.WaqamamaFaObm#vaBaZ#va#bna0#xaYaw#D#D#Dbj.7.7.7.7.7.7.7#g.ja2#g.j#ga2bpa2a2a2#g#La2#L#g.j#g#gajbpbp#Lbp.j#gas#g#g.j#gas#g.j#g.ja2a2#ga2",
+"#L#L#L#L#L.na9.n#Lafajaf#L#L.ja2#L#Lbp#Laj#g#L#L#gbp.j#L#gaj#ga2aj#g#Lbpajbp#Laj.7#D#sblaYb#aOa7b#amaoa0aC#x.baYbl#Mbla9#D#L.na9aj#Laf#L#Laj#Laj#Lajafaj#L#Laj#Lafajaf.7a9a9#Da9#Dblblblblblblbl#D#s#D#D.n.7.E.7.E.7.7.E#s#s#D.s.N.s#Db.#D#s#D#sbj#s#D#s.N.sbfboaYbo#Ibf.Wavbcbc.wa5au.M#3.w#v.5#Ibn#I#IaY.s.N.N#saY#s#D.s#D.s.NawaYawaY#I.C#Ibn.Wa0amamao.5.8.5#uanaB.ya#aoama0awaYaY.NaY#D#D#D#L#L#Lbp#L#L#L#Laj#gbpa2bpa2.j#g.j#L.j#L.jbp#g#Las#ga2#ga2aj#L#L#g.j#g.j#ga2#g.ja2#ga2#g#Laj#Laj",
+"#D.na9#sa9#Da9#Daj#L#L#Lajaf#L#L#g.ja2#g#g#g.j#ga2a2#g#ga2#ga2bp#ga2#ga2#ga2#g#g#Lb.a9aY#UambmaZaO.t#SaFb#a0a0#UblaY#s#D.na9.7.n.7aj#Lajaf#Laf#Laf#L#Lafaj#Laf#L#Laf.7af.7.n.7#D#M#D#D#D#D#D#D#s#D#Da9#sa9.Ea9aj.7.E.E.7.7b.#sbj.s#s#D#s.N#saW#s.N#s.Nb..N.Nbo.N#xbo#x#I.Wav.8.yaz#T#3#z#z.O#uaF.CaC.C#x#I.Naw#D.sbl.saY.s.Nbo#Ibn#U#x#Ua0#Ua0aCb#am.8a##va#aBan#u#u.0aFama0#xaY.NaY#D#s#D.7.7.7#Lbpaj#Lbpajbp#Lbp#L#L#L#Lbp#L#L#L#L#Lbp#L#Lajbpas.ja2.j#ga2bp#Laja2#L#La2aja2#L#L#L#Laj#L#Laj#L",
+"a9a9a9a9a9.na9a9#Lafajaf#L#La2a2aj#g#ga2#L#g#L#g.j#g#g.j#g#g.j#ga2#gaj#ga2#ga2#g#L#L#L#s#xb#aOa#.t#SaZaBbmbga0bnawaYblbl#Da9.n.7#Laf#L#Laj#Laj#L#Lajaf#L#L#Laj#Lajafajaf#La9a9a9#D#D.na9a9.na9a9a9.na9.7a9.E#L.Eafaj.7.E.7.nbj#s#Db.#Dbj#sbj#sbj#sbj#D#s.N.s.N#x.W#xbo#xavambcbb.O.O#a#a.Oba#3aBamaoa0.W#x.s.N#saY#saY#I#x#I#x#IaCa0aoamaob#aoamaF#v#vaB.0aB.0#ua#a#.5ao#xaY.Nbl#sbl#Da9.7.n.7.7aj#L#L#L#L#La2#Laj#Laj#L#g#L#L#Laj#Laj#L#L#Lbp#L.j#g#L#L#Laj.7#L#Laj#Laj#Laj#Laj.7aja9#La9aja9a9",
+"#Da9#s#L.n#L#L#Laj#L#L#g#L.jbpa2#ga2#g.j#gas#gas#g#g#g#g.j#g#gas.j#g#g#g#g.jas#g#gaj#L#D#xaOaZan.FbmaBaZbmaFb##UaYblawaY#s#Da9.7.n#Laj#Laf#Lafajaf#L#Lajafajaf#L.3#Laf#La9aj.7a9#Ma9a9#Da9#Da9#Da9#D#La9aj.7aj#L.E#Laj.7.Ebj.nb.#s#D#sbj#s.N#s#D.s#D#sbj.N.sbf.s.C.Wa0.Wam.8.ybb#a.O.GaPaz.M#C.faOaoaq.W#xaw#D.s#D#I.N#I#xaCamaoaFaO#vaO#S.y#S#v#v#S#va#aOaFaOaFamaoa0#xaY#D#sa9#D#Da9.7.7#L#L#La2#L#g#L#g#Lajbp#L#Lbp#Laj#Laj#L#Laf#L#Laj#Lajbp#L#Laj#L.n.7a9#sa9.n.7.nbj.nbj.na9a9a9.na9#Da9a9",
+".7#L#L#L#L#Laja2#L.jbp.j#L#g#L.j#g#g#gasas.jas#g.jas.jasasas.jas#gas.jasas#gas#gasbp#L.7awam.yan.Fbm.TaZaBaFam.R#IaYawbl.N#s#D#D#Lajaf#Laj#L#L#L#Lajaf#L#L#L#Laj#L.jafajafafafaja9#Da9a9a9a9a9.n#Lajaf.E#L#Laj.7.j#Laj#L.E.7.E#D#saW#D#sbj#sbj#Db.#DaE#D.sbf#IbfaCaq.Waoao#v.y.wbkaz.w.waz#3biau#uaOamao#xboaw.N.s#x#I#xaCambgbg#uaBa7#ua7an#ubh#vaFaOama0aCa0a0a0bn#UaY#sa9af#L#sa9.7a9aj#Lbpaj#g#L.j#gaj#g#L#Laj#Laj#L#L#Lbp#L.E#L.E#L#L#L.7#L.n.7a9#D#D.N.s.Na9#s#Da9#sa9#D.n#D#D#s#D#D#s#D.7",
+"aj.7aj#gaj#gas.ja2bpa2#L#gaja2bpas.jas#gas#g.jasasasasas.jasaU.j#gas#gas#gas#gas#g.ja2#LaYa0.0aZ.Fa#aBaZa#aFbn#UaYaY.N#MaY#D#D#Daj#L#Laf#Lafajafajaf#L#Lajafaj#L.3#La2af#L.Eaf.7a9a9.n.7a9.n.7a9af#Laf#Lafaj#L#L.j#g.E#L.E.7#s.Ebj#s#sbj#D.s#Db..N#s#D.s.sbf.s#Iaqa0ao.C.8#vbbaPbk#u.w.Q.w.wau#N.Q.yavam#I#x.sawaY#I#IaCaoaoaO#vaz.Gaz.GazaS#uanaoaCa0.Wa0.CaC.CawaY#Da9a9#La9aja9a9.7aj#L#L#Lbpaja2bpa2bpa2#Laj#L#L#L#L#Laj#Laj#La9#L.7.7.E.7.E#D#D.N.s.N.s.N#x.7.7.n.7a9#sa9#D#s#D#D#D#D.7#D#D",
+"#g#g.j#g#g#g.j#g#g.j#g.j#g#g#g.j#g#gas#gas#gas#g.jasasasas#gasasas#gas.jas#g.jas#g#g#ga2a9.C#SbhaFbgamam.8amaCa0aYaYaY#Da9.E#Laja9#Laj#Laj#L#L#L#L#Lajaf#L#Laf#Laja2ajaf#Lafa9a9.na9a9a9a9.7a9a9af.n#Lajaf.7#L.E#Lbpaj#g.n.7#s.N.s#DaY.saY.Naw#x.saYbo#x#x#I#x#I.8amaob##v#u.G.2bkaz#ubbaP.w.G.2.u.Oa#aoav#Ibfboawbo#xaoamaBan.Gba#a#ua#ao.5#Qaq.W#x#x#x#I#x#xaY#xawaYbl#D#M#Da9a9a9a9a9.7a9a9a9#L#Lajaf#Lajaf#La9.n#D#saY.NaYaY.N#sbl#D#MaY#M#D#D.n#Da9#D#D#D.n#Laj#L#L.E#Laj#L.7aj#Laj#Laj#Laj",
+"#g.j#gas.j#gas.j#ga2a2#ga2.jas#gas.j#g.jas#g.jas#g#g.j#gas#gas#g.jas#gas#gasas#g#g#La2.j.7bnaF#ub#b#amb#ama0bn.CaY#M.N#sa9.na9#Lajaf#Laf#Lafajafaj#Laf#Laj#Laj#La2afafaj#L#La9.7a9.7a9.7a9a9a9.7afafafa9#L.n#L.7ajaja2.j.7.E#D.N#Daw.Naw.N#I#x#x#I#x#I#x#IaC.CaC.5bg.8aO.0.w#T.2.G#u.ybbbb#u.GaX.e#z#SaoaC.s.W.W#I#Iaoam#v#u.G#TarazbmaoamavaN.C#x#xawaY#x#IaY.saY#Daw#D#Da9a9a9#sa9.na9a9.na9.na9a9a9#sa9#Da9#sa9a9a9#D#Mbl.NawblblaY#MaYaYaYaw#D#D#s#D#D.n#D#D.n#La9ajaf#Laf#Laj#L#L#L#L#L#L#L",
+"#g#g#g#gas#g#g#ga2.j#g.j#gas#g.j#g#gasas#g.jas#g.jas#gas.jas#gasas#gas#gas#g#gasa2aj#g#La9aYa0bmbgambgama0.C#x#xawaY.N#Da9.7#L#Laf#Laj#Laj#Laf#L#Lafaj#Laf#Laf#Laja2#Lafaf#L.na9.na9a9a9.Ea9a9.7ajafajaf#L.7#L.7bp.Ebp.Eaj.7#s.Naw.Naw.Naw#x#I.N#I#x#I.C.Wa0aoamao.5ao#vaBazal#3aB#vaF.y.yaB#u.wa6#z.w.8.C.Wam.CaoamaO#v#uaz.G.GaBaFama0#xawbfa1aY.NaY.NaYaY.NaY.N#D#D#D#Da9a9a9a9.7#D.n#D.7a9a9#D#s#D#D#D#s#D#Da9.na9a9#D#Daw.N#D#s#D#D#D#s#D#D.7.7.7.7.E.7.7.7#L#Laj#L#Laj#L#L#Laj#Lajbpaj#Lbp",
+"as.jas.j#g.jas.ja2#ga2as#g.j#gas.j#g#g.jas#g#gas#g.j#g#gas#gas#gas.j#gas.jasas.j#ga2#gaj#LaY#Uamb#ama0a0aCbn#Ibn.Nblaw#Da9aja9aj#Laj#L#Laf#L#Lafaj#L#Laj#L#Laj#L.3aj.3#L#L#La9.7a9a9.7a9a9.7a9a9afa9#La9aj#L.n#L.E.7aj#L.E#D.sbfaw#M.NaY.s#x#IaY.C.W.C.W.Caqaqao.5aoaF#v#uaz#T.o#vaO.8.8bcbcaB#ualbaa5#vaoa0avaoaF#vbm#uaz#u#uaZa0am#x#M.N.N.N.N#D.Naw.N#s#D#D#D#D#sa9#Da9.n#L#L.na9a9.7a9a9.7#s#D#D#Da9#Da9#D#s#Laf.7a9.n#Da9a9#L.7#L.7aj.7#L#Laj#Laj#L#L#Laj#L.j#L#La2#La2#La2ajbp#Lbpa2#L#ga2",
+"#g#g#g#gas#g#gas.j#g.j#g#gas#ga2#gas.j#g#g.jas.j#gas#g.jas#gas#gas#gas#gas#gas#gaa.j#g#L#LbjaY#Ua0aCa0a0#xbn#xawbl.N#D#Da9.7#L#Laf#Lafaj#Laj#L#Laf#Laf#Lafajaf#L#La2#Lajaf#La9a9.n.7a9a9a9a9a9#Lafafajafaf.7#L.7#L.7#Laja9#saY#IaY.saY.saY#I#x.s.C#xaC#x.Caoaqamao.8a##v#u.Ga5azaOaOaoao.8#v.ya5ba#z.w#vao.Wam#vaB#uaB#uaZa#aF.5#xawaYbla9.E#D#sa9#sa9#D.7.7a9#s.7a9.7.7#L#L#L#L#L#Lajaf#L#Lajafa9.7.na9a9.7a9a9.7aj#L.7#L.E#Lajafajaf#Laf#Lajaf#L#L#L#Laj#L#L#L#La2aj#gaj#gaj#g#La2.jbp.jbp.jbp",
+"as.jas#g.jas.j#ga2as#gas.j#g.j#g.j#gas#ga2#g#gas#g.jas#gas#gas.j#gas#gas#gas#gas#g#ga2bp#L.na9bla0bnbn#UaYawaYaYaYbl#Da9.n.7afaj#Laj#L#L#L#Lafaj#Laj#Laj#L#L#L#L.ja2a2a2af#L.n.7a9a9a9a9.7.n.7a9afaf#Lafaj.7af.E#Laj#L.Ea9aw#x#IaY.saY.NawbfaY#x#I#x#I.C#I.C.Wa0.8am#v.0#u.G.w#uaO#v.8#Q.8bdbb.Q.K#z#u#vaFaoaBa7a7#u#SaFaoamaCbnaYaY#Da9aja9a9bj.7a9.7a9.Ea9.7.7af.7#L#Laj#L#La2ajafaf#L#Lafafafaj#Laf#Lajaf#L#La9#L#Laj#La2a2a2#ga2.j#g.ja2a2#gaj#gaj#g#La2bp.j#g.j#ga2#ga2#g#g#g.j#g#g#ga2a2#g",
+"#g#g#g.jas#g#gas.j#g.jas#gas#ga2as.j#g.j#g.jas#ga2#g#g.jas#gasasas.jas#g.jas#g.jasaa#g#Lbp.7afajbn.RaYaYaYaYaYaYbl.N#D#D.7#L#L#Laf#Lafaj#L#L#L#Laf#Laf#L#La2#L.3#La2#L#L#Lafa9a9.n.7a9.7a9a9a9.7afaf#Laf#La9aj.7.7.7aja9#saw#x#I.N#saY#I.NaY.s#I#x#I#x#I#xaC.CaoamaO.yaB.waz#uaZ.8bc.8.8#Q.y.Q.w#4#4.wa##vaB.Qaz#vaFama0#x#x.N.s.N#D#sa9.7a9.E#D.E#L.7aj.7#Laja9aj.7#L#L#La2.ja2af#Lajafajafaj#Lafafajaf#Lafajaf#L#L#La2a2.j#ga2.jas#gas#g.jas#gasa2#g.j#g.j#g#g#g#g#g.j#g.jas.ja2#gas.ja2.j#g#g",
+"as.jas#g#gas.j#ga2as#g#gas.j#g.j#g#g#ga2a2#g#g.j#g.jas#gas.jas#g#gas#gasas#gasasa2#g.jbp#LajafafaYbnaYaYblaYaY#MaY#D#sa9a9.7#L#L#Laj#L#La2afa2#L#L#Laja2#Laf#L#La2.j#L.3aj#La9.7a9a9a9a9.n.7a9a9afaj#La9aj#L.7#L#D.na9#s.naw#x#Ibl.Naw.Naw.NaY#xawaYaw#x#I#xaC#I.8aO.yan.w.G.w#vb#by.8.8bc.ybb.Qay.Y.G#u#1a5.GaBamamaobn.s#Da9.7aY#Da9.7a9.7.7#Da9aj.7af.7af.7#L.7afaj#La2a2a2.j#Laf#Laf#Laf#Laf#La2#La2#La2a2a2.7.j#La2#gaa.jasas#gas.jasasas.j#g.j#gas#gas#gas.jas.j#gas#g#gas#ga2.j#ga2#ga2a2",
+"a2#ga2.jas#gasas#gas.j#g#g#gas#g.ja2a2a2.ja2a2#ga2#ga2.jas#gas#gas#gas.j#gas#gas#g.j#ga2bp#L#Laj#L.naY.R#xaYaY#D#Dbl#D.7#saf.7.n#L#L#L#L#Laj#L#Laja9#La9aj#L#L#La2a2a2.j#L#Lajafa9#sa9.7a9a9a9.E#Lafafajafa9.na9aj.na9#s#D.N#IaY#s.sbl.s#D#s#D#s.N#I#x.W.Cavam.5.8aF.0azal#T.w.0.8#v.8byaKbbaIaP#aba#N.O.GazaB.5#xaw.N.NaY#D#D#s.7.n.7#L#La9.7a9#L.7af.E#L.E#L#L#L#L#La2#La2bpa2#L#Laj#La2#L#Laja2aja2#ga2.jbpa2as#gas#gas#gas#g.j#g.j#g#g.j#gas#ga2.j#g.j#g.j#g#ga2#g#ga2.j#ga2a2#g#ga2#g.j#g#g",
+"#g.j#g#g#g.j#gas.j#g#gas.j#g.j#ga2a2#ga2#g.ja2a2#g.jas#g#gas#gasas.j#gas#gas.j#gasasas#g.j#g#Lbp#La9#Dbl.RaYaY#D#D#Da9#D.7a9.7#L#L#Lbp#L#Lbp#L#L#L#L#L#g#La2a2#Las.ja2a2#Laf#L.7a9.7.na9a9.7a9a9af#L#La9#Lafaja9.na9.n#D.s.s#x#I.Nbl.s#D#M#DaY.saY#I#xaC.Caqao.5bgaO#uaz.G.G#u.y#x.W.8#v#v.y.0.ybabaay.f#uaB.8a0bfaYaY.N.N#D#D#Da9.7.7af.7.7af.E.7aj.7#La9#L.n#L#L.jaf#L#gaja2#L#La2#Lafaj#La2#L#g#g#L#g#L#ga2#g#gas#gas.jas#gasasas#gas#gas#g#g.j#g#gas#ga2as#g#ga2#g#L#gbpa2bp.j#L#gajbpa2bpa2",
+"a2a2#g.jas#gas#g#gas.j#g#gas#g#g.ja2a2.ja2a2a2.jas#gas#gas#g.jas#gasas#gas#gasas#g#g#ga2#g#L#La2#La9a9#DaYbl#Dbl#Da9#Da9a9.7#L#La2#g.j#g#ga2#ga2.j#ga2.j#g#g#g#ga2a2#g#La2aj#L#L.n#Da9a9.na9a9.7#Lajafajaf.7a9.naf.na9aE.N#I#Ibn.saY.Naw.NaY.saY#x#I#x.Wa0ao.5.8aoaO#u.G.Gaz#ua##IaCaCaobg#va7azaH#zaz#uaFam#x#xaw.N.N#D#D.n#D.7.E#L#L#Laj#L#L#Laf.7#L#L.E#L#L#L#L#La2#La2#L#gaja2#L#La2#L#L#La2a2#g.j#ga2#g#L.jas#g.jas#gas#gas#g#g.j#gas.j#g.j#ga2.jas.j#g.j#g.j#ga2.j#ga2#g#L#g#gaja2bp.j#L#g",
+"a2#g.jas#g#g.jas.j#gasa2#g.j#g.ja2a2#ga2#La2a2#g.jas#gas.jas#gas#gas#gas#gas#gasas.j#ga2#gaj#Lbp.j#La9a9#D#Dbl#Dbl#D.7a9.7.7af.7a2a2a2a2a2a2.ja2bpaj#Lbp#Lbpa2#L.j#g#La2#L.7#L.7a9a9a9.7a9.7a9.n#Lafaf.7afafaja9.na9.n#D#s#I#x#IaY.sawaY.saYaw.N#I#x#I.C.W.5av.5bgaOaB.G.O.G.y.5aO.8bgaFaB.Gau#N#zaz.0aFa0#x.NaY.N.N#D.n#D.7.7a9#L#La9#L.7#L.7#L.E#L#L#L#Laf.7#L#La2#L.jbpa2#La2#La2#Lajafa2#L.j#L#g#L#gaja2#g#g#gasasas#gasasas.jasasas#gas#gasa2.j#g#gas#gas#g#ga2bpa2bpaja2aj#ga2#L#g#La2bpa2",
+"a2#ga2#g.jas#g#g#gas.j#ga2a2as#ga2aja2.j#g.j#La2#g#g.j#gas#g.j#g.jas#g.jas#g.jas#gas#ga2#g#La2#L#L#g#La2a9a9#D#D#Da9#Da9.7a9#L.7a2.j#g.ja2aja2#L#L#g#ga2.j#L.j#g#La2#Laj#L#La9.7.na9.na9a9a9a9a9#L#Lajafaja9a9.naf.n#s#s.N#I#x#U#I#x#x#I#x#I#x#I#x#I#x.Wamao.5.8ao#v#u.Garaz#ua#.y.0#u#u#aau#3alaza#b##I#xaw#D#sa9#s.7a9.7a9aj#L#La2aj#L#Laf#La2#L#La9aj.7#L#Laja2#L#g#La2#L#g#Laj#L#La2#L#La2#L#ga2#ga2#g#g#L#gas#g#gas#gasasasas#g#g.jasas.j#g#gas#g.j#g.j#ga2.jbpa2bpa2bpa2bp.jbp.jbp.jbp.jbp",
+".j#g.ja2#g.j#ga2.j#ga2.j#g.j#g.ja2#ga2a2a2a2a2#g.j#gas#g.j#gas#gas#gasas#gas#gasa2.j#gaj#g#Lbp#La2#La2#L#La9#Dblbl#Da9bja9#L.7#L#L#Laf#L#L#Laf#Laj#L#L.7#L#L#L#L#L#L#L#L#La9#L.7a9#Da9a9.7a9.Ea9#Lafaf#Lafa9.na9.na9.E#D#s#x#I#I#I#I#x#I#x#I#x#I#x#I#x.WaC.5.8.8.5aBa5#a#TaPaPbk.U#3al#3#T.G.w.0aFaC#x#x.N#D#Dbj#Dbj.7.7aj#L#L#La2#L#La2#La2aj#L.7#L#L#L#L#Laf#Lbp.j#La2bpa2aja2#La2af#L#Laja2#L#g.jbpa2bpa2#g.j#gas.jasas.j#gas#gasasas#g#gas#ga2.jas#ga2#g.j#g#L#gaja2aj#gaja2bpa2#L#L#L#g#La2",
+"a2#ga2#ga2a2#g.j#ga2#ga2a2#g#g#g.j#L.j#L.j#La2a2#gas.j#gas#g.jas#g.j#g.j#g.j#gas.j#ga2a2#gaj#L#L.ja2#g.j#g#L#Dbl#Da9a9a9.7a9.7a9a9a9a9a9a9#sa9#Da9a9.na9a9a9#Laf#Laj#L.7a9.E.7a9.n.7.n#Da9a9a9a9#Lajaf.Eaf.na9.naf#Ma9.s.s#I#x#I#x#I#x#I#x#I#x#I#x#I.CaCaq.8am#vaO#u.G.Uay#3#3bv.M#C.O#u.y.5am.C#UaYaYaw.N#D.7.7.7.7aj.7#L#Laj#ga2#ga2a2.ja2a2a2ajaf.7#L.7aj.7#La2a2bpa2aja2bpa2#L#Laja2#La2#L#ga2bpa2.j#g#ga2#gas#gas#gasasas.jas#g.j#gas.j#g.j#ga2a2.ja2a2#gas.j#L#g#L#g#L#gaj#Laj#L.j#La2aj#g",
+"#g.j#g.j#g.ja2a2#ga2.j#g.j#g.j#ga2a2a2a2#g.ja2#g.j#gas.j#gas#gas#gas#gas#gas#g#ga2#g.j#L#g#La2bp#La2#gas#g#La9bl#D#Da9bja9.7.n.7a9b.#D#s#D#D#D#s#p.nbl#p.na9a9a9#L.7#L#L#La9.7.7a9#Da9.na9.n.7a9#Laf#Laf#Lafa9.na9.n.E#s.N.s#x#U#I#x#x#I#x#x#I#x#I#xaC.Wa0.8.8.8.yaB#T#4beaM.Y#T.fa7#uaOa0bf.s.N#Mbl#s#D#D.s#DaW.E#L#L#Laj#L#g#ga2a2.ja2a2a2aja2.7#Laj#Laf#L#L#L#L#ga2#L#g#La2#L#La2#L#L#L#La2aj#ga2#g#g#ga2#ga2as#gas#gas#g#gas#gasas.j#g#gas#g#g.ja2#g#g.ja2.j#L#g#L.jbp.j#La2aj#L#Lbpaj#g#L#g",
+"a2a2a2#La2a2.j#ga2.ja2a2a2a2#ga2#ga2#ga2a2a2#ga2asaa#ga2#ga2#L.j#La2#L#Lajafa2#L.ja2#ga2#La2#L#L#L#Laf#Laj#L#L#La9bl#Da9blaYaYaYblbl#DaYaYawaYaYblblblblblblbla9#Da9#D#sa9#Da9#D.na9.7a9.7a9a9.n#Laf.Eaf.Eaf.naf.na9#M#D#saY.saw.N#s#s#D#s#s#D#s.C#I#I.C#Iao.5#v#u.OaVadbi#3#1aBbdaO.W.C#IaYbf.N#D#s.7#L#L#Laj#L#Lbp#Lbpbpa2bpa2.j#g#g#Lbp#Lbp#L#L#L.7.7.E#L.7#La2a2a2.ja2#ga2.ja2#L.3a2a2#g#g#g#L#ga2#ga2#g#ga2#ga2#ga2.j#ga2#g#gas#gas#g.jas.ja2#g#L.j#L#g#g#L.ja2a2#L#L#L.7#L#L#L#La2#L#Laj#L",
+"a2a2.j#L.j#La2a2a2a2a2a2#ga2a2a2.ja2a2.ja2#ga2a2asa2asa2.j#L#g#La2#L.jaf.3#L#La2aa#ga2a2#L#Laj#Lafaj#L#L#Lbpaj#La9#D#p#Dbl#DaYaYbl#DblaYaw#xaYaYbl#Dbl#Dbl#Dbl#Da9#sa9#D.7#D.7#D.7a9a9a9a9a9.7a9.n#Laf#Laf#La9a9.n#s#D#M#DawaY#I#s#D#s#s#D#s#D#sbf#Ibf#I#Ia0bc.y.G#zad#4aXbk#v.8bgao.C#x.N#x.N.s.7bj#L.7aj#Lbp#Lajbp.j#L#gaj#g#L#gbpa2bp#L#La2#L#L#L#Laf#La9#L#L.j#ga2#ga2a2a2a2a2#La2aj#L#g#L#ga2#g#ga2#ga2#ga2#g#ga2#g#ga2bpa2as.j#g#g.j#ga2#g#L#Laj#Laj#Laj#L#gaja2ajafaj#L.Eafaj#L#Lajaf#L#L",
+"a2#La2a2a2.j#ga2.j#L.j#ga2a2#ga2#ga2#ga2#ga2a2asa2.jasa2#ga2#La2#La2#L#L#Laf.j#L.j#L.jafaj#Laf#Lafafaf.7#L#L#Lbpa9#pa9#D#Dbl.sbl#D#MblaYaYaYaYawbl#D#M#Dbl#D#Mblbja9bja9#D.n#Da9.na9.7a9.7a9.na9#Laf.Eaf.Ea9.n.n#D#M#saYaw#IaY#IaY.s#D#s#D#s#D#s#I#x#I#I.Cao.y#1#T#rbq.G#u.yaOaCamaC#xawaY.s.N.N.7aj#Lbp#Lbpa2#ga2#Lbp#L#g#L#g#L#ga2#gaja2bp#Lbp#Laj.7aj.7aja9#L#L#L#L#L#Laj#L#L#L.j#La2#ga2#g#g#L#ga2#g#g#ga2#g#ga2#g#ga2#g.j#g#gas#g.jasa2.j#gaj#L#Laj#L#Laj#La2a2a2#L#L#La9#Lajaf#Lajaf#Laj#L",
+"a2.ja2.ja2a2a2#ga2a2#ga2a2#g.ja2a2a2a2a2a2.ja2a2asas#ga2a2#L.j#La2aja2a2a2#Laf#Lafa2af#Laf#Lafajaf.E#Laj#L#Lbpa2a9.na9#Da9a9#D#Dblbl#DaYaYaYaYaY#Dbl#Dbla9#D#D#Da9#Da9#Da9bja9bja9.7a9a9.na9#Da9#D.na9a9a9a9#D#sbl#saYaw.s#x#I#I.saw.saY.s.Naw.N.s.s#IaCaoao#u.G#z.UaX#uaOaOao.W#x#IaY.N.N.N#D#D#L.7#Laj#La2#ga2#gbpa2bp.jbpa2bp.ja2#g#L#Laj#L#La9.7a9.7a9.7.7a9#L#L#Laj#L#L#La2af#La2#L#L#g#L#ga2#g#ga2#ga2#g#ga2#g#ga2bpa2bpa2#g.ja2#ga2#g.ja2#Laj#Laj#Laj#L#La2.j#Lajafaj#L.E#L#Laf#L#L#Laf#L",
+"a2bpa2#La2.j#ga2aja2a2a2.ja2#ga2#g.j#ga2#ga2#ga2a2aa#ga2#ga2bpa2#La2afaja2afa2#Lajafajafajafa9a9af#Laf#L#L#L#Lbpafa9a9a9a9a9#D#D#Dbl#DblawaYaYaY#D#Dbl#D#Dbl#D#Da9b.a9.7a9#Da9#Da9.na9.7#D.na9.na9a9#D.n#D#s#D#M.NawaY#I#x#I#Ia0#IaY#Iaw.Nawbo#x.s#x#I.WaF.yaz#3.a#4a5#v#vaoaC#IaYaY.saYaw#D#sbj#Laj#Lbp#L.j#g.jbpa2aj#g#L#g#L#g#g#L#g#L#g#Lbp#L.na9a9.na9a9.na9#Lajaf#L#L#L#Laj#Lafa2#L#g#L#g#g#L#ga2#g#ga2#ga2#ga2#ga2.j#ga2#g.jas#g.j#g.j#ga2aj#L#Laj#L#Laj#Laj#La2#L#Laf.7af#Laj#Lajafaj#L#L",
+"a2.ja2.j#L#ga2a2a2#ga2#ga2#ga2a2a2a2a2a2a2a2.ja2as.jasa2.j#La2#La2#La2a2#La2afajafafafafaf#pa9.n#Laf#L#L#L#L#g#Lafa9a9a9a9a9a9a9a9#DblaY#DaYawaY#D#M#D#D#M#Da9#Da9#Da9bja9.7#s.7a9.7a9.na9a9.7#D#s#D#s#D#Dbl#s.N#M.Naw#I#I#IaC.W#I#xbo#xbo.N#IaYbo.W.Wa0#vaz.Y#.aVapaOaO#O#I#I#xawbl.N#D#D.7a9.E#L#L#L#gaj#g#g#ga2bp#gbpa2bp.j#La2#g.j#L#La2#Lbpa9.7#D#D#s#Da9#D#L#L#L#L#L#L#L#L#L#La2#L.j#Lbpa2#ga2#g#g#L#ga2#g#g#ga2#gbp#g#L#g#g#g#ga2a2#g.ja2aj#Laj#L#Laj#Laja2#Lajafaj#Laj.7aj#Laf#L#L#Laf#L",
+"a2#La2#ga2.ja2#ga2.ja2a2a2a2#g.j#ga2#g.j#ga2#ga2#gaa#ga2#ga2aja2#L.j#La2#L.jafaf.3ajaf.n#p.n#pa9afajaf#L.7#L#L#L#L#La9a9#D.7a9#Da9a9bl#DblaYaYaY#D#D#D#D#D#D#D#Da9bja9a9.7#Da9#Da9a9a9#Da9#sa9a9#D#D#D#D#s#D#saYaw#I#x#IaC#x.WaC#I#I#x#I#x#I#I#xa1ao#Q.8.w#4.P.4#u#Sao.WaCa0bobfbl#s#D.na9#L.7#L#Lajbpa2a2#g.jasbpa2#L#g#g#L#gbp#ga2#g#Lajbp#Laja9a9#M#Dbl#D.na9.7a9.7a9.Ea9a9.7af.jaf#La2#L#L#g.j#ga2#ga2#g#L#ga2#ga2bpa2a2.j#g.j#g.j#g.ja2#g.j#Laj#Laj#L#Laj#L#Lajaf#L#Laf.7af#Laj#Lajafaj#Laj",
+"a2.j#L.j#La2#L.ja2a2#ga2#g.ja2a2a2a2a2a2a2a2a2a2asa2asa2a2a2bpa2af#La2afa2#L#Lajaf#pafafa9#p.n#p.7af#L#L#Laj#Lbpaf#La9.7a9a9bja9a9#D#Dbl#DaYaYaY#D#D#D#Da9#Da9#D#sa9a9bja9a9bja9.Ea9.7a9.Ea9a9a9#s#D#s#D#Dbl.s#Daw#x#IaC.WaCaCao.Wav#Ia1#I.Ca1#I.Cav.8aO.G#dbs#BaLaB.8aC#I.WaYbf#sbl#Da9a9.n#L.E#L#L.jbp.j#gasasa2bp.j#L#ga2bpa2#g#L#g#L#g#L#L#La9#Da9bl#s#p#Da9.7a9.E.7a9.7.7.n#Laf#L#L#gaj#L#g#ga2#g#gbp.j#ga2#g#ga2#g.jbp#gbpas#ga2#ga2#g.ja2.E#Laj#L#Laja2#Laja2aj#Laj#L.E#L.Eafajaf#L#Laf#L",
+"#L#L#L#L#La2bpa2#Laj#L#La2bpa2bp.L.L.jasaa#ga2#gaja2a2a2a2#La2#La2a2#L.j#La2afa2.3aj#p#Mbl#D#D.7ajaf#Laj#L#Lbp#Laj#Laf.n.7a9a9.7#pa9#p.NaYaYbl#Dbl#D#Da9#Da9.7a9a9a9a9afa9.7a9.7#Dbl#Dbl#D#D#D#D#xaYaYawaYaYaY#Ubn#I#I#I.Wao#v#vaC#I#x.W#Ibo.C.WavaoaZ.o.Yab#3.QaOaoaC.W#I#x.s.Nbl#sa9a9aj#La9#L#L#g#L#ga2#g#L.j#g#g#g#ga2bp#ga2.ja2#L#Laf#La9.7bl#DblblaYaYaYaYaj#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2#ga2a2a2#g#La2#La2#g#La2a2#L#L.ja2.ja2.j#L#Laj#L#L#Laj#Laj#Laj.3#Lafajaf#Lajafa9.na9a9.na9.na9",
+"#L#Laj#L#Laj#La2bp#L#gaj#L#L#Lajaa.jaaaaa2#ga2bp.3#L#L#La2#L.j#La2a2a2#La2#La2#L.3af#pblbl#Da9a9afaja2#La2#La2#L#Laf#L.7a9a9bja9a9#p#DblaYaw.Nbl#Dbl#Dbl#D#D.7a9a9afa9a9a9a9aj.7bl#D#D#sbl#Dbl#MaYawaY#xaY#xawaY#x#U#x#I.Cao.8aBaxav.W.C.Waoao.8aO#vaPay#daVbk.0#OaoaC.W#x#I.N.N#Dbl.na9a9#L.7aj#g.j#ga2bpa2#g#gasas#g.j#g#ga2#g#La2.ja2#Laja9a9a9a9bl#DaYawaYaY#La9.Eaf#L#Laj#L#L#Laj#L#L#L#L#Lbpa2#L#g#La2#g#L#gaja2#ga2#ga2#La2a2a2#La2a2.3#L.jaf.jaf.j#L.3#Laj.3aja2#Laj.3#Laja9af.n#L#Laf#L",
+"a9ajafaf#L#L#L#L#L#L#L#L#L#L#L#Laa#ga2#g.j#gbp#La2#L.ja2#La2#La2a2#La2a2a2#L.j#L.jaf.n#pbl#sa9.Eaf#Lafaj#Laj#L#Lajaf#La9a9bja9a9#Ma9bl#DaYaYbl#DaYbl#Dbl#Da9a9a9a9#p.naf.7a9.7a9.n#Da9#D#D#s#D#DaYblaY#MaY#MaYaY#MaYaw#I#IaC.8aObgaoaoao.8ambc#v#uar.M#d#4.G.y.8bgaoaC#x#I.N.N#s#pa9a9.7ajaf#L#La2bpa2.j#g#gaj#g#g#gas#ga2#g#L#La2a2#Laf#Laf#La9a9a9a9#D#Dbl.Nbl.E#L.7#L.7af.7#La9#L.7#L#L#L#L#La2#ga2#ga2#g#La2#L#ga2#L#g#L#Laj#L#Laj#Laj#Laj#Laf#L#La2afaj#Lajaf#Lajaf#Laj#Laja9afajaf#Lajafaj",
+"afaf#Lafajafajafajaf.Eaf#Laj#L#L#La2#L#L#gbpa2bp#La2#L.3#L.jafa2#La2a2#La2a2#L.3afaf#p#Mbla9a9.7afajaf#L#L#L#g#L#La9aja9a9#Da9.7#pbl#DaYaYaYbl#DaYblaY#Dbl#D#D#Dafa9afa9a9a9.7.7.7#Da9bja9#D#D#s#D#D#saYbl.NblaY#M#D.saw#I.WaOaB#vaO#v.8aOaO#v.y#3ad.Z#.#T#vav.haoaC#x#IaY.s#D#D.n#Dajaf.7#Laj#L#ga2#g#gbpa2#ga2a2as#ga2#ga2bp#La2a2a2a2a2#L#L#La9afa9#M#DblawaY#L.7af.E#Laj#L#L#Lajaf#L#L#L#L#Lbpa2#L#g#La2#gaja2#L#ga2#g#La2a2aj#L#L#L#L#Laf#L#Laj#Laj#L#Laf#Laj#L.7aj#L.Eaf.7.na9#D.n#Da9#Da9",
+"a9.na9a9a9a9#pa9a9a9a9a9a9a9a9.nafaj#L#L#L#Lbp#La2aja2#La2#La2a2#La2a2a2a2a2#La2aj#p#pbla9a9#Lajaf#Lafajafaj#L#Lajaf#La9.7.nbj#Da9blaYaY#x.N#DblaYblaY#DaY#Dbl#Da9a9a9a9.7a9.7.7a9.7.E.7.7.7.7a9#D#D#D#D#s#D#s#D.sbl#s.s#xaoaO#S.yaBaB#u#u#ubk#E#.ab#4#3.G.y.8bo#U#I#x.s.N#D#s#Da9#L.7aj#L#La2bp.jbpa2#La2#g#L#g.jas#g#ga2#Laja2#L.j#La2af#L#L#La9.7a9bj#Daw.Nbl.E#L.7#La9#L.7#L.7#L.7#L#L#L#L#La2#ga2a2#ga2#L#g#La2bpa2#La2bp#L#Laf#L#Lafaj.7ajaf#Laf#L#Laj#Laja9.na9.7afa9.Ea9a9a9a9a9a9.na9a9",
+"a9a9a9a9a9a9a9.n#paf#paf#p.n#p#pbl#D.na9a9#L#L#L#La2#La2#La2#La2a2a2a2#La2#La2afa9#p#M#pa9.nafa2afajaf#L#Lbp#L#L#Laf#La9a9#Da9a9#D#DaY#x#xaYaY#DblaYblaY#Dbl#Dblafa9afa9#Da9.7a9#L.7a9#Laf.7.n.7a9a9#s#D#D#D#D#D#s#D.s#x#I.8#Saz#u#u#uaZ.w.GbiaV#4.U#3ara5#vao.W#x#IaYaw#D#sa9a9#L.n#Laf#L#gaj#L#ga2#g.ja2#g.j#gas#gas#gaja2bp#La2a2a2a2#L#Laf#L#L#La9a9#Dbl.NaY.7#L.n#L.E#L#Lafaj#L#L#L#L#L#L#Lbpa2#L#g#L#ga2#ga2#ga2a2#gaja2#L#L#L#Laj.7#La9#L#L#Lajafaj#Laf#L.n.7a9.Ea9.Ea9.n#D#s#D#s#D#D#s#D",
+"a9.n#pa9.n#pa9#pa9.n#p.n#p#p#p.nblblbla9.na9#Laf#Lafa2aj.3#L.j#La2#La2#La2aja2#La9.nblbl#pa9#L.j#Laf#Laja2#La2aj#L#Laja9a9.7#D#s#p#DaY#x#x#xaY#DblblaYaYbl.Nbl#D#Dbl#D#Da9#Dbj#D.7#L.7#L.7af.7#L.7.na9a9.na9a9.n.NaYbobfaoaFaBazaz.w#uaP#3#4ad#4ap.O.O.O.w#S.8.5#Uaw#x.saY#s#D.n.7#L#Laja2aj#gas#L#gbp#gbpa2bpa2#gas.j#g#g#L#La2#La2#La2#L#L#L#L.7#L.7.7.E#D#s#D.na9#L.7af#L.7#L.7#La9#L#L#L#L#La2#ga2a2#ga2#L#g#La2bpa2#ga2#ga2.7a9.7#La9.7.7a9ajaf#L#Laf.7.na9#D.Ea9.7a9.7a9b.#D#D#D#D#D#D#D#D",
+".n#pa9#paf#p.n#p.n#p#p#p#p#p.n#p.b.R#Mbl#p.nafajafaja2#La2#L.3#La2a2aja2#L.3#L.ja9#pbl#Mbl.nafa2afajaf#La2#Lbp#L#Laf#La9.n#D#s#DblaYaY#xbn#xaY#DblaYblaYblaY#Dbla9bla9#D#D#D#Dbja9#La9#La9.7.7a9.7a9.7.7.7.E.7#D.N.sbf.Wam.y#uaz.Oar.Gal.Mbxadalbkbkbkbkbka7.yaF#I#IaY#s#Da9#s#Daj#Laj#L#g#L#g#g#gaja2a2a2#ga2#gas#gas#ga2#g#gaja2a2a2af#Laf#La9#Lajaf.7a9#D#s#Da9.Ea9.E#L.E#Laj#L#L#L#L#L#L#L#L#L#g#L#g#La2#ga2#ga2#ga2#L#g#La2#L#L#L.7#Laf#La9#L.E.7.7.Ea9.n.7.n.7a9.7.n.7.na9#D#D#s#D#s#D#s#D",
+"#Lafaj#L.7#L#L#Lafafajafaja9#pa9aYawaYaYawblblblafafaf#Laf#L#L#L.jaaafa2#L#Lafaf.n#F#M#pa9afaj.7#Lbp#Lbpbpaj#L.Eaf#Laj#D#D.N#D.N.naYaYbna0a0bnaY#DblaY#x#xaYaYblbl#D#Da9a9.7#L#L.7.7.7.7.7.7.E.7#Dbj#D.s.N.N#DboaY#MaY.W.8aZal#P#PaT#P#.a.ad.ObkaX.G.O#Taz#SaoaC#x#x#I.N.s#D.E.7af.7#L.E#L.Eaf#Laj#g#gbp.jbpa2aj#ga2#g#L#ga2#ga2#L#L#L#L#L#L#L#L.7#L.7a9.E#Da9#D.Ea9.7a9.7a9#La9#L.7aj#L#L#L#L#L#L#L#L#L#Lbpa2#L#L#g#L#ga2a2#ga2bpa2#La2#L#Laj#L#Laf#Laj#L.7#L.7af.7.E#L.7#L.7#L#sa9.7a9.7#L.7#L",
+".E.7.7#La9aj.7#Lafajafafafa9a9.nblbl#MaYblbl#Dblafajafaj#L.E#L#Laaa2a2aja2afajaf#p#p#pa9.naf.7#L#gaj#Lajbp.7#L.7ajafa9#D#D.NaY#xblaY#x#xama0a0aY#p#Dbl#xbnaYblaY#Dbl#Da9a9.7af.7.7.7.7.7.7.7.7.7#D#s#D.N.N.N.N.N#IaY.N#Iamanay.P.PaDaD#..M.O.G#u#u.w.GaP#u.ybgaCaC#x#IaY.N#s.7a9.7aja9#La9#L.E#L#L#ga2a2#ga2#ga2#g#L#ga2#ga2#g#g.7#L.7#L.7#L.7.7af#L#L#La9#Db.#Da9.7a9.Eaf.7a9.7#L#L#L#L#L#L#L#L#L#L#L#L#La2#L#L#ga2a2#g#L#g#La2#ga2#g#L#ga2#La2#L.7#L.7a9aja9#L.E#La9aja9#L.n#L.na9aj#Laja9aj.7",
+"#L#Lafaj#L#Laf#Lajafaf.Eaf#sa9a9a9a9#pbl.nbl.n#p.nafa9#Laf.7#L#L#L.ja2#La2af#L.n#p#Mbla9a9aja9#Laj#Lbp#L#L#L.7.7#D#D#saYaw.N#xbf#MaYaw#xbna0a0aYblaYaY#xbn#xaYaYbl#D#D#Da9#D.7#L.7.7.7.7.7.7.7bj#s.7#D#s#D.N.sbfa0#UaoaO.yan.2.g#m.AbA#4ar#u.0#u#S#vaBaB#uaB#v.5aoamaC#x#IaY.N.na9.7.E#L.7af#L#La2#g#L#g#L#gbp#ga2#ga2#g#g#ga2#g#L#L#L#L#L#L#L#L#L.E#L.7.7a9#Da9.Ea9.7a9.7.7#L#L#L.7#L#L#L#L#L#L#L#L#L#L#Lbpa2#La2bpa2a2#ga2#ga2#L#ga2a2a2#g#La2#Laj#L#L#L#L#L#La9#L.7#L.7aj.7#La9.7#La9.7#La9#L",
+"#L#L.7#L.7#L.7#Lafaf#Laf#La9a9.na9#Da9.n#Da9#D#Dafaf#Lafaja9aj#La2a2af#Laf#Laja9#p#D#p.na9.7aj#L#L#L#L#Laj.7.7b.#D#saY.NaYbf#x#x#DaYaYaY#xbna0#xaYaYaY#xaYaYaYaY#Dblbl#D#Da9.7.7a9.7.7.7.7.7a9.7af.7#D.N.s.N#x#IaF.8amaF.0#uaybe#.ba#aaz#ua##vaOaOaO#v#v.y#uaBa#b#bga0a0awaYbl#D.Ea9a9a9.E.7a9.7#Laj#L#gaja2a2a2#ga2#g#ga2#ga2#g#L#L#L#L#L#L#L#L#L#L#L#La9.Ea9.7.7.n.7.n#La9.n.7af#L#L#L#L#L#L#L#L#L#L#L#La2bp#La2#ga2#g#La2bpa2#ga2#L#g#L#ga2#g#L#L#Laf.7#L.7#L#L#Laj#L#L#Laf#L.7#L.E#L.n#L.E#L",
+"#L#Laj#L#L#Laj#L#L#Laj#L.7.7a9.7a9a9a9#Da9a9.na9.naf.Eaf#L.7#La9ajaf#Lajaf#La9a9#M#pbla9a9#L#L.7aj#Laj#Lbjbj#sbjaY.N.Naw.N.Nawbf#DblaYaYaY#xbn.CbnaYaYaYaY#xaYa0bl#D#D#Da9#D.7#L.7#La9#La9#L.7.7a9#sblaYaYbnaCa0.5amaFaB#u#a#4abarazaBa#aO.5ao.5aoaoamaOaB#u#uaZaCa0bn#xaYaY#Dbla9a9.na9a9a9#La9#La2a2#L#g#g#L#g#g#ga2#ga2#g#ga2#ga2a2#ga2a2#La2#L#L#Laf.7.7.7a9a9.7a9.7.7.7#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#g#La2bpa2#ga2a2bpa2#ga2a2#g#La2#L#L.7#Laj#L#Laj.7af.7#La9#L.7ajaf.7#L#L#L.7af#L",
+"#L.7af.7#La9#L.7a2#L#L.7#L.n.7.na9a9.na9a9a9a9a9afaf#Laf#Laf.E#Lafajafaf#La9.na9#D#p#sa9.n.7aj#L.7#L.7a9.Ea9#Da9.NawaY.N.NaY.N.N#D#D#D#MaY#x#xa0ama0#xbnaYaYbn.CaYaYaY#D#D#D#D#Da9a9a9a9.7#Da9#s#D.NaY#x.Ca0amamaFaB.f.Oau#aazan#v#vaFam.5aCav.CavaoaoamaOaB#uan.Ca0#xawaY.s#D#s#Dbja9bja9.7a9a9a2#La2#La2a2a2a2#ga2#ga2#g#ga2#ga2#ga2a2#ga2#ga2#L#L#L.7a9.7a9.7.Ea9.Ea9.7af.7af#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2a2#ga2#ga2#L#ga2#g#La2bpa2a2bp#L#L#L#L.7#L.7af#L#L#L#Laj#L#L#L#Laj#L#La9aj.7#L",
+"#L#L#L#Laj#L#L#Lajaf#Laja9.7.7a9.7a9a9a9a9.na9a9aja9#Laja9#L.7#Laf#Lafaja9a9#D#D.nblbla9b.#L.7.E.7.n.7.n#D#D#s#D#D#D#D#s#D#D.n#D#D#D#s#Dblawa0.Cama0a0aYaY#xa0amblaY#D.N#D#Dbj#Dbj#D#D#D#D#D#D#D.N#x#x#xbg#vbmaBbk#a#Ea7a7aZ#va#amb#ao.C.W.Cbf#IaqaoaoaoaO#SaZ#ubn#I#xaY.Na9a9.7a9a9a9a9a9a9a9a9#Lajaf#L#L#L#La2a2#g#g#ga2#ga2#ga2a2#ga2a2#ga2a2#L#L#L#L.7.Ea9.7a9.7a9#La9#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#g#L#g#La2bpa2#g#La2#ga2#ga2#ga2#L#L#Lajaf#L#L#L.E#L.7#L.7#L.7#L.7af.7aj.7af.7#L",
+".E.7.n#L.7#L.7af#L#L#L.7aj.7a9.Ea9a9a9.7a9a9.7a9afafafafaja9aj.7afaja9#La9a9#s#D#p#M#D#s#D.n.E.7a9.na9#D#sa9#D#D#D#s#D#D#Da9a9.n.N#D#D#Dbl#xa0ama0ambnaYaYbnama0aYaYaY.N#D#D#Dbj#D#D#D#D#s#D#Daw.C#I.Caobm.G#faG.yaBbh.l.taFb#.5a0a0aoa0#xbo#xboaqavaoamaC#Sa7an#I#x.N.s#Dbjaj#L.n#Da9#sa9a9a9a9#Laf#L#Laf#Laf#L#ga2#ga2#ga2#g#g#ga2#ga2#ga2a2#g#L#L#La9.7a9.7.7.7.n.7.7.7#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La2#ga2a2#ga2#ga2a2#g#L#g#La2bpa2#L#L#L#L.7#L.7#L#Lafaj#L#Lafaj#L#L#L#La9#L.7aj#L",
+"#L#L#L#Lajafaj#Laf#Lafaf#Lafajaf#L.jafajaf#Laja9aj#Laj#L#L#L#Laj.7.7.E#Laj#L.7.7bl.NawaY.NaY.N.s#s#D#sa9bj.Ea9.Ea9.na9.n#D#s#D#Da9.n#D#D.saY.s#x.R.Rbn#x#x#xaY.NbnaYblbl.na9.7.7#D.N.N.N.Nbfbfbfavama#aSaG#z.G.0aoa0aC#xaCbn.Wbn#I#xaY#I#x#x#I#x#Ia0avao#v.0aBa7#IaYa9.7.E.7#D#Da9a9a9a9.7a9.7afa2a2a2a2a2#g#ga2#ga2#g#ga2#g#ga2#ga2#g#ga2#g#ga2a2#g#L#L#L.7a9.7.na9a9afaj#La2a2#L#Laf#L#L#La2#L#L#La2#La2#La2#La2#L#L#L#L#L#L#La2a2a2a2#g#ga2#g#La2#La2#Lajafa2.7#L.7af.7#L.7afaj#L#Lajafafaf#L",
+"#Lafajaf#L#Laf#Lajafaj#L#Laf#Laf#Laf#Lafajaf#Da9.7a9.7.7af.Eaf.7.na9a9a9.7.7.n.7awaYawaYaw.s.N#D#Da9#D.na9.7a9.7.n.7.7.7#D#D.7.7#Da9#s#D.N#x.N#x#Ua0a0bna0bn#IaYb#am#xaY.N.N.N.Nbj#D.N#I#xaqaoa0a0a#a7#fa6az.0.5bnaCbnbn#x#x#x#xaYboaYbfaw.NaY#I#x#Iao.8.5#v#u.T#I.N#sbja9bj.7bj#sa9.Ea9a9.7a9a9#L.ja2a2.j#ga2#g.j#ga2#g#ga2#ga2#g#ga2#g#ga2#g#g#ga2#L#L#La9aja9a9af.7af#L#L#L#gafa2#La2afa2#La2.3#La2#La2#La2#La2#La2a2a2a2a2#La2a2#L#g#La2bpa2bpa2#ga2#L#La2#L#L#L#L#Laj#L#L#La2a2afafaj#Lajaf",
+"#L#L#L#L#L#Laj.7af#Laf#Lajaf.Eafajaf#Lafa9a9.n#D#D.n#Da9#s#D#D#D#D#s#D#s#D#D#D#sbl#s#D.s#D#s#D#s.7aj.7#L.7aj.7#L.7af.Ea9#L.7a9.7.na9#D#D#D.NaY#xa0.Vaoamama0ambna#b#amambn#x.C.Cawbf#xa0amamaF#v#vaBazaSa7a#aq.W#x#x.s#xaw#xaw#x.N.NaY#xaY#x#I.N#I#xavam.8.yana7#U#x#D.7b..7a9#Da9a9a9a9.7a9af.7a2#La2#L#ga2#g#g#ga2#ga2#g#ga2#ga2#g#ga2#g#ga2#ga2#L#L#L#L.7a9.7a9a9a9#La2#La2a2#L#Lafa2#La2#La2#L#L#La2#La2#La2#La2#L#L#L#La2#La2a2a2a2#g#ga2#g#La2bpa2a2#Laj#L#L#L#L.7#L.7#L.7af#L#Laf#Laf#L#L",
+".7#L#Laj#L#La9#La9a9a9a9a9a9a9a9af#L#D.n#D.7#D.7#D#D.N.s.N.N.N.sbl.NblaYblaYawaY#M#D#Ma9#D.nbj.7#L#L#Laj#L#Laj#Laj#L#L#L.7a9.E.7a9a9a9#DaY.s.N#xaCb#a#aFa#amamam#vaFamam#xa0#xam.CaCamamaObma7aza7aZbm.tam.C.Cbfaw#xaYaY.NaY.NaY#DaY.s#xawbfaY#x#x#Iaqao.8aZ#ua7ao#xaw#Da9b..7#Da9#s.7a9af.7a9a9a2#La2#La2#ga2#ga2#g#g#ga2#g#ga2#g#ga2#ga2#ga2#ga2#g#L#L.E#L.7afa9afa9#Laf#L#ga2#La2#La2#La2#La2af#La2#La2#La2#La2#La2a2a2#La2#La2a2#La2#La2bp#g#L#ga2a2#g#La2#L#L#L#L#L#L#Lafaj#Lafaj#Laf#Laf#L",
+"a9a9a9a9a9a9a9.n.7a9.n.7a9a9.n#D.na9#s#D#D#D#D#D#D#D.sblaY#saY#DaY#MaY#saYblaY#D#D#s#D.7.n.7bj.E#L#Laj#La2#La2#L#L#L#L#L.n.7a9.7a9.E#D#D.NaY.N#Iamam#v.0a#aFa#a#bmbgamaCbna0aoa0amaF#vaBa7a7.l.TaFb#b#amam#x.Nbj#x.N.s.NaY.NaY.N.N.NaY#x.N#IaY#I#x#Iaoaq.8.ybhazb#bn.N.N.7a9#D#s.7a9a9a9.7a9#La9#Lajaf#L#L#Lbp#L#ga2#ga2#ga2#g#ga2#g#ga2#g#ga2#ga2#L#L#L#L.7a9.Ea9a9a9a2#L#La2#g#La2#La2#La2#La2#La2#La2#La2#La2#La2#L#La2#La2#La2a2a2#ga2#g#ga2#ga2bpa2a2#L#L#L#L#L#L#L#L.E#L.7a9a9a9a9a9a9.7a9",
+".7a9a9a9.n.7a9a9#s#Da9#Da9#D#D#D.7#D#D#DaY.Naw.Naw.NaY.NaY.NaY#s#D#D#D#D#s#D#s#D.na9a9.n.7.7.7#L#g.ja2#g.j#g.j#g.j.3aj#L.7aja9.Ea9a9a9#D.N.s#x#x.Cb#aF.yaZa#a##Sa##SaFamamaOa#aZazazaza7a7bmaFaFa0a0a0bn#IaYaY.Naw.NaYaY.N.N.Naw.NaY.Naw#x.N#x.N#x#I.Cao.5.ya7az.5aoaY.s#D.E#D#Da9.na9.7.na9a9a9#Laf#L#L#L#L#Lbpa2#g#ga2#g#ga2#ga2#ga2#g#ga2#g#ga2#g#L#L#Laf.7#La9afa9#L#L#La2a2#La2#La2#La2#La2#La2#L#L#L#La2#La2#La2#La2#La2#La2a2#L#g#L#g#L#g#La2a2bpa2#g.j#L#L#L#L.7af#L#L#La9.7a9a9.Ea9a9a9",
+"a9a9a9a9a9a9.na9#D#D#s#D#s#D#s#D#D#D.saY.s#xaY#x#D#M#D.nbl.nbl#Da9.Ea9.7a9.7a9.7#Laj#Laj#Laj#Laj#gas#gas#g#gas#ga2#L#La2af.7#L.7a9#s#D#D.NaYaYboa0a0aOa#a#a#aBbh.GaPa7az#uaS#TalbaaGa7aZaFaoambnaCa0#x#I#D#DaYaw.N.N.s.N.N#D.N.N.N.N#I.NaY.saY#I.N#I.C.8.5.ya7azaOb##x.N#Da9a9#sa9a9#D.na9.7a9.7a9a9.7#L#L.7bp#L#ga2#g#ga2#g#ga2#g#ga2#ga2#ga2#ga2#L#L#L#L.7a9.7.na9.7a2af#L#ga2#La2#La2#La2#La2#La2#L.3#La2#La2a2#La2#La2#La2#La2a2a2a2a2#g#ga2#ga2bp.ja2bpa2#L#Laj#L#Laj.7#L.7.na9a9.7a9a9.7a9",
+"afa9afa9.na9a9a9#s#D#D#D#D#D#D#D.saY.NaY.Naw.NaY.n#Da9a9a9a9a9#Daj.7#L#Laj#Laj#Laj#L#L#Laj.7bp.7as.jas.jas.jas.ja2.ja2#L#Laja9aja9a9#D#D.Naw.N#x#xa0am#va#a#bmaB#l#0.2.2.2#0ab.4arazaZa#aFa0.W.C#x#x.NaYaYaYblbl.N.N.N.Nbj#Dbj.NaY.NaY.N.NaY.NaY.NaY.Waqao.0#ua7aBaO.Waw#D.na9#Da9.na9a9a9a9a9af.7afa9.7#L.7.7bpa2#g#ga2#ga2#g#ga2#ga2#g#ga2#g#ga2#g#L#L#L.7.Eafa9afa9#L#L#La2#g#La2#La2#La2#La2#La2#L#L#L#La2#La2a2#La2#La2#La2a2#La2#L#g#L#g#L#g#La2#Lbpa2#La2#La9#L.7#Laf#L#La9.7.na9a9a9.na9",
+"#D#Ma9#Da9bl#M#DaYaYawaYblawaYaYaYawaYaYbl#D#D#s.7af.E#L.7aj.7#L#Lajbp#Lbp#L#L#L#ga2.j#g#g.j#g.j#g#g#g#g#g#g#g#g#ga2a2aj.7a9.7.7a9.na9#M#DaY.Nawbn#UaoaF#v.8am#va6a6ba#V.Z#oab.I.TbmaFaoam.C.C#I#x.s.N.N#D#D#D#DaY#DaYbl.NaY.N.s#D#M#D#D#s#D#D#s#Daw#x.CaC.5bc.yaBaZ#vam.Nbj#Db.#D#D.7a9.7#D#D.Na9a9.7a9#L#L#L#La2a2a2#ga2#ga2a2#L#L#L#L#L#L#L#L#Laf#L.na9a9#D#Da9a9a9a9#L#L#L#La2#La2#L#L#L#L#La2#La2a2a2a2#L#La2#La2#La2#La2#La2a2a2a2a2a2a2a2#L#L#L#L#L#L#L#L#L#L#L#L#L.7a9.7af#La9.7a9bja9#D",
+"bl#D#D#M#D#Dbl#D#MaYbl.saY.NblawaYaYaY#M#D#s#D#D.7#L.7#L#L#L#Laj#g#L#gaja2aj#gajas.jas#gas#g.j#gas.jas.jas.jas.ja2.j#L#Laf.E#D#Daja9a9#DaY.s#x#IaCamama##uazaz.G#.a..Z#Valarak#aaZ#Sa#ama0#U.C.CaYaY.NawaY#D#D#DaYaY.sbl.N.s.N.Na9a9a9a9#D#D#D#D#s.N.N#I.CaobybcbhaB#vaF.WaY.s.Nbl.s#D.na9#D#DaYafa9a9a9#L#L#L#L#ga2#ga2#gaaa2as#L#L#L#L#L#L#L#L#L#L#La9a9#D.7#D.na9#D#L#L#L#L#L#L#L#L#La2a2a2a2#L#La2#L#L#La2#La2#La2#La2#La2#La2a2#La2#La2#La2#L#L#L#L#L#L#L#L#Laj#L#Laja9.7.Eafaja9a9#sa9#D#D",
+"#D#M#Dbl#D#M#DblaY.NaYbl.NawaYaYaY#M#D#D#D#D.7afaja9#Lajbp#Lbpbp#Lajbp#Lbpbpa2bp#g#g#g.j#g#gas#g.j#g#g#g#g#g#g#ga2a2aj.7a9#Da9#Da9a9#s#D.s#x#I.Ca0aO#uazal.Y.A.1a.aHaGaz.Ta#bma##SaFaFbgama0.C#x.s.NaY.N.N#s#D#Dblbl#Dbl#D#D#D#D#Da9#D#D.7.E.7a9#D.saY#x.Wa0.8.5#S#uaB#S.5.C#x#x.NaYbl#Da9#D#D.Na9a9.7a9#L#L#L#La2asa2aaa2#ga2a2#L#L#L#L#L#L#L#La2af#L#La9.7a9#Da9a9.7#La9#L#L#L#L.3#La2#L#L#La2#Lafa2#La2a2#La2#La2#La2#La2#La2a2a2a2a2a2a2a2a2#L#L#L#L#L#L#L#L#La2.7#L#L.7af.7a9a9a9bja9#D#D#D",
+"aYaYaYawaYaYaY.saY#M.NawblaY#Daw#Dbl#D#s#D#La9.7#L#L#L#L#L#L#Lbpa2bpa2aj#ga2bpa2as.j#gas.j#g.j#g#gbp.j#L#gaja2bp.j#Laf#L.7#s.N#sbjb..N#Ibf.Waq.8#vaz#zaHbs.m.B.BauaSa#aFaFbgama0ambga#aFamam.W.CaYaY.NawaY#D#D#D#sbl#D#D#D#D.Nb.a9a9.n.7#La9.7b.#Da9.s.Nbo.C.Cava#aZaBaBaOaOb#ao#x#IaY#D.n#Da9#Da9a9a9#L#L#L#L#La2a2#ga2#ga2#ga2bpa2#ga2a2#ga2a2#La2af#L.7a9a9.7a9a9#D#L#L#L#L#Laf#L#L#La2a2a2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#La2#L#L#L#L#L#L#L#L#L#L#Laf#L#La9.7.7a9.7a9#D#D#s#D#D",
+"aYboaY#x#x#I#x#x#I#xaYawaY.NaYaY#D#M#Da9.7.7aj#L#L.E#L#Lbp#L#L#Lajbp#Lbp#Lajbpaj#gas#g#gas#gas.j#L#Lbp#Laj#gbp#L#Laj.7a9.7#Dbj.N.N.sbo.Caq.8#v#u#3adbe.A#Y#9.PbranaBb#amamaYaYaYa0am#vbmaOb#.C#x.s.N.NaY.N#Da9#D#pa9.na9#Da9.7a9.7a9.7a9.7.7.7.7a9#D#D.N.N#xbo.Cb#aOaF#vbma##vbmamam#xbl#D#D#D#Da9a9.7#Laf#L#L#L#g#La2bpa2#L#ga2a2bp#Lbp#L#Lbpa2#L#L#La9a9.7a9.7a9af.7af.7#L#L#La2#La2a2#L#La2a2#La2#La2#La2#L#La2#La2#La2#La2#La2a2a2a2a2a2a2a2#L#L#L#L#L#L#Laj#Laj#L.7aja9#L.na9#D#s#D#D#D.N.N",
+"#x#x#x#I#x#x#IbnaYaY#IaYaY#MaY#M#D#D#Da9.7#L#L#L#L#L#L#L#Lbp.E#Lbpa2bp.j#L#g#L#g.j#gas.j#g.j#g#g#Lbpajbp#Lbp#Laj#L#Laj.7.n.N.N.sbf.C.Caoa#.w.ObB.u#.#oa8aMabalanaBa#a#a0#xaYaYaY.Wamb##Sa#b#a0.C#xaY.NaY.s#D#D#D.nbla9a9#D.n.7a9#L#L#L#Laj#L#L.7.E.7b.a9.s.N.N.s.Camam.8aF#vaZ#uaFb##xaYaY#D#D#sa9a9a9.7#L#L#L#La2a2#ga2#ga2a2#g#L#L#L#L#L#L#L#L#La2af.7a9a9.7a9a9a9#D#L#L#L#L#La2#La2#La2#La2a2a2a2a2#La2#L.3#L#La2#La2#La2#La2a2#La2#La2#La2#L#L#L#L#L#L#L.7#L#Laf#L#L#L.7a9.7bja9#D#s#D.N.saY",
+".CaC.Ca0.Ca0#x.CawaYaY.Nbl.N#D#D#Da9.E.7aj#Lbp#L#L.7#Laj#L#Lbp#Lajbpaj#Lbpaj#Lbp#gas.j#gas#gas.jbpaj.7#Lajbp#Lbp#La9a9#D.N.s.N#x.WaqaO#ubk#zaHbA#Pbsbeab#a#ua#ambm.Fa0bn#xaY.N.s.Nbnb#bmaBa#aC.Caw.NaY.NaY#D#D#D#pa9a9a9a9.7a9#Laj.7#L#L#L#L#L#Lbja9bjbj#D.7.N.Nbo.C.Ca0a##vana7an#Sa0aYawbl#D#Da9a9.7af#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Laf#La9.n.7#Da9.7afa9#L.7a2#L#g#La2#La2#La2#L#L#La2a2#La2#La2#La2#La2#La2#La2#La2a2a2a2a2a2a2#L#L#L#L#L#Laj#Lafaj#L#L.Eaf.7#La9#s#D#DaY.NawaY#x",
+".C#xa0#x.W#x#x#x#DaY#Dbl.sblaY.Na9#D#L.7#L#L#Laj#Laj#L#Lbp#L.7#Lbpa2#L#g#L#g#L#g.j#gas#g#g.j#g.jbp.7#La3#La3aj.7.7aj.7#s.N.N#Ibf.8aF.y#3ad.A.MaT.P#V#P#Tan.5.C#Ia0b#bga0#xbf#xbf.N#xa0bm.T#Sao#x#x.NaY#s.N#D#D#D#p.nafa9.na9#L.7#L#L#L#Lbpaja3#L.Ebj.E.7#sbj#sbjbf.s#xavama#aBana7aZbgbnaY#D#D.7.na9a9.7#L#L#L#L#L#L#L#Lbp#L#L#L#L#L#L#L#L#L#L#La2a2#L.7a9a9a9.7a9a9a9#L#L#L#g#La2#La2#La2#La2a2#La2#La2#La2#La2#La2#La2#La2#La2a2#La2#La2#La2a2#L#L#L#L#L.7#L.7afaj#L#L#L.7a9#LaY.Naw.Naw#x#x#I",
+"aY.saY.NaY#DaY.N.na9.na9a9a9a9aja9a9a9a9.7a9.7a9#Laf#L#Laj#L#gaj#Lajbpaj#Lajbpaj#Lafaj#L#L.7.Ea3#L.Ebj#D.s.N#Db..7.7.N.N.WamamaOakaybs#Y.maDbaaHaga7#SamamaC.C.CaYamb#aFb##xaY#D.n.Nawa0#vaZaZa##xaw.N#Daf.na9#s#Da9a9a9.7af#Laf#La2#g#g#L#Lbp#L#L#L#L#L#L.7.7.7.7bj.N.Caoam#vaZaz.fanama0aY#Ma9aY#D#Da9a9.7.7#D#L#La2#La2#L#L#La2a2a2a2a2a2a2a2.7afa9a9#D.7#D.7af#L#L#L#La2#ga2a2a2a2a2#ga2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#L#L#La2#La2#La2a2a2#La2#L#Lafa9a9a9bja9#D#D#DaY.s.N#x#Ibn#x#x#x#x#U#x",
+"aY.Naw#D#D#s#D#Da9a9a9a9a9afa9a9a9a9.Ea9a9.na9a9afajaf#La2#L#L#Lbp.7bp.7bp.7bp.7a2a2#Laj.7.E.7.E#L.E#D.s.N.Nbjbj.N.s.N#xa0aO#u#E#V#2....#KaD.YaGa7bmaFaFaoama0.CbnaCb#aOama0.N#D#Dbl#xa0bmaB#ua##x#xaY#sa9.7a9.7#D#D.7a9a9aj#L#L.j#La2bpa2#Lbp.E#Laj#L.E#L.7b.#Db.#D.s#xa0.8a##v.6azbhaOam#xaYbl#Dbl#Da9#Da9.7.7#La2#La2a2a2a2#La2a2a2a2a2a2#La2#L#L#L#D.7a9#Da9#L.3afa2#La2bpa2bp#g#L#g#La2#L#g#La2#La2#La2#La2a2#La2#La2a2a2#La2a2a2aja2#L#La2#Lafaj#La9.E#Da9#s#D#Daw.NaY#IaYaYaYawaYawaYaYaY",
+"a9a9a9a9.na9a9.na9.na9.na9.na9a9a9.7a9a9.7a9.7a9#L#L#L#L#Laj#L#Laj#Laj#Laj#Laj#L.jbp#L#L.E#L.Ea3.n#D.Nbf.Cbo.Caobf.CamaOaBaz#EaraQ#.#o.Abzay.Gana#aFaFaOamam.C.Wbna0a0b#ama0#I.N#D#M#x.CaoaZbhaBa0#IaY#Da9#s.7a9#sa9#Da9a9#Laf#L#L#ga2#g#L#Lbpbp#L#L#L#L#L.7.7.7.7#D.NaY.Cambga#a7.6#ua#b#aoa0#xbl#D#Da9.7a9#Laf#L#La2#La2a2a2a2#L#L#L#L#La2#La2.7afa9a9#D.7#D.7afaf#L#La2#L#L#ga2a2#ga2#ga2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#La2#L#L#Laf#L#Lafajaf#L#Lafa9a9a9#Db.#D#DaY#DaY.N.N.N.s#D.N#D.N#D#s#D",
+"aj.7aj.7.7.7.7.7#Da9#Da9a9a9a9.7a9#Da9#s#D#D.n#Da9a9.na9.7.7bj.7bp#L#L#L#L#L#L#Laj#Laj.E.Ebjb..N#MawaCaoaoama0.Cb##va7#a.Oaz#uaZaZanaz#e.6anaZaFaBaOaF.5amama0a0#xaCa0ama0a0#xaYbl.NaY#xa0#vaZ.lama0#x#Mbl#D.7#D#Dbja9.Ea9af#L#La2#L#La2bp.j#Lbp#Laj#Lbpaj.7bj.7#s#D.s#x.Wa0amamanaB.0a##va#bgamaYaY#Da9a9a9#L#L#L#Laf#L#L#L.7#La2a2#La2#L#La2#L#L#L.7a9.7a9#Da9#L.3#La2#L#L#La2bpa2#g#La2bpa2bpa2#La2#La2#La2#La2#La2#La2a2#La2.3#L#La2#Laf#L#Lafaja9a9.7#s#D#D#Da9.s.N.s.Naw#Dbj.7b..7b..7bjbj",
+"#L#Laf#Lajafaj#Laf.7.7.7.7.7a9.Ea9bja9#D.7a9bja9a9.7a9.7a9.7.Ebjaj#Laj.7.E.E.7.E.7.E#D.s#xbo.C.WaCamb#a#.y.0.yaB.Gazazazbhbma#aFaFa#a#aZaBa#.5.5#SaFambgama0amam#x#xbna0a0aCa0#xaYawaY#Ia0aO.lbh#vb#bnaY#s#D#s#D#Da9#Da9.7ajaf#Laja2bp#g#L#Lbp#Lajbp#L#L#Lbj.7.7#Da9#DaY#x.CaCam.5a#aOa#a##va#a##xawaY#Da9.7#L#L.7af.7#La9#Laf#L.7af#Laf#L#Laf#Laf.7a9.7a9a9#D#Daf#L#La2#L#L#L#La2a2a2#ga2a2#ga2a2a2a2a2a2a2a2a2#La2#La2#L#L#L#L#Laf#Lafa9a9a9a9a9a9a9bj#D#D#D#D#D#D#Da9#Da9#D#s#L.7#L.7#L.E#L#L",
+"#Laj#Laj#L#L#L#L.7.n#La9aja9#L.7a9#s.7#Da9#Da9bj.n#Da9.7.E#Dbj#D#D#D#Da9#Da9#Da9.N#I#x.Wam.8.5#va#aBaP.G#a.U#4.Uaza7aZa#aFaFbmb#a#b#aFa#.8ama0ama0a0a0a0a0aC.Ca0#I#x#xa0b#a0a0a0aYaY.N.N#Iambm.lbmaFaobnaYaY#Dbj#D#s.7a9a9af#L#L#La2aj#ga2bp#Lbp#L#L#Lbp#L.7.E.7#D#D#D.saY#x.C.CaC.5am#v.5a#.0#va0bn#x.N#D#D.7.7a9.7a9.7a9.7.7a9#L#L#L.7af.7#L.7#L#L.7a9a9bja9#Da2afa2#La2#L#L#L#L#g#L#g#L#g#La2#La2#La2#La2#La2a2#L#L#La2afa2af#L#L#L.7a9.Ea9.7.n.7#Da9#s#D#D.N.N.sbj#sbjb..7bj#Laj#Laj#L#L.7#L",
+"bjbj.7bj.7.E.7.7.7.7a9.7a9.7a9.7#D#D#D#D#s#D#D#D#D#D#D#D#D.N.s.N.sbfbobf#Ibf#xboa0.8.5#v.yan.w.G#TabaMa8#cabalaZa#aFa#b#b#a0b#b#ama0aoa0a0#x#x.CawaYaY#Ubn#xaYaY#x#x#x.Rbna0a0amaYaY#D#DaY#UaF#GaZ#S.V#UaY.s#Dbj#s#Da9.n.7#La2af#L#La2#g#gajbp#L#Lbp#L#L#L.7bj.7a9#s#Dbl.N#x#x#x#x.C.Cam#va#a#.0aF.8a0#x#x#D#D#Da9#D.7#Da9a9.7.7#Laf#L#L#L#Laf#Laf.7a9a9.7a9#D#Daf#La2#La2#L#L#L#ga2#ga2a2#ga2bpa2a2a2a2a2a2a2a2#Lafa2#L#L#L#L#Laf#La9a9#La9a9a9a9#D.7#D#D#D#D#D.s.Nbja9.7.7a9.E#L.7.7.7.7aj.7aj",
+".7a9b..7.7bjbj#D.Eaf.7#L.7af.E#L#D#D#D#D#D#D#s#D#D#s#Dbj#D.s.N.N.C#x.C.C.C.W.C.Wby#vaBaz#T#4aH#..ga8bsbr.2al#TaZaFaFb#b#ama0a0a0.Cama0#xaY#x#x#xaYbl.NaYaYaYblaYbf#x#x#xbna0a0aobn#xaw#D.sa0.t#SbmbmaOa0#U.N#D#D#D#D#Da9a9#Laf#L#L#La2#L#g#L#Lbpa2ajbp#Laj.7.7.7#Dbl#DaY.N.N#Ibf.Naw.Cao.5.5a#a##va#ama0bf#D.N.N.7#Da9#D.7a9.7a9#L.7#La9#La9#L.7#L#La9.7a9bja9#Da2af#La2#L#L#L#L#g#La2bpa2bpa2#La2a2#La2#La2#La2#L#L#Laf#L.3#Laf.7a9af.7a9a9.7a9.7#D.n#D#D#D#D#Dbjbj#Dbj#s.7.E#La9.n.7.na9.7a9.7",
+"#Laj#Lafajafaj#La9#D#s#D#D#D#DaYaYaYawaYaY.NaY.N.C.C#x#IaYaY#M.namav.8.5#v.0.w.G#aau#4#4#z#3.Ga7#Z#0aM.gaTayaZa0a0a0a0#xbn#x#U#xawblawaY#D#M#D#D#D#Da9#D#sblaY#Mbl#Mblbl#DaYaYaYa0#IaY.N.NaY#Ua0.t.tbm.Fam#x.Nb.#Da9a9.7af#L#La2aj#L#L#L#L#Laj#L.7#L#L#L.7#L.7af.7.7a9.7.n#D#D.NawaYaY#x.CaCamao.0a#aB.0.taFb#.VaY#Da9a9af.7#D.N#Laf#L#L#L#L#Lafa9a9a9a9a9.7.7.7a2#La2a2a2a2a2a2a2a2a2a2a2a2a2a2#g#L#ga2a2#ga2a2a2a2a2a2#L#Laf.7#pa9a9a9#Dbj#D.N.na9a9a9b.#D#D#D#D#s#D#D#D#s#D#D.n.7#L#L#Laj#L.7",
+"aja2afaj#L.7.7#L#sa9#D#D#s#D#D.N#D#D#D.N.N.N.N#DaY.N#x#xaCamb#aF#SaZanaz.Galba.4.O#aaz#uaB.0aBan#Tbz.mab.2az.5#xa0bnaYaYaYaYaYaY#DaY.NaYbl#D#D#D#D.n#D#Dbl#Dbl.Na9bl#Dbl#DawaYaYbnaYaY#D.s.N#xaCbm.Fbm.tb#aC.N.Nbl.na9a9aj#L#L#L.7#L.7#L.E#L.7#L#L#L#L#L#L#Laj#La9aj.7.7.7#D.N#D#Dbl.N#xbn.Ca0ama##va##v#vbm#vaF#x#x#Da9a9#D#D#D#L#La9#L.7af.7#L#pa9afa9.7#D#La9#La2a2#La2#La2#La2#La2#La2#La2#La2#ga2a2bpa2bpa2a2a2a2a2a2#La9afa9.na9a9#D#D#Dbja9.nbj#D#D.NaY.saY.Nbl.sblaYaY.Na9.7#Laj.7.7#L.7",
+"#Laj#L#Laja9.E.7#La9.Ea9#D#D#s#Db.#D#D.Nbo.Caqaq.bbnbga#aZaS.G#q#t.HaQauaGar#a#a#vaOaF.5b#.8#vaB.2.A.1aDaka#amaYaYaYaYaYaYaY#D#D#D#D#s#D#D#D#D#D.7.7a9#D#D#D#Dbla9a9.n#D#D#D#Dblaw#xaw.N#DaYaYbnb#aF.taOb#.C#I.Na9a9.7a9a9#L.7#L#L#L#L#Laf#L#L#L.n#L#L#L#L#L#L#L#La9a9.7a9.Ebj#D#D#D.s.N#x#x.W.Ca0amamaFa##vbmaBb#bnaY#D#D#Da9bjaf#L#L#Laf#L#L#La9a9a9a9a9a9.7.7a2af#L#L#L#L#L#L#L#La2#La2#L#L#L#L#L#L#L#L#L#L#La2#L#Laf#La9.7a9a9afa9a9bj#s#D.Nbl.NblaY.NaY#xaYawaYawaYbl.sbl#M.7.E#L.7#L.Ea3.E",
+".7.7.E.7.Ebj.7.7.n.7a9.7#s.N.N#DaY.N#x.Cam.5a#aZaF#SaZa7arala6ay#W#W#kbhbmaFa#.5#x#x.CaCaoamaOaB#P#obsba#uam.C.NaYaYaY#D#D#D#D#Da9#Da9#D.7#Da9a9#La9.7.7a9bl#s#Da9a9a9bla9bl#D#DaY.NaYawaYaY#IaYa0aCb#.Va0a0#U.N#D#Da9.7a9.7aj#L#L#L#Laj.7#L#L#L#L#L#L#L#L#L#L.7#L#L.E#La9.7.7.7#D#D#DaY.s#x.C.C#x#Ia0aCama#a#aZa#.8a0#xaY#Da9af.7#Da9#D.7#Da9#Dafa9afa9.7a9#La9#L#L.3#L.3#L.3#L.3#Laf#L#L#L.3#L#L#L#L#L#L#L#L#L#L#L#L#La9.7a9a9a9#D.na9bl#DaY#s#x#x#x#Ia0#I#x#xawaYblaw.NaYaYaY.7#D.7.Ebja3.7.7",
+"#Db.#D#D#s.N.s.NaY.Naw.N.NaYbo#xa0b#a#bmaS#aa6.Kbaba#a.faZaFb#amb#b#ama0.C#xbf#xbobf.NaY#xao#v#u.q.qaGanamaYaY#DaY#sbl#Da9.7#L.7.7.E.7a9.E#L.7.E#L#L#La9.nbjbl#Da9a9.7a9.7#D#D#DblaY#xaYaY#IaYaY#xbna0bnbna0aCbn#sbl#Da9.7af.7a9#L#L.7#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#La9.7af.7a9aj.7#D#D.N.Nbo#x.Nbl#Ia0am.5aO.0aB.0b#.CaYbla9a9a9.7a9.7a9.7a9a9a9#pa9a9a9bj.7.7#L#L#L#L#L#L#L#L#L#L#Laf#L#L#L#L#L#L#L#L#L.7#La9#Lafa9bja9#D#D#D#Dbl#DaYaYaYaYaY.C#xama0.CaC.C.C#x#xboaYaY.NaY.N#s.N#D.N.s.NaEaW",
+".N.N.s.N.Nbf#xbfaCa0a0a0a0amam.8aZbhazaGau#j.e.e.6ana#.5ambn#xaY#I#x#xbo.N.N#saW#x#Ibfaw#x.5aZ.G.q.KaBam#xaY.s#D.7#Da9.7.E#L#L#L#Laf#L#L#L#L#L#L#Laj#L#L.7#Da9#Da9.7a9#D#D#Da9#D#DawaY#IbnaYaY.Naw#xbnbnbna0bna0aY#D#D#Da9.7#L.7#L#L#L#La9#L#L#L#L#L#L#L#L#L#L#Laj#L#L#L.n.7.7.7#La9.E.7#D.N.N.N#saY.N#x.Wa0.5aF.0aZ#v.5a0aY#Da9.7#Da9bja9#D.7#Dafa9afa9.7a9#La9#La9#La9#La9#La9#La9#L.7a9af.7af.7#L.7.7#L.7af.7.7a9.7#D#D#D#D.N.saYaY#x#I#xbnbnaOaoaoamaCa0a0bn#Ibn#x#x#x#x#I#x#xaYboaY.N#xbf#x",
+"#x#xa0.CaCa0aoa0aFa##v#vaZ#uaZaZarazazanbmaF.5a0.C#x#x.N#D#D#D#D#D#D.Nblbj#D.N.sbf#x#I.CbgaBaz.2baazaF#x.n.7#Dbla9.7.7#L#L#Lajbp#L#L.E#La9#L.7#L#Lbp#L#L.7#L#D.E#L#L.E.7.7.7.7#Dbj.N#xbna0#I.N#DaYawbna0bnbn.V#U#D#D#D#D#D.7a9.7#Laja9#Laj#L#L#L#L#L#L#L#L#L#L#L#La2#L#L#L#Laf.7#L#L#La9.7#s.N.N.7#D.N.N#x.CaCaq#vaZaBa#aF#xaYbl#D#D#D#D#D#D#D#Da9a9a9a9a9a9.7.7#L#La9.7a9a9#L#L#La9a9a9.7a9.7#L.7af.7af.7a9.7.7#D#D#D#D#D.N.NaY#x#x.Ca0b#ambgamaOb#aCa0.C#I#xaYa0a0#xbn#x#xbna0aCa0a0a0ao.CaCaq",
+"aoa0aoaO.5.8aFaO#u#uaSazaG#3araza#a#amam.C#x.s.Nafaf#La9bjaWbfbf.N.NaY#xawaYaYaY#x.C#xaCamaB#aaT.GaF.C#D#La9#L#D.7#Laj#L#Lbpbp#Lajaf#L#La2#L.j#Lbp#L#Lbpa9.7#Da9.7#La9#La9.7a9.7#Dbl#xaCbn#xaY.s#D.N#Ubnbnbnbna0bl#D#D.7a9.7#L.7a9#L#L#L#L#L#L#L#L#L#L.7#L#L#L#L#L#Laj#L.7#L#L.7a2.7#L.7.7#D.N.Nbj#D.s.N.N#I.Ca0aFaZaBaZ#vam#xaY.7#Da9#D.7#Da9#Dafa9afa9.7a9.7a9#L#Lafa9#La9#L#La9af.7a9a9a9afa9a9#L.7.7a9#L.7af#D#D#D.N.N.NaY.s#xama0.8aF#Sa##va0a0a0#xbnaYaYawbn.WbnaCbnaCa0aCaFb#aO.5aOaF.8aF",
+"aZ.ya#amaoaFaB.Taka6aGaraBaFa0#xbnaYaYaw#D#Da9#D#L.Eaf.7a9aj.7.7aja9.n.7#D#D.sbfaw.N.Wam#v.w.Ga7.C#IaY#D#s.7.n#Laja2#L#ga2#ga2#g#L#Lajafaj#L#L#Laj#L#L.na9a9.na9a9a9.na9a9#L.Ea9a9#saYaY#x.C#x#xaYbn#x#U#x#xa0aCbn#D.7#L.7a9a9#paj#L#L#L#L#L#L#L#L#L#L#L#g#L#L#L#L#L#L#L#L#L#L#Laj#Laf.Ea9.7.7a9#Da9#D#D#DaY.NawaY.pa#.0.0a#ambn.N.N#D#D#D#D#D.7a9af#L#L.7#L#L#L#L#L#La9a9.7a9#Da9a9#Da9bja9bj#D#D#D#D#D#D#D#D#D#s#D.saY#xbn.8aFaZaBaZa#aFama0aqaC#x.N#MaY#x.Ca0aFb#b#amamb#.5aFaoaOaFaOa#bmaZ.y",
+"aZa#aOa##v#vaB.T#4#z#a#uaFa0aC#xaYawaYbl#Da9#Da9.7a9.7#L.7a9.7a9af.Ea9.7#s.N.N.N#D#Ia0.8a#bkaraZ#IaY.s#D#Da9.7#Lbpa2bpa2#g.j#ga2ajaf#L#L#Laja2#Laf.7#L.7a9.7#Da9afa9a9a9a9.7a9#La9#Dbl#x#x#I#x#xawaY#U#xbn#Ia0.CbgaYa9#L#L#Lafa9#Laj#Lbp#Lbp#Lbp#Lbp#L#ga2#g#La2#L#L#Laj#Lbpaj#L#L.7#La9.7.7a9.7.E#D#D#D#D.saY.N#Ua0#va##S.0aOamaY.N#D#D#Da9#D#Dafa9a9af#L#L#L.7af#Laf#La9#Da9.7a9a9.7#D#D#D#D#Da9bja9a9#D#D#s#D.N.N#x.Ca0aoaF#vaZbmbmaOa0.W.C#x.C#xbl.NawaY.CamaCamaCamamambgamb#.5aOa##Sa#.yaZ",
+"#vaFaO#v.ybmaZazbaauazb#a0#x#xaYaYaY#D#sa9#D.E.7aj#L.7aja9aj#L.7aja9.n.7#D#D.sbfaY.WaCam#u#3a7aFaYaY#D#D.n.7ajafaj#gaj#g#L#g#Laj#L#Lajaf#Laf#Laj#L#L#La9a9#Da9a9.na9a9.7.n.7.7a9.na9aY#x#x#x#x#xaYaY#x.R#IbnbnaC.t.VaYa9.7aj#L#L#Lbp#L#Laj#La2#L.j#La2#g#g#g#gajbp#Lbp#L#L#L#Lbp#L#L#L.7a9.7.7.7a9#D#s#D#DaY.NaYaYa0ama#a#.yb#a0.N.N#D#Dbj#D#Da9a9a9.7a9bja9.7.7a9a9a9#D.7#D#D#D#D#Da9#Da9#D#D#Da9a9.n#D#DblaYaY.8b#.8aOaFaOaFaOb#bgama0#x#x#x.N#U#x#I#x#x#xaoama0bna0bnaoam.5amaOaFaFaF#va##vaZ",
+"aOaOaF#va#a#az#faS#ubmb#a0#xaY#Dbl.n#Da9a9.7#L#L#L#L#L#L#L#Laj#L#L.Ea9a9#s.N.N.s#x.Wb##v#Ebk#va0aw#D#D#Da9#L#L#Lbpa2#L#ga2#ga2#g#Laf#L#L#Laj#Laf#L.7#L.n.7#D.na9a9a9a9a9a9.7a9#La9#sbl.NaY#xaYaYblaYaw#x#x#x.C.C.Fb#bnbl#Da9.E#L#Laj#L#Lbp#Lbp#Lbp#Lbp#L#g#L#g#L#Laj#Lbp#Lbp#L#L.7#L.n#L#L.7af.7#Da9#D#D#D.NaY.saY#Ibn.5a#a#aFambf#x.NaY#D#D#D#Da9a9a9.7a9.7.7#L#D.nbj#D#D#D#D.Na9b.bl#Daw#xaYaYaYaYaY#Ia0a0aoam#uanaBa##vb#bgb#bnbnaYaYaYaYblaw#x#x#x#Ua0.Wa0a0.W.C.Wama0ambg.5aFaFa##va#a##va#",
+"b#ao#vbmaB#uaz.Gb#b#ama0#xaw.N#D#Da9a9a9.E#L#Laj#L#Laj#L#L#L#L#L.Ea9.n#D#D.N.N#x#Iao.5#u.Oazam.C#Dbl#sa9ajaf#La2.jbp.j#L#gajbpaj#Laj#Lajaf#L#Laj#L.n#La9a9a9a9#D.na9a9.Ea9.n.7a9a9#DaYaw#x.sbl#D#sblaYbl#I#x#Ua0b#bgb#bn#D#D.7#Lbj.7.7.7.7.E.7.7#L.j#La2#g#L#La2bp#L#Laj#L#Laj#L#L#L#L.7af.7.7.7a9.7#D#D#s.Nbl.NaYaY.CaCby#va#.8#xbfaY.N.s#D#Dbj#D#D#D#D#D#D#D#D#D#D#D#D.Naw.NaY#D.NaYaw#x#xa0aoamamaFaF#v.0bbanaBaZ#vaFb#am#x#xaYaYaYaY#IaY#D#D#x#x.Ca0avamama0.C#x.Ca0aoamaFa##uaZaBaZ.y#S.0.y",
+".8aOa##Sazar#ua#a0am#x#x#x.N#D.7.na9#L#L#Laj#Lbp#L#Lbp#L#Laj#Laj#La9.7.n#D.sbo#x.Wao#v.f#f.ya0bf#M#D#Da9a9#L.ja2#La2bp.j#L#ga2a2#Laf#Laf#Laj#Laf#L.7aj#Da9b.bl#Da9.na9a9a9a9.7.n#D#MaYbfaYaY#Da9#D#D#Daw.NaY#x#Ib#b#bg.VaYbl#s#L.Ebj.7b..7.7.7.7#Lbp#Lbp#L.jbp#L#L#Lbp#Lbp#Lbp#L.7aj#La9.7a9#L.7a9#s#D#D#DaY.Naw.N.s.CamamaOa#a#.W#xbf#xaY#D#D#Da9#Da9#Da9bj#Dbj#D.N.Naw.N#x#xbfaYaw#x.Ca0a0aFbma#aBaZbbaZ#uaZ.0bgb#a0am#x#x#xaYblaY#MaYaY#Dbl#DaY#xaCamamaoaqaC.C.Wamao.5a#a#.yaSazaZ#uaZ.yaOaF",
+".5aF#Sbhaza7aFa0a0bn#xaw.N#D.7.7af#L#L#L#La2#L.j#g#Lajbp#Lbp#Lbpaja9.n#D#s.N#I#I.WaF#uarazaF.W.Nbl#D.n#Laj#La2a2aj#g#L#g#L.jbpaj#Laj#L#Lajaf#Laj.7afa9.na9#D#D#Ma9#p#s#D#sa9.na9#DblawaYaw#Da9a9#D#D#saY.Naw#x#xaCb#.VaC.V#xaY#Dbj.nbja9bj#s.7.7aja2#L.j#Lbp#La2ajbp#L#L#L#L#L#L#L#L#L.Ea9.7.7a9#D.7#D#D#D#DaY.N.N.N#I.CaoaFa#aB.C#x#xbf#x.N.NaY#Dbl#D#D#D.N#D.NaY.saYaY.C.W.C.W.Caqa0.8a#aZaBan#u#uan#Sa#b#ama0bnaY#xaYaY.NaY.N#s#DaY#DblaY#Dbl#I#xam.8.5aOam.Cama0aoaFbmaBbha7#a#ea7an.y.yaF.8",
+"bc.y.wara7b#a0aoaYaYaYbl#Da9.7.7#Laja2#L#g.j#g#ga2bpa2bp.jbpaj#Laf.Ea9#s#D#I#I.C.WaOaz#EaZb#.C.N#sbla9afafaj#L.j#L#g#L.jbpa2bpa2#Lafajaf#L#L#Laf.E.7.n#Da9#D#sbl.n#D#M#s#D#s#D#s#DawaY.NaY#Da9.n#D#D#D#DaY.NaY#I.CaCam.Vb##U#xawa9bj.7b..7bj.7bj#Laj#Lbp#La2#L#Lbp#L#Lbpaj#Lbpaj.7#L.7af.7a9.7.Ea9#D#D#s#D.N.saYb..Nbf.Wa0aF.0#ua0.W.C#Ibfaw.NaY#saY.N.N.N.N.N.N.N#xaY#I#x.W#x.C.Wam.8aZ.waz#ubha#aFaFb#ambn.bblawaY#MaY.N.s.N.N#D#D#D#DaY.saY#I#xaCam.8aFbyaoaCaoamama#a7azararaya6.G.Gaz#u#v.8",
+".J.far.laobn#xaY#D#sa9#D.7a9aj#L#L#L#L#L#Lbp#Laj#g.j#ga2#L#L#Lbp.na9.7#s.N#I.Caobh#EaBaCbn.s#IaY#Ma9.n.7#L#L#L#Laj#Laj#L#Laj#L#L#L#L#L.7aja9.Ea9bl#M#D#M#DblaYblaYawaYaYawaY.NaYawaY#Mbl#D#D#D#Da9.n#D#s.Nbl.saY#x.RaY.N#xa0aFbm#IaYaY.N#s.7.E#L#L#La2#L#L#Lajbp#L#La2#L#L#L.7#La9a9a9.7#L.7.7.7#Da9#D#D#DaY.N.NaYaY#Ia0.5.8a#an.0.5bn#xbl.N#x.C#Dbl.sblaY#I#x.W.R#Ibna0aOa##vaZazararaz#ua#aFaO#x#I#x#Ibn#x#xaYaYaY#DblaY#Dbl#Dbl.NblaY.NaY#x#xaoaobnaY#xaCa#.0aOaOaOaFaFaFaFaF.l.Ta7bh.G.G#q#e",
+"araza7aFam#xaYawa9#Da9a9a9#L#L#L#L#Lbp.j#L#La2#Las#ga2#gbp#Laj#L.7.7.n#D#M#xaCaFbk#iaOaC#xblaY.Na9a9a9afaja9aj#L#L#Laf#Laf#Laf#Lajafaja9#L.7a9.Ebl.n#D#M#DawaYawbn#Ubn#I#x#I#xawaYawaYaY#D#s#D#D#D.n#D#DaY.s#x.N#U#IawaY#xbna0aF#x.W#xaw.N#D.7b.afajaf#L#Lbp#L#La2#L#L.E#L.7a9.7a9a9.na9.7a9.7.7#D#s#D#D#D.Nbl.Naw.N#x.CamaF.0.y.yaF.CaYaw#x.Caq#Ibn#x#x#x#xbna0aoamaF#vana7.wazaZan#uaZaOamamamaY.RaYaYawaYaYaYaYblaY#D#Dbl#DaY#DblaY.N#xaY#I#xbnbnawaYbnam#va#ama0a0aoamamaoam.taFbmaZ.6ar.2#4",
+".faBb#a0aY#xbl#Da9a9#D.E.7#L#L#L#g#ga2#g#g#g#g#g#g#g#ga2#L#L#L#L.n.7a9a9.N#Iam.8#f.Gb#bn#UaYaw.Na9.na9.7af#Laf#Lajafaj#Laj#Laj#Laf#Laf#L.na9a9#D#Mbl#M#DawaYaw#x#I#U#x#U#Ibn#I.NawblaY#s#D#D.N.sa9#s#D#M.NaY.s#xawaY#D.s#D.Nbnama0a0aC#x#xbl.NaY#La9#L.E#L#L#L#Laj#L#L#La9.7aja9a9a9a9#D.n.7a9.7#s#D#D.Naw.N.NaY#Dbl#I#xaC.5#va#aBaFa0aC.C.Caoa#ama0a0ambgaF#va##uan.w.wan.wanaZ#vaFb#ama0a0#x#xaYbfaY#xaY.Nbl.Nbl#D#D#Dbl#D#D#D#DaY#saY.N#x#x#xaYaYaYaY#Ia0bg.5bn#xbn#xbna0a0amaCb#ao.t#SaZar#a",
+"aFama0aY#xaY#Da9#D#Da9a9#L#L#L#g#ga2#gbpa2bpa2bpa2#ga2#gbpajbp#L#Da9.7#saYaY.W.5#EaraFa0#U.NblaYa9a9a9ajaf.E#La2#L#L#L#Laf#Lafaj#Lafaja9#D.n#D#D#s#DblawaY#I#x#Ibnbn#I#U#x#IaY.N.Rawbl#D#D#D.s.N#D#D.saY.saY#I#x.N#s#s.7bj.N#xa0aob#amaoa0#I#xaY#D.na9.7a9bpaj#L#L#L#La9.Ea9#D#D#D#D#D#D#D#Dbj#DaY.Nbl.N.N#x#xbfaw.NaY#xama0aOa#aBa#bgama0.5a#.0aFaOaF#SaZan#ua7bhazaBbhaBa#aFb#b#aCbnbn#x#xaYaw.Nblaw#D#Dbl#D#D#s#D#p#Da9#D#D#Dbl#DaY#x#xaw#x#xaY.NaY#x#x.C.C.CawaYaw#xaw#x#Ibn#x#Ua0a0amaFbmbm",
+"bn#xaYaYaY#Ma9af.7.n#L#L.7#L#ga2bp#ga2#g#ga2#ga2#ga2#L#L#L#L.7.7#s#D#s#D.N#xamaoaS.OaBam#xaYaw.N.na9a9#Laf#L#La2ajafaj#L#Laj#Lafaf.na9a9a9bl#D#Mbl#saYaw#x.b#x#x#U#Ibn#I#xawaY.saYaYbl#D#D#D.N#D#M#sblaw.N#I#x#I#D#sbj#Db..N.N.Camamb#am.pa0a0bn#D#Da9.7.7aj#Lbp#L#La9.7a9a9#s#D#MaY#D#Dbl.saY.N.N.N.s#x#xbf#I#x.NaY#I.CaCamam#vaBbm#SaF#va#a#aB#ubh#uanaBaBbmaZ.FaFb#b#a0aCbn#I#x.RaYawaYawaY.N#D#D#D#D#D#D#D#Da9#Da9#Da9#Da9a9.saYaw.Naw.N#xaY.N#x#xaY#xaC#xaYblaYaYaYaYaYaY#xaYblaY#Ua0a0.Vbn",
+".NaY#D#Da9a9a9#La9.7.7#L#L#g#L#ga2bpa2bpa2bp#gbp#g#Lbpaj#L.7.Ebjbj#D#Dbl.s#xaoa##TalaBam#x.NaY#Da9a9a9af#L#L#L#L#L#Lafaj#Laf#Lajafa9a9#p.n#D#M.NblaYaYawaY#x#I#x#Ibn#U#Ibn#I.NaYawaY#sbl#saY.s.N#sbl#s.NawaY#I#x#I.N#D#s#D.N#Ibnaoa0#Ia0a0b#aoamaw.N#Da9.7#L#L#L.7.n#L.7#s#DaW#DaYaYaY#I.NaY.N.N#I#x#xbf#x.C.C.C#x#I.Ca0amama#a#a7azaza7aZaB#uan#uan.laZ#SbmaFaF.V#Ubn#UaYaYawaYaYawaY.NaY.N#D.N.n#Da9#D.n#D.7a9#Da9bj.nbja9#s#DblaY#D#x#xaYaY#x#M.N#x#I#x#x#xaY#Dbl#DaYaYaY#xaw#x#IaYaYaY.baYaY",
+"#D#D#Da9a9#Lafaj#L#L#Laj#Lbp#ga2#g#ga2#g#ga2#ga2#g#L#Lbp.7.7.7#D#D#s#D.saY.C.8aB#4#zaZa0#xaYaw#Da9.na9#L#L#Laja2#Laj#L#Lafaj#L#L#p.n#pa9blblaYaYawawaYaY#I#x#x#Ibn#Ibn#I#x#U#x#IaYblaYaY.Nbl.saY#s#Daw#Dawbf#I#x#I#x.s.N.s#xa0aC.C.Ca0.CaCa0ambg#x.N.s#D.7aj.7aja9.7a9#sa9#D.s.NaYawaYaYaY.NaYaYbf#x.C#x.W.C.Caqavaqa0ao.5#va##vaS#W#aazazanbm#SaFaFa#aFaOaFbgb#aCbnbnaw#x#x.N.N#sbl#D#s.N.N.N.N.7.7.7.7.7.7a9.7.7.7a9.7a9.7.7.7aY#DawaY.NbfaY#x.NaY#x#x.C.WaY#D#M#DaY.NaY#x#x#x#x#x#xaYaY#Da9#D",
+"a9.7.7.7afaj#Laf#L#L#L#La2#La2#gbpa2bp#g#L#g#L#g#Lbp#L#L.7.7.7bj.s#D.NaY.Nao#v.QaD#za#am#xaY.N#D#pa9a9ajaf#Laf#L#Lafa2#La2#Lafaja9#p.na9#MblawblawaYaY#I#x#I#x#x#Ubn#Ibnaw#x#IaYaYawaY#M.saY.N.s#D#M#D.s.Naw#x#I.W#x#I.s#x.W#Ua0.Cava0.W.Ca0a0a0#I#IaY#D.7#L#L#La9.E#D#D#D.N#D.sbnbn#x#x#x#x#I#x.C#x.W.Caqamavam.C.5.5aFbya#.y.0.Gakar#e.TaBaFaF.5aFaOamb#a0aoambn#Ua0.C.Ca1bfbf.Nbl.N#D.N.N.N.Na9aj.7af#Laf#L.Eaf#L#L#L.7.n.7.n#DaYblbfaYaY#x#x.s#xbo#x.C#x.Na9#D#DaY.N#x#IaY#xama0bn#x#D#D.7#L",
+"#Laj#L#L.7#L#L#Laj#L#Lbp#g#g#g#La2a2a2a2#ga2#L#L#L#L#L#L.7a9.7a9#Da9.s#Iama##u#.bA.faFaYawaYaYbfa9a9afa9#L#L#Lajafajafafajaf#Lafafafa9a9bl#Dbl#s.RawaYaY.R#U.R#Ubn#Ubn#Ibn#U#x#x#M#D#D#Daw#D#s#DaYaw#s.n#D.s#I.Caoaoam.8.5aO##am#va#byaFbcaqav.CaFaOaFaC#x.N.saW.N#D.N.s.N#I#xbn#U#xaw.R#x#xbna0#U.Vamb#b#aFa#bmaBaZ#vaZ#v.0aB.yaFaO.5bgamamamaobn#U.C#Ua0aCbnbnawaY#MaYblaY.saY.7.n.7.na9.E.7.7#La9#Laj.7#L.7af#Lafaja9a9a9#Da9.Nbl.Naw#x.s#xaY#x#xbn#x.baYaY#Da9.na9#DaY#x#x#x#IaYaY#sbla9.na9",
+".7af.7#Lajaf.7#L#Lbp.j#L#g#L#g#ga2#ga2#g#La2#L#Laj#L#L.7a9.7.n.7#sbl.NaYaoa#azbAa6a7am.RaYaYaY#xafa9a9af#Laf#L#L#Lafaj#Laf#Lafajafaja9.n#D#M#DaYaw.R.RaY.baY#UaY#Ubn#UaYbn#x#I#x#M#D#M#D.s#D#s#D.s#Dbl#s#s#MbfavaCbgaCaoaC.5ao.5#vaOaOam.8.8amavb#b#aoaC#xaw.N.N#s.s.NaYaw#xbnbnaCa0a0a0amamaoaFaFaFa#.yan#u.G.6aBaBbmaO.5b#.5b#amaoa0a0amaCa0a0aY#xbn#Ibn#Ibn#IblawaYaY#M.Nbl.N.n.7a9.7a9.7afa9.7aj.7#L#L#L#L.7#Laf#La9a9#D.7#D#s#DaYaY.NaY#x#xbn#x#x#U#xaYawaYa9a9a9bl.NaY#x#x#xaYaYbl#Da9.7a9",
+"#L#L#L#L.7#L#L#L#La2#L#L#ga2#g#L#ga2a2a2#ga2#L#L#L.7#Laf.E.7.7#DawaY#I.CaoaBazbaaSa#.VbnawaYaY.N#pa9afa9a9#Laja9af#Lafafajaf#Lafa9#pa9blblbl#MaYaYaYaw.R#x#UaYbnaw#x.R#I.R#I#x#xaYaw.NaYaw.N.N.s#D.s.saw#I.CaoaoaO.F#vaOaO.8#vbc#va#aO#vaO.5.8aCaFaO#SaOaOao#I#x#MaYawbnbnaCa0b#a##va#a##vaZaZ#uazazbh.Galay.2alaFaOaFamaCa0aC.C#I#x#x#I#x#xaY#IaY#I#x#I#x#x#I#xbl#D#M#D#D#s#D#D.n.7.n.7.n.7.7.Eaf#L#L#L.7aj#L#Lajaf#La9.7a9a9.7bl#DaY.NaYaY#x#xaCa0#x#xbnawaY#D#Da9#D#DawaY#x#I#xaYaY#D#Da9a9a9",
+".7#L.Eaf#L#Laj#L#L#L#g#L#g#L#g#g.ja2a2#ga2bp#L#L#Laf#L.7.7a9.7#Dblaw#x.W.5az#aalaZb#a0bnaYaY#DaY#p#Da9afa9a9#L#Laja9aja9#La9aja9.na9#sbl.n.NblaYaw.R#xawbnaY#U#U#x.R#Ibn#I#x#I#xawaYaY.saY.s.N.N.s.saw.W.Waobc.yaBaB#u#S.y.y#va#aB#u.Qaz.waBaZ.yaZaB.0aBaB#vaO.5bn.Vb#am#Sa#aB#u.wbhazazbh.waz.GarazaSaz#a#a#a#ea0a0#Ubn#x#I#x#xaY#MaYblblawbl.NblaYaYaY#U#IaYaY#D#M#D#s#D#D.n#D.7a9.7a9.7a9.7a9#L#L.7af#L.7af.7af#L#L.na9a9bja9#D#D#DawaYbfaw#xbna0#x#UaYaYaYbl.n#Dbl#DaY.N#xaY#xaYaY#D#Da9a9.7",
+"#L#L#L#L.7#L#L#L#g#ga2#g#g#ga2bpa2#ga2a2#ga2#L#L.7#Laja9#La9#sa9.NaYaY.Wambk#zaraFamambnaYblaYbl#Dbla9a9.7a9.7a9a9.7a9a9.na9a9a9#Da9bl#DblawaY.N.RaYbnbnbn#Ubnbn#I#U#x#x#x#I#x#Ibl.Naw.NaYbf#I#x.s#x.WamaO.y#uazal.U#z.U#T.G.GaP#Tal#z.U#3al.Ualal#T.G#T.G#e.w.wa7#ua7a7aS.G#e#TaS.w.wanaz.wazaS#vaOa##va#aFaFam#UaY#xaYaY.NaY.s#D#D#D#s#D#D#D#s#D#saY.saY.NaY#sbl#D#M#D#D#Dbj#D.n#L.E#L.E#L#L#L.E#L#Laj#L#L#L#L#Laf#La9.7#Da9#D#D#DblbfaY.N#xaY.C#I#x#xaYaYaY#Dbl#D#D#Dblaw.NaYaYaYaY#D#pa9#La9",
+"#L#L.7aj#L#L#L#L#g#L#gbpa2bpa2#ga2asa2#g#La2#L#L#L#L#La9.7.7#D#sbl.N#Ia0#vaz#z#eam.Va0bnaYaYaYaY#Dbl#D#Da9a9.7.7a9a9a9.7#Da9#sa9bl#sbl.sbl.NblawaYbn#Ubn#Ibn.C#Ubn#x#U#x#I#x#IbfaYaw.NaY.N.saYboaYaCam.y#u#aau#4aH.4#..4aHbrbw#0.2bw.2aT.2ay.YaH#4#zal.o#T#Tal.U#aar.G.Ga4aPa4a4.ya#aZ.ya#a#a#aOa0bnaCbnaCbn#I#xblaYaY.s#D#sa9#Da9.na9a9a9.na9a9#D#D#D#D#s#D#s#D#D#s#D#D.n.7.E.7.n.7#La9#La9.E#Laf#La9#L.7#L.7afaj#L#La9a9.n#D.7bl#D#DaY.NaY#x#xbn#x.R#xaYaYaY#DaY#Dbl#D#D#DaYaYaYaYaY#D#Da9a9a9",
+"#L#Laf#L#L#L#L#La2#ga2#g#ga2#g#La2a2#ga2#ga2#L#L#L.E#L.7.n.7a9#D#D#I#xaoby.w#zaSa0aCa0bn#x.Rblblbl#D#D#D#D.7a9.Ea9.7a9a9.n.7a9a9#sbl#DblaYaw#x#x#xa0#xa0a0a0aCa0#I#U#x#I#x#I#xawaY#x#I.Nawbf#x#IaCbgaBaza6aT#P.uaybaay#3#aar.Gazaz.Gazaz.Gar#aa6.w#u#uaBaZaB#uazazazaS.0#S.0aFa#am.5aoa0am.Wam.C#I#x#x#I#x#I#xaw.N.N#s.N.N#Dbj#s#D#D.7.7.7#D#s.7a9.Ea9a9a9a9a9a9#s#p.na9bj#Dbjbj#Lajafaj#L#L#Laf.E#L#L#L#Laj#L#Laf#Laf.7a9bja9#D#D#DawaY#x.s#xaY#x#x#x#IaYaYawaYbl#D#D#DblaY#s#DaYaYaw#D#Daf.7af",
+"#L.7#L#L#L#L#L#L#L#gbpa2bp#g#L#La2#ga2a2#g#L#L#L#L#L.7a9#L.7#D#saY#x.C.8#va7albh.Ca0a0bnaY.RblblaY#Dbla9#Da9.7.7a9a9a9a9a9#D.n#Dbl#Dblaw#DaY#x#IbnbnaCa0#Ua0aCa0.CaC#x#I#x#I#Ibf#x#I#x#I#x#Ibo.C.paOa7#aay.K.K.K#Ear.faZa7#uaBaB#vbmaBaZa7an.TaZaOaF.FaFaOb#b##SaZ#va#aOama0.W#xavam.C.W.C#xaw#x#x#Ibfbf#xbf.N.N.saYaY#D.N.E#D.7a9#D#s.7#s#D#D#sa9.7a9.7.E.7.Ea9#s#D#s#D#s#D.Ea9.Eaf.E#Lajafaj#L.7#L.n.7#La9#L.E#Laf#L.na9#D.7a9#Dbl.NaY.NaY#x#x#x#U#x.RaYaYaYaY.N#xbl#D#D#D#DblaYaYaYbl#Da9a9.7",
+"#L.3a2a2a2a2asa2#ga2a2#ga2a2#ga2#ga2#ga2a2#ga2#L#L#Laj#L#L.7b..7#x#I#x#xaC#uar#e#Sa0.CaYaY#DaYaYa9#p#pa9a9a9a9a9#s#D#sbj#D#D#D#D#saYaY.Naw#x#x.Ca0aoa0a0aCbn#Ibnaw#U#U.CaCamaCaCaw#Mbn#UbnaCbgaoaZanaral.2alaPan.y.0.yaB.0a#a#a#.8aF#v.0#u.0#v.5aCam.8amaOamaoam.F.tbg#x.C.C#xaY.NaY.saY.Nawbf.N.N.N#D.s#D.N#D.Nbl#sbl#s#D#D#D.7.Ea9.7a9.7a9.7.7a9#s#D#D#Da9#D#D.na9.na9.na9a9.na9a9a9.naf#Lafaf.E#L.7#L#L#L#L#Lafaj#L#L#La9.na9bl#MblaYaY.baYaYbl#Dbl#DaYawaYaY#M#D#DaY#Dbl#D#DaYblbl#D#p#Dafa9",
+"afa2#La2a2#gaa#ga2a2bpa2#L#g#L#ga2a2#g#L#g#La2#g#L#L#Lbpaj#D.7bjaY.N.N#Iao#u#aayaFa0bnaYaYblaYaY#pa9a9blbl#D#M#D#Da9#Da9#Da9#s#Dbl#D#MaY#x#x#x.Wama0a0aCa0a0amao#Uaobg.8am.8amama0bgb#.8aFa#.0aZ#ua7#uaS#uanaBa#.8aFaOamaOamaCamb#ao.5a#.0#vaF.5a0a0aC.Ca0.Wa0am#ybgaC#xbf#I.NawaY.NaY.saY.NaYaw#D.s.N.N.N.s.N.sbl#sbl#D#D#D.n#D.7a9.7.n.7.n.7.n#D#D#s#D#s#Da9#Daja9a9.nafa9aja9aja9aja9af#L.n#L.7af.Eaf.E#L.7#Laf#Lafaf#La9.7a9blblblawaYaY.baY#Mbl#DaYaYaYaYaY.NaY#Dbl#s#Dbl#D#MaYa9bl#D#Da9a9",
+"afaf#La2a2a2#ga2#ga2a2#ga2a2#ga2bpa2a2#ga2#ga2#g#L#g#L#L#Lbj.Ebjaw#D.s#xaoana6abaOam#xaYaY#DaY.N#pa9#p#sbl#Dbl#D.n#D.na9.na9a9a9#sbl#DaY#I#x.Wbnb#bgb#amamao.8aFamaO.yaZ#u#u#S#vaZan.yaZaZ.6aSa4aBaZbma#aF.5ama0aCa0.CaCa0a0a0.Wbna0a0aoam.5aoa0#I#x#xbn#I#x#x#x.p.Vbn#x#I.NaYbl.N.NaY.N.NaY.N.NaYaY#DawblaY#DaYblaYblawaY.s#D#D.na9a9a9a9a9a9a9a9#D#D#Da9a9bja9a9.nafa9.Ea9a9.na9.na9.n#Lajaf#L.n#L.7#L#L#Laj#Lajaf#L#Laja9a9a9blblblaYaYaYaYaYbl#D#MblaYaYaYaYbl#saY#D#D#D.NaYblaYbl#D#p#Dafa9",
+"afajaf#La2a2a2a2a2#g#L#g#L#g#La2#ga2bpa2#La2bpa2aj#Lbp#Lajbj.7#s#D#Daw.C#v.GaTaD#vb#a0bnawaYaYaYaYblaYaYaYawaYaw#D#D#D#D#D#D#s#Dbl#saYaw#xa0a0a0bgamaOamaOa#a#a#.yan#u.G.Gaz.w.w#u#uan#uan.w.6.GaFaOaFaoaobn#I#x#I#x#I#x#x#I#xaY#x#I#xbn.CaC.Ca0#x#x#IaY#xawaYaw.R.bbnawblaYaw#DaY.saY.Naw.N#M.N#D#s#DaY.N.saY.NawaYaw#Dbl#DaYaY#D#s#D#s#D#s#Db.a9#D#s#D#s#D.n#Daf#L.na9aja9aja9afa9aja9afaf.7af.7#La9aj.7a9#L.7afaj#Laf#La9a9a9.na9blblaYawaYaYblbl#Dbl.saYaYawblaY#D#Dbl#DblblaYblbl#Dbl#Da9a9",
+"a9a9#L#L#L#L.jbpa2a2aja2#ga2#ga2#L#ga2#ga2#ga2#L#g#L#L#L#Lbj#s#D#saw#Iaq.y#3aH#Pa#bga0#UaYaY#xaYaYawaYaYaY#x.N#x.Naw.Naw.N.NaY.s#DblawbnaCamb#bgaFbma##S.0aB#u.yaz.w.waz.w#u.0a##SaFbma##Sa##Sa#amamaoa0#x#IaYawaYblawaYawaY#M.NaYaYawaY#I#x#x#U#x#x#xawaYaY#D#MaY#x.b#x#UaYaY#Daw#DaY#D#D#D#D#Dbl#Dbl#sblblbl#MaY.RaYaYawaY.s.Nbl#Dbl#D#Dbl#Dbl#D#s#D#D#D.7#D#Dajaf#La9.na9a9.na9.na9a9.n#Lajaf.E#L.7#La9aj.7#Lafaf#Laf#La9.Ea9a9#p.nblblaYaYaY#Dblbl.NblaYaYaY.Nbl#D#D#D#DaY#DaYblblbla9#Dafa9",
+"a9afa9ajafbpa2#L#ga2bpa2#L#g#La2bpa2a2bpa2#L#ga2#L#Lbp.7aj.7#Db.bl#x.Waobb.2a6ak#vb#a0#x.RaY#xaYaYaY.R#x#x#x#I#xawaYaYaYaY#xaw#xaYaw.Ca0b#aF#vaZaZana7.waz.G.Ga7#uaBaB.0a#aFamambnbnaCa0a0aCa0a0aoa0#IaYaw.Nbl.NaY#MaYbl#DblaY#DawaY.Nblbl#xbn.Ca0#I#xaY.N#Mbl#DawaY#Ibn#Ubn#I#x#D#D#D#D#D#D#s#D#D#saY#Dbl.s#DaYblaYaYawaYaYaYblbl.nbl.nbl.nbl.n#D#D#D#s#D#D#s#D#Lafaja9#paja9aja9af.naf.naf#Laf.7aja9aj.7#Laf.7afajaf#Laja9a9a9afa9#Dbl#sbl.Nblbl#sblaYaYaYaYaY#DaYaY#Dbl#DaYblaY#MaY#Dbl#Da9a9",
+"a9a9afa9#L#L#La2#ga2#La2#ga2a2#ga2#ga2a2#ga2a2bp#L.j#L#L.7#sbj#saY#Iaq.y.waXaraS#vb#a0#UaYaYawaYaYaYbn#x#U.Cbn.Caqaqavaqavaqaqaq#Ia0ao.5#vana7bh.Ga6al#aarbkaz#uaOamam.Cao#x#IaY#I#x#I#x#I#x#xawbn#xaw#D#D#D.sbfaY.N.saY.saY#D#D.Naw.N#saY.s.Cava0am.C#IaYaY#D#M.N#x.bbnaCa0a0#x#s#D#s#D#Da9#Da9blblbl#Mblblbl#MaYawblaYaYawaY.saYaYaYaYblblblbl#s#D#D#D#D#s#D#Daja9af.nafa9.na9.na9a9.na9#Lajaf.7af.7#L.n#L.E#Laf#L#Laf#La9a9.7a9a9a9a9#D#D#M#Dbl#Dblaw#DaYawaYaY#saYbl.Naw#DaYawblaYblbla9a9af",
+"afa9.7a9#L#L#L#L#La2#g#La2bpa2bpa2#L#g#L#g#L#ga2#Lbp#Laj.7bj.s#D.Waoao.waX#aazaSaFa0#xaYaYaYaYaYaYaY#xa0a0.Caoa0.8.8.5ao.5amaoamaCaoam#v#ubh.G#eayaTay.Gaza7aBa#aoaC.CaC.CaYaY#Mbf#x#xaY#xawaYaY.NaYaw#D#s.N#xaNaw.Nbl.Nbl.N.N#s#x.NaY#D.NaY#xaqa0aoa0#x.NaY#MaY#x#xbnbn.Vamaoam#D#D#D#s#D#sbja9.N#M.Nbl.N#M.NblblaY.RawaYaYaYaYblawblaYawaYawaY#D#s#D#M#D#D#D#Daf#L#La9a9.naf#La9af.n#L.nafafa9aj.7aj.7#L.7#L.Eafaj#Laf#La9a9a9aja9a9.na9bl#D#D#DblblaYaYaYaYaYaY#DaY#DaYblbl#DaYaYbl#sbl#Da9a9",
+".7a9a9.7a9a9.7a9#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#L#Lafa9a9#D#sbl.s.Waoan.G#Ea7aBaZ#vaFama0aCamamamb#.Va0aC.VaO.0#uaSaSazazan.Gak#a.Iay.Iar.Xar.Gazaz#uaB.yaO.5aoa0#Iaw.NaY.saY.N.N#D#s#D.N.N.N.N.s.NaY.NaY.NaY.saYa9bl#sbl#sbl.nbl#D#s#DawaY.saYawaY#x#U.CaC#xbf.N.s#I#x#Ia0aoamambf#I.N#D#DaYaY#Dbl#D#Dbl#D#Dbl#D#M#Dbl#Daw#D#M#DaYaYawaYblblaY#D.na9a9.na9.najaf.nafajaj#L#L#Laj#L.E#L.n#L.E#Lajaf#Laja9aja9.7a9#Lafafaj#L#Lajafa9a9a9bja9#D#D#sblaY#MaYaYaYaYaYaYaYawaYaYaY#xaY#UaYaYbl#Dafa9#L",
+"a9bja9a9.7a9a9.7#L#L#L#L#L#L#L#L.E#L#L#L#L#L#L.7aj#L#sa9#saY.saYbo.5.w.GazaB#San.l#vbgama0#xama0ama0a0bgaFbmanazak#aar#eazaz#aa6.e.e.XaraSazbhan#S#v#vaFaoa0aC.Cawaw.Naw.Naw.Naw#Da9#s#D.s.N.s.N.NaY.s.Naw.NaY.Nbl#saYblbl#Dbl#D#D#DaY#D.NaY.N#x#Ibna0a0a0.C#I#x#x#I#xaCamaFaOamaYaYaYaY.N.Nawbl#s#Dbl#D#sbl#D#Dbl#Daw#Dbl#Dbl#D#Mblblblaw#Dawbl.na9.na9.na9a9.naf.n#L.7aj#Laj#Laja9aj.7aja9aj.7#L.Eaf.7#L.7af.7afaj#L#Laf#Laf#La9.7a9a9b.a9#D#DaYblaYaYblaYaYaw.RaYbnaY#U#xbnbna0aYaYaYbl#Da9a9",
+"a9a9a9a9a9a9a9a9#L#L#L#L#L#Laf#Laf#Laf#L#Laf#Lafa9a9a9#D#D.Naw.N#x.8.w#e.lbma#az#uaZaFa0aC#x#x#x#x.WamamaF.y#ealayaG.G#eanaS#e#a.I#a.X.JanaZ#Sa#aOambga0.W#x#x.saY#saY.NaY.NaY.N#D#D#DaY.NaYaY#xawaYaYaYaYaY.saY#Dbl.N#M.Nawbl#D#M#D#MaYawaY#x#xbnaCam.8.5amamaCa0a0aob#aOaObm#v#x#I#x#xaY.N.NaY#Dbl#Dbl#D#Dbl#D#Dbl#Dbl#Dbl.sbl.N#Daw.NblaYblaYa9.n#p#sbl#Ma9bl.na9.na9.7.E.7.7.na9.na9a9.Ea9.n.7aja9.na9.Ea9.7af.7af#Laf#L#Lafa9a9a9#Da9#D#D#DblaYblaYawaYaY.R#xawaYaYaYbn.Cbn#xaYaYaY#D#D#D#D",
+"a9a9a9a9a9.7a9a9a9a9a9#Laf#L#L#La9.7.na9a9a9a9a9a9a9#s#D#s#D.Nbl#I#v.G.G#uaF#van#uaZ.8a0bnbnawbnavam.5#van#ealbra6#a#e.wana7#e#e.fakaz.TaBa#a#aFa0aoa0.Wbn.s#M.N#saY.sbl.saY.saY#s.Naw.Naw.N#I.N#x#I#x#x#IaYaY#IaYawaYawaYaY#xawaYaYaY.NaY#x#x#Iamb#aFa#a#aOamamamaob#b#aF#Sbmbmaoa0#x#xawbl#D#D#Dbl#D#sbl#Dbl#sbl#D#D#sbl#D#D#D#Mbl#DawblaY#saY#Mbl#Dbl#M#D#M#M#Da9#sa9.n#D#D#sa9.Ea9b..na9.7a9.na9.n.7.7a9.7a9aj#Lafaj#Lafaj#La9.Ea9.7#D.E#D#DblaY#MaYaYaYaYaYaY.R#x.R#xbn#U#xbnbnaYaYbl#Dbl#D",
+"a9a9a9a9afa9afa9af.nafaf#Lafa9a9afa9a9a9a9.na9.n#D#D#D#D#D#Daw.N#I.y.GazaZb#aOa#anaBa#aoa0aCbna0a0.5.8an.G.2.K#P#q#e.6anan.wazakazbha7aZaFam.8am#xaC.C#I#IaY#D#saY#saY.NaY.NaY.NblaYblaYaY#I#x#x#x#x#I#x#x#x#xaYaYbn#xbn#U#x.baY#x.s#x#x#I.Ca0.CbgaF#vbma#a#aOambgamb#aoaFaFaOaF#va0#x#I#x.Na9#D#s#Dbl#D#Dbl#D#Dbl#Dbl#D#Dbl#Dbl#DaYblaY#Dawbl#DaYaY#MaYawaYawaY.nbl#p#sa9#sa9#D#s#D#Da9#D.n#D.na9.na9a9.n#Da9#D#Lajaf#Laf#Laf#La9a9a9#Da9#Da9#DaYblaYaYblaYawbnawaYaYaYaYbn.Cbna0.Cbn#xaYaY#Da9",
+"#pa9a9a9a9a9a9a9a9a9a9a9a9a9a9.na9a9a9a9a9a9#Da9#D#s#D#s#DaY.NaYaCaZ.6az.0aOaF#van#uan#vamamamamaOa#analba.g#P#P#a#Tan.y#uaZaza7an.laZa#bgama0.C#U.C#U#I.N#s#s#D#s.Naw.N#M.NaY.saYaw.Naw#x#x#x#U#x.baYbnaw#xawaY#Ubn#U#x#Ubn#xbn#xbn#Ia0a0a0aCa0b#.t.tbma#aFaFb#amamamam.Vb#b#.V#Sbga0#x#xbl#D#Dbl#Dbl#Dbl#s#Dbl#D#M#D#Dbl#sbl#Dblaw#DawblaY#DaYawaYaYaY#Ibn#Ibn#Mbl#s#D#D#Db.#D#sa9#s#s#s#D#s#D.n#D.na9#D#D#s#Dafafaf#L#Laf#L#La9a9.7.nbja9bj#DblawblaYaYaYaYaYaYaY#x.R#x#xbnbnbnawaYaYbl#Da9a9",
+"a9a9#pa9#pa9#pa9a9a9a9a9a9a9#pa9a9.n#p.nbl.n#pa9#D#D#D#D#D.Nawbfbn#vazaS#SaF.8#vaZ.6aBa##va##v.0a7.faG#PaD#V.Kay.XazanaB.0#vbm#SbmaZ#vamama0aC#xa0.W#x#x#I.N#D#s.N#M.NaY.NaY.saYaYaYaYaYawbn#x#x#x#xbn#Ibn#x#x#xbn#xa0bna0bnaCbn#xa0#x#xbn.Ca0am.V.Vb#aOaFb#bgamaC.C.CaCa0a0aCa0a#aFbgbnaY.N#D.7#D#M#D#Dbl#Dbl#D#D#Dbl#D#Dbl#D#D#M.NblaY#DawblaYaY#Ibn#Ibn#Ubn#IaYawaYawaYawaY.s#D#s#Da9#sa9#s#D#sa9#Dbl#s#D#D#Daj#L#Lafaj#Lafaja9a9a9#Da9#D#Da9blaYblaYawaY.R#xaY#M.RaYawbna0#IaYbl#Da9a9afafa2",
+"#pafa9afa9a9a9a9#pa9#pa9afa9a9a9#p#p#D#pbl#p.na9#D#D#D#DaY.NaY#Ia0#v.Gaz.0#vaF#vanaz.w#u.0#u.waP#A.f.Xa6.Ia6akaSanaZa#aFaoaFaOaF#SaFaFama0aC#x#x.Wa0.W#Ibf.N#sbj#M.N.saY#s.NaY.NaYaYaw#xaY#x#I#x.R#x#x#x#xaYbnaY.Cbnbn#xbn#x#xbn#x#I#xbn#xa0.Ca0.pb#b#aFb#aFb#.V.C.C#x.CaCa0#xa0.FaFaOa0aYbl#D#sbl#D#Dbl#Dbl#s#Dbl#D#M#Dbl#D#M.Nbl#DaYblawaY.saY#UaYbn#x#U#x#Ubnaw.Rawblaw.NawaY#s#s#s#s#D#s#D#sbl#Mbl.n#Dblbl#Dafaj#Laf#Laf#L#La9.7a9.7#s.7#DbjblaYblaYaYaYaYaYblaY#xaY#x#xbnaYbla9#p#p.naf#La2",
+"#L#La9a9a9afa9af.j#L#La2af#La9a9#sa9#s#D#DaYaYblawaYaY#I#xbn.Ca0#Ubg.laz#uaBanaBa6#a.Xa6#aak#ebh#Sbm.Fa#aFb#amaoa0aCa0aoa0amb#.8b#aoa0aCa0#xaC#x#I#xaY.N#M#D#D#s#D#sa9.7a9.7.n.7#D#D#D#s#DaYaYaY#sbl#Mbl#Dbl#D#Dawbl.Naw.NaYaYawaYaYaYaw#DaYbl#DaY.RaYaYbnbna0a0#Ubnbn#x#x#x#I#xa0bgaBb#a0.s.s#L.NaY.N.saY.N.NaYbl.NblaY#I#x#x#x#Mbl#MaYaY#x.b#x#xbn.Wambgamamam#Ua0bnaCa0a0amaoaw#x#x#x#I#Iaw#Mblbl#sblbl#D#D#Da9#pa9a9a9a9#Laf.na9a9a9a9#paf#pa9a9#MaYaY#x#xbnaw.RaYbna0a0a0aY#D#pa9a9#La9#L#L",
+"#L.7#Laf.7a9.7a9#Laf#Laf#La9.7#Da9a9blbl.Nbl#DaY#xaYaY#xaCa0amam.t#uazar#e#T#a#zacbaayaraS#uaZa#aFaFaFb#amaoama0a0a0aCa0a0ama0amaoa0a0a0aC#xaC#xbn#I.saY.s#D#sa9a9#sa9a9.Ea9.7a9#D#s#DaY#D#D#s.Nbl#D#D#D#D#Dbl#DaY#DaY#Dblbl#DaY#D#Dbl#DaYbl.NaY.baYaYaYa0#Ia0a0#x#UaY#x#U#x#xaYbnam.FaOa0#x.s.7aY.saY.NaY.NaY.sblawaY.N#x#Ibn#xaYawaY#xawbnaY#U#x#IaCa0aCbg.paobn#U#Ua0aCaCaCb#aCaC.C.Wa0.C.baYawawaYblaw#D.s.Nbla9#p.nafa9ajafa9#pa9#pafa9a9a9#pa9blaYaY.b#xaYaYawa0#xa0a0#UaYbla9a9a9a9#L.7#L",
+"#Laf#La9.7af.7af#L#Laja9.7a9a9bj#D#D#D#MaY.NaYaY#MaY#Ua0amam.5.5aSal#PabbrayaTaTaGara7aZaZaZbm#vb#amamaCa0#x.C#x#I#x#x.CaC.CaC.5b#aob#aCamaC#xbn#I#xaY.s#D#sa9#s#Da9.Ea9.7a9.Ea9#D#D#D#D#s#D#D#D#Dbl#D#M#Dbl#sbl#DaYblaY.saY#DaY#MaY.Nbl.sbl#D#DaYaY.baYaYbn.CbnbnaYaYbn#x#x#x#xaYbnam#Sama0.N#s.NaY.Naw.Naw.NaY.NblaYaw#x#x#x#IaYaYawbl#x#I#xa0#Ia0aC.pbgb#bgb#.pa0.V.pb#.Vb#bgbm.taOaFaFao#U#x.bbn#IaYaYaY.NaYbl#Dbl#Da9a9a9a9a9a9a9a9a9a9.na9a9a9bl#DblaY#x#xaY.R#xaCama0#x#xbl#s#Daf.7af.7#L",
+"#L#L.7a9.7a9a9.7af#La9a9a9#D#D#D#D#MaYaY.N#x#I#x#xaY#x#xamaO.0bbaT#PaD#VaTaRar#eaBaZbmaFaFamb#ama0aCama0.C.C#x#I#xaY#I#x#x.W.CaCaOaFaob#aoamaC.C#I.b.NaY#s#Da9.7.n.7a9.7.n.7a9.7#D#D#D#D#D#D#D#D#D#M#D#Dbl#D#Dbl#D#D#sbl#Dbl#D#D#D#D#Dbl#D#Dbl#DaYaYaYbn#x#x#x#IaYbnaY#IaY#xaY#IaYbna0aBbmao#x.NaY.saY.NaY.NaY.saYaw.NaY#x#I#x#xaw#x.N#I.C.CavaCaFaOa#aBa##vbm#Sbm.taFbmbmaZaBbh#kbhbhaZ#Sa#b#a0aCa0a0#U#xaYaw.Nbl#Mbl.n#D.n.7a9a9.na9a9#sa9#Da9a9a9.n#D#D#xaY#xawaYbnama0ambnaYblbl#Da9#Da9#L.7",
+"a9a9a9afa9#La9a9.na9a9bj.n#D#D#saY.NaY#x#x#x#x#x#Ubnambga#.0#u#uaH#4#aazanaBaZbm#SaFaOb#bgamamama0.C.C.W.C#Ibf#xbf#I#x#x.C.Cao.8a#aOaOamaoa0.Wa0aY#xaw.N#D#s.7a9.7.n.7a9.7#L.7aj#D#D#s#D#D#D#s#D#D#Dbl#D#Dbl#D#Dbl#D#D#Dbl#D#Dbl#D#Dbl#D#D#D#DblaY.NaYawaY#xbn#xaYaYaYbn#x#x#x#x#U#xamaBaBaBa0.Caw#xaY#IaY#xaY#x#x#x#Ibn#xa0.Wa0.CaoamamaCamao.5azaz.G.Gar#e.G#a#eaz#ear#e#a.X#a#jaGak.faSaZ#vb#ambga0a0a0#I#x#xaw#xblaY#Da9#Da9#D#D#Da9#Da9#Da9.na9a9#D#DblaY#x.Rbna0.Cama0#x#xbl#Dbla9#D.7.7a9",
+"a9.7a9.7a9.na9.7a9.7#s#D#D#D#D.N#x#x#x#I#x#x.Ca0amaOa#.yanaBan#u.6aBa#amb#a0b#amamb#amamamaoa0aoa0aCambn.C.C#x#Ia0.C.CaCamao.5aO#vaFaOb#aoa0a0.WaYaw.NaY#s#D.7.n.7a9.7.n.7a9.7a9#D#D#D#D#D#D#D#Dbl#D#Dbl#D#Dbl#D#D#Dbl#D#D#D#D#Dbl#D#D#D#Dbl#D#D#sbl#D.NaYaYaY#xaYaYaY#xaYaYaY#xaYa0a0bmaz#uaOam.C.W.C.C.C.C.W#x.W#xamamamaoam.5aoaF#v.y.0#uaB.wal.2ayal.2aya6aTa6alaR.2ayayaT#P#t.K.e.X.GaSaZaBaFb#amaoa0a0bna0aYaYawblbl#sa9bj.n.7#D.7a9bja9#Dafa9afa9bl.Naw.N#U.CaCaFaoamama0aYaY#D#D#Da9#L.7",
+"a9a9.na9.7a9a9a9a9#D#D.N#s#DaY.saY#x.C.Ca0aoamao.0aZaBaZaB.0aBa#amb#a0aCaC.pa0a0aob#ama0am.C.Ca0.5b#amaCam.W.C.CaCa0ao.5amaOaF#vaF.8amamama0aqa0aYaw.Naw#D#Da9.7.n.7a9.7.7af.E#L#Da9#Da9#Da9#Da9#Da9#Da9#Da9#Da9a9a9afa9afa9afa9a9a9a9a9a9a9a9a9bl#D#Dbl.N.NaYaYaY.RawbnaY#x#I#xawa0b##Sazbha##vamaqao.Cavamao.5ao.5.8.8aF#v.0.yaZaB.waza7az.G.G#aararar.X#a.Xar#eazazaralalalayayaya6.Ial.XaSaS#va#aFaO.5aC.CaC#xbnaY.N#M#D#D#D.7a9.7.Ea9.7.7.Eaf#La9#D#D.N.NaYbnbnamamb#aoama0aYawblaY#D#D#D.7",
+".7a9.7a9a9a9.Ea9bja9#s.NaYaw.NaYa0.Wa0aCamamao.5a7az.waZa#aFaFaFamamaC#xbn#xam.5amamamaoama0aoa0aOaFaoambgamaCam.8aFaOaFaOaFaF#vaFaFaOb#aoamaCamawaY.Naw#D#D.Ea9.7a9.7.n.7.7a9.7#D#D#D#D#D#D#D#D#D#Dbl#D#Mbl#D#Ma9a9a9a9a9a9a9a9.na9a9.na9a9.na9#D#D#D#DblaY.saYaYaYaY#xaY#xaY#xaYbnaObmazaZ#Sa#.8.8.8.5am.8.5.8a##va#.ybbbb.w#uazarar#a#eazaSaz#ua7aZaZaZaZ.Tbm#SbmbmaZan#uaSaz#aalaR.2.IaGaraSaZaBa#aFaoama0aC.R#IawaYbl#D#D#Da9.7.7a9.7.7a9.7af#L.na9#D#s.N.NaYaCamaoaFamama0aYaYaY#D#D#Dbj#D",
+".N.N.N.N#D#D#D#DawaY.Nbf#xaqaqavamamaF#v.0#u.w#e#va#b#.5amamamaF#I#x#x#x#Ia0#x#x#x#I#x#xa0ao.5amamaoaFa#a#aBaZaZ.TaBaZ#SaFaFaF.5ao.5aoam.C.W#x#xaYaY.saY.N#s#D#Dajafaja9a9a9.7a9#Da9bja9#D.7#Da9#Dbl#Dbl#D#Dbl#D#Da9.7a9.7a9a9bja9#Da9#D#D#Dbl.Nbl#Dbl#D#D#Dbl.NaYaYaYaYaYawaYaY.Nbfa0b#bmaBana#bma#bm#u.6#T.oaR.Gararal#aalalal#Taraz.6#uan.0.0b#.8b#aob#aoambgamam.8aoamaO.8aFaBbhaz.Gar.X.X#abhazan.TaZbmbma#aCa0#xaYbfaY#s#D.s.N#D#D#sa9.7.7#s.7.7.7a9a9#D.7#DaYam.5aOa#amambf.N.N#s#D.NaYbf",
+"aYaYaY.saY#s#D#D#D.s#x.Wao.8aq.5.yaB#uanaBan#uanaFaOamaob#aoamaobn#x#U.Ca0.C.C.Wbna0a0aoaF.5#va#.ya#.yaBaZaBbh#u#SaBaZaOa#.8aFbg.5aoamaobn.Cbn#x.sbl.NaY#D#Da9#Daf#L#La9.7a9a9.7#D#D#D#D#D#D#D#Dbl#Dbl#DaY#DaY#D#Da9a9.7a9#D.7a9a9a9a9#Dbl#D#D#D#D#D#D#D#D#D#D#DaYaYaYaYaYaYaYaY.N#x#xbgaFaZ#ua#bgaF#vanaz#ealalazazaz.Garaz#q#ebhananaZaZa#a#a#aCama0a0aoa0ama0aqaoamamaFaoam.8a##SaZ#uana7aSbhaBaZaZbmaOaFaOaFb#ambnbn#IaY.NaY#D#D#D#D.7.7b..7#D#Da9.7#s#D.n#D#MaY#Iama#aFaoa0#x.saY#D#Dbl.N#x",
+".Nbo.N.N#xbf#xbf#x#Ia0a0aOa#aBaz.GaP.wan.ya#a#a#aCamambgama0a0a0.Wa0.C#xa0a0a0amamaoaFama#a#.0#vaSazbh#uanaBanaZa#aOaFaO.5aOaqamaoama0.C.C#Ibn#IaYaYaw#D#s#D.E.7#Laf#La9a9.7a9a9.7a9.7a9.7a9.7a9#D#D#D#D#Dbl#D#Da9.7#Da9.7a9.7#Da9.na9a9#D#Dbl#Dbl#Dbl#Dbl#D#D#p#D#D#D#D#D#D#D#D.N#DaYa0b##SaBaZamamaF#v.0#u.6.wan#u#uaSananaZaBa##vaFaFaoamamama0a0aCa0bna0#xaCa0a0.Cao.CaoamaoaF.5aOaFaFa#aFaFaF.5aoamaFamaFaob#bga0aobnbn#x#x#M#Dbl#s#Da9.7a9.s#D#D#D.N#DaY.N#Daw#xa0aoaF.5b##IaYaY#DawaYaw#x",
+".N.N#Ibf#x.W.C.W.5#v.yaZ.G#z.Kba.o#e.w.0a#a##va#amamaOaFaOaFbgamama0amaoam.8.5.5a#aFaFa#aBan#ubh#a.Xar.Gbh#uaZaBaO.5aoamamaC.C.Wa0a0.W.C#I#x#x#xaY#saY#D#D.7af.7af#L#La9a9.7#D.7#Da9.7a9.7a9bja9a9a9a9a9a9a9a9afa9.7a9.7#L.7a9afa9a9a9a9a9#Da9#D#Dbl#D#D#D#p#D#D#D#D#Dbl#Dbl#Dbl.s.NaY#xa0a#aB.0amamamaFa#a#a#a#aBaZaZaZ#va#.0a#b#b#bgamambn.Cbn.Wa0.C.C.C.Wa0.C.C.C.Wa0.Ca0.Ca0aoamama0a0bn#Ubn.Wa0.Ca0.W.C#U#xb#.Vb#b#a0ama0a0aYaY#D#D#D#s#D#saYaY.s.NaYaw.NawaYaY#Ia0amamaOam.C#x#xaYaw#x#x.C",
+".C.W.Caqaq.5.5.5anaP.o.Ya8#obs.g#TaS.wan.0#va##v.0bm.0a#.0a#a#.yamaoaFamaOa#aOa##va##S.0aZ#uaSaz#aaG#a.Gaz#uan#u#vaOam.8aCaq.W.C.C.Wa0#x#x#x#IaYawbl#D#sa9a9#L#Lajaf#L.na9a9.7a9.7a9#D.7#Da9.7a9a9a9af.7afa9.7a9.7af#L#Laf#La9.7afafa9.na9a9bl#Da9.na9a9a9a9a9afa9.na9a9.7a9a9a9.N#D.N#M#xaOaZaBamaOam.8am.8a#.5a##va#aoaFaFamamaoa0a0bnaC#x#x#x#x#I#xaY#xaY#xaY#I#x#x#x#I#x#I#xa0bn#I#xawbl.Nbl.Naw.NaY.NaY#xaYaCa0ao.Vbgb#b#b#awbnaYaYblblaYbl.NawblaY.NaYaYaYawaY#x#Ia0bga#aOamaC.C#xa0.Wa0am",
+"aoaFa#aOa##v.y.ya4.2#4.4a8aDaTaRanananaZaBaFaFaF#v.0#v.0#v.0#v.0amb#aob#amam.5aFamaOaFa##v.0.yaZaz.wanazaz.w.w.waO#vao.5aoamaCam.Wa0#x#xaw#xaYaY#D#M#Da9a9.E#L#L#L#Laf.7a9.7#Da9.7a9#L#L#L#L.7#L#L#L#L#L#L#L#La2#La2#L#L#L#L#L#Lafajafafa9a9a9afa9a9a9a9a9afa9a9a9.7a9.7a9a9.7a9.N#D#D#DaYam#SaZaF.5aFamamamamaoaFamamb#amamaoa0a0bnaC#x#x#xaY#IaYaYaYaYaYaYaYaY#xaY#IaYaYaYaYaY.s#xaY#D#D#D.7.n#D#D#D#M#D.N.saY#xa0a0amamambgambnbn#UaY#x#xaY.saY#x.NaYaw#x#I#x#x#I#xa0a0aF#vaZ.5a#amaCa0am#v.5",
+"an#uan#uan#ua7#uaz#a.Gaz.GaSaZaZ#vbybca#.5aoamb#.5b#amb#amb#amb#aCama0amamaob#amaCa0a0aoaFaFa#byaOby#v.yaZaB#u#ua##v#S#v.5ao.5aoa0#I#xaY#x#IaYaw#Dbla9#s#L#L#La9#Laf#La9#La9.7a9#L#L.7af.7af#Laf#L#L#L#L#L#L#L#Laf#Lafa2af#L.3#Lafafafafa9afa9a9#Laf#Laf#L#Laf#L#L#L#L#L#L#L#L#L.s#D#s.7#DaCa##ua#.0.5.5amama0a0amaoamaCamaCa0#xbn#x#x#x#xawbfaY.N.N.N.s.N.N.s.Nbl.Nbl.NaY.NaY.Nbl#D#D#s.7.7#D.7a9.n#p#Dbl#DblaY#x#x#xbnbnama0am.Vama0b#aCa0#x#xbn#I#x#x#xbnbn#x.Ca0a0aCam#van.wan#vbyaF#va#.yan",
+"alal.Ga7bhaZaZaZa##Sa#aFb#ao.5.8aFaFamama0amamaobn#Ubn#Ua0#Ibn#Ua0a0a0aCa0amamao#x#xaCa0aoamao.5avam.8.8#v.yaB#u#SaBaB#u#S#vaO.8amaCbn#x#I#xawaYbl#sa9a9#La9.7ajafaj#La9#L.7#Da9.7#Laf#L#L#L#L.7a2#ga2a2a2a2a2a2#La2#L#La2#L#L#La2af#Laf.na9a9a9af#Laf#La9af.7af#L#L#L#L#Laj#L#L#D#D.7#s#D.CaBbhbb.y.0aOama0aoa0ama0ama0bnbn#xaYaCbnbn#x#xaYaY.Naw.NaY.NaY.NaY.NaY#DaY#M#Dbl#M#D#Da9.7a9#Dbjb..7afa9.na9bl#DaY.N#Ibf.W#xaC.Ca0amamb#b#a0ama0ama0#xbn#x#U#x#U.C#UamaCama0ao.0.w.6.wan.yan.yan.waP",
+"#q.6a#aF.5aCa0a0bnbna0aCa0amb#am#U.Vbnbn#xa0.C#x#x.NaY.NaY.N.N.N#D#s.NaY.NawaY.N#M.s.N#x.C.Wamaq#UaCaCb#bgaOa##vbg#v#v#u.w#uaZ.yaO.5aoama0.RaYaw#D#D.7.n#Laj#L#L#L#La2#La2#La2#g#Laf#L#L#L#La2#La2#L#La2#La2#L#La2af#L.3#Laf#Lafajaf#La2#La2#La2#L#L#Laf#La2#L#L#L#La2#L#Laf#L#La2#La9#D#x#xaoaO.Xbha#ama0#x#x.CaC.Ca0aC.C#x#IbnaYaYawaYaYaYaYaY.N#D#D#D#D#D#D#D#D#D#D#D#D#D#D#D.7.E.7.7.7af.7.7aj#L#L.7.E.N.N.NaY.N.N.N.NaY.NaYbl#IaYbna0aoaFaOamaoamamamaFaF.5b#aOa#a#aZ#u#a.2.waP.w.w.waZan#u",
+".GanaB.5a0a0#xaCbn#Ibna0a0a0amam.Va0bnbn#x#x#I.C.NaY.Naw.N#s#D#D#D#D#s#D#D#D#saY#D#DaY.saY#x.W.Cbn#Ua0aCaoamaOaFaob##v#uaB.y#vaOa#aO.5bga0#U#x.R#D#D.n.7.7#Lbp#L#La2#L#g#L#g#La2#L#L#Lafa2a2#La2#L#La2#La2#La2#Lafa2#L#La2#La2#Laf#L#Laf#Laf#L#L#Laf#L#La2#La2#La2af#Lafa2#L.3#L.j#La9#DaY#xa0#v#aa7a#b#a0bn#x.C#x#x#x#x#xbn#x#x#IaYaYaYaYaYawaY#D#D#D#D#D#D#D#D#Da9#D#D#Dbj#Da9a9#La9af.E.7a9#Laf#Laf.7a9#D.N.N.saY.Nbl#DaY#D.NaYaYaY#xa0b#.5aFbga#aFaFbma#.ybm#vaZ#SaBan.G#q.2.w#u.6#uan.y.0.0",
+".6#u.0b#a0#x#xa0bnbn#x#xbn#Ibn#x.RawaY#x#I#x#xbfaYaw.N#D#D.7.7.7a9#D#Da9#Da9#D#Da9a9#D#D.N.N#x#x#I#x#Ia0ao.8am.8aCa0bg#v#vaOb#aoaFaOaFama0a0#Ubn#s#D#Da9.E#L#Lajbpa2#ga2a2aja2#gafa2#La2#La2#La2#Laf#La2#L#Laf#La2#Laf#Laf#Laf#L#Laf#L#Laf#La2afa2#La2af#La2#L.3#La2a2#L#L#L#L#La2#La9#s.N#xa0bg.Xana#aFamam.C#xbn#xbn#x#x#x#xbnaYaYaYawaYaYaYaY#Da9#Da9#Da9#Da9.7#D.7a9.7a9a9.7.7.7.7.7a9#L.7.n#L#Laja9a9#D.saY#D.N#D#D#D#D.saY#DaYaYa0a0amb#aFbm#SbmaBaB#ubha7aB#u#uazaz#Tal#q#uanaB.0a#.0a##u",
+"azaBa#aobn#x#x#x#x#x#Ibn#xaY#xaYaYaYaYaY.NaY.NaY#D#D#D#D#D.7a9.7#sa9a9bja9.7#D.Ea9bj.n#D#D.NaY.N#MaYaY#Ia0aoaoam#IaCa0ao.5ao.CaCbg.5b#aoa0aC#xa0aYaY#s.7a9#Lbp#La2bpa2#L#g#L#ga2#Laf#L#La2#La2#La2#La2#La2#La2#Lafa2#Laf#L#L#L.3aj#L#La2ajaf#L#La2#L#La2#La2#La2#La2#La2a2a2afa2#La2#L#DblaY#IamazaSaBaFama0#x.C#xaY#xaY#x#U#x#xaYaYaYaYaYaYaY#D#D#D#Dbj#D#Dbj#Da9a9a9.7a9a9bja9.7afa9aja9.7af.7#Lafa9a9#D#D#D#D#D#D#D#D#D#D#D.NaY#I#xbnaoamam.5a#bma#aZaZaZaZ#uaZanaz#q#TaR.o#q#uaB.0a#.0#uaZ#u",
+"an#vb#a0#x#x#xaYaYblaYaYaYaYaYaYaYaYaYblaY.N.N.sbl#D#Da9#D.7a9#L#D.7#sa9.7a9.7#Da9a9#Da9a9#s#D.Naw#Daw#xaCa0.C#x#U#xaCaoaCa0#Ibna0a0aoa0aCa0a0#UaY#M#D#Da9.7#L.7a2a2#ga2a2#ga2#g#La2#La2#La2#La2#La2#La2#Laf#L#Laf#Lafaj#Laf#L#Lafa2af#L#La2#Lafa2#Laf#La2#La2#La2#La2#L#La2#L#La2#Laj#Dbl.NaY#UaZ.TaBaFam.C.C#xaYaYaYaYaYaY#x#xawaYaYaYaYaY#Dbl#D.Ea9a9.7a9a9.7#D.7#Da9bja9.7a9a9.n.7a9a9a9.na9a9a9a9.na9a9a9#D#D#D#D#D.7#D#D#DaY#x#x#xbna0aCamaFaOa#bma#bmaBaZaZaB.6.Gal.o#e.GazanaBaZ#u#u#uan",
+"#vaFama0awbnaYaYaY.NaY#D#DaY#D#M#Dbl#s#D#D#s#D#D#Dbl#D.n#Daf.E.7a9a9.7a9a9a9a9a9.7a9.7a9.7a9a9a9#D.n#D.N#x#I#I.W.C#I.Caoam#U#xaw#Ia0#I#x#x#I#x#IaYaY#Dblbja9a9#L#La2bpa2bpa2#La2#Laf#Laf#La2#La2af#L#La2#La2afa2#Laf#L#Lafaj#Laf#L#L#La2#Laf#La2#L#La2#La2#La2#L#La2#La2#L#La2#L#L#Lafa9#sblaY#xb#bm#SaFambn#xaYaYaYaYaYaYaYaYaYaYaYaYawaYaY#Dbl.7a9bja9.7a9bja9#L#L#La9.7a9a9.7a9.7a9a9.7a9.7a9a9a9a9a9a9a9a9a9#D#Da9#D#Da9#Da9.N.NaYaY#x#x#xaYa0ama0am.5aF.5a##vaZan#TaR.Gazana7.wan#uaZan#uaZ",
+"b#a0#xaYaYaYaY#x#DaY#D#D#M#Da9a9#D#D#D#D#Da9#D#p#Da9#D.7a9.7#L#La9a9a9.7#L#L.7a9.na9a9.7af#L#L#L#La9.7#s.N#I#x#x.C.CaCa0.W.W#xawaYawaYawaY.NaYaYaYawaY#sbl.7#D.7#L.ja2#ga2#ga2#g#La2#La2#Laf#L#L#La2af#L#L#L#Laf#Lajaf#Laf#Laf#Lajafaf#Laf#L#La2#Laf#Lafa2#La2#La2#L#L#L.3#Laf#La2#L#La9a9#D#MaY.b#yaFbgam#x.N#saYaYaYaYaYaYaYaYaYaYaYaYaYaY#Dbla9.7#L#L.7#L#L#L.7af#La9#La9#La9afafafafa9a9a9a9a9.na9a9a9.n#pa9.n.7a9.7a9.7a9.7#D#D#D#s#DblaYblaY#x#xaCa0aCa0amaOaZ#u#q.G.6#uaBana7azaZaZaZaZa#",
+"a0a0a0aYblaYaY#xaYaY#Dbl#Da9a9af.7.7#Da9a9a9a9a9a9a9.n#Da9.7#L#L#La9.7af#L#Lafa9.7a9#L#Lajafa2aj#L.7.n#D.N#xbo#I#x.Waq.8aoa0#I.Nawbl#sbl#DaY#saYawaYaYbl#D#Da9a9#L#Lbpa2#L#g#La2#Laf#Laf#La2#L.3#Laf#L#Lafaf#Laf#Laf#L#Laf#L#Lafaf#L#Laf#Laf#Lafa2#La2#L#La2#Laf#L#L.3#L#L#L#L#L#L#L#L.na9a9blblbn#Hbga0#xaYaYa9blaYblaYblaYblaYaYawaYaYaYaYbl#Da9a9a9a9a9a9a9a9#L#L#L.7a9.7a9a9#La9a9a9a9af.nafa9#pa9#pa9#pa9a9#Da9#D.7#Da9bja9a9.7a9a9a9#D#Dbl#D#saYaY#x.Cbn.WaF#San.Ga4aZa#a#aZ#uanaZaBa#bma#",
+"bnaYaYawaYaY#M.N#D#D#D#D#D#D#Da9a9#D.nbja9.7a9.7a9.7.7a9#La9a9a9.7a9#L#L.7af.7a9#Laf#Lafa9.7a9a9#L.7#La9a9#DaY#Ua0#UaCa0#I#x#I#I.N#s#D#D#sa9#D#Da9#D#s#D#Daw#DaYajaf#L#L#Laf#L#La2a2a2#La2#La2#L#La2a2a2a2bpaj#Lajaf#Lajaf#Lajafaja9ajafajaf#L#Lafafafafa2#L#L#La2#L#L#L.3#L.3#L#La2#L#Lafa9.na9aYbnb#b#am.C.NaWa9bj#D#Dbj#D.N.NaYaY#DawaY#DaY#D#D.7a9.7a9.7a9a9#Laf#Laf#Laf#L#Lafafaf#La9#D#D#D#L#Lafajaf#Laf#L#L#L#L#L#L.7.7.7a9a9.7a9#D#D#D#DaYaY.N#x#Ia0.Ca0aF#vaF#vaOb#aob#aoaFaBaZ.0a#.5am",
+"#U#x.RaYaYaYbl#D#D#D#D#s#D#Da9#D#D.7#Da9.7a9bja9.7a9af.7a9a9.7a9af.7a9af#L#L#La9a2afaj#L#La9.7a9aj#L#La9.nblaYaY#Ia0aC.W#x#I.N.s#D#s#D.n#D#D#D#sa9a9a9#Dbl#D#D.Na9a9a9a9a9#La9#L#Laf#Laf#Laf#Laf#Laj#L.7aj#L#L.7afajafaf#Laf#Laf#Laf#L#Laf#L#Lafafafaf#Lafa2#L#L#L#La2af#L#L#L#La2a2af#L#La9bja9.Rawa0.8a0.C.Nbj#Da9a9#Da9#D#DaY#DaYbl.Nblaw#Dbl#D.7a9a9.7a9a9bjaf#Lajaf#L#Laf#Lafafafa9a9#Da9#D#Laf#Laf#L#L#Lafaj#L#L.7#L.7af.7#La9a9.7#D#D#D#D#D.NaY#x#x.C.CaoaFaFaOaOamamamamaCaF#v#v.0#vb#am",
+"bnbnawaYaYaY#Dbl.n#D#D#Da9bja9bj.n#D.7a9#D.7a9a9a9.7a9a9#La9a9a9#L#L#L#L#Laf#L#La2a2a2af#La9a9a9#L#Laf.7a9#D#IaY#UbnaC#xaY.N.saY.s#D#Db.#D.n#D.7a9a9#Da9#D#D#D#Da9bja9#Da9#Da9#Da9a9a9a9a9a9a9a9#Laf#L#Lafafajaf#La9#Lajaf#Lajaf.7#Laf#L#Lajaf#Lajafaf.3#L#L#L#Laf#Laf#La2a2#La2#La2#La2af.Ea9.naY#xaCamam#x.Nbj#s.7#D#D#D#Dbj#D#Dbl#Dbl.Nbl#Dbla9a9a9a9a9a9a9a9afafafafajafafajafaf.na9a9a9#D#D#Lajaf#L#Lafa2#L#Laf#L#L#La9.7a9a9.7a9a9#Da9#D#D#D#MaY#x#x.CaCa0aFaOaFamaFaCa0a0bnaCb#aOaFaOama0",
+"#IaYaYaYawaYaw#D#D#D#s#D#sa9#sa9.7a9a9a9.7a9#L.7#La9af.7a9a9.Ea9afaj#Laf#L#La2#La2a2a2#La2#La9#L#L#Laja9a9blaYaY#I#U#xaw.Naw#D#Da9#sa9#sa9.7a9.7ajaf.Ea9a9.7a9#D#D#D#D#Dbj#D#D#Da9#D#D#D#sbl#D#sa9a9a9a9a9#Da9#Dafajafaf.Eaf.7afajaf#Lajafaf#Lafafafajaf#Laf#L#L#Laf#L#L#Lafa2#La2a2af#L#La9a9a9aw#x.Vaoa0#x.Nbja9#D#D.7#D#D#D#Dbl#DaY#DblaYaY.Na9a9a9a9a9.7a9a9#La9afa9afa9af#pafa9#pa9a9a9.7a9#Laf#Laf#L#L#L#Laf#L#Laf.7a9#D.7a9.7a9.7#D#Dbj#Dbl.NaY#x#I.Ca0aqbgaFamaoambn.Cbn#U#xbna0aCama0a0",
+"aYaY#IaYbl.N.N#D#s#D#D#D#D#D#Da9a9a9.7a9a9a9a9#Laf#L#Laf#L#Laf#L#Lafa2a2a2a2a2a2a2a2a2a2a2#L#Lafa2#L#La9a9#DaY#Ubn#I#xaYaw#D#s.sa9bj.n#Da9.Ea9.7#L.7#L#L.7a9.7#L#Da9#Da9#Da9#Da9#Dbl#Dbl#D#Dbl#Dbl#s#D.na9#s#D#Ma9a9.n#Laf#Lajaf#Laf#Laf#L#Lafajafafafaf#Laf#L#L#La2#L.3#L#L#Lafa2a2#L#Lafa9.na9#Dawa0bga0#x.N#s#Da9#D#D#D#D#D#D.Nbl#DaYaYaYawaYa9.na9#La9afa9afa9a9a9a9a9a9a9a9a9#pa9a9a9a9a9a9#L#Lafaj#L.3#La2afafa2af#La9a9a9afa9.7a9#D#D#D#D#DaY.N#x#xa0a0aoaFbgama0a0a0aCa0aYaY.baYbnbnaC#x",
+"aYaYblbl#D#Da9.7a9a9a9a9.na9a9.7ajafaj#L#L#La2#L#L#L#L#Lafaj#Lafa2a2#L.j#La2#La2a2a2a2#La2af#L#L#L#L#L#La9#MaYaY#Ibn#MaY#D.s#D#s.7.na9.Ea9.7aj#La2aj#L#Laj#L#L.7.7a9.7.7a9.7a9.7#M#Dbl#MblblaYbl.sbl#Dbl#D#Dbl#Daf.Ea9af.Eafa9af#Lafaj#L#Laf#Lafafafafafaf#Laj#L#Laf#L#La2afa2#La2#L.3#L#L.7#Da9#DaYaCama0#Ibla9#Dbj#D#Da9#D#D.N#MaY#DblawaYaYaY#pa9a9a9#pa9a9a9afa9afa9#p.na9a9#Mbla9a9a9#La9.7afaj#Laf#L#Laf#Laf#Laf.7afa9afa9a9.7a9#D.7#D#D#D#Dblaw#x#x.WamamaOb#aOa0aC.Cbn.C#U.RaYaY.b#xbna0",
+"aYaY#D#D#D#s.7.7a9.7a9.7a9a9.7a9#Laf#Laf#Laf#Lafa2a2a2a2#La2a2aja2a2.3a2a2a2a2a2aaaaa2a2a2a2a2#La2#L#La9a9#DaY#I.RaYaw#D#M#D#s#D.n.7a9.n#L.7af#La2a2a2#La2#L#L#La9a9.7a9a9.7a9a9a9#pa9a9a9.n#pblaYaY#IaY#IaYaw#x.na9af#Laf#Laj#Laf#La9afajaf#L#Lafafafaj#Laf#L#Lafa2#L.3#L#L#L#La2a2#L#Laf.na9.n#D.NbnaCaobn#D#s#D.n#D#D#D.N.NaY#DaY#Dbl.NaYaYaw#D#pa9#p.n#pa9#pa9a9.n#pa9#pa9#pa9#D#pa9afafajaf#Laf#L#Laf#L#Laj.3af.3afafa9a9a9.7a9.7a9#D#D#D#D.NaY.N#xa0ama0aob#ama0a0a0bn#Ibna0#x.bbnaY#Uamam",
+"#MaY#s#D#D.7#La9#L.7.na9a9.7a9a9#L#L#L#La2#La2#La2a2a2aja2#La2afa2aja2#La2a2a2a2#gaaa2a2a2a2a2a2a2#L#La9a9blaYaYaY#MaY#M.N#D.n#D.na9.n.7#L.E#L#L.ja2a2a2#g#L#L#L#Lajaf#Lajaf#L#La9a9#pa9#pbla9.naYawaYaYaY.RaYaY.na9.na9aj.7af.n#Lafaj#Laf#Lajafafajafafaf#L#L#L#Laf#L#La2afa2af#L#La2af#L.7a9a9.7aw#xaCa0#IaYa9#D#D#D#D#D.NaY.saY#Dbl#DaYaYaYaY.na9#pa9a9#p.na9af#p#pa9a9a9#pa9#Dbl#Da9.na9#L#Laf#L#Lafajaf#Lafafafafafafafa9a9afa9a9bja9bj#D#D#D#DaY#x.Wa0av.5.pamaCa0#Ua0#x#xa0bnaYaw.R.Cb#am",
+"amam#xbla9a9a9a9a9a9.7a9.7afa2#Laf#Laf#La2#La2#La2a2a2a2a2a2a2a2#Laf#Laf#La2#L.3a2a2a2a2asa2#La2#gafa9blaYawaYaYawbn#IaYawaw#D#Da9.Ea9#Lafaf#L#L#L#La2a2a2a2a2a2a2a2#La2af#L#Lafajaf#L.na9bja9#D#p#pbl#M#x#Ia0bn#I.NaY#D#Da9a9.7af.Eafa9aja9#Lafa9a9a9a9#Lafa9afajafafafaf#Lafafa2.ja2afajaf#L.na2a9aY.Cbgam#x#Ma9.n#Lajafa9.N.N#pa9bl.N#MaYaYaY#p#pa9#pa9#pa9#p#pa9#p.n#p#p.n#pa9#pa9a9#paf#pa9a9.n#pafafafafafafafa9afa9afa9a9.na9a9a9a9a9#D#D.n#paYaYa0amb#amb#a0a0a0.Ca0#I#xaw#xaY#x#xaCa0aC",
+"ama0#xbla9.na9a9bja9#Da9a9ajaf#La2aj#Lafa2#La2#La2a2#La2#La2#La2af#Lafa2#Laf#L#La2a2a2asa2a2a2a2a2#La9blaYaYaYawaYaY#xawaY.N#s#Daja9#Lafajaf#Laf#L.j#La2#La2#La2#La2#La2#L#L#L#L#L#Laf.7a9#D.n#Da9.nblblaYaY#xaC#x#IaY.s#D#sa9.na9a9a9a9a9a9a9a9a9afa9afa9a9#La9afafaj#Lafaf#Lafa2#La2#Lafafaj#La2.naw.CamaC#xaY#D#D#La9a9#sbl.Na9#M#DblaYaYaY#xbla9#p#pa9#pa9#pa9#pa9#p#pa9#p#p#pa9.n#pa9a9a9af#pafa9afa9a9afa9#La9af.7afa9afafa9afa9a9.na9#Dbl#p#pblbn#U.5bg.5a0aoa0a0#Ua0#xbnaYaYaY#U#xbn#xa0",
+"amaCaYaYaw#Dbl#sa9#D.7a9.7af#L#Lafaf#L#La2#La2#La2a2a2a2a2a2a2a2#L#L#Lafaja2#L.3a2a2a2#La2a2a2a2#ga9#D#MaYaY#UaY#xaw#Ibl.Naw#D#Dafafaja9#L#Laf#La2#La2a2a2a2a2a2a2.jafa2#Laf#Laf#Laf#La9a9.7#Da9a9a9#sblawaY#x#x#IaY.NaY#D#D#D#D#sbl#s#D#sa9a9.na9.na9a9.nafa9afafafafafafafajafa2#L.3#L#Laja9#Daj#DaY.Ca0aoa0aY#D#Ma9.na9#D#DaYblblblaYaYaYaYaYbl#pa9#pa9#pa9#pa9#p#Ma9bl#p#D#pa9a9#pa9#pa9#pa9#pa9#pa9#paf#pa9afa9afa9afa9afa9a9a9a9a9a9a9#Da9bla9awaYa0a0ama0b#a0a0a0#x#U#x#xaw#xaw#xbn#I#xa0",
+"b#b#aCaYaYbl#Dblbja9#D.na9#Lajaf#L#L#Lafa2#La2#La2a2#La2#La2#La2afafaj#L#Laf#L#La2#La2a2a2a2#La2#La9blaYbnbn.R#IaY#U#xaYaw.N#D#s#L.Eaf#Lafaj#L#L#La2#La2#La2#La2afa2a2a2#L#L#L#Lafajaf.7.n#Da9b.afa9a9a9#DaY#I#x.NaY#saY#s#D#s#DaYaYaYblaY#DaY#Dbla9a9a9a9a9a9a9.na9a9.na9a9a9a9#La2aj#Lafa9a9a9af#Mawa0aCa0a0bn.NaYbl#D#M#DaY.NaYaYaYawaYaYawaYbl.na9#pa9#pa9#pblbla9#p#pa9#p.na9#pa9.n#pafa9af.naf#pajafafafafa9a9a9afa9af.7afaf.nafa9a9af#D#DblblaYaY#xaCa0.Ca0aobnaCbn#xawaYaY.RaYaYaY#xbn#x",
+"a0bnbnbnaYaYbl#D.n#D#sa9a9#Laf#L#L.3#L#L#La2#Lafa2a2a2a2a2a2a2a2#L#Lafaf#L#La2#L#La2#L#L#La2#L#Laf.nblaY.bbn#U#x#Ubn#Ibl.NaYa9.7a9afaja9#Lafaf#La2a2aja2a2a2a2a2a2a2a2a2af#Laf#L#L#L#La9a9.7#Da9#Laja9#D#D.NaYaY#s#D#D#DaY.NaY.saY.saY.NblaY#DaY#sbl#sbla9#Da9#Da9a9.na9a9afa9ajafaf#Lafa9a9#D#sa9blaY#Ua0aob#aC#xaYaw#D#DblaY#IaYawaYaYaYaYaYaYbl#pbla9#pa9#pa9bl#M#p#D#p#M#p#pa9#pa9#pa9a9#pa9#p#pa9#p#pafafaf.nafa9a9#La9afafa9afa9a9afa9#Da9bl.NaYawbn#x#x#x#Ubna0#xbnaY#xaYawaYaw#xawaY#x#U",
+"#Ubn#Uam#UaYaYbl#Da9bja9a9#L#Laf#L#Laf#Laf#La2#La2a2#La2#La2#La2af#L#L#L#Laf#La2af#L#La2#L#La2#Lafa9bl.Ra0.pa0bn#U#xawaY#M.N#s.7.na9#Lafaj#L#Lafa2a2a2a2#La2#La2a2a2a2a2#L#L#L#Laf#Laf.7a9#D.7#Dafaf#L.na9#Daw.N.n#D#D#s#Daw#DaYaYaYaYawaYaYawbla9bla9bla9.n#D#Ma9a9a9#Da9#sa9#p#Laf#La9.7.n#D#D#DaYawa0a0aob#amaCa0aYaYaY#DaY#xaYaYaYaYaYbl#Dbl#p#pa9#pa9#pa9#p#pbl#p#pa9#pa9bl#p.na9a9#pa9#pa9af#pafa9af.na9afa9a9aja9a9afa9#Laf.7afa9.7afbl#D#D#DaYaYaY#xaY#xa0bnbn#U.RawaY.baYaYblaY.R#IaYaY",
+".Rbnb#a0a0#xaYbl#s#D#sa9.Eaf#L#La2#Laj#La2a2#L#La2a2a2a2a2a2a2a2#La2afa2afa2#Laf.7af#La9a9#Lafa9a9a9.R.Ra0.V#UbnaYaYaY#D#D#D#D.7afajaf.Eafaf#L#La2#La2#La2a2a2a2a2a2#La2#L.3.7#Lafaj#La9a9.n#Da9#Laj.7a9.7#D.N.Na9.n#D#DaY.NaY.sbl#Mblbl#Dbl#Dbl#D#Dbl#s#Dbl#Dbla9#Da9.nbla9a9#Dajaf.na9#D#D#D#sblawaY#x#Ub#b#aO.5a0aCaYaYawaY#x#xaYaYaY.sblbl.na9#pa9#pa9#pa9#pblbla9#M#p#Dblbl.n#p#p.na9#p.n#p.na9#pa9#pa9af#pa9afa9a9af#Laf#Lafafa9afa9a9#Da9bl#D#M.NaY.Naw#x#UbnbnaYaYaY#xaYbl#MblaYaYaYaY#I",
+"#Fbn.Vaoa0bnaYblbja9#Da9a9#Lajaf#Laf#Laf#L#L.3#La2a2#La2#La2#La2af#L#L#L#Lafaj#La9#L#La9a9#L#Lafa9blaw.R#Ua0bnbn#IaYaw#D#s#Da9#s#La9#Laf#L#L#L#La2a2a2.j#L#La2#La2a2a2a2#L#Laf#L#Laf#Laf.7#D.7#s#L#L#La9.7#D.sbf.n#Da9#Daw#DaY.N#pbl#M#D#p.n#pa9#sbl#D#D#Dbl#D#D.na9#Dbl.n#Da9a9af#La9.7a9#s#DaYaY#x.baYbnaoamaFaFaoa0#IbnaYaY.R#x#xaYaYbl#Da9#pa9#pa9#pa9#pbla9#M#pa9#pa9#p#Mbl#pa9a9a9#pa9a9#pa9#paf.naf#pafafa9a9a9afa9af.7afa9#L#La9a9af#D#D#D#DaY#D#DaY.NaYbnbn#U#x.baYaYaw#paY#D#MaY#IaYaY",
+"blaw#xa0ambn#xaYawblbl#D#pa9afafa2a2a2a2a2a2#La2#L#La2#La2#La2#La2a2a2afa2#La9a9a9a9a9#D#D#D#D#D#pbl#paY.Rbn#I#x#pa9a9a9a9.7.7a9afajaf.n#Laf#L#L#L#L#La2a2a2#ga2a2bpa2#L#L#L#L.7af#Laf.7a9a9a9#Da9a9#sa9#D#D#D.Na9a9a9#sbl#D#Ma9bl#Dblbl#Dblblbla9a9a9afa9a9a9a9a9a9afa9a9a9a9.nafa9a9.na9a9#D.naY.RaYbna0a0b#aobgb#bg.Va0aCaY#D#Mbl#Mbl#Dblbl#Dbl#Dbl#Dbl#Dblbla9#pbla9#p#pa9#p#p#p#p#p#pa9#pa9#p#p#p#pa9a9afa9aja9afaf#Lafaf#La9afa9#Lafa9a9af#sa9#Dbl#DaYbl.N#UbnbnbnaYaY#IaYaY#MaY#xaYaYaYaY",
+"aYaYbn.Ca0a0#I#xaYaYblbl.naf#Lafaja2#La2#La2a2a2#La2#La2#La2#La2a2a2#L#L#L#L#L#Lafa9af#D#p#Dbl#D#F.nblblaYaYaYaYa9.n.7a9a9.7a9.7afafaf#L#L#L#L#La2#ga2#ga2bpa2#L#ga2a2#L#L#L#L#L#Laj#Laf.7a9bja9.7#D.7#D#D#D.Naw#D#M#D#p#D#p#D#Dbl#sbl#Dblbl#Dbla9.na9.naf#paja9afa9.na9a9afa9a9afajafa9a9a9blblaYawaY#Ua0aC.5am.V.Vb#ama0aYaY#xblaY#DaYbl#M#Dbl#Dbla9bla9bla9bl#D#p.n#pbla9bl#p#p.na9#p.na9#p.na9bl.na9afa9a9a9a9afa9#La9af.7afa9a9#Laf#Lafa9a9a9a9a9#D#DaY#saYbnbn#U#x#UaYaYaYaYaYaYawaYaYaY#x",
+"aY#xbna0a0a0a0bnaYaY#Mbla9a9a9af#L#Laf#L#L#L#Lafa2#La2#La2#La2a2#La2afa2af#L.7#La9a9#D#D#D#D#DaY#pblbl#MaYaYbl.Na9a9a9.7a9#L.Eaf.naf#Laf#L#L#L#La2a2bpa2#ga2#ga2a2#L#L#L#L.7a9a9a9a9afa9a9#D#D#sa9.nbl#DaYblaYaYbl#D#D#D#M#Dbl#sblbl#Dbl#sbl#D#Ma9a9a9a9a9a9a9a9a9a9a9a9.na9a9a9.n#pa9a9#D#sbl#saYaY.RaY#xa0a0aCa0#Ua0aCbnaYaYawbl#sbl#M#Dblbl#D#pa9a9a9a9a9a9a9#p#p#D#p.n#pa9.n#p#p#pbl#pa9a9#p#pa9#p#pa9a9afa9af#Lafaf#Lafaf#La9a9afa9af#La9afa9a9bl#D#p#DaY#DbnaCbnbnaYaY#IaYaYaw#xaYaYbn#I.R",
+".Raw#xa0aC.Ca0a0.baYaYblbla9a9af#Laf#L#La2afa2#L#La2#Lafa2#La2a2a2a2a2#L#L#Laf#L#D#p#Dbl#DblaYaY#pblblbl#Dbl#D#Dafa9af#L#La9#L.7afaf#Lajaf#L#L#L#L#ga2a2#La2bpa2#L#L#Laf#La9.7#Da9a9a9#D#Dbl#DaYblblaYaYaYawaYaY#xawaYaYaYaYaYaYaYaYaYaYaY.NblaYa9a9#pa9a9#pa9#p.n#Da9a9a9#Da9#D#pa9bl.na9blaYblblaYaY#IaYbnbna0#Ua0b#b#a0aYaYblblbl.Nblbl#Dbl#Da9a9afa9afa9afa9#Ma9#pa9#pbl#pbl#p#p#pa9#pa9#pa9a9bl#p.na9a9a9a9#La9af.7afa9#La9afa9a9af.7afafafa9a9a9#D#D#DblaYbnbn#Ibn#IaY.RawaYaYaYaYaYaY#x#x",
+"bnbnbnbna0a0a0amaYaYaYaY#D.na9a9afa9afa9#L#L#Laf#L#L#La2#La2#L#La2#L#Laf#L#L#Laf#D#Dbl#DblaYaYaYa9.nblbl#D#D#Dblafaf#L#L#L#L#L#L.naf#Laf#L#L#L#L#ga2bpa2#ga2a2#gaf.3af.7afa9a9.n#D#Dbl#sblbl.NaYaYaYaYawaY#x#xaYaYaYaYaYawaYawaYaYawaYawaYblaYblblbl#Dbl#M#Dblbl#Dbl#D#Dbl#s#Dbl.n#pa9blawblawaYaw.RaY.RaY#U#xbn#UbnaCaOama0aYbl#Dbl#Mbl.Nblbl#Da9.na9a9a9a9a9a9a9#pbl#pa9#pa9#p#p#p#M#p#p.n#pa9.n#pa9#pa9a9afa9#Lafa9afa9#Lafafa9afafa9af#La9#La9af#Dbl#Daw.NawbnbnbnbnaYaY#xaYbn.baY.RaY#xbnbn",
+"ama0bna0#Uambgb#aY.RawaYbl#Da9a9a9.7a9.7a9af.7#L#La2af#Laf#L#L#La2a2#La2#Laf#L.7#pblblaYaYblaYaYblblbl#Da9a9a9.7afajaf#L.3#L#L#L#Lafaf#L#L#L#L#L#L#ga2a2bpa2bpa2#La9#Lafa9af#D#D#Dbl#DaYaYaw#xaYaYawaYaY#xbnbnaYawaYaYaYaYbnaYaYaY.RaY.RaY.baYawbl#Mblblblbl#Mblbl#D#D#M#Dbl#D#D#pbl#MblblaYaYaY.RaYaYawbnaYbnawaYaYa0aO.Fa0#x.R#Dbl.Nbl#Mbl#sbla9a9a9a9afafafaf#p#p.na9bl.nbl#p.n#p#pa9#pa9a9#p#pbl#pa9a9a9a9a9#La9afa9a9afa9#Laf#La9afa9af#Lafa9a9#D#Dbl#DblaYbna0#Ubn#I.RawaYawaYaYaY#UbnaCbn",
+".Va0bna0.V.Vb#.5bn#xaYaYaY#Da9a9a9#La9#La9#L#Laf#L#L#La2#La2afa2#La2#Laf#La9a9a9blaY#MaYaYaYaYaYbl#Dbl#Dafa9#L#Lafa2a2a2a2a2#L#Lafaj#Laf#L#L#L#La2a2bpa2#ga2a2#gafafafa9a9a9bl#pbl#DblaYaYaYaY#xaY.Rbnbn#Ua0a0a0aYaYaYaYaYaYaY#U.R.b.R.R#U.Rbn.RaYaYawblaYblaYbl.N#MaY#DaYblaYbl#sblblblawblaYaYawbnaY.RaYaw.RaY#IbnaCb#aOb#.Vbn#DblblawaYblbl#Da9a9a9a9.7a9.7a9#D#pbl#p#p#pa9#p#p#p#pbla9#pa9a9#pa9.n#pa9.na9a9afafa9a9afa9#Laf.7af#La9afa9#Lafa9a9a9bl#s#DaY#sbnbnbnbnaYaY#x.Rbnbnbnbnbn#xa0a0",
+"a0.Vbn.bbna0b#b##UbnaYaY#D#Ma9a9.Ea9a9a9.7a9.7#Lafa2a2#La2af#L#La2a2#L#L#Laf.7.7blblaYblaYaYaYaY#DaYa9a9a9#La2#La2a2#La2#L#ga2#Lafafafa2#L#L#L#L#L#ga2#g#La2bpa2afafa9af#p#Da9#D#DaY#D#DaYaYaY#x.RaYaYbnbna0a0a0aYaYaY.RaY#UaYaYaYaYaYaYaYaYaYaYawblaYaYaYblaYblaYbl.NblaY#s.Nblblbl#MblaYawaYaY.Raw.RawaY.b#x.baY#xa0aob#bga0bnbl#sblaYaYbl#sbla9.n.7a9.n.7a9a9#pa9#pa9#p#D#pbl#p#p.na9#p.na9#p.n#pbl#pa9a9a9af.7a9afa9.na9a9afaf#Lafa9afa9af#La9.nbl#D#D#DblaYbnbn#UaYaYaYawaY.RaY.Rawbnbna0a0",
+"aYaYaYaYaYaY.N#xaYaYawbnaYaYaYaYbl#Dafa9afa9.7#L#L#L#L#L#L#L#L#L.3a2afafa9#D#DaY.R.R#x.RaYawaYaYa9.7a9#L#L#Lafa2a2a2a2a2#g#L#L#Lafafajafafa2#L#L#L#L.7#L#L#L#L#L#L#L#Laf.7#La9a9a9.7a9#D#D#D#D#Dblbl#IaY#xaY#xaYaYaYaYawaYaYaYaYaYawaYaYawaYaYaw#Fbl#M#FblaYaYaY.R.R.R.R.R.R.R.RawaYaYaYaYaYaYawaYbl.NaYaYaYbn#Ibn.baY#Ua0aOb#.Vbg#HaY.bbla9a9.na9a9a9a9.7a9a9.Ea9#p.na9a9.n#pa9#pbl#p#pa9#p#pa9#p#pa9#pa9#pa9a9#pa9.na9afafaf#L#Laf#L#L#L#L#Lafa9a9a9#pblbl.Nbl#x.R#xaY.R#x#xaYaw.RaYaYaYaYaY#D",
+"aYblaYaYaY#IaY.NblawaYaYaYaYaYaY#Dbla9a9a9a9a9#L#L#L#L#L#L#L#L#L#Laf#Lafa9#Dbl.N.R.Raw.RaYaYaYaY.7#Da9.7af#La2#La2#ga2#ga2#L#L#Lafafafaf#L#L#L#L.7#L#L#L#L.7#L.7a2a2#L#Laf#La9bja9#D.7#D#D#D#D#D#D#DaYaYaYaYaY#xaYaYaYaYaYaYaYaw#xaY#xaYaYawaYaYbl#FblaY#MaYblaw.R.b.R#MaY#FaY#FaYaYaYblaY#MaYaYblawaY.RawaYawaYbnaY#Ibnao#SaBaF.p#H#U.RaY#Ma9#Da9a9.7a9a9a9a9a9a9a9a9#pa9#pa9.na9#pa9a9#pa9#pa9#p#D#p#s#pa9a9afa9af#pafafafafaf#L#L#Lafaj#Lafaja9#pa9a9#Dbl#DblaY#UaYaYaw#x#xbnaYblaw.RaYaY#Dbl",
+"blaYblaYaY#D.NaY#pblblaY.RaYaYaYbl#Dbl#Da9a9.7a9#L#L#L#L#L#Laf#Laf.nafa9#D#DaYaYbn.RbnaYaY.R#xaYa9.7a9#L#L#La2#La2a2#g#L#L#L#L.7afajafaf#Laf#L#L#L#L#L#L#L#L#L#La2#La2a2#L#L#L#L#L#La9.7#Da9bj#DblblaYaYaYaYaYaYbl#Dbl#D#Dbl#Dblbl#Mbl#MaYblaY#Mbl.nbl#pa9aYblaYblaYaYaY.RawaYaY#M#F#M#Fbl#F#F#M#p#p#p#MblaYaYaY#UbnbnaCam#SaBbm#H.p.p.RaYaYbla9.na9a9.na9a9a9a9a9#pa9a9#pa9#pa9#pbla9#pa9#pa9#pa9#p#p#pa9#pa9#pa9#pa9a9afafafaf.3afajafafafafafa9.n#pa9#p#Dbl.N.RbnaY.RaYbnaY#x.b.RaYaYblbl#Dbl",
+"#DblblaY#Dbl#D#Dbl#DawaYaYawaYaYaYaYbl#Dbl#D#Da9#Da9#Da9#Da9.7a9a9#p#Dbl#DaYaYaw.R.RaYbnaYaY#xaY#D#Da9.7#L#L#L#La2#ga2#L#L#L.7afafafafafaj#L#L#L#L#L#L#La2#L#L#La2a2a2#La2#L.7#La9#L.7a9.7#D#D#D.N#Dbl.sbl#D#Dbl#D#D#D#Dbl#D#D#Da9#D#D#Da9#D.n#D#pa9#pa9a9blblblblaYblblblblblbl#p#Fbl#p#pbl#pbl#p#M#pblbl#Faw#FbnbnaCamaCaF#SaZ#Hb#bgbnaw.Raw#Da9a9a9a9a9a9.na9afa9a9#p.na9a9#p.na9#pa9#pa9#pa9#M#p#D#p.na9a9a9af#pajafafafafaf#Lafa9afa9a9afaf#paf#p.n#Dbl#DblbnaYbn#Ubn#x#U#xbn.baYblaY#DaY#D",
+"blblaY#DaY#D#D#Dbl#Dbl#DblaYaYaYaYaYaYaY#M#Dbla9#D#D#D#D#D#D#D#Dbl#Dbl#DaYaYaYaYbn.R#U.RaY.R#xaY.7a9.7#Laf#La2#La2a2#L#L#L#La9.7afafafaf#Laf#L#La2#g#L#g#L#ga2a2a2a2#La2a2#La2#L#L#Laf.7a9a9#Da9#DblaYaYbl.Nbl#Da9a9a9a9a9a9a9a9.na9.na9a9.na9a9ajafa9.na9a9.na9blblbl#Dblblblbl#M#p#p#p#p#p.n#p#p#p#p#M#pblbl#MbnbnbnaCa0aF#SaZ.V.V.VbgbnaYaYaYbl#D#D#D#D#D#Dbla9#p.na9#pa9#pa9#pbla9#pa9#pa9#pa9#pa9#pa9#pa9af#pa9#pafafaf#Lafa9a9a9a9a9afa9a9afafa9#p#Dbl#saY#x.bbn#xbn#I#xbnbnbnbnawbl#Dblbl",
+"a9#pa9bl#M#Dbl#Da9a9#D#D#D#D#D.Nbn#U.RaYaYaY#D#Dbl#D#Dbl#D#Dbl#DaYblaYaYaYawaYaYaY.RaYbn#xaw#xaY.7a9#D#L.7a2#Laf#L#Laf#La9a9#Da9afafajaf#L#L#L#Lbpa2a2a2#ga2a2bpa2a2a2a2a2a2#La2.3#L#L#La9.7a9.7bl.NaYaY#D#pa9#pa9a9a9afafa9a9a9afafafajafafafafafajaf#La9a9a9bj.na9#D.n#Da9#s#D#p#p#p#p.n#pbl#p#p.n#pa9bl#Mblbl#UaY#U#x#Ub#aB.l.V.V.V.VaCbnaY.R#D#Mblbl#Mblblbla9#pa9#pafa9a9#pa9#p#pa9#pa9#pa9#pbl.n#D#pa9#pa9afafafafafafafafafa9#p.na9a9a9a9afafafa9#p#DaYaY.Rbn#x#Ubnbn#xaCa0aCbnaYaYblbla9",
+"#pa9#p#Dbl#Da9#Da9afa9bla9bl#DblaYaYbnaYaYaYaYaYblaYblaYblaYaYblaYaYaYaYaYaYaYaY.Rbn.R#xaY.RaYaYa9.7a9#Laf#L#L#Lafaf#Lafa9a9a9.nafafafaf#Laf#L#Laa#ga2#ga2a2#ga2aaasa2a2#La2a2#L#L#L.3#La9.7a9#DaYblaYblbla9a9ajaf#Laf#L#Lafajaf#Lafafaf#Laf#L#La2#L#L#L#L#L.7.7a9a9a9a9a9.na9a9.na9a9a9a9a9a9.na9a9.n#D#D#D#D#D#MblawawbnaC.F.t.Fb#.Vb#.Vbnaw#xaYaYaYaY.NaY#D#Da9#pa9a9#p.n#pa9.nbla9#pa9#pa9#pa9#p#p#pa9.na9afafafafafafafafafa9a9afa9af#pafafafafa9#p#Dblblaw#xbn#Ubn#x#IbnaCb#aCbnawaY#D.na9",
+"#pa9#pa9a9#Dbla9a9a9af#D#Da9#D#D#xbn#xbnaYaYblaYaYaYaYaYaYaYaYaYbnaYaYaYaYaYaYaY.R.R.RbnaYaYaYaY#D.7#Da9#La2#Lafajafafa9a9a9a9#Dafafafaf#La2#L#La2a2#ga2a2#gaaa2asaaa2a2a2a2a2a2a2#L#L#La9a9.7a9#D.saY#D.n#pafaf#Lafaj#L#Laf#L#Laf#L#L#L#L#Lafaja2a2a2a2#L.E#L#La9a9a9.7a9a9a9a9a9.7a9.na9a9a9a9.E#L.7.7#D#s#D#s#Fblbl#M#xbnbg.t.F.t.V.V.VaCa0aY#DaYaYaYaY.Nblbl.na9#p.na9a9#pa9#p#pa9#pa9#pa9#pa9#p#D#pa9#p#pa9afafafaf#Lafafa9af#pa9#pa9afa9afafaf#pa9a9#D#DaYbnbn#xbn#Ua0bna0bg.Va0aYblbl#pa9"
+};
diff --git a/tests/auto/gui/image/qimagereader/images/namedcolors.xpm b/tests/auto/gui/image/qimagereader/images/namedcolors.xpm
new file mode 100644
index 0000000000..f6485d510e
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/namedcolors.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char *xman[] = {
+/* width height ncolors chars_per_pixel */
+"8 8 3 1",
+/* colors */
+"e g4 black c pale turquoise 4",
+"f m white c light golden rod yellow g4 grey",
+"g g white c lemon chiffon m black",
+/* pixels */
+"eeeeeeee",
+"ffffffff",
+"gggggggg",
+"gggggggg",
+"gggggggg",
+"gggggggg",
+"gggggggg",
+"gggggggg"
+};
diff --git a/tests/auto/gui/image/qimagereader/images/negativeheight.bmp b/tests/auto/gui/image/qimagereader/images/negativeheight.bmp
new file mode 100644
index 0000000000..875887acef
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/negativeheight.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/noclearcode.bmp b/tests/auto/gui/image/qimagereader/images/noclearcode.bmp
new file mode 100644
index 0000000000..1a5ca9c9bd
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/noclearcode.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/noclearcode.gif b/tests/auto/gui/image/qimagereader/images/noclearcode.gif
new file mode 100644
index 0000000000..27784d61b2
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/noclearcode.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/nontransparent.xpm b/tests/auto/gui/image/qimagereader/images/nontransparent.xpm
new file mode 100644
index 0000000000..00c21ef7d7
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/nontransparent.xpm
@@ -0,0 +1,788 @@
+/* XPM */
+static char *dummy[]={
+"8 8 777 2",
+"#R c #000000",
+"fn c #000001",
+".e c #000069",
+".f c #00006d",
+".g c #00006e",
+"#d c #0042b4",
+"aJ c #010101",
+"g0 c #010102",
+"dr c #010202",
+"gd c #010203",
+"#J c #0157bb",
+"e. c #020202",
+"du c #020304",
+"fR c #030303",
+"jJ c #040404",
+"hf c #040608",
+"fE c #040609",
+"cO c #04070a",
+"k# c #050505",
+"gC c #050709",
+"ka c #060606",
+"br c #06080a",
+"dY c #06090d",
+"hI c #070707",
+"in c #07090b",
+"cL c #070a0e",
+"cd c #070b0f",
+"e0 c #080808",
+"gZ c #080b0e",
+"eu c #080b0f",
+"dz c #080c10",
+"hD c #090909",
+"fq c #090d11",
+"cH c #090e13",
+"jB c #0a0a0a",
+"#U c #0a0d0f",
+"a4 c #0a0d10",
+"g3 c #0a0d11",
+"fu c #0a0f14",
+"cj c #0a1016",
+"kb c #0b0b0b",
+"#n c #0b0d0f",
+"a1 c #0b0e10",
+"g8 c #0b0f13",
+"f4 c #0b0f14",
+"hE c #0c0c0c",
+"bf c #0c0f12",
+".X c #0c28a0",
+"bT c #0d0d0d",
+"ax c #0d1014",
+"hr c #0d1217",
+"dH c #0d141b",
+"jy c #0e0e0e",
+"aW c #0e1115",
+"eH c #0e141b",
+"bE c #0f0f0f",
+"ar c #0f1317",
+"g5 c #0f1419",
+"hg c #0f151a",
+"fh c #0f151c",
+"dJ c #0f171f",
+"gI c #101010",
+".z c #101094",
+"h. c #10161b",
+"gm c #10161c",
+"eL c #10171f",
+"hK c #111111",
+"at c #11161b",
+"fC c #111820",
+"dA c #111922",
+"aj c #1163c4",
+"bJ c #121212",
+"#Z c #12161a",
+"ba c #12171c",
+"ho c #12181e",
+"jK c #131313",
+"iq c #13191d",
+"cA c #131e2a",
+"c7 c #141414",
+"dR c #141e29",
+"jr c #151515",
+"aA c #151a1f",
+"hq c #151c23",
+"fl c #151e28",
+"eV c #151e29",
+"d4 c #161616",
+"hw c #161e25",
+"jk c #171717",
+"bs c #171d23",
+"g9 c #171f27",
+"eC c #17212b",
+"b9 c #172432",
+"d5 c #181818",
+"as c #181e24",
+"bn c #181f25",
+"bS c #191919",
+"gr c #19232d",
+"ed c #1a1a1a",
+".d c #1a1a6e",
+"gB c #1a242e",
+"eK c #1a2531",
+"dQ c #1a2633",
+"hL c #1b1b1b",
+"g1 c #1b242d",
+"g# c #1b252f",
+"eJ c #1b2734",
+"d1 c #1b2937",
+"bW c #1c1c1c",
+"gW c #1c262f",
+"ci c #1c2b3b",
+"cs c #1c2c3c",
+"e# c #1d1d1d",
+"#3 c #1d232a",
+"f8 c #1d2833",
+"fI c #1d2936",
+"eO c #1d2a38",
+"cw c #1d2e3f",
+"jR c #1e1e1e",
+"a2 c #1e262e",
+"eP c #1e2b39",
+"dE c #1e2d3d",
+"cF c #1e2f41",
+"aO c #1e6ec9",
+"c4 c #1f1f1f",
+"gx c #1f2a36",
+"c# c #1f3043",
+"j2 c #202020",
+"bk c #202931",
+"ht c #202c36",
+"eF c #202f3e",
+"b7 c #203245",
+"cB c #203246",
+"hG c #212121",
+"aE c #212932",
+"bp c #212a32",
+"hl c #212d38",
+"cc c #213347",
+".M c #214eb7",
+"hF c #222222",
+"#7 c #222a32",
+"fw c #223040",
+"eU c #223141",
+"jC c #232323",
+"bb c #232c35",
+"ga c #23303d",
+"cv c #23364a",
+"cn c #23364b",
+"jl c #242424",
+"gj c #243240",
+"cm c #24374c",
+"c. c #24384d",
+"bF c #252525",
+"be c #252f39",
+"gt c #253341",
+"dU c #253649",
+".Y c #256cc9",
+"jG c #262626",
+"h8 c #26333d",
+"hb c #263440",
+"gs c #263443",
+"cr c #263b51",
+"cW c #272727",
+"aC c #27313b",
+"a9 c #27313c",
+"fk c #273748",
+"eR c #27384b",
+"cq c #273d55",
+"jV c #282828",
+"#5 c #28313b",
+"b0 c #2877ce",
+"gL c #292929",
+"#Y c #29323c",
+"hu c #293744",
+"fK c #293a4d",
+"jP c #2a2a2a",
+"#w c #2a323b",
+"bg c #2a3540",
+"dF c #2a3f55",
+"jn c #2b2b2b",
+"a6 c #2b3641",
+"jY c #2c2c2c",
+"h5 c #2c3b47",
+"hp c #2c3c4a",
+"gp c #2c3c4d",
+"cx c #2c445e",
+"bU c #2d2d2d",
+"h# c #2d3e4c",
+"dS c #2d435b",
+"e5 c #2e2e2e",
+"cG c #2e4762",
+"jF c #2f2f2f",
+"aG c #2f3b48",
+"gU c #2f3f4e",
+"ck c #2f4966",
+"j0 c #303030",
+"a0 c #303d4a",
+"he c #304251",
+"cQ c #307ace",
+"e4 c #313131",
+"ew c #31465d",
+"dW c #314862",
+"ce c #314b68",
+"jm c #323232",
+"bm c #323f4d",
+"k. c #333333",
+"e3 c #343434",
+"hi c #344757",
+"eT c #344b64",
+"b8 c #34506f",
+"dj c #347fd1",
+"bX c #353535",
+"f9 c #35485c",
+"ac c #363636",
+"#V c #36434f",
+"fv c #364c64",
+"dV c #36506d",
+"c2 c #373737",
+"ev c #37506a",
+"bI c #383838",
+"bw c #384655",
+"h4 c #384b5a",
+"hk c #384c5d",
+"ea c #393939",
+"bh c #394857",
+"gX c #394d5f",
+"#e c #3981d2",
+"e6 c #3a3a3a",
+"eS c #3a546f",
+"em c #3a81d2",
+"#F c #3b3b3b",
+"eQ c #3b5571",
+"dT c #3b5776",
+"cI c #3b5c7f",
+"gJ c #3c3c3c",
+"hX c #3c5060",
+"fi c #3c546f",
+"gG c #3d3d3d",
+"jv c #3e3e3e",
+"az c #3e4e5e",
+"fL c #3e5772",
+"bK c #3f3f3f",
+"gD c #3f576f",
+"fJ c #3f5874",
+"d2 c #3f86d5",
+"jx c #404040",
+"#8 c #404e5d",
+"bv c #405161",
+"cf c #406389",
+"jL c #414141",
+"iG c #415561",
+"im c #415663",
+"gz c #415971",
+"et c #415d7c",
+"cz c #41658c",
+"f# c #418ad7",
+"jT c #424242",
+"gy c #425b74",
+"fs c #425d7a",
+"#K c #4288d4",
+"jQ c #434343",
+"eX c #438cda",
+"j8 c #444444",
+".L c #44449a",
+"eZ c #454545",
+"#s c #455362",
+"fx c #45617f",
+"cK c #456b94",
+"aP c #458cd5",
+"ab c #464646",
+".n c #46469f",
+"aH c #46586a",
+"gV c #465f74",
+"d0 c #46678c",
+"c9 c #474747",
+"aF c #47596c",
+"a3 c #475a6d",
+"ex c #476687",
+"jU c #484848",
+"by c #485b6e",
+"gq c #48627d",
+"dI c #486b91",
+"cC c #48709b",
+"js c #494949",
+"#2 c #495a6b",
+"ih c #49606f",
+"hm c #49637a",
+"gk c #49647f",
+"j7 c #4a4a4a",
+"dt c #4a6e94",
+"ak c #4a8dd7",
+"b1 c #4a90db",
+"c1 c #4b4b4b",
+"bx c #4b5f72",
+"fr c #4b698a",
+"dG c #4b6e95",
+"co c #4b75a2",
+"fW c #4b91db",
+"bD c #4c4c4c",
+"hc c #4c687f",
+"j6 c #4d4d4d",
+"#Q c #4d5f71",
+"ik c #4d6676",
+"hH c #4e4e4e",
+"#0 c #4e5f72",
+"aD c #4e6277",
+"b. c #4e6377",
+"gN c #4e91dc",
+"c0 c #4f4f4f",
+"bj c #4f6378",
+"dZ c #4f759e",
+"cD c #4f7aa9",
+"hN c #4f8dcd",
+"kd c #505050",
+"#S c #506275",
+"#6 c #506376",
+"ge c #506e8c",
+"af c #515151",
+"b# c #51667b",
+"dk c #5195df",
+"cT c #525252",
+".c c #525280",
+"bq c #52677d",
+"iH c #526b79",
+"fj c #527397",
+"eW c #52769d",
+"dy c #527aa5",
+"hJ c #535353",
+"#x c #536476",
+"eG c #53789f",
+"jM c #545454",
+"#r c #546577",
+"bz c #546a80",
+"dM c #547ca8",
+"fP c #5499e2",
+"jp c #555555",
+"iK c #556f7e",
+"bM c #565656",
+"fB c #56799f",
+"dC c #567fab",
+"gE c #569be2",
+"cU c #575757",
+"h7 c #57748b",
+"gc c #577797",
+"fN c #577ba1",
+"dx c #5780ad",
+"cg c #5787bb",
+"i4 c #585858",
+"iF c #587483",
+"hy c #587792",
+"g2 c #587893",
+"fy c #587ca3",
+"eA c #587ea7",
+"jW c #595959",
+"bu c #597087",
+"ia c #5984b2",
+"ae c #5a5a5a",
+"#t c #5a6c7f",
+"bd c #5a7189",
+"ij c #5a7789",
+"eI c #5a81ab",
+"bR c #5b5b5b",
+"ch c #5b8dc3",
+"en c #5b9be1",
+"ke c #5c5c5c",
+"cP c #5c8fc5",
+"j5 c #5d5d5d",
+"iN c #5d7fa0",
+"gl c #5d80a3",
+"fp c #5d83ac",
+"cl c #5d8fc6",
+"b2 c #5d9de6",
+"c8 c #5e5e5e",
+"hh c #5e7f9c",
+"hn c #5e809d",
+"i3 c #5f5f5f",
+"#1 c #5f758c",
+"a8 c #5f7890",
+"g7 c #5f819e",
+"cJ c #5f93cc",
+"jz c #606060",
+"ct c #6094cd",
+"bO c #616161",
+"eN c #618cb9",
+"jH c #626262",
+"iW c #627c8d",
+"hd c #6285a3",
+"ey c #628dbb",
+"dO c #6290c4",
+"ca c #6297d1",
+"jI c #636363",
+"eM c #638fbd",
+"jN c #646464",
+"fH c #648db9",
+"eE c #648fbe",
+"cb c #649ad5",
+"hA c #64a8e2",
+"jw c #656565",
+"#k c #65798f",
+"fF c #658eba",
+"fA c #658fbb",
+"fa c #65a4e7",
+"b3 c #65a6e8",
+"jX c #666666",
+"hW c #6688a3",
+"gh c #668cb2",
+"aI c #6696cb",
+"dN c #6697cc",
+"bA c #6699ce",
+"cu c #669edb",
+"#C c #676767",
+"f3 c #678db4",
+"dl c #67a6eb",
+"kc c #686868",
+"cS c #696969",
+"dK c #699bd2",
+"cN c #69a2e0",
+"cy c #69a3e1",
+"fX c #69a6e8",
+"jD c #6a6a6a",
+"av c #6a84a1",
+"ds c #6a9cd3",
+"dL c #6a9cd4",
+"jt c #6b6b6b",
+"fo c #6b97c6",
+"cE c #6ba5e4",
+"jS c #6c6c6c",
+"aV c #6c88a4",
+"ir c #6c8ea4",
+"il c #6c8fa5",
+"eD c #6c9bce",
+"dB c #6c9ed7",
+"dq c #6c9fd8",
+"cM c #6ca7e7",
+"cp c #6ca8e8",
+"eo c #6cabed",
+"i2 c #6d6d6d",
+"#T c #6d869f",
+"#W c #6d87a0",
+"gY c #6d94b5",
+"aa c #6d9bcb",
+"eB c #6d9dd0",
+"dw c #6da0d9",
+"dD c #6da1da",
+"b4 c #6dacee",
+"h9 c #6dafe2",
+"i6 c #6e6e6e",
+"bt c #6e8aa7",
+"fM c #6e9bcb",
+"dP c #6ea3dc",
+"b5 c #6eabee",
+"jd c #707070",
+"ix c #7088a2",
+"hx c #7098ba",
+"f7 c #7099c3",
+"dv c #70a5df",
+"b6 c #70adef",
+"iy c #70aff1",
+"dm c #70aff2",
+"jE c #717171",
+"#m c #7188a0",
+"#u c #7189a1",
+"aY c #718eac",
+"gO c #71aced",
+"jq c #727272",
+"gb c #729cc6",
+"hO c #72afee",
+"ib c #72afef",
+"e7 c #737373",
+"#y c #738ba4",
+"#A c #739eca",
+".j c #747474",
+"#9 c #748fab",
+"hs c #749ec1",
+"f6 c #749fca",
+".i c #757575",
+"#q c #758da6",
+"a5 c #7593b1",
+"bo c #7594b2",
+"ii c #759bb3",
+"fb c #75b3f4",
+"ep c #75b4f3",
+"is c #75b8e2",
+"ag c #767676",
+"fz c #76a6da",
+"ez c #76a9e0",
+"dX c #76adeb",
+".h c #777777",
+".m c #777794",
+"iX c #77a6b3",
+"dn c #77b1f4",
+"gK c #787878",
+"#4 c #7894b0",
+"fG c #78a9dd",
+"j# c #797979",
+"bV c #7a7a7a",
+"do c #7ab4f4",
+"jA c #7b7b7b",
+"io c #7ba3bc",
+"dp c #7bb5f5",
+".k c #7c7c7c",
+"bc c #7c9cbd",
+"gi c #7caad8",
+"aQ c #7cb0e7",
+"fY c #7cb8f9",
+"iM c #7cbee2",
+"j1 c #7d7d7d",
+"aX c #7d9ebf",
+"fm c #7db0e7",
+"j4 c #7e7e7e",
+".8 c #7ea5ce",
+"#D c #7f7f7f",
+"hv c #7facd3",
+"gn c #7faedd",
+"eb c #808080",
+"er c #80bdf9",
+"j3 c #818181",
+"hz c #81afd6",
+"gu c #81b0e0",
+"eq c #81bbf9",
+"fc c #81bbfc",
+"#b c #828282",
+"iE c #82aac0",
+"i5 c #838383",
+"ha c #83b1d9",
+"es c #83bcf9",
+"ad c #848484",
+"go c #84b5e6",
+".v c #858585",
+"#p c #85a0bc",
+"bN c #868686",
+"hZ c #86b3d6",
+"fD c #86bcf6",
+"fO c #86bcf7",
+"gP c #86c1ff",
+"di c #878787",
+"ft c #87bdf8",
+"bH c #888888",
+"iT c #88cfe2",
+"jZ c #898989",
+"#z c #89a5c3",
+"g. c #89bbee",
+"fg c #89c0fc",
+"fd c #89c2fd",
+"hP c #89c3ff",
+"jb c #8a8a8a",
+"#o c #8aa6c4",
+"jc c #8b8b8b",
+".S c #8baccf",
+"iI c #8bb6ce",
+"al c #8bb9e8",
+"hj c #8bbde7",
+"gw c #8bbef2",
+"ff c #8bc3ff",
+"fe c #8bc4ff",
+"fZ c #8bc6ff",
+"ec c #8c8c8c",
+"gv c #8cbff3",
+"jO c #8d8d8d",
+"a# c #8dadce",
+"ic c #8dc7ff",
+"#H c #8e8e8e",
+"a. c #8eaed0",
+"#L c #8ebae8",
+"hY c #8ebee3",
+"g4 c #8ec1ec",
+"iO c #8ecbff",
+"ju c #8f8f8f",
+"bi c #8fb5da",
+"h6 c #8fc0e5",
+"f5 c #8fc4f9",
+"jf c #909090",
+"bl c #90b6dc",
+"i1 c #90dfe2",
+"bC c #919191",
+"aB c #91b5dc",
+"aZ c #91b7dd",
+"hV c #91c2e8",
+"gf c #91c6fc",
+"gg c #91c7fd",
+"f0 c #91c8ff",
+"i7 c #929292",
+"gA c #92c8fe",
+"iz c #92ccff",
+"iU c #939393",
+"a7 c #93b9e0",
+"f2 c #93c9ff",
+"gQ c #93ccff",
+"e8 c #949494",
+".y c #9494b0",
+"h1 c #94c6ec",
+"f1 c #94caff",
+"j9 c #959595",
+"#X c #95b7da",
+"cX c #969696",
+"ay c #96bbe3",
+"#f c #96bde8",
+"aR c #96c3ee",
+"gR c #96cfff",
+".J c #979797",
+"hQ c #97cfff",
+"fT c #989898",
+"#j c #98b6d7",
+"#l c #98b7d8",
+"iJ c #98c7e1",
+"g6 c #98cffd",
+"jj c #999999",
+"aS c #99c4ee",
+"h3 c #99ccf4",
+"gS c #99d0ff",
+".l c #9a9a9a",
+".b c #9a9aa4",
+"aw c #9ac1ea",
+"gT c #9ad1ff",
+"dg c #9b9b9b",
+".N c #9bbee8",
+"aq c #9bc1eb",
+"am c #9bc4ee",
+"eg c #9c9c9c",
+"au c #9cc3ed",
+"ao c #9cc5ee",
+"c5 c #9d9d9d",
+"aT c #9dc7ef",
+"hU c #9dd2fb",
+"hR c #9dd3ff",
+"dh c #9e9e9e",
+"#v c #9ebee0",
+".Z c #9ec3e8",
+"#M c #9ec3ed",
+"#N c #9ec5ed",
+"ap c #9ec5ef",
+"aU c #9ec7f0",
+"h2 c #9ed4fd",
+"id c #9ed6ff",
+"df c #9f9f9f",
+"an c #9fc5ee",
+"h0 c #9fd5fe",
+"aM c #a0a0a0",
+"hT c #a0d6ff",
+"jh c #a1a1a1",
+"hS c #a1d7ff",
+"ji c #a2a2a2",
+"#P c #a2c7ed",
+"i8 c #a3a3a3",
+"#O c #a3c8ed",
+"iA c #a3daff",
+"j. c #a4a4a4",
+"je c #a5a5a5",
+"#g c #a5c8ed",
+"ip c #a5dafb",
+"iv c #a6a6a6",
+".F c #a6bed4",
+"de c #a7a7a7",
+"#h c #a7c9ed",
+"if c #a7ddff",
+"ie c #a7deff",
+"eh c #a8a8a8",
+"#i c #a8caee",
+"iL c #a8dbf8",
+"ig c #a8deff",
+"iP c #a8e0ff",
+"iY c #a8e2e6",
+"hC c #a9a9a9",
+".0 c #a9caed",
+"#B c #aaaaaa",
+"fU c #ababab",
+".5 c #abc9e9",
+"iB c #abe3ff",
+"e2 c #acacac",
+".6 c #accaea",
+"jo c #adadad",
+".1 c #adcbed",
+".7 c #adccec",
+"iD c #ade2ff",
+"iC c #ade3ff",
+"fS c #aeaeae",
+".4 c #aecded",
+"db c #afafaf",
+".A c #afbbe7",
+".2 c #afccee",
+".3 c #afceee",
+"d6 c #b0b0b0",
+"iQ c #b0e9ff",
+"bG c #b1b1b1",
+"jg c #b2b2b2",
+"#E c #b3b3b3",
+".O c #b3d1ed",
+"gF c #b4b4b4",
+"cY c #b5b5b5",
+"iR c #b5ebff",
+"hM c #b6b6b6",
+"iS c #b6ecff",
+"d9 c #b7b7b7",
+".U c #b8b8b8",
+".u c #b9b9b9",
+"dd c #bababa",
+".P c #bad4ee",
+"bL c #bbbbbb",
+".Q c #bbd4ef",
+".R c #bbd5f0",
+"e9 c #bcbcbc",
+"c3 c #bdbdbd",
+"f. c #bebebe",
+"d8 c #bfbfbf",
+".o c #bfc2e8",
+"iZ c #bffdff",
+"iw c #c0c0c0",
+"iV c #c1c1c1",
+"i0 c #c1feff",
+"ei c #c2c2c2",
+"ej c #c3c3c3",
+"#a c #c4c4c4",
+"el c #c5c5c5",
+"d7 c #c6c6c6",
+".r c #c6cbda",
+"ek c #c7c7c7",
+"aN c #c8c8c8",
+"#G c #c9c9c9",
+"aL c #cacaca",
+"ai c #cbcbcb",
+".B c #cbddf2",
+"bZ c #cccccc",
+".C c #cce0f3",
+"dc c #cdcdcd",
+"ah c #cecece",
+"da c #cfcfcf",
+".E c #cfe1f3",
+".D c #cfe1f4",
+"#I c #d0d0d0",
+"cV c #d1d1d1",
+"fQ c #d2d2d2",
+"bB c #d3d3d3",
+"#c c #d4d4d4",
+"d# c #d5d5d5",
+"aK c #d6d6d6",
+"cZ c #d7d7d7",
+"c6 c #d8d8d8",
+"gH c #d9d9d9",
+".W c #dadada",
+"gM c #dbdbdb",
+"bQ c #dcdcdc",
+"e1 c #dddddd",
+"cR c #dedede",
+"d. c #dfdfdf",
+"bP c #e0e0e0",
+"i# c #e1e1e1",
+"bY c #e2e2e2",
+".K c #e3e3e3",
+"ee c #e4e4e4",
+"d3 c #e5e5e5",
+"ef c #e6e6e6",
+".p c #e6e9f6",
+"fV c #e7e7e7",
+"eY c #e8e8e8",
+".a c #e9e9e9",
+".q c #e9edf8",
+".V c #eaeaea",
+"## c #ebebeb",
+"Qt c #ececec",
+".w c #ededed",
+".x c #eeeeee",
+"#. c #efefef",
+".# c #f0f0f0",
+".9 c #f1f1f1",
+".I c #f2f2f2",
+".T c #f3f3f3",
+"ja c #f4f4f4",
+"i9 c #f5f5f5",
+"hB c #f6f6f6",
+".H c #f7f7f7",
+".G c #f8f8f8",
+"i. c #f9f9f9",
+"kg c #fafafa",
+"kf c #fbfbfb",
+".t c #fcfcfc",
+".s c #fdfdfd",
+"it c #fefefe",
+"iu c #ffffff",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt"};
diff --git a/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif b/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif
new file mode 100644
index 0000000000..8bca4a8354
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt-gif-anim.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif b/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif
new file mode 100644
index 0000000000..b6a854067d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt-gif-noanim.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt.gif b/tests/auto/gui/image/qimagereader/images/qt.gif
new file mode 100644
index 0000000000..e0a5a80b13
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt1.gif b/tests/auto/gui/image/qimagereader/images/qt1.gif
new file mode 100644
index 0000000000..0ce910cee0
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt1.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt2.gif b/tests/auto/gui/image/qimagereader/images/qt2.gif
new file mode 100644
index 0000000000..993a315d0f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt2.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt3.gif b/tests/auto/gui/image/qimagereader/images/qt3.gif
new file mode 100644
index 0000000000..7391678a99
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt3.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt4.gif b/tests/auto/gui/image/qimagereader/images/qt4.gif
new file mode 100644
index 0000000000..41109a9c3f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt4.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt5.gif b/tests/auto/gui/image/qimagereader/images/qt5.gif
new file mode 100644
index 0000000000..5a3fb54ff5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt5.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt6.gif b/tests/auto/gui/image/qimagereader/images/qt6.gif
new file mode 100644
index 0000000000..f22e7c980a
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt6.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt7.gif b/tests/auto/gui/image/qimagereader/images/qt7.gif
new file mode 100644
index 0000000000..a315671417
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt7.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qt8.gif b/tests/auto/gui/image/qimagereader/images/qt8.gif
new file mode 100644
index 0000000000..2a7d09e859
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qt8.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg b/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg
new file mode 100644
index 0000000000..605e8a85da
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/qtbug13653-no_eoi.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rect.svg b/tests/auto/gui/image/qimagereader/images/rect.svg
new file mode 100644
index 0000000000..c56549a69a
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rect.svg
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="128"
+ height="128"
+ viewBox="0 0 105.427 137.439"
+ id="Livello_1"
+ xml:space="preserve"
+ style="overflow:visible"><defs
+ id="defs2727"><linearGradient
+ x1="26.294399"
+ y1="11.6704"
+ x2="71.901901"
+ y2="133.0273"
+ id="linearGradient3352"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="36.838902"
+ y1="7.7075"
+ x2="82.446297"
+ y2="129.0645"
+ id="linearGradient3354"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="33.882301"
+ y1="23.583"
+ x2="39.972198"
+ y2="23.583"
+ id="XMLID_34_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2672"
+ style="stop-color:#ff5d5d;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2674"
+ style="stop-color:#e20800;stop-opacity:1"
+ offset="1" />
+ </linearGradient><linearGradient
+ x1="33.882301"
+ y1="23.583"
+ x2="39.972198"
+ y2="23.583"
+ id="linearGradient3368"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="54.356899"
+ y1="1.124"
+ x2="99.964401"
+ y2="122.481"
+ id="linearGradient3370"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="15.8457"
+ y1="15.5972"
+ x2="61.453098"
+ y2="136.9541"
+ id="linearGradient3376"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="43.438"
+ y1="5.2275"
+ x2="89.045403"
+ y2="126.5845"
+ id="linearGradient3382"
+ xlink:href="#XMLID_34_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="8.1176996"
+ y1="14.9019"
+ x2="70.759598"
+ y2="117.2331"
+ id="linearGradient3792"
+ xlink:href="#XMLID_30_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9991,-4.18e-2,4.18e-2,0.9991,-2.4309,1.195)" /><linearGradient
+ x1="10.5708"
+ y1="10.1548"
+ x2="73.2117"
+ y2="112.4844"
+ id="linearGradient3794"
+ xlink:href="#XMLID_30_"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ x1="6.2178001"
+ y1="72.223602"
+ x2="79.360802"
+ y2="72.223602"
+ id="XMLID_26_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,2.1512354)">
+ <stop
+ id="stop2578"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2580"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient><filter
+ id="filter5869"><feGaussianBlur
+ id="feGaussianBlur5871"
+ stdDeviation="1.2254964"
+ inkscape:collect="always" /></filter><filter
+ id="filter5873"><feGaussianBlur
+ id="feGaussianBlur5875"
+ stdDeviation="1.3615922"
+ inkscape:collect="always" /></filter><filter
+ id="filter2854"><feGaussianBlur
+ id="feGaussianBlur2856"
+ stdDeviation="0.8944793"
+ inkscape:collect="always" /></filter></defs>
+<filter
+ id="AI_Sfocatura_1">
+ <feGaussianBlur
+ id="feGaussianBlur2545"
+ stdDeviation="1" />
+</filter>
+<g
+ transform="translate(-3.2052027,3.2058836)"
+ id="g2547">
+ <g
+ transform="matrix(0.9982563,0,0,0.9982563,-1.5492234e-2,0.2232388)"
+ id="g2549">
+ <g
+ id="g2551">
+ <linearGradient
+ x1="6.2178001"
+ y1="68.029297"
+ x2="79.360802"
+ y2="68.029297"
+ id="XMLID_24_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2554"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2556"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 9.542,121.224 C 7.713,121.224 6.217,119.728 6.217,117.9 L 6.217,18.16 C 6.217,16.331 7.713,14.835 9.542,14.835 L 76.036,14.835 C 77.864,14.835 79.36,16.331 79.36,18.16 L 79.36,117.9 C 79.36,119.728 77.864,121.224 76.036,121.224 L 9.542,121.224 z"
+ id="path2558"
+ style="fill:url(#XMLID_24_)" />
+ </g>
+ <g
+ id="g2560">
+ <linearGradient
+ x1="10.5718"
+ y1="15.3989"
+ x2="73.212097"
+ y2="117.7277"
+ id="XMLID_25_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2563"
+ style="stop-color:#77b753;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2565"
+ style="stop-color:#00892c;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 11.204,18.159 C 10.29,18.159 9.542,18.907 9.542,19.821 L 9.542,116.237 C 9.542,117.151 10.29,117.899 11.204,117.899 L 74.375,117.899 C 75.289,117.899 76.037,117.151 76.037,116.237 L 76.037,19.821 C 76.037,18.907 75.289,18.159 74.375,18.159 L 11.204,18.159 z"
+ id="path2567"
+ style="fill:url(#XMLID_25_)" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0.9982563,0,0,0.9982563,1.05825,0.2232388)"
+ id="g2569">
+ <path
+ d="M 11.639,126.468 C 9.811,126.468 8.314,124.972 8.314,123.143 L 8.314,23.403 C 8.314,21.574 9.811,20.078 11.639,20.078 L 78.134,20.078 C 79.962,20.078 81.458,21.574 81.458,23.403 L 81.458,123.143 C 81.458,124.972 79.962,126.468 78.134,126.468 L 23.696022,126.468 L 11.639,126.468 z"
+ transform="matrix(1.041449,0,0,1,-4.451967,3.1512354)"
+ id="path2575"
+ style="opacity:0.6;filter:url(#filter2854)" /><path
+ d="M 9.542,127.56924 C 7.714,127.56924 6.218,126.07324 6.218,124.24624 L 6.218,24.505236 C 6.218,22.677236 7.714,21.181236 9.542,21.181236 L 76.037,21.181236 C 77.865,21.181236 79.361,22.677236 79.361,24.505236 L 79.361,124.24624 C 79.361,126.07324 77.865,127.56924 76.037,127.56924 L 9.542,127.56924 z"
+ id="path2582"
+ style="fill:url(#XMLID_26_)" />
+ <g
+ transform="translate(0,2.1512354)"
+ id="g2584">
+ <g
+ transform="matrix(1.0276326,0,0,1,-2.2508995,0)"
+ id="g2586"
+ style="opacity:0.5;filter:url(#AI_Sfocatura_1)">
+ <path
+ d="M 11.639,123.321 C 9.811,123.321 8.314,121.824 8.314,119.997 L 81.458,119.997 C 81.458,121.824 79.962,123.321 78.134,123.321 L 11.639,123.321 z"
+ id="path2588" />
+ </g>
+ <linearGradient
+ x1="6.2178001"
+ y1="69.078102"
+ x2="79.360802"
+ y2="69.078102"
+ id="XMLID_27_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2591"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2593"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 9.542,122.272 C 7.714,122.272 6.218,120.776 6.218,118.947 L 6.218,19.207 C 6.218,17.378 7.714,15.882 9.542,15.882 L 76.037,15.882 C 77.865,15.882 79.361,17.378 79.361,19.207 L 79.361,118.947 C 79.361,120.776 77.865,122.272 76.037,122.272 L 9.542,122.272 z"
+ id="path2595"
+ style="fill:url(#XMLID_27_)" />
+ </g>
+ <g
+ transform="translate(0,3.2268531)"
+ id="g2597">
+ <g
+ transform="matrix(1.0368435,0,0,1,-3.0011994,-1.0756177)"
+ id="g2599"
+ style="opacity:0.5;filter:url(#AI_Sfocatura_1)">
+ <path
+ d="M 11.639,120.175 C 9.811,120.175 8.314,118.679 8.314,116.85 L 81.458,116.85 C 81.458,118.679 79.962,120.175 78.134,120.175 L 11.639,120.175 z"
+ id="path2601" />
+ </g>
+ <linearGradient
+ x1="6.2178001"
+ y1="65.931602"
+ x2="79.360802"
+ y2="65.931602"
+ id="XMLID_28_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1.0756177)">
+ <stop
+ id="stop2604"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2606"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 9.542,118.05038 C 7.714,118.05038 6.218,116.55438 6.218,114.72638 L 6.218,14.986382 C 6.218,13.157382 7.714,11.661382 9.542,11.661382 L 76.037,11.661382 C 77.865,11.661382 79.361,13.157382 79.361,14.986382 L 79.361,114.72638 C 79.361,116.55438 77.865,118.05038 76.037,118.05038 L 9.542,118.05038 z"
+ id="path2608"
+ style="fill:url(#XMLID_28_)" />
+ </g>
+ <g
+ transform="translate(0,1.8317954)"
+ id="g2610">
+ <g
+ transform="matrix(1.0184218,0,0,1.0158314,-1.4821779,-1.8527316)"
+ id="g2612"
+ style="opacity:0.5;filter:url(#AI_Sfocatura_1)">
+ <path
+ d="M 10.639,117.029 C 8.811,117.029 7.314,115.532 7.314,113.704 L 7.314,13.964 C 7.314,12.135 8.811,10.639 10.639,10.639 L 77.134,10.639 C 78.962,10.639 80.458,12.135 80.458,13.964 L 80.458,113.704 C 80.458,115.532 78.962,117.029 77.134,117.029 L 10.639,117.029 z"
+ id="path2614" />
+ </g>
+ <linearGradient
+ x1="6.2178001"
+ y1="62.785599"
+ x2="79.360802"
+ y2="62.785599"
+ id="XMLID_29_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2617"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2619"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 9.542,115.98 C 7.714,115.98 6.218,114.483 6.218,112.656 L 6.218,12.916 C 6.218,11.087 7.714,9.591 9.542,9.591 L 76.037,9.591 C 77.865,9.591 79.361,11.087 79.361,12.916 L 79.361,112.657 C 79.361,114.484 77.865,115.981 76.037,115.981 L 9.542,115.981 L 9.542,115.98 z"
+ id="path2621"
+ style="fill:url(#XMLID_29_)" />
+ <linearGradient
+ x1="10.5708"
+ y1="10.1548"
+ x2="73.2117"
+ y2="112.4844"
+ id="XMLID_30_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2624"
+ style="stop-color:#73bdf2;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2626"
+ style="stop-color:#3592ee;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 11.204,12.916 C 10.289,12.916 9.541,13.664 9.541,14.578 L 9.541,110.994 C 9.541,111.909 10.289,112.657 11.204,112.657 L 74.373,112.657 C 75.288,112.657 76.036,111.909 76.036,110.994 L 76.036,14.578 C 76.036,13.664 75.288,12.916 74.373,12.916 L 11.204,12.916 L 11.204,12.916 z"
+ id="path2628"
+ style="fill:url(#linearGradient3794)" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0.9961334,-6.5068755e-2,6.5068755e-2,0.9961334,-5.7493275,-6.3015051)"
+ id="g2630">
+ <g
+ transform="matrix(1.0311837,0,0,1.0154411,-2.8218065,-1.9088007)"
+ id="g2632"
+ style="opacity:0.6;filter:url(#filter5869)">
+ <path
+ d="M 10.744,123.615 C 8.917,123.691 7.36,122.259 7.283,120.432 L 3.118,20.779 C 3.042,18.952 4.474,17.395 6.301,17.319 L 72.737,14.542 C 74.563,14.465 76.121,15.898 76.198,17.725 L 80.363,117.377 C 80.439,119.204 79.007,120.761 77.181,120.839 L 10.744,123.615 z"
+ id="path2634" />
+ </g>
+ <g
+ id="g2636">
+
+ <linearGradient
+ x1="3.7607"
+ y1="67.532204"
+ x2="76.909698"
+ y2="67.532204"
+ id="XMLID_31_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9991,-4.18e-2,4.18e-2,0.9991,-2.4309,1.195)">
+ <stop
+ id="stop2639"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2641"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 9.695,121.518 C 7.868,121.595 6.311,120.163 6.234,118.335 L 2.069,18.682 C 1.993,16.855 3.425,15.298 5.252,15.222 L 71.688,12.444 C 73.514,12.368 75.072,13.8 75.149,15.627 L 79.314,115.28 C 79.391,117.106 77.959,118.663 76.131,118.741 L 9.695,121.518 z"
+ id="path2643"
+ style="fill:url(#XMLID_31_)" />
+ </g>
+ <path
+ d="M 7.051,18.474 C 6.138,18.513 5.422,19.291 5.46,20.204 L 9.486,116.535 C 9.525,117.448 10.303,118.164 11.217,118.126 L 74.331,115.489 C 75.244,115.451 75.96,114.672 75.922,113.759 L 71.897,17.427 C 71.859,16.513 71.08,15.797 70.167,15.836 L 7.051,18.474 z"
+ id="path2652"
+ style="fill:url(#linearGradient3792);fill-opacity:1" />
+ <path
+ d="M 9.5625,22.375 C 10.84375,52.927083 12.125,83.479167 13.40625,114.03125 C 32.885417,113.21875 52.364583,112.40625 71.84375,111.59375 C 70.5625,81.041667 69.28125,50.489583 68,19.9375 C 48.520833,20.75 29.041667,21.5625 9.5625,22.375 z"
+ id="path4189"
+ style="opacity:0.6;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:1.00000001, 1.00000001;stroke-dashoffset:0;stroke-opacity:1" /></g>
+ <g
+ transform="matrix(0.9982563,0,0,0.9982563,10.72193,-5.1454722)"
+ id="g2654">
+ <g
+ transform="translate(-4.2156998e-8,1.0756177)"
+ id="g2656"
+ style="opacity:0.6;filter:url(#filter5873)">
+ <path
+ d="M 10.854785,112.52047 C 9.0174891,112.09656 7.8676311,110.2731 8.2990859,108.46891 L 31.839177,9.9940152 C 32.271664,8.1888112 34.127539,7.0580233 35.964835,7.481942 L 102.78149,22.901224 C 104.61776,23.325142 105.76865,25.149615 105.33616,26.954819 L 81.79607,125.42768 C 81.364615,127.23289 79.507708,128.36368 77.671444,127.93976 L 10.854785,112.52047 z"
+ id="path2658" />
+ </g>
+ <g
+ id="g2660">
+
+ <linearGradient
+ x1="16.688499"
+ y1="-8.9546003"
+ x2="94.108398"
+ y2="105.6356"
+ id="XMLID_33_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9735,0.2287,-0.2287,0.9735,14.4454,7.996)">
+ <stop
+ id="stop2663"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2665"
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 12.707,111.688 C 10.927,111.271 9.813,109.472 10.231,107.692 L 33.037,10.593 C 33.455,8.813 35.254,7.698 37.034,8.116 L 101.767,23.32 C 103.546,23.738 104.661,25.537 104.243,27.317 L 81.436,124.415 C 81.019,126.195 79.219,127.31 77.44,126.892 L 12.707,111.688 z"
+ id="path2667"
+ style="fill:url(#XMLID_33_)" />
+ </g>
+ <path
+ d="M 33.925,25.17 L 35.435,25.3 C 35.369,25.76 35.413,26.134 35.567,26.422 C 35.721,26.71 35.941,26.887 36.226,26.954 C 36.538,27.027 36.832,26.947 37.114,26.715 C 37.396,26.483 37.594,26.116 37.712,25.615 C 37.821,25.149 37.805,24.759 37.661,24.445 C 37.517,24.132 37.298,23.939 37.004,23.87 C 36.811,23.825 36.571,23.817 36.281,23.846 L 36.797,22.386 C 37.187,22.487 37.522,22.455 37.801,22.292 C 38.076,22.127 38.26,21.847 38.353,21.451 C 38.431,21.12 38.41,20.843 38.291,20.618 C 38.172,20.392 37.984,20.25 37.729,20.19 C 37.473,20.13 37.226,20.187 36.987,20.358 C 36.749,20.531 36.562,20.825 36.427,21.24 L 35.104,20.624 C 35.455,19.78 35.886,19.208 36.401,18.909 C 36.915,18.61 37.492,18.536 38.131,18.686 C 38.85,18.855 39.36,19.244 39.663,19.853 C 39.967,20.462 40.045,21.076 39.9,21.695 C 39.802,22.113 39.618,22.468 39.35,22.758 C 39.081,23.049 38.726,23.276 38.287,23.439 C 38.699,23.661 38.996,24.004 39.18,24.471 C 39.362,24.937 39.383,25.471 39.242,26.073 C 39.036,26.949 38.604,27.613 37.948,28.064 C 37.29,28.515 36.601,28.655 35.88,28.486 C 35.189,28.323 34.661,27.944 34.297,27.347 C 33.931,26.751 33.808,26.025 33.925,25.17 z"
+ id="path2676"
+ style="fill:url(#linearGradient3368);fill-opacity:1" />
+ <linearGradient
+ x1="26.294399"
+ y1="11.6704"
+ x2="71.901901"
+ y2="133.0273"
+ id="XMLID_35_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2679"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2681"
+ style="stop-color:#e20800;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 32.977,38.964 C 33.619,37.58 34.903,36.55 35.811,35.945 C 36.752,35.319 37.49,34.55 37.729,33.53 C 38.094,31.979 36.471,30.257 34.621,31.997 C 33.74,29.616 31.507,30.433 31.143,31.984 C 30.903,33.003 31.223,34.019 31.786,35 C 32.329,35.946 33.021,37.439 32.977,38.964 z"
+ id="path2683"
+ style="fill:url(#linearGradient3352);fill-opacity:1" />
+ <path
+ d="M 80.223,109.559 L 78.711,109.43 C 78.779,108.969 78.734,108.595 78.58,108.308 C 78.426,108.02 78.205,107.842 77.922,107.776 C 77.61,107.703 77.315,107.782 77.033,108.014 C 76.751,108.246 76.553,108.614 76.433,109.114 C 76.324,109.581 76.341,109.97 76.484,110.284 C 76.629,110.598 76.849,110.79 77.142,110.859 C 77.335,110.904 77.576,110.913 77.865,110.883 L 77.349,112.343 C 76.958,112.242 76.624,112.274 76.345,112.439 C 76.07,112.603 75.886,112.883 75.792,113.279 C 75.714,113.609 75.735,113.887 75.854,114.112 C 75.973,114.339 76.161,114.481 76.416,114.541 C 76.672,114.602 76.918,114.545 77.156,114.372 C 77.394,114.2 77.582,113.906 77.717,113.49 L 79.039,114.106 C 78.689,114.95 78.258,115.521 77.742,115.82 C 77.228,116.119 76.652,116.193 76.013,116.043 C 75.294,115.874 74.783,115.486 74.48,114.876 C 74.175,114.268 74.097,113.653 74.244,113.034 C 74.342,112.616 74.525,112.262 74.795,111.971 C 75.063,111.681 75.418,111.453 75.857,111.289 C 75.445,111.069 75.146,110.725 74.964,110.259 C 74.78,109.793 74.761,109.259 74.902,108.657 C 75.109,107.78 75.541,107.117 76.197,106.666 C 76.855,106.216 77.543,106.075 78.265,106.244 C 78.956,106.406 79.484,106.786 79.849,107.382 C 80.217,107.978 80.34,108.704 80.223,109.559 z"
+ id="path2694"
+ style="fill:#e20800;fill-opacity:1" /><path
+ d="M 81.063,95.83 C 80.422,97.214 79.138,98.244 78.23,98.85 C 77.29,99.477 76.55,100.246 76.311,101.264 C 75.947,102.815 77.57,104.536 79.419,102.797 C 80.301,105.178 82.533,104.361 82.898,102.811 C 83.138,101.791 82.819,100.776 82.255,99.795 C 81.711,98.849 81.021,97.355 81.063,95.83 z"
+ id="path2701"
+ style="fill:url(#linearGradient3382);fill-opacity:1" />
+ <linearGradient
+ x1="54.356899"
+ y1="1.124"
+ x2="99.964401"
+ y2="122.481"
+ id="XMLID_39_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2704"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2706"
+ style="stop-color:#e20800;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 63.174,42.222 C 64.361,39.656 66.742,37.748 68.427,36.625 C 70.171,35.463 71.54,34.04 71.985,32.15 C 72.66,29.274 69.651,26.081 66.22,29.307 C 64.585,24.892 60.448,26.406 59.772,29.281 C 59.329,31.172 59.921,33.055 60.965,34.873 C 61.97,36.628 63.253,39.396 63.174,42.222 z"
+ id="path2708"
+ style="fill:url(#linearGradient3370);fill-opacity:1" />
+ <linearGradient
+ x1="36.838902"
+ y1="7.7075"
+ x2="82.446297"
+ y2="129.0645"
+ id="XMLID_40_"
+ xlink:href="#XMLID_39_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ id="stop2711"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop2713"
+ style="stop-color:#e20800;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <path
+ d="M 55.486,74.959 C 56.672,72.393 59.054,70.485 60.737,69.362 C 62.481,68.2 63.851,66.777 64.296,64.886 C 64.97,62.01 61.962,58.818 58.532,62.043 C 56.897,57.628 52.759,59.142 52.082,62.018 C 51.638,63.908 52.23,65.792 53.275,67.609 C 54.281,69.364 55.565,72.132 55.486,74.959 z"
+ id="path2715"
+ style="fill:url(#linearGradient3354);fill-opacity:1" />
+ <path
+ d="M 51.37,92.488 C 50.182,95.054 47.801,96.961 46.117,98.084 C 44.373,99.246 43.004,100.67 42.559,102.561 C 41.884,105.436 44.893,108.627 48.323,105.404 C 49.958,109.82 54.096,108.304 54.772,105.428 C 55.217,103.538 54.623,101.655 53.579,99.836 C 52.573,98.082 51.291,95.314 51.37,92.488 z"
+ id="path2724"
+ style="fill:url(#linearGradient3376);fill-opacity:1" />
+ </g>
+</g>
+</svg> \ No newline at end of file
diff --git a/tests/auto/gui/image/qimagereader/images/rect.svgz b/tests/auto/gui/image/qimagereader/images/rect.svgz
new file mode 100644
index 0000000000..c2e193b989
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rect.svgz
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif
new file mode 100644
index 0000000000..78868b0d48
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_adobedeflate_littleendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif
new file mode 100644
index 0000000000..107eab74e7
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_lzw_littleendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif
new file mode 100644
index 0000000000..c314bae4c0
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_bigendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif
new file mode 100644
index 0000000000..4f820f6649
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_nocompression_littleendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif
new file mode 100644
index 0000000000..ddeec38fbc
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_packbits_littleendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif b/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif
new file mode 100644
index 0000000000..50a3024246
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/rgba_zipdeflate_littleendian.tif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/runners.ppm b/tests/auto/gui/image/qimagereader/images/runners.ppm
new file mode 100644
index 0000000000..fda1c97073
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/runners.ppm
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/teapot.ppm b/tests/auto/gui/image/qimagereader/images/teapot.ppm
new file mode 100644
index 0000000000..b8ab85f3a5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/teapot.ppm
@@ -0,0 +1,31 @@
+P6
+256 256
+255
+\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0 cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Ĉg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh>!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*­a(­`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X<(F-a: e<!h>!j@#k@$h>"d<!c=$hD-fF2[<)K0@);'5$Ë‚VÇ€V¿|U_LKYIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À…_O·xTÉ‚Wó«€ûµ‹Ö’k¼|X×>µf-¨^(¡Z'šW&–T&œN>)F-J/b; g>#nD(jB&c<!b=%jH2_A/I0!<(8&5$”J¥Y’S%8&;'?)E,<:HA=HE?IJAISFJYIKXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À£nRÁ}UܘqÊŠe±vU²e,™V&¥V†C €@ |> y< u: r9 o7 l6
+j5
+h4
+g3
+5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1    
+
++3#@)46G<:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&‰N$|> u: p8 k5
+f3
+a0 _/ ]. [- I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c<!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh>!a: X/K%
+g3
+a0 Z- \/ T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d<!yF#O+€N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe<!X/
+^/ V+Q(L&I$r9  TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F
+
+X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?<H@<HA=HC>HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$
+›W&rVMvWNyYNzYN|ZN}[N}[N><H?<H?<H?<H?<H?<H@<H@<H@<HA=HA=HB=HC>HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T%
+
+ 
+@%<-$G?@…pfdNLuWM\NdNL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJvWN‰aP./01„E}[N]O…_Oˆ`O‰aP‹bPŒbPcPcPŽcPdPdPdPeP‘eP’eP’eP“fP“fQ”fQ•gQ•gQ–gQ–hQ—hQ˜hQ™iQšiQ›jQœjQkQkRžlRŸlRžY&¤\'¨^'µ^½bÀcÃeÇi ÄgÀc½b¼a¹`µ^´]¯X¢[' Z'žY&¢mR¡mR¡mR lRŸlRŸlRžkRkQœkQœjQ›jQšjQšiQ™iQ™iQ˜iQ˜hQ—hQ—hQ—hQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘ePdPcP‰aP—O
+ B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P) {dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6
+ 
+$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQeP m6
+†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(­V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(­`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0 ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B #C, 8&H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ
+‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU­`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z- œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&D2 @*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQ
+!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrS­sS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[Ɇ_΋dÓ‘jÔ“mÔ“nБlÊŒhĆd½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&/F-3F47G6%>" Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\͈_ÑŒdÙ”láuç£|쩂ſt명æ¦ÞŸ{Õ—sËŽl†d¹^³yZ­uW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XɃZË…[͇^ЊaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÇf»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7 ,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnГqÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcˈaɆ^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YɃ[Ê…\͇_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}꧀멃몄騃奀ߠ|Ù›wÓ•rÌmƉh¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?<HA*E$ i@$ZIKaMLbML[JK;:H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N]O„^O†`O‰aO‹bPŽcPdP’eP”fQ–gQ˜hQšiQœkRžlS mT£oU¦rWªuZ¯y]´~aºƒfŠlË’sÔšzÜ¡€ã§†è«‰ë®‹í¯Œí®‹ë¬ˆè¨„ã£~ßžyÚ™tÖ•oÒjÎŒfˈbÈ…_ƃ\ÅZÄ€YÃXÂWÂ~WÂ~WÂ~WÃXÀXÄ€YÅZƃ\Ç…^Ɇ`ˈbÌŠdÍ‹fÎgÎŽiÎŽjÎŽjÍŽjËŒiljgÆd¿ƒaº^¸}]¶|\´{[²yZ°xY®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRkR›jQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aO†_Oƒ^O€\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?<HG-E&b;!YIK`MLdOM`LKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlRºyTÄ~UÊ‚XʃYÄXº{W­tUšW'¢[(—hQ lRcP€\OhQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N‚]O„_O‡`O‰aPŒbPŽcPdP’fP”gQ–hQ˜iQšjRœkRžlS¡nT¤pU§sW«vZ°z]µb»„gŠlÉ‘sИyØžÞ¤…ã©Šè­ì±ï³‘ﳑ뭊穅⣀ݞzؘtÒ“nÎiɉdÆ…`Â]Á€[¿~Y¾}X½|W½|V¼{V¼{V¼{V¼{V¼{V¼|W¼|W½}X½}Y½~Z½~Z¼~Z»}[º}[º}[º~\º~\º~]º~]¹~]¸~]·}]¶|\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS mRŸlRkR›jQšiQ˜hQ–gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D>IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VΈ`遲ޜv¾€]ªqS–LŽG|> g3
+S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gËmÊ’sјzØŸ€Þ¤…ã©Šè­ê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlljgÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeï­ˆô´Õ—u¶|\ Z'™LˆD |>
+
+ &3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!'
+ %' %$#" ! !$ 
diff --git a/tests/auto/gui/image/qimagereader/images/test.ppm b/tests/auto/gui/image/qimagereader/images/test.ppm
new file mode 100644
index 0000000000..05d627c0cb
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/test.ppm
@@ -0,0 +1,2 @@
+P6 10 10 1023
+¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ \ No newline at end of file
diff --git a/tests/auto/gui/image/qimagereader/images/test.xpm b/tests/auto/gui/image/qimagereader/images/test.xpm
new file mode 100644
index 0000000000..5fcf075b7f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/test.xpm
@@ -0,0 +1,260 @@
+/* XPM */
+static char * test_xpm[] = {
+"256 256 1 1",
+" c grey",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp b/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp
new file mode 100644
index 0000000000..37060373ed
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/test32bfv4.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/test32v5.bmp b/tests/auto/gui/image/qimagereader/images/test32v5.bmp
new file mode 100644
index 0000000000..8ad3cfa60d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/test32v5.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff
new file mode 100644
index 0000000000..3fcb8a9aca
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_1.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff
new file mode 100644
index 0000000000..6f3e9d5297
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_2.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff
new file mode 100644
index 0000000000..aab9cf2596
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_3.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff
new file mode 100644
index 0000000000..aad96ffc6c
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_4.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff
new file mode 100644
index 0000000000..05d23dcb86
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_5.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff
new file mode 100644
index 0000000000..9ffe7fcaa4
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_6.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff
new file mode 100644
index 0000000000..eeeb01937e
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_7.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff
new file mode 100644
index 0000000000..87cf2fd774
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/indexed_orientation_8.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff
new file mode 100644
index 0000000000..3b589b2232
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_1.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff
new file mode 100644
index 0000000000..9a662239db
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_2.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff
new file mode 100644
index 0000000000..eed242388c
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_3.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff
new file mode 100644
index 0000000000..055480e0ca
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_4.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff
new file mode 100644
index 0000000000..b4d0974ec8
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_5.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff
new file mode 100644
index 0000000000..3b1e02af56
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_6.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff
new file mode 100644
index 0000000000..b752c745c3
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_7.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff
new file mode 100644
index 0000000000..e228d05659
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/mono_orientation_8.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff
new file mode 100644
index 0000000000..7507e526a5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_indexed.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff
new file mode 100644
index 0000000000..8ff9db80f5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_mono.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff
new file mode 100644
index 0000000000..321ea3ebf5
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/original_rgb.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff
new file mode 100644
index 0000000000..2756a82fbb
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_1.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff
new file mode 100644
index 0000000000..ae9af0999d
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_2.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff
new file mode 100644
index 0000000000..a2f432526b
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_3.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff
new file mode 100644
index 0000000000..f35bfc4c9c
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_4.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff
new file mode 100644
index 0000000000..70e5478065
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_5.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff
new file mode 100644
index 0000000000..b2635fe14f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_6.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff
new file mode 100644
index 0000000000..1fb0cd9df6
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_7.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff
new file mode 100644
index 0000000000..666b1b4c55
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tiff_oriented/rgb_orientation_8.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/transparent.xpm b/tests/auto/gui/image/qimagereader/images/transparent.xpm
new file mode 100644
index 0000000000..5ddcf0b00e
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/transparent.xpm
@@ -0,0 +1,788 @@
+/* XPM */
+static char *dummy[]={
+"8 8 777 2",
+"#R c none",
+"fn c #000001",
+".e c #000069",
+".f c #00006d",
+".g c #00006e",
+"#d c #0042b4",
+"aJ c #010101",
+"g0 c #010102",
+"dr c #010202",
+"gd c #010203",
+"#J c #0157bb",
+"e. c #020202",
+"du c #020304",
+"fR c #030303",
+"jJ c #040404",
+"hf c #040608",
+"fE c #040609",
+"cO c #04070a",
+"k# c #050505",
+"gC c #050709",
+"ka c #060606",
+"br c #06080a",
+"dY c #06090d",
+"hI c #070707",
+"in c #07090b",
+"cL c #070a0e",
+"cd c #070b0f",
+"e0 c #080808",
+"gZ c #080b0e",
+"eu c #080b0f",
+"dz c #080c10",
+"hD c #090909",
+"fq c #090d11",
+"cH c #090e13",
+"jB c #0a0a0a",
+"#U c #0a0d0f",
+"a4 c #0a0d10",
+"g3 c #0a0d11",
+"fu c #0a0f14",
+"cj c #0a1016",
+"kb c #0b0b0b",
+"#n c #0b0d0f",
+"a1 c #0b0e10",
+"g8 c #0b0f13",
+"f4 c #0b0f14",
+"hE c #0c0c0c",
+"bf c #0c0f12",
+".X c #0c28a0",
+"bT c #0d0d0d",
+"ax c #0d1014",
+"hr c #0d1217",
+"dH c #0d141b",
+"jy c #0e0e0e",
+"aW c #0e1115",
+"eH c #0e141b",
+"bE c #0f0f0f",
+"ar c #0f1317",
+"g5 c #0f1419",
+"hg c #0f151a",
+"fh c #0f151c",
+"dJ c #0f171f",
+"gI c #101010",
+".z c #101094",
+"h. c #10161b",
+"gm c #10161c",
+"eL c #10171f",
+"hK c #111111",
+"at c #11161b",
+"fC c #111820",
+"dA c #111922",
+"aj c #1163c4",
+"bJ c #121212",
+"#Z c #12161a",
+"ba c #12171c",
+"ho c #12181e",
+"jK c #131313",
+"iq c #13191d",
+"cA c #131e2a",
+"c7 c #141414",
+"dR c #141e29",
+"jr c #151515",
+"aA c #151a1f",
+"hq c #151c23",
+"fl c #151e28",
+"eV c #151e29",
+"d4 c #161616",
+"hw c #161e25",
+"jk c #171717",
+"bs c #171d23",
+"g9 c #171f27",
+"eC c #17212b",
+"b9 c #172432",
+"d5 c #181818",
+"as c #181e24",
+"bn c #181f25",
+"bS c #191919",
+"gr c #19232d",
+"ed c #1a1a1a",
+".d c #1a1a6e",
+"gB c #1a242e",
+"eK c #1a2531",
+"dQ c #1a2633",
+"hL c #1b1b1b",
+"g1 c #1b242d",
+"g# c #1b252f",
+"eJ c #1b2734",
+"d1 c #1b2937",
+"bW c #1c1c1c",
+"gW c #1c262f",
+"ci c #1c2b3b",
+"cs c #1c2c3c",
+"e# c #1d1d1d",
+"#3 c #1d232a",
+"f8 c #1d2833",
+"fI c #1d2936",
+"eO c #1d2a38",
+"cw c #1d2e3f",
+"jR c #1e1e1e",
+"a2 c #1e262e",
+"eP c #1e2b39",
+"dE c #1e2d3d",
+"cF c #1e2f41",
+"aO c #1e6ec9",
+"c4 c #1f1f1f",
+"gx c #1f2a36",
+"c# c #1f3043",
+"j2 c #202020",
+"bk c #202931",
+"ht c #202c36",
+"eF c #202f3e",
+"b7 c #203245",
+"cB c #203246",
+"hG c #212121",
+"aE c #212932",
+"bp c #212a32",
+"hl c #212d38",
+"cc c #213347",
+".M c #214eb7",
+"hF c #222222",
+"#7 c #222a32",
+"fw c #223040",
+"eU c #223141",
+"jC c #232323",
+"bb c #232c35",
+"ga c #23303d",
+"cv c #23364a",
+"cn c #23364b",
+"jl c #242424",
+"gj c #243240",
+"cm c #24374c",
+"c. c #24384d",
+"bF c #252525",
+"be c #252f39",
+"gt c #253341",
+"dU c #253649",
+".Y c #256cc9",
+"jG c #262626",
+"h8 c #26333d",
+"hb c #263440",
+"gs c #263443",
+"cr c #263b51",
+"cW c #272727",
+"aC c #27313b",
+"a9 c #27313c",
+"fk c #273748",
+"eR c #27384b",
+"cq c #273d55",
+"jV c #282828",
+"#5 c #28313b",
+"b0 c #2877ce",
+"gL c #292929",
+"#Y c #29323c",
+"hu c #293744",
+"fK c #293a4d",
+"jP c #2a2a2a",
+"#w c #2a323b",
+"bg c #2a3540",
+"dF c #2a3f55",
+"jn c #2b2b2b",
+"a6 c #2b3641",
+"jY c #2c2c2c",
+"h5 c #2c3b47",
+"hp c #2c3c4a",
+"gp c #2c3c4d",
+"cx c #2c445e",
+"bU c #2d2d2d",
+"h# c #2d3e4c",
+"dS c #2d435b",
+"e5 c #2e2e2e",
+"cG c #2e4762",
+"jF c #2f2f2f",
+"aG c #2f3b48",
+"gU c #2f3f4e",
+"ck c #2f4966",
+"j0 c #303030",
+"a0 c #303d4a",
+"he c #304251",
+"cQ c #307ace",
+"e4 c #313131",
+"ew c #31465d",
+"dW c #314862",
+"ce c #314b68",
+"jm c #323232",
+"bm c #323f4d",
+"k. c #333333",
+"e3 c #343434",
+"hi c #344757",
+"eT c #344b64",
+"b8 c #34506f",
+"dj c #347fd1",
+"bX c #353535",
+"f9 c #35485c",
+"ac c #363636",
+"#V c #36434f",
+"fv c #364c64",
+"dV c #36506d",
+"c2 c #373737",
+"ev c #37506a",
+"bI c #383838",
+"bw c #384655",
+"h4 c #384b5a",
+"hk c #384c5d",
+"ea c #393939",
+"bh c #394857",
+"gX c #394d5f",
+"#e c #3981d2",
+"e6 c #3a3a3a",
+"eS c #3a546f",
+"em c #3a81d2",
+"#F c #3b3b3b",
+"eQ c #3b5571",
+"dT c #3b5776",
+"cI c #3b5c7f",
+"gJ c #3c3c3c",
+"hX c #3c5060",
+"fi c #3c546f",
+"gG c #3d3d3d",
+"jv c #3e3e3e",
+"az c #3e4e5e",
+"fL c #3e5772",
+"bK c #3f3f3f",
+"gD c #3f576f",
+"fJ c #3f5874",
+"d2 c #3f86d5",
+"jx c #404040",
+"#8 c #404e5d",
+"bv c #405161",
+"cf c #406389",
+"jL c #414141",
+"iG c #415561",
+"im c #415663",
+"gz c #415971",
+"et c #415d7c",
+"cz c #41658c",
+"f# c #418ad7",
+"jT c #424242",
+"gy c #425b74",
+"fs c #425d7a",
+"#K c #4288d4",
+"jQ c #434343",
+"eX c #438cda",
+"j8 c #444444",
+".L c #44449a",
+"eZ c #454545",
+"#s c #455362",
+"fx c #45617f",
+"cK c #456b94",
+"aP c #458cd5",
+"ab c #464646",
+".n c #46469f",
+"aH c #46586a",
+"gV c #465f74",
+"d0 c #46678c",
+"c9 c #474747",
+"aF c #47596c",
+"a3 c #475a6d",
+"ex c #476687",
+"jU c #484848",
+"by c #485b6e",
+"gq c #48627d",
+"dI c #486b91",
+"cC c #48709b",
+"js c #494949",
+"#2 c #495a6b",
+"ih c #49606f",
+"hm c #49637a",
+"gk c #49647f",
+"j7 c #4a4a4a",
+"dt c #4a6e94",
+"ak c #4a8dd7",
+"b1 c #4a90db",
+"c1 c #4b4b4b",
+"bx c #4b5f72",
+"fr c #4b698a",
+"dG c #4b6e95",
+"co c #4b75a2",
+"fW c #4b91db",
+"bD c #4c4c4c",
+"hc c #4c687f",
+"j6 c #4d4d4d",
+"#Q c #4d5f71",
+"ik c #4d6676",
+"hH c #4e4e4e",
+"#0 c #4e5f72",
+"aD c #4e6277",
+"b. c #4e6377",
+"gN c #4e91dc",
+"c0 c #4f4f4f",
+"bj c #4f6378",
+"dZ c #4f759e",
+"cD c #4f7aa9",
+"hN c #4f8dcd",
+"kd c #505050",
+"#S c #506275",
+"#6 c #506376",
+"ge c #506e8c",
+"af c #515151",
+"b# c #51667b",
+"dk c #5195df",
+"cT c #525252",
+".c c #525280",
+"bq c #52677d",
+"iH c #526b79",
+"fj c #527397",
+"eW c #52769d",
+"dy c #527aa5",
+"hJ c #535353",
+"#x c #536476",
+"eG c #53789f",
+"jM c #545454",
+"#r c #546577",
+"bz c #546a80",
+"dM c #547ca8",
+"fP c #5499e2",
+"jp c #555555",
+"iK c #556f7e",
+"bM c #565656",
+"fB c #56799f",
+"dC c #567fab",
+"gE c #569be2",
+"cU c #575757",
+"h7 c #57748b",
+"gc c #577797",
+"fN c #577ba1",
+"dx c #5780ad",
+"cg c #5787bb",
+"i4 c #585858",
+"iF c #587483",
+"hy c #587792",
+"g2 c #587893",
+"fy c #587ca3",
+"eA c #587ea7",
+"jW c #595959",
+"bu c #597087",
+"ia c #5984b2",
+"ae c #5a5a5a",
+"#t c #5a6c7f",
+"bd c #5a7189",
+"ij c #5a7789",
+"eI c #5a81ab",
+"bR c #5b5b5b",
+"ch c #5b8dc3",
+"en c #5b9be1",
+"ke c #5c5c5c",
+"cP c #5c8fc5",
+"j5 c #5d5d5d",
+"iN c #5d7fa0",
+"gl c #5d80a3",
+"fp c #5d83ac",
+"cl c #5d8fc6",
+"b2 c #5d9de6",
+"c8 c #5e5e5e",
+"hh c #5e7f9c",
+"hn c #5e809d",
+"i3 c #5f5f5f",
+"#1 c #5f758c",
+"a8 c #5f7890",
+"g7 c #5f819e",
+"cJ c #5f93cc",
+"jz c #606060",
+"ct c #6094cd",
+"bO c #616161",
+"eN c #618cb9",
+"jH c #626262",
+"iW c #627c8d",
+"hd c #6285a3",
+"ey c #628dbb",
+"dO c #6290c4",
+"ca c #6297d1",
+"jI c #636363",
+"eM c #638fbd",
+"jN c #646464",
+"fH c #648db9",
+"eE c #648fbe",
+"cb c #649ad5",
+"hA c #64a8e2",
+"jw c #656565",
+"#k c #65798f",
+"fF c #658eba",
+"fA c #658fbb",
+"fa c #65a4e7",
+"b3 c #65a6e8",
+"jX c #666666",
+"hW c #6688a3",
+"gh c #668cb2",
+"aI c #6696cb",
+"dN c #6697cc",
+"bA c #6699ce",
+"cu c #669edb",
+"#C c #676767",
+"f3 c #678db4",
+"dl c #67a6eb",
+"kc c #686868",
+"cS c #696969",
+"dK c #699bd2",
+"cN c #69a2e0",
+"cy c #69a3e1",
+"fX c #69a6e8",
+"jD c #6a6a6a",
+"av c #6a84a1",
+"ds c #6a9cd3",
+"dL c #6a9cd4",
+"jt c #6b6b6b",
+"fo c #6b97c6",
+"cE c #6ba5e4",
+"jS c #6c6c6c",
+"aV c #6c88a4",
+"ir c #6c8ea4",
+"il c #6c8fa5",
+"eD c #6c9bce",
+"dB c #6c9ed7",
+"dq c #6c9fd8",
+"cM c #6ca7e7",
+"cp c #6ca8e8",
+"eo c #6cabed",
+"i2 c #6d6d6d",
+"#T c #6d869f",
+"#W c #6d87a0",
+"gY c #6d94b5",
+"aa c #6d9bcb",
+"eB c #6d9dd0",
+"dw c #6da0d9",
+"dD c #6da1da",
+"b4 c #6dacee",
+"h9 c #6dafe2",
+"i6 c #6e6e6e",
+"bt c #6e8aa7",
+"fM c #6e9bcb",
+"dP c #6ea3dc",
+"b5 c #6eabee",
+"jd c #707070",
+"ix c #7088a2",
+"hx c #7098ba",
+"f7 c #7099c3",
+"dv c #70a5df",
+"b6 c #70adef",
+"iy c #70aff1",
+"dm c #70aff2",
+"jE c #717171",
+"#m c #7188a0",
+"#u c #7189a1",
+"aY c #718eac",
+"gO c #71aced",
+"jq c #727272",
+"gb c #729cc6",
+"hO c #72afee",
+"ib c #72afef",
+"e7 c #737373",
+"#y c #738ba4",
+"#A c #739eca",
+".j c #747474",
+"#9 c #748fab",
+"hs c #749ec1",
+"f6 c #749fca",
+".i c #757575",
+"#q c #758da6",
+"a5 c #7593b1",
+"bo c #7594b2",
+"ii c #759bb3",
+"fb c #75b3f4",
+"ep c #75b4f3",
+"is c #75b8e2",
+"ag c #767676",
+"fz c #76a6da",
+"ez c #76a9e0",
+"dX c #76adeb",
+".h c #777777",
+".m c #777794",
+"iX c #77a6b3",
+"dn c #77b1f4",
+"gK c #787878",
+"#4 c #7894b0",
+"fG c #78a9dd",
+"j# c #797979",
+"bV c #7a7a7a",
+"do c #7ab4f4",
+"jA c #7b7b7b",
+"io c #7ba3bc",
+"dp c #7bb5f5",
+".k c #7c7c7c",
+"bc c #7c9cbd",
+"gi c #7caad8",
+"aQ c #7cb0e7",
+"fY c #7cb8f9",
+"iM c #7cbee2",
+"j1 c #7d7d7d",
+"aX c #7d9ebf",
+"fm c #7db0e7",
+"j4 c #7e7e7e",
+".8 c #7ea5ce",
+"#D c #7f7f7f",
+"hv c #7facd3",
+"gn c #7faedd",
+"eb c #808080",
+"er c #80bdf9",
+"j3 c #818181",
+"hz c #81afd6",
+"gu c #81b0e0",
+"eq c #81bbf9",
+"fc c #81bbfc",
+"#b c #828282",
+"iE c #82aac0",
+"i5 c #838383",
+"ha c #83b1d9",
+"es c #83bcf9",
+"ad c #848484",
+"go c #84b5e6",
+".v c #858585",
+"#p c #85a0bc",
+"bN c #868686",
+"hZ c #86b3d6",
+"fD c #86bcf6",
+"fO c #86bcf7",
+"gP c #86c1ff",
+"di c #878787",
+"ft c #87bdf8",
+"bH c #888888",
+"iT c #88cfe2",
+"jZ c #898989",
+"#z c #89a5c3",
+"g. c #89bbee",
+"fg c #89c0fc",
+"fd c #89c2fd",
+"hP c #89c3ff",
+"jb c #8a8a8a",
+"#o c #8aa6c4",
+"jc c #8b8b8b",
+".S c #8baccf",
+"iI c #8bb6ce",
+"al c #8bb9e8",
+"hj c #8bbde7",
+"gw c #8bbef2",
+"ff c #8bc3ff",
+"fe c #8bc4ff",
+"fZ c #8bc6ff",
+"ec c #8c8c8c",
+"gv c #8cbff3",
+"jO c #8d8d8d",
+"a# c #8dadce",
+"ic c #8dc7ff",
+"#H c #8e8e8e",
+"a. c #8eaed0",
+"#L c #8ebae8",
+"hY c #8ebee3",
+"g4 c #8ec1ec",
+"iO c #8ecbff",
+"ju c #8f8f8f",
+"bi c #8fb5da",
+"h6 c #8fc0e5",
+"f5 c #8fc4f9",
+"jf c #909090",
+"bl c #90b6dc",
+"i1 c #90dfe2",
+"bC c #919191",
+"aB c #91b5dc",
+"aZ c #91b7dd",
+"hV c #91c2e8",
+"gf c #91c6fc",
+"gg c #91c7fd",
+"f0 c #91c8ff",
+"i7 c #929292",
+"gA c #92c8fe",
+"iz c #92ccff",
+"iU c #939393",
+"a7 c #93b9e0",
+"f2 c #93c9ff",
+"gQ c #93ccff",
+"e8 c #949494",
+".y c #9494b0",
+"h1 c #94c6ec",
+"f1 c #94caff",
+"j9 c #959595",
+"#X c #95b7da",
+"cX c #969696",
+"ay c #96bbe3",
+"#f c #96bde8",
+"aR c #96c3ee",
+"gR c #96cfff",
+".J c #979797",
+"hQ c #97cfff",
+"fT c #989898",
+"#j c #98b6d7",
+"#l c #98b7d8",
+"iJ c #98c7e1",
+"g6 c #98cffd",
+"jj c #999999",
+"aS c #99c4ee",
+"h3 c #99ccf4",
+"gS c #99d0ff",
+".l c #9a9a9a",
+".b c #9a9aa4",
+"aw c #9ac1ea",
+"gT c #9ad1ff",
+"dg c #9b9b9b",
+".N c #9bbee8",
+"aq c #9bc1eb",
+"am c #9bc4ee",
+"eg c #9c9c9c",
+"au c #9cc3ed",
+"ao c #9cc5ee",
+"c5 c #9d9d9d",
+"aT c #9dc7ef",
+"hU c #9dd2fb",
+"hR c #9dd3ff",
+"dh c #9e9e9e",
+"#v c #9ebee0",
+".Z c #9ec3e8",
+"#M c #9ec3ed",
+"#N c #9ec5ed",
+"ap c #9ec5ef",
+"aU c #9ec7f0",
+"h2 c #9ed4fd",
+"id c #9ed6ff",
+"df c #9f9f9f",
+"an c #9fc5ee",
+"h0 c #9fd5fe",
+"aM c #a0a0a0",
+"hT c #a0d6ff",
+"jh c #a1a1a1",
+"hS c #a1d7ff",
+"ji c #a2a2a2",
+"#P c #a2c7ed",
+"i8 c #a3a3a3",
+"#O c #a3c8ed",
+"iA c #a3daff",
+"j. c #a4a4a4",
+"je c #a5a5a5",
+"#g c #a5c8ed",
+"ip c #a5dafb",
+"iv c #a6a6a6",
+".F c #a6bed4",
+"de c #a7a7a7",
+"#h c #a7c9ed",
+"if c #a7ddff",
+"ie c #a7deff",
+"eh c #a8a8a8",
+"#i c #a8caee",
+"iL c #a8dbf8",
+"ig c #a8deff",
+"iP c #a8e0ff",
+"iY c #a8e2e6",
+"hC c #a9a9a9",
+".0 c #a9caed",
+"#B c #aaaaaa",
+"fU c #ababab",
+".5 c #abc9e9",
+"iB c #abe3ff",
+"e2 c #acacac",
+".6 c #accaea",
+"jo c #adadad",
+".1 c #adcbed",
+".7 c #adccec",
+"iD c #ade2ff",
+"iC c #ade3ff",
+"fS c #aeaeae",
+".4 c #aecded",
+"db c #afafaf",
+".A c #afbbe7",
+".2 c #afccee",
+".3 c #afceee",
+"d6 c #b0b0b0",
+"iQ c #b0e9ff",
+"bG c #b1b1b1",
+"jg c #b2b2b2",
+"#E c #b3b3b3",
+".O c #b3d1ed",
+"gF c #b4b4b4",
+"cY c #b5b5b5",
+"iR c #b5ebff",
+"hM c #b6b6b6",
+"iS c #b6ecff",
+"d9 c #b7b7b7",
+".U c #b8b8b8",
+".u c #b9b9b9",
+"dd c #bababa",
+".P c #bad4ee",
+"bL c #bbbbbb",
+".Q c #bbd4ef",
+".R c #bbd5f0",
+"e9 c #bcbcbc",
+"c3 c #bdbdbd",
+"f. c #bebebe",
+"d8 c #bfbfbf",
+".o c #bfc2e8",
+"iZ c #bffdff",
+"iw c #c0c0c0",
+"iV c #c1c1c1",
+"i0 c #c1feff",
+"ei c #c2c2c2",
+"ej c #c3c3c3",
+"#a c #c4c4c4",
+"el c #c5c5c5",
+"d7 c #c6c6c6",
+".r c #c6cbda",
+"ek c #c7c7c7",
+"aN c #c8c8c8",
+"#G c #c9c9c9",
+"aL c #cacaca",
+"ai c #cbcbcb",
+".B c #cbddf2",
+"bZ c #cccccc",
+".C c #cce0f3",
+"dc c #cdcdcd",
+"ah c #cecece",
+"da c #cfcfcf",
+".E c #cfe1f3",
+".D c #cfe1f4",
+"#I c #d0d0d0",
+"cV c #d1d1d1",
+"fQ c #d2d2d2",
+"bB c #d3d3d3",
+"#c c #d4d4d4",
+"d# c #d5d5d5",
+"aK c #d6d6d6",
+"cZ c #d7d7d7",
+"c6 c #d8d8d8",
+"gH c #d9d9d9",
+".W c #dadada",
+"gM c #dbdbdb",
+"bQ c #dcdcdc",
+"e1 c #dddddd",
+"cR c #dedede",
+"d. c #dfdfdf",
+"bP c #e0e0e0",
+"i# c #e1e1e1",
+"bY c #e2e2e2",
+".K c #e3e3e3",
+"ee c #e4e4e4",
+"d3 c #e5e5e5",
+"ef c #e6e6e6",
+".p c #e6e9f6",
+"fV c #e7e7e7",
+"eY c #e8e8e8",
+".a c #e9e9e9",
+".q c #e9edf8",
+".V c #eaeaea",
+"## c #ebebeb",
+"Qt c #ececec",
+".w c #ededed",
+".x c #eeeeee",
+"#. c #efefef",
+".# c #f0f0f0",
+".9 c #f1f1f1",
+".I c #f2f2f2",
+".T c #f3f3f3",
+"ja c #f4f4f4",
+"i9 c #f5f5f5",
+"hB c #f6f6f6",
+".H c #f7f7f7",
+".G c #f8f8f8",
+"i. c #f9f9f9",
+"kg c #fafafa",
+"kf c #fbfbfb",
+".t c #fcfcfc",
+".s c #fdfdfd",
+"it c #fefefe",
+"iu c #ffffff",
+"#RQtQtQtQtQtQt#R",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt",
+"#RQtQtQtQtQtQt#R"};
diff --git a/tests/auto/gui/image/qimagereader/images/trolltech.gif b/tests/auto/gui/image/qimagereader/images/trolltech.gif
new file mode 100644
index 0000000000..f674369efc
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/trolltech.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tst7.bmp b/tests/auto/gui/image/qimagereader/images/tst7.bmp
new file mode 100644
index 0000000000..6d3ac9241c
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tst7.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/tst7.png b/tests/auto/gui/image/qimagereader/images/tst7.png
new file mode 100644
index 0000000000..96efae4e79
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/tst7.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/images/txts.png b/tests/auto/gui/image/qimagereader/images/txts.png
new file mode 100755
index 0000000000..99be1eb4f9
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/images/txts.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagereader/qimagereader.pro b/tests/auto/gui/image/qimagereader/qimagereader.pro
new file mode 100644
index 0000000000..43d587ea48
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/qimagereader.pro
@@ -0,0 +1,36 @@
+load(qttest_p4)
+SOURCES += tst_qimagereader.cpp
+MOC_DIR=tmp
+QT += widgets widgets-private core-private gui-private network
+RESOURCES += qimagereader.qrc
+!symbian:DEFINES += SRCDIR=\\\"$$PWD\\\"
+
+win32-msvc:QMAKE_CXXFLAGS -= -Zm200
+win32-msvc:QMAKE_CXXFLAGS += -Zm800
+win32-msvc.net:QMAKE_CXXFLAGS -= -Zm300
+win32-msvc.net:QMAKE_CXXFLAGS += -Zm1100
+
+wince*: {
+ images.files = images
+ images.path = .
+
+ imagePlugins.files = $$QT_BUILD_TREE/plugins/imageformats/*.dll
+ imagePlugins.path = imageformats
+
+ DEPLOYMENT += images imagePlugins
+ DEFINES += SRCDIR=\\\".\\\"
+}
+
+symbian: {
+ images.files = images
+ images.path = .
+
+ DEPLOYMENT += images
+
+ qt_not_deployed {
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll
+ imagePlugins.path = imageformats
+
+ DEPLOYMENT += imagePlugins
+ }
+}
diff --git a/tests/auto/gui/image/qimagereader/qimagereader.qrc b/tests/auto/gui/image/qimagereader/qimagereader.qrc
new file mode 100644
index 0000000000..2c70652389
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/qimagereader.qrc
@@ -0,0 +1,71 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/16bpp.bmp</file>
+ <file>images/4bpp-rle.bmp</file>
+ <file>images/YCbCr_cmyk.jpg</file>
+ <file>images/YCbCr_cmyk.png</file>
+ <file>images/YCbCr_rgb.jpg</file>
+ <file>images/away.png</file>
+ <file>images/ball.mng</file>
+ <file>images/bat1.gif</file>
+ <file>images/bat2.gif</file>
+ <file>images/beavis.jpg</file>
+ <file>images/black.png</file>
+ <file>images/black.xpm</file>
+ <file>images/colorful.bmp</file>
+ <file>images/corrupt-colors.xpm</file>
+ <file>images/corrupt-pixels.xpm</file>
+ <file>images/corrupt.bmp</file>
+ <file>images/corrupt.gif</file>
+ <file>images/corrupt.jpg</file>
+ <file>images/corrupt.mng</file>
+ <file>images/corrupt.png</file>
+ <file>images/corrupt.xbm</file>
+ <file>images/crash-signed-char.bmp</file>
+ <file>images/earth.gif</file>
+ <file>images/fire.mng</file>
+ <file>images/font.bmp</file>
+ <file>images/gnus.xbm</file>
+ <file>images/image.pbm</file>
+ <file>images/image.pgm</file>
+ <file>images/image.png</file>
+ <file>images/image.ppm</file>
+ <file>images/image_100dpi.tif</file>
+ <file>images/kollada.png</file>
+ <file>images/marble.xpm</file>
+ <file>images/namedcolors.xpm</file>
+ <file>images/negativeheight.bmp</file>
+ <file>images/noclearcode.bmp</file>
+ <file>images/noclearcode.gif</file>
+ <file>images/nontransparent.xpm</file>
+ <file>images/runners.ppm</file>
+ <file>images/teapot.ppm</file>
+ <file>images/test.ppm</file>
+ <file>images/test.xpm</file>
+ <file>images/test32bfv4.bmp</file>
+ <file>images/test32v5.bmp</file>
+ <file>images/tst7.bmp</file>
+ <file>images/tst7.png</file>
+ <file>images/transparent.xpm</file>
+ <file>images/trolltech.gif</file>
+ <file>images/qt.gif</file>
+ <file>images/qt1.gif</file>
+ <file>images/qt2.gif</file>
+ <file>images/qt3.gif</file>
+ <file>images/qt4.gif</file>
+ <file>images/qt5.gif</file>
+ <file>images/qt6.gif</file>
+ <file>images/qt7.gif</file>
+ <file>images/qt8.gif</file>
+ <file>images/endless-anim.gif</file>
+ <file>images/four-frames.gif</file>
+ <file>images/qt-gif-anim.gif</file>
+ <file>images/qt-gif-noanim.gif</file>
+ <file>images/rect.svg</file>
+ <file>images/rect.svgz</file>
+ <file>images/corrupt.svg</file>
+ <file>images/corrupt.svgz</file>
+ <file>images/qtbug13653-no_eoi.jpg</file>
+ <file>images/txts.png</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
new file mode 100644
index 0000000000..ffedc69a7f
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
@@ -0,0 +1,2026 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include <QBuffer>
+#include <QDebug>
+#include <QFile>
+#include <QImage>
+#include <QImageReader>
+#include <QImageWriter>
+#include <QLabel>
+#include <QPixmap>
+#include <QSet>
+#include <QTcpSocket>
+#include <QTcpServer>
+#include <QTimer>
+
+#include "../../../platformquirks.h"
+
+#if defined(Q_OS_SYMBIAN)
+# define SRCDIR "."
+#endif
+
+typedef QMap<QString, QString> QStringMap;
+typedef QList<int> QIntList;
+Q_DECLARE_METATYPE(QImage)
+Q_DECLARE_METATYPE(QRect)
+Q_DECLARE_METATYPE(QSize)
+Q_DECLARE_METATYPE(QColor)
+Q_DECLARE_METATYPE(QStringMap)
+Q_DECLARE_METATYPE(QIntList)
+Q_DECLARE_METATYPE(QIODevice *)
+Q_DECLARE_METATYPE(QImage::Format)
+
+//TESTED_FILES=
+
+class tst_QImageReader : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QImageReader();
+ virtual ~tst_QImageReader();
+
+public slots:
+ void init();
+ void cleanup();
+
+private slots:
+ void getSetCheck();
+ void readImage_data();
+ void readImage();
+ void jpegRgbCmyk();
+
+ void setScaledSize_data();
+ void setScaledSize();
+
+ void setClipRect_data();
+ void setClipRect();
+
+ void setScaledClipRect_data();
+ void setScaledClipRect();
+
+ void imageFormat_data();
+ void imageFormat();
+
+ void blackXPM();
+ void transparentXPM();
+ void multiWordNamedColorXPM();
+
+ void supportedFormats();
+
+ void readFromDevice_data();
+ void readFromDevice();
+
+ void readFromFileAfterJunk_data();
+ void readFromFileAfterJunk();
+
+ void devicePosition_data();
+ void devicePosition();
+
+ void setBackgroundColor_data();
+ void setBackgroundColor();
+
+ void supportsAnimation_data();
+ void supportsAnimation();
+
+ void readFromResources_data();
+ void readFromResources();
+
+ void dotsPerMeter_data();
+ void dotsPerMeter();
+
+ void physicalDpi_data();
+ void physicalDpi();
+
+ void sizeBeforeRead_data();
+ void sizeBeforeRead();
+
+ void sizeBeforeFormat_data();
+ void sizeBeforeFormat();
+
+ void imageFormatBeforeRead_data();
+ void imageFormatBeforeRead();
+
+ void gifHandlerBugs();
+ void animatedGif();
+ void gifImageCount();
+ void gifLoopCount();
+
+ void readCorruptImage_data();
+ void readCorruptImage();
+ void readCorruptBmp();
+
+ void supportsOption_data();
+ void supportsOption();
+
+ void tiffCompression_data();
+ void tiffCompression();
+ void tiffEndianness();
+
+ void tiffOrientation_data();
+ void tiffOrientation();
+
+ void tiffGrayscale();
+
+ void autoDetectImageFormat();
+ void fileNameProbing();
+
+ void pixelCompareWithBaseline_data();
+ void pixelCompareWithBaseline();
+
+ void task255627_setNullScaledSize_data();
+ void task255627_setNullScaledSize();
+
+ void testIgnoresFormatAndExtension_data();
+ void testIgnoresFormatAndExtension();
+
+ void saveFormat_data();
+ void saveFormat();
+
+ void readText_data();
+ void readText();
+
+ void preserveTexts_data();
+ void preserveTexts();
+};
+
+static const QLatin1String prefix(SRCDIR "/images/");
+
+// helper to skip an autotest when the given image format is not supported
+#define SKIP_IF_UNSUPPORTED(format) do { \
+ if (!QByteArray(format).isEmpty() && !QImageReader::supportedImageFormats().contains(format)) \
+ QSKIP("\"" + QByteArray(format) + "\" images are not supported", SkipSingle); \
+} while (0)
+
+// Testing get/set functions
+void tst_QImageReader::getSetCheck()
+{
+ QImageReader obj1;
+ // QIODevice * QImageReader::device()
+ // void QImageReader::setDevice(QIODevice *)
+ QFile *var1 = new QFile;
+ obj1.setDevice(var1);
+
+ //A bit strange but that's the only way to compile under windows.
+ QCOMPARE((QIODevice *) var1, obj1.device());
+ obj1.setDevice((QIODevice *)0);
+ QCOMPARE((QIODevice *) 0,
+ obj1.device());
+ delete var1;
+}
+
+tst_QImageReader::tst_QImageReader()
+{
+}
+
+tst_QImageReader::~tst_QImageReader()
+{
+
+}
+
+void tst_QImageReader::init()
+{
+}
+
+void tst_QImageReader::cleanup()
+{
+}
+
+void tst_QImageReader::readImage_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<bool>("success");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("empty") << QString() << false << QByteArray();
+ QTest::newRow("BMP: colorful") << QString("colorful.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: font") << QString("font.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: 4bpp RLE") << QString("4bpp-rle.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: 4bpp uncompressed") << QString("tst7.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: 16bpp") << QString("16bpp.bmp") << true << QByteArray("bmp");
+ QTest::newRow("BMP: negative height") << QString("negativeheight.bmp") << true << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << QString("marble.xpm") << true << QByteArray("xpm");
+ QTest::newRow("PNG: kollada") << QString("kollada.png") << true << QByteArray("png");
+ QTest::newRow("PPM: teapot") << QString("teapot.ppm") << true << QByteArray("ppm");
+ QTest::newRow("PPM: runners") << QString("runners.ppm") << true << QByteArray("ppm");
+ QTest::newRow("PPM: test") << QString("test.ppm") << true << QByteArray("ppm");
+ QTest::newRow("XBM: gnus") << QString("gnus.xbm") << true << QByteArray("xbm");
+
+ QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg");
+ QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg");
+
+ QTest::newRow("GIF: earth") << QString("earth.gif") << true << QByteArray("gif");
+ QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true << QByteArray("gif");
+
+ QTest::newRow("MNG: ball") << QString("ball.mng") << true << QByteArray("mng");
+ QTest::newRow("MNG: fire") << QString("fire.mng") << true << QByteArray("mng");
+
+ QTest::newRow("SVG: rect") << QString("rect.svg") << true << QByteArray("svg");
+ QTest::newRow("SVGZ: rect") << QString("rect.svgz") << true << QByteArray("svgz");
+}
+
+void tst_QImageReader::readImage()
+{
+ QFETCH(QString, fileName);
+ QFETCH(bool, success);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ for (int i = 0; i < 2; ++i) {
+ QImageReader io(prefix + fileName, i ? QByteArray() : format);
+ if (success) {
+ if (!io.supportsAnimation())
+ QVERIFY(io.imageCount() > 0);
+ } else {
+ QCOMPARE(io.imageCount(), -1);
+ }
+ QImage image = io.read();
+ if (!success) {
+ QVERIFY(image.isNull());
+ return;
+ }
+
+ QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData());
+
+ // No format
+ QImageReader io2(prefix + fileName);
+ QVERIFY2(!io2.read().isNull(), io.errorString().toLatin1().constData());
+
+ // No extension, no format
+ QImageReader io3(prefix + fileName.left(fileName.lastIndexOf(QLatin1Char('.'))));
+ QVERIFY2(!io3.read().isNull(), io.errorString().toLatin1().constData());
+
+ // Read into \a image2
+ QImage image2;
+ QImageReader image2Reader(prefix + fileName, i ? QByteArray() : format);
+ QCOMPARE(image2Reader.format(), format);
+ QVERIFY(image2Reader.read(&image2));
+ if (image2Reader.canRead()) {
+ if (i)
+ QVERIFY(!image2Reader.format().isEmpty());
+ else
+ QCOMPARE(image2Reader.format(), format);
+ } else {
+ if (i)
+ QVERIFY(image2Reader.format().isEmpty());
+ else
+ QVERIFY(!image2Reader.format().isEmpty());
+ }
+ QCOMPARE(image, image2);
+ do {
+ QVERIFY2(!image.isNull(), io.errorString().toLatin1().constData());
+ } while (!(image = io.read()).isNull());
+ }
+}
+
+void tst_QImageReader::jpegRgbCmyk()
+{
+ QImage image1(prefix + QLatin1String("YCbCr_cmyk.jpg"));
+ QImage image2(prefix + QLatin1String("YCbCr_cmyk.png"));
+
+ if (PlatformQuirks::isImageLoaderImprecise()) {
+ // first, do some obvious tests
+ QCOMPARE(image1.height(), image2.height());
+ QCOMPARE(image1.width(), image2.width());
+ QCOMPARE(image1.format(), image2.format());
+ QCOMPARE(image1.format(), QImage::Format_RGB32);
+
+ // compare all the pixels with a slack of 3. This ignores rounding errors in libjpeg/libpng
+ for (int h = 0; h < image1.height(); ++h) {
+ const uchar *s1 = image1.constScanLine(h);
+ const uchar *s2 = image2.constScanLine(h);
+ for (int w = 0; w < image1.width() * 4; ++w) {
+ if (*s1 != *s2) {
+ QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16)));
+ }
+ s1++;
+ s2++;
+ }
+ }
+ } else {
+ QCOMPARE(image1, image2);
+ }
+}
+
+void tst_QImageReader::setScaledSize_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QSize>("newSize");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("BMP: colorful") << "colorful" << QSize(200, 200) << QByteArray("bmp");
+ QTest::newRow("BMP: font") << "font" << QSize(200, 200) << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << "marble" << QSize(200, 200) << QByteArray("xpm");
+ QTest::newRow("PNG: kollada") << "kollada" << QSize(200, 200) << QByteArray("png");
+ QTest::newRow("PPM: teapot") << "teapot" << QSize(200, 200) << QByteArray("ppm");
+ QTest::newRow("PPM: runners") << "runners.ppm" << QSize(400, 400) << QByteArray("ppm");
+ QTest::newRow("PPM: test") << "test.ppm" << QSize(10, 10) << QByteArray("ppm");
+ QTest::newRow("XBM: gnus") << "gnus" << QSize(200, 200) << QByteArray("xbm");
+
+ QTest::newRow("JPEG: beavis A") << "beavis" << QSize(200, 200) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis B") << "beavis" << QSize(175, 175) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis C") << "beavis" << QSize(100, 100) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis D") << "beavis" << QSize(100, 200) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis E") << "beavis" << QSize(200, 100) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis F") << "beavis" << QSize(87, 87) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis G") << "beavis" << QSize(50, 45) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis H") << "beavis" << QSize(43, 43) << QByteArray("jpeg");
+ QTest::newRow("JPEG: beavis I") << "beavis" << QSize(25, 25) << QByteArray("jpeg");
+
+ QTest::newRow("GIF: earth") << "earth" << QSize(200, 200) << QByteArray("gif");
+ QTest::newRow("GIF: trolltech") << "trolltech" << QSize(200, 200) << QByteArray("gif");
+
+ QTest::newRow("MNG: ball") << "ball" << QSize(200, 200) << QByteArray("mng");
+ QTest::newRow("MNG: fire") << "fire" << QSize(200, 200) << QByteArray("mng");
+
+ QTest::newRow("SVG: rect") << "rect" << QSize(200, 200) << QByteArray("svg");
+ QTest::newRow("SVGZ: rect") << "rect" << QSize(200, 200) << QByteArray("svgz");
+}
+
+void tst_QImageReader::setScaledSize()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QSize, newSize);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(prefix + fileName);
+ reader.setScaledSize(newSize);
+ QImage image = reader.read();
+ QVERIFY(!image.isNull());
+
+ QCOMPARE(image.size(), newSize);
+}
+
+void tst_QImageReader::task255627_setNullScaledSize_data()
+{
+ setScaledSize_data();
+}
+
+void tst_QImageReader::task255627_setNullScaledSize()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(prefix + fileName);
+
+ // set a null size
+ reader.setScaledSize(QSize(0, 0));
+ reader.setQuality(0);
+ QImage image = reader.read();
+ QVERIFY(image.isNull());
+ QCOMPARE(image.size(), QSize(0, 0));
+}
+
+void tst_QImageReader::setClipRect_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QRect>("newRect");
+ QTest::addColumn<QByteArray>("format");
+ QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: 4bpp uncompressed") << "tst7.bmp" << QRect(0, 0, 31, 31) << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm");
+ QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png");
+ QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm");
+
+ QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg");
+
+ QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif");
+ QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif");
+
+ QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
+ QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
+
+ QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg");
+ QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz");
+}
+
+void tst_QImageReader::setClipRect()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QRect, newRect);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(prefix + fileName);
+ reader.setClipRect(newRect);
+ QImage image = reader.read();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.rect(), newRect);
+
+ QImageReader originalReader(prefix + fileName);
+ QImage originalImage = originalReader.read();
+ QCOMPARE(originalImage.copy(newRect), image);
+}
+
+void tst_QImageReader::setScaledClipRect_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QRect>("newRect");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("BMP: colorful") << "colorful" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: test32bfv4") << "test32bfv4" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: test32v5") << "test32v5" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("BMP: font") << "font" << QRect(0, 0, 50, 50) << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << "marble" << QRect(0, 0, 50, 50) << QByteArray("xpm");
+ QTest::newRow("PNG: kollada") << "kollada" << QRect(0, 0, 50, 50) << QByteArray("png");
+ QTest::newRow("PPM: teapot") << "teapot" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("PPM: runners") << "runners.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("PPM: test") << "test.ppm" << QRect(0, 0, 50, 50) << QByteArray("ppm");
+ QTest::newRow("XBM: gnus") << "gnus" << QRect(0, 0, 50, 50) << QByteArray("xbm");
+
+ QTest::newRow("JPEG: beavis") << "beavis" << QRect(0, 0, 50, 50) << QByteArray("jpeg");
+
+ QTest::newRow("GIF: earth") << "earth" << QRect(0, 0, 50, 50) << QByteArray("gif");
+ QTest::newRow("GIF: trolltech") << "trolltech" << QRect(0, 0, 50, 50) << QByteArray("gif");
+
+ QTest::newRow("MNG: ball") << "ball" << QRect(0, 0, 50, 50) << QByteArray("mng");
+ QTest::newRow("MNG: fire") << "fire" << QRect(0, 0, 50, 50) << QByteArray("mng");
+
+ QTest::newRow("SVG: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svg");
+ QTest::newRow("SVGZ: rect") << "rect" << QRect(0, 0, 50, 50) << QByteArray("svgz");
+}
+
+void tst_QImageReader::setScaledClipRect()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QRect, newRect);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(prefix + fileName);
+ reader.setScaledSize(QSize(300, 300));
+ reader.setScaledClipRect(newRect);
+ QImage image = reader.read();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.rect(), newRect);
+
+ QImageReader originalReader(prefix + fileName);
+ originalReader.setScaledSize(QSize(300, 300));
+ QImage originalImage = originalReader.read();
+ QCOMPARE(originalImage.copy(newRect), image);
+}
+
+void tst_QImageReader::imageFormat_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+ QTest::addColumn<QImage::Format>("imageFormat");
+
+ QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm") << QImage::Format_Mono;
+ QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm") << QImage::Format_Indexed8;
+ QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm") << QImage::Format_RGB32;
+ QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm") << QImage::Format_RGB32;
+ QTest::newRow("ppm-3") << QString("runners.ppm") << QByteArray("ppm") << QImage::Format_RGB32;
+ QTest::newRow("ppm-4") << QString("test.ppm") << QByteArray("ppm") << QImage::Format_RGB32;
+
+ QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg") << QImage::Format_Indexed8;
+ QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg") << QImage::Format_RGB32;
+ QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg") << QImage::Format_RGB32;
+
+ QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif") << QImage::Format_Invalid;
+ QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif") << QImage::Format_Invalid;
+
+ QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm") << QImage::Format_MonoLSB;
+ QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm") << QImage::Format_Indexed8;
+ QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp") << QImage::Format_Indexed8;
+ QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp") << QImage::Format_Indexed8;
+ QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp") << QImage::Format_RGB32;
+ QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp") << QImage::Format_RGB32;
+ QTest::newRow("png") << QString("kollada.png") << QByteArray("png") << QImage::Format_ARGB32;
+ QTest::newRow("png-2") << QString("YCbCr_cmyk.png") << QByteArray("png") << QImage::Format_RGB32;
+ QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng") << QImage::Format_Invalid;
+ QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng") << QImage::Format_Invalid;
+ QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg") << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz") << QImage::Format_ARGB32_Premultiplied;
+}
+
+void tst_QImageReader::imageFormat()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+ QFETCH(QImage::Format, imageFormat);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QCOMPARE(QImageReader::imageFormat(prefix + fileName), format);
+ QImageReader reader(prefix + fileName);
+ QCOMPARE(reader.imageFormat(), imageFormat);
+}
+
+void tst_QImageReader::blackXPM()
+{
+ QImage image(prefix + QLatin1String("black.xpm"));
+ QImage image2(prefix + QLatin1String("black.png"));
+ QCOMPARE(image.pixel(25, 25), qRgb(190, 190, 190));
+ QCOMPARE(image.pixel(25, 25), image2.pixel(25, 25));
+}
+
+void tst_QImageReader::transparentXPM()
+{
+ QImage image(prefix + QLatin1String("nontransparent.xpm"));
+ QImage image2(prefix + QLatin1String("transparent.xpm"));
+ QCOMPARE(image.format(), QImage::Format_RGB32);
+ QCOMPARE(image2.format(), QImage::Format_ARGB32);
+}
+
+void tst_QImageReader::multiWordNamedColorXPM()
+{
+ QImage image(prefix + QLatin1String("namedcolors.xpm"));
+ QCOMPARE(image.pixel(0, 0), qRgb(102, 139, 139)); // pale turquoise 4
+ QCOMPARE(image.pixel(0, 1), qRgb(250, 250, 210)); // light golden rod yellow
+ QCOMPARE(image.pixel(0, 2), qRgb(255, 250, 205)); // lemon chiffon
+}
+
+void tst_QImageReader::supportedFormats()
+{
+ QList<QByteArray> formats = QImageReader::supportedImageFormats();
+ QList<QByteArray> sortedFormats = formats;
+ qSort(sortedFormats);
+
+ // check that the list is sorted
+ QCOMPARE(formats, sortedFormats);
+
+ QSet<QByteArray> formatSet;
+ foreach (QByteArray format, formats)
+ formatSet << format;
+
+ // check that the list does not contain duplicates
+ QCOMPARE(formatSet.size(), formats.size());
+}
+
+void tst_QImageReader::setBackgroundColor_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QColor>("color");
+
+ QTest::newRow("BMP: colorful") << QString("colorful.bmp") << QColor(Qt::white);
+ QTest::newRow("BMP: font") << QString("font.bmp") << QColor(Qt::black);
+ QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << QColor(Qt::red);
+ QTest::newRow("XPM: marble") << QString("marble.xpm") << QColor(Qt::darkRed);
+ QTest::newRow("PNG: kollada") << QString("kollada.png") << QColor(Qt::green);
+ QTest::newRow("PPM: teapot") << QString("teapot.ppm") << QColor(Qt::darkGreen);
+ QTest::newRow("PPM: runners") << QString("runners.ppm") << QColor(Qt::red);
+ QTest::newRow("PPM: test") << QString("test.ppm") << QColor(Qt::white);
+ QTest::newRow("XBM: gnus") << QString("gnus.xbm") << QColor(Qt::blue);
+
+ QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << QColor(Qt::darkBlue);
+
+ QTest::newRow("GIF: earth") << QString("earth.gif") << QColor(Qt::cyan);
+ QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << QColor(Qt::magenta);
+
+ QTest::newRow("MNG: ball") << QString("ball.mng") << QColor(Qt::yellow);
+ QTest::newRow("MNG: fire") << QString("fire.mng") << QColor(Qt::gray);
+
+ QTest::newRow("SVG: rect") << QString("rect.svg") << QColor(Qt::darkGreen);
+ QTest::newRow("SVGZ: rect") << QString("rect.svgz") << QColor(Qt::darkGreen);
+}
+
+void tst_QImageReader::setBackgroundColor()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QColor, color);
+ QImageReader io("images/" + fileName);
+ io.setBackgroundColor(color);
+ if (io.backgroundColor().isValid())
+ QCOMPARE(io.backgroundColor(), color);
+}
+
+void tst_QImageReader::supportsAnimation_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<bool>("success");
+
+ QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false;
+ QTest::newRow("BMP: font") << QString("font.bmp") << false;
+ QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << false;
+ QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << false;;
+ QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << false;
+ QTest::newRow("XPM: marble") << QString("marble.xpm") << false;
+ QTest::newRow("PNG: kollada") << QString("kollada.png") << false;
+ QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false;
+ QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false;
+ QTest::newRow("PPM: runners") << QString("runners.ppm") << false;
+ QTest::newRow("XBM: gnus") << QString("gnus.xbm") << false;
+
+ QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << false;
+
+ QTest::newRow("GIF: earth") << QString("earth.gif") << true;
+ QTest::newRow("GIF: trolltech") << QString("trolltech.gif") << true;
+
+ QTest::newRow("MNG: ball") << QString("ball.mng") << true;
+ QTest::newRow("MNG: fire") << QString("fire.mng") << true;
+
+ QTest::newRow("SVG: rect") << QString("rect.svg") << false;
+ QTest::newRow("SVGZ: rect") << QString("rect.svgz") << false;
+}
+
+void tst_QImageReader::supportsAnimation()
+{
+ QFETCH(QString, fileName);
+ QFETCH(bool, success);
+ QImageReader io(prefix + fileName);
+ QCOMPARE(io.supportsAnimation(), success);
+}
+
+void tst_QImageReader::sizeBeforeRead_data()
+{
+ imageFormat_data();
+}
+
+void tst_QImageReader::sizeBeforeRead()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(prefix + fileName);
+ QVERIFY(reader.canRead());
+ if (format == "mng") {
+ QCOMPARE(reader.size(), QSize());
+ return;
+ }
+
+ QSize size = reader.size();
+ QVERIFY(reader.canRead());
+ QImage image = reader.read();
+ QVERIFY(!image.isNull());
+ QCOMPARE(size, image.size());
+}
+
+void tst_QImageReader::sizeBeforeFormat_data()
+{
+ imageFormat_data();
+}
+
+void tst_QImageReader::sizeBeforeFormat()
+{
+ QFETCH(QString, fileName);
+
+ QByteArray formatA, formatB;
+
+ {
+ QImageReader reader(prefix + fileName);
+ formatA = reader.format();
+ }
+
+ {
+ QImageReader reader(prefix + fileName);
+ QSize size = reader.size();
+ formatB = reader.format();
+ }
+
+ QCOMPARE(formatA, formatB);
+}
+
+void tst_QImageReader::imageFormatBeforeRead_data()
+{
+ imageFormat_data();
+}
+
+void tst_QImageReader::imageFormatBeforeRead()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+ QFETCH(QImage::Format, imageFormat);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImageReader reader(fileName);
+ if (reader.supportsOption(QImageIOHandler::ImageFormat)) {
+ QImage::Format fileFormat = reader.imageFormat();
+ QCOMPARE(fileFormat, imageFormat);
+ QSize size = reader.size();
+ QImage image(size, fileFormat);
+ QVERIFY(reader.read(&image));
+ QCOMPARE(image.format(), fileFormat);
+ }
+}
+
+void tst_QImageReader::gifHandlerBugs()
+{
+ SKIP_IF_UNSUPPORTED("gif");
+
+ {
+ QImageReader io(prefix + "trolltech.gif");
+ QVERIFY(io.loopCount() != 1);
+ int count=0;
+ for (; io.canRead(); io.read(), ++count) ;
+ QVERIFY(count == 34);
+ }
+
+ // Task 95166
+ {
+ QImageReader io1(prefix + "bat1.gif");
+ QImageReader io2(prefix + "bat2.gif");
+ QVERIFY(io1.canRead());
+ QVERIFY(io2.canRead());
+ QImage im1 = io1.read();
+ QImage im2 = io2.read();
+ QVERIFY(!im1.isNull());
+ QVERIFY(!im2.isNull());
+ QCOMPARE(im1, im2);
+ }
+
+ // Task 9994
+ {
+ QImageReader io1(prefix + "noclearcode.gif");
+ QImageReader io2(prefix + "noclearcode.bmp");
+ QVERIFY(io1.canRead()); QVERIFY(io2.canRead());
+ QImage im1 = io1.read(); QImage im2 = io2.read();
+ QVERIFY(!im1.isNull()); QVERIFY(!im2.isNull());
+ QCOMPARE(im1.convertToFormat(QImage::Format_ARGB32), im2.convertToFormat(QImage::Format_ARGB32));
+ }
+
+ // Check the undocumented feature.
+ {
+ QImageReader io(prefix + "endless-anim.gif");
+ QVERIFY(io.canRead());
+ QCOMPARE(io.loopCount(), -1);
+ }
+}
+
+void tst_QImageReader::animatedGif()
+{
+ SKIP_IF_UNSUPPORTED("gif");
+
+ QImageReader io(":images/qt.gif");
+ QImage image = io.read();
+ QVERIFY(!image.isNull());
+ int i = 0;
+ while(!image.isNull()){
+ QString frameName = QString(":images/qt%1.gif").arg(++i);
+ QCOMPARE(image, QImage(frameName));
+ image = io.read();
+ }
+}
+
+// http://bugreports.qt.nokia.com/browse/QTBUG-6696
+// Check the count of images in various call orders...
+void tst_QImageReader::gifImageCount()
+{
+ SKIP_IF_UNSUPPORTED("gif");
+
+ // just read every frame... and see how much we got..
+ {
+ QImageReader io(":images/four-frames.gif");
+
+ QVERIFY(io.canRead());
+ QImage blackFrame = io.read();
+
+ QVERIFY(io.canRead());
+ QImage whiteFrame = io.read();
+
+ QVERIFY(io.canRead());
+ QImage greenFrame = io.read();
+
+ QVERIFY(io.imageCount() == 4);
+
+ QVERIFY(io.canRead());
+ QImage blueFrame = io.read();
+
+ QVERIFY(!io.canRead());
+ QImage emptyFrame = io.read();
+
+ QVERIFY(!io.canRead());
+ QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0));
+ QCOMPARE(blackFrame.size(), QSize(64,64));
+
+ QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff));
+ QCOMPARE(whiteFrame.size(), QSize(64,64));
+
+ QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0));
+ QCOMPARE(greenFrame.size(), QSize(64,64));
+
+ QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff));
+ QCOMPARE(blueFrame.size(), QSize(64,64));
+ QVERIFY(emptyFrame.isNull());
+ }
+
+ // Read and get the size
+ {
+ QImageReader io(":images/four-frames.gif");
+
+ QVERIFY(io.canRead());
+ QCOMPARE(io.size(), QSize(64,64));
+
+ QVERIFY(io.canRead());
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QVERIFY(io.canRead());
+ QImage blackFrame = io.read();
+
+ QVERIFY(io.canRead());
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QVERIFY(io.canRead());
+ QImage whiteFrame = io.read();
+
+ QVERIFY(io.canRead());
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QVERIFY(io.canRead());
+ QImage greenFrame = io.read();
+
+ QVERIFY(io.canRead());
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QVERIFY(io.canRead());
+ QImage blueFrame = io.read();
+
+ QVERIFY(!io.canRead());
+ QCOMPARE(io.size(), QSize());
+ QCOMPARE(io.size(), QSize());
+ QVERIFY(!io.canRead());
+ QImage emptyFrame = io.read();
+
+ QVERIFY(!io.canRead());
+ QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0));
+ QCOMPARE(blackFrame.size(), QSize(64,64));
+
+ QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff));
+ QCOMPARE(whiteFrame.size(), QSize(64,64));
+
+ QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0));
+ QCOMPARE(greenFrame.size(), QSize(64,64));
+
+ QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff));
+ QCOMPARE(blueFrame.size(), QSize(64,64));
+ QVERIFY(emptyFrame.isNull());
+ }
+
+ // Do a Size query as substitute for canRead
+ {
+ QImageReader io(":images/four-frames.gif");
+
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QImage blackFrame = io.read();
+
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QImage whiteFrame = io.read();
+
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QImage greenFrame = io.read();
+
+ QCOMPARE(io.size(), QSize(64,64));
+ QCOMPARE(io.size(), QSize(64,64));
+ QImage blueFrame = io.read();
+
+ QCOMPARE(io.size(), QSize());
+ QVERIFY(!io.canRead());
+ QImage emptyFrame = io.read();
+
+ QVERIFY(!io.canRead());
+ QCOMPARE(blackFrame.pixel(0,0), qRgb(0, 0, 0));
+ QCOMPARE(blackFrame.size(), QSize(64,64));
+
+ QCOMPARE(whiteFrame.pixel(0,0), qRgb(0xff, 0xff, 0xff));
+ QCOMPARE(whiteFrame.size(), QSize(64,64));
+
+ QCOMPARE(greenFrame.pixel(0,0), qRgb(0x0, 0xff, 0x0));
+ QCOMPARE(greenFrame.size(), QSize(64,64));
+
+ QCOMPARE(blueFrame.pixel(0,0), qRgb(0x0, 0x0, 0xff));
+ QCOMPARE(blueFrame.size(), QSize(64,64));
+ QVERIFY(emptyFrame.isNull());
+ }
+ {
+ QImageReader io(":images/trolltech.gif");
+ QVERIFY(io.imageCount() == 34);
+ QVERIFY(io.size() == QSize(128,64));
+ }
+}
+
+void tst_QImageReader::gifLoopCount()
+{
+ SKIP_IF_UNSUPPORTED("gif");
+
+ {
+ QImageReader io(":images/qt-gif-anim.gif");
+ QCOMPARE(io.loopCount(), -1); // infinite loop
+ }
+ {
+ QImageReader io(":images/qt-gif-noanim.gif");
+ QCOMPARE(io.loopCount(), 0); // no loop
+ }
+}
+
+class Server : public QObject
+{
+ Q_OBJECT
+public:
+ Server(const QByteArray &data) :serverSocket(0)
+ {
+ connect(&server, SIGNAL(newConnection()), this, SLOT(acceptNewConnection()));
+ server.listen();
+ this->data = data;
+ }
+
+public slots:
+ void runTest()
+ {
+ connect(&clientSocket, SIGNAL(connected()), this, SLOT(connected()));
+ clientSocket.connectToHost(QHostAddress::LocalHost, server.serverPort());
+ }
+
+public:
+ inline QTcpSocket *socket() const { return serverSocket; }
+
+signals:
+ void ready();
+
+private slots:
+ void acceptNewConnection()
+ {
+ serverSocket = server.nextPendingConnection();
+ connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(remoteHostClosed()));
+ }
+
+ void connected()
+ {
+ clientSocket.write(data);
+ clientSocket.disconnectFromHost();
+ }
+
+ void remoteHostClosed()
+ {
+ emit ready();
+ }
+
+private:
+ QTcpServer server;
+ QTcpSocket clientSocket;
+ QTcpSocket *serverSocket;
+ QByteArray data;
+};
+
+void tst_QImageReader::readFromDevice_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm");
+ QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm");
+ QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm");
+
+ QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-4") << QString("qtbug13653-no_eoi.jpg") << QByteArray("jpeg");
+
+ QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif");
+ QTest::newRow("gif-2") << QString("trolltech.gif") << QByteArray("gif");
+
+ QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm");
+ QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm");
+ QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp");
+ QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
+
+ QTest::newRow("mng-1") << QString("ball.mng") << QByteArray("mng");
+ QTest::newRow("mng-2") << QString("fire.mng") << QByteArray("mng");
+
+ QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
+ QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
+}
+
+void tst_QImageReader::readFromDevice()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImage expectedImage(prefix + fileName, format);
+
+ QFile file(prefix + fileName);
+ QVERIFY(file.open(QFile::ReadOnly));
+ QByteArray imageData = file.readAll();
+ QVERIFY(!imageData.isEmpty());
+ {
+ QBuffer buffer;
+ buffer.setData(imageData);
+ QVERIFY(buffer.open(QBuffer::ReadOnly));
+
+ QImageReader reader(&buffer);
+ QVERIFY(reader.canRead());
+ QImage imageReaderImage = reader.read();
+
+ QCOMPARE(imageReaderImage, expectedImage);
+
+ buffer.seek(0);
+
+ QImage image1;
+ QVERIFY(image1.loadFromData((const uchar *)buffer.data().data(),
+ buffer.data().size(), format.data()));
+ QCOMPARE(image1, expectedImage);
+
+ QByteArray throughBase64 = QByteArray::fromBase64(imageData.toBase64());
+ QVERIFY(image1.loadFromData((const uchar *)throughBase64.data(),
+ throughBase64.size(), format.data()));
+ QCOMPARE(image1, expectedImage);
+ }
+
+#if defined (Q_OS_SYMBIAN) && defined (__WINS__)
+ //the emulator hangs in socket write (this is a test bug, it assumes the TCP stack can accept a whole image to its buffers)
+ if(imageData.size() > 16384)
+ QSKIP("image larger than socket buffer (test needs to be rewritten)", SkipSingle);
+#endif
+ Server server(imageData);
+ QEventLoop loop;
+ connect(&server, SIGNAL(ready()), &loop, SLOT(quit()));
+ QTimer::singleShot(0, &server, SLOT(runTest()));
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ loop.exec();
+
+ QImageReader reader(server.socket(), format == "xbm" ? "xbm" : "");
+ if (format == "xbm")
+ QVERIFY(!reader.canRead());
+ else
+ QVERIFY(reader.canRead());
+ QImage imageReaderImage = reader.read();
+ QCOMPARE(imageReaderImage, expectedImage);
+}
+
+void tst_QImageReader::readFromFileAfterJunk_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm");
+ QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm");
+ QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-2") << QString("teapot.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-3") << QString("teapot.ppm") << QByteArray("ppm");
+ QTest::newRow("ppm-4") << QString("runners.ppm") << QByteArray("ppm");
+
+ QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
+
+ QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm");
+ QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm");
+ QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp");
+ QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
+ QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
+ QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
+}
+
+void tst_QImageReader::readFromFileAfterJunk()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QFile::remove("junk");
+ QFile junkFile("junk");
+ QVERIFY(junkFile.open(QFile::WriteOnly));
+
+ QFile imageFile(prefix + fileName);
+ QVERIFY(imageFile.open(QFile::ReadOnly));
+ QByteArray imageData = imageFile.readAll();
+ QVERIFY(!imageData.isNull());
+
+ int iterations = 3;
+ if (format == "ppm" || format == "pbm" || format == "pgm" || format == "svg" || format == "svgz")
+ iterations = 1;
+
+ if (format == "mng" || !QImageWriter::supportedImageFormats().contains(format)) {
+ for (int i = 0; i < iterations; ++i) {
+ junkFile.write("deadbeef", 9);
+ QCOMPARE(junkFile.write(imageData), qint64(imageData.size()));
+ }
+ } else {
+ for (int i = 0; i < iterations; ++i) {
+ QImageWriter writer(&junkFile, format);
+ junkFile.write("deadbeef", 9);
+ QVERIFY(writer.write(QImage(prefix + fileName)));
+ }
+ }
+ junkFile.close();
+ junkFile.open(QFile::ReadOnly);
+
+ for (int i = 0; i < iterations; ++i) {
+ QByteArray ole = junkFile.read(9);
+ junkFile.ungetChar(ole[ole.size() - 1]);
+ char c;
+ junkFile.getChar(&c);
+ QImageReader reader(&junkFile);
+ QVERIFY(reader.canRead());
+ QVERIFY(!reader.read().isNull());
+ }
+}
+
+void tst_QImageReader::devicePosition_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("pbm") << QString("image.pbm") << QByteArray("pbm");
+ QTest::newRow("pgm") << QString("image.pgm") << QByteArray("pgm");
+ QTest::newRow("ppm-1") << QString("image.ppm") << QByteArray("ppm");
+
+ QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
+
+ QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif");
+
+ QTest::newRow("xbm") << QString("gnus.xbm") << QByteArray("xbm");
+ QTest::newRow("xpm") << QString("marble.xpm") << QByteArray("xpm");
+ QTest::newRow("bmp-1") << QString("colorful.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-2") << QString("font.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-3") << QString("test32bfv4.bmp") << QByteArray("bmp");
+ QTest::newRow("bmp-4") << QString("test32v5.bmp") << QByteArray("bmp");
+ QTest::newRow("png") << QString("kollada.png") << QByteArray("png");
+ QTest::newRow("svg") << QString("rect.svg") << QByteArray("svg");
+ QTest::newRow("svgz") << QString("rect.svgz") << QByteArray("svgz");
+}
+
+void tst_QImageReader::devicePosition()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImage expected(prefix + fileName);
+ QVERIFY(!expected.isNull());
+
+ QFile imageFile(prefix + fileName);
+ QVERIFY(imageFile.open(QFile::ReadOnly));
+ QByteArray imageData = imageFile.readAll();
+ QVERIFY(!imageData.isNull());
+ int imageDataSize = imageData.size();
+
+ const char *preStr = "prebeef\n";
+ int preLen = qstrlen(preStr);
+ imageData.prepend(preStr);
+ if (format != "svg" && format != "svgz") // Doesn't handle trailing data
+ imageData.append("\npostbeef");
+ QBuffer buf(&imageData);
+ buf.open(QIODevice::ReadOnly);
+ buf.seek(preLen);
+ QImageReader reader(&buf, format);
+ QCOMPARE(expected, reader.read());
+ if (format != "ppm" &&
+ format != "pgm" &&
+ format != "pbm" &&
+ format != "gif") // Known not to work
+ QCOMPARE(buf.pos(), qint64(preLen+imageDataSize));
+}
+
+
+void tst_QImageReader::readFromResources_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+ QTest::addColumn<QSize>("size");
+ QTest::addColumn<QString>("message");
+
+ QTest::newRow("corrupt.bmp") << QString("corrupt.bmp")
+ << QByteArray("bmp") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("negativeheight.bmp") << QString("negativeheight.bmp")
+ << QByteArray("bmp") << QSize(127, 64)
+ << QString("");
+ QTest::newRow("font.bmp") << QString("font.bmp")
+ << QByteArray("bmp") << QSize(240, 8)
+ << QString("");
+ QTest::newRow("noclearcode.bmp") << QString("noclearcode.bmp")
+ << QByteArray("bmp") << QSize(29, 18)
+ << QString("");
+ QTest::newRow("colorful.bmp") << QString("colorful.bmp")
+ << QByteArray("bmp") << QSize(320, 200)
+ << QString("");
+ QTest::newRow("16bpp.bmp") << QString("16bpp.bmp")
+ << QByteArray("bmp") << QSize(320, 240)
+ << QString("");
+ QTest::newRow("crash-signed-char.bmp") << QString("crash-signed-char.bmp")
+ << QByteArray("bmp") << QSize(360, 280)
+ << QString("");
+ QTest::newRow("4bpp-rle.bmp") << QString("4bpp-rle.bmp")
+ << QByteArray("bmp") << QSize(640, 480)
+ << QString("");
+ QTest::newRow("test32bfv4.bmp") << QString("test32bfv4.bmp")
+ << QByteArray("bmp") << QSize(373, 156)
+ << QString("");
+ QTest::newRow("test32v5.bmp") << QString("test32v5.bmp")
+ << QByteArray("bmp") << QSize(373, 156)
+ << QString("");
+ QTest::newRow("corrupt.gif") << QString("corrupt.gif")
+ << QByteArray("gif") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("trolltech.gif") << QString("trolltech.gif")
+ << QByteArray("gif") << QSize(128, 64)
+ << QString("");
+ QTest::newRow("noclearcode.gif") << QString("noclearcode.gif")
+ << QByteArray("gif") << QSize(29, 18)
+ << QString("");
+ QTest::newRow("earth.gif") << QString("earth.gif")
+ << QByteArray("gif") << QSize(320, 200)
+ << QString("");
+ QTest::newRow("bat1.gif") << QString("bat1.gif")
+ << QByteArray("gif") << QSize(32, 32)
+ << QString("");
+ QTest::newRow("bat2.gif") << QString("bat2.gif")
+ << QByteArray("gif") << QSize(32, 32)
+ << QString("");
+ QTest::newRow("corrupt.jpg") << QString("corrupt.jpg")
+ << QByteArray("jpg") << QSize(0, 0)
+ << QString("JPEG datastream contains no image");
+ QTest::newRow("beavis.jpg") << QString("beavis.jpg")
+ << QByteArray("jpg") << QSize(350, 350)
+ << QString("");
+ QTest::newRow("YCbCr_cmyk.jpg") << QString("YCbCr_cmyk.jpg")
+ << QByteArray("jpg") << QSize(75, 50)
+ << QString("");
+ QTest::newRow("YCbCr_rgb.jpg") << QString("YCbCr_rgb.jpg")
+ << QByteArray("jpg") << QSize(75, 50)
+ << QString("");
+ QTest::newRow("qtbug13653-no_eoi.jpg") << QString("qtbug13653-no_eoi.jpg")
+ << QByteArray("jpg") << QSize(240, 180)
+ << QString("");
+ QTest::newRow("corrupt.mng") << QString("corrupt.mng")
+ << QByteArray("mng") << QSize(0, 0)
+ << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0");
+ QTest::newRow("fire.mng") << QString("fire.mng")
+ << QByteArray("mng") << QSize(30, 60)
+ << QString("");
+ QTest::newRow("ball.mng") << QString("ball.mng")
+ << QByteArray("mng") << QSize(32, 32)
+ << QString("");
+ QTest::newRow("rect.svg") << QString("rect.svg")
+ << QByteArray("svg") << QSize(105, 137)
+ << QString("");
+ QTest::newRow("rect.svgz") << QString("rect.svgz")
+ << QByteArray("svgz") << QSize(105, 137)
+ << QString("");
+ QTest::newRow("corrupt.svg") << QString("corrupt.svg")
+ << QByteArray("svg") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("corrupt.svgz") << QString("corrupt.svgz")
+ << QByteArray("svgz") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("image.pbm") << QString("image.pbm")
+ << QByteArray("pbm") << QSize(16, 6)
+ << QString("");
+ QTest::newRow("image.pgm") << QString("image.pgm")
+ << QByteArray("pgm") << QSize(24, 7)
+ << QString("");
+ QTest::newRow("corrupt.png") << QString("corrupt.png")
+ << QByteArray("png") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("away.png") << QString("away.png")
+ << QByteArray("png") << QSize(16, 16)
+ << QString("");
+ QTest::newRow("image.png") << QString("image.png")
+ << QByteArray("png") << QSize(22, 22)
+ << QString("");
+ QTest::newRow("kollada.png") << QString("kollada.png")
+ << QByteArray("png") << QSize(436, 160)
+ << QString("");
+ QTest::newRow("black.png") << QString("black.png")
+ << QByteArray("png") << QSize(48, 48)
+ << QString("");
+ QTest::newRow("YCbCr_cmyk.png") << QString("YCbCr_cmyk.png")
+ << QByteArray("png") << QSize(75, 50)
+ << QString("");
+ QTest::newRow("teapot.ppm") << QString("teapot.ppm")
+ << QByteArray("ppm") << QSize(256, 256)
+ << QString("");
+ QTest::newRow("image.ppm") << QString("image.ppm")
+ << QByteArray("ppm") << QSize(4, 4)
+ << QString("");
+ QTest::newRow("runners.ppm") << QString("runners.ppm")
+ << QByteArray("ppm") << QSize(400, 400)
+ << QString("");
+ QTest::newRow("test.ppm") << QString("test.ppm")
+ << QByteArray("ppm") << QSize(10, 10)
+ << QString("");
+ QTest::newRow("gnus.xbm") << QString("gnus.xbm")
+ << QByteArray("xbm") << QSize(271, 273)
+ << QString("");
+ QTest::newRow("corrupt-colors.xpm") << QString("corrupt-colors.xpm")
+ << QByteArray("xpm") << QSize(0, 0)
+ << QString("QImage: XPM color specification is missing: bla9an.n#x");
+ QTest::newRow("corrupt-pixels.xpm") << QString("corrupt-pixels.xpm")
+ << QByteArray("xpm") << QSize(0, 0)
+ << QString("QImage: XPM pixels missing on image line 3");
+ QTest::newRow("corrupt-pixel-count.xpm") << QString("corrupt-pixel-count.xpm")
+ << QByteArray("xpm") << QSize(0, 0)
+ << QString("");
+ QTest::newRow("marble.xpm") << QString("marble.xpm")
+ << QByteArray("xpm") << QSize(240, 240)
+ << QString("");
+ QTest::newRow("test.xpm") << QString("test.xpm")
+ << QByteArray("xpm") << QSize(256, 256)
+ << QString("");
+ QTest::newRow("black.xpm") << QString("black.xpm")
+ << QByteArray("xpm") << QSize(48, 48)
+ << QString("");
+ QTest::newRow("namedcolors.xpm") << QString("namedcolors.xpm")
+ << QByteArray("xpm") << QSize(8, 8)
+ << QString("");
+ QTest::newRow("nontransparent.xpm") << QString("nontransparent.xpm")
+ << QByteArray("xpm") << QSize(8, 8)
+ << QString("");
+ QTest::newRow("transparent.xpm") << QString("transparent.xpm")
+ << QByteArray("xpm") << QSize(8, 8)
+ << QString("");
+}
+
+void tst_QImageReader::readFromResources()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+ QFETCH(QSize, size);
+ QFETCH(QString, message);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ for (int i = 0; i < 2; ++i) {
+ QString file = i ? (":/images/" + fileName) : (prefix + fileName);
+ {
+ // suppress warnings if we expect them
+ if (!message.isEmpty()) {
+ for (int j = 0; j < 5; ++j)
+ QTest::ignoreMessage(QtWarningMsg, message.toLatin1());
+ }
+
+ // 1) full filename, no format
+ QImageReader reader(file);
+ QImage image = reader.read();
+ if (size.isNull())
+ QVERIFY(image.isNull());
+ else
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), size);
+ }
+ {
+ // 2) full filename, with format
+ QImageReader reader(file, format);
+ QImage image = reader.read();
+ if (size.isNull())
+ QVERIFY(image.isNull());
+ else
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), size);
+ }
+ {
+ // 3) full filename, with uppercase format
+ QImageReader reader(file, format.toUpper());
+ QImage image = reader.read();
+ if (size.isNull())
+ QVERIFY(image.isNull());
+ else
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), size);
+ }
+ {
+ // 4) chopped filename, with format
+ QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format);
+ QImage image = reader.read();
+ if (size.isNull())
+ QVERIFY(image.isNull());
+ else
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), size);
+ }
+ {
+ // 5) chopped filename, with uppercase format
+ QImageReader reader(file.left(file.lastIndexOf(QLatin1Char('.'))), format.toUpper());
+ QImage image = reader.read();
+ if (size.isNull())
+ QVERIFY(image.isNull());
+ else
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), size);
+ }
+ }
+
+ // Check that the results are identical
+ if (!message.isEmpty()) {
+ QTest::ignoreMessage(QtWarningMsg, message.toLatin1());
+ QTest::ignoreMessage(QtWarningMsg, message.toLatin1());
+ }
+ QCOMPARE(QImageReader(prefix + fileName).read(), QImageReader(":/images/" + fileName).read());
+}
+
+void tst_QImageReader::readCorruptImage_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<bool>("shouldFail");
+ QTest::addColumn<QString>("message");
+ QTest::addColumn<QByteArray>("format");
+ QTest::newRow("corrupt jpeg") << QString("corrupt.jpg") << true
+ << QString("JPEG datastream contains no image")
+ << QByteArray("jpeg");
+ QTest::newRow("corrupt gif") << QString("corrupt.gif") << true << QString("") << QByteArray("gif");
+ QTest::newRow("corrupt mng") << QString("corrupt.mng") << true
+ << QString("MNG error 901: Application signalled I/O error; chunk IHDR; subcode 0:0")
+ << QByteArray("mng");
+ QTest::newRow("corrupt png") << QString("corrupt.png") << true << QString("") << QByteArray("png");
+ QTest::newRow("corrupt bmp") << QString("corrupt.bmp") << true << QString("") << QByteArray("bmp");
+ QTest::newRow("corrupt xpm (colors)") << QString("corrupt-colors.xpm") << true
+ << QString("QImage: XPM color specification is missing: bla9an.n#x")
+ << QByteArray("xpm");
+ QTest::newRow("corrupt xpm (pixels)") << QString("corrupt-pixels.xpm") << true
+ << QString("QImage: XPM pixels missing on image line 3")
+ << QByteArray("xpm");
+ QTest::newRow("corrupt xbm") << QString("corrupt.xbm") << false << QString("") << QByteArray("xbm");
+ QTest::newRow("corrupt tiff") << QString("corrupt-data.tif") << true << QString("") << QByteArray("tiff");
+ QTest::newRow("corrupt svg") << QString("corrupt.svg") << true << QString("") << QByteArray("svg");
+ QTest::newRow("corrupt svgz") << QString("corrupt.svgz") << true << QString("") << QByteArray("svgz");
+}
+
+void tst_QImageReader::readCorruptImage()
+{
+ QFETCH(QString, fileName);
+ QFETCH(bool, shouldFail);
+ QFETCH(QString, message);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ if (!message.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, message.toLatin1());
+ QImageReader reader(prefix + fileName);
+ QVERIFY(reader.canRead());
+ QCOMPARE(reader.read().isNull(), shouldFail);
+}
+
+void tst_QImageReader::readCorruptBmp()
+{
+ QCOMPARE(QImage(prefix + "tst7.bmp").convertToFormat(QImage::Format_ARGB32_Premultiplied), QImage(prefix + "tst7.png").convertToFormat(QImage::Format_ARGB32_Premultiplied));
+}
+
+void tst_QImageReader::supportsOption_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QIntList>("options");
+
+ QTest::newRow("png") << QString("black.png")
+ << (QIntList() << QImageIOHandler::Gamma
+ << QImageIOHandler::Description
+ << QImageIOHandler::Quality
+ << QImageIOHandler::Size);
+}
+
+void tst_QImageReader::supportsOption()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QIntList, options);
+
+ QSet<QImageIOHandler::ImageOption> allOptions;
+ allOptions << QImageIOHandler::Size
+ << QImageIOHandler::ClipRect
+ << QImageIOHandler::Description
+ << QImageIOHandler::ScaledClipRect
+ << QImageIOHandler::ScaledSize
+ << QImageIOHandler::CompressionRatio
+ << QImageIOHandler::Gamma
+ << QImageIOHandler::Quality
+ << QImageIOHandler::Name
+ << QImageIOHandler::SubType
+ << QImageIOHandler::IncrementalReading
+ << QImageIOHandler::Endianness
+ << QImageIOHandler::Animation
+ << QImageIOHandler::BackgroundColor;
+
+ QImageReader reader(prefix + fileName);
+ for (int i = 0; i < options.size(); ++i) {
+ QVERIFY(reader.supportsOption(QImageIOHandler::ImageOption(options.at(i))));
+ allOptions.remove(QImageIOHandler::ImageOption(options.at(i)));
+ }
+
+ foreach (QImageIOHandler::ImageOption option, allOptions)
+ QVERIFY(!reader.supportsOption(option));
+}
+
+void tst_QImageReader::tiffCompression_data()
+{
+ QTest::addColumn<QString>("uncompressedFile");
+ QTest::addColumn<QString>("compressedFile");
+
+ QTest::newRow("TIFF: adobedeflate") << "rgba_nocompression_littleendian.tif"
+ << "rgba_adobedeflate_littleendian.tif";
+ QTest::newRow("TIFF: lzw") << "rgba_nocompression_littleendian.tif"
+ << "rgba_lzw_littleendian.tif";
+ QTest::newRow("TIFF: packbits") << "rgba_nocompression_littleendian.tif"
+ << "rgba_packbits_littleendian.tif";
+ QTest::newRow("TIFF: zipdeflate") << "rgba_nocompression_littleendian.tif"
+ << "rgba_zipdeflate_littleendian.tif";
+}
+
+void tst_QImageReader::tiffCompression()
+{
+ QFETCH(QString, uncompressedFile);
+ QFETCH(QString, compressedFile);
+
+ SKIP_IF_UNSUPPORTED("tiff");
+
+ QImage uncompressedImage(prefix + uncompressedFile);
+ QImage compressedImage(prefix + compressedFile);
+
+ QCOMPARE(uncompressedImage, compressedImage);
+}
+
+void tst_QImageReader::tiffEndianness()
+{
+ SKIP_IF_UNSUPPORTED("tiff");
+
+ QImage littleEndian(prefix + "rgba_nocompression_littleendian.tif");
+ QImage bigEndian(prefix + "rgba_nocompression_bigendian.tif");
+
+ QCOMPARE(littleEndian, bigEndian);
+}
+
+void tst_QImageReader::tiffOrientation_data()
+{
+ QTest::addColumn<QString>("expected");
+ QTest::addColumn<QString>("oriented");
+ QTest::newRow("Indexed TIFF, orientation1") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_1.tiff";
+ QTest::newRow("Indexed TIFF, orientation2") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_2.tiff";
+ QTest::newRow("Indexed TIFF, orientation3") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_3.tiff";
+ QTest::newRow("Indexed TIFF, orientation4") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_4.tiff";
+ QTest::newRow("Indexed TIFF, orientation5") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_5.tiff";
+ QTest::newRow("Indexed TIFF, orientation6") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_6.tiff";
+ QTest::newRow("Indexed TIFF, orientation7") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_7.tiff";
+ QTest::newRow("Indexed TIFF, orientation8") << "tiff_oriented/original_indexed.tiff" << "tiff_oriented/indexed_orientation_8.tiff";
+
+ QTest::newRow("Mono TIFF, orientation1") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_1.tiff";
+ QTest::newRow("Mono TIFF, orientation2") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_2.tiff";
+ QTest::newRow("Mono TIFF, orientation3") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_3.tiff";
+ QTest::newRow("Mono TIFF, orientation4") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_4.tiff";
+ QTest::newRow("Mono TIFF, orientation5") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_5.tiff";
+ QTest::newRow("Mono TIFF, orientation6") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_6.tiff";
+ QTest::newRow("Mono TIFF, orientation7") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_7.tiff";
+ QTest::newRow("Mono TIFF, orientation8") << "tiff_oriented/original_mono.tiff" << "tiff_oriented/mono_orientation_8.tiff";
+
+ QTest::newRow("RGB TIFF, orientation1") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_1.tiff";
+ QTest::newRow("RGB TIFF, orientation2") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_2.tiff";
+ QTest::newRow("RGB TIFF, orientation3") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_3.tiff";
+ QTest::newRow("RGB TIFF, orientation4") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_4.tiff";
+ QTest::newRow("RGB TIFF, orientation5") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_5.tiff";
+ QTest::newRow("RGB TIFF, orientation6") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_6.tiff";
+ QTest::newRow("RGB TIFF, orientation7") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_7.tiff";
+ QTest::newRow("RGB TIFF, orientation8") << "tiff_oriented/original_rgb.tiff" << "tiff_oriented/rgb_orientation_8.tiff";
+}
+
+void tst_QImageReader::tiffOrientation()
+{
+ QFETCH(QString, expected);
+ QFETCH(QString, oriented);
+
+ SKIP_IF_UNSUPPORTED("tiff");
+
+ QImage expectedImage(prefix + expected);
+ QImage orientedImage(prefix + oriented);
+ QCOMPARE(expectedImage, orientedImage);
+}
+
+void tst_QImageReader::tiffGrayscale()
+{
+ SKIP_IF_UNSUPPORTED("tiff");
+
+ QImage actualImage(prefix + "grayscale.tif");
+ QImage expectedImage(prefix + "grayscale-ref.tif");
+
+ QCOMPARE(expectedImage, actualImage.convertToFormat(expectedImage.format()));
+}
+
+void tst_QImageReader::dotsPerMeter_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("expectedDotsPerMeterX");
+ QTest::addColumn<int>("expectedDotsPerMeterY");
+ QTest::addColumn<QByteArray>("format");
+ QTest::newRow("TIFF: 72 dpi") << ("rgba_nocompression_littleendian.tif") << qRound(72 * (100 / 2.54)) << qRound(72 * (100 / 2.54)) << QByteArray("tiff");
+ QTest::newRow("TIFF: 100 dpi") << ("image_100dpi.tif") << qRound(100 * (100 / 2.54)) << qRound(100 * (100 / 2.54)) << QByteArray("tiff");
+}
+
+void tst_QImageReader::dotsPerMeter()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, expectedDotsPerMeterX);
+ QFETCH(int, expectedDotsPerMeterY);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImage image(prefix + fileName);
+
+ QCOMPARE(image.dotsPerMeterX(), expectedDotsPerMeterX);
+ QCOMPARE(image.dotsPerMeterY(), expectedDotsPerMeterY);
+}
+
+void tst_QImageReader::physicalDpi_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("expectedPhysicalDpiX");
+ QTest::addColumn<int>("expectedPhysicalDpiY");
+ QTest::addColumn<QByteArray>("format");
+ QTest::newRow("TIFF: 72 dpi") << "rgba_nocompression_littleendian.tif" << 72 << 72 << QByteArray("tiff");
+ QTest::newRow("TIFF: 100 dpi") << "image_100dpi.tif" << 100 << 100 << QByteArray("tiff");
+}
+
+void tst_QImageReader::physicalDpi()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, expectedPhysicalDpiX);
+ QFETCH(int, expectedPhysicalDpiY);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ QImage image(prefix + fileName);
+
+ QCOMPARE(image.physicalDpiX(), expectedPhysicalDpiX);
+ QCOMPARE(image.physicalDpiY(), expectedPhysicalDpiY);
+}
+
+void tst_QImageReader::autoDetectImageFormat()
+{
+ // Assume PNG is supported :-)
+ {
+ // Disables file name extension probing
+ QImageReader reader(prefix + "kollada");
+ reader.setAutoDetectImageFormat(false);
+ QVERIFY(!reader.canRead());
+ QVERIFY(reader.read().isNull());
+ reader.setAutoDetectImageFormat(true);
+ QVERIFY(reader.canRead());
+ QVERIFY(!reader.read().isNull());
+ }
+ {
+ // Disables detection based on suffix
+ QImageReader reader(prefix + "kollada.png");
+ reader.setAutoDetectImageFormat(false);
+ QVERIFY(!reader.canRead());
+ QVERIFY(reader.read().isNull());
+ reader.setAutoDetectImageFormat(true);
+ QVERIFY(reader.canRead());
+ QVERIFY(!reader.read().isNull());
+ }
+ {
+ // Disables detection based on content
+ QImageReader reader(prefix + "kollada-noext");
+ reader.setAutoDetectImageFormat(false);
+ QVERIFY(!reader.canRead());
+ QVERIFY(reader.read().isNull());
+ reader.setAutoDetectImageFormat(true);
+ QVERIFY(reader.canRead());
+ QVERIFY(!reader.read().isNull());
+ }
+
+ if (QImageReader::supportedImageFormats().contains("jpeg")) {
+ QImageReader io(prefix + "YCbCr_rgb.jpg");
+ io.setAutoDetectImageFormat(false);
+ // This should fail since no format string is given
+ QImage image;
+ QVERIFY(!io.read(&image));
+ }
+ if (QImageReader::supportedImageFormats().contains("jpeg")) {
+ QImageReader io(prefix + "YCbCr_rgb.jpg", "jpg");
+ io.setAutoDetectImageFormat(false);
+ QImage image;
+ QVERIFY(io.read(&image));
+ }
+ {
+ QImageReader io(prefix + "tst7.png");
+ io.setAutoDetectImageFormat(false);
+ // This should fail since no format string is given
+ QImage image;
+ QVERIFY(!io.read(&image));
+ }
+ {
+ QImageReader io(prefix + "tst7.png", "png");
+ io.setAutoDetectImageFormat(false);
+ QImage image;
+ QVERIFY(io.read(&image));
+ }
+}
+
+void tst_QImageReader::fileNameProbing()
+{
+ QString name("doesnotexist.png");
+ QImageReader r;
+ r.setFileName(name); // non-existing / non-readable file
+ QCOMPARE(r.fileName(), name);
+
+ r.size();
+ QCOMPARE(r.fileName(), name);
+ r.read();
+ QCOMPARE(r.fileName(), name);
+}
+
+void tst_QImageReader::pixelCompareWithBaseline_data()
+{
+ QTest::addColumn<QString>("fileName");
+
+ QTest::newRow("floppy (16px,32px - 16 colors)") << "35floppy.ico";
+ QTest::newRow("semitransparent") << "semitransparent.ico";
+ QTest::newRow("slightlybrokenBMPHeader") << "kde_favicon.ico";
+ QTest::newRow("sightlybrokenIconHeader") << "connect.ico";
+}
+
+void tst_QImageReader::pixelCompareWithBaseline()
+{
+ QFETCH(QString, fileName);
+
+ static int enteredCount = 0; // Used for better error diagnostics if something fails. We
+ static int loadFailCount = 0; // don't know if the reason load() fails is that the plugin
+ // does not exist or because of a bug in the plugin. But if at
+ // least one file succeeded we know that the plugin was built.
+ // The other failures are then real failures.
+ QImage icoImg;
+ const QString inputFileName(QString::fromAscii("images/%1").arg(fileName));
+ QFileInfo fi(inputFileName);
+
+ ++enteredCount;
+ // might fail if the plugin does not exist, which is ok.
+ if (icoImg.load(inputFileName)) {
+ icoImg = icoImg.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ const QString baselineFileName(QString::fromAscii("baseline/%1.png").arg(fi.baseName()));
+#if 0
+ icoImg.save(baselineFileName);
+#else
+ QImage baseImg;
+ QVERIFY(baseImg.load(baselineFileName));
+ baseImg = baseImg.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ QCOMPARE(int(baseImg.format()), int(icoImg.format()));
+ QCOMPARE(baseImg, icoImg);
+#endif
+ } else {
+ ++loadFailCount;
+ if (enteredCount != loadFailCount) {
+ QFAIL("Plugin is built, but some did not load properly");
+ } else {
+ qWarning("loading failed, check if ico plugin is built");
+ }
+ }
+}
+
+
+void tst_QImageReader::testIgnoresFormatAndExtension_data()
+{
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<QString>("extension");
+ QTest::addColumn<QString>("expected");
+
+ QTest::newRow("black.png") << "black" << "png" << "png";
+ QTest::newRow("black.xpm") << "black" << "xpm" << "xpm";
+ QTest::newRow("colorful.bmp") << "colorful" << "bmp" << "bmp";
+ QTest::newRow("image.ppm") << "image" << "ppm" << "ppm";
+ QTest::newRow("image.pbm") << "image" << "pbm" << "pbm";
+ QTest::newRow("image.pgm") << "image" << "pgm" << "pgm";
+
+ QTest::newRow("bat1.gif") << "bat1" << "gif" << "gif";
+
+ QTest::newRow("beavis.jpg") << "beavis" << "jpg" << "jpeg";
+
+ QTest::newRow("fire.mng") << "fire" << "mng" << "mng";
+
+ QTest::newRow("image_100dpi.tif") << "image_100dpi" << "tif" << "tiff";
+
+ QTest::newRow("rect.svg") << "rect" << "svg" << "svg";
+ QTest::newRow("rect.svgz") << "rect" << "svgz" << "svgz";
+}
+
+
+void tst_QImageReader::testIgnoresFormatAndExtension()
+{
+ QFETCH(QString, name);
+ QFETCH(QString, extension);
+ QFETCH(QString, expected);
+
+ SKIP_IF_UNSUPPORTED(expected.toLatin1());
+
+ QList<QByteArray> formats = QImageReader::supportedImageFormats();
+ QString fileNameBase = prefix + name + ".";
+
+ foreach (const QByteArray &f, formats) {
+ if (f == extension)
+ continue;
+ QFile tmp(QDir::tempPath() + "/" + name + "_" + expected + "." + f);
+
+ QVERIFY(QFile::copy(fileNameBase + extension, QFileInfo(tmp).absoluteFilePath()));
+
+ QString format;
+ QImage image;
+ {
+ // image reader needs to be scoped for the remove() to work..
+ QImageReader r;
+ r.setFileName(QFileInfo(tmp).absoluteFilePath());
+ r.setDecideFormatFromContent(true);
+ format = r.format();
+ r.read(&image);
+ }
+
+ tmp.remove();
+
+ QVERIFY(!image.isNull());
+ QCOMPARE(format, expected);
+ }
+}
+
+
+void tst_QImageReader::saveFormat_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("Format_Mono") << QImage::Format_Mono;
+ QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB;
+ QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8;
+ QTest::newRow("Format_RGB32") << QImage::Format_RGB32;
+ QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32;
+ QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("Format_RGB16") << QImage::Format_RGB16;
+ QTest::newRow("Format_ARGB8565_Premultiplied") << QImage::Format_ARGB8565_Premultiplied;
+ QTest::newRow("Format_RGB666") << QImage::Format_RGB666;
+ QTest::newRow("Format_ARGB6666_Premultiplied") << QImage::Format_ARGB6666_Premultiplied;
+ QTest::newRow("Format_RGB555") << QImage::Format_RGB555;
+ QTest::newRow("Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8555_Premultiplied;
+ QTest::newRow("Format_RGB888") << QImage::Format_RGB888;
+ QTest::newRow("Format_RGB444") << QImage::Format_RGB444;
+ QTest::newRow("Format_ARGB4444_Premultiplied") << QImage::Format_ARGB4444_Premultiplied;
+}
+
+void tst_QImageReader::saveFormat()
+{
+ QFETCH(QImage::Format, format);
+
+ QImage orig(":/images/kollada.png");
+
+ QImage converted = orig.convertToFormat(format);
+ QBuffer buf;
+ buf.open(QIODevice::WriteOnly);
+ QVERIFY(converted.save(&buf, "png"));
+ buf.close();
+ QImage stored = QImage::fromData(buf.buffer(), "png");
+
+ stored = stored.convertToFormat(QImage::Format_ARGB32);
+ converted = converted.convertToFormat(QImage::Format_ARGB32);
+ QCOMPARE(stored, converted);
+}
+
+
+void tst_QImageReader::readText_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QString>("key");
+ QTest::addColumn<QString>("text");
+
+ QTest::newRow("png, tEXt before img") << "txts.png" << "Title" << "PNG";
+ QTest::newRow("png, zTXt before img") << "txts.png" << "Comment" << "Some compressed text.";
+ QTest::newRow("png, tEXt after img") << "txts.png" << "Disclaimer" << "For testing only.";
+ QTest::newRow("png, zTXt after img") << "txts.png" << "Description" << "Rendered by Persistence of Vision (tm) Ray Tracer";
+}
+
+
+void tst_QImageReader::readText()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QString, key);
+ QFETCH(QString, text);
+
+ QImage img(prefix + fileName);
+ QVERIFY(img.textKeys().contains(key));
+ QCOMPARE(img.text(key), text);
+}
+
+
+void tst_QImageReader::preserveTexts_data()
+{
+ QTest::addColumn<QString>("text");
+
+ QTest::newRow("Simple") << "simpletext";
+ QTest::newRow("Whitespace") << " A text with whitespace ";
+ QTest::newRow("Newline") << "A text\nwith newlines\n";
+ QTest::newRow("Double newlines") << "A text\n\nwith double newlines\n\n";
+ QTest::newRow("Long") << QString("A rather long text, at least after many repetitions. ").repeated(100);
+ QString latin1set;
+ int c;
+ for(c = 0x20; c <= 0x7e; c++)
+ latin1set.append(QLatin1Char(c));
+ for(c = 0xa0; c <= 0xff; c++)
+ latin1set.append(QLatin1Char(c));
+ QTest::newRow("All Latin1 chars") << latin1set;
+
+#if 0
+ // Depends on iTXt support in libpng
+ QTest::newRow("Multibyte string") << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240");
+#endif
+}
+
+
+void tst_QImageReader::preserveTexts()
+{
+ QFETCH(QString, text);
+ QString key("testkey");
+ QString key2("testkey2");
+ QString text2("Some other text.");
+ QString key3("testkey3");
+ QString text3("Some more other text.");
+
+ QImage img(":/images/kollada.png");
+ img.setText(key, text);
+ img.setText(key2, text2);
+ QBuffer buf;
+ buf.open(QIODevice::WriteOnly);
+ QVERIFY(img.save(&buf, "png"));
+ buf.close();
+ QImage stored = QImage::fromData(buf.buffer(), "png");
+ QCOMPARE(stored.text(key), text);
+ QCOMPARE(stored.text(key2), text2);
+
+ QImage img2(":/images/kollada.png");
+ img2.setText(key3, text3);
+ QBuffer buf2;
+ QImageWriter w(&buf2, "png");
+ w.setText(key, text);
+ w.setText(key2, text2);
+ QVERIFY(w.write(img2));
+ buf2.close();
+ QImageReader r(&buf2, "png");
+ QCOMPARE(r.text(key), text.simplified());
+ QCOMPARE(r.text(key2), text2.simplified());
+ QCOMPARE(r.text(key3), text3.simplified());
+}
+
+
+QTEST_MAIN(tst_QImageReader)
+#include "tst_qimagereader.moc"
diff --git a/tests/auto/gui/image/qimagewriter/.gitignore b/tests/auto/gui/image/qimagewriter/.gitignore
new file mode 100644
index 0000000000..9355bcd1bf
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/.gitignore
@@ -0,0 +1 @@
+tst_qimagewriter
diff --git a/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg b/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg
new file mode 100644
index 0000000000..b8aa9ea609
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/YCbCr_cmyk.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg b/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg
new file mode 100644
index 0000000000..8771224cb5
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/YCbCr_rgb.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/beavis.jpg b/tests/auto/gui/image/qimagewriter/images/beavis.jpg
new file mode 100644
index 0000000000..d55504779b
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/beavis.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/colorful.bmp b/tests/auto/gui/image/qimagewriter/images/colorful.bmp
new file mode 100644
index 0000000000..8ea6f4acd7
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/colorful.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/earth.gif b/tests/auto/gui/image/qimagewriter/images/earth.gif
new file mode 100644
index 0000000000..2c229eb110
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/earth.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/font.bmp b/tests/auto/gui/image/qimagewriter/images/font.bmp
new file mode 100644
index 0000000000..28b8c66924
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/font.bmp
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/gnus.xbm b/tests/auto/gui/image/qimagewriter/images/gnus.xbm
new file mode 100644
index 0000000000..58d1ac845a
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/gnus.xbm
@@ -0,0 +1,622 @@
+#define noname_width 271
+#define noname_height 273
+static char noname_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x49,0xe0,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0xaa,0x8a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x41,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0x52,0x16,0xfe,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x49,0x05,
+ 0xf9,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0x95,0xaa,0x58,0xf4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xa5,0x54,0x26,0xe1,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x54,0x49,0x49,0xe4,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0xa5,
+ 0x2a,0xd1,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x52,0x95,0x54,0xc4,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,
+ 0x24,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x57,0x29,0xa9,0x92,0x11,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x57,0xd5,0xfa,0xff,0xff,0xab,0xea,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x4a,0x55,0x2a,0x41,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x29,0xe5,0xff,0xff,0x95,0xa4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xa4,
+ 0x24,0xa5,0x14,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0xa5,0xd4,0xff,
+ 0x3f,0x52,0xa9,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x29,0x55,0x55,0x55,0x41,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xa9,0x54,0xea,0xff,0xdf,0x2a,0x55,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x4a,0x49,0x12,0x7e,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x55,0xa5,0x92,0xff,0x23,0xa5,0x4a,0xd6,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xa4,0x94,0xaa,0x42,
+ 0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0x2a,0xa9,0xff,0xad,0x92,0x24,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,
+ 0x95,0x52,0x52,0x29,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x52,0x49,0x55,
+ 0xfe,0x91,0x54,0x55,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x49,0x29,0x55,0x25,0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x95,0xaa,0x92,0x7e,0x55,0x55,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0x50,0x95,0xaa,0x24,0x7e,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x2a,0x95,0x54,0x79,0x95,0x92,0x92,0x94,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb9,0x62,0x29,0x49,
+ 0x85,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x49,0x49,0x95,0xba,0xa4,0x54,
+ 0xaa,0x52,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0x1a,0xf8,0xa7,0xaa,0x22,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x55,0x52,
+ 0x2a,0x75,0x55,0xa5,0x24,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0x5a,0xfd,0x57,0x92,0x94,0x7e,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x4a,0x4a,0x55,0x49,0x89,0x92,0x94,0xaa,0x94,0xf4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xfc,0x2f,0x55,0x05,0x7c,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0x4a,0x55,0x2a,0x55,0x55,0x55,0x55,0xe5,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x4e,0xfd,0x5f,
+ 0x29,0xa5,0x7c,0xff,0xff,0xff,0xff,0xff,0xff,0xa4,0x54,0x52,0x4a,0x55,0xa9,
+ 0xa4,0x24,0xa5,0x94,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x2f,0x1d,0xfe,0x3f,0x95,0x04,0x7c,0xff,0xfd,0xff,0xff,0xff,0x3f,0x49,0xa5,
+ 0x54,0xa9,0xa4,0x92,0x4a,0x49,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x44,0xfe,0x5f,0xa9,0x52,0x7d,0xff,0xe5,0xff,0xff,
+ 0xff,0x5f,0x55,0x92,0x2a,0x95,0x52,0x4a,0x52,0xaa,0x52,0x4a,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x16,0xff,0xbf,0x4a,0x05,0x7c,
+ 0xff,0xd9,0xff,0xff,0xff,0x5f,0x95,0x42,0xa5,0x52,0x95,0xaa,0xaa,0xaa,0x94,
+ 0x54,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x43,0xfe,
+ 0xbf,0x54,0x52,0x7d,0x7f,0x25,0xff,0xff,0xff,0xa7,0xa4,0x28,0x92,0x54,0x4a,
+ 0xa5,0x4a,0x92,0xaa,0x4a,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xab,0x12,0xfe,0x7f,0xa5,0x02,0x7c,0x7f,0x55,0xfd,0xff,0xff,0x95,0x2a,
+ 0x82,0x54,0xa5,0x54,0x2a,0xa9,0x2a,0xa5,0x52,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x27,0x4b,0xff,0xff,0x4a,0x29,0x7d,0xff,0x92,0xfe,
+ 0xff,0xff,0x55,0x92,0x20,0xa8,0x94,0x2a,0xa5,0x94,0x52,0x29,0xa9,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x01,0xff,0x7f,0x52,0x42,
+ 0x7c,0xff,0x25,0xf9,0xff,0x7f,0xaa,0x02,0x8a,0x40,0x29,0x49,0x09,0x41,0x4a,
+ 0x55,0x25,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,
+ 0xff,0xff,0x95,0x12,0x7d,0xff,0xa9,0xfa,0xff,0x7f,0x25,0xa9,0x20,0x2a,0xa5,
+ 0xaa,0x42,0x92,0x54,0x92,0x54,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0x83,0xff,0xff,0xa9,0x42,0x7e,0xff,0xaa,0xf4,0xff,0xaf,0x54,
+ 0x01,0x82,0x80,0xaa,0x54,0x14,0x08,0xa2,0xaa,0x4a,0xd2,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xcf,0xd7,0xff,0xff,0x52,0x12,0x7f,0xff,0x4a,
+ 0xea,0xff,0x57,0x92,0xaa,0x28,0x24,0x29,0x25,0x81,0x82,0x08,0x49,0x52,0x55,
+ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xef,0xe7,0xff,0xff,0x2a,
+ 0x05,0x7e,0xff,0x55,0xd5,0xff,0xa5,0x2a,0x00,0x8e,0x10,0x4a,0x89,0x24,0x28,
+ 0xa0,0xaa,0x2a,0x49,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xe7,0xff,
+ 0xef,0xff,0xff,0xa5,0x50,0x7e,0xff,0x25,0xe5,0xff,0x2a,0xa5,0x52,0x7f,0x85,
+ 0x54,0x35,0x08,0x82,0x0a,0x55,0x95,0xaa,0xfc,0xff,0xff,0xff,0xcf,0xff,0xff,
+ 0xff,0xff,0xd7,0xff,0xff,0xff,0x7f,0x52,0x85,0x7e,0xff,0xab,0x94,0x1e,0x55,
+ 0x2a,0xc8,0xff,0x10,0x90,0x92,0xa0,0x08,0x20,0x24,0x52,0x25,0xfd,0xff,0xff,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0x94,0x10,0x7e,0xff,
+ 0x93,0xaa,0x6a,0x49,0x49,0xf2,0xff,0x85,0x52,0x09,0x0a,0xa2,0x4a,0x92,0x29,
+ 0xa9,0xf2,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0x7f,
+ 0x55,0x25,0x7f,0xff,0x55,0x49,0x49,0x95,0x0a,0xf9,0xff,0x17,0x48,0x26,0x50,
+ 0x08,0x00,0xa9,0x4a,0x95,0xfa,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xf2,
+ 0xff,0xff,0xff,0xff,0x92,0x80,0x7e,0xff,0xa7,0x54,0xaa,0xa4,0x52,0xfc,0xff,
+ 0xaf,0x42,0x89,0xfa,0xbf,0x54,0x20,0xa9,0xa4,0xd4,0xff,0xff,0xff,0xcb,0xff,
+ 0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,0x54,0x29,0x7f,0xff,0x4b,0xa5,0x92,
+ 0x2a,0x01,0xff,0xff,0x1f,0xa8,0x22,0xff,0xff,0x01,0xa5,0x2a,0x55,0xa9,0xff,
+ 0xff,0xff,0xd4,0xff,0xff,0xff,0x7f,0xfa,0xff,0xff,0xff,0x7f,0xa5,0x04,0x7f,
+ 0xff,0x57,0x2a,0x55,0xa9,0x54,0xfe,0xff,0x3f,0x05,0x89,0xff,0xff,0x5f,0x48,
+ 0x92,0x2a,0x95,0xff,0xff,0xff,0xea,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,0xff,
+ 0x7f,0x2a,0x91,0x7f,0xff,0xa9,0x54,0x4a,0x52,0x02,0xff,0xff,0xff,0x50,0xd1,
+ 0xff,0xff,0x1f,0x81,0xaa,0xa4,0x52,0xfe,0xff,0x3f,0xe9,0xff,0xff,0xff,0x7f,
+ 0x1d,0xff,0xff,0xff,0xff,0x54,0x41,0x7f,0xff,0x93,0x92,0x52,0x95,0xc8,0xff,
+ 0xff,0xff,0x8b,0xc4,0xff,0xff,0x7f,0x24,0xa5,0x2a,0x49,0xf9,0xff,0x7f,0xd5,
+ 0xff,0xff,0xff,0xbf,0x4a,0xff,0xff,0xff,0xff,0x4a,0x14,0x7f,0xff,0x28,0xa5,
+ 0x94,0x2a,0xa0,0xff,0xff,0x7f,0x22,0xf0,0xff,0xff,0x7f,0x12,0x94,0xa4,0xaa,
+ 0xea,0xff,0xaf,0xea,0xff,0xff,0xff,0x5f,0x8e,0xff,0xff,0xff,0x7f,0xa9,0x40,
+ 0x7f,0xff,0x48,0x55,0x55,0x12,0xca,0xff,0xff,0xff,0x0a,0xf5,0xff,0xff,0xff,
+ 0x80,0x52,0x95,0x54,0xaa,0xfe,0x55,0xc4,0xff,0xff,0xff,0x5f,0xa5,0xff,0xff,
+ 0xff,0xff,0x94,0x14,0x7f,0xff,0x52,0x2a,0xa9,0x4a,0xe1,0xff,0xff,0xbf,0x24,
+ 0xf0,0xff,0xff,0xff,0x0b,0x28,0xa9,0x92,0x24,0x55,0x49,0xe5,0xd7,0xff,0xff,
+ 0xa7,0x8a,0xff,0xff,0xff,0x7f,0xa5,0xc0,0x7f,0xff,0x50,0x49,0x95,0x04,0xf8,
+ 0xff,0xff,0x5f,0x1f,0xfd,0xff,0xff,0xff,0x47,0x45,0x55,0xaa,0xaa,0x4a,0xaa,
+ 0xea,0xaf,0xff,0xff,0x2b,0xc3,0xff,0xff,0xff,0x7f,0x55,0x94,0x7f,0x7f,0x4a,
+ 0x55,0x52,0x51,0xfe,0xff,0xff,0x5f,0x4e,0xf8,0xff,0xff,0xff,0x1f,0x50,0x92,
+ 0x52,0x49,0xa9,0x92,0xe4,0xd3,0xff,0xff,0x4b,0xd5,0xff,0xff,0xff,0xff,0x94,
+ 0xc0,0x7f,0x3f,0xa0,0xa4,0xaa,0x04,0xfe,0xff,0xff,0xa7,0x1d,0xfd,0xff,0xff,
+ 0xff,0x9f,0x84,0xaa,0x4a,0xaa,0x24,0x55,0xf2,0x2b,0xff,0x7f,0xa9,0xc1,0xff,
+ 0xff,0xff,0x7f,0x4a,0x95,0x7f,0xbf,0x2a,0x95,0x24,0x50,0xff,0xff,0xff,0x97,
+ 0x5e,0xfe,0xff,0xff,0xff,0x3f,0x92,0x24,0x95,0x92,0xaa,0xa4,0xf2,0xcb,0xff,
+ 0x5f,0xd5,0xe5,0xff,0xff,0xff,0xff,0x52,0x80,0x7f,0x3f,0xa0,0x52,0x15,0x85,
+ 0xff,0xff,0xff,0xd7,0x38,0xfe,0xff,0xff,0xff,0xff,0x20,0xaa,0x52,0x55,0x55,
+ 0x55,0xf9,0x29,0xfd,0xab,0xa4,0xf0,0xff,0xff,0xff,0x7f,0x29,0xa9,0x7f,0xff,
+ 0x42,0x25,0x49,0xe8,0xff,0xff,0xff,0x69,0x7a,0xff,0xff,0xff,0xff,0xff,0x82,
+ 0x52,0xaa,0x24,0x89,0x4a,0xf8,0x55,0x2a,0x49,0x95,0xf5,0xff,0xff,0xff,0xbf,
+ 0x2a,0xc4,0x7f,0x7f,0x90,0x54,0x15,0xe2,0xff,0xff,0xff,0x25,0xbc,0xff,0xff,
+ 0xff,0xff,0xff,0x29,0x48,0x49,0xaa,0xaa,0xa4,0xfa,0x95,0x92,0x54,0x52,0xf0,
+ 0xff,0xff,0xff,0xbf,0x4a,0xd1,0x7f,0xff,0x05,0xaa,0x40,0xf8,0xff,0xff,0x7f,
+ 0xaa,0xfc,0xff,0xff,0xff,0xff,0xff,0x43,0xa9,0xaa,0x4a,0x52,0xa9,0xf8,0xa4,
+ 0xaa,0x52,0x95,0xfc,0xff,0xff,0xff,0x7f,0x52,0xc0,0x7f,0xff,0xa1,0x00,0x24,
+ 0xfa,0xff,0xff,0xff,0x0a,0xfe,0xff,0xff,0xff,0xff,0xff,0x17,0x92,0x24,0xa5,
+ 0x2a,0x55,0xfe,0xaa,0xa4,0x2a,0x29,0xf9,0xff,0xff,0xff,0xbf,0x2a,0xea,0x7f,
+ 0xff,0x05,0x92,0x90,0xfc,0xff,0xff,0xbf,0xa4,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0xa0,0xaa,0x54,0x49,0x25,0x7c,0x49,0x95,0xa4,0x12,0xfc,0xff,0xff,0xff,
+ 0x7f,0x8a,0xe0,0x7f,0xff,0xa3,0x04,0x05,0xfe,0xff,0xff,0xbf,0x06,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x1f,0x49,0x95,0x52,0xaa,0x12,0x7f,0x55,0x52,0x55,0x0a,
+ 0xfd,0xff,0xff,0xff,0x3f,0x29,0xe8,0x7f,0xff,0x0f,0x50,0x50,0xff,0xff,0xff,
+ 0x5f,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x04,0xa9,0x4a,0x25,0x45,0x3e,
+ 0xa9,0x2a,0xa9,0xa2,0xfc,0xff,0xff,0xff,0x7f,0x55,0xe1,0x7f,0xff,0x27,0x05,
+ 0xc4,0xff,0xff,0xff,0x9f,0x91,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x41,0x4a,
+ 0x29,0xa9,0x12,0x5e,0x95,0x94,0x4a,0x0a,0xfe,0xff,0xff,0xff,0xbf,0x12,0xf4,
+ 0x7f,0xff,0x8f,0x50,0xf1,0xff,0xff,0xff,0xa7,0xc2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x14,0x92,0xaa,0x4a,0xa2,0xbf,0xa4,0x52,0x95,0x22,0xff,0xff,0xff,
+ 0xff,0x3f,0x45,0xf2,0x7f,0xff,0x3f,0x04,0xf4,0xff,0xff,0xff,0xd7,0xe8,0xff,
+ 0xff,0xff,0xff,0x5f,0xff,0xff,0x83,0xa8,0x94,0x54,0x09,0x2f,0x55,0x4a,0x52,
+ 0x49,0xff,0xff,0xff,0xff,0x5f,0x99,0xf0,0x7f,0xff,0x7f,0x51,0xfc,0xff,0xff,
+ 0xff,0x6b,0xf1,0xff,0xff,0xff,0xff,0x5f,0xfd,0xff,0x2b,0x2a,0xa9,0x12,0x20,
+ 0x5f,0xa9,0xaa,0x54,0x00,0xff,0xff,0xff,0xff,0x5f,0x15,0xf2,0x7f,0xff,0xff,
+ 0x8f,0xff,0xff,0xff,0xff,0x2b,0xfc,0xff,0xff,0xff,0xff,0x2f,0xfd,0xff,0x87,
+ 0xa0,0x4a,0xaa,0x8a,0x9f,0x4a,0x52,0x15,0xa9,0xff,0xff,0xff,0xff,0x5f,0x8a,
+ 0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xf8,0xff,0xff,0xff,0xff,
+ 0x57,0xf2,0xff,0x2f,0x82,0x52,0x05,0xd0,0x2f,0x95,0x4a,0x49,0x84,0xff,0xff,
+ 0xff,0xff,0xbf,0x24,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xfd,
+ 0xff,0xff,0xff,0xff,0x4b,0xd5,0xff,0x9f,0x28,0x54,0x48,0xc5,0xbf,0x52,0x55,
+ 0x0a,0xe1,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfa,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x1a,0xfe,0xff,0xff,0xff,0xff,0x57,0xa9,0xff,0x3f,0x82,0x00,0x21,
+ 0xf0,0x5f,0x2a,0x49,0x21,0xc4,0xff,0xff,0xff,0xff,0xaf,0x1a,0xfd,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0x85,0xff,0xff,0xff,0xff,0xff,0x29,0xa5,0xff,
+ 0xff,0x24,0x52,0x88,0xfc,0xbf,0x92,0x2a,0x09,0xf1,0xff,0xff,0xff,0xff,0x9f,
+ 0x4c,0xfc,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x15,0xff,0xff,0xff,0x7f,
+ 0xff,0xa5,0x4a,0xff,0xff,0x90,0x08,0x01,0xfe,0x3f,0x55,0x52,0x24,0xf4,0xff,
+ 0xff,0xff,0xff,0xaf,0x02,0xfd,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xc6,
+ 0xff,0xff,0xff,0xbf,0xfe,0x95,0x54,0xff,0xff,0x05,0x42,0xa8,0xfe,0xbf,0xa4,
+ 0x2a,0x41,0xf9,0xff,0xff,0xff,0xff,0x5f,0x55,0xfc,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4f,0xd0,0xff,0xff,0xff,0xbf,0x7c,0xaa,0x92,0xfc,0xff,0x53,0x08,
+ 0x01,0xff,0x1f,0x4a,0x01,0x04,0xfc,0xff,0xff,0xff,0xff,0x27,0x05,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xc5,0xff,0xff,0xff,0x4f,0xbf,0x52,0xaa,
+ 0xfe,0xff,0x07,0x42,0xea,0xff,0xbf,0x50,0x54,0x51,0xff,0xff,0xff,0xff,0xff,
+ 0x97,0x56,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xf0,0xff,0xff,0xff,
+ 0x2f,0x7f,0xa5,0x54,0xfd,0xff,0x3f,0x09,0xe0,0xff,0x1f,0x02,0x01,0x04,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0x02,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0xf5,0xff,0xff,0xff,0xab,0x9f,0x94,0x92,0xfc,0xff,0xff,0x40,0xfd,0xff,0x9f,
+ 0x48,0x48,0xa1,0xff,0xff,0xff,0xff,0xff,0xa7,0x56,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x6b,0xf8,0xff,0xff,0xff,0xa4,0x5f,0xa9,0x2a,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0x22,0x21,0xc4,0xff,0xff,0xff,0xff,0xff,0x2f,0x03,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xfa,0xff,0xff,0x7f,0xd5,0x2f,0xa5,
+ 0xa4,0xfa,0xff,0xff,0xff,0xff,0xff,0xbf,0x08,0x08,0xf9,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x4a,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x94,0xfc,0xff,0xff,
+ 0x7f,0x69,0xac,0x2a,0x55,0xf9,0xff,0xff,0xff,0xff,0xff,0x7f,0xa2,0x22,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0x21,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x15,0xfe,0xff,0xff,0x9f,0x2a,0x95,0x94,0x92,0xf4,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x08,0x88,0xfe,0xff,0xff,0xff,0xff,0xff,0x57,0x8b,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xa9,0xfe,0xff,0xff,0x5f,0x52,0xbc,0x52,0x55,0xf5,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x21,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xa1,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x7f,0x0d,0xff,0xff,0xff,0x57,0x15,0x3f,
+ 0x55,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xc8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xd7,0x89,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xbf,0xd6,0xff,0xff,
+ 0xff,0x4b,0x45,0x3f,0x49,0xaa,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf9,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xc9,0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0x81,0xff,0xff,0xff,0x29,0x11,0x5f,0x28,0x55,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xc8,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0xd6,0xff,0xff,0x7f,0xaa,0xc2,0x0f,0x55,0x49,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,
+ 0xe2,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x9f,0xe1,0xff,0xff,0xbf,0x4a,0xd1,
+ 0x5f,0x48,0xa5,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe9,0xe0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x27,0xf4,0xff,
+ 0xff,0xbf,0x94,0xc4,0x07,0x91,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xea,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0xf1,0xff,0xff,0x9f,0x52,0xe0,0x4b,0x44,0x52,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0xe0,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xab,0x2a,0xf5,0x0f,0x51,0xa5,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x69,0xe5,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x55,0xf8,0xff,0xff,0x95,0x14,
+ 0xf0,0x5f,0x84,0x54,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x75,0xf0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x13,0xfd,
+ 0xff,0xff,0xa5,0x42,0xf9,0x7f,0x91,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0xfa,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0x54,0xfe,0xff,0x7f,0x52,0x12,0xfa,0xff,0x20,0xa5,0xe4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x34,0xf8,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xaf,0xaa,0x48,0xfc,0xff,0x0b,
+ 0x29,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xb5,0xf8,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0x52,0xff,0xff,0x2f,0x49,
+ 0x02,0xfe,0xff,0x43,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x3f,0x3a,0xfa,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x4a,
+ 0xff,0xff,0xa5,0x2a,0xa9,0xff,0xff,0x17,0x25,0xe9,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9a,0xfc,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0x2a,0xff,0x7f,0x95,0x54,0x80,0xff,0xff,0x07,0xa9,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x1d,0xfc,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x3f,0xa9,0xfe,0x7f,0xa9,0x12,0xe5,0xff,0xff,
+ 0x5f,0x4a,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x5f,0xad,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0x95,0xea,0x97,0x54,
+ 0x4a,0xf0,0xff,0xff,0x1f,0xa8,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5f,0x0e,0xfe,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,
+ 0x52,0x55,0xa9,0x92,0x02,0xfd,0xff,0xff,0x5f,0x53,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x5e,0xfe,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xbf,0x2a,0x49,0x4a,0x55,0x49,0xfc,0xff,0xff,0x3f,0x94,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x0f,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,0xa5,0xaa,0x92,0xa4,0x20,0xff,0xff,
+ 0xff,0xbf,0xa4,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x57,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x52,0x52,0xaa,
+ 0x2a,0x0a,0xff,0xff,0xff,0x7f,0x54,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xa7,0x94,0x4a,0x55,0x4a,0xa0,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x57,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x2f,0x55,0xa9,0x92,0x12,0xe9,0xff,0xff,0xff,0x7f,0x24,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x87,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0xa5,0x4a,0xaa,0x44,0xf4,0xff,
+ 0xff,0xff,0xff,0x55,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0xab,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xab,0x94,0xa4,
+ 0x92,0x12,0xf9,0xff,0xff,0xff,0xff,0xa8,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0x83,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x47,0xa9,0x2a,0x55,0x40,0xfc,0xff,0xff,0xff,0xff,0x25,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xd7,0x97,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0x33,0x55,0xa9,0x24,0x15,0xfe,0xff,0xff,0xff,0xff,
+ 0x95,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,
+ 0x93,0xc3,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x25,0xa5,0x2a,0x40,0xff,
+ 0xff,0xff,0xff,0xff,0xa9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,
+ 0xff,0xff,0xff,0xff,0xe7,0xd5,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4b,0x92,
+ 0x54,0x92,0xd4,0xff,0xff,0xff,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe9,0xff,0xff,0xff,0xff,0xff,0xd5,0xc1,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0x97,0xaa,0x4a,0x05,0xe2,0xff,0xff,0xff,0xff,0xff,0x25,0xf1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xfd,0xff,0xff,0xff,0xff,0xd5,0xea,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0x57,0x55,0x25,0xa1,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x95,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xfa,0xff,0xff,0xff,
+ 0xff,0xea,0xe0,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xa7,0x24,0x59,0x04,0xfa,
+ 0xff,0xff,0xff,0xff,0xff,0xa9,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe2,
+ 0xfd,0xff,0xff,0xff,0xff,0xc9,0xe9,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x4f,
+ 0x52,0x05,0xa1,0xfc,0xff,0xff,0xff,0xff,0xff,0xa5,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x70,0xf9,0xff,0xff,0xff,0xff,0x74,0xe2,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0x47,0x95,0x92,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xe2,0xfa,0xff,0xff,0xff,0xff,0x72,0xe8,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x97,0xaa,0x20,0xd0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xb8,0xfc,0xff,0xff,
+ 0xff,0xff,0xea,0xe2,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x07,0x04,0x82,0xc2,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x71,0xfd,0xff,0xff,0xff,0x7f,0x2a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0x4f,0x91,0x28,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x1f,0x54,0xfe,0xff,0xff,0xff,0x7f,0x75,0xf2,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0x27,0x44,0x82,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x29,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xb8,0xfc,0xff,0xff,0xff,0xbf,0x14,
+ 0xf1,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x0f,0x11,0x20,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x9a,0xfe,0xff,
+ 0xff,0xff,0x7f,0x5a,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x5f,0x40,0x85,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x4f,0x2d,0xfd,0xff,0xff,0xff,0x9f,0x12,0xf9,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0x3f,0x14,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x07,0xa6,0xfe,0xff,0xff,0xff,0x5f,0x4d,0xfa,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x4b,0xfe,0xff,0xff,0xff,0xbf,
+ 0x2c,0xf8,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x43,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x57,0xff,
+ 0xff,0xff,0xff,0x5f,0x0a,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xd5,0xa9,0xff,0xff,0xff,0xff,0xaf,0x5a,0xfc,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa3,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x81,0x95,0xff,0xff,0xff,0xff,0x9f,0x06,0xfd,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xca,0xa5,0xff,0xff,0xff,0xff,
+ 0x2f,0x95,0xfc,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xea,
+ 0xff,0xff,0xff,0xff,0xaf,0x26,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xf5,0xf4,0xff,0xff,0xff,0xff,0xaf,0x86,0xfe,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x70,0xe5,0xff,0xff,0xff,0xff,0x4f,0x2e,0xfe,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xb2,0xfa,0xff,0xff,0xff,
+ 0xff,0x57,0x83,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x78,
+ 0xf2,0xff,0xff,0xff,0xff,0xa7,0x22,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x5d,0xfd,0xff,0xff,0xff,0xff,0x97,0x87,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x3c,0xfd,0xff,0xff,0xff,0xff,0x53,0xa3,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xac,0xfe,0xff,0xff,
+ 0xff,0xff,0x57,0x95,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x9e,0xfe,0xff,0xff,0xff,0xff,0x97,0x81,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x57,0xfe,0xff,0xff,0xff,0xff,0xa9,0xa5,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xaf,0xff,0xff,0xff,0xff,0xff,0x4b,
+ 0x89,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x93,0xff,0xff,
+ 0xff,0xff,0xff,0x95,0xa2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x83,0xab,0xff,0xff,0xff,0xff,0xff,0xd3,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xe9,0xa5,0xff,0xff,0xff,0xff,0xff,0xa5,0xe1,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xd5,0xff,0xff,0xff,0xff,0xff,
+ 0xd5,0xc8,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xea,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0x14,0xc1,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xe0,0xe4,0xff,0xff,0xff,0xff,0xff,0x65,0xe8,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,
+ 0xff,0xff,0xff,0xff,0x3f,0x72,0xe9,0xff,0xff,0xff,0xff,0xff,0x6a,0xe1,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xbf,0xb8,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0x52,0xea,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xff,0xff,0xff,0xff,0x1f,0x7a,0xf5,
+ 0xff,0xff,0xff,0xff,0x7f,0x2a,0xe0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,
+ 0xff,0x8f,0x58,0xfa,0xff,0xff,0xff,0xff,0x7f,0x25,0xf5,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xb5,0xff,0xff,0xdf,0xff,0x57,0x5e,0xfd,0xff,0xff,0xff,0xff,0xff,0x34,0xe0,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xca,0xff,0xff,0x8f,0xff,0x07,0xac,0xfc,0xff,0xff,0xff,
+ 0xff,0x7f,0x2a,0xf5,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd4,0xff,0xff,0x57,0xff,0x2b,0x2d,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xb2,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd2,0xff,0xff,
+ 0x07,0xff,0x43,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x2a,0xf8,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0xc5,0xff,0xff,0x2b,0xfe,0x08,0xab,0xfe,0xff,0xff,0xff,0xff,0x7f,0xaa,
+ 0xf2,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xea,0xff,0xff,0x83,0x36,0x20,0x55,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x15,0xf0,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xc2,0xff,0xff,0x48,0x4a,0x85,
+ 0x49,0xff,0xff,0xff,0xff,0xff,0x7f,0x59,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xf5,0xff,
+ 0x7f,0x10,0x29,0x50,0xa5,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xf9,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0xe4,0xff,0x7f,0x05,0x95,0x42,0xd5,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x35,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0xea,0xff,0xbf,0xa0,0x24,0xa8,0xd4,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x19,0xf9,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xe5,0xff,0x3f,0x92,0xaa,
+ 0x50,0xe9,0xff,0xff,0xff,0xff,0xff,0x9f,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa9,0xe2,
+ 0xff,0x9f,0xa0,0xaa,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0x5f,0x1a,0xf9,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xf8,0xff,0x5f,0x4a,0x92,0x4a,0xf5,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x4a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xf2,0xff,0x1f,0x20,0x49,0xa5,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0x1a,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xf8,0xff,0x47,0xa9,
+ 0x2a,0x29,0xf9,0xff,0xff,0xff,0xff,0xff,0xbf,0x0a,0xfc,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf2,0xff,0x17,0x92,0xaa,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0x9f,0xac,0xfe,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf8,0xff,0x43,0xa8,0x24,0x25,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x0a,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xfa,0xff,0x91,0x54,0xaa,0x52,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2f,0x4d,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x45,0xfc,0xff,0x03,
+ 0x92,0x52,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x06,0xfc,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0x12,0xfe,0xff,0x50,0xaa,0x2a,0x95,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xa5,
+ 0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x44,0xff,0xff,0x0a,0x25,0xa5,0xa4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x97,0x06,0xfc,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x15,0xff,0xff,0x40,0xa9,0x92,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xfd,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa1,0xff,0x7f,
+ 0x92,0x4a,0xaa,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x06,0xfc,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x95,0x8a,0xff,0x3f,0x84,0x54,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x25,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x52,0xe0,0xff,0xbf,0x50,0xa9,0x4a,0xf2,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x8e,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa9,0xea,0xff,0x3f,0x24,0x95,0x54,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x23,0xfe,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x4a,0xf0,0xff,
+ 0x9f,0x50,0x69,0x49,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x8b,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xa5,0xf4,0xff,0x0f,0x2d,0x75,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xaf,0x03,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x14,0xfa,0xff,0x2f,0xa8,0xfa,0x25,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xfc,0xff,0x0f,0x4d,0xfd,
+ 0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0x83,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x12,0xfc,
+ 0xff,0x27,0x92,0xfe,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xd7,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x97,0x0a,0xff,0xff,0x83,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xc7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xab,0x24,0xff,0xff,0x2b,0xaa,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0x05,0x95,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x82,
+ 0xff,0xff,0x51,0xa9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xa9,0xe8,0xff,0xff,0x85,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x52,0xc1,0xff,0xff,0x90,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x4d,0xe8,0xff,0xff,0xa5,
+ 0xe4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x51,
+ 0xf2,0xff,0x7f,0x40,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x3f,0x95,0xf8,0xff,0x7f,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x15,0xfa,0xff,0x3f,0xa4,0xf4,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xfc,0xff,0x7f,
+ 0x71,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0x15,0xfe,0xff,0x3f,0x94,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xa7,0x0a,0xff,0xff,0x1f,0x79,0xf2,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xff,0xff,0x5f,0x8c,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x82,0xff,0xff,
+ 0x1f,0x5c,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xa4,0x92,0xff,0xff,0xbf,0x56,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9a,0xc4,0xff,0xff,0x0f,0x2e,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa2,0xf0,0xff,0xff,0xaf,0xa7,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0xe4,0xff,
+ 0xff,0x0f,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x54,0xf2,0xff,0xff,0x9f,0x4b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x9f,0x92,0xf8,0xff,0xff,0xc7,0xab,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x15,0xfe,0xff,0xff,0x97,0xd7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0x94,0xfc,
+ 0xff,0xff,0xc7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x2f,0x05,0xfe,0xff,0xff,0xcf,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0xff,0xff,0xff,0xd3,0xeb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x05,0xff,0xff,0xff,0xe3,
+ 0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0xc2,
+ 0xff,0xff,0xff,0xeb,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x95,0xc8,0xff,0xff,0xff,0xf3,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xd2,0xff,0xff,0xff,0xff,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0xe0,0xff,0xff,0xff,
+ 0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x49,
+ 0xf8,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x2a,0xf5,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x4a,0xf8,0xff,0xff,0xff,0xff,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x14,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,
+ 0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0x52,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x53,0x85,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x54,0xa2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x4a,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xa5,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0xe4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x5f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0x12,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0x54,0xfa,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x0a,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x53,0x45,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x97,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x45,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x54,0x82,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x4a,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x52,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xe8,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,
+ 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x55,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x24,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x15,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,
+ 0x49,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x2f,0x95,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x01,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xd5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x57,0x81,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x97,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0xf4,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x57,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2b,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0xfc,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x49,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x22,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x89,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xe9,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x9f,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x6f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f};
diff --git a/tests/auto/gui/image/qimagewriter/images/kollada.png b/tests/auto/gui/image/qimagewriter/images/kollada.png
new file mode 100644
index 0000000000..2abd4bb763
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/kollada.png
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/marble.xpm b/tests/auto/gui/image/qimagewriter/images/marble.xpm
new file mode 100644
index 0000000000..e59830bbe9
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/marble.xpm
@@ -0,0 +1,329 @@
+/* XPM */
+static char *dummy[]={
+"240 240 86 2",
+"#t c #959595",
+"#r c #9a9a9a",
+"#l c #9b9b9b",
+"#e c #9c9c9c",
+"#f c #9d9d9d",
+"#n c #9e9e9e",
+"#q c #9f9f9f",
+"#j c #a0a0a0",
+"#k c #a1a1a1",
+"## c #a2a2a2",
+"#g c #a3a3a3",
+"#s c #a4a4a4",
+"#d c #a5a5a5",
+"#b c #a6a6a6",
+"#p c #a7a7a7",
+".8 c #a8a8a8",
+"#o c #aaaaaa",
+".5 c #ababab",
+"#a c #acacac",
+".6 c #adadad",
+".9 c #aeaeae",
+".7 c #afafaf",
+"#i c #b0b0b0",
+"#. c #b1b1b1",
+"#h c #b2b2b2",
+".4 c #b3b3b3",
+"#c c #b4b4b4",
+".3 c #b5b5b5",
+".U c #b6b6b6",
+".O c #b7b7b7",
+".1 c #b8b8b8",
+".V c #b9b9b9",
+".2 c #bababa",
+".W c #bbbbbb",
+".X c #bcbcbc",
+".Z c #bdbdbd",
+".L c #bebebe",
+".Y c #bfbfbf",
+".N c #c0c0c0",
+".R c #c1c1c1",
+".M c #c2c2c2",
+".P c #c3c3c3",
+".S c #c4c4c4",
+".Q c #c5c5c5",
+".T c #c6c6c6",
+".H c #c7c7c7",
+".E c #c8c8c8",
+".K c #c9c9c9",
+".F c #cacaca",
+".I c #cbcbcb",
+".J c #cccccc",
+".B c #cdcdcd",
+".G c #cecece",
+".z c #cfcfcf",
+".D c #d0d0d0",
+".A c #d1d1d1",
+".C c #d2d2d2",
+".o c #d3d3d3",
+".y c #d4d4d4",
+".v c #d5d5d5",
+".n c #d6d6d6",
+".u c #d7d7d7",
+".w c #d8d8d8",
+".p c #d9d9d9",
+".m c #dadada",
+".h c #dbdbdb",
+".s c #dcdcdc",
+".g c #dddddd",
+".x c #dedede",
+".i c #dfdfdf",
+".f c #e0e0e0",
+".q c #e1e1e1",
+"Qt c #e2e2e2",
+".d c #e3e3e3",
+".# c #e4e4e4",
+".c c #e5e5e5",
+".r c #e6e6e6",
+".a c #e7e7e7",
+".b c #e8e8e8",
+".l c #e9e9e9",
+".e c #eaeaea",
+".t c #ebebeb",
+".j c #ececec",
+".k c #eeeeee",
+".0 c #f0f0f0",
+"#m c #f2f2f2",
+"Qt.#.a.a.a.b.c.d.e.e.a.b.a.c.c.b.c.c.cQt.f.f.g.h.g.h.g.h.f.i.i.iQtQtQtQtQt.cQtQtQt.i.f.f.fQt.d.c.a.a.a.a.a.a.a.a.a.b.a.a.a.c.a.c.e.e.e.e.e.e.j.e.j.j.j.j.j.j.k.j.k.j.k.j.j.k.j.j.e.e.e.e.l.a.a.a.#.c.#.c.a.a.a.e.e.e.l.e.e.l.e.e.e.e.e.e.e.e.e.e.j.e.j.j.j.e.j.e.e.e.l.e.e.l.e.e.l.e.e.l.e.e.l.e.l.e.l.e.l.e.l.e.c.c.#.#QtQt.m.g.n.o.p.i.i.m.i.#.#.#.#.#QtQt.qQt.#.#.#.#.#.#.#.#.a.a.a.a.a.a.r.a.a.r.a.r.a.r.a.r.a.r.a.a.#.c.c.c.r.a.r.l.a.a.a.a.e.e.l.a.a.a.c.c.r.#.s.h.h.p.n.h.f.i.gQt.#.d.d.f",
+".h.g.c.a.a.a.r.c.e.a.b.c.c.a.c.c.r.cQtQt.f.i.g.h.h.h.p.g.g.g.g.i.iQtQtQtQtQtQtQt.f.iQt.q.fQtQt.d.l.a.l.a.l.a.l.a.b.a.b.a.r.a.r.a.e.l.j.l.j.l.e.e.t.e.j.e.j.j.j.e.j.k.j.j.k.j.j.k.e.e.l.e.e.a.l.a.#.c.#.c.a.l.a.e.e.l.e.e.l.e.e.l.e.e.e.e.e.e.e.b.j.e.j.j.e.j.e.j.e.l.e.e.l.e.l.e.l.b.l.e.e.l.e.e.e.l.b.l.b.l.b.l.#.aQt.c.i.f.i.m.p.u.h.i.i.qQtQt.q.#.r.#Qt.#QtQtQt.#.#.#.c.c.#.c.r.l.r.l.a.r.a.l.#.a.r.a.r.a.r.a.r.a.r.c.r.c.a.c.r.a.r.a.c.a.c.a.l.e.e.a.b.cQt.c.qQt.i.m.p.v.p.m.f.sQtQt.q.cQt.q",
+".v.h.i.f.a.r.a.b.a.b.a.c.a.r.c.c.c.cQtQt.f.f.g.h.u.u.u.p.u.h.g.hQtQtQtQtQtQtQtQt.i.fQt.fQt.d.c.c.a.a.a.a.a.a.a.a.a.r.a.c.a.c.a.c.e.e.e.e.e.e.j.e.j.l.j.j.j.j.k.j.k.e.j.j.j.j.j.e.e.e.e.e.l.a.a.r.cQt.c.c.a.a.b.a.l.e.l.e.e.l.e.l.e.b.e.e.b.e.e.e.e.j.j.j.e.j.e.t.e.l.e.l.e.b.l.e.b.a.e.b.l.e.b.l.b.a.e.a.e.a.e.a.a.a.#QtQtQt.i.g.p.p.pQtQt.#Qt.q.#.a.r.#.#Qt.#Qt.a.r.c.r.a.r.a.r.a.a.a.r.a.a.r.a.#.r.a.r.a.r.a.r.a.r.a.a.c.c.#.a.a.a.a.a.r.a.a.a.e.e.l.a.a.c.c.c.a.i.i.p.p.u.h.m.i.f.i.c.c.c.d.f",
+".h.h.m.f.cQt.b.b.a.c.a.c.c.c.d.d.fQtQtQt.f.i.g.g.v.u.p.v.p.u.h.h.i.g.i.m.gQtQtQt.s.qQtQtQt.c.#.c.a.a.e.a.l.b.l.a.b.a.b.a.r.a.r.a.e.e.t.e.t.e.l.e.l.j.e.e.j.e.j.j.j.j.k.j.k.j.j.k.e.e.e.e.l.a.l.a.d.#.#.c.a.a.l.a.e.l.e.e.l.e.l.e.e.e.e.e.e.e.b.e.e.j.e.e.j.b.j.e.b.e.l.b.e.l.e.e.l.e.l.l.b.l.l.e.l.b.e.l.b.l.b.e.b.a.#.c.qQt.q.f.u.g.i.i.qQt.#.s.a.r.a.c.c.#.c.c.#.c.#.c.#.a.c.a.a.r.l.a.l.r.a.r.r.a.r.a.r.a.r.a.r.a.r.c.r.a.c.a.a.l.r.l.a.l.b.a.e.l.e.b.aQt.cQtQtQt.s.g.v.u.w.f.gQt.#.cQt.c.f.q",
+".h.v.h.g.d.d.a.a.r.a.c.r.c.c.cQt.d.f.f.f.f.i.m.g.g.h.u.p.p.u.u.h.i.i.s.i.i.i.i.i.fQt.iQt.#.c.a.c.a.a.a.a.a.a.a.a.a.r.a.c.aQt.a.c.e.l.e.e.e.e.j.j.j.l.j.e.j.k.j.j.k.e.k.e.j.j.j.e.e.e.e.l.e.a.a.r.#.c.#.c.a.a.b.a.e.b.l.e.b.l.e.b.l.l.b.l.l.b.l.l.e.e.t.j.e.l.e.j.l.e.l.e.l.e.l.e.#.e.#.e.a.e.e.l.a.l.a.b.a.e.a.l.b.l.a.c.#.gQt.i.g.g.s.iQt.#.#Qt.r.a.r.a.c.c.c.c.l.a.l.a.l.r.a.r.a.l.a.r.a.a.a.a.r.a.r.a.r.r.a.r.a.r.a.a.c.c.#.a.a.a.a.a.a.b.a.b.l.e.b.a.a.c.cQtQt.i.i.m.p.w.i.f.d.#Qt.c.c.c.d.d",
+".x.h.v.w.hQt.c.bQt.c.a.c.c.dQt.d.f.g.f.i.fQt.f.s.f.g.g.g.u.h.p.h.u.g.h.g.h.f.g.g.qQtQt.c.#.c.#.c.a.a.a.a.l.a.l.a.b.a.c.b.c.r.a.b.l.e.j.e.j.l.e.e.j.j.j.j.j.e.k.e.k.j.j.k.j.k.j.k.e.e.e.e.l.a.a.a.c.i.#.c.a.a.a.b.l.e.l.e.l.e.e.l.e.e.l.e.e.l.e.e.l.e.e.e.j.l.b.l.e.l.b.l.r.l.b.e.l.e.l.e.l.b.a.b.e.b.l.e.l.e.l.b.l.b.l.#.c.#QtQt.m.i.f.iQtQtQt.q.#.a.r.c.a.a.b.e.a.a.a.a.a.l.a.l.a.a.l.a.l.a.l.a.r.r.a.r.a.a.r.a.r.a.r.c.r.a.c.a.l.l.l.l.b.a.a.b.e.e.l.a.#.cQt.c.c.f.s.g.m.m.f.fQt.f.c.b.a.r.r.d",
+".f.g.n.v.n.x.q.d.c.c.d.dQt.d.fQt.f.fQt.gQtQtQtQtQtQt.f.f.f.g.m.h.h.p.u.v.p.h.g.iQtQt.#Qt.c.a.c.c.a.l.a.l.b.a.a.a.b.a.r.aQt.c.a.b.b.l.e.l.e.e.j.e.t.e.j.e.j.j.k.j.j.j.j.e.k.e.j.j.e.e.e.l.e.a.l.rQt.#.c.c.a.a.a.a.e.e.e.l.e.l.e.e.l.l.l.l.l.e.l.l.e.j.e.j.l.b.l.e.b.l.b.l.e.l.a.b.a.b.a.e.#.e.l.l.a.e.#.e.#.e.a.e.l.e.a.a.q.#.fQt.f.gQt.iQtQtQtQt.#.#.r.a.a.b.e.b.l.l.e.l.e.l.a.l.a.a.a.a.a.a.a.a.a.r.a.r.a.r.a.r.a.r.a.a.c.c.c.a.l.e.l.a.a.a.b.l.e.b.a.a.c.c.c.q.d.g.f.m.g.sQt.c.dQt.c.#.b.r.c.r",
+".f.f.g.o.y.s.f.q.c.c.d.#.f.dQt.q.f.f.fQtQtQtQtQtQt.q.dQt.f.f.x.g.p.u.p.u.u.h.p.h.iQt.#.#.c.#.c.l.a.a.a.a.l.a.l.a.b.a.c.a.cQt.c.a.l.e.j.e.j.e.l.e.j.e.j.e.j.j.j.j.j.k.j.k.j.k.j.j.e.e.e.e.l.a.a.aQtQt.#.c.a.l.a.a.b.l.e.b.l.e.b.l.l.b.e.l.b.l.l.b.l.j.e.j.e.l.e.l.a.e.l.b.a.b.e.l.e.l.b.l.e.l.b.l.b.e.l.e.l.b.l.r.l.b.l.#.c.#.qQt.gQt.fQt.qQt.qQt.dQt.a.a.a.e.e.e.l.a.l.l.a.e.l.e.e.a.l.a.l.a.l.a.r.a.r.a.r.a.r.a.r.a.r.c.r.c.a.a.l.a.a.b.a.e.b.b.#.l.e.a.#.cQt.d.d.f.s.m.iQtQt.cQtQt.a.b.#.b.c.#",
+".b.i.f.x.w.z.A.pQt.d.g.x.g.g.h.g.f.d.dQt.dQt.c.c.#.c.#Qt.iQt.s.x.u.y.z.B.C.y.g.g.#QtQt.c.#.a.a.c.a.l.b.l.a.a.a.a.#.c.c.c.c.d.c.c.b.a.a.a.a.a.e.a.l.l.l.l.l.l.e.l.j.e.j.e.e.e.e.j.j.j.l.e.a.a.c.c.iQtQt.#.a.#.b.e.a.a.a.a.b.a.a.a.l.a.l.#.l.l.l.l.l.b.l.b.l.b.l.b.l.b.a.a.#.qQtQt.c.a.c.aQt.a.#.a.b.l.r.l.b.l.e.l.l.a.a.#.q.dQt.g.i.sQtQt.i.c.a.a.#.r.r.a.a.b.b.b.b.a.b.a.b.a.a.e.l.l.l.e.l.a.a.a.r.a.a.r.a.r.a.a.a.a.l.a.b.l.b.b.b.l.a.a.a.a.a.a.e.#.a.#.a.#.a.#.q.i.d.i.i.d.c.c.r.b.r.b.c.r.#.c",
+".b.c.f.f.p.A.o.v.dQt.q.x.g.w.f.i.f.d.d.c.c.c.a.c.#.c.#.cQtQtQt.i.p.n.z.D.B.C.o.u.i.iQt.i.#.c.c.c.c.c.#.c.c.c.c.c.c.#.#.i.#.d.c.c.a.a.a.b.l.b.a.a.l.l.l.b.l.l.e.e.e.j.j.j.j.j.e.j.e.j.l.e.a.c.c.cQtQt.c.c.c.a.a.b.a.a.b.a.a.a.b.a.e.l.l.l.l.e.l.l.b.a.l.r.l.a.l.r.b.l.#.aQt.c.#Qt.a.a.#.a.a.a.c.a.b.e.l.b.e.a.b.a.b.l.#.#.cQt.i.f.g.f.x.fQt.c.c.r.r.r.#.a.a.a.e.b.a.a.a.a.a.b.a.e.l.l.l.l.l.l.a.l.r.#.a.r.a.a.a.l.a.l.b.a.e.b.e.e.a.a.b.a.a.b.#.a.a.a.#.a.#.a.#.a.c.qQt.i.dQt.c.#.b.b.#.b.r.c.c.b",
+".b.aQt.f.m.h.o.o.m.s.g.s.h.g.sQt.dQt.c.c.c.c.c.c.a.c.c.c.#.dQt.g.i.h.y.A.C.v.v.p.m.g.g.f.f.fQt.#.c.c.a.c.#.c.#.c.#QtQtQtQt.#.c.c.a.a.a.l.a.l.l.l.l.l.l.l.l.l.e.l.e.e.e.l.e.l.e.l.e.e.e.#.b.aQt.c.i.f.q.c.a.c.b.b.a.#.a.b.#.a.a.#.l.e.l.b.l.l.b.l.l.l.b.l.b.l.l.l.r.a.#.q.#.c.i.c.#.c.a.c.#.a.#.a.a.l.b.l.l.b.l.e.l.a.aQt.#Qt.f.g.i.iQtQt.i.#.a.a.r.r.#.r.a.c.b.b.a.b.a.b.a.a.e.e.l.l.e.l.l.a.a.a.a.r.a.#.r.a.a.a.l.a.a.e.e.l.b.l.a.a.a.a.b.a.a.a.#.l.#.a.#.a.#.a.q.d.i.i.cQt.c.c.b.b.b.b.c.b.#.a",
+".aQtQt.f.x.g.u.o.o.p.o.u.n.g.f.c.c.d.c.c.a.r.a.b.a.a.#.c.cQtQt.d.q.s.h.v.u.v.u.u.p.p.p.g.m.g.g.fQt.#Qt.#.#.c.#Qt.i.q.gQt.iQt.c.c.a.a.a.a.a.a.a.a.a.r.#.a.l.e.a.b.l.e.l.e.l.b.l.e.e.t.e.a.c.c.dQtQtQt.#.c.c.b.a.b.a.b.a.a.a.b.a.b.a.a.a.a.#.a.r.a.#.r.a.r.a.r.#.aQt.#Qt.c.#.c.#Qt.a.a.a.r.a.a.r.a.a.#.aQt.a.c.a.c.a.#.#.#.c.q.f.f.s.f.sQtQt.c.aQt.a.r.#.a.a.b.a.a.e.a.a.e.a.e.e.e.e.l.l.a.e.a.l.a.r.a.r.a.a.a.a.b.e.l.e.e.e.b.e.b.b.a.b.#.a.a.#.a.b.#.c.cQt.c.q.c.q.#.f.c.f.c.a.c.b.#.a.a.#.b.c.b",
+".d.d.dQt.s.s.h.w.v.z.o.v.h.i.f.#.c.c.c.c.c.a.b.a.a.b.a.c.c.f.dQtQt.q.m.h.h.u.p.p.h.w.p.h.h.g.g.g.gQt.iQtQtQtQtQt.i.i.iQtQtQt.#.c.#.a.a.b.l.a.a.a.a.l.r.l.#.a.l.a.#.b.e.a.b.a.e.e.l.e.a.a.c.c.d.dQtQt.c.#.#.c.b.l.b.a.#.a.#.a.a.#.a.#.a.a.r.a.#.a.a.a.#.a.#.a.a.aQt.qQt.#Qt.#Qt.c.#.c.a.c.aQt.a.#.c.a.a.b.a.#.a.#.a.a.c.iQt.f.f.f.i.iQt.iQt.#.a.a.a.a.r.a.c.a.a.b.a.b.l.e.e.e.a.e.l.e.b.a.b.a.b.a.a.#.r.a.a.b.c.a.a.e.e.a.e.l.b.l.a.a.a.b.a.a.r.aQt.a.c.q.c.q.cQt.#QtQtQtQtQt.cQt.b.a.r.b.c.c.c.c",
+".g.d.g.f.h.m.h.u.z.E.F.B.n.h.fQt.c.c.c.b.a.r.a.b.b.a.b.a.c.c.c.d.s.i.g.m.h.g.h.w.h.g.h.m.h.g.m.x.i.i.i.i.f.s.i.s.h.s.g.iQtQt.i.c.r.a.a.r.a.a.a.r.#.a.a.a.a.a.b.a.b.a.l.b.l.a.a.a.b.e.a.r.c.cQtQtQt.q.#.c.r.a.b.b.a.a.a.b.aQt.a.c.r.c.r.#Qt.#.a.cQt.#.#.c.#.#Qt.#.iQt.d.qQt.#.c.#.a.r.a.#.a.b.a.a.cQt.cQt.c.c.c.c.c.qQt.#.d.i.f.g.i.g.q.fQt.c.a.c.a.a.a.a.#.a.a.a.b.a.a.e.a.e.a.a.e.e.l.e.a.a.c.r.r.a.a.a.c.a.b.b.l.l.a.b.a.b.e.b.a.b.a.aQt.a.#.a.c.c.cQt.c.f.#.c.i.#QtQtQt.r.c.aQt.c.d.#.fQt.f.d",
+".x.q.x.x.h.p.w.v.G.H.E.I.C.o.g.x.c.c.c.b.a.a.e.e.a.e.b.b.b.c.c.c.f.f.f.f.f.f.g.i.h.h.g.h.g.g.f.iQt.f.g.g.g.m.g.m.g.h.i.iQt.i.#.#.c.#.q.c.#.#.c.q.#.r.a.a.c.a.a.b.a.b.a.b.a.b.a.a.e.a.#.c.c.dQt.dQtQt.c.c.a.c.b.a.b.a.a.a.a.b.a.#.c.q.cQt.#Qt.#.#.c.q.c.q.c.q.c.q.f.f.iQt.c.i.a.q.a.c.a.c.aQt.aQt.c.c.c.c.cQt.cQt.#.a.#.i.f.f.f.g.s.iQt.iQt.#.c.#.a.a.a.a.a.c.a.r.a.e.a.e.e.a.b.l.e.e.e.b.e.b.b.#.a.a.cQt.b.c.b.b.l.a.e.a.l.b.a.b.#.a.#.a.a.a.c.aQt.c.i.#.i.c.f.#Qt.#.f.c.cQt.cQtQt.d.i.fQt.q.f.f",
+".s.w.h.p.h.n.v.o.p.A.F.J.I.B.o.h.c.a.c.b.a.b.a.a.b.e.b.e.a.r.c.c.x.i.f.iQtQt.f.f.p.p.h.h.w.i.i.f.i.i.f.i.f.i.f.g.g.p.m.g.i.q.d.#.i.c.#.c.#.c.#.#.r.a.q.a.a.#.r.a.a.a.e.a.a.a.b.a.#.a.c.c.cQt.d.dQtQt.#.cQt.a.a.e.a.r.a.b.a.a.c.a.q.c.#.q.#Qt.#Qt.q.#Qt.#.c.qQtQt.g.g.dQtQt.#.#.c.a.a.#.a.r.a.a.a.c.cQt.cQt.c.c.c.c.#QtQt.f.f.m.x.g.f.q.fQt.c.c.a.a.a.a.a.a.r.#.a.a.a.a.e.a.e.a.a.e.e.e.b.e.a.b.b.a.a.a.c.a.b.l.b.a.l.a.b.a.b.e.b.a.a.r.aQt.b.#.aQt.#.f.fQt.iQtQtQtQtQtQtQt.cQt.c.fQt.f.h.x.x.h.s",
+".h.u.v.u.v.u.h.gQt.f.n.o.B.B.D.B.h.fQt.c.a.a.b.a.e.l.e.e.a.c.c.f.#.cQt.#.fQt.i.f.q.i.s.p.h.g.p.p.s.i.i.i.i.g.f.i.iQtQtQt.i.i.s.iQtQt.#Qt.#.i.#.i.a.#.r.r.a.r.l.l.a.a.a.#.a.a.a.a.#.c.#.c.#Qt.#.#.iQt.c.c.a.b.b.e.l.e.l.#.b.c.b.c.dQt.iQt.f.i.s.g.s.s.i.s.i.m.sQt.f.iQt.q.c.#.a.bQt.d.c.#.a.a.#.a.#.#.c.#QtQt.i.f.q.#Qt.i.i.g.i.g.x.s.q.iQt.q.#.#.#.a.a.a.a.a.l.a.c.r.c.c.c.c.c.b.e.l.a.l.a.b.c.aQt.a.a.a.c.a.b.b.l.a.a.a.a.cQt.c.c.c.i.d.dQt.dQt.cQt.#QtQtQtQt.d.#.a.cQt.cQt.d.d.g.f.x.h.w.u.u.v",
+".u.p.h.h.p.m.g.x.q.f.g.u.C.B.z.o.v.fQt.c.l.a.a.a.e.e.b.l.b.c.c.c.c.cQt.c.d.d.fQt.x.i.g.g.p.u.p.u.h.i.i.g.s.i.i.f.s.f.q.f.iQt.i.f.q.g.q.i.qQt.f.q.r.r.r.#.#.a.a.a.a.a.a.c.aQt.c.q.c.#.#Qt.#.#.c.#Qt.c.#.a.c.a.l.b.b.l.e.b.a.#.c.a.q.cQtQtQtQt.i.m.i.p.m.g.u.w.m.s.m.g.fQt.qQt.#.#.q.#.q.c.#.a.a.#.c.q.c.q.cQt.cQt.q.r.iQt.g.i.x.gQt.iQt.qQt.#.#.c.a.a.#.a.l.a.a.l.c.c.c.c.c.c.a.c.l.e.b.a.b.c.a.c.r.a.#.a.a.#.a.b.b.a.b.a.r.a.c.c.c.c.cQt.c.i.c.i.c.c.q.dQtQt.fQtQt.#Qt.#.d.i.d.i.i.g.m.g.n.v.u.p",
+".h.h.m.g.g.f.fQt.#Qt.g.g.y.B.B.v.h.h.f.c.c.a.b.a.e.l.e.a.a.b.c.c.#.c.c.qQtQt.xQt.i.g.g.w.h.p.v.p.p.h.h.g.i.i.s.i.i.fQtQt.q.f.iQt.i.s.i.m.i.s.i.s.q.iQt.#Qt.#.i.#.c.c.c.c.#.c.#.c.#.c.#.#.c.#.#.cQt.i.c.c.a.r.b.e.a.e.l.a.a.r.a.r.c.q.#.iQt.i.q.s.i.h.n.o.z.A.z.v.w.g.m.f.f.d.g.dQt.dQt.c.c.c.#.c.#Qt.#.c.#QtQtQt.#.iQtQt.i.i.m.i.s.xQt.iQt.q.c.#.a.#.a.a.#.a.#.aQt.cQt.cQt.c.c.c.#.a.a.a.a.c.c.c.r.a.a.c.a.c.e.b.a.#.a.c.#.c.c.c.fQt.fQt.dQt.fQtQt.#Qt.c.i.cQt.dQt.dQt.fQt.dQt.f.h.g.g.g.v.h.n.v",
+".f.f.f.fQtQt.d.d.b.c.f.f.p.C.A.v.h.v.i.c.a.c.a.r.e.e.c.b.c.a.b.a.a.#.#.c.cQtQt.d.m.f.g.h.h.p.u.u.o.u.u.g.g.i.fQt.s.i.s.fQtQtQtQt.i.f.g.g.g.g.m.g.i.s.i.xQtQtQtQt.#.c.q.c.#.c.c.#.c.#Qt.c.c.c.c.qQt.c.#.c.c.a.b.a.b.l.b.b.a.aQt.a.a.q.cQtQtQt.x.f.u.p.o.z.J.K.B.A.p.v.n.w.w.x.g.h.f.g.d.i.d.iQt.c.iQt.#.iQtQt.iQt.iQtQt.s.x.s.x.gQt.f.qQt.f.#.#.c.c.#.a.a.a.a.a.a.c.c.c.dQt.dQt.c.a.aQt.a.a.q.c.#.#.a.a.a.a.r.a.b.a.a.a.b.c.c.cQtQt.cQt.c.i.cQt.d.q.cQt.c.#.f.d.q.d.i.d.fQt.f.g.f.s.g.g.m.h.h.g.h",
+"QtQt.#.f.c.c.c.c.a.cQt.d.x.v.v.u.p.w.f.c.#.c.a.c.a.a.b.a.b.a.a.b.a.a.a.c.#.d.#Qt.f.f.i.g.g.h.u.u.y.u.u.h.m.i.s.f.i.i.iQt.x.f.q.fQt.i.f.i.m.g.i.g.s.i.s.i.i.g.fQt.d.#QtQt.iQt.i.c.#.c.#.c.q.c.#.cQtQt.c.#.#.a.b.a.e.a.e.a.a.r.a.c.qQt.#.iQt.q.f.s.A.A.z.B.F.B.o.v.n.v.v.v.v.v.v.v.x.w.g.h.x.g.f.g.f.g.f.f.g.f.dQt.f.s.i.s.i.m.i.m.g.q.gQt.i.#.f.#.q.c.q.a.c.#.c.#.c.cQt.c.c.c.c.c.q.a.#.c.c.c.#Qt.a.rQt.a.c.#.b.b.#.aQt.cQt.c.dQt.fQt.fQt.dQt.fQtQt.c.r.fQtQtQt.d.gQtQt.i.f.gQt.g.f.f.g.f.f.f.f.f",
+".c.c.c.b.b.b.b.b.b.a.a.cQt.x.v.A.p.p.iQt.c.c.c.c.c.c.a.r.a.a.b.a.a.a.c.aQt.#.d.qQtQt.f.i.i.g.m.p.v.u.u.p.p.g.g.i.g.i.i.fQtQtQtQt.s.i.gQtQtQtQt.i.i.q.f.i.f.q.g.i.i.gQt.f.#.d.#.d.c.q.c.#.c.q.c.#.iQt.q.c.cQt.b.a.b.e.#.a.#.cQt.c.cQt.g.iQt.s.i.m.z.A.z.B.B.z.v.p.h.w.h.n.p.v.A.I.I.B.A.v.h.h.w.h.h.h.m.x.x.f.i.f.s.g.m.x.m.g.g.g.q.f.sQtQt.#Qt.d.c.r.cQt.#.c.#.cQt.c.c.c.cQt.c.c.a.r.q.#.#.iQtQt.q.a.#Qt.a.r.a.b.c.a.a.b.a.c.i.cQt.fQt.c.i.cQt.c.q.cQt.#.dQtQt.fQt.f.x.d.d.f.d.d.i.d.c.c.c.c.a.c",
+".a.b.b.l.e.b.j.e.b.e.e.a.cQt.g.o.v.g.g.x.#.c.c.c.r.c.c.a.b.a.e.e.#.a.a.a.a.c.c.c.#.cQtQt.fQt.i.g.p.u.p.p.w.p.w.h.i.i.i.i.s.f.q.fQt.qQt.q.gQtQt.i.#.#Qt.#QtQtQt.i.i.g.f.sQt.i.#.c.i.d.c.c.dQt.d.iQt.f.#.c.c.c.a.r.l.l.e.a.c.c.c.c.g.f.f.m.g.m.w.v.o.v.o.B.B.B.u.u.m.x.w.g.w.p.z.B.L.M.F.A.A.o.y.A.o.o.p.h.w.h.w.n.h.w.g.w.g.s.g.f.s.f.i.i.d.fQtQt.#.c.#.c.#.c.q.c.c.c.c.c.c.c.c.c.#.#.c.#.fQtQtQt.r.#.a.#.cQt.b.b.#.a.c.aQt.c.dQt.dQt.d.i.d.i.d.i.c.q.c.c.q.i.d.i.f.gQtQtQt.c.a.#.r.b.b.#.b.b.j.e",
+".e.b.e.e.j.j.e.j.b.e.e.#.c.d.x.p.v.h.m.wQt.c.c.d.c.a.c.a.e.a.e.l.l.a.a.c.a.#.c.#.#.c.#.#.iQt.f.q.g.h.u.h.p.h.u.u.s.i.s.f.i.iQtQt.iQt.iQtQt.#QtQt.x.#Qt.#.#.#QtQtQtQtQt.g.f.g.f.g.dQtQt.f.#.f.#.dQt.i.d.q.cQt.a.b.a.a.#.a.#.cQt.c.f.m.g.w.w.p.A.z.v.u.A.B.z.o.p.w.g.m.h.w.w.n.o.o.N.H.I.D.F.F.N.O.N.P.I.A.v.h.n.h.m.h.u.g.w.g.m.i.s.f.gQt.i.dQt.dQtQtQt.#Qt.#.c.q.c.c.c.cQt.c.c.c.#.#Qt.qQt.gQt.i.#.#.#.#.c.c.a.c.c.a.r.a.c.c.c.i.cQtQt.d.i.dQt.d.q.cQt.c.fQt.iQt.g.d.dQt.a.a.b.l.e.r.e.e.b.e.e.k",
+".e.e.e.e.e.j.j.j.e.e.b.b.c.d.q.g.u.z.J.D.p.g.c.l.c.b.c.b.a.a.e.e.c.c.a.c.q.c.c.#.c.#.c.#.c.#Qt.#.i.q.i.m.p.v.u.v.u.h.h.i.m.i.i.f.qQtQtQt.xQt.i.#.r.#.#.c.a.a.c.bQt.c.c.c.c.c.qQt.i.g.iQt.f.d.g.f.gQtQt.c.c.a.#.a.b.a.#.c.d.d.f.x.m.p.o.z.B.z.z.o.A.v.v.v.v.u.n.h.h.h.m.m.h.v.z.B.Q.R.F.A.v.z.z.F.B.B.B.F.I.I.J.B.B.z.A.w.p.m.x.g.g.p.g.m.i.iQt.f.#QtQtQtQt.cQtQt.cQt.c.c.c.c.c.cQt.cQt.#Qt.f.g.f.c.c.c.c.a.#.cQt.a.c.c.cQt.c.c.cQt.#Qt.cQtQt.fQt.q.#Qt.x.h.g.dQt.c.aQt.a.b.#.a.b.e.e.e.e.e.e.e.e",
+".j.b.e.j.e.j.e.j.j.e.e.b.c.d.q.q.h.v.D.B.z.n.i.c.c.a.c.a.b.a.b.l.a.#.c.#.c.c.q.c.c.c.#.c.c.#.d.#Qt.i.i.h.p.u.y.A.p.h.w.i.f.iQtQt.xQt.qQt.#Qt.#Qt.r.#.r.#.c.a.#.c.c.cQt.cQt.c.cQtQt.f.f.f.g.f.g.i.h.g.f.i.dQt.c.c.c.c.dQt.g.f.h.m.m.m.u.A.z.o.A.v.v.v.p.v.p.u.h.w.f.g.x.m.w.n.B.I.M.S.E.A.z.z.y.z.o.o.o.v.z.B.E.E.P.Q.T.F.I.o.o.p.u.p.u.g.w.x.gQtQt.c.#.c.iQt.c.q.dQt.cQt.c.cQt.c.c.qQt.#Qt.g.f.f.qQt.cQt.c.c.c.c.c.rQt.c.c.cQt.c.cQt.c.c.i.c.i.d.qQt.f.g.x.q.f.c.c.#.b.a.b.a.b.r.b.e.b.e.b.e.e.e",
+".e.j.e.k.e.j.j.j.j.k.e.a.r.c.d.q.q.m.v.C.A.u.gQt.c.cQt.c.a.a.a.a.c.c.a.c.#.c.c.#.c.q.c.c.q.c.#QtQt.f.i.m.g.v.u.A.p.u.h.i.m.iQt.fQtQtQt.xQt.#Qt.#.q.a.r.c.a.a.c.b.cQt.#.c.a.c.a.c.c.cQtQt.d.g.g.g.w.w.h.fQt.d.i.d.g.g.s.h.m.w.h.w.i.m.v.o.u.o.v.u.u.h.u.h.u.p.n.h.p.h.m.x.w.u.B.F.M.M.F.C.z.o.u.o.u.u.h.p.u.o.A.z.E.M.N.R.E.E.K.K.I.B.o.u.h.g.x.x.g.iQt.iQt.dQtQtQt.qQtQtQt.#Qt.i.#Qt.i.dQt.g.f.g.c.d.q.c.cQt.cQt.cQt.c.cQt.c.c.#Qt.rQtQtQt.d.i.d.#.i.g.fQt.d.dQt.a.b.a.r.a.r.a.e.e.e.e.e.e.e.e.e",
+".e.j.j.e.e.j.e.j.e.e.e.b.c.r.c.dQt.i.g.w.v.o.h.x.c.c.c.c.b.c.b.a.a.c.c.#.c.c.#.c.#.c.#.c.#.c.cQtQtQt.i.i.g.p.v.o.u.p.h.g.i.i.gQt.x.#.i.#QtQt.qQt.a.rQt.a.a.c.a.c.a.a.a.a.a.#.a.aQt.c.c.fQt.dQt.f.x.x.x.h.g.f.g.h.u.n.g.g.g.g.m.g.m.m.p.o.u.v.o.u.w.p.w.w.h.w.m.h.h.x.w.g.n.o.B.Q.U.Q.D.o.C.o.u.v.w.w.u.g.w.h.h.v.v.z.C.B.I.I.E.N.N.Q.I.A.A.v.p.m.i.i.g.f.i.sQt.i.qQt.q.i.f.f.fQt.d.iQt.#.f.g.i.g.c.i.c.f.cQt.c.c.c.c.c.c.c.cQt.c.c.c.#QtQtQtQt.fQt.i.f.i.dQt.c.c.b.#.b.a.b.a.b.e.a.b.b.e.r.e.b.e",
+".j.e.e.k.e.k.e.j.k.e.e.e.b.c.c.r.iQt.m.h.w.v.n.u.d.f.c.c.c.#.c.aQt.#.c.c.q.c.c.q.c.q.c.c.#Qt.#QtQtQt.f.s.i.m.p.p.u.p.u.g.m.i.f.qQtQtQtQt.i.#Qt.#.r.#.r.a.a.#.r.a.b.a.bQt.a.c.b.#.a.a.c.c.cQtQt.f.f.g.g.f.x.h.g.w.w.h.g.h.x.h.g.g.i.p.v.A.o.o.A.A.u.w.w.g.w.g.p.m.s.w.p.w.n.o.I.T.V.N.D.o.v.v.h.v.g.i.w.h.u.h.w.h.p.g.u.p.w.u.v.A.Q.T.E.P.F.I.z.u.m.g.g.i.m.g.g.i.g.f.f.f.f.f.f.m.f.g.f.g.f.g.x.gQtQtQtQtQt.c.q.cQt.c.q.c.q.c.c.c.#.q.c.f.c.iQt.i.f.gQt.iQt.a.b.#.b.e.b.b.b.e.e.e.e.e.e.e.e.e.e.e",
+".e.k.e.k.k.k.j.e.e.e.e.b.l.b.b.b.c.d.f.w.p.n.v.v.cQt.c.c.c.c.a.r.#.c.c.#.c.#.c.cQt.cQt.c.q.cQtQtQt.iQt.f.g.i.g.m.u.p.u.h.m.i.s.f.i.q.i.dQt.#Qt.#.c.r.c.a.c.a.a.c.l.b.e.l.e.b.l.b.a.c.aQt.a.c.d.#.dQt.dQtQt.g.x.h.h.w.w.w.u.g.w.g.m.h.o.z.v.A.z.z.w.u.w.w.m.h.s.w.p.n.w.p.v.z.F.P.W.P.F.v.o.v.h.p.m.h.g.h.g.w.p.n.i.m.m.m.m.h.h.m.A.A.z.B.Q.Q.P.M.F.K.o.v.p.w.p.u.g.g.g.s.g.m.g.w.x.m.m.g.g.m.g.gQt.i.c.f.#Qt.dQt.c.#.cQt.c.cQt.#.c.cQtQt.i.f.i.d.m.f.i.cQt.a.#.b.a.b.a.e.a.b.a.e.e.e.e.e.e.e.e.e",
+".e.j.k.j.j.j.e.k.e.e.e.e.e.e.e.l.rQtQt.f.h.g.p.v.d.dQt.f.c.c.c.a.c.#Qt.c.#.c.#.c.q.c.q.cQt.#.i.c.qQt.g.q.s.f.s.s.p.p.u.g.m.g.f.q.q.i.qQt.iQt.#.i.r.#.r.a.#.a.c.a.b.a.l.r.l.e.l.b.l.b.a.c.aQt.c.i.cQt.cQt.dQt.dQt.s.s.g.p.w.u.p.u.v.o.z.B.B.A.B.H.v.u.w.h.w.h.w.p.h.n.n.o.o.B.I.E.L.X.E.o.o.u.w.h.w.g.w.h.g.s.h.w.h.m.s.m.h.h.g.g.o.u.w.u.o.J.M.Y.L.N.N.H.B.z.o.u.w.w.g.h.m.h.w.p.w.h.w.w.g.m.g.i.f.iQt.f.#QtQtQt.cQt.cQtQtQt.c.cQt.rQt.c.iQt.g.i.x.g.d.#.l.r.a.b.b.e.e.b.e.e.e.b.e.e.e.e.e.e.e.e",
+".j.e.k.k.k.k.j.e.e.e.e.e.b.e.b.e.d.d.f.f.f.w.p.p.dQt.d.c.c.c.c.c.q.c.c.#.c.cQt.#.c.c.#.c.#.f.#Qt.dQt.f.g.f.s.s.m.h.u.p.u.m.m.s.g.q.f.xQt.qQt.#Qt.a.r.a.c.a.c.a.r.l.e.l.e.l.e.e.a.e.a.a.a.b.c.a.cQt.a.a.a.c.dQt.d.a.rQt.s.g.w.v.A.z.z.F.F.D.B.E.Q.C.v.v.n.w.p.w.n.n.n.D.A.G.B.F.P.Y.W.T.C.v.v.p.w.g.x.h.w.h.w.h.h.y.u.n.x.x.h.h.h.s.w.u.v.A.A.z.B.K.N.L.N.H.Q.B.o.u.u.u.w.p.w.p.u.h.v.w.w.w.m.s.g.iQt.f.#.f.c.c.i.cQtQt.d.q.cQt.cQt.c.q.d.iQt.f.f.m.x.q.a.b.e.b.#.l.e.l.e.l.b.e.l.e.e.e.e.e.e.e.e",
+".k.k.e.j.e.j.e.j.j.j.e.e.e.e.b.e.c.d.dQt.x.x.x.h.h.i.d.c.r.r.r.b.c.c.c.cQt.c.c.c.cQt.cQt.c.c.cQt.i.iQt.i.f.s.f.m.g.m.g.m.h.h.p.gQt.i.qQt.q.r.q.r.b.l.b.r.a.a.q.#.#.a.a.a.a.a.a.l.b.l.b.a.cQt.c.c.#.cQt.cQt.c.#.c.#QtQtQt.i.f.g.m.v.z.I.H.I.I.Q.U.K.J.A.y.y.n.y.y.z.z.B.B.F.I.K.T.M.Z.X.G.u.o.v.u.h.u.g.h.h.v.w.v.w.m.g.h.m.h.x.g.h.m.w.v.w.v.w.u.o.o.A.I.K.N.Z.U.I.z.n.v.h.w.m.u.o.n.w.g.m.f.s.g.i.i.c.f.cQt.cQt.dQtQtQt.c.i.c.q.#QtQt.i.f.g.f.m.cQt.r.c.c.bQt.b.b.r.e.b.e.l.e.e.j.j.j.k.j.k.k.k",
+".k.0.j.k.e.j.e.j.e.k.e.e.e.b.l.b.c.dQt.q.f.f.f.f.m.i.g.d.c.r.a.b.c.c.c.c.c.c.c.c.c.c.c.c.cQt.c.c.#.iQt.i.i.g.h.i.m.g.p.g.w.g.w.h.s.iQtQtQt.#.#.#.r.l.r.#.r.a.#.c.a.a.a.b.a.l.#.a.b.l.b.a.a.a.cQt.a.q.c.c.c.c.c.c.c.c.q.dQt.f.f.f.g.h.o.z.B.B.S.1.O.Y.P.K.A.A.K.P.Q.H.B.B.I.I.Q.K.M.W.W.I.v.o.p.v.w.h.h.u.p.v.p.v.w.h.m.h.m.h.h.g.m.m.h.m.w.w.w.w.n.u.n.o.o.B.B.K.Z.Z.P.Q.H.z.z.z.A.B.A.n.u.w.h.m.f.gQt.i.cQt.r.c.f.#.f.#.dQtQt.f.c.qQt.iQt.s.f.g.rQt.c.#.c.#.c.r.#.a.e.a.b.b.e.e.j.k.j.j.k.k.0.k",
+".k.j.k.j.k.k.b.j.j.j.e.e.e.e.b.e.c.c.d.q.d.g.f.f.g.g.f.f.d.d.c.c.cQt.c.c.c.c.cQt.cQt.c.cQt.c.c.q.c.q.#.iQt.i.f.g.s.i.s.g.p.g.p.g.m.i.s.i.i.q.i.#.#.r.r.r.a.a.#.c.l.a.a.r.a.a.a.l.b.l.b.a.b.c.#.c.c.#.cQt.c.#.cQt.c.c.cQtQtQt.i.d.s.i.m.v.v.o.z.Q.2.3.2.Z.N.L.Z.U.Y.T.F.F.Q.Q.R.N.S.Y.U.R.B.v.u.o.u.v.v.u.v.u.v.n.m.m.m.x.h.h.g.h.h.m.m.h.m.h.m.m.m.m.w.w.n.n.o.o.z.z.H.N.L.L.L.W.H.S.I.A.u.v.v.u.m.h.f.gQt.f.cQtQt.f.f.i.iQt.fQt.f.#.dQt.f.f.f.g.a.b.r.b.r.b.#.b.a.e.r.e.b.e.e.b.e.e.e.e.k.j.j.j",
+".k.k.e.k.j.k.e.j.e.k.e.e.e.e.l.b.c.a.c.cQt.d.d.f.i.s.g.x.f.dQt.c.c.c.c.cQt.c.c.c.a.a.#.a.a.a.a.c.i.#QtQt.iQt.s.f.s.f.s.i.g.i.g.m.g.g.s.i.i.iQt.q.#.#.c.r.#.r.a.#.a.l.#.l.a.l.a.a.e.l.e.a.a.a.r.a.a.a.#.a.a.b.a.b.a.aQt.c.cQt.d.i.f.i.f.m.h.w.v.z.Y.M.M.2.4.5.6.O.1.L.N.T.N.R.Z.Z.N.W.7.L.I.o.u.A.o.p.o.v.v.w.p.p.m.x.m.g.g.g.g.x.g.g.i.g.i.i.g.s.s.h.g.m.h.m.p.h.n.o.o.A.I.E.T.N.M.Z.M.I.B.z.A.v.w.h.m.f.g.f.d.f.f.i.g.f.g.q.i.d.#.f.d.i.dQt.fQt.r.b.l.r.l.b.e.r.b.b.b.e.a.b.e.l.b.l.b.j.e.k.j.k",
+".k.j.k.j.e.j.e.j.j.j.e.e.e.e.b.e.a.b.a.c.c.cQt.dQt.f.g.s.xQt.#.c.c.c.c.c.c.c.c.c.a.a.c.aQt.a.#.a.c.q.c.#QtQt.iQt.iQtQt.i.i.g.i.g.i.m.f.i.g.i.g.i.#.#.#.c.#.#.a.a.#.a.a.a.a.#.a.a.l.e.e.#.a.r.a.c.#.a.a.a.#.b.#.b.r.a.b.aQt.c.c.cQt.#.i.g.m.w.u.C.M.T.H.E.Z.4.4.4.U.4.U.U.2.N.N.R.2.U.8.V.Q.z.v.B.u.v.u.w.p.w.s.m.g.g.g.i.g.f.f.i.x.x.f.x.f.x.x.f.q.q.f.s.i.g.i.g.s.g.m.w.n.v.o.B.K.N.1.Z.N.P.F.C.o.v.h.x.f.g.gQt.g.f.g.g.f.g.f.i.d.i.cQt.cQt.c.a.e.b.e.e.b.e.b.e.e.a.e.r.e.e.b.e.l.e.l.b.e.e.e.e",
+".j.j.e.k.e.e.e.e.j.j.e.e.e.e.e.e.e.b.e.a.b.c.a.c.cQt.i.h.g.fQtQt.c.cQt.c.c.c.c.c.b.e.l.b.l.e.a.a.#.a.q.c.qQt.qQt.#.q.iQtQtQt.i.f.qQt.x.f.i.i.g.i.i.f.i.#.c.q.a.r.l.a.l.a.l.a.l.a.b.e.l.b.a.#.c.a.b.l.a.b.a.e.b.e.l.e.r.e.b.r.aQt.#.i.i.f.m.m.v.n.z.F.Q.H.E.Q.L.N.1.4.6.6.9.U.U.U.3#.##.V.F.B.o.A.o.u.n.g.h.x.g.x.g.i.d.i.f.f.fQtQtQtQtQtQtQtQtQtQtQtQt.qQtQtQtQt.#.#.q.w.m.v.v.z.B.S.Y.Q.F.Q.Q.Q.I.A.v.h.m.x.x.g.g.g.f.g.f.g.f.g.q.f.dQt.c.b.a.r.e.r.e.r.e.e.e.e.b.b.b.l.e.e.e.e.l.#.l.b.e.e.e.j",
+".k.k.k.j.e.e.e.e.j.j.e.e.e.b.e.b.e.l.e.e.e.a.b.cQtQt.f.g.h.gQtQt.c.c.c.c.c.a.c.c.l.b.b.a.e.#.e.b.r.#.r.c.#Qt.cQtQt.#.c.q.iQtQtQt.q.#.#.xQt.i.i.iQtQtQtQt.#.c.r.a.a.a.a.a.a.a.a.a.l.l.b.a.a.r.a.c.l.l.b.l.e.r.l.r.j.e.l.b.a.aQt.cQt.i.i.g.m.h.w.w.v.B.K.I.B.B.F.B.M.L.1.9#..9#a.9.6#b##.V.E.I.A.C.n.w.h.h.f.i.g.f.i.f.i.f.fQtQt.r.r.#Qt.#.#Qt.#.rQtQtQtQt.fQt.rQtQtQtQt.w.s.g.m.m.D.I.A.v.w.A.H.Q.F.H.I.v.h.w.m.f.h.m.h.g.f.g.f.g.d.i.c.cQt.b.e.b.e.b.e.e.b.e.b.e.b.a.e.r.b.#.b.r.a.a.a.a.a.b.e.l",
+".j.k.e.k.e.e.b.e.j.k.e.e.e.e.e.e.e.j.e.l.e.r.a.a.cQt.x.h.u.g.f.i.c.c.c.c.c.c.c.c.b.l.l.e.l.e.l.l.r.#.#.#.c.#.q.c.q.a.q.cQt.i.c.i.#.qQt.q.i.qQt.i.i.f.i.f.q.#.a.#.l.r.b.a.l.#.l.a.b.a.e.a.a.aQt.c.b.a.e.a.e.l.b.e.e.b.#.e.b.#.bQt.c.i.f.g.x.m.n.n.o.o.o.o.v.B.I.B.E.Q.M.Z.1#c#c.4#d#e#f.V.K.F.A.o.u.w.h.g.i.dQt.c.i.i.fQt.cQtQtQt.r.b.r.b.r.r.r.r.#.r.#.r.r.r.r.r.f.f.i.g.m.h.m.v.h.C.o.w.n.u.v.n.E.N.M.z.n.h.m.m.m.h.g.g.g.g.g.f.f.dQt.c.#.a.#.e.b.e.e.b.e.b.e.b.b.e.b.l.e.e.l.e.l.a.a.#.a.a.b.b",
+".e.e.e.e.e.e.e.e.e.j.j.j.k.j.j.e.e.e.e.e.b.a.b.b.dQt.f.i.w.h.u.h.fQt.q.a.#.a.a.c.e.a.b.a.b.a.b.b.#.a.#.a.#.a.#.a.rQt.r.c.#.a.a.#.r.#.#.aQt.#QtQtQtQtQtQtQtQtQtQt.r.a.r.r.a.r.a.#.l.l.b.a.c.c.d.d.#.l.b.l.b.a.b.l.b.l.b.#.a.c.#.c.c.i.i.g.h.g.m.m.w.D.v.o.o.A.A.A.B.K.P.Q.T.Y.W.W.6#g#g#c.R.P.E.D.m.h.g.x.q.f.q.gQtQtQtQt.#.#.rQt.b.r.r.r.b.r.a.r.b.e.b.b.b.b.b.b.fQt.g.f.f.g.f.h.m.m.m.m.g.h.h.h.o.o.J.Q.Q.B.z.o.v.u.w.w.h.m.x.h.#.#.a.r.b.r.b.e.r.#.r.a.b.e.e.j.j.e.j.b.e.r.b.r.b.l.e.a.e.l.e.l",
+".e.e.e.e.e.e.e.e.e.k.j.j.j.j.j.j.e.e.e.e.e.b.e.b.cQt.g.i.p.p.v.p.fQt.c.c.a.#.b.c.l.b.l.e.l.e.l.l.a.b.a.a.#.a.#.a.#.a.#.a.r.#.a.a.l.a.#.r.c.q.c.#Qt.iQt.i.f.i.fQt.r.#.a.a.a.a.r.r.l.l.r.a.cQt.dQt.a.a.e.a.e.l.e.l.b.b.a.#.b.#.c.a.fQt.i.f.g.f.h.h.m.w.n.n.v.y.o.A.o.B.Q.R.R.P.R.Y#h.9#i.L.P.R.E.J.v.w.i.x.#.x.f.d.#Qt.#.cQtQt.r.#.#.a.#.a.r.b.r.r.b.b.j.b.e.b.#.b.cQt.f.x.g.f.x.f.m.m.m.g.g.g.h.f.p.w.v.A.B.I.Q.Q.z.z.v.p.w.w.p.h.aQt.e.r.e.e.b.r.b.c.b.r.e.e.e.b.j.j.j.e.e.e.e.b.l.b.l.b.l.b.e.e",
+".j.e.j.k.j.k.j.k.j.e.k.j.j.k.e.k.e.e.e.b.l.b.a.b.c.i.f.f.h.A.C.v.m.fQt.a.a.a.c.a.b.a.e.#.e.#.e.b.l.a.#.l.#.a.a.#.a.a.#.a.#.a.a.#.#.a.a.#.a.c.cQtQt.f.q.fQt.i.f.f.#.#.#.q.#.#.c.#.#.r.#.#.c.c.d.d.#.l.#.l.b.a.e.#.e.e.a.b.#.cQtQtQt.i.g.g.g.s.g.g.h.w.n.v.y.n.A.A.B.B.Q.N.Y.H.Q.Z#h.2.P.K.K.Q.H.B.o.o.h.p.s.x.#.r.#.a.#.rQt.b.r.r.b.r.b.r.b.r.b.#.b.e.e.b.j.b.b.b.#.c.f.g.f.g.fQt.g.s.f.g.f.f.g.x.f.g.x.w.v.o.A.I.Q.Q.B.o.y.h.x.gQt.a.#.b.r.e.r.bQtQt.b.#.e.b.j.j.j.e.j.e.e.b.e.e.b.l.b.l.e.j.l.j",
+".k.j.k.j.j.j.k.e.j.k.j.k.e.k.j.j.e.e.e.e.b.b.e.a.c.c.f.m.u.o.C.D.g.fQt.#.a.#.a.c.e.l.e.l.e.l.e.a.l.e.#.a.l.#.l.a.b.l.e.l.e.b.l.e.l.b.l.e.c.#.c.c.iQtQt.gQt.g.f.gQt.iQtQtQt.iQt.i.#.q.#.cQt.#.f.c.a.#.a.b.l.b.l.e.l.r.a.r.aQt.aQt.d.g.f.g.f.g.g.g.h.w.n.n.v.y.A.z.H.Q.P.P.N.R.Z.O.O.Q.J.A.G.y.D.z.z.A.o.h.h.q.#.bQtQtQt.b.r.r.r.bQt.r.r.b.#.b.r.b.b.k.e.j.e.b.j.e.r.#Qt.f.f.g.f.f.f.g.g.f.f.g.d.x.f.g.g.x.w.w.h.v.Q.F.K.B.o.n.h.q.dQt.dQt.c.f.a.r.c.c.r.b.e.e.b.e.b.k.e.k.e.k.j.e.e.e.e.e.e.j.j.j",
+".j.j.j.j.j.j.j.j.k.e.j.j.j.j.j.j.e.e.e.a.e.b.a.r.bQtQt.x.h.o.C.C.w.i.f.#.a.a.aQt.e.#.e.#.e.#.e.b.l.e.l.#.a.a.b.l.e.e.b.e.l.e.e.b.e.e.e.b.b.a.b.a.c.c.#.dQtQt.fQt.fQt.f.s.f.i.g.i.#Qt.qQt.dQtQt.c.#.a.b.a.l.b.l.r.e.b.a.a.#.cQt.c.i.f.g.g.f.g.h.i.h.g.w.w.p.n.A.K.F.P.N.M.N.U#i.O.P.G.o.v.h.h.w.n.I.z.A.p.x.s.x.f.x.cQt.#.c.r.b.b.b.r.c.r.b.r.b.b.e.j.e.k.j.e.b.e.bQtQtQtQt.d.f.g.i.i.c.f.i.d.f.f.c.f.f.h.h.w.m.n.o.A.o.o.o.C.n.w.g.g.q.f.c.#.r.b.c.r.e.e.b.e.e.e.j.b.k.b.k.j.0.0.j.j.j.j.e.j.j.k",
+".k.j.j.j.k.j.j.k.j.j.k.j.j.e.k.j.e.e.e.e.a.b.b.a.b.d.f.f.h.u.o.v.p.h.f.d.c.#.a.b.l.e.l.e.l.e.l.a.e.#.e.a.#.l.e.l.e.b.l.e.e.b.e.l.j.b.l.e.l.b.b.#.a.#.c.#.#.c.c.iQt.iQt.s.f.s.f.sQt.i.d.#.i.c.cQt.a.#.a.#.l.b.l.e.l.b.b.#.aQt.aQtQt.g.g.f.m.f.w.x.m.p.w.w.o.A.B.K.K.M.Z.U.9#j.8.Z.A.v.w.s.s.s.h.u.v.D.z.A.o.w.s.x.g.x.q.d.r.r.r.b.r.r.b.r.b.r.b.r.j.e.k.k.e.j.e.e.r.bQt.#.#Qt.c.f.i.d.i.f.c.fQt.d.f.f.x.g.x.h.h.n.u.u.h.w.x.n.o.y.o.w.w.x.dQt.c.#Qt.b.r.e.e.e.e.b.e.k.e.j.k.0.e.0.j.e.e.k.e.k.e.k",
+".j.0.j.0.j.k.k.j.k.e.k.e.j.j.e.e.e.e.e.b.b.#.b.b.a.fQtQt.h.g.h.h.p.h.gQt.#.a.a.a.b.a.b.a.b.a.b.l.e.l.e.#.a.e.#.e.b.l.e.e.l.j.j.e.j.j.e.b.e.b.a.e.e.l.e.l.a.#.c.cQt.fQtQtQt.iQt.s.f.i.iQt.d.i.cQt.a.#.a.l.#.a.#.a.r.a.#.a.r.cQt.c.g.f.g.f.h.m.w.w.w.n.n.n.A.I.I.K.T.N.2.9#k#l#i.Q.p.w.sQt.f.x.h.h.f.h.D.E.F.z.y.n.m.p.x.q.x.r.r.#.b.b.r.b.r.b.r.b.k.e.k.e.k.e.b.j.r.b.#.c.#.#Qt.#.cQtQt.cQt.cQtQt.f.d.d.g.f.h.h.h.m.f.g.f.m.g.p.n.n.n.w.h.g.xQtQt.c.r.b.e.b.b.e.e.b.k.b.k.k.0.0#m.k.k.k.j.j.k.j.k",
+".j.j.k.j.j.k.j.j.j.k.j.b.j.j.e.j.e.b.e.e.b.a.b.a.r.d.d.d.f.g.g.m.u.p.iQt.c.#.a.b.l.e.l.e.l.e.l.e.#.e.#.a.#.l.e.l.e.b.j.e.j.b.j.e.j.b.j.e.l.e.r.e.e.b.l.b.e.a.e.#.#.#.#.q.#QtQt.i.i.s.f.f.i.d.f.c.#.l.a.#.a.a.a.#.a.b.bQt.aQt.aQt.f.g.f.h.i.p.h.w.w.n.v.D.A.J.B.z.Z.M.N#h#n#b.N.z.p.n.s.#.#.x.s.gQt.g.u.z.B.K.F.E.y.y.p.p.x.q.#.r.r.b.r.b.b.r.b.e.e.k.k.k.b.k.e.b.l.r.#QtQt.c.r.cQtQt.c.f.c.#.#Qt.q.d.x.x.h.p.x.h.q.#.i.f.g.w.s.w.s.p.p.w.p.f.d.#.cQt.b.r.e.e.b.k.e.j.j.0.0.e#m#m.k.j.j.j.k.e.j.j",
+".k.j.k.k.k.j.k.k.j.k.k.k.j.k.e.j.j.e.e.e.e.e.a.r.a.aQtQt.g.x.h.h.f.s.f.gQt.d.c.c.b.e.b.b.b.a.b.b.a.e.l.e.e.e.#.e.l.l.l.b.l.l.e.b.e.e.e.b.e.l.e.l.e.l.e.l.e.b.a.c.a.#.a.c.a.#.c.c.iQt.i.iQtQt.qQt.b.#.b.#.b.r.a.b.b.l.r.aQt.c.c.c.g.i.s.m.w.w.n.o.w.C.C.A.B.A.I.z.Z.P.N.4.5.O.G.p.s.g.f.s.#Qt.#.#.f.x.g.p.u.v.C.J.Y.E.C.u.s.g.q.f.b.#.e.r.e.b.b.e.r.j.e.j.j.b.j.eQt.cQtQtQtQt.cQt.a.#.cQt.cQt.cQt.f.g.i.g.dQtQt.cQtQtQtQtQt.g.g.g.g.s.h.g.m.n.w.xQt.a.e.b.#.e.e.e.e.j.e.k.0.0.0.e.0.k.e.0.k.0.k.0",
+".j.k.j.k.j.k.k.j.k.j.j.j.k.j.j.e.j.j.e.e.b.a.b.e.a.c.c.d.f.f.x.x.i.i.iQtQt.c.c.c.e.e.a.b.a.b.r.c.#.l.b.l.r.l.l.b.e.b.l.e.l.b.l.l.e.l.b.l.e.e.b.e.e.j.l.b.e.a.a.#.a.r.a.#.a.c.#.a.i.#Qt.iQt.iQt.i.a.#.a.r.a.a.#.a.b.b.e.#.cQtQt.d.s.g.i.h.h.v.n.o.v.v.D.D.A.G.z.K.P.Y.N.U.6.Y.D.n.s.s.f.#.f.#.f.rQt.f.f.g.x.p.n.n.B.B.z.A.y.w.h.q.cQt.c.b.r.b.r.e.b.j.b.j.b.j.e.rQt.cQt.cQt.cQt.c.#.bQt.cQt.c.f.d.f.g.dQt.f.dQt.cQt.c.q.d.f.g.f.g.f.g.f.g.m.D.n.wQt.cQt.e.b.b.e.e.e.k.0.k.k.e.k.0.e.0.k.0.k.e.k.k",
+".k.e.j.k.j.k.j.j.j.j.j.e.e.e.k.e.j.b.e.e.b.b.a.b.#.cQtQt.f.d.f.g.f.f.iQt.g.#.d.d.l.r.e.a.bQt.a.c.#.e.l.e.l.e.a.l.l.e.b.l.e.l.b.e.b.e.e.e.b.l.e.l.e.e.l.e.l.e.a.a.a.a.#.c.a.#.a.c.cQt.dQt.cQt.dQt.c.r.a.a.r.a.b.#.a.#.aQt.c.f.d.f.g.i.i.h.w.u.n.n.C.C.o.D.o.B.I.z.K.P.N.4#h.P.y.w.s.f.f.#.#.#.#QtQt.c.f.d.f.f.x.p.u.h.o.A.B.A.u.u.g.q.f.d.#.b.r.e.b.r.e.b.r.b.r.bQtQt.cQt.cQt.cQt.cQt.cQt.c.f.d.f.f.gQt.x.f.cQt.#.#.bQt.cQt.d.f.f.g.g.g.x.m.o.o.v.f.iQt.c.#.e.l.b.j.j.e.k.0.k.k.k.k.k.e.k.k.0.k.e",
+".k.j.k.j.k.e.k.j.k.j.k.e.k.e.e.e.k.e.e.e.e.#.e.b.c.c.c.cQtQt.d.d.iQt.fQt.f.dQt.q.a.b.a.r.a.c.c.a.a.l.b.l.r.l.b.e.b.l.l.l.b.e.l.l.e.l.b.e.l.e.b.e.j.l.e.e.l.e.a.b.a.b.a.b.a.c.a.aQt.c.#.fQtQtQtQt.cQt.c.#.a.r.a.b.a.#.cQt.d.f.f.x.i.g.m.g.h.n.v.v.n.o.D.o.D.A.G.I.K.Q.M.1.3.P.o.w.x.fQtQt.#Qt.r.#.b.r.#.rQt.f.g.f.x.h.p.y.A.B.A.D.w.s.x.x.d.c.r.b.r.b.e.r.b.r.bQt.cQt.cQt.cQt.c.cQtQtQt.dQt.d.i.d.f.f.i.dQt.cQt.r.#.b.r.cQtQtQt.x.m.m.w.w.w.w.v.w.g.i.iQt.c.#.b.a.b.k.e.k.e.k.j.k.e.0.k.0.e.k.0.0",
+".j.j.e.j.j.k.j.j.j.j.j.e.e.j.e.e.e.j.e.b.e.b.a.bQt.c.c.c.cQt.dQtQtQt.f.f.f.fQtQt.cQt.c.c.cQt.cQt.a.b.l.e.l.e.a.l.e.b.l.e.l.b.l.b.e.e.l.b.e.e.e.e.e.e.l.j.e.b.a.a.#.a.a.#.a.#.aQt.c.cQt.cQt.cQt.cQt.aQt.a.c.a.#.cQt.c.c.fQt.fQt.g.h.m.h.w.u.v.y.D.v.o.o.D.o.o.A.G.I.K.H.N.3.Y.y.h.sQt.f.#.#.r.#.r.r.b.r.a.rQt.c.iQt.d.x.x.n.o.D.B.y.o.n.g.q.f.cQt.r.b.r.b.c.bQt.r.iQtQtQtQt.cQt.c.i.cQt.fQt.dQt.fQt.fQt.d.f.cQt.c.r.aQtQt.d.f.x.i.w.n.C.C.w.m.g.f.f.i.x.q.c.c.b.b.e.e.e.j.j.j.j.k.k.k.e.k.0.k.0.k",
+".k.j.k.j.k.e.k.e.j.k.e.j.j.b.e.j.b.e.e.b.e.l.b.l.c.cQt.c.c.c.c.c.d.fQtQt.fQt.f.gQt.d.c.cQt.c.c.a.e.#.a.#.a.b.l.b.l.e.l.b.l.e.l.e.l.b.e.e.b.l.e.e.j.j.j.e.l.e.a.a.b.a.b.c.a.r.a.a.bQt.a.cQt.cQt.cQt.c.cQt.cQt.cQt.aQt.d.iQt.g.x.h.u.n.p.w.n.u.o.D.n.o.D.o.D.o.C.o.I.I.I.Z.1.P.w.v.fQt.f.#Qt.#Qt.r.l.r.a.r.#.cQt.c.#Qt.d.g.s.h.y.v.z.A.o.v.g.x.q.gQt.c.#.c.#.c.rQtQt.i.i.c.fQt.q.d.q.dQtQt.f.f.f.f.f.f.f.dQt.c.#.c.c.#.d.f.d.g.x.h.x.w.o.w.o.m.m.g.f.g.g.g.iQt.c.#.e.b.e.e.j.e.e.e.e.k.j.k.e.j.e.k",
+".e.k.e.k.e.k.j.j.k.e.k.e.e.j.e.e.e.j.b.e.b.r.a.rQt.c.cQt.cQt.cQtQt.#.d.iQt.s.i.i.iQt.i.#.c.r.#.a.l.a.#.e.a.e.a.e.b.l.e.l.b.l.b.l.e.e.l.e.e.e.j.e.j.e.j.e.e.l.b.a.a.a.a.#.a.#.a.a.b.aQt.c.#.cQt.cQt.dQt.r.c.cQt.c.#Qt.i.f.g.x.m.h.v.u.n.n.v.o.D.v.o.C.o.v.n.v.D.o.B.z.H.M.W.K.v.h.x.f.f.#Qt.r.#.r.#.a.r.b.#Qt.cQt.c.c.f.d.g.q.h.x.o.o.v.v.u.n.w.h.f.cQt.cQt.cQt.fQt.iQtQt.i.#Qt.i.cQtQtQt.#.d.f.fQt.fQt.dQt.dQt.#.iQt.g.f.g.f.g.m.x.h.h.m.m.h.g.g.g.f.g.g.g.fQt.a.r.e.r.e.b.j.j.j.j.e.k.j.k.j.k.j",
+".b.k.e.j.k.e.k.j.k.j.k.j.j.j.e.e.e.b.l.r.l.b.a.bQtQt.c.c.c.c.a.a.fQt.fQt.i.f.f.g.g.f.dQt.q.c.a.#.a.b.a.a.#.l.b.l.l.l.b.l.e.l.e.l.b.e.b.l.b.j.e.e.j.t.e.e.l.e.#.a.b.#.b.a.r.a.c.#.bQt.a.#.cQt.cQt.cQt.c.cQt.cQt.c.iQt.g.i.g.g.w.g.o.o.v.u.v.D.o.o.A.y.C.n.n.n.n.D.A.I.H.P.Y.I.w.h.s.fQt.fQt.#.c.#Qt.b.r.cQt.cQt.aQt.cQt.cQt.c.f.f.u.u.h.v.A.o.o.p.g.g.i.q.f.f.f.f.iQt.iQt.#.i.c.#Qt.q.#QtQt.i.f.g.f.d.i.dQt.rQt.c.g.h.m.h.m.h.h.w.n.w.w.h.gQt.dQt.d.d.f.c.f.iQt.c.#.r.a.b.e.b.e.b.k.j.k.0.e.k.e.k",
+".j.k.j.k.j.b.e.e.e.j.j.b.e.r.e.b.r.a.a.r.a.#.r.a.q.c.#.c.#.qQtQtQt.iQtQt.iQt.sQt.g.p.h.iQt.i.a.e.a.a.b.l.e.e.l.b.e.e.e.b.e.b.e.e.l.e.e.e.e.e.j.e.j.j.e.j.e.j.e.e.e.e.e.r.a.bQt.c.e.a.r.c.#.a.#.a.#Qt.cQt.i.d.i.f.i.g.f.g.s.x.m.w.w.h.w.w.v.n.v.n.v.w.o.w.n.m.v.w.C.v.B.Z.1.Q.o.p.h.gQt.r.r.b.r.e.b.#.e.r.b.#.#Qt.d.fQt.d.g.d.gQt.g.g.x.n.o.A.z.K.z.v.u.v.p.s.s.i.f.q.q.d.dQt.d.i.dQtQt.d.i.d.qQt.iQtQt.i.f.g.f.s.s.g.s.g.f.g.d.f.cQt.c.c.rQt.r.r.b.r.a.b.b.e.b.b.b.b.r.b.e.b.e.j.j.e.0.k.k.0.k.0",
+".j.e.j.e.e.e.e.j.j.k.e.e.l.e.b.e.a.r.a.a.r.a.r.a.#.c.#Qt.#.d.#.i.#Qt.#Qt.fQtQt.s.i.g.p.s.iQt.#.bQt.c.a.#.a.#.e.l.e.b.l.e.l.e.l.b.e.b.l.b.e.e.e.e.e.e.e.j.l.e.a.a.e.b.e.e.a.b.a.c.a.r.a.#.b.#.bQt.#.a.q.c.i.f.f.f.i.i.g.s.x.m.m.m.w.u.m.w.v.v.o.o.w.n.w.h.h.h.p.n.w.o.A.S.Z.Z.H.y.h.x.fQt.r.r.e.r.b.b.a.r.a.#.a.rQt.d.i.d.i.d.i.d.g.f.g.g.h.u.A.z.J.B.A.v.w.s.p.s.f.x.f.g.d.i.dQt.i.f.g.g.f.f.f.xQtQt.g.f.g.f.g.q.#Qt.#.dQt.c.d.d.c.rQt.r.r.r.b.r.a.e.r.e.b.e.b.e.r.e.e.b.b.e.e.b.0.k.e.0.e.k.e.k",
+".j.k.0.e.j.e.e.b.j.e.b.e.e.e.a.b.#.a.a.c.a.c.a.aQt.c.cQt.cQt.c.c.#Qt.#.c.q.cQtQtQt.s.u.g.iQtQt.cQt.c.a.a.#.a.b.l.b.e.b.e.b.e.e.l.e.e.e.l.e.e.e.e.j.j.e.j.e.l.a.a.b.l.b.a.aQt.cQt.c.a.#.cQt.#Qt.c.qQt.c.q.i.d.g.g.g.g.f.g.g.m.x.m.p.m.m.w.w.v.n.w.n.h.h.h.h.h.h.h.g.u.o.I.M.1.Z.Q.h.w.gQt.#.r.r.r.b.a.r.#.b.#.c.fQt.fQt.d.i.dQt.d.i.d.f.f.m.s.n.u.A.J.J.B.A.u.h.p.w.x.g.x.f.f.f.g.i.q.f.f.fQt.fQt.g.i.s.m.h.f.q.f.#Qt.cQt.a.r.a.b.r.b.b.e.e.e.b.e.b.e.e.e.e.e.e.e.j.b.j.e.j.j.e.j.k.k.0.k.k.0.k.0",
+".j.e.j.e.j.b.j.e.e.e.l.e.r.a.b.a.a.a.a.#.a.a.#.a.c.#.c.a.c.a.a.#.a.aQt.a.c.c.cQtQt.f.m.g.s.f.dQt.c.c.#.a.a.#.e.a.e.#.e.l.e.l.e.b.l.b.e.b.e.l.e.e.l.b.l.l.b.e.r.a.e.a.a.#.c.c.c.c.cQt.d.#.cQt.d.q.c.q.c.fQt.i.i.gQt.g.s.g.f.g.m.h.m.x.m.g.m.p.w.h.h.p.h.h.x.g.h.h.x.h.u.A.I.L.Y.N.D.n.x.fQtQt.r.#.a.r.#.b.#Qt.rQt.d.i.d.i.dQt.fQtQtQt.c.g.f.g.g.w.u.v.z.z.z.v.o.v.w.g.w.g.w.g.m.x.g.f.m.i.g.f.i.f.g.m.g.f.x.i.d.d.a.a.a.a.b.a.r.r.e.e.b.e.r.e.b.e.e.e.b.e.e.b.e.b.j.e.e.j.b.j.b.e.0.e.k.e.0.k.e.k",
+".j.j.j.e.j.e.l.e.b.l.e.b.a.a.b.a.a.#.a.a.a.a.a.a.b.a.b.#.b.b.a.b.b.e.b.aQt.c.c.c.c.q.i.i.f.fQt.d.f.c.cQt.a.a.e.b.e.e.e.b.e.b.e.e.e.l.e.l.b.e.b.e.j.j.l.b.l.l.a.a.a.#.a.c.aQt.c.c.qQt.#.iQt.iQt.#.f.d.i.c.fQt.i.i.i.i.f.g.g.x.h.h.s.g.g.f.h.m.h.h.h.g.g.x.f.x.g.g.x.h.p.y.A.B.E.N.K.y.h.q.i.fQt.r.#.b.#.bQt.c.f.c.fQt.dQt.d.q.dQt.#.cQt.c.i.g.g.s.u.v.h.h.p.n.A.z.n.v.p.w.p.h.h.n.h.m.g.g.f.x.g.g.w.h.g.fQt.c.d.c.a.b.b.b.a.b.b.b.b.e.e.e.e.e.b.j.e.j.e.e.b.e.e.e.e.b.j.b.e.e.j.e.e.k.0.k.0.k.0.k",
+".j.j.e.e.j.e.e.e.l.e.l.a.a.a.c.c.b.e.l.e.e.b.l.b.b.b.e.e.e.e.b.b.b.e.b.e.r.b.b.#.a.c.c.f.m.g.h.dQt.i.c.c.a.#.a.l.e.l.b.l.e.l.e.l.b.e.b.e.e.e.l.e.t.b.l.e.a.b.b.a.a.a.a.a.#.c.#Qt.cQt.d.iQt.#.iQt.dQt.i.f.#Qt.q.i.d.f.i.f.g.g.g.x.g.f.g.g.h.g.x.g.x.h.q.g.x.g.q.x.g.x.h.n.u.y.A.Q.R.K.n.g.f.fQtQt.#.#.rQt.dQt.rQtQt.d.i.fQt.dQt.f.cQt.d.x.d.g.g.f.m.h.w.x.g.p.w.u.v.u.o.o.z.A.A.v.v.u.p.m.g.m.x.m.i.fQt.c.c.c.b.c.e.b.e.e.b.e.b.e.e.b.e.e.b.j.e.b.e.k.b.j.j.j.j.k.e.0.k.0.k.0.e.k.0.k.k.k.e.k.e.k",
+".j.e.j.e.e.e.b.l.b.l.a.a.a.c.a.#.e.e.b.e.e.e.b.e.l.e.e.e.l.e.l.e.e.e.e.b.e.b.b.b.e.#.cQt.f.h.x.x.f.dQtQt.c.c.aQt.e.b.e.e.b.e.b.e.l.e.l.e.b.l.b.e.b.j.l.b.l.l.a.#.a.r.a.q.c.#.cQtQtQt.iQt.fQtQtQt.i.d.i.cQt.#Qt.qQtQtQt.f.f.f.g.g.g.i.i.i.x.d.f.g.f.f.f.x.d.f.f.g.g.f.g.s.h.w.o.G.Q.H.A.w.x.d.d.f.bQtQt.rQt.c.f.rQt.fQt.d.#.fQt.d.f.d.f.d.d.g.f.f.q.q.x.h.m.s.h.s.p.w.v.o.o.B.B.B.v.o.v.u.h.g.f.fQtQt.c.c.a.b.e.r.l.e.l.b.e.j.j.e.j.j.j.e.j.j.e.k.j.b.k.e.e.j.e.e.k.k.e.k.e.k.0.k.e.k.e.0.k.0.k.0",
+".j.e.e.j.j.e.e.e.l.l.a.#.a.a.a.c.b.e.e.b.b.e.e.e.e.e.b.e.e.b.e.b.j.b.e.j.e.b.b.r.e.b.cQt.f.g.x.hQt.i.d.c.c.cQt.a.b.e.r.l.b.l.e.l.e.b.e.b.e.e.e.e.t.e.e.l.b.e.a.a.a.a.r.c.#.#.d.#.iQtQtQtQt.iQt.iQt.dQt.f.#Qt.a.#.c.cQt.i.f.g.g.f.i.f.fQt.f.f.d.f.d.f.d.i.c.f.d.f.i.g.g.x.s.A.C.n.T.H.K.y.x.cQt.x.#.#.cQt.d.#.c.f.d.i.d.i.dQt.d.i.d.q.f.d.f.qQt.d.fQt.f.q.x.h.s.p.u.v.v.v.A.C.o.D.z.y.o.v.w.i.g.f.#Qt.q.a.a.l.e.j.e.e.e.j.e.j.b.e.k.e.j.j.j.b.k.b.j.k.e.k.e.k.e.k.e.k.0.k.0.k.e.k.0.k.0.e.k.k.e.k",
+".0.e.k.e.j.b.e.b.a.b.l.e.e.#.e.l.e.b.e.e.e.j.k.j.k.j.j.j.k.j.j.k.e.e.j.b.e.b.e.b.c.f.c.#Qt.h.v.y.x.gQt.i.cQt.c.c.#.q.a.a.l.b.b.e.b.l.e.l.e.b.l.b.e.b.l.b.e.b.e.e.b.l.a.a.bQt.a.cQtQtQtQtQt.fQt.f.dQt.cQt.cQt.c.#.#Qt.r.#.c.f.q.x.f.f.d.f.d.f.f.dQt.cQt.c.f.d.g.q.f.g.x.g.h.p.n.y.J.H.L.N.z.p.h.d.f.g.f.fQt.f.d.d.f.c.q.a.#.r.b.#.q.i.dQt.fQt.g.q.cQt.d.d.f.h.s.p.p.h.u.v.v.o.A.A.w.m.g.f.fQt.d.c.r.r.b.b.b.b.b.b.k.j.k.j.k.j.k.k.j.k.j.b.k.k.e.k.k.e.e.j.e.b.j.e.k.e.0.e.0.k.0.e.k.j.k.j.k.e.0.k",
+".e.j.e.b.e.e.b.b.l.e.l.b.l.e.l.e.j.j.e.j.e.e.e.j.e.j.k.k.j.k.j.k.e.e.e.e.e.e.e.e.b.c.dQtQt.w.y.C.h.m.i.f.dQt.d.d.q.#.a.#.l.b.l.b.a.e.b.e.b.l.e.e.l.e.e.e.l.e.l.b.a.l.b.#.c.a.r.a.f.iQtQt.iQtQt.i.c.#Qt.c.cQt.b.#.b.#.#.rQt.r.f.f.i.f.cQt.i.c.f.cQtQt.f.d.f.q.i.q.g.q.f.x.g.p.n.y.B.F.N.1.E.o.s.h.g.f.g.f.f.f.f.cQtQt.cQt.cQt.c.#Qt.fQt.d.g.g.f.f.g.f.g.x.h.s.h.h.u.v.y.o.z.C.o.v.i.g.fQt.i.c.c.c.r.b.b.b.b.b.b.b.k.e.j.k.e.k.j.j.j.j.j.k.e.j.e.k.e.k.k.b.j.j.e.j.e.k.0.k.k.e.k.0.k.e.k.e.j.j.k.j",
+".e.e.e.e.e.#.a.#.e.l.b.l.e.e.e.j.e.e.j.e.b.k.e.e.k.j.e.e.k.b.k.j.b.k.e.j.b.j.e.b.b.cQt.#Qt.p.v.J.p.h.w.g.m.f.xQt.#.q.#.a.c.e.#.a.b.e.l.e.e.b.e.b.e.b.l.b.e.e.b.e.l.b.l.b.a.a.c.a.c.#.#.#.#.#.#.#.cQt.c.c.#.b.r.b.r.b.b.rQtQt.c.f.d.f.c.#.cQt.cQt.rQt.cQt.d.f.q.xQt.x.g.q.h.p.y.y.I.H.Y.3.N.I.o.p.g.i.g.gQt.f.d.dQtQtQt.c.f.c.f.d.iQt.iQt.g.x.g.i.h.g.h.h.w.p.n.p.B.D.z.A.v.w.h.g.iQtQt.dQt.c.c.c.e.e.e.j.e.e.e.e.b.k.j.j.j.j.e.k.e.e.e.e.e.j.k.e.0.k.j.k.j.b.e.e.k.e.k.e.k.j.k.e.j.k.j.k.e.b.e.b",
+".c.#.aQt.a.c.a.c.b.e.e.e.b.l.e.e.k.e.j.k.k.k.e.k.j.j.k.k.j.k.j.j.k.j.k.j.k.j.k.k.e.#.aQt.s.h.y.C.v.n.A.u.p.g.g.s.#QtQt.c.#.a.b.#.b.b.e.b.l.e.l.e.l.e.e.l.b.e.l.e.e.l.b.l.b.#.b.c.q.c.c.c.c.c.cQt.c.c.aQt.a.r.a.b.b.r.r.b.b.#Qt.r.fQt.cQt.dQt.#Qt.dQt.d.#.d.d.x.d.f.x.f.g.h.p.n.A.F.T.N.Z.Z.M.B.u.x.m.x.f.g.d.i.c.f.#.fQt.f.d.x.g.i.s.f.s.g.s.g.m.p.h.n.v.o.v.z.D.B.B.o.u.h.g.fQt.dQt.cQt.c.b.b.b.e.j.b.e.j.b.j.e.j.e.e.e.e.j.e.e.e.e.e.j.e.e.b.j.0.e.j.e.k.j.j.e.b.j.e.e.j.b.j.e.e.e.e.b.e.e.b.e",
+".a.a.a.a.a.#.a.a.e.l.b.l.e.e.j.j.b.k.k.j.e.k.e.k.e.k.k.e.k.k.e.k.j.k.b.k.j.k.j.k.e.e.eQt.f.p.v.v.n.A.C.z.y.u.g.i.iQt.#.#.c.a.#.b.e.l.e.e.b.e.b.e.e.b.l.e.e.e.b.e.b.l.b.l.e.a.a.a.c.c.#.a.a.#.a.a.a.#.a.b.a.r.e.r.l.b.b.r.b.#.rQt.c.#.c.rQt.rQt.rQt.r.cQt.d.f.d.f.h.f.x.f.p.h.y.z.M.M.Q.Q.M.2.N.z.h.w.g.h.f.f.dQtQtQtQt.g.f.g.f.g.m.g.w.h.w.p.w.h.u.o.o.z.o.z.o.B.v.v.p.w.fQt.d.#Qt.#.c.a.b.#.b.b.b.e.e.e.e.e.j.e.b.e.b.e.k.e.e.e.b.e.b.e.e.e.j.e.e.k.e.e.e.b.b.e.e.b.e.b.e.b.e.b.b.b.a.e.a.b.a.a",
+".c.aQt.e.#.e.e.e.b.e.e.k.e.e.j.j.k.j.k.e.k.0.k.0.k.k.k.k.e.k.k.0.e.k.k.k.k.e.0.k.k.b.e.c.f.v.C.D.o.y.z.C.y.u.p.sQt.#.iQtQt.c.a.b.#.e.b.e.l.e.l.b.l.e.e.b.l.b.l.e.t.e.l.e.a.b.b.a.q.a.a.c.a.c.a.c.a.c.e.a.b.b.b.e.r.e.b.b.r.r.#.#Qt.cQt.rQt.dQt.c.f.cQt.r.d.f.q.f.x.h.g.h.h.n.A.z.Q.M.E.K.F.3.O.K.v.w.s.h.f.i.c.f.c.g.d.g.f.m.h.w.u.v.o.v.A.A.A.o.o.A.o.v.v.u.v.u.h.w.g.fQt.cQt.a.c.c.a.b.b.e.e.e.j.e.k.e.k.e.b.j.e.e.j.e.b.e.b.e.e.l.e.e.b.e.b.j.e.e.b.e.#.b.aQt.a.#.b.#.r.#.r.#.a.a.a.#.a.c.a.a",
+".b.e.e.e.e.e.b.j.e.e.j.e.e.k.e.e.k.k.k.0.0.e.0.k.e.0.e.0.0.0.e.0.k.0.e.0.0.k.0.k.0.j.e.b.i.h.A.D.o.y.A.C.z.u.h.q.gQt.i.#.dQt.c.c.e.b.l.e.b.e.e.e.e.b.l.e.e.e.e.b.e.e.l.b.l.l.l.b.a.c.a.a.a.a.a.#.e.b.l.r.e.e.b.b.e.e.b.e.r.b.r.cQt.#.cQt.rQt.r.c.#.cQt.c.f.q.g.q.m.s.h.w.w.o.A.I.Q.F.I.I.F.N.1.Y.B.v.h.w.f.x.i.d.f.f.g.f.m.h.u.u.B.z.J.B.J.D.B.z.o.u.v.h.g.m.g.g.g.i.sQtQt.a.l.eQt.a.b.a.b.e.j.b.k.e.e.k.b.k.e.e.b.e.b.e.e.e.j.e.r.e.r.e.e.e.b.e.#.b.a.c.c.d.f.d.aQt.c.aQt.a.c.#.c.cQt.c.cQt.c.b",
+".b.b.b.k.b.k.0.e.j.j.j.e.k.b.j.j.0.e.0.k.0.k.e.0.0.0.0.0.e.0#m.e.k.0.k.0.k.0.k.0.k.e.j.eQt.g.o.C.o.v.z.C.v.u.i.sQtQt.d.qQt.c.c.c.b.e.e.l.e.l.b.l.b.l.e.e.b.l.b.e.t.e.j.l.e.r.l.b.a.a.#.b.a.#.b.a.l.e.l.e.l.b.e.e.e.k.r.e.r.bQt.r.rQtQt.r.c.f.c.#.dQt.c.f.f.q.f.g.s.g.w.x.n.o.z.K.Q.B.I.K.I.I.Y.V.K.A.p.h.g.f.f.iQt.g.g.m.w.w.v.o.F.E.F.E.F.B.B.D.w.m.g.h.g.x.m.x.iQt.c.a.a.e.a.b.a.a.b.b.e.e.e.j.b.j.j.j.j.j.e.b.e.e.e.e.e.b.e.b.e.a.e.b.b.r.b.r.c.c.d.f.d.f.d.f.b.b.#.b.aQt.a.cQt.c.c.c.c.b.c.c",
+".k.k.e.k.k.k.e.k.k.e.k.e.k.k.k.e.k.k.0.k.0.k.0.k.e.0.0.0.0.k.0.0.0.k.0.e.0.k.e.0.k.k.k.j.a.x.A.z.u.u.h.h.n.h.m.gQtQtQt.c.a.r.e.b.a.e.b.e.b.e.e.e.e.e.b.l.e.e.l.e.b.j.b.l.e.l.a.a.#.a.a.a.a.b.a.a.l.#.e.b.l.b.e.r.e.j.b.k.#.bQt.d.f.cQt.fQt.d.i.f.fQt.x.f.f.g.f.g.n.h.w.p.o.B.E.R.Q.F.B.z.K.I.E.R.U.M.v.w.p.g.q.x.i.x.f.w.h.z.D.E.2.Q.B.v.w.p.u.s.h.f.f.f.g.f.fQt.f.iQt.#.c.q.c.a.a.a.a.a.b.a.a.a.e.e.b.l.e.b.l.e.a.#.cQtQt.dQtQt.dQt.#.c.qQt.q.c.c.#.c.a.c.c.c.#.e.b.e.e.r.e.b.e.b.b.e.b.e.b.e.b",
+".k.e.k.0.e.k.0.e.k.j.j.k.j.e.0.k.0.e.k.e.0.k.e.0.k.k.e.k.0.k.0.k.e.0.k.0.k.0.0.k.k.e.j.e.b.i.u.B.p.p.h.p.h.g.i.xQt.q.dQt.a.#.a.e.b.l.e.l.e.l.b.l.b.e.l.e.b.e.b.e.j.l.l.b.e.e.a.b.a.b.a.b.a.a.a.b.l.l.l.a.e.#.e.b.b.b.j.e.b.r.c.d.c.i.d.i.d.g.f.f.g.f.g.f.g.m.x.m.p.u.n.v.o.I.T.R.E.B.A.z.z.B.E.P.L.Z.A.w.m.f.h.h.g.g.w.h.o.B.E.T.H.F.y.w.h.p.i.x.f.f.iQt.f.gQt.fQt.c.i.c.c.a.a.aQt.a.#.a.a.#.a.#.a.a.aQt.a.c.aQt.a.a.a.c.q.#.d.i.#.#Qt.qQtQtQt.i.c.cQt.c.c.#.c.c.#.e.a.b.l.e.l.e.b.e.e.e.e.e.e.e",
+".k.k.k.k.0.k.k.k.j.e.k.e.k.0.k.e.k.k.0.0.k.e.0.k.e.0.k.0.e.0.k.0.0.k.0.k.0.k.k.0.j.b.k.e.aQt.g.y.u.h.u.h.g.x.f.f.iQt.d.c.a.b.e.e.l.e.b.e.b.e.l.e.e.l.b.e.l.e.l.e.b.j.e.l.l.e.#.a.#.a.a.a.r.a.a.b.b.l.b.l.e.b.e.b.j.r.j.r.b.bQt.d.i.d.i.d.i.f.g.d.g.f.g.x.h.g.w.h.w.p.w.o.z.F.P.N.z.o.u.A.A.z.B.I.M.Z.I.n.x.h.h.x.w.h.v.o.B.F.E.E.z.u.h.g.f.i.q.sQt.dQt.dQtQt.dQt.d.c.c.c.c.a.a.a.a.b.c.#.c.b.a.a.cQt.c.c.cQt.c.c.a.#.a.a.c.c.i.d.cQt.c.c.cQt.c.c.b.b.b.b.r.b.b.b.e.e.b.e.e.b.e.e.e.b.e.b.j.b.e.j",
+".0.e.0.e.k.e.0.e.j.k.j.0.k.e.k.0.e.k.k.e.0.k.k.0.k.e.k.k.0.k.0.k.0.e.k.0.e.0.0.e.k.j.k.b.eQt.s.h.p.h.g.g.m.i.g.i.d.#.i.c.a.b.a.b.e.b.e.e.l.e.e.l.b.e.e.b.e.e.b.e.t.b.t.e.e.e.a.b.a.a.b.a.a.b.a.a.l.a.e.a.b.e.#.e.r.b.b.e.r.c.f.q.i.q.dQt.f.f.gQt.x.h.x.h.x.s.s.w.p.w.u.o.B.F.T.S.o.v.n.n.y.y.z.B.P.2.H.o.w.g.p.w.u.o.y.B.F.B.B.C.g.h.f.q.d.d.d.d.c.d.i.dQt.c.c.c.cQt.a.c.a.#.e.e.#.a.a.b.a.a.bQt.c.c.c.a.c.a.cQt.e.l.b.a.#.c.a.a.e.b.e.b.b.b.e.e.b.e.b.e.e.e.b.e.e.e.e.j.e.j.e.j.b.j.e.j.j.e.k.j",
+".k.k.k.k.0.k.k.0.e.k.e.k.k.0.k.j.k.0.e.k.k.e.0.e.k.0.k.e.0.k.0.k.0.k.0.k.0.k.0.k.k.e.k.e.e.rQt.s.g.m.g.g.f.i.f.i.#.d.c.c.a.b.e.e.l.e.l.b.e.b.e.e.l.e.l.e.l.b.l.e.e.j.e.b.l.e.a.a.#.b.a.a.a.a.a.e.l.l.b.l.l.b.e.b.e.b.e.b.aQtQt.gQt.fQt.fQt.g.f.f.x.f.m.f.x.w.s.h.w.n.v.o.B.E.H.F.v.v.w.w.n.o.A.H.2.Z.I.o.w.h.h.o.z.B.z.B.C.v.u.p.f.iQt.#.a.r.cQt.aQt.a.c.b.b.aQt.b.a.b.b.e.e.e.e.e.e.b.l.e.e.b.l.a.b.#.a.a.b.a.a.b.b.e.b.e.r.e.b.l.b.l.e.l.e.b.l.e.e.e.e.b.e.e.e.e.j.b.k.b.k.b.k.e.j.e.j.e.j.e.j",
+".0.e.0.k.e.0.e.k.j.0.k.0.e.k.e.k.e.k.0.k.j.k.k.0.k.e.0.k.0.k.0.e.k.0.k.0.k.0.k.0.k.k.j.j.e.#.a.#.g.i.i.sQt.iQtQtQt.#.c.a.#.b.l.b.e.b.e.e.e.e.l.b.e.b.e.b.e.e.e.e.e.j.j.j.l.e.#.b.a.a.a.a.b.#.b.a.l.l.e.l.b.b.l.r.e.b.e.r.a.i.f.gQt.fQt.d.i.qQt.f.g.f.g.x.g.x.h.g.n.h.o.o.B.E.I.B.v.o.n.u.n.D.z.K.X.Z.B.o.u.w.z.J.J.B.A.u.w.h.m.iQtQt.c.a.b.a.a.r.b.a.b.a.r.a.b.b.l.b.e.e.b.e.e.j.b.l.l.e.e.l.l.l.b.e.l.e.b.l.e.e.a.e.e.b.e.j.j.j.k.j.e.k.e.j.j.k.b.k.b.k.e.j.j.e.k.e.k.j.k.j.k.k.k.e.k.k.k.j.j.k",
+".k.k.k.e.0.k.k.0.e.k.e.0.k.0.k.j.0.e.k.e.k.e.0.k.j.k.k.e.0.k.0.0.0.e.0.k.e.0.k.e.0.k.k.e.j.b.l.b.i.qQtQtQtQtQtQt.#.d.c.c.b.e.e.e.l.e.l.b.e.e.e.e.l.e.l.e.e.j.e.t.e.j.e.e.e.l.a.a.#.b.a.b.a.a.a.b.l.l.e.l.e.a.b.b.b.b.b.aQt.i.f.g.dQtQt.g.dQt.f.g.f.g.f.g.f.m.x.w.h.v.A.z.I.F.B.C.n.y.n.n.u.A.K.I.W.W.I.v.o.z.K.F.o.u.h.g.f.f.d.f.d.cQt.a.b.a.r.c.r.e.b.b.b.e.b.a.b.b.e.e.e.j.e.j.l.e.b.l.b.l.b.e.l.l.b.l.e.l.b.l.e.e.e.j.j.e.k.j.e.0.k.0.k.e.0.k.0.j.k.e.k.e.k.k.k.k.k.e.k.e.0.e.j.k.0.e.j.e.k.k",
+".0.e.0.k.k.0.e.k.j.0.k.k.0.e.k.e.k.k.k.j.j.k.k.e.k.e.0.k.0.e.0.k.k.0.k.0.0.k.0.0.j.k.e.j.e.b.l.lQt.iQtQt.#QtQt.qQt.cQt.a.a.b.e.e.e.b.e.e.j.l.j.e.e.e.b.j.e.l.e.e.j.e.e.t.b.e.a.b.a.a.a.a.#.b.a.a.l.b.e.a.b.e.b.e.c.#.aQt.#.i.f.g.#.d.i.d.i.dQt.f.iQt.i.f.g.f.m.g.n.v.A.D.I.E.I.o.p.u.n.n.y.A.z.K.N.V.E.B.I.H.E.z.h.h.w.i.f.c.a.bQt.c.a.b.a.b.b.c.a.b.b.l.b.l.b.e.b.l.b.e.j.j.j.e.e.l.e.l.e.l.e.l.e.j.e.j.e.j.j.j.b.e.e.j.k.k.e.0.0.k.0.e.0.0.0.e.k.e.k.0.k.0.k.0.e.0.e.k.0.k.k.0.k.j.e.k.j.k.j.j",
+".j.k.j.e.0.k.0.0.k.0.e.k.k.k.0.k.e.j.j.j.e.j.j.k.j.k.j.e.0.k.0.k.0.k.0.e.k.0.k.0.k.e.k.j.j.e.e.b.e.#Qt.q.fQtQt.c.c.#.c.bQt.l.b.#.e.e.e.e.e.b.e.e.b.a.e.a.b.e.e.e.j.j.j.e.e.e.b.l.aQt.a.b.a.a.a.r.e.l.l.b.l.a.#.a.b.#.aQt.c.d.gQtQt.f.#.f.cQt.cQt.d.g.f.h.x.p.h.p.n.u.o.F.P.T.I.o.n.o.n.u.C.z.B.K.Q.2.V.M.E.F.z.p.f.i.d.dQt.c.cQt.b.#.b.e.e.a.b.a.e.b.l.r.e.r.e.e.e.e.e.j.e.j.j.j.e.e.b.e.j.e.e.b.j.b.j.k.j.e.j.j.0.k.0.k.0.k.0.k.e.k.e.k.k.e.k.0.k.j.e.k.e.k.e.k.k.j.k.k.j.e.k.j.j.k.k.j.k.e.k.k",
+".k.e.k.k.k.e.k.0.e.k.k.0.e.k.e.k.j.j.k.j.k.e.j.j.k.e.0.k.k.0.k.0.0.e.k.0.k.0.e.k.0.0.0.k.e.k.e.j.e.a.c.#.qQtQt.c.c.c.a.c.b.a.b.e.e.e.j.e.e.j.e.e.e.e.e.k.e.j.j.e.0.e.j.j.e.l.e.b.a.b.#.a.a.b.a.a.l.e.e.a.e.l.b.a.#.a.#.c.f.f.f.g.d.#.f.c.q.cQt.fQt.g.f.m.x.s.w.p.u.v.B.F.E.E.B.A.f.h.n.o.o.A.o.A.2.2.N.K.B.z.n.g.qQtQt.d.d.c.c.c.a.b.b.l.b.b.l.r.b.b.b.e.a.e.#.e.e.e.l.e.k.b.j.e.e.j.e.l.b.e.j.e.k.k.e.k.e.k.j.k.k.0.k.0.e.0.k.0.0.0.k.0.k.0.k.k.e.k.k.0.k.j.0.k.k.j.k.e.k.j.j.j.e.e.k.b.j.j.j.j",
+".j.j.k.e.0.k.0.k.k.0.e.k.k.0.k.k.e.j.j.e.j.j.j.e.0.k.0.k.0.k.e.0.k.0.0.k.0.k.0.0.k.k.k.j.k.e.e.j.e.a.a.cQt.#.c.#.c.a.c.a.a.b.e.e.j.k.e.k.k.j.k.j.e.k.j.e.k.k.k.k.j.j.k.e.j.b.e.e.#.c.a.a.#.a.a.b.e.b.l.b.l.b.a.#.l.#.aQt.d.g.g.i.fQt.d.i.dQt.fQt.f.g.f.h.g.w.p.n.w.v.B.E.E.F.B.v.g.m.m.w.u.o.J.F.1.Z.F.B.u.h.f.f.i.d.d.c.c.#.c.b.r.e.e.e.b.e.e.e.l.b.e.e.r.e.e.e.e.e.j.e.j.e.k.b.j.e.e.j.e.e.e.j.j.k.e.k.j.k.e.e.0.k.e.0.k.0.k.0.k.k.e.k.0.e.k.e.k.j.e.0.e.k.e.k.e.k.j.e.k.j.k.e.k.k.b.j.j.e.e.k",
+".j.k.e.0.k.k.e.0.e.k.0.j.k.e.k.e.j.j.k.j.e.j.j.k.e.0.k.0.e.0.k.0.k.0.k.0.k.0.k.0.0.e.k.j.k.b.e.j.e.e.a.a.c.c.#.c.#.c.b.a.b.b.l.b.j.j.j.j.j.j.e.j.j.b.e.j.e.j.j.e.e.k.e.j.e.b.e.b.a.a.a.b.a.b.a.#.e.l.l.b.l.l.b.a.#.a.#.cQt.g.f.gQt.f.iQt.fQt.i.d.g.f.g.x.h.p.p.p.u.v.z.E.M.E.A.p.v.n.u.u.z.E.Y.V.Z.F.o.u.g.f.dQt.d.d.c.#.c.b.b.a.e.e.a.e.b.e.b.e.r.e.e.e.e.l.b.e.e.j.e.e.j.j.e.j.e.j.e.b.l.j.e.e.e.k.e.k.b.j.k.k.k.0.0.0.k.0.0.0.e.0.0.0.k.0.k.0.j.e.k.k.0.k.0.k.k.j.j.j.j.b.j.b.k.j.e.k.e.j.j.j",
+".j.k.j.k.e.0.k.k.k.0.e.k.j.j.0.k.j.b.j.e.k.e.e.j.k.k.e.k.0.k.e.k.e.0.k.e.0.k.e.0.k.0.k.j.k.e.j.e.e.k.e.j.a.a.c.c.c.a.c.a.b.a.e.b.j.e.k.e.j.b.j.e.e.k.k.j.e.e.e.k.e.j.e.b.e.e.a.b.#.a.#.a.a.a.a.a.e.e.b.l.b.a.a.#.l.#QtQt.d.g.f.s.g.f.f.g.f.g.f.g.f.g.f.h.h.w.p.n.w.o.B.E.H.F.B.v.A.o.B.B.Q.Y.N.P.F.v.p.g.f.i.cQt.aQt.b.a.b.a.b.e.e.j.b.e.e.l.e.j.e.e.a.b.b.e.e.b.j.e.k.e.j.e.k.e.b.e.e.j.e.e.j.e.k.j.k.j.k.k.e.k.0.k.k.0.k.0.0.0.0.k.k.e.0.0.e.k.k.0.k.e.k.e.k.j.e.j.j.j.j.j.j.j.e.j.e.j.e.j.e.j",
+".e.k.e.j.k.e.k.j.e.k.j.e.k.e.k.e.j.k.j.j.j.j.j.k.e.k.0.k.e.k.0.k.0.k.0.0.k.0.k.0.j.e.k.b.k.e.j.e.j.e.j.e.e.a.c.#.#.c.a.r.a.e.b.e.e.e.l.e.e.e.l.e.b.e.e.b.e.e.e.e.e.e.e.e.e.a.e.b.a.c.a.a.b.a.r.a.e.l.l.e.l.a.#.a.#.a.r.cQt.f.g.g.g.g.f.g.f.g.f.g.f.g.f.h.m.p.n.n.p.z.H.Q.T.K.K.Q.L.N.P.N.T.E.I.o.u.m.f.f.d.c.c.r.c.r.b.b.b.e.e.e.j.e.e.j.e.j.b.e.b.e.e.e.e.e.l.e.j.e.e.j.j.j.b.j.e.j.l.e.e.b.j.e.k.e.j.j.j.j.k.e.k.0.e.0.0.e.k.0.k.0.0.0.k.k.0.k.j.e.0.k.j.k.e.k.e.k.b.j.b.k.b.j.j.j.e.e.e.k.e.j",
+".j.k.j.k.j.j.k.e.k.j.k.j.j.k.k.k.e.e.e.e.e.e.j.j.k.0.e.k.0.k.e.0.k.e.k.e.k.e.k.0.e.k.j.j.k.b.e.e.e.j.k.e.k.e.c.#.c.a.a.a.b.a.b.a.a.a.a.a.aQt.a.c.a.a.#.a.a.a.e.l.e.b.e.b.a.r.b.a.#.b.#.c.a.a.a.a.e.b.l.r.l.#.a.#.l.q.a.f.f.g.f.g.f.g.f.g.f.g.f.g.f.g.x.m.s.n.h.o.v.B.E.L.N.N.N.R.3.O.M.B.A.p.h.x.sQtQt.i.d.c.b.b.b.b.b.b.e.e.b.k.j.k.j.j.e.j.j.j.b.l.b.e.b.b.b.e.j.j.j.j.b.j.j.j.e.e.b.j.e.j.e.k.j.j.j.e.k.k.j.k.0.k.0.k.0.0.0.e.0.k.e.k.0.e.k.e.k.j.j.e.j.j.k.0.e.e.k.e.k.e.k.b.e.b.e.e.e.j.b.k",
+".k.e.k.e.k.e.j.j.k.j.e.k.e.k.e.k.j.j.j.j.k.e.j.k.e.k.0.e.k.0.k.0.k.0.k.0.k.0.k.k.j.k.e.e.k.e.j.j.e.j.k.0.k.e.a.#.c.c.a.r.a.b.#.b.a.#.cQt.c.c.cQt.r.#.#.r.#.a.a.a.e.b.e.e.e.a.b.b.a.c.a.#.a.#.b.a.e.l.e.l.e.l.a.#.a.#.rQt.d.f.f.s.g.f.f.g.f.f.g.f.g.f.m.h.g.n.n.n.A.z.T.W.9#a.V.T.K.J.B.v.g.q.f.d.q.#Qt.c.c.f.c.#.r.e.e.e.b.e.k.k.j.j.e.j.j.j.b.j.b.e.b.e.l.e.e.e.e.k.j.e.k.e.j.e.e.j.e.e.e.e.j.b.k.j.k.k.k.j.k.j.0.k.0.k.0.k.k.0.k.0.0.e.k.k.0.k.k.e.j.k.k.e.j.e.e.k.e.e.j.e.e.j.b.e.e.j.b.k.e.k",
+".j.j.j.e.j.j.e.k.j.e.j.j.j.j.k.j.k.j.k.j.j.j.k.j.0.k.k.j.k.j.e.e.e.j.e.e.b.l.j.e.e.j.k.j.e.j.e.e.e.e.l.e.b.e.e.e.a.#.c.a.#QtQtQt.#.#.cQtQt.iQtQt.#.#.#.#.#.#.#.a.c.a.cQt.a.c.a.c.#.a.b.a.b.a.a.#.e.l.r.l.r.l.#.l.#.a.q.cQtQt.f.i.dQtQt.cQtQt.cQt.x.g.g.x.g.w.p.o.B.M.U.4.1.N.I.z.D.v.h.x.gQt.q.d.cQt.b.e.e.e.b.e.e.j.e.j.j.j.j.j.e.k.k.e.j.e.j.e.e.e.b.b.r.e.b.e.j.j.j.e.j.k.j.e.j.e.t.j.j.k.k.k.e.k.j.k.j.k.k.j.k.j.k.j.e.k.j.k.k.0.k.0.k.e.0.e.j.k.e.e.e.k.k.e.e.j.j.e.e.e.b.e.e.e.e.j.e.e.b.e",
+".j.j.e.e.e.e.j.j.j.j.j.j.k.j.j.j.e.j.j.e.j.k.j.j.0.j.0.j.e.e.k.e.j.e.e.l.t.e.e.j.k.k.j.j.e.e.b.e.l.b.e.e.e.j.b.e.a.c.r.c.#.cQtQt.#.c.#Qt.i.fQtQt.#.c.#.c.#.c.#.c.aQt.a.c.b.c.b.c.b.a.a.a.a.a.b.a.#.e.l.e.l.e.a.a.#Qt.c.q.c.iQt.gQt.cQtQt.cQt.cQt.q.g.q.g.g.g.y.A.E.Z.4.W.P.Q.o.n.u.w.x.f.d.f.d.f.b.r.e.b.b.e.j.e.b.j.e.e.k.b.k.e.k.j.j.j.e.e.j.e.e.e.e.l.e.a.e.e.e.k.j.k.j.j.j.j.j.e.j.b.e.k.e.k.j.k.k.j.k.j.k.j.k.k.j.k.k.j.j.j.0.e.k.k.e.k.j.k.e.e.b.e.b.e.b.e.k.b.j.b.l.b.e.r.l.b.e.e.b.l.e.e",
+".j.e.j.j.j.e.k.j.e.e.e.k.j.j.k.j.k.j.k.j.k.j.j.0.j.e.0.j.k.j.e.j.e.j.e.e.e.l.e.e.e.e.e.l.b.e.l.e.l.l.l.b.e.e.e.j.a.r.a.c.c.#.f.#.c.q.#QtQtQtQt.i.#.c.q.c.#.c.q.#.r.a.r.a.c.#.c.a.#.a.b.a.b.a.#.a.e.l.r.l.r.a.#.#.c.qQtQt.i.gQt.gQt.f.cQt.cQt.cQt.g.f.g.g.x.w.A.I.T.W.2.E.B.A.v.m.h.m.f.iQt.f.d.d.b.b.e.j.e.j.j.k.j.e.j.e.k.e.k.e.k.j.k.b.j.j.e.j.e.b.b.b.b.b.a.e.e.e.e.e.e.b.e.e.e.e.e.j.k.j.k.k.e.k.j.k.k.k.j.k.k.j.k.k.j.k.e.k.k.0.k.e.0.j.e.k.b.e.e.b.e.e.b.e.j.j.j.e.e.e.a.e.b.l.e.b.l.e.b.e",
+".j.e.j.e.j.j.j.k.j.j.k.j.j.k.e.j.j.j.j.j.j.e.j.j.0.0.k.j.j.e.e.e.j.b.j.j.j.e.l.e.l.j.l.e.l.e.l.b.l.r.e.b.e.e.j.j.a.#.a.c.a.a.c.c.#.#.cQtQtQtQtQt.c.#.c.#.a.c.c.c.a.c.a.c.a.r.a.r.a.b.a.a.#.a.c.a.c.#.a.a.a.a.cQt.#QtQt.i.f.f.g.g.f.i.fQt.f.d.i.d.f.f.g.m.w.w.B.E.Z.L.P.B.v.v.w.h.f.gQt.d.d.d.c.c.e.b.e.b.e.j.k.j.k.j.j.j.e.j.j.j.e.j.k.e.e.b.e.e.a.b.a.b.a.b.b.a.e.e.e.b.e.e.e.j.l.e.j.e.e.k.e.k.j.k.k.j.k.j.k.k.j.k.k.j.j.j.j.j.k.e.j.k.j.k.e.j.e.b.e.b.e.b.e.e.j.e.e.b.l.b.e.r.e.e.l.e.e.e.l.e",
+".j.j.j.e.j.e.k.j.b.j.j.j.e.j.k.j.k.e.k.j.k.j.k.j.j.k.k.j.k.j.j.j.e.j.l.b.j.l.j.e.b.l.b.l.b.l.a.a.l.e.l.e.e.e.e.j.l.a.a.a.a.a.c.c.c.#.c.#.iQtQtQt.c.c.#.c.c.#.c.c.a.#.a.b.a.c.a.c.a.#.a.b.c.#.a.#.a.a.c.#.cQt.c.q.d.iQt.g.f.g.g.g.gQt.g.i.d.i.x.f.f.f.g.h.u.A.F.N.6.W.H.o.o.w.m.gQtQt.fQt.i.cQt.r.e.b.e.j.e.e.k.e.j.j.b.k.e.k.e.k.k.e.k.e.k.e.j.e.#.a.a.#.a.a.#.a.e.b.l.e.e.e.e.b.e.l.j.e.k.e.k.k.e.k.j.k.k.j.k.j.k.j.k.j.e.k.j.k.e.0.k.e.k.e.k.j.b.e.e.b.e.e.b.e.b.e.j.e.e.l.b.l.e.b.e.b.l.b.e.e",
+".j.e.j.e.e.k.j.j.j.k.j.k.j.k.j.j.j.j.j.j.j.j.e.j.0.e.0.j.e.e.j.e.j.e.j.j.e.j.l.b.l.l.l.l.l.r.a.#.e.l.e.e.e.e.k.e.l.a.a.a.a.a.a.a.a.c.#Qt.cQt.iQt.c.q.c.c.q.c.a.c.a.c.a.r.a.bQt.b.a.b.a.#.a.a.b.cQt.cQt.c.c.#Qt.d.q.d.i.g.g.g.m.h.g.f.x.f.x.d.gQt.x.h.h.g.o.F.V#i.U.H.v.v.v.g.g.f.i.#.d.c.c.b.a.r.e.e.e.k.b.k.k.k.j.j.k.j.j.j.e.e.j.k.e.e.e.j.e.j.a.b.c.cQt.c.a.c.e.e.e.e.e.e.e.e.e.e.j.e.e.e.j.j.k.j.k.k.e.k.j.k.k.k.j.k.j.k.e.k.k.k.k.j.j.k.e.j.b.e.b.e.e.b.e.b.j.e.b.l.b.e.b.b.b.e.l.e.e.e.l.e",
+".j.e.j.k.j.e.j.k.j.e.j.j.j.j.k.e.k.j.k.e.k.j.k.j.k.k.k.j.k.j.b.j.e.e.e.j.e.e.l.l.t.b.l.#.r.#.r.a.l.b.l.e.b.e.e.e.e.e.a.a.c.b.a.c.a.a.#.c.#QtQtQt.c.c.c.c.c.c.c.c.a.r.a.a.b.c.a.c.a.a.a.c.aQt.a.a.c.c.c.cQt.cQtQt.i.g.f.g.m.f.h.m.g.g.f.g.f.g.g.f.s.w.u.n.I.W.6#c.B.A.w.h.m.g.x.q.#Qt.c.#.a.e.b.e.e.b.j.j.j.k.e.0.j.j.e.k.k.e.k.j.k.j.k.e.b.j.e.b.a.a.q.c.#.c.#.a.b.a.b.a.r.a.a.b.l.e.l.e.j.e.e.k.e.k.j.k.j.k.e.k.j.k.j.j.j.j.e.k.e.k.e.k.e.j.k.e.e.b.e.b.e.e.b.e.e.b.l.e.e.l.b.l.e.b.e.b.l.b.e.b",
+".j.e.e.e.e.j.e.e.j.j.k.j.k.e.j.j.j.j.j.j.j.j.j.j.0.j.0.j.j.j.j.j.l.e.j.l.j.e.e.b.l.r.l.l.a.r.#.r.b.l.e.e.e.b.e.j.l.e.a.b.a.a.r.a.a.c.c.#.cQtQtQt.c.c.c.c.a.c.a.cQt.a.a.r.a.a.r.a.r.a.b.a.r.a.a.aQt.cQt.c.c.#.f.c.i.f.g.m.h.m.m.w.h.p.g.s.g.x.s.g.x.p.n.v.E#.#i.N.G.z.n.m.g.hQt.qQt.#.c.a.a.#.e.r.e.e.e.j.e.k.0.0.j.j.e.e.k.j.j.j.k.e.k.e.k.e.e.e.a.c.a.#Qt.r.c.a.b.a.r.b.a.b.b.#.e.l.e.e.k.b.e.k.k.j.k.k.j.e.k.j.k.k.j.k.e.j.k.j.0.k.j.k.j.k.e.j.r.e.b.e.e.b.j.e.b.j.b.e.b.e.r.e.r.l.b.l.e.e.l.e",
+".e.e.e.e.e.j.j.j.e.b.e.e.j.j.j.j.0.0.e.0.k.k.j.k.b.j.j.j.j.e.j.e.j.j.e.e.e.j.l.j.t.b.r.q.#.c.c.b.b.l.e.b.e.e.j.e.b.e.l.#.b.a.a.b.r.a.r.dQtQt.#.c.#.c.c.a.c.a.b.a.a.a.a.l.a.b.a.b.c.#.c.#.c.c.c.c.fQtQt.iQtQtQt.s.i.g.g.g.h.w.o.o.m.g.f.h.g.x.x.h.p.w.C.S.V.U.N.K.v.w.m.h.g.f.f.d.#Qt.a.a.b.e.a.e.e.k.e.k.j.k.e.e.k.k.k.k.j.j.k.j.e.j.e.e.l.e.a.b.#.c.#.#QtQtQtQt.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.k.j.j.j.k.e.j.e.j.k.e.j.j.e.e.e.j.e.j.e.e.e.b.e.e.e.b.e.b.e.b.t.e.l.b.l.e.b.l.a.#.a.a.#.a.#.a",
+".e.e.b.e.e.b.e.j.j.e.k.b.e.e.e.b.k.e.k.k.j.k.j.j.t.e.e.e.j.e.e.e.j.j.j.e.j.e.j.e.t.l.r.#.#.c.a.a.l.b.j.e.j.e.j.e.e.l.e.b.a.a.r.a.a.r.c.#Qt.i.d.#.c.#.c.#.c.c.b.a.a.l.a.a.a.a.b.b.#.c.cQt.#.c.#.qQt.iQt.fQt.f.iQt.f.s.f.g.x.w.n.z.o.p.h.x.h.w.w.n.v.o.K.N#..U.Q.o.v.w.m.h.f.g.d.d.c.#.#.a.a.e.b.b.k.e.k.j.j.j.k.k.0.0.k.e.k.k.j.k.e.j.e.j.e.b.a.a.a.a.#.cQt.iQtQt.e.a.r.l.e.e.b.e.e.e.b.e.e.e.e.e.j.j.e.k.e.j.k.e.k.b.j.k.j.k.j.e.j.j.j.e.j.j.t.e.e.l.e.l.e.e.t.e.b.t.b.j.e.b.t.e.b.a.l.#.e.e.l.e",
+".a.b.l.l.e.e.e.e.e.e.e.e.e.e.e.e.k.k.j.k.e.k.j.e.j.e.e.j.e.j.e.j.j.e.j.j.j.e.e.e.e.l.#.r.#Qt.a.r.l.e.l.b.e.b.e.e.b.l.e.a.a.r.a.a.q.a.#.cQtQt.#.cQt.#.c.#.c.a.a.a.a.r.#.l.b.a.b.a.#.c.a.c.cQt.c.cQt.#Qt.qQt.qQtQt.qQt.i.g.g.m.n.v.u.w.w.w.n.h.y.o.B.H.3#..W.E.A.n.u.w.m.f.g.d.dQt.r.a.a.b.b.l.e.e.j.j.j.e.k.k.b.k.k.k.0.k.j.k.e.e.j.j.e.l.e.l.e.a.a.a.a.c.c.#.d.#.r.e.b.e.b.l.b.e.a.e.b.e.e.e.e.e.j.k.j.k.j.k.e.j.e.k.j.e.k.e.e.b.e.e.b.e.b.e.b.e.l.e.e.j.l.b.e.b.l.e.b.l.e.b.e.b.a.l.b.l.e.b.l.b",
+".l.l.e.l.b.l.b.l.b.l.r.l.e.b.e.e.e.j.e.e.k.j.j.j.e.j.e.t.e.e.l.j.e.j.j.e.j.j.e.t.l.l.r.q.#.a.a.b.l.b.l.e.e.e.k.e.e.a.b.a.a.c.a.b.r.#.cQtQtQt.#.cQt.#Qt.c.#.c.c.c.l.a.l.a.a.a.b.b.b.c.a.r.a.c.cQt.c.cQtQt.#.d.#Qt.q.c.f.i.g.h.v.z.o.v.o.n.v.v.o.A.N.4.8#i.T.o.p.n.w.m.f.gQt.f.c.c.#.c.b.l.b.e.b.e.k.j.k.k.j.j.k.j.j.0.k.j.k.j.j.e.j.j.j.j.j.e.e.e.a.l.a.q.c.#.iQt.e.b.l.r.e.b.e.e.e.b.l.e.e.e.e.e.j.j.e.k.e.j.k.b.j.e.k.j.k.e.j.j.b.e.e.e.e.e.l.e.e.b.e.b.e.e.l.e.b.e.b.b.e.r.l.b.#.a.c.#.c.a.c.a",
+".a.#.a.a.a.a.r.a.a.a.a.a.a.a.a.#.l.b.e.e.e.e.j.e.j.b.j.e.j.e.j.j.e.j.j.j.j.j.e.j.b.r.r.#.a.a.e.b.l.e.l.b.l.b.e.e.b.l.e.a.b.#.r.c.a.#QtQt.f.d.c.#Qt.#Qt.cQt.c.#.c.a.a.a.a.b.a.b.b.a.b.r.b.b.b.b.a.c.c.c.cQt.cQt.c.f.#Qt.f.f.w.v.A.A.z.z.B.B.B.Q.S#i.U.W.N.E.A.n.x.s.g.f.f.d.cQt.c.a.e.b.b.e.e.j.j.e.j.j.e.j.k.e.k.e.0.k.k.j.e.b.j.e.e.e.j.l.e.e.e.a.b.a.r.c.i.d.#.r.e.b.e.a.e.b.e.b.e.b.e.e.e.e.e.j.k.j.j.k.j.e.k.e.j.j.j.e.j.j.e.e.l.e.e.l.b.b.b.l.e.l.e.e.b.e.b.a.#.a.b.l.a.r.a.a.a.a.a.a.#.a.a",
+".a.a.a.a.a.a.a.#.r.l.r.l.r.#.r.r.#.c.#.a.a.e.e.e.e.j.e.j.e.j.e.j.j.j.j.e.j.e.j.l.a.r.q.r.a.#.l.j.l.b.l.e.e.j.e.e.e.l.e.a.a.c.a.a.c.cQt.f.fQtQt.c.#Qt.#Qt.c.#.c.#.l.a.l.a.c.a.b.a.e.b.a.e.l.b.#.b.a.aQt.c.c.c.c.cQt.c.f.f.g.n.A.F.B.B.B.C.I.E.1.U.W.L.N.H.H.o.w.h.f.gQt.i.cQt.a.a.e.#.e.l.e.k.b.e.k.j.k.e.j.k.e.k.0.k.0.k.b.j.j.e.j.j.j.j.e.e.l.e.e.e.a.a.c.#.dQt.b.e.#.e.r.e.e.l.b.e.e.e.e.e.e.e.j.j.e.k.e.k.j.k.j.k.j.j.k.b.j.e.e.e.e.b.b.e.a.e.e.e.b.l.b.e.l.e.#.b.a.r.a.r.a.#.cQt.cQt.c.cQt.c",
+".a.#.r.a.#.r.a.r.a.#.r.#.r.r.r.#.#.#.#.a.#.a.e.l.e.l.j.b.t.e.e.e.j.e.j.e.j.b.j.e.a.#.#.#.r.a.e.e.e.l.e.b.j.e.j.b.e.e.b.a.a.b.cQt.r.cQt.f.f.fQt.c.#.#QtQt.#.d.#.c.c.#.c.c.a.c.r.c.b.e.b.e.b.l.b.e.b.#.a.a.#.a.a.#.dQt.x.q.w.u.z.F.F.I.B.K.N.W.4.W.H.M.M.M.I.A.n.p.s.i.f.fQtQt.c.#.b.e.e.b.j.b.k.0.e.k.j.k.j.j.j.j.k.0.e.k.k.e.e.j.e.j.e.j.e.e.e.e.b.e.b.b.r.cQt.c.#.a.e.b.l.e.b.e.b.e.a.e.e.e.e.e.j.k.j.j.k.j.e.k.e.j.j.j.k.j.k.j.b.a.b.e.a.b.b.a.b.l.e.e.l.b.#.a.c.r.a.b.a.b.a.#.c.c.c.c.c.c.c.c",
+".#.r.a.r.l.r.#.r.#.r.r.r.r.r.#.r.x.q.q.#.r.#.l.b.l.b.j.e.j.e.t.e.j.j.b.j.e.t.e.e.a.r.#.q.#.#.l.j.l.b.l.e.j.e.j.e.e.l.e.a.#.cQt.c.#QtQt.f.i.fQt.c.#Qt.#Qt.#Qt.c.#.a.#.a.c.c.c.c.r.a.e.a.e.a.b.b.a.b.a.b.b.b.r.b.c.d.f.q.h.h.A.B.F.M.H.E.P.3.5.4.P.Q.Q.Q.Q.Q.J.A.u.g.gQtQt.c.aQt.c.b.e.b.e.k.e.k.k.k.b.j.j.j.k.j.k.0.k.0.k.j.k.k.b.j.j.j.l.e.l.e.a.e.b.l.b.a.cQt.c.a.r.a.r.e.r.e.b.e.e.e.e.e.e.e.e.e.k.e.k.e.j.k.j.k.j.k.j.e.k.e.j.e.e.e.b.e.l.e.a.e.r.b.b.r.a.#.b.#.b.a.b.#.b.#.a.c.cQt.cQt.cQt.c",
+".e.l.b.e.b.e.e.e.l.l.b.l.b.a.r.aQt.iQtQt.i.#.#.#.l.l.l.e.l.e.e.e.e.k.l.j.e.e.l.l.#.d.q.r.a.l.b.b.e.j.e.j.j.b.e.r.l.e.b.c.c.d.c.d.#QtQt.i.g.g.iQt.c.#Qt.f.fQtQt.#.#.c.c.a.a.b.e.e.b.b.b.b.b.b.r.b.c.r.c.f.d.d.c.xQt.qQt.h.n.C.P.2.2.L.2#i#o.4.M.Q.P.E.M.T.F.A.w.m.f.f.g.d.f.c.r.b.l.b.e.r.e.r.l.e.b.k.k.j.e.j.j.b.k.j.k.e.k.j.k.j.e.e.e.e.e.e.e.e.b.e.b.a.r.c.a.c.r.a.b.a.b.a.e.a.e.b.b.e.e.e.e.e.e.e.e.e.e.j.j.e.e.k.e.k.j.j.k.j.j.j.e.j.e.e.b.e.e.l.e.b.e.b.e.b.l.b.r.e.b.e.b.eQt.a.b.a.b.e.b.e",
+".r.b.b.e.a.b.b.e.l.b.l.l.l.a.a.#.#.#.qQt.#.#.c.#.l.b.l.b.e.r.e.e.k.j.j.b.j.l.b.l.r.r.r.a.#.l.b.e.k.b.e.b.j.b.e.b.b.l.a.c.c.dQt.f.#Qt.f.f.h.g.gQt.r.c.#.f.iQt.#Qt.c.#.c.a.a.b.l.b.b.b.b.b.b.b.b.b.cQt.c.d.d.d.d.d.gQt.d.g.h.D.N.6.6#h#h#i.3.M.E.B.B.I.E.K.B.A.u.m.m.f.gQt.dQt.b.a.b.b.a.e.a.e.r.e.e.k.j.j.k.j.k.j.k.e.k.j.k.j.k.k.b.e.b.e.b.e.b.b.l.e.e.e.a.c.#.c.a.b.a.r.l.b.a.b.e.e.e.e.e.e.e.e.e.e.e.e.e.j.e.e.k.j.j.k.e.k.e.j.k.j.k.e.k.j.e.j.e.b.e.b.a.b.a.e.r.e.a.b.a.e.#.e.#.a.b.e.b.a.b.b",
+".e.e.l.b.e.e.l.e.b.l.l.r.lQt.a.a.a.a.r.#.#.#.#.r.#.l.a.e.l.b.e.e.e.e.j.e.j.l.e.#.r.q.#.a.a.b.a.e.b.e.j.e.e.e.b.b.c.cQtQt.i.d.f.q.qQt.i.f.i.g.gQt.#QtQt.f.i.fQtQt.#.c.c.c.a.c.b.e.b.b.b.b.b.b.b.rQt.b.cQt.c.d.f.q.g.s.w.v.A.D.R.1#k#o#h.W.H.B.o.B.A.o.z.z.B.z.o.p.w.h.m.f.gQt.d.#.a.b.r.e.b.l.e.e.j.k.e.k.e.k.j.k.j.k.j.k.k.k.j.k.e.e.e.e.e.e.e.e.e.r.e.b.b.a.c.a.r.a.b.a.b.b.e.e.e.b.e.e.e.e.e.e.e.e.e.e.e.j.j.e.j.j.j.j.k.j.k.j.e.k.j.j.j.k.e.j.e.b.e.e.e.e.e.e.a.e.b.e.b.b.b.e.a.b.e.a.b.e.a.e",
+".e.e.b.e.b.e.b.e.l.l.e.l.e.a.a.#.a.c.a.#.c.a.c.c.l.l.e.l.b.a.b.e.j.j.l.e.l.e.b.a.r.c.r.#.a.b.b.e.e.e.e.e.b.b.b.#.cQtQt.dQt.q.f.f.cQtQtQt.f.i.g.fQtQtQt.fQtQtQtQt.c.#.#.c.c.a.b.b.a.b.b.b.b.b.a.b.l.b.c.d.f.d.f.g.u.n.h.u.o.B.N.9#i.2.Q.F.B.v.o.v.v.v.o.o.A.B.z.v.p.u.g.g.iQt.#.c.r.a.a.a.r.b.a.b.e.b.e.k.b.j.j.j.k.j.k.k.j.k.j.k.e.e.e.e.e.e.e.e.e.e.e.e.a.r.a.b.b.#.b.#.e.a.#.b.l.e.e.e.e.e.e.e.e.e.e.e.e.j.j.e.j.k.j.k.e.j.j.j.k.j.e.k.e.k.j.k.e.e.e.l.b.e.b.e.e.e.b.e.e.e.l.e.b.e.r.e.#.e.r.e",
+".e.e.b.e.e.e.b.e.e.e.b.e.b.b.a.b.a.a.a.c.a.a.#.a.#.l.r.l.e.b.e.a.b.l.e.b.l.e.a.a.q.r.#.a.a.e.e.b.b.e.b.e.r.rQt.rQt.d.d.i.d.d.i.q.c.#QtQtQt.f.i.x.iQtQtQtQt.fQt.g.#.c.c.c.a.c.b.e.b.e.a.e.a.e.b.b.aQt.#QtQt.i.m.g.p.h.u.z.B.Q.W.U.H.F.z.v.v.p.w.p.w.w.h.v.z.B.B.C.m.g.i.fQtQt.c.#.a.a.#.a.a.a.e.a.e.j.j.e.k.k.e.k.k.k.j.k.j.k.k.j.k.j.j.k.j.j.e.j.e.e.e.l.b.b.b.a.a.b.a.b.b.b.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k.e.j.j.j.k.j.j.j.j.k.j.j.k.e.j.e.e.b.e.b.e.e.b.b.l.b.e.a.e.b.b.l.b.e.e.e.b.l.e",
+".e.b.l.b.e.a.e.b.j.e.e.b.e.#.b.#.a.a.#.a.a.a.a.a.l.l.e.l.e.l.r.e.l.b.l.l.e.a.#.a.c.rQt.a.#.b.b.e.b.e.b.a.r.a.c.a.d.iQt.d.dQt.d.d.c.c.c.qQt.f.f.g.h.g.f.iQtQt.i.xQtQtQt.c.c.c.c.c.a.a.a.a.b.c.aQt.c.dQt.f.x.g.h.h.u.z.K.M.Y.Q.F.D.o.o.u.h.p.m.p.x.p.w.w.h.v.z.B.D.x.g.f.iQt.f.cQt.c.r.a.r.a.b.a.a.j.e.j.e.j.j.j.j.k.j.k.j.k.k.j.k.j.k.j.j.k.j.k.j.e.e.e.b.a.b.a.b.r.a.r.a.b.l.b.l.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.j.k.j.k.j.e.k.j.k.e.j.j.j.j.j.e.e.e.e.b.e.b.l.e.e.e.e.b.e.e.e.e.b.e.e.a.b.b.e",
+".e.e.e.e.b.e.e.e.b.l.e.b.a.b.b.a.b.a.a.a.a.#.a.a.b.a.e.b.a.e.b.e.l.e.l.b.a.a.c.c.#.#.#.a.#.e.b.r.b.#.b.#.c.cQt.c.c.c.cQt.c.c.#.c.c.cQt.c.#.i.g.x.h.g.gQtQt.f.g.h.#Qt.c.d.c.c.r.c.r.c.c.c.c.c.c.c.d.f.f.f.u.o.y.z.Q.Q.S.J.J.C.o.v.h.p.w.x.h.x.q.g.s.w.w.w.v.A.C.B.i.g.fQt.d.a.a.b.a.a.a.a.a.a.a.a.e.b.l.e.e.e.e.j.j.k.k.k.j.k.j.k.j.j.k.j.j.k.j.j.e.e.e.e.b.r.a.b.a.b.a.e.a.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.k.e.k.e.j.j.j.k.e.j.k.j.k.j.k.j.e.e.e.b.l.e.e.e.r.e.b.e.b.e.b.e.b.l.b.b.b.l.b.e",
+".r.b.#.e.b.e.b.l.e.e.e.b.b.b.a.r.a.a.a.b.a.a.b.a.l.l.l.l.b.a.b.b.l.b.a.e.a.aQt.c.r.q.cQt.c.#.r.b.a.#.a.cQt.a.c.c.cQt.c.c.c.a.a.#.d.c.c.c.#.f.g.h.g.h.iQtQt.i.h.gQtQtQt.d.c.c.c.r.c.c.c.cQt.c.c.i.x.g.x.w.y.E.R.S.A.z.z.G.n.u.p.p.g.g.w.g.f.x.f.x.s.p.w.h.m.A.J.D.g.f.d.f.c.r.b.e.#.c.aQt.a.a.a.a.e.l.e.e.l.e.l.e.k.j.k.j.k.j.k.k.k.j.k.j.k.j.j.k.e.e.e.a.b.a.b.b.b.#.b.b.b.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.j.k.j.j.k.j.k.j.j.k.e.k.e.j.j.j.e.e.e.e.b.e.b.e.e.l.b.e.e.l.b.e.e.e.e.a.e.b.b.e",
+".e.e.e.e.b.l.b.e.l.e.l.l.e.l.b.l.e.e.l.b.l.e.b.a.b.e.b.e.e.e.e.b.b.b.r.e.b.e.b.b.#.d.iQt.dQt.d.fQt.cQt.a.r.r.a.r.a.#.a.#.cQt.c.c.a.#.c.c.fQt.f.f.q.q.i.f.f.fQt.d.iQt.#.#.#.a.b.b.c.d.d.d.d.q.q.q.p.h.v.B.S.Z.E.o.w.g.m.f.m.i.h.i.g.fQt.g.f.f.g.f.g.g.p.w.o.o.z.J.gQt.a.b.r.b.c.c.a.a.a.a.b.a.b.l.j.j.j.j.j.k.k.j.k.j.k.k.j.k.k.j.k.j.k.k.j.k.k.j.j.k.e.e.e.b.a.b.#.a.a.l.b.e.j.j.e.e.l.e.e.e.j.e.e.e.j.e.j.e.j.e.j.e.e.e.e.e.e.e.j.j.j.j.k.k.j.k.e.j.e.j.e.b.l.j.b.e.b.l.b.e.b.l.b.e.e.b.l.l.l.e",
+".e.l.b.l.e.e.l.e.b.l.b.e.e.l.e.l.e.l.e.l.b.l.c.a.b.a.b.b.l.r.l.b.#.a.a.a.b.b.#.b.iQt.iQt.i.f.d.c.c.a.c.#.a.b.a.b.#.b.b.b.c.c.b.b.c.aQt.c.d.f.d.f.s.g.g.i.g.i.gQt.p.h.fQt.d.d.d.d.r.c.d.g.f.s.w.g.g.v.J.R.M.F.o.p.i.m.i.i.f.f.f.fQt.xQt.q.i.dQt.g.f.g.w.n.p.o.B.A.g.dQt.r.a.r.b.rQt.a.r.a.a.b.a.a.e.e.j.j.e.k.j.k.e.k.j.k.k.j.k.j.k.k.j.k.k.j.k.k.k.j.e.e.e.a.b.a.a.l.b.l.e.e.e.k.l.j.e.j.l.j.e.j.t.e.j.e.j.e.j.e.j.e.j.j.j.j.j.e.j.j.e.k.e.j.j.j.j.j.k.j.e.e.j.e.e.e.e.e.b.e.e.e.j.j.l.l.b.e.b.l",
+".e.e.e.e.e.e.b.b.l.e.l.e.b.l.r.l.b.l.e.l.a.a.#.c.c.#.c.aQt.c.c.c.cQt.cQt.c.c.cQt.#Qt.c.f.cQt.cQt.b.b.b.e.b.b.b.e.b.l.r.a.e.b.a.b.#.a.c.c.c.dQt.f.g.h.w.h.h.g.h.i.v.p.h.h.i.f.x.x.i.q.f.g.h.h.u.o.o.z.F.B.J.v.s.h.f.f.f.f.i.f.i.f.d.dQt.fQt.f.g.d.g.f.p.h.n.A.D.J.s.f.c.b.#.b.a.c.a.a.a.a.b.a.l.b.j.e.j.e.k.j.k.k.k.j.k.j.k.k.j.k.j.k.k.j.k.k.j.k.j.e.e.e.e.b.a.b.a.a.a.e.j.e.j.j.e.e.l.j.e.j.e.j.e.e.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.j.j.j.k.k.j.k.e.j.j.j.j.e.b.e.e.e.e.b.e.b.e.b.l.e.e.l.e.l.e.e",
+".b.e.e.b.e.e.a.e.a.a.a.a.a.a.a.a.l.e.c.#.c.b.c.b.c.c.d.f.d.d.d.f.#.d.#Qt.#Qt.iQt.q.c.q.a.c.#.r.b.e.e.e.b.e.e.b.e.b.e.e.e.b.a.r.b.a.a.a.cQt.f.d.f.m.p.v.u.v.h.h.h.o.u.h.h.f.g.f.h.x.m.h.h.v.y.J.F.J.C.y.n.h.x.x.q.i.fQtQt.dQt.dQt.cQt.f.f.i.qQt.f.f.g.s.w.n.C.B.J.w.f.i.c.a.#.b.c.aQt.b.a.l.b.a.a.j.e.j.e.j.k.j.k.j.k.k.k.j.k.k.j.k.k.j.k.j.k.j.k.j.k.e.e.r.e.b.l.a.l.a.e.l.e.k.j.e.j.e.j.e.j.e.j.l.e.j.e.j.e.j.e.j.e.j.j.j.e.j.e.j.j.e.j.e.j.j.k.e.k.j.j.k.e.j.e.e.e.e.e.e.e.l.b.e.l.b.e.l.e.l.e",
+".a.a.a.a.a.a.a.#.b.a.#.b.a.a.#.c.#.aQt.c.c.c.c.c.c.c.f.#QtQtQt.cQt.qQtQtQt.#Qt.c.cQt.c.b.#.b.r.r.e.e.b.e.j.e.j.e.e.e.e.e.#.b.a.b.a.r.c.c.dQt.d.g.h.h.o.o.v.u.v.v.y.u.h.m.i.g.w.g.h.u.o.z.J.J.G.A.u.p.p.h.h.f.d.r.f.d.f.dQt.dQt.d.d.dQt.f.d.gQt.g.f.g.w.s.n.A.z.F.p.i.d.d.b.a.cQt.b.a.a.a.b.a.e.a.e.b.l.e.e.e.j.e.k.j.k.j.k.j.k.k.j.k.k.j.k.k.j.k.j.e.e.e.e.b.a.r.a.a.a.j.e.e.j.k.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.e.j.e.j.e.j.j.j.k.j.k.k.j.k.j.j.j.j.e.e.e.e.e.e.e.e.r.e.b.a.a.a.a.a.a.b.a",
+".b.a.a.a.#.b.a.aQt.c.a.c.a.c.c.c.b.c.c.cQt.d.i.d.i.dQt.dQt.dQtQt.c.c.c.cQt.cQt.c.#.a.a.#.b.b.b.e.k.e.j.k.e.k.e.k.e.t.b.e.b.b.a.r.a.a.a.c.d.f.f.f.x.p.u.A.C.v.v.A.v.A.u.h.h.v.v.C.F.F.F.J.J.y.u.u.g.g.g.i.gQtQt.d.i.dQtQt.d.d.d.i.dQt.d.i.f.d.f.d.f.g.x.w.p.A.J.F.p.wQt.f.c.r.c.c.a.#.a.b.#.a.a.a.e.l.e.e.e.e.e.j.j.k.k.j.k.k.j.k.j.k.j.k.k.j.k.k.j.k.e.e.e.l.b.e.a.l.a.e.e.e.j.j.e.j.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.e.j.e.j.e.j.e.j.j.e.k.e.k.e.k.e.j.j.j.j.k.e.e.e.e.e.b.l.e.e.e.a.b.a.a.r.a.a.a",
+".a.a.a.a.a.a.#.a.c.cQt.cQt.cQt.c.c.c.fQt.f.fQt.f.c.q.c.#.#.#.#.c.a.r.a.b.a.b.a.b.e.b.e.b.e.b.e.b.k.0.k.0.k.k.0.k.j.e.e.j.l.b.e.b.aQt.c.c.dQtQt.x.g.g.v.v.v.v.z.z.E.K.J.F.B.B.T.P.2.S.J.C.u.w.h.i.m.g.f.g.c.cQt.i.d.d.f.d.d.c.d.d.d.d.g.dQt.fQt.g.d.g.x.n.p.A.J.F.v.p.f.d.c.a.aQt.a.a.c.#.a.b.a.b.a.a.b.e.e.b.j.e.k.j.k.k.j.k.k.j.k.k.j.k.j.k.j.k.j.e.e.e.e.b.a.b.#.a.b.j.l.e.k.j.e.j.e.j.e.j.e.j.e.j.e.t.e.j.e.j.j.e.j.e.j.e.j.e.j.j.j.j.j.k.k.j.k.j.j.e.j.j.j.e.e.b.e.e.b.b.e.b.#.a.a.b.a.a.b.a",
+".l.a.l.a.#.a.a.aQt.c.c.c.c.c.c.c.fQt.dQt.d.i.dQt.#.c.a.a.a.a.a.c.b.b.e.e.b.e.b.e.b.e.e.e.b.b.j.b.0.e.0.e.0.e.0.e.j.e.j.e.e.b.a.b.a.a.c.c.d.i.d.f.f.g.h.o.v.v.y.z.Z.Y.R.R.R.Y.U#c.H.F.C.v.u.g.h.x.f.f.dQtQtQt.#.#.d.d.d.d.r.c.r.dQt.dQt.d.dQt.dQt.dQt.h.s.w.o.B.J.z.v.h.i.c.#.a.c.a.#.a.a.a.a.a.l.b.l.a.b.e.b.b.j.j.k.k.j.k.j.k.k.j.k.j.k.k.j.k.k.j.k.e.e.e.b.r.l.a.l.a.e.e.e.j.k.e.j.e.j.e.j.e.j.e.j.e.e.e.e.j.e.j.j.e.j.e.j.e.j.j.e.j.e.k.e.k.e.k.e.j.e.j.j.e.j.e.a.e.b.e.l.e.e.a.b.#.a.a.a.#.a",
+".c.q.a.c.a.#.q.cQtQt.iQt.#.iQtQtQt.iQtQt.#.c.cQt.b.l.r.e.b.b.b.e.e.b.j.e.j.e.e.e.k.j.e.k.k.e.k.e.k.k.k.k.k.k.k.k.k.j.j.b.b.a.b.b.a.#.a.q.cQt.d.i.i.s.w.u.o.n.h.o.M.M.2#c.8#p.U.S.A.y.u.w.h.x.x.g.f.f.d.d.c.c.c.cQt.cQt.#.dQt.d.f.c.q.c.cQt.c.cQt.c.i.f.x.m.p.y.A.z.C.o.h.d.r.c.#.c.c.b.a.b.c.c.d.a.a.b.a.e.e.e.e.j.j.j.k.j.k.j.j.e.e.e.e.e.e.e.e.e.l.e.#.a.a.c.c.a.a.a.a.e.e.e.e.j.e.j.e.e.e.e.e.j.e.j.j.j.j.e.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.e.e.e.e.e.e.b.a.b.l.e.a.b.a.r.a.c",
+".#.c.c.q.c.c.#.c.qQt.#.fQt.d.#.iQtQtQt.q.cQt.c.c.b.e.b.e.e.e.e.b.k.e.k.b.j.b.k.b.0.e.0.k.0.k.e.k.0.e.0.e.0.e.0.e.j.e.e.e.l.r.c.c.b.a.a.cQt.f.f.g.m.h.h.v.B.F.F.E#i#o.8#c.P.H.F.Q.C.A.v.h.g.s.x.xQtQt.d.iQt.c.c.cQtQt.f.#.d.f.d.d.a.a.a.a.c.c.c.cQt.d.d.g.x.w.u.y.z.z.o.u.hQt.f.d.#.f.c.#.a.c.cQt.l.a.a.a.e.e.e.e.k.j.k.j.k.k.j.0.e.e.e.e.e.e.e.e.e.e.e.a.a.c.b.c.#.a.c.e.e.e.e.e.e.e.e.e.j.j.j.j.e.e.j.e.e.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.e.e.e.e.e.e.e.e.b.e.e.b.a.b.r.l.b.a.aQt.a.c.c",
+".c.q.c.#.c.q.c.#Qt.dQt.#.d.iQtQtQt.q.c.c.c.c.b.l.b.a.e.b.j.e.j.j.e.b.j.e.j.j.j.j.k.k.k.e.k.k.0.k.e.k.k.k.k.k.k.k.j.j.b.b.a.c.a.c.a.aQt.c.f.f.g.x.g.v.B.F.P.V#o#q#o.1.S.F.A.v.y.v.A.u.u.u.h.g.x.f.f.dQt.d.dQt.c.c.#.#.c.#.c.c.c.c.c.a.c.c.b.r.b.a.c.fQt.f.h.g.n.p.A.B.z.A.p.x.f.f.dQt.#.c.a.c.c.d.a.a.b.a.e.e.e.e.j.0.j.k.j.k.j.j.e.e.e.e.e.e.e.e.j.l.e.e.a.b.a.c.a.a.b.e.a.e.e.e.e.t.e.j.e.e.e.j.e.l.j.e.j.j.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.e.e.j.b.e.e.b.l.b.a.a.a.r.a.c.c.c",
+"QtQtQt.iQtQtQt.fQt.q.d.i.#Qt.c.i.c.#.cQt.c.e.a.b.e.e.e.e.e.e.e.j.j.j.j.b.k.j.j.j.0.e.k.0.e.k.e.k.k.j.e.e.k.b.j.j.e.e.l.e.bQt.dQt.r.#.d.g.q.h.s.n.o.F.Z.1#i#d#r#r.Y.B.v.u.u.u.h.g.h.u.v.u.h.h.h.xQtQt.d.iQt.c.c.cQt.#.c.c.c.c.d.#.a.a.#.b.e.a.b.#.c.a.f.d.x.x.x.p.v.C.z.z.v.v.p.w.f.gQt.c.#.c.a.c.a.a.a.e.e.e.e.e.j.j.k.j.k.j.k.j.j.j.k.j.j.k.j.j.e.j.l.e.b.a.a.b.a.a.c.e.e.e.e.e.l.e.e.e.j.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.e.e.e.e.e.e.e.e.e.e.l.e.e.a.b.b.a.b.a.c.cQt.c.c",
+"Qt.xQt.f.f.g.f.f.g.fQt.iQt.dQtQt.c.q.c.a.b.b.b.e.e.r.e.e.j.e.e.e.b.j.e.j.e.b.j.b.k.0.k.k.0.k.0.e.e.e.j.e.b.k.j.e.e.b.b.a.b.c.r.d.d.f.x.x.s.n.o.B.N.4.9#o#j#f.6.X.D.z.p.h.hQtQtQt.g.h.o.y.v.p.x.f.f.d.dQt.d.c.a.c.r.a.#.a.c.a.b.a.b.a.b.a.b.b.b.b.a.c.c.d.d.f.x.x.p.v.u.o.y.v.o.y.h.h.f.#.c.c.c.c.a.a.b.e.l.e.e.e.k.e.j.j.j.e.k.j.j.j.e.j.e.e.j.j.e.e.e.a.a.b.a.b.a.l.b.l.b.e.e.e.j.e.j.j.e.e.j.j.e.j.e.j.e.j.e.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.e.e.e.e.b.e.b.e.b.b.a.e.#.a.cQt.c.c.c.d.d",
+".f.f.f.g.f.f.g.iQtQt.gQtQt.qQt.q.c.c.c.a.b.e.e.e.e.e.e.e.e.j.r.e.j.j.j.e.e.k.e.k.e.k.0.e.k.e.k.k.e.j.b.j.e.j.e.b.e.e.b.b.#.d.d.f.q.x.x.w.v.I.M#c.U#i#p.8#a.U.P.D.z.v.v.g.fQtQtQt.h.h.p.A.v.p.g.x.fQt.dQt.f.c.c.c.#.#.a.a.c.#.b.a.e.e.e.e.b.e.e.b.r.b.#.a.f.d.d.f.x.h.h.n.u.o.C.B.u.p.fQtQt.c.cQt.a.a.a.b.e.e.e.e.j.j.k.j.k.j.j.k.e.e.e.e.e.e.e.e.e.j.l.b.a.a.b.a.a.a.c.e.e.e.e.e.j.e.j.e.j.e.j.j.j.j.j.e.j.e.t.e.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.e.e.e.e.e.e.b.e.e.l.e.e.e.b.a.b.r.a.cQt.c.d.fQt",
+".x.m.x.g.x.g.f.x.iQtQt.d.#.d.c.c.c.a.r.b.b.e.j.e.e.b.e.b.e.e.j.e.b.j.b.e.j.b.e.j.k.0.e.k.0.k.0.e.j.b.b.e.b.j.e.j.e.a.a.c.d.f.d.f.h.s.v.B.Q.Z.1#h.2#i.9.U.Q.B.v.h.y.o.g.i.fQt.d.f.d.i.p.y.z.v.m.x.i.dQt.dQt.c.c.c.r.a.a.a.a.b.a.e.b.b.e.e.e.e.e.e.r.a.r.r.c.b.d.d.x.x.x.g.v.o.D.J.D.A.gQt.i.#.c.c.a.a.b.l.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.l.e.a.#.b.c.a.b.l.a.e.b.j.e.k.e.j.e.j.e.j.e.e.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.j.j.j.j.j.j.e.e.e.e.e.e.b.e.l.b.e.e.r.l.b.e.aQt.c.cQt.d.iQt.f",
+".x.f.g.f.h.f.f.f.cQt.c.#.f.#Qt.d.a.c.e.b.e.e.e.b.e.b.e.e.j.e.b.e.j.j.e.k.e.k.e.k.e.k.0.k.k.e.k.e.j.b.e.e.e.e.b.b.b.b.bQt.d.d.g.q.n.u.A.N.4#o.3.L.6#c.2.T.D.p.x.g.g.p.u.g.f.q.f.q.d.f.g.y.A.A.w.f.f.dQtQt.d.c.c.c.r.#.l.a.#.a.e.b.e.e.e.e.j.b.e.e.r.r.r.bQt.rQt.r.q.f.f.p.h.v.z.D.J.C.u.iQt.c.c.b.#.a.a.b.e.e.e.e.e.e.e.e.j.e.e.e.e.e.e.e.e.e.e.e.j.j.e.b.a.a.a.b.a.a.a.e.e.e.k.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.e.j.e.j.j.e.e.e.e.e.b.e.b.l.b.e.e.e.b.a.eQt.d.i.d.i.f.f.g",
+"Qt.fQt.dQt.cQt.d.#.a.#.a.a.a.a.b.a.a.a.a.b.a.b.a.e.l.e.e.b.e.k.b.e.b.j.b.e.b.j.b.e.l.b.e.e.b.r.e.e.r.r.c.f.d.c.#.b.b.d.d.h.h.h.v.F.N#i#j#d#h.2.1.Z.J.A.h.h.m.x.xQt.h.p.u.p.fQt.c.#.d.i.g.o.C.C.v.f.i.d.c.l.#.aQt.c.a.a.a.b.l.e.l.e.j.k.k.e.e.j.e.e.e.e.e.e.b.b.b.b.r.d.x.w.h.o.C.F.K.D.h.gQt.q.aQt.c.c.a.a.b.b.c.e.e.j.e.j.e.e.e.j.j.j.j.j.j.j.j.b.l.a.a.c.b.c.b.l.e.e.e.e.j.k.j.j.j.j.j.k.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.e.e.j.e.j.e.j.j.j.e.j.e.e.l.a.a.a.r.a.c.c.cQt.f.d.f.g.i.f.f.f.f.s.f",
+"Qt.d.i.c.cQt.c.c.a.a.a.a.a.l.a.a.a.a.r.a.a.#.a.a.l.b.l.e.j.e.e.e.j.b.j.b.j.b.j.b.j.j.e.b.b.r.b.r.e.r.c.f.d.d.r.r.d.f.d.f.g.v.B.S#c#s#t#t#g#h.V.S.J.y.u.u.w.h.g.x.i.m.p.v.h.g.d.c.c.#.f.g.y.z.B.v.f.fQtQt.a.b.a.b.c.c.b.a.a.b.e.e.e.e.j.j.j.e.j.r.e.b.e.r.e.b.#.c.#.c.f.f.g.n.v.o.G.F.z.v.h.fQt.#.c.#.c.a.c.a.b.b.e.j.e.j.j.j.j.e.j.j.j.j.j.j.e.j.e.e.e.c.b.a.c.a.e.t.l.j.e.j.j.j.j.k.e.k.e.j.e.k.e.j.e.j.e.j.e.j.j.e.j.e.j.j.j.e.j.j.j.b.j.e.e.j.e.l.b.e.a.r.c.aQt.c.c.i.dQt.gQtQtQt.iQt.iQtQtQt",
+".a.a.a.a.#.a.a.#.a.#.a.#.a.#.a.a.a.b.a.a.b.a.b.a.e.e.e.e.e.b.e.e.b.e.b.e.b.e.b.e.e.j.e.e.r.e.r.e.#.c.d.q.x.x.x.w.q.x.h.v.z.F.S.H.X#i#p#o.O.N.E.D.v.u.u.v.h.h.x.h.i.g.g.p.h.g.g.d.c.q.f.x.w.C.z.z.g.gQt.c.aQt.b.aQt.a.c.a.a.e.l.e.e.k.j.k.e.e.j.j.e.e.e.e.e.b.b.b.b.c.dQt.x.h.u.v.J.G.B.v.p.w.g.f.#.c.c.a.b.a.e.l.e.e.j.e.j.j.j.j.e.e.e.e.e.j.e.j.b.l.a.a.c.b.c.b.l.l.e.e.j.e.e.k.j.j.k.j.k.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.j.e.e.e.l.e.e.l.b.l.e.e.l.a.a.a.c.#.c.cQt.cQt.d.d.d.f.c.d.c.d.cQt.c",
+".b.b.b.b.b.b.b.b.c.a.c.a.a.a.a.b.a.c.aQt.c.c.#.c.a.a.#.a.b.b.r.b.j.e.e.e.e.e.e.e.b.e.b.r.r.r.#.d.q.i.m.w.w.h.g.x.p.o.J.Q.M.F.B.C.C.D.F.I.G.D.C.u.z.v.u.p.h.h.g.g.f.m.g.h.g.g.fQt.#.dQt.f.g.o.C.G.h.g.f.q.#.c.b.c.c.r.a.r.a.l.e.e.j.e.e.j.j.e.e.j.e.b.e.j.b.b.r.bQt.c.f.f.h.g.h.h.D.z.o.v.o.v.u.hQtQt.c.a.a.a.e.e.e.e.l.e.e.e.b.e.j.j.e.j.e.e.j.e.e.e.b.a.b.a.c.a.e.t.e.j.e.e.e.j.j.j.k.e.j.j.j.j.j.e.j.e.j.e.j.e.j.e.j.e.j.j.e.j.t.e.e.j.e.l.e.e.l.b.a.a.bQt.c.c.c.a.f.d.f.d.i.c.r.b.#.b.#.b.r.r",
+".e.e.l.e.b.l.b.e.l.b.b.b.b.b.a.r.a.r.a.c.b.a.r.a.a.b.a.b.a.b.r.r.b.e.b.b.r.r.b.r.b.r.c.f.f.x.x.h.m.h.p.v.A.o.A.z.E.F.F.F.z.y.v.u.u.v.v.C.z.v.p.p.A.u.h.u.h.g.h.h.f.f.i.g.g.m.g.fQt.iQt.g.g.v.G.z.o.p.iQtQt.cQt.c.c.a.c.a.b.b.l.e.b.j.j.k.e.e.j.e.b.j.e.e.e.r.b.b.c.a.cQt.f.x.m.h.p.v.v.v.v.o.v.v.f.iQt.c.a.b.e.e.b.l.b.e.a.e.l.e.b.l.e.l.e.e.l.e.l.b.a.b.a.a.c.c.l.e.e.j.e.e.e.e.j.j.j.k.j.j.k.j.j.j.j.j.j.j.j.j.e.j.e.j.e.e.e.e.e.l.e.l.a.a.a.a.a.a.a.r.c.c.c.c.c.c.c.a.c.a.cQt.e.b.e.b.e.r.e.e",
+".e.b.e.b.e.e.e.e.b.#.e.a.b.a.e.b.aQt.b.c.a.c.a.r.#.c.a.b.r.c.r.c.c.c.c.a.c.a.c.a.d.g.f.h.h.n.p.o.v.z.K.E.Q.L.W.L.F.J.C.v.u.u.y.p.v.p.u.v.n.h.g.h.g.g.g.g.g.m.x.g.g.f.f.g.p.g.g.gQtQt.d.d.g.h.y.G.y.u.w.iQtQt.c.r.cQt.b.a.a.l.e.e.e.j.b.k.j.j.e.j.e.e.e.j.e.b.r.b.c.c.c.fQt.f.x.x.m.p.h.o.p.v.o.o.g.i.f.d.c.c.b.b.a.b.a.b.a.b.b.a.e.e.e.b.l.b.e.b.e.e.b.a.a.r.a.c.j.l.j.e.j.e.e.e.e.k.e.k.e.k.e.j.e.j.e.j.e.j.e.j.j.e.e.e.j.l.j.l.e.e.e.b.a.r.a.b.#.b.c.aQt.c.c.d.d.f.rQt.r.#.b.r.e.b.e.b.e.e.b.e",
+".r.r.b.r.b.r.b.b.b.b.a.b.a.b.a.b.c.c.c.cQt.c.c.c.c.c.c.c.c.d.f.d.f.q.x.q.g.q.f.x.g.n.p.o.A.D.I.E.T.U#a.8.7.U.P.C.v.u.v.p.p.g.p.p.h.g.w.g.g.f.f.x.iQtQt.s.i.fQtQt.f.f.f.q.i.g.g.hQtQt.c.cQt.s.u.o.C.A.h.sQt.f.c.rQt.c.a.#.b.e.j.l.e.e.j.k.k.b.j.e.e.j.e.e.e.b.r.b.aQt.c.#.d.f.f.f.f.x.x.h.o.v.v.o.u.n.g.f.f.c.c.c.a.c.b.c.a.a.b.b.e.l.e.e.e.e.l.e.l.b.a.a.b.a.c.c.l.e.j.e.j.e.e.e.k.j.k.j.j.k.j.j.j.j.j.j.j.j.j.j.e.l.j.e.e.e.e.e.l.e.a.a.e.a.a.a.a.c.b.c.c.c.c.c.f.d.r.a.b.b.a.r.e.b.b.b.b.b.b.b",
+".b.a.#.b.b.r.r.c.r.l.b.e.b.l.r.e.c.c.c.c.c.cQt.c.cQt.c.r.c.f.d.d.x.f.x.x.x.h.x.h.u.o.z.F.T.W.1#i.1.8#i.X.R.P.T.C.u.u.p.p.h.g.g.g.x.h.g.fQt.f.f.fQt.#.dQtQtQt.#Qt.q.f.f.f.i.g.g.w.i.f.i.c.f.g.n.A.y.y.v.g.s.d.c.c.c.c.c.a.a.e.l.e.e.e.j.e.k.e.e.j.j.b.j.e.b.b.b.b.c.#.cQt.d.d.g.q.d.i.x.w.p.p.v.v.o.v.h.g.q.c.d.d.b.c.a.c.b.a.b.a.e.b.e.a.e.a.e.b.e.e.a.b.a.r.a.c.j.l.e.j.e.e.e.e.k.e.j.j.j.j.j.e.j.j.e.j.e.j.e.j.e.e.e.l.e.t.e.l.b.a.l.b.a.a.b.a.b.c.#.c.c.c.c.c.r.r.c.rQt.b.r.e.a.#.b.#.a.b.a.b",
+".e.b.e.l.b.l.b.e.a.cQt.c.c.c.cQtQtQt.iQtQt.dQt.d.x.x.f.gQtQt.q.#.h.p.n.p.o.o.I.E.Q.Y.W.W.Z.N.E.J.I.Y#a.1.L.N.C.g.g.g.g.f.i.f.s.f.i.#.iQt.c.q.c.c.c.c.a.cQt.#Qt.q.#.q.#.#.cQtQtQt.g.gQt.d.dQt.s.g.n.n.y.o.h.f.d.#.c.a.a.b.l.e.e.j.b.e.e.e.e.e.b.e.b.e.e.e.b.e.b.l.b.b.a.b.#.c.c.d.iQtQt.f.x.m.h.w.o.v.z.o.n.u.p.hQt.c.a.a.l.b.c.d.e.l.e.e.e.e.e.l.a.a.a.a.a.b.b.b.j.e.j.j.j.j.j.j.j.j.j.j.j.j.j.j.k.e.k.j.j.k.j.j.j.j.j.j.e.e.l.b.r.a.a.a.c.r.c.d.#.a.a.a.#.c.c.c.cQt.c.c.cQt.c.c.#.b.e.e.e.b.e.b",
+".b.j.l.b.e.b.b.eQt.a.c.cQt.c.c.d.c.c.c.d.d.d.d.cQt.d.f.f.m.h.p.u.A.C.D.F.E.P.2#c.M.Q.F.B.z.o.z.D.T.O#d.U.R.F.p.f.g.iQtQtQtQtQtQt.cQt.dQt.#.c.c.c.c.#.c.c.#.c.#.d.a.#.c.#.c.iQtQt.iQtQt.c.f.d.f.m.y.o.y.n.p.m.d.d.#.#.a.a.b.e.e.e.b.e.b.e.r.e.b.e.e.e.e.e.e.e.b.e.a.b.b.b.b.c.d.c.c.#.d.f.i.x.g.h.v.o.v.o.o.y.o.u.f.f.c.a.a.c.c.c.e.e.a.e.b.l.b.e.r.a.l.a.b.c.e.a.e.j.j.e.j.e.j.e.j.e.j.e.j.e.j.e.j.k.j.j.j.j.j.j.j.j.j.j.j.e.a.l.a.#.a.a.c.c.c.r.a.#.r.c.c.dQt.fQt.d.#.f.#QtQt.d.a.b.e.b.b.b.e.b",
+".e.b.e.e.b.a.r.b.e.a.r.a.c.cQt.c.#.c.c.d.x.x.s.s.x.i.u.v.C.B.E.K.1.2.X.Y.S.H.Q.Q.o.v.u.p.p.n.o.z.R#o#q#h.F.v.hQtQtQtQtQtQtQt.c.c.c.cQt.c.c.c.c.c.b.b.a.c.c.c.c.#.a.a.#.c.c.c.c.#.i.f.i.d.cQtQt.i.p.u.n.v.p.x.g.d.a.a.b.a.a.e.b.e.e.e.e.e.l.e.e.e.#.e.e.e.e.e.e.e.e.a.a.b.a.r.r.c.c.c.f.d.f.f.h.x.g.h.h.u.v.o.y.z.p.iQt.c.c.c.a.r.l.e.e.e.l.e.e.e.a.a.a.a.a.a.b.b.j.l.e.e.e.e.e.e.e.e.j.e.j.e.e.e.e.e.e.e.e.e.e.e.j.e.e.l.e.a.b.a.a.l.a.a.rQt.c.d.#.d.#Qt.dQt.fQt.iQt.iQt.#.f.#.q.b.r.e.b.e.r.e.r",
+".b.b.r.b.r.r.b.b.#.b.a.bQt.d.d.cQt.d.f.x.h.p.v.C.u.A.C.J.H.P.M.N.T.T.I.z.y.u.v.p.f.f.x.m.w.h.v.z.2#p#i.2.B.h.x.dQtQtQt.c.c.c.c.c.a.c.a.c.b.c.a.a.e.a.b.b.a.#Qt.c.a.a.a.#.a.#.c.cQt.dQt.iQtQt.gQt.g.m.p.h.g.g.s.d.c.c.a.b.a.b.b.e.e.e.e.b.b.e.e.e.e.e.e.e.e.e.e.b.e.e.r.e.a.b.b.b.c.c.cQt.f.f.x.x.f.g.g.m.h.v.v.C.v.n.g.fQt.c.a.l.b.c.a.c.b.c.a.c.l.a.l.a.b.a.e.a.e.e.t.e.t.e.t.e.t.e.l.e.e.e.t.e.e.e.e.e.e.e.e.e.e.e.e.e.a.b.a.a.a.c.#.a.#.cQtQt.f.f.f.g.g.g.f.f.iQt.#.i.dQtQtQt.b.c.b.r.r.e.b.b",
+".c.#.c.cQt.d.f.dQt.d.i.d.dQt.x.f.g.p.v.y.B.Q.M.X.2.2.Q.K.C.u.p.h.p.p.h.g.x.f.q.f.x.q.dQt.f.w.o.B#.#..S.D.hQtQt.cQtQt.#.c.a.b.e.b.b.r.b.a.r.e.b.r.e.e.e.a.#.r.#.c.a.a.b.a.b.c.c.c.#Qt.fQtQt.gQtQt.f.i.g.i.i.g.m.iQt.#.c.a.b.l.b.a.e.e.b.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.a.b.l.b.a.b.b.c.c.d.d.x.f.d.#.g.g.h.p.v.o.z.o.p.xQt.#.a.a.a.b.a.b.a.b.a.a.a.r.a.a.a.r.b.b.e.e.e.e.e.e.e.e.e.e.e.l.e.e.e.e.e.e.e.e.e.b.e.a.e.l.a.r.a.c.c.c.c.#.cQtQtQtQtQt.x.f.h.g.x.m.x.x.f.f.xQtQt.dQt.dQt.d.c.d.f.dQt.#",
+".d.d.f.d.d.q.f.q.m.g.g.g.g.h.h.n.C.z.F.S.Y.N.L.L.G.D.v.p.h.i.fQt.g.f.f.x.d.dQt.#.f.g.q.i.f.p.C.E#..X.z.h.fQt.f.c.b.c.a.b.r.e.e.e.e.l.e.e.e.e.e.e.e.b.e.e.b.c.a.c.a.b.a.c.c.c.a.c.c.iQt.g.iQtQt.d.i.f.i.i.i.g.i.gQt.c.c.c.a.b.e.b.e.e.e.e.a.e.e.e.e.e.e.e.e.e.e.e.b.e.e.e.#.b.b.b.e.a.r.b.c.d.d.dQtQt.d.f.h.g.p.u.o.C.o.p.gQt.c.a.b.c.a.r.a.c.b.c.l.a.l.a.b.a.e.a.e.a.e.a.e.a.e.a.e.a.e.b.a.l.b.l.b.e.b.b.e.b.l.b.b.a.b.c.c.c.c.d.fQtQt.f.g.f.i.i.v.w.w.h.m.g.g.i.g.i.f.f.f.f.g.f.fQt.xQt.d.f.q.f",
+".f.f.g.x.m.g.w.g.u.v.o.o.C.B.C.C.H.F.F.D.y.u.p.g.x.f.f.d.c.c.c.c.c.c.d.#.r.c.d.f.q.f.g.x.u.z.F.R.2.F.u.f.#.b.c.#.a.b.b.e.e.e.b.j.e.e.r.e.a.e.b.e.e.j.e.e.b.e.c.r.e.e.r.b.b.b.b.c.r.d.f.i.g.g.d.cQt.i.i.g.i.i.h.s.c.c.c.c.c.b.a.b.e.b.a.e.b.e.e.e.e.e.e.e.e.e.e.e.e.j.e.e.e.e.l.b.e.e.e.a.bQt.d.d.b.c.d.d.f.x.m.s.o.C.z.v.u.fQt.#.c.c.c.c.c.c.c.c.a.a.a.a.a.a.b.b.e.e.a.b.a.a.e.e.e.a.a.a.b.a.b.e.b.l.b.l.b.a.b.b.c.c.c.c.c.d.dQt.f.f.x.g.p.h.u.h.v.p.m.g.x.g.fQt.g.g.f.i.f.f.i.g.m.g.g.g.w.x.m.s",
+".w.g.w.v.p.n.u.v.B.B.B.F.S.N.H.F.v.v.h.h.x.f.f.d.l.l.e.a.r.#.q.q.d.dQt.f.iQtQtQt.f.x.f.m.h.z.Q.L.E.u.x.c.e.a.e.c.b.e.b.e.e.j.j.e.b.l.e.e.j.e.e.e.j.e.e.j.a.b.c.a.b.e.a.e.a.b.a.b.c.#.f.m.i.fQt.f.c.d.s.i.i.i.i.g.#.c.c.b.a.b.e.b.a.e.e.e.e.e.e.e.e.e.e.b.e.e.e.e.e.e.b.e.b.e.e.b.j.b.e.b.b.c.d.d.r.c.f.d.d.g.x.g.u.C.z.C.o.h.fQt.b.c.a.c.b.c.a.c.l.a.l.a.b.a.b.a.e.e.l.a.e.a.e.e.a.l.b.a.a.a.l.a.a.e.b.b.a.e.b.l.c.c.c.d.d.dQt.f.f.h.g.n.u.A.v.o.g.g.g.f.iQtQt.i.i.h.i.m.i.m.g.m.u.p.v.p.v.u.n.u",
+".C.A.v.h.w.u.z.A.F.M.S.H.z.u.g.f.iQtQt.i.c.c.a.c.e.r.l.b.a.b.b.b.b.a.#.b.c.c.f.q.i.d.h.h.o.I.E.J.x.gQt.cQt.b.#.e.b.j.e.k.j.k.j.k.e.e.b.l.b.e.e.e.b.e.e.#.a.a.#.a.a.a.#.a.a.e.r.a.aQtQtQt.f.x.f.fQt.i.f.s.f.f.g.m.i.c.b.e.b.a.a.r.b.e.e.e.e.e.e.e.e.e.e.e.k.e.e.e.e.e.e.e.e.e.e.e.b.e.l.r.a.b.b.a.c.a.c.c.cQt.d.iQt.p.v.o.o.v.h.i.d.d.c.c.c.c.c.b.a.l.e.e.b.e.e.e.e.e.e.a.a.b.a.c.a.a.c.a.r.a.r.c.c.c.c.c.c.c.c.cQt.c.fQt.f.i.n.u.C.z.C.v.u.h.g.s.m.f.d.qQt.f.x.g.u.p.p.h.h.p.p.u.w.v.u.v.v.y.C.A",
+".C.v.v.v.o.o.z.A.W.Z.Q.B.u.g.m.fQt.iQt.#.c.a.c.a.b.a.b.e.b.a.b.a.l.r.a.bQt.d.d.d.c.g.g.n.v.Q.H.C.gQt.f.c.c.a.b.e.j.j.j.j.k.e.k.j.b.l.e.e.e.b.j.e.l.b.e.b.a.b.c.a.l.a.a.a.a.b.a.e.a.c.#.f.f.g.f.f.iQt.s.f.i.g.g.x.uQt.a.e.e.e.l.a.e.b.e.j.e.j.e.j.e.j.e.k.j.k.e.j.e.e.e.b.e.j.b.e.e.b.e.a.b.b.a.b.r.c.c.c.c.fQt.d.s.g.o.v.A.o.v.hQt.d.c.c.c.a.c.c.l.a.a.l.e.e.e.b.l.e.l.e.a.c.a.b.a.a.b.c.c.c.c.c.a.r.a.a.c.cQt.c.d.d.f.x.g.w.u.o.C.y.y.v.g.h.x.f.x.f.#.d.iQt.x.h.m.h.m.h.h.h.u.h.p.p.v.v.A.v.A.C",
+".o.u.v.o.A.y.C.F.2.Y.F.p.g.f.fQtQtQt.cQt.a.c.r.b.b.e.b.b.a.b.e.b.b.a.#.b.c.c.f.qQt.h.m.h.B.N.J.uQtQt.c.c.#.b.b.l.b.k.b.k.e.k.e.b.e.e.b.l.e.l.e.b.e.e.e.a.a.c.a.a.#.a.a.b.#.b.b.a.#.aQt.f.f.f.f.fQtQt.f.q.g.i.i.m.n.hQt.a.b.b.e.e.e.j.e.e.b.e.j.e.e.e.j.k.k.k.k.b.j.e.j.e.e.e.e.j.e.e.e.b.a.b.b.b.a.cQt.c.cQt.dQtQt.g.h.v.v.A.p.g.d.d.c.c.r.c.c.a.a.a.b.a.r.a.b.b.a.a.a.c.b.c.c.c.c.c.a.c.a.c.c.c.a.a.#.c.c.#QtQt.n.p.n.v.u.v.u.v.p.u.h.g.f.f.f.d.s.f.g.f.f.f.w.h.g.i.g.i.w.h.p.h.v.u.u.u.o.v.o.C",
+".v.v.u.o.v.v.F.R.B.B.y.p.g.fQt.c.#.#.c.a.a.b.e.e.e.e.e.e.e.e.b.e.e.r.a.aQt.d.d.f.f.h.p.o.S.Q.o.g.i.c.c.c.a.e.e.e.j.j.e.k.j.k.j.k.e.l.e.e.e.b.e.l.e.b.e.#.b.c.#.a.a.a.a.a.a.b.a.e.aQt.#.dQt.fQtQt.#Qt.i.f.f.f.x.x.o.p.i.#.c.a.r.e.e.b.e.e.j.e.j.e.j.e.j.e.k.e.k.e.e.b.e.j.e.j.e.e.b.e.#.e.e.b.l.b.c.a.c.c.c.dQt.fQt.g.i.p.v.v.u.h.q.f.dQt.c.c.c.c.a.a.a.b.a.b.b.e.c.#.r.c.c.c.c.d.a.#.#.c.i.fQtQtQtQtQt.g.g.g.w.h.B.D.z.v.o.p.u.p.i.iQtQtQtQt.#.i.f.f.f.s.g.h.g.g.h.x.h.h.g.h.u.p.u.u.v.o.v.v.o.v",
+".p.w.o.y.z.B.F.E.p.p.h.g.f.i.d.c.c.a.a.a.r.e.e.b.e.e.b.e.e.e.e.e.r.a.#.c.c.d.d.f.g.w.p.B.M.F.h.x.c.#Qt.a.b.l.e.j.e.j.e.e.k.b.j.b.e.b.e.b.l.e.e.b.e.#.e.a.a.a.a.c.#.a.a.r.a.#.b.a.a.cQt.i.f.f.#.cQt.#Qt.#.g.f.s.g.p.u.p.i.c.c.b.e.r.b.b.b.b.r.b.b.e.e.e.j.k.e.e.j.j.e.e.b.e.e.b.e.e.e.e.b.l.b.b.b.a.b.c.cQt.d.#.dQtQt.x.m.u.o.v.n.f.qQt.d.f.c.c.r.c.c.c.c.c.c.c.c.c.c.c.c.d.i.dQt.c.dQt.i.f.f.g.w.h.h.u.u.o.o.z.D.z.C.o.u.p.h.f.fQtQtQtQt.gQt.c.c.f.f.x.g.p.h.h.g.x.f.x.g.w.h.u.v.B.C.z.C.A.A.o.A",
+".n.v.v.A.F.H.B.v.g.h.f.f.f.d.c.b.#.a.e.e.e.b.e.j.e.e.j.e.e.b.e.b.e.a.b.#.c.f.x.f.h.w.o.K.R.A.g.q.q.c.c.a.a.e.e.j.e.j.j.e.e.k.j.j.e.l.e.l.e.b.e.l.e.b.b.c.a.#.#.c.a.#.a.a.a.a.b.#.c.qQt.qQtQt.c.a.c.c.c.i.dQt.f.g.p.p.u.hQt.#Qt.e.r.r.b.#.b.b.b.b.e.j.e.j.e.e.j.e.e.e.j.e.j.e.j.e.b.b.e.a.b.a.e.b.aQt.c.c.cQt.d.i.d.f.x.h.h.v.v.v.h.f.q.fQt.c.c.c.a.c.a.c.a.r.c.r.c.d.d.i.d.f.f.qQt.i.f.x.g.g.u.y.v.z.C.z.C.B.C.o.u.p.g.h.f.f.fQt.#Qt.qQtQt.c.#.cQt.f.m.h.h.w.s.m.x.h.h.w.p.v.v.A.B.F.C.B.C.A.v.u",
+".p.u.A.z.F.J.u.g.g.i.f.i.d.c.b.b.l.e.e.e.e.j.e.e.k.e.b.j.e.j.e.j.b.a.#.cQt.d.g.g.h.u.B.H.F.u.h.d.#.c.#.e.b.e.j.j.b.k.e.k.e.e.j.b.e.b.e.e.b.l.e.b.b.l.a.#.a.c.c.q.a.rQt.cQt.a.#.a.c.#.iQt.i.c.a.a.c.cQtQt.d.i.f.f.m.p.h.m.h.fQt.c.r.#.r.a.rQt.b.b.b.j.e.e.e.j.e.j.b.j.e.e.e.e.e.e.e.e.e.r.a.b.b.a.c.b.c.c.c.cQt.d.d.d.g.x.w.u.v.z.x.f.f.q.f.d.dQt.c.#.c.c.c.d.c.dQt.fQtQt.x.h.x.h.x.s.g.n.v.C.z.D.B.B.D.A.v.p.h.g.iQt.fQtQt.dQt.dQt.cQt.c.#Qt.c.#.g.f.h.n.p.v.h.x.h.g.w.u.y.z.z.J.Q.I.J.D.A.A.u.n",
+".y.A.I.H.J.p.g.wQtQtQt.#.c.a.b.b.e.b.j.e.k.e.k.k.j.j.j.j.e.j.b.e.l.r.aQt.c.g.g.x.h.v.F.S.C.p.x.dQt.#.a.l.l.b.e.e.e.k.e.e.j.j.j.j.e.l.b.l.e.e.e.l.r.b.#.c.a.cQt.#.#.c.qQt.cQt.cQt.c.iQt.dQt.c.a.#.c.c.c.cQt.dQt.g.x.m.h.h.p.s.f.i.a.r.b.#.b.r.b.r.e.b.e.j.e.j.e.e.j.e.e.j.b.e.j.b.b.e.b.l.b.a.b.r.a.c.cQt.c.d.fQt.#.d.q.h.g.u.o.B.g.h.x.g.q.i.dQtQtQt.d.d.d.d.d.d.d.fQt.g.f.h.f.x.h.h.n.C.I.F.B.z.v.u.u.p.h.i.x.#.iQt.qQt.d.f.d.d.c.c.c.cQt.fQt.g.f.m.h.n.u.u.w.m.w.h.h.v.J.F.H.H.N.M.E.E.F.B.o.n",
+".J.K.H.G.w.i.fQt.cQt.a.c.b.a.b.e.e.e.e.e.e.j.e.b.k.e.k.j.e.e.e.j.#.a.bQt.d.g.x.w.z.S.z.m.i.f.gQt.q.a.#.b.e.e.e.e.b.e.b.e.e.b.e.e.e.e.e.b.b.a.r.a.#.q.c.q.c.#Qt.#Qt.iQtQt.iQt.dQt.iQt.q.#.c.c.c.c.a.#.cQt.d.#.fQt.f.qQt.d.f.g.u.y.gQtQt.dQt.b.r.e.e.e.j.e.e.e.b.j.e.e.j.e.e.e.b.e.a.a.a.b.e.b.b.b.c.a.c.c.cQt.d.dQtQt.g.g.p.n.v.D.o.p.i.f.#.d.f.x.c.#.f.#Qt.g.f.h.q.g.i.g.v.v.o.C.F.H.H.F.B.v.u.v.f.g.f.g.i.f.fQtQtQt.c.#Qt.c.#.c.#.d.#Qt.dQt.f.f.w.w.iQt.f.m.v.o.v.v.v.u.u.u.u.u.G.A.J.z.E.E.K.I",
+".H.F.J.u.h.fQt.i.a.c.a.a.a.e.e.e.e.e.j.e.e.e.j.e.0.k.j.k.j.e.b.e.b.b.#.c.q.f.m.u.Q.T.v.m.f.#Qt.d.a.a.a.l.b.a.b.e.e.e.l.e.l.e.l.e.b.l.b.a.e.b.a.r.#.#.c.q.c.iQt.i.i.s.i.g.f.g.f.iQt.iQtQt.cQt.c.c.c.#.c.cQt.f.f.d.s.g.iQt.f.i.g.u.f.h.f.i.d.c.b.#.l.b.l.e.e.j.e.e.j.e.e.r.e.b.a.b.a.a.#.a.b.a.b.b.cQt.c.c.c.d.#.d.i.d.f.x.h.u.o.A.A.u.xQt.i.f.x.s.g.i.f.f.f.f.i.g.w.h.u.o.D.J.I.F.C.D.B.C.v.h.h.hQt.qQtQt.iQtQtQtQt.#Qt.c.c.#.cQt.c.#Qt.d.fQt.g.f.i.i.iQt.i.h.o.v.h.g.g.w.h.h.w.h.n.u.y.C.G.H.R.W",
+".K.z.p.gQt.f.#.c.a.a.c.r.b.e.e.e.k.k.j.k.k.k.k.k.k.k.k.j.e.e.e.e.#.b.a.a.d.g.h.n.R.E.p.i.sQt.i.d.a.#.a.b.l.e.l.e.b.l.b.e.b.e.b.e.l.e.l.e.#.a.a.c.q.#.q.c.iQt.i.f.g.s.f.s.g.i.g.d.i.#QtQt.c.c.d.f.aQt.c.q.dQt.f.f.iQt.c.f.c.d.i.h.g.g.m.f.f.#.dQt.e.a.e.r.e.e.e.e.b.e.e.e.a.b.b.a.a.a.a.c.#.b.a.bQt.c.c.d.i.d.dQt.c.#.g.f.m.p.o.v.z.u.g.m.x.x.w.v.h.g.g.h.u.u.o.v.B.D.I.I.D.I.D.C.o.u.p.h.g.g.f.fQt.qQt.fQt.d.#.d.#.c.c.c.#.c.c.c.cQtQtQt.d.f.f.fQtQtQtQt.g.g.u.p.i.f.i.f.i.g.g.h.m.p.w.n.A.C.H.Q",
+".u.h.gQt.fQt.c.a.c.c.a.a.e.e.e.k.k.j.k.j.j.j.j.j.j.k.j.k.j.b.j.e.c.a.bQtQtQt.h.p.S.H.u.g.s.d.#Qt.a.a.a.b.l.r.e.j.e.e.e.e.l.e.l.b.e.l.b.a.c.#.c.cQt.c.#.iQt.g.f.g.i.i.g.s.f.gQt.d.q.i.#.c.c.c.f.d.c.c.fQt.fQt.g.f.dQtQt.b.r.d.f.g.w.p.h.w.g.g.fQt.c.#.a.b.a.j.b.e.e.e.e.a.r.a.c.c.c.c.c.c.c.c.r.cQt.d.#.d.d.f.f.q.i.dQt.f.h.g.v.v.z.v.u.h.g.p.v.o.u.v.u.A.C.D.B.J.z.F.z.z.z.v.u.p.p.m.i.i.f.fQt.i.d.#.i.c.c.#.c.cQt.c.r.c.a.c.c.c.#.cQt.f.f.i.f.fQt.dQt.f.f.x.x.x.iQt.i.f.i.f.g.i.f.s.g.g.h.u.y.y",
+".i.fQtQtQt.q.a.l.b.#.e.e.b.e.k.j.j.k.j.k.k.j.k.j.k.j.e.e.e.e.b.bQt.cQt.c.d.f.h.w.B.M.z.h.fQt.i.d.#.a.a.e.l.e.e.j.b.l.b.e.e.b.e.l.l.#.a.a.a.#.c.q.#QtQt.i.f.x.f.f.s.g.i.g.f.iQt.fQtQt.#.c.c.c.d.c.qQt.#.i.d.g.f.g.cQt.r.c.#.d.d.x.h.h.p.h.p.g.g.i.c.c.a.b.b.b.e.j.e.e.a.b.a.aQt.c.qQt.c.c.#.fQt.d.d.d.f.f.f.q.g.f.dQt.g.x.m.h.h.o.z.y.A.u.o.v.v.z.B.z.B.D.z.z.y.C.o.u.p.p.g.m.i.g.f.qQt.iQt.iQt.d.c.c.c.c.c.c.c.c.a.c.a.c.a.c.a.a.fQt.i.d.i.d.fQt.d.f.fQt.f.m.fQt.#QtQtQtQtQtQt.fQt.#Qt.s.g.g.h.i",
+".dQt.c.c.a.a.a.e.a.b.b.e.e.k.e.k.j.j.j.j.j.j.k.j.k.e.j.b.e.b.r.r.r.c.c.#.f.f.w.v.T.P.z.h.f.dQt.c.a.a.a.l.e.e.e.e.e.e.l.b.e.l.e.b.l.a.a.r.#.c.q.d.#QtQt.iQt.f.g.f.g.i.s.g.i.g.dQt.iQtQt.#QtQt.f.dQt.#Qt.d.iQt.g.f.g.d.cQt.c.d.g.i.w.g.g.g.g.p.w.h.i.d.c.a.b.e.e.e.b.#.e.bQt.c.#.cQtQtQt.g.dQt.d.d.g.f.f.q.f.x.x.x.f.g.x.g.h.h.v.v.J.F.F.J.C.z.B.D.B.D.G.C.A.y.u.u.h.s.i.sQtQt.iQtQt.iQt.dQt.d.c.d.#.c.a.c.#.c.b.a.c.a.r.#.r.aQt.c.#Qt.c.f.fQtQt.f.q.d.f.g.f.f.fQt.c.#.cQtQtQt.f.i.f.gQtQtQt.xQtQt",
+".c.c.c.a.a.e.l.b.e.e.e.b.e.j.k.j.k.k.j.k.k.j.k.j.k.e.e.j.b.b.b.c.cQt.c.fQt.x.n.z.W.Z.C.g.fQt.i.c.a.#.a.e.e.e.b.j.e.b.e.e.l.b.e.e.r.#.r.a.#.#QtQt.i.iQtQt.g.f.f.g.i.g.i.g.f.s.f.gQt.#QtQt.d.#.fQtQt.c.i.c.i.q.g.f.g.f.f.d.f.f.g.m.x.x.g.x.m.g.h.u.f.d.f.c.b.b.b.b.a.b.aQt.a.c.f.dQt.iQtQtQt.dQtQt.q.f.x.f.h.x.x.s.p.s.g.w.p.o.v.o.B.T.Q.F.F.D.y.A.u.u.v.u.v.u.u.p.m.i.i.i.f.f.d.dQt.#.cQt.d.d.d.d.b.b.b.b.b.b.a.b.b.b.a.b.a.b.b.bQt.c.iQt.d.qQt.f.dQt.f.f.x.hQt.c.q.cQt.dQt.f.f.f.f.f.fQtQt.c.a.c",
+".a.b.b.b.l.b.e.l.e.e.e.e.j.e.j.k.j.j.j.k.e.k.e.k.e.j.e.e.b.b.b.r.f.c.dQt.d.w.o.K#h.Z.v.h.fQt.d.c.r.a.a.b.l.e.l.e.e.l.j.e.j.e.l.b.a.r.#.a.q.#.i.#.iQtQt.g.f.g.f.f.s.i.g.i.i.f.gQtQt.iQt.q.fQt.d.f.c.q.c.f.d.i.f.g.h.f.g.f.f.h.s.g.x.p.g.h.x.g.g.g.g.gQt.c.b.e.e.e.a.r.c.c.c.d.c.f.i.i.f.f.f.f.g.f.x.f.h.x.s.h.p.h.x.p.p.u.u.v.A.o.E.F.H.I.A.z.u.u.p.u.v.h.p.g.w.h.i.s.g.x.x.s.q.q.d.#.d.c.d.d.d.d.a.b.b.l.e.l.e.r.l.e.e.e.b.#.b.#.cQt.#.qQtQt.f.f.f.f.x.f.x.f.d.a.c.cQt.d.f.gQt.f.h.g.i.f.c.c.b.e",
+".e.b.e.e.b.e.e.e.b.e.e.j.k.k.k.e.j.j.j.j.k.j.e.e.e.e.e.e.b.a.b.a.c.a.f.g.h.v.B#i#h.K.uQt.iQtQt.q.a.a.l.a.e.e.e.b.l.b.l.l.b.l.e.l.l.l.a.a.#.c.#Qt.q.iQtQt.q.s.q.s.i.s.i.g.i.s.f.f.q.c.c.c.i.cQt.cQt.iQt.#.c.f.g.x.w.w.h.n.p.v.m.h.o.v.u.u.y.s.p.x.u.v.u.m.f.d.f.#.d.c.d.f.d.g.f.i.s.f.i.q.f.f.i.g.s.h.h.p.p.u.v.y.z.C.o.C.o.o.z.A.u.v.p.u.h.h.h.w.i.s.x.s.g.m.i.i.iQt.qQt.#Qt.fQt.b.#.b.#.a.r.b.b.e.a.e.b.b.e.b.l.e.l.b.a.a.a.c.a.d.#.d.i.f.f.fQt.f.f.i.f.xQtQt.c.a.#.a.cQt.f.f.f.gQtQtQt.#.a.#.a",
+".b.l.b.e.b.l.b.e.e.j.e.e.k.e.k.k.j.k.j.k.e.j.e.e.b.e.e.b.a.b.#.bQt.#.dQt.w.v.F#h.M.J.h.qQtQtQt.f.l.a.a.l.e.l.e.e.e.l.b.e.l.e.l.b.l.b.a.#.c.q.cQt.i.q.qQt.xQt.sQt.s.i.sQt.i.f.g.f.q.c.q.c.f.cQt.c.f.c.#QtQt.q.q.p.m.u.m.w.m.p.w.p.o.v.v.h.n.n.h.p.p.p.w.m.f.i.d.dQt.f.dQt.i.f.i.i.m.g.g.g.h.h.w.u.u.u.v.A.D.B.E.G.z.z.y.v.p.p.p.p.h.w.g.g.h.m.g.gQt.f.i.g.i.g.i.g.#.iQtQt.q.d.#.d.#.b.a.b.a.b.l.a.b.b.b.e.e.e.e.b.e.l.e.a.a.c.b.cQt.cQtQt.dQt.f.f.i.f.f.s.fQt.iQt.a.a.a.#.dQt.f.f.fQtQt.#.c.a.b.a",
+".e.e.e.e.b.e.e.e.e.j.e.e.k.j.k.e.k.j.j.j.k.j.e.e.e.b.e.l.r.b.b.c.iQt.g.x.w.z.F.2.B.v.h.i.iQtQt.d.r.a.l.a.a.e.b.a.l.e.l.l.b.l.e.l.a.r.a.#.#.#.qQtQtQt.i.q.f.sQt.i.i.f.q.g.q.g.f.fQt.i.dQt.i.d.d.f.c.f.f.i.g.x.w.w.v.o.o.v.v.n.o.y.o.v.v.o.v.p.n.m.u.v.A.v.v.w.g.f.qQt.i.i.i.m.g.p.v.o.v.v.o.C.C.B.F.F.z.E.P.N.R.P.u.v.u.h.m.g.m.x.g.f.f.g.f.fQt.gQt.g.f.g.f.f.g.f.#.c.q.c.cQt.c.c.#.b.#.b.#.b.b.r.l.e.e.e.b.b.e.e.b.l.e.a.b.a.a.b.#.cQt.dQtQt.f.f.m.g.f.f.i.iQt.c.c.a.c.c.iQt.f.g.fQtQt.c.c.a.a.a",
+".b.e.r.l.e.e.b.e.e.e.k.e.k.e.k.k.e.j.j.k.j.j.e.e.e.l.e.b.b.a.b.c.#.i.f.h.p.F.Q.P.C.p.g.iQtQt.cQt.r.c.a.l.a.a.e.e.b.a.b.a.e.a.b.a.#.aQt.#.#.d.#Qt.i.q.f.i.iQt.s.s.f.q.g.i.g.f.g.f.iQtQt.fQt.f.d.d.f.f.i.h.h.w.y.A.z.z.B.A.A.A.o.v.z.B.K.F.I.z.C.A.C.z.o.z.z.o.v.p.i.h.p.h.A.v.z.B.I.z.F.F.z.I.F.E.H.F.B.F.Q.Q.Q.I.g.g.s.i.f.g.f.fQt.qQt.#.#.i.#.d.#QtQtQt.s.gQtQt.c.q.cQt.c.c.#.c.b.a.b.a.b.a.b.a.e.e.b.l.e.b.l.b.l.e.e.#.a.a.r.a.c.c.c.iQt.q.i.f.i.g.f.sQtQtQt.#.#.c.#.cQt.d.fQt.fQtQt.c.c.a.a.b",
+".e.e.e.e.b.e.e.e.k.k.j.k.k.k.j.j.j.k.j.j.k.j.e.e.b.e.b.a.e.aQt.a.dQtQt.h.h.Q.Z.H.u.h.h.iQt.#Qt.#.c.#.a.a.b.a.b.a.a.b.a.a.#.a.a.a.c.a.#.c.#.iQt.d.qQt.i.i.i.s.i.i.g.s.f.f.f.g.f.g.#.d.i.dQt.q.g.f.f.f.h.h.v.A.B.F.P.L.Z.L.T.E.E.K.T.P.Z.L.N.P.L.P.P.T.E.T.E.I.I.I.J.B.J.J.B.E.I.T.B.I.I.D.F.I.F.B.o.v.v.o.v.u.u.h.sQt.fQtQt.dQt.f.c.c.cQt.c.c.cQt.cQtQt.fQt.dQtQt.#.c.q.c.c.c.r.c.#.e.r.e.r.e.e.e.r.e.e.b.e.e.e.e.e.l.e.a.b.c.a.c.c.c.#.qQt.d.fQt.x.g.f.fQtQtQt.c.#.c.c.c.#.i.dQtQtQtQt.c.r.a.e.a",
+".e.e.b.b.e.e.e.e.k.e.k.j.j.j.j.k.j.0.j.k.e.j.e.e.e.e.e.a.b.b.cQt.#.d.g.g.o.F.Z.I.h.h.g.iQtQtQtQt.c.#.c.c.a.a.b.b.a.a.a.b.c.aQt.a.#Qt.#.f.#.d.#.iQt.i.s.i.g.i.x.s.i.f.s.f.g.f.g.qQt.i.dQt.d.fQt.xQt.m.h.A.B.Q.Y.W.1#c#i#c.1.X.X.Y.R.X.R.L.R.N.V.1.W.Z.P.S.T.T.P.L.Q.H.E.E.J.K.J.J.A.v.C.A.v.v.v.v.g.i.m.i.m.i.g.f.#QtQt.f.cQt.a.c.a.#.a.a.a.#.a.a.c.c.c.cQt.cQt.c.cQt.c.c.#.b.r.b.#.b.e.a.e.a.r.e.l.e.a.e.b.e.b.l.b.e.e.a.a.#.c.b.#.c.cQt.dQt.f.f.i.f.q.fQtQtQt.cQt.c.#.c.c.cQtQtQtQtQt.c.c.a.a.a",
+".e.e.l.e.e.e.e.e.j.k.j.k.k.j.k.e.j.j.k.j.k.j.e.e.e.r.e.b.#.b.a.c.c.g.f.w.u.I.Z.B.g.m.g.i.f.q.#.#.#.c.c.c.c.b.a.r.a.b.a.a.#.b.a.aQt.#.c.#Qt.i.f.f.f.g.f.g.g.g.m.g.g.s.f.g.f.g.f.iQt.f.g.d.i.q.f.g.m.u.z.F.M.L.2.U.N.2.N.N.Q.H.E.F.F.E.F.F.E.H.Q.M.I.B.B.z.C.z.B.F.F.F.B.o.A.o.u.v.h.p.w.g.h.h.h.x.g.f.f.g.f.g.f.i.d.dQt.d.d.c.rQt.c.c.b.b.b.cQt.b.a.r.a.a.a.a.a.aQt.r.#.a.r.c.r.r.e.b.l.b.e.e.e.l.r.e.e.e.e.b.e.e.l.e.l.b.a.r.a.c.c.c.iQt.f.f.fQt.f.f.f.gQtQt.iQt.#.c.c.c.#QtQt.cQtQt.i.c.c.l.b.l",
+".e.b.e.e.e.e.e.e.e.k.j.j.j.k.e.e.j.k.j.j.k.e.e.e.e.e.b.a.e.b.cQtQt.f.x.n.o.J.P.z.x.g.g.iQt.q.#.#Qt.c.#.a.c.a.b.b.a.a.a.a.a.c.#.c.#.c.#.i.cQt.f.g.i.i.m.g.s.g.m.g.x.m.f.g.f.g.g.q.f.g.f.g.f.g.x.x.p.v.J.Q.N.X.X.X.S.H.K.C.J.B.z.z.o.y.z.C.J.D.A.C.v.u.o.u.v.p.p.A.C.o.v.v.h.g.h.f.p.h.x.h.x.f.i.f.f.g.q.q.f.q.d.d.fQtQt.c.d.r.c.b.a.cQt.bQt.c.cQt.a.b.a.b.r.b.r.aQt.cQt.cQt.c.r.a.r.l.r.e.b.l.b.e.b.e.#.b.e.a.e.r.e.l.e.#.a.c.b.a.c.#.dQt.dQt.f.f.f.s.f.qQtQtQtQt.d.f.#.c.c.c.c.#QtQtQt.#.c.a.a.b",
+".e.t.j.j.j.j.0.j.k.j.j.k.j.j.k.j.k.j.k.j.j.k.j.e.e.e.b.e.e.b.#.b.f.g.f.f.m.B.H.I.A.g.xQtQt.cQtQt.a.r.r.a.a.a.a.aQt.cQt.r.c.c.c.cQtQtQt.d.i.f.f.x.g.w.g.g.m.i.g.i.i.s.s.x.m.h.m.m.i.q.i.s.i.m.u.w.C.D.H.P.R.P.K.D.A.o.A.z.o.v.v.v.n.u.o.o.B.o.o.p.m.h.n.h.v.h.w.h.o.n.u.f.x.x.fQt.dQt.fQt.d.i.q.d.d.d.c.f.c.d.c.d.#Qt.#Qt.c.c.c.b.r.a.b.a.b.a.b.b.aQt.c.c.c.a.c.c.#.a.#.a.#.a.a.#.a.a.a.#.l.e.l.l.r.e.b.e.e.e.e.e.l.b.e.e.e.a.#.a.#.q.#QtQt.xQtQt.#.c.#.cQt.iQtQt.q.c.cQt.c.#.c.cQt.#.#.c.r.c.l.a",
+".l.j.e.j.j.k.k.k.j.j.j.j.e.k.e.k.j.j.k.e.k.e.j.k.e.e.e.j.b.c.b.rQt.d.d.g.w.B.Q.N.u.g.iQtQt.#QtQt.r.a.a.#.#.c.q.c.c.a.c.a.c.aQt.c.#.c.qQt.f.f.f.h.h.g.g.m.g.g.h.w.s.w.u.n.h.n.h.h.g.u.p.n.u.v.o.C.B.J.B.B.B.D.z.v.n.u.v.h.v.h.m.h.p.w.p.v.o.o.u.p.g.g.m.x.g.h.g.h.v.u.m.f.q.g.d.iQt.dQt.fQt.dQt.i.c.f.d.d.d.f.d.f.#Qt.#.c.c.c.#.c.b.a.b.#.b.#.b.#.c.cQt.cQt.c.a.c.b.a.a.#.l.a.b.a.b.a.b.a.l.e.#.e.b.l.r.l.r.e.b.e.l.e.l.l.e.a.b.a.#.#.#.iQtQt.xQt.q.#.cQtQtQtQtQt.dQt.c.#Qt.c.#.c.qQt.a.#.c.c.a.a",
+".l.l.e.j.j.j.k.j.k.j.j.k.j.j.k.j.j.j.j.k.j.k.j.k.e.k.e.e.e.r.r.r.i.c.f.f.w.D.M.U.v.h.fQtQt.cQt.d.r.a.rQt.#.c.#.c.#.c.#.a.#.a.a.aQt.#.cQt.g.f.h.i.p.u.p.h.h.w.n.u.h.v.A.C.B.B.A.o.C.D.A.C.C.G.B.J.z.C.y.v.u.p.h.g.m.g.x.m.g.g.g.h.i.g.g.w.h.p.w.g.g.f.f.i.g.f.f.f.p.h.i.f.g.dQt.#.d.dQt.d.dQt.d.dQtQt.c.i.#Qt.cQt.#Qt.#.iQt.f.c.c.#.a.a.a.a.a.a.a.a.c.c.c.a.a.r.a.a.#.l.a.r.a.a.#.a.#.a.#.e.b.l.e.#.e.b.e.e.e.b.e.b.l.e.e.b.a.a.a.#.#.#QtQtQtQtQt.#.c.q.#QtQtQtQt.#QtQt.c.c.c.dQt.#Qt.#.c.r.c.l.a",
+".l.b.l.e.j.j.j.j.j.k.e.k.e.k.e.j.k.j.j.j.e.j.j.j.b.e.j.e.b.r.bQt.c.c.i.x.o.E.L#h.o.p.g.i.iQtQtQtQt.#QtQtQt.iQt.i.c.c.c.c.c.cQt.c.#QtQt.i.f.g.g.g.u.h.v.h.v.v.v.v.A.D.B.E.E.F.I.I.B.B.D.B.D.I.G.E.u.v.u.w.w.i.g.f.g.f.g.f.f.g.fQt.f.g.f.i.x.m.x.g.f.f.gQt.f.iQt.i.q.x.i.i.#Qt.i.cQt.fQt.d.i.d.q.d.cQt.cQt.d.fQt.d.iQt.i.c.#.cQtQt.cQt.cQt.cQt.c.#.a.cQt.cQt.c.#.c.l.e.#.a.b.a.b.a.l.a.b.a.l.l.b.l.b.e.a.b.b.a.e.b.l.b.e.l.e.a.a.a.#.a.#.#Qt.iQtQt.#.#.c.#.fQtQt.i.#Qt.c.c.#.c.#.#Qt.#.#.c.#.c.a.a",
+".a.a.e.e.e.e.e.j.j.j.b.j.k.j.k.j.e.k.j.k.j.k.j.e.k.e.e.e.e.rQt.cQt.i.g.s.A.N.1.2.v.u.g.sQtQt.fQtQt.iQtQtQt.f.d.f.d.i.d.i.d.dQt.f.c.#.i.i.m.h.p.u.u.y.v.A.o.z.B.A.F.I.I.F.I.B.o.v.A.u.y.v.A.v.A.v.h.h.w.g.f.gQt.iQt.#.iQt.iQt.q.dQtQt.iQt.g.f.f.s.f.f.f.iQtQt.c.qQt.f.x.f.sQtQt.c.i.cQt.c.c.c.c.c.#.c.#Qt.#.#.#.qQt.qQtQt.iQt.f.d.#.c.#.c.c.#.c.#.cQt.c.c.c.b.c.c.b.l.e.a.#.a.a.#.a.#.a.a.#.e.b.l.r.e.b.e.a.b.b.e.l.l.e.l.e.a.r.a.a.r.#.#.#QtQtQt.c.#.#.d.#QtQtQt.d.#.c.c.c.cQt.cQt.#.#.#.a.c.l.a",
+".a.l.a.b.l.j.j.e.k.j.j.j.e.k.e.j.j.j.j.j.j.e.k.j.e.e.j.b.b.b.c.#.#.f.h.w.z.R.M.F.o.p.g.f.qQt.fQtQtQt.q.f.f.f.g.f.iQtQtQtQt.f.i.fQt.i.x.g.p.u.o.C.C.D.J.I.F.E.E.J.B.z.z.o.v.u.h.h.i.i.m.g.g.m.g.g.w.g.gQt.i.d.#.dQt.qQt.#.c.#Qt.c.iQt.d.#.#.f.i.x.g.g.fQt.d.q.#.c.iQt.g.i.s.i.g.f.c.c.c.c.c.cQt.c.cQtQt.c.#.f.cQt.#QtQt.iQtQtQt.#.#.#.#.#.#.#.#.#.c.c.cQt.c.cQt.c.e.l.b.a.r.b.a.b.a.l.#.l.#.l.e.l.b.b.a.b.b.e.l.b.l.b.l.e.b.a.a.a.l.a.c.#Qt.#.d.#.#Qt.#QtQtQtQtQt.cQtQt.c.#.cQt.#Qt.qQt.c.#.c.a.a",
+".a.a.l.a.e.e.e.j.k.j.e.j.k.j.j.k.j.k.j.j.k.j.j.j.e.e.e.e.bQt.rQtQt.g.s.A.I.P.H.B.o.p.g.sQtQt.iQtQtQt.i.f.s.x.i.x.s.s.p.s.p.s.s.s.g.g.w.p.o.D.J.z.E.M.P.Q.H.Q.F.B.v.h.h.x.w.f.gQt.g.f.g.f.g.f.f.i.i.f.i.c.c.c.f.qQt.d.fQt.fQt.c.c.d.i.dQtQt.f.x.p.g.h.x.gQtQt.c.q.d.f.x.i.m.g.g.fQt.cQt.c.c.a.c.a.#.#.#.q.#.#.#.qQt.i.#QtQt.iQt.fQtQtQtQt.#.#.#.#Qt.c.c.c.cQt.c.c.b.a.l.#.l.a.#.a.#.a.a.#.a.e.b.l.b.l.b.e.#.e.r.e.l.e.e.l.e.a.a.b.a.a.a.a.c.c.q.c.#.c.#.i.cQt.iQtQtQtQt.#.d.i.cQt.i.#Qt.#.#.a.a.l",
+".l.a.b.a.e.e.e.e.e.j.k.e.j.j.j.j.j.e.k.e.k.e.k.j.e.j.e.b.b.r.f.c.h.w.w.I.P.Q.F.B.u.g.fQtQtQtQtQtQtQt.f.g.g.x.w.g.n.n.p.w.p.h.w.h.m.w.h.o.B.z.E.I.N.L.N.E.F.J.z.v.w.m.x.m.xQtQt.q.q.f.fQt.f.iQtQt.dQt.i.cQt.d.f.i.i.d.#.d.#.d.dQt.f.dQt.c.dQt.f.s.g.w.g.f.dQt.qQt.f.f.i.i.h.h.w.h.c.c.cQt.cQt.r.a.d.q.d.#.d.q.d.#.#Qt.q.iQtQtQtQt.#.i.#Qt.iQt.iQt.cQt.c.q.c.c.c.c.l.e.e.a.a.#.l.e.a.l.#.e.#.l.l.a.b.b.b.b.e.b.e.r.l.b.e.l.e.a.a.a.b.a.a.#.a.#.c.c.c.#.#QtQtQtQtQtQt.cQt.cQt.#.#.cQtQt.#Qt.#.c.a.a",
+".b.a.a.b.a.a.b.a.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.l.a.a.cQt.#.f.h.w.D.E.S.J.z.C.o.u.h.g.m.h.h.h.p.h.g.m.h.v.o.B.B.B.F.F.D.E.F.Q.S.N.S.H.E.H.E.F.F.B.z.A.v.p.w.g.g.i.dQt.fQt.d.d.cQt.c.d.d.d.d.f.dQt.dQt.dQt.fQt.a.#Qt.#Qt.#.#.#.cQt.c.iQt.fQt.iQt.f.s.x.m.f.q.d.f.g.f.g.g.w.h.h.q.g.d.c.cQtQt.c.#.c.c.#.c.c.#.c.q.c.#.c.i.c.q.cQtQt.iQt.#.#Qt.c.#.a.a.#.a.#.b.l.#.l.b.b.e.e.e.b.e.r.e.#.e.r.e.b.l.e.b.a.b.a.b.a.e.l.l.b.e.e.b.l.a.a.a.r.a.c.cQt.#Qt.qQtQtQtQtQtQtQt.iQtQtQt.fQt.sQtQt.#.c.l.a.e",
+".a.r.a.a.b.a.a.b.e.e.e.e.e.e.e.e.r.e.e.e.e.e.e.b.b.eQt.aQtQt.fQt.x.p.I.E.F.z.A.D.G.o.u.h.g.f.h.g.h.g.g.u.u.y.D.F.F.Q.H.I.F.F.Q.M.L.L.E.H.B.F.z.D.A.o.o.u.w.g.m.x.i.i.d.i.d.i.d.i.c.aQt.c.f.d.f.d.dQt.f.d.i.dQt.d.#QtQt.#.#.c.#.c.c.cQt.c.dQt.d.f.g.i.g.g.g.x.g.f.f.g.f.m.h.u.v.hQtQtQtQt.d.d.i.#Qt.c.#.cQt.#.c.c.#.c.i.c.#.c.#.c.q.#.#.#.i.c.i.#.#.a.#.a.#.a.a.#.l.#.e.b.b.e.b.e.b.a.b.b.b.a.b.b.e.r.l.b.e.b.l.b.l.b.e.e.l.e.l.e.a.b.a.a.#.a.c.cQt.#QtQt.#QtQt.i.qQt.iQt.s.f.i.i.gQtQtQt.#.c.a.a",
+".a.a.a.a.a.a.a.a.e.e.e.e.e.e.l.e.l.e.l.e.e.l.e.l.a.a.a.c.c.d.i.d.f.n.I.I.G.y.v.F.B.C.u.g.m.f.f.f.f.h.h.h.u.A.I.P.N.S.E.I.D.B.I.Q.S.Q.E.J.D.C.A.v.v.h.u.g.h.f.f.fQtQtQt.dQt.dQt.d.c.c.cQt.dQtQt.f.iQtQtQtQtQt.fQt.c.#.d.q.d.i.#.c.q.c.qQt.iQt.f.f.i.m.h.n.p.h.h.m.g.g.w.p.v.v.y.o.f.g.f.fQt.d.dQt.c.#.c.#.c.c.#.c.c.#.c.#.c.#.f.#.d.c.i.d.#Qt.#Qt.a.#.rQt.#.q.a.#.#.a.#.a.b.r.b.b.#.a.#.a.a.r.a.#.b.b.a.#.a.r.a.b.l.b.l.e.l.e.e.l.a.a.a.c.a.c.c.c.#Qt.#Qt.iQtQt.q.f.iQtQtQt.i.x.i.fQtQtQt.c.c.c.c",
+".a.a.a.a.a.b.a.a.a.a.a.e.l.e.e.e.a.b.#.a.a.a.a.a.a.aQt.cQt.c.d.#.g.o.E.E.B.u.o.D.B.C.n.g.i.i.i.i.p.h.p.o.D.I.P.X.M.Q.I.I.D.J.I.I.K.F.F.A.z.v.v.u.g.w.g.h.i.f.q.dQtQt.f.#.fQt.fQtQt.d.i.d.i.d.g.d.f.g.f.f.gQtQt.gQt.iQt.iQtQt.f.iQtQtQt.dQt.f.f.g.h.p.u.v.v.v.h.h.h.w.p.p.u.A.y.y.w.g.f.f.i.#.c.c.c.#.cQt.#.c.#Qt.#.c.cQt.#.c.c.c.q.#.c.i.#QtQtQt.q.#.c.#.q.c.q.q.c.aQt.a.#.c.cQt.a.r.a.#.#.a.b.a.#.a.#.b.b.a.b.a.b.e.l.b.e.l.b.e.a.r.a.b.c.r.c.c.#Qt.qQtQtQtQtQtQt.q.f.q.f.i.s.f.i.iQtQt.#.c.#.c",
+".a.a.a.a.l.a.l.a.l.#.l.l.e.l.a.a.l.a.a.a.a.#.a.#.c.c.c.c.c.c.i.d.g.A.E.F.C.p.v.v.D.z.v.w.g.m.i.g.g.p.n.D.E.R.X.2.K.I.G.D.D.I.F.F.F.z.J.C.u.h.n.h.f.m.x.g.gQt.cQtQtQtQt.dQt.dQt.d.#Qt.#QtQt.g.f.f.f.f.g.f.f.f.fQtQt.i.f.i.s.f.xQt.f.f.f.f.g.x.g.x.u.u.o.y.v.v.v.h.u.h.p.w.u.u.v.u.o.g.f.g.f.d.a.cQt.c.#.c.c.#.c.c.#.c.#.c.c.#.c.#.cQt.#Qt.c.i.#.cQtQt.qQt.iQt.iQt.#.#.rQt.aQt.a.cQt.c.c.a.c.#.c.#.a.#.a.a.#.c.a.c.e.b.l.e.l.e.l.e.a.a.a.c.a.c.a.cQt.#QtQt.#Qt.i.i.iQtQtQtQt.i.x.i.g.x.i.fQtQt.c.a",
+".r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.a.a.a.a.a.a.c.a.cQt.cQt.cQt.dQt.m.C.G.F.o.v.u.o.D.B.D.o.h.h.h.h.v.v.D.P.2.1.2.2.Q.T.D.A.B.C.F.J.D.G.C.v.u.h.g.x.s.x.s.g.dQtQt.cQt.d.i.d.q.dQt.fQt.i.d.i.f.f.f.s.f.xQt.i.i.f.iQt.s.i.s.f.s.i.f.i.f.i.g.g.g.g.m.g.p.n.n.y.v.u.u.p.h.h.h.h.h.p.p.h.A.u.g.f.f.#.c.c.#.c.#.c.#Qt.c.#.c.q.c.c.#Qt.#.c.#.i.c.i.#Qt.cQt.iQtQtQt.g.i.g.i.q.#Qt.c.c.c.#.cQt.aQtQtQt.cQt.c.#.c.#.a.c.cQt.c.l.l.l.e.e.l.e.e.a.a.b.#.r.a.r.c.#.i.#QtQtQtQtQtQtQt.f.q.f.f.i.i.i.iQtQt.#.c.a.a",
+".a.a.r.a.r.a.r.a.a.a.a.a.a.a.r.a.a.#.r.#.#.#.r.a.c.c.c.c.c.d.i.q.i.o.F.B.A.u.n.o.C.G.z.v.o.v.o.o.J.K.S.2#h#c.X.N.E.F.D.z.o.o.y.A.y.C.o.h.h.g.m.f.g.h.f.f.g.d.cQt.d.q.dQt.dQt.fQtQtQtQtQt.i.i.f.f.f.f.i.g.i.f.f.f.i.f.g.i.g.i.m.i.f.g.f.f.i.x.g.h.h.h.p.v.u.p.u.h.m.x.x.m.g.g.m.g.v.u.u.iQt.d.c.b.c.q.c.c.#.c.#.c.c.c.#.c.c.#.c.c.q.d.#Qt.c.i.#QtQt.g.i.g.i.s.i.gQt.iQt.iQt.iQt.f.cQt.c.aQt.aQt.cQt.a.c.#Qt.c.c.c.b.e.e.l.b.e.l.b.a.a.a.c.a.c.c.a.#Qt.#Qt.iQt.q.fQt.q.qQt.i.i.g.gQt.#.c.a.a.l.l.j",
+".r.l.a.l.a.a.a.a.r.a.r.a.l.a.a.a.r.r.c.r.#.r.#.a.c.c.c.cQt.dQt.g.g.o.E.F.o.o.u.o.D.F.I.B.o.B.I.K.G.K.E.M.S.M.F.B.D.C.v.u.w.u.v.u.A.u.u.h.g.m.f.f.h.g.h.g.q.dQt.r.q.d.fQtQt.dQt.dQtQt.i.fQt.f.g.f.q.f.f.f.fQt.iQt.x.i.i.f.i.f.f.i.f.g.f.i.f.g.x.g.p.p.p.u.p.u.p.h.x.x.f.x.m.g.f.g.o.u.v.gQt.#.cQt.#.c.c.#.c.#Qt.c.#.c.q.c.#.c.q.d.#.cQt.#.iQt.fQt.sQt.i.f.s.f.s.i.i.q.i.#.i.d.iQtQtQtQtQt.cQt.cQt.#.q.#.#.c.#.#.c.l.b.e.l.e.l.e.e.a.b.a.bQt.b.c.r.#Qt.#QtQtQtQtQt.#Qt.fQt.f.f.iQt.#.a.r.r.#.l.e.j",
+".e.e.a.a.a.l.a.l.e.e.e.j.l.e.a.aQt.aQt.c.cQtQt.#.iQtQt.g.f.i.x.g.s.u.G.F.B.z.D.z.M.Q.E.M.Q.F.I.z.A.y.o.v.u.p.h.w.g.m.g.w.g.h.p.n.p.w.g.m.g.f.m.f.g.fQt.d.q.c.cQt.cQt.a.b.a.b.#.b.c.c.cQt.cQtQtQtQt.#.q.#.c.#.c.c.i.#.d.i.dQtQt.iQtQtQt.i.cQt.#.cQt.qQtQt.i.i.g.g.s.i.i.f.f.f.g.f.g.u.z.p.g.f.f.e.dQt.d.fQt.d.dQt.#.d.#Qt.g.f.f.f.q.#.qQtQt.f.x.f.f.i.h.h.u.h.h.h.s.g.i.m.g.g.h.w.i.f.f.f.g.g.i.q.#.#Qt.#.#.c.c.c.a.r.a.a.a.a.e.l.#.a.a.a.a.r.l.r.a.a.qQtQt.f.f.i.i.qQt.i.g.g.gQt.c.r.a.a.e.a.e.e",
+".e.b.e.l.b.a.b.a.e.l.e.l.e.a.b.c.a.a.#.#.d.#.cQt.fQtQt.f.m.g.h.h.n.B.F.H.I.T.Q.Z#i.2.N.H.B.B.C.v.u.u.u.p.h.w.h.g.g.g.m.g.g.h.g.h.w.g.g.g.m.f.m.f.i.g.fQt.f.cQt.a.aQt.a.a.r.a.b.a.cQt.cQt.c.cQt.d.#.c.c.c.c.c.#.cQt.cQt.c.#.#.cQt.c.c.#.cQt.#.dQt.xQtQtQt.g.g.g.g.f.sQt.f.s.f.fQt.i.h.o.v.g.f.f.bQt.fQt.dQt.dQt.f.#.iQt.d.f.g.i.fQt.iQt.f.i.iQt.s.f.g.m.g.m.u.p.w.i.s.s.g.m.m.m.p.m.m.x.h.g.x.xQt.i.iQt.#.i.c.f.d.#.a.r.#.l.a.b.l.a.r.a.r.l.a.a.a.r.a.#QtQt.x.fQtQt.i.g.f.g.g.sQt.#.a.a.a.a.e.b.e",
+".e.l.e.a.b.l.b.l.e.e.b.a.b.a.a.r.c.c.c.qQt.dQtQt.qQt.s.g.h.h.p.p.B.P.2.U.X.N.L.L.S.H.J.C.C.C.y.o.p.h.h.m.g.f.x.f.g.f.f.x.m.x.m.p.p.w.p.m.h.m.f.i.g.fQt.f.cQt.aQt.c.a.r.a.b.a.r.a.c.c.c.cQt.c.c.c.c.#.c.q.c.#Qt.#.cQt.#Qt.fQt.cQt.qQt.d.#.f.#.c.cQtQt.xQtQt.i.x.i.iQtQt.i.f.f.f.fQt.i.h.A.h.g.dQt.dQt.d.i.d.i.dQt.d.#Qt.i.f.f.f.gQtQt.i.#.f.g.f.g.g.g.m.p.u.p.u.p.p.g.h.p.p.h.p.u.y.n.v.u.u.w.s.f.x.i.gQtQtQt.dQt.#.c.#.c.a.a.a.a.a.a.a.a.a.a.#.a.a.a.#.c.#Qt.f.fQt.q.f.m.h.g.f.f.#Qt.c.l.b.l.b.e",
+".e.e.b.a.b.a.a.b.l.e.a.a.a.c.c.c.c.qQtQt.d.f.g.f.fQt.f.f.h.v.o.z.L.2#h#c.L.T.H.I.z.C.y.u.u.h.p.h.g.m.h.g.x.x.f.g.fQt.g.f.f.h.x.m.v.u.w.p.w.h.m.x.g.x.dQtQt.c.a.b.#.b.a.b.#.b.a.b.c.c.c.c.c.c.c.c.c.q.c.c.#.c.c.#.c.cQt.#.c.#.c.c.c.c.c.#.c.c.#.cQtQtQt.i.f.f.f.gQt.iQt.gQt.fQt.gQt.i.g.z.y.w.f.dQt.fQt.dQt.dQt.fQt.i.dQt.f.g.f.f.i.f.d.g.x.x.p.m.u.v.v.z.v.o.y.A.y.n.u.y.y.C.z.z.I.z.z.C.A.v.p.g.m.g.g.s.fQt.i.d.#.q.#.#.c.#.b.a.a.#.a.aQt.a.c.a.a.a.#.c.c.fQt.f.iQt.i.h.g.h.iQt.#.#.c.a.c.a.e.b",
+".a.a.a.l.a.e.a.a.#.a.a.r.#.c.cQtQt.dQt.f.f.f.f.f.s.i.h.u.v.o.B.B.1.W.Q.F.D.z.C.y.A.u.v.p.u.h.h.h.g.x.x.h.x.g.q.f.q.g.f.f.x.x.w.n.v.v.v.h.w.g.h.gQt.f.i.d.cQt.b.a.b.#.b.a.b.e.b.b.c.cQt.c.c.cQt.c.c.c.#.c.c.#.c.c.#.c.c.c.#.c.c.#.c.c.#.c.c.c.c.#Qt.dQt.iQt.f.i.fQtQtQt.i.f.f.f.f.s.f.h.z.z.z.g.x.i.fQt.gQt.fQt.f.f.f.g.i.f.g.h.g.x.w.h.h.m.h.w.p.F.F.E.E.H.I.E.Q.I.F.I.H.I.Q.E.Q.N.S.F.K.B.C.o.p.h.u.g.g.g.g.f.f.i.f.#Qt.c.a.c.a.c.c.c.a.c.a.c.a.#.a.a.c.c.#Qt.f.q.i.g.x.h.g.f.f.#.c.#.a.c.b.b.a",
+".a.b.a.b.a.#.a.b.a.bQt.c.c.c.c.d.f.f.f.g.f.f.x.g.h.v.v.A.D.z.D.B.G.z.v.h.p.g.p.h.h.p.h.h.h.w.g.w.g.m.h.i.x.x.f.g.g.x.x.m.h.w.p.v.o.u.v.p.w.g.g.hQt.i.dQtQt.c.b.#.b.a.b.#.b.a.b.a.c.c.c.c.c.c.c.c.#.c.c.#.c.c.#.c.c.c.#.c.c.c.c.c.#.c.c.c.c.#.c.cQt.#.c.dQtQtQt.fQtQtQt.fQtQtQt.fQt.g.g.y.F.B.v.h.x.h.x.x.x.x.h.f.h.f.h.h.h.w.h.p.w.u.o.A.o.B.z.I.P.R.N.P.R.N.M.L.M.P.T.R.N.N.L.2.1.X.L.E.E.B.C.z.u.p.h.w.g.g.i.gQtQt.i.#.#Qt.a.r.#.b.c.b.a.r.a.c.l.a.l.a.#.d.i.d.s.x.m.u.w.h.h.gQtQt.c.c.c.a.e.b",
+".a.a.#.a.b.a.a.a.a.c.c.dQt.cQt.fQt.f.x.x.g.w.h.w.o.C.z.C.z.o.z.v.h.p.g.m.m.p.g.g.w.p.h.g.h.x.x.g.p.p.h.m.h.h.x.x.m.g.w.p.h.v.u.o.u.n.h.h.h.g.s.gQt.i.d.i.c.c.a.b.#.b.a.b.b.l.r.e.c.a.c.a.c.a.c.a.c.a.c.a.c.a.c.a.a.a.l.a.l.a.l.a.a.a.a.a.a.a.a.a.#.c.c.#.d.dQtQtQt.q.i.iQt.f.g.f.i.g.p.A.F.z.v.o.h.s.w.x.p.h.w.p.w.p.n.n.u.o.o.A.C.z.I.F.J.F.E.E.Q.H.H.H.E.Q.E.H.I.F.F.H.P.P.P.N.N.N.M.S.P.E.B.B.o.v.u.v.p.m.x.m.f.iQt.d.q.c.c.c.b.a.b.r.a.b.b.r.l.e.a.c.c.d.dQt.i.i.h.h.p.w.h.gQt.i.#Qt.c.c.c.b",
+".b.a.b.a.a.a.r.a.r.aQt.dQt.i.dQt.g.h.g.m.h.h.w.p.J.F.I.C.v.u.u.u.h.h.m.f.i.f.h.p.h.h.h.w.h.g.w.g.v.u.w.h.u.h.m.h.n.u.v.u.v.u.u.o.u.u.v.p.w.h.m.h.iQt.d.i.c.c.r.a.b.a.b.#.b.b.a.b.c.c.c.c.c.c.c.c.c.c.#.c.q.#.c.q.a.a.a.a.a.a.a.a.#.a.a.#.a.a.#.a.c.c.c.c.#Qt.fQtQtQtQt.fQt.fQt.fQt.i.v.y.F.C.A.v.n.n.n.p.h.n.p.n.v.o.v.A.z.z.I.B.F.H.H.Q.I.F.B.F.B.J.C.C.C.C.A.y.A.y.y.C.D.B.B.F.Q.P.T.R.S.S.H.B.C.z.v.u.w.h.g.m.q.g.iQt.#.c.c.c.a.b.b.a.b.b.a.b.l.e.#.a.cQt.d.dQt.m.h.w.u.h.h.gQtQtQt.c.c.c.r.c",
+".d.d.d.d.c.c.c.c.iQt.d.q.f.s.s.p.h.h.u.o.o.B.I.I.o.v.p.p.h.h.h.u.g.f.f.f.g.g.f.f.f.g.f.f.g.w.p.h.h.w.u.v.v.z.C.C.A.z.C.A.u.u.u.p.w.p.w.h.x.h.f.fQtQt.fQt.dQt.c.c.b.l.b.a.a.a.b.a.c.a.r.a.c.b.c.a.c.#.c.#.c.c.#.c.c.a.b.a.b.a.a.r.a.c.a.c.c.c.#.d.#.c.#.c.c.c.#.dQtQtQtQtQt.iQtQt.d.q.g.p.y.z.D.v.y.v.y.B.G.T.S.T.E.H.H.P.Q.P.P.P.T.H.F.G.B.D.o.o.p.n.p.w.p.w.h.u.h.h.n.w.h.v.n.u.z.z.F.E.H.E.E.Q.z.F.D.A.C.y.y.v.m.g.fQt.qQtQt.c.f.d.c.cQt.a.b.bQt.b.b.b.a.a.c.b.cQt.h.p.v.v.h.h.q.d.dQt.c.dQt.q",
+"QtQtQt.fQtQt.c.c.c.f.f.h.w.n.s.p.A.z.B.D.z.D.B.D.u.v.h.w.p.w.h.w.i.f.s.x.g.x.x.h.i.g.g.w.u.p.o.v.A.v.A.z.C.z.z.B.A.z.C.v.v.n.u.u.p.w.h.w.i.x.i.f.f.#.dQt.c.c.a.c.l.e.e.a.b.a.a.b.c.c.c.c.c.c.c.c.#.c.#.cQt.cQt.c.c.a.a.b.a.c.b.a.a.a.a.c.#.c.c.c.c.c.c.c.c.c.c.cQtQtQtQtQtQtQtQt.d.f.f.u.u.C.B.v.u.u.o.D.F.I.P.P.F.F.F.E.H.F.K.I.z.D.D.C.C.v.v.v.m.h.g.g.w.g.h.g.s.w.h.h.u.w.h.n.v.A.C.B.D.J.B.z.z.C.C.y.v.u.v.u.p.h.i.i.gQt.dQt.c.c.c.c.b.b.#.b.c.c.a.bQt.c.#.c.qQt.g.h.v.u.w.g.f.fQt.c.c.#.d.f",
+".d.x.d.d.f.q.f.q.f.g.g.g.v.v.z.F.E.K.I.D.A.v.v.v.m.h.h.u.h.g.g.g.h.g.x.f.g.g.g.h.h.w.u.h.v.v.o.o.B.F.z.B.D.z.D.C.v.v.u.v.p.v.s.h.w.h.g.x.x.g.i.gQtQt.i.cQt.c.r.b.e.l.e.a.a.b.a.a.b.a.b.a.b.a.b.a.c.c.c.c.c.#.c.c.a.b.c.a.b.a.b.c.a.#.a.a.c.c.#.c.#.c.#.c.#.c.c.r.c.c.c.c.c.c.c.c.d.cQt.g.p.A.z.C.h.h.u.o.o.B.G.I.D.B.B.B.D.D.C.z.v.o.u.u.w.h.h.h.g.g.m.g.i.g.f.m.g.g.x.w.x.w.h.w.u.p.v.u.u.v.u.u.u.p.w.h.u.h.u.w.p.u.g.w.i.i.f.f.q.c.#Qt.c.a.b.a.f.c.c.c.d.cQt.d.c.i.f.g.w.u.p.p.gQtQt.c.iQt.i.f",
+".d.d.g.q.f.h.x.h.p.o.A.C.E.Z.X.2.S.I.I.o.v.v.o.v.h.h.v.u.v.u.u.h.h.g.h.w.h.n.p.p.v.u.u.v.z.D.B.z.Q.E.H.E.z.B.C.z.v.p.w.h.h.m.x.h.g.g.h.x.g.f.f.fQtQtQt.c.c.b.l.b.l.e.e.a.a.b.c.b.c.a.b.a.b.a.r.a.a.a.a.a.a.a.a.l.a.b.a.b.e.b.a.l.a.a.a.a.a.c.a.c.c.#.c.c.c.r.c.c.c.c.c.#.c.#.c.#.f.dQt.f.g.v.z.o.h.h.h.u.v.v.v.v.z.C.C.C.o.v.o.v.p.p.u.h.h.i.x.i.h.g.x.x.x.h.g.x.x.x.h.g.x.g.x.g.w.h.h.g.g.i.s.i.h.g.x.g.h.x.s.f.p.h.p.p.g.h.g.gQtQt.c.c.cQt.cQtQtQt.f.dQt.i.d.iQtQt.g.g.h.h.v.h.x.f.fQt.i.f.f.x",
+".x.h.x.s.s.p.p.p.D.K.S.V.8#p#i.1.T.B.I.D.o.o.v.o.o.y.o.v.o.v.v.A.h.w.u.h.v.v.v.v.o.v.A.o.C.B.B.F.Q.S.Q.E.F.B.D.B.o.v.h.n.m.s.h.x.x.h.g.f.f.f.gQt.i.#.cQt.a.a.e.e.b.l.e.#.a.a.b.a.b.a.c.b.c.a.b.a.a.a.l.b.l.a.b.a.b.l.e.e.l.e.a.b.l.l.a.#.a.a.#.c.a.#.a.a.a.a.a.l.a.#.a.a.b.a.a.a.d.c.d.q.f.v.C.z.h.v.h.n.h.n.v.p.v.o.v.w.u.u.h.h.w.g.g.i.m.f.f.f.f.g.fQt.fQt.fQt.g.f.f.f.g.f.g.f.g.i.g.f.i.#.d.#.d.i.dQt.dQt.fQt.m.g.w.h.u.p.p.p.i.iQtQt.#.#Qt.#.d.i.#Qt.dQtQtQt.iQt.f.g.g.u.v.v.h.m.x.f.g.h.g.h",
+".w.u.v.v.v.o.A.A.J.R.W#c.8#h.L.T.D.D.D.C.z.u.u.u.o.o.o.o.o.o.o.o.h.p.w.p.h.h.p.u.h.v.u.v.o.o.A.C.F.I.D.F.F.I.I.I.v.o.w.p.w.h.m.h.h.g.f.f.i.fQtQt.c.q.c.a.a.r.e.e.e.e.l.b.a.b.c.a.b.a.e.e.e.e.b.e.e.e.e.e.e.e.e.j.e.j.e.e.e.e.e.e.l.b.l.l.a.a.a.l.a.a.a.a.a.l.a.a.a.b.a.b.a.a.b.a.d.c.c.cQt.h.A.C.u.p.u.h.h.h.h.w.u.h.h.p.h.h.w.g.g.i.m.f.f.fQt.gQtQtQtQtQtQtQtQt.fQt.gQtQtQtQtQt.f.fQt.c.c.c.b.#.c.c.c.q.c.d.fQt.f.g.g.h.h.h.u.h.i.i.sQt.f.fQt.fQt.f.dQt.i.f.g.f.f.g.f.g.g.u.o.C.p.v.h.m.g.h.o.p",
+".D.B.D.B.D.B.J.B.F.Q.E.F.E.B.C.C.o.u.y.v.p.w.h.p.p.p.h.p.h.p.h.p.m.h.g.h.h.w.p.h.m.g.g.w.u.u.v.u.v.u.o.A.C.z.B.B.v.o.A.o.p.w.p.w.g.g.fQt.f.gQt.i.c.#.aQt.e.e.e.a.e.l.e.a.e.a.b.a.e.e.b.l.b.l.e.l.e.e.e.e.e.e.e.e.l.e.l.j.l.e.t.e.l.l.l.l.a.l.a.a.e.l.e.l.e.e.l.e.e.e.e.e.e.e.e.e.f.cQt.b.c.m.v.B.v.o.p.p.h.h.g.g.h.w.h.m.h.m.g.f.i.f.f.f.f.i.qQt.d.d.d.f.d.d.f.d.#.d.#.dQt.dQt.d.#.c.cQt.b.b.c.b.a.#.r.c.#.c.#Qt.f.f.f.i.i.h.g.h.h.h.g.p.m.g.f.f.i.g.f.f.f.i.i.f.x.g.g.m.h.o.D.I.D.o.u.u.o.v.A.D",
+".P.P.E.J.z.C.C.C.v.A.v.u.p.w.p.n.u.u.h.h.g.h.h.w.i.s.i.s.g.g.i.s.g.g.g.m.g.h.h.w.f.f.m.g.w.h.w.p.p.h.n.n.o.A.z.B.A.z.z.B.A.o.v.n.h.m.i.f.g.f.iQt.#Qt.a.a.e.a.b.b.l.b.e.a.e.b.c.a.b.e.l.e.e.e.e.b.j.k.j.j.j.j.j.j.e.j.e.e.j.e.e.e.j.l.e.l.#.a.a.a.l.e.l.e.a.l.b.l.e.e.e.e.e.b.e.e.c.c.bQt.c.x.z.z.z.A.o.v.h.g.w.g.h.g.h.g.i.i.fQt.m.i.i.f.fQtQt.d.i.dQt.dQt.dQt.dQt.cQt.q.c.#.q.c.c.a.b.a.c.r.#.b.l.a.#.a.#.cQt.d.g.q.h.f.m.x.g.h.h.p.p.g.h.g.h.g.f.i.f.s.f.s.x.s.h.m.h.g.w.o.I.G.I.D.A.D.A.D.I.K",
+".K.G.v.u.p.m.g.g.i.i.g.m.g.h.p.h.s.h.i.i.f.g.x.f.f.dQt.dQt.d.d.d.cQt.dQt.d.iQt.d.q.f.d.f.x.h.h.s.s.m.m.p.u.v.v.o.u.o.o.B.I.B.C.A.v.p.w.h.g.qQt.i.c.c.b.#.e.b.e.e.e.e.j.e.j.e.j.k.e.l.e.e.e.e.j.e.j.e.e.j.e.j.e.e.j.l.e.t.e.l.e.l.b.l.e.j.e.j.e.j.e.e.e.l.e.j.e.e.e.e.j.e.e.l.e.e.j.e.a.c.f.f.w.v.E.z.v.h.g.f.f.x.m.x.g.m.x.f.g.iQtQt.iQtQtQtQtQt.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.r.b.b.b.l.b.b.b.e.e.b.r.d.d.dQt.d.d.d.dQt.dQt.#.gQt.i.g.w.u.v.h.w.h.h.h.u.u.p.p.v.v.v.C.B.Q.R.I.K.I.I.I.C.D.B",
+".E.D.z.p.g.g.f.m.i.g.i.g.g.g.h.h.h.g.i.i.f.f.g.x.dQt.d.i.dQt.c.c.c.cQt.c.c.cQtQt.c.cQt.fQt.f.h.x.i.s.g.m.w.h.v.u.w.p.o.B.z.A.o.v.v.v.p.u.g.s.f.q.c.c.#.b.b.e.j.e.e.j.e.k.e.k.e.j.e.e.e.l.j.j.e.j.e.e.j.e.j.e.j.e.l.j.e.e.j.e.j.e.l.e.e.l.e.l.e.e.e.l.e.e.j.e.j.e.j.l.e.l.j.e.t.e.e.e.a.cQt.f.g.o.Q.J.v.p.g.i.f.x.f.f.f.f.f.i.f.f.gQtQtQtQtQt.iQt.c.c.c.c.c.c.c.c.c.a.c.c.c.r.c.a.a.e.a.l.r.b.a.e.l.e.l.b.a.c.d.d.fQt.d.#.cQt.c.dQtQtQt.f.g.p.p.u.u.v.u.u.y.v.A.y.o.C.A.z.D.E.K.R.I.B.G.B.D.A.o.o",
+".G.B.o.p.g.f.f.g.i.i.f.f.i.g.i.f.q.iQt.f.g.f.f.qQt.i.d.c.c.b.b.b.a.c.c.a.c.a.c.c.a.a.c.c.d.d.f.f.g.f.g.g.w.n.h.n.m.g.u.o.o.v.p.w.u.v.u.h.g.g.s.iQt.c.c.a.r.e.e.b.j.j.k.j.j.b.j.k.l.j.e.j.e.j.e.j.e.l.e.j.e.e.l.e.j.e.l.e.l.e.l.e.e.l.e.e.l.e.j.l.j.e.j.l.e.j.e.t.e.j.j.e.e.e.e.e.j.e.aQt.d.f.g.u.E.D.v.u.h.h.x.f.i.f.i.f.f.f.f.iQtQtQt.iQtQtQtQt.c.a.c.a.c.a.c.a.b.c.b.a.b.a.a.b.b.b.b.b.a.e.b.#.e.e.b.a.a.c.fQt.c.d.c.c.c.c.fQt.cQtQt.g.g.h.p.u.y.A.y.z.z.B.z.J.z.B.B.F.F.T.P.K.B.D.z.o.v.o.v.B",
+".F.z.v.w.i.f.f.f.f.f.g.i.fQt.fQtQtQtQtQt.dQt.dQt.c.c.c.c.c.b.a.bQt.a.a.r.a.b.c.r.a.r.#.c.c.dQt.d.qQtQt.g.g.w.w.h.g.m.g.w.p.w.x.m.u.p.p.w.g.m.f.gQtQtQt.b.a.e.j.e.j.j.j.e.k.e.k.j.e.l.e.e.j.e.j.e.j.e.j.e.j.e.j.e.l.j.e.l.e.e.e.t.b.e.e.j.b.l.e.e.j.e.e.j.e.j.e.j.e.j.e.j.j.j.l.j.e.j.e.c.#Qt.g.h.F.B.z.u.h.g.f.x.fQt.fQt.f.s.f.fQtQtQtQtQtQtQt.c.c.c.c.r.c.c.r.c.a.a.a.b.a.a.r.a.b.l.a.b.a.b.l.b.e.l.a.a.c.c.c.c.c.c.c.c.c.c.c.dQt.g.f.i.w.h.h.p.v.y.v.C.C.C.C.B.C.D.F.K.T.T.S.K.B.z.o.v.o.B.C.B",
+".D.o.p.g.f.f.fQtQt.#QtQtQtQtQtQtQtQtQt.#Qt.d.d.f.#.c.c.a.c.b.a.e.c.bQt.a.b.a.b.c.a.a.c.a.aQt.c.d.i.c.i.f.m.g.x.f.s.f.m.w.m.g.g.i.g.g.w.g.m.g.g.sQt.q.c.c.a.b.e.b.j.j.k.j.j.k.j.k.e.j.e.j.e.j.e.j.e.j.e.j.e.l.e.e.l.e.l.b.e.l.e.e.l.j.l.e.e.j.e.l.j.e.l.e.j.e.j.e.j.e.j.e.e.j.e.e.j.e.b.c.#.dQt.s.C.A.z.u.h.x.x.fQtQtQtQtQtQt.f.f.iQtQtQtQtQt.c.#.c.r.a.a.b.a.a.b.c.b.c.a.r.a.b.a.a.#.b.a.a.a.#.a.a.a.a.#.a.a.a.c.c.c.c.c.b.c.c.cQt.f.f.f.i.g.m.h.u.v.v.y.v.y.z.C.C.z.G.E.P.S.I.E.F.D.z.C.B.B.B.D",
+".o.u.h.g.i.iQtQtQt.dQt.c.cQt.c.q.c.#Qt.c.cQt.c.c.c.#.c.#.c.l.r.b.a.a.b.a.a.a.a.a.b.a.b.a.b.a.a.a.c.#.c.d.f.g.g.h.x.g.x.w.h.s.f.i.g.g.g.f.f.g.f.gQtQt.c.#.r.a.a.e.e.j.j.j.j.j.e.j.e.l.e.l.e.j.e.j.l.e.e.j.e.j.l.j.e.l.e.e.l.b.e.l.e.e.e.j.e.l.e.j.e.e.j.e.j.e.j.e.e.j.e.j.e.e.j.e.e.e.l.aQt.#Qt.f.p.y.A.u.h.i.fQtQtQtQtQtQtQtQtQtQtQtQt.iQtQt.c.#.b.a.r.a.b.a.r.a.e.e.e.a.b.a.a.b.a.b.a.a.b.a.b.a.a.a.a.a.a.a.a.a.c.c.a.c.c.a.c.a.d.dQtQt.f.f.fQt.g.h.g.h.p.u.p.v.o.C.D.T.T.E.F.D.J.I.D.B.C.D.B.C",
+".p.g.fQtQtQtQt.f.cQt.c.c.q.c.a.a.c.c.c.c.c.a.c.r.c.a.c.b.a.b.e.e.a.a.a.b.e.e.b.a.#.a.a.b.l.e.e.e.e.a.bQt.d.g.f.f.x.x.m.g.h.h.f.iQt.iQt.iQt.dQtQtQt.iQtQt.#.b.c.b.e.e.j.k.j.k.j.k.e.j.e.j.e.l.e.e.e.j.l.e.e.e.e.l.e.b.l.e.l.e.l.e.b.l.l.e.l.e.e.j.e.l.e.l.j.e.j.e.j.e.e.e.t.e.l.e.j.e.e.a.a.c.qQt.x.v.u.u.h.f.dQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.c.#.a.b.e.e.b.e.e.e.b.l.e.a.e.a.e.a.l.l.l.l.a.a.a.a.a.#.a.a.a.#.r.a.#.b.a.b.a.b.a.b.c.c.cQt.c.#Qt.#Qt.f.f.m.g.m.g.h.v.C.B.K.E.G.B.z.D.J.F.C.C.C.C.v",
+".g.g.gQt.#QtQt.fQtQt.c.#.c.a.a.l.b.b.c.a.a.a.a.a.a.a.#.c.a.b.e.e.e.a.b.l.e.e.l.a.b.a.e.e.b.l.j.b.e.b.#.c.d.f.x.g.f.h.s.n.w.g.g.d.i.#Qt.#.cQtQtQt.iQtQt.#.c.c.a.a.e.e.j.j.e.k.e.j.e.l.e.l.e.j.e.t.e.l.e.e.l.l.e.l.e.l.e.e.l.e.e.l.l.e.e.l.e.l.e.l.j.e.j.e.e.j.e.l.e.e.t.e.e.e.e.e.e.e.e.#.a.a.#.#.i.g.u.g.fQtQt.a.#Qt.#Qt.#Qt.#QtQt.iQtQtQtQt.#.c.a.a.a.a.a.a.a.a.e.e.e.b.a.b.a.a.e.a.a.a.a.l.#.l.a.r.a.r.a.r.a.a.c.a.c.b.c.a.r.a.a.b.a.a.a.c.c.#.cQtQtQt.f.x.i.h.u.A.D.E.J.C.v.v.C.B.D.C.z.v.y.v",
+".iQtQt.iQtQt.q.d.c.c.c.c.c.c.c.a.a.c.#.r.a.b.a.b.a.b.b.a.e.a.a.a.b.a.e.e.b.l.b.a.e.l.e.l.a.b.a.a.e.b.e.a.a.cQt.s.g.s.m.g.g.f.g.g.dQt.c.cQt.a.c.c.a.cQt.c.c.i.cQt.b.l.e.e.e.l.e.e.j.j.j.e.j.e.j.e.e.j.j.j.j.j.b.e.b.l.e.b.l.e.b.l.b.a.b.l.b.l.e.e.l.l.l.l.j.e.e.e.j.e.e.e.t.e.t.e.e.j.e.e.l.a.#.aQt.i.p.p.h.x.d.#.a.r.c.c.r.c.d.dQtQt.c.iQt.cQt.c.c.b.a.b.a.b.a.a.e.l.e.l.e.l.e.e.l.l.l.e.a.c.c.c.e.e.l.b.l.e.l.e.e.e.e.e.e.b.b.b.a.a.b.a.c.c.c.cQtQt.d.f.g.g.x.g.u.o.u.o.v.p.w.p.w.u.z.C.o.v.p.h",
+".s.f.qQtQtQt.#.c.c.c.cQt.c.c.a.c.c.b.c.a.b.a.r.a.b.a.l.b.a.a.b.a.l.b.a.l.e.e.e.a.j.l.b.e.e.a.b.a.b.e.e.a.#.#QtQt.g.g.m.h.f.g.d.f.cQt.c.#.c.c.cQt.a.a.a.c.#.c.c.d.a.a.a.a.a.e.a.e.e.l.e.l.e.l.e.l.e.b.e.b.b.e.e.b.l.b.l.l.e.l.e.l.e.l.e.e.l.e.e.l.l.l.l.e.l.j.e.e.e.e.j.l.e.e.e.e.j.j.l.e.e.a.r.a.q.i.g.n.g.x.d.r.c.a.a.c.a.c.cQt.cQt.#.d.#.i.c.#.c.b.a.a.b.a.a.r.l.e.b.l.e.e.l.e.l.l.l.a.a.c.a.c.e.l.e.l.e.e.e.l.b.e.e.b.e.b.l.b.e.a.a.b.c.c.c.c.c.dQt.f.f.x.x.w.u.u.v.v.h.h.h.h.m.u.o.o.o.o.p.h",
+".i.i.iQtQtQt.c.#.#.c.c.c.a.r.a.r.#.c.b.a.c.b.a.a.a.b.a.a.e.a.a.a.e.e.e.e.e.l.e.e.j.j.j.l.e.a.a.a.e.e.l.b.a.c.gQt.s.i.m.fQt.d.fQt.f.c.c.#.c.#.c.b.a.a.c.a.c.c.c.c.a.r.a.c.a.c.a.c.a.a.a.a.a.a.a.a.e.l.e.e.l.l.b.l.e.a.e.b.l.e.b.l.b.e.l.e.e.b.l.e.b.l.l.t.e.e.e.e.l.e.l.e.j.j.e.j.e.j.e.j.l.r.a.#Qt.f.m.h.h.f.d.rQt.b.c.c.c.c.r.c.c.#.c.#.d.#.c.#.a.a.a.a.a.a.a.a.l.l.l.l.b.l.l.b.l.l.#.a.a.a.c.c.e.b.l.e.e.l.j.e.e.l.e.e.e.a.b.a.a.b.a.a.c.a.c.c.c.qQt.f.f.x.m.g.u.v.u.h.u.m.g.g.i.m.p.v.u.v.h.g",
+".gQtQtQt.iQt.i.c.c.cQt.cQt.aQt.a.b.a.a.a.b.a.e.b.e.a.l.b.a.a.r.a.l.b.e.l.e.e.j.e.j.j.j.e.j.e.a.e.e.e.b.a.a.#QtQt.g.s.f.i.d.i.c.c.aQt.aQt.a.b.a.b.b.l.r.a.a.b.a.c.c.c.c.c.r.c.c.c.a.c.c.cQt.#.cQt.a.a.a.a.a.c.a.c.l.b.l.l.r.l.b.l.b.l.e.b.l.l.e.l.l.l.b.l.e.l.e.e.e.l.e.e.e.l.j.e.j.j.l.e.e.a.a.a.i.f.h.w.g.f.d.r.a.c.c.b.c.c.c.c.#.cQt.c.#QtQt.d.a.a.a.a.a.b.a.a.e.a.l.a.l.a.l.r.l.a.r.a.a.a.b.a.e.l.e.l.e.e.e.e.l.e.e.l.b.a.c.b.a.b.a.b.c.c.r.c.#.dQt.f.g.x.g.s.u.u.h.w.h.i.x.i.s.f.i.g.m.h.g.g",
+"QtQt.gQt.#.d.d.cQt.c.c.c.c.c.c.a.a.a.b.a.a.a.a.e.l.e.e.l.e.e.l.e.e.l.j.j.j.j.j.j.j.j.j.j.j.e.e.l.j.e.e.a.a.cQt.s.i.g.fQt.i.cQt.f.a.r.#.c.a.r.a.b.e.b.e.e.b.a.b.e.c.a.c.a.c.a.c.a.c.#.c.#.c.c.#.c.#Qt.c.#.aQt.c.q.a.a.#.e.l.e.b.l.e.l.e.l.e.e.l.b.l.l.l.l.e.l.e.e.e.j.e.t.e.e.e.l.j.j.e.e.l.a.#.a.c.i.g.u.g.f.dQt.c.a.c.c.c.c.c.c.d.#.cQtQtQt.iQt.a.#.a.e.a.l.a.l.a.a.a.a.a.a.a.a.a.r.a.a.a.a.a.a.e.e.l.b.e.t.e.j.l.l.j.l.e.a.a.a.l.a.b.a.c.c.c.c.cQt.d.f.f.g.g.w.u.u.h.g.g.g.m.gQtQt.xQt.i.i.m.f",
+"QtQt.#.#.c.c.a.b.a.a.a.a.#.a.a.b.b.l.b.e.e.e.j.e.e.e.e.e.l.b.e.l.j.j.e.e.e.j.e.j.j.j.j.e.j.l.e.e.e.e.e.e.a.qQtQt.g.i.qQt.c.f.cQt.b.#.a.r.a.b.b.e.j.b.e.e.b.e.e.b.b.a.b.b.a.b.a.b.q.c.#.q.#.#Qt.#.f.#.c.#.c.c.#.c.l.r.a.l.r.l.a.l.e.l.b.e.e.l.e.l.l.l.l.l.l.e.b.e.e.l.e.e.j.l.j.e.j.e.t.e.e.b.c.a.cQt.m.h.g.g.#.a.c.r.c.c.a.c.c.d.qQt.c.#.iQtQtQt.r.a.a.a.r.a.a.a.l.a.l.a.r.#.a.a.q.#.a.a.a.e.a.b.l.b.e.l.e.e.l.e.l.e.l.b.l.a.l.a.a.b.a.c.b.c.c.c.c.#.i.f.f.h.h.h.v.p.v.g.m.x.i.x.s.qQtQt.x.f.i.g",
+"QtQt.c.c.cQt.b.b.a.b.a.b.a.a.b.a.e.l.e.l.e.l.e.l.j.j.j.j.e.j.j.b.j.j.t.j.j.j.j.j.k.k.j.j.j.j.j.e.j.e.e.a.a.cQt.g.qQt.i.c.q.cQt.c.#.b.a.#.e.b.l.e.j.j.j.e.j.e.e.e.a.a.b.a.a.b.a.a.a.r.a.a.a.#.r.#QtQt.gQt.gQt.i.f.#.a.l.e.l.e.b.e.l.e.a.l.b.l.e.e.l.l.l.b.e.l.e.e.l.j.e.t.e.e.e.e.j.j.e.e.l.#.a.#.c.d.i.m.w.i.cQt.c.#.c.c.c.d.dQt.cQt.c.#.dQtQt.i.c.r.a.r.#.r.a.r.a.a.#.r.a.r.a.r.a.c.r.a.l.l.b.l.e.l.e.e.l.e.e.b.t.l.t.l.l.a.a.a.b.a.b.a.c.c.c.c.dQt.d.f.g.h.g.w.p.h.g.g.g.i.g.i.g.f.x.iQt.s.h.h",
+".qQtQt.c.c.b.e.a.e.b.#.a.a.b.a.a.e.e.e.e.j.e.j.e.j.j.j.b.j.e.j.l.j.b.j.e.j.j.j.j.k.k.j.j.j.j.j.j.j.e.e.a.a.#QtQtQt.qQt.q.d.c.#.c.#.a.#.b.e.r.e.e.e.j.j.j.k.e.e.e.e.b.l.e.b.l.e.e.a.a.r.a.r.#.a.#Qt.iQtQtQt.qQtQt.#.a.#.a.b.b.l.#.e.l.b.e.l.e.b.l.l.b.l.l.l.e.e.e.e.l.e.e.j.l.j.l.e.e.j.l.e.b.a.a.b.i.f.m.g.gQt.a.c.c.c.c.c.dQt.fQt.c.#.cQtQtQtQt.#.a.r.a.a.r.#.a.l.r.r.a.a.a.r.a.c.#.c.a.#.a.e.e.l.e.e.l.b.l.e.l.l.l.l.l.l.l.a.a.l.a.a.r.a.r.c.c.c.cQt.f.h.g.p.p.p.h.m.g.s.g.f.f.g.iQt.i.q.x.p.h",
+".h.h.f.#.a.a.a.a.a.a.b.a.b.l.j.e.l.e.l.e.j.e.j.e.j.j.j.j.j.j.j.j.e.l.e.l.e.j.e.t.j.j.j.j.0.j.e.j.k.l.a.#Qt.iQtQt.i.i.gQt.i.i.c.c.a.r.a.e.l.l.e.e.e.e.j.j.j.j.j.j.j.j.e.j.l.e.e.l.b.l.e.#.a.r.a.c.r.r.#.q.f.g.g.i.g.dQt.c.c.a.a.b.l.r.l.a.b.a.e.l.a.a.a.a.e.l.a.l.b.l.l.l.l.e.l.l.j.e.j.l.b.l.e.#.j.aQt.x.u.h.f.q.a.#.e.b.l.a.d.d.r.a.#.d.qQtQtQt.r.r.a.r.a.r.a.r.r.a.r.#.r.r.#.r.a.r.a.a.r.l.r.a.a.#.r.l.l.l.l.l.l.l.a.l.a.l.a.a.#.a.a.a.a.a.c.c.#.rQtQt.g.h.p.h.p.g.g.g.x.g.g.f.i.fQt.f.f.m.g.m",
+".h.g.f.#.a.#.a.a.r.a.c.a.a.b.l.e.j.b.e.l.j.e.j.e.j.j.e.j.e.j.e.j.l.e.l.j.e.l.e.e.j.j.j.0.j.j.j.j.j.e.a.#QtQtQt.iQtQt.f.iQt.dQt.c.b.a.e.l.b.l.e.l.e.e.e.j.e.j.e.j.e.j.e.j.e.e.e.e.e.e.l.b.a.c.#.c.a.#.#.#QtQt.f.m.f.gQt.f.cQt.a.#.a.a.a.a.a.a.a.a.a.l.a.l.a.a.e.a.l.l.b.e.l.l.e.l.j.e.j.e.l.l.b.e.j.#.i.x.h.m.fQt.c.c.e.a.aQt.#.d.a.q.c.#QtQtQt.f.#.a.r.r.a.r.a.r.a.r.a.r.r.a.r.r.r.a.#.r.a.a.a.l.r.l.a.l.a.a.l.a.e.a.l.b.l.a.l.l.a.l.a.a.#.a.c.#.r.r.#.i.s.p.u.p.g.w.g.g.s.g.f.iQtQtQt.s.f.i.f.g",
+".h.mQtQt.i.c.#Qt.a.c.b.a.b.l.e.e.l.l.e.e.j.e.j.e.j.j.j.j.j.j.j.j.e.e.e.l.b.j.e.t.j.j.j.e.j.j.j.j.k.a.c.qQtQt.sQt.f.i.g.#.d.i.c.c.l.l.b.a.e.e.l.e.j.e.j.j.j.j.j.j.j.e.l.j.e.l.e.l.e.l.e.a.a.b.c.a.a.aQt.#.iQt.f.f.gQt.dQt.c.c.c.cQt.#Qt.cQt.a.a.#.a.#.a.a.#.l.a.l.l.l.l.l.l.l.b.l.j.e.t.e.e.b.a.c.b.cQt.x.g.w.gQt.c.q.a.#.a.c.cQt.#.#.#QtQtQtQtQt.#.r.a.r.a.r.a.r.a.r.q.a.#.r.c.r.a.a.r.a.r.a.r.a.r.a.r.a.r.l.r.a.l.a.l.a.l.a.l.a.a.a.a.a.a.a.c.a.#.a.iQt.g.g.h.g.p.g.g.g.f.s.f.f.i.f.i.f.i.g.f.g",
+".p.p.mQtQt.#.c.#.r.a.c.#.a.e.b.l.e.e.e.l.j.e.j.e.j.j.e.j.e.j.e.j.l.l.b.e.e.l.e.e.j.e.j.j.j.j.e.j.e.a.#Qt.i.i.q.gQt.s.fQt.i.d.cQt.e.r.l.e.l.b.e.e.e.j.e.j.e.j.e.j.l.j.j.j.e.e.e.e.l.b.l.b.#.c.a.#.l.a.a.a.cQt.g.f.dQtQtQtQt.cQt.cQtQtQt.#Qt.cQt.c.#.a.a.a.a.a.a.a.#.a.a.#.a.a.a.a.e.j.b.e.l.a.a.a.l.q.i.g.m.g.g.i.dQt.#.c.q.cQt.dQtQtQt.iQtQt.iQt.#.#.a.r.a.r.a.r.#.#.a.r.r.a.r.#.a.r.a.#.r.l.a.l.#.l.r.b.l.l.l.l.a.a.a.l.a.l.b.l.l.#.l.a.a.l.c.c.#.#QtQt.f.m.g.x.g.w.i.m.i.f.iQtQt.qQtQtQt.f.i.f",
+".g.i.i.iQtQt.#.c.#.cQt.a.a.e.l.e.e.t.e.e.e.j.e.l.j.j.j.j.j.j.j.j.e.e.l.l.e.e.j.e.e.j.e.e.e.j.e.e.l.#.#Qt.x.i.s.f.s.i.g.#.dQt.a.b.a.l.b.a.e.l.l.e.j.j.b.j.j.j.j.j.j.j.j.j.l.e.l.e.e.e.e.a.a.b.c.a.e.b.a.c.c.dQtQtQt.c.c.cQt.dQt.fQt.fQt.d.#Qt.cQtQt.#Qt.#.a.c.a.c.a.a.#.a.a.l.a.b.l.l.e.l.a.a.cQt.a.#Qt.s.g.w.p.m.fQt.i.c.c.#Qt.gQt.iQtQtQtQtQtQt.#.r.#.a.r.a.r.a.#.q.r.c.r.q.r.r.a.r.a.r.a.a.r.a.r.r.a.r.r.l.l.l.#.l.a.a.e.a.l.l.a.l.a.a.l.a.c.a.#.dQt.i.i.f.f.f.s.i.g.f.iQt.fQt.iQt.i.f.iQt.f.s",
+".s.i.s.h.sQtQt.#.c.a.r.a.a.e.e.l.e.e.l.e.l.e.j.e.j.j.e.j.e.j.e.j.l.e.e.e.e.l.e.j.l.e.e.j.e.e.j.e.l.a.#.q.g.p.g.i.s.f.iQt.q.dQt.b.#.a.e.l.b.e.e.l.j.j.j.j.e.j.e.j.j.j.j.j.e.e.e.e.l.e.l.b.a.c.b.c.l.l.e.#.a.c.i.d.#.c.cQt.c.i.cQtQtQtQt.iQtQt.i.#.a.#.a.#.a.#.c.q.a.a.a.c.aQt.a.r.e.l.e.a.b.#.c.c.cQt.i.g.g.w.p.h.m.gQtQtQt.cQt.fQtQtQtQtQt.#.c.#.r.r.a.r.a.r.a.r.r.#.r.r.a.r.a.#.r.#.a.a.r.a.r.a.l.r.l.a.l.#.a.l.a.a.b.a.a.l.a.e.l.b.l.a.b.l.#.c.c.cQtQtQt.fQt.f.g.i.i.s.q.iQt.xQtQt.#Qt.q.gQtQt",
+".q.i.p.g.g.fQt.#Qt.cQt.a.r.l.e.e.j.e.b.e.j.j.e.e.j.j.j.j.j.j.j.j.e.j.l.j.l.j.e.l.b.l.e.a.a.e.l.a.a.a.q.q.g.h.s.iQtQtQt.c.c.c.c.b.l.b.l.r.l.l.e.e.j.e.j.e.j.j.j.j.j.j.e.j.e.t.b.e.l.b.e.a.a.#.c.a.e.b.b.a.b.c.d.d.a.#.c.cQt.dQt.f.#.q.#.#.c.#.c.#.c.c.#Qt.c.#.c.#.a.c.a.#.#.a.a.c.b.l.#.a.c.c.cQt.#.iQt.f.s.p.p.v.p.g.mQtQt.iQt.f.fQtQtQt.f.#.#.#.a.r.a.r.a.r.a.r.#.#.a.q.r.c.#.#.#.r.r.#.a.r.#.r.#.a.r.a.r.a.l.r.a.l.a.a.l.e.l.e.l.l.a.l.a.a.c.a.#.c.q.dQt.d.i.f.s.i.iQtQtQt.fQt.#.q.#QtQtQtQt.g",
+".d.i.h.w.g.iQt.#.r.a.c.a.a.e.b.l.e.l.e.l.e.e.t.e.j.j.e.j.e.j.e.j.l.e.e.e.e.l.b.e.a.e.e.a.a.e.e.l.a.#.i.q.s.g.i.i.gQt.i.cQt.c.aQt.e.a.e.l.e.e.e.e.j.j.j.e.e.e.j.e.j.j.j.j.e.e.l.e.e.l.e.l.b.c.bQt.e.e.e.a.b.c.f.q.#.c.a.c.i.cQt.d.r.#.q.c.r.#.r.aQt.#.c.c.c.#.c.c.#.a.c.#.#.c.a.a.l.e.a.b.aQt.cQtQt.f.xQt.i.w.h.u.u.w.g.g.iQtQt.q.f.fQtQt.#.c.a.r.a.r.a.r.a.r.#.a.q.r.a.r.a.r.q.#.r.a.a.a.r.a.a.r.a.r.l.#.l.r.l.l.a.a.a.l.a.l.b.l.a.e.e.a.a.l.c.c.c.cQt.c.cQt.dQt.i.i.s.f.xQtQt.i.rQt.c.qQt.gQtQt",
+".#.i.f.g.h.i.fQt.i.#.#.c.r.a.l.l.j.j.j.j.j.j.e.j.e.e.j.e.j.e.j.e.j.j.j.l.j.e.a.a.a.a.a.c.c.c.c.c.r.#.rQt.q.i.g.f.r.a.a.a.a.b.b.a.l.b.l.#.e.l.e.e.e.e.e.j.j.j.k.j.j.j.j.e.e.e.e.b.l.e.l.b.a.a.a.c.a.aQt.a.c.c.c.d.a.a.aQt.#.c.q.a.#.c.#.#.c.#.#.#.a.a.a.l.a.a.a.a.a.a.l.a.a.a.a.#.l.a.a.#.a.a.c.#Qt.qQt.i.g.g.p.w.u.p.u.h.g.mQt.c.q.#.q.#.c.#.#.c.#.c.#.c.#.c.#.#.a.r.#.a.r.r.a.r.r.r.r.r.r.a.r.a.r.r.r.r.a.a.l.a.b.a.l.l.e.l.l.e.a.l.a.e.l.a.a.lQt.a.c.#.cQt.#.d.s.i.i.iQtQt.gQtQt.qQt.fQtQtQtQt",
+"QtQt.i.x.g.g.g.fQtQt.#.#.#.l.e.l.b.j.e.j.e.j.j.j.e.j.e.j.e.j.e.j.j.j.e.e.e.e.e.e.l.a.l.c.r.c.#.c.d.#.#.#QtQtQtQt.a.#.b.a.a.b.a.b.l.l.l.e.e.e.e.e.j.k.j.k.j.j.j.e.k.j.j.e.e.e.e.e.e.b.e.l.b.a.r.a.b.c.b.c.c.c.d.i.c.q.c.r.c.r.c.c.#Qt.#.c.#.#.c.#.a.#.a.#.l.r.b.a.l.a.#.a.a.l.a.a.l.b.l.a.a.a.#.#Qt.iQt.s.g.m.p.h.h.h.p.h.gQtQt.f.#Qt.cQt.#.q.c.#.c.#.a.#.a.#.a.#.c.r.#.r.#.a.#.r.r.#.a.r.#.a.r.#.a.#.#.a.l.a.a.a.a.l.a.e.a.l.b.l.a.a.e.l.e.l.a.a.a.a.a.c.cQtQtQt.i.i.s.f.sQtQtQtQtQtQt.iQtQtQt.f",
+"Qt.f.i.g.g.g.g.iQtQt.q.#.a.a.a.l.e.e.l.e.e.e.e.l.j.e.j.e.j.e.j.j.e.j.l.j.l.e.b.e.a.a.c.c.c.c.cQt.r.#.#.qQtQt.#.d.a.a.a.b.a.e.r.l.#.l.e.l.e.e.e.e.j.j.j.j.k.j.k.j.j.e.e.e.e.b.a.a.a.a.l.a.a.c.cQt.a.#.#.cQt.#QtQt.#.c.c.c.q.c.#Qt.#.#.c.#Qt.#.c.q.a.a.a.a.a.a.a.a.a.a.a.a.#.a.a.a.#.r.a.a.cQt.#QtQtQt.qQt.f.g.g.m.g.s.g.m.iQtQt.i.#Qt.#.q.c.#.#.c.r.a.a.a.a.a.a.a.r.r.c.r.#.r.a.#.r.r.r.#.r.a.a.r.r.a.r.r.a.a.l.a.l.e.l.l.e.l.l.e.a.a.l.a.l.e.a.l.a.a.#.c.r.cQt.c.i.m.i.iQtQt.gQtQt.i.fQtQt.i.g.q",
+".q.i.f.g.m.x.g.g.xQtQt.#.#.a.a.l.e.l.e.e.j.l.j.e.e.j.e.l.j.e.j.j.j.j.j.e.e.e.l.e.c.r.c.#.c.#QtQt.r.#.#.#.c.#.c.c.l.a.l.e.e.a.e.b.l.l.e.b.l.e.e.e.e.k.j.j.e.j.j.j.e.e.e.l.e.a.b.c.a.a.a.c.c.#.cQt.#.#QtQtQt.iQtQt.f.iQtQtQtQtQtQtQtQtQtQtQt.d.#Qt.a.a.r.a.a.r.a.r.#.c.a.a.a.c.a.c.r.a.#.#.a.#Qt.#.#QtQt.gQt.i.i.g.s.g.p.p.gQtQt.#.#.#.d.#.#.c.#.c.a.a.l.a.l.a.l.a.q.a.r.a.r.#.r.#.r.r.r.a.r.a.r.a.a.#.r.#.a.a.a.a.e.a.l.b.l.a.e.a.l.a.a.l.b.l.l.l.a.a.a.c.c.c.#Qt.i.i.g.i.gQt.q.iQtQtQtQtQtQt.f.f",
+".i.i.i.i.g.g.g.hQtQtQtQt.c.#.a.a.l.a.l.a.e.e.e.l.e.e.e.j.e.j.e.e.j.e.e.l.e.e.e.l.c.c.#.c.#QtQtQt.a.#.#.#.c.c.c.#.l.l.e.e.e.e.e.e.#.l.e.l.e.e.e.e.k.j.j.j.k.j.j.k.l.t.l.b.l.a.a.#.c.c.#Qt.#.#.dQtQtQtQt.iQt.f.fQtQtQtQtQt.iQt.iQtQt.iQt.iQt.#Qt.#.#.#.c.#.q.c.#.#.c.#.c.c.#Qt.c.#.#.r.a.#.i.#.iQt.i.qQt.qQt.s.f.i.s.i.m.v.h.gQt.#.c.#.q.#.d.#.#.c.a.#.a.a.a.a.a.a.a.r.#.r.a.r.a.r.r.r.q.r.r.#.r.a.#.r.a.r.a.a.l.a.e.l.a.l.a.e.l.l.a.l.l.a.l.e.a.e.a.l.c.#.c.i.d.i.i.i.i.iQtQt.fQt.i.xQt.qQt.f.i.i",
+".h.g.i.g.s.h.u.pQt.q.iQt.#.c.a.a.a.b.a.b.a.l.b.e.e.j.l.e.l.e.e.e.j.j.e.j.e.l.e.b.r.#.#QtQt.#QtQt.#.#.#.c.a.a.a.b.l.b.l.e.t.e.e.e.e.l.l.e.e.e.e.e.e.k.j.j.j.j.j.j.e.a.e.l.a.l.c.c.c.#.cQtQt.i.fQtQt.iQtQt.f.i.iQt.iQtQtQtQt.iQtQtQt.qQt.qQt.xQt.i.#.q.#.#.#.#.q.#.#.c.c.q.c.#.c.c.r.#.q.#.#QtQtQt.qQtQt.i.iQt.i.iQtQt.g.v.o.g.f.q.c.#.d.#.q.#Qt.#.a.a.a.a.l.l.l.l.r.r.#.a.#.#.#.r.#.r.r.a.r.a.a.r.r.#.r.a.a.a.a.a.e.a.l.a.a.l.a.e.l.e.a.l.a.l.e.l.a.a.c.c.#.c.#Qt.i.g.s.i.g.q.iQt.iQtQtQt.s.i.m.i",
+".h.g.i.g.h.h.p.p.i.fQtQtQt.c.a.a.a.e.a.e.a.e.e.l.e.e.e.j.e.j.l.j.e.j.e.l.e.a.a.a.#Qt.qQtQtQtQtQt.#.c.#.c.l.a.e.e.l.j.j.j.j.j.e.e.l.b.e.l.e.e.e.e.j.j.j.j.k.j.j.k.l.l.l.a.a.a.#.r.#.c.#QtQtQtQt.fQt.q.i.i.s.g.g.gQtQtQtQtQtQtQt.s.q.x.q.q.s.q.i.qQtQt.i.#Qt.#Qt.#.d.qQt.cQt.#Qt.#Qt.#.#.#.i.#QtQt.i.iQt.qQt.i.qQt.g.i.m.p.v.p.h.i.c.#.#.iQt.#.#.c.a.a.a.a.b.a.b.a.c.r.#.r.r.r.a.r.r.r.r.#.a.r.a.a.r.a.#.r.a.#.a.a.l.l.a.a.l.a.e.l.b.l.e.a.l.a.e.l.a.a.a.#Qt.cQtQt.i.i.i.iQtQt.f.q.i.i.i.i.i.f.g.g",
+".g.h.i.x.i.g.p.p.s.iQtQt.c.q.a.a.r.a.a.a.b.a.b.e.l.j.j.e.j.l.e.e.j.j.e.e.e.l.b.b.#.#Qt.#QtQtQtQt.cQt.a.a.a.e.j.e.j.j.e.j.e.k.j.e.l.l.l.j.e.e.e.e.e.k.j.k.e.j.j.j.l.l.a.l.r.c.a.c.cQt.c.cQtQtQt.f.qQtQt.i.i.g.g.gQtQtQt.qQt.sQtQtQtQtQtQtQtQtQtQt.i.#QtQtQt.#Qt.#Qt.#.d.#QtQt.d.#.#.#.q.#Qt.iQtQt.q.i.q.iQt.x.f.xQt.f.g.w.p.u.g.i.#Qt.#QtQt.#Qt.#.a.#.b.a.#.b.a.a.r.a.r.a.r.c.r.#.r.r.#.a.r.#.a.r.#.r.#.r.a.a.a.l.b.a.l.a.#.a.a.l.l.e.l.a.l.a.l.e.a.#.#.c.c.c.#Qt.i.i.sQtQtQt.iQt.qQt.q.i.i.i.g.g",
+"QtQtQtQtQtQt.d.fQtQt.i.iQtQtQtQt.#.c.l.a.l.a.b.e.e.e.e.e.e.e.e.e.t.j.l.l.a.c.cQt.q.q.f.qQt.iQtQt.a.b.a.e.e.e.l.j.j.j.j.j.k.e.e.e.l.l.b.l.l.j.e.e.e.e.b.e.e.e.e.e.e.e.e.l.b.e.a.a.a.b.a.c.c.c.c.c.#.#.gQt.fQt.fQtQtQtQt.iQtQtQtQtQt.iQtQt.iQtQt.i.d.#.q.d.#QtQtQt.q.q.q.q.q.q.q.q.iQtQtQtQtQtQt.iQt.#.dQtQtQt.i.g.i.xQt.s.g.v.p.h.u.gQt.x.#.a.a.#.a.a.a.a.b.a.a.r.a.r.#.a.a.#.r.a.r.#.r.r.a.r.r.a.r.r.a.r.a.r.a.a.r.a.#.a.l.l.l.e.e.l.e.e.e.e.e.l.a.a.a.r.#.#.d.#.f.q.fQt.q.f.fQt.i.qQtQtQtQtQt.c",
+"Qt.#QtQtQt.gQt.d.#.iQtQtQtQtQtQt.c.#.a.a.a.a.a.e.e.e.e.e.e.e.e.e.e.l.e.l.a.c.#.d.q.q.i.qQtQtQtQt.b.c.a.b.l.e.j.e.j.k.j.k.j.e.e.e.l.l.l.l.e.e.e.e.b.e.e.e.e.b.e.b.j.j.e.e.l.e.a.r.a.c.b.c.c.c.c.c.c.cQtQtQtQtQt.fQtQtQtQtQtQtQt.i.fQt.fQtQt.iQtQt.#.d.#Qt.qQt.#.i.q.x.q.qQt.dQt.dQtQtQt.#Qt.qQtQt.#.iQt.q.iQt.iQt.iQt.g.i.w.A.z.u.p.g.s.qQt.q.a.c.a.a.b.a.a.a.a.a.a.a.a.r.a.r.a.#.a.r.a.a.r.a.r.a.r.c.rQt.r.a.a.l.a.l.r.l.l.l.l.l.e.e.e.l.b.e.l.b.a.r.a.a.c.#.c.#Qt.sQtQt.i.f.f.iQt.#.i.qQtQt.c.#",
+".#Qt.#QtQt.c.dQt.r.#.#Qt.qQtQtQt.#.c.#.c.a.a.b.a.e.e.e.e.e.e.l.e.l.#.l.a.c.cQtQt.i.q.iQtQt.q.fQt.a.b.a.e.e.e.j.e.j.j.k.e.e.e.e.b.l.b.l.l.e.l.e.e.e.e.e.e.e.e.e.e.j.e.j.j.e.e.e.e.e.e.a.b.c.a.r.c.#.#QtQtQtQtQtQt.#.c.#.c.c.#.c.#.#.q.#.qQt.#Qt.q.#.#.#.r.aQt.#Qt.#QtQtQt.q.iQtQt.q.d.q.d.#.d.d.q.r.r.r.q.#QtQtQt.s.i.i.m.h.A.z.y.g.p.p.qQtQt.#.a.#.a.a.#.a.a.a.a.a.r.a.a.r.a.r.a.r.#.a.r.a.r.a.r.a.r.r.r.a.r.a.r.a.r.a.a.l.l.l.l.t.l.b.l.l.l.l.l.a.#.r.a.r.c.#.d.q.iQt.qQt.iQt.f.x.qQtQt.#.#.c.#",
+".c.#.#Qt.c.#.c.c.#.c.iQtQt.iQtQtQtQt.#.c.#.c.c.a.c.a.c.a.c.a.b.a.a.r.c.#.cQtQt.i.q.qQt.iQtQt.fQt.c.c.a.b.e.e.e.e.j.k.j.e.e.e.b.l.l.l.l.l.b.e.e.e.e.e.e.e.j.e.e.e.j.j.j.e.j.e.b.e.a.e.b.a.b.c.c.c.d.c.#.f.#.c.c.#.c.c.c.c.#.c.c.c.a.c.c.c.a.c.#.c.r.a.r.a.a.#.#.#.#Qt.#.#.#.#.#.#.r.d.#.r.r.#.r.#.r.q.r.#.#.d.i.d.i.i.m.h.m.u.A.C.g.p.u.i.i.q.i.c.a.a.a.a.a.a.#.a.l.a.a.r.#.a.a.r.#.a.r.a.r.a.r.a.q.r.c.r.#.a.a.a.l.r.b.l.l.l.l.l.e.l.a.l.a.a.l.l.r.l.r.#.c.#.c.#.iQt.i.s.i.f.s.f.i.xQt.#Qt.cQt.c",
+".#.#Qt.cQt.c.c.c.#.c.#.c.#QtQtQtQtQtQtQt.q.c.#.a.c.c.c.c.c.c.c.c.#.c.#.cQtQtQtQt.i.q.s.qQt.q.fQt.b.a.b.e.l.e.j.e.j.j.e.e.e.e.a.b.l.l.l.l.e.l.e.e.j.k.e.k.e.k.j.j.j.j.e.j.j.e.j.e.e.e.l.b.a.a.c.a.c.#QtQt.#.d.#.c.a.a.a.a.a.a.a.a.#.a.#.a.a.#.a.a.b.l.a.#.a.a.#.a.#.#.#.c.#.#.#.#.q.r.r.r.r.r.#.r.r.r.r.q.r.#.#.q.i.i.i.m.g.u.A.C.h.h.h.u.iQtQtQt.#.c.c.c.c.c.c.#.a.r.#.a.r.a.r.a.r.#.a.r.a.r.a.r.a.r.a.r.a.r.a.l.r.a.r.l.l.l.e.l.a.a.a.a.a.l.a.a.l.l.a.r.c.#QtQt.f.x.i.f.i.g.f.i.i.i.i.i.#.c.#.#",
+".a.r.a.#.q.c.#.c.a.a.c.c.c.c.c.d.i.s.qQtQtQt.c.c.#.c.c.#.c.c.#.cQt.#QtQtQt.iQtQtQt.qQt.i.f.i.fQt.b.a.c.e.b.j.e.l.e.e.l.e.a.a.c.a.l.l.b.l.e.e.e.e.j.j.j.j.k.j.j.j.j.j.j.j.j.j.e.j.t.e.e.e.a.b.a.b.#.dQtQt.c.r.a.r.a.a.a.l.l.a.a.a.l.l.l.b.l.l.l.l.l.b.l.e.a.a.a.r.#.a.c.#.c.aQt.c.r.r.r.r.#.r.#.r.r.#.r.a.#.q.#.#.sQt.s.f.s.p.z.G.h.h.h.h.m.iQt.q.c.q.#.#.q.#.#.#.a.r.a.r.l.a.a.r.a.r.r.a.r.a.r.a.r.#.#.c.r.a.r.a.l.l.l.l.l.l.l.l.l.a.r.#.a.a.a.a.l.l.l.a.r.cQtQt.q.i.f.s.i.i.f.m.g.m.iQtQt.#.#.a",
+".r.a.r.c.#.c.a.c.a.l.a.#.a.#.c.#QtQt.iQtQtQtQtQt.#Qt.#Qt.#QtQt.#QtQtQtQtQtQtQtQt.q.i.q.fQt.qQtQt.a.b.a.e.l.e.e.e.l.l.e.l.a.a.a.#.l.l.l.l.e.l.e.e.k.k.j.k.j.j.k.j.k.0.j.j.e.j.j.e.e.e.t.e.a.b.a.cQt.#Qt.#.#.a.a.b.l.e.l.e.e.l.b.l.e.l.l.l.e.l.e.e.j.e.e.e.e.e.b.b.a.a.a.a.a.#.a.a.#.a.a.a.a.a.a.#.a.a.#.c.c.c.c.c.q.#.i.i.i.m.o.n.o.p.h.p.h.i.i.fQtQtQtQt.dQt.c.c.a.r.a.a.r.#.r.a.#.#.a.r.a.r.a.r.a.r.r.r.a.#.a.l.l.l.l.l.l.l.l.l.a.a.l.a.l.r.l.l.l.l.a.r.c.#.#.i.f.i.s.i.f.g.i.m.p.m.i.iQt.c.#.a",
+".r.a.r.a.a.c.#.a.a.a.l.c.c.a.c.c.f.i.f.iQtQt.#QtQtQtQtQtQtQtQtQt.iQtQtQtQtQtQtQt.q.q.q.iQtQtQtQt.c.b.c.a.e.j.e.l.b.l.l.a.a.a.a.c.l.l.l.l.e.j.e.e.j.j.k.j.j.k.k.j.0.k.j.j.j.j.j.j.j.e.e.e.a.a.b.a.c.fQt.c.#.r.l.l.e.l.b.e.e.l.e.e.l.e.e.e.e.e.l.b.j.j.j.j.e.r.e.e.a.a.a.b.a.a.a.a.a.b.a.#.a.a.a.a.r.e.b.b.cQt.cQt.d.#.#.q.f.i.u.n.o.n.h.h.h.m.gQt.cQtQtQtQt.d.#.#.#.a.r.#.a.a.r.a.r.r.a.r.a.r.a.r.a.r.c.r.a.r.r.a.l.l.l.l.e.l.l.a.l.r.a.r.a.l.a.l.l.l.r.a.a.c.cQt.i.i.f.i.s.g.i.g.u.h.gQt.#.#.r.a"};
diff --git a/tests/auto/gui/image/qimagewriter/images/ship63.pbm b/tests/auto/gui/image/qimagewriter/images/ship63.pbm
new file mode 100644
index 0000000000..4da971a2d7
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/ship63.pbm
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/teapot.ppm b/tests/auto/gui/image/qimagewriter/images/teapot.ppm
new file mode 100644
index 0000000000..b8ab85f3a5
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/teapot.ppm
@@ -0,0 +1,31 @@
+P6
+256 256
+255
+\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0 cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Ĉg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh>!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*­a(­`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i>!pA"tD"wF$yH&xH&tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X<(F-a: e<!h>!j@#k@$h>"d<!c=$hD-fF2[<)K0@);'5$Ë‚VÇ€V¿|U_LKYIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À…_O·xTÉ‚Wó«€ûµ‹Ö’k¼|X×>µf-¨^(¡Z'šW&–T&œN>)F-J/b; g>#nD(jB&c<!b=%jH2_A/I0!<(8&5$”J¥Y’S%8&;'?)E,<:HA=HE?IJAISFJYIKXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À£nRÁ}UܘqÊŠe±vU²e,™V&¥V†C €@ |> y< u: r9 o7 l6
+j5
+h4
+g3
+5$D,K/b; h>"wM1tK.e="a<#cA,U8&E-<(9&.!a0 b1 c1    
+
++3#@)46G<:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&‰N$|> u: p8 k5
+f3
+a0 _/ ]. [- I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c<!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh>!a: X/K%
+g3
+a0 Z- \/ T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d<!yF#O+€N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe<!X/
+^/ V+Q(L&I$r9  TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F
+
+X&pUMuWMwXNxXN<:H<:H<:H<:H<;H<;H<;H<;H=;H=;H=;H=;H>;H>;H?<H@<HA=HC>HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$
+›W&rVMvWNyYNzYN|ZN}[N}[N><H?<H?<H?<H?<H?<H@<H@<H@<HA=HA=HB=HC>HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T%
+
+ 
+@%<-$G?@…pfdNLuWM\NdNL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJvWN‰aP./01„E}[N]O…_Oˆ`O‰aP‹bPŒbPcPcPŽcPdPdPdPeP‘eP’eP’eP“fP“fQ”fQ•gQ•gQ–gQ–hQ—hQ˜hQ™iQšiQ›jQœjQkQkRžlRŸlRžY&¤\'¨^'µ^½bÀcÃeÇi ÄgÀc½b¼a¹`µ^´]¯X¢[' Z'žY&¢mR¡mR¡mR lRŸlRŸlRžkRkQœkQœjQ›jQšjQšiQ™iQ™iQ˜iQ˜hQ—hQ—hQ—hQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘ePdPcP‰aP—O
+ B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P) {dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6
+ 
+$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQeP m6
+†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(­V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(­`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0 ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B #C, 8&H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ
+‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU­`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z- œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&D2 @*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQ
+!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrS­sS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[Ɇ_΋dÓ‘jÔ“mÔ“nБlÊŒhĆd½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&/F-3F47G6%>" Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\͈_ÑŒdÙ”láuç£|쩂ſt명æ¦ÞŸ{Õ—sËŽl†d¹^³yZ­uW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&D#.E,3F46G;'<(D"iB(VGJ]KK`LK[JKB>H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XɃZË…[͇^ЊaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÇf»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7 ,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnГqÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcˈaɆ^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YɃ[Ê…\͇_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}꧀멃몄騃奀ߠ|Ù›wÓ•rÌmƉh¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?<HA*E$ i@$ZIKaMLbML[JK;:H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N]O„^O†`O‰aO‹bPŽcPdP’eP”fQ–gQ˜hQšiQœkRžlS mT£oU¦rWªuZ¯y]´~aºƒfŠlË’sÔšzÜ¡€ã§†è«‰ë®‹í¯Œí®‹ë¬ˆè¨„ã£~ßžyÚ™tÖ•oÒjÎŒfˈbÈ…_ƃ\ÅZÄ€YÃXÂWÂ~WÂ~WÂ~WÃXÀXÄ€YÅZƃ\Ç…^Ɇ`ˈbÌŠdÍ‹fÎgÎŽiÎŽjÎŽjÍŽjËŒiljgÆd¿ƒaº^¸}]¶|\´{[²yZ°xY®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRkR›jQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aO†_Oƒ^O€\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?<HG-E&b;!YIK`MLdOM`LKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlRºyTÄ~UÊ‚XʃYÄXº{W­tUšW'¢[(—hQ lRcP€\OhQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N‚]O„_O‡`O‰aPŒbPŽcPdP’fP”gQ–hQ˜iQšjRœkRžlS¡nT¤pU§sW«vZ°z]µb»„gŠlÉ‘sИyØžÞ¤…ã©Šè­ì±ï³‘ﳑ뭊穅⣀ݞzؘtÒ“nÎiɉdÆ…`Â]Á€[¿~Y¾}X½|W½|V¼{V¼{V¼{V¼{V¼{V¼|W¼|W½}X½}Y½~Z½~Z¼~Z»}[º}[º}[º~\º~\º~]º~]¹~]¸~]·}]¶|\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS mRŸlRkR›jQšiQ˜hQ–gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D>IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VΈ`遲ޜv¾€]ªqS–LŽG|> g3
+S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gËmÊ’sјzØŸ€Þ¤…ã©Šè­ê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlljgÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h>!]KKfQOgQN_LKD>I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeï­ˆô´Õ—u¶|\ Z'™LˆD |>
+
+ &3#.$-% .% .& /&!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&(+"(!'
+ %' %$#" ! !$ 
diff --git a/tests/auto/gui/image/qimagewriter/images/teapot.tiff b/tests/auto/gui/image/qimagewriter/images/teapot.tiff
new file mode 100644
index 0000000000..20845c6e32
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/teapot.tiff
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/images/trolltech.gif b/tests/auto/gui/image/qimagewriter/images/trolltech.gif
new file mode 100644
index 0000000000..f674369efc
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/images/trolltech.gif
Binary files differ
diff --git a/tests/auto/gui/image/qimagewriter/qimagewriter.pro b/tests/auto/gui/image/qimagewriter/qimagewriter.pro
new file mode 100644
index 0000000000..0fc40d0f0a
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/qimagewriter.pro
@@ -0,0 +1,25 @@
+load(qttest_p4)
+QT += widgets
+SOURCES += tst_qimagewriter.cpp
+MOC_DIR=tmp
+!contains(QT_CONFIG, no-tiff):DEFINES += QTEST_HAVE_TIFF
+win32-msvc:QMAKE_CXXFLAGS -= -Zm200
+win32-msvc:QMAKE_CXXFLAGS += -Zm800
+
+wince*: {
+ addFiles.files = images\\*.*
+ addFiles.path = images
+ DEPLOYMENT += addFiles
+ DEFINES += SRCDIR=\\\".\\\"
+} else:symbian {
+ addFiles.files = images\\*.*
+ addFiles.path = images
+ DEPLOYMENT += addFiles
+ qt_not_deployed {
+ imagePlugins.files = qjpeg.dll qtiff.dll
+ imagePlugins.path = imageformats
+ DEPLOYMENT += imagePlugins
+ }
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD\\\"
+}
diff --git a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
new file mode 100644
index 0000000000..b119763723
--- /dev/null
+++ b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
@@ -0,0 +1,628 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+
+#include <QDebug>
+#include <QFile>
+#include <QImage>
+#include <QImageReader>
+#include <QImageWriter>
+#include <QLabel>
+#include <QPainter>
+#include <QSet>
+
+#if defined(Q_OS_SYMBIAN)
+# define SRCDIR ""
+#endif
+typedef QMap<QString, QString> QStringMap;
+typedef QList<int> QIntList;
+Q_DECLARE_METATYPE(QImage)
+Q_DECLARE_METATYPE(QStringMap)
+Q_DECLARE_METATYPE(QIntList)
+Q_DECLARE_METATYPE(QImageWriter::ImageWriterError)
+Q_DECLARE_METATYPE(QIODevice *)
+Q_DECLARE_METATYPE(QImage::Format)
+
+//TESTED_FILES=
+
+class tst_QImageWriter : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QImageWriter();
+ virtual ~tst_QImageWriter();
+
+public slots:
+ void init();
+ void cleanup();
+
+private slots:
+ void getSetCheck();
+ void writeImage_data();
+ void writeImage();
+ void writeImage2_data();
+ void writeImage2();
+ void supportedFormats();
+
+ void readWriteNonDestructive_data();
+ void readWriteNonDestructive();
+
+#if defined QTEST_HAVE_TIFF
+ void largeTiff();
+#endif
+
+ void writeToInvalidDevice();
+
+ void supportsOption_data();
+ void supportsOption();
+
+ void saveWithNoFormat_data();
+ void saveWithNoFormat();
+
+ void resolution_data();
+ void resolution();
+
+ void saveToTemporaryFile();
+};
+#ifdef Q_OS_SYMBIAN
+static const QLatin1String prefix(SRCDIR "images/");
+#else
+static const QLatin1String prefix(SRCDIR "/images/");
+#endif
+static void initializePadding(QImage *image)
+{
+ int effectiveBytesPerLine = (image->width() * image->depth() + 7) / 8;
+ int paddingBytes = image->bytesPerLine() - effectiveBytesPerLine;
+ if (paddingBytes == 0)
+ return;
+ for (int y = 0; y < image->height(); ++y) {
+ qMemSet(image->scanLine(y) + effectiveBytesPerLine, 0, paddingBytes);
+ }
+}
+
+// Testing get/set functions
+void tst_QImageWriter::getSetCheck()
+{
+ QImageWriter obj1;
+ // QIODevice * QImageWriter::device()
+ // void QImageWriter::setDevice(QIODevice *)
+ QFile *var1 = new QFile;
+ obj1.setDevice(var1);
+
+ QCOMPARE((QIODevice *) var1, obj1.device());
+ // The class should possibly handle a 0-pointer as a device, since
+ // there is a default contructor, so it's "handling" a 0 device by default.
+ // For example: QMovie::setDevice(0) works just fine
+ obj1.setDevice((QIODevice *)0);
+ QCOMPARE((QIODevice *) 0, obj1.device());
+ delete var1;
+
+ // int QImageWriter::quality()
+ // void QImageWriter::setQuality(int)
+ obj1.setQuality(0);
+ QCOMPARE(0, obj1.quality());
+ obj1.setQuality(INT_MIN);
+ QCOMPARE(INT_MIN, obj1.quality());
+ obj1.setQuality(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.quality());
+
+ // int QImageWriter::compression()
+ // void QImageWriter::setCompression(int)
+ obj1.setCompression(0);
+ QCOMPARE(0, obj1.compression());
+ obj1.setCompression(INT_MIN);
+ QCOMPARE(INT_MIN, obj1.compression());
+ obj1.setCompression(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.compression());
+
+ // float QImageWriter::gamma()
+ // void QImageWriter::setGamma(float)
+ obj1.setGamma(0.0f);
+ QCOMPARE(0.0f, obj1.gamma());
+ obj1.setGamma(1.1f);
+ QCOMPARE(1.1f, obj1.gamma());
+}
+
+tst_QImageWriter::tst_QImageWriter()
+{
+}
+
+tst_QImageWriter::~tst_QImageWriter()
+{
+ QDir dir(prefix);
+ QStringList filesToDelete = dir.entryList(QStringList() << "gen-*" , QDir::NoDotAndDotDot | QDir::Files);
+ foreach( QString file, filesToDelete) {
+ QFile::remove(dir.absoluteFilePath(file));
+ }
+
+}
+
+void tst_QImageWriter::init()
+{
+}
+
+void tst_QImageWriter::cleanup()
+{
+}
+
+void tst_QImageWriter::writeImage_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<bool>("lossy");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false << QByteArray("bmp");
+ QTest::newRow("BMP: font") << QString("font.bmp") << false << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << QString("marble.xpm") << false << QByteArray("xpm");
+ QTest::newRow("PNG: kollada") << QString("kollada.png") << false << QByteArray("png");
+ QTest::newRow("PPM: teapot") << QString("teapot.ppm") << false << QByteArray("ppm");
+ QTest::newRow("PBM: ship63") << QString("ship63.pbm") << true << QByteArray("pbm");
+ QTest::newRow("XBM: gnus") << QString("gnus.xbm") << false << QByteArray("xbm");
+ QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg");
+#if defined QTEST_HAVE_TIFF
+ QTest::newRow("TIFF: teapot") << QString("teapot.tiff") << false << QByteArray("tiff");
+#endif
+}
+
+void tst_QImageWriter::writeImage()
+{
+ QFETCH(QString, fileName);
+ QFETCH(bool, lossy);
+ QFETCH(QByteArray, format);
+
+ QImage image;
+ {
+ QImageReader reader(prefix + fileName);
+ image = reader.read();
+ QVERIFY2(!image.isNull(), qPrintable(reader.errorString()));
+ }
+ {
+ QImageWriter writer(prefix + "gen-" + fileName, format);
+ QVERIFY(writer.write(image));
+ }
+
+ {
+ // Shouldn't be able to write to read-only file
+ QFile sourceFile(prefix + "gen-" + fileName);
+ QFile::Permissions permissions = sourceFile.permissions();
+ QVERIFY(sourceFile.setPermissions(QFile::ReadOwner | QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther));
+
+ QImageWriter writer(prefix + "gen-" + fileName, format);
+ QVERIFY(!writer.write(image));
+
+ QVERIFY(sourceFile.setPermissions(permissions));
+ }
+
+ QImage image2;
+ {
+ QImageReader reader(prefix + "gen-" + fileName);
+ image2 = reader.read();
+ QVERIFY(!image2.isNull());
+ }
+ if (!lossy) {
+ QCOMPARE(image, image2);
+ } else {
+ QCOMPARE(image.format(), image2.format());
+ QCOMPARE(image.depth(), image2.depth());
+ }
+}
+
+void tst_QImageWriter::writeImage2_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+ QTest::addColumn<QImage>("image");
+
+ const QStringList formats = QStringList() << "bmp" << "xpm" << "png"
+ << "ppm"; //<< "jpeg";
+ QImage image0(70, 70, QImage::Format_ARGB32);
+ image0.fill(QColor(Qt::red).rgb());
+
+ QImage::Format imgFormat = QImage::Format_Mono;
+ while (imgFormat != QImage::NImageFormats) {
+ QImage image = image0.convertToFormat(imgFormat);
+ initializePadding(&image);
+ foreach (const QString format, formats) {
+ const QString fileName = QString("solidcolor_%1.%2").arg(imgFormat)
+ .arg(format);
+ QTest::newRow(fileName.toLatin1()) << fileName
+ << format.toLatin1()
+ << image;
+ }
+ imgFormat = QImage::Format(int(imgFormat) + 1);
+ }
+}
+
+#if defined QTEST_HAVE_TIFF
+void tst_QImageWriter::largeTiff()
+{
+#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
+ QImage img(4096, 2048, QImage::Format_ARGB32);
+
+ QPainter p(&img);
+ img.fill(0x0);
+ p.fillRect(0, 0, 4096, 2048, QBrush(Qt::CrossPattern));
+ p.end();
+
+ QByteArray array;
+ QBuffer writeBuffer(&array);
+ writeBuffer.open(QIODevice::WriteOnly);
+
+ QImageWriter writer(&writeBuffer, "tiff");
+ QVERIFY(writer.write(img));
+
+ writeBuffer.close();
+
+ QBuffer readBuffer(&array);
+ readBuffer.open(QIODevice::ReadOnly);
+
+ QImageReader reader(&readBuffer, "tiff");
+
+ QImage img2 = reader.read();
+ QVERIFY(!img2.isNull());
+
+ QCOMPARE(img, img2);
+#else
+ QWARN("not tested on Symbian/WinCE");
+#endif
+}
+#endif
+
+/*
+ Workaround for the equality operator for indexed formats
+ (which fails if the colortables are different).
+
+ Images must have the same format and size.
+*/
+static bool equalImageContents(const QImage &image1, const QImage &image2)
+{
+ switch (image1.format()) {
+ case QImage::Format_Mono:
+ case QImage::Format_Indexed8:
+ for (int y = 0; y < image1.height(); ++y)
+ for (int x = 0; x < image1.width(); ++x)
+ if (image1.pixel(x, y) != image2.pixel(x, y))
+ return false;
+ return true;
+ default:
+ return (image1 == image2);
+ }
+}
+
+void tst_QImageWriter::writeImage2()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+ QFETCH(QImage, image);
+
+ //we reduce the scope of writer so that it closes the associated file
+ // and QFile::remove can actually work
+ {
+ QImageWriter writer(fileName, format);
+ QVERIFY(writer.write(image));
+ }
+
+ QImage written;
+
+ //we reduce the scope of reader so that it closes the associated file
+ // and QFile::remove can actually work
+ {
+ QImageReader reader(fileName, format);
+ QVERIFY(reader.read(&written));
+ }
+
+ written = written.convertToFormat(image.format());
+ if (!equalImageContents(written, image)) {
+ qDebug() << "image" << image.format() << image.width()
+ << image.height() << image.depth()
+ << hex << image.pixel(0, 0);
+ qDebug() << "written" << written.format() << written.width()
+ << written.height() << written.depth()
+ << hex << written.pixel(0, 0);
+ }
+ QVERIFY(equalImageContents(written, image));
+
+ QVERIFY(QFile::remove(fileName));
+}
+
+void tst_QImageWriter::supportedFormats()
+{
+ QList<QByteArray> formats = QImageWriter::supportedImageFormats();
+ QList<QByteArray> sortedFormats = formats;
+ qSort(sortedFormats);
+
+ // check that the list is sorted
+ QCOMPARE(formats, sortedFormats);
+
+ QSet<QByteArray> formatSet;
+ foreach (QByteArray format, formats)
+ formatSet << format;
+
+ // check that the list does not contain duplicates
+ QCOMPARE(formatSet.size(), formats.size());
+}
+
+void tst_QImageWriter::readWriteNonDestructive_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+ QTest::addColumn<QImage::Format>("expectedFormat");
+ QTest::addColumn<bool>("grayscale");
+ QTest::newRow("tiff mono") << QImage::Format_Mono << QImage::Format_Mono << false;
+ QTest::newRow("tiff indexed") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << false;
+ QTest::newRow("tiff rgb32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 << false;
+ QTest::newRow("tiff grayscale") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << true;
+}
+
+void tst_QImageWriter::readWriteNonDestructive()
+{
+ QFETCH(QImage::Format, format);
+ QFETCH(QImage::Format, expectedFormat);
+ QFETCH(bool, grayscale);
+ QImage image = QImage(prefix + "colorful.bmp").convertToFormat(format);
+
+ if (grayscale) {
+ QVector<QRgb> colors;
+ for (int i = 0; i < 256; ++i)
+ colors << qRgb(i, i, i);
+ image.setColorTable(colors);
+ }
+
+ QVERIFY(image.save(prefix + "gen-readWriteNonDestructive.tiff"));
+
+ QImage image2 = QImage(prefix + "gen-readWriteNonDestructive.tiff");
+ QImage::Format readFormat = image2.format();
+ QCOMPARE(readFormat, expectedFormat);
+ QCOMPARE(image, image2);
+}
+
+void tst_QImageWriter::writeToInvalidDevice()
+{
+ QLatin1String fileName("/these/directories/do/not/exist/001.png");
+ {
+ QImageWriter writer(fileName);
+ QVERIFY(!writer.canWrite());
+ QCOMPARE(writer.error(), QImageWriter::DeviceError);
+ }
+ {
+ QImageWriter writer(fileName);
+ writer.setFormat("png");
+ QVERIFY(!writer.canWrite());
+ QCOMPARE(writer.error(), QImageWriter::DeviceError);
+ }
+ {
+ QImageWriter writer(fileName);
+ QImage im(10, 10, QImage::Format_ARGB32);
+ QVERIFY(!writer.write(im));
+ QCOMPARE(writer.error(), QImageWriter::DeviceError);
+ }
+ {
+ QImageWriter writer(fileName);
+ writer.setFormat("png");
+ QImage im(10, 10, QImage::Format_ARGB32);
+ QVERIFY(!writer.write(im));
+ QCOMPARE(writer.error(), QImageWriter::DeviceError);
+ }
+}
+
+void tst_QImageWriter::supportsOption_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QIntList>("options");
+
+ QTest::newRow("png") << QString("gen-black.png")
+ << (QIntList() << QImageIOHandler::Gamma
+ << QImageIOHandler::Description
+ << QImageIOHandler::Quality
+ << QImageIOHandler::Size);
+#if defined QTEST_HAVE_TIFF
+ QTest::newRow("tiff") << QString("gen-black.tiff")
+ << (QIntList() << QImageIOHandler::Size
+ << QImageIOHandler::CompressionRatio);
+#endif
+}
+
+void tst_QImageWriter::supportsOption()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QIntList, options);
+
+ QSet<QImageIOHandler::ImageOption> allOptions;
+ allOptions << QImageIOHandler::Size
+ << QImageIOHandler::ClipRect
+ << QImageIOHandler::Description
+ << QImageIOHandler::ScaledClipRect
+ << QImageIOHandler::ScaledSize
+ << QImageIOHandler::CompressionRatio
+ << QImageIOHandler::Gamma
+ << QImageIOHandler::Quality
+ << QImageIOHandler::Name
+ << QImageIOHandler::SubType
+ << QImageIOHandler::IncrementalReading
+ << QImageIOHandler::Endianness
+ << QImageIOHandler::Animation
+ << QImageIOHandler::BackgroundColor;
+
+ QImageWriter writer(prefix + fileName);
+ for (int i = 0; i < options.size(); ++i) {
+ QVERIFY(writer.supportsOption(QImageIOHandler::ImageOption(options.at(i))));
+ allOptions.remove(QImageIOHandler::ImageOption(options.at(i)));
+ }
+
+ foreach (QImageIOHandler::ImageOption option, allOptions)
+ QVERIFY(!writer.supportsOption(option));
+}
+
+void tst_QImageWriter::saveWithNoFormat_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+ QTest::addColumn<QImageWriter::ImageWriterError>("error");
+
+ QTest::newRow("garble") << prefix + QString("gen-out.garble") << QByteArray("jpeg") << QImageWriter::UnsupportedFormatError;
+ QTest::newRow("bmp") << prefix + QString("gen-out.bmp") << QByteArray("bmp") << QImageWriter::ImageWriterError(0);
+ QTest::newRow("xbm") << prefix + QString("gen-out.xbm") << QByteArray("xbm") << QImageWriter::ImageWriterError(0);
+ QTest::newRow("xpm") << prefix + QString("gen-out.xpm") << QByteArray("xpm") << QImageWriter::ImageWriterError(0);
+ QTest::newRow("png") << prefix + QString("gen-out.png") << QByteArray("png") << QImageWriter::ImageWriterError(0);
+ QTest::newRow("ppm") << prefix + QString("gen-out.ppm") << QByteArray("ppm") << QImageWriter::ImageWriterError(0);
+ QTest::newRow("pbm") << prefix + QString("gen-out.pbm") << QByteArray("pbm") << QImageWriter::ImageWriterError(0);
+#if defined QTEST_HAVE_TIFF
+ QTest::newRow("tiff") << prefix + QString("gen-out.tiff") << QByteArray("tiff") << QImageWriter::ImageWriterError(0);
+#endif
+}
+
+void tst_QImageWriter::saveWithNoFormat()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+ QFETCH(QImageWriter::ImageWriterError, error);
+
+ QImage niceImage(64, 64, QImage::Format_ARGB32);
+ qMemSet(niceImage.bits(), 0, niceImage.byteCount());
+
+ QImageWriter writer(fileName /* , 0 - no format! */);
+ if (error != 0) {
+ QVERIFY(!writer.write(niceImage));
+ QCOMPARE(writer.error(), error);
+ return;
+ }
+
+ QVERIFY2(writer.write(niceImage), qPrintable(writer.errorString()));
+
+ QImageReader reader(fileName);
+ QCOMPARE(reader.format(), format);
+
+ QVERIFY(reader.canRead());
+
+ QImage outImage = reader.read();
+ QVERIFY2(!outImage.isNull(), qPrintable(reader.errorString()));
+}
+
+void tst_QImageWriter::resolution_data()
+{
+ QTest::addColumn<QString>("filename");
+ QTest::addColumn<int>("expectedDotsPerMeterX");
+ QTest::addColumn<int>("expectedDotsPerMeterY");
+#if defined QTEST_HAVE_TIFF
+ QTest::newRow("TIFF: 100 dpi") << ("image_100dpi.tif") << qRound(100 * (100 / 2.54)) << qRound(100 * (100 / 2.54));
+ QTest::newRow("TIFF: 50 dpi") << ("image_50dpi.tif") << qRound(50 * (100 / 2.54)) << qRound(50 * (100 / 2.54));
+ QTest::newRow("TIFF: 300 dot per meter") << ("image_300dpm.tif") << 300 << 300;
+#endif
+}
+
+void tst_QImageWriter::resolution()
+{
+ QFETCH(QString, filename);
+ QFETCH(int, expectedDotsPerMeterX);
+ QFETCH(int, expectedDotsPerMeterY);
+
+ QImage image(prefix + QLatin1String("colorful.bmp"));
+ image.setDotsPerMeterX(expectedDotsPerMeterX);
+ image.setDotsPerMeterY(expectedDotsPerMeterY);
+ const QString generatedFilepath = prefix + "gen-" + filename;
+ {
+ QImageWriter writer(generatedFilepath);
+ QVERIFY(writer.write(image));
+ }
+ QImageReader reader(generatedFilepath);
+ const QImage generatedImage = reader.read();
+
+ QCOMPARE(expectedDotsPerMeterX, generatedImage.dotsPerMeterX());
+ QCOMPARE(expectedDotsPerMeterY, generatedImage.dotsPerMeterY());
+}
+
+void tst_QImageWriter::saveToTemporaryFile()
+{
+ QImage image(prefix + "kollada.png");
+ QVERIFY(!image.isNull());
+
+ {
+ // 1) Via QImageWriter's API, with a standard temp file name
+ QTemporaryFile file;
+ QVERIFY(file.open());
+ QImageWriter writer(&file, "PNG");
+ if (writer.canWrite())
+ QVERIFY(writer.write(image));
+ else
+ qWarning() << file.errorString();
+#if defined(Q_OS_WINCE)
+ file.reset();
+#endif
+ QCOMPARE(QImage(writer.fileName()), image);
+ }
+ {
+ // 2) Via QImage's API, with a standard temp file name
+ QTemporaryFile file;
+ QVERIFY(file.open());
+ QVERIFY(image.save(&file, "PNG"));
+ file.reset();
+ QImage tmp;
+ QVERIFY(tmp.load(&file, "PNG"));
+ QCOMPARE(tmp, image);
+ }
+ {
+ // 3) Via QImageWriter's API, with a named temp file
+ QTemporaryFile file("tempXXXXXX");
+ QVERIFY(file.open());
+ QImageWriter writer(&file, "PNG");
+ QVERIFY(writer.write(image));
+#if defined(Q_OS_WINCE)
+ file.reset();
+#endif
+ QCOMPARE(QImage(writer.fileName()), image);
+ }
+ {
+ // 4) Via QImage's API, with a named temp file
+ QTemporaryFile file("tempXXXXXX");
+ QVERIFY(file.open());
+ QVERIFY(image.save(&file, "PNG"));
+ file.reset();
+ QImage tmp;
+ QVERIFY(tmp.load(&file, "PNG"));
+ QCOMPARE(tmp, image);
+ }
+}
+
+QTEST_MAIN(tst_QImageWriter)
+#include "tst_qimagewriter.moc"
diff --git a/tests/auto/gui/image/qmovie/.gitignore b/tests/auto/gui/image/qmovie/.gitignore
new file mode 100644
index 0000000000..396e8cbc7d
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/.gitignore
@@ -0,0 +1 @@
+tst_qmovie
diff --git a/tests/auto/gui/image/qmovie/animations/comicsecard.gif b/tests/auto/gui/image/qmovie/animations/comicsecard.gif
new file mode 100644
index 0000000000..f064de065b
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/animations/comicsecard.gif
Binary files differ
diff --git a/tests/auto/gui/image/qmovie/animations/corrupt.gif b/tests/auto/gui/image/qmovie/animations/corrupt.gif
new file mode 100644
index 0000000000..c1545eb0ed
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/animations/corrupt.gif
Binary files differ
diff --git a/tests/auto/gui/image/qmovie/animations/dutch.mng b/tests/auto/gui/image/qmovie/animations/dutch.mng
new file mode 100644
index 0000000000..4917fdee7a
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/animations/dutch.mng
Binary files differ
diff --git a/tests/auto/gui/image/qmovie/animations/trolltech.gif b/tests/auto/gui/image/qmovie/animations/trolltech.gif
new file mode 100644
index 0000000000..df7eb92703
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/animations/trolltech.gif
Binary files differ
diff --git a/tests/auto/gui/image/qmovie/qmovie.pro b/tests/auto/gui/image/qmovie/qmovie.pro
new file mode 100644
index 0000000000..3e085ceeaf
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/qmovie.pro
@@ -0,0 +1,28 @@
+load(qttest_p4)
+QT += widgets
+SOURCES += tst_qmovie.cpp
+MOC_DIR=tmp
+
+!contains(QT_CONFIG, no-gif):DEFINES += QTEST_HAVE_GIF
+!contains(QT_CONFIG, no-jpeg):DEFINES += QTEST_HAVE_JPEG
+!contains(QT_CONFIG, no-mng):DEFINES += QTEST_HAVE_MNG
+
+wince*: {
+ addFiles.files = animations\\*
+ addFiles.path = animations
+ DEPLOYMENT += addFiles
+}
+
+RESOURCES += resources.qrc
+
+symbian: {
+ addFiles.files = animations\\*
+ addFiles.path = animations
+ DEPLOYMENT += addFiles
+
+ qt_not_deployed {
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll
+ imagePlugins.path = imageformats
+ DEPLOYMENT += imagePlugins
+ }
+}
diff --git a/tests/auto/gui/image/qmovie/resources.qrc b/tests/auto/gui/image/qmovie/resources.qrc
new file mode 100644
index 0000000000..ce459a0e7e
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/resources.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>animations/corrupt.gif</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/gui/image/qmovie/tst_qmovie.cpp b/tests/auto/gui/image/qmovie/tst_qmovie.cpp
new file mode 100644
index 0000000000..15c7f856b1
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/tst_qmovie.cpp
@@ -0,0 +1,225 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+
+#include <QIODevice>
+#include <QLabel>
+#include <QMovie>
+
+//TESTED_FILES=
+
+class tst_QMovie : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QMovie();
+ virtual ~tst_QMovie();
+
+public slots:
+ void init();
+ void cleanup();
+
+protected slots:
+ void exitLoopSlot();
+
+private slots:
+ void getSetCheck();
+ void construction();
+ void playMovie_data();
+ void playMovie();
+ void jumpToFrame_data();
+ void jumpToFrame();
+ void changeMovieFile();
+ void infiniteLoop();
+};
+
+// Testing get/set functions
+void tst_QMovie::getSetCheck()
+{
+ QMovie obj1;
+ // QIODevice * QMovie::device()
+ // void QMovie::setDevice(QIODevice *)
+ QFile *var1 = new QFile;
+ obj1.setDevice(var1);
+ QCOMPARE(obj1.device(), (QIODevice *)var1);
+ obj1.setDevice((QIODevice *)0);
+ QCOMPARE(obj1.device(), (QIODevice *)0);
+ delete var1;
+
+ // CacheMode QMovie::cacheMode()
+ // void QMovie::setCacheMode(CacheMode)
+ obj1.setCacheMode(QMovie::CacheMode(QMovie::CacheNone));
+ QCOMPARE(QMovie::CacheMode(QMovie::CacheNone), obj1.cacheMode());
+ obj1.setCacheMode(QMovie::CacheMode(QMovie::CacheAll));
+ QCOMPARE(QMovie::CacheMode(QMovie::CacheAll), obj1.cacheMode());
+
+ // int QMovie::speed()
+ // void QMovie::setSpeed(int)
+ obj1.setSpeed(0);
+ QCOMPARE(0, obj1.speed());
+ obj1.setSpeed(INT_MIN);
+ QCOMPARE(INT_MIN, obj1.speed());
+ obj1.setSpeed(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.speed());
+}
+
+tst_QMovie::tst_QMovie()
+{
+}
+
+tst_QMovie::~tst_QMovie()
+{
+
+}
+
+void tst_QMovie::init()
+{
+}
+
+void tst_QMovie::cleanup()
+{
+}
+
+void tst_QMovie::exitLoopSlot()
+{
+ QTestEventLoop::instance().exitLoop();
+}
+
+void tst_QMovie::construction()
+{
+ QMovie movie;
+ QCOMPARE(movie.device(), (QIODevice *)0);
+ QCOMPARE(movie.fileName(), QString());
+ QCOMPARE(movie.state(), QMovie::NotRunning);
+}
+
+void tst_QMovie::playMovie_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<int>("frameCount");
+#if defined(QTEST_HAVE_MNG) && !defined(Q_OS_WINCE)
+ // Qt/WinCE runs out of memory for this one...
+ QTest::newRow("home") << QString("animations/dutch.mng") << 10;
+#endif
+#ifdef QTEST_HAVE_GIF
+ QTest::newRow("comicsecard") << QString("animations/comicsecard.gif") << 5;
+ QTest::newRow("trolltech") << QString("animations/trolltech.gif") << 34;
+#endif
+}
+
+void tst_QMovie::playMovie()
+{
+ QFETCH(QString, fileName);
+ QFETCH(int, frameCount);
+
+ QMovie movie(fileName);
+
+ QCOMPARE(movie.state(), QMovie::NotRunning);
+ movie.setSpeed(1000);
+ movie.start();
+ QCOMPARE(movie.state(), QMovie::Running);
+ movie.setPaused(true);
+ QCOMPARE(movie.state(), QMovie::Paused);
+ movie.start();
+ QCOMPARE(movie.state(), QMovie::Running);
+ movie.stop();
+ QCOMPARE(movie.state(), QMovie::NotRunning);
+ movie.jumpToFrame(0);
+ QCOMPARE(movie.state(), QMovie::NotRunning);
+ movie.start();
+ QCOMPARE(movie.state(), QMovie::Running);
+
+ connect(&movie, SIGNAL(finished()), this, SLOT(exitLoopSlot()));
+
+ QLabel label;
+ label.setMovie(&movie);
+ label.show();
+
+ QTestEventLoop::instance().enterLoop(20);
+ QVERIFY2(!QTestEventLoop::instance().timeout(),
+ "Timed out while waiting for finished() signal");
+
+ QCOMPARE(movie.state(), QMovie::NotRunning);
+ QCOMPARE(movie.frameCount(), frameCount);
+}
+
+void tst_QMovie::jumpToFrame_data()
+{
+ playMovie_data();
+}
+
+void tst_QMovie::jumpToFrame()
+{
+ QFETCH(QString, fileName);
+ QMovie movie(fileName);
+ movie.start();
+ movie.stop();
+ QVERIFY(movie.jumpToFrame(-1) == false);
+ QVERIFY(movie.currentFrameNumber() == 0);
+}
+
+void tst_QMovie::changeMovieFile()
+{
+ QMovie movie("animations/comicsecard.gif");
+ movie.start();
+ movie.stop();
+ movie.setFileName("animations/trolltech.gif");
+ QVERIFY(movie.currentFrameNumber() == -1);
+}
+
+void tst_QMovie::infiniteLoop()
+{
+ QLabel label;
+ label.show();
+ QMovie *movie = new QMovie(QLatin1String(":animations/corrupt.gif"), QByteArray(), &label);
+ label.setMovie(movie);
+ movie->start();
+
+ QTestEventLoop::instance().enterLoop(1);
+ QTestEventLoop::instance().timeout();
+}
+
+QTEST_MAIN(tst_QMovie)
+#include "tst_qmovie.moc"
diff --git a/tests/auto/gui/image/qpicture/.gitignore b/tests/auto/gui/image/qpicture/.gitignore
new file mode 100644
index 0000000000..0f391ffb80
--- /dev/null
+++ b/tests/auto/gui/image/qpicture/.gitignore
@@ -0,0 +1 @@
+tst_qpicture
diff --git a/tests/auto/gui/image/qpicture/qpicture.pro b/tests/auto/gui/image/qpicture/qpicture.pro
new file mode 100644
index 0000000000..eb96b73487
--- /dev/null
+++ b/tests/auto/gui/image/qpicture/qpicture.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+QT += widgets
+SOURCES += tst_qpicture.cpp
+
+
+
diff --git a/tests/auto/gui/image/qpicture/tst_qpicture.cpp b/tests/auto/gui/image/qpicture/tst_qpicture.cpp
new file mode 100644
index 0000000000..8661a2b2d0
--- /dev/null
+++ b/tests/auto/gui/image/qpicture/tst_qpicture.cpp
@@ -0,0 +1,289 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include <qpicture.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <qdesktopwidget.h>
+#include <qapplication.h>
+#include <limits.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QPicture : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QPicture();
+
+private slots:
+ void getSetCheck();
+ void devType();
+ void paintingActive();
+ void boundingRect();
+ void swap();
+ void operator_lt_lt();
+
+ void save_restore();
+
+ void boundaryValues_data();
+ void boundaryValues();
+};
+
+// Testing get/set functions
+void tst_QPicture::getSetCheck()
+{
+ QPictureIO obj1;
+ // const QPicture & QPictureIO::picture()
+ // void QPictureIO::setPicture(const QPicture &)
+ // const char * QPictureIO::format()
+ // void QPictureIO::setFormat(const char *)
+ const char var2[] = "PNG";
+ obj1.setFormat(var2);
+ QCOMPARE(var2, obj1.format());
+ obj1.setFormat((char *)0);
+ // The format is stored internally in a QString, so return is always a valid char *
+ QVERIFY(QString(obj1.format()).isEmpty());
+
+ // const char * QPictureIO::parameters()
+ // void QPictureIO::setParameters(const char *)
+ const char var3[] = "Bogus data";
+ obj1.setParameters(var3);
+ QCOMPARE(var3, obj1.parameters());
+ obj1.setParameters((char *)0);
+ // The format is stored internally in a QString, so return is always a valid char *
+ QVERIFY(QString(obj1.parameters()).isEmpty());
+}
+
+tst_QPicture::tst_QPicture()
+{
+}
+
+void tst_QPicture::devType()
+{
+ QPicture p;
+ QCOMPARE( p.devType(), (int)QInternal::Picture );
+}
+
+void tst_QPicture::paintingActive()
+{
+ // actually implemented in QPainter but QPicture is a good
+ // example of an external paint device
+ QPicture p;
+ QVERIFY( !p.paintingActive() );
+ QPainter pt( &p );
+ QVERIFY( p.paintingActive() );
+ pt.end();
+ QVERIFY( !p.paintingActive() );
+}
+
+void tst_QPicture::boundingRect()
+{
+ QPicture p1;
+ // default value
+ QVERIFY( !p1.boundingRect().isValid() );
+
+ QRect r1( 20, 30, 5, 15 );
+ p1.setBoundingRect( r1 );
+ QCOMPARE( p1.boundingRect(), r1 );
+ p1.setBoundingRect(QRect());
+
+ QPainter pt( &p1 );
+ pt.drawLine( 10, 20, 110, 80 );
+ pt.end();
+
+ // assignment and copy constructor
+ QRect r2( 10, 20, 100, 60 );
+ QCOMPARE( p1.boundingRect(), r2 );
+ QPicture p2( p1 );
+ QCOMPARE( p1.boundingRect(), r2 );
+ QPicture p3;
+ p3 = p1;
+ QCOMPARE( p1.boundingRect(), r2 );
+
+ {
+ QPicture p4;
+ QPainter p(&p4);
+ p.drawLine(0, 0, 5, 0);
+ p.drawLine(0, 0, 0, 5);
+ p.end();
+
+ QRect r3(0, 0, 5, 5);
+ QCOMPARE(p4.boundingRect(), r3);
+ }
+}
+
+void tst_QPicture::swap()
+{
+ QPicture p1, p2;
+ QPainter(&p1).drawLine(0, 0, 5, 5);
+ QPainter(&p2).drawLine(0, 3, 3, 0);
+ QCOMPARE(p1.boundingRect(), QRect(0,0,5,5));
+ QCOMPARE(p2.boundingRect(), QRect(0,0,3,3));
+ p1.swap(p2);
+ QCOMPARE(p1.boundingRect(), QRect(0,0,3,3));
+ QCOMPARE(p2.boundingRect(), QRect(0,0,5,5));
+}
+
+// operator<< and operator>>
+void tst_QPicture::operator_lt_lt()
+{
+ // streaming of null pictures
+ {
+ QPicture pic1, pic2;
+ QByteArray ba( 100, 0 );
+ QDataStream str1( &ba, QIODevice::WriteOnly );
+ str1 << pic1;
+ QDataStream str2( &ba, QIODevice::ReadOnly );
+ str2 >> pic2;
+ QVERIFY( pic2.isNull() );
+ }
+
+ // picture with a simple line, checking bitwise equality
+ {
+ QPicture pic1, pic2;
+ QPainter p( &pic1 );
+ p.drawLine( 10, 20, 30, 40 );
+ p.end();
+ QByteArray ba( 10 * pic1.size(), 0 );
+ QDataStream str1( &ba, QIODevice::WriteOnly );
+ str1 << pic1;
+ QDataStream str2( &ba, QIODevice::ReadOnly );
+ str2 >> pic2;
+ QCOMPARE( pic1.size(), pic2.size() );
+ QVERIFY( memcmp( pic1.data(), pic2.data(), pic1.size() ) == 0 );
+ }
+}
+
+static QPointF scalePoint(const QPointF &point, QPaintDevice *sourceDevice, QPaintDevice *destDevice)
+{
+ return QPointF(point.x() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()),
+ point.y() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY()));
+}
+
+static QRectF scaleRect(const QRectF &rect, QPaintDevice *sourceDevice, QPaintDevice *destDevice)
+{
+ return QRectF(rect.left() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()),
+ rect.top() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY()),
+ rect.width() * qreal(destDevice->logicalDpiX()) / qreal(sourceDevice->logicalDpiX()),
+ rect.height() * qreal(destDevice->logicalDpiY()) / qreal(sourceDevice->logicalDpiY()));
+}
+
+static void paintStuff(QPainter *p)
+{
+ QPaintDevice *screenDevice = QApplication::desktop();
+ p->drawRect(scaleRect(QRectF(100, 100, 100, 100), screenDevice, p->device()));
+ p->save();
+ p->translate(scalePoint(QPointF(10, 10), screenDevice, p->device()));
+ p->restore();
+ p->drawRect(scaleRect(QRectF(100, 100, 100, 100), screenDevice, p->device()));
+}
+
+/* See task: 41469
+ Problem is that the state is not properly restored if the basestate of
+ the painter is different when the picture data was created compared to
+ the base state of the painter when it is played back.
+ */
+void tst_QPicture::save_restore()
+{
+ QPicture pic;
+ QPainter p;
+ p.begin(&pic);
+ paintStuff(&p);
+ p.end();
+
+ QPixmap pix1(300, 300);
+ pix1.fill(Qt::white);
+ p.begin(&pix1);
+ p.drawPicture(50, 50, pic);
+ p.end();
+
+ QPixmap pix2(300, 300);
+ pix2.fill(Qt::white);
+ p.begin(&pix2);
+ p.translate(50, 50);
+ paintStuff(&p);
+ p.end();
+
+ QVERIFY( pix1.toImage() == pix2.toImage() );
+}
+
+void tst_QPicture::boundaryValues_data()
+{
+ QTest::addColumn<int>("x");
+ QTest::addColumn<int>("y");
+ QTest::newRow("max x") << INT_MAX << 50;
+ QTest::newRow("max y") << 50 << INT_MAX;
+ QTest::newRow("max x and y") << INT_MAX << INT_MAX;
+
+ QTest::newRow("min x") << INT_MIN << 50;
+ QTest::newRow("min y") << 50 << INT_MIN;
+ QTest::newRow("min x and y") << INT_MIN << INT_MIN;
+
+ QTest::newRow("min x, max y") << INT_MIN << INT_MAX;
+ QTest::newRow("max x, min y") << INT_MAX << INT_MIN;
+
+}
+
+void tst_QPicture::boundaryValues()
+{
+ QPicture picture;
+
+ QPainter painter;
+ painter.begin(&picture);
+
+ QFETCH(int, x);
+ QFETCH(int, y);
+ painter.drawPoint(QPoint(x, y));
+
+ painter.end();
+
+
+}
+
+
+QTEST_MAIN(tst_QPicture)
+#include "tst_qpicture.moc"
diff --git a/tests/auto/gui/image/qpixmap/.gitignore b/tests/auto/gui/image/qpixmap/.gitignore
new file mode 100644
index 0000000000..8d4996f365
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/.gitignore
@@ -0,0 +1 @@
+tst_qpixmap
diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png
new file mode 100644
index 0000000000..7991e9fb17
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img1.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png
new file mode 100644
index 0000000000..dca6d97dc3
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_0/img2.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png
new file mode 100644
index 0000000000..31e6e1aaa0
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img1.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png
new file mode 100644
index 0000000000..0d48026898
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromImage/task31722_1/img2.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico
new file mode 100644
index 0000000000..dbb55cd4db
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp.ico
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png
new file mode 100644
index 0000000000..f23f39818c
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_16x16.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png
new file mode 100644
index 0000000000..293f1c5942
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_256x256.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png
new file mode 100644
index 0000000000..bfdb1fe035
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_32x32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png
new file mode 100644
index 0000000000..7dd2d13351
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_32bpp_48x48.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico
new file mode 100644
index 0000000000..4341a3355e
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp.ico
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png
new file mode 100644
index 0000000000..e9a995e19e
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_16x16.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png
new file mode 100644
index 0000000000..41ef57f94d
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_32x32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png
new file mode 100644
index 0000000000..35d60d138b
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/convertFromToHICON/icon_8bpp_48x48.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/designer.png b/tests/auto/gui/image/qpixmap/images/designer.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/designer.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png
new file mode 100644
index 0000000000..a4a19249c7
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png
new file mode 100644
index 0000000000..1506af5a7e
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_-10_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png
new file mode 100644
index 0000000000..8500ab1f5c
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png
new file mode 100644
index 0000000000..2145c6124c
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-10_dy_0_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_-128_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_-128_dy_0_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png
new file mode 100644
index 0000000000..728ee79153
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png
new file mode 100644
index 0000000000..e9d5850db7
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-10_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_-128_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_null.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_0_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png
new file mode 100644
index 0000000000..7c09b17830
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png
new file mode 100644
index 0000000000..70a63405e6
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_10_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_128_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png b/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_0_dy_1_null.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png
new file mode 100644
index 0000000000..85abadaf98
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png
new file mode 100644
index 0000000000..3e03450c01
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_0_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png
new file mode 100644
index 0000000000..315fbe087a
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_50_50_100_100.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png
new file mode 100644
index 0000000000..d91dc71217
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_10_dy_10_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_0_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_64_64_128_128.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_128_dy_128_x_y_w_h.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png b/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/images/dx_1_dy_0_null.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png
new file mode 100644
index 0000000000..55d8247cfc
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_argb32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif
new file mode 100644
index 0000000000..26a6da33df
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.gif
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png
new file mode 100644
index 0000000000..28cd2f06d1
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif
new file mode 100644
index 0000000000..86a3a2e17d
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif
new file mode 100644
index 0000000000..49ec77b39b
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.gif
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png
new file mode 100644
index 0000000000..09735a9752
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif
new file mode 100644
index 0000000000..f813c057d2
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_indexed8_with_alpha_animated.gif
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg
new file mode 100644
index 0000000000..70f39c2154
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png
new file mode 100644
index 0000000000..bca471d576
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/loadFromData/designer_rgb32.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmap/qpixmap.pro b/tests/auto/gui/image/qpixmap/qpixmap.pro
new file mode 100644
index 0000000000..fe156d547c
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/qpixmap.pro
@@ -0,0 +1,33 @@
+load(qttest_p4)
+
+QT += core-private gui-private widgets widgets-private
+
+SOURCES += tst_qpixmap.cpp
+wince*|symbian: {
+
+ task31722_0.files = convertFromImage/task31722_0/*.png
+ task31722_0.path = convertFromImage/task31722_0
+
+ task31722_1.files = convertFromImage/task31722_1/*.png
+ task31722_1.path = convertFromImage/task31722_1
+
+ icons.files = convertFromToHICON/*
+ icons.path = convertFromToHICON
+
+ loadFromData.files = loadFromData/*
+ loadFromData.path = loadFromData
+
+ DEPLOYMENT += task31722_0 task31722_1 icons loadFromData
+}
+
+wince*: {
+ DEFINES += SRCDIR=\\\".\\\"
+ DEPLOYMENT_PLUGIN += qico
+} else:symbian {
+ LIBS += -lfbscli.dll -lbitgdi.dll -lgdi.dll
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD\\\"
+ win32:LIBS += -lgdi32 -luser32
+}
+
+RESOURCES += qpixmap.qrc
diff --git a/tests/auto/gui/image/qpixmap/qpixmap.qrc b/tests/auto/gui/image/qpixmap/qpixmap.qrc
new file mode 100644
index 0000000000..99fde61a29
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/qpixmap.qrc
@@ -0,0 +1,29 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/designer.png</file>
+ <file>images/dx_0_dy_0_50_50_100_100.png</file>
+ <file>images/dx_0_dy_0_null.png</file>
+ <file>images/dx_0_dy_0_x_y_w_h.png</file>
+ <file>images/dx_0_dy_-10_50_50_100_100.png</file>
+ <file>images/dx_0_dy_10_50_50_100_100.png</file>
+ <file>images/dx_0_dy_-10_x_y_w_h.png</file>
+ <file>images/dx_0_dy_10_x_y_w_h.png</file>
+ <file>images/dx_0_dy_-128_x_y_w_h.png</file>
+ <file>images/dx_0_dy_128_x_y_w_h.png</file>
+ <file>images/dx_0_dy_1_null.png</file>
+ <file>images/dx_-10_dy_0_50_50_100_100.png</file>
+ <file>images/dx_10_dy_0_50_50_100_100.png</file>
+ <file>images/dx_-10_dy_0_x_y_w_h.png</file>
+ <file>images/dx_10_dy_0_x_y_w_h.png</file>
+ <file>images/dx_-10_dy_-10_50_50_100_100.png</file>
+ <file>images/dx_10_dy_10_50_50_100_100.png</file>
+ <file>images/dx_-10_dy_-10_x_y_w_h.png</file>
+ <file>images/dx_10_dy_10_x_y_w_h.png</file>
+ <file>images/dx_-128_dy_0_x_y_w_h.png</file>
+ <file>images/dx_128_dy_0_x_y_w_h.png</file>
+ <file>images/dx_128_dy_128_64_64_128_128.png</file>
+ <file>images/dx_-128_dy_-128_x_y_w_h.png</file>
+ <file>images/dx_128_dy_128_x_y_w_h.png</file>
+ <file>images/dx_1_dy_0_null.png</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
new file mode 100644
index 0000000000..38858e5503
--- /dev/null
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
@@ -0,0 +1,1787 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <qpixmap.h>
+#include <qbitmap.h>
+#include <qimage.h>
+#include <qimagereader.h>
+#include <qmatrix.h>
+#include <qdesktopwidget.h>
+#include <qpaintengine.h>
+#include <qtreewidget.h>
+#include <qsplashscreen.h>
+
+#include <qplatformpixmap_qpa.h>
+#include <private/qdrawhelper_p.h>
+
+#include <QSet>
+
+#ifdef Q_WS_WIN
+#include <windows.h>
+#endif
+
+#ifdef Q_WS_QWS
+#include <qscreen_qws.h>
+#endif
+
+#ifdef Q_OS_SYMBIAN
+#include <e32std.h>
+#include <fbs.h>
+#include <gdi.h>
+#include <bitdev.h>
+#if !defined(QT_NO_OPENVG)
+#include <QtOpenVG/qvg.h>
+#include <QtOpenVG/private/qpixmapdata_vg_p.h>
+#endif
+#endif
+
+#ifdef Q_WS_X11
+#include <QX11Info>
+#endif
+
+//TESTED_CLASS=
+//TESTED_FILES=
+#if defined(Q_OS_SYMBIAN)
+# define SRCDIR ""
+#endif
+Q_DECLARE_METATYPE(QImage::Format)
+
+class tst_QPixmap : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QPixmap();
+ virtual ~tst_QPixmap();
+
+
+public slots:
+ void init();
+ void cleanup();
+
+private slots:
+ void swap();
+
+ void fromImage_data();
+ void fromImage();
+
+ void fromUninitializedImage_data();
+ void fromUninitializedImage();
+
+ void convertFromImage_data();
+ void convertFromImage();
+
+ void testMetrics();
+
+ void scroll_data();
+ void scroll();
+
+ void fill_data();
+ void fill();
+ void fill_transparent();
+
+ void createMaskFromColor();
+
+ void mask();
+ void bitmapMask();
+ void setGetMask_data();
+ void setGetMask();
+ void cacheKey();
+ void drawBitmap();
+ void grabWidget();
+ void grabWindow();
+ void isNull();
+ void task_246446();
+
+ void convertFromImageNoDetach();
+ void convertFromImageDetach();
+
+#if defined(Q_WS_WIN)
+ void toWinHBITMAP_data();
+ void toWinHBITMAP();
+ void fromWinHBITMAP_data();
+ void fromWinHBITMAP();
+
+ void toWinHICON_data();
+ void toWinHICON();
+ void fromWinHICON_data();
+ void fromWinHICON();
+#endif
+
+#if defined(Q_OS_SYMBIAN)
+ void fromSymbianCFbsBitmap_data();
+ void fromSymbianCFbsBitmap();
+ void toSymbianCFbsBitmap_data();
+ void toSymbianCFbsBitmap();
+#endif
+
+ void onlyNullPixmapsOutsideGuiThread();
+ void refUnref();
+
+ void copy();
+ void depthOfNullObjects();
+
+ void transformed();
+ void transformed2();
+
+ void fromImage_crash();
+
+ void fromData();
+ void loadFromDataNullValues();
+
+ void loadFromDataImage_data();
+ void loadFromDataImage();
+
+ void fromImageReader_data();
+ void fromImageReader();
+
+ void fromImageReaderAnimatedGif_data();
+ void fromImageReaderAnimatedGif();
+
+ void preserveDepth();
+ void splash_crash();
+
+ void toImageDeepCopy();
+
+ void loadAsBitmapOrPixmap();
+
+#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG)
+ void vgImageReadBack();
+#endif
+ void scaled_QTBUG19157();
+};
+
+static bool lenientCompare(const QPixmap &actual, const QPixmap &expected)
+{
+ QImage expectedImage = expected.toImage().convertToFormat(QImage::Format_RGB32);
+ QImage actualImage = actual.toImage().convertToFormat(QImage::Format_RGB32);
+
+ if (expectedImage.size() != actualImage.size())
+ return false;
+
+ int size = actual.width() * actual.height();
+
+ int threshold = 2;
+#ifdef Q_WS_X11
+ if (QX11Info::appDepth() == 16)
+ threshold = 10;
+#endif
+
+ QRgb *a = (QRgb *)actualImage.bits();
+ QRgb *e = (QRgb *)expectedImage.bits();
+ for (int i = 0; i < size; ++i) {
+ QColor ca(a[i]);
+ QColor ce(e[i]);
+
+ bool result = true;
+
+ if (qAbs(ca.red() - ce.red()) > threshold)
+ result = false;
+ if (qAbs(ca.green() - ce.green()) > threshold)
+ result = false;
+ if (qAbs(ca.blue() - ce.blue()) > threshold)
+ result = false;
+
+ if (!result)
+ return false;
+ }
+
+ return true;
+}
+
+Q_DECLARE_METATYPE(QImage)
+Q_DECLARE_METATYPE(QPixmap)
+Q_DECLARE_METATYPE(QMatrix)
+Q_DECLARE_METATYPE(QBitmap)
+
+tst_QPixmap::tst_QPixmap()
+{
+}
+
+tst_QPixmap::~tst_QPixmap()
+{
+}
+
+void tst_QPixmap::init()
+{
+}
+
+void tst_QPixmap::cleanup()
+{
+}
+
+void tst_QPixmap::swap()
+{
+ QPixmap p1( 16, 16 ), p2( 32, 32 );
+ p1.fill( Qt::white );
+ p2.fill( Qt::black );
+ const qint64 p1k = p1.cacheKey();
+ const qint64 p2k = p2.cacheKey();
+ p1.swap(p2);
+ QCOMPARE(p1.cacheKey(), p2k);
+ QCOMPARE(p1.size(), QSize(32,32));
+ QCOMPARE(p2.cacheKey(), p1k);
+ QCOMPARE(p2.size(), QSize(16,16));
+}
+
+void tst_QPixmap::fromImage_data()
+{
+ bool is16bit = false;
+#ifdef Q_WS_X11
+ if (QX11Info::appDepth() == 16)
+ is16bit = true;
+#endif
+
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("Format_Mono") << QImage::Format_Mono;
+ QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB;
+// QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8;
+ if (!is16bit)
+ QTest::newRow("Format_RGB32") << QImage::Format_RGB32;
+ QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32;
+ QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied;
+ if (!is16bit)
+ QTest::newRow("Format_RGB16") << QImage::Format_RGB16;
+}
+
+void tst_QPixmap::fromImage()
+{
+ QFETCH(QImage::Format, format);
+
+ QImage image(37, 16, format);
+
+ if (image.colorCount() == 2) {
+ image.setColor(0, QColor(Qt::color0).rgba());
+ image.setColor(1, QColor(Qt::color1).rgba());
+ }
+ image.fill(0x7f7f7f7f);
+
+ const QPixmap pixmap = QPixmap::fromImage(image);
+#ifdef Q_WS_X11
+ if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle())
+ QSKIP("Requires XRender support", SkipAll);
+#endif
+ const QImage result = pixmap.toImage();
+ image = image.convertToFormat(result.format());
+ QCOMPARE(result, image);
+}
+
+
+void tst_QPixmap::fromUninitializedImage_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("Format_Mono") << QImage::Format_Mono;
+ QTest::newRow("Format_MonoLSB") << QImage::Format_MonoLSB;
+ QTest::newRow("Format_Indexed8") << QImage::Format_Indexed8;
+ QTest::newRow("Format_RGB32") << QImage::Format_RGB32;
+ QTest::newRow("Format_ARGB32") << QImage::Format_ARGB32;
+ QTest::newRow("Format_ARGB32_Premultiplied") << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("Format_RGB16") << QImage::Format_RGB16;
+}
+
+void tst_QPixmap::fromUninitializedImage()
+{
+ QFETCH(QImage::Format, format);
+
+ QImage image(100, 100, format);
+ QPixmap pix = QPixmap::fromImage(image);
+
+ // it simply shouldn't crash...
+ QVERIFY(true);
+
+}
+
+void tst_QPixmap::convertFromImage_data()
+{
+ QTest::addColumn<QImage>("img1");
+ QTest::addColumn<QImage>("img2");
+#ifdef Q_OS_SYMBIAN
+ const QString prefix = QLatin1String(SRCDIR) + "convertFromImage";
+#else
+ const QString prefix = QLatin1String(SRCDIR) + "/convertFromImage";
+#endif
+ {
+ QImage img1;
+ QImage img2;
+ QVERIFY(img1.load(prefix + "/task31722_0/img1.png"));
+ QVERIFY(img2.load(prefix + "/task31722_0/img2.png"));
+ QVERIFY(img1.load(prefix + "/task31722_0/img1.png"));
+ QVERIFY(img2.load(prefix + "/task31722_0/img2.png"));
+ QTest::newRow("Task 31722 0") << img1 << img2;
+ }
+ {
+ QImage img1;
+ QImage img2;
+ QVERIFY(img1.load(prefix + "/task31722_1/img1.png"));
+ QVERIFY(img2.load(prefix + "/task31722_1/img2.png"));
+ QTest::newRow("Task 31722 1") << img1 << img2;
+ }
+}
+
+void tst_QPixmap::convertFromImage()
+{
+ QFETCH(QImage, img1);
+ QFETCH(QImage, img2);
+
+ QPixmap pix = QPixmap::fromImage(img1);
+ pix = QPixmap::fromImage(img2);
+
+ QPixmap res = QPixmap::fromImage(img2);
+ QVERIFY( pixmapsAreEqual(&pix, &res) );
+}
+
+void tst_QPixmap::scroll_data()
+{
+ QTest::addColumn<QImage>("input");
+ QTest::addColumn<int>("dx");
+ QTest::addColumn<int>("dy");
+ QTest::addColumn<QRect>("rect");
+ QTest::addColumn<QRegion>("exposed");
+ QTest::addColumn<bool>("newPix");
+
+ QImage input(":/images/designer.png");
+
+ // Noop tests
+ QTest::newRow("null") << QImage() << 0 << 0 << QRect() << QRegion() << false;
+ QTest::newRow("dx_0_dy_0_null") << input << 0 << 0 << QRect() << QRegion() << false;
+ QTest::newRow("dx_1_dy_0_null") << input << 1 << 0 << QRect() << QRegion() << false;
+ QTest::newRow("dx_0_dy_1_null") << input << 0 << 1 << QRect() << QRegion() << false;
+ QTest::newRow("dx_0_dy_0_x_y_w_h") << input << 0 << 0 << input.rect() << QRegion() << false;
+
+ QRegion r;
+ // Scroll whole pixmap
+ r = QRegion(); r += QRect(0, 0, 128, 10);
+ QTest::newRow("dx_0_dy_10_x_y_w_h") << input << 0 << 10 << input.rect() << r << true;
+ r = QRegion(); r += QRect(0, 0, 10, 128);
+ QTest::newRow("dx_10_dy_0_x_y_w_h") << input << 10 << 0 << input.rect() << r << true;
+ r = QRegion(); r += QRect(0, 0, 128, 10); r += QRect(0, 10, 10, 118);
+ QTest::newRow("dx_10_dy_10_x_y_w_h") << input << 10 << 10 << input.rect() << r << true;
+ r = QRegion(); r += QRect(118, 0, 10, 128);
+ QTest::newRow("dx_-10_dy_0_x_y_w_h") << input << -10 << 0 << input.rect() << r << true;
+ r = QRegion(); r += QRect(0, 118, 128, 10);
+ QTest::newRow("dx_0_dy_-10_x_y_w_h") << input << 0 << -10 << input.rect() << r << true;
+ r = QRegion(); r += QRect(118, 0, 10, 118); r += QRect(0, 118, 128, 10);
+ QTest::newRow("dx_-10_dy_-10_x_y_w_h") << input << -10 << -10 << input.rect() << r << true;
+
+ // Scroll part of pixmap
+ QTest::newRow("dx_0_dy_0_50_50_100_100") << input << 0 << 0 << QRect(50, 50, 100, 100) << QRegion() << false;
+ r = QRegion(); r += QRect(50, 50, 10, 78);
+ QTest::newRow("dx_10_dy_0_50_50_100_100") << input << 10 << 0 << QRect(50, 50, 100, 100) << r << true;
+ r = QRegion(); r += QRect(50, 50, 78, 10);
+ QTest::newRow("dx_0_dy_10_50_50_100_100") << input << 0 << 10 << QRect(50, 50, 100, 100) << r << true;
+ r = QRegion(); r += QRect(50, 50, 78, 10); r += QRect(50, 60, 10, 68);
+ QTest::newRow("dx_10_dy_10_50_50_100_100") << input << 10 << 10 << QRect(50, 50, 100, 100) << r << true;
+ r = QRegion(); r += QRect(118, 50, 10, 78);
+ QTest::newRow("dx_-10_dy_0_50_50_100_100") << input << -10 << 0 << QRect(50, 50, 100, 100) << r << true;
+ r = QRegion(); r += QRect(50, 118, 78, 10);
+ QTest::newRow("dx_0_dy_-10_50_50_100_100") << input << 0 << -10 << QRect(50, 50, 100, 100) << r << true;
+ r = QRegion(); r += QRect(118, 50, 10, 68); r += QRect(50, 118, 78, 10);
+ QTest::newRow("dx_-10_dy_-10_50_50_100_100") << input << -10 << -10 << QRect(50, 50, 100, 100) << r << true;
+
+ // Scroll away the whole pixmap
+ r = input.rect();
+ QTest::newRow("dx_128_dy_0_x_y_w_h") << input << 128 << 0 << input.rect() << r << false;
+ QTest::newRow("dx_0_dy_128_x_y_w_h") << input << 0 << 128 << input.rect() << r << false;
+ QTest::newRow("dx_128_dy_128_x_y_w_h") << input << 128 << 128 << input.rect() << r << false;
+ QTest::newRow("dx_-128_dy_0_x_y_w_h") << input << -128 << 0 << input.rect() << r << false;
+ QTest::newRow("dx_0_dy_-128_x_y_w_h") << input << 0 << -128 << input.rect() << r << false;
+ QTest::newRow("dx_-128_dy_-128_x_y_w_h") << input << -128 << -128 << input.rect() << r << false;
+
+ // Scroll away part of the pixmap
+ r = QRegion(); r += QRect(64, 64, 64, 64);
+ QTest::newRow("dx_128_dy_128_64_64_128_128") << input << 128 << 128 << QRect(64, 64, 128, 128) << r << false;
+}
+
+void tst_QPixmap::scroll()
+{
+ QFETCH(QImage, input);
+ QFETCH(int, dx);
+ QFETCH(int, dy);
+ QFETCH(QRect, rect);
+ QFETCH(QRegion, exposed);
+ QFETCH(bool, newPix);
+
+ QPixmap pixmap = QPixmap::fromImage(input);
+ QRegion exp;
+ qint64 oldKey = pixmap.cacheKey();
+ pixmap.scroll(dx, dy, rect, &exp);
+ if (!newPix)
+ QCOMPARE(pixmap.cacheKey(), oldKey);
+ else
+ QVERIFY(pixmap.cacheKey() != oldKey);
+
+#if 0
+ // Remember to add to resources.
+ QString fileName = QString("images/%1.png").arg(QTest::currentDataTag());
+ pixmap.toImage().save(fileName);
+#else
+ QString fileName = QString(":/images/%1.png").arg(QTest::currentDataTag());
+#endif
+ QPixmap output(fileName);
+ QVERIFY(input.isNull() == output.isNull());
+ QVERIFY(lenientCompare(pixmap, output));
+ QCOMPARE(exp, exposed);
+}
+
+void tst_QPixmap::fill_data()
+{
+ QTest::addColumn<uint>("pixel");
+ QTest::addColumn<bool>("syscolor");
+ QTest::addColumn<bool>("bitmap");
+ for (int color = Qt::black; color < Qt::darkYellow; ++color)
+ QTest::newRow(QString("syscolor_%1").arg(color).toLatin1())
+ << uint(color) << true << false;
+
+#ifdef Q_WS_QWS
+ if (QScreen::instance()->depth() >= 24) {
+#elif defined (Q_WS_X11)
+ QPixmap pm(1, 1);
+ if (pm.x11PictureHandle()) {
+#elif defined (Q_OS_WINCE)
+ QPixmap pixmap(1,1);
+ if (QPixmap::grabWidget(QApplication::desktop()).depth() >= 24) {
+#else
+ QPixmap pixmap(1, 1); {
+#endif
+ QTest::newRow("alpha_7f_red") << 0x7fff0000u << false << false;
+ QTest::newRow("alpha_3f_blue") << 0x3f0000ffu << false << false;
+ QTest::newRow("alpha_b7_green") << 0xbf00ff00u << false << false;
+ QTest::newRow("alpha_7f_white") << 0x7fffffffu << false << false;
+ QTest::newRow("alpha_3f_white") << 0x3fffffffu << false << false;
+ QTest::newRow("alpha_b7_white") << 0xb7ffffffu << false << false;
+ QTest::newRow("alpha_7f_black") << 0x7f000000u << false << false;
+ QTest::newRow("alpha_3f_black") << 0x3f000000u << false << false;
+ QTest::newRow("alpha_b7_black") << 0xbf000000u << false << false;
+ }
+
+ QTest::newRow("bitmap_color0") << uint(Qt::color0) << true << true;
+ QTest::newRow("bitmap_color1") << uint(Qt::color1) << true << true;
+}
+
+void tst_QPixmap::fill()
+{
+ QFETCH(uint, pixel);
+ QFETCH(bool, syscolor);
+ QFETCH(bool, bitmap);
+
+ QColor color;
+
+ if (syscolor)
+ color = QColor(Qt::GlobalColor(pixel));
+ else
+ color = QColor(qRed(pixel), qGreen(pixel), qBlue(pixel), qAlpha(pixel));
+
+ QColor compareColor = color;
+ if (bitmap && syscolor) {
+ // special case color0 and color1 for bitmaps.
+ if (pixel == Qt::color0)
+ compareColor.setRgb(255, 255, 255);
+ else
+ compareColor.setRgb(0, 0, 0);
+ }
+
+ QPixmap pm;
+
+ if (bitmap)
+ pm = QBitmap(400, 400);
+ else
+ pm = QPixmap(400, 400);
+
+#if defined(Q_WS_X11)
+ if (!bitmap && pm.handle()->classId() == QPlatformPixmap::X11Class && !pm.x11PictureHandle())
+ QSKIP("Requires XRender support", SkipSingle);
+#endif
+
+ pm.fill(color);
+ if (syscolor && !bitmap && pm.depth() < 24) {
+ QSKIP("Test does not work on displays without true color", SkipSingle);
+ }
+
+ QImage image = pm.toImage();
+ if (bitmap && syscolor) {
+ int pixelindex = (pixel == Qt::color0) ? 0 : 1;
+ QCOMPARE(image.pixelIndex(0,0), pixelindex);
+ }
+ QImage::Format format = compareColor.alpha() != 255
+ ? QImage::Format_ARGB32
+ : QImage::Format_RGB32;
+ image = image.convertToFormat(format);
+
+
+ QImage shouldBe(400, 400, format);
+ shouldBe.fill(compareColor.rgba());
+
+ QCOMPARE(image, shouldBe);
+}
+
+void tst_QPixmap::fill_transparent()
+{
+ QPixmap pixmap(10, 10);
+#ifdef Q_WS_X11
+ if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle())
+ QSKIP("Requires XRender support", SkipAll);
+#endif
+ pixmap.fill(Qt::transparent);
+ QVERIFY(pixmap.hasAlphaChannel());
+}
+
+void tst_QPixmap::mask()
+{
+ QPixmap pm(100, 100);
+ QBitmap bm(100, 100);
+
+ pm.fill();
+ bm.fill();
+
+ QVERIFY(!pm.isNull());
+ QVERIFY(!bm.isNull());
+ if (!pm.hasAlphaChannel()) {
+ // This would fail if the default pixmap format is
+ // argb32_premultiplied. The mask will be all 1's.
+ // Therefore this is skipped when the alpha channel is present.
+ QVERIFY(pm.mask().isNull());
+ }
+
+ QImage img = bm.toImage();
+ QVERIFY(img.format() == QImage::Format_MonoLSB
+ || img.format() == QImage::Format_Mono);
+
+ pm.setMask(bm);
+ QVERIFY(!pm.mask().isNull());
+
+ bm = QBitmap();
+ // Invalid format here, since isNull() == true
+ QVERIFY(bm.toImage().isNull());
+ QCOMPARE(bm.toImage().format(), QImage::Format_Invalid);
+ pm.setMask(bm);
+ QVERIFY(pm.mask().isNull());
+
+ bm = QBitmap(100, 100);
+ bm.fill();
+ pm.setMask(bm);
+ QVERIFY(!pm.mask().isNull());
+}
+
+void tst_QPixmap::bitmapMask()
+{
+ QImage image(3, 3, QImage::Format_Mono);
+ image.setColor(0, Qt::color0);
+ image.setColor(1, Qt::color1);
+ image.fill(Qt::color0);
+ image.setPixel(1, 1, Qt::color1);
+ image.setPixel(0, 0, Qt::color1);
+
+ QImage image_mask(3, 3, QImage::Format_Mono);
+ image_mask.setColor(0, Qt::color0);
+ image_mask.setColor(1, Qt::color1);
+ image_mask.fill(Qt::color0);
+ image_mask.setPixel(1, 1, Qt::color1);
+ image_mask.setPixel(2, 0, Qt::color1);
+
+ QBitmap pm = QBitmap::fromImage(image);
+ QBitmap pm_mask = QBitmap::fromImage(image_mask);
+ pm.setMask(pm_mask);
+
+ image = pm.toImage();
+ image.setColor(0, Qt::color0);
+ image.setColor(1, Qt::color1);
+ image_mask = pm_mask.toImage();
+ image_mask.setColor(0, Qt::color0);
+ image_mask.setColor(1, Qt::color1);
+
+ QVERIFY(!image.pixel(0, 0));
+ QVERIFY(!image.pixel(2, 0));
+ QVERIFY(image.pixel(1, 1));
+}
+
+void tst_QPixmap::setGetMask_data()
+{
+ QTest::addColumn<QPixmap>("pixmap");
+ QTest::addColumn<QBitmap>("mask");
+ QTest::addColumn<QBitmap>("expected");
+
+ QPixmap pixmap(10, 10);
+ QBitmap mask(10, 10);
+ QPainter p;
+
+ p.begin(&pixmap);
+ p.fillRect(0, 0, 10, 10, QColor(Qt::black));
+ p.end();
+
+ QTest::newRow("nullmask 0") << QPixmap() << QBitmap() << QBitmap();
+ QTest::newRow("nullmask 1") << pixmap << QBitmap() << QBitmap();
+ mask.clear();
+ QTest::newRow("nullmask 2") << pixmap << mask << mask;
+ QTest::newRow("nullmask 3") << QPixmap(QBitmap()) << QBitmap() << QBitmap();
+
+ p.begin(&mask);
+ p.fillRect(1, 1, 5, 5, QColor(Qt::color1));
+ p.end();
+ QTest::newRow("simple mask 0") << pixmap << mask << mask;
+}
+
+void tst_QPixmap::setGetMask()
+{
+ QFETCH(QPixmap, pixmap);
+ QFETCH(QBitmap, mask);
+ QFETCH(QBitmap, expected);
+
+ pixmap.setMask(mask);
+ QBitmap result = pixmap.mask();
+
+ QImage resultImage = result.toImage();
+ QImage expectedImage = expected.toImage();
+ QCOMPARE(resultImage.convertToFormat(expectedImage.format()),
+ expectedImage);
+}
+
+void tst_QPixmap::testMetrics()
+{
+ QPixmap pixmap(100, 100);
+
+ QCOMPARE(pixmap.width(), 100);
+ QCOMPARE(pixmap.height(), 100);
+ QVERIFY(pixmap.depth() >= QPixmap::defaultDepth());
+
+ QBitmap bitmap(100, 100);
+
+ QCOMPARE(bitmap.width(), 100);
+ QCOMPARE(bitmap.height(), 100);
+ QCOMPARE(bitmap.depth(), 1);
+
+ QPixmap null;
+
+ QCOMPARE(null.size().width(), null.width());
+ QCOMPARE(null.size().height(), null.height());
+}
+
+void tst_QPixmap::createMaskFromColor()
+{
+ QImage image(3, 3, QImage::Format_Indexed8);
+ image.setColorCount(10);
+ image.setColor(0, 0xffffffff);
+ image.setColor(1, 0xff000000);
+ image.setColor(2, 0xffff0000);
+ image.setColor(3, 0xff0000ff);
+ image.fill(0);
+ image.setPixel(1, 0, 1);
+ image.setPixel(0, 1, 2);
+ image.setPixel(1, 1, 3);
+
+ QImage im_mask = image.createMaskFromColor(0xffff0000);
+ QCOMPARE((uint) im_mask.pixel(0, 1), QColor(Qt::color0).rgba());
+ QCOMPARE((uint) im_mask.pixel(0, 1), QColor(Qt::color0).rgba());
+
+ QPixmap pixmap = QPixmap::fromImage(image);
+ QBitmap mask = pixmap.createMaskFromColor(Qt::red);
+ QBitmap inv_mask = pixmap.createMaskFromColor(Qt::red, Qt::MaskOutColor);
+ QCOMPARE((uint) mask.toImage().pixel(0, 1), QColor(Qt::color0).rgba());
+ QCOMPARE((uint) inv_mask.toImage().pixel(0, 1), QColor(Qt::color1).rgba());
+}
+
+
+void tst_QPixmap::cacheKey()
+{
+ QPixmap pixmap1(1, 1);
+ QPixmap pixmap2(1, 1);
+ qint64 pixmap1_key = pixmap1.cacheKey();
+
+ QVERIFY(pixmap1.cacheKey() != pixmap2.cacheKey());
+
+ pixmap2 = pixmap1;
+ QVERIFY(pixmap2.cacheKey() == pixmap1.cacheKey());
+
+ pixmap2.detach();
+ QVERIFY(pixmap2.cacheKey() != pixmap1.cacheKey());
+ QVERIFY(pixmap1.cacheKey() == pixmap1_key);
+}
+
+// Test drawing a bitmap on a pixmap.
+void tst_QPixmap::drawBitmap()
+{
+ QBitmap bitmap(10,10);
+ bitmap.fill(Qt::color1);
+
+ QPixmap pixmap(10,10);
+ QPainter painter2(&pixmap);
+ painter2.fillRect(0,0,10,10, QBrush(Qt::green));
+ painter2.setPen(Qt::red);
+ painter2.drawPixmap(0,0,10,10, bitmap);
+ painter2.end();
+
+ QPixmap expected(10, 10);
+ expected.fill(Qt::red);
+
+ QVERIFY(lenientCompare(pixmap, expected));
+}
+
+void tst_QPixmap::grabWidget()
+{
+ for (int opaque = 0; opaque < 2; ++opaque) {
+ QWidget widget;
+ QImage image(128, 128, opaque ? QImage::Format_RGB32 : QImage::Format_ARGB32_Premultiplied);
+ for (int row = 0; row < image.height(); ++row) {
+ QRgb *line = reinterpret_cast<QRgb *>(image.scanLine(row));
+ for (int col = 0; col < image.width(); ++col)
+ line[col] = qRgba(rand() & 255, row, col, opaque ? 255 : 127);
+ }
+
+ QPalette pal = widget.palette();
+ pal.setBrush(QPalette::Window, QBrush(image));
+ widget.setPalette(pal);
+ widget.resize(128, 128);
+
+ QPixmap expected(64, 64);
+ if (!opaque)
+ expected.fill(Qt::transparent);
+
+ QPainter p(&expected);
+ p.translate(-64, -64);
+ p.drawTiledPixmap(0, 0, 128, 128, pal.brush(QPalette::Window).texture(), 0, 0);
+ p.end();
+
+ QPixmap actual = QPixmap::grabWidget(&widget, QRect(64, 64, 64, 64));
+ QVERIFY(lenientCompare(actual, expected));
+
+ actual = QPixmap::grabWidget(&widget, 64, 64);
+ QVERIFY(lenientCompare(actual, expected));
+
+ // Make sure a widget that is not yet shown is grabbed correctly.
+ QTreeWidget widget2;
+ actual = QPixmap::grabWidget(&widget2);
+ widget2.show();
+ expected = QPixmap::grabWidget(&widget2);
+
+ QVERIFY(lenientCompare(actual, expected));
+ }
+}
+
+void tst_QPixmap::grabWindow()
+{
+#ifdef Q_WS_QPA
+ QSKIP("QTBUG-20863 grabWindow is broken on most qpa backends", SkipAll);
+#endif
+#ifdef Q_OS_WINCE
+ // We get out of memory, if the desktop itself is too big.
+ if (QApplication::desktop()->width() <= 480)
+#endif
+ QVERIFY(QPixmap::grabWindow(QApplication::desktop()->winId()).isNull() == false);
+ QWidget w;
+ w.resize(640, 480);
+ w.show();
+ QTest::qWait(100);
+#ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(&w);
+#endif
+ QVERIFY(QPixmap::grabWindow(w.winId()).isNull() == false);
+
+ QWidget child(&w);
+ child.setGeometry(50, 50, 100, 100);
+ child.setPalette(Qt::red);
+ child.setAutoFillBackground(true);
+ child.show();
+ QTest::qWait(100);
+#ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(&child);
+#endif
+
+ QPixmap grabWindowPixmap = QPixmap::grabWindow(child.winId());
+ QPixmap grabWidgetPixmap = QPixmap::grabWidget(&child);
+ lenientCompare(grabWindowPixmap, grabWidgetPixmap);
+}
+
+void tst_QPixmap::isNull()
+{
+ {
+ QPixmap pixmap(1,1);
+ QVERIFY(pixmap.isNull() == false);
+ }
+ {
+ QPixmap pixmap(0,0);
+ QVERIFY(pixmap.isNull());
+ }
+
+ {
+ QPixmap pixmap(0,1);
+ QVERIFY(pixmap.isNull());
+ }
+ {
+ QPixmap pixmap(1,0);
+ QVERIFY(pixmap.isNull());
+ }
+ {
+ QPixmap pixmap(-1,-1);
+ QVERIFY(pixmap.isNull());
+ }
+ {
+ QPixmap pixmap(-1,5);
+ QVERIFY(pixmap.isNull());
+ }
+}
+
+void tst_QPixmap::convertFromImageNoDetach()
+{
+ QPixmap randomPixmap(10, 10);
+ if (randomPixmap.handle()->classId() != QPlatformPixmap::RasterClass)
+ QSKIP("Test only valid for raster pixmaps", SkipAll);
+
+ //first get the screen format
+ QImage::Format screenFormat = randomPixmap.toImage().format();
+ QVERIFY(screenFormat != QImage::Format_Invalid);
+
+ QImage orig(100,100, screenFormat);
+
+ QPixmap pix = QPixmap::fromImage(orig);
+ QImage copy = pix.toImage();
+
+ QVERIFY(copy.format() == screenFormat);
+
+ const QImage constOrig = orig;
+ const QImage constCopy = copy;
+ QVERIFY(constOrig.bits() == constCopy.bits());
+}
+
+void tst_QPixmap::convertFromImageDetach()
+{
+ QImage img(10,10, QImage::Format_RGB32);
+ img.fill(0);
+ QVERIFY(!img.isNull());
+ QPixmap p = QPixmap::fromImage(img);
+ QVERIFY(p.isDetached());
+ QPixmap copy = p;
+ QVERIFY(!copy.isDetached());
+ QVERIFY(!p.isDetached());
+ img.fill(1);
+ p = QPixmap::fromImage(img);
+ QVERIFY(copy.isDetached());
+}
+
+#if defined(Q_WS_WIN)
+void tst_QPixmap::toWinHBITMAP_data()
+{
+ QTest::addColumn<int>("red");
+ QTest::addColumn<int>("green");
+ QTest::addColumn<int>("blue");
+
+ QTest::newRow("red") << 255 << 0 << 0;
+ QTest::newRow("green") << 0 << 255 << 0;
+ QTest::newRow("blue") << 0 << 0 << 255;
+}
+
+void tst_QPixmap::toWinHBITMAP()
+{
+ QFETCH(int, red);
+ QFETCH(int, green);
+ QFETCH(int, blue);
+
+ QPixmap pm(100, 100);
+ pm.fill(QColor(red, green, blue));
+
+ HBITMAP bitmap = pm.toWinHBITMAP();
+
+ QVERIFY(bitmap != 0);
+
+ // Verify size
+ BITMAP bitmap_info;
+ memset(&bitmap_info, 0, sizeof(BITMAP));
+
+ int res = GetObject(bitmap, sizeof(BITMAP), &bitmap_info);
+ QVERIFY(res);
+
+ QCOMPARE(100, (int) bitmap_info.bmWidth);
+ QCOMPARE(100, (int) bitmap_info.bmHeight);
+
+ HDC display_dc = GetDC(0);
+ HDC bitmap_dc = CreateCompatibleDC(display_dc);
+
+ HBITMAP null_bitmap = (HBITMAP) SelectObject(bitmap_dc, bitmap);
+
+ COLORREF pixel = GetPixel(bitmap_dc, 0, 0);
+ QCOMPARE((int)GetRValue(pixel), red);
+ QCOMPARE((int)GetGValue(pixel), green);
+ QCOMPARE((int)GetBValue(pixel), blue);
+
+ // Clean up
+ SelectObject(bitmap_dc, null_bitmap);
+ DeleteObject(bitmap);
+ DeleteDC(bitmap_dc);
+ ReleaseDC(0, display_dc);
+
+}
+
+void tst_QPixmap::fromWinHBITMAP_data()
+{
+ toWinHBITMAP_data();
+}
+
+void tst_QPixmap::fromWinHBITMAP()
+{
+ QFETCH(int, red);
+ QFETCH(int, green);
+ QFETCH(int, blue);
+
+ HDC display_dc = GetDC(0);
+ HDC bitmap_dc = CreateCompatibleDC(display_dc);
+ HBITMAP bitmap = CreateCompatibleBitmap(display_dc, 100, 100);
+ SelectObject(bitmap_dc, bitmap);
+
+ SelectObject(bitmap_dc, GetStockObject(NULL_PEN));
+ HGDIOBJ old_brush = SelectObject(bitmap_dc, CreateSolidBrush(RGB(red, green, blue)));
+ Rectangle(bitmap_dc, 0, 0, 100, 100);
+
+#ifdef Q_OS_WINCE //the device context has to be deleted before QPixmap::fromWinHBITMAP()
+ DeleteDC(bitmap_dc);
+#endif
+ QPixmap pixmap = QPixmap::fromWinHBITMAP(bitmap);
+ QCOMPARE(pixmap.width(), 100);
+ QCOMPARE(pixmap.height(), 100);
+
+ QImage image = pixmap.toImage();
+ QRgb pixel = image.pixel(0, 0);
+ QCOMPARE(qRed(pixel), red);
+ QCOMPARE(qGreen(pixel), green);
+ QCOMPARE(qBlue(pixel), blue);
+
+ DeleteObject(SelectObject(bitmap_dc, old_brush));
+ DeleteObject(SelectObject(bitmap_dc, bitmap));
+#ifndef Q_OS_WINCE
+ DeleteDC(bitmap_dc);
+#endif
+ ReleaseDC(0, display_dc);
+}
+
+static void compareImages(const QImage &image1, const QImage &image2)
+{
+ QCOMPARE(image1.width(), image2.width());
+ QCOMPARE(image1.height(), image2.height());
+ QCOMPARE(image1.format(), image2.format());
+
+ static const int fuzz = 1;
+
+ for (int y = 0; y < image1.height(); y++)
+ {
+ for (int x = 0; x < image2.width(); x++)
+ {
+ QRgb p1 = image1.pixel(x, y);
+ QRgb p2 = image2.pixel(x, y);
+
+ bool pixelMatches =
+ qAbs(qRed(p1) - qRed(p2)) <= fuzz
+ && qAbs(qGreen(p1) - qGreen(p2)) <= fuzz
+ && qAbs(qBlue(p1) - qBlue(p2)) <= fuzz
+ && qAbs(qAlpha(p1) - qAlpha(p2)) <= fuzz;
+
+ QVERIFY(pixelMatches);
+ }
+ }
+}
+
+void tst_QPixmap::toWinHICON_data()
+{
+ QTest::addColumn<QString>("image");
+ QTest::addColumn<int>("width");
+ QTest::addColumn<int>("height");
+
+ const QString prefix = QLatin1String(SRCDIR) + "/convertFromToHICON";
+
+ QTest::newRow("32bpp_16x16") << prefix + QLatin1String("/icon_32bpp") << 16 << 16;
+ QTest::newRow("32bpp_32x32") << prefix + QLatin1String("/icon_32bpp") << 32 << 32;
+ QTest::newRow("32bpp_48x48") << prefix + QLatin1String("/icon_32bpp") << 48 << 48;
+ QTest::newRow("32bpp_256x256") << prefix + QLatin1String("/icon_32bpp") << 256 << 256;
+
+ QTest::newRow("8bpp_16x16") << prefix + QLatin1String("/icon_8bpp") << 16 << 16;
+ QTest::newRow("8bpp_32x32") << prefix + QLatin1String("/icon_8bpp") << 32 << 32;
+ QTest::newRow("8bpp_48x48") << prefix + QLatin1String("/icon_8bpp") << 48 << 48;
+}
+
+void tst_QPixmap::toWinHICON()
+{
+#ifdef Q_OS_WINCE
+ QSKIP("Test shall be enabled for Windows CE shortly.", SkipAll);
+#endif
+
+ QFETCH(int, width);
+ QFETCH(int, height);
+ QFETCH(QString, image);
+
+ QPixmap empty(width, height);
+ empty.fill(Qt::transparent);
+
+ HDC display_dc = GetDC(0);
+ HDC bitmap_dc = CreateCompatibleDC(display_dc);
+ HBITMAP bitmap = empty.toWinHBITMAP(QPixmap::Alpha);
+ SelectObject(bitmap_dc, bitmap);
+
+ QImage imageFromFile(image + QString(QLatin1String("_%1x%2.png")).arg(width).arg(height));
+ imageFromFile = imageFromFile.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+
+ HICON icon = QPixmap::fromImage(imageFromFile).toWinHICON();
+
+ DrawIconEx(bitmap_dc, 0, 0, icon, width, height, 0, 0, DI_NORMAL);
+
+ DestroyIcon(icon);
+ DeleteDC(bitmap_dc);
+
+ QImage imageFromHICON = QPixmap::fromWinHBITMAP(bitmap, QPixmap::Alpha).toImage();
+
+ ReleaseDC(0, display_dc);
+
+ // fuzzy comparison must be used, as the pixel values change slightly during conversion
+ // between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere
+
+ // QVERIFY(imageFromHICON == imageFromFile);
+ compareImages(imageFromHICON, imageFromFile);
+}
+
+void tst_QPixmap::fromWinHICON_data()
+{
+ toWinHICON_data();
+}
+
+void tst_QPixmap::fromWinHICON()
+{
+#ifdef Q_OS_WINCE
+ QSKIP("Test shall be enabled for Windows CE shortly.", SkipAll);
+
+#else
+ QFETCH(int, width);
+ QFETCH(int, height);
+ QFETCH(QString, image);
+
+ HICON icon = (HICON)LoadImage(0, (wchar_t*)(image + QLatin1String(".ico")).utf16(), IMAGE_ICON, width, height, LR_LOADFROMFILE);
+ QImage imageFromHICON = QPixmap::fromWinHICON(icon).toImage();
+ DestroyIcon(icon);
+
+ QImage imageFromFile(image + QString(QLatin1String("_%1x%2.png")).arg(width).arg(height));
+ imageFromFile = imageFromFile.convertToFormat(QImage::Format_ARGB32_Premultiplied);
+
+ // fuzzy comparison must be used, as the pixel values change slightly during conversion
+ // between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere
+
+ // QVERIFY(imageFromHICON == imageFromFile);
+ compareImages(imageFromHICON, imageFromFile);
+#endif
+}
+
+#endif // Q_WS_WIN
+
+#if defined(Q_OS_SYMBIAN)
+Q_DECLARE_METATYPE(TDisplayMode)
+
+void tst_QPixmap::fromSymbianCFbsBitmap_data()
+{
+ QTest::addColumn<TDisplayMode>("format");
+ QTest::addColumn<int>("width");
+ QTest::addColumn<int>("height");
+ QTest::addColumn<QColor>("color");
+
+ const int smallWidth = 20;
+ const int smallHeight = 20;
+ const int largeWidth = 240;
+ const int largeHeight = 320;
+ const int notAlignedWidth = 250;
+ const int notAlignedHeight = 250;
+
+ // Indexed Color Formats - Disabled since images seem to be blank -> no palette?
+// QTest::newRow("EGray2 small") << EGray2 << smallWidth << smallHeight << QColor(Qt::black);
+// QTest::newRow("EGray2 big") << EGray2 << largeWidth << largeHeight << QColor(Qt::black);
+// QTest::newRow("EGray256 small") << EGray256 << smallWidth << smallHeight << QColor(Qt::blue);
+// QTest::newRow("EGray256 big") << EGray256 << largeWidth << largeHeight << QColor(Qt::blue);
+// QTest::newRow("EColor256 small") << EColor256 << smallWidth << smallHeight << QColor(Qt::red);
+// QTest::newRow("EColor256 big") << EColor256 << largeWidth << largeHeight << QColor(Qt::red);
+
+ // Direct Color Formats
+ QTest::newRow("EColor4K small") << EColor4K << smallWidth << smallHeight << QColor(Qt::red);
+ QTest::newRow("EColor4K big") << EColor4K << largeWidth << largeHeight << QColor(Qt::red);
+ QTest::newRow("EColor4K not aligned") << EColor4K << notAlignedWidth << notAlignedHeight << QColor(Qt::red);
+ QTest::newRow("EColor64K small") << EColor64K << smallWidth << smallHeight << QColor(Qt::green);
+ QTest::newRow("EColor64K big") << EColor64K << largeWidth << largeHeight << QColor(Qt::green);
+ QTest::newRow("EColor64K not aligned") << EColor64K << notAlignedWidth << notAlignedHeight << QColor(Qt::green);
+ QTest::newRow("EColor16M small") << EColor16M << smallWidth << smallHeight << QColor(Qt::yellow);
+ QTest::newRow("EColor16M big") << EColor16M << largeWidth << largeHeight << QColor(Qt::yellow);
+ QTest::newRow("EColor16M not aligned") << EColor16M << notAlignedWidth << notAlignedHeight << QColor(Qt::yellow);
+ QTest::newRow("EColor16MU small") << EColor16MU << smallWidth << smallHeight << QColor(Qt::red);
+ QTest::newRow("EColor16MU big") << EColor16MU << largeWidth << largeHeight << QColor(Qt::red);
+ QTest::newRow("EColor16MU not aligned") << EColor16MU << notAlignedWidth << notAlignedHeight << QColor(Qt::red);
+ QTest::newRow("EColor16MA small opaque") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0);
+ QTest::newRow("EColor16MA big opaque") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0);
+ QTest::newRow("EColor16MA not aligned opaque") << EColor16MA << notAlignedWidth << notAlignedHeight << QColor(255, 255, 0);
+
+ // Semi-transparent Colors - Disabled for now, since the QCOMPARE fails, but visually confirmed to work
+// QTest::newRow("EColor16MA small semi") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0, 127);
+// QTest::newRow("EColor16MA big semi") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0, 127);
+// QTest::newRow("EColor16MA small trans") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0, 0);
+// QTest::newRow("EColor16MA big trans") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0, 0);
+
+#if !defined(__SERIES60_31__)
+ QTest::newRow("EColor16MAP small") << EColor16MAP << smallWidth << smallHeight << QColor(Qt::red);
+ QTest::newRow("EColor16MAP big") << EColor16MAP << largeWidth << largeHeight << QColor(Qt::red);
+#endif
+}
+
+void tst_QPixmap::fromSymbianCFbsBitmap()
+{
+ QFETCH(TDisplayMode, format);
+ QFETCH(int, width);
+ QFETCH(int, height);
+ QFETCH(QColor, color);
+ int expectedDepth = TDisplayModeUtils::NumDisplayModeBitsPerPixel(format);
+
+ CFbsBitmap *nativeBitmap = 0;
+ CFbsBitmapDevice *bitmapDevice = 0;
+ CBitmapContext *bitmapContext = 0;
+
+ nativeBitmap = new (ELeave) CFbsBitmap();
+ TInt err = nativeBitmap->Create(TSize(width, height), format);
+ CleanupStack::PushL(nativeBitmap);
+ QVERIFY(err == KErrNone);
+ bitmapDevice = CFbsBitmapDevice::NewL(nativeBitmap);
+ CleanupStack::PushL(bitmapDevice);
+
+ err = bitmapDevice->CreateBitmapContext(bitmapContext);
+ CleanupStack::PushL(bitmapContext);
+ QVERIFY(err == KErrNone);
+ TRgb symbianColor = TRgb(color.red(), color.green(), color.blue(), color.alpha());
+ bitmapContext->SetBrushColor(symbianColor);
+ bitmapContext->Clear();
+
+ __UHEAP_MARK;
+ { // Test the null case
+ CFbsBitmap *bitmap = 0;
+ QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(bitmap);
+ QVERIFY(pixmap.isNull());
+ }
+ __UHEAP_MARKEND;
+
+ __UHEAP_MARK;
+ { // Test the normal case
+ QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(nativeBitmap);
+// QCOMPARE(pixmap.depth(), expectedDepth); // Depth is not preserved now
+ QCOMPARE(pixmap.width(), width);
+ QCOMPARE(pixmap.height(), height);
+ QImage image = pixmap.toImage();
+
+ QColor actualColor(image.pixel(1, 1));
+ QCOMPARE(actualColor, color);
+
+ QImage shouldBe(pixmap.width(), pixmap.height(), image.format());
+ if (image.format() == QImage::Format_RGB16)
+ shouldBe.fill(qrgb565(color.rgba()).rawValue());
+ else
+ shouldBe.fill(color.rgba());
+ QCOMPARE(image, shouldBe);
+ }
+ __UHEAP_MARKEND;
+
+ CleanupStack::PopAndDestroy(3);
+}
+
+void tst_QPixmap::toSymbianCFbsBitmap_data()
+{
+ QTest::addColumn<int>("red");
+ QTest::addColumn<int>("green");
+ QTest::addColumn<int>("blue");
+
+ QTest::newRow("red") << 255 << 0 << 0;
+ QTest::newRow("green") << 0 << 255 << 0;
+ QTest::newRow("blue") << 0 << 0 << 255;
+}
+
+void tst_QPixmap::toSymbianCFbsBitmap()
+{
+ QFETCH(int, red);
+ QFETCH(int, green);
+ QFETCH(int, blue);
+
+ QPixmap pm(100, 100);
+ pm.fill(QColor(red, green, blue));
+
+ CFbsBitmap *bitmap = pm.toSymbianCFbsBitmap();
+
+ QVERIFY(bitmap != 0);
+
+ // Verify size
+ QCOMPARE(100, (int) bitmap->SizeInPixels().iWidth);
+ QCOMPARE(100, (int) bitmap->SizeInPixels().iHeight);
+
+ // Verify pixel color
+ TRgb pixel;
+ bitmap->GetPixel(pixel, TPoint(0,0));
+ QCOMPARE((int)pixel.Red(), red);
+ QCOMPARE((int)pixel.Green(), green);
+ QCOMPARE((int)pixel.Blue(), blue);
+
+ // Clean up
+ delete bitmap;
+}
+#endif
+
+void tst_QPixmap::onlyNullPixmapsOutsideGuiThread()
+{
+#ifdef Q_WS_QPA
+ QSKIP("QTBUG-20864 can't determine if threaded pixmaps are available for qpa", SkipAll);
+#endif
+#if !defined(Q_WS_WIN) && !defined(Q_WS_MAC)
+ class Thread : public QThread
+ {
+ public:
+ void run()
+ {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QPixmap: It is not safe to use pixmaps outside the GUI thread");
+ QPixmap pixmap;
+ QVERIFY(pixmap.isNull());
+
+ QTest::ignoreMessage(QtWarningMsg,
+ "QPixmap: It is not safe to use pixmaps outside the GUI thread");
+ QPixmap pixmap1(100, 100);
+ QVERIFY(pixmap1.isNull());
+
+ QTest::ignoreMessage(QtWarningMsg,
+ "QPixmap: It is not safe to use pixmaps outside the GUI thread");
+ QPixmap pixmap2(pixmap1);
+ QVERIFY(pixmap2.isNull());
+ }
+ };
+ Thread thread;
+#if defined(Q_OS_SYMBIAN)
+ thread.setStackSize(0x10000);
+#endif
+ thread.start();
+#if defined(Q_OS_SYMBIAN)
+ QVERIFY(thread.wait(10000));
+#else
+ thread.wait();
+#endif
+
+#endif // !defined(Q_WS_WIN) && !defined(Q_WS_MAC)
+}
+
+void tst_QPixmap::refUnref()
+{
+ // Simple ref/unref
+ {
+ QPixmap p;
+ }
+ {
+ QBitmap b;
+ }
+
+ // Get a copy of a pixmap that goes out of scope
+ {
+ QPixmap b;
+ {
+ QPixmap a(10, 10);
+ a.fill(Qt::color0);
+ b = a;
+ }
+ }
+ {
+ QBitmap mask;
+ {
+ QBitmap bitmap(10, 10);
+ bitmap.fill(Qt::color1);
+ mask = bitmap.mask();
+ }
+ mask.fill(Qt::color0);
+ }
+
+}
+
+void tst_QPixmap::copy()
+{
+ QPixmap src(32, 32);
+ {
+ QPainter p(&src);
+ p.fillRect(0, 0, 32, 32, Qt::red);
+ p.fillRect(10, 10, 10, 10, Qt::blue);
+ }
+
+ QPixmap dest = src.copy(10, 10, 10, 10);
+
+ QPixmap expected(10, 10);
+ expected.fill(Qt::blue);
+ QVERIFY(lenientCompare(dest, expected));
+
+ QPixmap trans;
+ trans.fill(Qt::transparent);
+
+ QPixmap transCopy = trans.copy();
+ QVERIFY(pixmapsAreEqual(&trans, &transCopy));
+}
+
+void tst_QPixmap::depthOfNullObjects()
+{
+ QBitmap b1;
+ QVERIFY(b1.depth() == 0);
+ QPixmap p4;
+ QVERIFY(p4.depth() == 0);
+}
+
+void tst_QPixmap::transformed()
+{
+ QPixmap p1(20, 10);
+ p1.fill(Qt::red);
+ {
+ QPainter p(&p1);
+ p.drawRect(0, 0, p1.width() - 1, p1.height() - 1);
+ }
+
+ QPixmap p2(10, 20);
+ {
+ QPainter p(&p2);
+ p.rotate(90);
+ p.drawPixmap(0, -p1.height(), p1);
+ }
+
+ QPixmap p3(20, 10);
+ {
+ QPainter p(&p3);
+ p.rotate(180);
+ p.drawPixmap(-p1.width(), -p1.height(), p1);
+ }
+
+ QPixmap p4(10, 20);
+ {
+ QPainter p(&p4);
+ p.rotate(270);
+ p.drawPixmap(-p1.width(), 0, p1);
+ }
+
+ QPixmap p1_90 = p1.transformed(QTransform().rotate(90));
+ QPixmap p1_180 = p1.transformed(QTransform().rotate(180));
+ QPixmap p1_270 = p1.transformed(QTransform().rotate(270));
+
+ QVERIFY(lenientCompare(p1_90, p2));
+ QVERIFY(lenientCompare(p1_180, p3));
+ QVERIFY(lenientCompare(p1_270, p4));
+}
+
+void tst_QPixmap::transformed2()
+{
+ QPixmap pm(3, 3);
+ pm.fill(Qt::red);
+ QPainter p(&pm);
+ p.fillRect(0, 0, 3, 3, QBrush(Qt::Dense4Pattern));
+ p.end();
+
+ QTransform transform;
+ transform.rotate(-90);
+ transform.scale(3, 3);
+
+ QPixmap actual = pm.transformed(transform);
+
+ QPixmap expected(9, 9);
+ expected.fill(Qt::red);
+ p.begin(&expected);
+ p.setBrush(Qt::black);
+ p.setPen(Qt::NoPen);
+ p.drawRect(3, 0, 3, 3);
+ p.drawRect(0, 3, 3, 3);
+ p.drawRect(6, 3, 3, 3);
+ p.drawRect(3, 6, 3, 3);
+ p.end();
+
+ QVERIFY(lenientCompare(actual, expected));
+}
+
+void tst_QPixmap::fromImage_crash()
+{
+ QImage *img = new QImage(64, 64, QImage::Format_ARGB32_Premultiplied);
+
+ QPixmap pm = QPixmap::fromImage(*img);
+ QPainter painter(&pm);
+
+ delete img;
+}
+
+//This is testing QPlatformPixmap::createCompatiblePlatformPixmap - see QTBUG-5977
+void tst_QPixmap::splash_crash()
+{
+ QPixmap pix;
+ pix = QPixmap(":/images/designer.png");
+ QSplashScreen splash(pix);
+ splash.show();
+ QCoreApplication::processEvents();
+ splash.close();
+}
+
+void tst_QPixmap::fromData()
+{
+ unsigned char bits[] = { 0xaa, 0x55 };
+
+ QBitmap bm = QBitmap::fromData(QSize(8, 2), bits);
+ QImage img = bm.toImage();
+
+ QSet<QRgb> colors;
+ for (int y = 0; y < img.height(); ++y)
+ for (int x = 0; x < img.width(); ++x)
+ colors << img.pixel(x, y);
+
+ QCOMPARE(colors.size(), 2);
+
+ QCOMPARE(img.pixel(0, 0), QRgb(0xffffffff));
+ QCOMPARE(img.pixel(0, 1), QRgb(0xff000000));
+}
+
+void tst_QPixmap::loadFromDataNullValues()
+{
+ {
+ QPixmap pixmap;
+ pixmap.loadFromData(QByteArray());
+ QVERIFY(pixmap.isNull());
+ }
+ {
+ QPixmap pixmap;
+ pixmap.loadFromData(0, 123);
+ QVERIFY(pixmap.isNull());
+ }
+ {
+ QPixmap pixmap;
+ const uchar bla[] = "bla";
+ pixmap.loadFromData(bla, 0);
+ QVERIFY(pixmap.isNull());
+ }
+}
+
+void tst_QPixmap::loadFromDataImage_data()
+{
+ QTest::addColumn<QString>("imagePath");
+#ifdef Q_OS_SYMBIAN
+ const QString prefix = QLatin1String(SRCDIR) + "loadFromData";
+#else
+ const QString prefix = QLatin1String(SRCDIR) + "/loadFromData";
+#endif
+ QTest::newRow("designer_argb32.png") << prefix + "/designer_argb32.png";
+ // When no extension is provided we try all extensions that has been registered by image providers
+ QTest::newRow("designer_argb32") << prefix + "/designer_argb32.png";
+ QTest::newRow("designer_indexed8_no_alpha.png") << prefix + "/designer_indexed8_no_alpha.png";
+ QTest::newRow("designer_indexed8_with_alpha.png") << prefix + "/designer_indexed8_with_alpha.png";
+ QTest::newRow("designer_rgb32.png") << prefix + "/designer_rgb32.png";
+ QTest::newRow("designer_indexed8_no_alpha.gif") << prefix + "/designer_indexed8_no_alpha.gif";
+ QTest::newRow("designer_indexed8_with_alpha.gif") << prefix + "/designer_indexed8_with_alpha.gif";
+ QTest::newRow("designer_rgb32.jpg") << prefix + "/designer_rgb32.jpg";
+}
+
+void tst_QPixmap::loadFromDataImage()
+{
+ QFETCH(QString, imagePath);
+
+ QImage imageRef(imagePath);
+ QPixmap pixmapWithCopy = QPixmap::fromImage(imageRef);
+
+ QFile file(imagePath);
+ file.open(QIODevice::ReadOnly);
+ QByteArray rawData = file.readAll();
+
+ QPixmap directLoadingPixmap;
+ directLoadingPixmap.loadFromData(rawData);
+
+ QVERIFY(pixmapsAreEqual(&pixmapWithCopy, &directLoadingPixmap));
+}
+
+void tst_QPixmap::fromImageReader_data()
+{
+ QTest::addColumn<QString>("imagePath");
+#ifdef Q_OS_SYMBIAN
+ const QString prefix = QLatin1String(SRCDIR) + "loadFromData";
+#else
+ const QString prefix = QLatin1String(SRCDIR) + "/loadFromData";
+#endif
+ QTest::newRow("designer_argb32.png") << prefix + "/designer_argb32.png";
+ QTest::newRow("designer_indexed8_no_alpha.png") << prefix + "/designer_indexed8_no_alpha.png";
+ QTest::newRow("designer_indexed8_with_alpha.png") << prefix + "/designer_indexed8_with_alpha.png";
+ QTest::newRow("designer_rgb32.png") << prefix + "/designer_rgb32.png";
+ QTest::newRow("designer_indexed8_no_alpha.gif") << prefix + "/designer_indexed8_no_alpha.gif";
+ QTest::newRow("designer_indexed8_with_alpha.gif") << prefix + "/designer_indexed8_with_alpha.gif";
+ QTest::newRow("designer_rgb32.jpg") << prefix + "/designer_rgb32.jpg";
+ QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_with_alpha_animated.gif";
+ QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_no_alpha_animated.gif";
+}
+
+void tst_QPixmap::fromImageReader()
+{
+ QFETCH(QString, imagePath);
+
+ QImage imageRef(imagePath);
+ QPixmap pixmapWithCopy = QPixmap::fromImage(imageRef);
+
+ QImageReader imageReader(imagePath);
+
+ QPixmap directLoadingPixmap = QPixmap::fromImageReader(&imageReader);
+
+ QVERIFY(pixmapsAreEqual(&pixmapWithCopy, &directLoadingPixmap));
+}
+
+void tst_QPixmap::fromImageReaderAnimatedGif_data()
+{
+ QTest::addColumn<QString>("imagePath");
+ QTest::newRow("gif with alpha") << QString::fromLatin1("/designer_indexed8_with_alpha_animated.gif");
+ QTest::newRow("gif without alpha") << QString::fromLatin1("/designer_indexed8_no_alpha_animated.gif");
+}
+
+void tst_QPixmap::fromImageReaderAnimatedGif()
+{
+ QFETCH(QString, imagePath);
+#ifdef Q_OS_SYMBIAN
+ const QString prefix = QLatin1String(SRCDIR) + "loadFromData";
+#else
+ const QString prefix = QLatin1String(SRCDIR) + "/loadFromData";
+#endif
+ const QString path = prefix + imagePath;
+
+ QImageReader referenceReader(path);
+ QImageReader pixmapReader(path);
+
+ QVERIFY(referenceReader.canRead());
+ QVERIFY(referenceReader.imageCount() > 1);
+
+ for (int i = 0; i < referenceReader.imageCount(); ++i) {
+ QImage refImage = referenceReader.read();
+ QPixmap refPixmap = QPixmap::fromImage(refImage);
+
+ QPixmap directLoadingPixmap = QPixmap::fromImageReader(&pixmapReader);
+ QVERIFY(pixmapsAreEqual(&refPixmap, &directLoadingPixmap));
+ }
+}
+
+void tst_QPixmap::task_246446()
+{
+ // This crashed without the bugfix in 246446
+ QPixmap pm(10, 10);
+ pm.fill(Qt::transparent); // force 32-bit depth
+ QBitmap bm;
+ pm.setMask(bm);
+ {
+ QPixmap pm2(pm);
+ }
+ QVERIFY(pm.width() == 10);
+ QVERIFY(pm.mask().isNull());
+}
+
+void tst_QPixmap::preserveDepth()
+{
+ QPixmap target(64, 64);
+ target.fill(Qt::transparent);
+
+ QPixmap source(64, 64);
+ source.fill(Qt::white);
+
+ int depth = source.depth();
+
+ QPainter painter(&target);
+ painter.setBrush(source);
+ painter.drawRect(target.rect());
+ painter.end();
+
+ QCOMPARE(depth, source.depth());
+}
+
+void tst_QPixmap::loadAsBitmapOrPixmap()
+{
+ QImage tmp(10, 10, QImage::Format_RGB32);
+ tmp.save("temp_image.png");
+
+ bool ok;
+
+ // Check that we can load the pixmap as a pixmap and that it then turns into a pixmap
+ QPixmap pixmap("temp_image.png");
+ QVERIFY(!pixmap.isNull());
+ QVERIFY(pixmap.depth() > 1);
+ QVERIFY(!pixmap.isQBitmap());
+
+ pixmap = QPixmap();
+ ok = pixmap.load("temp_image.png");
+ QVERIFY(ok);
+ QVERIFY(!pixmap.isNull());
+ QVERIFY(pixmap.depth() > 1);
+ QVERIFY(!pixmap.isQBitmap());
+
+ //now we can try to load it without an extension
+ pixmap = QPixmap();
+ ok = pixmap.load("temp_image");
+ QVERIFY(ok);
+ QVERIFY(!pixmap.isNull());
+ QVERIFY(pixmap.depth() > 1);
+ QVERIFY(!pixmap.isQBitmap());
+
+ // The do the same check for bitmaps..
+ QBitmap bitmap("temp_image.png");
+ QVERIFY(!bitmap.isNull());
+ QVERIFY(bitmap.depth() == 1);
+ QVERIFY(bitmap.isQBitmap());
+
+ bitmap = QBitmap();
+ ok = bitmap.load("temp_image.png");
+ QVERIFY(ok);
+ QVERIFY(!bitmap.isNull());
+ QVERIFY(bitmap.depth() == 1);
+ QVERIFY(bitmap.isQBitmap());
+}
+
+void tst_QPixmap::toImageDeepCopy()
+{
+ QPixmap pixmap(64, 64);
+ pixmap.fill(Qt::white);
+
+ QPainter painter(&pixmap);
+ QImage first = pixmap.toImage();
+
+ painter.setBrush(Qt::black);
+ painter.drawEllipse(pixmap.rect());
+
+ QImage second = pixmap.toImage();
+
+ QVERIFY(first != second);
+}
+
+#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG)
+Q_OPENVG_EXPORT VGImage qPixmapToVGImage(const QPixmap& pixmap);
+class FriendlyVGPlatformPixmap : public QVGPlatformPixmap
+{
+public:
+ FriendlyVGPlatformPixmap(PixelType type) : QVGPlatformPixmap(type) { }
+ bool sourceIsNull() { return source.isNull(); }
+ friend QPixmap pixmapFromVGImage(VGImage image);
+};
+QPixmap pixmapFromVGImage(VGImage image)
+{
+ if (image != VG_INVALID_HANDLE) {
+ int w = vgGetParameteri(image, VG_IMAGE_WIDTH);
+ int h = vgGetParameteri(image, VG_IMAGE_HEIGHT);
+ FriendlyVGPlatformPixmap *pd = new FriendlyVGPlatformPixmap(QPlatformPixmap::PixmapType);
+ pd->resize(w, h);
+ pd->vgImage = image;
+ pd->recreate = false;
+ pd->prevSize = QSize(pd->w, pd->h);
+ return QPixmap(pd);
+ }
+ return QPixmap();
+}
+class Content : public QWidget
+{
+public:
+ void paintEvent(QPaintEvent *) {
+ QPainter painter(this);
+ QColor testPixel(qRgb(200, 150, 100));
+ if (pm.isNull()) { // first phase: create a VGImage
+ painter.beginNativePainting();
+ vgimage = vgCreateImage(VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER);
+ QImage img(20, 10, QImage::Format_ARGB32_Premultiplied);
+ img.fill(qRgb(0, 0, 0));
+ QPainter p(&img);
+ p.fillRect(0, 0, img.width(), img.height(), testPixel);
+ p.end();
+ vgImageSubData(vgimage, img.bits(), img.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, img.width(), img.height());
+ // Now the area 0,0 20x10 (in OpenVG coords) is filled with some color.
+ painter.endNativePainting();
+ } else { // second phase: check if readback works
+ painter.drawPixmap(0, 0, pm);
+ // Drawing should not cause readback, this is important for performance;
+ noreadback_ok = static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull();
+ // However toImage() requires readback.
+ QImage img = pm.toImage();
+ readback_ok = img.width() == pm.width();
+ readback_ok &= img.height() == pm.height();
+ readback_ok &= !static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull();
+ uint pix = img.pixel(1, 1);
+ content_ok = qRed(pix) == testPixel.red();
+ content_ok &= qGreen(pix) == testPixel.green();
+ content_ok &= qBlue(pix) == testPixel.blue();
+ pix = img.pixel(img.width() - 1, img.height() - 1);
+ content_ok &= qRed(pix) == 0;
+ content_ok &= qGreen(pix) == 0;
+ content_ok &= qBlue(pix) == 0;
+ }
+ }
+ int w;
+ int h;
+ VGImage vgimage;
+ QPixmap pm;
+ bool noreadback_ok;
+ bool readback_ok;
+ bool content_ok;
+};
+void tst_QPixmap::vgImageReadBack()
+{
+ QPixmap tmp(10, 20);
+ if (tmp.handle()->classId() == QPlatformPixmap::OpenVGClass) {
+ Content c;
+ c.w = 50;
+ c.h = 60;
+ c.vgimage = VG_INVALID_HANDLE;
+ c.noreadback_ok = c.readback_ok = c.content_ok = false;
+ c.showFullScreen();
+ QTest::qWaitForWindowShown(&c);
+ QVERIFY(c.vgimage != VG_INVALID_HANDLE);
+ QPixmap pm = pixmapFromVGImage(c.vgimage);
+ QVERIFY(!pm.isNull());
+ QCOMPARE(pm.width(), c.w);
+ QCOMPARE(pm.height(), c.h);
+ QVERIFY(qPixmapToVGImage(pm) == c.vgimage);
+ QVERIFY(static_cast<FriendlyVGPlatformPixmap *>(pm.handle())->sourceIsNull());
+ c.pm = pm;
+ // Make sure the second phase in paintEvent is executed too.
+ c.hide();
+ c.showFullScreen();
+ QTest::qWaitForWindowShown(&c);
+ QVERIFY(c.noreadback_ok);
+ QVERIFY(c.readback_ok);
+ QVERIFY(c.content_ok);
+ } else {
+ QSKIP("Not using openvg graphicssystem", SkipSingle);
+ }
+}
+#endif // Symbian & OpenVG
+
+void tst_QPixmap::scaled_QTBUG19157()
+{
+ QPixmap foo(5000, 1);
+ foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
+ QVERIFY(!foo.isNull());
+}
+
+QTEST_MAIN(tst_QPixmap)
+#include "tst_qpixmap.moc"
diff --git a/tests/auto/gui/image/qpixmapcache/.gitignore b/tests/auto/gui/image/qpixmapcache/.gitignore
new file mode 100644
index 0000000000..2bc572c2dd
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapcache/.gitignore
@@ -0,0 +1 @@
+tst_qpixmapcache
diff --git a/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro b/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro
new file mode 100644
index 0000000000..1ffafd6c25
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapcache/qpixmapcache.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+QT += gui-private
+SOURCES += tst_qpixmapcache.cpp
+
+
+
diff --git a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp
new file mode 100644
index 0000000000..9f7192dc1c
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp
@@ -0,0 +1,521 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#define Q_TEST_QPIXMAPCACHE
+
+#include <QtTest/QtTest>
+
+
+#include <qpixmapcache.h>
+#include "../../../src/gui/image/qpixmapcache_p.h"
+
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QPixmapCache : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QPixmapCache();
+ virtual ~tst_QPixmapCache();
+
+
+public slots:
+ void init();
+private slots:
+ void cacheLimit();
+ void setCacheLimit();
+ void find();
+ void insert();
+ void replace();
+ void remove();
+ void clear();
+ void pixmapKey();
+ void noLeak();
+};
+
+static QPixmapCache::KeyData* getPrivate(QPixmapCache::Key &key)
+{
+ return (*reinterpret_cast<QPixmapCache::KeyData**>(&key));
+}
+
+static QPixmapCache::KeyData** getPrivateRef(QPixmapCache::Key &key)
+{
+ return (reinterpret_cast<QPixmapCache::KeyData**>(&key));
+}
+
+static int originalCacheLimit;
+
+tst_QPixmapCache::tst_QPixmapCache()
+{
+ originalCacheLimit = QPixmapCache::cacheLimit();
+}
+
+tst_QPixmapCache::~tst_QPixmapCache()
+{
+}
+
+void tst_QPixmapCache::init()
+{
+ QPixmapCache::setCacheLimit(originalCacheLimit);
+ QPixmapCache::clear();
+}
+
+void tst_QPixmapCache::cacheLimit()
+{
+ // make sure the default is reasonable;
+ // it was between 2048 and 10240 last time I looked at it
+ QVERIFY(originalCacheLimit >= 1024 && originalCacheLimit <= 20480);
+
+ QPixmapCache::setCacheLimit(100);
+ QCOMPARE(QPixmapCache::cacheLimit(), 100);
+
+ QPixmapCache::setCacheLimit(-50);
+ QCOMPARE(QPixmapCache::cacheLimit(), -50);
+}
+
+void tst_QPixmapCache::setCacheLimit()
+{
+ QPixmap *p1 = new QPixmap(2, 3);
+ QPixmapCache::insert("P1", *p1);
+ QVERIFY(QPixmapCache::find("P1") != 0);
+ delete p1;
+
+ QPixmapCache::setCacheLimit(0);
+ QVERIFY(QPixmapCache::find("P1") == 0);
+
+ p1 = new QPixmap(2, 3);
+ QPixmapCache::setCacheLimit(1000);
+ QPixmapCache::insert("P1", *p1);
+ QVERIFY(QPixmapCache::find("P1") != 0);
+
+ delete p1;
+
+ //The int part of the API
+ p1 = new QPixmap(2, 3);
+ QPixmapCache::Key key = QPixmapCache::insert(*p1);
+ QVERIFY(QPixmapCache::find(key, p1) != 0);
+ delete p1;
+
+ QPixmapCache::setCacheLimit(0);
+ QVERIFY(QPixmapCache::find(key, p1) == 0);
+
+ p1 = new QPixmap(2, 3);
+ QPixmapCache::setCacheLimit(1000);
+ QPixmapCache::replace(key, *p1);
+ QVERIFY(QPixmapCache::find(key, p1) == 0);
+
+ delete p1;
+
+ //Let check if keys are released when the pixmap cache is
+ //full or has been flushed.
+ QPixmapCache::clear();
+ p1 = new QPixmap(2, 3);
+ key = QPixmapCache::insert(*p1);
+ QVERIFY(QPixmapCache::find(key, p1) != 0);
+ p1->detach(); // dectach so that the cache thinks no-one is using it.
+ QPixmapCache::setCacheLimit(0);
+ QVERIFY(QPixmapCache::find(key, p1) == 0);
+ QPixmapCache::setCacheLimit(1000);
+ key = QPixmapCache::insert(*p1);
+ QCOMPARE(getPrivate(key)->isValid, true);
+ QCOMPARE(getPrivate(key)->key, 1);
+
+ delete p1;
+
+ //Let check if removing old entries doesn't let you get
+ // wrong pixmaps
+ QPixmapCache::clear();
+ QPixmap p2;
+ p1 = new QPixmap(2, 3);
+ key = QPixmapCache::insert(*p1);
+ QVERIFY(QPixmapCache::find(key, &p2) != 0);
+ //we flush the cache
+ p1->detach();
+ p2.detach();
+ QPixmapCache::setCacheLimit(0);
+ QPixmapCache::setCacheLimit(1000);
+ QPixmapCache::Key key2 = QPixmapCache::insert(*p1);
+ QCOMPARE(getPrivate(key2)->key, 1);
+ QVERIFY(QPixmapCache::find(key, &p2) == 0);
+ QVERIFY(QPixmapCache::find(key2, &p2) != 0);
+ QCOMPARE(p2, *p1);
+
+ delete p1;
+
+ //Here we simulate the flushing when the app is idle
+ QPixmapCache::clear();
+ QPixmapCache::setCacheLimit(originalCacheLimit);
+ p1 = new QPixmap(300, 300);
+ key = QPixmapCache::insert(*p1);
+ p1->detach();
+ QCOMPARE(getPrivate(key)->key, 1);
+ key2 = QPixmapCache::insert(*p1);
+ p1->detach();
+ key2 = QPixmapCache::insert(*p1);
+ p1->detach();
+ QPixmapCache::Key key3 = QPixmapCache::insert(*p1);
+ p1->detach();
+ QPixmapCache::flushDetachedPixmaps();
+ key2 = QPixmapCache::insert(*p1);
+ QCOMPARE(getPrivate(key2)->key, 1);
+ //This old key is not valid anymore after the flush
+ QCOMPARE(getPrivate(key)->isValid, false);
+ QVERIFY(QPixmapCache::find(key, &p2) == 0);
+ delete p1;
+}
+
+void tst_QPixmapCache::find()
+{
+ QPixmap p1(10, 10);
+ p1.fill(Qt::red);
+ QVERIFY(QPixmapCache::insert("P1", p1));
+
+ QPixmap p2;
+ QVERIFY(QPixmapCache::find("P1", p2));
+ QCOMPARE(p2.width(), 10);
+ QCOMPARE(p2.height(), 10);
+ QCOMPARE(p1, p2);
+
+ // obsolete
+ QPixmap *p3 = QPixmapCache::find("P1");
+ QVERIFY(p3);
+ QCOMPARE(p1, *p3);
+
+ //The int part of the API
+ QPixmapCache::Key key = QPixmapCache::insert(p1);
+
+ QVERIFY(QPixmapCache::find(key, &p2));
+ QCOMPARE(p2.width(), 10);
+ QCOMPARE(p2.height(), 10);
+ QCOMPARE(p1, p2);
+
+ QPixmapCache::clear();
+ QPixmapCache::setCacheLimit(128);
+
+ QPixmap p4(10,10);
+ key = QPixmapCache::insert(p4);
+ p4.detach();
+
+ QPixmap p5(10,10);
+ QList<QPixmapCache::Key> keys;
+ for (int i = 0; i < 4000; ++i)
+ QPixmapCache::insert(p5);
+
+ //at that time the first key has been erase because no more place in the cache
+ QVERIFY(QPixmapCache::find(key, &p1) == 0);
+ QCOMPARE(getPrivate(key)->isValid, false);
+}
+
+void tst_QPixmapCache::insert()
+{
+ QPixmap p1(10, 10);
+ p1.fill(Qt::red);
+
+ QPixmap p2(10, 10);
+ p2.fill(Qt::yellow);
+
+ // Calcuate estimated num of items what fits to cache
+ int estimatedNum = (1024 * QPixmapCache::cacheLimit())
+ / ((p1.width() * p1.height() * p1.depth()) / 8);
+
+ // Mare sure we will put enough items to reach the cache limit
+ const int numberOfKeys = estimatedNum + 1000;
+
+ // make sure it doesn't explode
+ for (int i = 0; i < numberOfKeys; ++i)
+ QPixmapCache::insert("0", p1);
+
+ // ditto
+ for (int j = 0; j < numberOfKeys; ++j) {
+ QPixmap p3(10, 10);
+ QPixmapCache::insert(QString::number(j), p3);
+ }
+
+ int num = 0;
+ for (int k = 0; k < numberOfKeys; ++k) {
+ if (QPixmapCache::find(QString::number(k)))
+ ++num;
+ }
+
+ if (QPixmapCache::find("0"))
+ ++num;
+
+ QVERIFY(num <= estimatedNum);
+ QPixmap p3;
+ QPixmapCache::insert("null", p3);
+
+ QPixmap c1(10, 10);
+ c1.fill(Qt::yellow);
+ QPixmapCache::insert("custom", c1);
+ QVERIFY(!c1.isDetached());
+ QPixmap c2(10, 10);
+ c2.fill(Qt::red);
+ QPixmapCache::insert("custom", c2);
+ //We have deleted the old pixmap in the cache for the same key
+ QVERIFY(c1.isDetached());
+
+ //The int part of the API
+ // make sure it doesn't explode
+ QList<QPixmapCache::Key> keys;
+ for (int i = 0; i < numberOfKeys; ++i) {
+ QPixmap p3(10,10);
+ keys.append(QPixmapCache::insert(p3));
+ }
+
+ num = 0;
+ for (int k = 0; k < numberOfKeys; ++k) {
+ if (QPixmapCache::find(keys.at(k), &p2))
+ ++num;
+ }
+
+ estimatedNum = (1024 * QPixmapCache::cacheLimit())
+ / ((p1.width() * p1.height() * p1.depth()) / 8);
+ QVERIFY(num <= estimatedNum);
+}
+
+void tst_QPixmapCache::replace()
+{
+ //The int part of the API
+ QPixmap p1(10, 10);
+ p1.fill(Qt::red);
+
+ QPixmap p2(10, 10);
+ p2.fill(Qt::yellow);
+
+ QPixmapCache::Key key = QPixmapCache::insert(p1);
+ QCOMPARE(getPrivate(key)->isValid, true);
+
+ QPixmap p3;
+ QVERIFY(QPixmapCache::find(key, &p3) == 1);
+
+ QPixmapCache::replace(key, p2);
+
+ QVERIFY(QPixmapCache::find(key, &p3) == 1);
+ QCOMPARE(getPrivate(key)->isValid, true);
+ QCOMPARE(getPrivate(key)->key, 1);
+
+ QCOMPARE(p3.width(), 10);
+ QCOMPARE(p3.height(), 10);
+ QCOMPARE(p3, p2);
+
+ //Broken keys
+ QCOMPARE(QPixmapCache::replace(QPixmapCache::Key(), p2), false);
+}
+
+void tst_QPixmapCache::remove()
+{
+ QPixmap p1(10, 10);
+ p1.fill(Qt::red);
+
+ QPixmapCache::insert("red", p1);
+ p1.fill(Qt::yellow);
+
+ QPixmap p2;
+ QVERIFY(QPixmapCache::find("red", p2));
+ QVERIFY(p1.toImage() != p2.toImage());
+ QVERIFY(p1.toImage() == p1.toImage()); // sanity check
+
+ QPixmapCache::remove("red");
+ QVERIFY(QPixmapCache::find("red") == 0);
+ QPixmapCache::remove("red");
+ QVERIFY(QPixmapCache::find("red") == 0);
+
+ QPixmapCache::remove("green");
+ QVERIFY(QPixmapCache::find("green") == 0);
+
+ //The int part of the API
+ QPixmapCache::clear();
+ p1.fill(Qt::red);
+ QPixmapCache::Key key = QPixmapCache::insert(p1);
+ p1.fill(Qt::yellow);
+
+ QVERIFY(QPixmapCache::find(key, &p2));
+ QVERIFY(p1.toImage() != p2.toImage());
+ QVERIFY(p1.toImage() == p1.toImage()); // sanity check
+
+ QPixmapCache::remove(key);
+ QVERIFY(QPixmapCache::find(key, &p1) == 0);
+
+ //Broken key
+ QPixmapCache::remove(QPixmapCache::Key());
+ QVERIFY(QPixmapCache::find(QPixmapCache::Key(), &p1) == 0);
+
+ //Test if keys are release
+ QPixmapCache::clear();
+ key = QPixmapCache::insert(p1);
+ QCOMPARE(getPrivate(key)->key, 1);
+ QPixmapCache::remove(key);
+ key = QPixmapCache::insert(p1);
+ QCOMPARE(getPrivate(key)->key, 1);
+
+ //Test if pixmaps are correctly deleted
+ QPixmapCache::clear();
+ key = QPixmapCache::insert(p1);
+ QCOMPARE(getPrivate(key)->key, 1);
+ QVERIFY(QPixmapCache::find(key, &p1) != 0);
+ QPixmapCache::remove(key);
+ QCOMPARE(p1.isDetached(), true);
+
+ //We mix both part of the API
+ QPixmapCache::clear();
+ p1.fill(Qt::red);
+ QPixmapCache::insert("red", p1);
+ key = QPixmapCache::insert(p1);
+ QPixmapCache::remove(key);
+ QVERIFY(QPixmapCache::find(key, &p1) == 0);
+ QVERIFY(QPixmapCache::find("red") != 0);
+}
+
+void tst_QPixmapCache::clear()
+{
+ QPixmap p1(10, 10);
+ p1.fill(Qt::red);
+
+ // Calcuate estimated num of items what fits to cache
+ int estimatedNum = (1024 * QPixmapCache::cacheLimit())
+ / ((p1.width() * p1.height() * p1.depth()) / 8);
+
+ // Mare sure we will put enough items to reach the cache limit
+ const int numberOfKeys = estimatedNum + 1000;
+
+ for (int i = 0; i < numberOfKeys; ++i)
+ QVERIFY(QPixmapCache::find("x" + QString::number(i)) == 0);
+
+ for (int j = 0; j < numberOfKeys; ++j)
+ QPixmapCache::insert(QString::number(j), p1);
+
+ int num = 0;
+ for (int k = 0; k < numberOfKeys; ++k) {
+ if (QPixmapCache::find(QString::number(k), p1))
+ ++num;
+ }
+ QVERIFY(num > 0);
+
+ QPixmapCache::clear();
+
+ for (int k = 0; k < numberOfKeys; ++k)
+ QVERIFY(QPixmapCache::find(QString::number(k)) == 0);
+
+ //The int part of the API
+ QPixmap p2(10, 10);
+ p2.fill(Qt::red);
+
+ QList<QPixmapCache::Key> keys;
+ for (int k = 0; k < numberOfKeys; ++k)
+ keys.append(QPixmapCache::insert(p2));
+
+ QPixmapCache::clear();
+
+ for (int k = 0; k < numberOfKeys; ++k) {
+ QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0);
+ QCOMPARE(getPrivate(keys[k])->isValid, false);
+ }
+}
+
+void tst_QPixmapCache::pixmapKey()
+{
+ QPixmapCache::Key key;
+ //Default constructed keys have no d pointer unless
+ //we use them
+ QVERIFY(!getPrivate(key));
+ //Let's put a d pointer
+ QPixmapCache::KeyData** keyd = getPrivateRef(key);
+ *keyd = new QPixmapCache::KeyData;
+ QCOMPARE(getPrivate(key)->ref, 1);
+ QPixmapCache::Key key2;
+ //Let's put a d pointer
+ QPixmapCache::KeyData** key2d = getPrivateRef(key2);
+ *key2d = new QPixmapCache::KeyData;
+ QCOMPARE(getPrivate(key2)->ref, 1);
+ key = key2;
+ QCOMPARE(getPrivate(key2)->ref, 2);
+ QCOMPARE(getPrivate(key)->ref, 2);
+ QPixmapCache::Key key3;
+ //Let's put a d pointer
+ QPixmapCache::KeyData** key3d = getPrivateRef(key3);
+ *key3d = new QPixmapCache::KeyData;
+ QPixmapCache::Key key4 = key3;
+ QCOMPARE(getPrivate(key3)->ref, 2);
+ QCOMPARE(getPrivate(key4)->ref, 2);
+ key4 = key;
+ QCOMPARE(getPrivate(key4)->ref, 3);
+ QCOMPARE(getPrivate(key3)->ref, 1);
+ QPixmapCache::Key key5(key3);
+ QCOMPARE(getPrivate(key3)->ref, 2);
+ QCOMPARE(getPrivate(key5)->ref, 2);
+
+ //let test default constructed keys
+ QPixmapCache::Key key6;
+ QVERIFY(!getPrivate(key6));
+ QPixmapCache::Key key7;
+ QVERIFY(!getPrivate(key7));
+ key6 = key7;
+ QVERIFY(!getPrivate(key6));
+ QVERIFY(!getPrivate(key7));
+ QPixmapCache::Key key8(key7);
+ QVERIFY(!getPrivate(key8));
+}
+
+QT_BEGIN_NAMESPACE
+extern int q_QPixmapCache_keyHashSize();
+QT_END_NAMESPACE
+
+void tst_QPixmapCache::noLeak()
+{
+ QPixmapCache::Key key;
+
+ int oldSize = q_QPixmapCache_keyHashSize();
+ for (int i = 0; i < 100; ++i) {
+ QPixmap pm(128, 128);
+ pm.fill(Qt::transparent);
+ key = QPixmapCache::insert(pm);
+ QPixmapCache::remove(key);
+ }
+ int newSize = q_QPixmapCache_keyHashSize();
+
+ QCOMPARE(oldSize, newSize);
+}
+
+QTEST_MAIN(tst_QPixmapCache)
+#include "tst_qpixmapcache.moc"
diff --git a/tests/auto/gui/image/qpixmapfilter/noise.png b/tests/auto/gui/image/qpixmapfilter/noise.png
new file mode 100644
index 0000000000..1bebaf528e
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapfilter/noise.png
Binary files differ
diff --git a/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro b/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro
new file mode 100644
index 0000000000..21e10b7ab9
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapfilter/qpixmapfilter.pro
@@ -0,0 +1,13 @@
+load(qttest_p4)
+
+QT += widgets widgets-private
+QT += gui-private
+
+SOURCES += tst_qpixmapfilter.cpp
+
+wince*: {
+ addFiles.files = noise.png
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+}
+
diff --git a/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp
new file mode 100644
index 0000000000..5634285ad4
--- /dev/null
+++ b/tests/auto/gui/image/qpixmapfilter/tst_qpixmapfilter.cpp
@@ -0,0 +1,450 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <qpixmap.h>
+#include <private/qpixmapfilter_p.h>
+#include <qpainter.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QPixmapFilter : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QPixmapFilter();
+ virtual ~tst_QPixmapFilter();
+
+
+public slots:
+ void init();
+ void cleanup();
+
+private slots:
+ void colorizeSetColor();
+ void colorizeSetStrength();
+ void colorizeProcess();
+ void colorizeDraw();
+ void colorizeDrawStrength();
+ void colorizeDrawSubRect();
+ void colorizeProcessSubRect();
+ void convolutionBoundingRectFor();
+ void convolutionDrawSubRect();
+ void dropShadowBoundingRectFor();
+ void blurIndexed8();
+
+ void testDefaultImplementations();
+};
+
+class CustomFilter : public QPixmapFilter
+{
+public:
+ enum { Type = QPixmapFilter::UserFilter + 1 };
+
+ CustomFilter() : QPixmapFilter((QPixmapFilter::FilterType) Type, 0) { };
+
+ void draw(QPainter *p, const QPointF &pt, const QPixmap &src, const QRectF &srcRect = QRectF()) const {
+ p->drawPixmap(QRectF(pt, srcRect.size()), src, srcRect);
+ }
+};
+
+tst_QPixmapFilter::tst_QPixmapFilter()
+{
+}
+
+tst_QPixmapFilter::~tst_QPixmapFilter()
+{
+}
+
+void tst_QPixmapFilter::init()
+{
+}
+
+void tst_QPixmapFilter::cleanup()
+{
+}
+
+void tst_QPixmapFilter::testDefaultImplementations()
+{
+ CustomFilter filter;
+ QCOMPARE(filter.type(), (QPixmapFilter::FilterType) CustomFilter::Type);
+
+ QCOMPARE(filter.boundingRectFor(QRectF(1, 2, 4, 8)), QRectF(1, 2, 4, 8));
+
+ QPixmap src(10, 10);
+ src.fill(Qt::blue);
+
+ QPixmap test(src.size());
+ QPainter p(&test);
+ filter.draw(&p, QPointF(0, 0), src, src.rect());
+ p.end();
+
+ QCOMPARE(test.toImage().pixel(0, 0), 0xff0000ff);
+}
+
+void tst_QPixmapFilter::colorizeSetColor()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(QColor(50, 100, 200));
+ QCOMPARE(filter.color(), QColor(50, 100, 200));
+}
+
+void tst_QPixmapFilter::colorizeSetStrength()
+{
+ QPixmapColorizeFilter filter;
+ QCOMPARE(filter.strength(), qreal(1));
+ filter.setStrength(0.5);
+ QCOMPARE(filter.strength(), qreal(0.5));
+ filter.setStrength(0.0);
+ QCOMPARE(filter.strength(), qreal(0.0));
+}
+
+void tst_QPixmapFilter::colorizeProcess()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(QColor(100, 100, 100));
+
+ QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(0, 0, 50, 50));
+ QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(30, 20, 10, 40));
+ QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(2.2, 6.3, 11.4, 47.5));
+
+ QPixmap source("noise.png");
+ QImage result(source.size(), QImage::Format_ARGB32_Premultiplied);
+ result.fill(0);
+ QPainter p(&result);
+ filter.draw(&p, QPointF(0, 0), source);
+ p.end();
+ QImage resultImg = result;
+ for(int y = 0; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width(); x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QCOMPARE(qRed(pixel), qGreen(pixel));
+ QCOMPARE(qGreen(pixel), qBlue(pixel));
+ }
+ }
+}
+
+void tst_QPixmapFilter::colorizeDraw()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(QColor(100, 100, 100));
+
+ QPixmap pixmap("noise.png");
+ QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&result);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ painter.fillRect(result.rect(), QColor(128, 0, 0, 0));
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ filter.draw(&painter, QPointF(0, 0), pixmap);
+ painter.end();
+
+ QImage resultImg = result;
+ for(int y = 0; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width(); x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QCOMPARE(qRed(pixel), qGreen(pixel));
+ QCOMPARE(qGreen(pixel), qBlue(pixel));
+ }
+ }
+}
+
+void tst_QPixmapFilter::colorizeDrawStrength()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(Qt::blue);
+ filter.setStrength(0.3);
+
+ QImage source(256, 128, QImage::Format_ARGB32);
+ source.fill(qRgb(255, 0, 0));
+ QPixmap pixmap = QPixmap::fromImage(source);
+
+ QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&result);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ filter.draw(&painter, QPointF(0, 0), pixmap);
+ painter.end();
+
+ QImage resultImg = result;
+ for(int y = 0; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width(); x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QCOMPARE(qRed(pixel), 206);
+ QCOMPARE(qGreen(pixel), 26);
+ QCOMPARE(qBlue(pixel), 75);
+ }
+ }
+}
+
+void tst_QPixmapFilter::colorizeDrawSubRect()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(QColor(255, 255, 255));
+
+ QPixmap pixmap("noise.png");
+ QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&result);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ painter.fillRect(result.rect(), QColor(128, 0, 0, 255));
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ filter.draw(&painter, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16));
+ painter.end();
+
+ QImage resultImg = result;
+ QImage sourceImg = pixmap.toImage();
+ for(int y = 0; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width(); x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ if(x>=16 && x<32 && y>=16 && y<32) {
+ QCOMPARE(qRed(pixel), qGreen(pixel));
+ QCOMPARE(qGreen(pixel), qBlue(pixel));
+ } else {
+ QCOMPARE(qRed(pixel), 128);
+ QCOMPARE(qGreen(pixel), 0);
+ QCOMPARE(qBlue(pixel), 0);
+ QCOMPARE(qAlpha(pixel), 255);
+ }
+ }
+ }
+}
+
+void tst_QPixmapFilter::colorizeProcessSubRect()
+{
+ QPixmapColorizeFilter filter;
+ filter.setColor(QColor(200, 200, 200));
+
+ QPixmap source("noise.png");
+ QImage result(QSize(16, 16), QImage::Format_ARGB32_Premultiplied);
+ result.fill(0);
+ QPainter p(&result);
+ filter.draw(&p, QPointF(0, 0), source, QRectF(16, 16, 16, 16));
+ p.end();
+
+ QImage resultImg = result;
+ for(int y = 0; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width(); x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QCOMPARE(qRed(pixel), qGreen(pixel));
+ QCOMPARE(qGreen(pixel), qBlue(pixel));
+ }
+ }
+}
+
+void tst_QPixmapFilter::convolutionBoundingRectFor()
+{
+ QPixmapConvolutionFilter filter;
+ QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(0, 0, 50, 50));
+ QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(30, 20, 10, 40));
+ QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(2.2, 6.3, 11.4, 47.5));
+ qreal kernel[] = {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0
+ };
+ filter.setConvolutionKernel(kernel, 2, 2);
+ QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-1, -1, 51, 51));
+ QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(29, 19, 11, 41));
+ QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(1.2, 5.3, 12.4, 48.5));
+
+ filter.setConvolutionKernel(kernel, 3, 3);
+ QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-1, -1, 52, 52));
+ QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(29, 19, 12, 42));
+ QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(1.2, 5.3, 13.4, 49.5));
+
+ filter.setConvolutionKernel(kernel, 4, 4);
+ QCOMPARE(filter.boundingRectFor(QRectF(0, 0, 50, 50)), QRectF(-2, -2, 53, 53));
+ QCOMPARE(filter.boundingRectFor(QRectF(30, 20, 10, 40)), QRectF(28, 18, 13, 43));
+ QCOMPARE(filter.boundingRectFor(QRectF(2.2, 6.3, 11.4, 47.5)), QRectF(0.2, 4.3, 14.4, 50.5));
+}
+
+void tst_QPixmapFilter::convolutionDrawSubRect()
+{
+ QPixmapConvolutionFilter filter;
+ qreal kernel[] = {
+ 0, 0, 0,
+ 0, 0, 0,
+ 0, 0, 1
+ };
+ filter.setConvolutionKernel(kernel, 3, 3);
+
+ QPixmap pixmap("noise.png");
+ QImage result(pixmap.size(), QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&result);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ painter.fillRect(result.rect(), QColor(128, 0, 0, 255));
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ filter.draw(&painter, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16));
+ painter.end();
+
+ QImage resultImg = result;
+ QImage sourceImg = pixmap.toImage();
+ for(int y = 0; y < resultImg.height()-1; y++)
+ {
+ for(int x = 0; x < resultImg.width()-1; x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QRgb srcPixel = sourceImg.pixel(x+1,y+1);
+ if(x>=15 && x<33 && y>=15 && y<33) {
+ QCOMPARE(pixel, srcPixel);
+ } else {
+ QCOMPARE(qRed(pixel), 128);
+ QCOMPARE(qGreen(pixel), 0);
+ QCOMPARE(qBlue(pixel), 0);
+ QCOMPARE(qAlpha(pixel), 255);
+ }
+ }
+ }
+
+
+ kernel[2] = 1;
+ kernel[8] = 0;
+ filter.setConvolutionKernel(kernel, 3, 3);
+
+ QPainter painter2(&result);
+ painter2.setCompositionMode(QPainter::CompositionMode_Source);
+ painter2.fillRect(result.rect(), QColor(128, 0, 0, 255));
+ painter2.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ filter.draw(&painter2, QPointF(16, 16), pixmap, QRectF(16, 16, 16, 16));
+ painter2.end();
+
+ resultImg = result;
+ sourceImg = pixmap.toImage();
+ for(int y = 1; y < resultImg.height(); y++)
+ {
+ for(int x = 0; x < resultImg.width()-1; x++)
+ {
+ QRgb pixel = resultImg.pixel(x,y);
+ QRgb srcPixel = sourceImg.pixel(x+1,y-1);
+ if(x>=15 && x<33 && y>=15 && y<33) {
+ QCOMPARE(pixel, srcPixel);
+ } else {
+ QCOMPARE(qRed(pixel), 128);
+ QCOMPARE(qGreen(pixel), 0);
+ QCOMPARE(qBlue(pixel), 0);
+ QCOMPARE(qAlpha(pixel), 255);
+ }
+ }
+ }
+
+}
+
+void tst_QPixmapFilter::dropShadowBoundingRectFor()
+{
+ QPixmapDropShadowFilter filter;
+ filter.setBlurRadius(0);
+
+ QCOMPARE(filter.blurRadius(), 0.);
+
+ const QRectF rect1(0, 0, 50, 50);
+ const QRectF rect2(30, 20, 10, 40);
+ const QRectF rect3(2.2, 6.3, 11.4, 47.5);
+
+ filter.setOffset(QPointF(0,0));
+ QCOMPARE(filter.boundingRectFor(rect1), rect1);
+ QCOMPARE(filter.boundingRectFor(rect2), rect2);
+ QCOMPARE(filter.boundingRectFor(rect3), rect3);
+
+ filter.setOffset(QPointF(1,1));
+ QCOMPARE(filter.offset(), QPointF(1, 1));
+ QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(0, 0, 1, 1));
+ QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(0, 0, 1, 1));
+ QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(0, 0, 1, 1));
+
+ filter.setOffset(QPointF(-1,-1));
+ QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-1, -1, 0, 0));
+ QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-1, -1, 0, 0));
+ QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-1, -1, 0, 0));
+
+ filter.setBlurRadius(2);
+ filter.setOffset(QPointF(0,0));
+ qreal delta = 2;
+ QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta, -delta, delta, delta));
+ QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta, -delta, delta, delta));
+ QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta, -delta, delta, delta));
+
+ filter.setOffset(QPointF(1,1));
+ QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1));
+ QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1));
+ QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta + 1, -delta + 1, delta + 1, delta + 1));
+
+ filter.setOffset(QPointF(-10,-10));
+ QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta - 10, -delta - 10, 0, 0));
+ QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta - 10, -delta - 10, 0, 0));
+ QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta - 10, -delta - 10, 0, 0));
+}
+
+QT_BEGIN_NAMESPACE
+void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+QT_END_NAMESPACE
+
+void tst_QPixmapFilter::blurIndexed8()
+{
+ QImage img(16, 32, QImage::Format_Indexed8);
+ img.setColorCount(256);
+ for (int i = 0; i < 256; ++i)
+ img.setColor(i, qRgb(i, i, i));
+
+ img.fill(255);
+
+ QImage original = img;
+ qt_blurImage(img, 10, true, false);
+ QCOMPARE(original.size(), img.size());
+
+ original = img;
+ qt_blurImage(img, 10, true, true);
+ QCOMPARE(original.size(), QSize(img.height(), img.width()));
+}
+
+QTEST_MAIN(tst_QPixmapFilter)
+#include "tst_qpixmapfilter.moc"
diff --git a/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro b/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro
new file mode 100644
index 0000000000..45d80b85f2
--- /dev/null
+++ b/tests/auto/gui/image/qvolatileimage/qvolatileimage.pro
@@ -0,0 +1,10 @@
+load(qttest_p4)
+
+QT += gui-private widgets
+
+SOURCES += tst_qvolatileimage.cpp
+
+symbian {
+ TARGET.EPOCHEAPSIZE = 0x200000 0x800000
+ LIBS += -lfbscli
+}
diff --git a/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp b/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp
new file mode 100644
index 0000000000..bacca66dcd
--- /dev/null
+++ b/tests/auto/gui/image/qvolatileimage/tst_qvolatileimage.cpp
@@ -0,0 +1,403 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QtGui/qpainter.h>
+#include <QtGui/qpaintengine.h>
+#include <QtGui/private/qvolatileimage_p.h>
+#ifdef Q_OS_SYMBIAN
+#include <fbs.h>
+#endif
+
+class tst_QVolatileImage : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QVolatileImage() { }
+
+private slots:
+ void create();
+ void ensureFormat();
+ void dataAccess();
+ void sharing();
+ void paint();
+ void fill();
+ void copy();
+ void bitmap();
+};
+
+void tst_QVolatileImage::create()
+{
+ QVolatileImage nullImg;
+ QVERIFY(nullImg.isNull());
+
+ QVolatileImage img(100, 200, QImage::Format_ARGB32);
+ QVERIFY(!img.isNull());
+ QCOMPARE(img.width(), 100);
+ QCOMPARE(img.height(), 200);
+ QCOMPARE(img.format(), QImage::Format_ARGB32);
+ QCOMPARE(img.byteCount(), img.bytesPerLine() * img.height());
+ QCOMPARE(img.hasAlphaChannel(), true);
+ QCOMPARE(img.depth(), 32);
+
+ QImage source(12, 23, QImage::Format_ARGB32_Premultiplied);
+ img = QVolatileImage(source);
+ QVERIFY(!img.isNull());
+ QCOMPARE(img.width(), 12);
+ QCOMPARE(img.height(), 23);
+ QCOMPARE(img.format(), source.format());
+ QCOMPARE(img.byteCount(), img.bytesPerLine() * img.height());
+ QVERIFY(img.imageRef() == source);
+ QVERIFY(img.toImage() == source);
+ QCOMPARE(img.hasAlphaChannel(), true);
+ QCOMPARE(img.hasAlphaChannel(), img.imageRef().hasAlphaChannel());
+ QCOMPARE(img.hasAlphaChannel(), img.toImage().hasAlphaChannel());
+ QCOMPARE(img.depth(), 32);
+
+#ifdef Q_OS_SYMBIAN
+ CFbsBitmap *bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone);
+ QVolatileImage bmpimg(bmp);
+ QVERIFY(!bmpimg.isNull());
+ QCOMPARE(bmpimg.width(), 100);
+ QCOMPARE(bmpimg.height(), 50);
+ // Verify that we only did handle duplication, not pixel data copying.
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ delete bmp;
+ // Check if content is still valid.
+ QImage copyimg = bmpimg.toImage();
+ QCOMPARE(copyimg.format(), QImage::Format_ARGB32_Premultiplied);
+#endif
+}
+
+void tst_QVolatileImage::ensureFormat()
+{
+ QImage source(12, 23, QImage::Format_ARGB32_Premultiplied);
+ QVolatileImage img(source);
+ QVERIFY(!img.isNull());
+ QVERIFY(img.imageRef() == source);
+ QVERIFY(img.toImage() == source);
+
+ QVERIFY(img.ensureFormat(QImage::Format_ARGB32_Premultiplied)); // no-op
+ QVERIFY(img.imageRef() == source);
+ QVERIFY(img.toImage() == source);
+ QVERIFY(img.format() == QImage::Format_ARGB32_Premultiplied);
+
+ QVERIFY(img.ensureFormat(QImage::Format_RGB32)); // new data under-the-hood
+ QVERIFY(img.imageRef() != source);
+ QVERIFY(img.toImage() != source);
+ QVERIFY(img.format() == QImage::Format_RGB32);
+
+#ifdef Q_OS_SYMBIAN
+ CFbsBitmap *bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone);
+ QVolatileImage bmpimg(bmp);
+ QVERIFY(bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied)); // no-op
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+
+ // A different format should cause data copying.
+ QVERIFY(bmpimg.ensureFormat(QImage::Format_RGB32));
+ QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress());
+ const uchar *prevBits = bmpimg.constBits();
+
+ QVERIFY(bmpimg.ensureFormat(QImage::Format_RGB16));
+ QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress());
+ QVERIFY(bmpimg.constBits() != prevBits);
+ prevBits = bmpimg.constBits();
+
+ QVERIFY(bmpimg.ensureFormat(QImage::Format_MonoLSB));
+ QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress());
+ QVERIFY(bmpimg.constBits() != prevBits);
+
+ delete bmp;
+#endif
+}
+
+void tst_QVolatileImage::dataAccess()
+{
+ QImage source(12, 23, QImage::Format_ARGB32_Premultiplied);
+ QVolatileImage img(source);
+ QVERIFY(!img.isNull());
+ img.beginDataAccess();
+ QVERIFY(img.constBits());
+ QVERIFY(img.imageRef().constBits());
+ QVERIFY(img.bits());
+ QVERIFY(img.imageRef().bits());
+ img.endDataAccess();
+
+ img = QVolatileImage(12, 23, QImage::Format_ARGB32);
+ img.beginDataAccess();
+ QVERIFY(img.constBits() && img.bits());
+ img.endDataAccess();
+}
+
+void tst_QVolatileImage::sharing()
+{
+ QVolatileImage img1(100, 100, QImage::Format_ARGB32);
+ QVolatileImage img2 = img1;
+ img1.beginDataAccess();
+ img2.beginDataAccess();
+ QVERIFY(img1.constBits() == img2.constBits());
+ img2.endDataAccess();
+ img1.endDataAccess();
+ img1.imageRef(); // non-const call, should detach
+ img1.beginDataAccess();
+ img2.beginDataAccess();
+ QVERIFY(img1.constBits() != img2.constBits());
+ img2.endDataAccess();
+ img1.endDataAccess();
+
+ // toImage() should return a copy of the internal QImage.
+ // imageRef() is a reference to the internal QImage.
+ QVERIFY(img1.imageRef().constBits() != img1.toImage().constBits());
+
+#ifdef Q_OS_SYMBIAN
+ CFbsBitmap *bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(100, 50), EColor16MAP) == KErrNone);
+ QVolatileImage bmpimg(bmp);
+ QVolatileImage bmpimg2;
+ bmpimg2 = bmpimg;
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ QCOMPARE(bmpimg2.constBits(), (const uchar *) bmp->DataAddress());
+ // Now force a detach, which should copy the pixel data under-the-hood.
+ bmpimg.imageRef();
+ QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress());
+ QCOMPARE(bmpimg2.constBits(), (const uchar *) bmp->DataAddress());
+ delete bmp;
+#endif
+}
+
+bool fuzzyCompareImages(const QImage &image1, const QImage &image2, int tolerance)
+{
+ if (image1.bytesPerLine() != image2.bytesPerLine()
+ || image1.width() != image2.width()
+ || image1.height() != image2.height()) {
+ return false;
+ }
+ for (int i = 0; i < image1.height(); i++) {
+ const uchar *line1 = image1.scanLine(i);
+ const uchar *line2 = image2.scanLine(i);
+ int bytes = image1.bytesPerLine();
+ for (int j = 0; j < bytes; j++) {
+ int delta = line1[j] - line2[j];
+ if (qAbs(delta) > tolerance)
+ return false;
+ }
+ }
+ return true;
+}
+
+void tst_QVolatileImage::paint()
+{
+#ifdef Q_OS_SYMBIAN
+ QVolatileImage img(100, 100, QImage::Format_ARGB32);
+ img.beginDataAccess();
+ img.imageRef().fill(QColor(Qt::green).rgba());
+ QPainter p(&img.imageRef());
+ p.drawRect(10, 10, 50, 50);
+ p.end();
+ img.endDataAccess();
+ QImage imgA = img.toImage();
+
+ // The following assumes that on openvg the pixmapdata is backed by QVolatileImage)
+ // (and that openvg is in use)
+ // It should pass with any engine nonetheless.
+ // See if painting into the underlying QImage succeeds.
+ QPixmap pm(100, 100);
+ if (pm.paintEngine()->type() == QPaintEngine::Raster) {
+ pm.fill(Qt::green);
+ QPainter pmp(&pm);
+ pmp.drawRect(10, 10, 50, 50);
+ pmp.end();
+ QImage imgB = pm.toImage();
+ QVERIFY(fuzzyCompareImages(imgA, imgB, 0));
+ // Exercise the accelerated QVolatileImagePaintEngine::drawPixmap() a bit.
+ QPixmap targetPm(pm.size());
+ targetPm.fill(Qt::black);
+ pmp.begin(&targetPm);
+ pmp.drawPixmap(QPointF(0, 0), pm);
+ pmp.end();
+ imgB = targetPm.toImage();
+ QVERIFY(fuzzyCompareImages(imgA, imgB, 0));
+ // Now the overload taking rects.
+ targetPm.fill(Qt::black);
+ pmp.begin(&targetPm);
+ QRectF rect(QPointF(0, 0), pm.size());
+ pmp.drawPixmap(rect, pm, rect);
+ pmp.end();
+ imgB = targetPm.toImage();
+ QVERIFY(fuzzyCompareImages(imgA, imgB, 0));
+ } else {
+ QSKIP("Pixmaps not painted via raster, skipping paint test", SkipSingle);
+ }
+#endif
+}
+
+void tst_QVolatileImage::fill()
+{
+ QVolatileImage img(100, 100, QImage::Format_ARGB32_Premultiplied);
+ QColor col = QColor(10, 20, 30);
+ img.fill(col.rgba());
+ QVERIFY(img.imageRef().pixel(1, 1) == col.rgba());
+ QVERIFY(img.toImage().pixel(1, 1) == col.rgba());
+
+#ifdef Q_OS_SYMBIAN
+ CFbsBitmap *bmp = static_cast<CFbsBitmap *>(img.duplicateNativeImage());
+ QVERIFY(bmp);
+ TRgb pix;
+ bmp->GetPixel(pix, TPoint(1, 1));
+ QCOMPARE(pix.Red(), col.red());
+ QCOMPARE(pix.Green(), col.green());
+ QCOMPARE(pix.Blue(), col.blue());
+ delete bmp;
+#endif
+}
+
+void tst_QVolatileImage::copy()
+{
+ QVolatileImage img(100, 100, QImage::Format_RGB32);
+ img.beginDataAccess();
+ img.imageRef().fill(QColor(Qt::green).rgba());
+ QPainter p(&img.imageRef());
+ p.drawRect(10, 10, 50, 50);
+ p.end();
+ img.endDataAccess();
+
+ QVolatileImage img2(100, 100, QImage::Format_RGB32);
+ img2.copyFrom(&img, QRect());
+ QImage imgA = img.toImage();
+ QImage imgB = img2.toImage();
+ QCOMPARE(imgA.size(), imgB.size());
+ QVERIFY(fuzzyCompareImages(imgA, imgB, 0));
+
+ img2 = QVolatileImage(20, 20, QImage::Format_RGB32);
+ img2.copyFrom(&img, QRect(5, 5, 20, 20));
+ imgA = img.toImage().copy(5, 5, 20, 20);
+ imgB = img2.toImage();
+ QCOMPARE(imgA.size(), imgB.size());
+ QVERIFY(fuzzyCompareImages(imgA, imgB, 0));
+}
+
+void tst_QVolatileImage::bitmap()
+{
+#ifdef Q_OS_SYMBIAN
+ CFbsBitmap *bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(100, 50), EColor64K) == KErrNone);
+ QVolatileImage bmpimg(bmp);
+ CFbsBitmap *dupbmp = static_cast<CFbsBitmap *>(bmpimg.duplicateNativeImage());
+ QVERIFY(dupbmp);
+ QVERIFY(dupbmp != bmp);
+ QCOMPARE(dupbmp->DataAddress(), bmp->DataAddress());
+ delete dupbmp;
+ delete bmp;
+ bmpimg.beginDataAccess();
+ qMemSet(bmpimg.bits(), 0, bmpimg.byteCount());
+ qMemSet(bmpimg.bits(), 1, bmpimg.bytesPerLine() * bmpimg.height());
+ bmpimg.endDataAccess();
+
+ // Test bgr->rgb conversion in case of EColor16M.
+ bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(101, 89), EColor16M) == KErrNone);
+ bmp->BeginDataAccess();
+ TUint32 *addr = bmp->DataAddress();
+ uint rgb = QColor(10, 20, 30).rgb();
+ qMemCopy(bmp->DataAddress(), &rgb, 3);
+ bmp->EndDataAccess();
+ TRgb symrgb;
+ bmp->GetPixel(symrgb, TPoint(0, 0));
+ QVERIFY(symrgb.Red() == 10 && symrgb.Green() == 20 && symrgb.Blue() == 30);
+ bmpimg = QVolatileImage(bmp);
+ QVERIFY(bmpimg.toImage().pixel(0, 0) == rgb);
+ // check if there really was a conversion
+ bmp->BeginDataAccess();
+ bmpimg.beginDataAccess();
+ qMemCopy(&rgb, bmpimg.constBits(), 3);
+ uint rgb2 = rgb;
+ qMemCopy(&rgb2, bmp->DataAddress(), 3);
+ QVERIFY(rgb != rgb2);
+ bmpimg.endDataAccess(true);
+ bmp->EndDataAccess(true);
+ delete bmp;
+
+ bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(101, 89), EGray2) == KErrNone);
+ bmpimg = QVolatileImage(bmp); // inverts pixels, but should do it in place
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ QCOMPARE(bmpimg.format(), QImage::Format_MonoLSB);
+ bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied);
+ QVERIFY(bmpimg.constBits() != (const uchar *) bmp->DataAddress());
+ QCOMPARE(bmpimg.format(), QImage::Format_ARGB32_Premultiplied);
+ delete bmp;
+
+ // The following two formats must be optimal always.
+ bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(101, 89), EColor16MAP) == KErrNone);
+ bmpimg = QVolatileImage(bmp);
+ QCOMPARE(bmpimg.format(), QImage::Format_ARGB32_Premultiplied);
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ bmpimg.ensureFormat(QImage::Format_ARGB32_Premultiplied);
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ delete bmp;
+ bmp = new CFbsBitmap;
+ QVERIFY(bmp->Create(TSize(101, 89), EColor16MU) == KErrNone);
+ bmpimg = QVolatileImage(bmp);
+ QCOMPARE(bmpimg.format(), QImage::Format_RGB32);
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ bmpimg.ensureFormat(QImage::Format_RGB32);
+ QCOMPARE(bmpimg.constBits(), (const uchar *) bmp->DataAddress());
+ delete bmp;
+
+#else
+ QSKIP("CFbsBitmap is only available on Symbian, skipping bitmap test", SkipSingle);
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication::setGraphicsSystem("openvg");
+ QApplication app(argc, argv);
+ tst_QVolatileImage tc;
+ return QTest::qExec(&tc, argc, argv);
+}
+
+#include "tst_qvolatileimage.moc"