collidingmice

(You can also check this code in the repository)

import math
import sys

from PySide6.QtCore import (QLineF, QPointF, QRandomGenerator, QRectF, QTimer,
                            Qt)
from PySide6.QtGui import (QBrush, QColor, QPainter, QPainterPath, QPixmap,
                           QPolygonF, QTransform)
from PySide6.QtWidgets import (QApplication, QGraphicsItem, QGraphicsScene,
                               QGraphicsView)

import mice_rc


def random(boundary):
    return QRandomGenerator.global_().bounded(boundary)


class Mouse(QGraphicsItem):
    PI = math.pi
    TWO_PI = 2.0 * PI

    # Create the bounding rectangle once.
    adjust = 0.5
    BOUNDING_RECT = QRectF(-20 - adjust, -22 - adjust, 40 + adjust,
            83 + adjust)

    def __init__(self):
        super().__init__()

        self.angle = 0.0
        self.speed = 0.0
        self._mouse_eye_direction = 0.0
        self.color = QColor(random(256), random(256), random(256))

        self.setTransform(QTransform().rotate(random(360 * 16)))

    @staticmethod
    def normalize_angle(angle):
        while angle < 0:
            angle += Mouse.TWO_PI
        while angle > Mouse.TWO_PI:
            angle -= Mouse.TWO_PI
        return angle

    def boundingRect(self):
        return Mouse.BOUNDING_RECT

    def shape(self):
        path = QPainterPath()
        path.addRect(-10, -20, 20, 40)
        return path

    def paint(self, painter, option, widget):
        # Body.
        painter.setBrush(self.color)
        painter.drawEllipse(-10, -20, 20, 40)

        # Eyes.
        painter.setBrush(Qt.white)
        painter.drawEllipse(-10, -17, 8, 8)
        painter.drawEllipse(2, -17, 8, 8)

        # Nose.
        painter.setBrush(Qt.black)
        painter.drawEllipse(QRectF(-2, -22, 4, 4))

        # Pupils.
        painter.drawEllipse(QRectF(-8.0 + self._mouse_eye_direction, -17, 4, 4))
        painter.drawEllipse(QRectF(4.0 + self._mouse_eye_direction, -17, 4, 4))

        # Ears.
        if self.scene().collidingItems(self):
            painter.setBrush(Qt.red)
        else:
            painter.setBrush(Qt.darkYellow)

        painter.drawEllipse(-17, -12, 16, 16)
        painter.drawEllipse(1, -12, 16, 16)

        # Tail.
        path = QPainterPath(QPointF(0, 20))
        path.cubicTo(-5, 22, -5, 22, 0, 25)
        path.cubicTo(5, 27, 5, 32, 0, 30)
        path.cubicTo(-5, 32, -5, 42, 0, 35)
        painter.setBrush(Qt.NoBrush)
        painter.drawPath(path)

    def advance(self, phase):
        if not phase:
            return
        # Don't move too far away.
        line_to_center = QLineF(QPointF(0, 0), self.mapFromScene(0, 0))
        if line_to_center.length() > 150:
            angle_to_center = math.acos(line_to_center.dx() / line_to_center.length())
            if line_to_center.dy() < 0:
                angle_to_center = Mouse.TWO_PI - angle_to_center
            angle_to_center = Mouse.normalize_angle((Mouse.PI - angle_to_center) + Mouse.PI / 2)

            if angle_to_center < Mouse.PI and angle_to_center > Mouse.PI / 4:
                # Rotate left.
                self.angle += [-0.25, 0.25][self.angle < -Mouse.PI / 2]
            elif angle_to_center >= Mouse.PI and angle_to_center < (Mouse.PI + Mouse.PI / 2 + Mouse.PI / 4):
                # Rotate right.
                self.angle += [-0.25, 0.25][self.angle < Mouse.PI / 2]
        elif math.sin(self.angle) < 0:
            self.angle += 0.25
        elif math.sin(self.angle) > 0:
            self.angle -= 0.25

        # Try not to crash with any other mice.
        danger_mice = self.scene().items(QPolygonF([self.mapToScene(0, 0),
                                                    self.mapToScene(-30, -50),
                                                    self.mapToScene(30, -50)]))

        for item in danger_mice:
            if item is self:
                continue

            line_to_mouse = QLineF(QPointF(0, 0), self.mapFromItem(item, 0, 0))
            angle_to_mouse = math.acos(line_to_mouse.dx() / line_to_mouse.length())
            if line_to_mouse.dy() < 0:
                angle_to_mouse = Mouse.TWO_PI - angle_to_mouse
            angle_to_mouse = Mouse.normalize_angle((Mouse.PI - angle_to_mouse) + Mouse.PI / 2)

            if angle_to_mouse >= 0 and angle_to_mouse < Mouse.PI / 2:
                # Rotate right.
                self.angle += 0.5
            elif angle_to_mouse <= Mouse.TWO_PI and angle_to_mouse > (Mouse.TWO_PI - Mouse.PI / 2):
                # Rotate left.
                self.angle -= 0.5

        # Add some random movement.
        if len(danger_mice) > 1 and random(10) == 0:
            if random(2) != 0:
                self.angle += random(100) / 500.0
            else:
                self.angle -= random(100) / 500.0

        self.speed += (-50 + random(100)) / 100.0

        dx = math.sin(self.angle) * 10

        self._mouse_eye_direction = [dx / 5, 0.0][abs(dx / 5) < 1]

        self.setRotation(self.rotation() + dx)
        self.setPos(self.mapToParent(0, -(3 + math.sin(self.speed) * 3)))


