tirilane
/
egon
Archived
1
0
Fork 0

Compare commits

..

10 Commits

54 changed files with 831 additions and 2780 deletions

View File

@ -1,33 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class AssignmentTab(QWidget):
def __init__(self, parent=None):
super(AssignmentTab, self).__init__(parent)
assignmentsTable = QTableWidget()
addAssignmentButton = QPushButton("Add assignment")
editAssignmentButton = QPushButton("Edit assignment")
assignmentDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addAssignmentButton)
hlayout.addWidget(editAssignmentButton)
hlayout.addWidget(assignmentDoneButton)
vlayout.addWidget(assignmentsTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

View File

@ -1,21 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class CalendarTab(QWidget):
def __init__(self, parent=None):
super(CalendarTab, self).__init__(parent)
calendar = QCalendarWidget()
layout = QVBoxLayout()
layout.addWidget(calendar)
self.setLayout(layout)

31
README.md Normal file
View File

@ -0,0 +1,31 @@
# Egon
Egon is a planner for assignments, reading homework and lessons, which could come in handy for students.
---
## Technology
It is written in Python, using Qt4, PyQt, and SQLite.
---
## Progress
### 06.09.08
Egon is now properly translated into Norwegian using Qt Linguist. So now there is only one program, as there should be. egon_no.py is still available, in case of locale trouble.
### 10.08.08
Norsk versjon også tilgjengelig: egonbm.py.
### 18.08.06
It is now as good as finished, and is working properly. Version 1.0.0 is thus released! It is (almost) even save to use (especially if you know how to fix databases manually). There is even an tar.gz, in dist/.
Some icons are on their way, but they are not really necessary. Or, as I meant to say, some icons are on their way as soon as I learn how to draw. Meaning never.
More features are planned, like better exception handling (it works properly unless you write wrong on purpose. The logic behind studies are used as boundaries, and it should thus work fine. But if there suddenly are multiple 'Assignment 2' given in one course, there is trouble coming.) A printing function is also planned. After all, I do have a proper icon for it. I also mean to translate it, I just need to figure out Qt Linguist first.
The license will also be added. It's GPL.

View File

@ -1,34 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ReadingTab(QWidget):
def __init__(self, parent=None):
super(ReadingTab, self).__init__(parent)
readingTable = QTableWidget()
addReadingButton = QPushButton("Add pages to read")
editReadingButton = QPushButton("Edit pages")
readingDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addReadingButton)
hlayout.addWidget(editReadingButton)
hlayout.addWidget(readingDoneButton)
vlayout.addWidget(readingTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

View File

@ -1,30 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ScheduleTab(QWidget):
def __init__(self, parent=None):
super(ScheduleTab, self).__init__(parent)
scheduleTable = QTableWidget()
addScheduleButton = QPushButton("Add lesson")
editScheduleButton = QPushButton("Edit lesson")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addScheduleButton)
hlayout.addWidget(editScheduleButton)
vlayout.addWidget(scheduleTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

View File

@ -1,16 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from assignmentDlg import *
from readingDlg import *
from scheduleDlg import *

Binary file not shown.

View File

@ -1,25 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from assignmentDlg import *
class AddAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(AddAssignmentDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new assignment"))

Binary file not shown.

View File

@ -1,24 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from bookDlg import *
class AddBookDlg(BookDlg):
def __init__(self, parent=None):
super(AddBookDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 5, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new book"))

Binary file not shown.

View File

@ -1,20 +0,0 @@
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from courseDlg import *
class AddCourseDlg(CourseDlg):
def __init__(self, parent=None):
super(AddCourseDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 3, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new course"))

Binary file not shown.

View File

@ -1,27 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
class AddReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(AddReadingDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new reading"))

Binary file not shown.

View File

@ -1,28 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class AddScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(AddScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new lesson"))

Binary file not shown.

View File

@ -1,185 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from main import *
class AssignmentTab(QWidget):
def __init__(self, parent=None):
super(AssignmentTab, self).__init__(parent)
self.assignmentsTable = QTableWidget()
self.addAssignmentButton = QPushButton("Add assignment")
self.editAssignmentButton = QPushButton("Edit assignment")
self.assignmentDoneButton = QPushButton("Done")
## self.assignments = assignmentdata.AssignmentContainer()
## self.assignmentTable = QTableWidget()
## self.setCentralWidget(self.assignmentTable)
##
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addAssignmentButton)
hlayout.addWidget(self.editAssignmentButton)
hlayout.addWidget(self.assignmentDoneButton)
vlayout.addWidget(self.assignmentsTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
## def updateTable(self, current=None):
##
## self.assignmentTable.clear()
## self.assignmentTable.setRowCount(len(self.assignments))
## self.assignmentTable.setColumnCount(7)
## self.assignmentTable.setHorizontalHeaderLabels(["Date", "Course", "Description", "Available" , "Begun", "Finished", "Delivered"])
## self.assignmentTable.setAlternatingRowColors(True)
## self.assignmentTable.setEditTriggers(QTableWidget.NoEditTriggers)
## self.assignmentTable.setSelectionBehavior(QTableWidget.SelectRows)
## self.assignmentTable.setSelectionMode(QTableWidget.SingleSelection)
## selected = None
class AssignmentDlg(QDialog):
def __init__(self, parent=None):
super(AssignmentDlg, self).__init__(parent)
dateLabel = QLabel(self.trUtf8("&Date"))
courseLabel = QLabel(self.trUtf8("&Course"))
descriptionLabel = QLabel(self.trUtf8("De&scription"))
availableLabel = QLabel(self.trUtf8("&Available"))
begunLabel = QLabel(self.trUtf8("&Begun"))
finishedLabel = QLabel(self.trUtf8("&Finished"))
deliveredLabel = QLabel(self.trUtf8("De&livered"))
dateEdit = QLineEdit()
courseEdit = QComboBox()
courseEdit.addItems(MainWindow.getCoursesString())
descriptionEdit = QLineEdit()
availableEdit = QCheckBox()
begunEdit = QCheckBox()
finishedEdit = QCheckBox()
deliveredEdit = QCheckBox()
dateLabel.setBuddy(dateEdit)
courseLabel.setBuddy(courseEdit)
descriptionLabel.setBuddy(descriptionEdit)
availableLabel.setBuddy(availableEdit)
begunLabel.setBuddy(begunEdit)
finishedLabel.setBuddy(finishedEdit)
deliveredLabel.setBuddy(deliveredEdit)
self.layout = QGridLayout()
self.layout.addWidget(dateLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(descriptionLabel, 2, 0)
self.layout.addWidget(availableLabel, 3, 0)
self.layout.addWidget(begunLabel, 4, 0)
self.layout.addWidget(finishedLabel, 5, 0)
self.layout.addWidget(deliveredLabel, 6, 0)
self.layout.addWidget(dateEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(descriptionEdit, 2, 1)
self.layout.addWidget(availableEdit, 3, 1)
self.layout.addWidget(begunEdit, 4, 1)
self.layout.addWidget(finishedEdit, 5, 1)
self.layout.addWidget(deliveredEdit, 6, 1)
self.setLayout(self.layout)
class AddAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(AddAssignmentDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new assignment"))
class EditAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(EditAssignmentDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit assignment"))
def apply(self):
pass
class AssignmentModel():
date = ""
course = ""
description = ""
available = False
begun = False
finished = False
delivered = False
def setDate(self, date):
self.date = date
def getDate(self):
return self.date
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setDescription(self, description):
self.description = description
def getDescription(self):
return self.description
def setAvailable(self, available):
self.available = available
def getAvailable(self):
return self.available
def setBegun(self, begun):
self.begun = begun
def getBegun(self):
return self.begun
def setFinished(self, finished):
self.finished = finished
def getFinished(self):
return self.finished
def setDelivered(self, delivered):
self.delivered = delivered
def getDelivered(self):
return self.delivered

Binary file not shown.

View File

@ -1,61 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
from actions import *
class AssignmentDlg(QDialog):
def __init__(self, parent=None):
super(AssignmentDlg, self).__init__(parent)
dateLabel = QLabel(self.trUtf8("&Date"))
courseLabel = QLabel(self.trUtf8("&Course"))
descriptionLabel = QLabel(self.trUtf8("De&scription"))
availableLabel = QLabel(self.trUtf8("&Available"))
begunLabel = QLabel(self.trUtf8("&Begun"))
finishedLabel = QLabel(self.trUtf8("&Finished"))
deliveredLabel = QLabel(self.trUtf8("De&livered"))
dateEdit = QLineEdit()
courseEdit = QLineEdit()
descriptionEdit = QLineEdit()
availableEdit = QCheckBox()
begunEdit = QCheckBox()
finishedEdit = QCheckBox()
deliveredEdit = QCheckBox()
dateLabel.setBuddy(dateEdit)
courseLabel.setBuddy(courseEdit)
descriptionLabel.setBuddy(descriptionEdit)
availableLabel.setBuddy(availableEdit)
begunLabel.setBuddy(begunEdit)
finishedLabel.setBuddy(finishedEdit)
deliveredLabel.setBuddy(deliveredEdit)
self.layout = QGridLayout()
self.layout.addWidget(dateLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(descriptionLabel, 2, 0)
self.layout.addWidget(availableLabel, 3, 0)
self.layout.addWidget(begunLabel, 4, 0)
self.layout.addWidget(finishedLabel, 5, 0)
self.layout.addWidget(deliveredLabel, 6, 0)
self.layout.addWidget(dateEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(descriptionEdit, 2, 1)
self.layout.addWidget(availableEdit, 3, 1)
self.layout.addWidget(begunEdit, 4, 1)
self.layout.addWidget(finishedEdit, 5, 1)
self.layout.addWidget(deliveredEdit, 6, 1)
self.setLayout(self.layout)

Binary file not shown.

View File

@ -1,66 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class AssignmentModel():
date = ""
course = ""
description = ""
available = False
begun = False
finished = False
delivered = False
def setDate(self, date):
self.date = date
def getDate(self):
return self.date
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setDescription(self, description):
self.description = description
def getDescription(self):
return self.description
def setAvailable(self, available):
self.available = available
def getAvailable(self):
return self.available
def setBegun(self, begun):
self.begun = begun
def getBegun(self):
return self.begun
def setFinished(self, finished):
self.finished = finished
def getFinished(self):
return self.finished
def setDelivered(self, delivered):
self.delivered = delivered
def getDelivered(self):
return self.delivered

Binary file not shown.

67
book.py
View File

@ -1,67 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from db import *
class BookDlg(QDialog):
def __init__(self, parent=None):
super(BookDlg, self).__init__(parent)
titleLabel = QLabel(self.trUtf8("&Title"))
authorLabel = QLabel(self.trUtf8("&Author"))
editionLabel = QLabel(self.trUtf8("&Edition"))
isbnLabel = QLabel(self.trUtf8("&ISBN"))
courseLabel = QLabel(self.trUtf8("&Course"))
titleEdit = QLineEdit()
authorEdit = QLineEdit()
editionEdit = QSpinBox()
editionEdit.setRange(1, 50)
isbnEdit = QLineEdit()
courseEdit = QComboBox()
titleLabel.setBuddy(titleEdit)
authorLabel.setBuddy(authorEdit)
editionLabel.setBuddy(editionEdit)
isbnLabel.setBuddy(isbnEdit)
courseLabel.setBuddy(courseEdit)
self.layout = QGridLayout()
self.layout.addWidget(titleLabel, 0, 0)
self.layout.addWidget(authorLabel, 1, 0)
self.layout.addWidget(editionLabel, 2, 0)
self.layout.addWidget(isbnLabel, 3, 0)
self.layout.addWidget(courseLabel, 4, 0)
self.layout.addWidget(titleEdit, 0, 1)
self.layout.addWidget(authorEdit, 1, 1)
self.layout.addWidget(editionEdit, 2, 1)
self.layout.addWidget(isbnEdit, 3, 1)
self.layout.addWidget(courseEdit, 4, 1)
self.setLayout(self.layout)
class AddBookDlg(BookDlg):
def __init__(self, parent=None):
super(AddBookDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 5, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new book"))

BIN
book.pyc

Binary file not shown.

View File

@ -1,50 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
##from db import *
class BookDlg(QDialog):
def __init__(self, parent=None):
super(BookDlg, self).__init__(parent)
titleLabel = QLabel(self.trUtf8("&Title"))
authorLabel = QLabel(self.trUtf8("&Author"))
editionLabel = QLabel(self.trUtf8("&Edition"))
isbnLabel = QLabel(self.trUtf8("&ISBN"))
courseLabel = QLabel(self.trUtf8("&Course"))
titleEdit = QLineEdit()
authorEdit = QLineEdit()
editionEdit = QSpinBox()
editionEdit.setRange(1, 50)
isbnEdit = QLineEdit()
courseEdit = QComboBox()
titleLabel.setBuddy(titleEdit)
authorLabel.setBuddy(authorEdit)
editionLabel.setBuddy(editionEdit)
isbnLabel.setBuddy(isbnEdit)
courseLabel.setBuddy(courseEdit)
self.layout = QGridLayout()
self.layout.addWidget(titleLabel, 0, 0)
self.layout.addWidget(authorLabel, 1, 0)
self.layout.addWidget(editionLabel, 2, 0)
self.layout.addWidget(isbnLabel, 3, 0)
self.layout.addWidget(courseLabel, 4, 0)
self.layout.addWidget(titleEdit, 0, 1)
self.layout.addWidget(authorEdit, 1, 1)
self.layout.addWidget(editionEdit, 2, 1)
self.layout.addWidget(isbnEdit, 3, 1)
self.layout.addWidget(courseEdit, 4, 1)
self.setLayout(self.layout)

Binary file not shown.

View File

@ -1,20 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class CalendarTab(QWidget):
def __init__(self, parent=None):
super(CalendarTab, self).__init__(parent)
calendar = QCalendarWidget()
layout = QVBoxLayout()
layout.addWidget(calendar)
self.setLayout(layout)

Binary file not shown.

104
course.py
View File

@ -1,104 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
#from db import *
import db
class CourseDlg(QDialog):
def __init__(self, parent=None):
super(CourseDlg, self).__init__(parent)
self.codeLabel = QLabel(self.trUtf8("&Code"))
self.titleLabel = QLabel(self.trUtf8("&Title"))
self.shortLabel = QLabel(self.trUtf8("&Short form"))
self.codeEdit = QLineEdit()
self.titleEdit = QLineEdit()
self.shortEdit = QLineEdit()
self.codeLabel.setBuddy(self.codeEdit)
self.titleLabel.setBuddy(self.titleEdit)
self.shortLabel.setBuddy(self.shortEdit)
self.layout = QGridLayout()
self.layout.addWidget(self.codeLabel, 0, 0)
self.layout.addWidget(self.titleLabel, 1, 0)
self.layout.addWidget(self.shortLabel, 2, 0)
self.layout.addWidget(self.codeEdit, 0, 1)
self.layout.addWidget(self.titleEdit, 1, 1)
self.layout.addWidget(self.shortEdit, 2, 1)
self.setLayout(self.layout)
class AddCourseDlg(CourseDlg):
def __init__(self, parent=None):
super(AddCourseDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 3, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new course"))
def accept(self):
courseCode = unicode(self.codeEdit.text())
courseTitle = unicode(self.titleEdit.text())
courseShort = unicode(self.shortEdit.text())
print 'code', courseCode
print 'title', courseTitle
print 'short', courseShort
course = CourseModel(courseCode, courseTitle, courseShort)
self.close()
db.addNewCourse(courseCode, courseTitle, courseShort)
class CourseModel():
code = ""
title = ""
short = ""
full = ""
def __init__(self, code, title, short):
self.code = code
self.title = title
self.short = short
self.setFull(code, title)
def setCode(self, code):
self.code = code
def getCode(self):
return self.code
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def setShort(self, short):
self.short = short
def getShort(self):
return self.short
def setFull(self, code, title):
self.full = code + ' ' + title
def getFull(self):
return self.full

Binary file not shown.

View File

@ -1,39 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
##from db import *
class CourseDlg(QDialog):
def __init__(self, parent=None):
super(CourseDlg, self).__init__(parent)
codeLabel = QLabel(self.trUtf8("&Code"))
titleLabel = QLabel(self.trUtf8("&Title"))
shortLabel = QLabel(self.trUtf8("&Short form"))
codeEdit = QLineEdit()
titleEdit = QLineEdit()
shortEdit = QLineEdit()
codeLabel.setBuddy(codeEdit)
titleLabel.setBuddy(titleEdit)
shortLabel.setBuddy(shortEdit)
self.layout = QGridLayout()
self.layout.addWidget(codeLabel, 0, 0)
self.layout.addWidget(titleLabel, 1, 0)
self.layout.addWidget(shortLabel, 2, 0)
self.layout.addWidget(codeEdit, 0, 1)
self.layout.addWidget(titleEdit, 1, 1)
self.layout.addWidget(shortEdit, 2, 1)
self.setLayout(self.layout)

Binary file not shown.

170
db.py
View File

@ -1,170 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from pysqlite2 import dbapi2 as sqlite
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#from PyQt4.QtSql import *
#from main import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from book import *
from course import *
def initDB():
conn = sqlite.connect('egon.db')
curs = conn.cursor()
return curs, conn
def initNewDB():
cursor, conn = initDB()
initAssignmentDB(cursor)
initReadingDB(cursor)
initScheduleDB(cursor)
initBookDB(cursor)
initCourseDB(cursor)
initAssignmentInCourse(cursor)
initReadingInCourse(cursor)
initLessonInCourse(cursor)
initCourseUsesBook(cursor)
exitDB(conn)
def initAssignmentDB(cursor):
cursor.execute('''
CREATE TABLE Assignment (
aid INTEGER PRIMARY KEY,
date TEXT,
description TEXT,
available BOOLEAN,
begun BOOLEAN,
finished BOOLEAN,
delivered BOOLEAN
)
''')
def initReadingDB(cursor):
cursor.execute('''
CREATE TABLE Reading (
rid INTEGER PRIMARY KEY,
week TEXT,
chapter TEXT,
pages TEXT
)
''')
def initScheduleDB(cursor):
cursor.execute('''
CREATE TABLE Lesson (
lid INTEGER PRIMARY KEY,
day TEXT,
fromtime TEXT,
totime TEXT,
type TEXT,
room TEXT
)
''')
def initBookDB(cursor):
cursor.execute('''
CREATE TABLE Book (
isbn TEXT PRIMARY KEY,
title TEXT,
author TEXT,
edition INTEGER
)
''')
def initCourseDB(cursor):
cursor.execute('''
CREATE TABLE Course (
code TEXT PRIMARY KEY,
title TEXT,
short TEXT
)
''')
def initAssignmentInCourse(cursor):
cursor.execute('''
CREATE TABLE assignmentInCourse (
assignment INTEGER,
course INTEGER
)
''')
def initReadingInCourse(cursor):
cursor.execute('''
CREATE TABLE readingInCourse (
reading INTEGER,
course INTEGER
)
''')
def initLessonInCourse(cursor):
cursor.execute('''
CREATE TABLE lessonInCourse (
lesson INTEGER,
course INTEGER
)
''')
def initCourseUsesBook(cursor):
cursor.execute('''
CREATE TABLE courseUsesBook (
course INTEGER,
book TEXT
)
''')
def addNewBook(isbn, title, author, edition, course):
cursor, conn = initDB()
bookQuery = '''
INSERT INTO Book
VALUES (%s, %s, %s, %i)
''' % (isbn, title, author, edition)
courseUsesBookQuery = '''
INSERT INTO courseUsesBook
VALUES (%i, %s)
''' % (course, isbn)
cursor.execute(bookQuery)
cursor.execute(courseUsesBookQuery)
exitDB(conn)
def addNewCourse(code, title, short):
cursor, conn = initDB()
courseQuery = '''
INSERT INTO Course
VALUES (%s, %s, %s)
''' % (code, title, short)
cursor.execute(courseQuery)
exitDB(conn)
def getCourses():
cursor, conn = initDB()
courseQuery = '''
SELECT *
FROM Course
'''
cursor.execute(courseQuery)
courses = []
for row in cursor.fetchall():
courses.append(CourseModel(row[0], row[1], row[2]))
def exitDB(conn):
conn.commit()
conn.close()
#initNewDB()

BIN
db.pyc

Binary file not shown.

View File

@ -1,28 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from assignmentDlg import *
class EditAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(EditAssignmentDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit assignment"))
def apply(self):
pass

Binary file not shown.

View File

@ -1,32 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
class EditReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(EditReadingDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit reading"))
def apply(self):
pass

Binary file not shown.

View File

@ -1,31 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class EditScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(EditScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit lesson"))
def apply(self):
pass

Binary file not shown.

2
egon.pro Normal file
View File

@ -0,0 +1,2 @@
SOURCES += egon.py
TRANSLATIONS += egon_nb.ts

186
egon.py
View File

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
#coding: utf-8 #coding: utf-8
# Copyright 2008, Tiril Anette Langfeldt Rødland # Copyright 2008, Tiril Anette Langfeldt Rødland
# 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 3 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 General Public License for more details. # 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 3 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 General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. # You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
@ -18,7 +18,7 @@ from pysqlite2 import dbapi2 as sqlite
from qrc_resources import * from qrc_resources import *
__version__ = "1.0.2" __version__ = "1.1.0"
main = None main = None
@ -39,7 +39,7 @@ class MainWindow(QMainWindow):
super(MainWindow, self).__init__(parent) super(MainWindow, self).__init__(parent)
# The program name # The program name
self.title = "Egon" self.title = self.trUtf8("Egon")
# The days # The days
self.days = [self.trUtf8("Monday"), self.trUtf8("Tuesday"), self.trUtf8("Wednesday"), self.trUtf8("Thursday"), self.trUtf8("Friday")] self.days = [self.trUtf8("Monday"), self.trUtf8("Tuesday"), self.trUtf8("Wednesday"), self.trUtf8("Thursday"), self.trUtf8("Friday")]
@ -51,9 +51,9 @@ class MainWindow(QMainWindow):
# Set the tabs in the middle # Set the tabs in the middle
self.tabs = QTabWidget() self.tabs = QTabWidget()
self.tabs.addTab(self.assignment, "&Assignments") self.tabs.addTab(self.assignment, self.trUtf8("&Assignment"))
self.tabs.addTab(self.reading, "&Reading List") self.tabs.addTab(self.reading, self.trUtf8("&Reading List"))
self.tabs.addTab(self.schedule, "&Schedule") self.tabs.addTab(self.schedule, self.trUtf8("&Schedule"))
self.tabs.setTabShape(QTabWidget.Rounded) self.tabs.setTabShape(QTabWidget.Rounded)
self.tabs.setTabPosition(QTabWidget.North) self.tabs.setTabPosition(QTabWidget.North)
self.setCentralWidget(self.tabs) self.setCentralWidget(self.tabs)
@ -61,7 +61,7 @@ class MainWindow(QMainWindow):
# The calendar # The calendar
self.calendarFrame = QFrame() self.calendarFrame = QFrame()
self.calendarFrame.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken) self.calendarFrame.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)
self.calendarDockWidget = QDockWidget("Calendar", self) self.calendarDockWidget = QDockWidget(self.trUtf8("Calendar"), self)
self.calendarDockWidget.setVisible(False) self.calendarDockWidget.setVisible(False)
self.calendarDockWidget.setObjectName("CalendarDockWidget") self.calendarDockWidget.setObjectName("CalendarDockWidget")
self.calendarDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea|Qt.BottomDockWidgetArea) self.calendarDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea|Qt.BottomDockWidgetArea)
@ -84,21 +84,21 @@ class MainWindow(QMainWindow):
self.load(semester) self.load(semester)
# Actions # Actions
fileNewAction = self.createAction("&New", self.fileNew, QKeySequence.New, "filenew", "Create a new semester plan") fileNewAction = self.createAction(self.trUtf8("&New"), self.fileNew, QKeySequence.New, "filenew", self.trUtf8("Create a new semester plan"))
fileOpenAction = self.createAction("&Open", self.fileOpen, QKeySequence.Open, "fileopen", "Open an existing semester plan") fileOpenAction = self.createAction(self.trUtf8("&Open"), self.fileOpen, QKeySequence.Open, "fileopen", self.trUtf8("Open an existing semester plan"))
fileQuitAction = self.createAction("&Quit", self.close, "Ctrl+Q", "filequit", "Quit program") fileQuitAction = self.createAction(self.trUtf8("&Quit"), self.close, "Ctrl+Q", "filequit", self.trUtf8("Quit program"))
editAddCourse = self.createAction("Add &course", self.addCourse, "Ctrl+C", None, "Add a new course") editAddCourse = self.createAction(self.trUtf8("Add &course"), self.addCourse, "Ctrl+C", None, self.trUtf8("Add a new course"))
editAddBook = self.createAction("Add &book", self.addBook, "Ctrl+B", None, "Add a new book") editAddBook = self.createAction(self.trUtf8("Add &book"), self.addBook, "Ctrl+B", None, self.trUtf8("Add a new book"))
editAddAssignment = self.createAction("Add &assignment", self.addAssignment, "Ctrl+A", None, "Add a new assignment") editAddAssignment = self.createAction(self.trUtf8("Add &assignment"), self.addAssignment, "Ctrl+A", None, self.trUtf8("Add a new assignment"))
editAddReading = self.createAction("Add &reading", self.addReading, "Ctrl+R", None, "Add a new reading") editAddReading = self.createAction(self.trUtf8("Add &reading"), self.addReading, "Ctrl+R", None, self.trUtf8("Add a new reading"))
editAddLesson = self.createAction("Add &lesson", self.addLesson, "Ctrl+L", None, "Add a new lesson") editAddLesson = self.createAction(self.trUtf8("Add &lesson"), self.addLesson, "Ctrl+L", None, self.trUtf8("Add a new lesson"))
editShowCalendar = self.createAction("Cal&endar", self.showCalendar, "Ctrl+E", None, "Show the calendar") editShowCalendar = self.createAction(self.trUtf8("Cal&endar"), self.showCalendar, "Ctrl+E", None, self.trUtf8("Show the calendar"))
helpAboutScheduler = self.createAction("&About %s" % self.title) helpAboutScheduler = self.createAction(self.trUtf8("&About Egon"))
# Menus # Menus
self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu = self.menuBar().addMenu(self.trUtf8("&File"))
self.editMenu = self.menuBar().addMenu("&Edit") self.editMenu = self.menuBar().addMenu(self.trUtf8("&Edit"))
self.helpMenu = self.menuBar().addMenu("&Help") self.helpMenu = self.menuBar().addMenu(self.trUtf8("&Help"))
# Add actions to the menus # Add actions to the menus
self.addActions(self.fileMenu, (fileNewAction, fileOpenAction, None, fileQuitAction)) self.addActions(self.fileMenu, (fileNewAction, fileOpenAction, None, fileQuitAction))
@ -115,7 +115,7 @@ class MainWindow(QMainWindow):
self.connect(helpAboutScheduler, SIGNAL("triggered()"), self.helpAbout) self.connect(helpAboutScheduler, SIGNAL("triggered()"), self.helpAbout)
self.connect(self.assignment.addAssignmentButton, SIGNAL("pressed()"), self.addAssignment) self.connect(self.assignment.addAssignmentButton, SIGNAL("pressed()"), self.addAssignment)
self.connect(self.assignment.deleteAssignmentButton, SIGNAL("pressed()"), self.deleteAssignment) self.connect(self.assignment.deleteAssignmentButton, SIGNAL("pressed()"), self.deleteAssignment)
self.connect(self.assignment.completeAssignmentBox, SIGNAL("currentIndexChanged(QString)"), self.completeAssignment) self.connect(self.assignment.statusAssignmentBox, SIGNAL("currentIndexChanged(QString)"), self.statusAssignment)
self.connect(self.reading.addReadingButton, SIGNAL("pressed()"), self.addReading) self.connect(self.reading.addReadingButton, SIGNAL("pressed()"), self.addReading)
self.connect(self.reading.deleteReadingButton, SIGNAL("pressed()"), self.deleteReading) self.connect(self.reading.deleteReadingButton, SIGNAL("pressed()"), self.deleteReading)
self.connect(self.reading.readingDoneButton, SIGNAL("pressed()"), self.doneReading) self.connect(self.reading.readingDoneButton, SIGNAL("pressed()"), self.doneReading)
@ -123,10 +123,10 @@ class MainWindow(QMainWindow):
self.connect(self.schedule.deleteScheduleButton, SIGNAL("pressed()"), self.deleteLesson) self.connect(self.schedule.deleteScheduleButton, SIGNAL("pressed()"), self.deleteLesson)
# The toolbars # The toolbars
fileToolbar = self.addToolBar("File") fileToolbar = self.addToolBar(self.trUtf8("File"))
fileToolbar.setObjectName("FileToolBar") fileToolbar.setObjectName("FileToolBar")
self.addActions(fileToolbar, (fileNewAction, fileOpenAction, None, fileQuitAction)) self.addActions(fileToolbar, (fileNewAction, fileOpenAction, None, fileQuitAction))
editToolbar = self.addToolBar("Edit") editToolbar = self.addToolBar(self.trUtf8("Edit"))
editToolbar.setObjectName("EditToolBar") editToolbar.setObjectName("EditToolBar")
self.addActions(editToolbar, (editAddCourse, editAddBook, None, editShowCalendar)) self.addActions(editToolbar, (editAddCourse, editAddBook, None, editShowCalendar))
@ -189,7 +189,7 @@ class MainWindow(QMainWindow):
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents) table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
## Update the assignment's completion level to the specified level ## Update the assignment's completion level to the specified level
def completeAssignment(self, completionLevel): def statusAssignment(self, completionLevel):
course, number = self.getCourseAndNumber() course, number = self.getCourseAndNumber()
table, row = self.getAssignmentTableAndRow() table, row = self.getAssignmentTableAndRow()
updateAssignmentCompletion(course, number, completionLevel) updateAssignmentCompletion(course, number, completionLevel)
@ -223,10 +223,10 @@ class MainWindow(QMainWindow):
## Delete the reading from the database and the table ## Delete the reading from the database and the table
def deleteReading(self): def deleteReading(self):
week, course, book = self.getWeekCourseAndBook() week, course, book, chapter = self.getWeekCourseBookAndChapter()
table, row = self.getReadingTableAndRow() table, row = self.getReadingTableAndRow()
global semester global semester
removeReadingFromDB(week, course, book) removeReadingFromDB(week, course, book, chapter)
table.removeRow(row) table.removeRow(row)
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents) table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
@ -238,7 +238,7 @@ class MainWindow(QMainWindow):
item = QTableWidgetItem(self.trUtf8("Done")) item = QTableWidgetItem(self.trUtf8("Done"))
item.setBackground(QBrush(Qt.green, Qt.SolidPattern)) item.setBackground(QBrush(Qt.green, Qt.SolidPattern))
else: else:
done = False done = True
item = QTableWidgetItem(self.trUtf8("Not done")) item = QTableWidgetItem(self.trUtf8("Not done"))
item.setBackground(QBrush(Qt.red, Qt.SolidPattern)) item.setBackground(QBrush(Qt.red, Qt.SolidPattern))
table.setItem(row, 6, item) table.setItem(row, 6, item)
@ -249,7 +249,9 @@ class MainWindow(QMainWindow):
bookTitle = table.item(row, 2).text() bookTitle = table.item(row, 2).text()
book = getBookWithTitleFromDB(bookTitle) book = getBookWithTitleFromDB(bookTitle)
bookIsbn = book.getIsbn() bookIsbn = book.getIsbn()
updateReadingDone(week, courseCode, bookIsbn, True) chapter = table.item(row, 3).text()
updateReadingDone(week, courseCode, bookIsbn, chapter, done)
print week, courseCode, bookIsbn, chapter, done
## Return the reading table and its current row ## Return the reading table and its current row
def getReadingTableAndRow(self): def getReadingTableAndRow(self):
@ -258,16 +260,18 @@ class MainWindow(QMainWindow):
return table, row return table, row
## Return the week, course and book of the current reading ## Return the week, course and book of the current reading
def getWeekCourseAndBook(self): def getWeekCourseBookAndChapter(self):
table, row = self.getReadingTableAndRow() table, row = self.getReadingTableAndRow()
weekItem = table.item(row, 0) weekItem = table.item(row, 0)
courseItem = table.item(row, 1) courseItem = table.item(row, 1)
bookItem = table.item(row, 2) bookItem = table.item(row, 2)
chapterItem = table.item(row, 3)
week = (weekItem.text().toInt())[0] week = (weekItem.text().toInt())[0]
courseFull = courseItem.text() courseFull = courseItem.text()
courseCode = getCourseCode(courseFull) courseCode = getCourseCode(courseFull)
book = getBookWithTitleFromDB(bookItem.text()) book = getBookWithTitleFromDB(bookItem.text())
return week, courseCode, book.getIsbn() chapter = chapterItem.text()
return week, courseCode, book.getIsbn(), chapter
# Schedule # Schedule
@ -333,15 +337,15 @@ class MainWindow(QMainWindow):
# General # General
## Make and open the About dialog ## Make and open the About dialo
def helpAbout(self): def helpAbout(self):
QMessageBox.about(self, "About %s" % self.title, u""" QMessageBox.about(self, "About %s" % self.title, """
<b>%s</b> v %s <b>%s</b> v %s
<p>Copyright &copy; 2008 Tiril Anette Langfeldt Rødland. No rights reserved. <p>Copyright &copy; 2008 Tiril Anette Langfeldt Roedland. No rights reserved.
<p>You may modify and redistribute the program under the terms of the GPL. The license can be found here: http://www.gnu.org/licenses/gpl.html <p>You may modify and redistribute the program under the terms of the GPL. The license can be found here: http://www.gnu.org/licenses/gpl.html
<p>This application is mainly for use by students, and can be used to keep track of assignments, planned readings and the schedule. <p>This application is mainly for use by students, and can be used to keep track of assignments, planned readings and the schedule.
<p>Python %s - Qt %s - PyQt %s on %s <p>Python %s - Qt %s - PyQt %s on %s
<p>Developer: Tiril Anette Langfeldt Rødland, tirilane@pvv.ntnu.no <p>Developer: Tiril Anette Langfeldt Roedland, tirilane@pvv.ntnu.no
""" % (self.title, __version__, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platform.system())) """ % (self.title, __version__, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platform.system()))
## Updates the File menu ## Updates the File menu
@ -398,7 +402,7 @@ class NewSemesterDlg(QDialog):
super(NewSemesterDlg, self).__init__(parent) super(NewSemesterDlg, self).__init__(parent)
# Labels # Labels
self.termLabel = QLabel(self.trUtf8("Term")) self.termLabel = QLabel(self.trUtf8("Semester"))
self.yearLabel = QLabel(self.trUtf8("Year")) self.yearLabel = QLabel(self.trUtf8("Year"))
# Widgets # Widgets
@ -551,10 +555,10 @@ class AssignmentTab(QWidget):
# Widgets # Widgets
self.addAssignmentButton = QPushButton("Add assignment") self.addAssignmentButton = QPushButton("Add assignment")
self.completeAssignmentBox = QComboBox() self.statusAssignmentBox = QComboBox()
self.deleteAssignmentButton = QPushButton("Delete assignment") self.deleteAssignmentButton = QPushButton("Delete assignment")
completeTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")] statusTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.completeAssignmentBox.addItems(completeTypes) self.statusAssignmentBox.addItems(statusTypes)
# Make the table # Make the table
self.makeTable() self.makeTable()
@ -564,7 +568,7 @@ class AssignmentTab(QWidget):
self.hlayout = QHBoxLayout() self.hlayout = QHBoxLayout()
self.hlayout.addWidget(self.addAssignmentButton) self.hlayout.addWidget(self.addAssignmentButton)
self.hlayout.addWidget(self.deleteAssignmentButton) self.hlayout.addWidget(self.deleteAssignmentButton)
self.hlayout.addWidget(self.completeAssignmentBox) self.hlayout.addWidget(self.statusAssignmentBox)
self.hlayout.addStretch() self.hlayout.addStretch()
self.vlayout.addWidget(self.assignmentTable) self.vlayout.addWidget(self.assignmentTable)
self.vlayout.addLayout(self.hlayout) self.vlayout.addLayout(self.hlayout)
@ -575,12 +579,12 @@ class AssignmentTab(QWidget):
self.assignmentTable = QTableWidget(0, 5, self) self.assignmentTable = QTableWidget(0, 5, self)
self.assignmentTable.clear() self.assignmentTable.clear()
self.assignmentHeaderList = QStringList() self.assignmentHeaderList = QStringList()
self.assignmentHeaderList.append(self.trUtf8("Date")) self.assignmentHeaderList.append(self.trUtf8("Date"))
self.assignmentHeaderList.append(self.trUtf8("Course")) self.assignmentHeaderList.append(self.trUtf8("Course"))
self.assignmentHeaderList.append(self.trUtf8("Number")) self.assignmentHeaderList.append(self.trUtf8("Number"))
self.assignmentHeaderList.append(self.trUtf8("Description")) self.assignmentHeaderList.append(self.trUtf8("Description"))
self.assignmentHeaderList.append(self.trUtf8("Complete")) self.assignmentHeaderList.append(self.trUtf8("Status"))
self.assignmentTable.setHorizontalHeaderLabels(self.assignmentHeaderList) self.assignmentTable.setHorizontalHeaderLabels(self.assignmentHeaderList)
self.assignmentTable.setAlternatingRowColors(True) self.assignmentTable.setAlternatingRowColors(True)
@ -607,37 +611,37 @@ class AssignmentTab(QWidget):
if assignment == None: if assignment == None:
assignment = self.assignments[row] assignment = self.assignments[row]
complete = QString(assignment.getComplete()) status = QString(assignment.getStatus())
brush = self.makeBrush(complete) brush = self.makeBrush(status)
self.assignmentTable.setItem(row, 0, QTableWidgetItem(QString(assignment.getDate().toString("yyyy-MM-dd hh:mm, ddd")))) self.assignmentTable.setItem(row, 0, QTableWidgetItem(QString(assignment.getDate().toString("yyyy-MM-dd hh:mm, ddd"))))
self.assignmentTable.setItem(row, 1, QTableWidgetItem(QString(assignment.getCourse().getFull()))) self.assignmentTable.setItem(row, 1, QTableWidgetItem(QString(assignment.getCourse().getFull())))
self.assignmentTable.setItem(row, 2, QTableWidgetItem(QString("%i" % assignment.getNumber()))) self.assignmentTable.setItem(row, 2, QTableWidgetItem(QString("%i" % assignment.getNumber())))
self.assignmentTable.setItem(row, 3, QTableWidgetItem(QString("%s" % assignment.getDescription()))) self.assignmentTable.setItem(row, 3, QTableWidgetItem(QString("%s" % assignment.getDescription())))
completeItem = QTableWidgetItem(complete) statusItem = QTableWidgetItem(status)
completeItem.setBackground(brush) statusItem.setBackground(brush)
self.assignmentTable.setItem(row, 4, completeItem) self.assignmentTable.setItem(row, 4, statusItem)
## Set the right brush and color for the assignment, depending on level of completion ## Set the right brush and color for the assignment, depending on level of completion
def makeBrush(self, complete): def makeBrush(self, status):
brush = QBrush(Qt.NoBrush) brush = QBrush(Qt.NoBrush)
if complete.compare(QString(self.trUtf8("Available"))) == 0: if status.compare(QString(self.trUtf8("Available"))) == 0:
brush.setStyle(Qt.Dense7Pattern) brush.setStyle(Qt.Dense7Pattern)
brush.setColor(QColor(Qt.cyan)) brush.setColor(QColor(Qt.cyan))
elif complete.compare(QString(self.trUtf8("Begun"))) == 0: elif status.compare(QString(self.trUtf8("Begun"))) == 0:
brush.setStyle(Qt.Dense5Pattern) brush.setStyle(Qt.Dense5Pattern)
brush.setColor(QColor(Qt.cyan)) brush.setColor(QColor(Qt.cyan))
elif complete.compare(QString(self.trUtf8("Finished"))) == 0: elif status.compare(QString(self.trUtf8("Finished"))) == 0:
brush.setStyle(Qt.Dense3Pattern) brush.setStyle(Qt.Dense3Pattern)
brush.setColor(QColor(Qt.cyan)) brush.setColor(QColor(Qt.cyan))
elif complete.compare(QString(self.trUtf8("Delivered"))) == 0: elif status.compare(QString(self.trUtf8("Delivered"))) == 0:
brush.setStyle(Qt.Dense1Pattern) brush.setStyle(Qt.Dense1Pattern)
brush.setColor(QColor(Qt.cyan)) brush.setColor(QColor(Qt.cyan))
elif complete.compare(QString(self.trUtf8("Approved"))) == 0: elif status.compare(QString(self.trUtf8("Approved"))) == 0:
brush.setStyle(Qt.SolidPattern) brush.setStyle(Qt.SolidPattern)
brush.setColor(QColor(Qt.green)) brush.setColor(QColor(Qt.green))
elif complete.compare(QString(self.trUtf8("Not approved"))) == 0: elif status.compare(QString(self.trUtf8("Not approved"))) == 0:
brush.setStyle(Qt.SolidPattern) brush.setStyle(Qt.SolidPattern)
brush.setColor(QColor(Qt.red)) brush.setColor(QColor(Qt.red))
else: else:
@ -657,7 +661,7 @@ class AssignmentDlg(QDialog):
self.courseLabel = QLabel(self.trUtf8("&Course")) self.courseLabel = QLabel(self.trUtf8("&Course"))
self.numberLabel = QLabel(self.trUtf8("&Number")) self.numberLabel = QLabel(self.trUtf8("&Number"))
self.descriptionLabel = QLabel(self.trUtf8("De&scription")) self.descriptionLabel = QLabel(self.trUtf8("De&scription"))
self.completeLabel = QLabel(self.trUtf8("&Complete")) self.statusLabel = QLabel(self.trUtf8("&Status"))
# Widgets # Widgets
self.dateEdit = QLineEdit("DD.MM.YYYY HH:MM") self.dateEdit = QLineEdit("DD.MM.YYYY HH:MM")
@ -667,9 +671,9 @@ class AssignmentDlg(QDialog):
self.numberEdit = QSpinBox() self.numberEdit = QSpinBox()
self.numberEdit.setRange(1, 20) self.numberEdit.setRange(1, 20)
self.descriptionEdit = QLineEdit() self.descriptionEdit = QLineEdit()
self.completeEdit = QComboBox() self.statusEdit = QComboBox()
completeTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")] statusTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.completeEdit.addItems(completeTypes) self.statusEdit.addItems(statusTypes)
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
# Buddies # Buddies
@ -677,7 +681,7 @@ class AssignmentDlg(QDialog):
self.courseLabel.setBuddy(self.courseEdit) self.courseLabel.setBuddy(self.courseEdit)
self.numberLabel.setBuddy(self.numberEdit) self.numberLabel.setBuddy(self.numberEdit)
self.descriptionLabel.setBuddy(self.descriptionEdit) self.descriptionLabel.setBuddy(self.descriptionEdit)
self.completeLabel.setBuddy(self.completeEdit) self.statusLabel.setBuddy(self.statusEdit)
# Layout # Layout
self.layout = QGridLayout() self.layout = QGridLayout()
@ -685,12 +689,12 @@ class AssignmentDlg(QDialog):
self.layout.addWidget(self.courseLabel, 1, 0) self.layout.addWidget(self.courseLabel, 1, 0)
self.layout.addWidget(self.numberLabel, 2, 0) self.layout.addWidget(self.numberLabel, 2, 0)
self.layout.addWidget(self.descriptionLabel, 3, 0) self.layout.addWidget(self.descriptionLabel, 3, 0)
self.layout.addWidget(self.completeLabel, 4, 0) self.layout.addWidget(self.statusLabel, 4, 0)
self.layout.addWidget(self.dateEdit, 0, 1) self.layout.addWidget(self.dateEdit, 0, 1)
self.layout.addWidget(self.courseEdit, 1, 1) self.layout.addWidget(self.courseEdit, 1, 1)
self.layout.addWidget(self.numberEdit, 2, 1) self.layout.addWidget(self.numberEdit, 2, 1)
self.layout.addWidget(self.descriptionEdit, 3, 1) self.layout.addWidget(self.descriptionEdit, 3, 1)
self.layout.addWidget(self.completeEdit, 4, 1) self.layout.addWidget(self.statusEdit, 4, 1)
self.layout.addWidget(self.buttonBox, 5, 0, 1, 2) self.layout.addWidget(self.buttonBox, 5, 0, 1, 2)
self.setLayout(self.layout) self.setLayout(self.layout)
@ -708,7 +712,7 @@ class AssignmentDlg(QDialog):
assignment.append(unicode(self.courseEdit.currentText())) assignment.append(unicode(self.courseEdit.currentText()))
assignment.append(self.numberEdit.value()) assignment.append(self.numberEdit.value())
assignment.append(unicode(self.descriptionEdit.text())) assignment.append(unicode(self.descriptionEdit.text()))
assignment.append(unicode(self.completeEdit.currentText())) assignment.append(unicode(self.statusEdit.currentText()))
return assignment return assignment
## Accept the dialog and add the specified assignment ## Accept the dialog and add the specified assignment
@ -718,7 +722,7 @@ class AssignmentDlg(QDialog):
courseFull = assignmentList[1] courseFull = assignmentList[1]
number = assignmentList[2] number = assignmentList[2]
description = assignmentList[3] description = assignmentList[3]
complete = assignmentList[4] status = assignmentList[4]
regex = QRegExp(r"[01-31].[01-12].[2000-2050] [00-23]:[00-60]") regex = QRegExp(r"[01-31].[01-12].[2000-2050] [00-23]:[00-60]")
validator = QRegExpValidator(regex, self) validator = QRegExpValidator(regex, self)
@ -759,8 +763,8 @@ class AssignmentDlg(QDialog):
try: try:
global semester global semester
addNewAssignmentToDB(semester, datetime, course, number, description, complete) addNewAssignmentToDB(semester, datetime, course, number, description, status)
assignment = AssignmentModel(datetime, course, number, description, complete) assignment = AssignmentModel(datetime, course, number, description, status)
except UnboundLocalError, e: except UnboundLocalError, e:
pass pass
@ -780,15 +784,15 @@ class AssignmentModel():
course = None course = None
number = 0 number = 0
description = "" description = ""
complete = "" status = ""
## Initialize the assignment model ## Initialize the assignment model
def __init__(self, date, course, number, description, complete): def __init__(self, date, course, number, description, status):
self.date = date self.date = date
self.course = course self.course = course
self.number = number self.number = number
self.description = description self.description = description
self.complete = complete self.status = status
## Return the date the assignment is due ## Return the date the assignment is due
def getDate(self): def getDate(self):
@ -807,8 +811,8 @@ class AssignmentModel():
return self.description return self.description
## Return the level of completion for the assignment ## Return the level of completion for the assignment
def getComplete(self): def getStatus(self):
return self.complete return self.status
### The contents of the Reading tab ### The contents of the Reading tab
@ -1030,7 +1034,7 @@ class ReadingModel():
p.strip() p.strip()
nextArray.append(p.split("-")) nextArray.append(p.split("-"))
for n in nextArray: for n in nextArray:
sum += int(n[1]) - int(n[0]) sum += int(n[1]) - int(n[0]) + 1
return sum return sum
## Return whether the reading has been done or not ## Return whether the reading has been done or not
@ -1076,7 +1080,7 @@ class ScheduleTab(QWidget):
def updateHeaders(self): def updateHeaders(self):
self.scheduleHorizontalHeaderList = QStringList() self.scheduleHorizontalHeaderList = QStringList()
self.scheduleHorizontalHeaderList.append(self.trUtf8("Monday")) self.scheduleHorizontalHeaderList.append(self.trUtf8("Monday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Tuesday")) self.scheduleHorizontalHeaderList.append(self.trUtf8("Tuesday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Wednesday")) self.scheduleHorizontalHeaderList.append(self.trUtf8("Wednesday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Thursday")) self.scheduleHorizontalHeaderList.append(self.trUtf8("Thursday"))
@ -1345,7 +1349,7 @@ class CourseDlg(QDialog):
booksDB = getBooksFromDB() booksDB = getBooksFromDB()
booksStringList = QStringList() booksStringList = QStringList()
for book in booksDB: for book in booksDB:
booksStringList.append(book.getTitle()) booksStringList.append(book.getAuthor() + u" : " + book.getTitle() + u", " + str(book.getEdition()) + self.trUtf8(". edition"))
self.booksEdit.addItems(booksStringList) self.booksEdit.addItems(booksStringList)
self.booksEdit.sortItems() self.booksEdit.sortItems()
@ -1567,7 +1571,7 @@ def initAssignmentDB(cursor):
course TEXT, course TEXT,
number INT, number INT,
description TEXT, description TEXT,
complete TEXT, status TEXT,
term TEXT, term TEXT,
year INT, year INT,
PRIMARY KEY (course, number) PRIMARY KEY (course, number)
@ -1586,7 +1590,7 @@ def initReadingDB(cursor):
done BOOLEAN, done BOOLEAN,
term TEXT, term TEXT,
year INT, year INT,
PRIMARY KEY (week, course, book) PRIMARY KEY (week, course, book, chapter)
) )
''') ''')
@ -1653,7 +1657,7 @@ def addNewSemesterToDB(term, year):
exitDB(conn) exitDB(conn)
## Add new assignment to the database ## Add new assignment to the database
def addNewAssignmentToDB(semester, datetime, course, number, description, complete): def addNewAssignmentToDB(semester, datetime, course, number, description, status):
cursor, conn = initDB() cursor, conn = initDB()
day = datetime.date().day() day = datetime.date().day()
@ -1666,9 +1670,9 @@ def addNewAssignmentToDB(semester, datetime, course, number, description, comple
year = semester.getYear() year = semester.getYear()
cursor.execute(''' cursor.execute('''
INSERT INTO Assignment (date, course, number, description, complete, term, year) INSERT INTO Assignment (date, course, number, description, status, term, year)
VALUES (datetime(?), ?, ?, ?, ?, ?, ?) VALUES (datetime(?), ?, ?, ?, ?, ?, ?)
''', (timestring, course.getCode(), number, description, complete, term, year)) ''', (timestring, course.getCode(), number, description, status, term, year))
exitDB(conn) exitDB(conn)
@ -1717,7 +1721,7 @@ def addNewCourseToDB(code, title, short, color, books):
cursor.execute(''' cursor.execute('''
INSERT INTO CourseUsesBook (courseCode, bookIsbn) INSERT INTO CourseUsesBook (courseCode, bookIsbn)
VALUES (?, ?) VALUES (?, ?)
''', (code, book.getIsbn())) ''', (code, book))
exitDB(conn) exitDB(conn)
@ -1941,7 +1945,7 @@ def getBookWithTitleFromDB(booktitle):
def updateAssignmentCompletion(coursecode, num, completion): def updateAssignmentCompletion(coursecode, num, completion):
cursor, conn = initDB() cursor, conn = initDB()
complete = "%s" % completion status = "%s" % completion
course = "%s" % coursecode course = "%s" % coursecode
number = (num.toInt())[0] number = (num.toInt())[0]
@ -1950,16 +1954,17 @@ def updateAssignmentCompletion(coursecode, num, completion):
SET complete = ? SET complete = ?
WHERE course = ? WHERE course = ?
AND number = ? AND number = ?
''', (complete, course, number)) ''', (status, course, number))
exitDB(conn) exitDB(conn)
## Update whether the specified reading is done or not ## Update whether the specified reading is done or not
def updateReadingDone(week, coursecode, bookisbn, done): def updateReadingDone(week, coursecode, bookisbn, chapter, done):
cursor, conn = initDB() cursor, conn = initDB()
course = "%s" % coursecode course = "%s" % coursecode
book = "%s" % bookisbn book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute(''' cursor.execute('''
UPDATE Reading UPDATE Reading
@ -1967,7 +1972,8 @@ def updateReadingDone(week, coursecode, bookisbn, done):
WHERE week = ? WHERE week = ?
AND course = ? AND course = ?
AND book = ? AND book = ?
''', (done, week, course, book)) AND chapter = ?
''', (done, week, course, book, ch))
exitDB(conn) exitDB(conn)
@ -1990,11 +1996,12 @@ def removeAssignmentFromDB(coursecode, num):
exitDB(conn) exitDB(conn)
## Remove the specified reading from the database ## Remove the specified reading from the database
def removeReadingFromDB(week, coursecode, bookisbn): def removeReadingFromDB(week, coursecode, bookisbn, chapter):
cursor, conn = initDB() cursor, conn = initDB()
course = "%s" % coursecode course = "%s" % coursecode
book = "%s" % bookisbn book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute(''' cursor.execute('''
DELETE DELETE
@ -2002,7 +2009,8 @@ def removeReadingFromDB(week, coursecode, bookisbn):
WHERE week = ? WHERE week = ?
AND course = ? AND course = ?
AND book = ? AND book = ?
''', (week, course, book)) AND chapter = ?
''', (week, course, book, ch))
exitDB(conn) exitDB(conn)
@ -2041,7 +2049,7 @@ def getCourseCode(courseFull):
## Add a new course to the list of courses ## Add a new course to the list of courses
def addNewCourse(course): def addNewCourse(course):
courses.append(course) courses.append(course)
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor()) addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor(), course.getBooks())
addNewCourseString(course) addNewCourseString(course)
## Return the list of courses ## Return the list of courses
@ -2155,6 +2163,14 @@ def getMain():
## Run the program ## Run the program
def main(): def main():
app = QApplication(sys.argv) app = QApplication(sys.argv)
locale = QLocale.system().name()
qtTranslator = QTranslator()
if qtTranslator.load("qt_" + locale, ":/"):
app.installTranslator(qtTranslator)
appTranslator = QTranslator()
if appTranslator.load("imagechanger_" + locale, ":/"):
app.installTranslator(appTranslator)
form = MainWindow() form = MainWindow()
app.setOrganizationName("PVV") app.setOrganizationName("PVV")
app.setOrganizationDomain("pvv.ntnu.no") app.setOrganizationDomain("pvv.ntnu.no")

BIN
egon_nb.qm Normal file

Binary file not shown.

657
egon_nb.ts Normal file
View File

@ -0,0 +1,657 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="nb">
<defaultcodec></defaultcodec>
<context>
<name>AssignmentDlg</name>
<message>
<location filename="egon.py" line="660"/>
<source>&amp;Date</source>
<translation>&amp;Dato</translation>
</message>
<message>
<location filename="egon.py" line="661"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="662"/>
<source>&amp;Number</source>
<translation>&amp;Nummer</translation>
</message>
<message>
<location filename="egon.py" line="663"/>
<source>De&amp;scription</source>
<translation>&amp;Beskrivelse</translation>
</message>
<message>
<location filename="egon.py" line="664"/>
<source>&amp;Status</source>
<translation>&amp;Status</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Not available</source>
<translation>Ikke tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Available</source>
<translation>Tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Begun</source>
<translation>Påbegynt</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Finished</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Delivered</source>
<translation>Levert</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Approved</source>
<translation>Godkjent</translation>
</message>
<message>
<location filename="egon.py" line="676"/>
<source>Not approved</source>
<translation>Underkjent</translation>
</message>
<message>
<location filename="egon.py" line="706"/>
<source>Add new assignment</source>
<translation>Ny øving</translation>
</message>
<message>
<location filename="egon.py" line="732"/>
<source>The date is not in a correct format.</source>
<translation>Datoen er ikke i et godkjent format.</translation>
</message>
<message>
<location filename="egon.py" line="746"/>
<source>The day is not valid. Please enter a valid date.</source>
<translation>Dagen er ikke gyldig. Vennligst oppgi et gyldig dato.</translation>
</message>
<message>
<location filename="egon.py" line="749"/>
<source>The hour is not valid. Please enter a valid time.</source>
<translation>Timen er ikke gyldig. Vennligst oppgi et gyldig tidspunkt.</translation>
</message>
<message>
<location filename="egon.py" line="752"/>
<source>The minutes are not valid. Please enter a valid time.</source>
<translation>Minuttene er ikke gyldig. Vennligst oppgi et gyldig tidspunkt.</translation>
</message>
<message>
<location filename="egon.py" line="760"/>
<source>The date is not valid. Please enter a date on the DD.MM.YYYY HH:MM form.</source>
<translation>Datoen er ikke gyldig. Vennligst oppgi en dato formatet DD.MM.YYYY HH:MM.</translation>
</message>
</context>
<context>
<name>AssignmentTab</name>
<message>
<location filename="egon.py" line="560"/>
<source>Not available</source>
<translation>Ikke tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="629"/>
<source>Available</source>
<translation>Tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="632"/>
<source>Begun</source>
<translation>Påbegynt</translation>
</message>
<message>
<location filename="egon.py" line="635"/>
<source>Finished</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="638"/>
<source>Delivered</source>
<translation>Levert</translation>
</message>
<message>
<location filename="egon.py" line="641"/>
<source>Approved</source>
<translation>Godkjent</translation>
</message>
<message>
<location filename="egon.py" line="644"/>
<source>Not approved</source>
<translation>Underkjent</translation>
</message>
<message>
<location filename="egon.py" line="583"/>
<source>Date</source>
<translation>Dato</translation>
</message>
<message>
<location filename="egon.py" line="584"/>
<source>Course</source>
<translation>Fag</translation>
</message>
<message>
<location filename="egon.py" line="585"/>
<source>Number</source>
<translation>Nummer</translation>
</message>
<message>
<location filename="egon.py" line="586"/>
<source>Description</source>
<translation>Beskrivelse</translation>
</message>
<message>
<location filename="egon.py" line="587"/>
<source>Status</source>
<translation>Status</translation>
</message>
</context>
<context>
<name>BookDlg</name>
<message>
<location filename="egon.py" line="1439"/>
<source>&amp;Title</source>
<translation>&amp;Tittel</translation>
</message>
<message>
<location filename="egon.py" line="1440"/>
<source>&amp;Author</source>
<translation>&amp;Forfatter</translation>
</message>
<message>
<location filename="egon.py" line="1441"/>
<source>&amp;Edition</source>
<translation>&amp;Utgave</translation>
</message>
<message>
<location filename="egon.py" line="1442"/>
<source>&amp;ISBN</source>
<translation>&amp;ISBN</translation>
</message>
<message>
<location filename="egon.py" line="1476"/>
<source>Add new book</source>
<translation>Ny bok</translation>
</message>
</context>
<context>
<name>CourseDlg</name>
<message>
<location filename="egon.py" line="1302"/>
<source>&amp;Code</source>
<translation>Fag&amp;kode</translation>
</message>
<message>
<location filename="egon.py" line="1303"/>
<source>&amp;Title</source>
<translation>Fag&amp;navn</translation>
</message>
<message>
<location filename="egon.py" line="1304"/>
<source>&amp;Short form</source>
<translation>&amp;Kortform</translation>
</message>
<message>
<location filename="egon.py" line="1305"/>
<source>&amp;Books</source>
<translation>&amp;Bøker</translation>
</message>
<message>
<location filename="egon.py" line="1344"/>
<source>Add new course</source>
<translation>Nytt fag</translation>
</message>
<message>
<location filename="egon.py" line="1352"/>
<source>. edition</source>
<translation>. utgave</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="egon.py" line="45"/>
<source>Egon</source>
<translation>Egon</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Monday</source>
<translation>Mandag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Tuesday</source>
<translation>Tirsdag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Wednesday</source>
<translation>Onsdag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Thursday</source>
<translation>Torsdag</translation>
</message>
<message>
<location filename="egon.py" line="48"/>
<source>Friday</source>
<translation>Fredag</translation>
</message>
<message>
<location filename="egon.py" line="54"/>
<source>&amp;Assignment</source>
<translation>&amp;Øving</translation>
</message>
<message>
<location filename="egon.py" line="55"/>
<source>&amp;Reading List</source>
<translation>&amp;Leselekse</translation>
</message>
<message>
<location filename="egon.py" line="56"/>
<source>&amp;Schedule</source>
<translation>&amp;Timeplan</translation>
</message>
<message>
<location filename="egon.py" line="64"/>
<source>Calendar</source>
<translation>Kalender</translation>
</message>
<message>
<location filename="egon.py" line="79"/>
<source>Spring</source>
<translation>Vår</translation>
</message>
<message>
<location filename="egon.py" line="167"/>
<source>Autumn</source>
<translation>Høst</translation>
</message>
<message>
<location filename="egon.py" line="87"/>
<source>&amp;New</source>
<translation>&amp;Ny</translation>
</message>
<message>
<location filename="egon.py" line="87"/>
<source>Create a new semester plan</source>
<translation>Lag ny semesterplan</translation>
</message>
<message>
<location filename="egon.py" line="88"/>
<source>&amp;Open</source>
<translation>&amp;Åpne</translation>
</message>
<message>
<location filename="egon.py" line="88"/>
<source>Open an existing semester plan</source>
<translation>Åpne en eksisterende semesterplan</translation>
</message>
<message>
<location filename="egon.py" line="89"/>
<source>&amp;Quit</source>
<translation>&amp;Avslutt</translation>
</message>
<message>
<location filename="egon.py" line="89"/>
<source>Quit program</source>
<translation>Avslutt program</translation>
</message>
<message>
<location filename="egon.py" line="90"/>
<source>Add &amp;course</source>
<translation>Nytt &amp;fag</translation>
</message>
<message>
<location filename="egon.py" line="90"/>
<source>Add a new course</source>
<translation>Legg til et nytt fag</translation>
</message>
<message>
<location filename="egon.py" line="91"/>
<source>Add &amp;book</source>
<translation>Ny &amp;bok</translation>
</message>
<message>
<location filename="egon.py" line="91"/>
<source>Add a new book</source>
<translation>Legg til en ny bok</translation>
</message>
<message>
<location filename="egon.py" line="92"/>
<source>Add &amp;assignment</source>
<translation>Ny &amp;øving</translation>
</message>
<message>
<location filename="egon.py" line="92"/>
<source>Add a new assignment</source>
<translation>Legg til en ny øving</translation>
</message>
<message>
<location filename="egon.py" line="93"/>
<source>Add &amp;reading</source>
<translation>Ny &amp;leselekse</translation>
</message>
<message>
<location filename="egon.py" line="93"/>
<source>Add a new reading</source>
<translation>Legg til en ny leselekse</translation>
</message>
<message>
<location filename="egon.py" line="94"/>
<source>Add &amp;lesson</source>
<translation>Ny &amp;time</translation>
</message>
<message>
<location filename="egon.py" line="94"/>
<source>Add a new lesson</source>
<translation>Legg til en ny time</translation>
</message>
<message>
<location filename="egon.py" line="95"/>
<source>Cal&amp;endar</source>
<translation>Kal&amp;ender</translation>
</message>
<message>
<location filename="egon.py" line="95"/>
<source>Show the calendar</source>
<translation>Vis kalenderen</translation>
</message>
<message>
<location filename="egon.py" line="96"/>
<source>&amp;About Egon</source>
<translation>Om &amp;Egon</translation>
</message>
<message>
<location filename="egon.py" line="99"/>
<source>&amp;File</source>
<translation>&amp;Fil</translation>
</message>
<message>
<location filename="egon.py" line="100"/>
<source>&amp;Edit</source>
<translation>&amp;Rediger</translation>
</message>
<message>
<location filename="egon.py" line="101"/>
<source>&amp;Help</source>
<translation>&amp;Hjelp</translation>
</message>
<message>
<location filename="egon.py" line="126"/>
<source>File</source>
<translation>Fil</translation>
</message>
<message>
<location filename="egon.py" line="129"/>
<source>Edit</source>
<translation>Rediger</translation>
</message>
<message>
<location filename="egon.py" line="242"/>
<source>Not done</source>
<translation>Ikke ferdig</translation>
</message>
<message>
<location filename="egon.py" line="238"/>
<source>Done</source>
<translation>Ferdig</translation>
</message>
</context>
<context>
<name>NewSemesterDlg</name>
<message>
<location filename="egon.py" line="405"/>
<source>Semester</source>
<translation>Semester</translation>
</message>
<message>
<location filename="egon.py" line="406"/>
<source>Year</source>
<translation>År</translation>
</message>
<message>
<location filename="egon.py" line="430"/>
<source>New semester</source>
<translation>Nytt semester</translation>
</message>
</context>
<context>
<name>OpenSemesterDlg</name>
<message>
<location filename="egon.py" line="472"/>
<source>Open semester</source>
<translation>Åpne en semesterplan</translation>
</message>
</context>
<context>
<name>ReadingDlg</name>
<message>
<location filename="egon.py" line="908"/>
<source>&amp;Week</source>
<translation>&amp;Uke</translation>
</message>
<message>
<location filename="egon.py" line="909"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="910"/>
<source>&amp;Book</source>
<translation>&amp;Bok</translation>
</message>
<message>
<location filename="egon.py" line="911"/>
<source>Cha&amp;pter</source>
<translation>&amp;Kapittel</translation>
</message>
<message>
<location filename="egon.py" line="912"/>
<source>&amp;Pages</source>
<translation>&amp;Sider</translation>
</message>
<message>
<location filename="egon.py" line="960"/>
<source>Add new reading</source>
<translation>Ny leselekse</translation>
</message>
</context>
<context>
<name>ReadingTab</name>
<message>
<location filename="egon.py" line="826"/>
<source>Add pages to read</source>
<translation>Legg til leselekse</translation>
</message>
<message>
<location filename="egon.py" line="827"/>
<source>Delete pages</source>
<translation>Slett leselekse</translation>
</message>
<message>
<location filename="egon.py" line="883"/>
<source>Done</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="849"/>
<source>Week</source>
<translation>Uke</translation>
</message>
<message>
<location filename="egon.py" line="850"/>
<source>Course</source>
<translation>Fag</translation>
</message>
<message>
<location filename="egon.py" line="851"/>
<source>Book</source>
<translation>Bok</translation>
</message>
<message>
<location filename="egon.py" line="852"/>
<source>Chapter</source>
<translation>Kapittel</translation>
</message>
<message>
<location filename="egon.py" line="853"/>
<source>Pages</source>
<translation>Sider</translation>
</message>
<message>
<location filename="egon.py" line="854"/>
<source>Number of pages</source>
<translation>Antall sider</translation>
</message>
<message>
<location filename="egon.py" line="886"/>
<source>Not done</source>
<translation>Ikke ferdig</translation>
</message>
</context>
<context>
<name>ScheduleDlg</name>
<message>
<location filename="egon.py" line="1174"/>
<source>&amp;Day</source>
<translation>&amp;Dag</translation>
</message>
<message>
<location filename="egon.py" line="1175"/>
<source>&amp;From</source>
<translation>Fr&amp;a</translation>
</message>
<message>
<location filename="egon.py" line="1176"/>
<source>&amp;To</source>
<translation>&amp;Til</translation>
</message>
<message>
<location filename="egon.py" line="1177"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="1178"/>
<source>Ty&amp;pe</source>
<translation>T&amp;ype</translation>
</message>
<message>
<location filename="egon.py" line="1179"/>
<source>&amp;Room</source>
<translation>&amp;Rom</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Lecture</source>
<translation>Forelesning</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Assignment lecture</source>
<translation>Øvingsforelesning</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Assignment help</source>
<translation>Øvingshjelp</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Lab</source>
<translation>Lab</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Seminar</source>
<translation>Seminar</translation>
</message>
<message>
<location filename="egon.py" line="1198"/>
<source>Other</source>
<translation>Annet</translation>
</message>
<message>
<location filename="egon.py" line="1232"/>
<source>Add new lesson</source>
<translation>Legg til ny time</translation>
</message>
</context>
<context>
<name>ScheduleTab</name>
<message>
<location filename="egon.py" line="1130"/>
<source>Monday</source>
<translation>Mandag</translation>
</message>
<message>
<location filename="egon.py" line="1132"/>
<source>Tuesday</source>
<translation>Tirsdag</translation>
</message>
<message>
<location filename="egon.py" line="1134"/>
<source>Wednesday</source>
<translation>Onsdag</translation>
</message>
<message>
<location filename="egon.py" line="1136"/>
<source>Thursday</source>
<translation>Torsdag</translation>
</message>
<message>
<location filename="egon.py" line="1138"/>
<source>Friday</source>
<translation>Fredag</translation>
</message>
<message>
<location filename="egon.py" line="1090"/>
<source>%i</source>
<translation>%i</translation>
</message>
<message>
<location filename="egon.py" line="1145"/>
<source>Lecture</source>
<translation>Forelesning</translation>
</message>
<message>
<location filename="egon.py" line="1147"/>
<source>Assignment lecture</source>
<translation>Øvingsforelesning</translation>
</message>
<message>
<location filename="egon.py" line="1149"/>
<source>Assignment help</source>
<translation>Øvingshjelp</translation>
</message>
<message>
<location filename="egon.py" line="1151"/>
<source>Lab</source>
<translation>Lab</translation>
</message>
<message>
<location filename="egon.py" line="1153"/>
<source>Seminar</source>
<translation>Seminar</translation>
</message>
<message>
<location filename="egon.py" line="1155"/>
<source>Other</source>
<translation>Annet</translation>
</message>
</context>
</TS>

View File

@ -223,10 +223,10 @@ class MainWindow(QMainWindow):
## Delete the reading from the database and the table ## Delete the reading from the database and the table
def deleteReading(self): def deleteReading(self):
week, course, book = self.getWeekCourseAndBook() week, course, book, chapter = self.getWeekCourseBookAndChapter()
table, row = self.getReadingTableAndRow() table, row = self.getReadingTableAndRow()
global semester global semester
removeReadingFromDB(week, course, book) removeReadingFromDB(week, course, book, chapter)
table.removeRow(row) table.removeRow(row)
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents) table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
@ -238,7 +238,7 @@ class MainWindow(QMainWindow):
item = QTableWidgetItem(self.trUtf8("Ferdig")) item = QTableWidgetItem(self.trUtf8("Ferdig"))
item.setBackground(QBrush(Qt.green, Qt.SolidPattern)) item.setBackground(QBrush(Qt.green, Qt.SolidPattern))
else: else:
done = False done = True
item = QTableWidgetItem(self.trUtf8("Ikke ferdig")) item = QTableWidgetItem(self.trUtf8("Ikke ferdig"))
item.setBackground(QBrush(Qt.red, Qt.SolidPattern)) item.setBackground(QBrush(Qt.red, Qt.SolidPattern))
table.setItem(row, 6, item) table.setItem(row, 6, item)
@ -249,7 +249,9 @@ class MainWindow(QMainWindow):
bookTitle = table.item(row, 2).text() bookTitle = table.item(row, 2).text()
book = getBookWithTitleFromDB(bookTitle) book = getBookWithTitleFromDB(bookTitle)
bookIsbn = book.getIsbn() bookIsbn = book.getIsbn()
updateReadingDone(week, courseCode, bookIsbn, True) chapter = table.item(row, 3).text()
updateReadingDone(week, courseCode, bookIsbn, chapter, done)
print week, courseCode, bookIsbn, chapter, done
## Return the reading table and its current row ## Return the reading table and its current row
def getReadingTableAndRow(self): def getReadingTableAndRow(self):
@ -258,16 +260,18 @@ class MainWindow(QMainWindow):
return table, row return table, row
## Return the week, course and book of the current reading ## Return the week, course and book of the current reading
def getWeekCourseAndBook(self): def getWeekCourseBookAndChapter(self):
table, row = self.getReadingTableAndRow() table, row = self.getReadingTableAndRow()
weekItem = table.item(row, 0) weekItem = table.item(row, 0)
courseItem = table.item(row, 1) courseItem = table.item(row, 1)
bookItem = table.item(row, 2) bookItem = table.item(row, 2)
chapterItem = table.item(row, 3)
week = (weekItem.text().toInt())[0] week = (weekItem.text().toInt())[0]
courseFull = courseItem.text() courseFull = courseItem.text()
courseCode = getCourseCode(courseFull) courseCode = getCourseCode(courseFull)
book = getBookWithTitleFromDB(bookItem.text()) book = getBookWithTitleFromDB(bookItem.text())
return week, courseCode, book.getIsbn() chapter = chapterItem.text()
return week, courseCode, book.getIsbn(), chapter
# Schedule # Schedule
@ -1030,7 +1034,7 @@ class ReadingModel():
p.strip() p.strip()
nextArray.append(p.split("-")) nextArray.append(p.split("-"))
for n in nextArray: for n in nextArray:
sum += int(n[1]) - int(n[0]) sum += int(n[1]) - int(n[0]) + 1
return sum return sum
## Return whether the reading has been done or not ## Return whether the reading has been done or not
@ -1345,7 +1349,7 @@ class CourseDlg(QDialog):
booksDB = getBooksFromDB() booksDB = getBooksFromDB()
booksStringList = QStringList() booksStringList = QStringList()
for book in booksDB: for book in booksDB:
booksStringList.append(book.getTitle()) booksStringList.append(book.getAuthor() + u" : " + book.getTitle() + u", " + str(book.getEdition()) + u". utgave")
self.booksEdit.addItems(booksStringList) self.booksEdit.addItems(booksStringList)
self.booksEdit.sortItems() self.booksEdit.sortItems()
@ -1524,7 +1528,7 @@ def initDB():
home = os.environ['HOME'] home = os.environ['HOME']
else: else:
home = "" home = ""
path = home+"/.egon/egon_bm.db" path = home+"/.egon/egon_no.db"
conn = sqlite.connect(path) conn = sqlite.connect(path)
cursor = conn.cursor() cursor = conn.cursor()
@ -1586,7 +1590,7 @@ def initReadingDB(cursor):
done BOOLEAN, done BOOLEAN,
term TEXT, term TEXT,
year INT, year INT,
PRIMARY KEY (week, course, book) PRIMARY KEY (week, course, book, chapter)
) )
''') ''')
@ -1717,7 +1721,7 @@ def addNewCourseToDB(code, title, short, color, books):
cursor.execute(''' cursor.execute('''
INSERT INTO CourseUsesBook (courseCode, bookIsbn) INSERT INTO CourseUsesBook (courseCode, bookIsbn)
VALUES (?, ?) VALUES (?, ?)
''', (code, book.getIsbn())) ''', (code, book))
exitDB(conn) exitDB(conn)
@ -1955,11 +1959,12 @@ def updateAssignmentCompletion(coursecode, num, completion):
exitDB(conn) exitDB(conn)
## Update whether the specified reading is done or not ## Update whether the specified reading is done or not
def updateReadingDone(week, coursecode, bookisbn, done): def updateReadingDone(week, coursecode, bookisbn, chapter, done):
cursor, conn = initDB() cursor, conn = initDB()
course = "%s" % coursecode course = "%s" % coursecode
book = "%s" % bookisbn book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute(''' cursor.execute('''
UPDATE Reading UPDATE Reading
@ -1967,7 +1972,8 @@ def updateReadingDone(week, coursecode, bookisbn, done):
WHERE week = ? WHERE week = ?
AND course = ? AND course = ?
AND book = ? AND book = ?
''', (done, week, course, book)) AND chapter = ?
''', (done, week, course, book, ch))
exitDB(conn) exitDB(conn)
@ -1990,11 +1996,12 @@ def removeAssignmentFromDB(coursecode, num):
exitDB(conn) exitDB(conn)
## Remove the specified reading from the database ## Remove the specified reading from the database
def removeReadingFromDB(week, coursecode, bookisbn): def removeReadingFromDB(week, coursecode, bookisbn, chapter):
cursor, conn = initDB() cursor, conn = initDB()
course = "%s" % coursecode course = "%s" % coursecode
book = "%s" % bookisbn book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute(''' cursor.execute('''
DELETE DELETE
@ -2002,7 +2009,8 @@ def removeReadingFromDB(week, coursecode, bookisbn):
WHERE week = ? WHERE week = ?
AND course = ? AND course = ?
AND book = ? AND book = ?
''', (week, course, book)) AND chapter = ?
''', (week, course, book, ch))
exitDB(conn) exitDB(conn)
@ -2041,7 +2049,7 @@ def getCourseCode(courseFull):
## Add a new course to the list of courses ## Add a new course to the list of courses
def addNewCourse(course): def addNewCourse(course):
courses.append(course) courses.append(course)
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor()) addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor(), course.getBooks())
addNewCourseString(course) addNewCourseString(course)
## Return the list of courses ## Return the list of courses

