From 75d9bfc9256ac82aabc57e64384c648c7e78c85e Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 19 Jul 2012 20:55:25 -0300 Subject: [PATCH 01/26] Arch: added new closeHoles command --- src/Mod/Arch/ArchCommands.py | 52 +++++++++++++++++++++++++++++++++--- src/Mod/Arch/InitGui.py | 3 ++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index f98c61c88..6952f4d13 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -235,6 +235,33 @@ def makeFace(wires,method=2,cleanup=False): #print "makeFace: final face:",mf.Faces return mf.Faces[0] +def closeHole(shape): + '''closeHole(shape): closes a hole in an open shape''' + import DraftGeomUtils, Part + # creating an edges lookup table + lut = {} + for face in shape.Faces: + for edge in face.Edges: + hc = edge.hashCode() + if lut.has_key(hc): + lut[hc] = lut[hc] + 1 + else: + lut[hc] = 1 + # filter out the edges shared by more than one face + bound = [] + for e in shape.Edges: + if lut[e.hashCode()] == 1: + bound.append(e) + bound = DraftGeomUtils.sortEdges(bound) + try: + nface = Part.Face(Part.Wire(bound)) + shell = Part.makeShell(shape.Faces+[nface]) + solid = Part.Solid(shell) + except: + raise + else: + return solid + def meshToShape(obj,mark=True): '''meshToShape(object,[mark]): turns a mesh into a shape, joining coplanar facets. If mark is True (default), non-solid objects will be marked in red''' @@ -242,10 +269,10 @@ def meshToShape(obj,mark=True): name = obj.Name import Part, MeshPart, DraftGeomUtils if "Mesh" in obj.PropertiesList: - faces = [] + faces = [] mesh = obj.Mesh plac = obj.Placement - segments = mesh.getPlanes(0.001) # use rather strict tolerance here + segments = mesh.getPlanarSegments(0.001) # use rather strict tolerance here print len(segments)," segments ",segments for i in segments: print "treating",segments.index(i),i @@ -262,7 +289,7 @@ def meshToShape(obj,mark=True): se = Part.makeShell(faces) solid = Part.Solid(se) except: - pass + raise else: if solid.isClosed(): FreeCAD.ActiveDocument.removeObject(name) @@ -522,9 +549,28 @@ class _CommandRemoveShape: sel = FreeCADGui.Selection.getSelection() removeShape(sel) +class _CommandCloseHoles: + "the Arch CloseHoles command definition" + def GetResources(self): + return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Closes holes in open shapes, turning them solids")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + for o in FreeCADGui.Selection.getSelection(): + s = closeHole(o.Shape) + if s: + o.Shape = s + FreeCADGui.addCommand('Arch_Add',_CommandAdd()) FreeCADGui.addCommand('Arch_Remove',_CommandRemove()) FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh()) FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape()) FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes()) FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape()) +FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles()) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 69838792c..bd0feb54e 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -65,7 +65,8 @@ class ArchWorkbench(Workbench): "Arch_Window","Arch_Roof","Arch_Axis", "Arch_SectionPlane","Arch_Add","Arch_Remove"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", - "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] + "Arch_SelectNonSolidMeshes","Arch_RemoveShape", + "Arch_CloseHoles"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", From 17506c8d7ebc0c8761a5fcaad59c2cbf78e54f48 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 09:47:44 +0200 Subject: [PATCH 02/26] Check at runtime if drawing page is there --- src/Mod/Drawing/Gui/Command.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index 7ed5a4641..ed5f10b28 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -11,6 +11,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include #endif @@ -90,16 +91,15 @@ void CmdDrawingNewPage::activated(int iMsg) { std::string FeatName = getUniqueObjectName("Page"); - if (iMsg == 3) { + std::stringstream out; + out << App::Application::getResourceDir() + << "Mod/Drawing/Templates/" + << "A" << iMsg << "_Landscape.svg"; + Base::FileInfo tfi(out.str()); + if (tfi.isReadable()) { openCommand("Drawing create page"); doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = 'A3_Landscape.svg'",FeatName.c_str()); - commitCommand(); - } - else if (iMsg == 4) { - openCommand("Drawing create page"); - doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = 'A4_Landscape.svg'",FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), tfi.filePath().c_str()); commitCommand(); } else { From 4520454d1740efbe34a37b16765a5ba15058b701 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 18:16:15 +0200 Subject: [PATCH 03/26] 0000801: Accidental Cancel in set colors destroys all the work --- src/Mod/Part/Gui/TaskFaceColors.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Mod/Part/Gui/TaskFaceColors.cpp b/src/Mod/Part/Gui/TaskFaceColors.cpp index 96204f66c..61a112e90 100644 --- a/src/Mod/Part/Gui/TaskFaceColors.cpp +++ b/src/Mod/Part/Gui/TaskFaceColors.cpp @@ -26,6 +26,7 @@ #ifndef _PreComp_ # include # include +# include # include #endif @@ -194,10 +195,17 @@ bool FaceColors::accept() bool FaceColors::reject() { - Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument()); - doc->resetEdit(); - d->vp->DiffuseColor.setValues(d->current); - return true; + int ret = QMessageBox::question(this, tr("Face colors"), tr("Do you really want to cancel?"), + QMessageBox::Yes, QMessageBox::No|QMessageBox::Default|QMessageBox::Escape); + if (ret == QMessageBox::Yes) { + Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument()); + doc->resetEdit(); + d->vp->DiffuseColor.setValues(d->current); + return true; + } + else { + return false; + } } void FaceColors::changeEvent(QEvent *e) From bbf5bbbcbc948bd80b5bd9fcaf6b987f4b013b65 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 21 Jul 2012 20:07:27 +0200 Subject: [PATCH 04/26] 0000791: Placement dialog leaves unapplied changes --- src/Gui/Placement.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/Gui/Placement.h | 10 ++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/Gui/Placement.cpp b/src/Gui/Placement.cpp index 091c10512..5697814e9 100644 --- a/src/Gui/Placement.cpp +++ b/src/Gui/Placement.cpp @@ -99,10 +99,15 @@ Placement::Placement(QWidget* parent, Qt::WFlags fl) connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(onPlacementChanged(int))); + connectAct = Application::Instance->signalActiveDocument.connect + (boost::bind(&Placement::slotActiveDocument, this, _1)); + App::Document* activeDoc = App::GetApplication().getActiveDocument(); + if (activeDoc) documents.insert(activeDoc->getName()); } Placement::~Placement() { + connectAct.disconnect(); delete ui; } @@ -113,6 +118,36 @@ void Placement::showDefaultButtons(bool ok) ui->applyButton->setVisible(ok); } +void Placement::slotActiveDocument(const Gui::Document& doc) +{ + documents.insert(doc.getDocument()->getName()); +} + +void Placement::revertTransformation() +{ + for (std::set::iterator it = documents.begin(); it != documents.end(); ++it) { + Gui::Document* document = Application::Instance->getDocument(it->c_str()); + if (!document) continue; + + std::vector obj = document->getDocument()-> + getObjectsOfType(App::DocumentObject::getClassTypeId()); + if (!obj.empty()) { + for (std::vector::iterator it=obj.begin();it!=obj.end();++it) { + std::map props; + (*it)->getPropertyMap(props); + // search for the placement property + std::map::iterator jt; + jt = std::find_if(props.begin(), props.end(), find_placement(this->propertyName)); + if (jt != props.end()) { + Base::Placement cur = static_cast(jt->second)->getValue(); + Gui::ViewProvider* vp = document->getViewProvider(*it); + if (vp) vp->setTransformation(cur.toMatrix()); + } + } + } + } +} + void Placement::applyPlacement(const Base::Placement& p, bool incremental, bool data) { Gui::Document* document = Application::Instance->activeDocument(); @@ -225,12 +260,15 @@ void Placement::reject() QVariant data = QVariant::fromValue(plm); /*emit*/ placementChanged(data, true, false); + revertTransformation(); QDialog::reject(); } void Placement::accept() { on_applyButton_clicked(); + + revertTransformation(); QDialog::accept(); } diff --git a/src/Gui/Placement.h b/src/Gui/Placement.h index 1df314702..233284d1a 100644 --- a/src/Gui/Placement.h +++ b/src/Gui/Placement.h @@ -28,9 +28,14 @@ #include #include +#include +#include + class QSignalMapper; namespace Gui { +class Document; + namespace Dialog { class Ui_Placement; @@ -64,6 +69,8 @@ private: Base::Placement getPlacementData() const; void directionActivated(int); void applyPlacement(const Base::Placement& p, bool incremental, bool data); + void revertTransformation(); + void slotActiveDocument(const Gui::Document&); Q_SIGNALS: void placementChanged(const QVariant &, bool, bool); @@ -71,10 +78,13 @@ Q_SIGNALS: private: typedef Gui::LocationInterfaceComp Ui_PlacementComp; + typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection; Ui_PlacementComp* ui; QSignalMapper* signalMapper; + Connection connectAct; Base::Placement ref; std::string propertyName; // the name of the placement property + std::set documents; friend class TaskPlacement; }; From 08bfdc4875002c8b6f5293f62eef1689c251b5d5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 22 Jul 2012 14:56:25 +0200 Subject: [PATCH 05/26] Automatically create actions for each template --- src/Gui/PythonConsole.cpp | 10 +- src/Mod/Drawing/Gui/Command.cpp | 106 +++++++++--------- .../Gui/Resources/translations/Drawing_de.qm | Bin 7118 -> 7372 bytes .../Gui/Resources/translations/Drawing_de.ts | 8 ++ 4 files changed, 67 insertions(+), 57 deletions(-) diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp index 8364ae4e9..780789b71 100644 --- a/src/Gui/PythonConsole.cpp +++ b/src/Gui/PythonConsole.cpp @@ -701,10 +701,14 @@ void PythonConsole::runSource(const QString& line) catch (const Base::SystemExitException&) { ParameterGrp::handle hPrefGrp = getWindowParameter(); bool check = hPrefGrp->GetBool("CheckSystemExit",true); - if (!check) qApp->quit(); - int ret = QMessageBox::question(this, tr("System exit"), tr("The application is still running.\nDo you want to exit without saving your data?"), - QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default); + int ret = QMessageBox::Yes; + if (check) { + ret = QMessageBox::question(this, tr("System exit"), + tr("The application is still running.\nDo you want to exit without saving your data?"), + QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default); + } if (ret == QMessageBox::Yes) { + PyErr_Clear(); qApp->quit(); } else { diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp index ed5f10b28..8a206d52d 100644 --- a/src/Mod/Drawing/Gui/Command.cpp +++ b/src/Mod/Drawing/Gui/Command.cpp @@ -12,7 +12,12 @@ #include "PreCompiled.h" #ifndef _PreComp_ # include +# include +# include +# include +# include # include +# include #endif #include @@ -89,17 +94,16 @@ CmdDrawingNewPage::CmdDrawingNewPage() void CmdDrawingNewPage::activated(int iMsg) { + Gui::ActionGroup* pcAction = qobject_cast(_pcAction); + QAction* a = pcAction->actions()[iMsg]; + std::string FeatName = getUniqueObjectName("Page"); - std::stringstream out; - out << App::Application::getResourceDir() - << "Mod/Drawing/Templates/" - << "A" << iMsg << "_Landscape.svg"; - Base::FileInfo tfi(out.str()); + QFileInfo tfi(a->property("Template").toString()); if (tfi.isReadable()) { openCommand("Drawing create page"); doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), tfi.filePath().c_str()); + doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), (const char*)tfi.filePath().toUtf8()); commitCommand(); } else { @@ -115,25 +119,45 @@ Gui::Action * CmdDrawingNewPage::createAction(void) pcAction->setDropDownMenu(true); applyCommandData(pcAction); - QAction* a0 = pcAction->addAction(QString()); - a0->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A0")); + QAction* defaultAction = 0; + int defaultId = 0; - QAction* a1 = pcAction->addAction(QString()); - a1->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A1")); + std::string path = App::Application::getResourceDir(); + path += "Mod/Drawing/Templates/"; + QDir dir(QString::fromUtf8(path.c_str()), QString::fromAscii("A*_Landscape.svg")); + for (unsigned int i=0; i -1) { + int id = rx.cap(1).toInt(); + QFile file(QString::fromAscii(":/icons/actions/drawing-landscape-A0.svg")); + QAction* a = pcAction->addAction(QString()); + if (file.open(QFile::ReadOnly)) { + QString s = QString::fromAscii("style=\"font-size:22px\">A%1").arg(id); + QByteArray data = file.readAll(); + data.replace("style=\"font-size:22px\">A0", s.toAscii()); + a->setIcon(Gui::BitmapFactory().pixmapFromSvg(data, QSize(24,24))); + } - QAction* a2 = pcAction->addAction(QString()); - a2->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A2")); + a->setProperty("TemplateId", id); + a->setProperty("Template", dir.absoluteFilePath(dir[i])); - QAction* a3 = pcAction->addAction(QString()); - a3->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A3")); - - QAction* a4 = pcAction->addAction(QString()); - a4->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A4")); + if (id == 3) { + defaultAction = a; + defaultId = pcAction->actions().size() - 1; + } + } + } _pcAction = pcAction; languageChange(); - pcAction->setIcon(a3->icon()); - pcAction->setProperty("defaultAction", QVariant(3)); + if (defaultAction) { + pcAction->setIcon(defaultAction->icon()); + pcAction->setProperty("defaultAction", QVariant(defaultId)); + } + else if (!pcAction->actions().isEmpty()) { + pcAction->setIcon(pcAction->actions()[0]->icon()); + pcAction->setProperty("defaultAction", QVariant(0)); + } return pcAction; } @@ -146,41 +170,15 @@ void CmdDrawingNewPage::languageChange() return; Gui::ActionGroup* pcAction = qobject_cast(_pcAction); QList a = pcAction->actions(); - - a[0]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A0 landscape", 0, - QCoreApplication::CodecForTr)); - a[0]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A0 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[1]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A1 landscape", 0, - QCoreApplication::CodecForTr)); - a[1]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A1 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[2]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A2 landscape", 0, - QCoreApplication::CodecForTr)); - a[2]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A2 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[3]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A3 landscape", 0, - QCoreApplication::CodecForTr)); - a[3]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A3 landscape drawing", 0, - QCoreApplication::CodecForTr)); - - a[4]->setText(QCoreApplication::translate( - "Drawing_NewPage", "A4 landscape", 0, - QCoreApplication::CodecForTr)); - a[4]->setToolTip(QCoreApplication::translate( - "Drawing_NewPage", "Insert new A4 landscape drawing", 0, - QCoreApplication::CodecForTr)); + for (QList::iterator it = a.begin(); it != a.end(); ++it) { + int id = (*it)->property("TemplateId").toInt(); + (*it)->setText(QCoreApplication::translate( + "Drawing_NewPage", "A%1 landscape", 0, + QCoreApplication::CodecForTr).arg(id)); + (*it)->setToolTip(QCoreApplication::translate( + "Drawing_NewPage", "Insert new A%1 landscape drawing", 0, + QCoreApplication::CodecForTr).arg(id)); + } } bool CmdDrawingNewPage::isActive(void) diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm index 2079b12df25be0480fb743b1bcf7f54054851609..1b31c06f98b89d771d177d5f7c058069567302d9 100644 GIT binary patch delta 497 zcmX?Se#UZw2&2J7QOo*p-gE{A!9NVso1QZ;FeX4~kz$5j&r=x~SW6gwy?V;PAaIA_ zH<+Hn@CQT-<}myP(<%)A!Soi!i1{lS7$n>n+dn;FU=Ux=2sTgn664{wKt9`KCROEk z3=Ev-nUaLh0o7e++F*W_fq^}yp6ThfdkhR>b<6_Gl^Ga#W0+;;Q7vO^-2}!0Y~=Qa-ccf`RrizLKE1}tOLsPO}1gwHxf_dEMRB`%I@ddej4Z+ zNiVJoYMel4@^H%wi83%SByoFe0D7B!4tJWACeW6Zljky;F-f^hzRGB)F1ee}vi={? z&3b(QEH4B7aD?CS>?2?xi10h_O9t8@o5{c+RlV7Y$yI<;iNTRUmBElfVKSqb6b}c` zYz8(U=5GjM4%as`zcw?Al=WYjTc*G1gKtz$HK~l zEeGo7&SwX!6I{uDW*tzR??ldV)1_qHslh-nuF-gWwe#&U4E^&p=vi={? z?RtFwEH4B7a)jUU>?2@c=<+-7O9t90n+f#5l+9jDt^%7M31u)&RuGHWY$n>z4gfd8 Bbcp}} diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts index 5923883d7..3fe18daed 100644 --- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts +++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts @@ -251,6 +251,14 @@ Insert new A4 landscape drawing Neue A3-Zeichung einfügen (im Querformat) {4 ?} + + Insert new A%1 landscape drawing + Neue A%1-Zeichung im Querformat einfügen + + + A%1 landscape + A%1 im Querformat + QObject From f2ad945a7f7e51b27b969ddf7360c891f19b6ac1 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 22 Jul 2012 16:41:25 -0300 Subject: [PATCH 06/26] Arch: small tool improvements + added Arch check tool (checks if all objects are valid and solid) + added missing icons --- src/Mod/Arch/ArchCommands.py | 61 +- src/Mod/Arch/ArchSectionPlane.py | 3 +- src/Mod/Arch/Arch_rc.py | 744 +++++++++++++++++- src/Mod/Arch/InitGui.py | 2 + src/Mod/Arch/Makefile.am | 5 +- src/Mod/Arch/Resources/Arch.qrc | 3 + src/Mod/Arch/Resources/icons/Arch_Check.svg | 162 ++++ .../Arch/Resources/icons/Arch_CloseHoles.svg | 117 +++ .../icons/Arch_SelectNonManifold.svg | 93 +++ src/Mod/Draft/Draft.py | 9 + 10 files changed, 1178 insertions(+), 21 deletions(-) create mode 100644 src/Mod/Arch/Resources/icons/Arch_Check.svg create mode 100644 src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg create mode 100644 src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 6952f4d13..f0754afa2 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -381,6 +381,34 @@ def download(url): return None else: return filepath + +def check(objectslist,includehidden=True): + """check(objectslist,includehidden=True): checks if the given objects contain only solids""" + objs = Draft.getGroupContents(objectslist) + if not includehidden: + objs = Draft.removeHidden(objs) + bad = [] + for o in objs: + if not o.isDerivedFrom("Part::Feature"): + bad.append([o,"is not a Part-based object"]) + else: + s = o.Shape + if not s.isClosed(): + bad.append([o,"is not closed"]) + elif not s.isValid(): + bad.append([o,"is not valid"]) + elif not s.Solids: + bad.append([o,"doesn't contain any solid"]) + else: + f = 0 + for sol in s.Solids: + f += len(sol.Faces) + if not sol.isClosed(): + bad.append([o,"contains a non-closed solid"]) + if len(s.Faces) != f: + bad.append([o,"contains faces that are not part of any solid"]) + return bad + # command definitions ############################################### @@ -511,7 +539,8 @@ class _CommandMeshToShape: class _CommandSelectNonSolidMeshes: "the Arch SelectNonSolidMeshes command definition" def GetResources(self): - return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"), + return {'Pixmap': 'Arch_SelectNonManifold.svg', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"), 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Selects all non-manifold meshes from the document or from the selected groups")} def Activated(self): @@ -552,8 +581,9 @@ class _CommandRemoveShape: class _CommandCloseHoles: "the Arch CloseHoles command definition" def GetResources(self): - return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_RemoveShape","Closes holes in open shapes, turning them solids")} + return {'Pixmap' : 'Arch_CloseHoles', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Closes holes in open shapes, turning them solids")} def IsActive(self): if FreeCADGui.Selection.getSelection(): @@ -567,6 +597,30 @@ class _CommandCloseHoles: if s: o.Shape = s +class _CommandCheck: + "the Arch Check command definition" + def GetResources(self): + return {'Pixmap' : 'Arch_Check', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Check"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Checks the selected objects for problems")} + + def IsActive(self): + if FreeCADGui.Selection.getSelection(): + return True + else: + return False + + def Activated(self): + result = check(FreeCADGui.Selection.getSelection()) + if not result: + FreeCAD.Console.PrintMessage("All good! no problems found") + else: + FreeCADGui.Selection.clearSelection() + for i in result: + FreeCAD.Console.PrintWarning("Object "+i[0].Name+" ("+i[0].Label+") "+i[1]) + FreeCADGui.Selection.addSelection(i[0]) + + FreeCADGui.addCommand('Arch_Add',_CommandAdd()) FreeCADGui.addCommand('Arch_Remove',_CommandRemove()) FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh()) @@ -574,3 +628,4 @@ FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape()) FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes()) FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape()) FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles()) +FreeCADGui.addCommand('Arch_Check',_CommandCheck()) diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index f71828a96..86a346357 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -206,6 +206,7 @@ class _ArchDrawingView: if obj.Source: if obj.Source.Objects: objs = Draft.getGroupContents(obj.Source.Objects) + objs = Draft.removeHidden(objs) svg = '' # generating SVG @@ -229,7 +230,7 @@ class _ArchDrawingView: if o.isDerivedFrom("Part::Feature"): shapes.append(o.Shape) if shapes: - base = shape.pop() + base = shapes.pop() for sh in shapes: base = base.fuse(sh) svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py index 6e7f3870a..590681ea5 100644 --- a/src/Mod/Arch/Arch_rc.py +++ b/src/Mod/Arch/Arch_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Sun May 13 20:45:11 2012 +# Created: Sun Jul 22 16:38:54 2012 # by: The Resource Compiler for PyQt (Qt v4.8.1) # # WARNING! All changes made in this file will be lost! @@ -8358,6 +8358,132 @@ qt_resource_data = "\ \x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\ \x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\x20\x2f\x3e\x0a\x20\x20\ \x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x07\xbe\ +\x00\ +\x00\x1a\x97\x78\x9c\xed\x18\x6b\x8f\xda\xd8\xf5\xfb\xfc\x0a\x97\ +\x7c\x49\x54\xfb\x72\xdf\x0f\x06\x66\x55\x6d\xb4\xdb\x95\xb6\x5a\ +\x69\x37\x51\x3f\x46\xc6\xbe\x80\x3b\xc6\x46\xb6\x19\x60\x7e\x7d\ +\xcf\xb5\xf1\x83\xc1\x24\xb3\x89\x1a\xa9\x6a\x41\x19\xec\xf3\xbc\ +\xe7\x7d\x6e\xe6\x3f\x1c\xb7\xa9\xf7\x64\x8b\x32\xc9\xb3\xc5\x84\ +\x20\x3c\xf1\x6c\x16\xe5\x71\x92\xad\x17\x93\x8f\x1f\x7e\x0a\xf4\ +\xc4\x2b\xab\x30\x8b\xc3\x34\xcf\xec\x62\x92\xe5\x93\x1f\x1e\xee\ +\xe6\x7f\x09\x02\xef\xc7\xc2\x86\x95\x8d\xbd\x43\x52\x6d\xbc\x5f\ +\xb2\xc7\x32\x0a\x77\xd6\x7b\xbb\xa9\xaa\xdd\x6c\x3a\x3d\x1c\x0e\ +\x28\x39\x03\x51\x5e\xac\xa7\xef\xbc\x20\x78\xb8\xbb\x9b\x97\x4f\ +\xeb\x3b\xcf\xf3\x40\x6f\x56\xce\xe2\x68\x31\x39\x33\xec\xf6\x45\ +\x5a\x13\xc6\xd1\xd4\xa6\x76\x6b\xb3\xaa\x9c\x12\x44\xa6\x93\x9e\ +\x3c\xea\xc9\x23\xa7\x3d\x79\xb2\x51\xbe\xdd\xe6\x59\x59\x73\x66\ +\xe5\x9b\x01\x71\x11\xaf\x3a\x6a\x77\x9a\x03\xab\x89\x88\x31\x66\ +\x8a\xe9\x94\xd2\x00\x28\x82\xf2\x94\x55\xe1\x31\xb8\x64\x85\x33\ +\x8e\xb1\x52\x8c\xf1\x14\x70\x3d\xe5\xeb\xa8\x66\xc7\x14\x5c\x71\ +\xf3\x30\x35\x76\xa8\x1d\xdc\xbf\x83\x7f\x1d\x43\x0b\x40\x65\xbe\ +\x2f\x22\xbb\x02\x4e\x8b\x32\x5b\x4d\xdf\x7f\x78\xdf\x21\x03\x8c\ +\xe2\x2a\x1e\x88\x69\xbd\x7f\xa1\xf7\x22\x24\x59\xb8\xb5\xe5\x2e\ +\x8c\x6c\x39\x6d\xe1\x35\xff\x21\x89\xab\xcd\x62\x22\xf9\xee\x58\ +\xbf\x6f\x6c\xb2\xde\x54\x03\x40\x12\x2f\x26\x60\x21\x35\x1a\xd7\ +\xef\xed\x19\x66\x5d\x26\x61\xc4\x68\x43\x7a\x16\x3c\x44\x71\x8d\ +\x18\x22\x5e\x61\xb4\x96\x97\xfc\x71\x1e\xb9\x43\x2d\x26\x7f\x2b\ +\xa2\xcd\xa7\x1f\xd3\xbc\xb4\x7f\xcf\x53\x5b\xa2\xd6\x9f\x9d\xb8\ +\x7c\x5f\xed\xf6\xd5\x27\x7b\xac\x6c\xd6\xc8\x05\x8b\x06\xe6\xd5\ +\x68\xc7\x86\x2e\x4c\x1b\xa4\x3a\x99\x3c\x00\x64\x1e\xdb\x55\xe9\ +\x30\x8d\x55\xee\x0d\xcc\xa2\x35\x0e\xb0\x10\x1a\x1b\x16\x3f\x17\ +\x61\x9c\x40\x42\x36\x74\x0d\xe5\x25\x86\x39\x53\x1e\xce\xf8\x79\ +\x59\xe5\xbb\x96\x16\xac\xab\x4e\x29\x98\xe4\x80\x41\x94\xa7\x79\ +\x31\x7b\x83\xa5\x89\x30\xbf\xaf\x41\x39\x44\x20\xa9\x4e\x33\x72\ +\x3f\xe9\x79\xf2\xd5\xaa\xb4\xe0\x72\x3c\x80\xd5\x5e\x07\x0e\xd0\ +\x05\x55\x39\x7d\xbd\x36\x86\x57\x2b\x8c\x5f\xa1\x8d\x8c\x6a\x33\ +\xb8\xd3\x36\x9f\x5e\x9a\xfd\xa7\xbd\x24\xf9\x2d\x2f\xf5\xfa\xa4\ +\xfc\x82\x23\x46\x4c\x54\x64\x49\x57\xfa\xca\xc4\x9b\x5e\x1a\x68\ +\xd3\x5f\x70\xc4\x58\xf8\x30\x55\x46\xdc\xd4\x76\xc3\x4b\x5d\xee\ +\xee\x20\x09\x77\x36\x72\xed\xab\x55\xd3\x55\x40\x75\x72\x15\x7b\ +\x49\xca\xe2\xee\x38\x7d\x39\xed\x3e\x1d\xc1\x2b\xde\xcc\x63\x14\ +\xfe\x90\x51\x8a\x53\x43\x41\xa0\x23\xc1\x0f\x1e\xa5\x79\x76\x75\ +\xfd\x19\x31\xe7\x13\x04\x79\x91\xac\x13\x28\x9c\x9a\x8e\x12\xc4\ +\xea\xcf\x25\x0f\x38\x75\x60\x1b\xd4\x51\x9f\xa7\x73\xe7\x8b\x30\ +\xbd\xca\x91\x56\x0d\x78\x36\x05\xb6\xc5\x24\x4c\x0f\xe1\xa9\xec\ +\x64\xd6\xcd\x71\xb6\x29\x2c\x34\xf3\x37\x23\xd9\x34\xd4\x7d\xa9\ +\x82\x61\xd5\x27\xd2\xfa\x0c\xfc\x98\x25\x15\x74\xed\x7d\x69\x8b\ +\x3f\x5c\xe7\xfb\x2d\xfb\x58\xda\x2b\xaa\x0f\x45\x98\x95\xd0\x66\ +\xb7\x8b\xc9\x36\xac\x8a\xe4\xf8\x16\x23\xa1\x31\x31\x9c\x12\x1f\ +\x86\x24\x56\x9a\x28\xe2\x07\x04\x19\x2c\x30\x95\xc6\x01\x8d\x54\ +\x04\xd0\x42\x22\xa6\x94\x23\x0c\x88\xd1\x40\xa0\x99\x7e\xd7\x69\ +\x88\x20\x68\x02\x9c\x47\xb5\x36\xb4\x87\x42\xa0\x18\x88\x50\x9c\ +\xf0\xfe\xcc\xab\x51\xda\xd5\x28\x6d\x01\x39\x6b\x90\x50\x84\xd3\ +\x81\xcf\x6f\xd4\xe5\x37\xf9\x5c\xcb\xc9\xe7\x0a\x7c\x70\xd2\x23\ +\x59\x4c\x28\x47\x82\xc3\xb7\x67\x3a\x01\x94\x4b\x44\x34\xd1\x03\ +\x52\x0a\xa6\x1a\xa4\x1d\xb4\x8f\xe9\x89\x8e\x90\x7e\x3e\x92\x5f\ +\x32\x7d\xb4\x71\x07\xdf\xb5\x75\x07\xec\xfb\x36\xef\x40\x7f\x5d\ +\xfb\x1e\xf5\xfe\x8d\x40\x8d\xc6\x74\x34\xfc\xaf\x2b\xc4\x91\x38\ +\x19\x42\x5e\x9b\xa0\x81\xbc\x6e\x63\x2f\x73\xbd\x71\xc9\x7c\xea\ +\x06\x7e\xfd\xd4\x75\x60\xb7\x80\xc4\x4f\x89\x3d\xf4\x5b\xc1\x32\ +\xec\xce\xb6\x0b\xd7\xb6\x8e\x0c\x68\x5e\xd5\x9f\x33\x62\x99\x17\ +\xb1\x2d\x5a\x94\xac\x3f\x17\xa8\x73\xf0\x9a\x2d\xfb\xee\xf2\x74\ +\x4e\x6a\x87\xc7\xe3\xf8\x72\x13\xc6\xf9\x01\x7c\xfa\x12\xf9\x9c\ +\xe7\xd0\xa8\x04\x12\x2f\x11\xae\xd9\x10\x85\xb4\x62\x98\x5d\x23\ +\x41\x13\x65\x48\x61\x45\x09\xbf\x42\xee\x8b\x02\x9c\x19\xa4\xe1\ +\xc9\x82\x39\xf5\x4f\xeb\xfe\x72\x93\x1f\xd6\x85\x73\x4b\x55\xec\ +\xed\x4b\x4e\xd8\xe0\xf6\x6e\x77\x0f\xf6\x4d\x80\xcf\x1b\xe3\x80\ +\xc2\xf1\x06\xcb\x65\x7e\x1c\x17\x70\x48\x32\x30\x33\x38\xef\xa0\ +\x84\xea\x2b\x67\x9c\x29\xda\xad\x54\x29\x75\x83\xe2\xd8\x17\xe1\ +\x4b\xd4\xe9\x36\x6a\x1b\x1e\x93\x6d\xf2\x6c\x63\x57\x52\xe7\x34\ +\xd9\xda\x2a\x8c\xc3\x2a\xec\x53\xa2\x85\xc0\x90\x13\xed\xb2\x08\ +\xf7\x89\xd9\xef\xef\x7f\xea\x6a\x3b\x8a\x66\xff\xcc\x8b\xc7\xbe\ +\x2c\x1d\x41\xb8\x84\xdd\x74\x31\xe9\x3a\x8e\x5b\x41\xa3\x99\x1b\ +\x36\x61\xf5\x90\x6c\x21\xd0\xee\xf2\xf0\x57\xd8\xe1\x21\x39\x3b\ +\xc4\x05\xb1\xdb\x11\x7a\xa1\x8d\xd8\xc2\x36\x97\x83\xd1\xfb\x54\ +\x1c\x6d\x13\xc7\x34\xfd\xa3\x4a\xd2\xf4\x17\xa7\x64\xd0\x83\xce\ +\x42\x93\x2a\xb5\x0f\xb5\xce\xe6\xb1\xb5\x62\x7a\x36\xa3\x6d\x21\ +\x03\x2b\xe7\xd3\xd6\x0d\xf5\xdb\xba\x77\xcf\x45\xc6\x74\x1e\x4e\ +\xc3\xa5\x4d\x17\x93\x5f\x1d\xd2\xbb\xc2\xae\x8b\x7c\xbf\xdb\xe6\ +\xb1\x3d\xb3\xb7\x6e\xdd\x85\xd5\x66\xa4\x9e\xb3\x0c\xea\x39\x2f\ +\x02\xc8\xd5\xa7\xb0\xda\x17\x76\xd8\x72\xfb\x6a\x06\x79\xce\x74\ +\x48\xc5\xa8\xf9\x5c\xae\x2b\x20\x9b\x69\xca\x3a\x20\xc0\xfe\xe1\ +\x51\x81\x94\x91\x46\xf9\x1a\x69\x2d\x24\x16\xda\x93\x48\x51\xa8\ +\x15\xad\x7d\xe2\x90\x02\x4b\x8f\x09\x84\x85\x30\x8a\xfb\x30\x7a\ +\x25\x51\xc6\x63\x1c\x31\x61\x84\xa1\xbe\x80\x27\xad\x08\x50\x09\ +\x8c\x40\x94\xc1\xc6\xe7\x0c\x69\xc1\x39\xd3\x1e\x4c\x75\x41\x61\ +\x7e\xc3\x32\x81\x91\x92\x44\x68\x31\xa6\xf3\xb9\x37\xa7\x99\x0b\ +\x2b\x88\x9e\xdb\x3e\x19\x5f\xad\xee\xdd\xcb\x60\x22\xd4\xaf\xc5\ +\x3e\xb5\x33\xfb\x64\xc1\xea\x18\x46\x46\x91\x3f\x5a\x47\x8f\x0d\ +\x13\xe7\xd7\xa6\xb0\x66\xac\x7d\x75\xdd\x13\x1c\x3a\x5b\xee\xab\ +\x6a\x08\xfb\x57\x9e\x64\xb3\x25\x88\x4a\x5b\x28\xa4\x90\x2d\x52\ +\x28\x8d\x6a\xc6\x5b\x58\xaf\xfe\x0c\x88\x43\x68\x53\x45\x11\x9e\ +\xc0\xf1\x99\x1d\x42\x9b\x31\x35\xc3\xf7\xdb\xb0\x78\xb4\x45\x83\ +\x7f\x4a\xca\x64\x99\xa4\x4e\x44\xfd\x98\xda\xfb\x38\x29\x77\x10\ +\x7e\xb8\xbe\xba\x63\xdc\xe7\x70\x63\x5b\xa5\xf9\xa1\xc3\xdb\x2c\ +\x84\x9f\x60\x19\x46\x8f\x2e\x61\xb2\x78\x16\x46\xd0\x72\xf6\x69\ +\x58\x0d\xc6\xff\xd7\xe4\xcc\x20\x1f\xd4\x65\x3e\x40\xa4\xa9\x91\ +\x98\x52\x17\x69\x08\x2a\x53\xc4\xc5\x90\x81\x5b\x99\x4f\xa0\x9f\ +\x13\x26\xa8\x1e\x8d\x16\x54\xe1\xdb\x37\xd7\x8b\xe9\xbb\xef\x11\ +\xbe\x3a\x62\xff\x33\xe1\xbb\x59\xf2\x63\x01\x16\xc3\x00\x6f\x3d\ +\x01\x35\x2a\x89\x94\xae\xb8\xa1\x1b\xc0\x9e\xef\x51\x58\xa7\x05\ +\x37\x52\xfb\x0c\x01\x04\x6a\xd4\xc3\x3e\x24\x02\x84\x5f\x28\xe1\ +\xfd\x0a\x3c\x42\x4a\x25\x0d\xf1\xb9\x81\xf4\x10\xc4\xd0\x31\x39\ +\x57\x45\xdc\xdd\x21\xdd\xe7\xfe\xff\x25\xfd\x35\x39\xf1\xe2\xba\ +\x1c\x16\xd1\x2b\xbc\x5c\x97\xe2\xf5\x7d\xe5\xcf\x95\x22\xae\x77\ +\xf1\x81\xdb\xa1\x95\x7f\x8b\x3b\xff\x93\xae\xbb\xce\xfb\xc1\xce\ +\xde\xb9\xd0\x6d\x89\x9c\xbe\x58\xde\x7b\xec\x69\x64\xb5\xef\xb0\ +\x45\xb3\x61\x4a\x06\xdf\x11\xd1\xc5\x69\x0c\xdd\x54\x5c\x7b\x89\ +\xf0\x5b\xe9\x5e\xe8\x75\xb4\x7e\xf7\xe4\x61\x8f\xc0\x37\x70\x2d\ +\x18\x26\x30\xd5\x3e\xfe\x0c\xd9\x90\xaa\x2f\xbc\x6a\xe4\x3a\xaf\ +\xdc\x6d\x1e\x0b\xea\x07\xf0\x4c\x28\x65\x42\x28\xff\xf2\xb1\xa3\ +\xa0\x14\x69\x29\xb0\xd1\x3e\xc7\x08\x2e\xfe\x46\xc0\x8d\x7e\x3c\ +\x2f\x6f\x97\x78\x73\x59\xf8\xd6\x5c\xa3\xb0\x1a\x68\xaa\x5f\x55\ +\xea\x75\x3e\xfc\x37\x95\xfa\x45\x82\x50\x82\x88\x14\x60\xad\x0f\ +\x9d\xd8\x0d\x5a\x4d\xbc\xc8\x23\x14\x41\xeb\x53\xc2\xe7\x88\x53\ +\x2a\xa4\xf1\x88\x44\x12\x4b\x0c\x20\x2a\x91\x60\x82\x13\x31\x0a\ +\xc3\x90\x12\xb0\x80\x51\xd8\xcf\xfc\x00\xd6\x2e\x43\x41\x38\xf1\ +\x60\x9e\x1b\x2a\xb9\x02\x98\x42\x4c\x52\xa9\xdc\xae\xc7\x39\x37\ +\xda\xf8\x81\x42\x70\x77\xe2\x90\x9b\x84\xc3\x10\x60\x4a\x69\xa0\ +\x13\x30\xf8\x15\x36\x7c\x1c\xe8\xf4\x04\xb0\x13\x18\x0a\x71\xe2\ +\xee\x9c\x0c\xae\x08\x90\xc1\x6e\x24\x80\x22\x46\xdc\x86\xc7\x05\ +\x61\xc6\x0b\x40\x00\xe6\xd0\xca\x81\x4c\x81\x1e\x42\xbd\x00\x8e\ +\xae\x28\xd6\xcc\x87\xf9\x03\x63\x81\xb1\x31\x90\x53\x02\x19\xca\ +\x09\xe3\x2e\x3f\x91\xa4\xb0\x9a\x52\x27\x0f\x1a\x9a\x96\xc4\x0f\ +\x34\x14\x95\x31\x1c\xb8\x05\x94\x08\x07\x35\x7e\xe0\x26\x96\x21\ +\xd2\x9d\x05\x58\x30\x1c\x10\x5c\xc1\xc0\xb9\x84\x28\x3a\x0e\x7c\ +\x1e\x69\x22\x66\xf0\xbf\x6e\xdf\x34\x9b\xcb\xfa\xdb\x5d\xc5\xd7\ +\x0f\x77\x73\x77\xf7\x79\xb8\xfb\x37\x54\x09\xba\x52\ \x00\x00\x07\xc4\ \x00\ \x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\ @@ -10317,6 +10443,575 @@ qt_resource_data = "\ \xf7\x89\x07\x56\x32\x89\xfb\x7b\xed\x20\xe4\xe0\xe3\xe7\x3f\x65\ \x87\xd9\x74\x75\x77\x33\x33\x21\xe1\xee\xe6\xbf\x41\x63\xea\xe4\ \ +\x00\x00\x11\xcb\ +\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\x78\x6c\x69\x6e\x6b\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\x78\x6c\x69\x6e\x6b\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\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\x39\x38\ +\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x76\ +\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\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\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\x38\x38\ +\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\ +\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x50\x61\x72\ +\x74\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\x6e\x73\ +\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x31\x2e\x31\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\x39\ +\x38\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x37\x31\x62\x32\ +\x66\x38\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x33\x38\x36\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x32\x37\x39\x35\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\ +\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x38\x35\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\ +\x36\x30\x32\x38\x34\x35\x39\x2c\x31\x2e\x30\x34\x37\x31\x36\x33\ +\x39\x2c\x2d\x31\x2e\x39\x37\x39\x34\x30\x32\x31\x2c\x31\x2e\x31\ +\x33\x39\x35\x32\x39\x35\x2c\x31\x32\x37\x2e\x39\x35\x38\x38\x2c\ +\x2d\x37\x34\x2e\x34\x35\x36\x39\x30\x37\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x33\x31\ +\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\x37\x34\ +\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\ +\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\ +\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\ +\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\ +\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\ +\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\ +\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x32\x39\x38\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\ +\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x30\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\ +\x35\x38\x30\x31\x39\x34\x32\x31\x2c\x31\x2e\x30\x30\x37\x38\x31\ +\x37\x31\x2c\x2d\x31\x2e\x39\x30\x35\x30\x32\x36\x39\x2c\x31\x2e\ +\x30\x39\x36\x37\x31\x32\x31\x2c\x35\x39\x2e\x32\x38\x36\x35\x31\ +\x32\x2c\x2d\x31\x39\x37\x2e\x38\x31\x37\x34\x37\x29\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\ +\x38\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\ +\x33\x31\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\ +\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\ +\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\ +\x20\x3c\x2f\x64\x65\x66\x73\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\x35\x2e\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x78\x3d\x22\x31\x37\x2e\x39\x33\x33\x34\x33\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\ +\x31\x39\x2e\x33\x33\x32\x32\x37\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\x74\x72\ +\x75\x65\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\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\ +\x72\x75\x65\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\x32\x38\x30\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\x37\x37\x37\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\x30\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\x30\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\x32\x39\x38\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\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\ +\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\x65\x72\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\x3e\x0a\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\ +\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\ +\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x38\x32\x33\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x32\x38\x2e\x37\x30\x36\x30\x36\x31\ +\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\x39\x2e\x36\x33\x36\ +\x31\x36\x39\x37\x2c\x31\x36\x2e\x38\x38\x35\x39\x36\x39\x20\x33\ +\x37\x2e\x39\x36\x35\x30\x36\x35\x2c\x32\x30\x2e\x37\x30\x38\x38\ +\x30\x39\x20\x33\x37\x2e\x32\x36\x38\x36\x38\x33\x2c\x35\x35\x2e\ +\x34\x37\x38\x30\x31\x35\x20\x35\x33\x2e\x38\x37\x39\x2c\x34\x34\ +\x2e\x39\x34\x35\x33\x34\x37\x20\x35\x34\x2e\x34\x33\x33\x32\x33\ +\x32\x2c\x31\x31\x2e\x38\x35\x32\x34\x39\x34\x20\x32\x38\x2e\x37\ +\x30\x36\x30\x36\x31\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\ +\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x62\x65\x76\x65\x6c\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\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\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\x64\x61\x73\x68\x6f\x66\x66\ +\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\ +\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\ +\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\ +\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\ +\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\ +\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x33\x38\x2e\x32\x30\x35\x31\ +\x31\x33\x2c\x32\x30\x2e\x31\x39\x37\x32\x38\x20\x35\x34\x2e\x33\ +\x30\x32\x36\x32\x31\x2c\x31\x32\x2e\x31\x30\x34\x34\x33\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x30\x37\x36\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x6d\x69\x74\x65\x72\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\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\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\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\ +\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\ +\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\ +\x3d\x22\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x38\x2e\x38\x37\x35\x32\ +\x35\x36\x39\x2c\x31\x36\x2e\x39\x31\x34\x38\x35\x31\x20\x32\x39\ +\x2e\x35\x35\x34\x39\x36\x38\x31\x2c\x33\x2e\x32\x33\x39\x31\x35\ +\x38\x20\x30\x2c\x33\x35\x2e\x31\x30\x36\x35\x37\x35\x20\x4c\x20\ +\x38\x2e\x34\x37\x35\x38\x36\x2c\x35\x30\x2e\x33\x38\x36\x31\x30\ +\x31\x20\x38\x2e\x38\x37\x35\x32\x35\x36\x39\x2c\x31\x36\x2e\x39\ +\x31\x34\x38\x35\x31\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\ +\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x34\x65\x30\ +\x34\x30\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ +\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\x6c\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\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\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\x64\ +\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\ +\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\ +\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\ +\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\ +\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\ +\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\ +\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\ +\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x11\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\x36\x34\ +\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\ +\x34\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x33\ +\x30\x35\x32\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\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\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\ +\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x4d\ +\x65\x73\x68\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\ +\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\ +\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\ +\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\ +\x33\x30\x35\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\ +\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\ +\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\ +\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x30\x36\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\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\x35\x2e\x34\x30\x34\x31\x39\x39\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x33\ +\x38\x2e\x31\x39\x37\x39\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x30\x2e\x30\ +\x35\x37\x36\x32\x36\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\x67\x33\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\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\x70\x78\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\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\x32\x38\ +\x30\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\ +\x37\x37\x37\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\x30\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\x30\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\x33\x30\ +\x35\x37\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\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\ +\x3d\x22\x4c\x61\x79\x65\x72\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\x3e\x0a\x20\x20\x20\x20\ +\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\ +\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\ +\x2e\x32\x31\x30\x39\x35\x35\x36\x2c\x30\x2e\x39\x37\x37\x34\x39\ +\x35\x37\x2c\x30\x2e\x38\x38\x33\x38\x35\x32\x34\x2c\x30\x2e\x31\ +\x39\x30\x37\x34\x36\x32\x2c\x2d\x38\x32\x2e\x30\x32\x32\x33\x36\ +\x32\x2c\x2d\x31\x35\x38\x2e\x30\x32\x30\x35\x35\x29\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\ +\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x63\x63\ +\x63\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x36\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x38\x34\ +\x2e\x30\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\ +\x20\x43\x20\x31\x38\x31\x2e\x32\x32\x36\x37\x35\x2c\x31\x34\x35\ +\x2e\x34\x30\x31\x35\x37\x20\x31\x35\x36\x2e\x32\x30\x31\x31\x36\ +\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x31\x35\x36\x2e\x32\ +\x30\x31\x31\x36\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x4c\ +\x20\x31\x34\x34\x2e\x30\x31\x31\x34\x35\x2c\x31\x34\x39\x2e\x39\ +\x30\x32\x37\x39\x20\x4c\x20\x31\x34\x35\x2e\x36\x37\x38\x37\x39\ +\x2c\x31\x36\x33\x2e\x38\x30\x35\x34\x37\x20\x4c\x20\x31\x35\x39\ +\x2e\x38\x34\x36\x39\x32\x2c\x31\x37\x32\x2e\x39\x30\x37\x36\x37\ +\x20\x4c\x20\x31\x34\x38\x2e\x32\x38\x33\x30\x31\x2c\x31\x38\x34\ +\x2e\x37\x35\x39\x32\x34\x20\x4c\x20\x31\x33\x34\x2e\x36\x35\x35\ +\x32\x2c\x31\x37\x30\x2e\x36\x33\x33\x36\x34\x20\x4c\x20\x31\x36\ +\x34\x2e\x39\x39\x34\x37\x2c\x31\x38\x33\x2e\x32\x39\x38\x36\x34\ +\x20\x4c\x20\x31\x37\x34\x2e\x32\x30\x35\x31\x38\x2c\x31\x39\x34\ +\x2e\x30\x34\x38\x36\x34\x20\x4c\x20\x31\x38\x34\x2e\x36\x36\x34\ +\x36\x35\x2c\x31\x38\x30\x2e\x36\x38\x34\x34\x34\x20\x4c\x20\x31\ +\x36\x39\x2e\x34\x31\x32\x36\x34\x2c\x31\x37\x30\x2e\x32\x38\x31\ +\x34\x35\x20\x4c\x20\x31\x37\x30\x2e\x30\x33\x37\x34\x34\x2c\x31\ +\x35\x36\x2e\x33\x37\x38\x37\x36\x20\x4c\x20\x31\x38\x34\x2e\x30\ +\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x30\ +\x36\x35\x36\x34\x32\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\ +\x6c\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\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\ +\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\x35\x36\x2e\x36\x32\ +\x35\x20\x4c\x20\x31\x34\x35\x2c\x31\x35\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\ +\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\ +\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\ +\x6e\x6f\x6e\x65\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\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\ +\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x3b\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\ +\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x61\x74\x68\x33\x38\x37\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\ +\x37\x30\x2e\x37\x35\x20\x4c\x20\x31\x34\x36\x2e\x36\x32\x35\x2c\ +\x31\x36\x33\x2e\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x2e\x31\x35\ +\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\ +\x72\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\ +\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\x6e\x6f\x6e\x65\x3b\ +\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\x6e\x6f\x6e\x65\x3b\ +\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\x6e\x6f\x6e\x65\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\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x76\ +\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\ +\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\ +\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\ +\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x70\x61\x74\x68\x33\x38\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\ +\x32\x35\x20\x4c\x20\x31\x33\x35\x2e\x37\x35\x2c\x31\x37\x31\x2e\ +\x33\x37\x35\x20\x4c\x20\x31\x34\x38\x2e\x37\x35\x2c\x31\x38\x36\ +\x20\x4c\x20\x31\x37\x34\x2e\x36\x32\x35\x2c\x31\x39\x36\x20\x4c\ +\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\x32\x35\x20\x7a\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\ +\x37\x66\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\ +\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\ +\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\ +\x74\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\ +\x64\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\ +\x64\x3a\x6e\x6f\x6e\x65\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\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\ +\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\ +\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\ +\x73\x3d\x22\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x38\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x35\x38\x2e\ +\x37\x35\x2c\x31\x37\x32\x2e\x37\x35\x20\x4c\x20\x31\x38\x34\x2e\ +\x37\x35\x2c\x31\x38\x31\x2e\x31\x32\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x6e\x6f\x6e\x65\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\ +\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\ +\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\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\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\ +\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\ \x00\x00\x06\xdd\ \x00\ \x00\x22\x8f\x78\x9c\xed\x59\xdb\x6e\xe3\x46\x12\x7d\xf7\x57\xf4\ @@ -10577,6 +11272,10 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x4d\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\ \x00\x67\ +\x00\x0e\ +\x0a\xa2\x3b\x27\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ \x07\x4a\x92\xc7\ \x00\x41\ @@ -10633,6 +11332,16 @@ qt_resource_name = "\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\ \x00\x67\ +\x00\x13\ +\x06\x32\xe8\x47\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x48\x00\x6f\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x73\ +\x00\x76\x00\x67\ +\x00\x1a\ +\x0e\x5f\x91\x67\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x4e\x00\x6f\x00\x6e\x00\x4d\x00\x61\x00\x6e\ +\x00\x69\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x14\ \x02\xc8\x0e\x47\ \x00\x41\ @@ -10642,8 +11351,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x15\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x32\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1d\x00\x00\x00\x15\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\ \x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\ \x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\ @@ -10662,29 +11371,32 @@ qt_resource_struct = "\ \x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x6e\ \x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x7e\ \x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x05\x4c\x00\x01\x00\x00\x00\x01\x00\x02\x4b\x1c\ -\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x02\x0d\x4d\ +\x00\x00\x05\x6e\x00\x01\x00\x00\x00\x01\x00\x02\x52\xde\ +\x00\x00\x04\x7a\x00\x00\x00\x00\x00\x01\x00\x02\x15\x0f\ \x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x13\ -\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x42\ -\x00\x00\x05\x1e\x00\x01\x00\x00\x00\x01\x00\x02\x44\x4a\ +\x00\x00\x06\x9e\x00\x01\x00\x00\x00\x01\x00\x02\xa9\x48\ +\x00\x00\x05\x40\x00\x01\x00\x00\x00\x01\x00\x02\x4c\x0c\ \x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x82\ \x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x09\ \x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x01\x9c\x71\ -\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x02\x27\x27\ -\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\ +\x00\x00\x06\x38\x00\x00\x00\x00\x00\x01\x00\x02\x86\x04\ +\x00\x00\x04\xba\x00\x00\x00\x00\x00\x01\x00\x02\x2e\xe9\ +\x00\x00\x04\x5a\x00\x01\x00\x00\x00\x01\x00\x02\x0d\x47\ \x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\ -\x00\x00\x05\xec\x00\x01\x00\x00\x00\x01\x00\x02\x76\xad\ +\x00\x00\x06\x0e\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x6f\ \x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xda\ \x00\x00\x02\x4e\x00\x01\x00\x00\x00\x01\x00\x01\x82\xd0\ \x00\x00\x02\x78\x00\x01\x00\x00\x00\x01\x00\x01\x8c\x78\ -\x00\x00\x04\xc8\x00\x01\x00\x00\x00\x01\x00\x02\x36\x95\ +\x00\x00\x04\xea\x00\x01\x00\x00\x00\x01\x00\x02\x3e\x57\ \x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x04\ -\x00\x00\x04\xf6\x00\x01\x00\x00\x00\x01\x00\x02\x3b\xe5\ -\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x02\x51\xf6\ +\x00\x00\x05\x18\x00\x01\x00\x00\x00\x01\x00\x02\x43\xa7\ +\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\ +\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x02\x59\xb8\ \x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x20\ -\x00\x00\x05\xc0\x00\x01\x00\x00\x00\x01\x00\x02\x6e\x33\ -\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x63\xf9\ -\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x02\x21\x0f\ +\x00\x00\x05\xe2\x00\x01\x00\x00\x00\x01\x00\x02\x75\xf5\ +\x00\x00\x05\xc2\x00\x01\x00\x00\x00\x01\x00\x02\x6b\xbb\ +\x00\x00\x04\x9a\x00\x01\x00\x00\x00\x01\x00\x02\x28\xd1\ +\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x02\x97\xd3\ \x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x01\xa4\xb3\ \x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x08\ \x00\x00\x02\x1a\x00\x01\x00\x00\x00\x01\x00\x01\x7b\x80\ diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index bd0feb54e..75d3a9b49 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -67,6 +67,7 @@ class ArchWorkbench(Workbench): self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape", "Arch_CloseHoles"] + self.calctools = ["Arch_Check"] # draft tools self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", @@ -86,6 +87,7 @@ class ArchWorkbench(Workbench): self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools) self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools) + self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Calculation Tools"))],self.calctools) self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools) self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools) self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools) diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am index e30ec2a6a..89d59669f 100644 --- a/src/Mod/Arch/Makefile.am +++ b/src/Mod/Arch/Makefile.am @@ -62,6 +62,9 @@ EXTRA_DIST = \ Resources/icons/Arch_Axis.svg \ Resources/icons/Arch_Axis_Tree.svg \ Resources/icons/Arch_Roof.svg \ - Resources/icons/Arch_Roof_Tree.svg + Resources/icons/Arch_Roof_Tree.svg \ + Resources/icons/Arch_CloseHoles.svg \ + Resources/icons/Arch_Check.svg \ + Resources/icons/Arch_SelectNonManifold.svg \ Resources/ui/archprefs-base.ui diff --git a/src/Mod/Arch/Resources/Arch.qrc b/src/Mod/Arch/Resources/Arch.qrc index b3667134c..63e079000 100644 --- a/src/Mod/Arch/Resources/Arch.qrc +++ b/src/Mod/Arch/Resources/Arch.qrc @@ -26,6 +26,9 @@ icons/Arch_Axis_Tree.svg icons/Arch_Roof.svg icons/Arch_Roof_Tree.svg + icons/Arch_CloseHoles.svg + icons/Arch_Check.svg + icons/Arch_SelectNonManifold.svg ui/archprefs-base.ui translations/Arch_af.qm translations/Arch_de.qm diff --git a/src/Mod/Arch/Resources/icons/Arch_Check.svg b/src/Mod/Arch/Resources/icons/Arch_Check.svg new file mode 100644 index 000000000..61be1a1b4 --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_Check.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg new file mode 100644 index 000000000..c0fcbf1dd --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg new file mode 100644 index 000000000..eb39166fa --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 200e9fbbd..0f4a0f7a8 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -278,6 +278,15 @@ def getGroupContents(objectslist,walls=False): newlist.append(o) return newlist +def removeHidden(objectslist): + """removeHidden(objectslist): removes hidden objects from the list""" + newlist = objectslist[:] + for o in objectslist: + if o.ViewObject: + if not o.ViewObject.isVisible(): + newlist.remove(o) + return newlist + def printShape(shape): """prints detailed information of a shape""" print "solids: ", len(shape.Solids) From 625151067c63041e979ecf82a2dba49b5baf1aee Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 22 Jul 2012 20:01:45 -0300 Subject: [PATCH 07/26] 0000802: Draft Scale --- src/Mod/Draft/Draft.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 0f4a0f7a8..8bbee59a4 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -356,6 +356,8 @@ def formatObject(target,origin=None): setattr(obrep,p,val) if matchrep.DisplayMode in obrep.listDisplayModes(): obrep.DisplayMode = matchrep.DisplayMode + if hasattr(matchrep,"DiffuseColor") and hasattr(obrep,"DiffuseColor"): + obrep.DiffuseColor = matchrep.DiffuseColor def getSelection(): "getSelection(): returns the current FreeCAD selection" @@ -1066,7 +1068,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy for o in objectslist: o.ViewObject.hide() if gui: - _ViewProviderDraftPart(obj.ViewObject) + _ViewProviderClone(obj.ViewObject) formatObject(obj,objectslist[-1]) select(obj) return obj From acb1205d5d9a477ecf8a93449d5cc5cce27b1f09 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 28 Jul 2012 16:01:46 +0200 Subject: [PATCH 08/26] Allow also other file types for group icons in preference page when size is 96x96 --- src/Gui/DlgPreferencesImp.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index 1e52e00f4..e841e9b18 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -25,6 +25,7 @@ #ifndef _PreComp_ # include # include +# include # include #endif @@ -89,6 +90,15 @@ void DlgPreferencesImp::setupPages() } fileName = std::string("preferences-") + fileName; QPixmap icon = Gui::BitmapFactory().pixmapFromSvg(fileName.c_str(), QSize(96,96)); + if (icon.isNull()) { + icon = Gui::BitmapFactory().pixmap(fileName.c_str()); + if (icon.isNull()) { + qWarning() << "No group icon found for " << fileName.c_str(); + } + else if (icon.size() != QSize(96,96)) { + qWarning() << "Group icon for " << fileName.c_str() << " is not of size 96x96"; + } + } item->setIcon(icon); item->setTextAlignment(Qt::AlignHCenter); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); From 78cbe72dee21e6176bb09dd8a871f1ead410c052 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 31 Jul 2012 11:23:36 +0200 Subject: [PATCH 09/26] 0000807: Image plane duplication --- src/App/Document.cpp | 8 ++++---- src/App/PropertyFile.cpp | 13 ++++++++----- src/Gui/CommandDoc.cpp | 10 +++++----- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index cba2e757b..86b9ef79c 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1516,10 +1516,10 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::mapgetNameInDocument(); if (!keepdigitsatend) { - size_t lastpos = objname.length()-1; - while (objname[lastpos] >= 48 && objname[lastpos] <= 57) - lastpos--; - objname = objname.substr(0, lastpos+1); + size_t lastpos = objname.length()-1; + while (objname[lastpos] >= 48 && objname[lastpos] <= 57) + lastpos--; + objname = objname.substr(0, lastpos+1); } DocumentObject* copy = addObject(obj->getTypeId().getName(),objname.c_str()); if (!copy) return 0; diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp index 52278ea99..934023272 100644 --- a/src/App/PropertyFile.cpp +++ b/src/App/PropertyFile.cpp @@ -346,10 +346,10 @@ void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader) Property *PropertyFileIncluded::Copy(void) const { - PropertyFileIncluded *p= new PropertyFileIncluded(); + PropertyFileIncluded *prop = new PropertyFileIncluded(); // remember the base name - p->_BaseFileName = _BaseFileName; + prop->_BaseFileName = _BaseFileName; if (!_cValue.empty()) { Base::FileInfo file(_cValue); @@ -361,11 +361,11 @@ Property *PropertyFileIncluded::Copy(void) const bool done = file.renameFile(NewName.filePath().c_str()); assert(done); // remember the new name for the Undo - Base::Console().Log("Copy this=%p Before=%s After=%s\n",p,p->_cValue.c_str(),NewName.filePath().c_str()); - p->_cValue = NewName.filePath().c_str(); + Base::Console().Log("Copy this=%p Before=%s After=%s\n",prop,prop->_cValue.c_str(),NewName.filePath().c_str()); + prop->_cValue = NewName.filePath().c_str(); } - return p; + return prop; } void PropertyFileIncluded::Paste(const Property &from) @@ -376,6 +376,9 @@ void PropertyFileIncluded::Paste(const Property &from) file.deleteFile(); const PropertyFileIncluded &fileInc = dynamic_cast(from); + // set the base name + _BaseFileName = fileInc._BaseFileName; + if (!fileInc._cValue.empty()) { // move the saved files back in place Base::FileInfo NewFile(fileInc._cValue); diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 6d3b01a34..5586fff6f 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -894,9 +894,9 @@ bool StdCmdPaste::isActive(void) return getMainWindow()->canInsertFromMimeData(mime); } -DEF_STD_CMD_A(StdCmdDDuplicateSelection); +DEF_STD_CMD_A(StdCmdDuplicateSelection); -StdCmdDDuplicateSelection::StdCmdDDuplicateSelection() +StdCmdDuplicateSelection::StdCmdDuplicateSelection() :Command("Std_DuplicateSelection") { sAppModule = "Edit"; @@ -907,7 +907,7 @@ StdCmdDDuplicateSelection::StdCmdDDuplicateSelection() sStatusTip = QT_TR_NOOP("Put duplicates of the selected objects to the active document"); } -void StdCmdDDuplicateSelection::activated(int iMsg) +void StdCmdDuplicateSelection::activated(int iMsg) { App::Document* act = App::GetApplication().getActiveDocument(); if (!act) @@ -964,7 +964,7 @@ void StdCmdDDuplicateSelection::activated(int iMsg) } } -bool StdCmdDDuplicateSelection::isActive(void) +bool StdCmdDuplicateSelection::isActive(void) { return Gui::Selection().hasSelection(); } @@ -1275,7 +1275,7 @@ void CreateDocCommands(void) rcCmdMgr.addCommand(new StdCmdCut()); rcCmdMgr.addCommand(new StdCmdCopy()); rcCmdMgr.addCommand(new StdCmdPaste()); - rcCmdMgr.addCommand(new StdCmdDDuplicateSelection()); + rcCmdMgr.addCommand(new StdCmdDuplicateSelection()); rcCmdMgr.addCommand(new StdCmdSelectAll()); rcCmdMgr.addCommand(new StdCmdDelete()); rcCmdMgr.addCommand(new StdCmdRefresh()); From bdc926c7045c61a4f9d003d5fc4a1472c67f3e02 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 1 Aug 2012 18:15:34 -0300 Subject: [PATCH 10/26] Arch: improvements to section plane wireframe rendering --- src/Mod/Arch/ArchCommands.py | 46 ++++++++++++++++++++++++++++++++ src/Mod/Arch/ArchSectionPlane.py | 31 +++++++++++++++------ src/Mod/Arch/ArchVRM.py | 41 ++++------------------------ 3 files changed, 74 insertions(+), 44 deletions(-) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index f0754afa2..8ee62c546 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -262,6 +262,52 @@ def closeHole(shape): else: return solid +def getCutVolume(cutplane,shapes): + """getCutVolume(cutplane,shapes): returns a cut face and a cut volume + from the given shapes and the given cutting plane""" + import Part + placement = FreeCAD.Placement(cutplane.Placement) + # building boundbox + bb = shapes[0].BoundBox + for sh in shapes[1:]: + bb.add(sh.BoundBox) + bb.enlarge(1) + um = vm = wm = 0 + ax = placement.Rotation.multVec(FreeCAD.Vector(0,0,1)) + u = placement.Rotation.multVec(FreeCAD.Vector(1,0,0)) + v = placement.Rotation.multVec(FreeCAD.Vector(0,1,0)) + if not bb.isCutPlane(placement.Base,ax): + print "No objects are cut by the plane" + return None,None + else: + corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin), + FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin), + FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin), + FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin), + FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax), + FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax), + FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax), + FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)] + for c in corners: + dv = c.sub(placement.Base) + um1 = DraftVecUtils.project(dv,u).Length + um = max(um,um1) + vm1 = DraftVecUtils.project(dv,v).Length + vm = max(vm,vm1) + wm1 = DraftVecUtils.project(dv,ax).Length + wm = max(wm,wm1) + p1 = FreeCAD.Vector(-um,vm,0) + p2 = FreeCAD.Vector(um,vm,0) + p3 = FreeCAD.Vector(um,-vm,0) + p4 = FreeCAD.Vector(-um,-vm,0) + cutface = Part.makePolygon([p1,p2,p3,p4,p1]) + cutface = Part.Face(cutface) + cutface.Placement = placement + cutnormal = DraftVecUtils.scaleTo(ax,wm) + cutvolume = cutface.extrude(cutnormal) + return cutface,cutvolume + + def meshToShape(obj,mark=True): '''meshToShape(object,[mark]): turns a mesh into a shape, joining coplanar facets. If mark is True (default), non-solid objects will be marked in red''' diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 86a346357..97fe2023d 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -186,7 +186,7 @@ class _ArchDrawingView: obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing View","The rendering mode to use") obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The line width of the rendered objects") obj.RenderingMode = ["Solid","Wireframe"] - obj.RenderingMode = "Solid" + obj.RenderingMode = "Wireframe" obj.LineWidth = 0.35 obj.Proxy = self self.Type = "DrawingView" @@ -224,18 +224,33 @@ class _ArchDrawingView: else: # render using the Drawing module - import Drawing + import Drawing, Part shapes = [] + p = FreeCAD.Placement(obj.Source.Placement) + direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1)) for o in objs: if o.isDerivedFrom("Part::Feature"): - shapes.append(o.Shape) - if shapes: - base = shapes.pop() - for sh in shapes: - base = base.fuse(sh) - svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction)) + shapes.extend(o.Shape.Solids) + cutface,cutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes) + if cutvolume: + nsh = [] + for sh in shapes: + for sol in sh.Solids: + c = sol.cut(cutvolume) + nsh.append(c) + shapes = nsh + base = Part.makeCompound(shapes) + #if shapes: + # base = shapes.pop().copy() + #for sh in shapes: + # try: + # base = base.fuse(sh) + # except: + # print "unable to fuse, passing..." + svgf = Drawing.projectToSVG(base,direction) if svgf: svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"') + svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"') svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px') svg += svgf diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py index 91edfed56..b54b0446f 100644 --- a/src/Mod/Arch/ArchVRM.py +++ b/src/Mod/Arch/ArchVRM.py @@ -228,42 +228,11 @@ class Renderer: if DEBUG: print "No objects to make sections" else: fill = (1.0,1.0,1.0,1.0) - placement = FreeCAD.Placement(cutplane.Placement) - - # building boundbox - bb = self.shapes[0][0].BoundBox - for sh in self.shapes[1:]: - bb.add(sh[0].BoundBox) - bb.enlarge(1) - um = vm = wm = 0 - if not bb.isCutPlane(placement.Base,self.wp.axis): - if DEBUG: print "No objects are cut by the plane" - else: - corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin), - FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin), - FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin), - FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin), - FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax), - FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax), - FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax), - FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)] - for c in corners: - dv = c.sub(placement.Base) - um1 = DraftVecUtils.project(dv,self.wp.u).Length - um = max(um,um1) - vm1 = DraftVecUtils.project(dv,self.wp.v).Length - vm = max(vm,vm1) - wm1 = DraftVecUtils.project(dv,self.wp.axis).Length - wm = max(wm,wm1) - p1 = FreeCAD.Vector(-um,vm,0) - p2 = FreeCAD.Vector(um,vm,0) - p3 = FreeCAD.Vector(um,-vm,0) - p4 = FreeCAD.Vector(-um,-vm,0) - cutface = Part.makePolygon([p1,p2,p3,p4,p1]) - cutface = Part.Face(cutface) - cutface.Placement = placement - cutnormal = DraftVecUtils.scaleTo(self.wp.axis,wm) - cutvolume = cutface.extrude(cutnormal) + shps = [] + for sh in self.shapes: + shps.append(sh[0]) + cutface,cutvolume = ArchCommands.getCutVolume(cutplane,shps) + if cutface and cutvolume: shapes = [] faces = [] sections = [] From 88ea348623a17a09010228f8d4eb180ca7f084fe Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Wed, 1 Aug 2012 18:53:27 -0300 Subject: [PATCH 11/26] 0000802: Fixed again --- src/Mod/Draft/Draft.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 8bbee59a4..d9e4d0a99 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1660,10 +1660,10 @@ def clone(obj,delta=None): _Clone(cl) if gui: _ViewProviderClone(cl.ViewObject) - formatObject(cl,obj[0]) cl.Objects = obj if delta: cl.Placement.move(delta) + formatObject(cl,obj[0]) return cl def heal(objlist=None,delete=True,reparent=True): From 80c9086fc334429700466e2fe3c160cf10089c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 29 Jun 2012 13:22:14 +0200 Subject: [PATCH 12/26] Started ship simulations workbench --- src/Mod/Ship/CMakeLists.txt | 23 +- src/Mod/Ship/Icons/Sim.xpm | 336 ++++ src/Mod/Ship/Icons/SimCreateIco.png | Bin 0 -> 14469 bytes src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 0 -> 51656 bytes src/Mod/Ship/Icons/SimCreateIco.xpm | 2265 +++++++++++++++++++++++++++ src/Mod/Ship/Icons/SimIco.xcf | Bin 0 -> 47149 bytes src/Mod/Ship/InitGui.py | 8 +- src/Mod/Ship/Makefile.am | 9 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/SimInstance.py | 617 ++++++++ src/Mod/Ship/simCreate/TaskPanel.py | 125 ++ src/Mod/Ship/simCreate/TaskPanel.ui | 182 +++ src/Mod/Ship/simCreate/__init__.py | 36 + 13 files changed, 3610 insertions(+), 4 deletions(-) create mode 100644 src/Mod/Ship/Icons/Sim.xpm create mode 100644 src/Mod/Ship/Icons/SimCreateIco.png create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xpm create mode 100644 src/Mod/Ship/Icons/SimIco.xcf create mode 100644 src/Mod/Ship/SimInstance.py create mode 100644 src/Mod/Ship/simCreate/TaskPanel.py create mode 100644 src/Mod/Ship/simCreate/TaskPanel.ui create mode 100644 src/Mod/Ship/simCreate/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 006226966..fc71cb055 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -2,6 +2,7 @@ SET(ShipMain_SRCS InitGui.py ShipGui.py Instance.py + SimInstance.py TankInstance.py ) SOURCE_GROUP("" FILES ${ShipMain_SRCS}) @@ -36,6 +37,11 @@ SET(ShipIcons_SRCS Icons/Weight.png Icons/Weight.xcf Icons/Weight.xpm + Icons/SimIco.xcf + Icons/Sim.xpm + Icons/SimCreateIco.png + Icons/SimCreateIco.xcf + Icons/SimCreateIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -121,9 +127,16 @@ SET(ShipGZ_SRCS tankGZ/TaskPanel.py tankGZ/TaskPanel.ui ) -SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS}) +SOURCE_GROUP("shipgz" FILES ${ShipGZ_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS}) +SET(SimCreate_SRCS + simCreate/__init__.py + simCreate/TaskPanel.py + simCreate/TaskPanel.ui +) +SOURCE_GROUP("simcreate" FILES ${SimCreate_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -197,6 +210,12 @@ INSTALL( DESTINATION Mod/Ship/tankGZ ) +INSTALL( + FILES + ${SimCreate_SRCS} + DESTINATION + Mod/Ship/simCreate +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/Sim.xpm b/src/Mod/Ship/Icons/Sim.xpm new file mode 100644 index 000000000..effc4026f --- /dev/null +++ b/src/Mod/Ship/Icons/Sim.xpm @@ -0,0 +1,336 @@ +/* XPM */ +static char * Sim_xpm[] = { +"32 32 301 2", +" c None", +". c #CCCCCC", +"+ c #A9A9A9", +"@ c #989898", +"# c #A1A1A1", +"$ c #C3C3C3", +"% c #C1C0C1", +"& c #BFBFBF", +"* c #A7A7A7", +"= c #808080", +"- c #5C5C5C", +"; c #565655", +"> c #4E4E4E", +", c #676767", +"' c #898989", +") c #B6B5B6", +"! c #BABABA", +"~ c #B9B9B9", +"{ c #A5A5A5", +"] c #7E7E7E", +"^ c #595A59", +"/ c #575656", +"( c #535353", +"_ c #505050", +": c #4D4D4C", +"< c #474747", +"[ c #404040", +"} c #4D4D4D", +"| c #787878", +"1 c #B8B7B8", +"2 c #B6B6B6", +"3 c #888888", +"4 c #7C7C7C", +"5 c #575657", +"6 c #535354", +"7 c #4E4D4E", +"8 c #4A4A4A", +"9 c #444444", +"0 c #414141", +"a c #3E3E3E", +"b c #393938", +"c c #313131", +"d c #393939", +"e c #636363", +"f c #ABABAB", +"g c #B3B3B3", +"h c #848484", +"i c #787979", +"j c #545454", +"k c #515151", +"l c #4B4B4B", +"m c #484748", +"n c #3B3B3B", +"o c #383838", +"p c #353535", +"q c #323232", +"r c #2F2F2E", +"s c #2A2A2A", +"t c #222323", +"u c #252625", +"v c #AFAFAF", +"w c #767676", +"x c #484848", +"y c #454545", +"z c #424242", +"A c #3F3F3E", +"B c #3B3B3C", +"C c #393838", +"D c #2F2F2F", +"E c #2C2C2C", +"F c #292929", +"G c #262626", +"H c #222222", +"I c #1F1F20", +"J c #171716", +"K c #959595", +"L c #747474", +"M c #4E4E4F", +"N c #4C4B4C", +"O c #484849", +"P c #424243", +"Q c #282828", +"R c #525251", +"S c #373737", +"T c #353636", +"U c #333233", +"V c #30302F", +"W c #2C2D2D", +"X c #232323", +"Y c #201F20", +"Z c #1D1D1D", +"` c #151414", +" . c #717272", +".. c #4C4C4C", +"+. c #484949", +"@. c #464545", +"#. c #424343", +"$. c #3A3A3A", +"%. c #5D4A49", +"&. c #7E7E86", +"*. c #56569F", +"=. c #3E3E41", +"-. c #757575", +";. c #575757", +">. c #222221", +",. c #262627", +"'. c #242423", +"). c #212020", +"!. c #1A1A1A", +"~. c #121212", +"{. c #939493", +"]. c #6F6F6F", +"^. c #494949", +"/. c #464646", +"(. c #434343", +"_. c #554545", +":. c #686863", +"<. c #939394", +"[. c #BDBDBD", +"}. c #202021", +"|. c #1E1E1E", +"1. c #171718", +"2. c #0F0F0F", +"3. c #929292", +"4. c #6C6D6D", +"5. c #464746", +"6. c #525F73", +"7. c #444648", +"8. c #3D3D3D", +"9. c #2D2C2A", +"0. c #A1A2A2", +"a. c #AAACAC", +"b. c #A6A7A7", +"c. c #A8AAAA", +"d. c #AFB0B0", +"e. c #777676", +"f. c #9A9A9A", +"g. c #1B1B1B", +"h. c #181818", +"i. c #0C0C0C", +"j. c #909090", +"k. c #6B6A6B", +"l. c #55657E", +"m. c #6990FB", +"n. c #6483CD", +"o. c #5871B2", +"p. c #434E7E", +"q. c #A97C76", +"r. c #AB7777", +"s. c #AC7070", +"t. c #A26565", +"u. c #805C5C", +"v. c #848686", +"w. c #424342", +"x. c #151515", +"y. c #0A0909", +"z. c #8F8F8F", +"A. c #676868", +"B. c #3B3A3A", +"C. c #383738", +"D. c #353534", +"E. c #45525F", +"F. c #6367AC", +"G. c #804682", +"H. c #942A39", +"I. c #991312", +"J. c #540901", +"K. c #393742", +"L. c #1C1C1C", +"M. c #191919", +"N. c #161515", +"O. c #121313", +"P. c #070707", +"Q. c #8D8E8D", +"R. c #656566", +"S. c #3E3F3F", +"T. c #2F2E2F", +"U. c #353838", +"V. c #35496A", +"W. c #3E4D88", +"X. c #354889", +"Y. c #5573D7", +"Z. c #5D80FB", +"`. c #374899", +" + c #293338", +".+ c #101010", +"++ c #0D0D0D", +"@+ c #040404", +"#+ c #8C8C8C", +"$+ c #8B8B8B", +"%+ c #4B4A4B", +"&+ c #303030", +"*+ c #333232", +"=+ c #2F2F30", +"-+ c #232223", +";+ c #1A1919", +">+ c #2E3949", +",+ c #5C7BA3", +"'+ c #36467D", +")+ c #536F93", +"!+ c #0A0A0A", +"~+ c #010101", +"{+ c #C1C1C1", +"]+ c #B8B8B8", +"^+ c #A0A0A0", +"/+ c #3F3F3F", +"(+ c #222122", +"_+ c #202020", +":+ c #161717", +"<+ c #141414", +"[+ c #111011", +"}+ c #0D0E0E", +"|+ c #0B0B0A", +"1+ c #000000", +"2+ c #525252", +"3+ c #686868", +"4+ c #ADADAD", +"5+ c #9E9F9F", +"6+ c #6D6D6D", +"7+ c #3C3C3C", +"8+ c #131414", +"9+ c #111111", +"0+ c #0E0E0E", +"a+ c #0B0B0B", +"b+ c #080708", +"c+ c #050504", +"d+ c #4C4D4C", +"e+ c #4D4C4D", +"f+ c #494A4A", +"g+ c #454444", +"h+ c #9D9D9D", +"i+ c #9E9E9E", +"j+ c #AEAEAE", +"k+ c #BEBEBF", +"l+ c #BEBDBD", +"m+ c #979797", +"n+ c #6A6B6A", +"o+ c #3F3F40", +"p+ c #020202", +"q+ c #030303", +"r+ c #878787", +"s+ c #69696A", +"t+ c #868685", +"u+ c #646464", +"v+ c #474647", +"w+ c #656565", +"x+ c #9E9F9E", +"y+ c #A8A8A8", +"z+ c #AFAFAE", +"A+ c #A4A4A4", +"B+ c #7A7A7A", +"C+ c #969696", +"D+ c #363636", +"E+ c #777776", +"F+ c #8C8D8D", +"G+ c #7D7D7D", +"H+ c #5E5E5E", +"I+ c #4F4F50", +"J+ c #808181", +"K+ c #707070", +"L+ c #909191", +"M+ c #9C9C9C", +"N+ c #787877", +"O+ c #696969", +"P+ c #616161", +"Q+ c #6E6E6E", +"R+ c #7C7B7C", +"S+ c #777677", +"T+ c #6F6E6E", +"U+ c #595959", +"V+ c #717171", +"W+ c #8D8D8D", +"X+ c #515051", +"Y+ c #49494A", +"Z+ c #4B4A4A", +"`+ c #606060", +" @ c #6A6A6A", +".@ c #616162", +"+@ c #6C6D6C", +"@@ c #767777", +"#@ c #727272", +"$@ c #6B6B6B", +"%@ c #828283", +"&@ c #757475", +"*@ c #444545", +"=@ c #565656", +"-@ c #5A595A", +";@ c #666666", +">@ c #878687", +",@ c #8A8A8A", +"'@ c #797979", +")@ c #444344", +"!@ c #7F8080", +"~@ c #737373", +"{@ c #484747", +"]@ c #707170", +"^@ c #7F7F7F", +"/@ c #676867", +"(@ c #4D4C4C", +"_@ c #5F5F5F", +":@ c #434444", +" ", +" ", +" . + ", +" @ # $ % & * ", +" = - ; > , ' ) ! ~ { ", +" ] ^ / ( _ : < [ } | # 1 2 # 3 ", +" 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", +" i j k 7 l m 9 0 a n o p q r s t u < | v ", +" w k > l x y z A B C p q D E F G H I J K ", +" L M N O y P Q R S T U V W F G X Y Z ` K ", +" ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", +" ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", +" 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", +" k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", +" A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", +" R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", +" $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", +" {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", +" k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", +" %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", +" s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", +" E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", +" L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", +" V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", +" ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", +" ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", +" e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", +" - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", +" =@_@O+L ~@#@~@L _ 9 9 :@ ", +" ;.H+ @-._ (. ", +" ", +" "}; diff --git a/src/Mod/Ship/Icons/SimCreateIco.png b/src/Mod/Ship/Icons/SimCreateIco.png new file mode 100644 index 0000000000000000000000000000000000000000..838b46e8bbceacc2d0a0a53dc71b6a84106e6f22 GIT binary patch literal 14469 zcmZu&WmFqov<>dA1&X`7yAxcByE_zuyL)lB;-$D3cXu!D#ohhod++Z{*5t0tnl(9d z&%OJ|-icCCl0iWvKm-5)C~~rrYTz;OzXKi?{Mj#TG7cUfT-9X60o7AP$KWrprt&h9 zfaw3;d#i_(;4=u$vO2B+020=J2LvE12OoSA4kV{21-A~1kB*PjMo%0DKJ^78r45pB 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%0D<<&U}Kdvi(&NLGqjLKO6uED9@v}J>m znL?T446Hjmnd54ko88{>{r}!J&4B^Q9892QGN!e8L_#v|Tc>;a+0sf>-{SFaP`k3JO!u2*6G3OOzLLY# z;c!=;EOz(H^K?zFH;ex;65^Ho();7(SJuh5Pt|ftCu>gAape9;+7jJS^Y@uxm?jzW z#Ifbiqj*icDRwxF)nl9uUv@y|DRFo3W@J@d<@G2ENezN=I z@JXX1Lh7{Y$h%ekS5e&X?t&Mc7Dey6#bE!kJBEs?`y>wIk#Zb6Qqet$p|Q~Ie4yy= z#?e^SC18K@MH&~lOb6Pd*e*lww#&@HSm;)`E4sfQU8PEBv!qk8U+5B6 z?$%WshRK43^Z3xp-90{8xtnPmV^!xE7r0D25IQbX1Y?_|lQ9;$ZHl66dl5ri#(BII zGw90uh0ZZn3yk+x^wQPz{1xX49gS&QqhO@n9YcUAY)VHztNQR2`CnZW8Y=AW93~WsAS!*s^(b zAB=^r%0)$2t~(K_1;)g#VhruaW$a^l8M$AI)lj1$vE{K8~^TerIu8 z{(DvmWKnA2GWCcX#BCF!=o-h!aa)Z0(GcPydhA*unh4%s;4%fXl5NGBJnf6R-Q@-Yig9tBrrb zcsq}U?lQ)EVrWCvVXnIUG%Ns2EnDy|+hv@y2?7(B`8CFNnyR}37P}-pdm1p4X*OX0 zPHq2ujBR515PgiKse`ekS9_Q+)@I*hDaKp)T+yQe#=9k-?(k^c0Unohs&W23nIO@^ zlk#xZvKTr|)fK{cH4QPQi2o#p#)6{Vt}G~-;s<}uSNZo`QjIxKW(=j1z_}>K6XdwZ z6O0$|SoFxpczFzMsJbE;f6Duvuk!DyqzY(dHX`3A4({M!8&mEc&HH5@mt&d7<=FWu z|DH)Ifrrqc60#Q_&STP;yrN+3*{<%`?|hYiPb3xiDs#Y1b7-COcq;by*XH6Ft2)Qn z`6_LgQssXOhD1re%4u+;7$l9s*9hf!yaZ$N51Q{Rj5R)FLmi<*LF@l}8lmVAx*uW` z-4H%Y)m_C{f{{vrrp3L`tq13wF+`;5mSF!L8W!-ef6pTD7F^{FIMm~_5O?6vOdDUv z{s0~e-H#X#)%H`^Pvo()#x$Mt{(>4qbl@taG22y6$0#~~joU8lUmrsoaxU1$pGr7G zSc1Rej;N%~cP1(q>=(L|IH!@M;jz@Xs@sSCn_}pI(0vx8&^G>5-AwF1A4B8vIOL7@ zl3{3~nvMydG$~{<`=P+jvK|p3qo#+9b&niBeVn_uZ(uJv(eF!z?WYhmZ?ckR^nHJvee{B-y6lgEq;nMUV_hlWlInQj-5 z&i>~vxu@W%qzCP<)DcB-4^ottNUzhA6=fd6A>M2|ig$zszevk&eZ#}qt!z<8e&dRl z6)*Bs8WSP%Adm5;6muF=%n%LzmB7n3riitTOJhvDn&L&#R~RqbvG=v{DZFccr3YyP zo1maAjf~;$QE-3h)rwLHdAJ(l#GRu$+Um8&tSKh>JT^bn<8a^jzfYMBPov>x; z?5UH8Y6z(MErZI_;x;Xcnif8RuRI`l(2~3&lDcXA zqNqsFk{pBj4T?T^miK;!y+lmX3>YwP{~6l5e@2?>XALZq2-TU_r#A zAVXBrA?EODv=i}=*}IO@-q_XiqNC}0at@KPM``bdWl@q?P9t*LLE5`=Y2>^G^JYiV z^+HAri`=@G_b!Kfj= zBYIl&vPIGJB0&sgOkKU3XuHjw6ukm0G~%hNc3|(T=-K1vtz=@%Z$eo3;;mMtk@5<} z^Hxe~k}iD7)^5aO=EQlcSJDM%&%gx37i=URsWZk$tsx#P^MvsEYolpz#OT>;Rx=Bd zIeZTGmRA0+Gyi|+%xj(ebCBJcKmDKX%=^jQ|HnJ?!v7Ix{>MEQ{5}YB3=*n_hs-&5FU} zbc?l+wKWDHEo^P2n4Vxz#M%;jUYo5&tt}MO!!)zCn6)|fq|(4*L6S8+Otn~xTP<10 zt)_>s%ov-qUc%O<`>#yAkwP1H|CSqn)5eXLCY)}vWbxLWm&CxFE$LF2E}J<#c#-d5 zcjq~8WWQhz&n1T(x%G@WKuci$!&9b{M{YgNBMx%o{v)T23ycG3^*m7j))>kYky=Yg_#ktm>KA=&vU#-@Q70IUR&@8L<+bT3H zv;s!|s|5{9?tyvVj3!H$IY5>^QJXAXDvmAvdbS|rx~*bMr$*97+w*Mc46<~yBPMC- zIteCe={h)(E!|+JNm{zzPJ^^`^=)~W87y64y#WJh>B^t8r4z~0)z=wFvB#Q14W_DV zNh#*j?P#Oi>P*@=+mSZjTb)a4wVdxnTV+3H_qfo7=@#=z-}GR*m^3=+vYs}I%Z=~6 zX`|S(9Om##0B=RJd;HOlH>UGRzXsDr;qd3g;kQ1t;W~vkZZMhatk=xp*+?8Rx_p$z zmVP!#kfqfT4{)04L5PZj<{`J_hAV9hAPgBQcE#i z|B>D-m!K5$&v%vDis|fU0KKtX3-|79vAHP1N_vD{`xJU1Q zeR=jTrKV!I_4E3;+g7EzVz}_jfib&o;lmO0RVx-i^M3#7ScvzryV#L_=F)dpumAk> z<;0MdAy@9vo<*^TPnou``&AR_(iFtWZ`(XE?oj=?EUFCrLvM8K55j5Ny~O$`1!U{ zMaemO^3aL1muZ$&6~o!<*RFm4vl6YQ|4-GyjsK($?noV6`QJ(hsp;$o=}5HjgTKiS zUT2X5WajW&c3uYgL9QX2{UFz1ctdv2G?;Su-Du9G_iU3Thx{Nj&tlGFKS;?oTX772 zkj8$Hfo-cP8#{7x)6?F(&dAI&A;p`Gv@6$Q$~PGDO`HlWc{$is6mf@R6?u@G$pdq4 zIxJq;YBFI^S#h=ITTF(mEHZR%p23iplZk0mRm?A6r-?MnYlo$)ms2qd(*SoDnq^6v zWsyoW%i=vd(3{WN>NLxm$3_d9&3i|Wl%@CbXCAbp_XfXZ45jzMukvQmEGrx`8Da!^ zd!d*tYu*f+WnDqu{y}t()tWw-X8G0Bt_|vSnS4H-W_hy}&ocATpT9o<%mLcWyGv`c zyx&`!<@yS8mb+@pS!V32D`#oS_+e&kn&po_-@JJ>VNwe>a_0s$KKP(w5uRjKB{g!? zjI~^$QgJ^ieAa3%P-l#ZT>B{(xl~n$&-r96(m`rW=!~s#J2!o@fU4@L;WJmo(%zL* z#%)U6uw&!)kGVgXzU))zDSuf=WI{AL$sFtF(I~;g7cT{D8W)aUl1TIYZ1Ie#Qx?uc z3uBBP9g~1vhE0p6hA&uxJ|}<8_{m$2VgVw5^{k083(*T@?1&sYe{K6?|8*0b z@SmNa=`IQzppEebfwSROhQ(qggfkhQ-@=aEyXlsk*RNjZ00yz^0d{5Gcy7*qap(TM zr*J71XFj`47Q2;U`uh)9%w$C^0Z+3$zey&$otyuHOm-K<#^=dovRm246f)WU3`_pA z8)ULOugtHXk;xw98lV3~CcFR0Xngtb>8<-OO<)g`{q@vh$#{jj4aZ@!KcA%=jQQ!1 z5hhE%egDyeyLU8`nfl)38D+!}2pM|*VzK0#X+|$+6{Z<^d~g1B^OBu6Xhwg}DnT z-VCQ1RlI6>z2rTbQTfw`xc6yBUGAqZuRt?$jmS)2T-~j3!?^5~m1stlH(E?rw{HKz z{7E^QQI(ZHre&pFk10blD$%(Am_Ch)^Ngb1_Mo|Qys)Z4s~5b2f%h2gCGhSRJZ}6H zyet2`Wf>y=f4VF~{ORvq%Q9G6wf(uj(MBMBaZSVd{k z054u@k1pCuF}oF2IxG35K4@ECpcc$4(lU7EkVb`}n`~_R&pp3!bj#9ETUN;$O`|{D ze0*iNe=R6A&BddCySU)7`)3TDHFt1x*TUssu{5`S0Rxj}dc=M_xI-JC;0j*LdFRlM zQ}!%t{mItN%O?i)>JaxW?JPN}#q4d%o5px7>vO&BZ6ji}>uFdlM7)?@LPBw|BqTUsK6DmvG{?)%pj% zvSBFPCwAAa-Mhptx9yAwo$IX(g3^vK*df3#n~xQ&;riuEcyG_6$7+TAYu7KIGdCu3>f9ysW=toVulFC^ z9y>FjYTMyc=1lo0V$I@KU8l^R|M|Aq{pZgfJ9Xg#@aN&tE5|2!bnP?9SKo8ckl_<% zwHtc+>Ni(^x_;&AcbC7p2n2id)sdJ*yEkq-czScx#1VmBZJQ^3ed+59Uwm=y?3vRi zfpm{Ae0}K@N7rQHC|#9;j#TeIcBCR@8rvPIweq@F(^miRBT={B0B1j1K{gleRi^A& z%6>F~{OB_8toZ({fB2CoSuz}cG~MAxSb{5BmE6dyfE$&yyV2NX?{uSsb~m!x-6&({ z-UQ8!_U_vc+nP+zjmXc1oV+N9y$I@MCwg&cY1p_mKU?8M)&fqnY3tU{KUuqRGkMzm zxzkt0Or4c*H{(tkl3-dr*G|hm`+V8#$jI=}Nf8r6#*i0TU!~prYuEVtehW7zZe6?m z>T%tN0oIP{?ilx!fix-j?S*+O`hV`2=XYBBaQS%n8+vDxIaMiNqtClW^p>lw{ z$eMBFgMNy0LfKuuct|H>p*jB>9Zt#f7!g z2l{(-ZBq}Mu2#eCgG)Xd(3AWpBlE@GpT8jgx%VIXPa#Jl+BBj`DN01re@-4-(aRlN zHUBwu_0KQY3}~X|AyM~({z;J@h{nHeei>20OY@(~Q{s__HhsP+>C2T`9un}MSk6N$ zmaiGAR?z{ZQ18FFzU&vej(`WR8wd)fOv;Q2XG?Z7+fA;OAG_-d= z`Hz}!G~^lbk%m%{hIa4Ty&I`$H?mM-0w*CCW3I`VpKnzz_)4V6&WHg#g zMqw2B7DK+sPqkLFxeq?On5el=4%nFTjV80n=xR)}e$}}{*jvtHGFyzM!Y0-D=ILOM zn1XJTg9;=cXXAet(;M^elNLlqkk^FTyvF#i}30*?& z-L2C++rn#_klUmaTjT5dapQY`*syYO@*9g0%Lkda&#W02fK8J%HwQDr0+A&ZuH#}d z8%^XmCUTr2>FAP6xM5i%ztr>%A?|>%-11-Ny*@Xwz6)H(T?yMW;IySFE3nn8M{m_ALm<3 zSS@B67ujjHmb5li%w1DQ8Acy;d{x<-|YwusBaHjb)RH%m<=ztytn1=N{jWj}bBb??l| z!99=WT7<;~N6{!1a{mE@#{5j95j3VZPxElBsI|6|uFih=;Oye)Im^dKCH)v`&{_IB@RiOsKQ1lI>cg z!PL(VU4Mdh5%FHAdgq~YH<8(jk=cr=irK{#R?F$A@7SPP*+Ot^d`7b;@yO9#3;H)G zgpI80KmGXqwae#XC$ujC(^WmWAysUtJUzUA{J4`ev?vd^LEI z>D>AAU#MS*FAZnIhJ6`T9_69sXSXQ=3Db`Qoev+5Y&0lt%j6a+rjfZfDItE(8qdC=i$^w~`gMEk z)-CG?cAg*BqB0bbv0?qXHRIX_j_XvvX}A@75c4w@PH9rHbGz<7LuYR~X9d$#|K7ct z7cJ)AckaMpL&N5N5`XD?cFm|7ucvO{g7|Myl)pIi)s?Sy?%ug& z^^A}KV-_y$*S6P^#6xHI;gIDeC7g5XH_so@!=rucYPJ1FFWPb84nW{vEtueJ!5=jX zwj&FQZ*2zL>tsOnYxR=x9|k-(&e?$CvHyu!Bsv({94Z38RM&8aXRmny@9A@J+;& ziQ`80)i-i7;edX9f&%*`kKy?C4=-IMa%_7C?&)h#dI(pTCOOLP@CX8RV zBxL1+u_OBR899C0h#|9&J+hLWG7!eE?mWEx$2U7y&RTx_%nZLNr=Pt+zQQpsIjq0@ zesIyCp#k3Yn};qtehbY02W1*J>7Yaf-iv9Di&+@pcfB{bUfreiVf9qbLZS4d{r$cNuUh88En@ z0sHn23h@2!7_hp-fEk4g6)xEa%=~5(3g6if<*3bKP?}=T# z{6x0VY*Y!DO)#Kp&42nV4N&T45=OJh00Rj^R4gkI5s()!ZUllmY?qHj4Rlvc!fYUz zH?r-DUQ*1eKnBh84)khKy|fz^-gA;~K6&!fo{7y|kw0Cmc@|T~k83?k!Q%=8^6st= ztPWo*YBlEFKk5xzmB6}{FC;C2HH1rb;M*m!@(|?$WtPHHbshO`7>oDPR&#t2NRRh( zG`z6a?8b12sJf_so>f>rysD7}t zrixJ!oN{$ydB_Cu%s+)zalz09ONIuZks z#UECsAb3wH@G7dLSs!1Doz$w^;-w$;_3{q+{Ooto)tk@vEbKeu*p~I5MGXp^ada4V zrQf=;aRt5}VZ9PRCnWw9GPUuS3+EH)GDnVndgK&pRm+!HtN<*ZSE5Tj0o<$B^c(9v z`=2_qcKWE%A73+DiSz6G$EU|-{_)dyNwYuNj^$beku~$@^9FFXK1%!;0p1FGuvSEz zt?5@l0?xGPs#>E#M6_#&wA&)T|iK`(O+u#Z>0#P0b zY|IBdgRR+=kJ1fnbHUbRef>fcIKNQk5pge(TypMQxS4NGIi)W~BD)R!-fE3&;I;0K z)%wd=0B>r0muwHmym;~a`LigOC`8Q5+z}&} z9{T3jC(oaWXQrpmo<arJ??S178gB2v^5 zDL5Oa)8YR8`t}_dHg)Cc2lwya6Zgbj^PRikR8hJ2B4xygVSE|T^#>iw`98gaf_jcz zfBojIJ9qEg7PrMMHL8LlUKmFVA2w`=7$OEe2TRa`v{x_C1_lK9Pg%e3tG{mF61T)n zEI^b8xfuSO#2d`l2Qm7DUO_#X*jM;w`}7$xasAa>H*XSk>Wk+j#1Im8Kz|mZm*`~z zd4LE=_w)7j@%Hxg)O&bLO8kYGKQ}V97?d`!{{ZIQr#F}f1_t+S7DoP~$l-9p3}&!1^Z?cc9o-#(&`+Dr8O z8;n5=DM0L@1K;l5x{@Hz?nw;~0IfqE#MdUVuDj@N>ejUjs9!yM3T+G|Awb-l)q(lF z@&`3Uh7>xF9zD8&n5f0mY=`c8i{2v0LfR01!uPeLWvOYVO>*Q>Ts{+JpGjqlaWbHVUbYXuX8j8}=e?evqPr=wKo843LAG zCm0am2c!7BkWQzm4nl)<$M)^pf%@5_hb%LN3X7pRosOJCbj|AWAp`+&yLN3!?gtM! zu%w5w{p?;xYVO>rGh}Yxu5B9-zj^q;rVViRA(>4yL7_{t8>M3hkhf)W@!*j(H&0Re zs2(EsfMay+(z$a-(NVM)?M!Xkv?jS9+?R^>_t(TAJ?px6@7hIl5uLLjvlOH?QH%SQ zUhs`aa*D*8t%6V?8`2C(4AEA!wzOh$gJy5x`_RYR)5(>{hC~g0v}xVCRZCE(+`ng6 z9*8{=-0Y*GYbIDj4p6sk)25YZWoZHO)cg0?`#BCN7ig+ZmCnQpX#?IZ@g;p|{N7zn zXdg-jq!0>~54*6c9dfj2PIBMP05R)>owSGOA-ajK;zQ9%bj;9*TY+(lW+cenJM4E_ ze1mcKuA-~@VH)OVqisdBM4Wu*E;B}0$+%)C{jgK#PBvN+xOwwtO-YVBH{|SC8Jv;G z`JHIN7qrcqfcV9o+Z^1S7VYuM{`>}tYulz3Bqqj9h+5pfL0Q9Y5zT%b$RyGtMBA)M zOn@rdbax`n&v`OPeAkVyg%ZJkjXJ^qZoh{Od{HPr) z(o(d{0W}0^+=$4n4dUJnrc< zQKWZZj;(2utUY4humPw|w{Cjsh2BK=7TpXST%8c(f0IsH6FEtac{Y;t88>f8!yvZ0 zbm=TQi;geYicla~oE1pC>({5L-n=1wsXM|J#5vOD(oNG@-AyHHCKoqua4rS43;6^qIGI3wj@sxtn1hNpf1S8Uw07XG(}3LHs6zCNI4pU^#|eurEb9j$nB-76+rn^ z0HwSTFHFy$6{vtN{rdR%GxeGI=@WYaWSB4q1<*58K;o?m=nYo|!xnP|L?w`T=!ODF zq_~Vwhy6X2iVIo%{D$I(iko{;Ze0F|5id}zaQz{1uJ6Fm2wVN5-nHD}@<*gl8Fhb{ zEK^X@5MFRiGjjd4o3~N^+_`=G)~zVP^-l`dKSTMNTKPk{G*ATQa{Y4w^^c1BhiawU zTztuTM&rsghnD`i_PKdO+^C==%hE^INsxd*NR}s*qPZ?0mz$JCg^%IIbFJ_Z1B`^5 zs83!H*4v?8W)6xKvg30xR1D6BlBB%BD5^xyYz86D9UNJrhY7YO@@FYjCqbpG2`VC} z0)rgFFI~$A9JLy?7%T><14KVUPRL9Zhn5*Bfl>Lzz)75+=GxR2EP_Svr?PD1!a&P2 zT%N$0nL3}Ssg@z)JPm^&g^5r_cxFK%%v+W|;^_^o$m~mU$Z9442oBar2KpWp-Uuqm z{7J5?Ui$`fQT0>O-qa*??@A8MRT61~N|{zv$rwNkJ;UJlS$9yLasV zPi2RZ%Qf*~o>m#O5p6^(Gr(RnH#g;q=FV%`W5KIEdUS`;sRt3AQf-BV4L6xO<<4!X zYpu#8Gg5Gg4x(K;6hiuw#gZ(5ZrFm0b&aSkpbxGKxS%1W+*gum&&c0`d zZ%}ioWV(5aik~}d7*xAFMXe@f522!sh#L@daT9S!WwfkGnK3mX@QydOvWkgiEpszN z%h9YmDo_wzZQD`FEn14^SzJcgDaQ(oA zkJ}@&w(dh^Pa0K3TrAiZeZ&KFUXH@YAPb*CVvrb+NeD9_G~(kka^=Tf`MgefF=E7U z=0$jqH5bv>j7C!QG6bRaxpnJ~xZ`r$B1<0wh~?7HeJ&2T@UR1||C9~;zDmA*>-J47 z=Dtn@D`qVTFVaJudwh#!~^UYj><~(d?l+e4T+GLkPbkdESHJ6 zUbGd0viy;G8abW(ACX03KQofdJVO!unCl;sLn~k#+f@`t~lxd+4`~^USr?iYF&L7-SVBSOC)SVBv<0OgDFg(@8j8@Tkrb44u?j$(c_HWJ z!$&9^Wr+#KvRS7jDs*p16%r>PMmt*eLBHZyBcdfG>2V}7F{ULH02Z}ZRLx{yCC66I zaLFdTjaoW?Et4+GLDaPHgQ)L)%TY!dS)#~X$HWGy4U{PPSO~xh3iZ^vJVh!b z(3~<7BHzjKNA$X7Q;4jUU=~?c$<#<<5E2se`!{T>aRn9-u}Y-L(SggVRxq zhCP`RF_wI6?g^hmr3)cgakOkFOFIpHi1Xc4xUzIPt+9cQ$$nV#>5%DQY_EH4#1MkY z4G7Vt^M}&bT4hHC1j)hcL!@Hze0B^?ZSV_L8_kZ24M{9hkv+R;9>+c;3lrJTlhAiw zaik&#=$Nsj6`j%;FR4;v#=tI^C` zDRIdl5nW!$wKAJQh&8WRfZDd?!>rMLm?&Y8=2A5$a$1BS=C_0wDicb!v@9uoi2Z`a zklJ7@X5xGj!-MPAM?}q`Egi#NJ=oTJlCj=H#?~U6W+)ww%2uw^j0G8D z%?m?VI4l^~tx)pY_;S5dkJfIIsovpy!Br^P+9t79vZDH<;)sZ|ZzMCIfiVnXq0Zw4 zQFEycDNtDwv7_R#cEX3tZSdi73#AOc302WrU#ViPtJJ`ko$6StD)p@ul?K)d{|COJ zU1Jmx)kP^B)m|~&`0KCamSJ?S^d-U2UmBwy=HAl{N_*GN~Qj8`3;Lr zjg<^2ue*Q0DSQ6-{rBH~`&ImE{^e)T)>qzebxI4N-qEMN`~K%qA!@l&Cw+6pa0 zQ?oApe_+(w1J`~MKdC>8A1q67ZVly`=9*gKY}ulNN3Z#(e*E!=AHEmgtJhs=k*l*s zb|hKU{p+ER|IV>clVk#YE=LBTjre1F!0Yn zqtY8}iMD#RY8tT#YGfHwIO`yIxM{&cX1iL+gb zs@1A~^9>8~gkTQg-jccyX3WHOKOkD+uGYw{R<&wnjhH^$$d!2nLWss{!xs?Z15FCd zu3EJ!Rjb&D+vHQz*`k?fmWpsEdo*An>eQy`i5l6}t5&U2x$-xcq(&S$Sc=S?>p;n@ zI7m^YO65wIzLvzA^<*BQ*-0swwt96Uu3V|2Ml4$0fbF!VQ>vma_|~fBUX!%Ud@EM` z`XX}{EzQuHXeOG7#;<9CnK;*}17i0YHL8hfS&+C=rHU0UO7dixqU6%GCIxG`M)exZ zxpJin70PS8lQ~WD>?rAgFWI^lq^MTC8qE%T%a_0S6$_GKGoExe@xe0|8B&mzX?hha zRCxb=jXD|TlR~h>>_nI!M1~ZQ7_{Zfm-|Yx7R|D3nGdt8BkDYZtw|SBipnI#`{l}g zbwTQy)1;PEKY%JgTmvH0^hn|gL|aB9Hi2;?(MUANAcw>JYPr`UDMU53N;-)Q;<9DS zT+mokXD_ogIVVd&*3+g(jLVjJ@4}ZXhuT;)6!k?tQ8!Q1M0HX9Z>A-^N!rpH@pI|) z5TXuwJtQW9$ty%9Q6aND7=v@^FC}Zy=!Rx#8GNJ(CblsyTc&jBQW|lx7Ea_twaIua zF&j@xQTDykrAvPC1q*E=rze^3u@vlYa(ZMup5A+VJ>D-{ z1_GBZS+c}=Nt^>qYoRCHMU7Or1$#Xi*%hSjQ8uEO>!ukmK$V&~3E<{#XkAVK)Cdy>mltWXhh zNHt4Z8*!#4wR=s95m8lC78O(2<)qXkMe$-q&q~%WIaalVsQEHnS(HmF`yTXBs$_{0 z#flXzdiD$pk}Rz)jZ#&Hs^%J`XQnMuSYs{f+|aVJBS=VOQXPw2ylBzFh0jRN&HyTI z80`RR1b`<0X$R2!-UOh3sDHTpUI^fst$}Aeuv7ddel`8_>n{wRq6fIhbS z;2!{*$(PsGn6Oy+l;Ma1h!ZwvzZT=;u1L5Q9n^N&yn0KCl0NhljdCR|5}K$j+;b^_ zE=veCQgs1X#Oj8>kA|Tt79elS z1zCbn`dpI2jRMH-GF88o5Sl`8OWL4}O^Fr6&_-QRSJX~t+@Ne?!_b!wY?k#WqZf$N z7?Eu8b4jA2Xmdky=4L}HR3HUoC@F*Dva&|}grv}Pp)LE7#4IxKR#eO3)MJCi)&z^Z z_{b%Ktbz$|Yr4yvRscgqi!6#jiDZwl6-)4{2?=M9U6ZnzAEq zO7mtsy@rjb6t`z77Fkrumbj<^u4n;lZYmnz(=3A8gTR?eD~TJFvde44&ozrMEt!vD zU*b_ZbWy2dC5AJ|`zA zYMP)9uzp<$d04}PG8%rRl80&qp;mtYNY$!oEJlU*%MsF){!-$XXl!ZJKr|5bEL0~v zqA;;}Xk}S|Kn@3xqGBTDammEG17}h7Z>m5lR3yNYAf`#etkbEKw%5GX84oO#Du@c= z{Y;I#lm?Hc7KPLR)rX%q9~t7!~ikC zv?yUHUQ9z?!B|?G>n4fmTmeYs0q}rgfXB0vce17oX%;CoS7cn?5aKyOsi=EjOJ7>8 zVDnNcg-Vwy0otOXs5mQPD=4X4DS$1JQovTKSYDL>oAI2`QKD|)GZLipnHm9mPb-|D zWe6fiMnbQo?&QNOl>&9PbKwZ&_<}i{b|M{nEMRTYXy@W05MF~qYC6-Pl zETukF{9=)fXbLx?gooUS{_@Muzx)iqWGodQrUC>d47F)JaPFu3uW3+f{$94CDTIbGb=VC~f_;)?O|6_QBmiYsf^z0; z>#2}_nt!xIYen;UJ^;siga`~v3B9I z1P!!B0=lSUp;|PHk*R7Gjb5}(u^}&ISee(TDn@XoJ5rS$Ow(8$GSAD@jXeKKCRlQH z_H>O}ZGF=QW2ET%==r&D)siu#lS-8|S_8=pJyYNK5Y&tb)E0BXlnnx+*d_-xqztBP zLBr7Vm8mF>V}0NEPbjK zPN?_^rnzrKg0N9@yM2dINn!_z5KcYzt{7=pBYrL!%Zd}}k5U@zji8hfy#nP`M?>0# z8`68EW({X*+LD?C1EeWCl-|&wluS*XE~Frfa6?02Kq*awFVXm!EJ9dh?&HaYSY%*9 z7HFM%Otp~;7&Vf>wM4C_5=Pn53^I%aj(#*>epgM@3JkfAQ_WjJ5Aj#H}CNn^@O}LF_)lpT!)eSI-o3L{d>F!Dt zC6kcEQX5=lX;4?HWN}d(_in+lpK}TTsjc9wL{$?(IW@YO8ip2iZeEF)Y$DBPGYR9O z#5%2Ke65vO93<=(WRV=Ubr~=&Axh+;dA0SUnUn)$^@d7aRDR0UoAeBZ(c&ct8ExGw z`7*7SP$rV*ll6y97eyIGof=XrR&=fHaYK?^vo2?C%xl)wa38F@wZ{LpYu5ODH2E*N zh%dkK0h9o=$#qEXp}5Illk=K?vbN&iNyAJcwsktTh^0~p#3K2|y6BNT2-WFZxBMxd z6D=hftw05_CHYVB=gS{1pI#hD^#h2xhXPhn`S7Rs|F zts^PDQKQFSKoxaFZ4+D`k33MZwoWVPug)$E>eiYN*VfO}tfACXEI#r{- zt(?)TA@@4$d3Xxj-``)ygT=nPcJquXu;@YHz zXz^P6$_}*xHVeWi^p!5#N1$9uQBgoD;RR8i4MHK{|l1zAoZ%sF-k5$7DL|qe<4Y@6U{vrNQe;2EDt4X0iQ{17SbQweQ4t zE-;{h>{o~Emye~I%WS{nY`?tA-+uG$H{X!?#5dwnbcq-!LHs4UXWG70K*h0k+X7h+ zwXL>>;bc7veXHLhzY%Vd^e@;bnolE8xZOf_|Ap2Q<|4qfB z8;n!Hg52TDrd>0jb2d1w&fFA1;}S?fC()>|75peP`5UAm!;zrg5pQh58soi zUSB~7_GTlpeeE_>uVrW^%#wboQ>BJo$lhn5uq1m*B}$4O&H4RMj8MGCnUa&>h%byBVxa|u)xGGmoO>-g`6(>)~zODKVTTOwM7_~}ioALdKYFAH+0c#y^k$vTI$LCY}ZQRIoT>BL%6GiTwJ4XJTA>ha?& z$=wmHWRS0%8JRZ4=;Xk=F_0c@3WR!@r_b|bE; zi())}jQN@_ef>2aW084yhDQr`u9!-dKq;0*wF>yUy13AD2PHLnykKth#2RF>+J*^c3 zwvHY-dPE$t#Nrtt78*qt8?1=h&m_pQiD>Zzn$#+5l!#fZ%EE*-3$kPiGJCWWu_MMfAYo5?M5bsVhKQ6QCJX$Mq9p2Y#CkSD0p>UZ)qQ`8+?=%lGKxQ$%{X_fTAGF$Q9$R#h#;lBry# zJ{V$fho*flM0I!(mY96|gp}i>#&VNkA;@cG77etnY!Y6B0Uyd#4hT=yaucN5v zEN9Q)!8E6nIJT6+T4b5doTkvqJ9YB-ktGEpi{ee3q&Pb9R%D6e>ao0o>urIRkHErH zWz@IgN}?AzDH0fE^MfL_`N?^GhG=w*RFDDu`O@84a`E ziYyaBmU=SdZOn3^xH@EyD*`NnEDf++7_ACclmFSTw^dT=;VW@o;_`3CJZ%tz zcY5Jz88h&!O!M&2QT~g;zj)0!ir3e8{i-OlZ_<&sAH?#HZFRbml^4G~{=okINeKyw z^c<3dXLoMjv3Ws&eVzpSMr!6MOLxu!LBb*z6s<;uH5C zIC$v50qXs>(=O2L-G2xb$RXObRqjgMhllo^ICg|~E#(tIb>Q&vQzwsMm$~2OSQTgP zqJ76s96w6?`j4c2+js84xkrv3J&b)qZ|=Pca^%GAj!)W0m&Hz1pV4#Tn%M0-cPAw6 z+qZuocDd@aMnr$UJ#J4trj&@M-MHv;efsr}SiUK4_a3pQCCbS zb5$}u{e$`q9ue|U`1INH>7i-;hmH*WXv&PJd3g3+{=}(~QBimvXEdHZGF>r}zVNJ5 zBh-^nP+^JCp|isBNvI@f%(53^*;OWG-%q>#U1bTFb^(<^v9#-?v&wcr5eE(*EvPbB z4(dMgmdbX$Q)P*G4x2+|u~2LR%+4yy^657qV)^EscxvJvDmC?)p1wVUS!o-0>?Eam z`3LnKJYp=AHYeJlw3%~kN}D^^uCzQ>+JU`^BGK{>rQwl`(1qR0ptOH@8LRA|LuEV2 zf8b?@oxLn!?^|9*zIgD+@d7G~gCa;}Ckl93JaqdHm1$mf5W+cmSwWS-@0?ZEzkkFE z^0IhR8M#@Irm^idjrAKmlH5$w*pQK-6Q<0xx!KIQ4mZnk?bNMp|Jh4s_G?xGys})& zu0C-c4|+7@(BlOyX{52DBXjBJC=iW9@Kiy(-Q%~?+-Fm-{r0N`zDP`|u(eX$+78c( z>VyY~Mi-5NU&knh_&s~#6Az+k$VrIby*vI;?4Bd^$iSq8J#n$yV&knlk76|^bN}9i zT{~i9H!j+x?1K{+4(?Cb9mm;W-B_f7mWtu# zht2J@xr#RT?@c6XY;MJ7{@%p+-EpyQv6fG03mZG>O!JnJ*fj3h#e9t$KONf1=Z*^PxnX zj#=8~yvs3XDBo$$Vz(JvF0uAG@3hT1+{by&BS-Y~bIf@h&AF#G=c#YcS&cXCNj#t# zdRP2GyP;u7$CLpGkji1`L;LK84v~h2VgExzlilrxra4Q?@|^cUA3N-JE;wi7?p^Pk z^UA0xZ_PRAtvUDU>FZ?Y{=FS`HeB93cSh7`nzYsU^wflkRYp&Mce`2huMJgw$HF;^ zSWO+3S#arMRJdI^%8cnD{6mZXRS!Df4nefPd0Z!8BSw3nwwRZWAJM~$|6=ejUh_-hRUNOUin3ug z9r;Hs@zz7%qLtl>B@hoLH3xX3Yqa=5-MK-*efhC~w8IB5lO7a|yWRK^3_WqLI-WuI zEO2yCAHD;QZ-MKHyQ}^1EF%TZUPsCC4-D$lmyY5&3@P%qFuIQoH#X^UuM%h!J$?rw z!(Z|4*{ipW3m)avD-$}2Kl)#`~efkEgxXWJjeuF!_0{IaP z^7dtYaeWyj4@CY!LA`NNSMXAUvT)xM-*||da`YwjrIl=7Mez*`3hLFXcQ4moA_z}x z3KRjk+C5C3`cnG$6oYR7?y~F|}ID>wF zf;NyI{S>GMSnPCOUi$a&yf}jncP4^V^%nt#zyRDy7Z{)hU<(hc5z z9-dzG#3o+@9ySHeIKdKtd(u=tmFVbpx3Zwi(Fb(vuJ`oz@xkq)u70?jBv8GXq#Q`H z^cxpW8|vA$yN8#zuj*^?@x`4{zCNmt>P-)$(U%8Js{Z2n;|ZHrP3zySYY#mH#DA{d zs+aJrgrjEtc|15a-!IEiyrEwuZcsi^{0*rjz@rBQDg~Z@>W>~g z5Q$3?>7puT{&63$uL;87j>*1jzq02!h-CdIyb&Sg;ho_%~E`a&cvOabSB+-nc=f|(Sn%hc~P?_4D{9UsrwS*r4b^cmapHjGj7L@ zEh}e-;htKEicF}e6eBz#+JKtrx(CLdlUHd714QAf>etaUPIDcLgPm4~xrr#a6V`1dGZ8$h=){@n$ zR(`yEK2)NoGx>@$r_-5c{jTlm_J>>6ESmXlQw9y55Vce+eY1GcJZOimiAnOQdHU$j zH*MJ#yG?BSee2pqGyct3 z(<1Oh_1k(~*Dks~U(_HL+>9vBy7&A&(?mj>f;qFmM@-#A69_Db66xOa2jYU zD|bCTdUW;h^y}F#Z0@SnD_1OAx@7U9g|o)>_tDRt!-}33p+;0!9_l@s0YSWdg2&BU zv24lWg)#8(xwGukQzPmsF8Wtq{U*$VE6(SMBkdps;Pg6*#S5Pkqz2IamfnLV&W@U+ zofzR7(O5~x6C!$a_Zu={`n2hkhFl}?0je+Njr$jSbk_wA37ar!Dj10fG=!dDl+jbK z>)su|S1~4R;?(KXS>b6O-FkQj4IDv_{Pe-8`E;s>@}Xk((W8zlX-M+cS@B_XRtlEq;?ZuvhP3Lfcn;dV`jL5VzXXvxDgNRzlkxLR$bS@ZYsJ9wGBj zw9WMa1yH+pufiJE%Ezi0>9$_RT9a=8VP|0gu}fgKV=Q5(eDaO(bcR@qFQA;@m=Ttcm_SnA22XU^ z`he~|$isYn{oMSBOBUfLK_pF_Aoh)ZjHQ+<8TEWPSbyV{&@T* z2f7ltn(&xM+|>QA`05Jqt%{TX)}K2;_<9^a;c{T_?iJ4PdgcV+b?%ByiH8YY_aBIL z!0TxVuW)4R_#cwthe1Yt)j@w#SS3XS;W8SxEqk=eq)6@eDFTNhg3^h#XS@U=t`o&zvp+ zcIS@mTUN~u8v|6Gl8V!I291y@lSnZMvIUm{)_OU*G=gxOoFJ$_nHEYFM!zf8p6&PTfmZHUbZZEaEcvaA2GuE_8T=Z3JAN75O(#_ znIZigR%Arux&vpu?~Jig5@SDJv3$v_(7t52{{f5z4o1#|N&ktlOHm7w6#3~?w{C_dVI(4+bSpKB~Cyb>> zve08zw2n4U!&p3sPwkzFhxP>o&~s%Z#u|XJy@9c!?=yak3qMWfpBQV99c^E=uO%2= zsOX(eeX0|1IxrTb)X@gJaz9IS^pFmTu%7x70N8W_SoFtuybEJ6VJx+)d1w*o!CKtW z8qm@Dfsbo1Gf>(EK$=Nxz(+owq$E08lOLn3OOV=A1%V|Hk4w%WCKA)Aq0Q2xOZ5+s zP^A6#)P7x!j80_ z=wp4n-O%N#c9>O9Wu82ou*0c~bzzi!p+8GqEI!gYa(KVJiNynut3#-l`ZLFm&$R(9 zkoG|Ae0v|uK#Ne3eXIo9!~%UR1Ffx(ofr}Q=?<*YqK{oZ$+?exp+A23FeMrQEders zHY5~4yIpM0d`BaD?BGGp)l5r`Dff#*LuW4EuxZm~LfSD-jqH8>Q8coIv|vq*Y-mV` zL|U|Z+{nHgY4M{>Kw5hzJ9adHZ|D%MlMNa+nL62J1v}Y1{edJxT6|#eJ3%drHVUom z5Ij{Jpx2wB)`wczCGUdTxz14g@vL#Om&K{F3x=P|UUmtU^K<7!I`y)ES~7&z%f?YJ zJ8lRjC{G2{+Im?DU+?Z^C(2%y76aylaSMbH)OuM0cgoSwJb>huo_g80EH*V}4WM?z z=d0$92h_r|884AA<%#(DJ37&Zv~O82WZL3SKU@2$qnD*j%YCJ6g1MJvpnZoK2ZuQW zt)s1EpuL7(Hg@~=&1)9gd)c>)Im8CEF}6wCTiJCRH_KL*koI5f*;7MWNK2_7s8_I+ zg+8g3{a15x|NJ)4QY*WPT3Hk?pDmdVp#6t2<#`M?1hjYxxucau2mG1%EFHaUNI^pq zL}6h8G3!8DdoL@I_EU+pp+H*Ai1X0@axY6K6#&{fE7z_4WaY;Uv>|=}gJw2RHnYoR zGdr7`S*=WX8))Z#tTnUq=gDT4bm{9nco0rQ?qH(w$-{PD{t5zI}S@`_oI?$sPEi@`3ja_?Z$ze#W!!SJy-@YZNX+ z((sF7d8XT&8YuYsMIFUh`27ia)^gUI$2&aAmMx|zu2>y5s7jH>^Yg5gtvQe4yjnLb zuPCLk5{%tSk5ArMYg+SP92(fWgMt;?Qi?KhXNvU$tK|V`4EWK|Sr@Xc4Xl8^CAV{| zjjSc{^JhykEY>F0V)zBHDvPWwtXSx5ztGwW?``qIPqwuFFMlIJ%vXMdP{kGFp*=hA zS({l)DaNi#7S6*@mO;dNmIg6l1pq^Jg<>THPSp`~ky9&bQL)hKr|M-B7zLa>c$AN<=J@ zbW{q{8#w9l2@QVP$fC!ulK z1*NfG(21p$=5kP6X{CKIP*`cJH+y!+w?EqIjXj2q_J-%Q(&u^V2YxhR;v#Ic)aQB! zhmH>$|Irj|HPvT&=zV*S3>_O18a6H*dz$DoJbZf(89j2;=rJK7p_8zyk^YT`cX0pV z!-kI-Icm(9v7r;OQ+U+FlkYtH1P>ZCc*syXGHUeLk8r>=CfHkF8&3e$2jPQ^{sRXM z9z2xK96b(4bFh>&X=HC&k*%hG6VR(yA1u`LA3!`nBt}?5K%_=w(u&iB;e7(I8t$Qg zU;okv#V6KHf`dUkaL^E@CelI?*&vM=Kdf(%A3a#Ur2e_57YZl;fS$w~HSPe=gZt1? zpe`1X0qQAX!w2^9!?Vsj@OcWJZs(Ok1s9e|sIf{OIeOQoGNI@T>Fcnt7`t=_IqN)+*8NOIse?|2iAMXhQ;?sAK{csU| zDwlh79G}r(5vq5e0W6Gh>g35&kRORjF@27wH<)0q0a#=*g03GE8Nz2x3K=#GD|tj# zT>plzC1u73KYf`fD}3e@K+uqg2+)+&XV_?HJ*tnS_-Nwz(Sv#pW{Of!ZMGL(j#i?2 zNrDlhMhpq|_ho|8det+R3H<$g%EKY3kOIBD_;5LRt(OmdHpR!psGLAQy+<$Ym=Q~1 zf%uwaxrprHLwtMonZWzYAPRhZ{P8PDmT3|1N0>2lIi=Ecz}HVHuH=VKnuhdWo@ZK0 zZ}#>_g3R#=>OU+boEoq)e4qp$cu&dD;lm!V9}+f|K%=ClMzg0kAP``y>*C?*8_;{` z_-S-*QSES5C0*~)%>#>OzP*P}q!r^re58oJ7JVHB4V0&+cb`#{g&h=0vAXn6gZ+?F>e*^L3?cVwEU z2pHI1hA0KFmNfnonT9`GrKqQ@KnZQoa9rcxGL4@bnstI?bn%CU$`q5=roc=5^XPTk^%runu z3TB$Y1v3p@5Hz+-GhyQRQO=nrpPF4-$u>Kun!Z}9DTBmEnFe~4*(56j3y`)apP9y2%QVCO3o;GXTmCiE6hVsp|7ETj<6PEESOBxxa?QAp-pV!3WlbM0 zYpB$*=bAnPhRNat8OSNu^y!PIFb}~Y8Z)XI;rB{QHmEnaMnP`+kCF|S9a=r16+-_( zvU!H*zY?ZXrDDr9D1`1tPBl$7%}tV__AxsbHE*RFtkO}c z=^2dKl#R$jsu?}7U{M1$M5E=Bk)uc2i<QX)7dQIYkB9W{9~@w>Y6RyRM^)3) zw?I|%e{;>d>Y6h6AxPYJo4;?tjD9uIM5$K8tMB%0nAixNl-X6_d!~h~hRl0ckHyr* z9!n|oR7LTVr-rmg-!83-jZ*miZgbwB>zbj)`fr_G30M?Yw!U?%8=A%7LKHEInuv-k zM&lASN{mJl;}SLQafykE#x>)1?V=`G@ zHW#3~s=D5Psv3pFH*enK`}ip8+*`N0`v32L>ee}@o>c35vdh)_KSvMj z)~PkV?59{q)$x7a?9l_;<6f(a>iFr*2lK+a;fAZ5TKDsXBij}}%h1V>^;GNbex7}5 z!vKb`1H5ont*iU$a>>3S2*SsChN=$7FL!Pwy-Igss-#HDLL7XE>hje8c>jBUg7KnM zKNYXYHXtEYaJAAmyJEAAz8Qo~1+M~i|JzaJ3hsHI)Qufs4A3_*^1nHxyX9b2`P77A zaq`uhy9?NQR+X#fcGf>6bx7R6_Tv-DmBZTM zyOO@b3+i$6Eq@r~L+RVv9k{{q<4<+;LRtBO3C?iCq&r{y^~)avb!XV1Il~C^8|D7R zpNBDm6v*f?cE$3yR?y!6EsBxaVCe-PU;puGvhCYs8xe*N+xTJIgx|&=th_w5`MbBV zUeoxKe#*TSfxq;NvC>NzyHbH|`iang(?4Y_?>olIu;x>Px343L(d%ud7(KAo;F!VQ zihRiz6$b8i-N|14^yBNvi+Xc}b^g{inFSSGzk2ynZQ-`@^lIIogF3Y|Y`IihbFQ+y z^lZW+yobCG`_WK_e2i_?RY+k&0;et8y6KgUxY+;n%fC32`Q?|D6cxO)>KGz_5%{`) z{vZ?U&c1!6rm6>%cEKuDH+DC$vOJnSiRbmH)BAgaF!i3@ z$GsiXj>RGM`-iZjQ(2$VvxO~L6yj_VhZ{L(2=eHe^N9%NSqljKXaCcwE!f)Pg1i^m zOd2%##Ig9e*zNO2j-JJyy+kdhq_1Xe3i5Nam$HFYbMlEqjC}}EGP`#TVGFclEV7Pg zlXDTW9mU!upFEy$H1<#oqG)z)j|gCgYv>qjl6tc>r!&)2PB0O{LRiAw5BrXYh;@RY z^c=N_JQm2JGU!wLu&B7$g9rBR!PD`Gh|M!t?}|!laVXB0#cL`jvvG0&2DTlox++h zz{oIaUr9;v*p2(`F7z=?pYUg5nBMoh4o+{9@mz2ExJR$FCCV2nC zUW?lLY5-$G=muLp-b0@&IU0znDk-cG1>Y~o~a;PL&y-*U1?Oc!#_0#78#L) zSwa@i6fz9yJWWUyQ-auo^;ub&2;e~E0^aX!NaLwIMYM7YGye+)Tx-gJ!W$X`A|5ed zv&I1X9~e-HU5{r#vBm&k!Tg8;)nLGkrVK~~%9=AEwGmV*mi&$bgvAQo#Egk1idVc(MrtA{!Zi zxLc+8EK$JJ-k&HyH0;6V?Q~OML3(kKSmY{1i|;*=DrtzKd0Jb6*^Juk34q1_D6KpQB-9wfVp<2T)P7+MWwb{~$2|_kMEoKRs1|$}x@wA{u7EqcR z&lHvY3T`L4l8cPk|3F))qFSz=iXg2*fuNfpeArqX-li zd~~G{SuU0)6wpNg6R|^8@Bhc;GulM^dkW-ye8&NmuXp_8O5WoskZL()JO7toux9VP z+l&H#(kL(ki8kgWO#~9pT)o(g0vJ1I*+U8(p$RZ*=Mc6~6M=r?bqZu^6d-!KDG&(? zRBP}B1y(;40nES%%G}c^0#(#vz)+n6X155yz8jBTn}|SYKam}66oG>=`}XXH%D6?q zu8Dxyt2<*!pun-X$B4jVD1cLVL;-%*MI!JIQ-IC@oMTfFNY~0M2vC84nsf%xIW%QJ zVFA}g;1L6MHHv^ch1H-5z;EoeJ#P4K$b|q1d5&C)T({*2V8E}<7=VyF!FC_gke!3j zJAfP)3mTwPKq3u5CkF^ZHZcoHhe*#0V)q8;;D96rWFdhNGUY5y40yT#7C8JSAg;XgeHN^_GXjtzi6bDBH2!a4Q7%f^_hqouY8#MO4$i(>LM-Ogzb94Z*&E!Gb ztF+=#3aVMsdlj5Fs`kAezoQ)DAYKwK8ZP`-?fF`i{-Ej~dCaR4Y0*`0;bw$i3$$B>Y9o1e$?xHfY)bYm;BF$-t$EIBh{9Y$3iT6Oou8N<9% zvNCxl&ydrT{LzBDT^o+6Sj?0svM{(FB9P`9O}8x?K1B_>Vg^rlTAyHBQd2~ll$YaD zE2k+6h8!FYs}4}dau#T{SS^Buo0Vu2S_!am9Fn?miyX{mnLW%(LI-^BN@`lFpt(7M z#b}lyndecn(X5>657bcO7G`+_8-wPqR{%3^{xLps`J5>)BXB5u=CU10W^=4jh(-_B zT;OzDBPEUzCDzZ=DB&Emz48;P)bs~RC}VPO8MOLn2CW8~oTl-iE+7$nxN-f)^=k$Y zf~uW8xN;fw%p2+8s?dt2Il&;5aTP!bl+PkY@QaRTSyUq)fwfwwT z#s>~Qh&4jB;hd|gk^}Ad{^pi*B0>VLy9}b76V6FhU|FS5>8Plzuvb*rQTV3JNra$s z8}iu_Vub5l6|ZuFXZ8v^w>!&$c`DK&lsGj~6pO`55mADpxQAHIQDneS;v%Xz-USmJ;HA7o(cmr=^CGcOCN>CXcs|c_%?IdE>Z9Z=M@Y00zC9=%@rpaIEjUnkR;?A&{428kOvPQoaO*6&vX$Bc)kFJ z7~tD*I3f;kz?wyf71HIj@;)v# z&vLjOcOB|NO5OXQfz@I$lk=kUKyzw{B#$8ic{-w1uqbFR{*DNA58(U%A_8f{p-0+K z32opXiMJYnZ?`TupbJ#^Sh#7p;ktfJ1ma~~7ZmV7xG576gzL_0K>O7zH2-s57@h~= zRMM!@h`=ipjR!hKxHjo4nAwHO1^{^?n_~wVlv3h?CJIC$ zUa5cwRQ^dUca$~KKsf6n8pt%F08J6>N(D)ZTN_H9CBy@i%HT!Fde)^uw{nz;;wVrf z7RwNZLQ$KSU8D;nJbK{`1;Sw{77Oc177%wxl{ADr7wG~g22u?Uv52O0MFaDLhr&Rf zhvH@eRH>+tD&CMZ+=DdaX~NKq4`k*r^E^p&XShws(PTk)O%zQPi@8DxOZsW$DeF35;e1VX75ub2ep}25 za{>d_)qV!sO?SVVb5#}PrR*8pSx)qM&T<=vym|fVl@C$C5i4IXoh>e6!R(u)+n?OJ zdHvdz59xTi0Tn4w0EF3F*b)3;zf+FObnynLiWb#qQHBKqYLSzj1 z%k7E!#&IEg1`NmFI4;r~C*KV+TF@s$y-ufa| zdf6{+pI;bp>SS`#aokqL;l2r{RBtaI$XMGY`RLr5iFRjM-28z)IJNs?K%cNF3s$V# zyd@It1iLiXV|fWKU;vKTP=0dl>jMJ>)(R!&N>5{NC+1K z^RaKkS|e7Ays;Q0WC&?WIw4f1+XB(r1iP+L$W$TdI;|-LQNdzrMD8#kS00>_Vih1O zPq=|QZdKf=6U~4-?A@c*q~i&(G0lNHW~0TLoERT_a9`Ap=D-cxgk>C9V)pLdv2F9Z z=D=NJwj>>oKOD0+YWvnr>(;DT+61_B;>}5kM`L56cW>XeaV>1`ESld4+)ZRUOs1_H z(QVl~i{6|wV;TW>Eg23(?~a6F^@^oS7R{eCW9p;{h@BVr3^uFy|wQARM-1{g0q8d@0pQS8B-;LI^@{f}?CdwDQr}U-hYSi;FOMML25r1u9*K2g05>4~UFNfF_3}q8$BZ5^ zbWmuYkYF{A8K$1N{PoX2efv@2?#aF=dG?zS9JXM^mOYU>w=8>oz!QYr@n0;&5U)>s zjhLWoQuIf~-?i}Ywz%_OmIeXQvV=1Sz^9i`Bw9PBQi3 ze}}yQu6n=W&*jzw>)xI{ZR$hYCmY4Zil@aXGuODf8^jFQ49RV9^Cr})NW28Wa_Bh z^cd8-5&am{T9Oju4<7*9HQO>Euo1NzH9!NL05pMJL+#W@sNGAbbt4_9o%||LE47e- zTIr5cL+xG-@W3@tJ9`FDJ05tFxTMI6%it0emn@kiQRWJlx%BnDKo+)riyP&H)QQx7 zIPfP)F4YHLlOoCJi2&QbyOb}3y)~o~;LwsVts_;ERhJ@521$_VnVJ!g&qNwP!C&>8 zYt@p*0zh=ks1ZX4hW6FIy#f}Nb!p_n51^2E4wlu)7C2ODnIaU}C8WEUQbU&)NSjvfui zgU9da_|%&6$dAOdXX6gyO+Hq`>wG)gzsQXIBOHVp*{0j9*)Y+4dW)wT^<>q z3umAmt3!9>^&_PrMu>Uv0cT5QF^<(YfLG@wqsk$H?;$yZ97_n#~v?;~sP z(s7+J`!OY8ezXuR?>|uh+4f|fF>>^g-bfE{w(L7)trhzu%RBw(QMI#0-&xVc&|D)E zHaJ!;niba9pBdOa-)9Dl8515pZb=e>*bs>2bsXOTbp}^`zdIYsR{w#bCDP#LIEQc|v?@_xQfA5WaA$-dG)zRh> z{EGuku-O%x z4Qa2!@37kOwAKJe0k(wBp`~`z%z>*>l8aU-pJ(6Zjaus({`-s=J7LPCSH=wL_6Ph= zU$Zyi$iaPkc0_Dm|G}#F-<>TyJs;GF zf9f`4+T_>9kA>;E0r;wXL;Hoe@vqONV@Ho13QMordjA&^f@XnsB>l25rs{NicCw1x%CBNEQs_!)C2pszRZ_B05B;K`IvZxQHQ4_*{o zdmk$6&+0M9`FMzUpf3m>%sKrxwc!wCvEf9_*2Uqyda_Z|>V~FPt!Rb08K4#3ou3iNH7K^TqFUl&RUzMCcqm^DfvKjg(zVhN@ z(ErAo=tt;Z`8f2)?2Fp@2;eiP_xe5h;r$Z&3B-RyKX|id<+6teANvRNlTBlW2600F zu;%EW3M>;bo*U55pZSFL@AVM<)8I*r)ll9~Lx0di^lM%(p+6+}=^#Qs-c6#RAI>ny z0ymY=@2{iZ)QEmf;0gVhvNiPcILS-u$nLt)PZmTT8JXf+sTklYn51@yzyL4WJmKR> za0KjcNni{`>5ymPkJ~*6JJ~oeFHQXk{)0htF$`z~KgA^ZGKV*Toe3ggy)NnI8^^Geqwxg?3etNATXSTO`OMIYLD8XMGyS^>9kQbf3G3jP~{{z#UQXu2ks1wW(Q HzwEyOS-3zg literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/SimCreateIco.xpm b/src/Mod/Ship/Icons/SimCreateIco.xpm new file mode 100644 index 000000000..a1847db91 --- /dev/null +++ b/src/Mod/Ship/Icons/SimCreateIco.xpm @@ -0,0 +1,2265 @@ +/* XPM */ +static char * SimCreateIco_xpm[] = { +"128 128 2134 2", +" c None", +". c #7B7B7B", +"+ c #EAEAEA", +"@ c #E9EAE9", +"# c #E9E9E9", +"$ c #E9E9E8", +"% c #D9D9D9", +"& c #EAEAE9", +"* c #E8E9E8", +"= c #E9E8E8", +"- c #E8E8E8", +"; c #E8E8E7", +"> c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #BEBEF1", +"J) c #C7C6C6", +"K) c #C5C6C6", +"L) c #C6C5C6", +"M) c #B2B3B3", +"N) c #949494", +"O) c #7E7E7E", +"P) c #171718", +"Q) c #0D0E0D", +"R) c #09090A", +"S) c #080909", +"T) c #070607", +"U) c #060504", +"V) c #020303", +"W) c #B3B3B4", +"X) c #BBBBF4", +"Y) c #B4B4F7", +"Z) c #666666", +"`) c #9F9F9F", +" ! c #C4C3C4", +".! c #C2C2C3", +"+! c #C0C0BF", +"@! c #BCBBBB", +"#! c #909191", +"$! c #141516", +"%! c #121211", +"&! c #0F0E0F", +"*! c #090908", +"=! c #070606", +"-! c #050605", +";! c #020101", +">! c #B2B3B2", +",! c #A5A5BB", +"'! c #B0B0F9", +")! c #AFAFFA", +"!! c #4D4E4D", +"~! c #929292", +"{! c #C2C3C2", +"]! c #C1C2C2", +"^! c #C2C1C2", +"/! c #0B0C0B", +"(! c #030202", +"_! c #000100", +":! c #B3B2B2", +"~ c #ACACAD", +",~ c #A4A4A3", +"'~ c #A1A0A0", +")~ c #9E9D9D", +"!~ c #040405", +"~~ c #AFAFD2", +"{~ c #9393FD", +"]~ c #7777FF", +"^~ c #8181FF", +"/~ c #A9A9F8", +"(~ c #CECEFB", +"_~ c #CCCCFD", +":~ c #AEAEAF", +"<~ c #8F8F8F", +"[~ c #A9A9AA", +"}~ c #A3A2A2", +"|~ c #AEAFAF", +"1~ c #B3B4B3", +"2~ c #09090B", +"3~ c #AEAEDA", +"4~ c #8B8BFD", +"5~ c #7373FF", +"6~ c #7979FF", +"7~ c #9E9EF6", +"8~ c #8E8EAE", +"9~ c #BDBDFC", +"0~ c #B9B9FE", +"a~ c #BABAB9", +"b~ c #B2B2B3", +"c~ c #B1B3B2", +"d~ c #B1B2B1", +"e~ c #ADACAB", +"f~ c #AAA9AA", +"g~ c #888988", +"h~ c #9E9D9E", +"i~ c #A0A0A1", +"j~ c #A4A3A3", +"k~ c #A7A8A8", +"l~ c #B4B4B3", +"m~ c #B1B2B2", +"n~ c #ADADAE", +"o~ c #969595", +"p~ c #808083", +"q~ c #ABABDD", +"r~ c #8989FD", +"s~ c #7171FF", +"t~ c #6F6FFF", +"u~ c #8C8CFD", +"v~ c #9494C2", +"w~ c #57575E", +"x~ c #CFCFF8", +"y~ c #9595FE", +"z~ c #A0A0FD", +"A~ c #DBDBF8", +"B~ c #7D7C7C", +"C~ c #989898", +"D~ c #AEADAD", +"E~ c #ADACAD", +"F~ c #ACABAC", +"G~ c #9C9D9D", +"H~ c #7F7F7E", +"I~ c #565756", +"J~ c #989998", +"K~ c #A0A1A0", +"L~ c #A4A3A4", +"M~ c #B0B1B1", +"N~ c #B1B0B1", +"O~ c #AEAED9", +"P~ c #6B6BFF", +"Q~ c #7575FF", +"R~ c #9696EF", +"S~ c #7B7B95", +"T~ c #CACAEE", +"U~ c #ACACFD", +"V~ c #6363FF", +"W~ c #A2A2FD", +"X~ c #B6B7B7", +"Y~ c #787877", +"Z~ c #757676", +"`~ c #747474", +" { c #8C8D8C", +".{ c #9D9C9D", +"+{ c #A8A8A7", +"@{ c #545353", +"#{ c #989797", +"${ c #9F9F9E", +"%{ c #A0A1A1", +"&{ c #8C8C8B", +"*{ c #706F70", +"={ c #B1B1B0", +"-{ c #B0B0B1", +";{ c #AEAED3", +">{ c #8E8EFD", +",{ c #6565FF", +"'{ c #9999EE", +"){ c #7C7C94", +"!{ c #56565C", +"~{ c #5A5A5F", +"{{ c #8F8FA5", +"]{ c #AFAFF8", +"^{ c #4747FF", +"/{ c #B2B2FC", +"({ c #B4B5B5", +"_{ c #777677", +":{ c #727172", +"<{ c #6B6C6C", +"[{ c #80807F", +"}{ c #919090", +"|{ c #9E9E9F", +"1{ c #A4A5A4", +"2{ c #A6A7A6", +"3{ c #898888", +"4{ c #6E6E6D", +"5{ c #5F5F60", +"6{ c #797A7A", +"7{ c #7E7F7F", +"8{ c #777777", +"9{ c #616060", +"0{ c #5A5A66", +"a{ c #8B8BC5", +"b{ c #8484FD", +"c{ c #6767FF", +"d{ c #5F5FFF", +"e{ c #9494F2", +"f{ c #9A9ACA", +"g{ c #7B7B90", +"h{ c #64636D", +"i{ c #58585E", +"j{ c #57575D", +"k{ c #65656D", +"l{ c #7F7F8F", +"m{ c #A2A2C8", +"n{ c #A1A1F1", +"o{ c #3131FF", +"p{ c #BDBDEF", +"q{ c #767777", +"r{ c #767675", +"s{ c #717171", +"t{ c #6E6E6F", +"u{ c #6C6D6D", +"v{ c #6A6969", +"w{ c #676767", +"x{ c #656665", +"y{ c #676766", +"z{ c #727373", +"A{ c #5C5C5B", +"B{ c #6A6A6B", +"C{ c #7B7A7B", +"D{ c #626262", +"E{ c #575761", +"F{ c #8686BC", +"G{ c #8888FB", +"H{ c #6969FF", +"I{ c #6161FF", +"J{ c #5D5DFF", +"K{ c #5959FF", +"L{ c #8282FD", +"M{ c #9898F3", +"N{ c #A2A2E5", +"O{ c #A1A1DB", +"P{ c #A2A2D9", +"Q{ c #A7A7E3", +"R{ c #9F9FF3", +"S{ c #8080FD", +"T{ c #5353FF", +"U{ c #3939FF", +"V{ c #9090FC", +"W{ c #CFCFF5", +"X{ c #B1B1B2", +"Y{ c #777676", +"Z{ c #747575", +"`{ c #717271", +" ] c #6D6E6D", +".] c #6B6B6A", +"+] c #686767", +"@] c #646363", +"#] c #5D5D5C", +"$] c #777776", +"%] c #878788", +"&] c #969596", +"*] c #9A9898", +"=] c #9A9A99", +"-] c #646463", +";] c #7B7C7C", +">] c #7B7C7B", +",] c #707170", +"'] c #575756", +")] c #515159", +"!] c #8181B4", +"~] c #8686FB", +"{] c #5B5BFF", +"]] c #5757FF", +"^] c #4D4DFF", +"/] c #3B3BFF", +"(] c #3333FF", +"_] c #5F5FFD", +":] c #B1B1E8", +"<] c #ABACAB", +"[] c #787777", +"}] c #717170", +"|] c #696869", +"1] c #666565", +"2] c #646465", +"3] c #636363", +"4] c #605F5F", +"5] c #575758", +"6] c #8B8A8B", +"7] c #949393", +"8] c #7D7DAF", +"9] c #4F4FFF", +"0] c #4B4BFF", +"a] c #4343FF", +"b] c #4141FF", +"c] c #3D3DFF", +"d] c #3535FF", +"e] c #4545FF", +"f] c #9A9AFD", +"g] c #A8A8BB", +"h] c #A5A4A4", +"i] c #969797", +"j] c #787778", +"k] c #636364", +"l] c #606161", +"m] c #5D5C5C", +"n] c #585958", +"o] c #5C5C5D", +"p] c #868787", +"q] c #7F807F", +"r] c #53535D", +"s] c #7E7EB0", +"t] c #6D6DFF", +"u] c #5151FF", +"v] c #4949FF", +"w] c #3F3FFF", +"x] c #3737FF", +"y] c #9191FF", +"z] c #A6A6C2", +"A] c #747579", +"B] c #ADADAC", +"C] c #A8A9A8", +"D] c #9A9999", +"E] c #6A6A69", +"F] c #626261", +"G] c #5F605F", +"H] c #818081", +"I] c #868685", +"J] c #51515B", +"K] c #7C7CAF", +"L] c #8686F8", +"M] c #5555FF", +"N] c #A5A5F4", +"O] c #A6A6C1", +"P] c #737377", +"Q] c #7C7B7B", +"R] c #939292", +"S] c #8A8B8A", +"T] c #676768", +"U] c #848485", +"V] c #818281", +"W] c #7F7E7E", +"X] c #7B7B7A", +"Y] c #4E4E55", +"Z] c #7979AC", +"`] c #8484F7", +" ^ c #8686FC", +".^ c #ABABDA", +"+^ c #9393A5", +"@^ c #717174", +"#^ c #626263", +"$^ c #A5A6A6", +"%^ c #9F9FA0", +"&^ c #8B8C8B", +"*^ c #818180", +"=^ c #7E7D7E", +"-^ c #7C7C7D", +";^ c #787978", +">^ c #636463", +",^ c #4C4C51", +"'^ c #7676A6", +")^ c #8484F8", +"!^ c #8686FD", +"~^ c #9F9FD7", +"{^ c #A3A3D9", +"]^ c #A1A1E1", +"^^ c #A6A6E1", +"/^ c #A4A4D5", +"(^ c #A0A0C0", +"_^ c #8B8B9D", +":^ c #727279", +"<^ c #616160", +"[^ c #626161", +"}^ c #7C7D7C", +"|^ c #9B9A9A", +"1^ c #666667", +"2^ c #818182", +"3^ c #7D7E7D", +"4^ c #757475", +"5^ c #4D4D53", +"6^ c #7474A6", +"7^ c #7B7BFF", +"8^ c #8585FF", +"9^ c #9494BC", +"0^ c #64646C", +"a^ c #636368", +"b^ c #67676C", +"c^ c #69686D", +"d^ c #646466", +"e^ c #5E5E5F", +"f^ c #5F6060", +"g^ c #707171", +"h^ c #807F80", +"i^ c #8E8E8F", +"j^ c #979696", +"k^ c #959594", +"l^ c #686869", +"m^ c #7F8080", +"n^ c #7E7E7F", +"o^ c #7C7D7D", +"p^ c #737374", +"q^ c #7373A4", +"r^ c #8282F8", +"s^ c #8383FF", +"t^ c #535453", +"u^ c #5B595B", +"v^ c #5F5F5E", +"w^ c #747473", +"x^ c #838384", +"y^ c #908F90", +"z^ c #919192", +"A^ c #7D7C7D", +"B^ c #818282", +"C^ c #808081", +"D^ c #7F7F80", +"E^ c #4C4C54", +"F^ c #7272A3", +"G^ c #8080F4", +"H^ c #9292C5", +"I^ c #666670", +"J^ c #5B5A5C", +"K^ c #5C5D5D", +"L^ c #828181", +"M^ c #5A595A", +"N^ c #676667", +"O^ c #8A8A8A", +"P^ c #7A7A7B", +"Q^ c #6F6FA0", +"R^ c #8080F3", +"S^ c #7D7DFF", +"T^ c #9090C5", +"U^ c #646570", +"V^ c #9E9E9D", +"W^ c #838282", +"X^ c #767576", +"Y^ c #868585", +"Z^ c #797A79", +"`^ c #737273", +" / c #46464B", +"./ c #6C6D9E", +"+/ c #7D7DF6", +"@/ c #7C7CFD", +"#/ c #8F8FC6", +"$/ c #64646F", +"%/ c #7F7E7F", +"&/ c #989897", +"*/ c #9C9D9C", +"=/ c #6B6B71", +"-/ c #7B7BAC", +";/ c #7C7CFC", +">/ c #8F8FC8", +",/ c #61616E", +"'/ c #4D4F4E", +")/ c #9C9B9C", +"!/ c #9B9B9A", +"~/ c #747479", +"{/ c #8282B0", +"]/ c #7E7EF6", +"^/ c #8C8CCB", +"// c #61616F", +"(/ c #838483", +"_/ c #8D8D8C", +":/ c #959696", +"( c #74749F", +",( c #6969F0", +"'( c #8B8BFF", +")( c #7E7EE7", +"!( c #69698A", +"~( c #717172", +"{( c #75759A", +"]( c #6D6DE5", +"^( c #8383E8", +"/( c #696987", +"(( c #737398", +"_( c #6C6CE1", +":( c #7F80E6", +"<( c #8282A1", +"[( c #737399", +"}( c #6A6AE1", +"|( c #8F8FFF", +"1( c #7C7CED", +"2( c #7F7FA2", +"3( c #757577", +"4( c #72729A", +"5( c #6464E4", +"6( c #6F6FFD", +"7( c #7979F9", +"8( c #8080A8", +"9( c #727294", +"0( c #6464E1", +"a( c #7474FD", +"b( c #7777F4", +"c( c #565675", +"d( c #5E5ED3", +"e( c #9090FD", +"f( c #8F8FFA", +"g( c #8A8AFC", +"h( c #7979ED", +"i( c #7F7FA9", +"j( c #6565ED", +"k( c #7575FE", +"l( c #8B8BD5", +"m( c #7B7BAB", +"n( c #75759D", +"o( c #7A7AB1", +"p( c #8484DC", +"q( c #7575EE", +"r( c #7E7EA9", +"s( c #747477", +"t( c #7070E7", +"u( c #6868FD", +"v( c #9898F5", +"w( c #4C4C53", +"x( c #5E5E73", +"y( c #7B7BCE", +"z( c #7474F4", +"A( c #7C7CAB", +"B( c #6565F2", +"C( c #7777FC", +"D( c #7F7FFA", +"E( c #6E6EFB", +"F( c #666699", +"G( c #56565A", +"H( c #6262F7", +"I( c #8585FA", +"J( c #8484F3", +"K( c #7070FB", +"L( c #8181E4", +"M( c #6262F5", +"N( c #8080FB", +"O( c #8383F2", +"P( c #7171FE", +"Q( c #6F6FFA", +"R( c #8181E6", +"S( c #6969EC", +"T( c #6E6EFD", +"U( c #9A9AEF", +"V( c #7878F7", +"W( c #6C6CFB", +"X( c #8080E7", +"Y( c #6464FB", +"Z( c #7E7EFB", +"`( c #9999EA", +" _ c #7F7FEA", +"._ c #6B6BFC", +"+_ c #7B7BE6", +"@_ c #6C6BE5", +"#_ c #6161FE", +"$_ c #8585F2", +"%_ c #8D8DEC", +"&_ c #8282EB", +"*_ c #7777F2", +"=_ c #6969FE", +"-_ c #7A7AE7", +";_ c #7979E6", +">_ c #6C6CF1", +",_ c #6464F9", +"'_ c #6666FB", +")_ c #6565FA", +"!_ c #7070F1", +"~_ c #8787E7", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# I) ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.J)K)L)f#$$$$$$M)N)O)) 3@%%Q'P)E%+&}%n&^*^*t*6=a%`**,M=Q)M-!)f,%'R)>,S)-'T)6'U)F)7)V)8)o)G)z)z)W)W)/#X* X)Y) ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)z)W)>!/#,!'!)! ", +" o+I.4.m%[+ +=$G#|.!!|.k.M&|.F.k.<+!!(@G.H.4._#_#I.n.:#o+C+.+++2+P.~!/#/#/#/#/#B#R*i*y*D*{ E${!(%]!^!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;/!-,%)R)r'r'-'6'=)w).)()(!g)_!z)z)z)z):!M)>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z)x!y!z!A!B! C! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#D!E!F!G!E*j*H!3*W)(&{ | =&x*[=I!/#/#/#J!Z&Z&Z&c%c%e F>K!,,L!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)M!N!O!P!Q! R!R! ", +" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)G)$~%~&~P!*~ R!=~ ", +" P.G%[;o*F!-~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%;~x*=&7.E*2*{ >~| y*^&,~'~)~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)!~~~{~]~^~/~ (~_~ ", +" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*2~3~4~5~6~7~8~ 9~0~ ", +" P.a~p)3*R*/&b~c~d~X!j*e~f~E!g~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)h~i~j~x*i*T*k~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.l~l~o*M):!l*m~n~o~p~q~r~s~t~u~v~w~P.P. x~y~z~A~ ", +" P..~1~o*%@!*B~;*C~T*j*{ D~E~F~| E*G~H~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.I~-*} J~K~R*L~9&]&j~E!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&m~M~N~x!O~r~t~P~Q~R~S~P.P.P.P.P.P.P. T~U~V~W~ ", +" P.X~l*(&!*}-Y~0*Z~`~T![- {.{=&E&=&=&=&y*+{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$@{s !*. a)+~#{${%{%{/#/#e*1*/#e*&{. *{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.={/&-{;{>{t~P~,{6~'{){!{P.P.P.P.P.P.~{{{]{,{^{/{ ", +" P.({/&/&}-*+_{F=F=T!:{5.V&S.<{-*[{}{|{9&R*R*1{2{`)3{4{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 5{}*i&V&`~6{7{O):&[*D+8{Z)9{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0{a{b{P~c{,{d{5~e{f{g{h{i{j{k{l{m{n{,{o{,{p{ ", +" P.1~:~:~*+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{z{S&N)${h~${D!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M A{! Z)B{5.Z~C{[-8{-*S.)*D{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.E{F{G{s~H{,{I{J{K{c{L{M{N{O{P{Q{R{S{T{o{U{V{W{ ", +" P.X{2*>~Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]Q $]%]&]-~*]=]-~|%. S.-]v I.a+$+#+Q.P.P.P.P.P.P.P.p.s{$];]>]0*,]p.Z)1=a ']*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]!]~]s~H{c{V~d{{]]]T{T{{]V~c{V~{]^]/](]o{_]:] ", +" P.-{<]| !@[]T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M :.|]. 6]E@7]7]<~>)}-s{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]8]b{5~P~c{,{I{J{{]]]T{9]0]^{a]b]c]U{d]o{e]f]g] ", +" P.j*7.[~A*A*h]i]U&j]w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.7@o]a!D+|%+~ ~p]q]}-T!3][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.r]s]~]5~t]H{,{V~d{{]K{T{u]^]v]e]a]w]c]x]x]u]y]z]A] ", +" P.B]C]G!e*h]=&T.V*V*x*D];*8{E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#}.G]:{H]I]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J]K]L]Q~t~P~c{V~d{J{K{M]u]9]0]^{a]w]c]c]^]Q~N]O]P]1] ", +" P.o!-+-+%@!*Q]!@R]!=x*x*c+j~Q*e*S]*+T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+U]S&V]:&W]=*X]Y~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Y]Z]`]]~t~t]H{,{I{J{{]]]T{9]]]t~t]I{d{t] ^R{.^+^@^#^@] ", +" P.7.i*$^!*}-Y~0*Z~`~-*. x&,.`)_&K~%^I!e*&^}-T]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)*^D+=^-^. 6{*+;^8{-*>^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.,^'^)^6~s~t]P~c{V~d{{]K{M]u]M]!^~^{^]^^^/^(^_^:^D{! <^[^ ", +" P.=&]&]&}-*+_{F=F=T!:{5.V&S.<{5.}^&^/=/#X*|^e*s%&{!*1^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&2^:&H~3^;]X]p=*+$]0*4^T!`~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5^6^L{7^5~t~P~H{,{I{J{K{]]T{K{8^9^0^a^b^c^d^e^A{#]9 ) 5{f^ ", +" P.2{Q*Q**+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{g^h^i^C~/=j^6.k^ ~b%l^M [+4.Q@C+p+2+P.P.P.P.a)[*m^n^o^b%!*}-*+$]F=p^-*-*-*T!`~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.Y]q^r^7^Q~s~t]H{c{V~d{{]]]M]K{s^v~k{t^N M v ..K u^:.a 0 n v^ ", +" P.c+_&_&Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]1]w^x^y^z^#!&@<~|%A^.*N 0%P.P.P.P.P.B^C^D^n^[-. !*}-[]-&F=T!-*-*-*-*-*-*-*T!`~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.E^F^G^7^]~5~t~P~c{,{I{J{K{M]K{&~H^I^O+&.%.O N ^+5]{@s r J^o]K^ ", +" P.R*D!`)L^Y{T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M M^N^[]!@+~ ~|%O^x&O)< ..n.P.V]:&D+O)b%P^6{;^8{0*`~T!-*-*-*-*-*-*-*-*-*-*-*T!`~F=5.w{9 ..&.I.P.#+Q.Q.P.w%Q^R^7^]~Q~s~t]H{,{V~d{{]]]]]S^T^U^>.i.`.&.g.#.N +.v ..s Y.r H ", +" P.[=!=V^!=!==]<~W^X^w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.}.{+< [ ~ p]Y^O'S&[-*^D^O)[-%@!*Z^@~0*F=`~`^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!`~`~V&w{1=H g.n. /./+/S^6~Q~s~t~P~c{V~d{J{K{K{@/#/$/1!2.}.-.<.O+g.P $.N I~v .. .s ", +" P.%/7]&/=]*/.{X*X*X*|^,#S&F=E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B^:&D+O)-^. !**+8{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*=/-/;/S^7^]~5~s~t]H{,{I{d{{]K{7^>/,/I.n+<%M&'/}.[.`.&.g.P N N M ']]+ ", +" P.8+v+1.Z)D+ ~,#/=1*)/!/e*s%s%,#O'F=T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+H~[-. !*v&*+q{F=`~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~/{/]/&~S^6~Q~s~t~P~c{V~d{J{{]6~^///S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", +" P.#+8+9+#+_+w b%(/_/=+e*s%C~i]:/.}.[.<. ", +" $+P.4.g.H w{r/&{s/,#a&&{O^t/;*x&0!*+u/Z.0%P.P.P.P.P.b%. !*}-*+8{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*v/w/x/&~s^&~7^6~Q~s~t]H{c{V~d{Q~y/z/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", +" Q.O.I.F.N w{b% ~+~|%A/U&~ !@O'S&a)B/w M o+P.b%h/!*C/8{0*D/p^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*E/F/G/&~8^^~S^6~Q~5~t~P~c{,{I{5~H/I/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", +" P.O.M.o+g.w =*J/U&K/L/a)M/:&D+|/-^;^. !*}-*+0*N/O/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*P/Q/R/&~8^s^&~7^]~5~t~t]H{,{I{s~S/T/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", +" P.P.P.P.p+N < =*U/*^M/O)0/-^%@P^}-v&[]0*V/W/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~P!s^&~S^]~Q~5~t~H{c{V~s~`/ (P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", +" P.Q.#+$+M. .Z*.(%@!*. +(v&j]@(F=b/z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(%(&~O!8^^~S^7^]~5~t~t]H{,{&(*(=(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", +" P.#+$+a+f@H -(`~W/;(N/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/>(,(@/'(P!s^&~S^]~5~s~t]P~c{t~)(!(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", +" P.Q.$+a+#+1.H w{< S.s{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~({(](S^'(O!8^^~S^7^]~s~t~P~c{t~^(/(<@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" P.#+a+a+P.k.s 3]w{p.s{`~T!-*-*-*-*-*-*-*-*-*-*-*((_(S^A!'(8^s^&~7^6~Q~t~t]H{t~:(<(f@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" Q. $+M.}...) Z)S.T!`~T!-*-*-*-*-*-*[(}(7^|('(P!s^&~7^6~Q~s~t]P~t~1(2(3(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" Q.o+}.M 0 Y&V&F=`~T!-*4(5(6~|(A!O!8^^~S^7^Q~5~t~P~6(7(8(P/F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" #+P.n.k.&.H w{9(0(a(y]|('(P!s^&~S^6~Q~s~t]t~b(3/P/-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", +" Q.O.c(d(o/e(f(g(O!8^^~S^6~Q~5~t~t~h(i(P/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", +" j(k(l(m(n(o(p(^~&~7^]~5~s~t~q(r(s(-*-*-*F=n.P.P.P.P.P.P.P.P. ", +" t(u(v( w(x(y(@/6~Q~s~t~z(A(2/-*-*-*-*F=n.P.P.P.P.P.P. ", +" B(C( D(]~5~t~E(F(G(N%5.T!T!-*F=n.P.P.P.P. ", +" H(I( J(k(s~K(L( /Q.#+#+n...w{T!n.P.P. ", +" M(N( O(P(Q(R( P.#+$+Q.P. ", +" S(T(U( V(W(X( ", +" Y(Z(`( _._+_ ", +" @_#_P($_%_&_*_=_-_ ", +" ;_>_,_'_)_!_~_ ", +" ", +" "}; diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d4e42da2b48d2045c836c2a6d8ee3b536ae05909 GIT binary patch literal 47149 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 literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index aa8a409af..442ef5f32 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -35,12 +35,16 @@ class ShipWorkbench ( Workbench ): list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Loading",list) + self.appendToolbar("Weights",list) + list = ["Ship_CreateSim"] + self.appendToolbar("Simulation",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Loading",list) + self.appendToolbar("Weights",list) + list = ["Ship_CreateSim"] + self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index d1c50cfe3..bb71e262b 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -5,6 +5,7 @@ data_DATA = \ InitGui.py \ ShipGui.py \ Instance.py \ + SimInstance.py \ TankInstance.py nobase_data_DATA = \ @@ -37,6 +38,11 @@ nobase_data_DATA = \ Icons/Weight.png \ Icons/Weight.xcf \ Icons/Weight.xpm \ + Icons/SimIco.xcf \ + Icons/Sim.xpm \ + Icons/SimCreateIco.png \ + Icons/SimCreateIco.xcf \ + Icons/SimCreateIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -81,6 +87,9 @@ nobase_data_DATA = \ tankGZ/Plot.py \ tankGZ/TaskPanel.py \ tankGZ/TaskPanel.ui + simCreate/__init__.py \ + simCreate/TaskPanel.py \ + simCreate/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index c97f1e908..52407b824 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -120,6 +120,18 @@ class GZ: ToolTip = str(Translator.translate('Transversal stability GZ curve computation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class CreateSim: + def Activated(self): + import simCreate + simCreate.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimCreateIco.png" + MenuText = str(Translator.translate('Create a new simulation')) + ToolTip = str(Translator.translate('Create a new simulation in order to process later')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -128,3 +140,4 @@ FreeCADGui.addCommand('Ship_Hydrostatics', Hydrostatics()) FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) +FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py new file mode 100644 index 000000000..82556cacf --- /dev/null +++ b/src/Mod/Ship/SimInstance.py @@ -0,0 +1,617 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * + +# COIN +from pivy.coin import * +from pivy import coin + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class FreeSurfaceFace: + def __init__(self, pos, normal, l, b): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param Element length (distance between elements at x direction) + @param Element beam (distance between elements at y direction) + """ + self.pos = pos + self.normal = normal + self.area = l*b + +class ShipSimulation: + def __init__(self, obj, fsMeshData): + """ Creates a new simulation instance on active document. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + """ + # Add uniqueness property to identify Tank instances + obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True + # Compute free surface mesh + self.createFSMesh(obj,fsMeshData) + # Add shapes + shape = self.computeShape(obj) + if not shape: + obj.IsShipSimulation=False + return + obj.Shape = shape + obj.Proxy = self + + def onChanged(self, fp, prop): + """ Property changed, tank must be recomputed """ + if prop == "IsShipSimulation": + FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n") + + def execute(self, obj): + """ Shape recomputation called """ + obj.Shape = self.computeShape(obj) + + def createFSMesh(self, obj, fsMeshData): + """ Create or modify free surface mesh. + @param obj Created Part::FeaturePython object. + @param fsMeshData [L,B,N] Free surface mesh data, with lenght + (x), Beam (y) and desired number of points. + """ + # Study input object + try: + props = obj.PropertiesList + props.index("IsShipSimulation") + if not obj.IsShipSimulation: + msg = str(Translator.translate("Object is not a valid ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + except ValueError: + msg = str(Translator.translate("Object is not a ship simulation.\n")) + FreeCAD.Console.PrintError(msg) + return + # Get areas and number of elements per direction + L = fsMeshData[0] + B = fsMeshData[1] + N = fsMeshData[2] + A = L*B + area = A/N + l = sqrt(area) + b = sqrt(area) + nx = int(round(L / l)) + ny = int(round(B / b)) + print(l,b,nx,ny) + # Start data fields if not already exist + props = obj.PropertiesList + try: + props.index("FS_Nx") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Nx","ShipSimulation", str(Translator.translate("Free surface number of elements at x direction"))).FS_Nx=0 + try: + props.index("FS_Ny") + except ValueError: + obj.addProperty("App::PropertyInteger","FS_Ny","ShipSimulation", str(Translator.translate("Free surface number of elements at y direction"))).FS_Ny=0 + try: + props.index("FS_Position") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Position","ShipSimulation", str(Translator.translate("Free surface elements position"))).FS_Position=[] + try: + props.index("FS_Area") + except ValueError: + obj.addProperty("App::PropertyFloatList","FS_Area","ShipSimulation", str(Translator.translate("Free surface elements area"))).FS_Area=[] + try: + props.index("FS_Normal") + except ValueError: + obj.addProperty("App::PropertyVectorList","FS_Normal","ShipSimulation", str(Translator.translate("Free surface elements normal"))).FS_Normal=[] + # Fill data + obj.FS_Nx = nx + obj.FS_Ny = ny + pos = [] + areas = [] + normal = [] + for i in range(0,nx): + for j in range(0,ny): + pos.append(Vector(-0.5*L + (i+0.5)*l,-0.5*B + (j+0.5)*b,0.0)) + areas.append(l*b) + normal.append(Vector(0.0,0.0,1.0)) + obj.FS_Position = pos[:] + obj.FS_Area = areas[:] + obj.FS_Normal = normal[:] + + def FSMesh(self, obj): + """ Get free surface mesh in matrix mode. + @param obj Created Part::FeaturePython object. + @return Faces matrix + @note areas and normals will recomputed. + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + # Transform positions into a mesh + pos = [] + for i in range(0,nx): + pos.append([]) + for j in range(0,ny): + pos[i].append(obj.FS_Position[j + i*ny]) + # Recompute normals and dimensions + normal = [] + l = [] + b = [] + for i in range(0,nx): + normal.append([]) + l.append([]) + b.append([]) + for j in range(0,ny): + i0 = i-1 + i1 = i+1 + fi = 1.0 + j0 = j-1 + j1 = j+1 + fj = 1.0 + if i == 0: + i0 = i + i1 = i+1 + fi = 2.0 + if i == nx-1: + i0 = i-1 + i1 = i + fi = 2.0 + if j == 0: + j0 = j + j1 = j+1 + fj = 2.0 + if j == ny-1: + j0 = j-1 + j1 = j + fj = 2.0 + l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) + b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) + xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, + obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, + obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) + yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, + obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, + obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) + n = Vector(xvec.cross(yvec)) # Z positive + normal[i].append(n.normalize()) + # Create faces + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) + # Reconstruct mesh data + for i in range(0,nx): + for j in range(0,ny): + obj.FS_Position[j + i*ny] = faces[i][j].pos + obj.FS_Normal[j + i*ny] = faces[i][j].normal + obj.FS_Area[j + i*ny] = faces[i][j].area + return faces + + def computeShape(self, obj): + """ Computes simulation involved shapes. + @param obj Created Part::FeaturePython object. + @return Shape + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + mesh = self.FSMesh(obj) + planes = [] + # Create planes + for i in range(1,nx-1): + for j in range(1,ny-1): + v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25) + v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25) + v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25) + v3 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j+1].pos + mesh[i-1][j+1].pos).multiply(0.25) + p = Part.makePolygon([v0,v1,v2,v3,v0]) + planes.append(Part.makeFilledFace(p.Edges)) + # Join into a compound + return Part.makeCompound(planes) + +class ViewProviderShipSimulation: + def __init__(self, obj): + """ Set this object to the proxy object of the actual view provider """ + obj.Proxy = self + + def attach(self, obj): + """ Setup the scene sub-graph of the view provider, this method is mandatory """ + return + + def updateData(self, fp, prop): + """ If a property of the handled feature has changed we have the chance to handle this here """ + return + + def getDisplayModes(self,obj): + ''' Return a list of display modes. ''' + modes=[] + return modes + + def getDefaultDisplayMode(self): + ''' Return the name of the default display mode. It must be defined in getDisplayModes. ''' + return "Flat Lines" + + def setDisplayMode(self,mode): + ''' Map the display mode defined in attach with those defined in getDisplayModes. + Since they have the same names nothing needs to be done. This method is optinal. + ''' + return mode + + def onChanged(self, vp, prop): + ''' Print the name of the property that has changed ''' + # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n") + + def __getstate__(self): + ''' When saving the document this object gets stored using Python's cPickle module. + Since we have some un-pickable here -- the Coin stuff -- we must define this method + to return a tuple of all pickable objects or None. + ''' + return None + + def __setstate__(self,state): + ''' When restoring the pickled object from document we have the chance to set some + internals here. Since no data were pickled nothing needs to be done here. + ''' + return None + + def getIcon(self): + return """ + /* XPM */ + static char * Sim_xpm[] = { + "32 32 301 2", + " c None", + ". c #CCCCCC", + "+ c #A9A9A9", + "@ c #989898", + "# c #A1A1A1", + "$ c #C3C3C3", + "% c #C1C0C1", + "& c #BFBFBF", + "* c #A7A7A7", + "= c #808080", + "- c #5C5C5C", + "; c #565655", + "> c #4E4E4E", + ", c #676767", + "' c #898989", + ") c #B6B5B6", + "! c #BABABA", + "~ c #B9B9B9", + "{ c #A5A5A5", + "] c #7E7E7E", + "^ c #595A59", + "/ c #575656", + "( c #535353", + "_ c #505050", + ": c #4D4D4C", + "< c #474747", + "[ c #404040", + "} c #4D4D4D", + "| c #787878", + "1 c #B8B7B8", + "2 c #B6B6B6", + "3 c #888888", + "4 c #7C7C7C", + "5 c #575657", + "6 c #535354", + "7 c #4E4D4E", + "8 c #4A4A4A", + "9 c #444444", + "0 c #414141", + "a c #3E3E3E", + "b c #393938", + "c c #313131", + "d c #393939", + "e c #636363", + "f c #ABABAB", + "g c #B3B3B3", + "h c #848484", + "i c #787979", + "j c #545454", + "k c #515151", + "l c #4B4B4B", + "m c #484748", + "n c #3B3B3B", + "o c #383838", + "p c #353535", + "q c #323232", + "r c #2F2F2E", + "s c #2A2A2A", + "t c #222323", + "u c #252625", + "v c #AFAFAF", + "w c #767676", + "x c #484848", + "y c #454545", + "z c #424242", + "A c #3F3F3E", + "B c #3B3B3C", + "C c #393838", + "D c #2F2F2F", + "E c #2C2C2C", + "F c #292929", + "G c #262626", + "H c #222222", + "I c #1F1F20", + "J c #171716", + "K c #959595", + "L c #747474", + "M c #4E4E4F", + "N c #4C4B4C", + "O c #484849", + "P c #424243", + "Q c #282828", + "R c #525251", + "S c #373737", + "T c #353636", + "U c #333233", + "V c #30302F", + "W c #2C2D2D", + "X c #232323", + "Y c #201F20", + "Z c #1D1D1D", + "` c #151414", + " . c #717272", + ".. c #4C4C4C", + "+. c #484949", + "@. c #464545", + "#. c #424343", + "$. c #3A3A3A", + "%. c #5D4A49", + "&. c #7E7E86", + "*. c #56569F", + "=. c #3E3E41", + "-. c #757575", + ";. c #575757", + ">. c #222221", + ",. c #262627", + "'. c #242423", + "). c #212020", + "!. c #1A1A1A", + "~. c #121212", + "{. c #939493", + "]. c #6F6F6F", + "^. c #494949", + "/. c #464646", + "(. c #434343", + "_. c #554545", + ":. c #686863", + "<. c #939394", + "[. c #BDBDBD", + "}. c #202021", + "|. c #1E1E1E", + "1. c #171718", + "2. c #0F0F0F", + "3. c #929292", + "4. c #6C6D6D", + "5. c #464746", + "6. c #525F73", + "7. c #444648", + "8. c #3D3D3D", + "9. c #2D2C2A", + "0. c #A1A2A2", + "a. c #AAACAC", + "b. c #A6A7A7", + "c. c #A8AAAA", + "d. c #AFB0B0", + "e. c #777676", + "f. c #9A9A9A", + "g. c #1B1B1B", + "h. c #181818", + "i. c #0C0C0C", + "j. c #909090", + "k. c #6B6A6B", + "l. c #55657E", + "m. c #6990FB", + "n. c #6483CD", + "o. c #5871B2", + "p. c #434E7E", + "q. c #A97C76", + "r. c #AB7777", + "s. c #AC7070", + "t. c #A26565", + "u. c #805C5C", + "v. c #848686", + "w. c #424342", + "x. c #151515", + "y. c #0A0909", + "z. c #8F8F8F", + "A. c #676868", + "B. c #3B3A3A", + "C. c #383738", + "D. c #353534", + "E. c #45525F", + "F. c #6367AC", + "G. c #804682", + "H. c #942A39", + "I. c #991312", + "J. c #540901", + "K. c #393742", + "L. c #1C1C1C", + "M. c #191919", + "N. c #161515", + "O. c #121313", + "P. c #070707", + "Q. c #8D8E8D", + "R. c #656566", + "S. c #3E3F3F", + "T. c #2F2E2F", + "U. c #353838", + "V. c #35496A", + "W. c #3E4D88", + "X. c #354889", + "Y. c #5573D7", + "Z. c #5D80FB", + "`. c #374899", + " + c #293338", + ".+ c #101010", + "++ c #0D0D0D", + "@+ c #040404", + "#+ c #8C8C8C", + "$+ c #8B8B8B", + "%+ c #4B4A4B", + "&+ c #303030", + "*+ c #333232", + "=+ c #2F2F30", + "-+ c #232223", + ";+ c #1A1919", + ">+ c #2E3949", + ",+ c #5C7BA3", + "'+ c #36467D", + ")+ c #536F93", + "!+ c #0A0A0A", + "~+ c #010101", + "{+ c #C1C1C1", + "]+ c #B8B8B8", + "^+ c #A0A0A0", + "/+ c #3F3F3F", + "(+ c #222122", + "_+ c #202020", + ":+ c #161717", + "<+ c #141414", + "[+ c #111011", + "}+ c #0D0E0E", + "|+ c #0B0B0A", + "1+ c #000000", + "2+ c #525252", + "3+ c #686868", + "4+ c #ADADAD", + "5+ c #9E9F9F", + "6+ c #6D6D6D", + "7+ c #3C3C3C", + "8+ c #131414", + "9+ c #111111", + "0+ c #0E0E0E", + "a+ c #0B0B0B", + "b+ c #080708", + "c+ c #050504", + "d+ c #4C4D4C", + "e+ c #4D4C4D", + "f+ c #494A4A", + "g+ c #454444", + "h+ c #9D9D9D", + "i+ c #9E9E9E", + "j+ c #AEAEAE", + "k+ c #BEBEBF", + "l+ c #BEBDBD", + "m+ c #979797", + "n+ c #6A6B6A", + "o+ c #3F3F40", + "p+ c #020202", + "q+ c #030303", + "r+ c #878787", + "s+ c #69696A", + "t+ c #868685", + "u+ c #646464", + "v+ c #474647", + "w+ c #656565", + "x+ c #9E9F9E", + "y+ c #A8A8A8", + "z+ c #AFAFAE", + "A+ c #A4A4A4", + "B+ c #7A7A7A", + "C+ c #969696", + "D+ c #363636", + "E+ c #777776", + "F+ c #8C8D8D", + "G+ c #7D7D7D", + "H+ c #5E5E5E", + "I+ c #4F4F50", + "J+ c #808181", + "K+ c #707070", + "L+ c #909191", + "M+ c #9C9C9C", + "N+ c #787877", + "O+ c #696969", + "P+ c #616161", + "Q+ c #6E6E6E", + "R+ c #7C7B7C", + "S+ c #777677", + "T+ c #6F6E6E", + "U+ c #595959", + "V+ c #717171", + "W+ c #8D8D8D", + "X+ c #515051", + "Y+ c #49494A", + "Z+ c #4B4A4A", + "`+ c #606060", + " @ c #6A6A6A", + ".@ c #616162", + "+@ c #6C6D6C", + "@@ c #767777", + "#@ c #727272", + "$@ c #6B6B6B", + "%@ c #828283", + "&@ c #757475", + "*@ c #444545", + "=@ c #565656", + "-@ c #5A595A", + ";@ c #666666", + ">@ c #878687", + ",@ c #8A8A8A", + "'@ c #797979", + ")@ c #444344", + "!@ c #7F8080", + "~@ c #737373", + "{@ c #484747", + "]@ c #707170", + "^@ c #7F7F7F", + "/@ c #676867", + "(@ c #4D4C4C", + "_@ c #5F5F5F", + ":@ c #434444", + " ", + " ", + " . + ", + " @ # $ % & * ", + " = - ; > , ' ) ! ~ { ", + " ] ^ / ( _ : < [ } | # 1 2 # 3 ", + " 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ", + " i j k 7 l m 9 0 a n o p q r s t u < | v ", + " w k > l x y z A B C p q D E F G H I J K ", + " L M N O y P Q R S T U V W F G X Y Z ` K ", + " ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ", + " ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ", + " 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ", + " k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ", + " A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ", + " R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ", + " $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ", + " {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ", + " k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ", + " %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ", + " s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ", + " E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ", + " L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ", + " V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ", + " ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ", + " ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ", + " e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ", + " - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ", + " =@_@O+L ~@#@~@L _ 9 9 :@ ", + " ;.H+ @-._ (. ", + " ", + " "}; + """ diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py new file mode 100644 index 000000000..3741fbec4 --- /dev/null +++ b/src/Mod/Ship/simCreate/TaskPanel.py @@ -0,0 +1,125 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +import SimInstance +from shipUtils import Paths, Translator + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simCreate/TaskPanel.ui" + + def accept(self): + form = self.form + obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") + sim = SimInstance.ShipSimulation(obj, + [form.length.value(), form.beam.value(), form.n.value()]) + SimInstance.ViewProviderShipSimulation(obj.ViewObject) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") + form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") + form.n = form.findChild(QtGui.QSpinBox, "N") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) + QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Create a new ship simulation")) + self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface")) + self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) + self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) + self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) + + def onFS(self, value): + """ Method called when ship data is changed. + Annotations must be showed. + @param value Changed value. + """ + pass + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simCreate/TaskPanel.ui b/src/Mod/Ship/simCreate/TaskPanel.ui new file mode 100644 index 000000000..995b64455 --- /dev/null +++ b/src/Mod/Ship/simCreate/TaskPanel.ui @@ -0,0 +1,182 @@ + + + TaskPanel + + + + 0 + 0 + 260 + 180 + + + + + 0 + 180 + + + + Create new simulation + + + + + + + + + 240 + 160 + + + + Free surface + + + false + + + + + 0 + 20 + 241 + 141 + + + + + 6 + + + QLayout::SetDefaultConstraint + + + + + QLayout::SetDefaultConstraint + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Length + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Beam + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Number of points + + + + + + + 1 + + + 1000000000 + + + 10000 + + + + + + + + + + + + + + + + diff --git a/src/Mod/Ship/simCreate/__init__.py b/src/Mod/Ship/simCreate/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/simCreate/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 70a4cf0e1b8ecc8b9a2281cc7b608de12eb51fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 12:01:53 +0200 Subject: [PATCH 13/26] Removed Surfaces module interdependency --- src/Mod/Ship/shipHydrostatics/TaskPanel.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py index 665e7edaf..4ff23dc45 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py @@ -31,7 +31,6 @@ from PyQt4 import QtGui,QtCore import Plot import Instance from shipUtils import Paths, Translator -from surfUtils import Geometry import Tools class TaskPanel: @@ -108,7 +107,7 @@ class TaskPanel: """ Set initial values for fields """ # Get objects - selObjs = Geometry.getSelectedObjs() + selObjs = Gui.Selection.getSelection() if not selObjs: msg = Translator.translate("Ship instance must be selected (no object selected)\n") App.Console.PrintError(msg) From a933c932693f977aca82bb347a051634c7c10178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 12:42:19 +0200 Subject: [PATCH 14/26] Built simulations run interface (threaded) --- src/Mod/Ship/CMakeLists.txt | 19 +- src/Mod/Ship/Icons/SimCreateIco.png | Bin 14469 -> 14502 bytes src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 51656 -> 0 bytes src/Mod/Ship/Icons/SimCreateIco.xpm | 1276 +++++++------ src/Mod/Ship/Icons/SimRunIco.png | Bin 0 -> 15466 bytes src/Mod/Ship/Icons/SimRunIco.xpm | 2723 +++++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 11 +- src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/SimInstance.py | 187 +- src/Mod/Ship/simCreate/TaskPanel.py | 55 +- src/Mod/Ship/simCreate/TaskPanel.ui | 357 ++-- src/Mod/Ship/simRun/Simulation.py | 56 + src/Mod/Ship/simRun/TaskPanel.py | 160 ++ src/Mod/Ship/simRun/TaskPanel.ui | 115 ++ src/Mod/Ship/simRun/__init__.py | 36 + 16 files changed, 4150 insertions(+), 862 deletions(-) delete mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf create mode 100644 src/Mod/Ship/Icons/SimRunIco.png create mode 100644 src/Mod/Ship/Icons/SimRunIco.xpm create mode 100644 src/Mod/Ship/simRun/Simulation.py create mode 100644 src/Mod/Ship/simRun/TaskPanel.py create mode 100644 src/Mod/Ship/simRun/TaskPanel.ui create mode 100644 src/Mod/Ship/simRun/__init__.py diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index fc71cb055..f16627870 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -40,8 +40,9 @@ SET(ShipIcons_SRCS Icons/SimIco.xcf Icons/Sim.xpm Icons/SimCreateIco.png - Icons/SimCreateIco.xcf Icons/SimCreateIco.xpm + Icons/SimRunIco.png + Icons/SimRunIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm @@ -136,7 +137,15 @@ SET(SimCreate_SRCS ) SOURCE_GROUP("simcreate" FILES ${SimCreate_SRCS}) -SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS}) +SET(SimRun_SRCS + simRun/__init__.py + simRun/Simulation.py + simRun/TaskPanel.py + simRun/TaskPanel.ui +) +SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) + +SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS}) ADD_CUSTOM_TARGET(Ship ALL SOURCES ${all_files} @@ -216,6 +225,12 @@ INSTALL( DESTINATION Mod/Ship/simCreate ) +INSTALL( + FILES + ${SimRun_SRCS} + DESTINATION + Mod/Ship/simRun +) INSTALL( FILES ${ShipMain_SRCS} diff --git a/src/Mod/Ship/Icons/SimCreateIco.png b/src/Mod/Ship/Icons/SimCreateIco.png index 838b46e8bbceacc2d0a0a53dc71b6a84106e6f22..4886cd01d9e335a315d8ecdb3595c9768b79a40f 100644 GIT binary patch delta 14125 zcmYLvbx>T*7cB1X?(XjH?jg9lyTb*71PB(~9fG^Ng#f`lxVyW*{eJINz1`ZH+J9!w zojd28p6(8JEp<)ch5rNtee=7^k`l$p;D}KKNYp6@U=nRO0mCKFgJ;3VjWqWH1hFsV zXo+%AV$t}8a_rV)sb@~3nJxMcO#U4usn)S_6FRB88dI4qoz@n*4g2`|%(|%-`WlK9 z{ZMQ%P<=|^WKl#2U&5nV7sfAhIf1pS$-plrXyDOdE^X2GC)>lFk1MaMn<%i8)$XTj z0WymNmjT?K{H|5wm)W$TcEwM{La^Q4-JY%9w|&;U8`s0+9VRU> z!>0`mI<=hMkCWOSHx=?pFX%sqw|j2Ij zv}=tfGP&)KPS2@xM%il10NA+(H3evV0DAkHmgqFZy zH1@b|s}u2x!DM1UTBTY|)YaYIsqyCvzokzvU9d*9|3$m?VlRD36RGT0scGHI+im;V ztfFqa8+EEBKdDArNB-R=M#$FX$HnEOZscPX#E)2dXmDsXFpcd`pe*^dwR0}TTND)d zVwLXTPin%*$)q{`Fekmo9KO!p=r6Y?~8of86EIsK;JdtdDXc4jXU4&n;cJI{&J}1M{vW%oJ@<+Lv2C^~G++4@Q?OguIU?dh zKZFPx6t$%ocvsE^eXO-`XuNCKFiK|iCP3_69CeBPA~eR=tq!;L z&l&@J@{~-VMD293c6W^VYlGK>UKm<>X_P4*arO=$!>8}&`-S(E-l>aBZ{N{q5&|#M zJb2FTVM?!N3F2Zg42JM2nhPuo%(O4~KKu%9)6l2pXmFwLq7DH5(z>yJR&fnmE+o||_SSUFMc8DlUbTY;LF zEYhqua*YY((I#|)pT)K?$&@8sg30b{rkGS=@<0ODsua+~6qdM; z05bH?k2q?zpyKIgCI+-v3wK?X-ZM9r&NB|bgL@MK8g05gBcT!E<3$8$(Wh=ml#={hcq} zPvYk`{1+;|RO!_Je7^O^CnB=A-k}Z~0Lb%_HS}8M{Ldpv{L<~3Uvf3Sb5?>4QpSOT zzW{@|f}-e}RzW-r*gyK0qhVXxx$5U}Y2(<6IJ1otfa@B4SO6d3RCl5_-Gc!>W0Ne! zq{5J6v0JKa5cIsyl-^6054Z7%(t-MPts3-(_%(v_#cFVHFo=T=ZjWoT`q_R2An<{B z3|mLfu7&fs`gVgQfk4Dn&>ji4`in8*}FH8Rg4&^fGTt6#6*iPn(<2Xu;c!; z?WCeoC-B3LVjC{e1!|5%IEdrQKyA(cvbz`U)a5s}SV7yXd!8hNfwrohP>*{-iU+=^ zhh`0Y;^YM)UHnkBJq_eeUSQ?%WLGH zrMoUDfrfYbhnaNRg7?Q$=UVfpP))@>`B3%~zUa4ZOx^5{gFl^bew=gC(4HzWi1k4+ ztn+#)(Pj31AsfY{vMT-=*Wx75_!!?B? zwsiGQzHPmu3_C8j^-?}Ji~JX2n?7X5KClfpo|ZR){ncQ!B+V%Lf-pH$-?=+>$rw2Q z(Fu0?x2Nlb;US@igDo=eQK=1OQJ^OaWfd1~?Cc4sA+CVrI8qVt#H!RM54-dt8ir@6 zFN>o1#rAO-M~Hsm-*nCclxX17v9q&J))-Dvlu)FNyX<4@x7{@;>NNX#2K)0Rjq^3` zT#^L}AEY{^d}wAh{ef;k<**C>!a1)+6C)|Kgiw04nv#?*@|n19mA(O#Vs zS66HkR!J5N@(d{y1aWprsPN3-ib=xocz}1Oqh{rT92Eu?ro3GWgJzPZMT2f(BAf)A za=p;NuSyxQc!Im8=2=M%X2uPTNl!+8Kmsuqao2mB~TI6Z@Me`PH2*lw@bA zHc|Dd%@e#LiyrFVInIQ3l6I#u7eR?pttJ!B^L&}ea0n#qO7p4h!`X_mNFFUoJbLW! z(E2bd=BF)_`!yNUy7x(^ouF(#P;lpKG(7YrbZ^Scw9$ z61|djCv!M)DgtVZC=Y`KxFj`1T%eH#=?q54sbvVa$BD=D>ohj!=~{@&bW@hHU!l5P ztibqEH8nwOgW0fxk{MxHSXShu>93=ND%|WP`DO~0RO^F8lARE!AlNKHx zQ^G`SgZ&cY-Q8WC%eI8tv;&WA$Xv+D2M5wOC7N9=q*~oU?ytrZfOqesu-CBd;{Yd;vN>4irB0)Yo!Wt@a08URSKUzQ?Qr12ZS{aVri2{eHt&B4$)4% zGhLk{e2a4PLLtn&9XCO&K(#g^IaEppK1CuNCnx7}%OJLrva%Z8nfdKOOdV5Hy&>JMY@0RhUQrmSiP`_M@VaWU%g>F7d`4e@UDzc-;I+#6~IRB`A zren5uiXE(9FK7yOvV(4HD(30I1PAVn51`K(m}R)iPX6PNy6*pwpiuTpt0KL0RI#>8 zf{8$yUbI87I^UDK(DCz6+$e(>TP(6Nw zoY2M`Z&I0ATpSgHu85na-*HNt21ilI#zsIR`}`IVjQe0?EQAJ~U+?k<%)T_aP`egA zYGlP{#nQlMJ6!1PYEbC?4kh^~R*bY+J>IoWwhfok=RlBlm5vHU1{FcOYpxtTkzL zX#y3Z;gt}GbxDGG#}Xd$cMQxA8cdHsZWZ0HHWw~|QiJ~k@DrFiP|j+*U(}Z`(U7Bm zUYYVrny_j=$g~Gx`t(w1Rn<5hrU+*0Qd5&mpcIuX2gNMJ^zS)D*D9?Fk~#wp2o@DD zIE11Z1l}(QJ+8TP=_?NuB;*aM$uSocsRd;rK zP&DI`Ji=zflcj>6%w}L;d;Y?YC8jXC@zt0*Ly5zALnxEwHy#nu)*JWX?U-V1Tawaz zRXtD7*tiPpOclev?p>3NU-u=mSiY=iI@>kNau;}z05bOM(CDx zX(;|F_zW6y#-ZtHv@9M+3M>Rjgh4hNfGblZ)UI_EFG4@C7^~Da6m40dz=F{9yO`#$ z8u$V6;N)>j6cV97CtoVz!zD!iU=5g@|7-5LdP8I}r-$HjDdUjyJa-DPymA8z8Nd=g z59BHS1{swLX1nwK_RZd@%r@YAB4l(xAQHBqLf0c(`?TxX3zT_e{FC}OG&09Lis@4YVwdspHvwJ$N~vIZ~nTXSwdpqFm^t z=o}i{4^?PrY1(!t1*2#&bRxvdwF(Vb%;loO^R;Vderd}~4Gc+`B23WS%Ro|7C(4Dn zP(f_7g$+vml-D@sy4LyOSN%J;`#-2nl{P-()cW2QIF&0b^m^8qxtbn(1V9Q$g{o*O z;p)!Ivq57jScgF8#~h!~b->2O3%`;b8fx@AaocJkvvl2360IcdEfAykJR0M&)xEK3 zJAI%9+Cv}ra1D4PXNK$DYi2lPtRSTyNz%DJ+V9kY(*!lVGvaJ|^5D0r6cI}N6Bi2@sL zeIfym?~bc2>_S3HOgQd+#b*@0Lgb1N{J^<*2o{GS^QCnZBH8k4*>JDXFHXNLGRjvJ zG6|gWTq44n&g6f8pXaSihGnELO|VK{_!?T}E3s*Ejl?(vzo+yd0dt|bDV$YrTkt_I zgRJbnM`XRO3tudD<uV;hMhrX+|p%S_$$sR-2<&4+VK{X(S^ zx41x86ebX35X?g$1IUht%&<++4A-+80XOm(D@bYU6!J6?eAg!;`4a=s%s*G4By01E zjg%xk_#G$B?TYiX-HFqUO{NNZi<&mb)N`bknKNe#qDmaUIZ~Fy+O5*9J|}8WtU4y& zT_n-1($G5oD5odb-7N;?97fc%4cBs`HEO)*2cK*l5qY8#fZ_q?A7ObgFCv?mwA zHB6?ooN`Oy*BTXLS)<#fTU{|mx!F6-w4|nHpGMlozR)q3PhewRKey9F$BukLv_9nh z6g&Tf%d7sZqh({%{G|Y{&PZ;t$_$U$M17XT6M4pi7;e&~vtwO=w%}{KBP@@>Al*3Y zf}vh9XGC*g=dfV***6^>%&itO)2hJABVeCIf=vn}s{ii&ghVZ`dyyS9J0#{HMvcqE*#goxP@r)VodUK_zgnDj% z)F*DyU31U;SDjob%^nU+oS4<4bGQ*4iXj$2JW{xj)Sl-4P-%b=dPY(G_9(J5P!4= zs{pz*pF~G%e2+Awg};Bo@H-J8BF&dbVHPewWh_C(|9zc=4C@nY!7bB6rS6&_92?}wiEscnK-nB(CHEUfBA;wdDboof({h13;H)k*lJ>(EYz;i+;@N`|NeP36t zGQX#0JSL{AKiPr*9WUIMm_}-Pv+PPEBhzs};FazgvVP1dHYj^jr3O|eHbAmcwDEH|4R=RREfNlL|G&+qFKeQgelC)kl! z#44)1x$~Lk`E_&B_f%B6yCDP>xZx!7F@+s5UMKwpeF8HiQ0syt1wM(}{_xK}L}lNp zT_Y;^{? z2zloqb+W2JUY$(Nu7`{DN-NJdyG}$C5SBPwuK)H87InsEzI=h`Vl#%~Z9BoP=42Ix z@=yw|-*&q{dVNw%uHYJNz3A*4K&{`;kRw*v>JdeMoZPeW;9!O6!jOn0-l&Z_NqUxP zz6bw7`}hHc^&>70;&PWi1nhLF_EGdLcfIpVUF1f41?aE!`ip12iJxC4rEHvwn@4iu zj5-PtU*FJ>l$czj99FEMmf?XhyCBqQE>htE-cq5K3+<%c!C9vM);=Quac)*q(3;f} z5wMo%dQtNz^XJ$}wH8kR@z>VmKbL;!ojAcutibN>-}8HWz1+;FjKJFnkUf_IBBc_? z54I$vE7wbB90YuyBqM!Zj>~+nhjBZ@YC9&OjtHm^kz-F-x~9uQ*uJvMuoa?pN}O1GQo5l^)drZQn@;1oxQ zz*9I&Pe7c!dEfjzR;SnbPB^Y{egZ2Sr)GghPKG&$%~f{6mX?d~-+8S5VW^)MnhG6a z?+U5F*OXJ{gw?!159+SEO5w9PimLc-*9`MWczJbJ2>cUn*Sjo6IvxQTMSHK;0Fs1^{0h-gG)=tJC( z>;9w)biY;Nx<3J|t;JO*&Wp{CFA!_4BgCXUO1miJLuE*VfAP$`dL@IOjv#zLESwxK zKJ(s2^ZpW0?ov+`yAg=|JLd_P2r-4t1^2Wwg_>f!QWZw$;PYm4 z>Cj!uh*W^_BeYzKvi>l|b)r#M7!K6GgoHLX7l&3;hvS{{xj_yK} z=%EFLr0=Y}34Fd&dp`pI5Hiw&T^q@V0!)wQ*t_%gyR?rC^ZK1KW!Z8_$)r4{iOB z{3-0`?Z3vx^c;hu?#B(-zNaTV1$w9FzS7mA!UuTGg|x{g48Wdno0PTt>F16AZ|F6* z@oHlZ<=rJ@a+nmfdKI7~Jq953c*) zPdiIxVNT>;HHacd4Yx202>np{iCV36flJ4@`S<<0P_Z@Owfc|6T{Ey$m}o(<+UPSn z%83E9;j?@1I#}0Zg7@1x3{76G(7ZzW@JM^x>n}p}w6x8=n^AbY8aNG74$9)q!TL%! zNC5j=y#fKa9YtXd;zdN+65QS2Ln|~Qn_?gkh9#TbmMS}JG{LLw-9qR39^e}V97~td zlx3GwmY5~9SU&hd8UZ*SI4bHP)4vHRg?W!p*%X=NXxnWH$XFB@%l^H83UfI3LppyE z+4foEQg*fdc$&Fh`+4h?iv!&Ts?380YQMhH-}l0ie@v_DRZdD7AN|$1v4*mXpMe!C zB;JnBHg~h(1-pGYZ{}miiRmtI#q`k>g&IKHyY&U!z9(a>G6Tq$x0BDV#)4TBF5}Ft zZlE9N27-i~XJTQIT%Tlqw$h!Icm9!KTnHF?MG=7H02@m}~Zg7L~YCV{sc|G2K27VaWI2ZarR@u_^y$T<#fj=39>@WC`a)jtyFfiPEc`0$NgU?V? zvcgIwB~-)=L+Z2YG$X&L)7st*$C*XVnaq+z1f)yu?3ufYO7`JFCW!ue%8{ld`7O{s zK?3pY$e2h+=Q$&?7cX$6?WZiFv&-%7w2>&J6nU&{{QTnU)!0Z%p8-i9pWkg~NvqLq zRol6fWaL}UXIEu?3csU`6$TzYg}jSGlx{{r{91MDR8~?_QDefw7xevEf9-15Ob~(C zl1&~10a@UwC@6^mari!sKUm?sa$$%6?g30`0W38ie7gnFpU}ylT5*ha2yVZz<||F4#pTD5A}3lIKdnkIqBEo4CqkWMp%rl=SjbH(*JxmZS&|8A+pS6`jWa*h0=pc4A^#PdJ~y%o?=-d+Pld2jJI$ z$3u~&C=N9XPF;=+B>SbB{R#jzFk$npdUL3S+W+ywa&-{3(R>7jc6WstZJff1VSp>& z5Z2UWCfhpmcYw*>x#jM@kR&%O(!vS4MorKN!n7R^2!W-S%JZaAE+t7S4BzZC+Hl!% z5g_0AT2JrH6v+nm?dMFMn@8$mL*}b0y!pKapR|YL1 zZ}Rr6aq4DPk(HgFe{^q;>RvDQ7d`qp!Jn2QD6i+PGNZNYyqeyRms+RIo_A>6B>dG@ zXFw8XnrmL#%G^#2_^z!J&Ka|Tj_UG$zcdbV7w9)-s`Oik>t zFkKeu$-3I&dyrvG)c5FKwfXrzRrs|5zPhV=-Hy}CEqOEwfDbyC#I64qfL!D^+YeSg zEF_X_2kdT)#OG$G`{1X8KR}{7f+CmxDsp|k+WKler$Q_&Aj)L@!6WjqmouiY-274b zIknd}D|!wS>Z}NU@v(L&)wm7;E$DqAL2rGf!I46dG@3AJ@iyb&fej##(_zIR5sUsV zkc`A9B^3qs!-GcnoyI9r6ey8&xZ1uy-{K}rSY~@U4SJ09ddMXELd7y$npC7+DrPAY z#KP2e-5}7aWb-l8uTBL$H2zD+yJTZJG-p=KtZIBP(~==#M2qGmHtH7@5grSS7d`Km zLdJttf$%knN85p2ZE;-n^*O9@5h8xx^?lf$(u)LIXwHV0xGHW%pN8*tEP?AdgWzfb z&d;vIlWMP+@^X5bvQh)%iti)477h4r8AMSQ5Q916NlH{YonFMCt}RPHIy6Kz5-*t1 z<<@>i`hF9KHAo!{3UoVR_~?iZq*A-JOHpBvC(0#!ABmEpgd6Pt;?;S6=|UbR+Ek&% z0Q{W7{qHl%C6x4CCa@yjv{Z^~dIN14LW2wRi8> z)4Udv&dCRuL1pqw4)8d-X(Mz$+jz3n%5>2fCuE`_5E5-gfWZD17e%%%^a3UO2%oK? z&XPu-qCk{1lAwSNA1Pm^x!1t2ag4O>0^pTUtvI9_sKz0(b|lDj_dhM;4N?v&DJjj` zaM^SWlbw65dgJdX3(#~;&)46@jgpd(xXO-&!G*8oxumPnK`A^t$t%cr8`0)X&DrrJ zDyaX#wQ14sxe`8e=~(*ObF&1-bbfi5v}BB=STT8#Rx_I-dlbw2T#Z_@wbR^M2iRYt zqvYWgaA}IuOVi|_u<8rp^_+!%F_>PW@v~t3A%qHvtC^6YCzoE^YYwf(kbZwMe=>0q zy)fW^(oC>mmohVxBuC92MwY0QIBqq%??#2;njH3wc+hClFA+wbo{?c{W)=$K8OQcH z?)`G?niZjeuNEM3}5#l25R@{=LGurJZeh%`Y`tN)zK2ZMV^}YjqX!zj!Y40aft3 zyb~%J&!0`r@lDv!gKhv;u~wuEyxrWSJ9vivgpLh%Q*0g*i;kKQGETnxki9@sfdRuz z!#O`nK&oMxmp3t3xJrgVd`7tz-BdEa-yNTVyoC054*}(=E|SmW_>XYJW8=02kW|~O zVOpwDU{niIr*`AMv%VxoSTEk+zns?I8X4Sj;0N7*!@WsF<^g0VQN7$-wjc%Tk?$o& zq3 z3DO%JRz;{`fomh3TX+78e+?PND;6ePG>14rt&B(7Nbjv|Wd0=C-pKLs7QPN6w_5hi zQFDc08vi~*P{Pfkq=e#Zb@$wK{Tg&(Ets(*n`tI(y_TA`xjwlTe&uyS_AkGsk zh1sc~S{ya$_C^oO_E#_P>Up{|!tH`0mk`8cmrZHV;lM`@ zmX(o+jjD(b)|ZKMY32PaBWY-L)V1p7$p=97H%2f2@a|^b1fDNfCA>1}IOoCkF7%K*sb)dy@ zY#+b0v^2o`TDvG_uDfBBs@1R~WR*8v>U@CkGT?nATEeZsy_0|UEw0#h1ooFS44=B{ z?VDmzSHmUQvjn;%nwCt`k?~RxW)#;$BF+ld=2fof<(>R!>O`b zZ;`e&@p>%_KfBE1W1;eO5Q>{+)%lPGUNSJFkXFp# zASMyXzlou{rc0g@4CgqhU?^WY{dg44DFBQaNDkx1d2TLQP)+}wtgb%a@?KqC8(jpRlr@!r6e&E3 zX`5CXuFU1x2UuOffN-#ax=k|3XC7uTHSi4v)M*E<^s1!{yu2&lU>zZGp7ZIEYo8xd z6!H|gCN3`MWaSGdAbp;Owk$n2_aw}GL!F~cjuHyR$PIKen>$*l0>0De^b?{)9-p6= z)YhT~g9>E3ffY!}wQ7uVToutgw#447S?S&1@eFvIg^Q@_te+ zM>2&PG=_>`%f=9re0hZb#w!%_0Lfu#%;HUbjG2`5`+R=Q>qwo+h8+p%#r}wD_uoHHZJOg` z$>UxOU$1i9Bg3%ZkYt}Q{*{eG(9ypq+fpRvYm`r?-ZTMMU@3Mf8DmJ2l7n>A^-3{X z4ALxV)F~>Mu`;6;oW-2BAe}fO`6nnh=jW4APqHQRu{@+PUarqWtXNx zAwh&V$1%}Y)M>ls0O+ga0=;UA;=O~I#jDZrB7kau*;-?)d_dq`#FVU&(Z|jMd=oga zj6*^d>>;*pMeI{Ua8VUeZ_)I%gbO=yAyJ6pt&;E)L?A;U7LWp2J+=S1E%VF`aWRoz zKXz&t>Q$;Uq|l`(Xfbe>g~KK|dDZAJwQVV($41CoH|#a&&K`3WxGXCl!l>edcX!f$ z2e3CrXR!ykltJlL=2N;LK{rgT`1-_~rKb~-nbpUSU7n;rIcNSJ@Oh2PFT`>3N5>;B zoi|wwVTRuGcI;wp*6&b63~%}5j;=3mgalxs2y3IuQJLG^R0X*W%C(}^=%o0Fem5|M zv3(yg2RYmhrt&T=IJrFx8B$a!QPqk7jdBhFj-6XDl_a@@sYkcB#yD@miEYC^L#ZMM zlI#)3$`hT^>qVs=+P5=bAEU?h``A<$%`+qB+5 zpEiz#;EOPf0V@3?xEi+mx=s)3zQb7>9o+CaBVMmJ%=#@*xwW*u9`l#f&67h288n2i z{%yXN-*Ssjt{&F|-VGj0aIgO^L-f4vRh|j@%|p9WOdrj*tNu-dnc|Es813$; zhSy3zv_y}k&oXuXh>EtSEyWXgw*Fe2qmiQho1|yATFHR%?_z`z2-GZ#hnrne=3S>E z@jEJ@4WZ=@=bLwGov5#8cfHvgjZL+Dcb<_;mf{fS$N;&5`K)iO8mTbglikMZ)KL8K zVr6ufd(q0VCS<;u6^Mx#lNtZftX;WrkZb1_v$$aKTBHaj!`ZI>kd7Goe5N^@ zoJ`_@2Mr?g4kc@(t+X)fS8MZQAp~x6P3(ijcpEMSE`l$k78-v~b7WOnWci4s>1(O} zKKLI9Z#O$;Ww>P=AJdnX5;KyYuM~E@-Hd;eB zg(Yh&w>XAN6a+??q9KIWF(t`SRrvY&f%21d#bJ?k<|f4y#Zpwv$7rQ^{EqJxWxfSyP1s>rl5+#6L@;=O&y$PGQd#cDV> zUV<|z$N_hFK7^}5(vL0NN-+1}(KZbQ(0zdmlv?T^n$gJemgY`{l=pPw73Ez8#N zMeYZpGEzT*I#9r!`CRpjxvuTZhx#8A27 zOxJ=6<)R51iy-SY4~gm%mMasZ5_ylQ-lFE?hX3VEtCjQy?P;pM6FREURqzSmhWlBS zJf=XeT%t7#qNPD*a}XZ2;E1y1Z)$$*%&LF&_4;T~3SCWG;&Wz0NxUlu&vm*n+$OC> zy_(32yV{$2$Za{L27<5gdjG>%Vk37L1zr8)UVuO!)V)oYyX$0rd= zk~*?j@+fkn+Q`gy`mFq6XE zgOEXXuXvT`fVWkxU|IAX+pW{pR!2e+%+1$qh-^LbhP?Lcf2hv6yw|cZFp`AcX)v+t zBhktB%6>_vEOgoZ zL$e)Z;}Hf~ASru~E`3$NRXj~G%InQ2+gazbJ9scM+r2)E;@5g#{+-f5qS|SHm6a$7 zkBwj;WoG?&(c-?_uME2MMtqTMaoz+zD7R!US3r}@yVtsK-^P^TvtUwPr3D08Zf;QzaDi$jj?bwty^oh8o6eiJ26#^}r{%rR zdVosY+f2vD_U4zF>}(rmzZyH*$3HR?N(AAtf%Wx>kIKxiH(H$cC6z&skA9^a@tfD# z5M8^e%tcFhj1q!>U=o#wUvB~?B zZN8TT!=x1aboe<-ILt!p{XXzUK!CgLuM;F$ATFBkHBduBgV{yOpRgtRHsKt29m1L8 zjN-Bpa8D6tdV91`sn-zEwQdY>E;C>I`m#$=q-a2+QsC0VZ#<1VcOD*_sKwnU!noIH zG0L!J)8vlUn-97!RvE~#=6g|Z>@lX;Qwobb-nDcGNPJvpLiwJu{q}sGf9nilI333N zWlLDu^nd98;vsR^O#{rbXp9NBZdxxGsowdSq}s==CleO&@xmk11p+GU`JhK6w4V7!Gy z$sN={Z80;gRR)M^VUo1VN@>!JgW~U!ybiy@n(UVzVlaEKx`?3*aDnUGb3?T#lSr7j zZ}AMlkYL4P8!qwsaDeI)U8vy=p}w?wDz$KFegv43;!xOP$=PTk-zy*1?iW|q?i0@X zR^dJ3t_=u|f)f+jS6cpNW% zooHIB^_ENjUM?VQ>lypQ!cb zx7O^Wt9N0(MvQIoBTV{`aOCZhWAAo#@kBjR!-M)xn|jmr5fglZI{9I(l?$9xHIH-Dt;5JgH6Oe zhA>=y8%Z||=w@{tw1wp@L1bXBJHaVfkWf;AdvKxmhYPOGCNTNmo>}u)s(adAkfu^E zOrp0Qxp^4v*$CM#h$MY#(v5VhhC&$($bUrB*sAx{*tyI_ttuXWD9CnIj&k=j5%;ki z7FG;-`(!{NGrhZ09}7ZBap908IG;wQ;W^p*iq&S`OTwy9RwuN`3Zzff*)1^QW3XEH z_Q5loH0N}|2LvLa{_OusA6dClzlW8^W`f>x{&ser$0ZOxSpoy6^nEtKVmPc2*$_Ti zSi)SE@zBP87{?}1|DE_gD~7!G*agLDRstKB`csKHdSbahfpq%kf+FU#Z?0#GVv-qo zS=RgWD$NzA84(J?qyQaubiMzhMs?Q{QT4BF6!(qqxPQM6=bo(I4+(fd7q~rN{jB&S z^)%K)61dK_C8&G+;3Vi^B2M41^WN(D1AXMX(BZs#rBgU&*XmbXx*r31v@zfN9=e5` zq<@{8E#vRG!qanca7<3-vXPfi=1;j!EG)SWrlvR8-5x>RyFk|e)oE};;>q_n%Njci zrl${gwMK(H`Bt`n?#CPHZH8o|WZs|GMC+4YTcP+MJ1AuxTs|}zWMLGE$Mb?0_PKWz zxH^PjL-T_>(A4@bW;wRjb*!x>i$@K_i`yiitvD#6%$! za=u;{+{i7_QP^e}qJ^?W=|y%BjXqu;8Rgzi@JaT8R^tf`o}+Jv9QQl}J8Y5z%#S1s zH#z!F0uDjaf>ZGgas#g*5#gYW*YkTE;Z|wKY6;2+=F;Lv+kz31SpZeso|=xN;0Gh0 zfynta7-%(KKLW;6O3&XdR?G9p9?7HB<(4tNO+)j$xXXs$bh%?NB{i87*pGfv1leMsldvJvZ zSvA=<88ouQLQZ_q%y%uu%Td+9vg8lvX(`cI zl=`QzY`D9%v*oAT4i8GQ2e28TltRyBCMfGB6WG~<;st4&cYu;13~vE{#9zpQJb@CP zRXatogV>ro7Q2!Z)?-#qt$X-+{#Oe4Y{tL02Ni#4BaZH^5BG*nxo!544h_?dSh)>s zbBIsd@!0Za1M&U}v#(0aQl zIyC&8nWf)LlWsWlZ=%Na;llIobam?C;TPNA!B_&YJUjJ|rDNP!nV(HWX;x-P65RMy zMDd=6iAZS~LNh_sHYy>)uo||}H1QtAIMCPVhWSAGnU9v#s3bz zTJRJjvIXCvVgfCz(oz&EO<9#EWIgo`SFI$2=1Cgm@}e8tPsehaZGGd`TjM;c zqSmX9((TG{KUR6a62PHIP1`lmr;igxY(01tjrEu&83u;s3YnCYl|_c55`=_kSI7|O zpljWyn-N+z=#`m!PY{WEzux+vKW}^){`P6!jt6ayJX4-BOf#Rny{}7LMPdhz+UTbK zXde3EY!VpPkG>v+u_2J5bFr>71t}8v`M`z@Qjk7Jz^ta3uFkJG9*K7vmn}O?JGEd* zs^w-<5XEzHafLbx8TQW4!wqf+@;bJqsL@NeuX%>Ax2`-n!Xd%EzP?tPbmxIe`XJqx z_rn&8R>f!ROKC*hqk&RDj(@bE`uw9QniV3wFW}HveRKX5O}sX3<2ty3HRkG?vP&cb z9!6-=1XNbrh|ob#!!sc<@lS zrXm{y-c!%)g$f<85^a)3z3;6Zq&ZMw#+O>*MUtSmEKDg}b`Tu1AZ*lUDMJGhRyQqq zzLKDjmsp-3*MLDK8GO#9ECd#406MzMWmc@uZK}?i0nCXZ*zMT`Mz^ssRBQ)wT(?wJTV_O zx*Sxv86kHz3z>voTDaM-1v!ve7A;b66)s30NeV7Y(nA>&9i~{L+~r^zpwO<-SLP?V zlPJYRuwSaST2gE`9MXWZ*;KJgJX%?M7~9-~f(d8vU3vDGM?}OHfu0?}+8-qAh)uhM zj=*3qtq8!Y!l-TR8UL#5LV29;IWD2DX-ERmXt= zZz1!ig`PvS3%7DV>rZ>}@FOjzW9bab$*?6KEQF(luHX>l_>T@Pn}4?WtE{7F&c`+L z^`x4LYx`N!4E47Q$MdbP{y15q;7L;0q?FmFj7j&I^Zm?v7==vu!H5pY#3z(!4y~tb3c}r z8@&E&up!eU^Z3=yorvGvMIS1gjgtj$A;t|gil8!wk)=9aFRl`OE+T#qYiUK%0V%)e zTb~7UXGhGM(+p7g(V=UfiewGEeS50j^`4KV-M<_I3O9=*G#a?G}FP(X?b?H%{`H2x&5SLd>WNXr z?F{8eIodf`$3OK9leUH~|4Ux*J2iviKu@55>^^@tA9(ppi$S&xbe##hM&mYHVPS{Z z(1$J9nE^c6DueNuf6~Goc8;3{Nn%TsKHSeaRl#1nod~?> zq%09r+k=tXl@$fK>lz(v9g7>))8gxM$rxy6>(yrclnNcPI~qAkOKrX-fY*N|*>Hmz zmMy39L|#t5i0vHA6j5t3^f{$)F!}7!c7&YO%&oHPtng2V`K||v--M;7Azy#&R$)G& z0RAoI`^J?J%l*(9LnGslvRiE=^3bnJ3*GHElPr~>#-~eDs&`pKz^{J8)Wos(S$=^H z^mmV`csBl`w@p4%P9<+(ZZL*b-I!#AvboVLl%UF;-N7k3`DBxFGYzTT5&Z5C?5i!# zUo0)dAdm@}xbHMDdw7Gf`KlhJ#!Nwg0b3B(n$_X9e=ihe1{^k03$ptiA)nfBC6&78 z(XzJE7!MToN^3B$TE(KNYx0)Gu>6^So{T-8>x82hyXYJ7i{+Gca({nij!z6;X25Pt z4OU$YeMNYqL-8qfwxH0)XDHh_Cxes9rE;EZLlI|Ei{WpVp@^iWg}TM-Hi;@g30CPA zY^FG}k5^ws!==#Cdg{MCCaE7`f(c`Nu%hZ-i0)R%LYWe6ta0fYpVyVp`QZ1BZpLm zPjaov3Q02yK1#25`EUCz_9mZ?$k-wb$&AVsEAHSI+>g-CV0=6>U<+#qc%X`#4rT7V zVJtl4sdd2#U*Fi?J?IQ$EV3kyJhbhWC~eM{f26kaMMJ>}i{qWE|2=g|1SSjv3&Ncdus#~=KQ5(i-9ni`1e`hS5Wm$_0bXbEOE;}hii>o zR|lXv2&K>tT7JB+9G5PEWN&w?KT0jia!Q!96Ls|FL$a=@IDIozHZ*e+wCxm?*9F0g z>M`OE9XQQ?ic;0v>)%QAAe7{fGR->E8OUx9&TOZPBD>GkR@ZAqhTJzuHDb?5RB{Qk z1$Up*tx!DySdR!bcb-AG3i|bDEf-Ug7}-z+@uYNwbJE>n18C)Gx4~uKDUJG+gp&;q}V|*W6Z1S_n|!G(Y^eXQo!$Llqg`6C9wbO{zJe(zgK|*#G#q7 zxiI`5?S96w2x)7Mt2?r^j}bf_PpNWs{BPdDDRkeyKBQ_YCERd%`os4JndifSoTGFP&l7Cf0koGi=kc3f?4S1e_Y4%UQI_R9tR{-`J9uo8m|_&0iiQhQ58;{KJ-4hy{#0JkqzM1$G9wRFLO~FVo{K^t*>HJHz{ zOTP1E7_G831IPK~Ud*C>VSBfrKQ8w{ana-+p_9O9A~@IV=OBu4MU;jFr;_h=ER5Ny zQ15KcPLtQUF;B&g&Z-fV-`$DX^W763`gi8nN!QOmy{CZm6|= zotUDmU8K|eK=^xzkbVF2I^9{;mvEOcIj~KZO||}bcj4v0ewpj_7mG)U%Q53$H|K}Te6;>J6bcyW>3z}nR@N^6 zZweMY^YgeuUT2m|XNbYYBjdsmT>PAp%&KnwEq`ArvV`7x}Fq@XEA6VF>r3>!H<{I zA?*95gLFAukoYkdex&W`*aP=HoXwwu-_bw^0sgdkaC#a!A|is2jBJ0iSL#HpmaJk8 zT?O&p9!rb7W^pmO0kEZe)_c^Xi0aij$WYpFiPyc938vd&n2Uhq64Rk2ykw{A-oRzolqk zJLBt*2e{sAQTf31CEHsp7@;9`b>Cs=O9oT{LH%UCTJo$>OUb4tdoFm2Fn=BTo=;wX zlYDlQ6F{SG}h0BkDxtl7VriMHQ;@)6)C|0Bo2CYxBq@wS>nCrAsUK5ZPtZwTT|Q% zlZtE;=*Sc&CKWJ$16NOH;96V2v0<{fmLIkds zkwo~rJ~M_>ph3nm2xpW1nrOe)=8=227NghTQ;G_&LLxT#@W4NuK=$PxI9rSR7UwRz z;JJq>C@iUC7O4@8bq|d;6F?fGN-t0&A{4tk8ZLS>-47L)kWi3fetYD1ZpYhC=FB@0 zTR8IsM9ZEcid_VEjkOQK{|$WpWWuAoV-bNF3X1YB>(=-^_@V9DqnI0&`E(QKLb`R;uGuq6-`~?QwzhK}%M{dLg|{`Z&ga{-lK8TPi-+Xc!7=Lw?m};n78XTv zC^g2Y`MqBO2=UthqEFg;U{JVHKYKO5w~Mv^!q53{4TVq;xR#MT z2P;2#Xe~iV8H`y$kAJ;;eP>B+F4E{^6nIoMX1DOu{dT&*ZoFQyyVJ}0asKHxv!JB} zif_$*E)`TRRFYzH;h9Fz?(0k5qwwBFME)1JWmj7cpd!9~D_Xc&mSN*AWg2rU5)F;l zx(DKzHg1f}+haa3304&y9R<^Q2%dAxFpaf%J1@dArizakGp54N+aaLhH>w0T-78hO zGh274S43|lNdL}G)!4u?_x$###N6}ETUf;kutuODx6DG?nwUF&@TJSasTRScbSpc8 zf+Cn#ke1L2rkW2EzXp2QF=sy0mPUsEuEsulXw&(1SepG8-%$jwN{^_#=fb%EqjF6f zk*4r(N=yUc&g+MfNU=US(HAqZ**|p_h>-~-rE2t?0s<2K zKouUE()$a|>w5%Nnf7s+S`@#Yd%;*5&G?s}P!STN>}qLvZC|GHW>td@TZ*8LCWX#% zalkk!F*HN6avzDw%8Y9)ewmJctfyzk)Ng6zqNZ?J$H?WVd`dg5PMcA^7iNjU3prhF zaf1j+9;cLt_(ef#*c2s9rq0|IbI)wI0H?=NoJaRg-OljqYPe+ZFsWbM)H=|8{7BiPwcn zy^QHq?9zqJj@6@kluW?{>-Y$|?M|PV3>=B#1@T&7TR6G;M@EpOq@-B43Jq^Q0j@9A zelu1&!BI!`OMzU{9S=7*+>mlD{BqH6=y%$*d;MtIj2?}PKx$I>_f7oELnxoS zMqAx4cd6#NZfD+X_|5mngm;dM2Z$7=L^md$H2!bIy5T?l_E_{HQ1r4p5W;7kthJ|C zsS5W($m`s=FD>Gd6b?c%4IeE_XQ29_#yS6GmS$j}4Qb7w1~z<-(EuCo~S@7c?pJhh0_!-M^<3VQiGOOXl+ z|B@e&Mx&TkYd(m=nHdLOrThe(*qdBCzrS@qdkt8qJ4$!%@S>U3+wREn8oMGR(JK*n zZ-ohDz2BtIem% zdg5k;>G&w-J@wMmnOd>y_!usb|BODLcdIrUsPtMEsJZy<{#KzVbqCD#Z4Lf37tYwR z3k(0=l8O}gx(zpB?S?MH|I9T5VF&fv+!+D_0;so<(dMWv1-XL4amWyGB^meR;Gb@4 z&#YE?r^MbnU>^d*ZzF*R+ZzyXL28ShV{F|F)(~B(UiaG$i9mhIj5;iX*`>Jx^IgvE zb^d#cg{EeIHUr$m#koA;^+AMZrsZG zwC6)cw7wvj(AW$y0J_zG(RQC#$?HY&i*zO+H~mKgq14x>V!>|4f!F7D zK}W#nYFAHTIq+#Ne{pEQJJJlgucukZ?P3!Y5&3}`6&qQ%xpJgj6QkB`|NX+a5IqjI zNF4ePRoKG}#FXJBd^@j8or(e+4n&`nkp;}l8v~sV#vY%KQ7d$Y-%lJ{p$t5%-+ZVR zR<*Os%NYRLvQk5npYqh$mTr1i%fh2t*!{WVU=XcdyXU9l#VR?5(SZSKIu-uR4p7N9 z+3Qs^Za+;>)&y;mOH@)4mU$gvDku{|wQy!qXUb#7%V0%>Ryd4bdHurdBh&xPnof@! zqxI$I$wqfV^K(Z-UDw-f4dNMaqzO#hh8D^2{{< zQr;tOB9zRZ2fXa$+jKo0@iw_1b_OJfIc3nPO0t$^l~Sm7I#SB>C5ZOU1i+MOX))rB z?Qst8eJ$3Iro!UPodEj!=@lX57p>0NYm&Ttm5_`#ZJvG_N_$*|h|GKYnTSzsE!Y!fTn2 zbF@!>XSZa0AQp{qH0hmB*?BKsxn2}7ppB$%}2$ouw~A6!(5Mpc(ZiIFiIJ42Ftjms7k8J ztp}^LSgMKR`y+e4Bi5W@O5osd0QDo`ft-R&t44t?vj%H=`I5aBBNrr{c1`-?AKk+< z^3bnH?H4P*Ds@1iZIM}?zTO#ToNXU9tq5swq^jK4Ijwc}+{VR++i+jtiN9y&gpDeM z>N3kPr%~b_Nu%y@Dya&!Kx@~eF&pqg+%00CNODXBQSraK4cOCWmuRp8bIqp$=>BO& zWu9K2pu$x$1*bC0wab5N@q3=YffV`**fW(P@_a+NNwW~Nas~~$K zBQx`>+(7z^d_ULm(@Kjo+4<0aA({0LvrnvMW^vjyS)&@8r0s3OOv!j_OLlLpqAnSu z-aa`E4PC8HfjCDfKmbW_m44Ig9>PirBOYjwvcx=EzmxYF>dWhiaOZU2RPNUPedp?g zHuy67tL(6>5g4OfE5ct?RaG?)V#jh8{-zP5-L5>B3;hS8$>GN;DJ!d&Yt=eFH=?QaW72295-4krZ*V6Sc9ABLre+foaP)Zij00$DH%r(NtqRc;Ih=--qfL> zp`JSATxeJ12>OgAyl=d}9kZi_s_}=}W`*^e%>tR+u>@>=&5n$zA4^M1{k<-=i((r( zv7?3U7yVOoPk2Ek2ia%-uXOmK;i$Q*TwIgqN(fKSj!)0W#Try`-?|{=ca0h&9y?s{ zz~X8HRNJGcL^6#ds04dZ19>kZ`qDecT~HZfOGtvCqim)aAR5ql-Mfbl8MGh)E2#nm zKYnYyz$IRN%Q&3G`;|qxK(c@N*fn!R@`z8r=uQRI?=GrC8=oBGx%x<=V%zFgJ0MhN zUdR1kbe31FKNnh9U*zFkh zCSkwlJU&4%BS+8!r5txlEec|o0C=-$QkAfxrAPL!b~*JRB71~J45;MyjeGFuCHldy z2L=$Hf~N`8ftBJ8~&2&OuW?6y8?~lCs-0S z=vry$gK>BxXTw`m2Jf*ZR)AS){9*azy5nvoAu~((aGn!suReDS&wu|f1qD1zKUNpq zv4b8IO-VkdGA$S)YBMuTpslf_im=JC7=(cTR^sikLB)5(F zRVqX)pQGfdM`Q53l1BZ*JcS<9!kr0gU1@f&r>JJv6^M|&w+qI53{vcB9Ygn+M3rc-IUI!EO3iZL zGR%5n@RIZLa!;0lYt^_oQdfVWNhgA!0^H3!|3Zhdt1(QZg)QL}Y-jy&cUly3bTUyT z6BD)qml3m7C7d~=$Efa&ChR8PT-R2mR>M;LTmdHGAom8h5{()7FEJ2loi>{)e>`c_ z5=oBINs!Nb4C!D^M4}QhSyp3~+9rca1P8fJd7B-R$BlqkOfu--0?0XYNrL0){T)7R zS1a}#UmQ*nsVrs$%-7Xm7^KVQCz#sZ6pwR<|K8LK3Zc}#9_EXD!jm+F@Hz+Q=Vjg9 z`4H^jC!xiT#zYCn>?2Q#!buqZ4@1PEjMB$b8%AK~%eC#}&@i5bgXXBQcdt81-Ya+3 zCSASD03cGHT7lM$Cd~s?GQ)Xv*RRi{4fpCX-TSoZoWtL)yP+a{HSAxwm!zqwdjZ+j zoh8yc9Lc_m;`2oP{+DK_w!=~~MF#sct7TC6ao^TOJp|lex*l)t?y%!!6b5z%c98cI z;j3a7nPQt)c_E{Pd7XHj79`7050Z>k!sEb%C}WMcCa8tB;QFtVN#JSI62hCY>ea!I z4Mn@$SSv!TsvRGW}76cm)Ga_Brx6mFH;pbA|t_sXaQ`q6*r^f zkLZ!$jpy}yJ7;28sQ)GmJ|3%wAdREN!*W|ce}@jotbaO%GxV*7-wavhXmi!0r2$EZ zJ0p3tSW~i^I)gS-DNBiV!rbd#r{Z%=IOSY8Oe*M6=O47C&T~tkZs@v=YqhKk5*8(X zdz|O9Y~R*NPU)MwSS-GT>J-z7-wt$y%Gp;FwPRbHLY#jJEKR4M@sJ(wcT&5`8|2^) zj~5M`@e;(|9vXTYvLs2Gna4?pi2DOf*>U#^9FR|gtPKl9038xG<50>qGOY?^EDwHY#017nWtKqK% z>+gHn8EtN|K^y+p6JJZ_Q=1*fJ==|tBm2d;mEC+Gh9C$W#SUsQrea_F?$3ayaH0p) z#+Z;BUh{lZz0(}IG|M5SdvLzdf~Hu+AVtT>v#Y4U|I}txjC5Rt7BcG%~wf^ZQuDo@bI{%Uyb^(g#qaL$>Euzhi9;r zD1jKl9ajrn_&YY((fYR73lbp~B~1|#k;0mq1Vh&SbeqR9_DFX7Cc(i%@F7$BxNh3u zXC0%G+xzj!jl!3Zw1&wG}lJln-y9PI`CzO?9~?%0ehwzC>rwl_wslx_Q8LGX#`g?QHl1@Ewe|9ai^>> z^%Qy#eR(%nblk~;=pTttp177v8Uh%EClZ}O-yWm2oxiytY2dzzJ#^RYfeqJ} z2h{HE_V)KBN;rZCp;qXAxL#5&+_sl84ADRQ733FyVU>YXtIU78JX7bh*P4e;LK){Iw8~hKNy!w#)0|MTFd|1cIZ0QX{wcbzFDEs2 z!?Fk)%ycYoahSV4WXJJC7J9COFA5Fn+!zA^#2iWdQ$&4p$MKJYETNO;2}PQENyYZ zS}rr=!4I9(f1CLl10ljp*b(XS6GXarl)?~kKdI77x*utKy;~hDN)Y|o_ID7_0qqs1 zlxi?q5e}t}S|%&eN-?Ioy8esUdOx!UPA2{LrRWu*>@Q29Xk!ax#g15~{PEyYw8^+7{CPiQNCisa~)H=t?RT z7#uhMsnIw79^ary`n zy+vzR_%y@4$6;=7piq1hhKzluCLiQ-%8vg*9%2mg3Dp>b&?b(ALjWWpfq7y?@jq?2 z84G8AxMls?;HXq_>t!o7?vD2lMDFZ#{&46g@apbMH1}7ssySW6&)7|Ksk{EzIivJ3 zR*n9q4zhwAf1xFM_b!xopn25^Cqd-y4_6OYRy)7Bo_3=lD{%?L@o1Z6f*#o~U8H_4 zH)zh0Bv1YKj;GVy=0nNsr<>akv#Wkj(kgtIXyMe+VKVfMsjiPaO4p93t>98yQnYZ% z?gp#zw5^7(xs&#&7mBz8jm*ag3?+`Mo@?9_VmxR&vQr|E{%-pc;4jyTvAhaM8TSH@ zvzT9+@1%43ttXg?Gi%e}`{jVFgvdFR!4Pv!PC5J^8nm776a%mSVd(Vo2TL~QDZv}Y zlBX1n!ZoKQ%A^tXe)f@lKCIYRVtiJ^;hvy=y2e!mP^R+{3>0>>EoG9U79-o!$0#nX zpfb#Dfz8#`W+yz}J#p~U}Jk+P0- z)tIAf$_qsRbzsM!e8E_D>|5ZOaah>a_Wmthr?ocXzM9UvHD}1CN^jJ!FG2aZ9FD0Yw zgH`{lTIcGjFt=jR(H-Z$eWU8_u0k0}~Q8^CpT|NHnr z*z0@q>X5MN14u7r{Cy-EXDV@&TE0YMGKs@^QtSlkjfcI}<9P8%=uw1?zQxK-A_^{-B!WuB@8Q&M*!FR#v7^!~5v`*bt$-l&2V z)Fq_9o3d_Du}~^=nnv(MqHtPi^RVApy8VCmO><;IwS?$pB`Mg;t$8@nge)amtCz2* z=BiV>Es_P9Vt(7vEcpwy19B^;cYH&`!$5_Fg++uJVFV_n1>w*TU7ol3!_w>jkCF9D zTztaPy{hW4Q$}X=-;2%A{sjMrepv96+t1H+ZTcVB99m96&gb(j;q(EoZutfV^Z5;s zROCa6`LqO1p`y6x!?UAiDmfm{Yu&xlsg{cV)Oz0CcsspxzP|~RO(3lzDg{0oi*h7A ztbu5R#nOr2wHZIZPUS!TUb(zqx$nS4=o)<*(^)?tBOCXx(?5Q1X(g#|@%lHYTiH~m z|Jk~UsI%Bm#c^_fxGPT{xBKaFswUT$EpQkWvRZwlN@Ez*wXt!f;Na?k`obYrP(ptLjro8<`~t)TLdp5lC8dS+INn7E`kDe s=0_(RzUDCSey^j=W>|oFEYki4d|WIKE$t?6fr5M#WK^W9B~3&A2bKsQR{#J2 diff --git a/src/Mod/Ship/Icons/SimCreateIco.xcf b/src/Mod/Ship/Icons/SimCreateIco.xcf deleted file mode 100644 index 6dcf3fdd0ba1fa700091f4774f887b087a237bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51656 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 HzwEyOS-3zg diff --git a/src/Mod/Ship/Icons/SimCreateIco.xpm b/src/Mod/Ship/Icons/SimCreateIco.xpm index a1847db91..72814a4f1 100644 --- a/src/Mod/Ship/Icons/SimCreateIco.xpm +++ b/src/Mod/Ship/Icons/SimCreateIco.xpm @@ -1,6 +1,6 @@ /* XPM */ static char * SimCreateIco_xpm[] = { -"128 128 2134 2", +"128 128 2124 2", " c None", ". c #7B7B7B", "+ c #EAEAEA", @@ -1454,7 +1454,7 @@ static char * SimCreateIco_xpm[] = { "F) c #050404", "G) c #000001", "H) c #B3B4B4", -"I) c #BEBEF1", +"I) c #E9CFC6", "J) c #C7C6C6", "K) c #C5C6C6", "L) c #C6C5C6", @@ -1469,8 +1469,8 @@ static char * SimCreateIco_xpm[] = { "U) c #060504", "V) c #020303", "W) c #B3B3B4", -"X) c #BBBBF4", -"Y) c #B4B4F7", +"X) c #EDD0C2", +"Y) c #F0CFBA", "Z) c #666666", "`) c #9F9F9F", " ! c #C4C3C4", @@ -1486,9 +1486,9 @@ static char * SimCreateIco_xpm[] = { "-! c #050605", ";! c #020101", ">! c #B2B3B2", -",! c #A5A5BB", -"'! c #B0B0F9", -")! c #AFAFFA", +",! c #B6ACA9", +"'! c #F4D0B5", +")! c #F5D0B4", "!! c #4D4E4D", "~! c #929292", "{! c #C2C3C2", @@ -1498,10 +1498,10 @@ static char * SimCreateIco_xpm[] = { "(! c #030202", "_! c #000100", ":! c #B3B2B2", -"~ c #ACACAD", -",~ c #A4A4A3", -"'~ c #A1A0A0", -")~ c #9E9D9D", -"!~ c #040405", -"~~ c #AFAFD2", -"{~ c #9393FD", -"]~ c #7777FF", -"^~ c #8181FF", -"/~ c #A9A9F8", -"(~ c #CECEFB", -"_~ c #CCCCFD", +"$~ c #C2B8B6", +"%~ c #F6C69B", +"&~ c #FFBE7F", +"*~ c #EFCAB4", +"=~ c #F5E2D8", +"-~ c #FAE4D3", +";~ c #999898", +">~ c #A3A2A3", +",~ c #ACACAD", +"'~ c #A4A4A3", +")~ c #A1A0A0", +"!~ c #9E9D9D", +"~~ c #CCBBB5", +"{~ c #FCC694", +"]~ c #FFBA77", +"^~ c #FFBF81", +"/~ c #F3CAAE", +"(~ c #F7E1D2", +"_~ c #FCE3CD", ":~ c #AEAEAF", "<~ c #8F8F8F", "[~ c #A9A9AA", "}~ c #A3A2A2", "|~ c #AEAFAF", "1~ c #B3B4B3", -"2~ c #09090B", -"3~ c #AEAEDA", -"4~ c #8B8BFD", -"5~ c #7373FF", -"6~ c #7979FF", -"7~ c #9E9EF6", -"8~ c #8E8EAE", -"9~ c #BDBDFC", -"0~ c #B9B9FE", -"a~ c #BABAB9", -"b~ c #B2B2B3", -"c~ c #B1B3B2", -"d~ c #B1B2B1", -"e~ c #ADACAB", -"f~ c #AAA9AA", -"g~ c #888988", -"h~ c #9E9D9E", -"i~ c #A0A0A1", -"j~ c #A4A3A3", -"k~ c #A7A8A8", -"l~ c #B4B4B3", -"m~ c #B1B2B2", -"n~ c #ADADAE", -"o~ c #969595", -"p~ c #808083", -"q~ c #ABABDD", -"r~ c #8989FD", -"s~ c #7171FF", -"t~ c #6F6FFF", -"u~ c #8C8CFD", -"v~ c #9494C2", -"w~ c #57575E", -"x~ c #CFCFF8", -"y~ c #9595FE", -"z~ c #A0A0FD", -"A~ c #DBDBF8", -"B~ c #7D7C7C", -"C~ c #989898", -"D~ c #AEADAD", -"E~ c #ADACAD", -"F~ c #ACABAC", -"G~ c #9C9D9D", -"H~ c #7F7F7E", -"I~ c #565756", -"J~ c #989998", -"K~ c #A0A1A0", -"L~ c #A4A3A4", -"M~ c #B0B1B1", -"N~ c #B1B0B1", -"O~ c #AEAED9", -"P~ c #6B6BFF", -"Q~ c #7575FF", -"R~ c #9696EF", -"S~ c #7B7B95", -"T~ c #CACAEE", -"U~ c #ACACFD", -"V~ c #6363FF", -"W~ c #A2A2FD", -"X~ c #B6B7B7", -"Y~ c #787877", -"Z~ c #757676", -"`~ c #747474", -" { c #8C8D8C", -".{ c #9D9C9D", -"+{ c #A8A8A7", -"@{ c #545353", -"#{ c #989797", -"${ c #9F9F9E", -"%{ c #A0A1A1", -"&{ c #8C8C8B", -"*{ c #706F70", -"={ c #B1B1B0", -"-{ c #B0B0B1", -";{ c #AEAED3", -">{ c #8E8EFD", -",{ c #6565FF", -"'{ c #9999EE", -"){ c #7C7C94", -"!{ c #56565C", -"~{ c #5A5A5F", -"{{ c #8F8FA5", -"]{ c #AFAFF8", -"^{ c #4747FF", -"/{ c #B2B2FC", -"({ c #B4B5B5", -"_{ c #777677", -":{ c #727172", -"<{ c #6B6C6C", -"[{ c #80807F", -"}{ c #919090", -"|{ c #9E9E9F", -"1{ c #A4A5A4", -"2{ c #A6A7A6", -"3{ c #898888", -"4{ c #6E6E6D", -"5{ c #5F5F60", -"6{ c #797A7A", -"7{ c #7E7F7F", -"8{ c #777777", -"9{ c #616060", -"0{ c #5A5A66", -"a{ c #8B8BC5", -"b{ c #8484FD", -"c{ c #6767FF", -"d{ c #5F5FFF", -"e{ c #9494F2", -"f{ c #9A9ACA", -"g{ c #7B7B90", -"h{ c #64636D", -"i{ c #58585E", -"j{ c #57575D", -"k{ c #65656D", -"l{ c #7F7F8F", -"m{ c #A2A2C8", -"n{ c #A1A1F1", -"o{ c #3131FF", -"p{ c #BDBDEF", -"q{ c #767777", -"r{ c #767675", -"s{ c #717171", -"t{ c #6E6E6F", -"u{ c #6C6D6D", -"v{ c #6A6969", -"w{ c #676767", -"x{ c #656665", -"y{ c #676766", -"z{ c #727373", -"A{ c #5C5C5B", -"B{ c #6A6A6B", -"C{ c #7B7A7B", -"D{ c #626262", -"E{ c #575761", -"F{ c #8686BC", -"G{ c #8888FB", -"H{ c #6969FF", -"I{ c #6161FF", -"J{ c #5D5DFF", -"K{ c #5959FF", -"L{ c #8282FD", -"M{ c #9898F3", -"N{ c #A2A2E5", -"O{ c #A1A1DB", -"P{ c #A2A2D9", -"Q{ c #A7A7E3", -"R{ c #9F9FF3", -"S{ c #8080FD", -"T{ c #5353FF", -"U{ c #3939FF", -"V{ c #9090FC", -"W{ c #CFCFF5", -"X{ c #B1B1B2", -"Y{ c #777676", -"Z{ c #747575", -"`{ c #717271", -" ] c #6D6E6D", -".] c #6B6B6A", -"+] c #686767", -"@] c #646363", -"#] c #5D5D5C", -"$] c #777776", -"%] c #878788", -"&] c #969596", -"*] c #9A9898", -"=] c #9A9A99", -"-] c #646463", -";] c #7B7C7C", -">] c #7B7C7B", -",] c #707170", -"'] c #575756", -")] c #515159", -"!] c #8181B4", -"~] c #8686FB", -"{] c #5B5BFF", -"]] c #5757FF", -"^] c #4D4DFF", -"/] c #3B3BFF", -"(] c #3333FF", -"_] c #5F5FFD", -":] c #B1B1E8", -"<] c #ABACAB", -"[] c #787777", -"}] c #717170", -"|] c #696869", -"1] c #666565", -"2] c #646465", -"3] c #636363", -"4] c #605F5F", -"5] c #575758", -"6] c #8B8A8B", -"7] c #949393", -"8] c #7D7DAF", -"9] c #4F4FFF", -"0] c #4B4BFF", -"a] c #4343FF", -"b] c #4141FF", -"c] c #3D3DFF", -"d] c #3535FF", -"e] c #4545FF", -"f] c #9A9AFD", -"g] c #A8A8BB", -"h] c #A5A4A4", -"i] c #969797", -"j] c #787778", -"k] c #636364", -"l] c #606161", -"m] c #5D5C5C", -"n] c #585958", -"o] c #5C5C5D", -"p] c #868787", -"q] c #7F807F", -"r] c #53535D", -"s] c #7E7EB0", -"t] c #6D6DFF", -"u] c #5151FF", -"v] c #4949FF", -"w] c #3F3FFF", -"x] c #3737FF", -"y] c #9191FF", -"z] c #A6A6C2", -"A] c #747579", -"B] c #ADADAC", -"C] c #A8A9A8", -"D] c #9A9999", -"E] c #6A6A69", -"F] c #626261", -"G] c #5F605F", -"H] c #818081", -"I] c #868685", -"J] c #51515B", -"K] c #7C7CAF", -"L] c #8686F8", -"M] c #5555FF", -"N] c #A5A5F4", -"O] c #A6A6C1", -"P] c #737377", -"Q] c #7C7B7B", -"R] c #939292", -"S] c #8A8B8A", -"T] c #676768", -"U] c #848485", -"V] c #818281", -"W] c #7F7E7E", -"X] c #7B7B7A", -"Y] c #4E4E55", -"Z] c #7979AC", -"`] c #8484F7", -" ^ c #8686FC", -".^ c #ABABDA", -"+^ c #9393A5", -"@^ c #717174", -"#^ c #626263", -"$^ c #A5A6A6", -"%^ c #9F9FA0", -"&^ c #8B8C8B", -"*^ c #818180", -"=^ c #7E7D7E", -"-^ c #7C7C7D", -";^ c #787978", -">^ c #636463", -",^ c #4C4C51", -"'^ c #7676A6", -")^ c #8484F8", -"!^ c #8686FD", -"~^ c #9F9FD7", -"{^ c #A3A3D9", -"]^ c #A1A1E1", -"^^ c #A6A6E1", -"/^ c #A4A4D5", -"(^ c #A0A0C0", -"_^ c #8B8B9D", -":^ c #727279", -"<^ c #616160", -"[^ c #626161", -"}^ c #7C7D7C", -"|^ c #9B9A9A", -"1^ c #666667", -"2^ c #818182", -"3^ c #7D7E7D", -"4^ c #757475", -"5^ c #4D4D53", -"6^ c #7474A6", -"7^ c #7B7BFF", -"8^ c #8585FF", -"9^ c #9494BC", -"0^ c #64646C", -"a^ c #636368", -"b^ c #67676C", -"c^ c #69686D", -"d^ c #646466", -"e^ c #5E5E5F", -"f^ c #5F6060", -"g^ c #707171", -"h^ c #807F80", -"i^ c #8E8E8F", -"j^ c #979696", -"k^ c #959594", -"l^ c #686869", -"m^ c #7F8080", -"n^ c #7E7E7F", -"o^ c #7C7D7D", -"p^ c #737374", -"q^ c #7373A4", -"r^ c #8282F8", -"s^ c #8383FF", -"t^ c #535453", -"u^ c #5B595B", -"v^ c #5F5F5E", -"w^ c #747473", -"x^ c #838384", -"y^ c #908F90", -"z^ c #919192", -"A^ c #7D7C7D", -"B^ c #818282", -"C^ c #808081", -"D^ c #7F7F80", -"E^ c #4C4C54", -"F^ c #7272A3", -"G^ c #8080F4", -"H^ c #9292C5", -"I^ c #666670", -"J^ c #5B5A5C", -"K^ c #5C5D5D", -"L^ c #828181", -"M^ c #5A595A", -"N^ c #676667", -"O^ c #8A8A8A", -"P^ c #7A7A7B", -"Q^ c #6F6FA0", -"R^ c #8080F3", -"S^ c #7D7DFF", -"T^ c #9090C5", -"U^ c #646570", -"V^ c #9E9E9D", -"W^ c #838282", -"X^ c #767576", -"Y^ c #868585", -"Z^ c #797A79", -"`^ c #737273", -" / c #46464B", -"./ c #6C6D9E", -"+/ c #7D7DF6", -"@/ c #7C7CFD", -"#/ c #8F8FC6", -"$/ c #64646F", -"%/ c #7F7E7F", -"&/ c #989897", -"*/ c #9C9D9C", -"=/ c #6B6B71", -"-/ c #7B7BAC", -";/ c #7C7CFC", -">/ c #8F8FC8", -",/ c #61616E", -"'/ c #4D4F4E", -")/ c #9C9B9C", -"!/ c #9B9B9A", -"~/ c #747479", -"{/ c #8282B0", -"]/ c #7E7EF6", -"^/ c #8C8CCB", -"// c #61616F", -"(/ c #838483", -"_/ c #8D8D8C", -":/ c #959696", -"( c #74749F", -",( c #6969F0", -"'( c #8B8BFF", -")( c #7E7EE7", -"!( c #69698A", -"~( c #717172", -"{( c #75759A", -"]( c #6D6DE5", -"^( c #8383E8", -"/( c #696987", -"(( c #737398", -"_( c #6C6CE1", -":( c #7F80E6", -"<( c #8282A1", -"[( c #737399", -"}( c #6A6AE1", -"|( c #8F8FFF", -"1( c #7C7CED", -"2( c #7F7FA2", -"3( c #757577", -"4( c #72729A", -"5( c #6464E4", -"6( c #6F6FFD", -"7( c #7979F9", -"8( c #8080A8", -"9( c #727294", -"0( c #6464E1", -"a( c #7474FD", -"b( c #7777F4", -"c( c #565675", -"d( c #5E5ED3", -"e( c #9090FD", -"f( c #8F8FFA", -"g( c #8A8AFC", -"h( c #7979ED", -"i( c #7F7FA9", -"j( c #6565ED", -"k( c #7575FE", -"l( c #8B8BD5", -"m( c #7B7BAB", -"n( c #75759D", -"o( c #7A7AB1", -"p( c #8484DC", -"q( c #7575EE", -"r( c #7E7EA9", -"s( c #747477", -"t( c #7070E7", -"u( c #6868FD", -"v( c #9898F5", -"w( c #4C4C53", -"x( c #5E5E73", -"y( c #7B7BCE", -"z( c #7474F4", -"A( c #7C7CAB", -"B( c #6565F2", -"C( c #7777FC", -"D( c #7F7FFA", -"E( c #6E6EFB", -"F( c #666699", -"G( c #56565A", -"H( c #6262F7", -"I( c #8585FA", -"J( c #8484F3", -"K( c #7070FB", -"L( c #8181E4", -"M( c #6262F5", -"N( c #8080FB", -"O( c #8383F2", -"P( c #7171FE", -"Q( c #6F6FFA", -"R( c #8181E6", -"S( c #6969EC", -"T( c #6E6EFD", -"U( c #9A9AEF", -"V( c #7878F7", -"W( c #6C6CFB", -"X( c #8080E7", -"Y( c #6464FB", -"Z( c #7E7EFB", -"`( c #9999EA", -" _ c #7F7FEA", -"._ c #6B6BFC", -"+_ c #7B7BE6", -"@_ c #6C6BE5", -"#_ c #6161FE", -"$_ c #8585F2", -"%_ c #8D8DEC", -"&_ c #8282EB", -"*_ c #7777F2", -"=_ c #6969FE", -"-_ c #7A7AE7", -";_ c #7979E6", -">_ c #6C6CF1", -",_ c #6464F9", -"'_ c #6666FB", -")_ c #6565FA", -"!_ c #7070F1", -"~_ c #8787E7", +"2~ c #D4BEB3", +"3~ c #FDC28B", +"4~ c #FFB873", +"5~ c #FFBB79", +"6~ c #F3C7A1", +"7~ c #A79894", +"8~ c #FADABF", +"9~ c #FDDBBA", +"0~ c #BABAB9", +"a~ c #B2B2B3", +"b~ c #B1B3B2", +"c~ c #B1B2B1", +"d~ c #ADACAB", +"e~ c #AAA9AA", +"f~ c #888988", +"g~ c #9E9D9E", +"h~ c #A0A0A1", +"i~ c #A4A3A3", +"j~ c #A7A8A8", +"k~ c #B4B4B3", +"l~ c #B1B2B2", +"m~ c #ADADAE", +"n~ c #969595", +"o~ c #828080", +"p~ c #D7BEB2", +"q~ c #FDC189", +"r~ c #FFB771", +"s~ c #FFB66F", +"t~ c #FDC38C", +"u~ c #BDA699", +"v~ c #5C5959", +"w~ c #F3DED4", +"x~ c #FDC896", +"y~ c #FCCCA1", +"z~ c #F3E5E0", +"A~ c #7D7C7C", +"B~ c #989898", +"C~ c #AEADAD", +"D~ c #ADACAD", +"E~ c #ACABAC", +"F~ c #9C9D9D", +"G~ c #7F7F7E", +"H~ c #565756", +"I~ c #989998", +"J~ c #A0A1A0", +"K~ c #A4A3A4", +"L~ c #B0B1B1", +"M~ c #B1B0B1", +"N~ c #D3BDB4", +"O~ c #FFB46B", +"P~ c #FFB975", +"Q~ c #EDBF98", +"R~ c #90847F", +"S~ c #E8D6D0", +"T~ c #FBD3AE", +"U~ c #FFB063", +"V~ c #FCCDA3", +"W~ c #B6B7B7", +"X~ c #787877", +"Y~ c #757676", +"Z~ c #747474", +"`~ c #8C8D8C", +" { c #9D9C9D", +".{ c #A8A8A7", +"+{ c #545353", +"@{ c #989797", +"#{ c #9F9F9E", +"${ c #A0A1A1", +"%{ c #8C8C8B", +"&{ c #706F70", +"*{ c #B1B1B0", +"={ c #CDBAB4", +"-{ c #FDC48E", +";{ c #FFB165", +">{ c #EBBF9C", +",{ c #908481", +"'{ c #5A5757", +"){ c #5E5C5B", +"!{ c #A19793", +"~{ c #F7D2B0", +"{{ c #FFA247", +"]{ c #FBD5B2", +"^{ c #B4B5B5", +"/{ c #777677", +"({ c #727172", +"_{ c #6B6C6C", +":{ c #80807F", +"<{ c #919090", +"[{ c #9E9E9F", +"}{ c #A4A5A4", +"|{ c #A6A7A6", +"1{ c #898888", +"2{ c #6E6E6D", +"3{ c #5F5F60", +"4{ c #797A7A", +"5{ c #7E7F7F", +"6{ c #777777", +"7{ c #616060", +"8{ c #635D5D", +"9{ c #BFA191", +"0{ c #FDBF84", +"a{ c #FFB267", +"b{ c #FFAE5F", +"c{ c #F0C096", +"d{ c #C4ADA0", +"e{ c #8D827F", +"f{ c #6B6665", +"g{ c #5D5A5A", +"h{ c #6B6767", +"i{ c #8C8482", +"j{ c #C3B1A7", +"k{ c #F0C6A3", +"l{ c #FF9731", +"m{ c #EBD3C1", +"n{ c #767777", +"o{ c #767675", +"p{ c #717171", +"q{ c #6E6E6F", +"r{ c #6C6D6D", +"s{ c #6A6969", +"t{ c #676767", +"u{ c #656665", +"v{ c #676766", +"w{ c #727373", +"x{ c #5C5C5B", +"y{ c #6A6A6B", +"z{ c #7B7A7B", +"A{ c #626262", +"B{ c #5F5A59", +"C{ c #B59A8D", +"D{ c #FAC089", +"E{ c #FFB369", +"F{ c #FFAF61", +"G{ c #FFAD5D", +"H{ c #FFAB59", +"I{ c #FDBE82", +"J{ c #F1C29A", +"K{ c #E1C0A6", +"L{ c #D7BAA5", +"M{ c #D5BAA6", +"N{ c #E1C2A9", +"O{ c #F2C69F", +"P{ c #FDBD80", +"Q{ c #FFA853", +"R{ c #FF9B39", +"S{ c #FCC590", +"T{ c #EFDDD4", +"U{ c #B1B1B2", +"V{ c #777676", +"W{ c #747575", +"X{ c #717271", +"Y{ c #6D6E6D", +"Z{ c #6B6B6A", +"`{ c #686767", +" ] c #646363", +".] c #5D5D5C", +"+] c #777776", +"@] c #878788", +"#] c #969596", +"$] c #9A9898", +"%] c #9A9A99", +"&] c #646463", +"*] c #7B7C7C", +"=] c #7B7C7B", +"-] c #707170", +";] c #575756", +">] c #575353", +",] c #AD9387", +"'] c #FABF87", +")] c #FFAC5B", +"!] c #FFAA57", +"~] c #FFA54D", +"{] c #FF9C3B", +"]] c #FF9833", +"^] c #FDAC5F", +"/] c #E5CAB5", +"(] c #B0B0B1", +"_] c #ABACAB", +":] c #787777", +"<] c #717170", +"[] c #696869", +"}] c #666565", +"|] c #646465", +"1] c #636363", +"2] c #605F5F", +"3] c #575758", +"4] c #8B8A8B", +"5] c #949393", +"6] c #A98F84", +"7] c #FFA64F", +"8] c #FFA44B", +"9] c #FFA043", +"0] c #FF9F41", +"a] c #FF9D3D", +"b] c #FF9935", +"c] c #FFA145", +"d] c #FDCA9A", +"e] c #B8AFAA", +"f] c #A5A4A4", +"g] c #969797", +"h] c #787778", +"i] c #636364", +"j] c #606161", +"k] c #5D5C5C", +"l] c #585958", +"m] c #5C5C5D", +"n] c #868787", +"o] c #7F807F", +"p] c #5A5555", +"q] c #A99085", +"r] c #FFB56D", +"s] c #FFA751", +"t] c #FFA349", +"u] c #FF9E3F", +"v] c #FF9A37", +"w] c #FFC791", +"x] c #BDB0AA", +"y] c #ADADAC", +"z] c #A8A9A8", +"A] c #9A9999", +"B] c #6A6A69", +"C] c #626261", +"D] c #5F605F", +"E] c #818081", +"F] c #868685", +"G] c #595453", +"H] c #A98F83", +"I] c #F7BD87", +"J] c #FFA955", +"K] c #F2CAA7", +"L] c #767474", +"M] c #7C7B7B", +"N] c #939292", +"O] c #8A8B8A", +"P] c #676768", +"Q] c #848485", +"R] c #818281", +"S] c #7F7E7E", +"T] c #7B7B7A", +"U] c #545050", +"V] c #A48A7F", +"W] c #F5BB86", +"X] c #FBBF87", +"Y] c #F2C6A1", +"Z] c #D6BEAF", +"`] c #A29996", +" ^ c #626263", +".^ c #A5A6A6", +"+^ c #9F9FA0", +"@^ c #8B8C8B", +"#^ c #818180", +"$^ c #7E7D7E", +"%^ c #7C7C7D", +"&^ c #787978", +"*^ c #636463", +"=^ c #504D4D", +"-^ c #9F867D", +";^ c #F7BC85", +">^ c #FDC086", +",^ c #D3B5A2", +"'^ c #D5BAA7", +")^ c #DCBCA5", +"!^ c #DDC0A9", +"~^ c #D0B8A9", +"{^ c #BBACA4", +"]^ c #99918F", +"^^ c #777474", +"/^ c #616160", +"(^ c #626161", +"_^ c #7C7D7C", +":^ c #9B9A9A", +"<^ c #666667", +"[^ c #818182", +"}^ c #7D7E7D", +"|^ c #757475", +"1^ c #514E4E", +"2^ c #9E857C", +"3^ c #FFBC7B", +"4^ c #FFC185", +"5^ c #B7A39A", +"6^ c #6A6666", +"7^ c #666464", +"8^ c #6B6868", +"9^ c #6D6969", +"0^ c #666564", +"a^ c #5F6060", +"b^ c #707171", +"c^ c #807F80", +"d^ c #8E8E8F", +"e^ c #979696", +"f^ c #959594", +"g^ c #686869", +"h^ c #7F8080", +"i^ c #7E7E7F", +"j^ c #7C7D7D", +"k^ c #737374", +"l^ c #9D847A", +"m^ c #F7BB83", +"n^ c #FFC083", +"o^ c #BDA598", +"p^ c #6C6767", +"q^ c #535453", +"r^ c #5B595B", +"s^ c #5F5F5E", +"t^ c #747473", +"u^ c #838384", +"v^ c #908F90", +"w^ c #919192", +"x^ c #7D7C7D", +"y^ c #818282", +"z^ c #808081", +"A^ c #7F7F80", +"B^ c #524E4E", +"C^ c #9B8279", +"D^ c #F1B683", +"E^ c #BFA597", +"F^ c #6E6868", +"G^ c #5B5A5C", +"H^ c #5C5D5D", +"I^ c #828181", +"J^ c #5A595A", +"K^ c #676667", +"L^ c #8A8A8A", +"M^ c #7A7A7B", +"N^ c #4E4B4B", +"O^ c #987F76", +"P^ c #F0B682", +"Q^ c #FFBD7D", +"R^ c #C0A596", +"S^ c #6D6867", +"T^ c #9E9E9D", +"U^ c #838282", +"V^ c #767576", +"W^ c #868585", +"X^ c #797A79", +"Y^ c #737273", +"Z^ c #4A4747", +"`^ c #967D73", +" / c #F4B77E", +"./ c #FDBB7C", +"+/ c #C0A494", +"@/ c #6C6766", +"#/ c #7F7E7F", +"$/ c #989897", +"%/ c #9C9D9C", +"&/ c #6F6D6D", +"*/ c #A48C82", +"=/ c #FBBB7D", +"-/ c #C2A595", +";/ c #6C6463", +">/ c #4D4F4E", +",/ c #9C9B9C", +"'/ c #9B9B9A", +")/ c #787676", +"!/ c #A89189", +"~/ c #F3B681", +"{/ c #C5A592", +"]/ c #6C6564", +"^/ c #838483", +"// c #8D8D8C", +"(/ c #959696", +"_/ c #959795", +":/ c #757574", +"( c #82726F", +",( c #917E7A", +"'( c #DA9E72", +")( c #E1AB83", +"!( c #9B8B88", +"~( c #D99D72", +"{( c #FFC68F", +"]( c #E8B081", +"^( c #9B8985", +"/( c #767575", +"(( c #937E79", +"_( c #DD9B6B", +":( c #FDB46F", +"<( c #F7B77B", +"[( c #A18D87", +"}( c #8D7C79", +"|( c #D8996C", +"1( c #FDB774", +"2( c #F1B17A", +"3( c #6F5F5C", +"4( c #C98F67", +"5( c #FDC590", +"6( c #F9C290", +"7( c #FCC28A", +"8( c #EAAE7D", +"9( c #A18C86", +"0( c #E19D71", +"a( c #D0AA91", +"b( c #A38B82", +"c( c #96827C", +"d( c #AA8E82", +"e( c #D7A988", +"f( c #EAAC79", +"g( c #A18B85", +"h( c #D69A81", +"i( c #FCB069", +"j( c #EDBEA0", +"k( c #6F6462", +"l( c #C79D81", +"m( c #F1AF76", +"n( c #A38C84", +"o( c #E7A06F", +"p( c #F9B67A", +"q( c #F5B784", +"r( c #FAB36F", +"s( c #91776E", +"t( c #595757", +"u( c #F0A469", +"v( c #F6BA89", +"w( c #EAB18D", +"x( c #FEB875", +"y( c #F8B273", +"z( c #D3A190", +"A( c #494747", +"B( c #ECA26B", +"C( c #F8B983", +"D( c #E8B08D", +"E( c #FEB671", +"F( c #F6AF73", +"G( c #D6A291", +"H( c #DD9B77", +"I( c #FBB370", +"J( c #E3B8A6", +"K( c #EFAF7F", +"L( c #F7AF70", +"M( c #D6A290", +"N( c #F8AB67", +"O( c #F8B881", +"P( c #DDB3A5", +"Q( c #DCA58D", +"R( c #F9B06E", +"S( c #D59F8B", +"T( c #D4957C", +"U( c #FEAE61", +"V( c #FDB672", +"W( c #E8B18E", +"X( c #DEAE9A", +"Y( c #DCA791", +"Z( c #E8A981", +"`( c #FDB26A", +" _ c #D69F8B", +"._ c #D59E8A", +"+_ c #E7A376", +"@_ c #F5A968", +"#_ c #F8AC69", +"$_ c #F5AA6A", +"%_ c #E6A47B", +"&_ c #D7A697", " ", " ", " ", @@ -2214,52 +2204,52 @@ static char * SimCreateIco_xpm[] = { " -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)z)W)>!/#,!'!)! ", " o+I.4.m%[+ +=$G#|.!!|.k.M&|.F.k.<+!!(@G.H.4._#_#I.n.:#o+C+.+++2+P.~!/#/#/#/#/#B#R*i*y*D*{ E${!(%]!^!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;/!-,%)R)r'r'-'6'=)w).)()(!g)_!z)z)z)z):!M)>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z)x!y!z!A!B! C! ", -" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#D!E!F!G!E*j*H!3*W)(&{ | =&x*[=I!/#/#/#J!Z&Z&Z&c%c%e F>K!,,L!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)M!N!O!P!Q! R!R! ", -" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)G)$~%~&~P!*~ R!=~ ", -" P.G%[;o*F!-~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%;~x*=&7.E*2*{ >~| y*^&,~'~)~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)!~~~{~]~^~/~ (~_~ ", -" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*2~3~4~5~6~7~8~ 9~0~ ", -" P.a~p)3*R*/&b~c~d~X!j*e~f~E!g~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)h~i~j~x*i*T*k~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.l~l~o*M):!l*m~n~o~p~q~r~s~t~u~v~w~P.P. x~y~z~A~ ", -" P..~1~o*%@!*B~;*C~T*j*{ D~E~F~| E*G~H~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.I~-*} J~K~R*L~9&]&j~E!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&m~M~N~x!O~r~t~P~Q~R~S~P.P.P.P.P.P.P. T~U~V~W~ ", -" P.X~l*(&!*}-Y~0*Z~`~T![- {.{=&E&=&=&=&y*+{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$@{s !*. a)+~#{${%{%{/#/#e*1*/#e*&{. *{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.={/&-{;{>{t~P~,{6~'{){!{P.P.P.P.P.P.~{{{]{,{^{/{ ", -" P.({/&/&}-*+_{F=F=T!:{5.V&S.<{-*[{}{|{9&R*R*1{2{`)3{4{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 5{}*i&V&`~6{7{O):&[*D+8{Z)9{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0{a{b{P~c{,{d{5~e{f{g{h{i{j{k{l{m{n{,{o{,{p{ ", -" P.1~:~:~*+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{z{S&N)${h~${D!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M A{! Z)B{5.Z~C{[-8{-*S.)*D{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.E{F{G{s~H{,{I{J{K{c{L{M{N{O{P{Q{R{S{T{o{U{V{W{ ", -" P.X{2*>~Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]Q $]%]&]-~*]=]-~|%. S.-]v I.a+$+#+Q.P.P.P.P.P.P.P.p.s{$];]>]0*,]p.Z)1=a ']*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]!]~]s~H{c{V~d{{]]]T{T{{]V~c{V~{]^]/](]o{_]:] ", -" P.-{<]| !@[]T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M :.|]. 6]E@7]7]<~>)}-s{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.)]8]b{5~P~c{,{I{J{{]]]T{9]0]^{a]b]c]U{d]o{e]f]g] ", -" P.j*7.[~A*A*h]i]U&j]w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.7@o]a!D+|%+~ ~p]q]}-T!3][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.r]s]~]5~t]H{,{V~d{{]K{T{u]^]v]e]a]w]c]x]x]u]y]z]A] ", -" P.B]C]G!e*h]=&T.V*V*x*D];*8{E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#}.G]:{H]I]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J]K]L]Q~t~P~c{V~d{J{K{M]u]9]0]^{a]w]c]c]^]Q~N]O]P]1] ", -" P.o!-+-+%@!*Q]!@R]!=x*x*c+j~Q*e*S]*+T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+U]S&V]:&W]=*X]Y~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Y]Z]`]]~t~t]H{,{I{J{{]]]T{9]]]t~t]I{d{t] ^R{.^+^@^#^@] ", -" P.7.i*$^!*}-Y~0*Z~`~-*. x&,.`)_&K~%^I!e*&^}-T]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)*^D+=^-^. 6{*+;^8{-*>^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.,^'^)^6~s~t]P~c{V~d{{]K{M]u]M]!^~^{^]^^^/^(^_^:^D{! <^[^ ", -" P.=&]&]&}-*+_{F=F=T!:{5.V&S.<{5.}^&^/=/#X*|^e*s%&{!*1^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&2^:&H~3^;]X]p=*+$]0*4^T!`~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5^6^L{7^5~t~P~H{,{I{J{K{]]T{K{8^9^0^a^b^c^d^e^A{#]9 ) 5{f^ ", -" P.2{Q*Q**+q{r{`~`~}=s{*{t{u{p.v{w w{x{y{g^h^i^C~/=j^6.k^ ~b%l^M [+4.Q@C+p+2+P.P.P.P.a)[*m^n^o^b%!*}-*+$]F=p^-*-*-*T!`~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.Y]q^r^7^Q~s~t]H{c{V~d{{]]]M]K{s^v~k{t^N M v ..K u^:.a 0 n v^ ", -" P.c+_&_&Y{Z~Z{T!T!`{5.t{ ]p..].*+]Z)}*@]g*! m #]1]w^x^y^z^#!&@<~|%A^.*N 0%P.P.P.P.P.B^C^D^n^[-. !*}-[]-&F=T!-*-*-*-*-*-*-*T!`~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.E^F^G^7^]~5~t~P~c{,{I{J{K{M]K{&~H^I^O+&.%.O N ^+5]{@s r J^o]K^ ", -" P.R*D!`)L^Y{T!-*-*}]V&4{S.< i&|]y{1]2]3]1=4]9 a H I 5]M M^N^[]!@+~ ~|%O^x&O)< ..n.P.V]:&D+O)b%P^6{;^8{0*`~T!-*-*-*-*-*-*-*-*-*-*-*T!`~F=5.w{9 ..&.I.P.#+Q.Q.P.w%Q^R^7^]~Q~s~t]H{,{V~d{{]]]]]S^T^U^>.i.`.&.g.#.N +.v ..s Y.r H ", -" P.[=!=V^!=!==]<~W^X^w*S.p.< .*w Z)Y&k]D{l]) A.m]H n]M@M P g.`.}.}.{+< [ ~ p]Y^O'S&[-*^D^O)[-%@!*Z^@~0*F=`~`^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!`~`~V&w{1=H g.n. /./+/S^6~Q~s~t~P~c{V~d{J{K{K{@/#/$/1!2.}.-.<.O+g.P $.N I~v .. .s ", -" P.%/7]&/=]*/.{X*X*X*|^,#S&F=E]w{Z)}*3]F]! ) 0 A{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B^:&D+O)-^. !**+8{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*=/-/;/S^7^]~5~s~t]H{,{I{d{{]K{7^>/,/I.n+<%M&'/}.[.`.&.g.P N N M ']]+ ", -" P.8+v+1.Z)D+ ~,#/=1*)/!/e*s%s%,#O'F=T]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+H~[-. !*v&*+q{F=`~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~/{/]/&~S^6~Q~s~t~P~c{V~d{J{{]6~^///S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", -" P.#+8+9+#+_+w b%(/_/=+e*s%C~i]:/.}.[.<. ", -" $+P.4.g.H w{r/&{s/,#a&&{O^t/;*x&0!*+u/Z.0%P.P.P.P.P.b%. !*}-*+8{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*v/w/x/&~s^&~7^6~Q~s~t]H{c{V~d{Q~y/z/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", -" Q.O.I.F.N w{b% ~+~|%A/U&~ !@O'S&a)B/w M o+P.b%h/!*C/8{0*D/p^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*E/F/G/&~8^^~S^6~Q~5~t~P~c{,{I{5~H/I/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", -" P.O.M.o+g.w =*J/U&K/L/a)M/:&D+|/-^;^. !*}-*+0*N/O/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*P/Q/R/&~8^s^&~7^]~5~t~t]H{,{I{s~S/T/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", -" P.P.P.P.p+N < =*U/*^M/O)0/-^%@P^}-v&[]0*V/W/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~P!s^&~S^]~Q~5~t~H{c{V~s~`/ (P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", -" P.Q.#+$+M. .Z*.(%@!*. +(v&j]@(F=b/z{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(%(&~O!8^^~S^7^]~5~t~t]H{,{&(*(=(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", -" P.#+$+a+f@H -(`~W/;(N/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/>(,(@/'(P!s^&~S^]~5~s~t]P~c{t~)(!(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", -" P.Q.$+a+#+1.H w{< S.s{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*~({(](S^'(O!8^^~S^7^]~s~t~P~c{t~^(/(<@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", -" P.#+a+a+P.k.s 3]w{p.s{`~T!-*-*-*-*-*-*-*-*-*-*-*((_(S^A!'(8^s^&~7^6~Q~t~t]H{t~:(<(f@P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", -" Q. $+M.}...) Z)S.T!`~T!-*-*-*-*-*-*[(}(7^|('(P!s^&~7^6~Q~s~t]P~t~1(2(3(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", -" Q.o+}.M 0 Y&V&F=`~T!-*4(5(6~|(A!O!8^^~S^7^Q~5~t~P~6(7(8(P/F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", -" #+P.n.k.&.H w{9(0(a(y]|('(P!s^&~S^6~Q~s~t]t~b(3/P/-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", -" Q.O.c(d(o/e(f(g(O!8^^~S^6~Q~5~t~t~h(i(P/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", -" j(k(l(m(n(o(p(^~&~7^]~5~s~t~q(r(s(-*-*-*F=n.P.P.P.P.P.P.P.P. ", -" t(u(v( w(x(y(@/6~Q~s~t~z(A(2/-*-*-*-*F=n.P.P.P.P.P.P. ", -" B(C( D(]~5~t~E(F(G(N%5.T!T!-*F=n.P.P.P.P. ", -" H(I( J(k(s~K(L( /Q.#+#+n...w{T!n.P.P. ", -" M(N( O(P(Q(R( P.#+$+Q.P. ", -" S(T(U( V(W(X( ", -" Y(Z(`( _._+_ ", -" @_#_P($_%_&_*_=_-_ ", -" ;_>_,_'_)_!_~_ ", +" Q.O.p+o+o+Y$n.J.I.-$Q+Q+4.m%1!<%<%4.3.<%4.4.Q+f@I.n.n.n.o+o.0%j!O.@+P.P.P.~ /#/#/#/#/#k!R*i*l!k*m!'#_)4*l*n!o!=&]&_&p!p!y q!'*'*r!c%h,s!t!i&b#@>>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z):!x!y!z!A! B! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#C!D!E!F!E*j*G!3*W)(&{ | =&x*[=H!/#/#/#I!Z&Z&Z&c%c%e F>J!,,K!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)L!M!N!O!P! Q!R! ", +" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)d!$~%~&~O!*~ =~-~ ", +" P.G%[;o*E!;~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%>~x*=&7.E*2*{ ,~| y*^&'~)~!~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)F)~~{~]~^~/~ (~_~ ", +" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*%)2~3~4~5~6~7~ 8~9~ ", +" P.0~p)3*R*/&a~b~c~X!j*d~e~D!f~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)g~h~i~x*i*T*j~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.k~k~o*M):!l*l~m~n~o~p~q~r~s~t~u~v~P.P. w~x~y~z~ ", +" P..~1~o*%@!*A~;*B~T*j*{ C~D~E~| E*F~G~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.H~-*} I~J~R*K~9&]&i~D!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&l~L~M~G!N~q~s~O~P~Q~R~P.P.P.P.P.P.P. S~T~U~V~ ", +" P.W~l*(&!*}-X~0*Y~Z~T![-`~ {=&E&=&=&=&y*.{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$+{s !*. a)+~@{#{${${/#/#e*1*/#e*%{. &{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.*{/&/&={-{s~O~;{5~>{,{'{P.P.P.P.P.P.){!{~{;{{{]{ ", +" P.^{/&/&}-*+/{F=F=T!({5.V&S._{-*:{<{[{9&R*R*}{|{`)1{2{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 3{}*i&V&Z~4{5{O):&[*D+6{Z)7{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.8{9{0{O~a{;{b{4~c{d{e{f{g{v~h{i{j{k{;{l{;{m{ ", +" P.1~:~:~*+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{w{S&N)#{g~#{C!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M x{! Z)y{5.Y~z{[-6{-*S.)*A{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.B{C{D{r~E{;{F{G{H{a{I{J{K{L{M{N{O{P{Q{l{R{S{T{ ", +" P.U{2*,~V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]Q +]@]#];~$]%];~|%. S.&]v I.a+$+#+Q.P.P.P.P.P.P.P.p.p{+]*]=]0*-]p.Z)1=a ;]*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>],]']r~E{a{U~b{)]!]Q{Q{)]U~a{U~)]~]{]]]l{^]/] ", +" P.(]_]| !@:]T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M :.[]. 4]E@5]5]<~>)}-p{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>]6]0{4~O~a{;{F{G{)]!]Q{7]8]{{9]0]a]R{b]l{c]d]e] ", +" P.j*7.[~A*A*f]g]U&h]w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.7@m]a!D+|%+~ ~n]o]}-T!1][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p]q]']4~r]E{;{U~b{)]H{Q{s]~]t]c]9]u]a]v]v]s]w]x]V{ ", +" P.y]z]F!e*f]=&T.V*V*x*A];*6{B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#}.D]({E]F]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.G]H]I]P~s~O~a{U~b{G{H{J]s]7]8]{{9]u]a]a]~]P~K]x]L]}] ", +" P.o!-+-+%@!*M]!@N]!=x*x*c+i~Q*e*O]*+P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+Q]S&R]:&S]=*T]X~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.U]V]W]]~s~r]E{;{F{G{)]!]Q{7]!]s~r]F{b{r]X]Y]Z]`]}= ^ ] ", +" P.7.i*.^!*}-X~0*Y~Z~-*. x&,.`)_&J~+^H!e*@^}-P]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#^D+$^%^. 4{*+&^6{-**^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.=^-^;^5~r~r]O~a{U~b{)]H{J]s]J]>^,^'^)^!^~^{^]^^^A{! /^(^ ", +" P.=&]&]&}-*+/{F=F=T!({5.V&S._{5._^@^/=/#X*:^e*s%%{!*<^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&[^:&G~}^*]T]p=*++]0*|^T!Z~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1^2^I{3^4~s~O~E{;{F{G{H{!]Q{H{4^5^6^7^8^9^0^E x{.]9 ) 3{a^ ", +" P.|{Q*Q**+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{b^c^d^B~/=e^6.f^ ~b%g^M [+4.Q@C+p+2+P.P.P.P.a)[*h^i^j^b%!*}-*++]F=k^-*-*-*T!Z~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.U]l^m^3^P~r~r]E{a{U~b{)]!]J]H{n^o^p^q^N M v ..K r^:.a 0 n s^ ", +" P.c+_&_&V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]}]t^u^v^w^#!&@<~|%x^.*N 0%P.P.P.P.P.y^z^A^i^[-. !*}-:]-&F=T!-*-*-*-*-*-*-*T!Z~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.B^C^D^3^]~4~s~O~a{;{F{G{H{J]H{&~E^F^O+&.%.O N ^+3]{@s r G^m]H^ ", +" P.R*C!`)I^V{T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M J^K^:]!@+~ ~|%L^x&O)< ..n.P.R]:&D+O)b%M^4{&^6{0*Z~T!-*-*-*-*-*-*-*-*-*-*-*T!Z~F=5.t{9 ..&.I.P.#+Q.Q.P.N^O^P^3^]~P~r~r]E{;{U~b{)]!]!]Q^R^S^>.i.`.&.g.#.N +.v ..s Y.r H ", +" P.[=!=T^!=!=%]<~U^V^w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.}.{+< [ ~ n]W^O'S&[-#^A^O)[-%@!*X^@~0*F=Z~Y^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!Z~Z~V&t{1=H g.n.Z^`^ /Q^5~P~r~s~O~a{U~b{G{H{H{./+/@/1!2.}.-.<.O+g.P $.N H~v .. .s ", +" P.#/5]$/%]%/ {X*X*X*:^,#S&F=B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%y^:&D+O)%^. !**+6{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*&/*/=/Q^3^]~4~r~r]E{;{F{b{)]H{3^-/;/I.n+<%M&>/}.[.`.&.g.P N N M ;]]+ ", +" P.8+v+1.Z)D+ ~,#/=1*,/'/e*s%s%,#O'F=P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+G~[-. !*v&*+n{F=Z~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*)/!/~/&~Q^5~P~r~s~O~a{U~b{G{)]5~{/]/S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ", +" P.#+8+9+#+_+w b%^///=+e*s%B~g](/_/~!!@:/.}.[.<. ", +" $+P.4.g.H t{n/%{o/,#a&%{L^p/;*x&0!*+q/Z.0%P.P.P.P.P.b%. !*}-*+6{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*r/s/t/&~n^&~3^5~P~r~r]E{a{U~b{P~u/v/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ", +" Q.O.I.F.N t{b% ~+~|%w/U&~ !@O'S&a)x/w M o+P.b%d/!*y/6{0*z/k^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*h/A/B/&~4^^~Q^5~P~4~s~O~a{;{F{4~C/D/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ", +" P.O.M.o+g.w =*E/U&F/G/a)H/:&D+[/%^&^. !*}-*+0*I/J/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*9/K/L/&~4^n^&~3^]~4~s~r]E{;{F{r~M/D/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ", +" P.P.P.P.p+N < =*N/#^H/O)7/%^%@M^}-v&:]0*O/P/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=Q/R/&~O!n^&~Q^]~P~4~s~E{a{U~r~S/T/P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ", +" P.Q.#+$+M. .Z*U/%@!*. V/v&h]W/F=9/w{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~N!4^^~Q^3^]~4~s~r]E{;{`/ (.(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ", +" P.#+$+a+f@H +(Z~P/@(I/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(./%(O!n^&~Q^]~4~r~r]O~a{s~&(*(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ", +" P.Q.$+a+#+1.H t{< S.p{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/=(-(Q^%(N!4^^~Q^3^]~r~s~O~a{s~;(>(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" P.#+a+a+P.k.s 1]t{p.p{Z~T!-*-*-*-*-*-*-*-*-*-*-*,('(Q^z!%(4^n^&~3^5~P~s~r]E{s~)(!(n+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ", +" Q. $+M.}...) Z)S.T!Z~T!-*-*-*-*-*-*,(~(3^{(%(O!n^&~3^5~P~r~r]O~s~](^(/(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" Q.o+}.M 0 Y&V&F=Z~T!-*((_(5~{(z!N!4^^~Q^3^P~4~s~O~:(<([(}=F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ", +" #+P.n.k.&.H t{}(|(1(w]{(%(O!n^&~Q^5~P~r~r]s~2(1/}=-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ", +" Q.O.3(4(k/5(6(7(N!4^^~Q^5~P~4~s~s~8(9(9/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ", +" 0(k/a(b(c(d(e(^~&~3^]~4~r~s~f(g(L]-*-*-*F=n.P.P.P.P.P.P.P.P. ", +" h(i(j( 1^k(l(./5~P~r~s~m(n(|/-*-*-*-*F=n.P.P.P.P.P.P. ", +" o(p( q(]~4~s~r(s(t(N%5.T!T!-*F=n.P.P.P.P. ", +" u(v( w(x(r~y(z(A(Q.#+#+n...t{T!n.P.P. ", +" B(C( D(E(F(G( P.#+$+Q.P. ", +" H(I(J( K(L(M( ", +" N(O(P( Q(R(S( ", +" T(U(V(W(X(Y(Z(`( _ ", +" ._+_@_#_$_%_&_ ", " ", " "}; diff --git a/src/Mod/Ship/Icons/SimRunIco.png b/src/Mod/Ship/Icons/SimRunIco.png new file mode 100644 index 0000000000000000000000000000000000000000..f10386cf77f0dccf33f6e347820703a618102a00 GIT binary patch literal 15466 zcmZu&WmKC@w+-&@?yfKH(BQ$PxKrHS-5rXR;9lI_trUmi?!}9{-F*M=%6c*@lOLJP zoU@PYJu#}vvS`S}$N&HUOWilL+C`5~n&G|2(d%=r+dq*^ zTlNZ`8E7c@Ve3^L6U@kxefRHH!nrHTH#a#0*Kr}sRR4y@Kuf-xW1z0voa**s z{r~t(;KQIu!u!p>OJIY)R{FHx`cGdzeh3VS9%-3!#}G=3*XTWN{izYo=?U@+di25& z7wDU=yFGgo`u~RyL)L4pp1EAFt%{A;pa-iU`f1~rAO>VkZti`g5AOWuNfxooZuOin zi~QmbvdX`ZLTcZ?6G8! zl}?u@ntrQ2RrbW{_e)p2@&B-D^WHYM-#2|Myt^2K)nnJ4`U2)YnM(b|Tl+nf%!hs@ zoVUNZF4gEqnG!xk;U=;(e%44)K5ZO{d2I>3Eim`rHLGK)0^lg|w!}+wMyHjv|6NjL zPBhre)62-pj#)O{-9MyEmjq}*snC?Ty*|$beRNMe*{B7doY+JdLv4^zVDd52k&PU0 zJnAE;5=JW1=ThYdCEn#fT5zrHWijHPNNOk0N&i@thQuOnL;`4gjqr@cx&jhrq2e3d{$HA`* zgA<`d1dRtnw+nB6C0_Q0%{NDx*P^#-Q;-))p-cy*fJ#@oeYi6XT#+VxeMJ;zWB8?1 z8*n!~mOnqd3Q?_eq3F}qokz*qgoQh3I8R1lp{UjzfuPj}Lb5VMx>EBcIBeOSz(dy$ zW5FdLbBkPItNrHSS8d~wze?Fyz=AU&aG8g5?8VRSzSo<~KL2UGsHPV<`tmYdWx`_w z_tt#vE#-7{om8>pW4)+gVQ0?Zd;-2)W^hmx zGPF%vk%?UGKuy%W-HPXPv+tiX_aBs~GdlKNc#d|nM4f0%C*o12U!;q|Im6Q9j-N(< z@vR-evIo2i1O8Cxw$F@u5Fyj*c=ys{rZARrqJ~LPe-RCd%WuJ4)0ds8+{gB|92AOAbp*f zrk5}D^z`=3PpNGlZ(QRzMFd!|ie3aVS2(hP56&^$>%RLq^#;HOkuSpVM&pTguG{PH zIUh&QTYm2^_tl17i60+EGBPqc4Q6So0tYGT z*Y-T<@!4-k(2`PNCl-)&PN=|t;NxyTPkVhRRS)TE10wcXRRXaqoOMJ`_OCBcYD$Kl zcKHv*sQ#=5Kpm!#-LfLRc(F#{eo0LlVrOPj9UMS3?3QFmyEDbejJsmNXWjk&#^X7< zX5ps0RA)RBn}Uamie7JdPy7P^(v69)8MUvR{4(Le+LHu>F-X9t@8 zLB}_}-c(ktNcxWVV+U^W?grK`U2nRt^aiWqkA5m#sESjD{VUOsZRo@UdOMD4F%`9P2~d**H>OWofavdo6Sp-8}^Ghe2s=g9V# zmyaL%LZ*6@=dLyerT8flgWS)7ma}*So&_qP%cp>R~7945pk9T{0=oUE$rX)3W`#B-wi@yyk1{}MttiU*G56!8gZ|S zxeCXXI?7`$0SX8!JxPEaeA5{$E_n^vp_1^=gOw>la96Ga&!|Wv^l5dZXQP=ikpUC* z^+Ns;S4HrBd(0RJ9!z+-*1I)&RzxsQUd0o=9-cV}E6H*QZ{7sl^&0+%Y5pi1dwLS6(Te-VEYF-y zO`P~5QgL_TPVp+I`owOj!`yslSF4$e{FN?(BncjOqqsoy?xZQ&aM!`>8C>tSbrcQl zozBmN*~gOklpNS50Z3!piWv9868^i+!*+Tv6eAV-jat4(&pgmEPmxc72m1@+t_Eu+ z=V>L@l`PsvbIVOsNpEw@D8WxU8$0pecTu&0XOSFCe?`XVYoWFG9BKjB5tswh6e`gl zs!kP~Scqi)CLH}wA!SIDp4s2H#*U8}{|6~EBDbgr=%fY7GpWj@h_ckyolA$r{^;XT zlW+NIPeNIw(91{bo2s0If$*$f_zNBdy-xO#(_F39gDe(0f}w`71>IXpvMGApQ+0rF!8Wr!Kc#7xI(xewJ>Tl?u3;R} zx8WT_l@pAU4bPsAfrY={CV6y+3e=fhhS2!0W+gEi%tny4stHT=$f&Y=f@x&)b`CQ! zAeoi|Un(7O9CWBwm3-5x6exzC$6Zo(nJ2u=ht4cyIAtc?du<->?%0gN5FVEay3mPV zvZ91c`43$9_Fuwa3G1Ua_`nRsIi-5o`If-YnXZ0ywJNO@+@vPftOHHP;nT$`B0|EQ zlk)t(J(m~emX^`a&n*VtyQK#H*SDm?tx=Lu=-mHH_q;}8@rL(ZAZHu_46&_=v;kWK zF=J$6q^QXVXhZ4#dh$>rfm11Gf;D@GzbAQ=Ou#**${#5buAtTD*vByV_pRP_h1UL9 zogsTdB5qnNVjwQvvah$Cuq>Kmv|Fw<-|nSQW5zo^(}+*f7rFV(S=N!WwRKT#=!b!W zW4u=s$G*3@Y&aTwI5EeYpd*rq844`ykHKMB=?fC)=zXGwtZ}&LKeKB>@GR-}J2LR@ z)guYo(_I#pr4YIr6Zzy8dC#B`kegQL^teyspo#e=XHg#cK9)(@@F(Vd{ell`$fSGm z+vY51nN7-sB@-?(ZXBFz2fnbEvg>XHyw$J9_}r7B#z>teOEik7egvJiK(bv`LdoS^ zLIW-Vf&Na9vyRisDnb$x$R7z1d0)_o&lL=-J(Hrw0?PcZGIqBkh3PV4Q`RiRw-R`N z4C_EtJ%YtKuIj+34|Ft>W#lNN@fQYmT(`PgoA%K;2U_VmNOdU@{?y0+4*?cgY1X!d zF&$(LwtV%f8NZSXv3L9q!Rqqz@~DAv%mEKi`*k_?!w(1ipPJHupOe`#<3j8<< z$}?aeCFs3^)4RZrbnFJ|>odUM{S+Eh!Sd<~M|W1;%TWymJX0LNY}AiFj=-n^#PHFH zOs3M*7f3v)uLTJHtqhD17*E1ri1hC#U4CJbZ_uH|kHbnDiIEvXMMH1!ydcINqn)!( z%gZCztI41-Iov?b$6nFf-Kx>5$`K0yqqI52bE#pl-{)l3 zf1nX+8XB5reKyR{T!?Ml&8y7Ywjo9VjnE~j0+7feZr0Mi%B~vP61E{%YLLvKQEor5 zOCaJ!N4%#G{8OIeL7Qk4qE!72U`8JvXIv|j?%K2*ibSKuMk-0OU#Sn_wOhhWkV(ma z1DX&DftbKkWi=vTnX1LciGuLII)2-=#z3f&wC<-r3bd*68EpD869a@aG(+|q%_&Fu z0b5z$itrO!t~HH3g`)AlGI11@2b3(YZ$ZQQ-i0CIJchE77=B?~4O?Y2&xmWT zuhAl5t%^fz{G=~A3y;S%H#fK6?#)$YL}lbrDqgksK^*5%;+d)tQ%5#j{({I_s`^LD zntB%ZbQ#u^Mq>PsOE!tzV(0}e97u)n4Y{zv=hpJ!-8z3rCl-LVQGu#%*hQj3v_UFS zz&VotAV%BwMkiit-sCQn^nRSaQaS?9_CH_wl=RGi{EpPuih~J4cpeZ6Pb}SF zA!cFybgGKj*v2_)+lDX8wG_1EJOo?PCM|keTY1 za1(J!O3FEJCu1-T^o#MVb#)&MZDC1(6~7Ace}o54@`E;z|LNrsO&c4Jbq=kUlSGI_8aWsZNzj@ts?*!`mDpvd*x;u>T(pMd?DWbrq z1ab3!D{5li7cJlRg|?7VsT0gQbwKO#LeLZ)}SR}5{3Bm|InvGqdZ!s__%YIH?MMM34<}z;2R!NMzII) zIAh^76~PV(+P>^W$Q)-4{>X_9y66L8jC~{-zx?-@|E9a$2|0;Kty3rI359v2i+@BO z6Dw-{C;p#QR}0*ou%Pp~TUx6vt*skkm6F05PeU_nJ!?s`YFR|%IRz8lA0D+o@3~UC z_<}ZtQ#129SyU|n!YOj$mQ7YV5_ZZ65YvF= zINL2q!brBJ-p(!a=7O@Fa(*0*_h#yli37iV2>ki3Q`Q*4!uBl_+WWC)`qC;}DK9t6 z)Q%QtYah>TZcZxd887Phz$qvQNpOMl&FFqih$h(*G1+y`lH(?zbz=Zc=ft0pj!-Bm zP9$1PWt`)^{~QZ`PEIv_7DjcI#d;ufPFkk&sa7qSI3~uVGRU6?gdS$Mxh*DiWo7vw zYzsO67ZZcD^p)Jw;RSPb5G8yHdfc8$3B_i0tZaJP3s*v~d7a+x%)@qyUYlM2*WFmE z|9x%O4>sJN{KO^SnZj#*B9cc#sC~N8$svk@l-c-0nt*lDj4D!HI>#y0K)F6+wiDC7G zn%)(0&Sq*8G)kfrf{9Kb}J5AX&L_-fbs9zb__pK#MZSLNn9u zt~FRcz`d3>tn=N>`6UuH1N1Bu^8VIwTBg?}QQGG-WZx$EaJNsmhI5CWRR004!eWW4 z(25-6Ky_<($Es1s@6n|*5?Av6hd6HQ+Ko6`u8-K$KYYWN`7z1IXY|6JC`v+wyQI3I z$ZGoigyp;VZ9rM#XK+NrP&}DntUZr^0E&Vp;`|{ow8U%@LFeXP2LL)f3FR1cSy{_Y z6|}$f-NC3*Bk^JiPxXr?8^8w4lfE~3jguqjiE2tn>zk4CkBoMcALu{DDdP@^GgWLs zvtgt0I}rTXUot(l7G<_nhqicaNt_~W<62dKSRwI={0Smh-07&v0D2XCHK< z2oGek8f{UE)zH8#r&l{A5-viNm3w@cYxDnM?}X9##8n=YMx7&v_1|F0t85IdZ2hDu z@Y+k2rCk09mY`R`G<;Cxbrw@)TYU1W6UAqyt}lOYAxtq}X!u}mD4rrP%d?4S@*K_= zY4fhGAAw5LRwsu+l>t>=GHtS3cU=~tO{6Ve%@ zN!*i`Vb9#5QPWM+{Q>#91xq;X1&%nQb{|b1V@{}v* zmTWpAR0mU9W0i%im+>IE{FuFT{%)clWvX9RcK$7z!Evypw6h72-=oqWHe~|# z36D}hW+_UZ>ZfL-oj_QhKMJ(D{ab$Ns=cf8<@|y|Q2$j~LXMdC%4__ERvfo%(tiOj zPOH8bUwpNV#wPqEHBl@!w6ID;zx{AOB7hrQYYQzEoH&Ez=$dgtfdO48JN+Rr=c`Ro z#j;6r_Iy8=9sX@6P|dI~QNC5FReI2grS2 zD;+mG)7kXffn1f=2c*tNpm5^~?<7 z)CY3ge`Yn=Ifi7{AvVVeMsC^aiXH67$Gds<2m_}tAKvgJj{tZZy6f!i5*w~(H4vIa zJ3Bx7m2Q*s<0a|iILS4z^!K6bL8D;1&K#c-xF#bvO58Jklp-j{D$l1(;i>XWF}POE z_22Bze}gEWJeV2GzYt|`2QSOJ{vxy5zGnn-uJR%b5G7r5U|uIqVL1i(J?ZoPc>259 zMFXxa=P~@0HpB_4ujl=p8$1xdwagwl^HN|UYyLKTA^97#H^qQ zkCw-cn}hrhgF7I0#{^pbk%`W*VBwH7XU_RwyRVnPJ+;Yc6&&KE;)4fX7yjaO6Xhe7^r|0YjJ7xnk!*436ZExv9Q(#1P4TAUMAv=K4c<9_*7?X6tw-Z*r= z^?kgcV3UuCM0jdtg%DEpLpC{Wh=byneOuW4K#v|Q-ftFfAEXxdLYb=)96!I;^zl}7 zM=9#ub}@lDkz^!yRte`|Da_@K_uMWu;D4gL?++TmoBZ3=n|?E**gF~ejy`Q=c5R4M zVnsH-GB|OsWYEL11ix?T-CqBGd|pGClA`~(9B&kvyLN|ol#nB!{qol)%#*}^-QBtG zh=e*qpQcA(i464%-%I`8*%;_Qu{5+IXC^v!NHb)}^NBJP$dY2h^V)XfXZ(>DNW#?r zZ?kLuam&wXZ1ug*A^dJaqDu{@$k_VhgwXLutNy1Us|51%oDY8-W6x;N4MPyIGe+Gv zHuQ7x{yb3?=euK<%0=W6^^}Zx$sPWw&Db4eviy1>n$7clyB^1a(spDbQmzXB_>!At zxu>W2%Z&hj#zVBmrwXm$Y{zb?dj0n6pY9fFa2 z<{vc1@v~w3`lagDK=Uc^BBUoYV)VPkVj^Su&T*t@RRrZ(q+BJ}%+fMaqg=Tm=rgd4 zoalXkvrlrz%YXD))fXJ`C@j6AaOMp|b2cBc;I&xItdL1g_W-%DX^Zv+jJwl$R*Mn^EHo-z_@oPelH{hCMa45%*n29g7BW+YrKo=t2Ja_X8LRyB0X_1c|M{fdkxl@+y zCuN%(?(<4IWn(K(L=XlkD-Zm)|Kq*8{u8cFT^Ei}v;lDuW#<>0{twplr@4yx+-HD# zgEfA5*%!?MhBeifvH7>4JCZ)E*zlp^rq{>(_J4D-hq@ZUhFzW)s-R8Q(zmp(rj3=w zMHnd0m*qLY?pwZ>sdK7$5w`?X=m^PXd9Yug7HlL(hn=TqMo36VDUO=E(vb`$rZte# zy$6Ob!o=1Vd!7eUJL46z_;;X2l$}+R8bUh1ptQ7&x86-gg%l3lr(KMoen||`;Vf>e zH}||FWOk#D?<87vf3;;1I-G=N22PkN6X@#}U~KtW?FwS@b?|PkrgQbm=AIHZp0Yl1 zNyy$`+$cV-yf|L=2p;qCQ0wiM+3^x&n6#M@p(1N(!bMe7Rvt2@gV9Jxy!yH^dHV$U>Rt~FGS^RzkvCt6w)f)ilehw7bp(Ug|SKAlW;4aLg>SORW+ zwQCGIycIvJ z1ZN+|8pX%5iu+pv*W55E#YSU<#w|(?)4{5M!0!j(g za?*Yt>Xn%5#$6#?h4gu4l-zD)-%tPIL8sZE_rEogUa2m|#B?XH5}x3bUihaT zTkzYEN&pB_-4iDWS(L-H8B{>x_1MbF56N~$gaDG(?fV4hppj=UF=|G_`95Dj8mP4W z<+N(-&^3fLr}o6U^Di0Zg&wQlQ`pp&JX1MEHL$#QY z;X;0JpEa_o@W#)^c-J(hPx#8%uz+U>g1qU|-y;;nKA*>$$^c#)E>X@5b{+JFAnB&n zqSfkod%m%wi!X5uDtUK+OuuW<^ZK7=!2n=jPdh((61R}h_*#pdeEEDx>VSu#EY7q9 zqBhg!Ep#cKCiGc)gJy%y!It0Udqe)ddEdSMa1j+(8133{(wk*j#cv0CMY8Yb0U zvNV@a7}g&Nj4;cUwtoSS4Q^GKI?OTwRM6_O$FVEH1uxc%IV?7xJ{JU^9~{%RxCLo< zKWhBNF7JMy98=}Cr%;l|rH*|gGHl4PtL=@HsTvp_h8;~L-@iMV=gFR;!`+?Aj?t=G z6mUPrJaocTU>L24&g0|(?q?QvOpghKtm~%ghm_fhzTmQ$kC%x^_vXZ1_aN0kM#%0?8xh z1)1)YjOOR(7i>MkJ(CY`pC9kr1eRS1>ajh3kG^<<>MzspUt_&RluTaTVnIWFkcu8{kEw}t3lZC3r3HG$`j(C zj{WI6wfy|}tfPhM1>xYI3l2#4>?d_vxbxs(v@IeHwmTX)#KLAlrMcqG8W>Qq!Yr!8 znx_eFt=n`Ax=oQK?|42sA+CjQEma)%F@ za=86Px3%R1Pb#W#i~R@b&XG=8re!2gihcCB^(9NAFzoW4l6%wM_S?% z1vMA!TzoU$z*p$Pknfs_{7jcw2NdHDxVThA_~ zuFbN=R=5i>$2R>uKTcGbc^(33`c>~7Lz&nXvW3G47noR>eVba*B51M9NRmXg@0~G%GVX^+|U8BH&e~693b$Vv7k^w4jLn z%B}Rvj`x8Ge%+R-mZNn=j9_FVgF3@*tyWPUHg@4>#4NV~_hS8e#&>xETHpEfaSqY< zLX3-^a|PqdZYY#l!9CvGF;(_-YyBl`1hI))jjk^A;6atFwV4Xdsx%f0RwiGgSE^p~$C~G-Ci8UkQxSoUH)^R9nUMRj5<-qfIW9B!KN*QgJ;4= z#zm2~yHMR8}|L-|ju?!Lp@9qxd=u_{0nK71H zx2*Hz5(Pty55l*;y@?#U5=}H3rG$BNFI{&Cen6sr|1l#!s`0qBR*|92PhTQP}apV{F%uwgybm;-3)yQ8%mW9Dk^~-3b%+zyagEIXZSZh z`1trgwW^G2`m-xg*(UZNEb`Bm^|yyp3*}KK*(V34-*(zAm4d^Y`*p@opj92(EX4v6 zsywytAzbGo3q?JKSX_E}R}Rvg);2=74ZjB-KOR4~0yVq=Z3VjvOzWC`F)Ob`3n)ISMYgI;kogc=O`5d#hygi7}83Jqyb7SPp{6WggyW_EXH8L%F z7H{!n*(8wzyvqi0Wj2IV!p}I!5fJ7RLUEEpa6FS`a%RTw-`=7OL7gRA+^E{%zlZeP z+v*By66=PTE~^_-V;%3Q%hDV1pqq+)w(0o;a#-83!eXR zeKm<$?s8W$w^K>v85#7xOmDd;!Csk7AWrKZ{2DPURhQ4t{l%cps{c6pTtidEs zouU`##Ey^8ZhqmR-Yv6&qfVjE(#&bKF+ve}`-Ru<^*i)v;&AWIx&`7|6`W#XiJGy= zrpbzQW8b)FapVVgIXmnV?S+OQ;s!O48hfUW&Tnphew7BD{$|DP|5)Qx=5*cRjdup0 ziDjhAhxHl7O)bjfo3dCt?9r)UA)&>!L$N`pWX{@q`*D%BG~>wC9wbx$H_3Z26S>li zuBz@rEV|~eBu7iV@)Y|AAnLQ67j;YpEBqD~^#WqV!WDGGT zZDQK?^B{xRT+puZ`{E=?GvEuHcZ-Nb)#|s}ITKIIrF|%~YuMFhC5qAg|FC0dW4uFC zQVxSljGR;%aeriITbY{n;v{y+j&%cxshqFA&--2G$<*OX^9&$wISVK{IdKF81Q00{DP_b3cR zYVjwFCrdF=lS`fvx2&x$skhgt#7)ky9Q4u20Z~LYD-QS6HL_G zQ`%tPdhr}%gHC)%2-M|9A*dACWAvCJ?VuVv6$Ya-MZ_aSSWr4xfZJi+B&+5Vntc%T%ICtv&@BfxFEU)4(N6;&7iv|izIgxfaXRb`dWgoONO%t za+Z%-MuQe!?T6?yTl89VtN23@elFQ+R^t8o^-B$8b_`#k8Ee3<0O2wrTE#I-IjcX_ zMm@w#bS-)b&(A&>3#%2jaE2-2pHC0{C5_sqx%r5o4QkZnA3XUj0db#tra(? z7%5{z@n2QUg5f8H^r_&l%0q43Ud&e72ux%q=`IW8DXebQ0{IwR=u#xu2P%R=@gmKY z@Fm46X)%1NC7x*FTvg6${-0%TdOznjp8k+|*#kIP(w8Fg-_OUEGtu0^Tp4vbyMQ{r zMcV{Whhm38;hcRp6U1mX|F_3kt3)#wwAk{l9jvR0zr;Qn@Xfz@|9}V{vN4?X#$j@Y zKV-001I(W6Fox39t1mB)Hbrf~30&ajkm4=IWTzaYr_WYonifXx^f5rd1)|XlHWyGY zM}ktkyrP*VY2kOV*%}V%$Z~xW-r-edHpx8E8tn60lw+*XQ-Z#@na-y86BI zLmq?pRmgVdUTqh+P8w>s!F=@i>}&*)h;O~@>=?XD^+7cXS~&Fpm138w$Jn;qlwAS- zj7{Uk!6D=@70q#;C}tS&DG24#$0NlE@?7O=ynt*@x>i+0?U_J_Uz$45WAPW0Y(4gD8mzrtfz(m7 zj}lS|rcs4HiZyctSJ<~?)$azENT*{`@O0ew5u`8f{s;H%!J^wi2d`LE!*nO^V8{kW zMn*yq5F!kK;7Ft?Ww;DP^@Sfdx4n&lDY0Ct{;YHWbqW!p&@<4BkoP-cL%J-Ei9vJM zj& zcVn=2cZ1t#J^%eOU8q!)kbUpF71vFN@uLtRb_01h5;8Ld(qk$4+3Vxbt z&?}8cukXxU(D9u8_DtEbPBgEJdl_L$@~Tvd2*9qGr3JpIuY*!hB7P&|NLIn(0+_zo z@X(|j@xLv9zFhF*!aXhfZND11e7--5!;AdYh&C^?IfayeX12Dcz#+~+apIWoa`cci zXc!0SRdLHcLy9^?-IEA^+!6zVVPTSCa;4V1*|;chH_y<|z&x3rk4kTVRgq+Q*l&Vd zMt_{K?E~I*KBDpJV$N&{jjtuphP>9i3_2+rzneOh&pbFGE?wh^Jay6R!7v2{rc(o( zSg^_nEYVWmkP!eh!Me>d)s`cY<=dPXJI0UOL4A6ILK}x$eIGAp=AeqMvxH98bcI7z z#yeiawHJJ!pPH%s~KJuNK=C{AEC~?W0fp22azD!BI_;Ept5$w_DY3bFK5BtfYlqk z#Ecj+0+4Nh7;ax!q37h?zamt*$z?9`ao(>;31j;_D18miZzlJ@8W6gQR-vj*Q>V9W z0W)S!$S~pxRof6lgr|$?={YN92q0%VIfcq(RIe+6*F3d^#cc{ z@6thZ7%)HCrE0n%TGu7ZD@{GN$rVbj4m4fgK{ptgTi8b5*s0Zf#jngxigO#LD%)PQ?u&%_}A0J7}w)cIE zxX3voKG;;S5XGuk6p|wS{DY5p$cLXi53#9~!MYJ}!f z6iLwKBj~dXvXHK;Wxe;(+kNKIIkSfLG9A`f2tie3L!6};2}!ejeO(_4lbF2)Qgc(d zp>IE+!{}42dKTAs*mz{0BA1}Te4mM`BN7bO+=xajZ>L;@L0C&Xo(~xHyn3`mt4Z`E z1Do5^^%9-ANh5(*u|5ca<4b7#8 zzsY)bL6@$$jv&Bv@R|FFL5EVnhu@v_tGDbY zBZn0Afw8%zbH!t~>$h+cKc4ujz&%AT&J?fcLTSG0nOM1!&)r<%gfsF0cQwPV9f#Ih zh}{}%fZjvW8h6hhrmnpQi=)l2+c!hmN&gwhbDVkcEjhD~3TGs70^=eYdTOmYI*mb|&<#DI^`~J*AwFi1xXF>Pr{~lh4e_ap#Z~G)Xu-*316}wM zBfm4fDljLK_|lljJw=XI zu6!OMN<$qgtJ&1=!w4v5!HRJ{gCoE+78t+I?2TcEeW%I9O1l5^Q(0Z?UWuA3X?J$0 z72BRl)EUN#aK~>{`Q~kfFhT2V@xqr%XMTM`I4ZK8UTb95$Rukmt`JU1dG)lM3IW2z zfU0N;+x5w@1_3nqx85h(m;Q~%bqZ4pD@{gbk^TAqn*$9ITRt4p`r zd&81p^DkypYS1Qfp&jw%R&$I;qeO?uP~%4esm;K*is3SQc!zT}TZUdKohE1yrDQ<3 zuNRh*({4xTSd)fEw+OFvg%O4xOF1qpJ~}se%GK1ELffk7+X5lgnY=owB*BL-+Rq7G zHlMf!V6h6cLvgQj#bPb}H{V5Vl#07iz73br4Z&hS9q@}Mh^bBkq?=*U!mIRp>nw17 z_)L=$9Vn9N*rlC9xA zd)i*-7~{_5>DU8mGfw*4?)E7jeOHV>CatK?Ab0Ha6+F=M=ka$K7^5A*e?8Pe6OGlK zwP!(e}GMhc}1Ks>&GVSb&&vC zPp^=Lz*_?gQ6kt`RgU$R*(9Xn&BEDfh__$to2;%dwEfS`AA8r%t}eBpIw9;tmv6dy z0ElVMvCVGR`6(QQJom;mU5++f|HM8jPka@KNY!rQ{e$Ht<3F!slHV~-2!>yl-%A4x zLOAH&B99p|o^)Aq)}QWWM6M(7`ku2N`!X&AjG&BksTx5{n>I9U?CMc#q|#ke}zlRxaaC2l+e=e2ujhm~`g) za;TW#X)D|jqA=TndGW$CwWrW*$G{mL!M^YvWP;I*tD^@^q$e-XNp2WdspY1~$c=Ha zBq3LE(Ql^}e2c#`)qu|sf_3DJtTf;3E~LblO_!zUx(ensz}F@Xd~u6+Y|nCWh~B@w zwf}cv!ALuII$vp&U8W_#s41MJCLS9pC8J$H;?jJDdHuvpgu$WFAoUsJ-1#Yw^Q*d} z0Yh1FOPClLjf?Z9*6Axw1xDS=u`J3FTfhE{bhRtRYH`k`ms z6$oCm3o0d&f1rT2_2qhuM&f8I@&7(Bz>V;6pkhn#HeR=&afl)=+IJOTipST@4_ouypTEsYMT$3D zzM59bWIsYcj=evu0!v5L)Jp-$q`} zp8b#TcG&bf6xf*n;#dVXz@PS>bYOBxeqe0As?3w#VEikgo_<9qwhQ;eV$k)W^Bbxo}wLE0qtarc()zaY1M0rJwy KQnf&n(EkHdBM+Pa literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/Icons/SimRunIco.xpm b/src/Mod/Ship/Icons/SimRunIco.xpm new file mode 100644 index 000000000..44cd8b4ab --- /dev/null +++ b/src/Mod/Ship/Icons/SimRunIco.xpm @@ -0,0 +1,2723 @@ +/* XPM */ +static char * SimRunIco_xpm[] = { +"128 128 2592 2", +" c None", +". c #7B7B7B", +"+ c #EAEAEA", +"@ c #E9EAE9", +"# c #E9E9E9", +"$ c #E9E9E8", +"% c #D9D9D9", +"& c #EAEAE9", +"* c #E8E9E8", +"= c #E9E8E8", +"- c #E8E8E8", +"; c #E8E8E7", +"> c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #0A0505", +"W) c #B6ACAE", +"X) c #B5ACAD", +"Y) c #A19999", +"Z) c #666666", +"`) c #9F9F9F", +" ! c #C4C3C4", +".! c #C2C2C3", +"+! c #C0C0BF", +"@! c #BCBBBB", +"#! c #909191", +"$! c #141516", +"%! c #121211", +"&! c #0F0E0F", +"*! c #090908", +"=! c #070606", +"-! c #050605", +";! c #020101", +">! c #5E2E2E", +",! c #E46A66", +"'! c #E36B64", +")! c #C77878", +"!! c #9F9B9B", +"~! c #4D4E4D", +"{! c #929292", +"]! c #C2C3C2", +"^! c #C1C2C2", +"/! c #C2C1C2", +"(! c #0B0C0B", +"_! c #030202", +":! c #000100", +"~ c #B0AFAF", +",~ c #B1B0B0", +"'~ c #ACADAC", +")~ c #AAABAB", +"!~ c #A8A7A8", +"~~ c #8C8C8C", +"{~ c #B9B8B8", +"]~ c #8D8D8D", +"^~ c #8F7B7C", +"/~ c #DB7066", +"(~ c #EB7A30", +"_~ c #E87448", +":~ c #9B5050", +"<~ c #211314", +"[~ c #050303", +"}~ c #2C1B1B", +"|~ c #5D3232", +"1~ c #964A49", +"2~ c #BA5351", +"3~ c #E26557", +"4~ c #E96D58", +"5~ c #F08B4C", +"6~ c #F89744", +"7~ c #EE7257", +"8~ c #EA6A5C", +"9~ c #F16358", +"0~ c #E9615F", +"a~ c #E36565", +"b~ c #F36656", +"c~ c #F59C60", +"d~ c #F35B4F", +"e~ c #999898", +"f~ c #A3A2A3", +"g~ c #ACACAD", +"h~ c #A4A4A3", +"i~ c #A1A0A0", +"j~ c #9E9D9D", +"k~ c #CC9D9C", +"l~ c #EC725C", +"m~ c #EE7D29", +"n~ c #EA7352", +"o~ c #C96967", +"p~ c #AA5654", +"q~ c #D9625C", +"r~ c #E67059", +"s~ c #EB7C4F", +"t~ c #ED8449", +"u~ c #F7923A", +"v~ c #FA953A", +"w~ c #FF9C3B", +"x~ c #FF9E3F", +"y~ c #FB9C46", +"z~ c #FB9E4A", +"A~ c #F69A55", +"B~ c #F08C5D", +"C~ c #F07C5E", +"D~ c #F1685A", +"E~ c #EF5B58", +"F~ c #E75F5D", +"G~ c #F15551", +"H~ c #F18A63", +"I~ c #F18562", +"J~ c #EA5653", +"K~ c #AEAEAF", +"L~ c #8F8F8F", +"M~ c #A9A9AA", +"N~ c #A3A2A2", +"O~ c #AEAFAF", +"P~ c #B9B1B1", +"Q~ c #DF8886", +"R~ c #EA7C3F", +"S~ c #F7841B", +"T~ c #EC7F39", +"U~ c #EC803E", +"V~ c #EF853B", +"W~ c #FB8D25", +"X~ c #FF9227", +"Y~ c #FF952D", +"Z~ c #FF9731", +"`~ c #FF9A37", +" { c #FF9D3D", +".{ c #FF9F41", +"+{ c #FFA145", +"@{ c #FFA44B", +"#{ c #FFA64F", +"${ c #FFA955", +"%{ c #FEA956", +"&{ c #FBA85F", +"*{ c #F29666", +"={ c #F29469", +"-{ c #F39768", +";{ c #FCAE69", +">{ c #F16F5E", +",{ c #BABAB9", +"'{ c #B2B2B3", +"){ c #B1B3B2", +"!{ c #B1B2B1", +"~{ c #ADACAB", +"{{ c #AAA9AA", +"]{ c #888988", +"^{ c #9E9D9E", +"/{ c #A0A0A1", +"({ c #A4A3A3", +"_{ c #A7A8A8", +":{ c #494747", +"<{ c #A16766", +"[{ c #E97A4A", +"}{ c #FF860F", +"|{ c #FF8915", +"1{ c #FF8B19", +"2{ c #FF8E1F", +"3{ c #FF9125", +"4{ c #FF9329", +"5{ c #FF962F", +"6{ c #FF9833", +"7{ c #FF9B39", +"8{ c #FFA043", +"9{ c #FFA247", +"0{ c #FFA751", +"a{ c #FFAA57", +"b{ c #FFAC5B", +"c{ c #FFAE5F", +"d{ c #FFB063", +"e{ c #FFB369", +"f{ c #FFB46B", +"g{ c #FDB26D", +"h{ c #F36F5F", +"i{ c #B3B4B3", +"j{ c #7D7C7C", +"k{ c #989898", +"l{ c #AEADAD", +"m{ c #ADACAD", +"n{ c #ACABAC", +"o{ c #9C9D9D", +"p{ c #7F7F7E", +"q{ c #565756", +"r{ c #989998", +"s{ c #A0A1A0", +"t{ c #A4A3A4", +"u{ c #4F4A4A", +"v{ c #9D6B6B", +"w{ c #E0756A", +"x{ c #EB7F3D", +"y{ c #FFA349", +"z{ c #FFA54D", +"A{ c #FFA853", +"B{ c #FFAB59", +"C{ c #FFAD5D", +"D{ c #FFAF61", +"E{ c #FFB267", +"F{ c #FFB66F", +"G{ c #FDB571", +"H{ c #F3836A", +"I{ c #DC5B57", +"J{ c #BA5C5C", +"K{ c #B6B7B7", +"L{ c #787877", +"M{ c #757676", +"N{ c #747474", +"O{ c #8C8D8C", +"P{ c #9D9C9D", +"Q{ c #A8A8A7", +"R{ c #545353", +"S{ c #989797", +"T{ c #9F9F9E", +"U{ c #A0A1A1", +"V{ c #8C8C8B", +"W{ c #706F70", +"X{ c #484646", +"Y{ c #9F6A6A", +"Z{ c #E9785E", +"`{ c #EC7D30", +" ] c #FE830B", +".] c #FF8711", +"+] c #FF8C1B", +"@] c #FF8F21", +"#] c #FA9231", +"$] c #F38F40", +"%] c #EE894F", +"&] c #ED8458", +"*] c #EE815B", +"=] c #EE815C", +"-] c #EE855E", +";] c #EF8D5D", +">] c #F4995D", +",] c #FAA45A", +"'] c #FEAC5C", +")] c #FFB56D", +"!] c #FFB771", +"~] c #FFB975", +"{] c #FCB677", +"]] c #F39572", +"^] c #E76158", +"/] c #8B5252", +"(] c #464343", +"_] c #B4B5B5", +":] c #777677", +"<] c #727172", +"[] c #6B6C6C", +"}] c #80807F", +"|] c #919090", +"1] c #9E9E9F", +"2] c #A4A5A4", +"3] c #A6A7A6", +"4] c #898888", +"5] c #6E6E6D", +"6] c #5F5F60", +"7] c #797A7A", +"8] c #7E7F7F", +"9] c #777777", +"0] c #616060", +"a] c #7F6464", +"b] c #A67373", +"c] c #6B5959", +"d] c #4E4A4A", +"e] c #A06C6C", +"f] c #E8795F", +"g] c #F07E20", +"h] c #FF8207", +"i] c #FF840B", +"j] c #FE8B1B", +"k] c #F68B2C", +"l] c #EC834B", +"m] c #EB775D", +"n] c #E16F65", +"o] c #C86B67", +"p] c #AD6463", +"q] c #9C605F", +"r] c #995E5D", +"s] c #A7605E", +"t] c #C0625F", +"u] c #DC6660", +"v] c #ED7363", +"w] c #EF8968", +"x] c #F6A268", +"y] c #FEB166", +"z] c #FFB873", +"A] c #FFBA77", +"B] c #FFBB79", +"C] c #F39870", +"D] c #E65F57", +"E] c #875252", +"F] c #424040", +"G] c #866263", +"H] c #A55757", +"I] c #767777", +"J] c #767675", +"K] c #717171", +"L] c #6E6E6F", +"M] c #6C6D6D", +"N] c #6A6969", +"O] c #676767", +"P] c #656665", +"Q] c #676766", +"R] c #727373", +"S] c #5C5C5B", +"T] c #6A6A6B", +"U] c #7B7A7B", +"V] c #626262", +"W] c #534D4D", +"X] c #C37F7E", +"Y] c #E67E6E", +"Z] c #CB7C78", +"`] c #886767", +" ^ c #5F5353", +".^ c #8C6767", +"+^ c #E87A68", +"@^ c #EB7B21", +"#^ c #FE7E00", +"$^ c #FB881A", +"%^ c #EC8345", +"&^ c #EA7761", +"*^ c #C76F6B", +"=^ c #926363", +"-^ c #685252", +";^ c #524A4A", +">^ c #494646", +",^ c #484545", +"'^ c #4E4848", +")^ c #5F4E4E", +"!^ c #835757", +"~^ c #B85F5D", +"{^ c #E86E63", +"]^ c #F18C6B", +"^^ c #F9AC6D", +"/^ c #FEB670", +"(^ c #FEB56E", +"_^ c #F2956C", +":^ c #E86259", +"<^ c #B46261", +"[^ c #B06261", +"}^ c #E15450", +"|^ c #F34C49", +"1^ c #B1B1B2", +"2^ c #777676", +"3^ c #747575", +"4^ c #717271", +"5^ c #6D6E6D", +"6^ c #6B6B6A", +"7^ c #686767", +"8^ c #646363", +"9^ c #5D5D5C", +"0^ c #777776", +"a^ c #878788", +"b^ c #969596", +"c^ c #9A9898", +"d^ c #9A9A99", +"e^ c #646463", +"f^ c #7B7C7C", +"g^ c #7B7C7B", +"h^ c #707170", +"i^ c #575756", +"j^ c #7E6464", +"k^ c #E68379", +"l^ c #D27438", +"m^ c #D6763F", +"n^ c #E27D68", +"o^ c #DB7D71", +"p^ c #E07E6F", +"q^ c #E47B42", +"r^ c #F77B00", +"s^ c #FF8105", +"t^ c #F58522", +"u^ c #E97D54", +"v^ c #D4736B", +"w^ c #906363", +"x^ c #5A4E4E", +"y^ c #504848", +"z^ c #7C5555", +"A^ c #C15F5D", +"B^ c #F07865", +"C^ c #F5A472", +"D^ c #F39868", +"E^ c #F08060", +"F^ c #F07E5D", +"G^ c #F08A5C", +"H^ c #F36251", +"I^ c #E35656", +"J^ c #B0B0B1", +"K^ c #ABACAB", +"L^ c #787777", +"M^ c #717170", +"N^ c #696869", +"O^ c #666565", +"P^ c #646465", +"Q^ c #636363", +"R^ c #605F5F", +"S^ c #575758", +"T^ c #8B8A8B", +"U^ c #949393", +"V^ c #665858", +"W^ c #AA7979", +"X^ c #DC8378", +"Y^ c #D77848", +"Z^ c #DB741F", +"`^ c #E27513", +" / c #E87813", +"./ c #F37901", +"+/ c #FA7C00", +"@/ c #F4811C", +"#/ c #E87D5C", +"$/ c #BC716E", +"%/ c #6E5858", +"&/ c #5C4D4D", +"*/ c #A15B5B", +"=/ c #EB7265", +"-/ c #F49D6F", +";/ c #FEB36A", +">/ c #FFB165", +",/ c #FEAA5A", +"'/ c #F07A5A", +")/ c #EE5350", +"!/ c #A5A4A4", +"~/ c #969797", +"{/ c #787778", +"]/ c #636364", +"^/ c #606161", +"// c #5D5C5C", +"(/ c #585958", +"_/ c #5C5C5D", +":/ c #868787", +"( c #946565", +",( c #EC7262", +"'( c #F8A25A", +")( c #FDA24C", +"!( c #EF6C56", +"~( c #DB6868", +"{( c #7C7D7C", +"]( c #9B9A9A", +"^( c #666667", +"/( c #818182", +"(( c #7D7E7D", +"_( c #757475", +":( c #635757", +"<( c #DA8882", +"[( c #D7752B", +"}( c #EA7400", +"|( c #E57A22", +"1( c #E18173", +"2( c #735D5D", +"3( c #6B5D5D", +"4( c #CF6663", +"5( c #EF8D5F", +"6( c #FEA54F", +"7( c #EE8357", +"8( c #E65E5B", +"9( c #707171", +"0( c #807F80", +"a( c #8E8E8F", +"b( c #979696", +"c( c #959594", +"d( c #686869", +"e( c #7F8080", +"f( c #7E7E7F", +"g( c #7C7D7D", +"h( c #737374", +"i( c #DC8878", +"j( c #DA6F0A", +"k( c #E47100", +"l( c #E87300", +"m( c #E07E45", +"n( c #C07C79", +"o( c #514C4C", +"p( c #4C4E4E", +"q( c #535453", +"r( c #A16665", +"s( c #ED7961", +"t( c #FCA14B", +"u( c #F3924D", +"v( c #EB625C", +"w( c #747473", +"x( c #838384", +"y( c #908F90", +"z( c #919192", +"A( c #7D7C7D", +"B( c #818282", +"C( c #808081", +"D( c #7F7F80", +"E( c #9D7978", +"F( c #D98162", +"G( c #DB6F07", +"H( c #E27000", +"I( c #E87506", +"J( c #E0815F", +"K( c #976E6E", +"L( c #7F6162", +"M( c #E96C5F", +"N( c #F79A4D", +"O( c #F89642", +"P( c #F16454", +"Q( c #828181", +"R( c #5A595A", +"S( c #676667", +"T( c #8A8A8A", +"U( c #7A7A7B", +"V( c #7B7777", +"W( c #827B7B", +"X( c #7A7272", +"Y( c #726B6B", +"Z( c #6F6565", +"`( c #BB8887", +" _ c #D17A45", +"._ c #DA6C00", +"+_ c #E06F00", +"@_ c #E2740E", +"#_ c #DE8470", +"$_ c #7A6363", +"%_ c #695B5C", +"&_ c #D86A63", +"*_ c #F29351", +"=_ c #FE9937", +"-_ c #ED7253", +";_ c #E16A6A", +">_ c #9E9E9D", +",_ c #838282", +"'_ c #767576", +")_ c #868585", +"!_ c #797A79", +"~_ c #777778", +"{_ c #737273", +"]_ c #A08A8A", +"^_ c #E19C98", +"/_ c #DA948B", +"(_ c #DC9288", +"__ c #DF8A78", +":_ c #CE7229", +"<_ c #DE6E00", +"[_ c #DD7314", +"}_ c #DB8678", +"|_ c #645757", +"1_ c #5E5656", +"2_ c #CB6966", +"3_ c #F08D50", +"4_ c #FF9935", +"5_ c #FE9733", +"6_ c #ED7F4C", +"7_ c #EE6657", +"8_ c #EE6357", +"9_ c #EE5E54", +"0_ c #E56464", +"a_ c #7F7E7F", +"b_ c #989897", +"c_ c #9C9D9C", +"d_ c #A58E8E", +"e_ c #D2866E", +"f_ c #BC661B", +"g_ c #BF6719", +"h_ c #C36819", +"i_ c #C86B18", +"j_ c #D26800", +"k_ c #D66A00", +"l_ c #DC6D00", +"m_ c #DB7316", +"n_ c #DC8B80", +"o_ c #746A6A", +"p_ c #4D4F4E", +"q_ c #585454", +"r_ c #C46865", +"s_ c #EF894E", +"t_ c #FE932B", +"u_ c #F58B36", +"v_ c #F58A34", +"w_ c #EC7845", +"x_ c #E8615E", +"y_ c #9C9B9C", +"z_ c #9B9B9A", +"A_ c #A48E8E", +"B_ c #E59891", +"C_ c #D78B78", +"D_ c #D88A76", +"E_ c #D88975", +"F_ c #D48465", +"G_ c #CB6D1B", +"H_ c #D46900", +"I_ c #DB7315", +"J_ c #DD8C80", +"K_ c #887C7C", +"L_ c #5A5453", +"M_ c #C86A66", +"N_ c #EF894A", +"O_ c #FF942B", +"P_ c #EE8342", +"Q_ c #EC6D51", +"R_ c #ED6A52", +"S_ c #EF614F", +"T_ c #E76363", +"U_ c #838483", +"V_ c #8D8D8C", +"W_ c #959696", +"X_ c #959795", +"Y_ c #757574", +"Z_ c #656666", +"`_ c #7D7E7E", +" : c #737372", +".: c #807A7A", +"+: c #978787", +"@: c #978686", +"#: c #988787", +"$: c #CF9A99", +"%: c #CB7845", +"&: c #D86B00", +"*: c #D87111", +"=: c #DE8B79", +"-: c #958282", +";: c #625656", +">: c #D46D66", +",: c #F08A43", +"': c #FE9127", +"): c #EC7250", +"!: c #E66F6F", +"~: c #747374", +"{: c #979796", +"]: c #939392", +"^: c #7D7D7E", +"/: c #777878", +"(: c #747373", +"_: c #C09695", +":: c #CD7C4F", +"<: c #D06700", +"[: c #D76D08", +"}: c #DC866A", +"|: c #A98A8A", +"1: c #735B5B", +"2: c #E46E62", +"3: c #F48C37", +"4: c #FF9023", +"5: c #FE8E21", +"6: c #EC7152", +"7: c #7A7B7B", +"8: c #929393", +"9: c #666566", +"0: c #7C7C7B", +"a: c #AB9191", +"b: c #D98B73", +"c: c #C9670B", +"d: c #D96C00", +"e: c #D67F50", +"f: c #C69291", +"g: c #787575", +"h: c #926464", +"i: c #EA775D", +"j: c #FB8D26", +"k: c #F2872F", +"l: c #EE695B", +"m: c #7A7B7A", +"n: c #929293", +"o: c #898A8A", +"p: c #666665", +"q: c #8E8282", +"r: c #DD9486", +"s: c #C7670E", +"t: c #CE6600", +"u: c #D0742B", +"v: c #DD928A", +"w: c #8D8080", +"x: c #564F4F", +"y: c #BF6D6B", +"z: c #EA7F4B", +"A: c #FE8C1D", +"B: c #EF8233", +"C: c #EA6C64", +"D: c #898988", +"E: c #787879", +"F: c #797978", +"G: c #757675", +"H: c #827C7C", +"I: c #D99D9A", +"J: c #C5733A", +"K: c #CC6500", +"L: c #D46D0A", +"M: c #DB876B", +"N: c #B69090", +"O: c #816060", +"P: c #E57464", +"Q: c #F3872D", +"R: c #FF8A17", +"S: c #E97747", +"T: c #E57373", +"U: c #89898A", +"V: c #858685", +"W: c #848384", +"X: c #808180", +"Y: c #757576", +"Z: c #747475", +"`: c #C29796", +" < c #C67741", +".< c #CA6400", +"+< c #D56A00", +"@< c #CF7737", +"#< c #DA948C", +"$< c #928282", +"%< c #584F4F", +"&< c #BD706E", +"*< c #E97C4D", +"=< c #FD8715", +"-< c #FF8813", +";< c #F8851B", +">< c #ED6C56", +",< c #838382", +"'< c #747576", +")< c #737473", +"!< c #BE9393", +"~< c #C47641", +"{< c #C66200", +"]< c #D26A05", +"^< c #D7825E", +"/< c #C69493", +"(< c #837B7B", +"_< c #4A4646", +":< c #976566", +"<< c #E8785F", +"[< c #F58320", +"}< c #FF850D", +"|< c #F27F20", +"1< c #DB6C64", +"2< c #79797A", +"3< c #7A7A79", +"4< c #767776", +"5< c #968989", +"6< c #D69F9C", +"7< c #BE723B", +"8< c #C26000", +"9< c #CE6F1A", +"0< c #DB8A73", +"a< c #B69191", +"b< c #555050", +"c< c #836161", +"d< c #DF7768", +"e< c #EC7E32", +"f< c #FF8309", +"g< c #F27E1D", +"h< c #EB7267", +"i< c #6B6A6A", +"j< c #747574", +"k< c #8C8383", +"l< c #BF9F9E", +"m< c #DA9F98", +"n< c #C88261", +"o< c #B85F0C", +"p< c #BD5F04", +"q< c #C16104", +"r< c #C86300", +"s< c #D16800", +"t< c #CD732C", +"u< c #DE8E7A", +"v< c #A78080", +"w< c #5D5454", +"x< c #4E4949", +"y< c #DA7A6E", +"z< c #E97D3F", +"A< c #FD8007", +"B< c #FF8003", +"C< c #FF7F01", +"D< c #F97E0A", +"E< c #E8714E", +"F< c #ED716A", +"G< c #E57E7E", +"H< c #7D7979", +"I< c #CBA6A6", +"J< c #D59482", +"K< c #B36A31", +"L< c #B66B32", +"M< c #CC8667", +"N< c #D68F7B", +"O< c #CE8462", +"P< c #C16511", +"Q< c #CD732A", +"R< c #DB8A70", +"S< c #BF8A87", +"T< c #7B6767", +"U< c #4C4A4A", +"V< c #474545", +"W< c #695959", +"X< c #A77272", +"Y< c #E37B67", +"Z< c #E77D39", +"`< c #FA7C02", +" [ c #F17B16", +".[ c #E9792D", +"+[ c #E8782C", +"@[ c #E97821", +"#[ c #E3723C", +"$[ c #F56A66", +"%[ c #B69C9C", +"&[ c #DA9A8C", +"*[ c #CD8D76", +"=[ c #E0A39D", +"-[ c #BB9D9D", +";[ c #A28F8F", +">[ c #CA9F9E", +",[ c #CC825F", +"'[ c #C26103", +")[ c #CF6D15", +"![ c #D48159", +"~[ c #DC8F83", +"{[ c #AC7F7F", +"][ c #554F4F", +"^[ c #4F4B4B", +"/[ c #6D5B5B", +"([ c #9B7070", +"_[ c #D67F78", +":[ c #E57E5B", +"<[ c #EA7B23", +"[[ c #EF790D", +"}[ c #E9775A", +"|[ c #EB7C78", +"1[ c #EF7366", +"2[ c #EC6E5B", +"3[ c #EA7C7B", +"4[ c #847F7F", +"5[ c #D1A9A9", +"6[ c #BC9D9D", +"7[ c #948888", +"8[ c #767575", +"9[ c #978A8A", +"0[ c #DD9D94", +"a[ c #C37642", +"b[ c #C16000", +"c[ c #D26902", +"d[ c #CE722A", +"e[ c #D5825D", +"f[ c #DF8C7E", +"g[ c #C98A87", +"h[ c #A97D7C", +"i[ c #8D7070", +"j[ c #7C6767", +"k[ c #7B6565", +"l[ c #876B6B", +"m[ c #A27776", +"n[ c #C07E7C", +"o[ c #DE8479", +"p[ c #E27F5F", +"q[ c #DF7A36", +"r[ c #ED7808", +"s[ c #F07802", +"t[ c #E37846", +"u[ c #EC817C", +"v[ c #EA8181", +"w[ c #817D7D", +"x[ c #A59191", +"y[ c #DB9B91", +"z[ c #C17543", +"A[ c #C36100", +"B[ c #D36B05", +"C[ c #D06F1A", +"D[ c #D1783B", +"E[ c #D47E55", +"F[ c #DA8467", +"G[ c #DD856D", +"H[ c #DD846D", +"I[ c #DC8367", +"J[ c #DA7F58", +"K[ c #DA7B41", +"L[ c #DD7622", +"M[ c #E67407", +"N[ c #EB7500", +"O[ c #EC7602", +"P[ c #DF7747", +"Q[ c #EC827B", +"R[ c #A59090", +"S[ c #DC9B91", +"T[ c #C87E57", +"U[ c #C0640F", +"V[ c #D66B02", +"W[ c #D76C04", +"X[ c #D96E05", +"Y[ c #DB6E05", +"Z[ c #DD6F04", +"`[ c #E07003", +" } c #E37100", +".} c #DE751E", +"+} c #E27A53", +"@} c #EA847E", +"#} c #A08D8D", +"$} c #D8A2A0", +"%} c #C47A4E", +"&} c #C46100", +"*} c #DC7216", +"=} c #E57D66", +"-} c #EB8E8D", +";} c #B39696", +">} c #C77F5B", +",} c #BE5E00", +"'} c #C05F00", +")} c #D5732B", +"!} c #EC8D87", +"~} c #7A7878", +"{} c #CDA2A1", +"]} c #C17A51", +"^} c #B96B2F", +"/} c #CA8261", +"(} c #CD8466", +"_} c #C87B4F", +":} c #C16C25", +"<} c #C36204", +"[} c #C76301", +"}} c #D36900", +"|} c #D56A01", +"1} c #D26C0C", +"2} c #D0722B", +"3} c #D67A50", +"4} c #D97C58", +"5} c #D3753B", +"6} c #D2712A", +"7} c #EC8881", +"8} c #A59292", +"9} c #DA9C91", +"0} c #B3672B", +"a} c #D18D76", +"b} c #B68F8F", +"c} c #947C7C", +"d} c #BD9090", +"e} c #D6958E", +"f} c #D88C77", +"g} c #CF8260", +"h} c #C57237", +"i} c #C46D26", +"j} c #C86402", +"k} c #C86C1D", +"l} c #CB7027", +"m} c #CD7640", +"n} c #D78060", +"o} c #E18673", +"p} c #EA9189", +"q} c #F09F9F", +"r} c #EC9F9F", +"s} c #E98B82", +"t} c #CF7238", +"u} c #D47750", +"v} c #EB9290", +"w} c #635B5B", +"x} c #D0A19D", +"y} c #B8754C", +"z} c #BE7C58", +"A} c #CFA19F", +"B} c #655E5E", +"C} c #555151", +"D} c #F1B2B2", +"E} c #ECA39E", +"F} c #EA9B93", +"G} c #C5743F", +"H} c #C36B21", +"I} c #E48F80", +"J} c #EB9B96", +"K} c #EEA7A7", +"L} c #DC7E66", +"M} c #C96C25", +"N} c #E88276", +"O} c #AC9393", +"P} c #EFB2B1", +"Q} c #CB8C74", +"R} c #DB9D93", +"S} c #867474", +"T} c #ECAEAE", +"U} c #CA7C57", +"V} c #C06D2F", +"W} c #EBA19D", +"X} c #EE908D", +"Y} c #DD7E6A", +"Z} c #EF8984", +"`} c #F0BDBC", +" | c #F6C1C1", +".| c #ECB0B0", +"+| c #C87C58", +"@| c #BD6C2F", +"#| c #EBA29E", +"$| c #EE9D9D", +"%| c #ECB4B4", +"&| c #C57B58", +"*| c #B86A30", +"=| c #EBA4A0", +"-| c #EEB5B5", +";| c #D58B77", +">| c #C77E61", +",| c #EEA8A5", +"'| c #EDB2B1", +")| c #EFB0AF", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)V)W)X)Y)/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)>!,!'!)!!! ", +" o+I.4.m%[+ +=$G#|.~!|.k.M&|.F.k.<+~!(@G.H.4._#_#I.n.:#o+C+.+++2+P.{!/#/#/#/#/#B#R*i*y*D*{ E$]!(%^!/!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;(!-,%)Q)r'r'-'6'=)w).)()_!g):!z)z)z)>,>,w!S)=)x!y!z!A!B!8)C!z)z)z)z)z)D!E!F!G!1! H! ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#I!J!K!L!E*j*M!3*N!(&{ | =&x*[=O!/#/#/#P!Z&Z&Z&c%c%e F>Q!,,R!p$3@@%%*S!T!U!V!W!;!z)z)z)X!Y!Z!`! ~.~+~@~ #~$~%~&~ ", +" P./=*~=~G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=-~9&;~7.2*>~,~(&j*'~)~!~x*Q*!=/#/#/#/#/#/#~~P.9!c>e ,,M,{~C&;'T.]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~ b~c~d~ ", +" P.G%[;o*K!e~~~=~M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.~~/#/#/#M%f~x*=&7.E*2*{ g~| y*^&h~i~j~/#/#/#/#/#/#1*P.P.P.P.P.{~;'9*8*8*9@_)k~l~m~n~o~p~q~r~s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~J~ ", +" P.c%E+E+E++)4*K~;~B#L~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.L~/#!=_&R*i*V*E&7.| 7.M~-+x*N~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.O~+)E+6*P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{@{#{${%{&{*{={-{;{>{ ", +" P.,{p)3*R*/&'{){!{,~j*~{{{J!]{Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)^{/{({x*i*T*_{-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.:{<{[{}{|{1{2{3{4{5{6{7{ {8{9{@{0{a{b{c{d{e{f{g{h{ ", +" P.{~i{o*%@!*j{;*k{T*j*{ l{m{n{| E*o{p{a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.q{-*} r{s{R*t{9&]&({J!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.u{v{w{x{}{|{1{2{3{4{5{6{7{x~8{y{z{A{B{C{D{E{f{F{G{H{I{J{ ", +" P.K{l*(&!*}-L{0*M{N{=~[-O{P{=&E&=&=&=&y*Q{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$R{s !*. a)]~S{T{U{U{/#/#e*1*/#e*V{. W{K.P.P.P.P.P.P.P.X{P.P.P.P.u{Y{Z{`{ ].]|{+]@]3{#]$]%]&]*]=]-];]>],]']d{E{)]!]~]{]]]^]/](]O. ", +" P._]/&/&}-*+:]F=F==~<]5.V&S.[]-*}]|]1]9&R*R*2]3]`)4]5]s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 6]}*i&V&N{7]8]N):&[*D+9]Z)0]) P+J.P.P.O.P.P.P.Q.a]b]c]P.P.d]e]f]g]h]i].]|{j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y])]z]A]B]A]C]D]E]F]0 G]H] ", +" P.i{K~K~*+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]R]S&M)T{^{T{I!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M S]! Z)T]5.M{U][-9]-*S.)*V]0 ..F#M&Y$o+P.P.P.P.P.W]X]Y]Z]`] ^.^+^@^#^h]i]}{$^%^&^*^=^-^;^>^r+P.,^'^)^!^~^{^]^^^/^~]~]z](^_^:^<^[^}^|^ ", +" P.1^2*g~2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^Q 0^a^b^e~c^d^e~|%. S.e^v I.a+$+#+Q.P.P.P.P.P.P.P.p.K]0^f^g^0*h^p.Z)1=a i^*.P.P.P.P.P.P.P.P.j^k^l^m^n^o^p^q^r^#^s^i]t^u^v^w^x^r+P.P.P.P.P.P.P.P.P.y^z^A^B^C^(^!]F{)]e{D^E^F^G^H^I^ ", +" P.J^K^| !@L^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M :.N^. T^E@U^U^L~>)}-K]Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.V^W^X^Y^Z^`^ /./+/#^s^@/#/$/%/++P.P.P.P.P.P.P.P.P.P.P.P.Q.&/*/=/-/;/f{e{>/D{C{,/'/)/ ", +" P.j*7.M~A*A*!/~/U&{/w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.7@_/b!D+|%]~~~://D{c{b{d/e/ ", +" P.f/g/L!e*!/=&T.V*V*x*h/;*9]i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#}.k/<]l/m/>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.n/o/p/3/q/5/r/s/t/u/P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.v/w/x/y/c{C{b{a{z/A/ ", +" P.q!-+-+%@!*B/!@C/!=x*x*c+({Q*e*D/*+E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+F/S&G/:&H/=*I/L{< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J/K/L/M/q/N/O/P/Q/Q.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I R/S/T/U/B{${A{V/W/ ", +" P.7.i*X/!*}-L{0*M{N{-*. x&,.`)_&s{Y/O!e*Z/}-E/c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)`/D+ (.(. 7]*++(9]-*@(g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.#($(%(M/&(*(=(-(;(P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K q >(,('(A{0{#{)(!(~( ", +" P.=&]&]&}-*+:]F=F==~<]5.V&S.[]5.{(Z//=/#X*](e*s%V{!*^(v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&/(:&p{((f^I/p=*+0^0*_(=~N{F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.:(<([(%(}(3/|(1(2(P.P.P.P.P.P.P.P.P.P.P.P.3.[.[.O+%$P N M v t 3(4(5(6(z{@{9{7(8( ", +" P.3]Q*Q**+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]9(0(a(k{/=b(6.c(~~b%d(M [+4.Q@C+p+2+P.P.P.P.a)[*e(f(g(b%!*}-*+0^F=h(-*-*-*=~N{F=F=< 9 &.3.n.p+P.Q.P.P.P.R/i(j(k(l(3/m(n(o(P.P.P.P.P.P.P.P.P.P.Y$k.2.p(}.=%`.g.q(N M v e.r(s(t(y{9{8{u(v( ", +" P.c+_&_&2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^O^w(x(y(z(#!&@L~|%A(.*N 0%P.P.P.P.P.B(C(D(f([-. !*}-L^-&F==~-*-*-*-*-*-*-*=~N{F=-*.*0 P }.I.O.r+E(F(G(H(%(I(J(K(o%P.P.P.P.P.P.P.O.p+_#-%R+4.2.k.m+[.O+&.%.O N ^+L(M(N(8{8{x~O(P( ", +" P.R*I!`)Q(2^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M R(S(L^!@]~~~|%T(x&N)< ..n.P.G/:&D+N)b%U(7]+(9]0*N{=~-*-*-*-*-*-*-*-*-*-*-*=~N{V(W(X(Y(Z(`( _._+_k(@_#_$_P.P.P.P.P.P.O.R@1+++_*M.:#J.4.3.~!>.i.`.&.g.#.N %_&_*_x~ {w~=_-_;_ ", +" P.[=!=>_!=!=d^L~,_'_w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.}.{+< [ ~ :/)_O'S&[-`/D(N)[-%@!*!_~_0*F=N{{_-*-*-*-*-*-*-*-*-*-*-*-*-*]_^_/_(_(___:_._<_H([_}_|_#+Q.P.P.O.O.O.p+P.P.n%p+M.K.I.4.2!2.}.-.<.O+g.P 1_2_3_7{7{4_5_6_7_8_9_0_ ", +" P.a_U^b_d^c_P{X*X*X*](,#S&F=i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B(:&D+N).(. !**+9]0*F==~}=-*-*-*-*-*-*-*-*-*-*-*-*-*d_e_f_g_h_i_j_k_l_+_m_n_o_&.M.$+P.P.O.P.P.P.P.P.q+p+M.Q@I.n+<%M&p_}.[.`.&.q_r_s_4_6{Z~5{t_u_v_w_x_ ", +" P.8+v+1.Z)D+~~,#/=1*y_z_e*s%s%,#O'F=E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+p{[-. !*v&*+I]F=N{=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*A_B_C_D_E_F_G_H_._<_I_J_K_w*< .*o+P.P.P.P.P.P.P.P.O.R@S+o+n.f@r$G.~!}.[.`.L_M_N_Z~5{Y~O_P_Q_R_S_T_ ", +" P.#+8+9+#+_+w b%U_V_=+e*s%k{~/W_X_{!!@Y_Z_c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+`_.(. !*v&L^0*F=N{ :-*-*-*-*-*-*-*-*-*-*-*-*-*-*.:+:@:@:#:$:%:j_&:l_*:=:-:-*-*F=n.P.P.P.P.P.P.P.P.P.q+F$M.L.Q@}+-$3.1.k.}.;:>:,:O_O_4{':):!: ", +" Q.a+ v+p+M Z)~: (|%=+:={:,.]:]:{!,#~ '_P^v h.`.[.k. +4.J.o+p+P.P.P.P.P.^:g(f^U]p=/:9]'_N{(:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=_:::<:H_&:[:}:|:-*-*F=n.P.P.P.P.P.P.P.P.P.P.O.N&N.:@o+m.I.4.2.G#1:2:3:3{3{4:5:6: ", +" 8+#+R+N 1=[]7:|%=+,.8:&@L~a&a&^=~ 2^9:N [+4.Q@C+p+2+P.P.P.P.[-0:. 7]}-9]0*F=N{R]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=a:b:c:j_k_d:e:f:g:-*F=n.P.P.P.P.P.P.P.P.P.P.P.n%O.S+C+o+n.J.-$[+h:i:j:@]2{2{k:l: ", +" $+P.4.g.H O]m:V{n:,#a&V{T(o:;*x&a!*+p:Z.0%P.P.P.P.P.b%. !*}-*+9]0*F==~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q:r:s:t:H_&:u:v:w:-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.o+Q@n.x:y:z:A:+]+]1{B:C: ", +" Q.O.I.F.N O]b%~~]~|%D:U&~ !@O'S&a)E:w M o+P.b%7:!*F:9]0*G:h(-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*H:I:J:K:<:H_L:M:N:T&F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.M.O:P:Q:R:R:R:|{S:T: ", +" P.O.M.o+g.w =*U:U&V:W:a)X::&D+`_.(+(. !*}-*+0*Y:Z:=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:`: <.< ", +" P.P.P.P.p+N < =*,<`/X:N)^:.(%@U(}-v&L^0*'<)<}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:!<~<{<.[,['[r},}'}&}{|,| ", +" '|)| ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 442ef5f32..b33e3d277 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,7 +36,7 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim"] + list = ["Ship_CreateSim", "Ship_RunSim"] self.appendToolbar("Simulation",list) # Menu @@ -44,7 +44,7 @@ class ShipWorkbench ( Workbench ): self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim"] + list = ["Ship_CreateSim", "Ship_RunSim"] self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index bb71e262b..158be05a7 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -41,8 +41,9 @@ nobase_data_DATA = \ Icons/SimIco.xcf \ Icons/Sim.xpm \ Icons/SimCreateIco.png \ - Icons/SimCreateIco.xcf \ Icons/SimCreateIco.xpm \ + Icons/SimRunIco.png \ + Icons/SimRunIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ @@ -86,10 +87,14 @@ nobase_data_DATA = \ tankGZ/__init__.py \ tankGZ/Plot.py \ tankGZ/TaskPanel.py \ - tankGZ/TaskPanel.ui + tankGZ/TaskPanel.ui \ simCreate/__init__.py \ simCreate/TaskPanel.py \ - simCreate/TaskPanel.ui + simCreate/TaskPanel.ui \ + simRun/__init__.py \ + simRun/Simulation.py \ + simRun/TaskPanel.py \ + simRun/TaskPanel.ui CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index 52407b824..efee2382d 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -132,6 +132,18 @@ class CreateSim: ToolTip = str(Translator.translate('Create a new simulation in order to process later')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class RunSim: + def Activated(self): + import simRun + simRun.load() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimRunIco.png" + MenuText = str(Translator.translate('Run a simulation')) + ToolTip = str(Translator.translate('Run a simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -141,3 +153,4 @@ FreeCADGui.addCommand('Ship_Weights', SetWeights()) FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) +FreeCADGui.addCommand('Ship_RunSim', RunSim()) diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py index 82556cacf..193c54823 100644 --- a/src/Mod/Ship/SimInstance.py +++ b/src/Mod/Ship/SimInstance.py @@ -23,6 +23,7 @@ import time from math import * +import threading # COIN from pivy.coin import * @@ -40,24 +41,45 @@ class FreeSurfaceFace: """ Face storage. @param pos Face position. @param normal Face normal. - @param Element length (distance between elements at x direction) - @param Element beam (distance between elements at y direction) + @param l Element length (distance between elements at x direction) + @param b Element beam (distance between elements at y direction) """ self.pos = pos self.normal = normal self.area = l*b + def __init__(self, pos, normal, area): + """ Face storage. + @param pos Face position. + @param normal Face normal. + @param area Element area + """ + self.pos = pos + self.normal = normal + self.area = area + class ShipSimulation: - def __init__(self, obj, fsMeshData): + def __init__(self, obj, fsMeshData, waves): """ Creates a new simulation instance on active document. @param obj Created Part::FeaturePython object. @param fsMeshData [L,B,N] Free surface mesh data, with lenght (x), Beam (y) and desired number of points. + @param waves [[A,T,phi,heading],] Waves involved """ # Add uniqueness property to identify Tank instances obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True # Compute free surface mesh self.createFSMesh(obj,fsMeshData) + # Store waves + obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[] + obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[] + w = [] + d = [] + for i in range(0,len(waves)): + w.append(Vector(waves[i][0], waves[i][1], waves[i][2])) + d.append(waves[i][3]) + obj.Waves = w + obj.Waves_Dir = d # Add shapes shape = self.computeShape(obj) if not shape: @@ -103,7 +125,6 @@ class ShipSimulation: b = sqrt(area) nx = int(round(L / l)) ny = int(round(B / b)) - print(l,b,nx,ny) # Start data fields if not already exist props = obj.PropertiesList try: @@ -141,87 +162,27 @@ class ShipSimulation: obj.FS_Area = areas[:] obj.FS_Normal = normal[:] - def FSMesh(self, obj): - """ Get free surface mesh in matrix mode. - @param obj Created Part::FeaturePython object. - @return Faces matrix - @note areas and normals will recomputed. - """ - nx = obj.FS_Nx - ny = obj.FS_Ny - # Transform positions into a mesh - pos = [] - for i in range(0,nx): - pos.append([]) - for j in range(0,ny): - pos[i].append(obj.FS_Position[j + i*ny]) - # Recompute normals and dimensions - normal = [] - l = [] - b = [] - for i in range(0,nx): - normal.append([]) - l.append([]) - b.append([]) - for j in range(0,ny): - i0 = i-1 - i1 = i+1 - fi = 1.0 - j0 = j-1 - j1 = j+1 - fj = 1.0 - if i == 0: - i0 = i - i1 = i+1 - fi = 2.0 - if i == nx-1: - i0 = i-1 - i1 = i - fi = 2.0 - if j == 0: - j0 = j - j1 = j+1 - fj = 2.0 - if j == ny-1: - j0 = j-1 - j1 = j - fj = 2.0 - l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) - b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) - xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, - obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, - obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) - yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, - obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, - obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) - n = Vector(xvec.cross(yvec)) # Z positive - normal[i].append(n.normalize()) - # Create faces - faces = [] - for i in range(0,nx): - faces.append([]) - for j in range(0,ny): - faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) - # Reconstruct mesh data - for i in range(0,nx): - for j in range(0,ny): - obj.FS_Position[j + i*ny] = faces[i][j].pos - obj.FS_Normal[j + i*ny] = faces[i][j].normal - obj.FS_Area[j + i*ny] = faces[i][j].area - return faces - def computeShape(self, obj): """ Computes simulation involved shapes. @param obj Created Part::FeaturePython object. @return Shape """ + print("[ShipSimulation] Computing mesh shape...") nx = obj.FS_Nx ny = obj.FS_Ny - mesh = self.FSMesh(obj) + mesh = FSMesh(obj) planes = [] # Create planes + Percentage = 0 + Count = 0 + print("0%") for i in range(1,nx-1): for j in range(1,ny-1): + Count = Count+1 + done = int(round(100 * Count / ((nx-2)*(ny-2)))) + if done != Percentage: + Percentage = done + print("%i%%" % (done)) v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25) v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25) v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25) @@ -615,3 +576,81 @@ class ViewProviderShipSimulation: " ", " "}; """ + +def FSMesh(obj, recompute=False): + """ Get free surface mesh in matrix mode. + @param obj Created Part::FeaturePython object. + @param recompute True if mesh must be recomputed, False otherwise. + @return Faces matrix + """ + nx = obj.FS_Nx + ny = obj.FS_Ny + if not recompute: + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(obj.FS_Position[j + i*ny], + obj.FS_Normal[j + i*ny], + obj.FS_Area[j + i*ny])) + return faces + # Transform positions into a mesh + pos = [] + for i in range(0,nx): + pos.append([]) + for j in range(0,ny): + pos[i].append(obj.FS_Position[j + i*ny]) + # Recompute normals and dimensions + normal = [] + l = [] + b = [] + for i in range(0,nx): + normal.append([]) + l.append([]) + b.append([]) + for j in range(0,ny): + i0 = i-1 + i1 = i+1 + fi = 1.0 + j0 = j-1 + j1 = j+1 + fj = 1.0 + if i == 0: + i0 = i + i1 = i+1 + fi = 2.0 + if i == nx-1: + i0 = i-1 + i1 = i + fi = 2.0 + if j == 0: + j0 = j + j1 = j+1 + fj = 2.0 + if j == ny-1: + j0 = j-1 + j1 = j + fj = 2.0 + l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x)) + b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y)) + xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x, + obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y, + obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z) + yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x, + obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y, + obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z) + n = Vector(xvec.cross(yvec)) # Z positive + normal[i].append(n.normalize()) + # Create faces + faces = [] + for i in range(0,nx): + faces.append([]) + for j in range(0,ny): + faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j])) + # Reconstruct mesh data + for i in range(0,nx): + for j in range(0,ny): + obj.FS_Position[j + i*ny] = faces[i][j].pos + obj.FS_Normal[j + i*ny] = faces[i][j].normal + obj.FS_Area[j + i*ny] = faces[i][j].area + return faces diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py index 3741fbec4..e14f4c964 100644 --- a/src/Mod/Ship/simCreate/TaskPanel.py +++ b/src/Mod/Ship/simCreate/TaskPanel.py @@ -36,9 +36,22 @@ class TaskPanel: def accept(self): form = self.form + # Read waves data + w = [] + for i in range(0,form.waves.rowCount() - 1): + item = form.waves.item(i,0) + A = item.text().toFloat()[0] + item = form.waves.item(i,1) + T = item.text().toFloat()[0] + item = form.waves.item(i,2) + phi = item.text().toFloat()[0] + item = form.waves.item(i,3) + head = item.text().toFloat()[0] + w.append([A,T,phi,head]) obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation") sim = SimInstance.ShipSimulation(obj, - [form.length.value(), form.beam.value(), form.n.value()]) + [form.length.value(), form.beam.value(), form.n.value()], + w) SimInstance.ViewProviderShipSimulation(obj.ViewObject) return True @@ -72,6 +85,7 @@ class TaskPanel: form.length = form.findChild(QtGui.QDoubleSpinBox, "Length") form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam") form.n = form.findChild(QtGui.QSpinBox, "N") + form.waves = form.findChild(QtGui.QTableWidget, "Waves") self.form = form # Initial values if self.initValues(): @@ -81,6 +95,7 @@ class TaskPanel: QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS) QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS) QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS) + QtCore.QObject.connect(form.waves,QtCore.SIGNAL("cellChanged(int,int)"),self.onWaves); def getMainWindow(self): "returns the main window" @@ -108,14 +123,48 @@ class TaskPanel: self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length")) self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam")) self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points")) + self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves")) + labels = [] + labels.append(Translator.translate("Amplitude") + " [m]") + labels.append(Translator.translate("Period") + " [s]") + labels.append(Translator.translate("Phase") + " [rad]") + labels.append(Translator.translate("Heading") + " [deg]") + self.form.waves.setHorizontalHeaderLabels(labels) def onFS(self, value): - """ Method called when ship data is changed. - Annotations must be showed. + """ Method called when free surface data is changed. @param value Changed value. """ pass + def onWaves(self, row, column): + """ Method called when waves data is changed. + @param row Affected row. + @param col Affected column. + """ + item = self.form.waves.item(row,column) + # Row deletion + if column == 0: + if not item.text(): + self.form.waves.removeRow(row) + # Ensure that exist one empty item at the end + nRow = self.form.waves.rowCount() + last = self.form.waves.item(nRow-1,0) + if last: + if(last.text() != ''): + self.form.waves.setRowCount(nRow+1) + # Fields must be numbers + for i in range(0,self.form.waves.rowCount()-1): # Avoid last row + for j in range(0,self.form.waves.columnCount()): # Avoid name column + item = self.form.waves.item(i,j) + if not item: + item = QtGui.QTableWidgetItem('0.0') + self.form.waves.setItem(i,j,item) + continue + (number,flag) = item.text().toFloat() + if not flag: + item.setText('0.0') + def createTask(): panel = TaskPanel() Gui.Control.showDialog(panel) diff --git a/src/Mod/Ship/simCreate/TaskPanel.ui b/src/Mod/Ship/simCreate/TaskPanel.ui index 995b64455..107d2a16d 100644 --- a/src/Mod/Ship/simCreate/TaskPanel.ui +++ b/src/Mod/Ship/simCreate/TaskPanel.ui @@ -6,14 +6,20 @@ 0 0 - 260 - 180 + 269 + 384 + + + 0 + 1 + + 0 - 180 + 384 @@ -22,155 +28,236 @@ + + QLayout::SetMinimumSize + + + + 0 + 1 + + - 240 - 160 + 0 + 128 Free surface + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + false - - - - 0 - 20 - 241 - 141 - + + + QLayout::SetDefaultConstraint - - - 6 - - - QLayout::SetDefaultConstraint - - - - - QLayout::SetDefaultConstraint + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Length + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Beam + + + + + + + 1 + + + 1000000.000000000000000 + + + 10.000000000000000 + + + 100.000000000000000 + + + + + + + + + QLayout::SetMinimumSize + + + 10 + + + 0 + + + 10 + + + 0 + + + + + Number of points + + + + + + + 1 + + + 1000000000 + + + 1000 + + + + + + + + + + + + + 0 + 2 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 0 + 0 + + + + Waves + + + + QLayout::SetDefaultConstraint + + + + + + 0 + 0 + + + + true + + + 1 + + + true + + + + + Amplitude [m] - - 10 + + + + Period [s] - - 0 + + + + Phase [rad] - - 10 + + + + Heading [deg] - - 0 - - - - - Length - - - - - - - 1 - - - 1000000.000000000000000 - - - 10.000000000000000 - - - 100.000000000000000 - - - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Beam - - - - - - - 1 - - - 1000000.000000000000000 - - - 10.000000000000000 - - - 100.000000000000000 - - - - - - - - - 10 - - - 0 - - - 10 - - - 0 - - - - - Number of points - - - - - - - 1 - - - 1000000000 - - - 10000 - - - - - - - + + + + diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py new file mode 100644 index 000000000..bf457e9e7 --- /dev/null +++ b/src/Mod/Ship/simRun/Simulation.py @@ -0,0 +1,56 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Part, Base, Vector + +# Ship design module +from shipUtils import Paths, Translator, Math + +class FreeCADShipSimulation(threading.Thread): + def __init__ (self, endTime, output, FSmesh, waves): + """ Thread constructor. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + # Perform work here + print("Im thread, Im running...") + time.sleep(2) + # ... + print("Im thread, I end!") diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py new file mode 100644 index 000000000..14cc86776 --- /dev/null +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -0,0 +1,160 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# Module +import SimInstance +from shipUtils import Paths, Translator +from Simulation import FreeCADShipSimulation as Sim + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" + self.sim = False + + def accept(self): + if not self.sim: + return False + msg = Translator.translate("Building data...\n") + App.Console.PrintMessage(msg) + # Get GUI data + endTime = self.form.time.value() + output = [] + output.append(self.form.output.value()) + output.append(self.form.outputType.currentIndex()) + # Get free surfaces data + FSMesh = SimInstance.FSMesh(self.sim) + wData = self.sim.Waves + wDir = self.sim.Waves_Dir + waves = [] + for i in range(0,len(wData)): + waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) + msg = Translator.translate("Launching simulation...\n") + App.Console.PrintMessage(msg) + # Build simulation thread + t = Sim(endTime, output, FSMesh, waves) + t.start() + msg = Translator.translate("Done!\n") + App.Console.PrintMessage(msg) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") + form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") + form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + # Get objects + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShipSimulation") + except ValueError: + continue + if obj.IsShipSimulation: + # Test if another ship already selected + if self.sim: + msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.sim = obj + # Test if any valid ship was selected + if not self.sim: + msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") + App.Console.PrintError(msg) + return True + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Run the simulation")) + self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) + self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel diff --git a/src/Mod/Ship/simRun/TaskPanel.ui b/src/Mod/Ship/simRun/TaskPanel.ui new file mode 100644 index 000000000..435a87e6e --- /dev/null +++ b/src/Mod/Ship/simRun/TaskPanel.ui @@ -0,0 +1,115 @@ + + + TaskPanel + + + + 0 + 0 + 292 + 72 + + + + + 0 + 1 + + + + + 0 + 72 + + + + Create new simulation + + + + + + Simulation time + + + + + + + 1 + + + 10000000.000000000000000 + + + 10.000000000000000 + + + 3600.000000000000000 + + + + + + + + 16 + 16777215 + + + + s + + + + + + + Output + + + + + + + 10000.000000000000000 + + + 1.000000000000000 + + + + + + + + 0 + 0 + + + + + 56 + 16777215 + + + + + + + + FPS + + + + + IPF + + + + + + + + + diff --git a/src/Mod/Ship/simRun/__init__.py b/src/Mod/Ship/simRun/__init__.py new file mode 100644 index 000000000..cbfb57d75 --- /dev/null +++ b/src/Mod/Ship/simRun/__init__.py @@ -0,0 +1,36 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD +import FreeCADGui + +# Qt libraries +from PyQt4 import QtGui,QtCore + +# Main object +import TaskPanel + +def load(): + """ Loads the tool """ + TaskPanel.createTask() From 6de9fd579172366bb12bc47b66c7fb551266d3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Fri, 6 Jul 2012 13:51:01 +0200 Subject: [PATCH 15/26] Imported pyOpenCL library --- src/Mod/Ship/InitGui.py | 19 +++++++++++++---- src/Mod/Ship/ShipGui.py | 2 +- src/Mod/Ship/simRun/Simulation.py | 11 +++++++++- src/Mod/Ship/simRun/TaskPanel.py | 34 +++++++++++++++++++++++++++---- src/Mod/Ship/simRun/TaskPanel.ui | 22 +++++++++++++++++--- 5 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index b33e3d277..de44d60a8 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,15 +36,26 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim", "Ship_RunSim"] - self.appendToolbar("Simulation",list) + try: + import pyopencl + except ImportError: + msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + else: + list = ["Ship_CreateSim", "Ship_RunSim"] + self.appendToolbar("Simulation",list) # Menu list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) - list = ["Ship_CreateSim", "Ship_RunSim"] - self.appendToolbar("Simulation",list) + try: + import pyopencl + except ImportError: + pass + else: + list = ["Ship_CreateSim", "Ship_RunSim"] + self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index efee2382d..a764a2b24 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -140,7 +140,7 @@ class RunSim: def GetResources(self): from shipUtils import Paths, Translator IconPath = Paths.iconsPath() + "/SimRunIco.png" - MenuText = str(Translator.translate('Run a simulation')) + MenuText = str(Translator.translate('Run a simulation')) ToolTip = str(Translator.translate('Run a simulation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index bf457e9e7..1910f79f9 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -25,6 +25,9 @@ import time from math import * import threading +# pyOpenCL +import pyopencl as cl + # FreeCAD import FreeCAD,FreeCADGui from FreeCAD import Part, Base, Vector @@ -33,14 +36,20 @@ from FreeCAD import Part, Base, Vector from shipUtils import Paths, Translator, Math class FreeCADShipSimulation(threading.Thread): - def __init__ (self, endTime, output, FSmesh, waves): + def __init__ (self, device, endTime, output, FSmesh, waves): """ Thread constructor. + @param device Device to use. @param endTime Maximum simulation time. @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. @param FSmesh Free surface mesh faces. @param waves Waves parameters (A,T,phi,heading) """ threading.Thread.__init__(self) + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data self.endTime = endTime self.output = output self.FSmesh = FSmesh diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 14cc86776..0a8762617 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -26,6 +26,8 @@ import FreeCAD as App import FreeCADGui as Gui # Qt library from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl # Module import SimInstance from shipUtils import Paths, Translator @@ -37,8 +39,6 @@ class TaskPanel: self.sim = False def accept(self): - if not self.sim: - return False msg = Translator.translate("Building data...\n") App.Console.PrintMessage(msg) # Get GUI data @@ -46,6 +46,16 @@ class TaskPanel: output = [] output.append(self.form.output.value()) output.append(self.form.outputType.currentIndex()) + devId = self.form.device.currentIndex() + # Get OpenCL device + count = 0 + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + if count == devId: + device = d + count = count + 1 # Get free surfaces data FSMesh = SimInstance.FSMesh(self.sim) wData = self.sim.Waves @@ -56,8 +66,8 @@ class TaskPanel: msg = Translator.translate("Launching simulation...\n") App.Console.PrintMessage(msg) # Build simulation thread - t = Sim(endTime, output, FSMesh, waves) - t.start() + simulator = Sim(device, endTime, output, FSMesh, waves) + simulator.start() msg = Translator.translate("Done!\n") App.Console.PrintMessage(msg) return True @@ -92,6 +102,7 @@ class TaskPanel: form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + form.device = form.findChild(QtGui.QComboBox, "Device") self.form = form # Initial values if self.initValues(): @@ -140,6 +151,20 @@ class TaskPanel: msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") App.Console.PrintError(msg) return True + # Get the list of devices + devices = [] + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + devices.append([p,d]) + dname = d.get_info(cl.device_info.NAME) + pname = p.get_info(cl.platform_info.NAME) + self.form.device.addItem(dname + " (" + pname + ")") + if not len(devices): + msg = Translator.translate("This tool requires an active OpenCL context to work\n") + App.Console.PrintError(msg) + return True msg = Translator.translate("Ready to work\n") App.Console.PrintMessage(msg) return False @@ -150,6 +175,7 @@ class TaskPanel: self.form.setWindowTitle(Translator.translate("Run the simulation")) self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) def createTask(): panel = TaskPanel() diff --git a/src/Mod/Ship/simRun/TaskPanel.ui b/src/Mod/Ship/simRun/TaskPanel.ui index 435a87e6e..25eeebe79 100644 --- a/src/Mod/Ship/simRun/TaskPanel.ui +++ b/src/Mod/Ship/simRun/TaskPanel.ui @@ -6,8 +6,8 @@ 0 0 - 292 - 72 + 300 + 102 @@ -19,7 +19,13 @@ 0 - 72 + 100 + + + + + 300 + 16777215 @@ -108,6 +114,16 @@ + + + + OpenCL device + + + + + + From 60fe69389ae5b69b18ced69e82ca36a6cffa513b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 14:23:06 +0200 Subject: [PATCH 16/26] Simulation thread control developed. --- src/Mod/Ship/CMakeLists.txt | 2 + src/Mod/Ship/Icons/SimIco.xcf | Bin 47149 -> 55163 bytes src/Mod/Ship/Icons/SimRunIco.png | Bin 15466 -> 14554 bytes src/Mod/Ship/Icons/SimRunIco.xpm | 2223 ++++++++++++++--------------- src/Mod/Ship/Icons/SimStopIco.png | Bin 0 -> 13235 bytes src/Mod/Ship/Icons/SimStopIco.xpm | 2217 ++++++++++++++++++++++++++++ src/Mod/Ship/InitGui.py | 4 +- src/Mod/Ship/Makefile.am | 2 + src/Mod/Ship/ShipGui.py | 13 + src/Mod/Ship/simRun/Simulation.py | 38 +- src/Mod/Ship/simRun/TaskPanel.py | 17 + src/Mod/Ship/simRun/__init__.py | 4 + 12 files changed, 3336 insertions(+), 1184 deletions(-) create mode 100644 src/Mod/Ship/Icons/SimStopIco.png create mode 100644 src/Mod/Ship/Icons/SimStopIco.xpm diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index f16627870..ef3d635a5 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -43,6 +43,8 @@ SET(ShipIcons_SRCS Icons/SimCreateIco.xpm Icons/SimRunIco.png Icons/SimRunIco.xpm + Icons/SimStopIco.png + Icons/SimStopIco.xpm Icons/Tank.png Icons/Tank.xcf Icons/Tank.xpm diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf index d4e42da2b48d2045c836c2a6d8ee3b536ae05909..8d250eb82f8e3c0da77f2f8765d0f0dedbbb1cc4 100644 GIT binary patch delta 8120 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 BK=1$n delta 408 zcmY+A&npCB7{|Z6l(d>5O0?|`rFD7_)R5oYoya%7v8g`_5i`>hsJq%`@NU?fto^JO4=Uj;3*YH9qUKQ~|FM2>OBLJ>a0M zs!oS$6@^qv4U4kxP9s6`VXOz-MIisn-XIg*4WRuS$ZgYDKa0m^n^2tGF;fX1w^<~s zkzw8gw-?wOWTN*DjGO^81Hk;X?wg3Gk}#DIGk);GDTA!Zl;D%+=W2^&r3((tQ2{LZ zx)h!?s3#|@glMXztw$NZGG_nzmsXkMO;C$urIl5>N%w)RH&qIIls;_JUs17lDCP+) loHMiFdz=OCy4V|JVmt^O@j_46fXfy0K}GkS`uOIx`wv5GQA+>- diff --git a/src/Mod/Ship/Icons/SimRunIco.png b/src/Mod/Ship/Icons/SimRunIco.png index f10386cf77f0dccf33f6e347820703a618102a00..2e53c25054c68407c23b5f1a8d0b9fd0fde47967 100644 GIT binary patch literal 14554 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 KQnf&n(EkHdBM+Pa diff --git a/src/Mod/Ship/Icons/SimRunIco.xpm b/src/Mod/Ship/Icons/SimRunIco.xpm index 44cd8b4ab..7adab3214 100644 --- a/src/Mod/Ship/Icons/SimRunIco.xpm +++ b/src/Mod/Ship/Icons/SimRunIco.xpm @@ -1,6 +1,6 @@ /* XPM */ static char * SimRunIco_xpm[] = { -"128 128 2592 2", +"128 128 2459 2", " c None", ". c #7B7B7B", "+ c #EAEAEA", @@ -1467,1132 +1467,999 @@ static char * SimRunIco_xpm[] = { "S) c #070607", "T) c #060504", "U) c #020303", -"V) c #0A0505", -"W) c #B6ACAE", -"X) c #B5ACAD", -"Y) c #A19999", -"Z) c #666666", -"`) c #9F9F9F", -" ! c #C4C3C4", -".! c #C2C2C3", -"+! c #C0C0BF", -"@! c #BCBBBB", -"#! c #909191", -"$! c #141516", -"%! c #121211", -"&! c #0F0E0F", -"*! c #090908", -"=! c #070606", -"-! c #050605", -";! c #020101", -">! c #5E2E2E", -",! c #E46A66", -"'! c #E36B64", -")! c #C77878", -"!! c #9F9B9B", -"~! c #4D4E4D", -"{! c #929292", -"]! c #C2C3C2", -"^! c #C1C2C2", -"/! c #C2C1C2", -"(! c #0B0C0B", -"_! c #030202", -":! c #000100", -"~ c #B0AFAF", -",~ c #B1B0B0", -"'~ c #ACADAC", -")~ c #AAABAB", -"!~ c #A8A7A8", -"~~ c #8C8C8C", -"{~ c #B9B8B8", -"]~ c #8D8D8D", -"^~ c #8F7B7C", -"/~ c #DB7066", -"(~ c #EB7A30", -"_~ c #E87448", -":~ c #9B5050", -"<~ c #211314", -"[~ c #050303", -"}~ c #2C1B1B", -"|~ c #5D3232", -"1~ c #964A49", -"2~ c #BA5351", -"3~ c #E26557", -"4~ c #E96D58", -"5~ c #F08B4C", -"6~ c #F89744", -"7~ c #EE7257", -"8~ c #EA6A5C", -"9~ c #F16358", -"0~ c #E9615F", -"a~ c #E36565", -"b~ c #F36656", -"c~ c #F59C60", -"d~ c #F35B4F", -"e~ c #999898", -"f~ c #A3A2A3", -"g~ c #ACACAD", -"h~ c #A4A4A3", -"i~ c #A1A0A0", -"j~ c #9E9D9D", -"k~ c #CC9D9C", -"l~ c #EC725C", -"m~ c #EE7D29", -"n~ c #EA7352", -"o~ c #C96967", -"p~ c #AA5654", -"q~ c #D9625C", -"r~ c #E67059", -"s~ c #EB7C4F", -"t~ c #ED8449", -"u~ c #F7923A", -"v~ c #FA953A", -"w~ c #FF9C3B", -"x~ c #FF9E3F", -"y~ c #FB9C46", -"z~ c #FB9E4A", -"A~ c #F69A55", -"B~ c #F08C5D", -"C~ c #F07C5E", -"D~ c #F1685A", -"E~ c #EF5B58", -"F~ c #E75F5D", -"G~ c #F15551", -"H~ c #F18A63", -"I~ c #F18562", -"J~ c #EA5653", -"K~ c #AEAEAF", -"L~ c #8F8F8F", -"M~ c #A9A9AA", -"N~ c #A3A2A2", -"O~ c #AEAFAF", -"P~ c #B9B1B1", -"Q~ c #DF8886", -"R~ c #EA7C3F", -"S~ c #F7841B", -"T~ c #EC7F39", -"U~ c #EC803E", -"V~ c #EF853B", -"W~ c #FB8D25", -"X~ c #FF9227", -"Y~ c #FF952D", -"Z~ c #FF9731", -"`~ c #FF9A37", -" { c #FF9D3D", -".{ c #FF9F41", -"+{ c #FFA145", -"@{ c #FFA44B", -"#{ c #FFA64F", -"${ c #FFA955", -"%{ c #FEA956", -"&{ c #FBA85F", -"*{ c #F29666", -"={ c #F29469", -"-{ c #F39768", -";{ c #FCAE69", -">{ c #F16F5E", -",{ c #BABAB9", -"'{ c #B2B2B3", -"){ c #B1B3B2", -"!{ c #B1B2B1", -"~{ c #ADACAB", -"{{ c #AAA9AA", -"]{ c #888988", -"^{ c #9E9D9E", -"/{ c #A0A0A1", -"({ c #A4A3A3", -"_{ c #A7A8A8", -":{ c #494747", -"<{ c #A16766", -"[{ c #E97A4A", -"}{ c #FF860F", -"|{ c #FF8915", -"1{ c #FF8B19", -"2{ c #FF8E1F", -"3{ c #FF9125", -"4{ c #FF9329", -"5{ c #FF962F", -"6{ c #FF9833", -"7{ c #FF9B39", -"8{ c #FFA043", -"9{ c #FFA247", -"0{ c #FFA751", -"a{ c #FFAA57", -"b{ c #FFAC5B", -"c{ c #FFAE5F", -"d{ c #FFB063", -"e{ c #FFB369", -"f{ c #FFB46B", -"g{ c #FDB26D", -"h{ c #F36F5F", -"i{ c #B3B4B3", -"j{ c #7D7C7C", -"k{ c #989898", -"l{ c #AEADAD", -"m{ c #ADACAD", -"n{ c #ACABAC", -"o{ c #9C9D9D", -"p{ c #7F7F7E", -"q{ c #565756", -"r{ c #989998", -"s{ c #A0A1A0", -"t{ c #A4A3A4", -"u{ c #4F4A4A", -"v{ c #9D6B6B", -"w{ c #E0756A", -"x{ c #EB7F3D", -"y{ c #FFA349", -"z{ c #FFA54D", -"A{ c #FFA853", -"B{ c #FFAB59", -"C{ c #FFAD5D", -"D{ c #FFAF61", -"E{ c #FFB267", -"F{ c #FFB66F", -"G{ c #FDB571", -"H{ c #F3836A", -"I{ c #DC5B57", -"J{ c #BA5C5C", -"K{ c #B6B7B7", -"L{ c #787877", -"M{ c #757676", -"N{ c #747474", -"O{ c #8C8D8C", -"P{ c #9D9C9D", -"Q{ c #A8A8A7", -"R{ c #545353", -"S{ c #989797", -"T{ c #9F9F9E", -"U{ c #A0A1A1", -"V{ c #8C8C8B", -"W{ c #706F70", -"X{ c #484646", -"Y{ c #9F6A6A", -"Z{ c #E9785E", -"`{ c #EC7D30", -" ] c #FE830B", -".] c #FF8711", -"+] c #FF8C1B", -"@] c #FF8F21", -"#] c #FA9231", -"$] c #F38F40", -"%] c #EE894F", -"&] c #ED8458", -"*] c #EE815B", -"=] c #EE815C", -"-] c #EE855E", -";] c #EF8D5D", -">] c #F4995D", -",] c #FAA45A", -"'] c #FEAC5C", -")] c #FFB56D", -"!] c #FFB771", -"~] c #FFB975", -"{] c #FCB677", -"]] c #F39572", -"^] c #E76158", -"/] c #8B5252", -"(] c #464343", -"_] c #B4B5B5", -":] c #777677", -"<] c #727172", -"[] c #6B6C6C", -"}] c #80807F", -"|] c #919090", -"1] c #9E9E9F", -"2] c #A4A5A4", -"3] c #A6A7A6", -"4] c #898888", -"5] c #6E6E6D", -"6] c #5F5F60", -"7] c #797A7A", -"8] c #7E7F7F", -"9] c #777777", -"0] c #616060", -"a] c #7F6464", -"b] c #A67373", -"c] c #6B5959", -"d] c #4E4A4A", -"e] c #A06C6C", -"f] c #E8795F", -"g] c #F07E20", -"h] c #FF8207", -"i] c #FF840B", -"j] c #FE8B1B", -"k] c #F68B2C", -"l] c #EC834B", -"m] c #EB775D", -"n] c #E16F65", -"o] c #C86B67", -"p] c #AD6463", -"q] c #9C605F", -"r] c #995E5D", -"s] c #A7605E", -"t] c #C0625F", -"u] c #DC6660", -"v] c #ED7363", -"w] c #EF8968", -"x] c #F6A268", -"y] c #FEB166", -"z] c #FFB873", -"A] c #FFBA77", -"B] c #FFBB79", -"C] c #F39870", -"D] c #E65F57", -"E] c #875252", -"F] c #424040", -"G] c #866263", -"H] c #A55757", -"I] c #767777", -"J] c #767675", -"K] c #717171", -"L] c #6E6E6F", -"M] c #6C6D6D", -"N] c #6A6969", -"O] c #676767", -"P] c #656665", -"Q] c #676766", -"R] c #727373", -"S] c #5C5C5B", -"T] c #6A6A6B", -"U] c #7B7A7B", -"V] c #626262", -"W] c #534D4D", -"X] c #C37F7E", -"Y] c #E67E6E", -"Z] c #CB7C78", -"`] c #886767", -" ^ c #5F5353", -".^ c #8C6767", -"+^ c #E87A68", -"@^ c #EB7B21", -"#^ c #FE7E00", -"$^ c #FB881A", -"%^ c #EC8345", -"&^ c #EA7761", -"*^ c #C76F6B", -"=^ c #926363", -"-^ c #685252", -";^ c #524A4A", -">^ c #494646", -",^ c #484545", -"'^ c #4E4848", -")^ c #5F4E4E", -"!^ c #835757", -"~^ c #B85F5D", -"{^ c #E86E63", -"]^ c #F18C6B", -"^^ c #F9AC6D", -"/^ c #FEB670", -"(^ c #FEB56E", -"_^ c #F2956C", -":^ c #E86259", -"<^ c #B46261", -"[^ c #B06261", -"}^ c #E15450", -"|^ c #F34C49", -"1^ c #B1B1B2", -"2^ c #777676", -"3^ c #747575", -"4^ c #717271", -"5^ c #6D6E6D", -"6^ c #6B6B6A", -"7^ c #686767", -"8^ c #646363", -"9^ c #5D5D5C", -"0^ c #777776", -"a^ c #878788", -"b^ c #969596", -"c^ c #9A9898", -"d^ c #9A9A99", -"e^ c #646463", -"f^ c #7B7C7C", -"g^ c #7B7C7B", -"h^ c #707170", -"i^ c #575756", -"j^ c #7E6464", -"k^ c #E68379", -"l^ c #D27438", -"m^ c #D6763F", -"n^ c #E27D68", -"o^ c #DB7D71", -"p^ c #E07E6F", -"q^ c #E47B42", -"r^ c #F77B00", -"s^ c #FF8105", -"t^ c #F58522", -"u^ c #E97D54", -"v^ c #D4736B", -"w^ c #906363", -"x^ c #5A4E4E", -"y^ c #504848", -"z^ c #7C5555", -"A^ c #C15F5D", -"B^ c #F07865", -"C^ c #F5A472", -"D^ c #F39868", -"E^ c #F08060", -"F^ c #F07E5D", -"G^ c #F08A5C", -"H^ c #F36251", -"I^ c #E35656", -"J^ c #B0B0B1", -"K^ c #ABACAB", -"L^ c #787777", -"M^ c #717170", -"N^ c #696869", -"O^ c #666565", -"P^ c #646465", -"Q^ c #636363", -"R^ c #605F5F", -"S^ c #575758", -"T^ c #8B8A8B", -"U^ c #949393", -"V^ c #665858", -"W^ c #AA7979", -"X^ c #DC8378", -"Y^ c #D77848", -"Z^ c #DB741F", -"`^ c #E27513", -" / c #E87813", -"./ c #F37901", -"+/ c #FA7C00", -"@/ c #F4811C", -"#/ c #E87D5C", -"$/ c #BC716E", -"%/ c #6E5858", -"&/ c #5C4D4D", -"*/ c #A15B5B", -"=/ c #EB7265", -"-/ c #F49D6F", -";/ c #FEB36A", -">/ c #FFB165", -",/ c #FEAA5A", -"'/ c #F07A5A", -")/ c #EE5350", -"!/ c #A5A4A4", -"~/ c #969797", -"{/ c #787778", -"]/ c #636364", -"^/ c #606161", -"// c #5D5C5C", -"(/ c #585958", -"_/ c #5C5C5D", -":/ c #868787", -"( c #946565", -",( c #EC7262", -"'( c #F8A25A", -")( c #FDA24C", -"!( c #EF6C56", -"~( c #DB6868", -"{( c #7C7D7C", -"]( c #9B9A9A", -"^( c #666667", -"/( c #818182", -"(( c #7D7E7D", -"_( c #757475", -":( c #635757", -"<( c #DA8882", -"[( c #D7752B", -"}( c #EA7400", -"|( c #E57A22", -"1( c #E18173", -"2( c #735D5D", -"3( c #6B5D5D", -"4( c #CF6663", -"5( c #EF8D5F", -"6( c #FEA54F", -"7( c #EE8357", -"8( c #E65E5B", -"9( c #707171", -"0( c #807F80", -"a( c #8E8E8F", -"b( c #979696", -"c( c #959594", -"d( c #686869", -"e( c #7F8080", -"f( c #7E7E7F", -"g( c #7C7D7D", -"h( c #737374", -"i( c #DC8878", -"j( c #DA6F0A", -"k( c #E47100", -"l( c #E87300", -"m( c #E07E45", -"n( c #C07C79", -"o( c #514C4C", -"p( c #4C4E4E", -"q( c #535453", -"r( c #A16665", -"s( c #ED7961", -"t( c #FCA14B", -"u( c #F3924D", -"v( c #EB625C", -"w( c #747473", -"x( c #838384", -"y( c #908F90", -"z( c #919192", -"A( c #7D7C7D", -"B( c #818282", -"C( c #808081", -"D( c #7F7F80", -"E( c #9D7978", -"F( c #D98162", -"G( c #DB6F07", -"H( c #E27000", -"I( c #E87506", -"J( c #E0815F", -"K( c #976E6E", -"L( c #7F6162", -"M( c #E96C5F", -"N( c #F79A4D", -"O( c #F89642", -"P( c #F16454", -"Q( c #828181", -"R( c #5A595A", -"S( c #676667", -"T( c #8A8A8A", -"U( c #7A7A7B", -"V( c #7B7777", -"W( c #827B7B", -"X( c #7A7272", -"Y( c #726B6B", -"Z( c #6F6565", -"`( c #BB8887", -" _ c #D17A45", -"._ c #DA6C00", -"+_ c #E06F00", -"@_ c #E2740E", -"#_ c #DE8470", -"$_ c #7A6363", -"%_ c #695B5C", -"&_ c #D86A63", -"*_ c #F29351", -"=_ c #FE9937", -"-_ c #ED7253", -";_ c #E16A6A", -">_ c #9E9E9D", -",_ c #838282", -"'_ c #767576", -")_ c #868585", -"!_ c #797A79", -"~_ c #777778", -"{_ c #737273", -"]_ c #A08A8A", -"^_ c #E19C98", -"/_ c #DA948B", -"(_ c #DC9288", -"__ c #DF8A78", -":_ c #CE7229", -"<_ c #DE6E00", -"[_ c #DD7314", -"}_ c #DB8678", -"|_ c #645757", -"1_ c #5E5656", -"2_ c #CB6966", -"3_ c #F08D50", -"4_ c #FF9935", -"5_ c #FE9733", -"6_ c #ED7F4C", -"7_ c #EE6657", -"8_ c #EE6357", -"9_ c #EE5E54", -"0_ c #E56464", -"a_ c #7F7E7F", -"b_ c #989897", -"c_ c #9C9D9C", -"d_ c #A58E8E", -"e_ c #D2866E", -"f_ c #BC661B", -"g_ c #BF6719", -"h_ c #C36819", -"i_ c #C86B18", -"j_ c #D26800", -"k_ c #D66A00", -"l_ c #DC6D00", -"m_ c #DB7316", -"n_ c #DC8B80", -"o_ c #746A6A", -"p_ c #4D4F4E", -"q_ c #585454", -"r_ c #C46865", -"s_ c #EF894E", -"t_ c #FE932B", -"u_ c #F58B36", -"v_ c #F58A34", -"w_ c #EC7845", -"x_ c #E8615E", -"y_ c #9C9B9C", -"z_ c #9B9B9A", -"A_ c #A48E8E", -"B_ c #E59891", -"C_ c #D78B78", -"D_ c #D88A76", -"E_ c #D88975", -"F_ c #D48465", -"G_ c #CB6D1B", -"H_ c #D46900", -"I_ c #DB7315", -"J_ c #DD8C80", -"K_ c #887C7C", -"L_ c #5A5453", -"M_ c #C86A66", -"N_ c #EF894A", -"O_ c #FF942B", -"P_ c #EE8342", -"Q_ c #EC6D51", -"R_ c #ED6A52", -"S_ c #EF614F", -"T_ c #E76363", -"U_ c #838483", -"V_ c #8D8D8C", -"W_ c #959696", -"X_ c #959795", -"Y_ c #757574", -"Z_ c #656666", -"`_ c #7D7E7E", -" : c #737372", -".: c #807A7A", -"+: c #978787", -"@: c #978686", -"#: c #988787", -"$: c #CF9A99", -"%: c #CB7845", -"&: c #D86B00", -"*: c #D87111", -"=: c #DE8B79", -"-: c #958282", -";: c #625656", -">: c #D46D66", -",: c #F08A43", -"': c #FE9127", -"): c #EC7250", -"!: c #E66F6F", -"~: c #747374", -"{: c #979796", -"]: c #939392", -"^: c #7D7D7E", -"/: c #777878", -"(: c #747373", -"_: c #C09695", -":: c #CD7C4F", -"<: c #D06700", -"[: c #D76D08", -"}: c #DC866A", -"|: c #A98A8A", -"1: c #735B5B", -"2: c #E46E62", -"3: c #F48C37", -"4: c #FF9023", -"5: c #FE8E21", -"6: c #EC7152", -"7: c #7A7B7B", -"8: c #929393", -"9: c #666566", -"0: c #7C7C7B", -"a: c #AB9191", -"b: c #D98B73", -"c: c #C9670B", -"d: c #D96C00", -"e: c #D67F50", -"f: c #C69291", -"g: c #787575", -"h: c #926464", -"i: c #EA775D", -"j: c #FB8D26", -"k: c #F2872F", -"l: c #EE695B", -"m: c #7A7B7A", -"n: c #929293", -"o: c #898A8A", -"p: c #666665", -"q: c #8E8282", -"r: c #DD9486", -"s: c #C7670E", -"t: c #CE6600", -"u: c #D0742B", -"v: c #DD928A", -"w: c #8D8080", -"x: c #564F4F", -"y: c #BF6D6B", -"z: c #EA7F4B", -"A: c #FE8C1D", -"B: c #EF8233", -"C: c #EA6C64", -"D: c #898988", -"E: c #787879", -"F: c #797978", -"G: c #757675", -"H: c #827C7C", -"I: c #D99D9A", -"J: c #C5733A", -"K: c #CC6500", -"L: c #D46D0A", -"M: c #DB876B", -"N: c #B69090", -"O: c #816060", -"P: c #E57464", -"Q: c #F3872D", -"R: c #FF8A17", -"S: c #E97747", -"T: c #E57373", -"U: c #89898A", -"V: c #858685", -"W: c #848384", -"X: c #808180", -"Y: c #757576", -"Z: c #747475", -"`: c #C29796", -" < c #C67741", -".< c #CA6400", -"+< c #D56A00", -"@< c #CF7737", -"#< c #DA948C", -"$< c #928282", -"%< c #584F4F", -"&< c #BD706E", -"*< c #E97C4D", -"=< c #FD8715", -"-< c #FF8813", -";< c #F8851B", -">< c #ED6C56", -",< c #838382", -"'< c #747576", -")< c #737473", -"!< c #BE9393", -"~< c #C47641", -"{< c #C66200", -"]< c #D26A05", -"^< c #D7825E", -"/< c #C69493", -"(< c #837B7B", -"_< c #4A4646", -":< c #976566", -"<< c #E8785F", -"[< c #F58320", -"}< c #FF850D", -"|< c #F27F20", -"1< c #DB6C64", -"2< c #79797A", -"3< c #7A7A79", -"4< c #767776", -"5< c #968989", -"6< c #D69F9C", -"7< c #BE723B", -"8< c #C26000", -"9< c #CE6F1A", -"0< c #DB8A73", -"a< c #B69191", -"b< c #555050", -"c< c #836161", -"d< c #DF7768", -"e< c #EC7E32", -"f< c #FF8309", -"g< c #F27E1D", -"h< c #EB7267", -"i< c #6B6A6A", -"j< c #747574", -"k< c #8C8383", -"l< c #BF9F9E", -"m< c #DA9F98", -"n< c #C88261", -"o< c #B85F0C", -"p< c #BD5F04", -"q< c #C16104", -"r< c #C86300", -"s< c #D16800", -"t< c #CD732C", -"u< c #DE8E7A", -"v< c #A78080", -"w< c #5D5454", -"x< c #4E4949", -"y< c #DA7A6E", -"z< c #E97D3F", -"A< c #FD8007", -"B< c #FF8003", -"C< c #FF7F01", -"D< c #F97E0A", -"E< c #E8714E", -"F< c #ED716A", -"G< c #E57E7E", -"H< c #7D7979", -"I< c #CBA6A6", -"J< c #D59482", -"K< c #B36A31", -"L< c #B66B32", -"M< c #CC8667", -"N< c #D68F7B", -"O< c #CE8462", -"P< c #C16511", -"Q< c #CD732A", -"R< c #DB8A70", -"S< c #BF8A87", -"T< c #7B6767", -"U< c #4C4A4A", -"V< c #474545", -"W< c #695959", -"X< c #A77272", -"Y< c #E37B67", -"Z< c #E77D39", -"`< c #FA7C02", -" [ c #F17B16", -".[ c #E9792D", -"+[ c #E8782C", -"@[ c #E97821", -"#[ c #E3723C", -"$[ c #F56A66", -"%[ c #B69C9C", -"&[ c #DA9A8C", -"*[ c #CD8D76", -"=[ c #E0A39D", -"-[ c #BB9D9D", -";[ c #A28F8F", -">[ c #CA9F9E", -",[ c #CC825F", -"'[ c #C26103", -")[ c #CF6D15", -"![ c #D48159", -"~[ c #DC8F83", -"{[ c #AC7F7F", -"][ c #554F4F", -"^[ c #4F4B4B", -"/[ c #6D5B5B", -"([ c #9B7070", -"_[ c #D67F78", -":[ c #E57E5B", -"<[ c #EA7B23", -"[[ c #EF790D", -"}[ c #E9775A", -"|[ c #EB7C78", -"1[ c #EF7366", -"2[ c #EC6E5B", -"3[ c #EA7C7B", -"4[ c #847F7F", -"5[ c #D1A9A9", -"6[ c #BC9D9D", -"7[ c #948888", -"8[ c #767575", -"9[ c #978A8A", -"0[ c #DD9D94", -"a[ c #C37642", -"b[ c #C16000", -"c[ c #D26902", -"d[ c #CE722A", -"e[ c #D5825D", -"f[ c #DF8C7E", -"g[ c #C98A87", -"h[ c #A97D7C", -"i[ c #8D7070", -"j[ c #7C6767", -"k[ c #7B6565", -"l[ c #876B6B", -"m[ c #A27776", -"n[ c #C07E7C", -"o[ c #DE8479", -"p[ c #E27F5F", -"q[ c #DF7A36", -"r[ c #ED7808", -"s[ c #F07802", -"t[ c #E37846", -"u[ c #EC817C", -"v[ c #EA8181", -"w[ c #817D7D", -"x[ c #A59191", -"y[ c #DB9B91", -"z[ c #C17543", -"A[ c #C36100", -"B[ c #D36B05", -"C[ c #D06F1A", -"D[ c #D1783B", -"E[ c #D47E55", -"F[ c #DA8467", -"G[ c #DD856D", -"H[ c #DD846D", -"I[ c #DC8367", -"J[ c #DA7F58", -"K[ c #DA7B41", -"L[ c #DD7622", -"M[ c #E67407", -"N[ c #EB7500", -"O[ c #EC7602", -"P[ c #DF7747", -"Q[ c #EC827B", -"R[ c #A59090", -"S[ c #DC9B91", -"T[ c #C87E57", -"U[ c #C0640F", -"V[ c #D66B02", -"W[ c #D76C04", -"X[ c #D96E05", -"Y[ c #DB6E05", -"Z[ c #DD6F04", -"`[ c #E07003", -" } c #E37100", -".} c #DE751E", -"+} c #E27A53", -"@} c #EA847E", -"#} c #A08D8D", -"$} c #D8A2A0", -"%} c #C47A4E", -"&} c #C46100", -"*} c #DC7216", -"=} c #E57D66", -"-} c #EB8E8D", -";} c #B39696", -">} c #C77F5B", -",} c #BE5E00", -"'} c #C05F00", -")} c #D5732B", -"!} c #EC8D87", -"~} c #7A7878", -"{} c #CDA2A1", -"]} c #C17A51", -"^} c #B96B2F", -"/} c #CA8261", -"(} c #CD8466", -"_} c #C87B4F", -":} c #C16C25", -"<} c #C36204", -"[} c #C76301", -"}} c #D36900", -"|} c #D56A01", -"1} c #D26C0C", -"2} c #D0722B", -"3} c #D67A50", -"4} c #D97C58", -"5} c #D3753B", -"6} c #D2712A", -"7} c #EC8881", -"8} c #A59292", -"9} c #DA9C91", -"0} c #B3672B", -"a} c #D18D76", -"b} c #B68F8F", -"c} c #947C7C", -"d} c #BD9090", -"e} c #D6958E", -"f} c #D88C77", -"g} c #CF8260", -"h} c #C57237", -"i} c #C46D26", -"j} c #C86402", -"k} c #C86C1D", -"l} c #CB7027", -"m} c #CD7640", -"n} c #D78060", -"o} c #E18673", -"p} c #EA9189", -"q} c #F09F9F", -"r} c #EC9F9F", -"s} c #E98B82", -"t} c #CF7238", -"u} c #D47750", -"v} c #EB9290", -"w} c #635B5B", -"x} c #D0A19D", -"y} c #B8754C", -"z} c #BE7C58", -"A} c #CFA19F", -"B} c #655E5E", -"C} c #555151", -"D} c #F1B2B2", -"E} c #ECA39E", -"F} c #EA9B93", -"G} c #C5743F", -"H} c #C36B21", -"I} c #E48F80", -"J} c #EB9B96", -"K} c #EEA7A7", -"L} c #DC7E66", -"M} c #C96C25", -"N} c #E88276", -"O} c #AC9393", -"P} c #EFB2B1", -"Q} c #CB8C74", -"R} c #DB9D93", -"S} c #867474", -"T} c #ECAEAE", -"U} c #CA7C57", -"V} c #C06D2F", -"W} c #EBA19D", -"X} c #EE908D", -"Y} c #DD7E6A", -"Z} c #EF8984", -"`} c #F0BDBC", -" | c #F6C1C1", -".| c #ECB0B0", -"+| c #C87C58", -"@| c #BD6C2F", -"#| c #EBA29E", -"$| c #EE9D9D", -"%| c #ECB4B4", -"&| c #C57B58", -"*| c #B86A30", -"=| c #EBA4A0", -"-| c #EEB5B5", -";| c #D58B77", -">| c #C77E61", -",| c #EEA8A5", -"'| c #EDB2B1", -")| c #EFB0AF", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #454946", +"~~ c #444644", +"{~ c #B0B1B1", +"]~ c #B1B0B1", +"^~ c #B6B7B7", +"/~ c #787877", +"(~ c #757676", +"_~ c #747474", +":~ c #8C8D8C", +"<~ c #9D9C9D", +"[~ c #A8A8A7", +"}~ c #545353", +"|~ c #989797", +"1~ c #9F9F9E", +"2~ c #A0A1A1", +"3~ c #8C8C8B", +"4~ c #706F70", +"5~ c #455646", +"6~ c #4F6A51", +"7~ c #4F7153", +"8~ c #506B54", +"9~ c #515653", +"0~ c #B1B1B0", +"a~ c #B4B5B5", +"b~ c #777677", +"c~ c #727172", +"d~ c #6B6C6C", +"e~ c #80807F", +"f~ c #919090", +"g~ c #9E9E9F", +"h~ c #A4A5A4", +"i~ c #A6A7A6", +"j~ c #898888", +"k~ c #6E6E6D", +"l~ c #5F5F60", +"m~ c #797A7A", +"n~ c #7E7F7F", +"o~ c #777777", +"p~ c #616060", +"q~ c #4C634E", +"r~ c #5A8B5E", +"s~ c #63A86A", +"t~ c #63AC6A", +"u~ c #47854E", +"v~ c #565A57", +"w~ c #474C48", +"x~ c #626263", +"y~ c #767777", +"z~ c #767675", +"A~ c #717171", +"B~ c #6E6E6F", +"C~ c #6C6D6D", +"D~ c #6A6969", +"E~ c #676767", +"F~ c #656665", +"G~ c #676766", +"H~ c #727373", +"I~ c #5C5C5B", +"J~ c #6A6A6B", +"K~ c #7B7A7B", +"L~ c #626262", +"M~ c #4C634F", +"N~ c #5D9361", +"O~ c #6ECA78", +"P~ c #7AE984", +"Q~ c #6FCD78", +"R~ c #609D67", +"S~ c #47774A", +"T~ c #535754", +"U~ c #454745", +"V~ c #6B6A6B", +"W~ c #6C6B6B", +"X~ c #B1B1B2", +"Y~ c #777676", +"Z~ c #747575", +"`~ c #717271", +" { c #6D6E6D", +".{ c #6B6B6A", +"+{ c #686767", +"@{ c #646363", +"#{ c #5D5D5C", +"${ c #777776", +"%{ c #878788", +"&{ c #969596", +"*{ c #9A9898", +"={ c #9A9A99", +"-{ c #646463", +";{ c #7B7C7C", +">{ c #7B7C7B", +",{ c #707170", +"'{ c #575756", +"){ c #4D624F", +"!{ c #5D9463", +"~{ c #74D47F", +"{{ c #86FF91", +"]{ c #81F68C", +"^{ c #76D882", +"/{ c #6DB373", +"({ c #5C8B61", +"_{ c #5B675E", +":{ c #454C46", +"<{ c #696968", +"[{ c #B0B0B1", +"}{ c #ABACAB", +"|{ c #787777", +"1{ c #717170", +"2{ c #696869", +"3{ c #666565", +"4{ c #646465", +"5{ c #636363", +"6{ c #605F5F", +"7{ c #575758", +"8{ c #8B8A8B", +"9{ c #949393", +"0{ c #5C9361", +"a{ c #73D07D", +"b{ c #86FD92", +"c{ c #7FFC8A", +"d{ c #74F182", +"e{ c #72CA7B", +"f{ c #639D67", +"g{ c #617264", +"h{ c #4C544E", +"i{ c #444645", +"j{ c #666566", +"k{ c #A5A4A4", +"l{ c #969797", +"m{ c #787778", +"n{ c #636364", +"o{ c #606161", +"p{ c #5D5C5C", +"q{ c #585958", +"r{ c #5C5C5D", +"s{ c #868787", +"t{ c #7F807F", +"u{ c #4F6251", +"v{ c #5B9361", +"w{ c #64C46E", +"x{ c #61DD6C", +"y{ c #3DBE49", +"z{ c #25AA32", +"A{ c #43C44D", +"B{ c #63DA6F", +"C{ c #76DB82", +"D{ c #77B880", +"E{ c #668E6B", +"F{ c #586659", +"G{ c #454844", +"H{ c #606160", +"I{ c #616261", +"J{ c #656566", +"K{ c #666767", +"L{ c #ADADAC", +"M{ c #A8A9A8", +"N{ c #9A9999", +"O{ c #6A6A69", +"P{ c #626261", +"Q{ c #5F605F", +"R{ c #818081", +"S{ c #868685", +"T{ c #506252", +"U{ c #5FC36A", +"V{ c #58D863", +"W{ c #2AB336", +"X{ c #079412", +"Y{ c #1FAC2C", +"Z{ c #40CA4E", +"`{ c #62E76F", +" ] c #77E983", +".] c #72CB7B", +"+] c #66A56C", +"@] c #66796B", +"#] c #4D5750", +"$] c #464846", +"%] c #636362", +"&] c #7C7B7B", +"*] c #939292", +"=] c #8A8B8A", +"-] c #676768", +";] c #848485", +">] c #818281", +",] c #7F7E7E", +"'] c #7B7B7A", +")] c #5C9362", +"!] c #62C76C", +"~] c #60E26C", +"{] c #30C23D", +"]] c #019D0D", +"^] c #06A211", +"/] c #17AF21", +"(] c #35C63F", +"_] c #57DE62", +":] c #72F17C", +"<] c #7BE885", +"[] c #6FC077", +"}] c #619367", +"|] c #57655C", +"1] c #484C48", +"2] c #A5A6A6", +"3] c #9F9FA0", +"4] c #8B8C8B", +"5] c #818180", +"6] c #7E7D7E", +"7] c #7C7C7D", +"8] c #787978", +"9] c #636463", +"0] c #62C86B", +"a] c #5FE66C", +"b] c #32CB3F", +"c] c #06AC12", +"d] c #0DB319", +"e] c #13BA1F", +"f] c #12BB1D", +"g] c #1DC227", +"h] c #34CF3F", +"i] c #50E05A", +"j] c #6CE977", +"k] c #75DA7E", +"l] c #6AAC71", +"m] c #57805A", +"n] c #535C55", +"o] c #434543", +"p] c #5D5D5E", +"q] c #616160", +"r] c #626161", +"s] c #7C7D7C", +"t] c #9B9A9A", +"u] c #666667", +"v] c #818182", +"w] c #7D7E7D", +"x] c #757475", +"y] c #62C76B", +"z] c #5EE76A", +"A] c #30D13C", +"B] c #05B711", +"C] c #10C01C", +"D] c #15C421", +"E] c #0BBE16", +"F] c #09BD14", +"G] c #13C11E", +"H] c #2CCF37", +"I] c #50E25D", +"J] c #6BF076", +"K] c #75E481", +"L] c #72BE7A", +"M] c #639166", +"N] c #657269", +"O] c #565D58", +"P] c #505251", +"Q] c #5F6060", +"R] c #707171", +"S] c #807F80", +"T] c #8E8E8F", +"U] c #979696", +"V] c #959594", +"W] c #686869", +"X] c #7F8080", +"Y] c #7E7E7F", +"Z] c #7C7D7D", +"`] c #737374", +" ^ c #62C96B", +".^ c #5EE96A", +"+^ c #30D53C", +"@^ c #03BE0F", +"#^ c #0EC81A", +"$^ c #17D023", +"%^ c #15CF21", +"&^ c #11CE1D", +"*^ c #0BC715", +"=^ c #0EC718", +"-^ c #22D02D", +";^ c #45DF4E", +">^ c #6CF479", +",^ c #80F38B", +"'^ c #7AD682", +")^ c #6CAF72", +"!^ c #5F8464", +"~^ c #5C655F", +"{^ c #525553", +"]^ c #535453", +"^^ c #5B595B", +"/^ c #5F5F5E", +"(^ c #747473", +"_^ c #838384", +":^ c #908F90", +"<^ c #919192", +"[^ c #7D7C7D", +"}^ c #818282", +"|^ c #808081", +"1^ c #7F7F80", +"2^ c #61CA6B", +"3^ c #5DEB69", +"4^ c #2ED93B", +"5^ c #01C60D", +"6^ c #0CD118", +"7^ c #15D921", +"8^ c #13D91F", +"9^ c #10D91D", +"0^ c #0FD51A", +"a^ c #0ED119", +"b^ c #0ECD19", +"c^ c #18CB22", +"d^ c #2CD238", +"e^ c #3FD84A", +"f^ c #4EDC5A", +"g^ c #61D46B", +"h^ c #73C27B", +"i^ c #6D9D72", +"j^ c #627865", +"k^ c #545E54", +"l^ c #5B5A5C", +"m^ c #5C5D5D", +"n^ c #828181", +"o^ c #5A595A", +"p^ c #676667", +"q^ c #8A8A8A", +"r^ c #7A7A7B", +"s^ c #4F6151", +"t^ c #62CA69", +"u^ c #5EEE68", +"v^ c #2EDF3A", +"w^ c #00CD0C", +"x^ c #0AD916", +"y^ c #12E21E", +"z^ c #11E11B", +"A^ c #11E11C", +"B^ c #11DF1C", +"C^ c #10DB1B", +"D^ c #0AD615", +"E^ c #07CA14", +"F^ c #0CC61A", +"G^ c #17C625", +"H^ c #26CB34", +"I^ c #41D64E", +"J^ c #68E473", +"K^ c #74D37D", +"L^ c #6FB176", +"M^ c #728D7E", +"N^ c #5E6F60", +"O^ c #545955", +"P^ c #9E9E9D", +"Q^ c #838282", +"R^ c #767576", +"S^ c #868585", +"T^ c #797A79", +"U^ c #737273", +"V^ c #5C6E5F", +"W^ c #5F9664", +"X^ c #61CB69", +"Y^ c #5EEF69", +"Z^ c #2CE239", +"`^ c #00D20B", +" / c #09DD13", +"./ c #11E71C", +"+/ c #0EE918", +"@/ c #0EEB18", +"#/ c #0EE719", +"$/ c #11DF1B", +"%/ c #11DC1C", +"&/ c #12D51E", +"*/ c #0AC116", +"=/ c #04B610", +"-/ c #15BB21", +";/ c #3ECF4A", +">/ c #63E76E", +",/ c #7FEC89", +"'/ c #7ECF89", +")/ c #6BA873", +"!/ c #697D6E", +"~/ c #545B56", +"{/ c #7F7E7F", +"]/ c #989897", +"^/ c #9C9D9C", +"// c #738575", +"(/ c #71A977", +"_/ c #6AD471", +":/ c #5EF069", +"( c #1A9D26", +",( c #2EB039", +"'( c #50D05C", +")( c #71EE7C", +"!( c #78E382", +"~( c #71BB79", +"{( c #649269", +"]( c #606E63", +"^( c #525953", +"/( c #747374", +"(( c #979796", +"_( c #939392", +":( c #7D7D7E", +"<( c #777878", +"[( c #747373", +"}( c #768878", +"|( c #6DD675", +"1( c #5EEC6B", +"2( c #2DDE3A", +"3( c #00CB0C", +"4( c #0BD616", +"5( c #13E020", +"6( c #0FE01C", +"7( c #10DF1B", +"8( c #11DE1C", +"9( c #13D91D", +"0( c #12D21E", +"a( c #13CD1F", +"b( c #15CA21", +"c( c #18C424", +"d( c #19C025", +"e( c #19B927", +"f( c #1AB429", +"g( c #1AA927", +"h( c #179E24", +"i( c #169A23", +"j( c #1A9E28", +"k( c #30B23C", +"l( c #49CA56", +"m( c #5FDF6D", +"n( c #71E47B", +"o( c #70CE78", +"p( c #6AAB6F", +"q( c #718A77", +"r( c #5B6D5E", +"s( c #575958", +"t( c #7A7B7B", +"u( c #929393", +"v( c #7C7C7B", +"w( c #758778", +"x( c #77AE7D", +"y( c #6DD575", +"z( c #5EEC6A", +"A( c #2FDA3B", +"B( c #03C40D", +"C( c #0DCE16", +"D( c #16D721", +"E( c #12D71F", +"F( c #12D61E", +"G( c #13D41D", +"H( c #13D01F", +"I( c #15CC21", +"J( c #17C523", +"K( c #18C024", +"L( c #19BD25", +"M( c #1BB527", +"N( c #1CAF29", +"O( c #1DAA2A", +"P( c #1FA42C", +"Q( c #1BA029", +"R( c #179B24", +"S( c #179C24", +"T( c #1EA32C", +"U( c #3CC04A", +"V( c #61E06C", +"W( c #73F180", +"X( c #7CE587", +"Y( c #71BF79", +"Z( c #5F9264", +"`( c #4D6B51", +" _ c #7A7B7A", +"._ c #929293", +"+_ c #898A8A", +"@_ c #666665", +"#_ c #6F7070", +"$_ c #6A806D", +"%_ c #6BA472", +"&_ c #68D070", +"*_ c #5DE869", +"=_ c #2FD33C", +"-_ c #04BC0F", +";_ c #0EC619", +">_ c #17CF23", +",_ c #16CE20", +"'_ c #16CC21", +")_ c #16CD22", +"!_ c #16CB22", +"~_ c #17C823", +"{_ c #17C423", +"]_ c #18C023", +"^_ c #18BE24", +"/_ c #19B725", +"(_ c #1CAF26", +"__ c #1CA728", +":_ c #1DA529", +"<_ c #20A32B", +"[_ c #1CA029", +"}_ c #10951D", +"|_ c #0A8D15", +"1_ c #1CA028", +"2_ c #40C14C", +"3_ c #67E774", +"4_ c #83FA90", +"5_ c #7AD785", +"6_ c #65A76B", +"7_ c #58785C", +"8_ c #535755", +"9_ c #898988", +"0_ c #787879", +"a_ c #797978", +"b_ c #757675", +"c_ c #6D8170", +"d_ c #6BA470", +"e_ c #67CF70", +"f_ c #5FE86B", +"g_ c #31CE3D", +"h_ c #06B510", +"i_ c #11BE1A", +"j_ c #1AC725", +"k_ c #18C621", +"l_ c #18C522", +"m_ c #18C323", +"n_ c #17C123", +"o_ c #16BD22", +"p_ c #18B824", +"q_ c #19B527", +"r_ c #1AAF29", +"s_ c #1DAC29", +"t_ c #1EA52A", +"u_ c #1FA62B", +"v_ c #20A22C", +"w_ c #1A9C28", +"x_ c #139720", +"y_ c #159A23", +"z_ c #2AAD38", +"A_ c #45C651", +"B_ c #5EDE6A", +"C_ c #71E67B", +"D_ c #75D17E", +"E_ c #69A46E", +"F_ c #65786A", +"G_ c #535D54", +"H_ c #89898A", +"I_ c #858685", +"J_ c #848384", +"K_ c #808180", +"L_ c #757576", +"M_ c #747475", +"N_ c #6A6B6B", +"O_ c #6B7D6C", +"P_ c #6BA46E", +"Q_ c #64CB6D", +"R_ c #5FE56A", +"S_ c #33C73F", +"T_ c #08AB14", +"U_ c #13B51D", +"V_ c #1CBF27", +"W_ c #18BD24", +"X_ c #18BE25", +"Y_ c #18BD26", +"Z_ c #1ABA26", +"`_ c #1AB926", +" : c #19B525", +".: c #1BB126", +"+: c #1BAD27", +"@: c #1DA82A", +"#: c #1EA52B", +"$: c #1EA22B", +"%: c #1DA129", +"&: c #1B9F26", +"*: c #189C25", +"=: c #1AA027", +"-: c #31B43E", +";: c #55D660", +">: c #69E473", +",: c #70DF7B", +"': c #6BBE72", +"): c #5C8F62", +"!: c #526655", +"~: c #4A4C4B", +"{: c #838382", +"]: c #747576", +"^: c #737473", +"/: c #647867", +"(: c #67A16C", +"_: c #64C86D", +":: c #60E36C", +"<: c #32C242", +"[: c #08A218", +"}: c #14AD21", +"|: c #1EB828", +"1: c #1AB426", +"2: c #1BB526", +"3: c #1AB528", +"4: c #1CB428", +"5: c #1CB228", +"6: c #1BAF27", +"7: c #1DAB29", +"8: c #1FA62A", +"9: c #1FA42A", +"0: c #1DA028", +"a: c #199E25", +"b: c #10941D", +"c: c #0A9118", +"d: c #1C9F29", +"e: c #3BBC49", +"f: c #5FDA6C", +"g: c #7AEB86", +"h: c #76CC7F", +"i: c #64A46C", +"j: c #52785F", +"k: c #4F554E", +"l: c #79797A", +"m: c #7A7A79", +"n: c #767776", +"o: c #585959", +"p: c #5E7260", +"q: c #639D68", +"r: c #64C76E", +"s: c #62E16D", +"t: c #35BC42", +"u: c #0D9719", +"v: c #19A224", +"w: c #20AE2C", +"x: c #1DAC2B", +"y: c #1CAC2A", +"z: c #1DAC2A", +"A: c #1EA92A", +"B: c #1EA62A", +"C: c #1EA42B", +"D: c #179D25", +"E: c #189C26", +"F: c #20A52E", +"G: c #2BAD38", +"H: c #38BA45", +"I: c #4ECE59", +"J: c #65DD6F", +"K: c #6DD177", +"L: c #6BB173", +"M: c #658A6B", +"N: c #58655A", +"O: c #494E49", +"P: c #6B6A6A", +"Q: c #747574", +"R: c #566A58", +"S: c #5E9963", +"T: c #64C56D", +"U: c #61DE6C", +"V: c #35B742", +"W: c #0E911B", +"X: c #199C26", +"Y: c #21A52D", +"Z: c #1EA42A", +"`: c #1DA42B", +" < c #1EA32A", +".< c #1FA22A", +"+< c #1FA12A", +"@< c #1EA12B", +"#< c #1B9E28", +"$< c #22A42D", +"%< c #38BA44", +"&< c #4DCE59", +"*< c #61DD6D", +"=< c #6FDF7A", +"-< c #73C87C", +";< c #669E6C", +">< c #567459", +",< c #4C544D", +"'< c #566958", +")< c #639E69", +"!< c #67CB70", +"~< c #61E16C", +"{< c #36B945", +"]< c #0F931C", +"^< c #1B9E27", +"/< c #22A42E", +"(< c #20A42C", +"_< c #21A32C", +":< c #21A42E", +"<< c #20A32E", +"[< c #1DA12B", +"}< c #22A630", +"|< c #3EC049", +"1< c #62E36E", +"2< c #72ED7E", +"3< c #74D77B", +"4< c #69AF6F", +"5< c #5A835D", +"6< c #556158", +"7< c #778B79", +"8< c #75AF7A", +"9< c #6ED277", +"0< c #35B943", +"a< c #1A9E27", +"b< c #21A52F", +"c< c #20A32D", +"d< c #20A42D", +"e< c #1FA32D", +"f< c #1DA12A", +"g< c #149821", +"h< c #2CB039", +"i< c #49CB55", +"j< c #61E06D", +"k< c #72E27C", +"l< c #70C277", +"m< c #659669", +"n< c #627167", +"o< c #445045", +"p< c #77B27C", +"q< c #6ED278", +"r< c #61E16D", +"s< c #21A52E", +"t< c #30B13B", +"u< c #4ACA56", +"v< c #66DE71", +"w< c #6FD879", +"x< c #6AAF6F", +"y< c #5B845F", +"z< c #535C56", +"A< c #444845", +"B< c #10931C", +"C< c #22A62F", +"D< c #1FA22C", +"E< c #0F941C", +"F< c #169B23", +"G< c #34B741", +"H< c #51D25E", +"I< c #6BE876", +"J< c #72E17C", +"K< c #6BBF73", +"L< c #5B685F", +"M< c #4A504B", +"N< c #36BA45", +"O< c #0E931C", +"P< c #169B24", +"Q< c #19A028", +"R< c #189E26", +"S< c #36BA43", +"T< c #5BDA68", +"U< c #70E47C", +"V< c #71CE7B", +"W< c #68A96E", +"X< c #5D7D65", +"Y< c #4A5B4B", +"Z< c #62E16E", +"`< c #35BA43", +" [ c #0D9219", +".[ c #149920", +"+[ c #1A9F27", +"@[ c #1FA22B", +"#[ c #2DAF39", +"$[ c #44C450", +"%[ c #5FD869", +"&[ c #76DF7F", +"*[ c #77BE7E", +"=[ c #64906A", +"-[ c #59685D", +";[ c #484D49", +">[ c #6BCF74", +",[ c #5BDB67", +"'[ c #2BAE37", +")[ c #01850D", +"![ c #31B33D", +"~[ c #51D05D", +"{[ c #6BEA77", +"][ c #75EB80", +"^[ c #64A36B", +"/[ c #657963", +"([ c #4D5851", +"_[ c #788C7A", +":[ c #78B27D", +"<[ c #6ED177", +"[[ c #61E06E", +"}[ c #39BC45", +"|[ c #1A9F25", +"1[ c #33B53F", +"2[ c #4FCF5A", +"3[ c #68E275", +"4[ c #79DC82", +"5[ c #72BA79", +"6[ c #629367", +"7[ c #5E6C63", +"8[ c #47534A", +"9[ c #5D725F", +"0[ c #6FAA74", +"a[ c #73D67C", +"b[ c #6FEC7A", +"c[ c #56D762", +"d[ c #47CC53", +"e[ c #5CDA68", +"f[ c #6ADC76", +"g[ c #6DC976", +"h[ c #669F6B", +"i[ c #58785B", +"j[ c #4E6751", +"k[ c #5E9B65", +"l[ c #75D57D", +"m[ c #86FE90", +"n[ c #80FF8C", +"o[ c #7AF985", +"p[ c #7AE182", +"q[ c #64AE6B", +"r[ c #667F6C", +"s[ c #526254", +"t[ c #7EEF89", +"u[ c #86FB94", +"v[ c #84EF91", +"w[ c #79CB82", +"x[ c #829F8B", +"y[ c #5B6F5E", +"z[ c #82FF8E", +"A[ c #80FF8D", +"B[ c #7CFF88", " ", " ", " ", @@ -2668,56 +2535,56 @@ static char * SimRunIco_xpm[] = { " `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", " j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", " A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", -" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)V)W)X)Y)/# ", -" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C&#!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)>!,!'!)!!! ", -" o+I.4.m%[+ +=$G#|.~!|.k.M&|.F.k.<+~!(@G.H.4._#_#I.n.:#o+C+.+++2+P.{!/#/#/#/#/#B#R*i*y*D*{ E$]!(%^!/!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;(!-,%)Q)r'r'-'6'=)w).)()_!g):!z)z)z)>,>,w!S)=)x!y!z!A!B!8)C!z)z)z)z)z)D!E!F!G!1! H! ", -" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#I!J!K!L!E*j*M!3*N!(&{ | =&x*[=O!/#/#/#P!Z&Z&Z&c%c%e F>Q!,,R!p$3@@%%*S!T!U!V!W!;!z)z)z)X!Y!Z!`! ~.~+~@~ #~$~%~&~ ", -" P./=*~=~G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=-~9&;~7.2*>~,~(&j*'~)~!~x*Q*!=/#/#/#/#/#/#~~P.9!c>e ,,M,{~C&;'T.]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~ b~c~d~ ", -" P.G%[;o*K!e~~~=~M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.~~/#/#/#M%f~x*=&7.E*2*{ g~| y*^&h~i~j~/#/#/#/#/#/#1*P.P.P.P.P.{~;'9*8*8*9@_)k~l~m~n~o~p~q~r~s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~J~ ", -" P.c%E+E+E++)4*K~;~B#L~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.L~/#!=_&R*i*V*E&7.| 7.M~-+x*N~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.O~+)E+6*P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{@{#{${%{&{*{={-{;{>{ ", -" P.,{p)3*R*/&'{){!{,~j*~{{{J!]{Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)^{/{({x*i*T*_{-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.:{<{[{}{|{1{2{3{4{5{6{7{ {8{9{@{0{a{b{c{d{e{f{g{h{ ", -" P.{~i{o*%@!*j{;*k{T*j*{ l{m{n{| E*o{p{a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.q{-*} r{s{R*t{9&]&({J!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.u{v{w{x{}{|{1{2{3{4{5{6{7{x~8{y{z{A{B{C{D{E{f{F{G{H{I{J{ ", -" P.K{l*(&!*}-L{0*M{N{=~[-O{P{=&E&=&=&=&y*Q{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$R{s !*. a)]~S{T{U{U{/#/#e*1*/#e*V{. W{K.P.P.P.P.P.P.P.X{P.P.P.P.u{Y{Z{`{ ].]|{+]@]3{#]$]%]&]*]=]-];]>],]']d{E{)]!]~]{]]]^]/](]O. ", -" P._]/&/&}-*+:]F=F==~<]5.V&S.[]-*}]|]1]9&R*R*2]3]`)4]5]s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 6]}*i&V&N{7]8]N):&[*D+9]Z)0]) P+J.P.P.O.P.P.P.Q.a]b]c]P.P.d]e]f]g]h]i].]|{j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y])]z]A]B]A]C]D]E]F]0 G]H] ", -" P.i{K~K~*+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]R]S&M)T{^{T{I!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M S]! Z)T]5.M{U][-9]-*S.)*V]0 ..F#M&Y$o+P.P.P.P.P.W]X]Y]Z]`] ^.^+^@^#^h]i]}{$^%^&^*^=^-^;^>^r+P.,^'^)^!^~^{^]^^^/^~]~]z](^_^:^<^[^}^|^ ", -" P.1^2*g~2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^Q 0^a^b^e~c^d^e~|%. S.e^v I.a+$+#+Q.P.P.P.P.P.P.P.p.K]0^f^g^0*h^p.Z)1=a i^*.P.P.P.P.P.P.P.P.j^k^l^m^n^o^p^q^r^#^s^i]t^u^v^w^x^r+P.P.P.P.P.P.P.P.P.y^z^A^B^C^(^!]F{)]e{D^E^F^G^H^I^ ", -" P.J^K^| !@L^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M :.N^. T^E@U^U^L~>)}-K]Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.V^W^X^Y^Z^`^ /./+/#^s^@/#/$/%/++P.P.P.P.P.P.P.P.P.P.P.P.Q.&/*/=/-/;/f{e{>/D{C{,/'/)/ ", -" P.j*7.M~A*A*!/~/U&{/w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.7@_/b!D+|%]~~~://D{c{b{d/e/ ", -" P.f/g/L!e*!/=&T.V*V*x*h/;*9]i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#}.k/<]l/m/>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.n/o/p/3/q/5/r/s/t/u/P.P.P.P.P.P.P.P.P.P.P.P.P.P.Q.M.F#f.v/w/x/y/c{C{b{a{z/A/ ", -" P.q!-+-+%@!*B/!@C/!=x*x*c+({Q*e*D/*+E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+F/S&G/:&H/=*I/L{< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.J/K/L/M/q/N/O/P/Q/Q.P.P.P.P.P.P.P.P.P.P.P.P.Q.O.l+%.B.s I R/S/T/U/B{${A{V/W/ ", -" P.7.i*X/!*}-L{0*M{N{-*. x&,.`)_&s{Y/O!e*Z/}-E/c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)`/D+ (.(. 7]*++(9]-*@(g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.N.#($(%(M/&(*(=(-(;(P.P.P.P.P.P.P.P.P.P.P.Q.P.;.q$$.N M L K q >(,('(A{0{#{)(!(~( ", -" P.=&]&]&}-*+:]F=F==~<]5.V&S.[]5.{(Z//=/#X*](e*s%V{!*^(v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&/(:&p{((f^I/p=*+0^0*_(=~N{F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.:(<([(%(}(3/|(1(2(P.P.P.P.P.P.P.P.P.P.P.P.3.[.[.O+%$P N M v t 3(4(5(6(z{@{9{7(8( ", -" P.3]Q*Q**+I]J]N{N{}=K]W{L]M]p.N]w O]P]Q]9(0(a(k{/=b(6.c(~~b%d(M [+4.Q@C+p+2+P.P.P.P.a)[*e(f(g(b%!*}-*+0^F=h(-*-*-*=~N{F=F=< 9 &.3.n.p+P.Q.P.P.P.R/i(j(k(l(3/m(n(o(P.P.P.P.P.P.P.P.P.P.Y$k.2.p(}.=%`.g.q(N M v e.r(s(t(y{9{8{u(v( ", -" P.c+_&_&2^M{3^=~=~4^5.L]5^p.6^.*7^Z)}*8^g*! m 9^O^w(x(y(z(#!&@L~|%A(.*N 0%P.P.P.P.P.B(C(D(f([-. !*}-L^-&F==~-*-*-*-*-*-*-*=~N{F=-*.*0 P }.I.O.r+E(F(G(H(%(I(J(K(o%P.P.P.P.P.P.P.O.p+_#-%R+4.2.k.m+[.O+&.%.O N ^+L(M(N(8{8{x~O(P( ", -" P.R*I!`)Q(2^=~-*-*M^V&5]S.< i&N^Q]O^P^Q^1=R^9 a H I S^M R(S(L^!@]~~~|%T(x&N)< ..n.P.G/:&D+N)b%U(7]+(9]0*N{=~-*-*-*-*-*-*-*-*-*-*-*=~N{V(W(X(Y(Z(`( _._+_k(@_#_$_P.P.P.P.P.P.O.R@1+++_*M.:#J.4.3.~!>.i.`.&.g.#.N %_&_*_x~ {w~=_-_;_ ", -" P.[=!=>_!=!=d^L~,_'_w*S.p.< .*w Z)Y&]/V]^/) A.//H (/M@M P g.`.}.}.{+< [ ~ :/)_O'S&[-`/D(N)[-%@!*!_~_0*F=N{{_-*-*-*-*-*-*-*-*-*-*-*-*-*]_^_/_(_(___:_._<_H([_}_|_#+Q.P.P.O.O.O.p+P.P.n%p+M.K.I.4.2!2.}.-.<.O+g.P 1_2_3_7{7{4_5_6_7_8_9_0_ ", -" P.a_U^b_d^c_P{X*X*X*](,#S&F=i/O]Z)}*Q^j/! ) 0 S]r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B(:&D+N).(. !**+9]0*F==~}=-*-*-*-*-*-*-*-*-*-*-*-*-*d_e_f_g_h_i_j_k_l_+_m_n_o_&.M.$+P.P.O.P.P.P.P.P.q+p+M.Q@I.n+<%M&p_}.[.`.&.q_r_s_4_6{Z~5{t_u_v_w_x_ ", -" P.8+v+1.Z)D+~~,#/=1*y_z_e*s%s%,#O'F=E/1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+p{[-. !*v&*+I]F=N{=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*A_B_C_D_E_F_G_H_._<_I_J_K_w*< .*o+P.P.P.P.P.P.P.P.O.R@S+o+n.f@r$G.~!}.[.`.L_M_N_Z~5{Y~O_P_Q_R_S_T_ ", -" P.#+8+9+#+_+w b%U_V_=+e*s%k{~/W_X_{!!@Y_Z_c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+`_.(. !*v&L^0*F=N{ :-*-*-*-*-*-*-*-*-*-*-*-*-*-*.:+:@:@:#:$:%:j_&:l_*:=:-:-*-*F=n.P.P.P.P.P.P.P.P.P.q+F$M.L.Q@}+-$3.1.k.}.;:>:,:O_O_4{':):!: ", -" Q.a+ v+p+M Z)~: (|%=+:={:,.]:]:{!,#~ '_P^v h.`.[.k. +4.J.o+p+P.P.P.P.P.^:g(f^U]p=/:9]'_N{(:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=_:::<:H_&:[:}:|:-*-*F=n.P.P.P.P.P.P.P.P.P.P.O.N&N.:@o+m.I.4.2.G#1:2:3:3{3{4:5:6: ", -" 8+#+R+N 1=[]7:|%=+,.8:&@L~a&a&^=~ 2^9:N [+4.Q@C+p+2+P.P.P.P.[-0:. 7]}-9]0*F=N{R]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=a:b:c:j_k_d:e:f:g:-*F=n.P.P.P.P.P.P.P.P.P.P.P.n%O.S+C+o+n.J.-$[+h:i:j:@]2{2{k:l: ", -" $+P.4.g.H O]m:V{n:,#a&V{T(o:;*x&a!*+p:Z.0%P.P.P.P.P.b%. !*}-*+9]0*F==~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q:r:s:t:H_&:u:v:w:-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.o+Q@n.x:y:z:A:+]+]1{B:C: ", -" Q.O.I.F.N O]b%~~]~|%D:U&~ !@O'S&a)E:w M o+P.b%7:!*F:9]0*G:h(-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*H:I:J:K:<:H_L:M:N:T&F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.p+M.M.O:P:Q:R:R:R:|{S:T: ", -" P.O.M.o+g.w =*U:U&V:W:a)X::&D+`_.(+(. !*}-*+0*Y:Z:=~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:`: <.< ", -" P.P.P.P.p+N < =*,<`/X:N)^:.(%@U(}-v&L^0*'<)<}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*(:!<~<{<.[,['[r},}'}&}{|,| ", -" '|)| ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.R@!~~~O.P.P.P.P.o*l*(&+~{~]~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.^~l*(&!*}-/~0*(~_~s![-:~<~=&E&=&=&=&y*[~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$}~s !*. a)C!|~1~2~2~/#/#e*1*/#e*3~. 4~K.P.P.P.P.P.P.P.P.P.P.p+5~6~7~8~9~P.P.P.P.P.P.P.0~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.a~/&/&}-*+b~F=F=s!c~5.V&S.d~-*e~f~g~9&R*R*h~i~X)j~k~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r l~}*i&V&_~m~n~N):&[*D+o~W)p~) P+J.P.P.O.P.P.P.P.P.P.P.P.M.q~r~s~t~u~v~w~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.$+0 x~ ", +" P.Q!L!L!*+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~H~S&M)1~Y!1~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M I~! W)J~5.(~K~[-o~-*S.)*L~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.M.M~N~O~P~Q~R~S~T~U~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.P...i&V~W~ ", +" P.X~2*H!Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{Q ${%{&{F!*{={F!|%. S.-{v I.a+$+#+Q.P.P.P.P.P.P.P.p.A~${;{>{0*,{p.W)1=a '{*.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){!{~{{{]{^{/{({_{:{P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.g.W).*E~<{i& ", +" P.[{}{| !@|{s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M :.2{. 8{E@9{9{M!>)}-A~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){0{a{b{c{d{P~e{f{g{h{i{P.P.P.P.P.P.P.P.P.P.P.P.Q.P.n.`.! W)N%Y&j{E~w ", +" P.j*7.N!A*A*k{l{U&m{w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.7@r{1!D+|%C!A!s{t{}-s!5{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.u{v{w{x{y{z{A{B{C{D{E{F{G{P.P.P.P.P.P.P.P.P.P.Q.n.f*H L~H{I{L~n{}*J{K{ ", +" P.L{M{l!e*k{=&T.V*V*x*N{;*o~O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#}.Q{c~R{S{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{v{U{V{W{X{Y{Z{`{ ].]+]@]#]$]P.P.P.P.P.P.Q.M.F#f.A.0 9 ) ! 1=%]5{N%3{ ", +" P.0!-+-+%@!*&]!@*]!=x*x*c+`!Q*e*=]*+-]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+;]S&>]:&,]=*']/~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{)]!]~]{]]]^]/](]_]:]<][]}]|]1]T+P.P.Q.O.l+%.B.s I H r{F E ! 1=1=x~@{ ", +" P.7.i*2]!*}-/~0*(~_~-*. x&,.X)_&'~3]n!e*4]}--]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)5]D+6]7]. m~*+8]o~-*9]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{0]a]b]c]d]e]f]g]h]i]j]k]l]m]n]o]P.;.q$$.N M L K r c a p]9 ) ! q]r] ", +" P.=&]&]&}-*+b~F=F=s!c~5.V&S.d~5.s]4]/=/#X*t]e*s%3~!*u]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&v]:&;~w];{']p=*+${0*x]s!_~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{y]z]A]B]C]D]E]F]G]H]I]J]K]L]M]N]O]P]O+%$P N M v t I H I~#{9 ) l~Q] ", +" P.i~Q*Q**+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~R]S]T]%~/=U]6.V]A!b%W]M [+4.Q@C+p+2+P.P.P.P.a)[*X]Y]Z]b%!*}-*+${F=`]-*-*-*s!_~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.M.T{0{ ^.^+^@^#^$^%^&^*^=^-^;^>^,^'^)^!^~^{^`.g.]^N M v ..K ^^:.a 0 n /^ ", +" P.c+_&_&Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{3{(^_^:^<^.!&@M!|%[^.*N 0%P.P.P.P.P.}^|^1^Y][-. !*}-|{-&F=s!-*-*-*-*-*-*-*s!_~F=-*.*0 P }.I.O.Q.Q.Q.P.M.T{)]2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^h^i^j^k^e@&.%.O N ^+7{{@s r l^r{m^ ", +" P.R*i!X)n^Y~s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M o^p^|{!@C!A!|%q^x&N)< ..n.P.>]:&D+N)b%r^m~8]o~0*_~s!-*-*-*-*-*-*-*-*-*-*-*s!_~F=5.E~9 ..&.I.P.O.s^v{t^u^v^w^x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^&.g.#.N +.v ..s Y.r H ", +" P.[=!=P^!=!=={M!Q^R^w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.}.{+< [ ~ s{S^O'S&[-5]1^N)[-%@!*T^D!0*F=_~U^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!_~_~V&E~1=9 V^W^X^Y^Z^`^ /./+/@/#/$/%/&/&^*/=/-/;/>/,/'/)/!/~/O+g.P $.N >~v .. .s ", +" P.{/9{]/={^/<~X*X*X*t],#S&F=O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%}^:&D+N)7]. !**+o~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!F=//(/_/:/(,('()(!(~({(](^(f*&.g.}~P ", +" Q.a+ v+p+M W)/(6]|%=+:=((,._(_(;!,#~ R^4{v h.`.[.k. +4.J.o+p+P.P.P.P.P.:(Z];{K~p=<(o~R^_~[(}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_~}(m/|(1(2(3(4(5(6(7(8(9(0(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(:+f*&. ", +" 8+#+R+N 1=d~t(|%=+,.u(&@M!a&a&^=~ Y~j{N [+4.Q@C+p+2+P.P.P.P.[-v(. m~}-o~0*F=_~H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*A~w*R]w(x(y(z(A(B(C(D(E(&/F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(`(`.[.<. ", +" $+P.4.g.H E~ _3~._,#a&3~q^+_;*x&|!*+@_Z.0%P.P.P.P.P.b%. !*}-*+o~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+#_$_%_&_*_=_-_;_>_,_'_)_!_~_{_]_^_/_(___:_<_P([_}_|_1_2_3_4_5_6_7_8_k.}. ", +" Q.O.I.F.N E~b%A!C!|%9_U&~ !@O'S&a)0_w M o+P.b%t(!*a_o~0*b_`]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&0*s!c_d_e_f_g_h_i_j_k_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_C_D_E_F_G_[.2.<+ ", +" P.O.M.o+g.w =*H_U&I_J_a)K_:&D+S/7]8]. !*}-*+0*L_M_s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*N_p.p.O_P_Q_R_S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:~:}+I.-$4. ", +" P.P.P.P.p+N < =*{:5]K_N):(7]%@r^}-v&|{0*]:^:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*l~g*x~/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:I%M.L.K.-$4. ", +" P.Q.#+$+M. .Z*l:%@!*. m:v&m{n:F=[(H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Y&C.o:p:q:r:s:t:u:v:w:x:y:z:A:B:B:C:[_D:E:F:G:H:I:J:K:L:M:N:O:2+O.++o+n. ", +" P.#+$+a+f@H P:_~^:Q:L_T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1=1=f*R:S:T:U:V:W:X:Y:Z:`: <.<+<.<@<#<*:$<%<&<*<=<-<;<><,[,['[)[x_![~[{[][H/^[/[([U~ ", +" P.P.O.O.M.&.1=w*y~_[:[<[[[}[|[1[2[3[4[5[6[7[8[ ", +" P.P.P.P.J.9[0[a[b[c[d[e[f[g[h[i[G_ ", +" |+j[k[l[m[n[o[p[q[r[s[ ", +" t[u[v[w[x[y[ ", +" z[A[B[ ", +" ", +" ", +" ", " ", " "}; diff --git a/src/Mod/Ship/Icons/SimStopIco.png b/src/Mod/Ship/Icons/SimStopIco.png new file mode 100644 index 0000000000000000000000000000000000000000..43a2121b8423528b40eba3569367a7103ebe9b6f GIT binary patch literal 13235 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 c #E7E7E7", +", c #E7E6E7", +"' c #E6E6E6", +") c #5F5F5F", +"! c #606060", +"~ c #868686", +"{ c #AEAEAE", +"] c #C3C2C2", +"^ c #D1D1D1", +"/ c #E4E3E3", +"( c #E5E6E5", +"_ c #E6E5E5", +": c #E5E4E5", +"< c #6B6B6B", +"[ c #7B7A7A", +"} c #888889", +"| c #ABABAB", +"1 c #D5D5D5", +"2 c #E5E6E6", +"3 c #E5E5E5", +"4 c #E4E5E4", +"5 c #E4E4E4", +"6 c #E3E3E3", +"7 c #E3E3E2", +"8 c #E2E2E2", +"9 c #5E5E5E", +"0 c #5D5D5D", +"a c #5C5C5C", +"b c #5B5B5C", +"c c #5A5B5B", +"d c #838484", +"e c #BABABA", +"f c #DEDEDE", +"g c #E2E3E2", +"h c #E1E2E2", +"i c #E1E1E2", +"j c #E0E1E0", +"k c #E1E1E1", +"l c #EAE9E9", +"m c #5E5F5F", +"n c #5E5D5E", +"o c #5C5D5C", +"p c #5B5C5B", +"q c #5B5A5A", +"r c #5A5A5A", +"s c #595959", +"t c #595858", +"u c #585857", +"v c #575757", +"w c #686868", +"x c #909090", +"y c #BEBEBE", +"z c #D3D2D3", +"A c #E0E0E0", +"B c #E0DFE0", +"C c #E0DFDF", +"D c #DEDEDF", +"E c #5F5E5E", +"F c #5E5D5D", +"G c #5C5B5B", +"H c #5B5B5B", +"I c #5A5A59", +"J c #595A59", +"K c #595859", +"L c #585757", +"M c #565656", +"N c #555555", +"O c #545455", +"P c #545454", +"Q c #676666", +"R c #717272", +"S c #8B8B8A", +"T c #B7B7B8", +"U c #DFDFDF", +"V c #DDDDDD", +"W c #DCDDDD", +"X c #DDDCDC", +"Y c #E8E9E9", +"Z c #5D5E5E", +"` c #5C5B5C", +" . c #595958", +".. c #585858", +"+. c #565657", +"@. c #555556", +"#. c #545554", +"$. c #555454", +"%. c #535354", +"&. c #525252", +"*. c #525251", +"=. c #515050", +"-. c #4F5050", +";. c #4F4F50", +">. c #4E4F4F", +",. c #959595", +"'. c #CAC9C9", +"). c #D9D9DA", +"!. c #DADBDA", +"~. c #DCDCDC", +"{. c #DDDDDC", +"]. c #DBDCDB", +"^. c #DBDBDB", +"/. c #DADADB", +"(. c #DADADA", +"_. c #E8E8E9", +":. c #5B5A5B", +"<. c #505151", +"[. c #505050", +"}. c #4F4F4F", +"|. c #4E4D4E", +"1. c #4D4D4D", +"2. c #4C4D4D", +"3. c #4C4C4C", +"4. c #4B4B4B", +"5. c #707070", +"6. c #959596", +"7. c #AAAAAA", +"8. c #BFBEBF", +"9. c #D7D7D6", +"0. c #DADAD9", +"a. c #D9DADA", +"b. c #D8D9D9", +"c. c #5B5C5C", +"d. c #5A5B5A", +"e. c #5A5959", +"f. c #565757", +"g. c #535353", +"h. c #535253", +"i. c #505150", +"j. c #4F504F", +"k. c #4E4E4E", +"l. c #4C4B4B", +"m. c #494A49", +"n. c #494949", +"o. c #484747", +"p. c #6C6C6C", +"q. c #C7C7C7", +"r. c #DAD9D9", +"s. c #D9D8D9", +"t. c #D9D8D8", +"u. c #D8D8D8", +"v. c #D8D8D7", +"w. c #D7D8D8", +"x. c #D7D7D7", +"y. c #D6D6D6", +"z. c #D5D5D6", +"A. c #5E5E5D", +"B. c #595A5A", +"C. c #575656", +"D. c #545555", +"E. c #4F4E4E", +"F. c #4E4E4D", +"G. c #4C4D4C", +"H. c #4C4B4C", +"I. c #4A4A4A", +"J. c #494A4A", +"K. c #494848", +"L. c #484847", +"M. c #474747", +"N. c #474646", +"O. c #454545", +"P. c #444444", +"Q. c #434343", +"R. c #434243", +"S. c #6D6D6D", +"T. c #A7A8A7", +"U. c #D0D0D0", +"V. c #D4D4D4", +"W. c #D6D5D5", +"X. c #E7E8E8", +"Y. c #59595A", +"Z. c #535454", +"`. c #515151", +" + c #4D4D4C", +".+ c #464647", +"++ c #464545", +"@+ c #444545", +"#+ c #424242", +"$+ c #414141", +"%+ c #404041", +"&+ c #3F4040", +"*+ c #787878", +"=+ c #969696", +"-+ c #A7A7A7", +";+ c #C3C3C2", +">+ c #D5D4D5", +",+ c #D4D4D5", +"'+ c #D3D4D4", +")+ c #D3D3D3", +"!+ c #D2D3D3", +"~+ c #E6E7E6", +"{+ c #5A5A5B", +"]+ c #575858", +"^+ c #575657", +"/+ c #555656", +"(+ c #565555", +"_+ c #525352", +":+ c #515051", +"<+ c #4D4D4E", +"[+ c #4D4C4C", +"}+ c #4A4A49", +"|+ c #474848", +"1+ c #464747", +"2+ c #444544", +"3+ c #434342", +"4+ c #434142", +"5+ c #404141", +"6+ c #403F3F", +"7+ c #3F3E3E", +"8+ c #3E3E3E", +"9+ c #3D3D3D", +"0+ c #3C3C3C", +"a+ c #404040", +"b+ c #707071", +"c+ c #A4A5A5", +"d+ c #D4D3D3", +"e+ c #D3D2D2", +"f+ c #D2D2D2", +"g+ c #D2D2D1", +"h+ c #D1D0D0", +"i+ c #D0D1D0", +"j+ c #CFD0CF", +"k+ c #525353", +"l+ c #525152", +"m+ c #504F4F", +"n+ c #4B4A4A", +"o+ c #484848", +"p+ c #464646", +"q+ c #454544", +"r+ c #454444", +"s+ c #424343", +"t+ c #414142", +"u+ c #403F40", +"v+ c #3F3F3F", +"w+ c #3C3D3C", +"x+ c #3B3B3B", +"y+ c #3A3A3A", +"z+ c #3A3A39", +"A+ c #383838", +"B+ c #373737", +"C+ c #474847", +"D+ c #7F7F7F", +"E+ c #B6B6B6", +"F+ c #C8C9C8", +"G+ c #CBCBCB", +"H+ c #CFD0D0", +"I+ c #D0D0CF", +"J+ c #D0CFD0", +"K+ c #CFCFCF", +"L+ c #CECECE", +"M+ c #CECDCE", +"N+ c #545453", +"O+ c #525151", +"P+ c #4F4E4F", +"Q+ c #4A4B4B", +"R+ c #4A494A", +"S+ c #474647", +"T+ c #454645", +"U+ c #404140", +"V+ c #3E3E3F", +"W+ c #3D3E3E", +"X+ c #3D3C3C", +"Y+ c #3C3B3C", +"Z+ c #3C3B3B", +"`+ c #3A3939", +" @ c #383839", +".@ c #363637", +"+@ c #353636", +"@@ c #353535", +"#@ c #343434", +"$@ c #333333", +"%@ c #7B7B7C", +"&@ c #919190", +"*@ c #ACACAB", +"=@ c #C9C9C9", +"-@ c #CECFCE", +";@ c #CECECD", +">@ c #CDCDCD", +",@ c #CDCDCC", +"'@ c #CCCCCC", +")@ c #CCCCCB", +"!@ c #858585", +"~@ c #E6E5E6", +"{@ c #585859", +"]@ c #565655", +"^@ c #545354", +"/@ c #4E4F4E", +"(@ c #4C4C4D", +"_@ c #4B4B4A", +":@ c #484748", +"<@ c #434344", +"[@ c #3D3C3D", +"}@ c #393839", +"|@ c #373636", +"1@ c #333334", +"2@ c #323332", +"3@ c #323232", +"4@ c #313131", +"5@ c #303131", +"6@ c #383939", +"7@ c #50504F", +"8@ c #7E7F7E", +"9@ c #B6B7B6", +"0@ c #CBCBCC", +"a@ c #CBCBCA", +"b@ c #CACACA", +"c@ c #CAC9CA", +"d@ c #575857", +"e@ c #515150", +"f@ c #4A4A4B", +"g@ c #494849", +"h@ c #474746", +"i@ c #464547", +"j@ c #434444", +"k@ c #424141", +"l@ c #3D3D3E", +"m@ c #3B3C3B", +"n@ c #3B3B3A", +"o@ c #383737", +"p@ c #363737", +"q@ c #363636", +"r@ c #353635", +"s@ c #343433", +"t@ c #333233", +"u@ c #313132", +"v@ c #323131", +"w@ c #303030", +"x@ c #2F2F2F", +"y@ c #2F2F2E", +"z@ c #2E2E2F", +"A@ c #2D2C2D", +"B@ c #2C2D2D", +"C@ c #2C2C2C", +"D@ c #2C2B2C", +"E@ c #939393", +"F@ c #B9BAB9", +"G@ c #C0C0C0", +"H@ c #C7C6C7", +"I@ c #CACAC9", +"J@ c #C9C9C8", +"K@ c #C8C8C9", +"L@ c #C8C8C8", +"M@ c #585758", +"N@ c #535152", +"O@ c #504F50", +"P@ c #4B4C4A", +"Q@ c #494948", +"R@ c #454646", +"S@ c #434443", +"T@ c #414241", +"U@ c #3F3F40", +"V@ c #3F3E3F", +"W@ c #3E3E3D", +"X@ c #3D3C3E", +"Y@ c #393939", +"Z@ c #373838", +"`@ c #363535", +" # c #343334", +".# c #313232", +"+# c #2E2E2E", +"@# c #2D2D2D", +"## c #2C2B2B", +"$# c #2B2B2B", +"%# c #2A2A2A", +"&# c #29292A", +"*# c #292929", +"=# c #282828", +"-# c #383938", +";# c #5D5E5D", +"># c #7A797A", +",# c #919191", +"'# c #B3B2B3", +")# c #C8C7C8", +"!# c #C8C7C7", +"~# c #C8C8C7", +"{# c #C7C7C6", +"]# c #C6C6C7", +"^# c #C6C6C5", +"/# c #9D9D9D", +"(# c #E4E4E5", +"_# c #4A4B4A", +":# c #484949", +"<# c #474748", +"[# c #444443", +"}# c #424241", +"|# c #3C3D3D", +"1# c #3B3A3B", +"2# c #383837", +"3# c #353434", +"4# c #333434", +"5# c #313031", +"6# c #302F2F", +"7# c #2D2D2E", +"8# c #2A2B2B", +"9# c #292A2A", +"0# c #292828", +"a# c #282928", +"b# c #272727", +"c# c #262626", +"d# c #242524", +"e# c #C6C6C6", +"f# c #C5C5C5", +"g# c #C5C5C6", +"h# c #424243", +"i# c #3B3A3A", +"j# c #383738", +"k# c #343534", +"l# c #343333", +"m# c #313130", +"n# c #302F30", +"o# c #2D2C2C", +"p# c #2C2C2D", +"q# c #272626", +"r# c #252625", +"s# c #262525", +"t# c #242424", +"u# c #232423", +"v# c #222223", +"w# c #222222", +"x# c #212121", +"y# c #1F1F20", +"z# c #30302F", +"A# c #6A696A", +"B# c #A0A09F", +"C# c #C5C6C5", +"D# c #E3E4E4", +"E# c #555655", +"F# c #535352", +"G# c #4E4D4D", +"H# c #424142", +"I# c #414040", +"J# c #3F403F", +"K# c #3C3C3D", +"L# c #39393A", +"M# c #383637", +"N# c #323233", +"O# c #323132", +"P# c #303031", +"Q# c #2F2E2E", +"R# c #2E2E2D", +"S# c #2B2C2C", +"T# c #2B2A2A", +"U# c #272627", +"V# c #252525", +"W# c #242423", +"X# c #232222", +"Y# c #212221", +"Z# c #202021", +"`# c #202020", +" $ c #1F1F1F", +".$ c #1E1E1F", +"+$ c #1E1D1D", +"@$ c #1D1C1D", +"#$ c #C4C5C5", +"$$ c #C4C4C4", +"%$ c #525253", +"&$ c #515252", +"*$ c #4E4E4F", +"=$ c #4D4C4D", +"-$ c #4B4A4B", +";$ c #414041", +">$ c #3C3C3B", +",$ c #393938", +"'$ c #363536", +")$ c #353435", +"!$ c #333433", +"~$ c #2B2A2B", +"{$ c #2A2B2A", +"]$ c #292829", +"^$ c #262627", +"/$ c #252624", +"($ c #252424", +"_$ c #222322", +":$ c #20201F", +"<$ c #1E1F1E", +"[$ c #1D1D1D", +"}$ c #1C1D1D", +"|$ c #1C1C1C", +"1$ c #C4C5C4", +"2$ c #4F4F4E", +"3$ c #444344", +"4$ c #3E3F3E", +"5$ c #3E3D3E", +"6$ c #393A39", +"7$ c #393838", +"8$ c #363736", +"9$ c #2F302F", +"0$ c #2D2E2D", +"a$ c #2E2D2E", +"b$ c #2D2D2C", +"c$ c #2B2B2C", +"d$ c #2B2B2A", +"e$ c #262526", +"f$ c #242324", +"g$ c #232324", +"h$ c #212222", +"i$ c #202121", +"j$ c #1F2020", +"k$ c #1F1F1E", +"l$ c #1D1C1C", +"m$ c #1B1B1C", +"n$ c #C4C4C3", +"o$ c #E3E2E3", +"p$ c #555455", +"q$ c #515251", +"r$ c #4B4C4C", +"s$ c #3D3E3D", +"t$ c #3B3D3C", +"u$ c #3A3A3B", +"v$ c #373837", +"w$ c #373637", +"x$ c #2F2E2F", +"y$ c #232323", +"z$ c #1E1E1D", +"A$ c #1B1C1C", +"B$ c #1C1B1B", +"C$ c #1B1B1B", +"D$ c #C3C4C4", +"E$ c #C3C3C3", +"F$ c #464546", +"G$ c #3E3F3F", +"H$ c #3E3D3D", +"I$ c #3D3D3C", +"J$ c #3A3B3B", +"K$ c #323333", +"L$ c #313030", +"M$ c #2F3030", +"N$ c #2E2F2F", +"O$ c #2D2D2B", +"P$ c #2A2B29", +"Q$ c #292A29", +"R$ c #282726", +"S$ c #202120", +"T$ c #1E1E1E", +"U$ c #19191A", +"V$ c #C3C3C4", +"W$ c #E2E1E1", +"X$ c #4A4949", +"Y$ c #484849", +"Z$ c #3A3B3A", +"`$ c #373738", +" % c #373736", +".% c #252425", +"+% c #222122", +"@% c #212122", +"#% c #1A1B1B", +"$% c #1B1A1A", +"%% c #1A1919", +"&% c #E2E1E2", +"*% c #E1E0E1", +"=% c #505051", +"-% c #49494A", +";% c #1A1A1A", +">% c #3A393A", +",% c #2E2F2E", +"'% c #282727", +")% c #242425", +"!% c #232322", +"~% c #1E1F1F", +"{% c #1B1C1B", +"]% c #1A191A", +"^% c #191A19", +"/% c #191918", +"(% c #C2C2C2", +"_% c #E0E1E1", +":% c #E1E1E0", +"<% c #4B4B4C", +"[% c #454445", +"}% c #161515", +"|% c #8B8B8B", +"1% c #2C2C2B", +"2% c #282827", +"3% c #272728", +"4% c #262727", +"5% c #1F1E1F", +"6% c #1A1A19", +"7% c #181818", +"8% c #C1C1C2", +"9% c #E1E0E0", +"0% c #464746", +"a% c #111111", +"b% c #7C7C7C", +"c% c #BBBBBB", +"d% c #969697", +"e% c #5F5F5C", +"f% c #33332F", +"g% c #28292A", +"h% c #262726", +"i% c #201F20", +"j% c #1F201F", +"k% c #191919", +"l% c #171717", +"m% c #4C4C4B", +"n% c #444445", +"o% c #444343", +"p% c #1A1717", +"q% c #211515", +"r% c #2D2B2B", +"s% c #999999", +"t% c #B3B3B5", +"u% c #8B8BB2", +"v% c #6F6F89", +"w% c #4A4A4F", +"x% c #2A2929", +"y% c #2B2C2B", +"z% c #2A292A", +"A% c #232424", +"B% c #212120", +"C% c #181718", +"D% c #171818", +"E% c #171716", +"F% c #C1C1C1", +"G% c #C0C1C1", +"H% c #DFE0E0", +"I% c #484948", +"J% c #422121", +"K% c #552D2D", +"L% c #363232", +"M% c #A0A0A0", +"N% c #646464", +"O% c #ABABAE", +"P% c #7575C7", +"Q% c #5C5CD5", +"R% c #7878BD", +"S% c #7B7B8E", +"T% c #585855", +"U% c #30302E", +"V% c #2A2A29", +"W% c #212020", +"X% c #201E1F", +"Y% c #1E1D1E", +"Z% c #1C1C1D", +"`% c #1A1B1A", +" & c #191A1A", +".& c #171616", +"+& c #161616", +"@& c #C0C0C1", +"#& c #414242", +"$& c #1F1C1C", +"%& c #542424", +"&& c #4C2625", +"*& c #585756", +"=& c #A8A8A8", +"-& c #767677", +";& c #9D9D9E", +">& c #8A8AAD", +",& c #5A5AC4", +"'& c #3838D7", +")& c #3434D9", +"!& c #4848BD", +"~& c #535372", +"{& c #878888", +"]& c #A4A4A4", +"^& c #A7A6A6", +"/& c #B0B0B0", +"(& c #B1B1B1", +"_& c #A1A1A1", +":& c #808080", +"<& c #151515", +"[& c #242525", +"}& c #1D1E1E", +"|& c #1A1A1B", +"1& c #191819", +"2& c #181817", +"3& c #161717", +"4& c #151516", +"5& c #C1C0C0", +"6& c #DFDEDE", +"7& c #5B2020", +"8& c #391A19", +"9& c #A4A4A5", +"0& c #878687", +"a& c #8E8E8E", +"b& c #9B9B98", +"c& c #999994", +"d& c #888898", +"e& c #6C6BA8", +"f& c #4F4FBD", +"g& c #50508B", +"h& c #CECDCD", +"i& c #6A6A6A", +"j& c #242323", +"k& c #222121", +"l& c #1F1E1E", +"m& c #1C1D1C", +"n& c #151514", +"o& c #BFC0BF", +"p& c #DFDFDE", +"q& c #434445", +"r& c #3F3E40", +"s& c #1B1212", +"t& c #611717", +"u& c #301414", +"v& c #797878", +"w& c #9C9C9D", +"x& c #888888", +"y& c #8A8A89", +"z& c #868688", +"A& c #7C7C8F", +"B& c #45455C", +"C& c #B8B8B8", +"D& c #C5C4C4", +"E& c #AAA9A9", +"F& c #252523", +"G& c #222323", +"H& c #171817", +"I& c #161516", +"J& c #141514", +"K& c #141313", +"L& c #C0BFBF", +"M& c #4D4E4E", +"N& c #464645", +"O& c #1B0F0F", +"P& c #570D0D", +"Q& c #270D0D", +"R& c #706F6F", +"S& c #838383", +"T& c #757474", +"U& c #878787", +"V& c #6F6F6F", +"W& c #5C5C5A", +"X& c #353533", +"Y& c #656565", +"Z& c #BCBCBC", +"`& c #BFBFBF", +" * c #C1C2C1", +".* c #696969", +"+* c #1D1D1E", +"@* c #191818", +"#* c #131313", +"$* c #DDDEDD", +"%* c #110F0F", +"&* c #220B0B", +"** c #201B1B", +"=* c #7D7D7C", +"-* c #727272", +";* c #898989", +">* c #BBBBBA", +",* c #BCBCBB", +"'* c #BDBDBD", +")* c #676868", +"!* c #7A7A7A", +"~* c #1D1D1C", +"{* c #181918", +"]* c #141414", +"^* c #131314", +"/* c #131312", +"(* c #BEBFBF", +"_* c #454546", +":* c #3B3B3C", +"<* c #181919", +"[* c #818181", +"}* c #656465", +"|* c #888787", +"1* c #9B9B9B", +"2* c #ADADAD", +"3* c #B4B4B4", +"4* c #B5B5B5", +"5* c #B5B5B4", +"6* c #B6B6B5", +"7* c #B6B6B7", +"8* c #B7B7B7", +"9* c #B7B8B8", +"0* c #767676", +"a* c #121213", +"b* c #212021", +"c* c #141413", +"d* c #111212", +"e* c #9A9A9A", +"f* c #515152", +"g* c #616162", +"h* c #949495", +"i* c #A6A6A6", +"j* c #AFAFAF", +"k* c #ACADAD", +"l* c #B2B2B2", +"m* c #B0B0AF", +"n* c #AFAFB0", +"o* c #B3B3B3", +"p* c #B5B4B4", +"q* c #1C1B1C", +"r* c #131414", +"s* c #121313", +"t* c #121212", +"u* c #BEBDBD", +"v* c #DCDCDD", +"w* c #6E6E6E", +"x* c #A5A5A5", +"y* c #A9A9A9", +"z* c #ABABAA", +"A* c #AAAAA9", +"B* c #ABA9A9", +"C* c #ABAAAB", +"D* c #ABABAC", +"E* c #ACACAC", +"F* c #666766", +"G* c #141314", +"H* c #1D1E1D", +"I* c #1B1A1B", +"J* c #131213", +"K* c #101111", +"L* c #586362", +"M* c #5D6F74", +"N* c #596767", +"O* c #555A58", +"P* c #A2A2A3", +"Q* c #A2A2A2", +"R* c #A3A3A3", +"S* c #A5A5A3", +"T* c #A6A7A7", +"U* c #A5A4A5", +"V* c #A8A7A7", +"W* c #A9A8A9", +"X* c #9C9C9C", +"Y* c #424342", +"Z* c #6C6D6C", +"`* c #101010", +" = c #151616", +".= c #131412", +"+= c #101110", +"@= c #0F0F0F", +"#= c #BDBCBD", +"$= c #DBDCDC", +"%= c #7FA3AE", +"&= c #79A5EC", +"*= c #5F80EB", +"== c #485FD4", +"-= c #4758B4", +";= c #516392", +">= c #586874", +",= c #55605F", +"'= c #393A3A", +")= c #2D2E2F", +"!= c #9E9E9E", +"~= c #979897", +"{= c #9A9B9B", +"]= c #929493", +"^= c #8C8D8D", +"/= c #979797", +"(= c #989999", +"_= c #969898", +":= c #979898", +"<= c #9B9C9C", +"[= c #A2A1A2", +"}= c #737272", +"|= c #A6A5A6", +"1= c #616161", +"2= c #1B1B1A", +"3= c #181717", +"4= c #161615", +"5= c #151414", +"6= c #121112", +"7= c #111110", +"8= c #7A9DAE", +"9= c #597AF5", +"0= c #5373F9", +"a= c #668CFC", +"b= c #5D80FC", +"c= c #5271FB", +"d= c #5576F5", +"e= c #739AE6", +"f= c #7495A5", +"g= c #607578", +"h= c #54646B", +"i= c #58686B", +"j= c #505A59", +"k= c #484B4B", +"l= c #323432", +"m= c #919292", +"n= c #959494", +"o= c #878686", +"p= c #7A7979", +"q= c #7C7777", +"r= c #807778", +"s= c #776F6F", +"t= c #706565", +"u= c #7B6C6B", +"v= c #847171", +"w= c #7C6B6B", +"x= c #746464", +"y= c #736262", +"z= c #7A6969", +"A= c #807070", +"B= c #807676", +"C= c #807C7C", +"D= c #949696", +"E= c #9E9F9F", +"F= c #757575", +"G= c #171617", +"H= c #151615", +"I= c #141415", +"J= c #121111", +"K= c #0F1010", +"L= c #0F0F10", +"M= c #0E0F0E", +"N= c #BDBDBC", +"O= c #5B6766", +"P= c #799CA3", +"Q= c #76979D", +"R= c #6F8D9F", +"S= c #97CEEF", +"T= c #76A2FB", +"U= c #4C69FC", +"V= c #1B27FD", +"W= c #3549F4", +"X= c #5979E3", +"Y= c #698DE4", +"Z= c #77A2F2", +"`= c #688EE1", +" - c #5C78C4", +".- c #576FA2", +"+- c #55697C", +"@- c #4D5C5F", +"#- c #333E39", +"$- c #3D3B37", +"%- c #6F6766", +"&- c #786868", +"*- c #7D6666", +"=- c #947676", +"-- c #9C7979", +";- c #9D7676", +">- c #AB7E7E", +",- c #BA8888", +"'- c #B88585", +")- c #B17E7E", +"!- c #B57E7E", +"~- c #BD8383", +"{- c #BD8181", +"]- c #B07777", +"^- c #A06A6A", +"/- c #956161", +"(- c #8A5B5B", +"_- c #7D5858", +":- c #755F5F", +"<- c #807878", +"[- c #7D7D7D", +"}- c #797979", +"|- c #131212", +"1- c #0F0F0E", +"2- c #0D0E0E", +"3- c #BCBBBC", +"4- c #DBDADB", +"5- c #424545", +"6- c #4F5756", +"7- c #9BD0D5", +"8- c #6D96FC", +"9- c #435DFC", +"0- c #3E55FC", +"a- c #5270FC", +"b- c #5878F8", +"c- c #4862F2", +"d- c #435DF8", +"e- c #4D6BF8", +"f- c #597BFC", +"g- c #5B7DFB", +"h- c #5E81FB", +"i- c #678DEF", +"j- c #7198D3", +"k- c #354658", +"l- c #5B4442", +"m- c #B6817F", +"n- c #C68B8B", +"o- c #C38787", +"p- c #C78888", +"q- c #CE8C8C", +"r- c #CA8686", +"s- c #C68181", +"t- c #C78080", +"u- c #C87F7F", +"v- c #C57B7B", +"w- c #C37777", +"x- c #C07373", +"y- c #C17271", +"z- c #C17070", +"A- c #BF6B6B", +"B- c #BB6767", +"C- c #B15F5F", +"D- c #9E5453", +"E- c #744343", +"F- c #302929", +"G- c #161617", +"H- c #141515", +"I- c #131413", +"J- c #100F10", +"K- c #0F0E0E", +"L- c #0E0E0E", +"M- c #0D0D0D", +"N- c #BBBCBB", +"O- c #DAD9DA", +"P- c #40403F", +"Q- c #739297", +"R- c #78A2E4", +"S- c #7AA6E2", +"T- c #86B1C5", +"U- c #6A879E", +"V- c #6A879A", +"W- c #708F95", +"X- c #7C9FA0", +"Y- c #5F7788", +"Z- c #576C96", +"`- c #5974B8", +" ; c #5774D8", +".; c #4B67F1", +"+; c #4661FD", +"@; c #3549D3", +"#; c #2F236D", +"$; c #A86F81", +"%; c #C17777", +"&; c #C27472", +"*; c #C17272", +"=; c #BE6F6F", +"-; c #BC6C6C", +";; c #BC6969", +">; c #BA6766", +",; c #B96363", +"'; c #B86060", +"); c #B75D5D", +"!; c #B55B5B", +"~; c #B35757", +"{; c #B25554", +"]; c #B15251", +"^; c #B04F4F", +"/; c #AF4C4C", +"(; c #AF4A49", +"_; c #763030", +":; c #291313", +"<; c #0C0C0C", +"[; c #BBBBBC", +"}; c #434241", +"|; c #49504F", +"1; c #697F7E", +"2; c #607270", +"3; c #464C4B", +"4; c #454748", +"5; c #3B3D3D", +"6; c #454848", +"7; c #4D5353", +"8; c #637D7F", +"9; c #7BA3C0", +"0; c #688EE9", +"a; c #364CD9", +"b; c #564EC6", +"c; c #8F639C", +"d; c #B06D77", +"e; c #B75A55", +"f; c #B55753", +"g; c #B25352", +"h; c #B15050", +"i; c #B04E4D", +"j; c #AE4A4A", +"k; c #AD4747", +"l; c #AC4444", +"m; c #AA4242", +"n; c #A93F3F", +"o; c #A83C3C", +"p; c #A63939", +"q; c #A53636", +"r; c #A43333", +"s; c #8F2C2C", +"t; c #451616", +"u; c #541A1A", +"v; c #663B3B", +"w; c #848383", +"x; c #1C1A1C", +"y; c #0E0F0F", +"z; c #0E0D0D", +"A; c #0D0D0C", +"B; c #BBBABB", +"C; c #BABBBA", +"D; c #D9DAD9", +"E; c #3E4645", +"F; c #5A6F74", +"G; c #7094BE", +"H; c #5A7EF1", +"I; c #3F52F7", +"J; c #4A49DD", +"K; c #6E3D9B", +"L; c #914B73", +"M; c #A13B45", +"N; c #A73735", +"O; c #A6332F", +"P; c #A42F2C", +"Q; c #A22C2B", +"R; c #A02B2C", +"S; c #9F2929", +"T; c #9E2626", +"U; c #9D2323", +"V; c #9B2020", +"W; c #9A1E1D", +"X; c #951919", +"Y; c #581010", +"Z; c #3B0909", +"`; c #7E1C1C", +" > c #671B1B", +".> c #2F2929", +"+> c #101011", +"@> c #0B0B0B", +"#> c #D8D9D8", +"$> c #3B3C3C", +"%> c #353534", +"&> c #353334", +"*> c #454949", +"=> c #6B8382", +"-> c #779FB5", +";> c #76A2EF", +">> c #5B72EE", +",> c #555CDE", +"'> c #623AA0", +")> c #762969", +"!> c #872F51", +"~> c #922C3C", +"{> c #952129", +"]> c #941619", +"^> c #950D0B", +"/> c #960B07", +"(> c #950B06", +"_> c #930907", +":> c #8F0707", +"<> c #680504", +"[> c #350200", +"}> c #4D0301", +"|> c #680D0E", +"1> c #391213", +"2> c #252E29", +"3> c #242B25", +"4> c #252A26", +"5> c #151415", +"6> c #121312", +"7> c #111211", +"8> c #10100F", +"9> c #0E0E0F", +"0> c #0D0C0D", +"a> c #0C0C0B", +"b> c #0A0A0B", +"c> c #B9BABA", +"d> c #2F2F30", +"e> c #313333", +"f> c #51656B", +"g> c #587293", +"h> c #5574C3", +"i> c #5170F4", +"j> c #4658F3", +"k> c #4A4BDB", +"l> c #5943B8", +"m> c #6B3E8F", +"n> c #793468", +"o> c #7F264C", +"p> c #7E1435", +"q> c #7E0320", +"r> c #82051B", +"s> c #70030D", +"t> c #2B0003", +"u> c #170002", +"v> c #3A0B12", +"w> c #35272C", +"x> c #3F5785", +"y> c #455FC7", +"z> c #4961B0", +"A> c #495E89", +"B> c #445664", +"C> c #3C4A49", +"D> c #0A0B0B", +"E> c #0A0A09", +"F> c #BAB9BA", +"G> c #2D2E2E", +"H> c #2E3030", +"I> c #323231", +"J> c #464C4C", +"K> c #6B8887", +"L> c #6C8FA1", +"M> c #6183BB", +"N> c #5071D2", +"O> c #4463E8", +"P> c #3E55F8", +"Q> c #414EED", +"R> c #4B45CF", +"S> c #5131AA", +"T> c #502EA3", +"U> c #2E1FA3", +"V> c #09089D", +"W> c #0A0B8D", +"X> c #202788", +"Y> c #5476B4", +"Z> c #7BAAF4", +"`> c #5879FB", +" , c #5D7FFD", +"., c #5C7FFB", +"+, c #658AF7", +"@, c #749FE8", +"#, c #6383A7", +"$, c #4B616A", +"%, c #394443", +"&, c #1C1F1F", +"*, c #100F0F", +"=, c #0B0B0C", +"-, c #0B0B0A", +";, c #0A0A0A", +">, c #090909", +",, c #B9B9B9", +"', c #333332", +"), c #303130", +"!, c #2E2D2D", +"~, c #2A2A2B", +"{, c #2B2D2D", +"], c #363F40", +"^, c #445358", +"/, c #526873", +"(, c #5C778D", +"_, c #607FA4", +":, c #5D7FBE", +"<, c #597ED6", +"[, c #577BE9", +"}, c #3E56B9", +"|, c #5E81D3", +"1, c #5574D4", +"2, c #425AD8", +"3, c #425BF1", +"4, c #3C54FB", +"5, c #3B52FC", +"6, c #4660FC", +"7, c #5574FC", +"8, c #5473FC", +"9, c #455FFC", +"0, c #4059F5", +"a, c #516EE2", +"b, c #6A91CA", +"c, c #587480", +"d, c #2E3636", +"e, c #0D0C0C", +"f, c #0C0B0C", +"g, c #0A090A", +"h, c #B8B9B8", +"i, c #D8D7D7", +"j, c #D7D7D8", +"k, c #333232", +"l, c #282B2C", +"m, c #363F41", +"n, c #4B5B5B", +"o, c #5B6F6D", +"p, c #3C4747", +"q, c #404D54", +"r, c #465861", +"s, c #495C67", +"t, c #577285", +"u, c #5E7EA0", +"v, c #5B7ABA", +"w, c #6084ED", +"x, c #5677FB", +"y, c #6388FC", +"z, c #82B3FB", +"A, c #86B8FB", +"B, c #5575FB", +"C, c #354AFC", +"D, c #4F6EF8", +"E, c #719BD3", +"F, c #62838E", +"G, c #4B6466", +"H, c #32403F", +"I, c #171919", +"J, c #0A0A0C", +"K, c #080908", +"L, c #070708", +"M, c #B9B8B9", +"N, c #B9B9B8", +"O, c #383937", +"P, c #2C2D2C", +"Q, c #252626", +"R, c #272C30", +"S, c #4E6676", +"T, c #5C7CB0", +"U, c #5A7CEB", +"V, c #4159FC", +"W, c #435CFC", +"X, c #374CFC", +"Y, c #3347FC", +"Z, c #1C27FD", +"`, c #222FFD", +" ' c #4864F7", +".' c #5C7EE9", +"+' c #7098D4", +"@' c #5A798B", +"#' c #394948", +"$' c #252A2A", +"%' c #0B0A0B", +"&' c #0B0A09", +"*' c #090808", +"=' c #070808", +"-' c #070707", +";' c #B8B7B8", +">' c #D6D7D7", +",' c #D7D6D7", +"'' c #343435", +")' c #2D2D2F", +"!' c #282929", +"~' c #2C2F2E", +"{' c #576E6D", +"]' c #6B90A6", +"^' c #658AE8", +"/' c #3245FD", +"(' c #3F56FC", +"_' c #84B6FB", +":' c #76A1DB", +"<' c #5370C0", +"[' c #4A65D9", +"}' c #455FF7", +"|' c #4661FA", +"1' c #5D7FE7", +"2' c #6D94B7", +"3' c #3C4D4D", +"4' c #0B0C0C", +"5' c #080809", +"6' c #060606", +"7' c #B7B8B7", +"8' c #D7D6D6", +"9' c #3F3F3E", +"0' c #363635", +"a' c #282829", +"b' c #1A1C1C", +"c' c #495F68", +"d' c #6B92CC", +"e' c #5474FC", +"f' c #75A0FB", +"g' c #769FA3", +"h' c #283137", +"i' c #364651", +"j' c #5B7A97", +"k' c #6C93DA", +"l' c #5979FB", +"m' c #4D6AFC", +"n' c #6283CF", +"o' c #4D676B", +"p' c #0D0D0E", +"q' c #0A0909", +"r' c #080808", +"s' c #070706", +"t' c #060605", +"u' c #D6D5D6", +"v' c #606061", +"w' c #272726", +"x' c #232223", +"y' c #212220", +"z' c #1C1C1B", +"A' c #3E4C4A", +"B' c #77A2C3", +"C' c #82B1EC", +"D' c #6A8F90", +"E' c #2B3332", +"F' c #55727E", +"G' c #6D95E0", +"H' c #658AFB", +"I' c #8EC3D8", +"J' c #283432", +"K' c #050505", +"L' c #B8B7B7", +"M' c #D6D6D5", +"N' c #C5C5C4", +"O' c #848484", +"P' c #252526", +"Q' c #181819", +"R' c #353E3D", +"S' c #4F6664", +"T' c #313D3D", +"U' c #111010", +"V' c #3F5255", +"W' c #53718E", +"X' c #688C93", +"Y' c #1D2425", +"Z' c #080707", +"`' c #050606", +" ) c #050406", +".) c #040404", +"+) c #B7B7B6", +"@) c #D3D3D2", +"#) c #292928", +"$) c #111312", +"%) c #0B0A0A", +"&) c #080807", +"*) c #080607", +"=) c #060505", +"-) c #050504", +";) c #D1D1D2", +">) c #858484", +",) c #272827", +"') c #0F100F", +")) c #0E0D0E", +"!) c #0C0D0C", +"~) c #080A09", +"{) c #090809", +"]) c #060707", +"^) c #060506", +"/) c #040505", +"() c #030303", +"_) c #B6B5B5", +":) c #CFCECF", +"<) c #CFCECE", +"[) c #BDBEBE", +"}) c #0E0D0F", +"|) c #0C0D0D", +"1) c #0C0B0B", +"2) c #0A0B0A", +"3) c #090A0A", +"4) c #070807", +"5) c #050506", +"6) c #040303", +"7) c #030403", +"8) c #020202", +"9) c #CFCFCE", +"0) c #CDCCCC", +"a) c #828282", +"b) c #252524", +"c) c #121011", +"d) c #0C0C0D", +"e) c #060706", +"f) c #020203", +"g) c #010202", +"h) c #B4B4B5", +"i) c #555554", +"j) c #CCCCCD", +"k) c #CBCCCB", +"l) c #CACBCA", +"m) c #0E0E0D", +"n) c #030404", +"o) c #010101", +"p) c #B5B4B5", +"q) c #B4B5B4", +"r) c #C9CACA", +"s) c #C8C9C9", +"t) c #C9C8C9", +"u) c #777877", +"v) c #121311", +"w) c #050405", +"x) c #040403", +"y) c #020201", +"z) c #000000", +"A) c #4F504E", +"B) c #C9C8C8", +"C) c #C7C7C8", +"D) c #C6C7C6", +"E) c #60605F", +"F) c #050404", +"G) c #000001", +"H) c #B3B4B4", +"I) c #C7C6C6", +"J) c #C5C6C6", +"K) c #C6C5C6", +"L) c #B2B3B3", +"M) c #949494", +"N) c #7E7E7E", +"O) c #171718", +"P) c #0D0E0D", +"Q) c #09090A", +"R) c #080909", +"S) c #070607", +"T) c #060504", +"U) c #020303", +"V) c #B3B3B4", +"W) c #666666", +"X) c #9F9F9F", +"Y) c #C4C3C4", +"Z) c #C2C2C3", +"`) c #C0C0BF", +" ! c #BCBBBB", +".! c #909191", +"+! c #141516", +"@! c #121211", +"#! c #0F0E0F", +"$! c #090908", +"%! c #070606", +"&! c #050605", +"*! c #020101", +"=! c #B2B3B2", +"-! c #4D4E4D", +";! c #929292", +">! c #C2C3C2", +",! c #C1C2C2", +"'! c #C2C1C2", +")! c #0B0C0B", +"!! c #030202", +"~! c #000100", +"{! c #B3B2B2", +"]! c #4B4C4B", +"^! c #464745", +"/! c #AFB0AF", +"(! c #ADAEAE", +"_! c #ABAAAA", +":! c #BFBFBE", +"~ c #565756", +",~ c #989998", +"'~ c #A0A1A0", +")~ c #A4A3A4", +"!~ c #B0B1B1", +"~~ c #B1B0B1", +"{~ c #B6B7B7", +"]~ c #787877", +"^~ c #757676", +"/~ c #747474", +"(~ c #8C8D8C", +"_~ c #9D9C9D", +":~ c #A8A8A7", +"<~ c #545353", +"[~ c #989797", +"}~ c #9F9F9E", +"|~ c #A0A1A1", +"1~ c #8C8C8B", +"2~ c #706F70", +"3~ c #B1B1B0", +"4~ c #B4B5B5", +"5~ c #777677", +"6~ c #727172", +"7~ c #6B6C6C", +"8~ c #80807F", +"9~ c #919090", +"0~ c #9E9E9F", +"a~ c #A4A5A4", +"b~ c #A6A7A6", +"c~ c #898888", +"d~ c #6E6E6D", +"e~ c #5F5F60", +"f~ c #797A7A", +"g~ c #7E7F7F", +"h~ c #777777", +"i~ c #616060", +"j~ c #663737", +"k~ c #FF0000", +"l~ c #932626", +"m~ c #4A4141", +"n~ c #626263", +"o~ c #767777", +"p~ c #767675", +"q~ c #717171", +"r~ c #6E6E6F", +"s~ c #6C6D6D", +"t~ c #6A6969", +"u~ c #676767", +"v~ c #656665", +"w~ c #676766", +"x~ c #727373", +"y~ c #5C5C5B", +"z~ c #6A6A6B", +"A~ c #7B7A7B", +"B~ c #626262", +"C~ c #C31515", +"D~ c #EA0707", +"E~ c #6B6A6B", +"F~ c #6C6B6B", +"G~ c #B1B1B2", +"H~ c #777676", +"I~ c #747575", +"J~ c #717271", +"K~ c #6D6E6D", +"L~ c #6B6B6A", +"M~ c #686767", +"N~ c #646363", +"O~ c #5D5D5C", +"P~ c #777776", +"Q~ c #878788", +"R~ c #969596", +"S~ c #9A9898", +"T~ c #9A9A99", +"U~ c #646463", +"V~ c #7B7C7C", +"W~ c #7B7C7B", +"X~ c #707170", +"Y~ c #575756", +"Z~ c #FFFFFF", +"`~ c #696968", +" { c #B0B0B1", +".{ c #ABACAB", +"+{ c #787777", +"@{ c #717170", +"#{ c #696869", +"${ c #666565", +"%{ c #646465", +"&{ c #636363", +"*{ c #605F5F", +"={ c #575758", +"-{ c #8B8A8B", +";{ c #949393", +">{ c #454343", +",{ c #D31010", +"'{ c #FE0100", +"){ c #FB0001", +"!{ c #F80101", +"~{ c #F40201", +"{{ c #F10102", +"]{ c #EE0202", +"^{ c #EB0303", +"/{ c #E70303", +"({ c #E40303", +"_{ c #E10403", +":{ c #DE0404", +"<{ c #932B2B", +"[{ c #666566", +"}{ c #A5A4A4", +"|{ c #969797", +"1{ c #787778", +"2{ c #636364", +"3{ c #606161", +"4{ c #5D5C5C", +"5{ c #585958", +"6{ c #5C5C5D", +"7{ c #868787", +"8{ c #7F807F", +"9{ c #FB0101", +"0{ c #F70101", +"a{ c #F40101", +"b{ c #F10101", +"c{ c #EA0302", +"d{ c #E80303", +"e{ c #E10404", +"f{ c #DD0404", +"g{ c #DA0404", +"h{ c #D70505", +"i{ c #A23A3A", +"j{ c #606160", +"k{ c #616261", +"l{ c #656566", +"m{ c #666767", +"n{ c #ADADAC", +"o{ c #A8A9A8", +"p{ c #9A9999", +"q{ c #6A6A69", +"r{ c #626261", +"s{ c #5F605F", +"t{ c #818081", +"u{ c #868685", +"v{ c #FE0001", +"w{ c #FA0000", +"x{ c #F40202", +"y{ c #F10202", +"z{ c #EA0303", +"A{ c #E10304", +"B{ c #DB0504", +"C{ c #D70405", +"D{ c #D40506", +"E{ c #D00506", +"F{ c #ED0A0A", +"G{ c #A33636", +"H{ c #655C5C", +"I{ c #636362", +"J{ c #7C7B7B", +"K{ c #939292", +"L{ c #8A8B8A", +"M{ c #676768", +"N{ c #848485", +"O{ c #818281", +"P{ c #7F7E7E", +"Q{ c #7B7B7A", +"R{ c #FD0000", +"S{ c #F40102", +"T{ c #F00202", +"U{ c #ED0202", +"V{ c #EB0203", +"W{ c #E40304", +"X{ c #DA0504", +"Y{ c #D10506", +"Z{ c #CD0606", +"`{ c #CA0607", +" ] c #A33535", +".] c #A5A6A6", +"+] c #9F9FA0", +"@] c #8B8C8B", +"#] c #818180", +"$] c #7E7D7E", +"%] c #7C7C7D", +"&] c #787978", +"*] c #636463", +"=] c #FD0001", +"-] c #FA0100", +";] c #E70203", +">] c #E30303", +",] c #D40505", +"'] c #D00605", +")] c #C70707", +"!] c #C40707", +"~] c #A23535", +"{] c #645B5B", +"]] c #616160", +"^] c #626161", +"/] c #7C7D7C", +"(] c #9B9A9A", +"_] c #666667", +":] c #818182", +"<] c #7D7E7D", +"[] c #757475", +"}] c #ED0203", +"|] c #E00404", +"1] c #DA0505", +"2] c #D60505", +"3] c #D40605", +"4] c #D00505", +"5] c #CA0706", +"6] c #C30707", +"7] c #C00707", +"8] c #BD0808", +"9] c #9F3737", +"0] c #5F6060", +"a] c #707171", +"b] c #807F80", +"c] c #8E8E8F", +"d] c #979696", +"e] c #959594", +"f] c #686869", +"g] c #7F8080", +"h] c #7E7E7F", +"i] c #7C7D7D", +"j] c #737374", +"k] c #F60101", +"l] c #F30101", +"m] c #E90302", +"n] c #E10303", +"o] c #DC0404", +"p] c #D90405", +"q] c #D00606", +"r] c #C60607", +"s] c #C00808", +"t] c #B90908", +"u] c #B60809", +"v] c #5F5F5E", +"w] c #747473", +"x] c #838384", +"y] c #908F90", +"z] c #919192", +"A] c #7D7C7D", +"B] c #818282", +"C] c #808081", +"D] c #7F7F80", +"E] c #FA0001", +"F] c #F00102", +"G] c #E60303", +"H] c #DA0405", +"I] c #D30605", +"J] c #C90607", +"K] c #C70706", +"L] c #BF0808", +"M] c #BA0908", +"N] c #B60909", +"O] c #B30909", +"P] c #B00A0A", +"Q] c #5B5A5C", +"R] c #5C5D5D", +"S] c #828181", +"T] c #5A595A", +"U] c #676667", +"V] c #8A8A8A", +"W] c #7A7A7B", +"X] c #F90101", +"Y] c #F30102", +"Z] c #E90203", +"`] c #E30403", +" ^ c #E00403", +".^ c #D90504", +"+^ c #D60405", +"@^ c #D30505", +"#^ c #CF0606", +"$^ c #CC0606", +"%^ c #C00807", +"&^ c #B90909", +"*^ c #B20909", +"=^ c #B0090A", +"-^ c #AC0A0A", +";^ c #9E9E9D", +">^ c #838282", +",^ c #767576", +"'^ c #868585", +")^ c #797A79", +"!^ c #737273", +"~^ c #FC0101", +"{^ c #EF0202", +"]^ c #C90707", +"^^ c #C60707", +"/^ c #C20807", +"(^ c #BC0808", +"_^ c #B90808", +":^ c #B3090A", +"<^ c #B00909", +"[^ c #A90A0A", +"}^ c #7F7E7F", +"|^ c #989897", +"1^ c #9C9D9C", +"2^ c #F90001", +"3^ c #EC0202", +"4^ c #E90303", +"5^ c #DF0404", +"6^ c #D50505", +"7^ c #CF0605", +"8^ c #C90706", +"9^ c #BF0708", +"0^ c #B60908", +"a^ c #AF0909", +"b^ c #A90B0A", +"c^ c #A60B0A", +"d^ c #9C9B9C", +"e^ c #9B9B9A", +"f^ c #F60102", +"g^ c #F20101", +"h^ c #E30304", +"i^ c #DC0504", +"j^ c #D90505", +"k^ c #C90606", +"l^ c #C30708", +"m^ c #B50908", +"n^ c #A90A0B", +"o^ c #A50B0B", +"p^ c #A30B0B", +"q^ c #838483", +"r^ c #8D8D8C", +"s^ c #959696", +"t^ c #959795", +"u^ c #757574", +"v^ c #656666", +"w^ c #7D7E7E", +"x^ c #737372", +"y^ c #D20505", +"z^ c #C20707", +"A^ c #B80808", +"B^ c #A80B0B", +"C^ c #A20B0B", +"D^ c #9F0B0B", +"E^ c #747374", +"F^ c #979796", +"G^ c #939392", +"H^ c #7D7D7E", +"I^ c #777878", +"J^ c #747373", +"K^ c #EC0203", +"L^ c #E50303", +"M^ c #E20404", +"N^ c #CB0606", +"O^ c #C80607", +"P^ c #C50707", +"Q^ c #B50909", +"R^ c #B20A0A", +"S^ c #AF0A09", +"T^ c #A50B0A", +"U^ c #9B0C0C", +"V^ c #7A7B7B", +"W^ c #929393", +"X^ c #7C7C7B", +"Y^ c #EB0302", +"Z^ c #E20403", +"`^ c #D80504", +" / c #CB0706", +"./ c #C80706", +"+/ c #C20708", +"@/ c #BB0808", +"#/ c #B90809", +"$/ c #B2090A", +"%/ c #AB0A0A", +"&/ c #A90B0B", +"*/ c #A50A0A", +"=/ c #A20C0C", +"-/ c #9E0C0C", +";/ c #980D0C", +">/ c #7A7B7A", +",/ c #929293", +"'/ c #898A8A", +")/ c #666665", +"!/ c #E50403", +"~/ c #E20304", +"{/ c #DF0304", +"]/ c #DB0505", +"^/ c #D20605", +"// c #CF0506", +"(/ c #CC0607", +"_/ c #BF0807", +":/ c #BB0908", +"( c #BA0808", +",( c #B70808", +"'( c #A70B0B", +")( c #9D0C0C", +"!( c #970C0C", +"~( c #870F0F", +"{( c #AB4343", +"]( c #BD0708", +"^( c #B00A09", +"/( c #AD0A09", +"(( c #AA0A0B", +"_( c #A00B0B", +":( c #9D0C0B", +"<( c #960C0C", +"[( c #940C0D", +"}( c #900D0D", +"|( c #870E0F", +"1( c #766D6D", +"2( c #AE4141", +"3( c #EF0C0C", +"4( c #C10708", +"5( c #AD0A0A", +"6( c #AA0B0B", +"7( c #A10C0B", +"8( c #930D0D", +"9( c #900D0E", +"0( c #8D0D0E", +"a( c #8A0F0E", +"b( c #B70908", +"c( c #A00B0C", +"d( c #8D0E0E", +"e( c #890E0E", +"f( c #AA0A0A", +"g( c #A70B0A", +"h( c #930C0D", +"i( c #8C0E0E", +"j( c #870E0E", +"k( c #A60B0B", +"l( c #A00C0C", +"m( c #990C0D", +"n( c #900E0D", +"o( c #860F0E", +"p( c #990C0C", +"q( c #8F0D0E", +"r( c #890E0F", +"s( c #860E0F", +"t( c #AF4242", +"u( c #EB0808", +"v( c #776E6E", +"w( c #962929", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . ", +" + + + . . . . . . . ", +" + + + + + @ # # $ . . . . . . ", +" + + % + & # * = - ; > , ' . . . . . ", +" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ", +" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ", +" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ", +" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ", +" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ", +" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ", +" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ", +" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ", +" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ", +" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ", +" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ", +" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ", +" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ", +" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ", +" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ", +" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#&#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ", +" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ", +" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ", +" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ", +" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ", +" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ", +" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ", +" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ", +" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$#�#0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ", +" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$&#*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ", +" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ", +" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ", +" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ", +" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ", +" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ", +" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ", +" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ", +" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n&#*o&`&/#/# ", +" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ", +" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ", +" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ", +" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ", +" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ", +" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ", +" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ", +" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ", +" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ", +" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ", +" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ", +" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ", +" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ", +" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ", +" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ", +" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ", +" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ", +" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ", +" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ", +" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ", +" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ", +" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ", +" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ", +" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ", +" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ", +" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ", +" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ", +" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ", +" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ", +" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ", +" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ", +" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ", +" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ", +" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ", +" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ", +" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ", +" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ", +" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ", +" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&+~!~~~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ", +" P.{~l*(&!*}-]~0*^~/~s![-(~_~=&E&=&=&=&y*:~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$<~s !*. a)C![~}~|~|~/#/#e*1*/#e*1~. 2~K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ", +" P.4~/&/&}-*+5~F=F=s!6~5.V&S.7~-*8~9~0~9&R*R*a~b~X)c~d~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r e~}*i&V&/~f~g~N):&[*D+h~W)i~) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~l~m~P.P.P.P.P.P.P.$+0 n~ ", +" P.Q!L!L!*+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~x~S&M)}~Y!}~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M y~! W)z~5.^~A~[-h~-*S.)*B~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~D~l~m~P.P.P.O.P...i&E~F~ ", +" P.G~2*H!H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~Q P~Q~R~F!S~T~F!|%. S.U~v I.a+$+#+Q.P.P.P.P.P.P.P.p.q~P~V~W~0*X~p.W)1=a Y~*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~D~l~m~P.M.g.W).*u~`~i& ", +" P. {.{| !@+{s!-*-*@{V&d~S.< i&#{w~${%{&{1=*{9 a H I ={M :.#{. -{E@;{;{M!>)}-q~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{){!{~{{{]{^{/{({_{:{Z~Z~k~k~<{`.! W)N%Y&[{u~w ", +" P.j*7.N!A*A*}{|{U&1{w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.7@6{1!D+|%C!A!7{8{}-s!&{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{9{0{a{b{]{c{d{({e{f{g{h{Z~Z~k~k~i{j{k{B~2{}*l{m{ ", +" P.n{o{l!e*}{=&T.V*V*x*p{;*h~q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#}.s{6~t{u{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~v{w{!{x{y{]{z{/{({A{f{B{C{D{E{Z~Z~k~F{G{H{1=I{&{N%${ ", +" P.0!-+-+%@!*J{!@K{!=x*x*c+`!Q*e*L{*+M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+N{S&O{:&P{=*Q{]~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~R{w{0{S{T{U{V{/{W{e{f{X{h{D{Y{Z{`{Z~Z~k~F{ ]H{1=1=n~N~ ", +" P.7.i*.]!*}-]~0*^~/~-*. x&,.X)_&'~+]n!e*@]}-M{c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#]D+$]%]. f~*+&]h~-**]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~=]-]0{a{y{U{c{;]>]_{f{X{C{,]']Z{`{)]!]Z~Z~k~F{~]{]! ]]^] ", +" P.=&]&]&}-*+5~F=F=s!6~5.V&S.7~5./]@]/=/#X*(]e*s%1~!*_]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&:]:&;~<]V~Q{p=*+P~0*[]s!/~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~R{w{0{a{y{}]c{/{W{|]f{1]2]3]4]Z{5])]6]7]8]Z~Z~k~k~9]) e~0] ", +" P.b~Q*Q**+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~a]b]c]%~/=d]6.e]A!b%f]M [+4.Q@C+p+2+P.P.P.P.a)[*g]h]i]b%!*}-*+P~F=j]-*-*-*s!/~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.C~k~k~Z~Z~k~R{w{k]l]y{U{m]/{W{n]o]p]h{D{q]Z{5]r]6]s]8]t]u]Z~Z~k~k~0 n v] ", +" P.c+_&_&H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~${w]x]y]z].!&@M!|%A].*N 0%P.P.P.P.P.B]C]D]h][-. !*}-+{-&F=s!-*-*-*-*-*-*-*s!/~F=-*.*0 P }.I.O.Q.Q.Q.P.k~k~Z~Z~k~R{E]k]~{F]U{c{G]({|]f{H]h{I]q]Z{J]K]6]L]8]M]N]O]P]Z~k~k~Q]6{R] ", +" P.R*i!X)S]H~s!-*-*@{V&d~S.< i&#{w~${%{&{1=*{9 a H I ={M T]U]+{!@C!A!|%V]x&N)< ..n.P.O{:&D+N)b%W]f~&]h~0*/~s!-*-*-*-*-*-*-*-*-*-*-*s!/~F=5.u~9 ..&.I.P.k~k~Z~k~=]X]k]Y]T{U{Z]G]`] ^o].^+^@^#^$^5]r]6]%^8]&^N]*^=^-^Z~k~k~Y.r H ", +" P.[=!=;^!=!=T~M!>^,^w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.}.{+< [ ~ 7{'^O'S&[-#]D]N)[-%@!*)^D!0*F=/~!^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!/~/~V&u~1=k~k~Z~~^E]k]l]{^U{m]G]>]|]o].^2]I]#^$^]^^^/^%^(^_^N]:^<^-^[^Z~k~k~.. .s ", +" P.}^;{|^T~1^_~X*X*X*(],#S&F=q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B]:&D+N)%]. !**+h~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!k~k~Z~2^k]Y]T{3^4^G]>]5^o]H]6^I]7^$^8^^^6]9^8]_^0^:^a^-^b^c^Z~k~k~M Y~]+ ", +" P.8+v+1.W)D+A!,#/=1*d^e^e*s%s%,#O'F=M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+o~F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~f^g^T{U{Z]G]h^5^i^j^2]@^#^Z{k^^^l^L](^_^m^*^a^-^n^o^p^Z~k~k~O N M ", +" P.#+8+9+#+_+w b%q^r^=+e*s%%~|{s^t^;!!@u^v^c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+w^%]. !*v&+{0*F=/~x^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~Y]{^3^4^G]h^5^i^.^2]y^#^$^k^^^z^L](^A^m^*^a^-^B^o^C^D^Z~k~k~g.<~P ", +" Q.a+ v+p+M W)E^$]|%=+:=F^,.G^G^;!,#~ ,^%{v h.`.[.k. +4.J.o+p+P.P.P.P.P.H^i]V~A~p=I^h~,^/~J^}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~{^K^4^L^M^5^o]j^6^I]#^N^O^P^6]L](^A^Q^R^S^-^[^T^C^D^U^Z~k~k~:+f*&. ", +" 8+#+R+N 1=7~V^|%=+,.W^&@M!a&a&^=~ H~[{N [+4.Q@C+p+2+P.P.P.P.[-X^. f~}-h~0*F=/~x~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q~w*k~k~Z~Y^d{L^Z^5^o]`^6^y^#^ /./P^+/9^@/#/Q^$/a^%/&/*/=/-/U^;/Z~k~k~}.[.<. ", +" $+P.4.g.H u~>/1~,/,#a&1~V]'/;*x&|!*+)/Z.0%P.P.P.P.P.b%. !*}-*+h~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+k~k~Z~4^!/~/{/]/.^6^^///(/k^P^+/_/:/t]Q^*^(,(J/b/L/[/'(e/f/)($(!(M/Y/C/*(~(Z~Z~k~k~k~ ", +" P.#+a+a+P.k.s &{u~p.q~/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*{(k~k~Z~Z~ /K]!]@(](M]U/J/^(/((('(e/_(:($(<([(}(C/*(|(Z~Z~k~k~k~ ", +" Q. $+M.}...) W)S.s!/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~!]4(8]>(U/J/=^5(6('(e/7(:($(!(8(9(0(a(|(Z~Z~k~k~k~ ", +" Q.o+}.M 0 Y&V&F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~8]>(b(O]w//(6('(p^c()($(X/8(9(d(e(`/Z~Z~k~k~k~ ", +" #+P.n.k.&.H u~q~0*/~s!-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~b(O]^(5(f(g(e/_(:($(!(h(9(i(e(j(Z~Z~k~k~k~ ", +" Q.O.n.3.`.a .*s!F=/~s!-*-*-*-*-*-*-*-*{(k~k~Z~Z~P]5(f(k(p^l()(m(X/M/n(&(*(o(Z~Z~k~k~k~ ", +" P.O.M.n.`.9 p./~/~s!-*-*-*-*-*-*{(k~k~Z~Z~((k(p^c()(p(X/8(q(d(r(s(Z~Z~k~k~k~ ", +" P.P.O.O.M.&.1=w*/~s!s!-*-*1(2(3(k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~k~k~ ", +" P.P.P.P.p+P N%5.s!s!1(t(u(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ", +" P.Q.#+#+n...u~v(w(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ", +" P.#+$+Q.P. ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index de44d60a8..aac0f3a13 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -42,7 +42,7 @@ class ShipWorkbench ( Workbench ): msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) else: - list = ["Ship_CreateSim", "Ship_RunSim"] + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) # Menu @@ -55,7 +55,7 @@ class ShipWorkbench ( Workbench ): except ImportError: pass else: - list = ["Ship_CreateSim", "Ship_RunSim"] + list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) Gui.addWorkbench(ShipWorkbench()) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 158be05a7..6aa83570c 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -44,6 +44,8 @@ nobase_data_DATA = \ Icons/SimCreateIco.xpm \ Icons/SimRunIco.png \ Icons/SimRunIco.xpm \ + Icons/SimStopIco.png \ + Icons/SimStopIco.xpm \ Icons/Tank.png \ Icons/Tank.xcf \ Icons/Tank.xpm \ diff --git a/src/Mod/Ship/ShipGui.py b/src/Mod/Ship/ShipGui.py index a764a2b24..821bb01ac 100644 --- a/src/Mod/Ship/ShipGui.py +++ b/src/Mod/Ship/ShipGui.py @@ -144,6 +144,18 @@ class RunSim: ToolTip = str(Translator.translate('Run a simulation')) return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} +class StopSim: + def Activated(self): + import simRun + simRun.stop() + + def GetResources(self): + from shipUtils import Paths, Translator + IconPath = Paths.iconsPath() + "/SimStopIco.png" + MenuText = str(Translator.translate('Stop active simulation')) + ToolTip = str(Translator.translate('Stop active simulation')) + return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip} + FreeCADGui.addCommand('Ship_LoadExample', LoadExample()) FreeCADGui.addCommand('Ship_CreateShip', CreateShip()) FreeCADGui.addCommand('Ship_OutlineDraw', OutlineDraw()) @@ -154,3 +166,4 @@ FreeCADGui.addCommand('Ship_CreateTank', CreateTank()) FreeCADGui.addCommand('Ship_GZ', GZ()) FreeCADGui.addCommand('Ship_CreateSim', CreateSim()) FreeCADGui.addCommand('Ship_RunSim', RunSim()) +FreeCADGui.addCommand('Ship_StopSim', StopSim()) diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 1910f79f9..bb616dfdb 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -35,7 +35,18 @@ from FreeCAD import Part, Base, Vector # Ship design module from shipUtils import Paths, Translator, Math +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton def __init__ (self, device, endTime, output, FSmesh, waves): """ Thread constructor. @param device Device to use. @@ -45,6 +56,8 @@ class FreeCADShipSimulation(threading.Thread): @param waves Waves parameters (A,T,phi,heading) """ threading.Thread.__init__(self) + # Setup as stopped + self.active = False # Build OpenCL context and command queue self.device = device self.context = cl.Context(devices=[self.device]) @@ -58,8 +71,25 @@ class FreeCADShipSimulation(threading.Thread): def run(self): """ Runs the simulation. """ + self.active = True # Perform work here - print("Im thread, Im running...") - time.sleep(2) - # ... - print("Im thread, I end!") + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 0a8762617..2e41ff15a 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -33,6 +33,8 @@ import SimInstance from shipUtils import Paths, Translator from Simulation import FreeCADShipSimulation as Sim +import time + class TaskPanel: def __init__(self): self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" @@ -184,3 +186,18 @@ def createTask(): Gui.Control.closeDialog(panel) return None return panel + +def stopSimulation(): + try: + simulator = Sim() + if not simulator.isRunning(): + msg = Translator.translate("Simulation already stopped\n") + App.Console.PrintWarning(msg) + return + except: + msg = Translator.translate("Any active simulation to stop!\n") + App.Console.PrintError(msg) + return + simulator.stop() + msg = Translator.translate("Simulation will stop at the end of actual iteration\n") + App.Console.PrintMessage(msg) diff --git a/src/Mod/Ship/simRun/__init__.py b/src/Mod/Ship/simRun/__init__.py index cbfb57d75..64c597c02 100644 --- a/src/Mod/Ship/simRun/__init__.py +++ b/src/Mod/Ship/simRun/__init__.py @@ -34,3 +34,7 @@ import TaskPanel def load(): """ Loads the tool """ TaskPanel.createTask() + +def stop(): + """ Stops the simulation """ + TaskPanel.stopSimulation() From 1f429e80eb240c6009d7db2ded923b915e7b7432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 14:30:00 +0200 Subject: [PATCH 17/26] Fixed weights and simulation tools menus --- src/Mod/Ship/InitGui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index aac0f3a13..925c5e12c 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -49,13 +49,13 @@ class ShipWorkbench ( Workbench ): list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] - self.appendToolbar("Weights",list) + self.appendMenu("Weights",list) try: import pyopencl except ImportError: pass else: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] - self.appendToolbar("Simulation",list) + self.appendMenu("Simulation",list) Gui.addWorkbench(ShipWorkbench()) From 909a8d064998ddd8d42b5664883b2429371bce42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Sun, 8 Jul 2012 16:04:16 +0200 Subject: [PATCH 18/26] Imported numpy, and added as dependency --- src/Mod/Ship/InitGui.py | 18 ++++++++++++------ src/Mod/Ship/simRun/Simulation.py | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 925c5e12c..7152e0342 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -36,12 +36,22 @@ class ShipWorkbench ( Workbench ): self.appendToolbar("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendToolbar("Weights",list) + # Simulation stuff only if pyOpenCL & numpy are present + hasOpenCL = True + hasNumpy = True try: import pyopencl except ImportError: + hasOpenCL = False msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n") App.Console.PrintWarning(msg) - else: + try: + import numpy + except ImportError: + hasNumpy = False + msg = Translator.translate("numpy not installed, ship simulations disabled\n") + App.Console.PrintWarning(msg) + if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendToolbar("Simulation",list) @@ -50,11 +60,7 @@ class ShipWorkbench ( Workbench ): self.appendMenu("Ship design",list) list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"] self.appendMenu("Weights",list) - try: - import pyopencl - except ImportError: - pass - else: + if hasOpenCL and hasNumpy: list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"] self.appendMenu("Simulation",list) diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index bb616dfdb..0767342cb 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -27,6 +27,7 @@ import threading # pyOpenCL import pyopencl as cl +import numpy as np # FreeCAD import FreeCAD,FreeCADGui From c1e355c2cdf97e10c101fe81d6e3a3f3a24b5302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 16 Jul 2012 14:57:26 +0200 Subject: [PATCH 19/26] Fixed KB & Cf hydrostatics computation bug --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 58fbb3d15..012996144 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -279,9 +279,9 @@ def FloatingArea(ship, draft, trim): # Valid face, compute area area = area + f.Area maxX = max(maxX, faceBounds.XMax) - minX = max(minX, faceBounds.XMin) + minX = min(minX, faceBounds.XMin) maxY = max(maxY, faceBounds.YMax) - minY = max(minY, faceBounds.YMin) + minY = min(minY, faceBounds.YMin) # Destroy last object generated App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name) dx = maxX - minX @@ -416,7 +416,7 @@ class Point: self.wet = wet self.farea = farea[0] self.mom = mom - self.KBt = dispData[1].y + self.KBt = dispData[1].z self.BMt = bm self.Cb = dispData[2] self.Cf = farea[1] From a10ee753e2babc4e406ea682754afdbd5a7b7bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Luis=20Cerc=C3=B3s=20pita?= Date: Mon, 16 Jul 2012 15:35:12 +0200 Subject: [PATCH 20/26] Fixed drafts list onto hydrostatics computation --- src/Mod/Ship/shipHydrostatics/TaskPanel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py index 4ff23dc45..54b5c7623 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py @@ -44,7 +44,7 @@ class TaskPanel: self.save() draft = self.form.minDraft.value() drafts = [draft] - dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/self.form.nDraft.value() + dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/(self.form.nDraft.value()-1) for i in range(1,self.form.nDraft.value()): draft = draft + dDraft drafts.append(draft) From ec5fb278b0e86e88908c68515dc66848168b575b Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:12:19 +0200 Subject: [PATCH 21/26] Fixed BM hydrostatic computation (wrong CoG coordinates) --- src/Mod/Ship/shipHydrostatics/Tools.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index 012996144..d329fc07c 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -306,13 +306,13 @@ def BMT(ship, draft, trim=0.0): B1 = displacement(ship,draft,roll,trim,0.0)[1] # * M # / \ - # / \ BM ==|> BM = (BB/2) / tan(alpha/2) + # / \ BM ==|> BM = (BB/2) / sin(alpha/2) # / \ # *-------* # BB - BB = [B1.x - B0.x, B1.y - B0.y] + BB = [B1.y - B0.y, B1.z - B0.z] BB = math.sqrt(BB[0]*BB[0] + BB[1]*BB[1]) - BM = BM + 0.5*BB/math.tan(math.radians(0.5*roll)) / nRoll # nRoll is the weight function + BM = BM + 0.5*BB/math.sin(math.radians(0.5*roll)) / nRoll # nRoll is the weight function return BM def mainFrameCoeff(ship, draft): From 91a9ea7fa69fd14ac0025997ddef35c951492ac2 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:13:52 +0200 Subject: [PATCH 22/26] Fixed 0.0 division when only 1 Hydrostatic point is requested. Now 2 points must be selected at least --- src/Mod/Ship/Icons/SimCreateIco.xcf | Bin 0 -> 51656 bytes src/Mod/Ship/shipHydrostatics/TaskPanel.ui | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/Mod/Ship/Icons/SimCreateIco.xcf diff --git a/src/Mod/Ship/Icons/SimCreateIco.xcf b/src/Mod/Ship/Icons/SimCreateIco.xcf new file mode 100644 index 0000000000000000000000000000000000000000..6dcf3fdd0ba1fa700091f4774f887b087a237bdc GIT binary patch literal 51656 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 HzwEyOS-3zg literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui index 3c3d88a58..23367df69 100644 --- a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui +++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui @@ -190,7 +190,7 @@ - 1 + 2 9999 From 7a05d3026907c3728e605c7b4b7c4774564775b9 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Wed, 25 Jul 2012 19:28:13 +0200 Subject: [PATCH 23/26] Fixed intialization error message. --- src/Mod/Ship/InitGui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py index 7152e0342..77298ad84 100644 --- a/src/Mod/Ship/InitGui.py +++ b/src/Mod/Ship/InitGui.py @@ -31,6 +31,7 @@ class ShipWorkbench ( Workbench ): ToolTip = str(Translator.translate("Ship design")) def Initialize(self): + from shipUtils import Translator # ToolBar list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"] self.appendToolbar("Ship design",list) From 94c8489d0f84d978081d29ea934296979dc0221c Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Fri, 27 Jul 2012 10:27:21 +0200 Subject: [PATCH 24/26] Fixed Part module import error --- src/Mod/Ship/Instance.py | 3 ++- src/Mod/Ship/SimInstance.py | 3 ++- src/Mod/Ship/TankInstance.py | 3 ++- src/Mod/Ship/shipAreasCurve/Plot.py | 3 +-- src/Mod/Ship/shipAreasCurve/Preview.py | 2 +- src/Mod/Ship/shipCreateShip/Preview.py | 2 +- src/Mod/Ship/shipHydrostatics/Plot.py | 3 ++- src/Mod/Ship/shipHydrostatics/Tools.py | 3 ++- src/Mod/Ship/shipOutlineDraw/Plot.py | 3 ++- src/Mod/Ship/shipOutlineDraw/Preview.py | 3 ++- src/Mod/Ship/simRun/Simulation.py | 3 ++- src/Mod/Ship/tankCreateTank/TaskPanel.py | 1 + src/Mod/Ship/tankGZ/Plot.py | 4 ++-- src/Mod/Ship/tankWeights/Preview.py | 2 +- 14 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py index ca601ddaa..40fd10992 100644 --- a/src/Mod/Ship/Instance.py +++ b/src/Mod/Ship/Instance.py @@ -30,7 +30,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/SimInstance.py b/src/Mod/Ship/SimInstance.py index 193c54823..3d047e3a1 100644 --- a/src/Mod/Ship/SimInstance.py +++ b/src/Mod/Ship/SimInstance.py @@ -31,7 +31,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py index e35b7f520..48a126971 100644 --- a/src/Mod/Ship/TankInstance.py +++ b/src/Mod/Ship/TankInstance.py @@ -29,7 +29,8 @@ from pivy import coin # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/shipAreasCurve/Plot.py b/src/Mod/Ship/shipAreasCurve/Plot.py index 6e0fdb536..61b1f3a20 100644 --- a/src/Mod/Ship/shipAreasCurve/Plot.py +++ b/src/Mod/Ship/shipAreasCurve/Plot.py @@ -24,8 +24,7 @@ import os # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base -from FreeCAD import Image, ImageGui +from FreeCAD import Base, Image, ImageGui # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipAreasCurve/Preview.py b/src/Mod/Ship/shipAreasCurve/Preview.py index 8f2d7eba1..6af80580d 100644 --- a/src/Mod/Ship/shipAreasCurve/Preview.py +++ b/src/Mod/Ship/shipAreasCurve/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipCreateShip/Preview.py b/src/Mod/Ship/shipCreateShip/Preview.py index b4d9e39b9..72f601432 100644 --- a/src/Mod/Ship/shipCreateShip/Preview.py +++ b/src/Mod/Ship/shipCreateShip/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/shipHydrostatics/Plot.py b/src/Mod/Ship/shipHydrostatics/Plot.py index d953b5ddf..011b45c74 100644 --- a/src/Mod/Ship/shipHydrostatics/Plot.py +++ b/src/Mod/Ship/shipHydrostatics/Plot.py @@ -25,8 +25,9 @@ import os import math # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector from FreeCAD import Image, ImageGui +import Part # FreeCADShip modules from shipUtils import Paths, Translator import Tools diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py index d329fc07c..a42c9b774 100644 --- a/src/Mod/Ship/shipHydrostatics/Tools.py +++ b/src/Mod/Ship/shipHydrostatics/Tools.py @@ -23,7 +23,8 @@ import math # FreeCAD modules -from FreeCAD import Vector, Part +from FreeCAD import Vector +import Part import FreeCAD as App import FreeCADGui as Gui # Module diff --git a/src/Mod/Ship/shipOutlineDraw/Plot.py b/src/Mod/Ship/shipOutlineDraw/Plot.py index 7d21b2fbc..682c15678 100644 --- a/src/Mod/Ship/shipOutlineDraw/Plot.py +++ b/src/Mod/Ship/shipOutlineDraw/Plot.py @@ -23,7 +23,8 @@ # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Base, Part, Vector +from FreeCAD import Base, Vector +import Part # FreeCADShip modules from shipUtils import Paths, Translator from surfUtils import Geometry diff --git a/src/Mod/Ship/shipOutlineDraw/Preview.py b/src/Mod/Ship/shipOutlineDraw/Preview.py index 2b323b47e..a1ccb2012 100644 --- a/src/Mod/Ship/shipOutlineDraw/Preview.py +++ b/src/Mod/Ship/shipOutlineDraw/Preview.py @@ -23,7 +23,8 @@ # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Base, Part, Vector +from FreeCAD import Base, Vector +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 0767342cb..32b570757 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -31,7 +31,8 @@ import numpy as np # FreeCAD import FreeCAD,FreeCADGui -from FreeCAD import Part, Base, Vector +from FreeCAD import Base, Vector +import Part # Ship design module from shipUtils import Paths, Translator, Math diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py index 4eddbd03e..15305ca90 100644 --- a/src/Mod/Ship/tankCreateTank/TaskPanel.py +++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py @@ -24,6 +24,7 @@ # FreeCAD modules import FreeCAD as App import FreeCADGui as Gui +import Part # Qt library from PyQt4 import QtGui,QtCore # Module diff --git a/src/Mod/Ship/tankGZ/Plot.py b/src/Mod/Ship/tankGZ/Plot.py index 1ce11d344..09db5345b 100644 --- a/src/Mod/Ship/tankGZ/Plot.py +++ b/src/Mod/Ship/tankGZ/Plot.py @@ -24,8 +24,8 @@ import os # FreeCAD modules import FreeCAD,FreeCADGui -from FreeCAD import Part, Base -from FreeCAD import Image, ImageGui +from FreeCAD import Base, Image, ImageGui +import Part # FreeCADShip modules from shipUtils import Paths, Translator diff --git a/src/Mod/Ship/tankWeights/Preview.py b/src/Mod/Ship/tankWeights/Preview.py index 571155bb9..23bb7fae6 100644 --- a/src/Mod/Ship/tankWeights/Preview.py +++ b/src/Mod/Ship/tankWeights/Preview.py @@ -24,7 +24,7 @@ # FreeCAD modules import FreeCAD,FreeCADGui from FreeCAD import Base -from FreeCAD import Part +import Part # FreeCADShip modules from shipUtils import Paths, Translator From c5ec34318b0f5560f8ac5929961d16c5a65542b0 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Mon, 30 Jul 2012 14:30:13 +0200 Subject: [PATCH 25/26] Implemented initialization stage --- src/Mod/Ship/CMakeLists.txt | 4 + src/Mod/Ship/Makefile.am | 7 +- src/Mod/Ship/OpenCL/simInit.cl | 99 ++++++++++ src/Mod/Ship/shipUtils/Paths.pyc | Bin 0 -> 1379 bytes src/Mod/Ship/shipUtils/__init__.pyc | Bin 0 -> 159 bytes src/Mod/Ship/simRun/Sim/Utils.py | 57 ++++++ src/Mod/Ship/simRun/Sim/Utils.py~ | 58 ++++++ src/Mod/Ship/simRun/Sim/__init__.py | 24 +++ src/Mod/Ship/simRun/Sim/__init__.py~ | 57 ++++++ src/Mod/Ship/simRun/Sim/initialization.py | 113 ++++++++++++ src/Mod/Ship/simRun/Sim/initialization.py~ | 117 ++++++++++++ src/Mod/Ship/simRun/Simulation.py | 202 +++++++++++---------- src/Mod/Ship/simRun/Simulation.py~ | 107 +++++++++++ 13 files changed, 747 insertions(+), 98 deletions(-) create mode 100644 src/Mod/Ship/OpenCL/simInit.cl create mode 100644 src/Mod/Ship/shipUtils/Paths.pyc create mode 100644 src/Mod/Ship/shipUtils/__init__.pyc create mode 100644 src/Mod/Ship/simRun/Sim/Utils.py create mode 100644 src/Mod/Ship/simRun/Sim/Utils.py~ create mode 100644 src/Mod/Ship/simRun/Sim/__init__.py create mode 100644 src/Mod/Ship/simRun/Sim/__init__.py~ create mode 100644 src/Mod/Ship/simRun/Sim/initialization.py create mode 100644 src/Mod/Ship/simRun/Sim/initialization.py~ create mode 100644 src/Mod/Ship/simRun/Simulation.py~ diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index ef3d635a5..5f0314abd 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -56,6 +56,7 @@ SET(ShipExamples_SRCS Examples/s60_katamaran.fcstd Examples/wigley.fcstd Examples/wigley_katamaran.fcstd + OpenCL/simInit.cl ) SOURCE_GROUP("shipexamples" FILES ${ShipExamples_SRCS}) @@ -144,6 +145,9 @@ SET(SimRun_SRCS simRun/Simulation.py simRun/TaskPanel.py simRun/TaskPanel.ui + simRun/Sim/__init__.py + simRun/Sim/initialization.py + simRun/Sim/Utils.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 6aa83570c..084e9a877 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -53,6 +53,7 @@ nobase_data_DATA = \ Examples/s60_katamaran.fcstd \ Examples/wigley.fcstd \ Examples/wigley_katamaran.fcstd \ + OpenCL/simInit.cl \ shipLoadExample/__init__.py \ shipLoadExample/TaskPanel.py \ shipLoadExample/TaskPanel.ui \ @@ -96,7 +97,11 @@ nobase_data_DATA = \ simRun/__init__.py \ simRun/Simulation.py \ simRun/TaskPanel.py \ - simRun/TaskPanel.ui + simRun/TaskPanel.ui \ + simRun/Sim/__init__.py \ + simRun/Sim/initialization.py + simRun/Sim/Utils.py + CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/OpenCL/simInit.cl b/src/Mod/Ship/OpenCL/simInit.cl new file mode 100644 index 000000000..7bb8a3c2f --- /dev/null +++ b/src/Mod/Ship/OpenCL/simInit.cl @@ -0,0 +1,99 @@ +/* + * ----------------------------------------------------------------------- + * + * This source file is part of AQUA-gpusph. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA + * + * + * Authors: + * - Cercos Pita, Jose Luis + * - Miguel Gonzalez, Leo + * - Saelices, Jaime + * - Souto Iglesias, Antonio + * + * ----------------------------------------------------------------------- + */ + +#ifndef M_PI + #define M_PI 3,14159265359 +#endif + +#ifdef _g + #error '_g' is already defined. +#endif +#define _g __global + +#ifdef _l + #error '_l' is already defined. +#endif +#define _l __local + +#ifdef _c + #error '_c' is already defined. +#endif +#define _c __constant + +#ifndef _grav + #define _grav 9.81 +#endif + +/** Setup velocity and acceleration potential for initial time step. + * @param pos Cell position. + * @param v Cell velocity. + * @param f Cell acceleration. + * @param waves Waves (A,T,phase,heading) + * @param phi Velocity potential. + * @param Phi Acceleration potential + * @param N Number of cell elements at each direction. + * @param n Number of waves. + */ +__kernel void FS(_g float4* pos, _g float4* v, _g float4* f, + _g float4* waves, _g float* phi, _g float* Phi, + uint2 N, uint n) +{ + // find position in global arrays + unsigned int i = get_global_id(0); + unsigned int j = get_global_id(1); + if( (i >= N.x) || (j >= N.y) ) + return; + unsigned int id = i*N.y + j; + + // ---- | ------------------------ | ---- + // ---- V ---- Your code here ---- V ---- + + unsigned int w; + for(w=0;wDcHh@xzwJ zvtJ+3pH_PR5LF#i)k!%qXYh0D*ux%k95J3dW8u(Ed~z!N`3G=0vc_}{y1ogyQx=2# z^4NIPO;kD`;loLN1A@8Aop)_Ed4`7#@0Qa0HdG{wJA@PuQAk{w3X3ggCiSKJHbAm8 z$zuM#Wx?4rUKANSRC@07v5TdF-D>7rh*USvsu$QfR#CXEw$+x30-272W;vZrY%rZ$ zApy^Y;g+i12~7V8b)J@(2e)_!@Q+KiV@P7zw>f{00jwnk=U&j@6jB(2v4f4{0a3W2 z(gg&ZTS(f6fX)FI^BEMqQ8d$Z^_;aMfDR$;vB^Y~r_gCx%7HMRJ@260 zy%TU(Y#1q;=QdFxkk5I)B4b`;=1S=DIT=sQp|z#0t?TgP44hGp=Jzt2M@VyNJWu8b z030FX8>rkC7FuhlNHtW5-%GUtxy|h9$yH)L&oANeH1F|5g-bm)^q9@7dPVw=*Nd^) StMAu`XOM-|J3+J6Z2SeBBtl;R literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/shipUtils/__init__.pyc b/src/Mod/Ship/shipUtils/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..711c3c8e986a40fc9e96644870d2ee3a44185970 GIT binary patch literal 159 zcmZSn%**v&T_7Nt0SXv_v;zR5ttd4$IWa{aMC*bW#YM^bzWFKo!5Nta`o%yZv?Md9SU)~KGcU6wK3=b& XvV;R@m`!eeN@-529mvXJAZ7pnse&aU literal 0 HcmV?d00001 diff --git a/src/Mod/Ship/simRun/Sim/Utils.py b/src/Mod/Ship/simRun/Sim/Utils.py new file mode 100644 index 000000000..1d085b9ec --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/Utils.py @@ -0,0 +1,57 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256.0 + return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py~ b/src/Mod/Ship/simRun/Sim/Utils.py~ new file mode 100644 index 000000000..7c37bfab2 --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/Utils.py~ @@ -0,0 +1,58 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + print(str) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256.0 + return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py new file mode 100644 index 000000000..2fcb8e495 --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -0,0 +1,24 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import initialization, Utils \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Sim/__init__.py~ b/src/Mod/Ship/simRun/Sim/__init__.py~ new file mode 100644 index 000000000..30db4bcdb --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/__init__.py~ @@ -0,0 +1,57 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD +from shipUtils import Paths + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# Standard +import math + +def loadProgram(context, file): + """ Loads a file and comnpile it. + @param context OpenCL context where apply. + @param file File to load and compile. + @return Ready to use OpenCL program. + """ + f = open(file, 'r') + str = "".join(f.readlines()) + return cl.Program(context, str).build() + +def clPath(): + """ Gets the OpenCL kernels path + @return OpenCL kernels path + """ + path = Paths.modulePath() + "/OpenCL" + return path + +def globalSize(n): + """ Compute global size from amount of data. + @param n Amount of data. + @return global size. + """ + localSize = 256 + return int(math.ceil(n/localSize)) diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py new file mode 100644 index 000000000..90bdf5bfa --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -0,0 +1,113 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Simulation stuff +from Utils import * + +# pyOpenCL +import pyopencl as cl +import numpy as np + +class perform: + def __init__(self, context, queue, FSmesh, waves): + """ Constructor, includes program loading. + @param context OpenCL context where apply. + @param queue OpenCL command queue. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + self.context = context + self.queue = queue + self.program = loadProgram(context, clPath() + "/simInit.cl") + self.loadData(FSmesh, waves) + self.execute() + + def loadData(self, FSmesh, waves): + """ Convert data to numpy format, and create OpenCL + buffers. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + mf = cl.mem_flags + nx = len(FSmesh) + ny = len(FSmesh[0]) + nW = len(waves) + # Mesh data + p = np.ndarray((nx*ny, 4), dtype=np.float32) + n = np.ndarray((nx*ny, 4), dtype=np.float32) + a = np.ndarray((nx*ny, 1), dtype=np.float32) + for i in range(0, nx): + for j in range(0, ny): + id = i*ny + j + pos = FSmesh[i][j].pos + normal = FSmesh[i][j].normal + area = FSmesh[i][j].area + p[id,0] = pos.x + p[id,1] = pos.y + p[id,2] = pos.z + p[id,3] = 1. + n[id,0] = normal.x + n[id,1] = normal.y + n[id,2] = normal.z + n[id,3] = 0. + a[id,0] = area + p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) + n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) + a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) + v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ + 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + # Waves data + w = np.ndarray((nW, 4), dtype=np.float32) + for i in range(0,nW): + w[i,0] = waves[i][0] + w[i,1] = waves[i][1] + w[i,2] = waves[i][2] + w[i,3] = waves[i][3] + w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) + self.waves = {'N':nW, 'data':w_cl} + # Ensure that all data has been written + self.queue.finish() + + def execute(self): + """ Compute initial conditions. """ + # Global size computation + N = np.ndarray((2, 1), dtype=np.uint32) + N[0] = self.fs['Nx'] + N[1] = self.fs['Ny'] + n = np.uint32(self.waves['N']) + gSize = (globalSize(N[0]),globalSize(N[1]),) + # Kernel arguments + kernelargs = (self.fs['pos'], + self.fs['vel'], + self.fs['acc'], + self.waves['data'], + self.fs['velPot'], + self.fs['accPot'], + N, n) + # Kernel launch + self.program.FS(self.queue, gSize, None, *(kernelargs)) + self.queue.finish() diff --git a/src/Mod/Ship/simRun/Sim/initialization.py~ b/src/Mod/Ship/simRun/Sim/initialization.py~ new file mode 100644 index 000000000..63cc9f3aa --- /dev/null +++ b/src/Mod/Ship/simRun/Sim/initialization.py~ @@ -0,0 +1,117 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# Simulation stuff +from Utils import * + +# pyOpenCL +import pyopencl as cl +import numpy as np + +class perform: + def __init__(self, context, queue, FSmesh, waves): + """ Constructor, includes program loading. + @param context OpenCL context where apply. + @param queue OpenCL command queue. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + self.context = context + self.queue = queue + self.program = loadProgram(context, clPath() + "/simInit.cl") + self.loadData(FSmesh, waves) + self.execute() + + def loadData(self, FSmesh, waves): + """ Convert data to numpy format, and create OpenCL + buffers. + @param FSmesh Initial free surface mesh. + @param waves Considered simulation waves (A,T,phi,heading). + """ + mf = cl.mem_flags + nx = len(FSmesh) + ny = len(FSmesh[0]) + nW = len(waves) + # Mesh data + p = np.ndarray((nx*ny, 4), dtype=np.float32) + n = np.ndarray((nx*ny, 4), dtype=np.float32) + a = np.ndarray((nx*ny, 1), dtype=np.float32) + for i in range(0, nx): + for j in range(0, ny): + id = i*ny + j + pos = FSmesh[i][j].pos + normal = FSmesh[i][j].normal + area = FSmesh[i][j].area + p[id,0] = pos.x + p[id,1] = pos.y + p[id,2] = pos.z + p[id,3] = 1. + n[id,0] = normal.x + n[id,1] = normal.y + n[id,2] = normal.z + n[id,3] = 0. + a[id,0] = area + p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) + n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) + a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) + v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) + phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ + 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + # Waves data + w = np.ndarray((nW, 4), dtype=np.float32) + for i in range(0,nW): + w[i,0] = waves[i][0] + w[i,1] = waves[i][1] + w[i,2] = waves[i][2] + w[i,3] = waves[i][3] + w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) + self.waves = {'N':nW, 'data':w_cl} + # Ensure that all data has been written + self.queue.finish() + + def execute(self): + """ Compute initial conditions. """ + # Global size computation + N = np.ndarray((2, 1), dtype=np.uint32) + N[0] = self.fs['Nx'] + N[1] = self.fs['Ny'] + n = np.uint32(self.waves['N']) + gSize = (globalSize(N[0]),globalSize(N[1]),) + print(gSize) + # Kernel arguments + kernelargs = (self.fs['pos'], + self.fs['vel'], + self.fs['acc'], + self.waves['data'], + self.fs['velPot'], + self.fs['accPot'], + N, n) + print('Launching...') + # Kernel launch + self.program.FS(self.queue, gSize, None, *(kernelargs)) + print('Waiting...') + self.queue.finish() + print('OK!') diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 32b570757..6ffd9fe0c 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -1,97 +1,105 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -import time -from math import * -import threading - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# FreeCAD -import FreeCAD,FreeCADGui -from FreeCAD import Base, Vector -import Part - -# Ship design module -from shipUtils import Paths, Translator, Math - -class Singleton(type): - def __init__(cls, name, bases, dct): - cls.__instance = None - type.__init__(cls, name, bases, dct) - - def __call__(cls, *args, **kw): - if cls.__instance is None: - cls.__instance = type.__call__(cls, *args,**kw) - return cls.__instance - -class FreeCADShipSimulation(threading.Thread): - __metaclass__ = Singleton - def __init__ (self, device, endTime, output, FSmesh, waves): - """ Thread constructor. - @param device Device to use. - @param endTime Maximum simulation time. - @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. - @param FSmesh Free surface mesh faces. - @param waves Waves parameters (A,T,phi,heading) - """ - threading.Thread.__init__(self) - # Setup as stopped - self.active = False - # Build OpenCL context and command queue - self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) - # Storage data - self.endTime = endTime - self.output = output - self.FSmesh = FSmesh - self.waves = waves - - def run(self): - """ Runs the simulation. - """ - self.active = True - # Perform work here - while self.active: - print("Im thread, Im running...") - time.sleep(1) - # ... - print("Im thread, step done!") - # Set thread as stopped (and prepare it to restarting) - self.active = False - threading.Event().set() - threading.Thread.__init__(self) - - def stop(self): - """ Call to stop execution. - """ - self.active = False - - def isRunning(self): - """ Report thread state - @return True if thread is running, False otherwise. - """ - return self.active +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Base, Vector +import Part + +# Simulation stuff +from Sim import initialization + +# Ship design module +from shipUtils import Paths, Translator, Math + +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + +class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton + def __init__ (self, device, endTime, output, FSmesh, waves): + """ Thread constructor. + @param device Device to use. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + # Setup as stopped + self.active = False + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + self.active = True + # Perform work here + msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") + FreeCAD.Console.PrintMessage(msg) + init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") + FreeCAD.Console.PrintMessage(msg) + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active diff --git a/src/Mod/Ship/simRun/Simulation.py~ b/src/Mod/Ship/simRun/Simulation.py~ new file mode 100644 index 000000000..03a443779 --- /dev/null +++ b/src/Mod/Ship/simRun/Simulation.py~ @@ -0,0 +1,107 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +import time +from math import * +import threading + +# pyOpenCL +import pyopencl as cl +import numpy as np + +# FreeCAD +import FreeCAD,FreeCADGui +from FreeCAD import Base, Vector +import Part + +# Simulation stuff +from Sim import initialization + +# Ship design module +from shipUtils import Paths, Translator, Math + +class Singleton(type): + def __init__(cls, name, bases, dct): + cls.__instance = None + type.__init__(cls, name, bases, dct) + + def __call__(cls, *args, **kw): + if cls.__instance is None: + cls.__instance = type.__call__(cls, *args,**kw) + return cls.__instance + +class FreeCADShipSimulation(threading.Thread): + __metaclass__ = Singleton + def __init__ (self, device, endTime, output, FSmesh, waves): + """ Thread constructor. + @param device Device to use. + @param endTime Maximum simulation time. + @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. + @param FSmesh Free surface mesh faces. + @param waves Waves parameters (A,T,phi,heading) + """ + threading.Thread.__init__(self) + # Setup as stopped + self.active = False + # Build OpenCL context and command queue + self.device = device + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) + # Storage data + self.endTime = endTime + self.output = output + self.FSmesh = FSmesh + self.waves = waves + + def run(self): + """ Runs the simulation. + """ + self.active = True + # Perform work here + msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") + FreeCAD.Console.PrintMessage(msg) + init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") + FreeCAD.Console.PrintMessage(msg) + while self.active: + print("Im thread, Im running...") + time.sleep(1) + # ... + print("Im thread, step done!") + msg = Translator.translate("\t[Sim]: Output performed!\n") + FreeCAD.Console.PrintMessage(msg) + # Set thread as stopped (and prepare it to restarting) + self.active = False + threading.Event().set() + threading.Thread.__init__(self) + + def stop(self): + """ Call to stop execution. + """ + self.active = False + + def isRunning(self): + """ Report thread state + @return True if thread is running, False otherwise. + """ + return self.active From eac9182ac95bc62101c33a8bf81957000d645e64 Mon Sep 17 00:00:00 2001 From: Jose Luis Cercos Pita Date: Tue, 31 Jul 2012 18:37:10 +0200 Subject: [PATCH 26/26] Added non OpenCL solver (will be developed first) --- src/Mod/Ship/CMakeLists.txt | 4 +- src/Mod/Ship/Makefile.am | 5 +- src/Mod/Ship/simRun/Sim/Utils.py~ | 58 --- src/Mod/Ship/simRun/Sim/__init__.py | 2 +- src/Mod/Ship/simRun/Sim/initialization.py | 111 ++--- src/Mod/Ship/simRun/Simulation.py | 19 +- src/Mod/Ship/simRun/Simulation.py~ | 107 ----- src/Mod/Ship/simRun/TaskPanel.py | 407 +++++++++--------- src/Mod/Ship/simRun/{Sim => clSim}/Utils.py | 0 .../{Sim/__init__.py~ => clSim/__init__.py} | 35 +- .../initialization.py} | 12 +- 11 files changed, 284 insertions(+), 476 deletions(-) delete mode 100644 src/Mod/Ship/simRun/Sim/Utils.py~ delete mode 100644 src/Mod/Ship/simRun/Simulation.py~ rename src/Mod/Ship/simRun/{Sim => clSim}/Utils.py (100%) rename src/Mod/Ship/simRun/{Sim/__init__.py~ => clSim/__init__.py} (68%) rename src/Mod/Ship/simRun/{Sim/initialization.py~ => clSim/initialization.py} (96%) diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt index 5f0314abd..432c91576 100644 --- a/src/Mod/Ship/CMakeLists.txt +++ b/src/Mod/Ship/CMakeLists.txt @@ -145,9 +145,11 @@ SET(SimRun_SRCS simRun/Simulation.py simRun/TaskPanel.py simRun/TaskPanel.ui + simRun/clSim/__init__.py + simRun/clSim/initialization.py + simRun/clSim/Utils.py simRun/Sim/__init__.py simRun/Sim/initialization.py - simRun/Sim/Utils.py ) SOURCE_GROUP("simrun" FILES ${SimRun_SRCS}) diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am index 084e9a877..f2477550b 100644 --- a/src/Mod/Ship/Makefile.am +++ b/src/Mod/Ship/Makefile.am @@ -98,10 +98,11 @@ nobase_data_DATA = \ simRun/Simulation.py \ simRun/TaskPanel.py \ simRun/TaskPanel.ui \ + simRun/clSim/__init__.py \ + simRun/clSim/initialization.py \ + simRun/clSim/Utils.py \ simRun/Sim/__init__.py \ simRun/Sim/initialization.py - simRun/Sim/Utils.py - CLEANFILES = $(BUILT_SOURCES) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py~ b/src/Mod/Ship/simRun/Sim/Utils.py~ deleted file mode 100644 index 7c37bfab2..000000000 --- a/src/Mod/Ship/simRun/Sim/Utils.py~ +++ /dev/null @@ -1,58 +0,0 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -# FreeCAD -from shipUtils import Paths - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# Standard -import math - -def loadProgram(context, file): - """ Loads a file and comnpile it. - @param context OpenCL context where apply. - @param file File to load and compile. - @return Ready to use OpenCL program. - """ - f = open(file, 'r') - str = "".join(f.readlines()) - print(str) - return cl.Program(context, str).build() - -def clPath(): - """ Gets the OpenCL kernels path - @return OpenCL kernels path - """ - path = Paths.modulePath() + "/OpenCL" - return path - -def globalSize(n): - """ Compute global size from amount of data. - @param n Amount of data. - @return global size. - """ - localSize = 256.0 - return int(math.ceil(n/localSize)*localSize) diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py index 2fcb8e495..f5acc886b 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py +++ b/src/Mod/Ship/simRun/Sim/__init__.py @@ -21,4 +21,4 @@ #* * #*************************************************************************** -import initialization, Utils \ No newline at end of file +import initialization diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py index 90bdf5bfa..1c443ca85 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py +++ b/src/Mod/Ship/simRun/Sim/initialization.py @@ -21,65 +21,62 @@ #* * #*************************************************************************** -# Simulation stuff -from Utils import * - -# pyOpenCL -import pyopencl as cl +# numpy import numpy as np +grav=9.81 + class perform: - def __init__(self, context, queue, FSmesh, waves): + def __init__(self, FSmesh, waves, context=None, queue=None): """ Constructor, includes program loading. - @param context OpenCL context where apply. - @param queue OpenCL command queue. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). + @param context OpenCL context where apply. Only for compatibility, + must be None. + @param queue OpenCL command queue. Only for compatibility, + must be None. """ self.context = context self.queue = queue - self.program = loadProgram(context, clPath() + "/simInit.cl") self.loadData(FSmesh, waves) self.execute() def loadData(self, FSmesh, waves): - """ Convert data to numpy format, and create OpenCL - buffers. + """ Convert data to numpy format. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). """ - mf = cl.mem_flags nx = len(FSmesh) ny = len(FSmesh[0]) nW = len(waves) # Mesh data - p = np.ndarray((nx*ny, 4), dtype=np.float32) - n = np.ndarray((nx*ny, 4), dtype=np.float32) - a = np.ndarray((nx*ny, 1), dtype=np.float32) + p = np.ndarray((nx,ny, 3), dtype=np.float32) + v = np.ndarray((nx,ny, 3), dtype=np.float32) + f = np.ndarray((nx,ny, 3), dtype=np.float32) + n = np.ndarray((nx,ny, 3), dtype=np.float32) + a = np.ndarray((nx,ny, 1), dtype=np.float32) + phi = np.ndarray((nx,ny, 1), dtype=np.float32) + Phi = np.ndarray((nx,ny, 1), dtype=np.float32) for i in range(0, nx): for j in range(0, ny): - id = i*ny + j pos = FSmesh[i][j].pos normal = FSmesh[i][j].normal area = FSmesh[i][j].area - p[id,0] = pos.x - p[id,1] = pos.y - p[id,2] = pos.z - p[id,3] = 1. - n[id,0] = normal.x - n[id,1] = normal.y - n[id,2] = normal.z - n[id,3] = 0. - a[id,0] = area - p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p) - n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n) - a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a) - v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) - f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize) - phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) - Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize) - self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \ - 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi} + p[i,j,0] = pos.x + p[i,j,1] = pos.y + p[i,j,2] = pos.z + v[i,j,0] = 0. + v[i,j,1] = 0. + v[i,j,2] = 0. + f[i,j,0] = 0. + f[i,j,1] = 0. + f[i,j,2] = 0. + n[i,j,0] = normal.x + n[i,j,1] = normal.y + n[i,j,2] = normal.z + a[i,j] = area + self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'vel':v, 'acc':f, \ + 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi} # Waves data w = np.ndarray((nW, 4), dtype=np.float32) for i in range(0,nW): @@ -87,27 +84,31 @@ class perform: w[i,1] = waves[i][1] w[i,2] = waves[i][2] w[i,3] = waves[i][3] - w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w) - self.waves = {'N':nW, 'data':w_cl} - # Ensure that all data has been written - self.queue.finish() + self.waves = {'N':nW, 'data':w} def execute(self): """ Compute initial conditions. """ - # Global size computation - N = np.ndarray((2, 1), dtype=np.uint32) - N[0] = self.fs['Nx'] - N[1] = self.fs['Ny'] - n = np.uint32(self.waves['N']) - gSize = (globalSize(N[0]),globalSize(N[1]),) - # Kernel arguments - kernelargs = (self.fs['pos'], - self.fs['vel'], - self.fs['acc'], - self.waves['data'], - self.fs['velPot'], - self.fs['accPot'], - N, n) - # Kernel launch - self.program.FS(self.queue, gSize, None, *(kernelargs)) - self.queue.finish() + nx = self.fs['Nx'] + ny = self.fs['Ny'] + for i in range(0,nx): + for j in range(0,ny): + for w in self.waves['data']: + A = w[0] + T = w[1] + phase = w[2] + heading = np.pi*w[3]/180.0 + wl = 0.5 * grav / np.pi * T*T + k = 2.0*np.pi/wl + frec = 2.0*np.pi/T + pos = self.fs['pos'][i,j] + l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading) + amp = A*np.sin(k*l + phase) + self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp + amp = frec*A*np.cos(k*l + phase) + self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp + amp = frec*frec*A*np.sin(k*l + phase) + self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp + amp = grav/frec*A*np.sin(k*l + phase) + self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp + amp = grav*A*np.cos(k*l + phase) + self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py index 6ffd9fe0c..a06f6b0d2 100644 --- a/src/Mod/Ship/simRun/Simulation.py +++ b/src/Mod/Ship/simRun/Simulation.py @@ -34,9 +34,6 @@ import FreeCAD,FreeCADGui from FreeCAD import Base, Vector import Part -# Simulation stuff -from Sim import initialization - # Ship design module from shipUtils import Paths, Translator, Math @@ -65,8 +62,12 @@ class FreeCADShipSimulation(threading.Thread): self.active = False # Build OpenCL context and command queue self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) + if self.device == None: # Can't use OpenCL + self.context = None + self.queue = None + else: + self.context = cl.Context(devices=[self.device]) + self.queue = cl.CommandQueue(self.context) # Storage data self.endTime = endTime self.output = output @@ -77,10 +78,14 @@ class FreeCADShipSimulation(threading.Thread): """ Runs the simulation. """ self.active = True - # Perform work here + # Simulation stuff + if self.device == None: + from Sim import initialization + else: + from clSim import initialization msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") FreeCAD.Console.PrintMessage(msg) - init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) + init = initialization.perform(self.FSmesh,self.waves,self.context,self.queue) msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") FreeCAD.Console.PrintMessage(msg) while self.active: diff --git a/src/Mod/Ship/simRun/Simulation.py~ b/src/Mod/Ship/simRun/Simulation.py~ deleted file mode 100644 index 03a443779..000000000 --- a/src/Mod/Ship/simRun/Simulation.py~ +++ /dev/null @@ -1,107 +0,0 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -import time -from math import * -import threading - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# FreeCAD -import FreeCAD,FreeCADGui -from FreeCAD import Base, Vector -import Part - -# Simulation stuff -from Sim import initialization - -# Ship design module -from shipUtils import Paths, Translator, Math - -class Singleton(type): - def __init__(cls, name, bases, dct): - cls.__instance = None - type.__init__(cls, name, bases, dct) - - def __call__(cls, *args, **kw): - if cls.__instance is None: - cls.__instance = type.__call__(cls, *args,**kw) - return cls.__instance - -class FreeCADShipSimulation(threading.Thread): - __metaclass__ = Singleton - def __init__ (self, device, endTime, output, FSmesh, waves): - """ Thread constructor. - @param device Device to use. - @param endTime Maximum simulation time. - @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF. - @param FSmesh Free surface mesh faces. - @param waves Waves parameters (A,T,phi,heading) - """ - threading.Thread.__init__(self) - # Setup as stopped - self.active = False - # Build OpenCL context and command queue - self.device = device - self.context = cl.Context(devices=[self.device]) - self.queue = cl.CommandQueue(self.context) - # Storage data - self.endTime = endTime - self.output = output - self.FSmesh = FSmesh - self.waves = waves - - def run(self): - """ Runs the simulation. - """ - self.active = True - # Perform work here - msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n") - FreeCAD.Console.PrintMessage(msg) - init = initialization.perform(self.context,self.queue,self.FSmesh,self.waves) - msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n") - FreeCAD.Console.PrintMessage(msg) - while self.active: - print("Im thread, Im running...") - time.sleep(1) - # ... - print("Im thread, step done!") - msg = Translator.translate("\t[Sim]: Output performed!\n") - FreeCAD.Console.PrintMessage(msg) - # Set thread as stopped (and prepare it to restarting) - self.active = False - threading.Event().set() - threading.Thread.__init__(self) - - def stop(self): - """ Call to stop execution. - """ - self.active = False - - def isRunning(self): - """ Report thread state - @return True if thread is running, False otherwise. - """ - return self.active diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py index 2e41ff15a..d2c34b8b7 100644 --- a/src/Mod/Ship/simRun/TaskPanel.py +++ b/src/Mod/Ship/simRun/TaskPanel.py @@ -1,203 +1,204 @@ -#*************************************************************************** -#* * -#* Copyright (c) 2011, 2012 * -#* Jose Luis Cercos Pita * -#* * -#* This program is free software; you can redistribute it and/or modify * -#* it under the terms of the GNU Lesser General Public License (LGPL) * -#* as published by the Free Software Foundation; either version 2 of * -#* the License, or (at your option) any later version. * -#* for detail see the LICENCE text file. * -#* * -#* This program is distributed in the hope that it will be useful, * -#* but WITHOUT ANY WARRANTY; without even the implied warranty of * -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -#* GNU Library General Public License for more details. * -#* * -#* You should have received a copy of the GNU Library General Public * -#* License along with this program; if not, write to the Free Software * -#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -#* USA * -#* * -#*************************************************************************** - -# FreeCAD modules -import FreeCAD as App -import FreeCADGui as Gui -# Qt library -from PyQt4 import QtGui,QtCore -# pyOpenCL -import pyopencl as cl -# Module -import SimInstance -from shipUtils import Paths, Translator -from Simulation import FreeCADShipSimulation as Sim - -import time - -class TaskPanel: - def __init__(self): - self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" - self.sim = False - - def accept(self): - msg = Translator.translate("Building data...\n") - App.Console.PrintMessage(msg) - # Get GUI data - endTime = self.form.time.value() - output = [] - output.append(self.form.output.value()) - output.append(self.form.outputType.currentIndex()) - devId = self.form.device.currentIndex() - # Get OpenCL device - count = 0 - platforms = cl.get_platforms() - for p in platforms: - devs = p.get_devices() - for d in devs: - if count == devId: - device = d - count = count + 1 - # Get free surfaces data - FSMesh = SimInstance.FSMesh(self.sim) - wData = self.sim.Waves - wDir = self.sim.Waves_Dir - waves = [] - for i in range(0,len(wData)): - waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) - msg = Translator.translate("Launching simulation...\n") - App.Console.PrintMessage(msg) - # Build simulation thread - simulator = Sim(device, endTime, output, FSMesh, waves) - simulator.start() - msg = Translator.translate("Done!\n") - App.Console.PrintMessage(msg) - return True - - def reject(self): - return True - - def clicked(self, index): - pass - - def open(self): - pass - - def needsFullSpace(self): - return True - - def isAllowedAlterSelection(self): - return False - - def isAllowedAlterView(self): - return True - - def isAllowedAlterDocument(self): - return False - - def helpRequested(self): - pass - - def setupUi(self): - mw = self.getMainWindow() - form = mw.findChild(QtGui.QWidget, "TaskPanel") - form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") - form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") - form.outputType = form.findChild(QtGui.QComboBox, "OutputType") - form.device = form.findChild(QtGui.QComboBox, "Device") - self.form = form - # Initial values - if self.initValues(): - return True - self.retranslateUi() - # Connect Signals and Slots - # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) - - def getMainWindow(self): - "returns the main window" - # using QtGui.qApp.activeWindow() isn't very reliable because if another - # widget than the mainwindow is active (e.g. a dialog) the wrong widget is - # returned - toplevel = QtGui.qApp.topLevelWidgets() - for i in toplevel: - if i.metaObject().className() == "Gui::MainWindow": - return i - raise Exception("No main window found") - - def initValues(self): - """ Set initial values for fields - """ - # Get objects - selObjs = Gui.Selection.getSelection() - if not selObjs: - msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") - App.Console.PrintError(msg) - return True - for i in range(0,len(selObjs)): - obj = selObjs[i] - # Test if is a ship instance - props = obj.PropertiesList - try: - props.index("IsShipSimulation") - except ValueError: - continue - if obj.IsShipSimulation: - # Test if another ship already selected - if self.sim: - msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") - App.Console.PrintWarning(msg) - break - self.sim = obj - # Test if any valid ship was selected - if not self.sim: - msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") - App.Console.PrintError(msg) - return True - # Get the list of devices - devices = [] - platforms = cl.get_platforms() - for p in platforms: - devs = p.get_devices() - for d in devs: - devices.append([p,d]) - dname = d.get_info(cl.device_info.NAME) - pname = p.get_info(cl.platform_info.NAME) - self.form.device.addItem(dname + " (" + pname + ")") - if not len(devices): - msg = Translator.translate("This tool requires an active OpenCL context to work\n") - App.Console.PrintError(msg) - return True - msg = Translator.translate("Ready to work\n") - App.Console.PrintMessage(msg) - return False - - def retranslateUi(self): - """ Set user interface locale strings. - """ - self.form.setWindowTitle(Translator.translate("Run the simulation")) - self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) - self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) - self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) - -def createTask(): - panel = TaskPanel() - Gui.Control.showDialog(panel) - if panel.setupUi(): - Gui.Control.closeDialog(panel) - return None - return panel - -def stopSimulation(): - try: - simulator = Sim() - if not simulator.isRunning(): - msg = Translator.translate("Simulation already stopped\n") - App.Console.PrintWarning(msg) - return - except: - msg = Translator.translate("Any active simulation to stop!\n") - App.Console.PrintError(msg) - return - simulator.stop() - msg = Translator.translate("Simulation will stop at the end of actual iteration\n") - App.Console.PrintMessage(msg) +#*************************************************************************** +#* * +#* Copyright (c) 2011, 2012 * +#* Jose Luis Cercos Pita * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +# FreeCAD modules +import FreeCAD as App +import FreeCADGui as Gui +# Qt library +from PyQt4 import QtGui,QtCore +# pyOpenCL +import pyopencl as cl +# Module +import SimInstance +from shipUtils import Paths, Translator +from Simulation import FreeCADShipSimulation as Sim + +import time + +class TaskPanel: + def __init__(self): + self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui" + self.sim = False + + def accept(self): + msg = Translator.translate("Building data...\n") + App.Console.PrintMessage(msg) + # Get GUI data + endTime = self.form.time.value() + output = [] + output.append(self.form.output.value()) + output.append(self.form.outputType.currentIndex()) + devId = self.form.device.currentIndex() - 1 # First is not OpenCL + # Get OpenCL device + device = None + count = 0 + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + if count == devId: + device = d + count = count + 1 + # Get free surfaces data + FSMesh = SimInstance.FSMesh(self.sim) + wData = self.sim.Waves + wDir = self.sim.Waves_Dir + waves = [] + for i in range(0,len(wData)): + waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]]) + msg = Translator.translate("Launching simulation...\n") + App.Console.PrintMessage(msg) + # Build simulation thread + simulator = Sim(device, endTime, output, FSMesh, waves) + simulator.start() + msg = Translator.translate("Done!\n") + App.Console.PrintMessage(msg) + return True + + def reject(self): + return True + + def clicked(self, index): + pass + + def open(self): + pass + + def needsFullSpace(self): + return True + + def isAllowedAlterSelection(self): + return False + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return False + + def helpRequested(self): + pass + + def setupUi(self): + mw = self.getMainWindow() + form = mw.findChild(QtGui.QWidget, "TaskPanel") + form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime") + form.output = form.findChild(QtGui.QDoubleSpinBox, "Output") + form.outputType = form.findChild(QtGui.QComboBox, "OutputType") + form.device = form.findChild(QtGui.QComboBox, "Device") + self.form = form + # Initial values + if self.initValues(): + return True + self.retranslateUi() + # Connect Signals and Slots + # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData) + + def getMainWindow(self): + "returns the main window" + # using QtGui.qApp.activeWindow() isn't very reliable because if another + # widget than the mainwindow is active (e.g. a dialog) the wrong widget is + # returned + toplevel = QtGui.qApp.topLevelWidgets() + for i in toplevel: + if i.metaObject().className() == "Gui::MainWindow": + return i + raise Exception("No main window found") + + def initValues(self): + """ Set initial values for fields + """ + # Get objects + selObjs = Gui.Selection.getSelection() + if not selObjs: + msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n") + App.Console.PrintError(msg) + return True + for i in range(0,len(selObjs)): + obj = selObjs[i] + # Test if is a ship instance + props = obj.PropertiesList + try: + props.index("IsShipSimulation") + except ValueError: + continue + if obj.IsShipSimulation: + # Test if another ship already selected + if self.sim: + msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n") + App.Console.PrintWarning(msg) + break + self.sim = obj + # Test if any valid ship was selected + if not self.sim: + msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n") + App.Console.PrintError(msg) + return True + # Get the list of devices + self.form.device.addItem("CPU based version (No OpenCL)") + devices = [] + platforms = cl.get_platforms() + for p in platforms: + devs = p.get_devices() + for d in devs: + devices.append([p,d]) + dname = d.get_info(cl.device_info.NAME) + pname = p.get_info(cl.platform_info.NAME) + self.form.device.addItem(dname + " (" + pname + ")") + if not len(devices): + msg = Translator.translate("Can't find OpenCL devices\n") + App.Console.PrintWarning(msg) + msg = Translator.translate("Ready to work\n") + App.Console.PrintMessage(msg) + return False + + def retranslateUi(self): + """ Set user interface locale strings. + """ + self.form.setWindowTitle(Translator.translate("Run the simulation")) + self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time")) + self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output")) + self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device")) + +def createTask(): + panel = TaskPanel() + Gui.Control.showDialog(panel) + if panel.setupUi(): + Gui.Control.closeDialog(panel) + return None + return panel + +def stopSimulation(): + try: + simulator = Sim() + if not simulator.isRunning(): + msg = Translator.translate("Simulation already stopped\n") + App.Console.PrintWarning(msg) + return + except: + msg = Translator.translate("Any active simulation to stop!\n") + App.Console.PrintError(msg) + return + simulator.stop() + msg = Translator.translate("Simulation will stop at the end of actual iteration\n") + App.Console.PrintMessage(msg) diff --git a/src/Mod/Ship/simRun/Sim/Utils.py b/src/Mod/Ship/simRun/clSim/Utils.py similarity index 100% rename from src/Mod/Ship/simRun/Sim/Utils.py rename to src/Mod/Ship/simRun/clSim/Utils.py diff --git a/src/Mod/Ship/simRun/Sim/__init__.py~ b/src/Mod/Ship/simRun/clSim/__init__.py similarity index 68% rename from src/Mod/Ship/simRun/Sim/__init__.py~ rename to src/Mod/Ship/simRun/clSim/__init__.py index 30db4bcdb..2fcb8e495 100644 --- a/src/Mod/Ship/simRun/Sim/__init__.py~ +++ b/src/Mod/Ship/simRun/clSim/__init__.py @@ -21,37 +21,4 @@ #* * #*************************************************************************** -# FreeCAD -from shipUtils import Paths - -# pyOpenCL -import pyopencl as cl -import numpy as np - -# Standard -import math - -def loadProgram(context, file): - """ Loads a file and comnpile it. - @param context OpenCL context where apply. - @param file File to load and compile. - @return Ready to use OpenCL program. - """ - f = open(file, 'r') - str = "".join(f.readlines()) - return cl.Program(context, str).build() - -def clPath(): - """ Gets the OpenCL kernels path - @return OpenCL kernels path - """ - path = Paths.modulePath() + "/OpenCL" - return path - -def globalSize(n): - """ Compute global size from amount of data. - @param n Amount of data. - @return global size. - """ - localSize = 256 - return int(math.ceil(n/localSize)) +import initialization, Utils \ No newline at end of file diff --git a/src/Mod/Ship/simRun/Sim/initialization.py~ b/src/Mod/Ship/simRun/clSim/initialization.py similarity index 96% rename from src/Mod/Ship/simRun/Sim/initialization.py~ rename to src/Mod/Ship/simRun/clSim/initialization.py index 63cc9f3aa..5e4f30417 100644 --- a/src/Mod/Ship/simRun/Sim/initialization.py~ +++ b/src/Mod/Ship/simRun/clSim/initialization.py @@ -29,12 +29,12 @@ import pyopencl as cl import numpy as np class perform: - def __init__(self, context, queue, FSmesh, waves): + def __init__(self, FSmesh, waves, context, queue): """ Constructor, includes program loading. - @param context OpenCL context where apply. - @param queue OpenCL command queue. @param FSmesh Initial free surface mesh. @param waves Considered simulation waves (A,T,phi,heading). + @param context OpenCL context where apply. + @param queue OpenCL command queue. """ self.context = context self.queue = queue @@ -100,7 +100,6 @@ class perform: N[1] = self.fs['Ny'] n = np.uint32(self.waves['N']) gSize = (globalSize(N[0]),globalSize(N[1]),) - print(gSize) # Kernel arguments kernelargs = (self.fs['pos'], self.fs['vel'], @@ -108,10 +107,7 @@ class perform: self.waves['data'], self.fs['velPot'], self.fs['accPot'], - N, n) - print('Launching...') + N, n) # Kernel launch self.program.FS(self.queue, gSize, None, *(kernelargs)) - print('Waiting...') self.queue.finish() - print('OK!')