if __name__ == '__main__':
    MOUSE_COUNT = 7
    app = QApplication(sys.argv)

    scene = QGraphicsScene()
    scene.setSceneRect(-300, -300, 600, 600)
    scene.setItemIndexMethod(QGraphicsScene.NoIndex)

    for i in range(MOUSE_COUNT):
        mouse = Mouse()
        mouse.setPos(math.sin((i * 6.28) / MOUSE_COUNT) * 200,
                     math.cos((i * 6.28) / MOUSE_COUNT) * 200)
        scene.addItem(mouse)

    view = QGraphicsView(scene)
    view.setRenderHint(QPainter.Antialiasing)
    view.setBackgroundBrush(QBrush(QPixmap(':/images/cheese.jpg')))
    view.setCacheMode(QGraphicsView.CacheBackground)
    view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
    view.setDragMode(QGraphicsView.ScrollHandDrag)
    view.setWindowTitle("Colliding Mice")
    view.resize(400, 300)
    view.show()

    timer = QTimer()
    timer.timeout.connect(scene.advance)
    timer.start(1000 / 33)
    sys.exit(app.exec())
# -*- coding: utf-8 -*-


# Resource object code
#
# Created: Fri Jul 30 17:52:15 2010
#      by: The Resource Compiler for PySide (Qt v4.6.2)
#
# WARNING! All changes made in this file will be lost!

from PySide6 import QtCore