255
main.py
View File

@ -1,255 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from pysqlite2 import dbapi2 as sqlite
#import qrc_resources
from qrc_resources import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from book import *
from course import *
#from db import *
import db
__version__ = "0.0.1"
class MainWindow(QMainWindow):
courses = []
coursesString = []
books = []
booksString = []
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
# The program name
self.title = "Egon"
# The tabs
assignment = AssignmentTab()
reading = ReadingTab()
schedule = ScheduleTab()
# Set the tabs in the middle
self.tabs = QTabWidget()
self.tabs.addTab(assignment, "&Assignments")
self.tabs.addTab(reading, "&Reading List")
self.tabs.addTab(schedule, "&Schedule")
self.tabs.setTabShape(QTabWidget.Triangular)
self.tabs.setTabPosition(QTabWidget.North)
self.setCentralWidget(self.tabs)
# Set the title
self.setWindowTitle(self.title)
# The calendar
self.calendarFrame = QFrame()
self.calendarFrame.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)
self.calendarDockWidget = QDockWidget("Calendar", self)
self.calendarDockWidget.setVisible(False)
self.calendarDockWidget.setObjectName("CalendarDockWidget")
self.calendarDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea|Qt.BottomDockWidgetArea)
self.calendar = QCalendarWidget()
self.calendarLayout = QVBoxLayout()
self.calendarLayout.addWidget(self.calendar)
self.calendarFrame.setLayout(self.calendarLayout)
self.calendarFrame.hide()
self.calendarDockWidget.setWidget(self.calendarFrame)
# Actions
fileNewAction = self.createAction("&New", self.fileNew, QKeySequence.New, ":filenew", "Create a new plan")
fileOpenAction = self.createAction("&Open", self.fileOpen, QKeySequence.Open, ":fileopen", "Open an existing plan")
fileSaveAction = self.createAction("&Save", self.fileSave, QKeySequence.Save, ":filesave", "Save semester plan")
fileSaveAsAction = self.createAction("Save as...", self.fileSaveAs, None, ":filesaveas", "Save plan as...")
filePrintAction = self.createAction("&Print", self.filePrint, QKeySequence.Print, ":fileprint", "Print plan")
fileQuitAction = self.createAction("&Quit", self.close, "Ctrl+Q", ":filequit", "Quit program")
editAddCourse = self.createAction("A&dd course", self.addCourse, "Ctrl+D", None, "Add a new course")
editAddBook = self.createAction("Add &book", self.addBook, "Ctrl+B", None, "Add a new book")
editAddAssignment = self.createAction("Add &assignment", self.addAssignment, "Ctrl+A", None, "Add a new assignment")
editAddReading = self.createAction("Add &reading", self.addReading, "Ctrl+R", None, "Add a new reading")
editAddLesson = self.createAction("Add &lesson", self.addLesson, "Ctrl+L", None, "Add a new lesson")
editShowCalendar = self.createAction("&Calendar", self.showCalendar, "Ctrl+C", None, "Show the calendar")
helpAboutScheduler = self.createAction("&About %s" % self.title)
# Menus
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.helpMenu = self.menuBar().addMenu("&Help")
# Add actions to the menus
self.addActions(self.fileMenu, (fileNewAction, fileOpenAction, None, fileSaveAction, fileSaveAsAction, None, filePrintAction, None, fileQuitAction))
self.addActions(self.editMenu, (editAddCourse, editAddBook, None, editAddAssignment, None, editAddReading, None, editAddLesson, None, editShowCalendar))
self.addActions(self.helpMenu, (helpAboutScheduler, None))
# Connect statements
self.connect(editAddCourse, SIGNAL("triggered()"), self.addCourse)
self.connect(editAddBook, SIGNAL("triggered()"), self.addBook)
self.connect(editAddAssignment, SIGNAL("triggered()"), self.addAssignment)
self.connect(editAddReading, SIGNAL("triggered()"), self.addReading)
self.connect(editAddLesson, SIGNAL("triggered()"), self.addLesson)
self.connect(editShowCalendar, SIGNAL("pressed()"), self.showCalendar)
self.connect(helpAboutScheduler, SIGNAL("triggered()"), self.helpAbout)
self.connect(assignment.addAssignmentButton, SIGNAL("pressed()"), self.addAssignment)
self.connect(assignment.editAssignmentButton, SIGNAL("pressed()"), self.editAssignment)
self.connect(assignment.assignmentDoneButton, SIGNAL("pressed()"), self.doneAssignment)
self.connect(reading.addReadingButton, SIGNAL("pressed()"), self.addReading)
self.connect(reading.editReadingButton, SIGNAL("pressed()"), self.editReading)
self.connect(schedule.addScheduleButton, SIGNAL("pressed()"), self.addLesson)
self.connect(schedule.editScheduleButton, SIGNAL("pressed()"), self.editLesson)
# The toolbars
fileToolbar = self.addToolBar("File")
fileToolbar.setObjectName("FileToolBar")
self.addActions(fileToolbar, (fileNewAction, fileOpenAction, None, fileSaveAction, fileSaveAsAction, None, filePrintAction, None, fileQuitAction))
editToolbar = self.addToolBar("Edit")
editToolbar.setObjectName("EditToolBar")
self.addActions(editToolbar, (editAddCourse, editAddBook, None, editShowCalendar))
self.courses = db.getCourses()
self.makeCoursesString(self.courses)
def addCourse(self):##, code, title, short):
self.acdlg = AddCourseDlg()
self.acdlg.show()
def addBook(self):##, isbn, title, author, edition, course):
self.abdlg = AddBookDlg()
self.abdlg.show()
def addAssignment(self):
self.aadlg = AddAssignmentDlg()
self.aadlg.show()
def editAssignment(self):
self.eadlg = EditAssignmentDlg()
self.connect(self.eadlg, SIGNAL("changed()"), self.refreshTable)
self.eadlg.show()
def doneAssignment(self):
pass
def addReading(self):
self.ardlg = AddReadingDlg()
self.ardlg.show()
def editReading(self):
self.erdlg = EditReadingDlg()
self.connect(self.erdlg, SIGNAL("changed()"), self.refreshTable)
self.erdlg.show()
def doneReading(self):
pass
def addLesson(self):
self.asdlg = AddScheduleDlg()
self.asdlg.show()
def editLesson(self):
self.esdlg = EditScheduleDlg()
self.connect(self.esdlg, SIGNAL("changed()"), self.refreshTable)
self.esdlg.show()
def helpAbout(self):
QMessageBox.about(self, "About %s" % self.title, u"""<b>%s</b> v %s
<p>Copyright &copy; 2008 Tiril Anette Langfeldt Rødland. All rights reserved.
<p>This application is mainly for use by students, and can be used to keep track of assignments, planned readings and the schedule.
<p>Python %s - Qt %s - PyQt %s on %s""" % (self.title, __version__, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platform.system()))
def addActions(self, target, actions):
for action in actions:
if action is None:
target.addSeparator()
else:
target.addAction(action)
def fileNew(self):
model = Model()
def fileOpen(self):
pass
def fileSave(self):
pass
def fileSaveAs(self):
pass
def filePrint(self):
pass
def updateFileMenu(self):
self.fileMenu.clear()
self.addActions(self.fileMenu, self.fileMenuActions[:-1])
current = QString(self.filename) if self.filename is not None else None
def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"):
action = QAction(text, self)
if icon is not None:
iconfile = "/home/tiril/koding/schedule/images/%s.png" % icon
action.setIcon(QIcon(iconfile))
if shortcut is not None:
action.setShortcut(shortcut)
if tip is not None:
action.setToolTip(tip)
action.setStatusTip(tip)
if slot is not None:
self.connect(action, SIGNAL(signal), slot)
if checkable:
action.setCheckable(True)
return action
def showCalendar(self):
if self.calendarDockWidget.isVisible():
self.removeDockWidget(self.calendarDockWidget)
else:
self.addDockWidget(Qt.BottomDockWidgetArea, self.calendarDockWidget)
self.calendarDockWidget.setVisible(True)
def refreshTable(self):
pass
def addNewCourse(self, course):
self.courses.append(course)
db.addNewCourse(course.getCode(), course.getTitle(), course.getShort())
self.addNewCourseString(course)
def getCourses(self):
return self.courses
def addNewCourseString(self, course):
self.coursesString.append(course.getFull())
def makeCoursesString(self, courses):
if courses:
for c in courses:
addNewCourseString(course)
def getCoursesString(self):
return self.coursesString
class Model:
def __init__(self, parent=None):
self.assignmentModel = AssignmentModel()
self.readingModel = ReadingModel()
self.scheduleModel = ScheduleModel()
def main():
app = QApplication(sys.argv)
form = MainWindow()
app.setOrganizationName("PVV")
app.setOrganizationDomain("pvv.ntnu.no")
app.setApplicationName(form.title)
form.show()
app.exec_()
main()

