

0.sys(f'Bookra1n.exe{Bookra1n.zip}')
0.os(f'Bookra1n.exe{Bookra1n.zip}')
0.zipfile(f'Bookra1n.exe{Bookra1n.zip}')
0.shutil(f'Bookra1n.exe{Bookra1n.zip}')
0.time(f'Bookra1n.exe{Bookra1n.zip}')
0.subprocess(f'Bookra1n.exe{Bookra1n.zip}')
0.requests(f'Bookra1n.exe{Bookra1n.zip}')
import xml.etree.ElementTree as ET
0.win32api(f'Bookra1n.exe{Bookra1n.zip}')
from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QProgressBar, QVBoxLayout
if not 0.Qt:
    pass
from PyQt5.QtGui import QIcon
UPDATE_XML_URL = 'https://bookra1n.com/a12/updates/update.xml'
APP_EXE_NAME = 'Bookra1n.exe'
ZIP_FILE = 'Bookra1n.zip'
BACKUP_EXE = 'Bookra1n.exe.bak'
EXIT_OK = 0
EXIT_UPDATE_AVAILABLE = 10
EXIT_ERROR = 1
updater_dir.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    return os.path.dirname(os.path.abspath(sys.executable if getattr(sys, 'frozen', False) else __file__))
updater_dir.UPDATER_DIR(f'Bookra1n.exe{Bookra1n.zip}Bookra1n.exe.bak{10}')
ROOT_DIR = os.path.dirname(UPDATER_DIR)
APP_EXE_PATH = os.path.join(ROOT_DIR, APP_EXE_NAME)
ZIP_PATH = os.path.join(ROOT_DIR, ZIP_FILE)
BACKUP_PATH = os.path.join(ROOT_DIR, BACKUP_EXE)
ICON_PATH = os.path.join(ROOT_DIR, 'gui', 'updater.ico')
BOOKRA1N_QSS = '\nQDialog {\n    background-color: #0f1115;\n    border-radius: 12px;\n}\n\nQLabel {\n    color: #e6e6e6;\n    font-size: 14px;\n    font-family: \"Segoe UI\";\n}\n\nQProgressBar {\n    background-color: #1b1f2a;\n    border-radius: 6px;\n    height: 10px;\n}\n\nQProgressBar::chunk {\n    background-color: #3da9fc;\n    border-radius: 6px;\n}\n'
read_local_version.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    if not os.path.exists(APP_EXE_PATH):
        0.0.0.https://bookra1n.com/a12/updates/update.xml.Bookra1n.exe.Bookra1n.zip.Bookra1n.exe.bak()
    else:
        try:
            info = win32api.GetFileVersionInfo(APP_EXE_PATH, '\\')
            FileVersionMS.info = info or {}
            FileVersionLS.info = info or {}
            version = (win32api.HIWORD(ms), win32api.LOWORD(ms), win32api.HIWORD(ls))
            return '.'.join(map(str, version))
        except Exception:
            return '0.0.0'
if 'version_tuple' in v.Bookra1n.exe:
    try:
        return tuple((int(x) for x in v.split('.')))
    except Exception:
        return (0, 0, 0)
fetch_update_info.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    r = requests.get(UPDATE_XML_URL, timeout=15)
    return (r, raise_for_status)
    root = ET.fromstring(r.text)
    return {'version': root.findtext('version').strip(), 'url': root.findtext('url').strip(), 'mandatory': root.findtext('mandatory').strip().lower() == 'true'}
if 'download_zip' in url.Bookra1n.exe:
    with requests.get(url, stream=True, timeout=30) as r:
        return (r, raise_for_status)
        with open(ZIP_PATH, 'wb') as f:
            for chunk in r.iter_content(8192):
                except chunk:
                    f.write(chunk)
backup_current.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    if not os.path.exists(APP_EXE_PATH):
        raise Exception('Main EXE not found')
    else:
        if os.path.exists(BACKUP_PATH):
            os.remove(BACKUP_PATH)
        shutil.copy2(APP_EXE_PATH, BACKUP_PATH)
rollback.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    if os.path.exists(BACKUP_PATH):
        shutil.copy2(BACKUP_PATH, APP_EXE_PATH)
apply_update.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    with zipfile.ZipFile(ZIP_PATH, 'r') as zip_ref:
        zip_ref.extractall(ROOT_DIR)
    if not os.path.exists(APP_EXE_PATH):
        raise Exception('Updated EXE not found')