qt_resource_data = b"\
\x00\x00\x0b\xd5\
\xff\
\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x02\x01\x00\x48\x00\
\x48\x00\x00\xff\xee\x00\x0e\x41\x64\x6f\x62\x65\x00\x64\x40\x00\
\x00\x00\x01\xff\xdb\x00\x84\x00\x02\x02\x02\x02\x02\x02\x02\x02\
\x02\x02\x03\x02\x02\x02\x03\x04\x03\x02\x02\x03\x04\x05\x04\x04\
\x04\x04\x04\x05\x06\x05\x05\x05\x05\x05\x05\x06\x06\x07\x07\x08\
\x07\x07\x06\x09\x09\x0a\x0a\x09\x09\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x01\x03\x03\x03\x05\x04\x05\x09\
\x06\x06\x09\x0d\x0a\x09\x0a\x0d\x0f\x0e\x0e\x0e\x0e\x0f\x0f\x0c\
\x0c\x0c\x0c\x0c\x0f\x0f\x0c\x0c\x0c\x0c\x0c\x0c\x0f\x0c\x0c\x0c\
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\xff\xc0\x00\x11\x08\x00\x5e\
\x00\x5e\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xff\xdd\x00\x04\
\x00\x0c\xff\xc4\x01\xa2\x00\x00\x00\x07\x01\x01\x01\x01\x01\x00\
\x00\x00\x00\x00\x00\x00\x00\x04\x05\x03\x02\x06\x01\x00\x07\x08\
\x09\x0a\x0b\x01\x00\x02\x02\x03\x01\x01\x01\x01\x01\x00\x00\x00\
\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\
\x10\x00\x02\x01\x03\x03\x02\x04\x02\x06\x07\x03\x04\x02\x06\x02\
\x73\x01\x02\x03\x11\x04\x00\x05\x21\x12\x31\x41\x51\x06\x13\x61\
\x22\x71\x81\x14\x32\x91\xa1\x07\x15\xb1\x42\x23\xc1\x52\xd1\xe1\
\x33\x16\x62\xf0\x24\x72\x82\xf1\x25\x43\x34\x53\x92\xa2\xb2\x63\
\x73\xc2\x35\x44\x27\x93\xa3\xb3\x36\x17\x54\x64\x74\xc3\xd2\xe2\
\x08\x26\x83\x09\x0a\x18\x19\x84\x94\x45\x46\xa4\xb4\x56\xd3\x55\
\x28\x1a\xf2\xe3\xf3\xc4\xd4\xe4\xf4\x65\x75\x85\x95\xa5\xb5\xc5\
\xd5\xe5\xf5\x66\x76\x86\x96\xa6\xb6\xc6\xd6\xe6\xf6\x37\x47\x57\
\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\x58\x68\x78\x88\
\x98\xa8\xb8\xc8\xd8\xe8\xf8\x29\x39\x49\x59\x69\x79\x89\x99\xa9\
\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\xaa\xba\xca\
\xda\xea\xfa\x11\x00\x02\x02\x01\x02\x03\x05\x05\x04\x05\x06\x04\
\x08\x03\x03\x6d\x01\x00\x02\x11\x03\x04\x21\x12\x31\x41\x05\x51\
\x13\x61\x22\x06\x71\x81\x91\x32\xa1\xb1\xf0\x14\xc1\xd1\xe1\x23\
\x42\x15\x52\x62\x72\xf1\x33\x24\x34\x43\x82\x16\x92\x53\x25\xa2\
\x63\xb2\xc2\x07\x73\xd2\x35\xe2\x44\x83\x17\x54\x93\x08\x09\x0a\
\x18\x19\x26\x36\x45\x1a\x27\x64\x74\x55\x37\xf2\xa3\xb3\xc3\x28\
\x29\xd3\xe3\xf3\x84\x94\xa4\xb4\xc4\xd4\xe4\xf4\x65\x75\x85\x95\
\xa5\xb5\xc5\xd5\xe5\xf5\x46\x56\x66\x76\x86\x96\xa6\xb6\xc6\xd6\
\xe6\xf6\x47\x57\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\
\x58\x68\x78\x88\x98\xa8\xb8\xc8\xd8\xe8\xf8\x39\x49\x59\x69\x79\
\x89\x99\xa9\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\
\xaa\xba\xca\xda\xea\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\
\x11\x00\x3f\x00\xfb\x41\xd3\x6f\xa2\x87\xc7\x3c\x37\x89\xe9\xd4\
\xe9\xe2\x6b\x90\x29\x6e\xa3\x72\x4d\x0d\x0f\x8f\xf0\xc8\x82\xa5\
\xb2\x41\x5a\x86\xfa\x46\xf9\x22\x37\x50\xa6\x63\xe5\xe2\x76\xf9\
\x60\xe4\x95\xc1\x48\xd8\x74\x3d\x46\x0b\x56\xa4\x9a\x18\x14\x31\
\x60\xa4\xec\x6b\xe3\x92\x1b\xa0\xac\x49\x92\x51\x1b\x02\xad\xc8\
\x91\xb7\xea\xc2\x84\x34\xaf\xc5\x8e\xfb\x77\xc9\x81\x6c\x49\x62\
\x3a\xaf\x9e\x3c\xbf\xa3\xcc\x6d\xee\xef\x2b\x38\x34\x68\x61\x1e\
\xa3\x03\xfe\x55\x36\x1f\x7e\x3c\x51\x09\x11\x94\x91\xfa\x47\x9a\
\xb4\x9d\x6e\xa9\x61\x75\xce\x50\x2a\x60\x70\x51\xe9\xec\x0f\x5f\
\xa3\x11\x38\xc8\xd2\x0c\x65\x16\x48\x25\x3c\x5b\x7f\x0c\x4c\x37\
\x5e\x2d\x9f\xff\xd0\xfb\x3a\xfb\x0a\xee\x4d\x6b\x4c\xf0\xb0\x1e\
\xa1\x6f\x2d\xfa\x6e\x71\x21\x34\xb8\x11\x5e\x9b\xe4\x50\xd3\x53\
\xa7\x8e\xe7\x25\x6a\xda\xd0\xee\x48\x03\xc7\x04\x95\x4e\x59\x12\
\x15\x2e\xce\x02\x81\x52\x7e\x59\x00\x2d\x2f\x9c\xbf\x36\xbc\xc7\
\xa8\x98\xa5\x5d\x1f\xce\x9a\x7e\x8f\x67\x14\x6c\xb7\x36\xf1\xd5\
\xef\x5d\xc8\x20\x08\xe8\x0f\x1a\xd7\xae\xc4\x65\xb8\xf2\x00\x6a\
\x89\xfb\x99\xc6\x16\x37\x67\x9f\x93\xcf\xa8\xdc\xf9\x2a\xda\xe2\
\xfe\x49\xa6\x9d\xee\x65\x58\xee\x2e\x09\x77\x68\xd4\x2d\x0d\x4e\
\xf5\xa9\x3d\x72\x73\x02\xb8\xbb\xda\xe5\xb4\xa9\x96\xf9\xa2\x6b\
\x8b\x2d\x12\xfa\xea\xdc\x11\x3d\x38\x44\x47\x50\x5b\x6a\xfd\x19\
\x5c\xe5\x51\xd9\x61\x1e\x29\x51\x7c\xdf\x17\x97\xda\xf2\x43\x35\
\xc2\x16\x66\x35\x24\xd4\xd0\x93\x95\x44\x97\x22\x42\x99\x5e\x9b\
\xa3\x5c\xe9\x77\x56\xd7\x56\xfc\x97\x83\x06\x53\x4e\x84\x65\x73\
\xca\x8e\x0b\x7b\xbf\xac\x46\x9e\x2f\x3d\x3d\xcc\x3e\xa7\xa7\xef\
\x4e\x9f\x7e\x65\xf8\x9e\x9e\x2f\x27\x13\x87\x7a\x7f\xff\xd1\xfb\
\x3f\x4a\xed\xd4\xf6\xcf\x0b\xa7\xa8\x51\x79\x15\x3f\xd6\x3d\xb0\
\x88\x71\x2d\xd2\x81\x9a\x84\x16\x6a\x7b\x64\xbc\x26\x06\x61\xc6\
\x70\x4a\x91\x4a\x74\x22\x98\xf8\x74\x8e\x30\x55\xd4\x87\x07\x6e\
\xdb\x8c\x8f\x0b\x3b\x40\xde\xda\x0b\x88\x9a\x16\x62\x12\x4a\x83\
\xc4\xd1\xa8\x7c\x0e\xf9\x20\x05\xee\xac\x15\xbf\x2b\x7c\xb5\x3d\
\xe0\xbb\x9e\x59\x1b\xe2\xe4\xc8\x62\x42\xff\x00\x21\x25\x4f\xdf\
\xc7\x2c\x88\xc5\xd6\xfd\xcc\xbc\x49\x8e\x54\xf4\x6b\x2b\x5b\x2d\
\x3a\xd6\x1b\x2b\x0b\x65\xb6\xb4\x80\x11\x1c\x29\xfe\x51\xab\x13\
\xee\x4e\xe7\x21\x96\x7c\x67\x95\x00\xc0\x0e\xa7\x9a\xdd\x4e\xca\
\x3d\x4e\xc2\xe6\xcd\xb6\x12\x80\x50\x9e\xcc\x37\x15\xca\xc4\x44\
\xbd\x27\xab\x21\x23\x13\x61\x85\x69\xbe\x5c\x92\xdd\xbd\x3b\x8b\
\x76\x4a\x1d\xd5\xc6\xff\x00\xdb\x98\xd9\x23\x2c\x47\x84\xb9\x3c\
\x42\x7b\xb2\xdf\xd0\x29\x38\x58\x91\x15\x55\x57\x76\x3f\x65\x47\
\x72\x4f\xb6\x47\x06\x9a\x59\x32\xd0\x3b\x75\x3d\xc1\xae\x79\xc4\
\x42\x61\xe9\xdb\x95\x16\xf4\xff\x00\x47\x54\xf4\xf9\x53\xf6\x69\
\xc7\x95\x3f\x1c\xd8\xdc\x38\xab\xf8\x7f\x43\x8b\x52\xab\xea\xff\
\x00\xff\xd2\xfb\x3e\x0f\x2d\x80\xa9\xcf\x0a\xb7\xa8\x4a\x2f\xe7\
\x8e\xda\x39\xee\x66\x71\x1c\x50\x21\x79\x1c\xf4\x01\x45\x49\x39\
\x7c\x48\x02\xcb\x59\xb2\x68\x3e\x52\xf3\x27\xe6\x7f\x9a\xf5\x4b\
\xe9\x62\xd0\x49\xd3\x6c\x51\x88\x8d\xd2\x9e\xab\x81\xdd\x9c\x83\
\xd7\xc0\x65\x3e\x29\x9f\x5a\x72\x23\x86\x31\xe7\xba\x71\xe5\x5f\
\x3e\x79\xa2\xd6\xee\x08\xf5\x8b\x87\xbe\xb5\x94\x81\x22\x4c\x01\
\x60\x0f\x52\xac\x05\x76\xf7\xc8\x1c\x86\x06\xed\x12\xc4\x25\xc8\
\x53\xe9\x9b\x49\x96\x45\x8a\x68\xdb\x9c\x52\x85\x64\x61\xd0\xa9\
\x1b\x66\x41\x20\x8b\x0e\x3c\x6c\x1a\x4c\x4d\x08\x3b\x74\x39\x53\
\x6a\xd0\xb4\xad\x0d\x3d\xb0\x5a\xb7\xb8\x20\x56\x83\x1b\x55\xe2\
\x4e\x3d\x45\x6a\x30\x91\x6a\xa1\x15\xed\xd4\x44\x8a\x2c\xb1\x8f\
\xb0\x8e\xa1\xa9\xf2\xae\xf9\x31\x9a\x63\x6d\x8f\xbc\x02\xd6\x60\
\x3d\xcb\xa4\xbc\xbc\xb9\xf8\x5d\xb8\x45\xfc\x8a\x02\x83\xf3\x00\
\x63\x3c\xb2\x90\xa3\xb0\xee\x00\x01\xf6\x2c\x71\x81\xc9\xc6\x36\
\xe2\x14\x1d\x89\xf8\xbe\xef\xeb\x95\x58\x6c\xa7\xff\xd3\xfb\x3c\
\xa4\x0e\x9b\x30\xf0\xcf\x07\xb7\xa9\x48\xfc\xc9\x66\xf7\xbe\x5f\
\xd6\xe0\x88\x16\x96\x58\x1b\x8a\x8e\xa4\x0a\x13\xf8\x64\xc8\x33\
\x89\x01\x61\xb4\xc1\x2f\x9e\x34\x6f\x29\x2b\x86\x01\x0a\x90\x76\
\x04\x6f\x53\x98\xd0\x90\xe4\x79\xb9\x99\x3c\x99\xef\xf8\x20\x08\
\x22\x67\x00\x48\xa7\x96\xc3\x31\x67\x9a\xe7\xc3\xd1\x63\x10\x05\
\xbd\x3f\x46\xb2\x7b\x4d\x26\xc6\x19\x3e\xd8\x5a\xa8\x3d\x81\x35\
\x19\xb5\x84\x0c\x31\x80\x7b\x9d\x7c\x88\x33\x34\x9b\x00\x6a\x7a\
\xef\x4e\x4d\xef\xed\x90\x3c\x99\x86\xb8\x35\x09\x00\x91\x5a\x57\
\xb7\xcb\x10\x0f\x35\xb5\x8c\xac\x0d\x6b\x81\x2d\xa9\xad\x01\xf0\
\x39\x24\x2e\xe3\x4e\x84\x0f\x0e\xf8\x15\x7d\x48\x1e\x07\x25\x41\
\x5d\xc8\xd4\xf8\xf8\xd7\x23\x4a\xff\x00\xff\xd4\xfb\x43\xc9\x29\
\xd8\x1c\xf0\x7a\x7a\x85\x1e\x7f\x1f\x7a\x74\x20\xf4\xc9\xc4\xf0\
\x9b\x1c\xd4\x8b\x4b\xad\xb4\x7d\x14\x4e\xed\x0c\xbf\x55\x94\xb1\
\x66\x8e\x5a\x94\xff\x00\x60\xc0\x7e\x07\x27\x9b\x06\x3c\xfb\xc6\
\x5c\x27\xb8\xdd\x7c\x08\xfd\x2b\x1c\xd2\x86\xc4\x5a\x7f\x27\xe8\
\xab\x60\xbe\xa4\xab\x78\xca\x28\x21\x8c\x1a\x13\xdb\x93\x35\x36\
\xc4\x69\xf1\x42\x62\x52\x90\xc9\x5d\x22\x0e\xfe\xf2\x40\x6a\xf1\
\x72\x4f\x90\xaf\x34\x2a\xb3\xdc\xb9\x9d\xf8\xaa\xb1\x3c\x40\xd8\
\x7c\x80\xf0\x18\x72\xe4\x96\x42\x65\x2e\x65\x94\x00\x88\xa0\xaa\
\x40\x3f\x3e\x94\xca\x3a\x33\x73\x31\x20\x06\xdc\x2e\xca\xb5\xfd\
\x58\x6c\xf5\x45\x21\xdc\x6f\xb0\x26\xa7\x14\xac\x0a\x7a\xd7\xe5\
\x8a\x55\x14\x13\xd0\xf6\xeb\x8d\xa1\x7d\x09\x34\x1d\xf0\xda\xb8\
\xc4\x79\xaa\x72\x52\x4f\x5d\xf6\x1f\x4f\x4c\x3c\x3b\xd5\xa3\x89\
\xff\xd5\xfb\x38\xc0\xd6\xa3\xae\x78\x5d\xbd\x42\x93\x47\x5e\x84\
\xd7\xb9\xc4\x2a\x80\xb7\x5d\xd9\xb6\x35\xdb\xc4\xe2\x00\x28\x56\
\x48\xa0\x5f\x89\xba\xf8\x9d\xf2\x44\x1e\x8c\x78\x82\x36\xaa\x63\
\xa2\x80\x05\x36\x23\x23\xcd\x92\x9f\xa8\x54\x7c\x40\x9d\xfa\xe2\
\x60\x96\xea\x5c\xf1\x14\x1f\x3d\xce\x42\x92\xba\xaa\x2a\xa4\xd7\
\xdf\x0f\x0a\x16\x54\x03\x4a\x54\x7b\x63\x4a\xbb\x9d\x77\x51\xb7\
\x6c\x95\x2a\xe0\x6b\xfe\x4b\x78\x64\x24\x15\xdb\xd4\x6f\xf4\x60\
\x57\xff\xd6\xfb\x3d\x51\xd7\x7f\x96\x78\x53\xd4\x2f\x24\x71\x24\
\x6c\x69\xd3\x01\xd9\x52\x8d\x6e\x4b\x8b\x7d\x1b\x51\xbb\xb3\xa1\
\xba\x86\x12\x6d\xc1\x1b\x06\x62\x00\x34\xf6\xad\x72\x32\x91\x11\
\x24\x26\x31\x12\x90\x05\xe2\xba\x66\x87\xe6\x68\xee\x06\xaa\x35\
\x3b\xc9\xae\x39\x09\x24\x32\x48\xc5\x18\x1e\xa2\x84\xd2\x9e\xd8\
\x80\x40\x07\xab\x74\xa2\x39\x3d\xe2\xd4\xb9\x86\x27\x91\x78\x34\
\x88\xae\xc9\xe0\x58\x54\x8c\xc8\xc9\xb5\x17\x16\x2a\xc6\x87\xae\
\xf4\x34\xca\xec\xb3\x52\x63\xc7\x7a\x6e\x7b\xe2\x16\xd4\x4c\xbd\
\x87\x5c\xb0\x06\x04\xb4\x26\x00\xd0\xb6\xfe\x03\x1e\x04\x71\xaf\
\xf5\x96\x94\xaf\xd1\x80\xc1\x22\x6a\xab\x29\x24\x50\x8e\xbb\xe4\
\x08\xa6\x56\xa6\x25\x23\x9a\x92\x79\x12\x29\x91\xa5\x7f\xff\xd7\
\xfb\x3b\xd0\x50\x1a\x0f\xc7\x3c\x2a\xde\xa1\x50\x50\xfb\xf5\xc4\
\xab\xa4\x55\x28\x41\x5e\x4a\xc0\x86\x53\xd0\x82\x28\x41\xc6\x04\
\x83\x61\x05\x0f\x6e\xf6\xd1\x47\xe9\xc3\x61\x46\xaf\xd9\x67\xe4\
\x83\xe8\xa5\x4f\xdf\x99\x7e\x2e\x21\xbf\x0e\xfe\xfd\xbf\x1f\x16\
\x24\x4c\xf5\x54\x53\x23\x33\x99\x00\x24\xb6\xd4\x1e\xd9\x8b\x93\
\x27\x19\xbe\xac\x80\xa6\x85\x6a\x46\xd5\x34\x60\xbd\xc7\xcf\x01\
\xe4\x94\x35\xc1\x22\x83\xb9\xe9\x92\xc7\xbb\x19\x30\x2f\x38\xf9\
\xc2\xc7\xca\x76\x42\x7b\xa0\xd3\x5c\x4b\x51\x6d\x6a\x86\x8d\x21\
\x1d\x6a\x7f\x65\x45\x7a\xe5\xb2\x98\x80\xf3\x63\x08\x19\x97\xcf\
\xf2\xfe\x73\xf9\xa6\xe6\xea\x96\x91\x43\x6b\x6b\x5f\x86\x31\x0f\
\x30\x07\xbb\x31\xa9\xca\x8c\xe6\x7a\xb7\x8c\x31\x0f\x52\xf2\x6f\
\xe6\x3c\xfa\xc4\xf1\x58\xea\xf0\xa4\x72\xcc\x42\xc5\x73\x10\x2a\
\x39\x1e\x81\x94\x93\x4a\xf8\x8c\x11\xcc\x41\xa9\x35\xcf\x10\xab\
\x0f\x64\x8d\x8a\xb0\x27\xa5\x77\x19\x74\xe3\xb3\x54\x64\x8d\xf4\
\x96\xb5\xed\x4e\x99\x8e\xdc\xff\x00\xff\xd0\xfb\x34\xca\xdb\x1e\
\xfd\xc6\x78\x43\xd4\xb6\x8c\x41\x5a\x91\xd6\xa7\x24\x82\xa8\x4f\
\x26\x00\x12\x40\xaf\xb0\xdb\x02\xaf\xf8\x54\x6f\x40\x72\x2a\xb4\
\x02\xcd\x55\x0d\x41\xd4\xf8\x7b\xe2\x02\x57\x15\xa7\x41\xd7\xae\
\x1e\x88\x43\xbc\x6d\x2b\x2d\x0d\x46\xe3\x6c\xb3\x19\x63\x37\xcb\
\xbf\x99\xb6\x37\x3a\x8f\x9a\x65\x88\x82\xd6\xd6\xa1\x62\x44\xeb\
\x40\x00\x3f\x89\x39\x8b\x92\x77\x37\x37\x0c\x00\xc6\x12\x4b\x1f\
\x2c\x8a\x46\x1a\x1d\x9b\x75\xf0\xcb\x2c\xc4\x30\x20\x5b\x21\x87\
\xcb\x32\x59\xdc\x45\x3c\x51\xb2\x0d\x89\xa7\x6a\x66\x2c\xf3\x71\
\x36\x08\x3e\x85\xd2\x7d\x5b\x8d\x2e\xd2\x69\x7f\xbd\x31\x81\x21\
\xf1\x23\xbe\x6c\x71\x4a\xf1\x82\x5d\x7c\xc5\x4a\x93\x7e\x27\xd3\
\xfa\x32\xbe\xad\x8f\xff\xd1\xfb\x39\x2d\x06\xfc\x4e\x78\x43\xd4\
\x30\x2f\x32\x6b\x5e\x65\xb0\xd4\xf4\xfb\x2d\x0b\x46\x8b\x51\x8a\
\x78\xda\x7b\xb9\xa6\x76\x50\x15\x5b\x8f\x08\xf8\xfe\xd6\xd5\xa9\
\xf6\xc6\x79\x04\x06\xec\xa3\x8c\xcb\xab\x3f\xb5\x76\x78\x91\x9d\
\x0a\x3d\x01\x74\x3d\x41\x22\xb4\x3e\xe3\x24\x46\xec\x02\xb9\x41\
\xb9\x1d\x70\x14\xb6\xa0\x70\x55\x0c\x76\xdf\x7f\xd7\x86\x90\xef\
\x87\xa7\x8f\x51\x80\xec\x97\x72\xe2\x00\x34\xc3\x19\x20\x87\x99\
\x79\xc3\xcb\x6b\x75\xa8\x26\xab\x14\x6c\xde\xb5\x04\xe5\x77\x2a\
\xe0\x01\x53\xec\x72\x59\xf4\xfc\x51\xe3\x8f\xc7\xcb\xf6\x16\xec\
\x19\xab\xd2\x51\x5a\x46\x86\x84\xa7\xab\x0e\xe2\x82\x94\xa8\xda\
\x9e\x1f\x2c\xc0\xe3\x32\x3c\x37\xbb\x71\xa1\xbb\x27\x6d\x01\xae\
\x5c\x45\x14\x7c\x98\xec\x06\xd4\x1f\x4f\x86\x43\x49\xa3\x9e\x4c\
\xfc\x11\xde\xcf\xf6\xb0\xc9\xa9\x88\x8d\x94\xcf\xd2\x8a\x08\xe2\
\xb4\x82\x8f\x1d\xba\x88\xc3\xff\x00\x37\x11\xc4\x9f\xa6\x99\xb8\
\xcd\xc1\x13\xc3\x0e\x43\x6f\x96\xdf\x6f\x37\x06\x16\x77\x3d\x55\
\x39\x1a\xd3\x8f\x4d\xa9\x98\xf6\xdd\x4f\xff\xd2\xfb\x3c\x69\xc8\
\xf5\x23\xbe\x78\x4e\xcf\x50\xd0\xe4\x5c\x7a\x5e\xa2\xb5\x0e\xc9\
\xe1\xf4\x54\xe4\xa3\x7d\x11\x2a\xea\xbd\x00\xe3\x50\x41\xf6\xc8\
\xa5\x78\xe7\xe1\x51\xf4\x62\x50\xb8\xd6\x83\xae\x05\x51\x25\xb9\
\x8a\x83\xf3\xed\x85\x2b\x8f\x2a\x0c\x21\x0e\x53\x74\x18\x9b\x55\
\xe4\xc3\xed\x03\x4e\x05\x7b\xf2\xe5\xb5\x3e\x79\x93\xa7\x39\x2f\
\xd1\xf1\xee\xf8\xf4\x61\x3e\x1a\xdd\x5e\xda\xea\xdc\x90\x65\xd3\
\x14\x4c\x2b\xc8\x24\xd4\x42\x7c\x77\xe4\x47\xdf\x95\x9c\xda\x7e\
\x2b\x9e\x3b\x3b\xdd\x48\x81\xfa\x7e\xc2\x89\x47\x2d\x7d\x5b\x7b\
\x95\x27\x9f\x50\x96\x29\xbe\xa9\x64\x96\xd6\xe1\x7f\x7d\xe9\xba\
\xbb\xf1\xef\x53\xca\xb4\xf1\xa0\xc9\xe3\x99\x9c\x25\xe1\x44\x46\
\x35\xbd\x6f\x2a\xeb\x77\xbf\xbe\x80\x0d\x62\x20\x11\xc4\x49\x3e\
\x69\x64\x03\xe2\x1c\x8f\xc5\xe1\x94\x1a\xa7\x21\x19\xf0\xd4\x65\
\x69\x7f\xff\xd9\
"

qt_resource_name = b"\
\x00\x06\
\x07\x03\x7d\xc3\
\x00\x69\
\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
\x00\x0a\
\x0c\x9d\x6c\x07\
\x00\x63\
\x00\x68\x00\x65\x00\x65\x00\x73\x00\x65\x00\x2e\x00\x6a\x00\x70\x00\x67\
"

qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"

def qInitResources():
    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()