#----------------------------------------------------------------------
# This file was generated by C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\img2py.py
#
from wx import ImageFromStream, BitmapFromImage, EmptyIcon
import cStringIO, zlib


def getData():
    return zlib.decompress(
'x\xda\x01\xf5\x03\n\xfc\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\
\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\
\x08d\x88\x00\x00\x03\xacIDATX\x85\xe5\x97\xcfK+W\x14\xc7?\x93d\x921&5\xc4TD\
\x9fZ4\xb8x\xbc\x85F\xe9?P\xca\xdb\n\xee\xdd\xd5TT\xac\xbb\x16\xe9+B\x97>\
\xa5.Z(B\xb7.\xba.v\xe9>\x1b\x17\x82P\x8a\xf8\xe3\x11SS\x13\'\xc6\x9a\x99;s\
\xbbp2L\x12\x7f\xcc3\xb6]\xf4\x0b\x87\xdc{\xee\x99s\xbe|\xcf\xbdw&\xf0\x7f\
\x87r\xdf\xc2\xc6\xc6\xc6\x0f\x86a\xcc\x02\x816k\xd8\xe1p\xf8\xc7\xe5\xe5\
\xe5\xb9\xbb\x16C\xf7=e\x9a\xe6\xec\xd2\xd2R\xbb\xc5\x01\x02\x9b\x9b\x9b\xb3\
\xc0\xfb\x11\x90R\x06\x00\xce\xce\xce\xda\xaa\xde\xdb\xdb\xeb\xe6z/\x02^\x9c\
\x9c\x9c\xdc\xe9\x17BP*\x95H\xa5R(Jc7\x07\x06\x06|\x11|\x94\x80\xaa\xaa\x0c\
\x0f\x0f\xdfY|oo\x8fZ\xad\x86\x10\x82\xd1\xd1Q_\x05\x9fD\xe0\xf8\xf8\x18\x00\
)\xa5\xeb\xcf\xe7\xf3T\xabU\x00\n\x85\x02\x00\xf1x\xdc]\x1f\x1c\x1c|\x1e\x02\
\xa1P\xa8E\x81\x83\x83\x03\xb7x\x1d\xe7\xe7\xe7\xa4\xd3ib\xb1\x98\xeb\xf3\
\x12~2\x01UU9::r\xe7\xa5R\x89\xd3\xd3\xd3\x968\xdb\xb6\xc9\xe5r\x8c\x8c\x8c\
\x10\x08\x04\x18\x1a\x1az\xb4\xb8o\x02\xe9t\x1a\x80b\xb1\xc8\xfe\xfe\xfe\xbd\
\xb1\xb5Z\r]\xd7\x99\x9c\x9c\xf4U\xdc7\x81\xc3\xc3Cw\x9e\xc9d\x00\xc8\xe5r-\
\xb1SSS\xa8\xaa\xda\xe0\x13B\xb4G@\xd7uR\xa9\x94;o>n^\xdc\xdc\xdc \x84h\x88\
\t\x85\x1e.\xf1\xe0\xaaa\x18\xeeE\xe4M\xaa(\x8a\xab\x84\xd7_,\x16[\x88\xf6\
\xf4\xf4\xf8\'\x90\xcdf?\x0e\x06\x83\xbfX\x96\xd5\rpqqqgR/\x9a}\xcd\xf3\xba\
\x02\xd9lV\x86\x82\xc1B\xcd0>\xd9\xda\xdar7\x92\x1b\xbd\xb8\xb8\x18\t\x06\
\x83\xbf\xaf\xac\xac\xf4\'\x12\t\xd6\xd7\xd7\x19\x1b\x1b\xa3R\xa9\xb4$\xbe\
\xebx\xddG\xa4\xb3\xb3\x93\\.\xc7\xc2\xc2\x02\xe5r\x99\xb5\xb5\xb5\xdf\x92\
\xc9\xe4\xcb\xd5\xd5U\xd1\xac\xc0W333=\x89D\x02\x80d2\xe9^0\xed\xe0\xea\xea\
\x8ax<\xce\xf5\xf55\xb1X\x8c\xe9\xe9\xe9\x8f\xb6\xb7\xb7\xbf\x04\xbem\x08\
\x9c\x9f\x9f/Y\x96%m\xdb\xf6e\x96e=\xc9\x84\x10rn\xee\xf3\xabz]W\x01!DBJI>\
\xff\x0eUU9=}\x87\xa6i$\x93I\xa4\x94\xdc\xaa.AJl)\x01\x89\xb4Ar\xdb\x0ey;\
\xb9]\x93\xcd~\x89\xaeW0\x85\xc9\xf8\xf8\x04\xb6-;[\x08\x00X\x96\xc5\xe5\xe5\
%\x03/\x06\xb1,\x8b\xae\x0f\xe2D;\xa2\x9e\x88zr\x1a}@\xe3\xb6h\x8e\x93\x9c\
\x15\xfe\xe0\xe6\xafk\x8cZ\xad\xe1\xe9\x86\xf7\xb4eY\xec\xec\xfc\x8a\x10&/\
\xfa\xfb\xd14\x8dpX\xf5X\x98p$L\xa4\xc1"D"\x114\xcdk\x1aZ\x87F\x87c\x00\xbb\
\xbb\xbb\x00\x18\xa6\xd1@\xa0E\x81\xbe\xbe>\xbe~\xf3\r\xa6i6\x04\xd6\xf7\xf8\
\xe3\xaf\x97V\xa8\xaa\xca\xabW/o\t\x18\x0f\x10\xb0m\x8b\x89\x89\x0c\x99\xcc8\
RJl\xdbv\xfa\xef\x19\xdb6\xb6\xe3\x93\x8e\xcf\xf63v~\xcd&\x02--\xf8\xa7a4)\
\xfb\xef\x13\xf8\xaf\x15hnA}\x0fD\x02\x81\x80Q\xa9\xe8\xe1h4\xea\xe9\xbbs\
\xde\xbdc\xdb{\x0f8{\xc1\xcfX\xdaH\t\xba~\x89\xa2(\x16\x90\x04\xca!G\x85\xae\
j\xb5\xfa\xfd\xdb\xb7\x1b_\xf8\xf9\x8cj\x07\x8a\xa2P.\x97\x7fr\x08H\xc5Q\xa1\
\x1bH\xbd~\xfd\xe9|w\xf7\x87\x9fI)}}\xae?\x01V\xa9T\xfaygg\xe7;\xe0O\xa0P?\
\xde\x9a\xc3\xa8\x0b\x88:\xa4\x9e\xe3_\x91\x17\xa6\x93\xd3\x04\xae\x80s\xe0\
\xb2\xf9\x05\xaf\x02a \xf2\xcc\xc5\x01,\xc7L\xc0\xe0iw\xda\xf3\xe3o\xfe\xfdT\
R\xd6\x04\xb1Y\x00\x00\x00\x00IEND\xaeB`\x829\x9b\xe7\xcb' )

def getBitmap():
    return BitmapFromImage(getImage())

def getImage():
    stream = cStringIO.StringIO(getData())
    return ImageFromStream(stream)

def getIcon():
    icon = EmptyIcon()
    icon.CopyFromBitmap(getBitmap())
    return icon

