diff --git a/sw/supervision/python/Makefile b/sw/supervision/python/Makefile
index 58737b56b7..fb9c616035 100644
--- a/sw/supervision/python/Makefile
+++ b/sw/supervision/python/Makefile
@@ -9,11 +9,14 @@ OBJECTS = $(patsubst $(SOURCEDIR)/%.ui,$(BUILDDIR)/%.py,$(SOURCES))
CC = pyuic5
-all: $(BUILDDIR) $(OBJECTS)
+all: $(BUILDDIR) $(OBJECTS) resources
$(OBJECTS): $(BUILDDIR)/%.py : $(SOURCEDIR)/%.ui
- $(CC) -o $@ $<;
+ $(CC) --import-from=generated -o $@ $<;
+
+resources:
+ pyrcc5 $(SOURCEDIR)/resources.qrc -o $(BUILDDIR)/resources_rc.py
$(BUILDDIR):
mkdir -p $@
diff --git a/sw/supervision/python/build_widget.py b/sw/supervision/python/build_widget.py
index 160411f47c..723cfe361c 100644
--- a/sw/supervision/python/build_widget.py
+++ b/sw/supervision/python/build_widget.py
@@ -28,6 +28,7 @@ class FlashMode:
class BuildWidget(Ui_Build, QWidget):
spawn_program = QtCore.pyqtSignal(str, list, str, object)
+ refresh_ac = QtCore.pyqtSignal(object)
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
@@ -73,6 +74,9 @@ class BuildWidget(Ui_Build, QWidget):
for target in ac.boards.keys():
self.target_combo.addItem(target)
+ last_target = utils.get_settings().value("ui/last_target", None, str)
+ if last_target is not None and last_target in ac.boards.keys():
+ self.target_combo.setCurrentText(last_target)
def update_flash_mode(self, target):
self.device_combo.clear()
@@ -92,8 +96,11 @@ class BuildWidget(Ui_Build, QWidget):
if self.print_config_checkbox.isChecked():
cmd.append("PRINT_CONFIG=1")
shortname = "Build {}".format(self.ac.name)
+ self.refresh_ac.emit(self.ac)
self.conf.save(False)
+ self.target_combo.setCurrentText(target)
self.enable_buttons(False)
+ utils.get_settings().setValue("ui/last_target", target)
self.spawn_program.emit(shortname, cmd, None, lambda: self.enable_buttons(True))
def clean(self):
diff --git a/sw/supervision/python/generated/resources_rc.py b/sw/supervision/python/generated/resources_rc.py
new file mode 100644
index 0000000000..f4ca558e83
--- /dev/null
+++ b/sw/supervision/python/generated/resources_rc.py
@@ -0,0 +1,1038 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.3)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x05\xfb\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x28\x00\x00\x00\x28\x08\x06\x00\x00\x00\x8c\xfe\xb8\x6d\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\xad\x49\x44\x41\x54\x78\x9c\xdd\
+\x98\x5f\x6c\x14\x45\x1c\xc7\x2f\xf1\xdf\x83\xe8\x8b\x41\x7d\xf7\
+\x0f\xa2\x51\xdf\x7c\x21\x06\x34\x21\x69\x2c\xb7\x3b\x7b\xb5\x86\
+\x7f\x46\x9a\x48\x23\x25\xd2\x2a\x2d\xed\xee\xce\xec\xb6\xa4\xd7\
+\x4a\x4b\x13\x31\x52\x83\xa0\x09\x84\x18\x29\x42\x84\xbb\x9d\x99\
+\xbd\x68\x2a\x35\xa6\x2a\x34\x2d\x5a\x41\x2b\x20\x02\x82\x52\xf4\
+\x4a\x6f\xef\xb0\xe5\xe8\x9a\x5f\x75\xf7\xf6\x4a\xdb\x3b\xb8\x73\
+\x1f\x98\xe4\x1e\x6e\xf3\xbb\x9d\xcf\xcd\xfc\x7e\xbf\xef\x77\x26\
+\x10\xb8\x55\x47\x69\x7d\xe4\x69\x11\x1b\xeb\x43\xc4\x64\x12\xe1\
+\xa7\x91\xca\x92\x41\xd5\x48\x8b\x8a\x31\x2e\x11\x3e\x8c\x08\x1b\
+\xf0\x1d\x4a\xa8\xfb\xf4\x1e\x51\x65\x1b\x10\xe6\x67\xcb\x1a\x63\
+\x89\xca\x2d\x47\xae\xd4\xed\xfa\xd9\xd6\xf7\xfe\x66\xb7\x1e\x1c\
+\xb6\xdb\x8c\xb8\xbd\xc9\xf8\xcb\x0e\x1f\xb8\x68\x0b\x8a\x61\xfb\
+\x06\xb6\x50\xef\xbe\x5d\x52\x69\x2d\x52\x69\xa2\x62\x73\x6f\x92\
+\xec\x39\x63\xb7\xb3\x91\x59\x3f\xbe\x01\x2e\x91\x0f\x3e\x86\x08\
+\x1f\x7a\x79\xd3\x97\x89\x8d\xfb\x2f\xe4\x04\x6b\x9f\x05\x10\x9e\
+\xe5\xfe\x44\xf5\xbc\xe1\x90\x12\x15\x11\xa6\xd6\x9b\x1f\xfe\x78\
+\x6d\x2a\x40\x1b\x8d\xdb\xe4\xe3\x33\xf6\x6b\xef\xf6\x8d\x2d\x0d\
+\x77\x5f\x96\x30\xbb\x22\x28\xc6\x35\x51\xa5\x57\x25\x8d\xa7\x66\
+\x02\x9c\xee\xcf\xb4\x1c\x1c\xb6\x5f\xda\xf8\xb9\x15\xd2\x78\x38\
+\x6f\xb8\x60\x03\x7d\x45\x22\x3c\xa9\xef\x3d\x97\xf5\x32\xc8\xb1\
+\x75\xdb\x06\xd3\x88\xf0\x94\xa4\x99\x43\x22\x66\x4d\xa2\x1a\x59\
+\x24\x60\x36\x6f\xf1\x7a\xf3\xee\x92\xd7\xe9\x5d\x41\xf9\xc0\x03\
+\x4b\x64\xba\x30\x1f\xc0\x9b\x82\x83\x95\x03\xb8\xa6\x7d\xe7\xb3\
+\x5e\x56\xbf\xeb\xc4\x44\x99\x16\x4b\x4a\x84\x1b\xa8\xc1\x78\x34\
+\xef\x17\xce\x02\x08\x73\x20\xcc\x52\x41\xd9\x58\x9c\x7f\xce\x61\
+\x6a\x65\xaf\x5c\xdc\xae\xea\x1c\x18\x43\x84\x9e\x47\x4a\xe4\x99\
+\x1b\x05\xcb\xb5\xc5\x78\xcf\x59\x80\x1c\x45\x2a\x7d\x28\x90\xab\
+\x5a\xa1\x20\xb2\x73\x2e\x6e\xaf\xea\xf8\x3a\x29\x11\xf3\x1b\xd4\
+\xb0\xff\xbe\x40\x01\x43\xf8\x0f\x10\xb6\x75\x4d\x67\xff\x04\xe4\
+\xb1\x33\x4f\xcd\xf6\x63\x69\x89\x98\x47\xcb\xcb\xbb\x6e\x9b\xf1\
+\x05\xd0\x78\x57\xbe\xd5\x33\xea\xfd\x77\x93\x2b\x87\xf9\xb7\x95\
+\x95\x47\xee\x28\x04\xce\x01\x74\x72\x4e\x54\xd9\x85\xaa\xf7\x06\
+\xc6\x32\x45\x37\x62\xaf\x68\xed\x49\x08\x32\x5b\x1b\x98\xa9\x09\
+\x43\x9f\xf3\xb6\x12\xc8\xb9\xc9\x6d\x2d\x70\xe5\xbc\x80\x00\x87\
+\x30\x0f\x97\xc8\x74\xae\x44\xd8\x25\xe5\xa3\xd3\xee\x7c\xd0\xf0\
+\x11\x66\x97\xa1\xd8\x02\x53\x07\x28\x04\x34\x61\x6f\xb5\x96\xe9\
+\x31\xab\x90\x9c\x9b\x0e\x10\xe0\x9c\xef\xa2\x1c\x79\x36\xa4\x99\
+\x49\x98\xcb\x99\x77\x55\xdb\x57\x96\x20\x1b\xd5\xd7\xfd\x18\xe4\
+\xcb\xab\x10\xeb\xb6\x7d\x9f\x46\x1a\x8f\x06\x8a\x38\x82\xb2\xd1\
+\x38\xf5\x99\xa4\x99\xbc\x66\xc7\x0f\x6e\xce\x43\x6f\x05\x6d\xbf\
+\x4e\xf8\x41\x5b\x21\x0f\x9c\x26\x2c\x11\x9e\xba\x99\x56\x72\xa3\
+\x43\xc4\xc6\x93\x21\x62\x26\x9d\x82\x01\x86\x90\x1e\xb3\x04\x99\
+\x3e\x9e\x09\x52\x69\x2d\x08\x7f\xa6\xec\xcf\xd8\x92\xc6\x87\x02\
+\x3e\x0d\x49\xe3\x43\xb0\x72\xce\xfc\xab\xb7\x1c\xbe\x22\x28\xd1\
+\x75\x6e\x40\x48\x8b\x31\x70\x25\x4e\x00\xc8\x17\x28\x84\x5f\x80\
+\x02\xe6\xe1\xb5\x9d\x47\xc7\x9d\xf9\xeb\x76\x0e\xd9\x21\xcd\xcc\
+\xa4\x57\x88\x98\xbf\x40\x05\x39\x01\x4b\x9b\xbb\x2f\x83\x7c\xf9\
+\x06\x28\x47\x9f\x5b\x16\x3e\x14\xcf\x54\xf3\x39\xd8\xc1\x53\x6e\
+\x80\x88\x99\x05\x7e\xce\x09\x90\x08\xff\xdb\x8f\xfc\x73\x46\x29\
+\x8e\x3c\xf2\x62\x63\xcc\xed\xbf\x2d\x91\x61\x1b\xa9\x2c\xe1\x06\
+\x08\x0a\x4d\xb7\xd1\x4c\xa9\xc3\xf7\x72\xbd\x7b\x4e\xc0\xa7\x51\
+\xae\x77\xcf\x11\x55\xea\x6e\x31\xb0\x00\x83\x1b\x00\x56\x1d\xdc\
+\xb0\x13\x20\xaa\xc6\xb8\x9f\x80\x25\x3a\xbd\x57\x50\x8d\xb4\xb7\
+\x07\x8b\x8a\x71\xd5\x0d\x10\x55\x9a\x6c\x8d\x5c\x72\x01\xcb\x74\
+\x73\x34\xd8\xc0\x1f\xf6\x0b\x50\xc0\x6c\x1e\xd8\x37\xaf\x05\xcb\
+\xda\xe2\xa9\x45\xb2\xac\xe5\x50\xdc\xcf\x22\x09\xaa\xc6\xf3\xcb\
+\xc2\x5f\x64\x8a\xa4\xeb\x9c\x2d\x11\xf3\x64\x06\x50\x8b\xb1\x0d\
+\x3b\x33\x6d\xa6\x6a\xeb\xc0\xb8\xa8\xb2\x66\xbf\x00\x45\x95\x35\
+\xaf\xd9\xda\x3f\xe6\x6d\x33\xe0\x39\x33\x01\xd8\x58\x5f\xf9\x4e\
+\x76\xa3\x0e\x11\xfe\x93\x5f\x80\x21\x8d\x9f\xf2\xca\xec\xea\x2d\
+\x47\x52\x08\x7b\xf4\x38\x28\xd3\xa7\x40\x5e\x5c\xa9\x33\xe2\x36\
+\xc8\x0f\x3c\xff\xbf\xe1\x10\x8e\xce\x87\x33\x0c\xf8\x4e\x47\xea\
+\xca\xb4\x98\x15\xc4\xec\x89\x59\xcd\x02\x08\xb8\x44\xb8\x99\x8f\
+\xe0\x17\x32\xc0\x2c\x54\x6f\x1f\x4c\x67\xc9\x2c\xe1\xbf\x5e\x17\
+\x08\xdb\x5c\xd1\xd1\x6b\x65\xd9\x2d\x62\x26\xc1\x12\x39\x31\x60\
+\x95\x8a\x79\xde\x0d\xca\xc6\x02\xb0\x74\x59\x76\x6b\x73\xaf\x05\
+\x2c\x33\x18\x56\x36\xda\xb4\x2f\x63\x58\xc1\x4c\x22\x4c\xff\x94\
+\x74\xf3\x7e\x80\x03\xb3\x59\x2c\xc0\x12\x99\xce\x45\x98\xfd\x51\
+\xbf\xfb\xe4\x84\x33\x5f\xe3\x27\xe7\x6d\xa4\xd2\xd1\x69\x0d\xeb\
+\x24\x24\x36\xaa\x57\xb4\xf6\xb8\xb9\x08\x1f\x10\x71\x51\xa5\xbf\
+\x03\x1c\xf4\xa7\x62\x00\x96\xeb\x5d\x77\x22\x62\xf6\xad\xed\xfc\
+\xce\xa3\x1e\x23\xf6\xf2\x96\x1e\x4b\x54\x68\x4d\x8e\x43\x93\x39\
+\xf8\xc6\x07\xc7\x5d\x03\x09\x3e\xad\xaa\xb3\x7f\x02\xe0\x8a\x71\
+\xa5\x51\x02\x2b\x47\xcc\xbe\x8a\x8e\xde\xa4\x77\x21\x6a\x76\x1c\
+\x4b\x23\xc2\x8e\xcf\x7a\x68\x72\x84\x5b\x54\x69\x62\xa6\xfb\x97\
+\x42\x00\x83\xb2\xb1\x00\xb6\x15\x56\xce\x0b\x07\x73\x21\x95\x5a\
+\x30\x77\x7e\x2f\x6a\x88\x96\x80\xa3\x9e\xee\x2e\xe6\x66\x00\x11\
+\x8e\xce\x47\x84\xb1\x90\x6e\x8e\xd6\xef\x3e\x31\x91\x7d\x70\xbf\
+\x60\x83\xcc\x09\x4a\xb4\x34\xef\x17\x0a\x0a\x0d\x97\x37\x7d\x96\
+\x84\x6b\xb4\x7c\x00\x97\xc8\x74\xe1\x0b\xb5\xd1\x07\xe1\xda\x03\
+\x4c\x06\x1c\xfe\x41\xbe\x40\x21\x24\xc2\x4f\x42\x9f\xab\x7e\x7f\
+\x30\xed\xad\x56\x67\xe5\x24\x62\x26\x11\xa6\x2b\x8b\x02\x37\x13\
+\xa0\xa0\x18\x60\x30\x53\x70\x71\x24\xa8\x74\xf2\xde\x06\xb4\x75\
+\x4d\x67\xff\xd8\xbf\xa9\x92\x71\x4a\x4e\x41\x4c\xe6\x9c\x4a\xad\
+\x1b\x5a\x39\x68\xc2\xf9\x5c\x91\x4d\x07\xd8\x9e\xe7\xb5\x1c\xb4\
+\x92\xe5\x2d\x3d\x09\x28\x88\xbc\x73\xae\xd0\x21\xe4\x00\x84\x15\
+\x83\x43\x11\x34\x61\xe8\x73\xd0\xce\x72\x56\x6b\xb1\x01\xc3\x07\
+\x2e\x4e\xaa\x0f\xb8\x61\xb0\xec\x60\x99\xc0\x95\xbc\xfa\xf6\xe1\
+\x54\x48\xe7\x16\x9c\x75\x41\x21\xfc\x34\xc2\xee\x80\x0b\x73\xb8\
+\x38\x87\x0b\x74\xb0\xea\x22\xa6\x16\x1c\x7a\xc0\x32\x41\xe3\xcd\
+\x3a\xe3\xde\x6a\xe3\x1f\xcb\x89\x59\x4a\x14\x59\x5a\x8e\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x79\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x28\x00\x00\x00\x28\x08\x06\x00\x00\x00\x8c\xfe\xb8\x6d\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x2b\x49\x44\x41\x54\x78\x9c\xed\
+\x98\xcd\x4a\xc3\x40\x14\x46\xe7\x11\xbb\x8b\x9d\xee\xeb\x7d\x83\
+\x32\x89\x28\x48\xf3\x03\x01\x95\xf6\x11\x34\xa9\x4f\xa0\xbb\x9a\
+\xb4\x5b\xc9\x1b\xd8\x49\xc1\x9d\x1b\x6b\xdc\x2b\x17\x4c\x09\x81\
+\xb6\x09\x33\x6d\xa7\x78\x0f\x7c\x9b\xcb\x30\x1c\x3e\x66\x60\x18\
+\xc6\xfe\x03\xd6\xf5\xf4\xbd\x3f\x7a\x95\xd5\xe0\x8c\x99\x02\x8c\
+\x33\x19\x3e\x7f\xfe\x54\x83\x33\x66\x0a\x40\x82\x8a\x00\x35\xa8\
+\x08\x50\x83\x8a\x00\x35\xa8\x08\x50\x83\x8a\x00\x35\xa8\x08\x50\
+\x83\x8a\x00\x35\x78\xea\x0d\x76\x2e\x9f\xae\xac\xe1\xf4\xa3\xfe\
+\xac\xef\xff\x45\x44\x8b\xa2\x2e\x88\xb3\x4d\xeb\x71\x2f\xdc\x53\
+\xab\x24\x77\x5f\x82\xc1\xc3\xdb\xaa\x2e\x12\xb6\x8c\x88\x64\xd1\
+\x75\x93\x5b\xad\x72\xba\x24\x45\x24\x8b\xb3\x61\x7a\xb7\x17\xb9\
+\xaa\xa4\xb8\x5f\x7c\x19\x29\x57\xc2\xbd\xc4\xb7\x63\xd9\xb8\x49\
+\x7b\x92\x17\x3d\x2f\xb9\x61\x87\x04\x25\x45\x9c\xaf\x9a\xc8\xf1\
+\x7d\x9d\xb9\x9d\x92\x7e\x1a\x6c\x93\x74\x8e\x29\xb7\x4b\xd2\x41\
+\x39\x7f\x76\x5c\xb9\x92\x9e\x3f\x0f\xec\x58\xae\x2f\xce\xc5\x24\
+\xff\xe6\xc1\x81\x2e\x44\x5b\x49\xe7\x71\x69\x9e\x5c\x09\xf7\x92\
+\x11\x66\x3d\x20\x88\x86\xe0\x67\xe3\xf9\x38\xcb\x4d\x8a\x55\xfd\
+\x00\xc5\x81\xea\x2b\x25\xd4\x1c\x74\x22\xc1\x50\x57\x83\xc6\x9f\
+\x41\x66\x30\xbf\x09\x95\x08\x87\x6b\x3d\x8c\xee\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x71\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
+\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
+\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
+\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
+\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\
+\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\
+\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\
+\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\
+\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x32\
+\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x32\x22\
+\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x38\x2e\x34\x36\x36\x36\x36\x36\x35\x20\x38\x2e\x34\x36\x36\
+\x36\x36\x36\x39\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\
+\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\
+\x67\x38\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x32\x2e\x35\x20\
+\x28\x32\x30\x36\x30\x65\x63\x31\x66\x39\x66\x2c\x20\x32\x30\x32\
+\x30\x2d\x30\x34\x2d\x30\x38\x29\x22\x0a\x20\x20\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x72\
+\x75\x6e\x6e\x69\x6e\x67\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\
+\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\
+\x66\x73\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\
+\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\
+\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\
+\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\
+\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\
+\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\
+\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x39\x31\x39\
+\x35\x39\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x38\x2e\x33\x39\x30\x38\x38\
+\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x63\x79\x3d\x22\x32\x34\x2e\x33\x39\x31\x35\x39\x35\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\
+\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x6d\x6d\
+\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\
+\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\
+\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\
+\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x38\x34\x38\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
+\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x30\x31\x36\
+\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x37\x32\x22\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\
+\x6f\x77\x2d\x79\x3d\x22\x31\x31\x30\x37\x22\x0a\x20\x20\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\
+\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x35\
+\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\
+\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\
+\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\
+\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\
+\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\
+\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\
+\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\
+\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\
+\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\
+\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\
+\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\
+\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x43\
+\x61\x6c\x71\x75\x65\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\
+\x3d\x22\x6c\x61\x79\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\
+\x61\x74\x65\x28\x30\x2c\x2d\x32\x38\x38\x2e\x35\x33\x33\x33\x31\
+\x29\x22\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\
+\x6c\x6c\x3a\x23\x32\x37\x37\x65\x66\x66\x3b\x66\x69\x6c\x6c\x2d\
+\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\
+\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3a\x30\x2e\x32\x35\x36\x30\x34\x38\x33\x35\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\
+\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\
+\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\
+\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x31\x35\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x34\x2e\x32\x33\x33\x33\x33\
+\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\
+\x39\x32\x2e\x37\x36\x36\x36\x33\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x72\x3d\x22\x33\x2e\x38\x34\x30\x37\x32\x35\x39\x22\x20\x2f\
+\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
+\x00\x00\x00\xc1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x73\x49\x44\x41\x54\x78\x9c\xed\
+\xd1\xa1\x0d\x03\x41\x00\xc4\xc0\xab\xf1\xfa\xaf\xc4\x24\x4f\x1e\
+\x2d\x0a\x89\x1c\x60\x4b\x5b\xc0\x6a\xce\xa9\xaa\xaa\xfa\x61\xdc\
+\xfb\xf9\x87\x9d\x8e\xbc\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\
+\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\
+\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\
+\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\
+\x24\x32\xd9\x12\x24\x52\x55\x55\x75\xbe\xee\x01\x9a\x19\xcd\x9a\
+\x94\x42\x00\x68\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x06\x73\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\xd8\x00\x00\x01\xd8\
+\x01\xfa\x5c\xa6\x72\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x05\xf0\x49\x44\
+\x41\x54\x78\x9c\xed\x9b\x5b\x6c\x54\x45\x18\xc7\x7f\xbb\xab\x04\
+\xdb\x0a\xd1\x28\x01\x42\xa4\xb5\x16\x12\x4d\x4c\x8b\x55\x92\x46\
+\x29\x4d\x68\x02\x0f\xc6\x68\x89\x18\x13\xdf\xf1\x89\x70\x89\xfa\
+\x42\x62\x02\xb1\x86\xf0\xa6\xb4\x0f\x3c\xe1\x05\xa3\x81\x40\x40\
+\x23\x52\x29\x78\x29\x10\x45\xb1\x48\x48\x4c\xb4\xc4\xe2\x25\x25\
+\x04\xf1\x82\x14\x5c\x76\x7d\x98\x39\xb0\x3d\xfb\xcd\x99\x99\x73\
+\xa9\x35\xed\x3f\x99\x97\x39\xdf\x75\xf6\x9c\x6f\xbe\xf9\xe6\x5b\
+\xc8\x0e\xf5\xc0\xc7\xc0\x55\xa0\x1c\x73\x5c\x05\xfa\x80\xf9\x19\
+\xda\x99\x19\x0e\x11\xdf\xf1\xf0\xe8\xcb\xca\xc8\x5c\x86\x72\x47\
+\x81\x69\x29\xc9\xbb\x06\x4c\x47\x2d\x46\xaa\xc8\x72\x01\x4a\x29\
+\xcb\xcc\x93\xc1\x02\xe4\xd3\x16\xf8\x7f\xc3\x2d\xe3\xa8\xab\x8c\
+\xfb\x82\x97\xc8\xee\xed\x1c\x83\x49\xff\x06\x4c\x2d\x80\x03\x4d\
+\x03\xd0\x0b\xec\x01\x9e\x75\xe4\xf9\xaf\x90\x47\xd9\xb8\x07\x65\
+\x73\x43\x52\x81\x33\x81\xb3\x8c\xdd\x93\xbf\x00\xda\x2c\x7c\x33\
+\xa8\xde\xcb\x7d\x76\x85\x92\xc0\x3f\xc3\xc2\xd3\xa6\x6d\xab\xe4\
+\x39\xab\x7d\x88\x8d\xad\x82\x21\x81\x33\x6f\x03\xf3\x42\xf4\xb5\
+\xc0\x4b\xc0\x05\x03\x8f\x2b\xa4\x05\xb8\xa0\x65\xd7\x86\x68\xe7\
+\x69\x5b\x24\x9e\xb2\xf6\x21\x16\x16\x60\x4f\x63\xff\x02\x36\x02\
+\xb7\x01\x9d\x54\xbf\x2d\x95\x63\xd4\x43\xf7\x68\x84\x9c\x21\x60\
+\x99\xd6\xb9\x51\xdb\x60\x4b\xa7\x17\x78\x7b\x0f\xec\xb7\x08\xae\
+\x1c\xe7\x31\xff\x02\xc1\xf8\xd0\x43\xf7\x01\x8b\xac\x92\xd6\xe9\
+\x6a\xdf\x7e\x5f\xe7\x97\x7b\x08\x77\x19\xef\x03\xb3\x3d\xf4\xcf\
+\xd6\x3c\x69\xda\xb0\xdc\x55\xf9\xad\xc0\x19\x41\xc0\x8f\xc0\xf3\
+\xc0\x88\xa3\xc2\x22\xf0\x0e\xd0\xe2\xe1\x78\x18\x2d\x5a\x46\xd1\
+\x51\xe7\x08\xb0\x5a\xdb\x1a\x7e\x76\x46\xfb\x66\xc5\x1a\x83\xf0\
+\x55\xfa\xf9\x4c\x54\x60\x89\x8a\x0f\x9f\x03\x4d\x31\x9d\x96\xd0\
+\xa4\x65\x46\x7d\xe7\x5b\xb9\x19\xf1\x57\x19\xe8\xd6\xd8\x14\xdd\
+\x89\x1c\xc1\x07\xa8\x4e\x4d\x9b\x80\xf7\x42\x74\xff\x00\x2f\x03\
+\x85\x18\x4e\xda\x90\x47\x39\x10\x5e\xf8\x3e\xe0\x7e\x81\xfe\x08\
+\xd5\x7e\xfc\x06\xdc\x15\xa5\xa4\x57\x60\xba\x0e\x2c\x8a\xe0\xe9\
+\x04\xde\x02\x76\x00\xcd\x0e\x8e\xe4\x50\x05\x8e\x36\xe0\x29\x3d\
+\xda\xf4\x9c\x4b\xfe\xdf\x0c\xbc\xa1\x75\x76\x46\xd0\xb5\xa0\x6c\
+\x0f\xfb\xd3\x6b\x62\x78\x10\xf9\x5b\xdb\xee\x60\x94\x0b\x3a\x80\
+\x1e\xe0\x27\x41\x47\x30\xce\x01\xdb\x80\xa5\x29\xe9\xdc\x2e\xe8\
+\x28\xa2\x7c\xad\xc2\x41\x81\xf8\x0f\xfc\xa2\xb7\x84\x87\x81\x7e\
+\x41\xb6\x6d\x1c\x05\x1e\x4d\xa8\x7b\x16\x70\x49\x90\xdd\x1f\x26\
+\xec\x32\x18\xb1\x21\x81\xf2\x3c\xb0\x05\x7b\x7e\x10\x35\x4a\x40\
+\x37\xc9\xce\x1f\xeb\x0d\xb2\xbb\x02\x82\xe9\xa8\xec\x2a\x4c\xf0\
+\x1d\xf1\x4b\x5a\x75\xa4\xbb\x8f\xef\xd3\x32\xe3\x60\x1a\xca\x97\
+\xb0\xcc\x21\x94\xef\xac\x33\x28\x5d\x19\x53\x61\x1e\x7b\x16\xf9\
+\x37\x6a\x67\xd9\xad\xc7\x51\x3d\x67\x5b\x84\xb8\x6f\xc2\x4a\x83\
+\xcc\x75\x20\x6f\x17\x65\x54\xb0\x7a\x0e\xff\xca\xcc\x96\x08\x27\
+\x4e\x6a\x63\x6a\x04\xbe\x1a\xfd\x6c\x30\x82\xbf\xdb\xd3\x96\x9c\
+\xf6\xc1\x14\x78\x0f\x83\x3a\x49\x45\xad\xfc\x71\x60\xb1\xa3\xc2\
+\xc5\xc8\xdf\x7c\x11\x58\x8b\xdb\x2f\x98\x47\xc5\x1e\x69\x47\x2a\
+\xa1\x82\xaa\xab\x2d\xc7\x05\x19\x95\xe3\x4d\x80\x46\xe4\x18\x10\
+\x56\xbc\x03\x98\x6b\x51\xfa\x89\xc0\x5b\x04\x1e\x77\x34\xba\x12\
+\x4f\x20\x2f\x42\x55\x04\x0f\x61\xae\xb6\xd5\x16\x7c\x87\x80\x7b\
+\x03\xa6\x3a\xe0\x15\xe0\x8a\x85\xe9\x12\xf0\x98\x41\x71\x87\x81\
+\x67\xad\xab\xc7\x02\x36\x18\x64\xb6\x1b\xe8\xdb\x81\xdf\x2d\x3e\
+\x5c\x41\xf9\x2a\x06\xd5\x06\x54\x50\x8a\x12\x70\xc2\xa0\xbc\x47\
+\xa0\x3d\x49\xb2\x2d\xac\x00\x9c\x12\xe4\xbe\x6e\xa0\xff\xda\x62\
+\xfb\x6e\x1c\xcb\x64\x1d\x98\x83\xd1\x2f\x02\x7d\x0e\x39\xd0\x74\
+\x09\xb4\xbe\x78\x5a\x90\x3b\x8c\x1c\x9c\x7f\x35\xd8\x3c\xa8\x7d\
+\xf2\x42\x01\xd8\x24\x08\x3b\x2d\xd0\xd6\x0b\x74\x97\x91\xa3\xbd\
+\x2f\x6a\x91\xb7\xc8\x46\x81\xf6\xb4\x40\xb7\x89\x88\xc3\x59\xd4\
+\xeb\x79\x1d\xf9\x75\x3f\x2f\xcc\x49\xc1\x71\x50\x1b\x9e\x14\x97\
+\xb5\xac\x30\xa4\xe3\xb6\x64\xdb\x09\x94\x2f\x22\x6c\xdf\xe7\xed\
+\xc2\xdc\x88\x30\x27\x2d\xc0\xcf\x16\xd9\x3e\x90\x64\xdd\x21\xcc\
+\x49\x0b\x20\xf9\x70\x03\x71\x02\x94\xf4\xed\x95\x1d\xe9\xe2\xc2\
+\xd5\x4e\x6f\x9d\x36\xc1\x7f\x0a\x73\xb3\x84\x39\x29\x30\xda\x72\
+\x06\x1f\xcc\x11\xe6\x2e\x0a\x73\x77\x0b\x73\x92\x0f\x37\x10\xb5\
+\x00\x05\xa0\x55\x98\x77\x5d\x80\x66\xaa\x6b\xf8\x71\x50\x87\x5c\
+\x68\xf9\x5e\x98\x93\x6c\x6b\x25\x46\x85\x2a\xce\x36\x78\x4e\xa0\
+\x8d\x7b\xa0\xaa\xc4\xb8\x6e\x83\x2e\x89\xd0\x97\x06\xde\x6d\x02\
+\xed\x37\x24\x4f\x84\xbe\x15\xe4\xbe\x66\xa0\xff\xca\x62\xbb\x31\
+\x11\xf2\x49\x85\x4d\x55\x9a\xa5\x06\x9e\xf5\x4e\xae\xca\x78\xd1\
+\x20\x73\x89\x81\x7e\x09\x72\x05\x28\x32\x15\xbe\x8f\xf4\x0e\x43\
+\x87\x05\xde\x22\xea\x60\xe3\x8b\x27\x91\x0f\x43\x87\x2c\x7c\x3e\
+\x87\xa1\x46\x48\xf7\x38\xfc\x88\x41\x71\x11\x75\xb0\x71\xf9\x1c\
+\x0a\xa8\x5f\xde\x74\x1c\x7e\xc8\xd1\x16\xe7\xe3\xf0\x11\xc3\xc3\
+\xb8\x05\x91\xee\x08\x85\xa7\x50\x41\x4d\xda\x1d\x6a\xf5\x33\xe9\
+\x9b\x0f\xc6\x66\x4f\x5b\x6c\x05\x91\x7e\xc8\xa6\x24\xb6\x2f\xc2\
+\x89\x32\x2a\x45\x3e\xc6\xcd\x92\xd8\x31\xec\xf1\x67\x2f\x19\x95\
+\xc4\xb2\x2a\x8a\xda\x16\xc1\x67\xec\x25\x7e\x4e\x61\x2d\x8a\x82\
+\xb9\x2c\x9e\x24\x82\xe7\x51\x9f\x43\xd2\xb2\xf8\x66\x32\x2e\x8b\
+\x07\x30\x5d\x8c\x48\x69\xa8\x0f\x5a\x89\xd7\x36\x3b\x80\xbd\x15\
+\xc7\x06\xe7\x8b\x11\xc8\xfe\x6a\xac\x1d\x55\xc9\x19\x16\x74\x04\
+\x63\x18\x95\xe4\x98\xf6\x79\x5f\x78\x5d\x8d\x81\xf9\x72\x34\xea\
+\x8e\xbf\x13\xd8\x89\xda\x52\x5c\x7a\x01\x72\xa8\xfd\x77\x05\xf0\
+\x8c\x1e\x2b\xf4\x9c\xcb\x8e\xd3\xa2\x75\xed\x24\xe5\xcb\x51\x48\
+\xe7\x7a\xfc\x55\x1c\x1b\x11\x3c\x11\xe4\x07\xd2\xf5\xf8\x03\x02\
+\xbd\x54\xa1\xbe\x88\xe5\x7a\x1c\xd2\x69\x90\x18\x00\x16\x7a\xbb\
+\x68\xc6\x42\xd4\xed\x91\x49\x5f\x6a\x0d\x12\x10\xdd\x22\xb3\x1a\
+\xbf\x16\x99\x77\x89\xee\x2d\xb0\x61\x91\x96\x31\xae\x2d\x32\x90\
+\x7e\x93\xd4\x07\xf8\x5d\xb3\xcf\xd1\x3c\x69\xda\xe0\xdc\x24\x15\
+\x20\xed\x36\xb9\x03\x1e\xba\x3f\xb2\xc8\xca\xbc\x4d\x0e\xfc\x1b\
+\x25\x97\x11\x7d\xaa\x4c\xab\x51\xf2\x07\xc6\xa9\x51\x12\xfc\x5b\
+\x65\x6b\x50\x91\x3a\xab\x56\xd9\x17\xa8\xbe\x6b\xc8\xac\x55\x16\
+\xa6\x9a\xa5\x01\x75\xeb\xd3\x03\xec\xc2\xbd\x5d\x3e\x47\xfa\x0b\
+\xe0\x92\x24\x05\xed\xf2\xbb\xb4\xcd\xf5\x2e\x86\x66\x01\xe9\x4f\
+\x53\x65\x92\xfd\x65\x66\xea\x4f\x53\x59\x60\xd2\x2f\xc0\x78\xfe\
+\x6b\x2c\x88\x0b\x13\x0a\x93\xfe\x0d\xc8\x72\x01\xae\x4d\x50\x59\
+\x63\x90\xd5\x02\x94\x81\xcf\x52\x94\xf7\x29\x13\xf0\xf3\xb1\x61\
+\x3e\xaa\xcc\x96\xf4\xef\xf3\x07\x81\x7b\xb2\x32\xf2\x5f\xa6\x84\
+\x06\x53\x72\x77\x7f\x4f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x01\xea\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x9c\x49\x44\x41\x54\x78\x9c\xed\
+\x97\xcf\x4e\x83\x40\x10\x87\x49\xf4\x31\xea\xd9\xc7\xe8\xd5\x7a\
+\xb0\xfc\x26\xe1\x09\xf5\x50\xf1\xc0\xcd\xc7\x69\x13\x63\x0f\x26\
+\xa6\xb1\x26\x34\xdd\xe1\x80\x59\x5a\x2e\x94\xf2\x47\xd8\xb2\x5b\
+\xe6\x4b\xe6\xc4\x6c\xc2\xc7\x0f\x96\x59\xcf\x13\x04\x41\x10\x46\
+\xcc\x1e\x78\x62\xa2\x35\x13\xa5\x35\xb5\xd6\xbd\x9e\xeb\x28\xa2\
+\xaf\x06\xb2\x59\xe9\x5e\xcf\x16\x12\xa2\x47\x26\x5a\x35\xbd\xf9\
+\x0b\xd6\x2a\xf1\xfd\x59\xef\xc2\x4c\xf4\x61\x81\x5c\x79\x01\x9f\
+\x22\xdc\x95\xc4\xf7\x67\x0c\x2c\x2d\x4c\x77\x99\x00\x0f\x9d\x05\
+\x05\x41\xb8\x4e\x78\xe8\x4d\xaa\x50\x22\xdc\x37\x6c\x41\xaa\x92\
+\xb0\x49\xd8\x82\x54\x25\x61\x93\xb0\x05\xa9\x4a\xc2\x26\x61\x0b\
+\x52\x95\x84\x4d\xc2\x0d\x9f\xbc\x22\x7a\x8f\x81\x89\x2e\x06\xa2\
+\xda\x35\x40\x94\xf7\xeb\xb5\xce\x25\x1c\x03\x93\x7c\x4d\x3a\x9d\
+\xde\x32\xb0\xa8\x90\x5d\xe8\x9e\xbc\x3f\x7b\x48\x2e\x0b\x57\x4a\
+\x17\x64\x35\xbb\xf9\xfc\xce\x39\x61\x06\xa2\xa2\xc8\x89\x74\x89\
+\xec\xb1\x27\x72\x4f\x98\xb2\x7a\x3b\x11\x0a\x82\x1b\x06\x9e\x99\
+\x28\x2c\xbd\x46\xf4\xe2\xf6\x2e\x8d\xf2\x14\x6b\xd3\x77\x56\x98\
+\xca\x93\xee\x9a\xac\xed\xc2\xe9\x39\xe9\x2e\xb2\xb6\x0b\x87\x67\
+\x85\x0f\xdf\xf4\x55\x09\x87\xb5\xaf\xf4\x3f\xa5\xed\x13\xc6\xb8\
+\x36\xad\xb0\xe2\xd7\x53\xf5\xcb\x72\x50\x18\x23\x1b\x3c\xe2\x0e\
+\xa3\xa5\xf3\xb3\x74\xda\xf2\xf0\xe0\xe4\x2c\xad\x8e\xc7\xc3\xec\
+\xe6\x5b\x1c\x0f\x75\xbf\x93\xc7\x43\xbe\x50\x89\x70\xdf\xb0\x05\
+\xa9\x4a\xc2\x26\x61\x0b\x52\x95\x84\x4d\xa2\x88\x7e\x87\x4e\x35\
+\x2f\x05\xfc\x78\xa6\xe1\x16\x63\x9f\xf1\x02\x5e\x8d\x0b\xef\x83\
+\xe0\x5e\x11\x6d\x86\x96\x55\x44\xdf\xc5\xf1\xd5\x18\xbb\xc3\xe8\
+\x17\x2a\x60\x3b\xc0\x6b\xbc\xd5\xc9\x5e\x4c\x56\x10\x04\x41\x10\
+\x04\xaf\x2f\xfe\x00\x8f\xc5\xfd\x1f\xd6\x54\x0c\x66\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x7f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x31\x49\x44\x41\x54\x78\x9c\xed\
+\x98\x41\x6a\x02\x41\x10\x00\xeb\x92\xab\x7e\x20\xe0\x49\xf4\x60\
+\x4e\xfe\x24\x7f\x31\x3f\x89\x87\x3c\x21\x88\x0f\xf0\x17\x01\xdf\
+\xa0\x59\x41\x88\x21\xd7\xd0\xb9\x4c\x40\x44\x77\x67\xdd\xde\xa5\
+\x6d\xbb\xa0\x61\x0f\xb3\x43\x17\x33\xd3\x3b\xdb\x10\x04\x41\x10\
+\x04\xc1\xfd\xd2\x07\xd6\x80\x18\x88\x6f\x60\x09\x8c\xea\x4a\x3c\
+\x00\x2b\x03\x02\x72\x12\x7b\xe0\xb1\x8e\xc8\x9b\x81\xa4\xe5\x42\
+\xbc\xe7\x4a\xcc\x0c\x24\x2b\x25\x71\xc8\x91\x78\x06\x7e\x0d\x24\
+\x2b\x15\x51\xca\x14\xf8\x31\x90\xa4\x34\x11\x19\x00\x9f\x06\x12\
+\x94\x26\x22\x3d\xe0\xc3\x40\x72\xd2\x44\x44\xab\xcc\xce\x81\x22\
+\x63\x5c\x91\xc6\xaa\x8b\x68\x94\xd9\xd7\x34\xd7\xa4\x42\xa6\x48\
+\x63\x48\xef\x88\x96\xc8\x8b\xd2\x32\xef\x80\xa7\x34\xe7\x18\xd8\
+\x64\x8c\xd9\x6a\x89\x68\x97\xd9\x32\x19\x6d\x09\x69\xbb\xcc\x9e\
+\x93\x69\x43\x42\xfe\xcb\xac\xd6\x64\x55\xe7\x60\x72\xf2\x9c\x53\
+\x0c\x24\x57\xa4\x8b\xdb\xec\xb1\x4c\x1b\x12\xe2\x4a\x64\xe0\x65\
+\x6b\x75\x79\xd8\xb7\x99\xa5\x59\xae\x15\xe9\xa2\xfc\x1e\xaf\x7a\
+\x1b\x32\x9d\x7c\x10\xcf\x6d\x5d\x6d\x19\x9f\x57\x14\x57\x97\x46\
+\x37\xd7\x78\x57\x3f\x56\xae\x7e\x75\x5d\x35\x1f\x6e\xa5\x1d\xf4\
+\x85\x93\x06\xdd\xc2\x4b\xcb\x74\xc8\x0d\x37\xb1\x0f\x69\x25\x6a\
+\x4b\x04\x41\x10\x04\x41\x80\x71\xfe\x00\x36\x62\xd8\xa4\x4a\x95\
+\x24\xf6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x43\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\xf5\x49\x44\x41\x54\x78\x9c\xed\
+\xd6\x31\x0e\xc2\x30\x0c\x05\xd0\x5c\xa2\x43\x8f\x83\x0f\x01\x27\
+\xe0\x0a\x9c\xa1\xa3\x67\x98\x3b\xc3\x11\x98\xbb\x80\x98\x58\x3d\
+\xb3\xb0\x04\xa9\x48\x6d\xd8\x51\x87\x96\x3a\x71\x4d\xfc\x25\xef\
+\x79\xca\xb7\x12\xe7\x2c\x96\x38\x81\xda\x87\xb9\xb3\xaa\x7d\xa5\
+\x16\xb0\x3e\xbe\x64\x11\x30\x13\x70\x79\x74\x61\x73\x12\x44\xc0\
+\x4c\x00\xf9\x5e\x16\x01\x0c\x00\x51\x04\x30\x01\xc4\x10\xc0\x08\
+\x10\x41\x00\x33\x20\x39\x02\x26\x1c\x16\x9b\x96\x63\x2a\xb5\x80\
+\xfd\xf5\xcd\x8f\x48\x09\xb8\x3f\xbb\x70\xe0\x46\xa4\x04\x90\xef\
+\xf9\x11\xa9\x01\xc4\x8d\x18\x3a\x68\xb1\x3d\x0f\x0e\x17\x80\x38\
+\x11\x52\x00\xe2\x42\x48\x54\x88\x38\x11\xd2\x00\xfa\x42\x2c\xba\
+\x42\x38\x62\x0c\x00\xf1\xbf\x12\x21\xfa\x0d\xa8\x07\x14\x13\x76\
+\xa0\xdc\xdd\x7e\x1e\x34\x80\xfb\xd3\x0a\x81\x76\x40\x11\x69\x07\
+\xd0\x00\xb9\x54\x08\x72\x02\x94\x4b\x7c\x07\x20\x27\x00\x6a\xaf\
+\x10\x4a\x03\xa6\x64\x91\xef\x80\xcb\x1d\x80\xda\x2b\x84\x06\x68\
+\xed\x06\x46\xc7\x2a\xd4\x08\x2f\xb1\xc5\xe2\xf4\xe6\x03\x50\xb8\
+\xee\x2b\x4a\xb8\xc4\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x01\x3a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\xec\x49\x44\x41\x54\x78\x9c\xed\
+\x96\xb1\x0a\xc2\x30\x14\x45\xf3\x35\x42\xdd\x94\x37\xf4\x2f\x1c\
+\xfd\x1d\xc1\xc5\xb5\x93\x6f\xb5\xfe\x80\x9b\x14\xd4\x45\x84\x6e\
+\xb1\x83\x20\xd4\x5d\xff\xa0\x63\x44\x44\xa8\x10\x90\xda\x24\x26\
+\xf5\x1e\xb8\x73\x39\xdc\xfb\x68\x84\x00\x00\x00\x2f\x21\x2e\xd5\
+\x2b\xd1\x24\xd3\x66\xb5\x3b\x18\x0b\xd5\xbe\x47\xf3\x72\x16\xb6\
+\x00\x1b\x90\x30\x2d\xd0\x1b\xc6\x6f\xf9\x28\xc0\x2d\x25\xbc\x10\
+\xe0\x16\x12\xde\x08\xf0\x97\x12\x5e\x09\x70\xa9\x20\x10\xa1\x81\
+\x18\x13\x6a\x44\xfd\x80\xfa\xd3\xad\x76\x42\x8b\xf5\xde\xc8\x4f\
+\x2c\xcd\x72\xbb\x47\x3c\x48\x0a\xad\xc4\x28\xd9\xb4\x96\x48\xb3\
+\x5c\x8d\x97\x27\xbb\x02\x3e\x44\x40\x80\xd1\x80\xc2\x84\x9a\xd0\
+\xa9\x23\x2e\x6e\x95\x72\xcd\xf1\x5a\x99\x13\xf8\x15\x04\x01\xd6\
+\x37\x20\xcf\x17\x2b\x71\xd6\x40\xf0\x02\xae\x20\x08\x70\x47\x27\
+\x24\x43\x17\x70\x05\x41\x80\x3b\x3a\x21\x19\xba\x80\x2b\x08\x02\
+\xfc\x6c\xe0\xf1\xb4\x75\x8d\x34\xf9\x9c\xf6\x21\xe2\xef\x04\x00\
+\x00\x40\xb8\xe0\x0e\x01\x24\xc1\x69\xe0\xc1\x96\xdb\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xaf\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x61\x49\x44\x41\x54\x78\x9c\xed\
+\xd2\xc1\x09\x84\x50\x0c\x40\xc1\x94\xf6\xbb\xd8\x76\xed\x4c\xaf\
+\x8b\x47\x41\x79\xca\x0c\xe4\x9e\xf0\x32\x03\x00\xdc\x6b\x6d\xbf\
+\xfd\x7f\xe6\xad\x96\x43\x62\x14\xa9\x51\xa4\x46\x91\x1a\x45\x6a\
+\x14\xa9\xc9\x15\x59\xa7\x85\x9e\x9e\x71\xc8\x89\x22\x5b\xec\xb5\
+\xae\xca\x2d\x74\x95\x43\x6a\x14\xa9\x51\xa4\x46\x91\x1a\x45\x6a\
+\x14\xa9\xf9\x4c\x11\x00\x98\x97\x38\x00\x45\x64\x30\xbf\x65\x80\
+\x26\xf4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x4f\x49\x44\x41\x54\x78\x9c\xed\
+\xd6\xc1\x09\x00\x20\x0c\x03\xc0\x8c\xde\xcd\xeb\x16\x2a\xe1\x0e\
+\xf2\x37\xf8\x68\x12\x00\x1e\x99\x92\x64\x4b\x92\xd7\x0f\x50\x24\
+\xad\x3f\x32\x25\x01\x00\xf2\xc1\x45\x36\xe3\xd3\x3a\x1a\xb7\x24\
+\xa9\x29\x32\x25\x01\x00\xf2\xc1\x45\x36\xe3\xd3\x3a\x1a\xb7\x24\
+\xa9\x29\x32\x25\x01\x20\xd7\x1d\xce\x3c\xeb\xc7\x10\x2a\x5b\x4c\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xae\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x60\x49\x44\x41\x54\x78\x9c\xed\
+\x99\x2d\x4f\x04\x41\x0c\x86\x4b\x08\x60\x38\x87\xc5\xf0\x03\x30\
+\x38\x08\x69\x0f\xcc\x05\x81\xdb\x0e\x20\x90\x58\x04\xfc\x80\xfb\
+\x0b\x48\x2c\xf2\x2c\x09\x92\x96\x0f\x09\x28\x14\x1a\x8b\xc3\x90\
+\x0d\x2c\xe1\x63\xb3\x68\xe8\xec\x5c\x97\x79\x92\xda\x4d\x9e\x64\
+\x3a\x7d\xa7\x0b\x90\xc9\x64\x32\x3f\x41\x09\x87\xc5\x7d\x31\x0d\
+\xde\x21\x0d\x15\x09\x3f\xf4\x95\x37\xc0\xbd\x88\xd6\xc5\xa7\xeb\
+\x57\x3b\x0b\xe0\x5f\x24\x54\x28\xe1\x05\x85\x8f\x96\xaf\x37\x7b\
+\xe0\x59\x84\x6a\x21\x0d\x8f\x7d\xe5\x5d\xa8\x60\x02\x3c\x8b\x50\
+\x23\xa4\x6b\x97\x5b\x8b\xe0\x5d\x84\x3e\x8f\x1b\xbf\x92\xf2\x09\
+\xca\xf6\x1c\x78\x16\xa1\xa6\x7f\x9e\x48\xc3\x7e\x31\x2a\x26\xc1\
+\xb3\x08\xd5\x25\x7c\x47\xe7\xbc\x02\xee\x45\xf4\x43\x26\xbc\x91\
+\x86\xd1\xea\x45\x98\x07\xd7\x22\x5a\x5f\x06\xfc\x8c\x12\x86\x83\
+\xb3\xc1\x8c\x6b\x11\x6a\x8e\x5b\xda\x74\x40\x56\x22\xa9\xd3\x01\
+\x99\x8b\x24\x4a\x07\x14\x41\x24\x49\x3a\xa0\x88\x22\xad\xa6\x03\
+\x6a\x41\x84\xbe\xaa\x44\xe1\xe3\x68\xe9\xa0\x45\x91\x2a\x6a\x3a\
+\x68\x5b\x84\x62\xa5\x83\x64\x22\x6a\x9c\x0e\xb2\x88\xfe\xb9\x57\
+\x6e\x5d\x1f\x2d\xec\x40\xb3\x97\xee\xaf\x5f\xf4\x3e\x10\xdd\x47\
+\x14\xfc\x0e\x8d\x28\xc5\x6c\x74\x81\x78\x22\xde\x63\xbc\x38\x7f\
+\x58\xa1\xfb\xa7\xae\x74\x60\xf9\x80\xd6\x53\xd9\x82\xff\xb6\xa0\
+\x2b\xa3\x4e\x65\x0b\x3a\xbf\xc4\x46\xef\xbf\x15\x30\xc5\x54\xb6\
+\x60\x2c\xa6\xb2\x05\x63\x31\x95\x2d\x20\xe5\x83\xa5\x9b\xbd\x29\
+\x93\x8f\x65\x32\x99\x0c\xfc\x92\x77\xa1\x6c\x53\xe9\x31\x90\x32\
+\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x6f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
+\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
+\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
+\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
+\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\
+\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\
+\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\
+\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\
+\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x32\
+\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x32\x22\
+\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x38\x2e\x34\x36\x36\x36\x36\x36\x35\x20\x38\x2e\x34\x36\x36\
+\x36\x36\x36\x39\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\
+\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\
+\x67\x38\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x32\x2e\x35\x20\
+\x28\x32\x30\x36\x30\x65\x63\x31\x66\x39\x66\x2c\x20\x32\x30\x32\
+\x30\x2d\x30\x34\x2d\x30\x38\x29\x22\x0a\x20\x20\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x65\
+\x72\x72\x6f\x72\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\x65\
+\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\
+\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\
+\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\
+\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\
+\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\
+\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\
+\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\
+\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\
+\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\
+\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x39\x31\x39\x35\x39\
+\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x63\x78\x3d\x22\x31\x38\x2e\x33\x39\x30\x38\x38\x39\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x79\x3d\x22\x32\x34\x2e\x33\x39\x31\x35\x39\x35\x22\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\
+\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x6d\x6d\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\
+\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\
+\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\
+\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\x20\x20\
+\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x77\x69\x64\x74\x68\x3d\x22\x31\x38\x34\x38\x22\x0a\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\
+\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x30\x31\x36\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\
+\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x37\x32\x22\x0a\x20\x20\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\
+\x2d\x79\x3d\x22\x31\x31\x30\x37\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\
+\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x35\x22\x3e\
+\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\
+\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\
+\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\
+\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\
+\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\
+\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\
+\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\
+\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\
+\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\
+\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\
+\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\
+\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x43\x61\x6c\
+\x71\x75\x65\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\
+\x6c\x61\x79\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x30\x2c\x2d\x32\x38\x38\x2e\x35\x33\x33\x33\x31\x29\x22\
+\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\
+\x3a\x23\x66\x66\x34\x34\x34\x34\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\
+\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3a\x30\x2e\x32\x35\x36\x30\x34\x38\x33\x35\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\
+\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\
+\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x70\x61\x74\x68\x38\x31\x35\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x63\x78\x3d\x22\x34\x2e\x32\x33\x33\x33\x33\x33\x31\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\x39\x32\
+\x2e\x37\x36\x36\x36\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\
+\x3d\x22\x33\x2e\x38\x34\x30\x37\x32\x35\x39\x22\x20\x2f\x3e\x0a\
+\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x06\x77\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x06\x29\x49\x44\x41\x54\x78\x9c\xed\
+\x5b\xe9\x8f\x14\x45\x14\x2f\xbc\xe2\x11\x45\x63\x0c\xa2\xb0\x33\
+\x55\x3d\x2b\x8a\x82\x08\x44\x83\xa2\x7e\x50\x44\x8d\x41\xe3\x07\
+\xaf\x2f\x1a\x8d\xe7\x17\x35\x7e\xf2\x5c\x8d\x02\xd3\xaf\x7a\x40\
+\x84\x98\xf8\x17\xa8\xf8\x41\x05\x25\xea\xe2\x85\xe2\x11\xfd\x68\
+\x0c\x51\xe3\xc2\x6e\xbf\x37\xb3\x1c\x0b\x11\xa3\xc8\x35\xa6\xe6\
+\x30\x3d\x55\xd5\xdb\xd3\xd3\xbd\x33\x3b\x32\xbf\xa4\xbe\x4c\xd7\
+\xab\x57\xaf\xea\x1d\x55\xef\xd5\x30\xd6\x43\x0f\x3d\xf4\xd0\x43\
+\x0f\x13\x0a\xc7\xf3\x67\x0a\xc0\x7b\x84\xc4\x75\x42\xd2\x16\x01\
+\xf8\xbb\x90\x34\x26\x24\x1e\xa9\x36\x1a\xab\xfc\x06\xf8\xa5\x00\
+\x5a\x2b\x3c\xbc\x5b\xd1\xb0\x6e\x86\x53\x18\xce\x71\xa0\xbc\x00\
+\xdc\x2e\x24\x95\x5b\x6a\x55\xda\x95\x39\x18\x75\x58\xb7\x20\xeb\
+\xf9\xcb\x38\xe0\xa7\x02\xf0\x68\xcb\x82\x9b\x0b\x71\x94\x03\x6d\
+\xe6\x6e\xf1\x16\x36\x59\x91\x75\xfd\x59\x1c\x70\x53\x6a\x42\x87\
+\xb4\xca\xe2\x16\x4a\x73\xd8\x64\xc1\xec\x81\x9f\x4e\x12\x80\x1e\
+\x97\x78\x28\xc6\x8e\x96\x04\xd0\xc3\xfc\xd5\xd2\x34\xd5\x84\xa4\
+\x47\x38\xe0\x68\x8c\x45\x38\xa8\x78\x2a\xde\x1d\x15\x7e\xa6\xbb\
+\xe3\x3c\x0e\xb4\x35\x4c\x6d\x85\xc4\x21\xf3\x1b\xfe\x2c\xf2\xd8\
+\xa7\x8f\x95\x59\x59\xcc\x0a\x49\xdb\x42\xfc\x80\x7d\x21\x24\x7d\
+\xdd\xb7\x6a\xe7\xf4\x8e\x08\x2f\x00\xaf\x12\x12\x8b\xf6\x1d\xa2\
+\x77\x39\x8c\xcc\x55\x76\xdb\x28\x0c\xed\xe9\x93\x45\x1e\x36\xa6\
+\x72\x76\xd5\xe8\xd0\x30\xde\x60\xb6\x30\x72\xa9\x00\x7a\x3f\x64\
+\xa1\xc9\xf1\xfc\x2b\xdb\x2f\x3c\xe0\x9f\x96\xdd\x1d\xe2\xe0\x5f\
+\x5f\xe9\x23\xe9\x26\xfd\x7b\x56\x16\xef\x88\x1c\x5b\xfa\x77\x19\
+\x74\x1e\x2e\x55\xdf\xb8\x87\x4b\x6c\x1a\xc1\x01\xf7\x3b\xe0\x2f\
+\x6a\x87\xec\xcc\x71\x71\xbe\x90\xb8\xcf\xb2\xeb\x6f\xe6\xd6\xec\
+\x3e\xa3\xde\x8f\x4b\xfc\x4c\xfb\xbe\xb9\x59\x1e\x1c\xf0\xf3\x30\
+\x5a\x91\x1f\x9b\xca\x25\xbd\x65\x6a\x02\xed\xcd\x80\x3f\x8f\x4d\
+\x24\x72\x30\xea\x70\x89\x3b\x0d\x5b\x07\x7a\x9e\x95\xcb\x53\xea\
+\xfd\x9c\x7c\xf1\x62\x7d\x82\x71\x76\x48\x78\xb8\x58\xe7\x91\x93\
+\x34\xfb\xbf\x0e\xe5\xf2\x14\x21\xe9\x05\x8b\x26\x8c\x8e\x67\x62\
+\x89\x70\xed\x40\xf9\x04\x01\xf8\xad\x21\xbc\x87\x8f\xeb\x7d\xb9\
+\xa4\xd5\xda\x0e\x6e\x8d\xcb\x4f\x00\x7e\xa7\x99\x57\xc1\xd2\xe7\
+\x09\x8b\x26\x6e\x55\x73\x65\x69\x83\x4b\x7c\xd1\xe2\x84\x9e\x33\
+\x3a\x56\x77\x67\x87\xd6\xef\xde\xd8\xfc\x5c\xff\x7e\xdd\xbf\x04\
+\xb5\xac\x0e\x9b\x26\xa8\xdf\x12\x88\x6a\x82\xe7\x8b\x97\xeb\x71\
+\x5e\xd9\xbc\x75\x42\x2e\x2d\xd4\x26\xf3\xb7\xb2\x5b\x16\x13\x99\
+\xd5\x43\x67\x72\xa0\x03\x0d\x66\xe4\xe2\x7c\xa3\x63\xb9\x3c\x45\
+\xf7\x09\x6a\xae\x8e\x47\x0b\x58\x5a\xe0\x7a\x38\x93\x38\x14\x74\
+\x78\x41\x28\xad\xd0\x9c\xd3\x86\x56\xf9\x0a\xc0\x0f\x1a\x04\x73\
+\xf1\x19\x6b\xbf\xfc\xd8\x54\x23\x3a\x00\x7d\xc2\xd2\x40\x56\xd2\
+\x35\x86\x8a\x79\xfe\x75\x61\xfd\x8d\xe3\xb0\xc5\x47\x34\x0b\xdd\
+\xc6\xb9\xc4\x0f\x43\xe7\x09\x78\x83\xe1\x0f\x5c\xbc\x9a\x25\x05\
+\xd7\x43\x92\xa4\xf7\x42\x3b\x0f\x94\x8f\x33\x43\x64\xf1\x92\xd6\
+\x79\x8f\xcc\xd5\x34\x6f\x1f\x5b\x5f\x3e\x3e\xac\xbf\x7e\x58\x52\
+\xa1\x98\x25\x81\x63\x09\x67\x5d\xd7\x92\x5c\x9c\x84\x44\xd9\x71\
+\x01\x12\x36\x2e\xc9\x6d\x79\x01\x38\xd0\x70\xa7\x05\x48\xdc\x00\
+\xb7\xb7\x26\xbc\xe7\x5f\xd0\xf1\xc9\xa7\xd4\x5a\xca\x28\x39\x1e\
+\x3d\xa4\x0d\x34\x18\xad\x31\x46\x42\xe4\x76\x96\x10\x6a\x8c\x06\
+\x95\x06\xdc\xd4\x04\xcd\x60\x90\x26\x0b\xf8\x60\x0b\x8c\xf1\x75\
+\x8d\xf1\xcb\x51\x34\x1c\xe8\xc7\x20\x4d\x1a\x37\xb4\xea\xb5\x3b\
+\x68\xd3\xf8\x43\x34\x0d\x2d\x6f\xdc\x08\x5c\x97\xf8\xf0\x93\xf5\
+\xfc\x65\x91\x8c\xb5\x23\x70\xff\xaa\x92\x60\x09\x51\xcb\x11\x04\
+\x85\x19\x8a\xa2\x71\x00\x6f\x8d\xab\xbd\x06\x6a\xa9\xeb\x58\xe1\
+\x44\x4f\x66\x5c\xb8\xc2\x3f\x9b\x25\x44\x6e\x39\x9d\xd3\xa8\x01\
+\xb4\x3b\x72\x1e\x85\xd2\x1c\x4d\x6b\x7e\x8b\xcd\x58\x00\xed\x09\
+\x0e\xa2\xd2\x5f\x4d\xd0\xfc\x15\xa4\x99\x26\x8b\xa7\xb1\x84\x98\
+\xe5\xee\x3a\x5d\x33\xc5\xfd\x51\x34\xfd\x85\xe1\xf3\x1b\x69\x68\
+\x57\x6c\xc6\x5c\xd2\x3f\xc1\x41\x32\x03\x43\x27\x47\xd1\x08\xc0\
+\xc3\x41\x9a\xf1\x4e\x6d\xb1\xae\xe1\x8d\xbb\x79\x28\x8a\x46\xcd\
+\x55\x5b\x80\x03\x89\x17\x60\x46\x61\xf8\x94\x6e\x59\x80\xe9\x03\
+\x78\x6a\xe2\x05\x10\x9a\x09\x28\xb5\xea\x16\x13\xc8\xe5\x47\x66\
+\x24\x36\x01\xd1\xc5\x4e\x50\xbf\x44\xb5\xe4\x04\xb9\x16\x06\x55\
+\x68\xe9\x44\x18\x54\x35\xc6\xd8\x61\xd0\xc3\xdb\x12\xe7\x06\x84\
+\x76\x10\x52\x87\x8b\x28\x1a\x75\x48\x69\x58\xb4\x14\xf2\xf5\x46\
+\x82\x54\xe2\xf7\x91\x34\x40\x2b\xb4\xb9\xaf\x8d\xcd\xd8\x39\xe6\
+\x8f\xc2\xee\x48\xbf\x76\x9a\xea\xda\xd6\x72\x79\x5d\x98\xd9\xdd\
+\x63\xe7\x3a\xfc\xbf\x49\x88\x00\xe5\x59\xab\x70\x8e\xf5\x94\x98\
+\x2d\x29\xaa\x12\x8f\x6c\xbc\xa4\x28\xd0\xde\xb4\x26\x10\x3b\x29\
+\x2a\x71\x63\xaa\x49\x51\x05\x95\x5a\x36\xd4\xca\xc3\x25\xac\x0d\
+\x69\x71\x2e\xe9\xc9\xa6\xd3\xe2\x1e\x2e\x35\x76\xdf\xc3\xc5\x2c\
+\x0d\x08\x2d\xc3\x52\x29\x42\x84\x54\x7b\x38\xd0\xb3\x69\x15\x46\
+\x94\xc0\xda\x02\x3c\x1d\x56\x45\xb2\x38\xec\x8f\x59\x5a\x10\x2e\
+\x2d\x34\x9e\xc0\x00\xbe\x3d\x91\xa5\xb1\xbe\x95\x3b\xce\xd2\x2f\
+\x64\x61\xa5\x31\x21\x71\x7d\xa3\xe3\xc3\x83\xd6\xbe\x49\x20\x6c\
+\x45\x48\xa0\x01\xfb\x84\xb4\xdd\x80\xe2\x7d\x71\xf9\x71\x89\x0f\
+\x34\x73\x04\xe6\x80\x2f\x35\x55\xb4\x4d\xe3\x5a\xca\x2d\xef\x81\
+\x94\x9d\x46\x96\xc7\x25\x7d\x13\x97\x9f\x3a\xf2\x46\x95\xc7\xb9\
+\xa4\xa7\x2c\x9b\xf2\x55\x1a\xd7\x70\x2b\xd4\xe3\x03\xdb\x6b\x2e\
+\x55\x3a\x37\x1e\x48\x68\xef\x04\xe3\xdc\x0b\x0c\xc7\x0b\x78\x34\
+\x93\xa7\x8b\x1a\x2a\xc2\xb6\x9d\x07\x2c\xa9\xc7\x56\x6c\x22\x91\
+\x01\x7f\x9e\xe5\x21\x53\xc5\x27\x04\x6d\xdd\x78\x22\xd3\x6c\x48\
+\xaa\xda\xf4\x17\x61\x4f\x64\x2a\x0e\x0f\xf0\x1d\xcb\xce\xef\x51\
+\x61\x93\xb5\x03\x0e\xf8\x8b\x54\x62\xc2\xb2\x08\xdb\x55\x95\xb6\
+\xda\x87\x6e\xd4\xbf\x3b\xae\x7f\x67\xd4\xd8\xea\x9d\xb0\x4e\x57\
+\x1f\xb3\x16\xea\x8c\xe3\x39\x97\xf8\x47\x56\x16\xaf\x60\xed\x84\
+\x03\xfe\x22\x21\x09\xad\xa7\x2f\xa0\x0d\x35\x4d\x69\x0c\x9f\x92\
+\xc6\xc6\xcb\x11\x54\xee\xfe\xfa\x41\x4a\xd2\x60\xce\xf3\x2f\xd3\
+\xdf\x0a\x04\xb4\xc3\x6f\xbb\xf0\x75\xa8\x47\x8a\xca\xe9\x58\x17\
+\xa1\x7e\x5e\x30\x7f\xdf\x66\xb3\xd3\x8a\x7f\x91\xf4\x4b\x93\x63\
+\xd4\xdb\x96\x0c\x8c\x9e\xcb\x3a\x89\x05\x6f\x94\x4f\xe4\x80\x50\
+\x79\xbe\x1a\x3e\x51\x6d\xd7\x70\x54\x00\x3d\xaa\x26\xaf\x1a\x97\
+\xf4\x98\xf1\xfa\x6c\x7c\xfa\x83\xaa\xea\xab\x78\xb3\xc9\x02\xae\
+\x8a\xa9\x21\x6a\x9a\x72\x1b\x54\x51\x86\x4d\x56\x08\x97\x6e\x56\
+\x39\xb8\xda\x1f\x21\x52\x12\x1a\x8f\x08\xa0\x8f\x94\x63\x65\xdd\
+\x82\xfe\x55\x25\x51\x29\x52\xea\xd9\xe5\x38\xad\x42\x8b\xaf\x4c\
+\xd8\xe3\xc7\x76\x41\xd5\x14\x54\x08\xe4\x92\x5e\x53\x31\x5e\xa5\
+\xa9\x6b\x7f\x93\x39\x5c\x2b\xa6\x8c\x71\xa0\x5f\xd5\xd5\x9b\x03\
+\xad\x51\x7d\x9b\xa9\x43\xf4\xd0\x43\x0f\x3d\xf4\xd0\x03\x4b\x84\
+\x7f\x01\x48\xbf\xac\xda\x5a\x15\x50\x6a\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x58\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\x62\x00\x00\x01\x62\
+\x01\x5f\x27\xd0\x53\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x03\xd5\x49\x44\
+\x41\x54\x78\x9c\xed\x9b\xb9\x6b\x54\x41\x1c\xc7\x3f\x6b\x4e\x50\
+\xf1\x8c\x8a\xa0\x85\x47\xe1\x5d\x04\xbc\x41\xbc\x0a\xc1\x22\x9e\
+\x08\x16\xb6\xda\x89\x16\x4a\x54\xec\x04\x2b\x8b\xf8\x07\xa8\x8d\
+\x22\x58\x59\x6b\x3c\xf1\xac\x34\xc1\x08\x82\xa2\x28\x01\x35\xa8\
+\xf1\x48\x42\x34\x16\xbf\x59\x77\x78\xc9\xce\x7b\x33\xfb\x66\xf6\
+\x2d\xbe\x2f\x0c\x33\xbb\xfb\xbb\x66\xf6\x77\xbc\x79\xef\x0d\x84\
+\xc1\x02\xe0\x22\xd0\x0b\x8c\xc4\xb4\x5e\xe0\x02\x30\x2f\x90\x6d\
+\xde\xb1\x1a\xf8\x42\xfc\xc4\xa3\xed\x0b\xb0\xca\xb7\x71\x05\xcf\
+\xf2\x9b\x81\x97\xc0\x5c\x64\x52\xd7\x81\x17\x31\x3c\x8b\x81\xed\
+\x88\x6d\x6f\x80\x45\xc0\x80\x3f\x13\xfd\x62\x37\xa5\x7f\xf4\x88\
+\x05\xdf\x51\x8d\x6f\xa7\x07\xbb\x82\xe1\x34\x32\x89\xdf\xc0\x78\
+\x0b\xbe\x09\x8a\x67\x44\xc9\xf0\x86\x71\x3e\x85\x23\x21\x00\x30\
+\x04\xfc\xb0\xe0\xfb\xae\x78\x74\x19\x5e\x50\x9f\x82\x8c\xe9\xc0\
+\x01\x24\x76\x27\x46\x7e\x5b\xa6\xfa\x06\xe0\xaa\xa5\xdc\x06\xd5\
+\xb7\x01\xf3\x23\xbf\xf5\x03\xdd\xc0\x25\xe0\x93\xa5\xdc\x54\xb1\
+\x57\x19\x63\x9b\xe1\xd3\x6a\xfd\x48\x9e\x71\x46\x25\x55\x60\x03\
+\x70\x03\xa8\x53\x9f\xdf\x02\x1f\x2b\x31\xc6\x02\x2d\x48\x65\x01\
+\xc9\x15\x1b\x81\xbb\x81\x74\xff\xc3\x13\xe4\x5f\xf8\x0a\x6c\x0e\
+\xad\x1c\xd8\x02\x7c\x53\x36\x3c\x0e\xad\xbc\x95\x92\x1b\x9e\x0a\
+\xad\x5c\xc3\x49\xcd\x8e\xd6\x90\x8a\xcf\x53\x2a\x6f\x73\x42\x2a\
+\x8e\x60\x36\x30\xac\x6c\xe9\x70\x11\xe0\x92\x03\xc6\x23\xf1\x3e\
+\x15\xe8\x04\x76\xb9\x28\x4e\x11\xd7\x90\x1c\xd0\x87\xe4\x05\x9b\
+\x72\x6b\x85\xb5\xc0\x03\xa4\x3e\x57\x2b\xeb\xc7\xb5\x21\x65\xe3\
+\x9a\xb4\x27\xbf\x02\x18\xcc\xc0\x04\x93\xb6\x41\x60\x79\x92\x89\
+\x25\xbd\x10\x6a\x07\x1a\x91\x4d\xc9\x39\x24\xf3\x67\x11\x93\x81\
+\xc3\xc8\xd5\x63\x3b\xb0\x2f\x2d\xc1\x3d\xc8\xca\x5e\x4e\x4b\xa0\
+\x47\x5c\x41\x6c\x8d\xdb\x75\x02\xc9\xf7\x02\x4d\xaa\xaf\x85\x6d\
+\xe9\x2f\xd5\x27\xda\x43\xf8\xde\x0c\x65\x1e\xff\xfd\x02\x24\xc5\
+\x6b\xaa\x9f\xd9\x6d\xdb\xeb\x24\x13\x4b\xea\x01\x7d\x09\xe9\xb2\
+\x84\xcf\x49\x88\x92\x5e\x09\x2e\x42\x4a\xca\x26\x60\xbd\xfa\xee\
+\xac\x83\x51\x3e\x71\x4c\xf5\xf7\x80\x9b\x48\xc5\xea\x49\x5b\xc9\
+\x09\x4a\x2e\xd6\x10\x43\x1b\x12\x8d\x94\xec\x6a\xb7\x61\xb4\x4d\
+\x82\x7a\x19\xf4\x7a\xab\xca\x12\xba\x2d\x56\xa5\x3a\x5f\x00\x4b\
+\x45\x83\xda\xb8\xa9\x2c\x55\x78\xe8\xb6\x0c\x96\xa5\x1a\x03\xb9\
+\x07\x58\x2a\xca\x17\x40\x1b\x97\x0b\x81\x02\xf2\x34\x67\x75\x8c\
+\xac\x02\xb0\x03\x58\x12\x43\x57\x0f\xec\x07\x96\x1a\x68\x74\x5b\
+\xbc\xee\x57\xb6\x52\x2a\x37\xeb\xca\xd0\x6c\x53\xbf\x0f\x00\x93\
+\x0c\xb2\xda\x14\x5d\x1f\xe6\xeb\x91\x43\x8a\xae\xd7\x40\xb3\x5e\
+\xb3\x6b\x8b\x81\x6e\x14\x7c\x84\xc0\x4c\xd5\x37\x01\x53\x0c\xb2\
+\x5e\x21\x4f\x80\xbb\x63\x74\xce\x8c\xf4\x63\xc1\x39\x04\x6c\x9f\
+\x0c\xa5\x99\x03\xba\x90\xfb\xfb\xc3\x15\xca\x89\xda\x52\x53\x65\
+\x30\x8d\xc9\x43\x5e\x06\x6b\xb3\x0c\xce\x40\x1e\x98\x1e\xaf\x50\
+\x4e\xd4\x96\x9a\x59\x80\xdd\xc0\x1e\xe0\x0c\x76\xef\x0e\x8c\x85\
+\x9a\xcc\x01\x8d\xaa\x2f\x50\xf9\xce\x32\xcf\x01\xda\xd8\xbb\x07\
+\x8c\xa8\x71\x16\x37\x43\xc5\xa7\x43\x89\xe1\x72\x53\xb4\xe8\x62\
+\x59\xf4\x00\xeb\xcb\x60\x97\x05\x28\x2a\xc9\xa2\x07\x04\x5d\x80\
+\xff\xd6\x03\xb2\x1c\x02\x56\x15\x00\x72\x0f\xc8\x73\x40\x1e\x02\
+\x0e\xca\xf2\x10\x88\x28\xcd\x02\xf2\x1c\xa0\xfa\x3c\x07\xd8\x32\
+\xe6\x21\xe0\xa0\x2c\x0f\x01\xd5\x97\xf3\x80\x91\x32\xe3\x4a\xe9\
+\x4c\x34\xce\x21\xe0\x72\x5e\x20\x2e\x04\x1e\x21\x2f\x31\xbf\x05\
+\x3e\x18\xe4\xdc\x07\x7e\x02\xcf\x31\xbf\x76\x77\x07\x99\xd8\x2d\
+\x03\x8d\x73\x08\xf8\x58\x80\x1e\x4a\xb7\xbb\xff\x18\xe4\x3c\x05\
+\xa6\x11\xff\xaf\x75\x22\xcf\x17\x7e\x19\x68\xaa\x12\x02\x75\x94\
+\x5f\xc0\x21\xcc\x93\x2f\x62\x00\xb3\x6b\x17\x61\x9a\x7c\x03\xa5\
+\x33\x0b\x41\xab\x00\x64\xa3\x12\x38\xdf\x0e\x83\xca\x3c\x20\xaa\
+\xbc\x5a\xd0\x6d\x08\xe2\x01\xdf\xb4\x71\x8b\x03\x7f\xda\xd0\x6d\
+\xe8\xb7\x65\x76\x59\x80\x2e\x6d\x7c\xd0\x81\x3f\x6d\x1c\xd2\xc6\
+\xcf\x6c\x99\x5d\x0e\x4c\x14\x80\x87\xc0\x4a\xf5\xb9\x13\xb8\x4d\
+\xf8\xf7\x88\x9b\x91\x83\x5b\x1b\xd5\xe7\x07\xc8\x99\x86\x20\x58\
+\x88\xd4\xf8\x6a\xbf\x0d\x5a\x6c\xef\x19\x7d\xb6\xd0\x3b\x66\x21\
+\x67\x87\xde\x21\x25\x2f\xf4\xa4\x7f\x23\x17\x5b\x1d\x98\xdf\x1d\
+\x30\xe2\x2f\xb9\x7a\xce\xc1\x31\xd7\x54\xed\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x84\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x36\x49\x44\x41\x54\x78\x9c\xed\
+\xd2\xc1\x09\x00\x20\x0c\x03\xc0\xcc\xd8\xfd\x27\xf1\x53\xdf\xfe\
+\x2d\x82\xdc\x41\x06\x08\x49\x02\x00\x00\x00\x00\xa7\x55\xd5\x2f\
+\x93\x5b\x14\x29\x8b\xf4\xc8\xb5\x00\x00\x00\x00\xc8\x27\x36\x82\
+\xcb\x4e\x90\x0a\x06\xf3\x5f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x01\xf2\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa4\x49\x44\x41\x54\x78\x9c\xed\
+\x97\xc1\x4a\x02\x51\x14\x86\xaf\x9b\x29\x7c\x03\x37\x2d\x6a\x25\
+\x58\x9b\x59\xa8\xb8\x69\x17\x04\xd1\x13\xe4\xb6\x55\xa0\xf7\x0e\
+\xed\xa2\x85\x4f\x10\x44\x58\x22\xb9\x8d\x48\xcd\x8d\x84\xa9\x23\
+\x8e\xdb\xa2\x16\x41\x84\x92\x3a\x13\x6d\xb4\xe6\x05\x3a\x71\x4d\
+\x6d\x30\xb3\x4d\x70\xef\xc0\xf9\xe0\xec\xbf\xff\x3f\x73\x86\x19\
+\x42\x10\x04\x41\xfe\x93\x6e\x3c\x1e\xb2\x18\xeb\x58\x8c\xdd\xbf\
+\xc6\x62\x8b\xc4\x4d\xbc\x30\xa6\x5a\x94\xf6\x2d\xc6\x60\x38\x9d\
+\xb6\xa6\x2d\x11\x37\x90\x2d\x19\xe1\xca\x59\xee\xca\xd2\xb4\x91\
+\xfc\x60\x4c\x4a\xdb\xd2\x6f\x22\x5b\x32\xc2\xb9\x8a\x61\xe7\x2b\
+\x0d\x28\x9f\xe7\x74\x53\xd3\x3e\x9c\x21\xa4\xde\x44\xd6\x21\x3f\
+\x1a\x1e\x62\x72\x13\x16\xa5\x77\x44\x36\xe0\x88\xa8\xbd\x4c\xe0\
+\x36\x5f\xae\xf7\x9c\x01\xf8\x5c\x5f\x14\x1a\xce\x10\x26\xa5\xcf\
+\x44\x36\x79\x48\x92\x3e\x24\x09\xf4\x33\xfe\xe6\xac\x10\x26\x63\
+\x36\x7f\x3b\x11\x19\xe5\x61\x38\xbd\x53\x7f\x6b\x5a\x08\x7e\xd8\
+\xd2\xcb\xc3\x70\x7e\x6e\xc2\x78\xbf\xac\xd6\xdd\x21\x0f\x13\x21\
+\xf8\x61\xcb\x26\x1f\x82\x24\xb1\x67\xc9\xc3\xf8\x71\x0a\xdc\x14\
+\x74\x3d\x4c\xdc\xd4\x3c\x7c\x8f\xcd\xc3\x12\x59\x40\x79\x51\x60\
+\xf3\xa2\xc0\xe6\x45\x81\xcd\x8b\x02\x9b\x17\x05\x36\x2f\x0a\xc0\
+\x0f\x33\x41\x00\x36\x2f\x08\xc0\xe6\x05\x01\x45\xaf\x0f\xd2\x9e\
+\x47\x57\xfe\x06\x72\xa0\x3a\xbf\x05\xba\x62\x42\xda\xd3\x75\x9d\
+\x3c\x07\x6a\x4a\x1a\x6a\x73\xf0\x47\x08\x39\xe5\x39\xa0\x2b\xad\
+\x41\x80\xdf\x43\xc8\x2b\x7f\xb8\xb7\x12\xd4\x4f\x16\xbe\xe4\xa7\
+\x87\x90\x57\x9e\x93\xd0\xd4\x54\x64\x7d\x03\xaa\xa9\xa9\x21\x1e\
+\xa4\x96\xe7\xec\x6c\x47\x9e\x82\x6b\x9b\x30\x0e\xa1\x2b\xcd\xc1\
+\x4d\xf0\xc3\x2e\x7a\x7d\x44\x76\xa2\xd1\xd5\x37\x1e\x22\xb1\xab\
+\x1e\x1f\xec\x2f\xcb\xdd\x36\x82\x20\xc4\xd5\x7c\x02\xf5\xa6\x4d\
+\x16\x1b\xce\x95\xf7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6f\xa6\x53\
+\x00\x69\
+\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x0b\
+\x0c\x6a\x2c\x47\
+\x00\x72\
+\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x08\x9b\x8d\x07\
+\x00\x66\
+\x00\x6c\x00\x61\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x00\xbd\xd0\x67\
+\x00\x72\
+\x00\x75\x00\x6e\x00\x6e\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\x63\x58\x07\
+\x00\x73\
+\x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x00\x27\x84\xc7\
+\x00\x62\
+\x00\x75\x00\x69\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0c\xad\x0f\x07\
+\x00\x64\
+\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0b\x85\x83\x07\
+\x00\x63\
+\x00\x6c\x00\x65\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\x7c\x5a\x07\
+\x00\x63\
+\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x08\xc8\x58\x67\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x07\xa7\x57\x87\
+\x00\x61\
+\x00\x64\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x0c\x58\x59\x27\
+\x00\x6d\
+\x00\x65\x00\x6e\x00\x75\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x02\x8c\x59\xa7\
+\x00\x70\
+\x00\x6c\x00\x61\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x09\x65\x83\xe7\
+\x00\x65\
+\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x09\x16\x7a\x87\
+\x00\x62\
+\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0b\x81\x83\x07\
+\x00\x63\
+\x00\x6c\x00\x65\x00\x61\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x06\xcb\x4f\xc7\
+\x00\x72\
+\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x0b\x07\x5a\x27\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct_v1 = 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\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x03\
+\x00\x00\x00\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x07\x7c\
+\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x77\
+\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x19\x9e\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x31\x73\
+\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x23\
+\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x05\xff\
+\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xe5\
+\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9c\
+\x00\x00\x01\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x29\
+\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x31\xfb\
+\x00\x00\x00\x60\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf1\
+\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x17\
+\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1b\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xd6\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x16\x2d\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x03\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\
+\x00\x00\x01\x89\xb2\xaf\x64\x54\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x07\x7c\
+\x00\x00\x01\x89\x07\x1b\x83\xd3\
+\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x77\
+\x00\x00\x01\x89\xb2\xba\x6c\xf8\
+\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x19\x9e\
+\x00\x00\x01\x89\xb5\x86\xae\xc6\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x31\x73\
+\x00\x00\x01\x89\xb2\xbc\xc7\x7c\
+\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x23\
+\x00\x00\x01\x89\xb2\xbd\xaf\x78\
+\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x05\xff\
+\x00\x00\x01\x89\xb5\x97\x88\x3e\
+\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xe5\
+\x00\x00\x01\x89\xb5\x78\xce\x2a\
+\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9c\
+\x00\x00\x01\x89\xb5\x83\x29\x62\
+\x00\x00\x01\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x29\
+\x00\x00\x01\x89\x07\x1b\x83\xd3\
+\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x31\xfb\
+\x00\x00\x01\x89\xb5\x93\x68\x76\
+\x00\x00\x00\x60\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf1\
+\x00\x00\x01\x89\xb2\xba\xff\x50\
+\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x17\
+\x00\x00\x01\x89\xb2\xae\x05\xec\
+\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1b\
+\x00\x00\x01\x89\xb5\x7e\x05\x96\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xd6\
+\x00\x00\x01\x89\xb5\x79\xb5\x92\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x89\xb5\x79\x6d\x76\
+\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x16\x2d\
+\x00\x00\x01\x89\xb5\x88\x1a\xae\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+ QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/sw/supervision/python/generated/ui_app_settings.py b/sw/supervision/python/generated/ui_app_settings.py
index 4e093aa902..1504ed18c4 100644
--- a/sw/supervision/python/generated/ui_app_settings.py
+++ b/sw/supervision/python/generated/ui_app_settings.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_app_settings.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -50,8 +51,8 @@ class Ui_AppSettingsDialog(object):
self.gridLayout.addWidget(self.keep_build_programs_checkbox, 3, 1, 1, 1)
self.retranslateUi(AppSettingsDialog)
- self.buttonBox.accepted.connect(AppSettingsDialog.accept)
- self.buttonBox.rejected.connect(AppSettingsDialog.reject)
+ self.buttonBox.accepted.connect(AppSettingsDialog.accept) # type: ignore
+ self.buttonBox.rejected.connect(AppSettingsDialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(AppSettingsDialog)
def retranslateUi(self, AppSettingsDialog):
diff --git a/sw/supervision/python/generated/ui_build.py b/sw/supervision/python/generated/ui_build.py
index 50a0ab715f..6db845e2ff 100644
--- a/sw/supervision/python/generated/ui_build.py
+++ b/sw/supervision/python/generated/ui_build.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_build.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -13,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Build(object):
def setupUi(self, Build):
Build.setObjectName("Build")
- Build.resize(437, 87)
+ Build.resize(464, 87)
self.horizontalLayout = QtWidgets.QHBoxLayout(Build)
self.horizontalLayout.setObjectName("horizontalLayout")
self.groupBox = QtWidgets.QGroupBox(Build)
@@ -34,13 +35,15 @@ class Ui_Build(object):
self.target_combo.setObjectName("target_combo")
self.horizontalLayout_2.addWidget(self.target_combo)
self.clean_button = QtWidgets.QToolButton(self.groupBox)
- icon = QtGui.QIcon.fromTheme("edit-clear")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/clean.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.clean_button.setIcon(icon)
self.clean_button.setObjectName("clean_button")
self.horizontalLayout_2.addWidget(self.clean_button)
self.build_button = QtWidgets.QToolButton(self.groupBox)
- icon = QtGui.QIcon.fromTheme("system-run")
- self.build_button.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/icons/build.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.build_button.setIcon(icon1)
self.build_button.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
self.build_button.setObjectName("build_button")
self.horizontalLayout_2.addWidget(self.build_button)
@@ -70,8 +73,9 @@ class Ui_Build(object):
self.device_combo.setObjectName("device_combo")
self.horizontalLayout_3.addWidget(self.device_combo)
self.flash_button = QtWidgets.QToolButton(self.groupBox_2)
- icon = QtGui.QIcon.fromTheme("emblem-downloads")
- self.flash_button.setIcon(icon)
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(":/icons/icons/flash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.flash_button.setIcon(icon2)
self.flash_button.setObjectName("flash_button")
self.horizontalLayout_3.addWidget(self.flash_button)
self.horizontalLayout.addWidget(self.groupBox_2)
@@ -86,7 +90,7 @@ class Ui_Build(object):
self.label_14.setText(_translate("Build", "Target"))
self.clean_button.setToolTip(_translate("Build", "Clean"))
self.clean_button.setText(_translate("Build", "..."))
- self.clean_button.setShortcut(_translate("Build", "Ctrl+C"))
+ self.clean_button.setShortcut(_translate("Build", "Ctrl+Shift+B"))
self.build_button.setToolTip(_translate("Build", "Build"))
self.build_button.setText(_translate("Build", "..."))
self.build_button.setShortcut(_translate("Build", "Ctrl+B"))
@@ -96,3 +100,4 @@ class Ui_Build(object):
self.flash_button.setToolTip(_translate("Build", "Upload"))
self.flash_button.setText(_translate("Build", "Flash"))
self.flash_button.setShortcut(_translate("Build", "Ctrl+U"))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_conf_header.py b/sw/supervision/python/generated/ui_conf_header.py
index 3c3a25139d..f4ce236aa8 100644
--- a/sw/supervision/python/generated/ui_conf_header.py
+++ b/sw/supervision/python/generated/ui_conf_header.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_conf_header.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -37,18 +38,21 @@ class Ui_ConfHeader(object):
self.menu_button = QtWidgets.QToolButton(ConfHeader)
self.menu_button.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.menu_button.setText("")
- icon = QtGui.QIcon.fromTheme("format-justify-fill")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/menu.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.menu_button.setIcon(icon)
self.menu_button.setObjectName("menu_button")
self.horizontalLayout.addWidget(self.menu_button)
self.refresh_button = QtWidgets.QToolButton(ConfHeader)
- icon = QtGui.QIcon.fromTheme("view-refresh")
- self.refresh_button.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/icons/refresh.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.refresh_button.setIcon(icon1)
self.refresh_button.setObjectName("refresh_button")
self.horizontalLayout.addWidget(self.refresh_button)
self.save_button = QtWidgets.QToolButton(ConfHeader)
- icon = QtGui.QIcon.fromTheme("document-save")
- self.save_button.setIcon(icon)
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(":/icons/icons/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.save_button.setIcon(icon2)
self.save_button.setObjectName("save_button")
self.horizontalLayout.addWidget(self.save_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@@ -64,20 +68,23 @@ class Ui_ConfHeader(object):
self.new_ac_action.setIcon(icon)
self.new_ac_action.setObjectName("new_ac_action")
self.remove_ac_action = QtWidgets.QAction(ConfHeader)
- icon = QtGui.QIcon.fromTheme("edit-delete")
- self.remove_ac_action.setIcon(icon)
+ icon3 = QtGui.QIcon()
+ icon3.addPixmap(QtGui.QPixmap(":/icons/icons/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.remove_ac_action.setIcon(icon3)
self.remove_ac_action.setObjectName("remove_ac_action")
self.duplicate_action = QtWidgets.QAction(ConfHeader)
- icon = QtGui.QIcon.fromTheme("edit-copy")
- self.duplicate_action.setIcon(icon)
+ icon4 = QtGui.QIcon()
+ icon4.addPixmap(QtGui.QPixmap(":/icons/icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.duplicate_action.setIcon(icon4)
self.duplicate_action.setObjectName("duplicate_action")
self.rename_action = QtWidgets.QAction(ConfHeader)
- icon = QtGui.QIcon.fromTheme("format-text-italic")
- self.rename_action.setIcon(icon)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(":/icons/icons/edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.rename_action.setIcon(icon5)
self.rename_action.setObjectName("rename_action")
self.retranslateUi(ConfHeader)
- self.menu_button.clicked.connect(self.menu_button.showMenu)
+ self.menu_button.clicked.connect(self.menu_button.showMenu) # type: ignore
QtCore.QMetaObject.connectSlotsByName(ConfHeader)
def retranslateUi(self, ConfHeader):
@@ -94,3 +101,4 @@ class Ui_ConfHeader(object):
self.remove_ac_action.setText(_translate("ConfHeader", "Remove"))
self.duplicate_action.setText(_translate("ConfHeader", "Duplicate"))
self.rename_action.setText(_translate("ConfHeader", "Rename"))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_conf_item.py b/sw/supervision/python/generated/ui_conf_item.py
index 17781175d6..6ca505e19a 100644
--- a/sw/supervision/python/generated/ui_conf_item.py
+++ b/sw/supervision/python/generated/ui_conf_item.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_conf_item.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/generated/ui_conf_settings.py b/sw/supervision/python/generated/ui_conf_settings.py
index 228450bab4..1a475a2a38 100644
--- a/sw/supervision/python/generated/ui_conf_settings.py
+++ b/sw/supervision/python/generated/ui_conf_settings.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_conf_settings.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -23,13 +24,15 @@ class Ui_SettingsConf(object):
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.add_setting_button = QtWidgets.QToolButton(SettingsConf)
- icon = QtGui.QIcon.fromTheme("list-add")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.add_setting_button.setIcon(icon)
self.add_setting_button.setObjectName("add_setting_button")
self.horizontalLayout.addWidget(self.add_setting_button)
self.remove_setting_button = QtWidgets.QToolButton(SettingsConf)
- icon = QtGui.QIcon.fromTheme("list-remove")
- self.remove_setting_button.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.remove_setting_button.setIcon(icon1)
self.remove_setting_button.setObjectName("remove_setting_button")
self.horizontalLayout.addWidget(self.remove_setting_button)
self.verticalLayout.addLayout(self.horizontalLayout)
@@ -46,3 +49,4 @@ class Ui_SettingsConf(object):
self.label.setText(_translate("SettingsConf", "Settings"))
self.add_setting_button.setText(_translate("SettingsConf", "..."))
self.remove_setting_button.setText(_translate("SettingsConf", "..."))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_configuration_panel.py b/sw/supervision/python/generated/ui_configuration_panel.py
index 93e4b1f47b..db83412cce 100644
--- a/sw/supervision/python/generated/ui_configuration_panel.py
+++ b/sw/supervision/python/generated/ui_configuration_panel.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_configuration_panel.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/generated/ui_console.py b/sw/supervision/python/generated/ui_console.py
index 8dcd04f903..70fdf64c14 100644
--- a/sw/supervision/python/generated/ui_console.py
+++ b/sw/supervision/python/generated/ui_console.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_console.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -43,7 +44,7 @@ class Ui_Console(object):
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.programs_widget = QtWidgets.QWidget()
- self.programs_widget.setGeometry(QtCore.QRect(0, 0, 382, 524))
+ self.programs_widget.setGeometry(QtCore.QRect(0, 0, 180, 525))
self.programs_widget.setObjectName("programs_widget")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.programs_widget)
self.verticalLayout_4.setObjectName("verticalLayout_4")
@@ -78,7 +79,8 @@ class Ui_Console(object):
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem1)
self.clear_button = QtWidgets.QPushButton(Console)
- icon = QtGui.QIcon.fromTheme("edit-clear")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/clear.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.clear_button.setIcon(icon)
self.clear_button.setObjectName("clear_button")
self.horizontalLayout_2.addWidget(self.clear_button)
@@ -98,3 +100,4 @@ class Ui_Console(object):
self.label_3.setText(_translate("Console", "Log level:"))
self.log_level_label.setText(_translate("Console", "All"))
self.clear_button.setText(_translate("Console", "Clear console"))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_doc_viewer.py b/sw/supervision/python/generated/ui_doc_viewer.py
index 28301de964..ca65d062fc 100644
--- a/sw/supervision/python/generated/ui_doc_viewer.py
+++ b/sw/supervision/python/generated/ui_doc_viewer.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_doc_viewer.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -106,7 +107,8 @@ class Ui_DocPanel(object):
self.urlLineEdit.setObjectName("urlLineEdit")
self.horizontalLayout.addWidget(self.urlLineEdit)
self.open_browser_button = QtWidgets.QToolButton(self.layoutWidget3)
- icon = QtGui.QIcon.fromTheme("applications-internet")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/browser.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.open_browser_button.setIcon(icon)
self.open_browser_button.setObjectName("open_browser_button")
self.horizontalLayout.addWidget(self.open_browser_button)
@@ -140,3 +142,4 @@ class Ui_DocPanel(object):
self.doc_source_combo.setItemText(0, _translate("DocPanel", "Internet"))
self.doc_source_combo.setItemText(1, _translate("DocPanel", "Local"))
from PyQt5 import QtWebKitWidgets
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_new_ac_dialog.py b/sw/supervision/python/generated/ui_new_ac_dialog.py
index 190f0d1e1a..255a36be36 100644
--- a/sw/supervision/python/generated/ui_new_ac_dialog.py
+++ b/sw/supervision/python/generated/ui_new_ac_dialog.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_new_ac_dialog.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/generated/ui_operation_panel.py b/sw/supervision/python/generated/ui_operation_panel.py
index 461963e47b..f6fcbbaf3b 100644
--- a/sw/supervision/python/generated/ui_operation_panel.py
+++ b/sw/supervision/python/generated/ui_operation_panel.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_operation_panel.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/generated/ui_program.py b/sw/supervision/python/generated/ui_program.py
index dfb3f4c1eb..3962096c9c 100644
--- a/sw/supervision/python/generated/ui_program.py
+++ b/sw/supervision/python/generated/ui_program.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_program.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -13,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Program(object):
def setupUi(self, Program):
Program.setObjectName("Program")
- Program.resize(374, 25)
+ Program.resize(374, 32)
self.horizontalLayout = QtWidgets.QHBoxLayout(Program)
self.horizontalLayout.setContentsMargins(-1, 0, -1, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
@@ -29,13 +30,15 @@ class Ui_Program(object):
self.line.setObjectName("line")
self.horizontalLayout.addWidget(self.line)
self.run_button = QtWidgets.QToolButton(Program)
- icon = QtGui.QIcon.fromTheme("media-playback-stop")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.run_button.setIcon(icon)
self.run_button.setObjectName("run_button")
self.horizontalLayout.addWidget(self.run_button)
self.remove_button = QtWidgets.QToolButton(Program)
- icon = QtGui.QIcon.fromTheme("list-remove")
- self.remove_button.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.remove_button.setIcon(icon1)
self.remove_button.setObjectName("remove_button")
self.horizontalLayout.addWidget(self.remove_button)
@@ -48,3 +51,4 @@ class Ui_Program(object):
self.icon_label.setText(_translate("Program", "..."))
self.run_button.setText(_translate("Program", "..."))
self.remove_button.setText(_translate("Program", "..."))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_session.py b/sw/supervision/python/generated/ui_session.py
index f238ef1d43..04cef86dc7 100644
--- a/sw/supervision/python/generated/ui_session.py
+++ b/sw/supervision/python/generated/ui_session.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_session.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.6
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -16,25 +17,38 @@ class Ui_Session(object):
Session.resize(400, 300)
self.verticalLayout = QtWidgets.QVBoxLayout(Session)
self.verticalLayout.setObjectName("verticalLayout")
- self.label_2 = QtWidgets.QLabel(Session)
- self.label_2.setObjectName("label_2")
- self.verticalLayout.addWidget(self.label_2)
- self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.sessions_combo = QtWidgets.QComboBox(Session)
- self.sessions_combo.setObjectName("sessions_combo")
- self.horizontalLayout_2.addWidget(self.sessions_combo)
+ self.gridLayout = QtWidgets.QGridLayout()
+ self.gridLayout.setObjectName("gridLayout")
self.start_session_button = QtWidgets.QToolButton(Session)
- icon = QtGui.QIcon.fromTheme("media-playback-start")
+ icon = QtGui.QIcon()
+ icon.addPixmap(QtGui.QPixmap(":/icons/icons/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.start_session_button.setIcon(icon)
self.start_session_button.setObjectName("start_session_button")
- self.horizontalLayout_2.addWidget(self.start_session_button)
+ self.gridLayout.addWidget(self.start_session_button, 1, 2, 1, 1)
self.menu_button = QtWidgets.QToolButton(Session)
self.menu_button.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
- icon = QtGui.QIcon.fromTheme("format-justify-fill")
- self.menu_button.setIcon(icon)
+ icon1 = QtGui.QIcon()
+ icon1.addPixmap(QtGui.QPixmap(":/icons/icons/menu.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.menu_button.setIcon(icon1)
self.menu_button.setObjectName("menu_button")
- self.horizontalLayout_2.addWidget(self.menu_button)
+ self.gridLayout.addWidget(self.menu_button, 1, 3, 1, 1)
+ self.control_panel_combo = QtWidgets.QComboBox(Session)
+ self.control_panel_combo.setObjectName("control_panel_combo")
+ self.gridLayout.addWidget(self.control_panel_combo, 1, 0, 1, 1)
+ self.label_3 = QtWidgets.QLabel(Session)
+ self.label_3.setObjectName("label_3")
+ self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
+ self.label_4 = QtWidgets.QLabel(Session)
+ self.label_4.setObjectName("label_4")
+ self.gridLayout.addWidget(self.label_4, 0, 1, 1, 1)
+ self.sessions_combo = QtWidgets.QComboBox(Session)
+ self.sessions_combo.setObjectName("sessions_combo")
+ self.gridLayout.addWidget(self.sessions_combo, 1, 1, 1, 1)
+ self.gridLayout.setColumnStretch(0, 2)
+ self.gridLayout.setColumnStretch(1, 3)
+ self.verticalLayout.addLayout(self.gridLayout)
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.favorite_tools = QtWidgets.QWidget(Session)
self.favorite_tools.setObjectName("favorite_tools")
@@ -47,8 +61,9 @@ class Ui_Session(object):
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.add_tool_button = QtWidgets.QToolButton(Session)
- icon = QtGui.QIcon.fromTheme("list-add")
- self.add_tool_button.setIcon(icon)
+ icon2 = QtGui.QIcon()
+ icon2.addPixmap(QtGui.QPixmap(":/icons/icons/add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.add_tool_button.setIcon(icon2)
self.add_tool_button.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.add_tool_button.setAutoRaise(False)
self.add_tool_button.setArrowType(QtCore.Qt.NoArrow)
@@ -62,18 +77,19 @@ class Ui_Session(object):
self.line.setObjectName("line")
self.horizontalLayout.addWidget(self.line)
self.startall_button = QtWidgets.QToolButton(Session)
- icon = QtGui.QIcon.fromTheme("media-playback-start")
self.startall_button.setIcon(icon)
self.startall_button.setObjectName("startall_button")
self.horizontalLayout.addWidget(self.startall_button)
self.stopall_button = QtWidgets.QToolButton(Session)
- icon = QtGui.QIcon.fromTheme("media-playback-stop")
- self.stopall_button.setIcon(icon)
+ icon3 = QtGui.QIcon()
+ icon3.addPixmap(QtGui.QPixmap(":/icons/icons/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.stopall_button.setIcon(icon3)
self.stopall_button.setObjectName("stopall_button")
self.horizontalLayout.addWidget(self.stopall_button)
self.removeall_button = QtWidgets.QToolButton(Session)
- icon = QtGui.QIcon.fromTheme("list-remove")
- self.removeall_button.setIcon(icon)
+ icon4 = QtGui.QIcon()
+ icon4.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.removeall_button.setIcon(icon4)
self.removeall_button.setObjectName("removeall_button")
self.horizontalLayout.addWidget(self.removeall_button)
self.verticalLayout.addLayout(self.horizontalLayout)
@@ -81,7 +97,7 @@ class Ui_Session(object):
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.programs_widget = QtWidgets.QWidget()
- self.programs_widget.setGeometry(QtCore.QRect(0, 0, 380, 176))
+ self.programs_widget.setGeometry(QtCore.QRect(0, 0, 384, 154))
self.programs_widget.setObjectName("programs_widget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.programs_widget)
self.verticalLayout_2.setObjectName("verticalLayout_2")
@@ -90,33 +106,37 @@ class Ui_Session(object):
self.scrollArea.setWidget(self.programs_widget)
self.verticalLayout.addWidget(self.scrollArea)
self.save_session_action = QtWidgets.QAction(Session)
- icon = QtGui.QIcon.fromTheme("document-save")
- self.save_session_action.setIcon(icon)
+ icon5 = QtGui.QIcon()
+ icon5.addPixmap(QtGui.QPixmap(":/icons/icons/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.save_session_action.setIcon(icon5)
self.save_session_action.setObjectName("save_session_action")
self.save_as_action = QtWidgets.QAction(Session)
icon = QtGui.QIcon.fromTheme("edit-copy")
self.save_as_action.setIcon(icon)
self.save_as_action.setObjectName("save_as_action")
self.rename_session_action = QtWidgets.QAction(Session)
- icon = QtGui.QIcon.fromTheme("format-text-italic")
- self.rename_session_action.setIcon(icon)
+ icon6 = QtGui.QIcon()
+ icon6.addPixmap(QtGui.QPixmap(":/icons/icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.rename_session_action.setIcon(icon6)
self.rename_session_action.setObjectName("rename_session_action")
self.remove_session_action = QtWidgets.QAction(Session)
- icon = QtGui.QIcon.fromTheme("edit-delete")
- self.remove_session_action.setIcon(icon)
+ icon7 = QtGui.QIcon()
+ icon7.addPixmap(QtGui.QPixmap(":/icons/icons/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+ self.remove_session_action.setIcon(icon7)
self.remove_session_action.setObjectName("remove_session_action")
self.retranslateUi(Session)
- self.menu_button.clicked.connect(self.menu_button.showMenu)
+ self.menu_button.clicked.connect(self.menu_button.showMenu) # type: ignore
QtCore.QMetaObject.connectSlotsByName(Session)
def retranslateUi(self, Session):
_translate = QtCore.QCoreApplication.translate
Session.setWindowTitle(_translate("Session", "Form"))
- self.label_2.setText(_translate("Session", "Session"))
self.start_session_button.setToolTip(_translate("Session", "Start Session"))
self.start_session_button.setText(_translate("Session", "..."))
self.menu_button.setText(_translate("Session", "..."))
+ self.label_3.setText(_translate("Session", "control panel"))
+ self.label_4.setText(_translate("Session", "Session"))
self.label.setText(_translate("Session", "Programs"))
self.add_tool_button.setToolTip(_translate("Session", "Add Tool"))
self.add_tool_button.setText(_translate("Session", "Add tool"))
@@ -131,3 +151,4 @@ class Ui_Session(object):
self.save_as_action.setToolTip(_translate("Session", "Save session as..."))
self.rename_session_action.setText(_translate("Session", "Rename session"))
self.remove_session_action.setText(_translate("Session", "Remove session"))
+from generated import resources_rc
diff --git a/sw/supervision/python/generated/ui_supervision_window.py b/sw/supervision/python/generated/ui_supervision_window.py
index 1bc764e962..c2809b0328 100644
--- a/sw/supervision/python/generated/ui_supervision_window.py
+++ b/sw/supervision/python/generated/ui_supervision_window.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_supervision_window.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/generated/ui_tools_list.py b/sw/supervision/python/generated/ui_tools_list.py
index 2ffe6c92f0..c3f977a03f 100644
--- a/sw/supervision/python/generated/ui_tools_list.py
+++ b/sw/supervision/python/generated/ui_tools_list.py
@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file 'ui/ui_tools_list.ui'
#
-# Created by: PyQt5 UI code generator 5.14.1
+# Created by: PyQt5 UI code generator 5.15.9
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
diff --git a/sw/supervision/python/header_widget.py b/sw/supervision/python/header_widget.py
index ffb43c9685..640c72f70a 100644
--- a/sw/supervision/python/header_widget.py
+++ b/sw/supervision/python/header_widget.py
@@ -7,8 +7,6 @@ from conf import Aircraft, Conf
import utils
import os
import sys
-lib_path = os.path.normpath(os.path.join(utils.PAPARAZZI_SRC, 'sw', 'lib', 'python'))
-sys.path.append(lib_path)
import paparazzi
from typing import List
diff --git a/sw/supervision/python/paparazzicenter.py b/sw/supervision/python/paparazzicenter.py
index 025c5cd737..22efd8d0e3 100755
--- a/sw/supervision/python/paparazzicenter.py
+++ b/sw/supervision/python/paparazzicenter.py
@@ -3,11 +3,16 @@
# released under GNU GPLv2 or later. See COPYING file.
import os
import sys
+import utils
+
+lib_path = os.path.normpath(os.path.join(utils.PAPARAZZI_SRC, 'sw', 'lib', 'python'))
+sys.path.append(lib_path)
+
+
import signal
import copy
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
-import utils
from lxml import etree as ET
from conf import Conf, Aircraft, ConfError
from app_settings import AppSettings
@@ -15,12 +20,13 @@ from generated.ui_supervision_window import Ui_SupervisionWindow
from generated.ui_new_ac_dialog import Ui_NewACDialog
from program_widget import TabProgramsState
+
dirname = os.path.dirname(os.path.abspath(__file__))
TAB_ICONS = {TabProgramsState.IDLE: QtGui.QIcon(),
- TabProgramsState.RUNNING: QtGui.QIcon(os.path.join(dirname, "running.svg")),
- TabProgramsState.ERROR: QtGui.QIcon(os.path.join(dirname, "error.svg"))}
+ TabProgramsState.RUNNING: QtGui.QIcon(":/icons/icons/running.svg"),
+ TabProgramsState.ERROR: QtGui.QIcon(":/icons/icons/error.svg")}
class PprzCenter(QMainWindow, Ui_SupervisionWindow):
@@ -48,6 +54,7 @@ class PprzCenter(QMainWindow, Ui_SupervisionWindow):
self.header.ac_save.connect(lambda _: self.conf.save())
self.header.ac_new.connect(self.handle_new_ac)
+ self.configuration_panel.build_widget.refresh_ac.connect(self.handle_ac_edited)
self.configuration_panel.program_state_changed.connect(lambda state: self.programs_state_changed(state, 0))
self.operation_panel.session.program_state_changed.connect(lambda state: self.programs_state_changed(state, 1))
@@ -259,6 +266,7 @@ class PprzCenter(QMainWindow, Ui_SupervisionWindow):
settings.setValue("ui/window_size", self.size())
settings.setValue("ui/last_AC", self.currentAc.name)
settings.setValue("ui/last_session", self.operation_panel.session.get_current_session())
+ settings.setValue("ui/last_control_panel", self.operation_panel.session.get_current_control_panel())
def update_left_pane_width(self, pos, index):
utils.get_settings().setValue("ui/left_pane_width", pos)
diff --git a/sw/supervision/python/program_widget.py b/sw/supervision/python/program_widget.py
index 536028f461..c8af27d6e2 100644
--- a/sw/supervision/python/program_widget.py
+++ b/sw/supervision/python/program_widget.py
@@ -73,15 +73,13 @@ class ProgramWidget(QWidget, Ui_Program):
self.process.terminate()
def handle_started(self):
- icon = QIcon.fromTheme("media-playback-stop")
- self.run_button.setIcon(icon)
+ self.run_button.setIcon(QIcon(":/icons/icons/stop.png"))
self.program_lineedit.setReadOnly(True)
def handle_finished(self, exit_code: int, exit_status: QProcess.ExitStatus):
if exit_code not in (0, 15):
self.program_lineedit.setStyleSheet("background: #f56464")
- icon = QIcon.fromTheme("media-playback-start")
- self.run_button.setIcon(icon)
+ self.run_button.setIcon(QIcon(":/icons/icons/play.png"))
self.program_lineedit.setReadOnly(False)
self.finished.emit(exit_code, exit_status)
diff --git a/sw/supervision/python/programs_conf.py b/sw/supervision/python/programs_conf.py
index 390441d9b8..bdb98f9b75 100644
--- a/sw/supervision/python/programs_conf.py
+++ b/sw/supervision/python/programs_conf.py
@@ -100,7 +100,7 @@ class Tool:
return name, Tool(name, command, icon, args, favorite)
-def parse_tools() -> Dict[str, Tool]:
+def parse_tools(cp) -> Dict[str, Tool]:
tools = {}
tools_dir = os.path.join(utils.CONF_DIR, "tools")
for file in os.listdir(tools_dir):
@@ -115,7 +115,7 @@ def parse_tools() -> Dict[str, Tool]:
# programs from control_panel.xml
# override programs from conf/tools/*.xml
- control_panel = ET.parse(os.path.join(utils.CONF_DIR, "control_panel.xml"))
+ control_panel = ET.parse(os.path.join(utils.CONF_DIR, cp))
for xml_section in control_panel.getroot().findall("section"):
if xml_section.get("name") == "programs":
for xml_program in xml_section.findall("program"):
@@ -125,8 +125,8 @@ def parse_tools() -> Dict[str, Tool]:
return tools
-def parse_sessions() -> List[Session]:
- control_panel = ET.parse(os.path.join(utils.CONF_DIR, "control_panel.xml"))
+def parse_sessions(cp) -> List[Session]:
+ control_panel = ET.parse(os.path.join(utils.CONF_DIR, cp))
for xml_section in control_panel.getroot().findall("section"):
if xml_section.get("name") == "sessions":
return [Session.parse(xml_session) for xml_session in xml_section.findall("session")]
diff --git a/sw/supervision/python/session_widget.py b/sw/supervision/python/session_widget.py
index 1e311763ff..71f97d8cd3 100644
--- a/sw/supervision/python/session_widget.py
+++ b/sw/supervision/python/session_widget.py
@@ -8,7 +8,7 @@ from PyQt5.QtWidgets import *
from PyQt5 import QtCore
import utils
import lxml.etree as ET
-
+import paparazzi
from typing import List, Optional, Tuple, Dict
from program_widget import ProgramWidget, TabProgramsState
from tools_menu import ToolMenu
@@ -30,11 +30,10 @@ class SessionWidget(QWidget, Ui_Session):
self.console: ConsoleWidget = None
self.ac: Aircraft = None
self.sessions = []
- self.tools = []
+ self.tools: Dict[str, Tool] = {}
self.tools_menu = ToolMenu()
- self.sessions_combo.addItems(["Simulation", "Replay"])
- self.sessions_combo.insertSeparator(2)
self.programs_state: TabProgramsState = TabProgramsState.IDLE
+ self.control_panel_combo.currentTextChanged.connect(self.on_control_panel_changed)
self.menu_button.addAction(self.save_session_action)
self.menu_button.addAction(self.save_as_action)
self.menu_button.addAction(self.rename_session_action)
@@ -57,14 +56,31 @@ class SessionWidget(QWidget, Ui_Session):
self.ac = ac
def init(self):
- self.sessions = parse_sessions()
- self.tools = parse_tools()
+ self.update_control_panels()
+ self.on_control_panel_changed()
+
+ def on_control_panel_changed(self):
+ current_cp = self.control_panel_combo.currentText()
+ self.sessions = parse_sessions(current_cp)
+ self.tools = parse_tools(current_cp)
self.init_tools_menu()
sessions_names = [session.name for session in self.sessions]
+ self.sessions_combo.clear()
+ self.sessions_combo.addItems(["Simulation", "Replay"])
+ self.sessions_combo.insertSeparator(2)
self.sessions_combo.addItems(sessions_names)
last_session = utils.get_settings().value("ui/last_session", None, str)
- if last_session is not None:
+ if last_session is not None and last_session in sessions_names:
self.sessions_combo.setCurrentText(last_session)
+ else:
+ self.sessions_combo.setCurrentIndex(0)
+
+ def update_control_panels(self):
+ cpfs = paparazzi.get_list_of_controlpanel_files()
+ self.control_panel_combo.addItems(cpfs)
+ last_cp = utils.get_settings().value("ui/last_control_panel", None, str)
+ if last_cp is not None and last_cp in cpfs:
+ self.control_panel_combo.setCurrentText(last_cp)
def get_current_session(self) -> str:
"""
@@ -72,6 +88,9 @@ class SessionWidget(QWidget, Ui_Session):
"""
return self.sessions_combo.currentText()
+ def get_current_control_panel(self) -> str:
+ return self.control_panel_combo.currentText()
+
def start_session(self):
self.reset_programs_status()
combo_text = self.sessions_combo.currentText()
@@ -203,6 +222,7 @@ class SessionWidget(QWidget, Ui_Session):
self.reset_programs_status()
def init_tools_menu(self):
+ self.tools_menu.clear()
for t in self.tools.values():
self.tools_menu.add_tool(t)
diff --git a/sw/supervision/python/tools_menu.py b/sw/supervision/python/tools_menu.py
index 5afb50a963..532ad3a176 100644
--- a/sw/supervision/python/tools_menu.py
+++ b/sw/supervision/python/tools_menu.py
@@ -39,6 +39,11 @@ class ToolMenu(QWidget, Ui_ToolsList):
self.tools_buttons[t.name] = button
self.content_widget.layout().addWidget(button)
+ def clear(self):
+ for _name, widget in self.tools_buttons.items():
+ self.content_widget.layout().removeWidget(widget)
+ self.tools_buttons.clear()
+
def filter(self, txt: str):
for name, button in self.tools_buttons.items():
show = txt.lower() in name.lower()
diff --git a/sw/supervision/python/ui/icons/add.png b/sw/supervision/python/ui/icons/add.png
new file mode 100644
index 0000000000..11c7114daf
Binary files /dev/null and b/sw/supervision/python/ui/icons/add.png differ
diff --git a/sw/supervision/python/ui/icons/browser.png b/sw/supervision/python/ui/icons/browser.png
new file mode 100644
index 0000000000..a55780567f
Binary files /dev/null and b/sw/supervision/python/ui/icons/browser.png differ
diff --git a/sw/supervision/python/ui/icons/build.png b/sw/supervision/python/ui/icons/build.png
new file mode 100644
index 0000000000..15a20c8193
Binary files /dev/null and b/sw/supervision/python/ui/icons/build.png differ
diff --git a/sw/supervision/python/ui/icons/clean.png b/sw/supervision/python/ui/icons/clean.png
new file mode 100644
index 0000000000..4a8e1c8a1f
Binary files /dev/null and b/sw/supervision/python/ui/icons/clean.png differ
diff --git a/sw/supervision/python/ui/icons/clear.png b/sw/supervision/python/ui/icons/clear.png
new file mode 100644
index 0000000000..d037392685
Binary files /dev/null and b/sw/supervision/python/ui/icons/clear.png differ
diff --git a/sw/supervision/python/ui/icons/copy.png b/sw/supervision/python/ui/icons/copy.png
new file mode 100644
index 0000000000..58825e6b40
Binary files /dev/null and b/sw/supervision/python/ui/icons/copy.png differ
diff --git a/sw/supervision/python/ui/icons/delete.png b/sw/supervision/python/ui/icons/delete.png
new file mode 100644
index 0000000000..fa0207b751
Binary files /dev/null and b/sw/supervision/python/ui/icons/delete.png differ
diff --git a/sw/supervision/python/ui/icons/edit.png b/sw/supervision/python/ui/icons/edit.png
new file mode 100644
index 0000000000..1015eabe61
Binary files /dev/null and b/sw/supervision/python/ui/icons/edit.png differ
diff --git a/sw/supervision/python/error.svg b/sw/supervision/python/ui/icons/error.svg
similarity index 100%
rename from sw/supervision/python/error.svg
rename to sw/supervision/python/ui/icons/error.svg
diff --git a/sw/supervision/python/ui/icons/flash.png b/sw/supervision/python/ui/icons/flash.png
new file mode 100644
index 0000000000..adfbffc207
Binary files /dev/null and b/sw/supervision/python/ui/icons/flash.png differ
diff --git a/sw/supervision/python/ui/icons/menu.png b/sw/supervision/python/ui/icons/menu.png
new file mode 100644
index 0000000000..ae900f0d32
Binary files /dev/null and b/sw/supervision/python/ui/icons/menu.png differ
diff --git a/sw/supervision/python/ui/icons/play.png b/sw/supervision/python/ui/icons/play.png
new file mode 100644
index 0000000000..f6a0ed55c6
Binary files /dev/null and b/sw/supervision/python/ui/icons/play.png differ
diff --git a/sw/supervision/python/ui/icons/refresh.png b/sw/supervision/python/ui/icons/refresh.png
new file mode 100644
index 0000000000..689d8d1843
Binary files /dev/null and b/sw/supervision/python/ui/icons/refresh.png differ
diff --git a/sw/supervision/python/ui/icons/remove.png b/sw/supervision/python/ui/icons/remove.png
new file mode 100644
index 0000000000..3889e8ac34
Binary files /dev/null and b/sw/supervision/python/ui/icons/remove.png differ
diff --git a/sw/supervision/python/running.svg b/sw/supervision/python/ui/icons/running.svg
similarity index 100%
rename from sw/supervision/python/running.svg
rename to sw/supervision/python/ui/icons/running.svg
diff --git a/sw/supervision/python/ui/icons/save.png b/sw/supervision/python/ui/icons/save.png
new file mode 100644
index 0000000000..07d83e06bb
Binary files /dev/null and b/sw/supervision/python/ui/icons/save.png differ
diff --git a/sw/supervision/python/ui/icons/stop.png b/sw/supervision/python/ui/icons/stop.png
new file mode 100644
index 0000000000..4f73fe8b3b
Binary files /dev/null and b/sw/supervision/python/ui/icons/stop.png differ
diff --git a/sw/supervision/python/ui/resources.qrc b/sw/supervision/python/ui/resources.qrc
new file mode 100644
index 0000000000..63322dc627
--- /dev/null
+++ b/sw/supervision/python/ui/resources.qrc
@@ -0,0 +1,21 @@
+
+
+ icons/error.svg
+ icons/running.svg
+ icons/edit.png
+ icons/delete.png
+ icons/copy.png
+ icons/browser.png
+ icons/clear.png
+ icons/menu.png
+ icons/refresh.png
+ icons/save.png
+ icons/add.png
+ icons/remove.png
+ icons/stop.png
+ icons/play.png
+ icons/flash.png
+ icons/build.png
+ icons/clean.png
+
+
diff --git a/sw/supervision/python/ui/ui_build.ui b/sw/supervision/python/ui/ui_build.ui
index 8b88d079c0..897afbdd5b 100644
--- a/sw/supervision/python/ui/ui_build.ui
+++ b/sw/supervision/python/ui/ui_build.ui
@@ -6,7 +6,7 @@
0
0
- 437
+ 464
87
@@ -52,11 +52,11 @@
...
-
- ..
+
+ :/icons/icons/clean.png:/icons/icons/clean.png
- Ctrl+C
+ Ctrl+Shift+B
@@ -69,8 +69,8 @@
...
-
- ..
+
+ :/icons/icons/build.png:/icons/icons/build.png
Ctrl+B
@@ -130,8 +130,8 @@
Flash
-
- ..
+
+ :/icons/icons/flash.png:/icons/icons/flash.png
Ctrl+U
@@ -143,6 +143,8 @@
-
+
+
+
diff --git a/sw/supervision/python/ui/ui_conf_header.ui b/sw/supervision/python/ui/ui_conf_header.ui
index aec156bfea..41b5ce2eb4 100644
--- a/sw/supervision/python/ui/ui_conf_header.ui
+++ b/sw/supervision/python/ui/ui_conf_header.ui
@@ -53,8 +53,8 @@
-
- ..
+
+ :/icons/icons/menu.png:/icons/icons/menu.png
@@ -67,8 +67,8 @@
...
-
- ..
+
+ :/icons/icons/refresh.png:/icons/icons/refresh.png
Ctrl+R
@@ -84,8 +84,8 @@
...
-
- ..
+
+ :/icons/icons/save.png:/icons/icons/save.png
Ctrl+S
@@ -127,8 +127,8 @@
-
- ..
+
+ :/icons/icons/delete.png:/icons/icons/delete.png
Remove
@@ -136,8 +136,8 @@
-
- ..
+
+ :/icons/icons/copy.png:/icons/icons/copy.png
Duplicate
@@ -145,15 +145,17 @@
-
- ..
+
+ :/icons/icons/edit.png:/icons/icons/edit.png
Rename
-
+
+
+
menu_button
diff --git a/sw/supervision/python/ui/ui_conf_settings.ui b/sw/supervision/python/ui/ui_conf_settings.ui
index 9dc8045917..3d52d1af50 100644
--- a/sw/supervision/python/ui/ui_conf_settings.ui
+++ b/sw/supervision/python/ui/ui_conf_settings.ui
@@ -32,7 +32,8 @@
...
-
+
+ :/icons/icons/add.png:/icons/icons/add.png
@@ -42,7 +43,8 @@
...
-
+
+ :/icons/icons/remove.png:/icons/icons/remove.png
@@ -53,6 +55,8 @@
-
+
+
+
diff --git a/sw/supervision/python/ui/ui_console.ui b/sw/supervision/python/ui/ui_console.ui
index f2a0fdda38..203d8e29de 100644
--- a/sw/supervision/python/ui/ui_console.ui
+++ b/sw/supervision/python/ui/ui_console.ui
@@ -59,8 +59,8 @@
0
0
- 382
- 524
+ 180
+ 525
@@ -154,8 +154,8 @@
Clear console
-
- ..
+
+ :/icons/icons/clear.png:/icons/icons/clear.png
@@ -163,6 +163,8 @@
-
+
+
+
diff --git a/sw/supervision/python/ui/ui_doc_viewer.ui b/sw/supervision/python/ui/ui_doc_viewer.ui
index c69756a77c..de74637f43 100644
--- a/sw/supervision/python/ui/ui_doc_viewer.ui
+++ b/sw/supervision/python/ui/ui_doc_viewer.ui
@@ -145,8 +145,8 @@
...
-
- ..
+
+ :/icons/icons/browser.png:/icons/icons/browser.png
@@ -191,6 +191,8 @@
-
+
+
+
diff --git a/sw/supervision/python/ui/ui_program.ui b/sw/supervision/python/ui/ui_program.ui
index c3d56ac92a..68b190a53f 100644
--- a/sw/supervision/python/ui/ui_program.ui
+++ b/sw/supervision/python/ui/ui_program.ui
@@ -7,7 +7,7 @@
0
0
374
- 25
+ 32
@@ -43,8 +43,8 @@
...
-
- ..
+
+ :/icons/icons/stop.png:/icons/icons/stop.png
@@ -54,13 +54,15 @@
...
-
- ..
+
+ :/icons/icons/remove.png:/icons/icons/remove.png
-
+
+
+
diff --git a/sw/supervision/python/ui/ui_session.ui b/sw/supervision/python/ui/ui_session.ui
index 1622ff14b9..52a19d6b7e 100644
--- a/sw/supervision/python/ui/ui_session.ui
+++ b/sw/supervision/python/ui/ui_session.ui
@@ -15,18 +15,8 @@
-
-
-
- Session
-
-
-
- -
-
-
-
-
-
- -
+
+
-
Start Session
@@ -35,12 +25,12 @@
...
-
- ..
+
+ :/icons/icons/play.png:/icons/icons/play.png
- -
+
-
Qt::ActionsContextMenu
@@ -49,13 +39,36 @@
...
-
- ..
+
+ :/icons/icons/menu.png:/icons/icons/menu.png
+ -
+
+
+ -
+
+
+ control panel
+
+
+
+ -
+
+
+ Session
+
+
+
+ -
+
+
+ -
+
+
-
@@ -90,8 +103,8 @@
Add tool
-
- ..
+
+ :/icons/icons/add.png:/icons/icons/add.png
Qt::ToolButtonTextBesideIcon
@@ -133,8 +146,8 @@
...
-
- ..
+
+ :/icons/icons/play.png:/icons/icons/play.png
@@ -147,8 +160,8 @@
...
-
- ..
+
+ :/icons/icons/stop.png:/icons/icons/stop.png
@@ -161,8 +174,8 @@
...
-
- ..
+
+ :/icons/icons/remove.png:/icons/icons/remove.png
@@ -178,8 +191,8 @@
0
0
- 380
- 176
+ 384
+ 154
@@ -203,8 +216,8 @@
-
- ..
+
+ :/icons/icons/save.png:/icons/icons/save.png
Save session
@@ -224,8 +237,8 @@
-
- ..
+
+ :/icons/icons/copy.png:/icons/icons/copy.png
Rename session
@@ -233,15 +246,17 @@
-
- ..
+
+ :/icons/icons/delete.png:/icons/icons/delete.png
Remove session
-
+
+
+
menu_button