From e52a80c9c3fb09d3880e640fdc79324fe0388283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Sat, 12 Mar 2011 11:23:42 +0100 Subject: [PATCH] rename httpbooks.sqlite to bibles_resources.sqlite and change database scheme moved the content of biblegateway.csv, bibleserver.csv and crosswalkbooks.csv into bibles_resources.sqlite adapt loadWebBibles() process according to the changes above remove class HTTPBible from http.py and add the functions to a new class BiblesResourcesDB in db.py which now handels the reading of bibles_resources.sqlite --- .../plugins/bibles/forms/bibleimportform.py | 44 ++-- openlp/plugins/bibles/lib/db.py | 192 ++++++++++++++++++ openlp/plugins/bibles/lib/http.py | 146 +------------ .../plugins/bibles/resources/biblegateway.csv | 81 -------- .../bibles/resources/bibles_resources.sqlite | Bin 0 -> 63488 bytes .../plugins/bibles/resources/bibleserver.csv | 39 ---- .../bibles/resources/crosswalkbooks.csv | 27 --- .../plugins/bibles/resources/httpbooks.sqlite | Bin 45056 -> 0 bytes 8 files changed, 210 insertions(+), 319 deletions(-) delete mode 100644 openlp/plugins/bibles/resources/biblegateway.csv create mode 100644 openlp/plugins/bibles/resources/bibles_resources.sqlite delete mode 100644 openlp/plugins/bibles/resources/bibleserver.csv delete mode 100644 openlp/plugins/bibles/resources/crosswalkbooks.csv delete mode 100644 openlp/plugins/bibles/resources/httpbooks.sqlite diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 7967b2ec4..9fee25654 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -39,6 +39,7 @@ from openlp.core.lib.ui import UiStrings, critical_error_message_box from openlp.core.ui.wizard import OpenLPWizard, WizardStrings from openlp.core.utils import AppLocation, string_is_unicode from openlp.plugins.bibles.lib.manager import BibleFormat +from openlp.plugins.bibles.lib.db import BiblesResourcesDB log = logging.getLogger(__name__) @@ -634,46 +635,27 @@ class BibleImportForm(OpenLPWizard): """ Load the lists of Crosswalk, BibleGateway and Bibleserver bibles. """ - filepath = AppLocation.get_directory(AppLocation.PluginsDir) - filepath = os.path.join(filepath, u'bibles', u'resources') # Load Crosswalk Bibles. - self.loadBibleResourceFile( - os.path.join(filepath, u'crosswalkbooks.csv'), - WebDownload.Crosswalk) + self.loadBibleResource(WebDownload.Crosswalk) # Load BibleGateway Bibles. - self.loadBibleResourceFile(os.path.join(filepath, u'biblegateway.csv'), - WebDownload.BibleGateway) + self.loadBibleResource(WebDownload.BibleGateway) # Load and Bibleserver Bibles. - self.loadBibleResourceFile(os.path.join(filepath, u'bibleserver.csv'), - WebDownload.Bibleserver) + self.loadBibleResource(WebDownload.Bibleserver) - def loadBibleResourceFile(self, file_path_name, download_type): + def loadBibleResource(self, download_type): """ - Loads a web bible resource file. - - ``file_path_name`` - The file to load including the file's path. + Loads a web bible from bible_resources.sqlite. ``download_type`` - The WebDownload type this file is for. + The WebDownload type e.g. bibleserver. """ self.web_bible_list[download_type] = {} - books_file = None - try: - books_file = open(file_path_name, 'rb') - dialect = csv.Sniffer().sniff(books_file.read(1024)) - books_file.seek(0) - books_reader = csv.reader(books_file, dialect) - for line in books_reader: - ver = string_is_unicode(line[0]) - name = string_is_unicode(line[1]) - self.web_bible_list[download_type][ver] = name.strip() - except IOError: - log.exception(u'%s resources missing' % - WebDownload.Names[download_type]) - finally: - if books_file: - books_file.close() + bibles = BiblesResourcesDB.get_webbibles( + WebDownload.Names[download_type]) + for bible in bibles: + ver = bible[u'name'] + name = bible[u'abbreviation'] + self.web_bible_list[download_type][ver] = name.strip() def preWizard(self): """ diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 5cf000ee1..a1c8fb9a1 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -26,7 +26,9 @@ import logging import chardet +import os import re +import sqlite3 from PyQt4 import QtCore from sqlalchemy import Column, ForeignKey, or_, Table, types @@ -36,6 +38,7 @@ from sqlalchemy.orm.exc import UnmappedClassError from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box +from openlp.core.utils import AppLocation log = logging.getLogger(__name__) @@ -444,3 +447,192 @@ class BibleDB(QtCore.QObject, Manager): log.debug(u'...............................Verses ') verses = self.session.query(Verse).all() log.debug(verses) + + +class BiblesResourcesDB(QtCore.QObject, Manager): + """ + This class represents the database-bound Bible Resources. It provide + some resources which are used in the Bibles plugin. + A wrapper class around a small SQLite database which contains the download + resources, a biblelist from the different download resources, the books, + chapter counts and verse counts for the web download Bibles, a language + reference, the testament reference and some basic spelling variants. This + class contains a singleton "cursor" so that only one connection to the + SQLite database is ever used. + """ + cursor = None + + @staticmethod + def get_cursor(): + """ + Return the cursor object. Instantiate one if it doesn't exist yet. + """ + if BiblesResourcesDB.cursor is None: + filepath = os.path.join( + AppLocation.get_directory(AppLocation.PluginsDir), u'bibles', + u'resources', u'bibles_resources.sqlite') + conn = sqlite3.connect(filepath) + BiblesResourcesDB.cursor = conn.cursor() + return BiblesResourcesDB.cursor + + @staticmethod + def run_sql(query, parameters=()): + """ + Run an SQL query on the database, returning the results. + + ``query`` + The actual SQL query to run. + + ``parameters`` + Any variable parameters to add to the query. + """ + cursor = BiblesResourcesDB.get_cursor() + cursor.execute(query, parameters) + return cursor.fetchall() + + @staticmethod + def get_books(): + """ + Return a list of all the books of the Bible. + """ + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference ORDER BY id') + book_list = [] + for book in books: + book_list.append({ + u'id': book[0], + u'testament_id': book[1], + u'name': unicode(book[2]), + u'abbreviation': unicode(book[3]), + u'chapters': book[4] + }) + return book_list + + @staticmethod + def get_book(name): + """ + Return a book by name or abbreviation. + + ``name`` + The name or abbreviation of the book. + """ + if not isinstance(name, unicode): + name = unicode(name) + name = name.title() + books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' + u'abbreviation, chapters FROM book_reference WHERE name = ? OR ' + u'abbreviation = ?', (name, name)) + if books: + return { + u'id': books[0][0], + u'testament_id': books[0][1], + u'name': unicode(books[0][2]), + u'abbreviation': unicode(books[0][3]), + u'chapters': books[0][4] + } + else: + return None + + @staticmethod + def get_chapter(name, chapter): + """ + Return the chapter details for a specific chapter of a book. + + ``name`` + The name or abbreviation of a book. + + ``chapter`` + The chapter number. + """ + if not isinstance(name, int): + chapter = int(chapter) + book = BiblesResourcesDB.get_book(name) + chapters = BiblesResourcesDB.run_sql(u'SELECT id, book_reference_id, ' + u'chapter, verse_count FROM chapters WHERE book_reference_id = ?', + (book[u'id'],)) + if chapters: + return { + u'id': chapters[chapter-1][0], + u'book_reference_id': chapters[chapter-1][1], + u'chapter': chapters[chapter-1][2], + u'verse_count': chapters[chapter-1][3] + } + else: + return None + + @staticmethod + def get_chapter_count(book): + """ + Return the number of chapters in a book. + + ``book`` + The name or abbreviation of the book. + """ + details = BiblesResourcesDB.get_book(book) + if details: + return details[u'chapters'] + return 0 + + @staticmethod + def get_verse_count(book, chapter): + """ + Return the number of verses in a chapter. + + ``book`` + The name or abbreviation of the book. + + ``chapter`` + The number of the chapter. + """ + details = BiblesResourcesDB.get_chapter(book, chapter) + if details: + return details[u'verse_count'] + return 0 + + @staticmethod + def get_download_source(source): + """ + Return a download_source by source. + + ``name`` + The name or abbreviation of the book. + """ + if not isinstance(source, unicode): + source = unicode(source) + source = source.title() + #source = source.lower() + log.debug(u'Test: %s' % source) + dl_source = BiblesResourcesDB.run_sql(u'SELECT id, source FROM ' + u'download_source WHERE source = ?', (source.lower(),)) + if dl_source: + return { + u'id': dl_source[0][0], + u'source': dl_source[0][1] + } + else: + return None + + @staticmethod + def get_webbibles(source): + """ + Return the chapter details for a specific chapter of a book. + + ``name`` + The name of the webbible. + """ + if not isinstance(source, unicode): + source = unicode(source) + source = BiblesResourcesDB.get_download_source(source) + bibles = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' + u'language_id, download_source_id FROM webbibles WHERE ' + u'download_source_id = ?', (source[u'id'],)) + bibles_temp = [] + for bible in bibles: + bibles_temp.append({ + u'id': bible[0], + u'name': bible[1], + u'abbreviation': bible[2], + u'language_id': bible[3], + u'download_source_id': bible[4] + }) + return bibles_temp diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index e2dde59fd..d2202909c 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -41,146 +41,10 @@ from openlp.core.lib import Receiver, translate from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, get_web_page from openlp.plugins.bibles.lib import SearchResults -from openlp.plugins.bibles.lib.db import BibleDB, Book +from openlp.plugins.bibles.lib.db import BibleDB, BiblesResourcesDB, Book log = logging.getLogger(__name__) -class HTTPBooks(object): - """ - A wrapper class around a small SQLite database which contains the books, - chapter counts and verse counts for the web download Bibles. This class - contains a singleton "cursor" so that only one connection to the SQLite - database is ever used. - """ - cursor = None - - @staticmethod - def get_cursor(): - """ - Return the cursor object. Instantiate one if it doesn't exist yet. - """ - if HTTPBooks.cursor is None: - filepath = os.path.join( - AppLocation.get_directory(AppLocation.PluginsDir), u'bibles', - u'resources', u'httpbooks.sqlite') - conn = sqlite3.connect(filepath) - HTTPBooks.cursor = conn.cursor() - return HTTPBooks.cursor - - @staticmethod - def run_sql(query, parameters=()): - """ - Run an SQL query on the database, returning the results. - - ``query`` - The actual SQL query to run. - - ``parameters`` - Any variable parameters to add to the query. - """ - cursor = HTTPBooks.get_cursor() - cursor.execute(query, parameters) - return cursor.fetchall() - - @staticmethod - def get_books(): - """ - Return a list of all the books of the Bible. - """ - books = HTTPBooks.run_sql(u'SELECT id, testament_id, name, ' - u'abbreviation, chapters FROM books ORDER BY id') - book_list = [] - for book in books: - book_list.append({ - u'id': book[0], - u'testament_id': book[1], - u'name': unicode(book[2]), - u'abbreviation': unicode(book[3]), - u'chapters': book[4] - }) - return book_list - - @staticmethod - def get_book(name): - """ - Return a book by name or abbreviation. - - ``name`` - The name or abbreviation of the book. - """ - if not isinstance(name, unicode): - name = unicode(name) - name = name.title() - books = HTTPBooks.run_sql(u'SELECT id, testament_id, name, ' - u'abbreviation, chapters FROM books WHERE name = ? OR ' - u'abbreviation = ?', (name, name)) - if books: - return { - u'id': books[0][0], - u'testament_id': books[0][1], - u'name': unicode(books[0][2]), - u'abbreviation': unicode(books[0][3]), - u'chapters': books[0][4] - } - else: - return None - - @staticmethod - def get_chapter(name, chapter): - """ - Return the chapter details for a specific chapter of a book. - - ``name`` - The name or abbreviation of a book. - - ``chapter`` - The chapter number. - """ - if not isinstance(name, int): - chapter = int(chapter) - book = HTTPBooks.get_book(name) - chapters = HTTPBooks.run_sql(u'SELECT id, book_id, chapter, ' - u'verses FROM chapters WHERE book_id = ?', (book[u'id'],)) - if chapters: - return { - u'id': chapters[chapter-1][0], - u'book_id': chapters[chapter-1][1], - u'chapter': chapters[chapter-1][2], - u'verses': chapters[chapter-1][3] - } - else: - return None - - @staticmethod - def get_chapter_count(book): - """ - Return the number of chapters in a book. - - ``book`` - The name or abbreviation of the book. - """ - details = HTTPBooks.get_book(book) - if details: - return details[u'chapters'] - return 0 - - @staticmethod - def get_verse_count(book, chapter): - """ - Return the number of verses in a chapter. - - ``book`` - The name or abbreviation of the book. - - ``chapter`` - The number of the chapter. - """ - details = HTTPBooks.get_chapter(book, chapter) - if details: - return details[u'verses'] - return 0 - - class BGExtract(object): """ Extract verses from BibleGateway @@ -447,7 +311,7 @@ class HTTPBible(BibleDB): book = reference[0] db_book = self.get_book(book) if not db_book: - book_details = HTTPBooks.get_book(book) + book_details = BiblesResourcesDB.get_book(book) if not book_details: critical_error_message_box( translate('BiblesPlugin', 'No Book Found'), @@ -497,13 +361,13 @@ class HTTPBible(BibleDB): Return the list of books. """ return [Book.populate(name=book['name']) - for book in HTTPBooks.get_books()] + for book in BiblesResourcesDB.get_books()] def get_chapter_count(self, book): """ Return the number of chapters in a particular book. """ - return HTTPBooks.get_chapter_count(book) + return BiblesResourcesDB.get_chapter_count(book) def get_verse_count(self, book, chapter): """ @@ -515,7 +379,7 @@ class HTTPBible(BibleDB): ``chapter`` The chapter whose verses are being counted. """ - return HTTPBooks.get_verse_count(book, chapter) + return BiblesResourcesDB.get_verse_count(book, chapter) def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre_parse_substitute=None, cleaner=None): diff --git a/openlp/plugins/bibles/resources/biblegateway.csv b/openlp/plugins/bibles/resources/biblegateway.csv deleted file mode 100644 index ad8052704..000000000 --- a/openlp/plugins/bibles/resources/biblegateway.csv +++ /dev/null @@ -1,81 +0,0 @@ -João Ferreira de Almeida Atualizada,AA -التفسير التطبيقى للكتاب المقدس,ALAB -Shqip,ALB -Amplified Bible,AMP -Amuzgo de Guerrero,AMU -American Standard Version,ASV -La Bible du Semeur,BDS -Български 1940,BG1940 -Български,BULG -Chinanteco de Comaltepec,CCO -Contemporary English Version,CEV -Cakchiquel Occidental,CKW -Hrvatski,CRO -Castilian,CST -聖經和合本 (简体中文),CUVS -聖經和合本 (繁体中文),CUV -Darby Translation,DARBY -Dette er Biblen på dansk,DN1933 -Det Norsk Bibelselskap 1930,DNB1930 -English Standard Version,ESV -GOD’S WORD Translation,GW -Holman Christian Standard Bible,HCSB -Kreyòl ayisyen bib,HCV -Hiligaynon Bible,HLGN -Hoffnung für Alle,HOF -Het Boek,HTB -Icelandic Bible,ICELAND -Jacalteco – Oriental,JAC -Károlyi-biblia,KAR -Kekchi,KEK -21st Century King James Version,KJ21 -King James Version,KJV -La Biblia de las Américas,LBLA -Levande Bibeln,LB -La Parola è Vita,LM -La Nuova Diodati,LND -Louis Segond,LSG -Luther Bibel 1545,LUTH1545 -Māori Bible,MAORI -Македонски Новиот Завет,MNT -The Message,MSG -Mam de Comitancillo Central,MVC -Mam de Todos Santos Cuchumatán,MVJ -New American Standard Bible,NASB -New Century Version,NCV -Náhuatl de Guerrero,NGU -New International Reader's Version,NIRV -New International Version 1984,NIV1984 -New International Version 2010,NIV -New International Version - UK,NIVUK -New King James Version,NKJV -New Living Translation,NLT -Nádej pre kazdého,NPK -Nueva Versión Internacional,NVI -O Livro,OL -Quiché – Centro Occidental,QUT -Reimer 2001,REIMER -Română Cornilescu,RMNN -Новый перевод на русский язык,RUSV -Reina-Valera Antigua,RVA -Reina-Valera 1960,RVR1960 -Reina-Valera 1995,RVR1995 -Slovo na cestu,SNC -Ang Salita ng Diyos,SND -Swahili New Testament,SNT -Svenska 1917,SV1917 -Levande Bibeln,SVL -Создать страницу,SZ -Traducción en lenguaje actual,TLA -New Romanian Translation,TLCR -Today’s New International Version 2005,TNIV -Textus Receptus Stephanus 1550,TR1550 -Textus Receptus Scrivener 1894,TR1894 -Українська Біблія. Переклад Івана Огієнка,UKR -Uspanteco,USP -Kinh Thánh tiếng Việt 1934,VIET -Worldwide English (New Testament),WE -Codex Vaticanus Westcott-Hort 1881,WHNU -Westminster Leningrad Codex,WLC -Wycliffe New Testament,WYC -Young's Literal Translation,YLT diff --git a/openlp/plugins/bibles/resources/bibles_resources.sqlite b/openlp/plugins/bibles/resources/bibles_resources.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..bcb45b8015c5cb6855a3c2d6c0aa821ce2324151 GIT binary patch literal 63488 zcmeIb34C1HStok#y;Y@ClBy(Cl~kqD;?nBUW?S+myKT3%*_Q3L-CnxmB%O}8w%uOa zOLx1oR+YBW3tLDaFd1gZFuVXWkYRf;c!4#MvFMIHm6ZwwgBy02omNniueU(cA+4EUwPs`Zm6=nlrC@*BdiO&4d{-$MK!R_lOxa z2Yq_wZ1c$el(~We`WK4qF{M$bqOGmXnVDFu+-Y+S|1KfUBIQ23(Do(K+EJmrsl>Pb zwWEz^G3at;(j4+DycZQcit8izo-|LO@<+`{TpvIsJMZ)Jcw@?UM&fHC2R3j5yMwF%(>}#e~NF@zc4p z`v!NNn{xiU^J(X&oPX<-oRiLgQ)m9ve8PN>`8pJIvLhWa18sFqJNSMRbzloFG&W~i zBF1THah&~V%Q=kL;MdDE<4#+n-sUg z7yK+Ikbrb$Yb^^znnMWZy?_O}j%8|apIt}h-avs&$=}L+9Cz5LAvAgnX<1=*RM5bo zh0xA?Y$4|0Lt+jt#B6D;Moe}r^E`mOuA1{GZwNGh8(XUu?lY&w`-2Pj8*-JnPxdkW zG1T%3#37k9v~ZQlMHgZ)hovzF7p~T1EMl<5N0F913VuV)6}UrA?#G?8s1ds^pzE6> zckgm2U+_z2ACS&;hjDis(vBk)^JT}9U)NB_I~dpsZEp@CUXR}&w{hpRAMYka7Oy%n z8I3cDy9W_Y0YUL_2KP9m8Pe43F4SVeyo|ih`u74l-|Q^pz8A5ta-zo$;H!ENUzM4d zH)F!y8;$o_@8`XL>io4)lh-lg@*H1(nWo_~WlY8_{(r9r6arU za1nn}8Rk3MJ#W%Ei;4XbqF=`EDNJ!9ziXK2Hy{em8L!^;2HeZIL*YsBM?q!2E$4U> zPJqOo^-Ek{@qO`_0+@7m+E0zxKZOvX*RAAxt(3u#Yqt?3oM4*j{@xSYH`(L++RV+!J2UCzH3gD9PrLAgBqEZR#`mkYX&mcGXnyJJ4fOSczUey@3a?{&>e zEWbB0EAo}Ge5GBA2X_c{d!V^l?!)&4$U4R*!w5uPEq0H;q33wN&xs%Re&0Lhe%8Fr z%XquY$DQwYe$D$<_Zj#5yw5maa6jq&q4TV>)%gW?z|FY-+W86d|2XgUX1v?Zm%X1e zpL1g756xd=f8dt;QSS$x?{r^rzrp;7cfsA|Q=M zC*k$@7q|Rk&p`&}gCKS`$L&S4w!s^8-iWjs#;hiGH%vEcun**U{Nt8KR}k+y?rQIX z@j6r9fFJKP0x#hoE7B47+MGiOV9YC~otIA_k28Ky8!uUX_V@*pW1SBJ+Huim4KGHJ zh6~KCykJCblC&_@;(kgq>$h|hrHM@o_DZy`k|m1|BHssXmNc^B_wJBnnCsGQk#ws! z;skpi_wR)?u!LZngX`u?w?FDxLa@UT?0BSD!qQESWTn^WH}bSe@LsTo!31^8;odEb zT5=`Wx2RbhV)t)V#21Iy{WoLe*YXXCY6dOegQ#K+?%j5%WZ=C!4N+Dr*i^7=Nw9}N zzEmh+aSI`m^|qn^9<*x^W;L`m5Ns5LIQZ`09q`1k#VrA2su;Aa2f2ywX#cNEKVLNr zuv*Y62Ua=oPr!i=3RNkK=9u>Ztp0t>m_K!Du(N;Ix#GOv`61_%&hNW1cfEVqz2<(K z`!nuux_|36d4t|T@2dHj_p{#T{t2r6;3C&?Pks`ctc!Z+@ZCLm?v_wnUd3t$zt0;MQXgR}cEzpSN8S)#aa(!iE$N4EWj}BmoZ#W^HuwX#(i!9KR{E=L z#=qKT{-e7EJi4pF!`&5L&Cy|HH;D(kR;=KQ@#>BokM0zL!QTI^SCkWX{Ncqr}qVnUo4^eUZBnrDrHSAu^R81 zR;=_g^JxV<&U!x7$YDkkU?;oKw^&TQiU1}2lvQn%bR z4%!Q1aWXFlzH)cfp%)$!LxXzzM}0yyfq51;V92*Rk0J+kBAt2iL8tlv+ffmzXH8ImbI~a=O$40>zQ2P^N7m-QsG4s0#1B zCc7j@t_dvU*xG?K^cB2!Wa-*#@5KE<)RK!N%NIX_5HH(>ICSe=IuJ#>?cGb#FJEK{ zmR-E&wTMIiIL`IOwHaN7TJyY%zUKAfVoq??oaw=R@X^1|l^@>WZ*8V`;ZCqX6#Ql~ zeG7L2VIKU}XZjcJ1j|jqZ*z74chE|A>B^Mo+TL}z$MG0Q#rqWy{UNEC=$l(fA4_+r zbq!L{Gcs8Jp-{d6M`o=CIk^qE56?jNe)*t~NN#W;#{CjpArY?sXU+2lt9_q#{u;i% zr`;L%d);4fzvNl3-5d2zdqwX<-cMr<@V(B9&YPXxPN(^6^DE{%kmxmih7O=E6FrW1 z6eEQaF<3BKDj!F%%5~QFH>Jd^*sz~zy6#W2R5&Y*LcIJWQfzB;JkEUf^l}t1bT_Of zzi%PtgSE)u-I%r6y@-jP^_J=}(UI()g?q=KGU+4BF)VsxW&-yxPrc*lS^9L{g6<|2 z&yFvodK#fO(PEk@qLbONg?m~dVyX)O6=(5V+dYJP@F;bUAnYRM!bQxv>-d&d2tq^c z8xe0aM#h6wy23(3n-FKROJnjl@?)>u4;}_l=ipv=X!Amvl>x`lk~CiX7NmiM@W=jg z?83YWaU$(o7vd=2rLc#2@jBEzj5v^OF0XF^P2BYFi1KpVa2H;{cR53^W=cNtgbveA z^LE656mj>VrHg1wSFy}v%pG_4gO^+prI#n_~yLcKZ80y#2xmkPH&zHp!EgZo2wDW`S!!u_T2bK~Ou%n0sNzG=Li!yS4m zpEFMTDDH3+aK>>zg|hP&xJSMytfA67ZMw~08t0GQo$gVr_CN2w{)=TV}`U`UK;b0HYvj}bBkLL-aG{SVVA12gf++i; zn-#>!4_N`1^JrSjs(%^WG1c zSkPB%#PAzv>f&P__iuWz^-Bh;@%Ojx?jAtv#uvxOBB!J&#>k8SIuYn-d~^rF*C7u% z#ueO2|KE`I{{|PH|M52iUz2KIjl9Z%RSvukI51S8d9m>lzBcd0SH6q*|G4=vgQs%; z!27)S>)tP6b^kwlAMw81`=Iw;Z_azCcguU;d#m>p*8WGmVQ-z+>1DCC7;*o`{WJFq z?q}Ukx&PVyDfdU+e~0G+W;zn}H|xxx3s=ZZB368r*8vb^glvBjL z`rB=vsJ?dFE2_8K_K51)X7i%*X}ea`+O+K!)!k~lM0IsqXeRWB)7fV`M0K>-c2VtX zY@4XIl+B6CEJQIQ6V=Xu$VaL$HAg|gNYMx*t%tS%b0FaAU2)Ir^~D+E&gwF{gstHX9NU-j57r_z?y zWjnouEvwIVx~PLXZKs1A)N4CfUv=A#P|}vwZ#!6Db=(egVcGb7xC51(dzVi>7Eal@ zcZv+v*|~R!L}_zx7wKm0+}lJtO?K`TpWGfp4tGRWx7fLtMONkQ+)E-W*V?%kMMj(L z+-;HI`rIv%6$rg4GJ-nX5Q$dIy&y7FYv-h0WFkzo{ZMkH%?TBHZ^ zlt`BLR*@JFbI2&b`?uH-*86H;D`(?i)pVVAM&GE;4(ANQ{TM zr+soG<31(QL(NWzbklb3xJU=xa?B@(LI^!7(nEuu6zR6wxg#PSkcWM8Fp{xzheU?k z?A#L~LpeKlP^4GS`TwN($Um0;-|Oyh2i_0s2Y;t;>RwoI~|F`DP%wjf;*_K<^= zMcD1K1!;@0v(6SIjY6Fcl18D%ge^!Kg)(S`q){l{Y73G^p@tq? zkTeR_ci4iYQ7DC)Ng9QcV3ed$C;|3K8inf6AW5T8?T{@<8ii_*nWRxDK41%yMxhvZ zCTSF^Mk^$ZLRB4B!YEYPX(fw7(X^E)3fZicBnnlWv=T(2NRyQu3We8LiJ=fWK~gB> zZL|_XA-CO128En0RwBr2YPXU=UUr?80P-5QTFDH@t&sfPG zFV$ovdc0(pmE`dftyY4^18$St@oL+x#Ew_fW+ipJ_%qO3-*tot2z% z^W9cr#$DTIC1u?1HC95#?P{@-F>YtKm56aWIynDbXV^Hy?$2n3t$sfW2THa^KK<0ooA|5kV7}5*6|c?bpAP6;Wn20v`fJaDtFT;$e{~o3 z;`Z8#wv#8F(vowC9__jNM~hXzQnx)?7GLeoe01i$PVoQS0Ra}k<+=SL9RQ(8pWF}u ze%dE84CuF4B+T8pJtCpW=O#qD08Qf}9l)b8pIjdU{2UcojR+$ms{opIi>yQukBf`~ z8}1Tmk;6`r6#$PrM6x=MiG+bLw_PMb-ZqiMk;5X1Be#lVb+-8Ax>}H%Mb>P$bDKoQ zfyg(Ci~&*(iL6F52Srx3+qn%QD^d0JBBMb1>qHW=4~VQlX8j@w+51F>5usNk44Szf zkser`7YV&Hw^pQsg1dckpcX|4mkmHQ&Iy+d#F4B+5y)TRvH|i}xNM-R)6NN(4OAjj zxNIPb9E8gTEDR6fvH>h@%n6qbM3Ap=*#P+~Ts9Cw1mUs)4>c1m8-M{eCtNn*0QU-) z^#fqd377RZ_1ih&vi>Y02$%IYqCvuC{TYzLW&P<6J11P$-vE>?T-IL?P70Uxr@HN& za9Mw{$Ic0t^(SBz2$%KOp@)Ra`fHI)xU3%lYfiYVKaRMDc22mgzZz{5F6*yC z!NO(zl^g7w=kvEe+Gpp4%la+y6)x+q*kR{{%lacVc2>ZwKiq3)h0OXx{`#NieV_4u z8+-iU_b8fgHO?vrRypubz=3+tGlL_*nAhNBaswOJ+RAHjJu||M$d~*rbM9Ibk_Jz8 zwK%wa7=Y~T18=`h^#803$bK(tXJtY5yX)<&Ovru*p|TKpB>jL5#!8apd1vM&jd zCo{4yk+-w5Bm3%*Oon7%ZJV8yCE15H`B|BgeOQ#Al`Yv9>$bBpCi|*~?5wQGzN&3@ zR_0`1C5n(e*%$4xvoa|A>|=IT7G+<>W;-jBvM;jN&dR3j3!@b>D*HlP?5wQHKCjcx z%B<|eO5d#P%06eKot0tPn?Yu>EPK<#cJ_>~1$rBhuWZZSdem3OWp4^a$hz!JZm_d5 zFMAVxc2@RfZ(Wz2m4Vq?ix$hm?5)Y!S(%u<@eVsH8?!eCQbuNPHQFXCv$qOWmzmj1 zKFH4Ojqb9uGBkTFDtTO$tN{CtiHr=|*`p%EYwhflB18Rl_J~LitvD>w-DGDEiFA(G z*(ZFmr#5A04~ncoGldd+;`{8ZP-0IEZ4*lDsYbp+i9G;zvqFhImB?2pu_ua}2_^Pe z6fBh3Q-K`DR73==5K8O`gMC7YJt1_rP-2eJ%Ry$svYj4AZMEO{PArVi3d?q4X?<2$wgYSWv%<0+SmB-(mhHgG z)U2>)BoEZbIrWS(C{Tcp;`3d^>I5kXkCErevkvTaykn-P|6LuNC= zvTfKEn30yqVUK4y> zG)KS^X^Cbqbw*mEIfNl%Ow{`%;mnTUY;N!O;0fTL0QgUUa#o96<-jTj{$3n-tiZDX zw-oqn|E3%G+Ij|G+mGXG+c>_4hw!y7hp)cc*NOh05teQC!gfYjwi&8wMp(Alfp8O+ zZK{Sa7M5+Q8n83MvQ1cBnh}<5!fM!zuxyhBDJcX;F?D5P9%Vs+u z?}cTv@SK?umd&=c*%@KkEPQ8Xgk`gEn3@rm&9&Irq9 zvxp!pn{9+95|+(k8*#u=f+Yz(AOVzwGA5lYNff$ROs4BNyrLW$WZ#*R>8 z)}rx3iP;KNT_`b2r7x724Wn&BiCOqp%m^iBJ;W7C%o1ViK_U!s=(01ONOu@OshzFjU~z znCXRhlr5X-fwYz_o5{n@ku959i%{9JnQllw*|M1~=qK5-nNFybYGu}uv@^10GwsM% zwrr*i8cw!sCf9FgWXopO$jeYzAJY)3RkV@di6BTQ(CzT-maj>N-0uTQ*aL%x)@&%0@daTQ(ET+G*Lc z8919x%a+YlwA*RfvKhFlOv{$d04Pn%md#+-b^5Y0gD=~(Y}pL_r>14gW}Kv*mMxne z&Dd$#vgr}Tl`WgzU2Ugj%cdVkT-mbeT?myeo8DPvr)A5gcc5mnWz&zL#X^bc?O>l! zVtN}wg%Z=l$U!JEy)|a1g%ZlJqYdy zC8psTJuQ@&UXNr#iRpDHLMSl}xHm17nC@@3(?W^qK9E9*>0U$-N=)~(*lD4}bRL`( zO2qP?ofb+=ccV0+#B^7;ofb+=cOq0MG2KyVr-c&J?P!}&V!92i7D`O#Qg&J>F})`G zI+_2|!m{bsHajgWn{Gjigk{ssV4AROx(RF-mQ4ecP7BMX8_~1EvS~PlO$*DW)0kSq zvgro&fUs=39!wLKO{XGuT39v>kN)Xx8U=|8J1s1muERhRmQB}!6qZfbMD4V&Y&xE^ z)55Z8`1MZ<%ciT5udr;os@6^m%cd(awS;BU@NJ$JmQ8c+3CpIj1wJh-n~tEF!m{Zw zrlGKG8f%c#!m?>>luQfDrhzV}g=N#&vY!@~ZNM_ow6JVL1u_$sZD78_vJGL>Ojx!7 zKC;uovJD=lfUs->);6bwWgD=bHZ3e$kEN<xTW^s} zShgN(vD1w{f9oUYEMeJtI5bZS%ht0F!m{=7gPsAL@J9=X^B)LNNI^w2Hhepk;4A}w6sL30ri!ZNY$e> zX^B({eIYH8N+N=^L@I%iDlL(!L%z}yDQr1SOG~8SGcheKk-}EXw6sJDZrRh)5-C_Q zQ_>Qtsx@{>S|Ww#0;Z%TQef(ov_uMCg;UZJDOfR6(h{jihnxd`d9Jv-+z8E>u!sSXX`531_zy~CGScYk9a z^e%|kk}uEyP53WPEbUx$&s_NxIxF98TZ#QEC;e)7#ZCAJ1n&iUb>~UW|AXec{xP2a zx!>>q|8_p+{D|{C&cAfN$(eTUI9KrW&k1MJ!BM|Xm(%FP@b1ySFki&8Kc6%|Xa1x4 z0aOehJ0&EW!uINvkZcM{ZAwTs<+Meoh-6(SX}%>Aog$Pa{r+fliddHP`{L0lf?3kv zoQh5n&60j^Wps*gmh?B(N2iEqNq=Kabc%qM^fy#Tr!FthUtbZOBBW*b*C8!2E$R2f zqEiI5r2n@}bc(2!^t_Eu5!R9}qdw0q&~w@76oD32u$lmKq>U12*VfSY_LLIrS>??9*kZu0HcP6^;9 z-xjh{0=UUnqIOCEH+csU1aOltqy0X>b(1fdkJu?8+~kWbc1j30dE2#9Lb%CWNjoKk zo4g7AB!rv1f!u^}lP{nQA>8EkN;@Tlo4f|{All(L$*UE1N(eW31$s{iH+eZ`r-X2m zm-_6K5N`7M4R%ThH+gZuPVG?+7cgXm9h2uVWP}})&q1FGJ0{PeI>L_0v*3xaWAY4Y zChV9z4N}-Kd8*n@2|Fg=iaH28CZDacQ^JnPw?MTDJ0_n&X2OoiH`mxHVaMc~YVDM; zWAcr4c1qYWd2*AT5_U|!0gMuMOg@dq3p*yCLR?|TIgd~k0F_`WAZ2( zB z3pY6i2`mdYIf@));U-5QKV{)2ccWlgxXH(%1!UnSu~aoB3pcqF!dMn=atA_X;U*u0 zIG2T++>T_jaFg3W%EC5vT&0_ zNG1z6If$yu!cA_7+bLPN$@NH9E$*yC!Lo3Z1E`rS++=^&PRYVe_JL8daFe}=D+@Q- zgGxq}LmtUw;U?E2R2FU$OI1^{aFbnmJ0%M@*$F<#!cBIdhh*Uf0=g_~>xDGN85 ztFk3oxJkUDw`a!396=_AY>B`TWL=Fd5jTRYMRf=p zLDqzA>9WXpg)I>@A~c55h#5iRDZvsUBgiU5AYufG=S)fjj3A>aTOwWrX;BBlMUZeu zDiJM$jGz?+iy*^jCb1&O5b`Bd1nGe!QUvKD0)Zk(2X!D$beu$Q9p}I2{Re}$e*PkU zRzIs8SmnUi2nRMks2+`Y3Sisfatn{CyRmSXSQDNE*tvM?Je~sJ+R97#y<_U}9Kax- z8_@aA47`j(P+uqdza(Qe(bH~AGG-HbCJ zW)mH?wj^UV(cWcCzA@`0;0;rfEt|+eO~{r_VAHQ8TQ<=O-5^^w(b8y3vSkxkM=r^h zP2fTOl5E*T7HUGaY@!je_Ml`f9@H<%mQAD~!)41Ru<2KlEt|lhG9}rv2|TD@k}aFS zI&w+2Y$8!_OR{AXcqqLjTQ*UP`i`lHnhsl%Et|lmUrDxXB8E!JmQCO}vXX4sL>07) zY}o|7VM?-P6F5|;BwIFtjfawK*+c~jmMxpWre8_6YyvK@CE2nGJS$j|Et|l`LrJ!5 z0?xT5*|G_^wUlJb)>V48BwMyFnzJR@vUS)BD9M(stAJXQEn5fQo04qVIvgfak}X>Y z-IL@aelvo4Dqmoc!O$eh}D6t0Tij;&B zYur7yB$Qag(u5M@ov4{mV!Q*LC6pL%$5O4+~{?Cn{kqd#W`Syy*GO2aQ6Q@ym_4e`62HIa3c68 zaC*>h;S{02c#zmy4g1>W01vKQe)#eMo-DcaY~}qt4|DMVHQMPOx9yvwXvhhkJlPw#MuCYbgvT^9AqHNiC1#*xr8;|tbqHNhX)MZh&Y#ctP zMcJ}(JjGO$EgQ$#TSeKjaqQj~Wy{7|T5VCbY^=H77G=xEaLi6owrmW~$QNbH#u`x_ z*|M<=NZGQnG$P2BjWwX^vSnlS$XB*(EM;v`wrnhk2(o2k3Dn_?&)*mvnu@YzW3_#@ zC|fpG(_)LVWn*!~l`R{?xdKJmva#yCEea*ZaO_S|C^1%v2ttXmXumBACC2cKd{HPd zhI0^#LW!}+leQ?77{f6VMWMu42z3xjjNxFnqEKSY-D-rsSIVs#3v7D}wf2}DJq#Oee{p~ULC9$OSjti}_MMWMv% znr>SZO0159J3@)oa2qHJC0668g`!Ymbrr}lpTE^On5ig~SRL)6{_k=hH|`<#B=r9^ zoZUI?zSsR%?)SStfwutszwYPU-*^AY^Kjy4iwaYM;=HL~);cV_Q6!JQ_Za2wao`Nsap233 z0cRwJ^F<gm;hm=0$L3`cQDew-9X8g$@8uS+5?^ zZW{kBr#ifSlv(QR?*YcWd+ImCb&UKTh6e|LH?Rj558NMSG#xHKK~e|Hk26JZCU|#n z!Q%ruUnly%C|kDLLe9ySt;Q3hMcJ~|kv3bDEn5wvv?yD)8qbjzWy@CM5sjj3*=jsb zUz9Cd4Ue&+Y}u-Y&9*38wyGXQ$d;{2LG;U(tx7_EZuaG8Rbrhj%9gFdLn%esvQ;=7 zt|(i!ss^NN*(#hMP?RlO6+@_O*{W*PSGH_b6^f88TZN;2i?U^_aLQ&;wrrIhwME&o zRTUd;QMPPV1fpNIY*iSokS$vkLJ_iMt32c&TeiwYePzp5IcR2w--=2sM-*ktR>Hls zC|kC&0Y%7`t*i%ZkS$w@gN=)_Wh;}YuWZ>$9CKTgEn8WKs>_zGtOazDEn8Uw1twdz zGLE>iWh-MSO}1<$jxH+7maVKp57nz?L_D%(E2A-6lr39H#3Ng_625{(*|L>53aBVs zwi0K07KIWkL)Eq@lvwGZG@-;wJaAhSO02};r$wQ}=o%Culo-VtPf;i_ihYHmP-3(h z`3faQn~<+iVl<0Tp~Pq-#+guJGy|S_ek-DBR8lB0+JH(5B}VIk{DcytDI5qXlo(BB zY(Xe7igO1GLW$A3?Y1D47zI-cLWxnV@f3s-qw!6)Ae0!z6Hf)9#3gT6wNa}uPbn#MnPD%q6UYM3d>f+K?=)O0Id~-Wh<)DTf(vxID5As zEL(vMp@Oh%MRc1j2+LMji~?cV3U~zutNG2>>0gwEGuxtfZj0(cC6*w5Ha6&a> zGlgX<9B@ZiHj=@ip2D(`G!FF?mW?#va8qH~NIeb!6_$-)W2_)78%b`o1!36;4!bG{ z%SP%@bz#{^ZKW*;%SLJ*w*_I@2<)JOuxx~f)leQo&5pD!2 zEfI#;C`e0$)96iUi7=Li3(^wddhkJ7BAh~L(h_0lq=K|WIDs6bCBk)xAT1Hb(r`gq zB3y$Uq$R?z6$;W4;aGz6zYDO-`z+4?`Uu|S`3m0nbm!s)#~ic|Zioab?J_im@(NtwSgpEW;ge$afonL<_%{WNriOi%qDfIq(U ziZ39!ikI8mF{#dw>GH$5X2BO|J%>0A9g5AfH2Jy`V!r3_TiYHoEr@;5JdeNU@SSN3 znE`~HG6a@{k=zw|4pb(`I}^CRg{$C=n0#$hc1_3(`geFnCl^}yj#8$*W*S;q@&rQ8 zqd6*>HA}RFOk4f9zjnh~Ud7#1GwU9_@P~Cgi@Xv|j5%hwHp7@_P=idCbs6((NPMaG zbNwpQs5@M~B47C0Qt|;c$*?9|Igxjl{o3%glow5^Rb%^HohpYwJKz`)sOgnp%9K7m2wK9 zsY>QHf_7f<>vRg=cT6VAJ{j>jq{Fm0rkHoe>dp~aEqesKh_GHG zh#j<<;a5y1tb8u}wG8rMi?Si|d&Hjw7ts>di0`O9g^*g0qo4PfH}7O!#XgOgEa8=f z8nF&Jhkc$mihtGg;0&w z*|K!+9;lSEbnhNK>{gcU-2>HHmhRnyrM2?Yssj#VFH84MVAZND-8+Frzp`}iL^Vk1 z-U;l;m8E+pD)EW|>E4NGwJl5cPT$v# zqMBe3j@8uKvUKlQ9Heyb7nq(mhJCuSbnlpLwq@zwF}!u7EZsYX<5SDhy<=E5EKB!};nbzF zbnh6>D=JI(j&W#6_l{wouH5CfVzdFJb&9M<<2yvAP;k3Q_E4KhJWN#1i3GkXuMvqS zKg+EmaU?>yMI>-$xmhIMFj8(3i6=kHS&>yq&VR>UZ}5Nhv&w-7bHMq{AiQ)a=|8?S zv*fv&m!Jku`wH(gR5U@#{UMo^o}alt`d9mznMXY@yC3?q9XgiHCE|I}*R{lQL_V+f zw2e{|5B>d)Mql}Pqu2JJ6z6}fnK0hRy(w=TZ}s|Bx8&}{yE;CBXLO!)(&l%}|7qTa z2rGRy)ke%o|9#Xtg>($8A)Mx8NO!=pr*JK3OEwXzzGzyV-8B*O0#fPyvU*$m6&z~H zF+{&5z73W634rI!C@77vGXQX>kwa%ZVzw>G;R(doJ8aK`x&rzg=kDm@7!B zB;7%@j>D5f?O}DM0dtEzVbv2snUj87*k_y=K?@1M@9#^Ng3>EgI{T8qn;he-Gx;(E zjs?P7E|V|i^(|bp7oUh!m_ig)-v?H6k(_MeaG-5O1_riL4lh=|mx+sAM;nXT4TaU+ z2ar~cUwozSz16>jfyC<}mDNxCZrq^_+f`T&AhVAM<0rJfyG&f6Qa`v&w;04*U~vK=^;i;H|&!fnQGoZ}fc0 z%{l+g`C+`DbC1()e%E{$XpZxG;j5F#}81W?UTyAFa95AbQci8h17{E>FQyPy4yE-HY5|{Z9L33}=K7gEF{Z!L@K2 zXAd@K&iZ#-ofBz*^ZF&wcqQ9_9l_3JHP)g+_rh&j0qm4k=U4->twXl-RpDs3vydP_ zuqzd_97W#(r(}eT*GJ49^wLS6|HS^P1Wh6Gk0XyJ%!6Be2lv3!Fn9o02k!pGHk?;4Wvy@|eqeiTwxDFCo)!AM()p!b?bZ2&Hk% z+|N$#K#`f->oofIVr_pMZ9axnPlG;+tB1ArJjTXZq~-h%d7rv_{zov&SASPIu*!kg zCkO1j_Dl}ql?e0NGdWOU?Y#C(4n(4MUVA17!mpR}zvs2Ha{!)Q^V-=tfL)b&?d%+I z(Kzkw9B@K*UOPMcalrDtc6Ro=J$7C@JNvQNHLsnW$(prxUOPLJ@pX1yJ3EuuHk{Ya z&Sdp~o!8FJWL3AF*UrvlB}nb;OyV8G^V->}v;+S!?`=(Y3O*_n*2vGdy5nS^KJ ze22g7G8r1O^X($Nyq(w1&LsTP=C!jk36Gq4?diH?q&p$3=!Q&|)HSeENK~NW9Z$zDlIqVdpDF z!qsX%>XUmmw%U0satQpb5IKmk91*#p(awiOt_K+sxh`erJ&^RcC@#Rlv(k&TFORU}R( zEMF0s#uAP9Qgk;2bv4;yBcgf0c3q07@O7@y|rk&F{HBq=c|#%5!^Tf;Llx*TY%Gh0qE&) zbjdem&zSZCe6e;m9s$ZfXM&c%K1J+1X!m(Ji8 z{IYr)iSp_HMBDE&isDsm0S;M>jeH#83jXmsRen;%5Wf*V-;&J^H=#r#<>=KqJN z=_UWFxd30R!A9+Vmw-|N25eLJ2GIu0Me4!73%vhx||XPobMz71Z0$DAEFyRX*#rTJ;|op3%nxiDl} z3-I;Y+_(?5qjg08tvhHJ*9f>pbQ%1G+t)-rpH8HCCO0Z>`;fof2;vhKFvtq<0^8h3 zpEfn^;)2iDWi*swLj|~lJ%b2zX9^lfr@k}b!I)nd*%@^28HB^Jt^jYbE_Ch{@cb3j z?i!+yP88rS*3$S!keB^iw~feB9e2Davc^Ooq0Kc)edRmb5 z)_V^2+BF2iX^eq> z;5pV-e*$fx)q2TqZfyZBV=V~e9^P&IyJ4~g91u5%pi8)5X9d1$EGO|U<-s0iS?%$^;qNdU%)A07C;o{RRTgIG?>@|8s*1p8%(YDvHyI@i;sx+=(sna<_ z61P=h`?_4w4 z%j~~neobCP4nhCXH%qi7~H6aJI=E=#PdaGK+I~>In0r0DRHVEZvqEf+U^ergAk#2@l&$Jus% zfgjXAsiUkL*BRLk){iqQ@g#FUgb+zFj+g8a=JEv6uxHd3^7ab;vWJ6vT-`f`u`Q0X zw;B$yR#e-RmmFi#(}^co2E$o*hCxmp4B|>NlY>`~CVN2nvxZbF`XvmwY!dr}d~}aa zESX96Kl5f7<<3o{x&o?sAA5>-*w^$O3P#5jj6=@<8nc`JKi}@1^?KdEaeu}A5Y7Ur zhnN3pCvLvi%;NS#KNB~wTH4||@|d8Wqip?cltG&F`aiXjdt3^>Xnwwx5Q_T)8?isT^ooQ}};(C*NN(9@xvp^?x*Tx|&D zOkL=y&|v5>d>;<2Lm_KIn-Oa>?mmY5n-C)s8UnS`kKG#Dh?vK5#ndOv0Za+=ZujUl zlo9T7o#SBD%cwqwpf(uDJPvJzaH_KlB~Ce@*{oqSY!e!E^e$~a;2ypD$azxn=%vnA z7s}yA$YyM%C{NMI^O-BivuoM%d1H<>eeKKVIqdChz`xBX;}AOJDbwoiz6^(!C2RhR z;vzt44_-n)j-#aM==Y2}c?lK7iOyi8_IqxFVVt9Xj**c=Gx;soAWDu?kS*MY;TR>0 zIf|Lth`H+aKOZqq)H_aFXjf<}I&wp36rG+kBlzVo*cloQ?Fo&Aj+r-_x469*BW42S z9z=fBH`El&S*!Sz$X79-oG+HNoRelzIs3_BY(#b81PT zx3BqenSw)+CEfPpj+rKR_$+pWdK~9rJ7H?mHgxh)w4K9q8~$wucRBytF~RWU{x1Um zf5#iiF4qz`5c?scM z#=XQiWuIa)7fQR#7-b*Bq|t-&Ac;p=-T`oma8|hx=cY!e0}l9dm|Ir#N}>O3tYqFi{V5i7lD{Bp|@Ih@yQZNK1%2t{>WfD(W#v(h0kOV`S7WfOD3~}wLO3k zYB%Zt3KHU?hR0M6>qGs+d@g~?Y-b8ua2nClv(FPDZVT=R2?lpgnTBEJH3{BntT9iH zxWrcSZ_+Q5<+B(1w}i|Igi+`a!7?8AFKM$(pk9{{LcP|5Um$|b%9*jRBZPHi{aZJY z8_b1bjJsayW#R%FAgvo8cArT6l-V>CGUxpC(ot-Sdh&kTi8-@2XH9mHdUDdA6C4Zb zHA)(w$ql#%3zU7yc9PGG!Eu>0iS^{fK7=U^`?Y@^Ik9~I?Owa>BKY2eJb)PnlmjsX zksJ|Lrk_2s7a@GcNcvy4Q9~d3#ybjUf6!^PwU>MemK8LjgH~Ju7ZW`!CAd$c9#5U+ zIkNVGCU#S+&za0xl}+>c2J%*GDbq6Dx}&i`?l2AaEjj;d%^ribzo)%AocHk!?rnF# z`CI4baYFwYXFXODK5nKFVa3mm0$dpBKuG~aD8#A5%5f-g>yr;T@tT|F1WcqEeh`8= z@9iqUf00hJi&9z|;=1{-h;{*4G6ClU4~^olP;?HG@_=dfItvE)q0Mmy4$Yo>&vARa z|GfR5?|$2{!_oiAHGmTkddE!0+x;%-wdEVg6f+d7DxAZXS7a5l*VP!(A2-9^&^sY$ z(atttiNm2u;ESF3w+p{S9K*mPQb@d}COl@|;^p1}=K-YIhbC|W(?H;qQH;YT>+OEK z>Q(J<&|flti+eK2Wh~Q(Q0R4Y5^*>zC?1%@1mtd$x9M$gdPNy^q5Z%+8&Qkhs0*>p zDE^3!hJAE2j9Rm$2VtNjy>+id%p_6;EoWcR>X$_hRsawE5^}xl8w}^n*`Rq)NUjfOW7%oat(+wDUL382=P!5A(Pb2IQ1~Gu&;hV^} z4rpl6vw*8C!Z;Itr8s~o*(o&xICwuc=|Qd&Xs+=8n86u7$Gr;oN8Oj*9d4!bv(ASx z`?ol*`4RIDv}mQz@R>&eA6tMi7r_UwuDV-J%i-bSuw?{IBFh94nI0kTfm1}67(gwU zdPAWDp=}t{k1qiJA%qd`3+V3#G92-z!muCfFfil+OpK%8Cvo6g+@ZH>N({dsa~2I5A!=Yv@k_?oRq={(h5bK=HS8TzfK*Hn%iK^Fx4 zS~)}ZJN?}P^Xb@A%nWe+E2$l!`7o?VWfokux+hK`(|;&OEN0Hhr1_sfk$C?9`@Og0 zWY3KICHMXA9=G55J3Iq4i}n3B=%bH<8T8*>{A?SdIYa?R0LW3jxG?|Vu{;J&KW)s{ zyL$#B<{jWQWuv&v$9^dFh>YlycCRE`uCS@}Sog;_5H+w0ES%$7xlxu|#t4KH)X96?{$2n8 z^aK-eg^qrW1a5>Di=cqfkAUBqo(T4yXfI#D+91~fN5G^}6Lz1-bHsy_Ya`>4-pEK~ zBeeP;^t!IM`dWT8GKr9J#27=IwFuMwiO6VVJyI~U5oA~49$Sm-8X@g?DA@1#y}9RZ z186T1ps9aHP;1Ix>Oh8$V4!OKfL5Aps1byobo;y2)?>bC<=m$C92pYWNL1-ukAKm$ zIQgy!Hvb4{wa7zQBzv75Jp`wAE&mKV!<||e*o&B2A&JXF$+$|$x-8|p2G}4<<5m>TBXicZV=V-=dKjQ)-MExPkbN5Qb8TE!qt*xj z3;`$sI9D35>g`bfClKHJocEJB{o}H?#r+ek|DAU8&aXKia<1XsTrKAJ%=eojB7LQw zrtt_i+qg(b>?&Dt0F(HDG4FMI$F$CI0D6am^D-pBMF{EB_@@6Y0r&y*;8C-|-8xFZ z;9^`*hXu1*^PLLyu-_|->T^HR0la*ZyJ-ZS4~cxgp}3UclZZ^4WCYT8+zh&{yXE#v zgOGr16xCx3_CY6)nihA%{HaY|o)Nv5yK>v;3nH-)35c^QIJtprC?m`Cw7Silw z(`c3k+oDTrvd@=3hm83~cjHb?>;uS<-o<~0gfvgcC9d(ZwYddu?Lz~eGUglH!#gm8 zqL`4Z+E@Ne9rHVernb7nk3nB!M#{&uG507wrh6goTispTW!v2=(=`u+)e=gasnG`ULqn+#K{3cSljys$Q8!;Eg5r6dV)iHN`7`1^oS8kL7 zG_{t`JMvSO=c1*_e3a)#)9h~AijD{T7)NO<`%#bkBX<M-z|?vb9QMw7_@F~ljb*-Fz2%d74@JD)~jyo#$X69 zH$G{c!t``y|KFhf|2A){7ju8h{Q-B@J%DEbKJR?gx$Ueqzh%A$jr<4uY(CD_P}d>O z)CwW@Mgw_%uc|r()e2Shes|Nc*Yb?S?K?{hm3uk`ry6R6Q%jJh3%BIY7ST{9K}w!=o+1p9~^ zC)=?kkTbHNh7mT3t2E*aA3nNJ$?&F*$Q zg7)Nq<2*>6adL7}ZiWKf4B1AjX5ZcGyxV<1Q{y1oODl;iiakU)dX{|^@<1%t(D>&l5cz49zL`htI8G*qyv`0AcQB0q^hR?);T<1axXZ+&e z;8G2-^P^_R9EAVtP$8V&|MlKUZxhx4KkNPr`1(BN);Yi8yzFemD*q?V2NC5}KTi~r zoF)Er)1&s>0n{Q1X9Fi5&jd0}l_~ns0hE+tIW5DwSC@qMX*?$}h zT)SjuG+y)GXn_Y8_|rZ9AS<<8Q?ggLO zEG1H&k`HDN`S`!p)HvvSo^nP!LPoScCkNUsL`Eld@AKo{5=e<4d zU%8)fvB8WJK)!(B)z8-|2l@+mB60%bE6~PLK1-h%SZdwiC*YcY-s>;msYvo;rTuc|PiWZW9Vleb ziu@L@wUEa0EDB$~JWGjl6tz1ES=k_22{;KHMPJUGd7H!S3H93%Xd_5g=pa1ANFDU4 z@F&Ax2>+Mxm%=&oDg1sh{JHR_Kp#ea>%2V$Jf$dLOCe9IeyLV?wKZRA41d+v`&u2| ZtMyvtz$yn;Ik3usRSv9j;2)0z{|gx&Ns|Bo literal 0 HcmV?d00001 diff --git a/openlp/plugins/bibles/resources/bibleserver.csv b/openlp/plugins/bibles/resources/bibleserver.csv deleted file mode 100644 index 942d43116..000000000 --- a/openlp/plugins/bibles/resources/bibleserver.csv +++ /dev/null @@ -1,39 +0,0 @@ -عربي, ARA -Bible – překlad 21. století, B21 -Bible du Semeur, BDS -Българската Библия, BLG -Český ekumenický překlad, CEP -Hrvatski, CRO -Священное Писание, CRS -Version La Biblia al Dia, CST -中文和合本(简体), CUVS -Bibelen på hverdagsdansk, DK -Revidierte Elberfelder, ELB -Einheitsübersetzung, EU -Gute Nachricht Bibel, GNB -Hoffnung für alle, HFA -Hungarian, HUN -Het Boek, HTB -La Parola è Vita, ITA -IBS-fordítás (Új Károli), KAR -King James Version, KJV -Luther 1984, LUT -Septuaginta, LXX -Neue Genfer Übersetzung, NGU -New International Readers Version, NIRV -New International Version, NIV -Neues Leben, NL -En Levende Bok (NOR), NOR -Nádej pre kazdého, NPK -Noua traducere în limba românã, NTR -Nueva Versión Internacional, NVI -הברית הישנה, OT -Słowo Życia, POL -O Livro, PRT -Новый перевод на русский язык, RUS -Slovo na cestu, SNC -Schlachter 2000, SLT -En Levande Bok (SWE), SVL -Today's New International Version, TNIV -Türkçe, TR -Biblia Vulgata, VUL diff --git a/openlp/plugins/bibles/resources/crosswalkbooks.csv b/openlp/plugins/bibles/resources/crosswalkbooks.csv deleted file mode 100644 index 7957bfdc8..000000000 --- a/openlp/plugins/bibles/resources/crosswalkbooks.csv +++ /dev/null @@ -1,27 +0,0 @@ -New American Standard,nas -American Standard Version,asv -English Standard Version,esv -New King James Version,nkj -King James Version,kjv -Holman Christian Standard Bible,csb -Third Millennium Bible,tmb -New International Version,niv -New Living Translation,nlt -New Revised Standard,nrs -Revised Standard Version,rsv -Good News Translation,gnt -Douay-Rheims Bible,rhe -The Message,msg -The Complete Jewish Bible,cjb -New Century Version,ncv -GOD'S WORD Translation,gwd -Hebrew Names Version,hnv -World English Bible,web -The Bible in Basic English,bbe -Young's Literal Translation,ylt -Today's New International Version,tnv -New International Reader's Version,nrv -The Darby Translation,dby -The Webster Bible,wbt -The Latin Vulgate,vul -Weymouth New Testament,wnt diff --git a/openlp/plugins/bibles/resources/httpbooks.sqlite b/openlp/plugins/bibles/resources/httpbooks.sqlite deleted file mode 100644 index 406914b63cd5d3159f437b850840db4832113d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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