diff --git a/QtPyLoT.py b/QtPyLoT.py index 4765be91..1ecab769 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -25,7 +25,8 @@ https://www.iconfinder.com/iconsets/flavour import sys -from PySide.QtCore import QCoreApplication, QSettings, Signal, QFile, QFileInfo +from PySide.QtCore import QCoreApplication, QSettings, Signal, QFile, \ + QFileInfo, Qt from PySide.QtGui import QMainWindow, QInputDialog, QIcon, QFileDialog, \ QWidget, QHBoxLayout, QStyle, QKeySequence, QLabel, QFrame, QAction, \ QDialog, QErrorMessage, QApplication @@ -37,8 +38,7 @@ from pylot.core.util import _getVersionString, FILTERDEFAULTS, fnConstructor, \ NewEventDlg, createEvent, MPLWidget, PropertiesDlg, HelpForm, \ DatastructureError, createAction, getLogin, createCreationInfo, PickDlg from pylot.core.util.structure import DATASTRUCTURE - - +import qrc_resources # Version information __version__ = _getVersionString() @@ -60,6 +60,7 @@ class MainWindow(QMainWindow): settings.setValue("user/Login", getLogin()) if settings.value("agency_id", None) is None: agency = QInputDialog.getText(self, "Enter authority name (e.g. BUG):", "Authority") + settings.setValue("agency_id", agency) self.recentEvents = settings.value("data/recentEvents", []) self.fnames = None self.dataStructure = DATASTRUCTURE[ @@ -106,6 +107,7 @@ class MainWindow(QMainWindow): xlab = self.startTime.strftime('seconds since %d %b %Y %H:%M:%S (%Z)') _widget = QWidget() + _widget.setCursor(Qt.CrossCursor) _layout = QHBoxLayout() plottitle = "Overview: {0} components ".format(self.getComponent()) @@ -121,24 +123,29 @@ class MainWindow(QMainWindow): saveIcon = self.style().standardIcon(QStyle.SP_DriveHDIcon) helpIcon = self.style().standardIcon(QStyle.SP_DialogHelpButton) newIcon = self.style().standardIcon(QStyle.SP_FileIcon) + pickIcon = QIcon(':/pick.png') newEventAction = self.createAction(self, "&New event ...", self.createNewEvent, QKeySequence.New, newIcon, "Create a new event.") - openEventAction = self.createAction(self, "&Open event ...", self.loadData, - QKeySequence.Open, openIcon, - "Open an event.") + openEventAction = self.createAction(self, "&Open event ...", + self.loadData, QKeySequence.Open, + openIcon, "Open an event.") openEventAction.setData(None) - saveEventAction = self.createAction(self, "&Save event ...", self.saveData, - QKeySequence.Save, saveIcon, - "Save actual event data.") + saveEventAction = self.createAction(self, "&Save event ...", + self.saveData, QKeySequence.Save, + saveIcon, "Save actual event data.") openWFDataAction = self.createAction(self, "Open &waveforms ...", self.loadWaveformData, "Ctrl+W", QIcon(":/wfIcon.png"), """Open waveform data (event will be closed).""") - - prefsEventAction = self.createAction(self, "Preferences", self.PyLoTprefs, + selectStation = self.createAction(self, "Select station", + self.pickOnStation, "Alt+P", pickIcon, + "Select a station from overview " + "plot for picking") + prefsEventAction = self.createAction(self, "Preferences", + self.PyLoTprefs, QKeySequence.Preferences, QIcon(None), "Edit PyLoT app preferences.") @@ -197,6 +204,11 @@ class MainWindow(QMainWindow): phaseToolBar.setObjectName("PhaseTools") self.addActions(phaseToolBar, phaseToolActions) + pickToolBar = self.addToolBar("PickTools") + pickToolActions = (selectStation, ) + pickToolBar.setObjectName("PickTools") + self.addActions(pickToolBar, pickToolActions) + self.eventLabel = QLabel() self.eventLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) status = self.statusBar() @@ -205,8 +217,9 @@ class MainWindow(QMainWindow): status.showMessage("Ready", 500) _widget.setLayout(_layout) - self.setCentralWidget(_widget) + _widget.showFullScreen() + self.setCentralWidget(_widget) def updateFileMenu(self): @@ -323,8 +336,13 @@ class MainWindow(QMainWindow): def getPlotWidget(self): return self.DataPlot - def getWFID(self): - return self.getPlotWidget().getStatID() + def getWFID(self, event): + + ycoord = event.ydata + + statID = round(ycoord) + + return statID def addActions(self, target, actions): for action in actions: @@ -433,9 +451,9 @@ class MainWindow(QMainWindow): self.updateStatus('Seismic phase changed to ' '{0}'.format(self.getSeismicPhase())) - def pickOnStation(self): + def pickOnStation(self, event): - wfID = self.getWFID() + wfID = self.getWFID(event) station = self.getStationName(wfID) self.pickDlgs[wfID] = PickDlg(self, diff --git a/icons/pick.png b/icons/pick.png new file mode 100644 index 00000000..10f1fc94 Binary files /dev/null and b/icons/pick.png differ diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index 1af5a0ea..b0c90a18 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -97,6 +97,7 @@ class Data(object): def plotWFData(self, widget): wfst = self.getWFData().select(component=self.getComp()) + widget.axes.cla() for n, trace in enumerate(wfst): stime = trace.stats.starttime - self.getCutTimes()[0] etime = trace.stats.endtime - self.getCutTimes()[1] diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index d5d5fa1b..8c6225fa 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -13,6 +13,7 @@ matplotlib.rcParams['backend.qt4'] = 'PySide' from matplotlib.figure import Figure from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.widgets import MultiCursor from PySide.QtGui import (QAction, QApplication, QComboBox, @@ -70,25 +71,13 @@ class MPLWidget(FigureCanvas): self.setParent(parent) self.figure = Figure() self.canvas = FigureCanvas(self.figure) - self.canvas.mpl_connect('button_press_event', self.emitSelection) self.axes = self.figure.add_subplot(111) self.axes.autoscale(tight=True) self._statID = None - + self.multiCursor = MultiCursor(self.canvas, (self.axes,), horizOn=True, + color='m', lw=1) self.updateWidget(xlabel, ylabel, title) - def emitSelection(self, event): - - self._statID = round(event.ydata) - if self.getParent(): - self.getParent().pickOnStation() - - def getStatID(self): - if self._statID is None: - return - else: - return self._statID - def getParent(self): return self._parent @@ -119,7 +108,6 @@ class multiComponentPlot(FigureCanvas): self.figure = Figure() self.canvas = FigureCanvas(self.figure) self.noc = len(components) - self.axeslist = [] def plotData(self, components, data): @@ -145,6 +133,7 @@ class multiComponentPlot(FigureCanvas): self.updateXLabel(self.noc, xlabel) else: self.updateXLabel(n, '') + self.multiCursor = MultiCursor(self.canvas, tuple(self.axeslist)) def insertLabel(self, pos, text): subax = self.axeslist[pos] diff --git a/qrc_resources.py b/qrc_resources.py index 9ee115e0..fdaeb26c 100644 --- a/qrc_resources.py +++ b/qrc_resources.py @@ -2,16 +2,16 @@ # Resource object code # -# Created: Mo. Dez. 8 09:32:58 2014 +# Created: Di. März 10 11:47:00 2015 # by: The Resource Compiler for PySide (Qt v4.8.6) # # WARNING! All changes made in this file will be lost! from PySide import QtCore -qt_resource_data = "\x00\x00\x02\xa2\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\x00\x00\x02iIDATx^\xedYM\x8b\xc20\x10\x9d\x96\xbd(\xa8\xa8\x08\xa27\xaf\xfe\x01\xf5\xa8\xff\xdb\xbb\x07\xaf\x1e\x14\xc4\x83\x17\x11\x05\x11?@\xa1K\x02sI\x98}\xc9NYYHaH\xda\xa6\x9d\xf7\xe6\xcd\xb4i\x9a\x15EA\xffy\xcb?\xe8;\x11H\x04\x12\x81D \x11H\x04\x12\x81\xaf\x90A\xdb\xed\xb6\xe0~\x96e\xdc\x8a}n\xdd\xad(\x0a\xb7\x95\xfa\xb6\x1d\x0c\x06\x19\xc2\xc6s!\x08\xbeV\xab10\xdc\xca\x1b\x03\x84\xed\xf5z\x0d\x22\xf1\x15\x0a\xbe\xd3\xe9\xd0\x1fo\x86\x84\xc5 \x90\xc0\x04\x18|\xb5Z\xa5\xdb\xed\xc6\xd1\x95\x22\x1e\xa7\x80\xac\x881\x0e\x18+\xa1.b\x00\xde\xf6\xfd}6\xff\x9c2\x18\x98\x00p&\x163\x9b|/\x7f\xbc\x8aD\x1e\x10u\x09\xbcD\x0c\x19R\xd4%\xa8R \xc6Ih\x0a\xc5(PN\x0aE\xa4\x99\x00\x16\x8c\xf3M\xa9\x00\x96\x16\x83\xc3\xfb\xc0\x8fB\x01l\xb2\xb3\xe7\xf3I\xa7\xd3\x89\x0e\x87\x03m6\x1b:\x9f\xcf\xe6\x98\xa0(\x04\xadV\xc0u\x08#\xb7\xdf\xefi\xb9\x5c\xd2n\xb73\xe0-\x89\xf9|N\x8b\xc5\x82\xde\xef7V\xd2\xef\x97V\xc4\xc1\xe7\x1b\x8d\x06\x8d\xc7c6\x9aN\xa7\xf4z\xbd\x0c1\x10q\xbd\x02\xd8\xe2\xa3d\xdf\xe4\xc3\xe1\xd0\xa6\xd6\xe3\xf1\xd0\xdcKO \xf6\xbd\xc1\xd6n\xb7\xed\xb1\xfb\xfd\x0e\x80~\x80\x00\x00\xc4\xc0Y\x0d\x97\xf0\xe7\x09\x84,O\xaeV+\xaa\xd7\xebT\xa9T\xc0u\xda\x0f\x1a=\x11S\xb0&\xdf9\xf2\xf6\xc9t\xb9\x5ch2\x99(\x81\xeb\x15`\x00b\x14\x19\xf4z\xbd6f\xc1w\xbb]\x9a\xcdffj\x8e\xee\xa5P\x00\x8369\x0b\xcf\xf3ct4\x1a\xa1\xaf\xb1R\xd23\x07\xa0\x8d\x81\x889\xad|\xddO\xe3\x7f\xadH\xae\xccwD\x90-\xf0k\xac|\x05@\xeb\x81\x15#\xee\xefc%\xf55\xc0 \xf1\x18\xb0\x94\x22\xf4\xb1o\x9d\x02X\x0d?\xd2\xadV\x8b\xfa\xfd>\x1fg\x93\x22\x1e\x12}u\x0a\xb1\x05\x15_\xb3\xd9\xa4^\xaf\xc7\xe0D\x228\x85\xf4\x0a\xa0|\x05\xb9.\xde+F\x81\xd2S(\xb6\x88\xd9\xc0X\x00\x1e\x16q\xfc\xcb\x8c\xfbN\x01\x03\xa7\x8a\x02\xc7\x0a\xe8\x9d\xb2!\xd0lj\xf0X\x01\xac\x84\xab\x80b\x9a\xa0\x98\x0b\x81\x05V\x9e\xc7\xbb\xceD\xd0\xf8\x9d\x80\xc9\x1c\x8fG\xf6]\xda\xf2z\xf8\xea\x9d>\xf2\xce\xf2:&\x00ID/A\xea\xd3F\xff\x83\x03[\xfaG\x96\x08|\x03\xf7\x03\x9fA\x22K\x9b\x82\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x02\xf9PyLoT - the Python picking and Localisation Tool\x0a\x0a