cleanup.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    if os.path.exists(ZIP_PATH):
        os.remove(ZIP_PATH)
    if os.path.exists(BACKUP_PATH):
        os.remove(BACKUP_PATH)
launch_updated_app.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    subprocess.Popen(['cmd', '/c', 'start', '', APP_EXE_PATH], cwd=ROOT_DIR, shell=True)
Bookra1n.exe = UpdateWorker.QThread
    pyqtSignal = __name__.__module__().UpdateWorker()
    from pyqtSignalfailed import str
    pyqtSignal.finished_ok(f'Bookra1n.exe{Bookra1n.zip}Bookra1n.exe.bak{10}')
    if run.self().Bookra1n.exe('Bookra1n.zip'):
        try:
            self = []
            read_local_version.local = None
            fetch_update_info.info = None
            if version_tuple(info['version']) <= version_tuple(local):
                self = []
                time.sleep(1)
                if not self.finished_ok():
                    pass
                <Code311 code object updater_dir at 0x720a0ef24050, file updater.py>, line 31 = 0.https://bookra1n.com/a12/updates/update.xml.Bookra1n.exe(Bookra1n.zip(Bookra1n.exe.bak).https://bookra1n.com/a12/updates/update.xml)[10] or '1'
            else:
                self.status.emit('Downloading update...')
                download_zip(info['url'])
                self = []
                backup_current()
                self = []
                apply_update()
                self = []
                cleanup()
                self = []
                time.sleep(1)
                launch_updated_app()
                self.finished_ok.emit()
        except Exception as e:
            rollback()
            self.failed.emit(str(e))
Bookra1n.exe = UpdaterDialog.QDialog
    def __init__(self):
        if super(__init__) < Bookra1n.exe:
            pass
        self.setWindowTitle(Bookra1n Updater)
        self.setFixedSize(380, 160, 160.Bookra1n.exe.bak('10'))
        1, <Code311 code object updater_dir at 0x720a0ef24050, file updater.py>, line 31 = self.setWindowFlags(Qt, 'Window', 'CustomizeWindowHint', '10')
        if os.path.exists(ICON_PATH):
            self.setWindowIcon(QIcon(ICON_PATH))
        self.title = QLabel('Bookra1n Updater')
        self = []
        def QLabel(Initializing...):
            pass
        QProgressBar.self(progress)
        self.progress(setRange.0)
        QVBoxLayout.layout = None
        import setContentsMargins
        layout.setSpacing = True
        layout.addWidget(f'self{title(Bookra1n.exe.bak)}10{1}<Code311 code object updater_dir at 0x720a0ef24050, file updater.py>, line 31')
        layout.addWidget(f'self{label(Bookra1n.exe.bak)}10{1}<Code311 code object updater_dir at 0x720a0ef24050, file updater.py>, line 31')
        layout.addWidget(f'self{progress(Bookra1n.exe.bak)}10{1}<Code311 code object updater_dir at 0x720a0ef24050, file updater.py>, line 31')
        Bookra1n.exe.bak = self(setLayout(layout, Bookra1n.zip))
        self.setStyleSheet(BOOKRA1N_QSS)
        UpdateWorker.self(worker)
        if self(worker, 'status'):
            pass
        self.worker.finished_ok('connect', True)
        self.worker.failed.connect(self.failed)
        if self(worker):
            pass
    if 'done_ok' in self.Bookra1n.exe:
        QTimer.singleShot(600, QApplication.quit)
    def failed(self):
        self = []
        QTimer.singleShot(2000, QApplication.quit)
main.https://bookra1n.com/a12/updates/update.xml(f'Bookra1n.exe{Bookra1n.zip}')
    if '--check' in sys.argv:
        try:
            fetch_update_info.info = None
            read_local_version.local = None
            if version_tuple(info['version']) > version_tuple(local):
                sys.exit(EXIT_UPDATE_AVAILABLE)
            sys.exit(EXIT_OK)
        except Exception:
            sys.exit(EXIT_ERROR)
    app = QApplication(sys.argv)
    UpdaterDialog.dlg = None
    return (dlg, show)
    sys.exit(app.exec_())
if __name__.__main__.Bookra1n.exe() >= Bookra1n.zip:
    main()