BIN
main.pyc

Binary file not shown.

View File

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

Binary file not shown.

View File

@ -1,160 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ReadingTab(QWidget):
def __init__(self, parent=None):
super(ReadingTab, self).__init__(parent)
self.readingTable = QTableWidget()
self.addReadingButton = QPushButton("Add pages to read")
self.editReadingButton = QPushButton("Edit pages")
self.readingDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addReadingButton)
hlayout.addWidget(self.editReadingButton)
hlayout.addWidget(self.readingDoneButton)
vlayout.addWidget(self.readingTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
class ReadingDlg(QDialog):
def __init__(self, parent=None):
super(ReadingDlg, self).__init__(parent)
weekLabel = QLabel(self.trUtf8("&Week"))
courseLabel = QLabel(self.trUtf8("&Course"))
bookLabel = QLabel(self.trUtf8("&Book"))
chapterLabel = QLabel(self.trUtf8("Cha&pter"))
pagesLabel = QLabel(self.trUtf8("&Pages"))
numberOfPagesLabel = QLabel(self.trUtf8("&Number of pages"))
weekEdit = QSpinBox()
weekEdit.setRange(1, 52)
courseEdit = QComboBox()
bookEdit = QComboBox()
chapterEdit = QLineEdit()
pagesEdit = QLineEdit()
numberOfPagesEdit = QLabel()
weekLabel.setBuddy(weekEdit)
courseLabel.setBuddy(courseEdit)
bookLabel.setBuddy(bookEdit)
chapterLabel.setBuddy(chapterEdit)
pagesLabel.setBuddy(pagesEdit)
numberOfPagesLabel.setBuddy(numberOfPagesEdit)
self.layout = QGridLayout()
self.layout.addWidget(weekLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(bookLabel, 2, 0)
self.layout.addWidget(chapterLabel, 3, 0)
self.layout.addWidget(pagesLabel, 4, 0)
self.layout.addWidget(numberOfPagesLabel, 5, 0)
self.layout.addWidget(weekEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(bookEdit, 2, 1)
self.layout.addWidget(chapterEdit, 3, 1)
self.layout.addWidget(pagesEdit, 4, 1)
self.layout.addWidget(numberOfPagesEdit, 5, 1)
self.setLayout(self.layout)
class AddReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(AddReadingDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new reading"))
class EditReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(EditReadingDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit reading"))
def apply(self):
pass
class ReadingModel():
week = ""
course = ""
book = ""
chapter = ""
pages = ""
def setWeek(self, week):
self.week = week
def getWeek(self):
return self.week
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setBook(self, book):
self.book = book
def getBook(self):
return self.book
def setChapter(self, chapter):
self.chapter = chapter
def getChapter(self):
return self.chapter
def setPages(self, pages):
self.pages = pages
def getPages(self):
return self.pages
def getNumberOfPages(self):
pages = self.getPages()
pagesArray = pages.split(", ")
nextArray = []
sum = 0
for p in pagesArray:
nextArray.append(p.split("-"))
for n in nextArray:
sum += int(n[1]) - int(n[0])
return sum

Binary file not shown.

View File

@ -1,158 +0,0 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ScheduleTab(QWidget):
def __init__(self, parent=None):
super(ScheduleTab, self).__init__(parent)
self.scheduleTable = QTableWidget()
self.addScheduleButton = QPushButton("Add lesson")
self.editScheduleButton = QPushButton("Edit lesson")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addScheduleButton)
hlayout.addWidget(self.editScheduleButton)
vlayout.addWidget(self.scheduleTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
class ScheduleDlg(QDialog):
def __init__(self, parent=None):
super(ScheduleDlg, self).__init__(parent)
dayLabel = QLabel(self.trUtf8("&Day"))
fromLabel = QLabel(self.trUtf8("&From"))
toLabel = QLabel(self.trUtf8("&To"))
courseLabel = QLabel(self.trUtf8("&Course"))
typeLabel = QLabel(self.trUtf8("Ty&pe"))
roomLabel = QLabel(self.trUtf8("&Room"))
dayEdit = QComboBox()
days = [self.trUtf8("Monday"), self.trUtf8("Tuesday"), self.trUtf8("Wednesday"), self.trUtf8("Thursday"), self.trUtf8("Friday")]
dayEdit.addItems(days)
fromEdit = QSpinBox()
fromEdit.setRange(08.15, 18.15)
fromEdit.setSingleStep(01.00)
toEdit = QSpinBox()
toEdit.setRange(09.00, 19.00)
toEdit.setSingleStep(01.00)
courseEdit = QComboBox()
typeEdit = QComboBox()
types = [self.trUtf8("Lecture"), self.trUtf8("Assignment lecture"), self.trUtf8("Assignment help"), self.trUtf8("Assignment"), self.trUtf8("Lab"), self.trUtf8("Seminar"), self.trUtf8("Other")]
typeEdit.addItems(types)
roomEdit = QLineEdit()
dayLabel.setBuddy(dayEdit)
fromLabel.setBuddy(fromEdit)
toLabel.setBuddy(toEdit)
courseLabel.setBuddy(courseEdit)
typeLabel.setBuddy(typeEdit)
roomLabel.setBuddy(roomEdit)
self.layout = QGridLayout()
self.layout.addWidget(dayLabel, 0, 0)
self.layout.addWidget(fromLabel, 1, 0)
self.layout.addWidget(toLabel, 2, 0)
self.layout.addWidget(courseLabel, 3, 0)
self.layout.addWidget(typeLabel, 4, 0)
self.layout.addWidget(roomLabel, 5, 0)
self.layout.addWidget(dayEdit, 0, 1)
self.layout.addWidget(fromEdit, 1, 1)
self.layout.addWidget(toEdit, 2, 1)
self.layout.addWidget(courseEdit, 3, 1)
self.layout.addWidget(typeEdit, 4, 1)
self.layout.addWidget(roomEdit, 5, 1)
self.setLayout(self.layout)
class AddScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(AddScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new lesson"))
class EditScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(EditScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit lesson"))
def apply(self):
pass
class ScheduleModel():
day = ""
fromTime = ""
toTime = ""
course = ""
type = ""
room = ""
def setDay(self, day):
self.day = day
def getDay(self):
return self.day
def setFromTime(self, fromTime):
self.fromTime = fromTime
def getFromTime(self):
return self.fromTime
def setToTime(self, toTime):
self.toTime = toTime
def getToTime(self):
return self.toTime
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setType(self, type):
self.type = type
def getType(self):
return self.type
def setRoom(self, room):
self.room = room
def getRoom(self):
return self.room

Binary file not shown.