PyLoT is a program which is capable of picking seismic phases,\x0aexporting these as numerous standard phase format and localize the corresponding\x0aseismic event with external software as, e.g.:

\x0a\x0a

Read more on the\x0aPyLoT WikiPage.

\x0a

Bug reports are very much appreciated and can also be delivered on our\x0aPyLoT TracPage after\x0asuccessful registration.

\x0a\x0a\x00\x00\x08\xbe\x00\x00\x01\x00\x01\x00 \x00\x00\x01\x00\x08\x00\xa8\x08\x00\x00\x16\x00\x00\x00(\x00\x00\x00 \x00\x00\x00@\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x0f\x0f\x00\x13\x13\x13\x00\x14\x14\x14\x00\x15\x15\x15\x00\x16\x16\x16\x00\x17\x17\x17\x00\x19\x19\x19\x00\x1b\x1b\x1b\x00\x1c\x1c\x1c\x00\x1e\x1e\x1e\x00\x1f\x1f\x1f\x00 \x00!!!\x00\x22\x22\x22\x00#\x22#\x00$$$\x00%%%\x00'''\x00)))\x00+++\x00,,,\x00---\x00...\x00///\x00000\x00111\x00333\x00555\x00666\x00888\x00999\x00:::\x00;;;\x00<<<\x00>>>\x00???\x00AAA\x00BBB\x00CCC\x00DDD\x00FFF\x00GGG\x00HHH\x00III\x00JJJ\x00KKK\x00LLL\x00MMM\x00NNN\x00PPP\x00QQQ\x00RRR\x00SSS\x00TTT\x00VVV\x00WWW\x00YYY\x00ZZZ\x00[[[\x00\x5c\x5c\x5c\x00]]]\x00^^^\x00___\x00```\x00aaa\x00bbb\x00ccc\x00ddd\x00eee\x00fff\x00hhh\x00iii\x00jjj\x00kkk\x00lll\x00nnn\x00ooo\x00ppp\x00qqq\x00rrr\x00sss\x00uuu\x00vvv\x00www\x00xxx\x00yyy\x00yzy\x00zzz\x00{{{\x00|||\x00}}}\x00\x7f\x7f\x7f\x00\x81\x81\x81\x00\x82\x82\x82\x00\x85\x85\x85\x00\x86\x86\x86\x00\x87\x87\x87\x00\x88\x88\x88\x00\x89\x89\x89\x00\x8a\x8a\x8a\x00\xaeh\xf1\x00\x8c\x8c\x8c\x00\x8d\x8d\x8d\x00\x8e\x8e\x8e\x00\x8f\x8f\x8f\x00\x90\x90\x90\x00\x92\x92\x92\x00\x93\x93\x93\x00\x94\x94\x94\x00\x95\x95\x95\x00\xb2{\xe6\x00\x96\x96\x96\x00\x97\x97\x97\x00\x98\x98\x98\x00\x99\x99\x99\x00\x9a\x9a\x9a\x00\x9b\x9b\x9b\x00\xba~\xf3\x00\xbd|\xfa\x00\x9c\x9c\x9c\x00\x9d\x9d\x9d\x00\x9e\x9e\x9e\x00\x9f\x9f\x9f\x00\xa0\xa0\xa0\x00\xa1\xa1\xa1\x00\xa2\xa2\xa2\x00\xa3\xa3\xa3\x00\xa4\xa4\xa4\x00\xa5\xa5\xa5\x00\xa6\xa6\xa6\x00\xa7\xa7\xa7\x00\xa8\xa8\xa8\x00\xa9\xa9\xa9\x00\xab\xab\xab\x00\xac\xac\xac\x00\xad\xad\xad\x00\xae\xae\xae\x00\xaf\xaf\xaf\x00\xaf\xb0\xaf\x00\xb0\xb0\xb0\x00\xb1\xb1\xb1\x00\xb2\xb2\xb2\x00\xb3\xb3\xb3\x00\xb4\xb4\xb4\x00\xb5\xb5\xb5\x00\xcf\x9d\xfe\x00\xb6\xb6\xb6\x00\xb7\xb7\xb7\x00\xb8\xb8\xb8\x00\xb9\xb9\xb9\x00\xba\xba\xba\x00\xbb\xbb\xbb\x00\xca\xad\xe7\x00\xbc\xbc\xbc\x00\xbc\xbc\xbd\x00\xd5\xa6\xff\x00\xbd\xbd\xbd\x00\xbe\xbe\xbe\x00\xbe\xbf\xbd\x00\xbf\xbf\xbf\x00\xc8\xb8\xd7\x00\xc0\xc0\xc0\x00\xd2\xb1\xf1\x00\xc1\xc1\xc1\x00\xc2\xc2\xc2\x00\xc1\xc4\xbe\x00\xc1\xc4\xbf\x00\xc3\xc3\xc3\x00\xc2\xc5\xbe\x00\xc4\xc4\xc4\x00\xc5\xc5\xc5\x00\xc6\xc6\xc6\x00\xc7\xc7\xc7\x00\xc8\xc8\xc8\x00\xc9\xc9\xc9\x00\xd8\xbc\xf2\x00\xca\xca\xca\x00\xcb\xcb\xcb\x00\xcc\xcc\xcc\x00\xcd\xcd\xcd\x00\xce\xce\xce\x00\xdb\xc3\xf1\x00\xcf\xcf\xcf\x00\xd0\xd0\xd0\x00\xd1\xd1\xd1\x00\xd2\xd2\xd2\x00\xd3\xd3\xd3\x00\xd2\xd4\xd0\x00\xd4\xd4\xd4\x00\xe1\xc8\xf8\x00\xd5\xd5\xd5\x00\xd6\xd6\xd6\x00\xd7\xd7\xd7\x00\xd8\xd8\xd8\x00\xd9\xd9\xd9\x00\xda\xda\xda\x00\xdb\xdb\xdb\x00\xe5\xd3\xf5\x00\xdc\xdc\xdc\x00\xdd\xdd\xdd\x00\xde\xde\xde\x00\xe9\xd4\xfd\x00\xdf\xdf\xdf\x00\xdf\xdf\xe0\x00\xe0\xe0\xe0\x00\xe1\xe1\xe1\x00\xe2\xe2\xe2\x00\xe3\xe3\xe3\x00\xe4\xe4\xe4\x00\xe5\xe5\xe5\x00\xe6\xe6\xe6\x00\xe7\xe7\xe7\x00\xec\xe4\xf3\x00\xe8\xe8\xe8\x00\xe9\xe9\xe9\x00\xea\xea\xea\x00\xeb\xeb\xeb\x00\xec\xec\xec\x00\xee\xee\xee\x00\xef\xef\xef\x00\xf0\xef\xf1\x00\xf0\xf0\xf0\x00\xf1\xf1\xf1\x00\xf2\xf2\xf2\x00\xf3\xf3\xf3\x00\xf4\xf4\xf4\x00\xf5\xf5\xf5\x00\xf9\xf2\xff\x00\xf6\xf5\xf7\x00\xf5\xf6\xf4\x00\xf6\xf6\xf6\x00\xf7\xf7\xf7\x00\xf6\xf8\xf4\x00\xf8\xf8\xf8\x00\xf9\xf9\xf9\x00\xfa\xfa\xfa\x00\xfb\xfb\xfb\x00\xfb\xfb\xfc\x00\xfc\xfc\xfc\x00\xfe\xfc\xff\x00\xfd\xfd\xfd\x00\xfe\xfe\xfe\x00\xfe\xfe\xff\x00\xff\xfe\xff\x00\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xe7\xc1\xcf\xc3\xf4\xf4\xc2\xb6\xeb\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xe7\xc0\xd0\xc3\xf4\xd1\x97\xbe\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xa7m\xdf\xf4\xf4\xf4\xf4\xe6\xbf\xd2\xc3\xf4\x8f\x1a1\xc8\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xebW\x15p\xe7\xf4\xf4\xf4\xf4\xe6\xbc\xd6\xc4\xf4\xe6\x8b;\x09k\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xd53+\xb4\xea\xf4\xf4\xf4\xf4\xf4\xf4\xc3\xe0\xcc\xf4\xf4\xbe\xa9\xa9\x17;\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xd22=\xd8\xf4\xf4\xf4\xf4\xf4\xecI(!6\x5c\xc8\xf4\xbe\xad\xea\xdb\x1a)\xe6\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xddJ4\xe1\xf4\xf4\xf4\xf4\xf4\xf4\xeelt`^&\x01(y\xa7\xeb\xea\xa3%<\xf4\xf4\xf4\xf4\xf4\xf4\xee{\x1b\xd2\xf4\xf4\xe7f\xd6\xf4\xf4\xf4\xf4\xe9\xba\xdf\xce\xe1h\x05?\xd9\xe6\xa7\xb4\x0aa\xe6\xf4\xf4\xf4\xf4\xc4\x1d\x8b\xf4\xf4\xde8\x22\xc6\xf4\xf4\xec\xdd\xce\xb1\xde\xae\xc6\xf4\xa9\x128\xca\x9f\xc1w\x08\xb9\xf4\xf4\xf4\xe9_/\xf4\xf4\xeaE3\xda\xf4\xf1\xc2xH9\x80\xe6\xa7\xb3\xe7\xbf\x93%6\x92\xbf\xb2>K\xf4\xf4\xf4\xdd(\xa9\xf4\xf4o+\xc6\xf4\xeb|$-p\x93\xa3\xe0\xa9\x9f\xcd\xb6\x93\xdb\x12N\xc2\xb8q\x17\xd7\xf4\xf4\xe7\x85\xf4\xf4\xc71}\xf4\xf4b\x1d\x8f\xf4\xf4\xec\xb9\xde\xa4\x92sm\x89\xddz\x03\xa1\xb8\x87(y\xf4\xf4\xf4\xf4\xf4\xf4r9\xd7\xf4\x87\x19\xb9\xf4\xf4\xf4\xe1\xb7\xe0\x9d\x90]\x16j\xc8\x95\x1aE\xba\x93@>\xe0\xf4\xf4\xf4\xf4\xe1M]\xf4\xf4\x84\x95\xf4\xf4\xf4\xf4\xe8\xbb\xe5\x9a\x88\x94(;\xbc\x90[\x02\xba\x97S\x1f\xa3\xf4\xf4\xf4\xf4\xc4C\x87\xf4\xf4\xf0\xf4\xf4\xf4\xf4\xe3\xc5\xa0\xd4\x9e\x88\x93a\x17\xaa\x8e\x85V\xb0\x9de\x1c}\xe6\xf1\xe7\xeb\xa9:\x9c\xee\xe0\xe0\xe6\xe6\xe7\xe4\xbdun\xaf\xa5\x88\x8c\x88\x06~\x8c\x8d\x97\xa9\xac}\x1eo\xcac\xbf\xd3\x8b3\x8f\xdaiU\xbe\xcd\xcd\xcb\x98dv\xa2\xa8\x88\x8b\x95\x04r\x8c\x8b\x8d\x9d\xad\x82\x1bo\xe9\x15\xb9\xf4\xb1>\xa1\xf4\x80>\xd5\xf0\xee\xed\xc9\x91\x9b\xb5\xa6\x88\x8d\x81\x0bw\x8c\x8b\x8f\x8d\xaa\x80\x19\x88\xec*\x86\xf4\xc7D\x83\xf4\xcd\x18\xca\xf4\xf4\xf4\xf2\xef\xf3\xdc\x9f\x88\x92R }\x8c\x83J\x90\xaas\x16\xb0\xeeXL\xf4\xe7NY\xf4\xf45^\xea\xf4\xf4\xf4\xf4\xf4\xde\xa1\x89\x8e\x17T\x89\x8dR\x0f\x95\x9f]*\xc4\xf1\x9c\x11\xf4\xf4}6\xce\xf4\xcc\x0c\x96\xec\xf4\xf4\xf4\xf4\xde\xa1\x90? \xcf\xbc\x8f\x17O\x99\x8d7Q\xca\xf4\xde\x1a\x95\xf4\xcd5s\xf4\xf4\x97\x0dx\xd5\xe2\xee\xf4\xde\xa3\x8bPx\xe6\xf4b\x00\xc4\x9fk\x10\x85\xce\xf4\xeai-\xf4\xf4|+\xb2\xf4\xf4\xb7\x1d.b\x93\xf4\xdf\xa3\x87\x9d\x9f\xea\xd5\x0eN\xcf\x9d'8\xb0\xdb\xf4\xf4\xcf!\x7f\xf4\xf1M7\xbe\xf1\xf4\xf4\x8eMT\xf4\xdf\xa3\x86\xa1\xab\xc10)\x8e\xd1\x80\x13\xb6\xc1\xf4\xf4\xf4\xf0\x82\x1f\xbc\xf4\xdfF1\xd1\xf4\xf4\xf4\xf4\xf4\xf4\xdf\xa4\xa3\xbal&@\x8a\x88\x93\x1a\x82\xf4\xd7\xf4\xf4\xf4\xf4\xe2U-\xc7\xf4\xe2g\xd1\xf4\xf4\xf4\xf4\xf4\xf4\xde\x8dlG\x1bZ\xe7\x96\xaa\x89T\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xd9I,\xb7\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xcaB)Hj\xe6\xf4\x95\xd9\xec\xe7\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xd9Z\x1dr\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xd6q\x8c\xd1\xb3\xe2\xf4\x96\xe6\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xe6\x87&$\x83\xf4\xf4\xf4\xf4\xf4\xf4\xe0\xa7\xc7\xdf\xb1\xe1\xf4\xc7\xee\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf0\xd3w%\x079k\x94\xae\xc3\xe7\xa1\xc2\xdf\xb3\xe1\xf4\xee\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xec\xdf\xb7h>#\x14A\xf4\xa3\xc1\xf0\xd8\xec\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf0\xee\xec\xeb\xf0\xe1\xa7\xc3\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xa9\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x00\x19tEXtSoftware\x00Adobe ImageReadyq\xc9e<\x00\x00\x03KIDATx\xda\xd4W\xcdk\x13A\x14\x7f\x93\x9d\xcdWs\xc8\xc1\xe6RZAj\x03\xb6H\xdb`\x9b\xda\xd8\x8f\x80\x0azmZ\xfc\x0b\xbc+\x88\xff\x83\xf4PDA\xf0\x1f\x90\xeaE\xb1\xa0B/F\x1b?\xaa=\xa8\xa0\xf6b\xa1XTj\x0e%i\xd2d\xc7\xf7\xa6\xd9\xb8\x99\xec\x96\xacn+\xbee\x98\xccn\xe6\xfd~\xf3\xe6\xbd7o\xd8\xf7\x9f\xdf`\xe0\xf8 XE\xd34\xd0u]P\xef\x85T\xabU\xd8\xd9\xd9a\xd4\xab\xc2\xed& 8D\xa3Q\x08\x06\x83\x9e\x10\xd8\xde\xde\x86|>\x0f\xce\x04D\xe3K\x9f\xcf\x07\xc1@\x10\xc2\xe1\xb0'\x04H?\xe9Tq\x1c-@\x7f\x14\xf4\x08\xe1\x11\xbe\xb0\x05\xaf\x13\x10\xcaW\x13\xdc3\x02B\x80\xf9\xb4\xb4\x05\x92\xb0\xc7\x04$\x86\xf8_,@\xde\xfa`\xe1>x)C\x89ag\x0b\xa0\x87vh\x5c\x9b\xd5|Z\x8a1\xd6A\xf1?\x9e\x9a\x00\x1c{\x93\x07\x8c*\xe8\x5c\x17\xbe\x90\x8f\xac\xb1\x8e\xe3l\xb5R\xbdl\x18\xc6:\xeb\xec\xec\x8cc\xb8\xe5\xfc\x01\x7f\xd4\xef\xf7\xcbpa\xf8\xec\x87\xd0\x16 (\x94\xcbe(\x97\xca\xf9B\xa1\x90\xe4\xed\xb1\xf69d\x15\x0d\x85B2\x03\xa2\x05`?\x85\xfc!\x10\x08@\x91\x17\xa3m\x91\xb69\x8e\x80is\xe5^:\xde^BXD\x02\xd3s\x9a\xa3\xc3\xe948\x08`\x95\x04as\xd3\xe4\x07M\x80\x84\xb0\xb9\x99t\xfe\x89 ,7\x84!=\xd3*4^x\xf4\xd0S\xacsg\xcf\xef\x1eHV\x1c\xc4\xe6v\x8e\x87\xce\x01\xa3\xc3)\x86D\x84:\xc9\xad\xd0bP\x07\x0b\xb7\x85\x059\xbb\x1a\x11\xb6\x04(\x13R\xf2\xe0\x9c\x83:\xc9\xadP\xccW*\x15\xa9S\xc5q$@cr\x10*L(B\xfe6\xeeMp{\x02\x86h\xf2\x01z''\xd4\xbeQ{\xb2\xf8\xd8\x15\xf0\xe9\xf4\x99\xdd\xdc\xa2\xe8Rq\xb8]\xe1Q?\x0dk=\xad`4\x99\x92\xa6lEh\xeb\xc8rdEU\x97\x8a\xe3\xb8\x05\xd6\x9a\x80\xda\xb3\x5c\xd6\x95\x05&\xc7\xd2\xbf\xcd\xeeP_\xc8-\x90,m>Xk\x02j#C'm\x8bJ;\xa13\xc5\xcc\xae\xaa\xae\xa6D\x14\x8b\xc5`ss\xb3\x99\x80\xa5\xd1\x0a\x96^>we\x81\x89\xd4d\x93\x1e\x95\x00a\xf3\x99\x0b\xd3?n\x5c\xbfy\xc8z\x0a6M\xc4'yb\xc4\xb5\x0f\xecE\x80~\x136\x9f\xcaL]\xdd\xf8\xbaq\xfb\xee\xfc=h8\x17\x14\x1f\xc8\xbdZre\x81\xb1\xd1qG\x1f\xa0~z&\x03\x84\xcd\xe8f\x842\xbb\xf6e\xed\xd2\xf2\xf2\x1bX\xfd\xbc*\xf7z\xfe\xce<\xc3U\x08,T\xe4\xb8T*\xb9\xf6\x01\xea\xb1\xf0\xa0\xb9,3\x93\x917\xad\xee\xa3\xdd\x90H\x0cB\xd7\xe1\xaek\xbd\xf1\xbe+\x92\xc0\xb1\x9e^\xf8\xf0\xe9}\x1c\xe7\xa6\xb1\xf5\x93\x92\xfe\xbe\x81\x8b\xa1pH\xa6O\x02\xce.=ue\x81\xd4\xc8\xa9]\x02\x98\x09\x8b\x85\x22[y\xf7\xf6V\xed\xd3\x0a\xb6E\xc4\xfcHz%\x81\x9e#qi~\xb3\xc9\xf8\xc4}\x8cD\x22u\x02\xb4\x127\x16 \xcb\x99\x04\xb6\xb6\xb6\x18\xf9\x0f\x95z\xaaoqk\xe2\xb1V\xad\x5c\xe3\x8d\xe1\xa2s\xc0\xc2\xb5\xe5s\xbe\xa1\xb4\x13\xe0H\xde\xfeb\xa2\xdc\x0d$\x01\xce\xff\xec>P[\xe9\x9eW3\xdb\xc9\x98\xa7_\xbc\xceyR\x0b\x90\x8f9\xc9/\x01\x06\x00oO\x87\x87}~\xb3\xc0\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00\x02\xd6\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\x00\x00\x02\x9dIDATx^\xedY\xc1\xebqA\x14\xbdOoC\xa1H\x14\xa5\xec\xec\xac\x84\x85\x85\x7f\x5c$v\xb2S\x14\x16\x16J,\x08%\xf5\xbe\xee\xab[\xfa\xee\xef}\xc74\xd3\xa7_\xcd\xa9i\xe65c\xe6\x9c{\xee\xbc\xf7\xe6\x09\xa2(\xa2\xdf\x8c\x14}\x0f^\x80\x17\xe0\x05x\x01^\x80\x17\xe0\x05\x84\x84A\x9b\xcd&\x92v\x10\x04R'\xb6\xa5\xfe\x1bQ\x14\xa9:\xa9\xcdh4\x1a\x01\x01\x042\x18\x91\xcff\xb3B\x0c\xd6\x00L\x10\xd6\xd7\xeb\xf5#\x11\xe1\xa7\xe4K\xa5\x12\xfdo\xb0\x08\xe6 \x22\x8c\x05\x08\xf9L&C\xb7\xdbM\xa2\x9b\x14q3\x07\x92\x1dap\xc0D\x84\x93M\x8c\xc8s[_K\xd1}N\x82\x81\x05\xe0\xc5\xa4_\x91N\x9eK\x8f\xc7\x22\xcc\x05$M\xa6k\xdd\x87\x0arT\x09t\x98B\xd8\x01\x9cBd\xe2\x80\x9b\x14\x02PD\x14Y4N\xc3\xd2\x01l-&\x87\xaf\xc1:\x16\x0e`\xe0M\xf7x\xd3v\xbb\xa5~\xbfO\xb9\x5c\x8e\x04\xf7\xfb\x9d\xd2\xe9\xb4<\xb0x|\x5c#`\x07\x8c\x80\xa3\xc4Q\xafT*B^\xc0OsM\xc6<\xe2\xf6\x02\x0c\x9f\x1b \x0d\xed\x91rM\xbcX,\xd2\xe1p`'\x0c\x04\x7fY\x80\xe4\xb2\x08\xa8\xd5j4\x9b\xcdh\xb1X\xf0\x06\x06\xbf\xfb\x82\x00D\xa8\xd5jQ\xb7\xdb\x8d7\xeeh4\xa2\xe9t\xcamD\xdc\xbd\x00\x1c9i\xeb~v\x82E\x0c\x06\x03b\x8c\xc7c\x16\x81\xe6r+\x00\xdb\x8d\x8f\x8b|\xeb\xect:\x94\xcf\xe7i\xb5Z\xa9q\x16\xebB\x01B\x02FL\xd7\xfaw\x85B\x81\x1dH\x1a\x0f\x1c\xb1p\x008\x82\x04J18\x8d\xb9u\x00\xd4\x8a,\xdfu\x14\xf1\xe7\xf3I\xfb\xfd\x9e\xca\xe5\xb2r\x08\xcc\x0b\x11\xda\xe6\xa0\x8c\x91\xfb\xfa|>'F\xb5Z%\xc6\xeb\xf5b\xf2\xf1\x93\xb9^\xaf\x9b\x90\x14\xa1.71\xfe\xb6\xd3\xeb\xf5\x98(\xbf\x8d\xf2{Q\xdc\xd7l6\xa9\xddn\xff4\x17\x88>Fh\x10}y\x09S\xf5{_\x18\x86,\x00\xce\x85S\xc8\xdc\x01l#v@\xca\xbf\xe62q\xc0y\x0a\x81M\xac\xae\xa5\x80\xb1\x98 - icons/pylot.ico - icons/printer.png - icons/picon.png - icons/sicon.png - help/index.html + icons/pylot.ico + icons/printer.png + icons/picon.png + icons/sicon.png + icons/pick.png + + + help/index.html