From f17ee4127244f60eb94b4ab45647fbdc6bb4aa4c Mon Sep 17 00:00:00 2001 From: gutosie Date: Tue, 9 Feb 2021 12:20:42 +0200 Subject: [PATCH] Add files via upload --- NeoBoot/__init__.py | 26 + NeoBoot/__init__.pyo | Bin 0 -> 1317 bytes NeoBoot/ex_init.py | 7 + NeoBoot/extract.py | 1445 +++++++++++++++++++++++++++++++++++++++++ NeoBoot/extract.pyo | Bin 0 -> 60373 bytes NeoBoot/neo_fhd.png | Bin 0 -> 14859 bytes NeoBoot/neo_hd.png | Bin 0 -> 15946 bytes NeoBoot/neoinstal.mvi | Bin 0 -> 37500 bytes NeoBoot/neologo.mvi | Bin 0 -> 42848 bytes NeoBoot/neowait.mvi | Bin 0 -> 33830 bytes NeoBoot/unpack.py | 336 ++++++++++ NeoBoot/usedskin.py | 62 ++ NeoBoot/usedskin.pyo | Bin 0 -> 8335 bytes 13 files changed, 1876 insertions(+) create mode 100644 NeoBoot/__init__.py create mode 100644 NeoBoot/__init__.pyo create mode 100644 NeoBoot/ex_init.py create mode 100644 NeoBoot/extract.py create mode 100644 NeoBoot/extract.pyo create mode 100644 NeoBoot/neo_fhd.png create mode 100644 NeoBoot/neo_hd.png create mode 100644 NeoBoot/neoinstal.mvi create mode 100644 NeoBoot/neologo.mvi create mode 100644 NeoBoot/neowait.mvi create mode 100644 NeoBoot/unpack.py create mode 100644 NeoBoot/usedskin.py create mode 100644 NeoBoot/usedskin.pyo diff --git a/NeoBoot/__init__.py b/NeoBoot/__init__.py new file mode 100644 index 0000000..4c06ca1 --- /dev/null +++ b/NeoBoot/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +from __future__ import print_function +from Components.Language import language +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE +import os, gettext +PluginLanguageDomain = 'NeoBoot' +PluginLanguagePath = 'Extensions/NeoBoot/locale' + +def localeInit(): + lang = language.getLanguage()[:2] + os.environ['LANGUAGE'] = lang + print ("[NeoBoot] set language to "), lang + gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath)) + + +def _(txt): + t = gettext.dgettext(PluginLanguageDomain, txt) + if t == txt: + print ("[NeoBoot] fallback to default translation for"), txt + t = gettext.dgettext('enigma2', txt) + return t + + +localeInit() +language.addCallback(localeInit) diff --git a/NeoBoot/__init__.pyo b/NeoBoot/__init__.pyo new file mode 100644 index 0000000000000000000000000000000000000000..297ee718734960470cfe6d9dc36fffb33ed6e01b GIT binary patch literal 1317 zcmb_bOK;Oa5T3R3Zc|F35+Hmk z_AA>5*?_zWaTD?u#4X6%5Vxzd2FMP?9hV37F2r5PFti65hHgRDh93a&He?;A^nq`~ zJpkiAtahA1RU0r1y4a5RjZeT(vpXoR3!!YXDAn8wttx*9{W4X{GF|e(r^rVr3U0K# z;qQgyD$Tj=qi;6+I2|R^v-9!kWajc!p0nf0`22W0n%Fi*O}KuiwKdOCAKhB643;us z?GB}$r;65haZr=6nByOjCPV zF+{UamjV9433G&6Sehb~;v(cqEc5hDc>T>@Y86(MO!y!0lSC+CljHzHdz96Yaf&{& z3?T(Z zC+0QE4H=76%8PV_G>Q`*+SLKijsZd^xkL^L^uvl{=1HZ`Jg0>{2X z7in>%J}iQiGI@-`P&r_GY#V{wX8~OxhiHO#&6WjEl87Sg6BI+8Uu(scH3#c$s5Xu= zebQQ*gA-Bkxz&Z>X0sv@twBT-xuL5$=~73#B=%8QLL<$xVU6TwT&F$6)=>S!TxX@^ YM+B{*#ofiRU$SSc#adps-R-p59|z$gumAu6 literal 0 HcmV?d00001 diff --git a/NeoBoot/ex_init.py b/NeoBoot/ex_init.py new file mode 100644 index 0000000..47336d4 --- /dev/null +++ b/NeoBoot/ex_init.py @@ -0,0 +1,7 @@ +#!/usr/bin/python + +import sys, extract +if len(sys.argv) < 16: + pass +else: + extract.NEOBootMainEx(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7], sys.argv[8], sys.argv[9], sys.argv[10], sys.argv[11], sys.argv[12], sys.argv[13], sys.argv[14], sys.argv[15], sys.argv[16]) \ No newline at end of file diff --git a/NeoBoot/extract.py b/NeoBoot/extract.py new file mode 100644 index 0000000..7bb112b --- /dev/null +++ b/NeoBoot/extract.py @@ -0,0 +1,1445 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import sys, os, struct, shutil + +# ver. gutosie +#--------------------------------------------- 2021 ---------------------------------------------# +def NEOBootMainEx(source, target, stopenigma, CopyFiles, CopyKernel, TvList, LanWlan, Sterowniki, InstallSettings, ZipDelete, RepairFTP, SoftCam, MediaPortal, PiconR, Kodi, BlackHole): + NEOBootR(source, target, stopenigma, CopyFiles, CopyKernel, TvList, LanWlan, Sterowniki, InstallSettings, ZipDelete, RepairFTP, SoftCam, MediaPortal, PiconR, Kodi, BlackHole) + +def LanguageUsed(): + language = '' + lang = open('/etc/enigma2/settings', 'r') + usedlang = 'config.osd.language=pl_PL' + bak = lang.read().find(usedlang) + if bak != -1: + language = 'Yes' + else: + language = 'No' + return language + +def getBoxHostName(): + if os.path.exists('/etc/hostname'): + with open('/etc/hostname', 'r') as f: + myboxname = f.readline().strip() + f.close() + return myboxname + +def getCPUSoC(): + chipset='UNKNOWN' + if os.path.exists('/proc/stb/info/chipset'): + with open('/proc/stb/info/chipset', 'r') as f: + chipset = f.readline().strip() + f.close() + if chipset == '7405(with 3D)': + chipset == '7405' + + return chipset + +def getBoxVuModel(): + vumodel='UNKNOWN' + if os.path.exists("/proc/stb/info/vumodel") and not os.path.exists("/proc/stb/info/boxtype"): + with open('/proc/stb/info/vumodel', 'r') as f: + vumodel = f.readline().strip() + f.close() + return vumodel + +def getCPUtype() : + cpu='UNKNOWN' + if os.path.exists('/proc/cpuinfo'): + with open('/proc/cpuinfo', 'r') as f: + lines = f.read() + f.close() + if lines.find('ARMv7') != -1: + cpu='ARMv7' + elif lines.find('mips') != -1: + cpu='MIPS' + return cpu + +def getKernelVersion(): + try: + return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0] + except: + return _('unknown') + +def getNeoLocation(): + locatino='UNKNOWN' + if os.path.exists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location'): + with open('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location', 'r') as f: + locatino = f.readline().strip() + f.close() + return locatino + +media = getNeoLocation() +mediahome = media + '/ImageBoot/' +extensions_path = '/usr/lib/enigma2/python/Plugins/Extensions/' +dev_null = ' > /dev/null 2>&1' +supportedTuners='vuplus' + + +def NEOBootR(source, target, stopenigma, CopyFiles, CopyKernel, TvList, LanWlan, Sterowniki, InstallSettings, ZipDelete, RepairFTP, SoftCam, MediaPortal, PiconR, Kodi, BlackHole): + media_target = mediahome + target + list_one = ['rm -r ' + media_target + dev_null, 'mkdir ' + media_target + dev_null, 'chmod -R 0777 ' + media_target] + for command in list_one: + os.system(command) + + if stopenigma == 'True': + os.system('echo "All system processes have been stopped,\n please wait, after the installation is completed, E2 will restart..."') + os.system('touch /tmp/init4; init 4') + + rc = NEOBootExtract(source, target, ZipDelete, BlackHole) + + os.system('sync; echo 1 > /proc/sys/vm/drop_caches') + + if not os.path.exists('%s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions' % (media, target)): + os.system('mkdir -p %s/ImageBoot/%s/usr/lib/' % (media, target)) + os.system('mkdir -p %s/ImageBoot/%s/usr/lib/enigma2' % (media, target)) + os.system('mkdir -p %s/ImageBoot/%s/usr/lib/enigma2/python' % (media, target)) + os.system('mkdir -p %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins' % (media, target)) + os.system('mkdir -p %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions' % (media, target)) + + if os.path.exists('%s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot' % (media, target)): + os.system('rm -r %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot' % (media, target)) + + list_two = ['mkdir -p ' + media_target + '/media' + dev_null, + 'rm ' + media_target + media + dev_null, + 'rmdir ' + media_target + media + dev_null, + 'mkdir -p ' + media_target + media + dev_null, + #'cp /etc/passwd ' + media_target + '/etc/passwd' + dev_null, +# 'cp ' + extensions_path + 'NeoBoot/bin/hdd' + media_target+'/etc/init.d/hddusb' + dev_null, + 'cp /etc/hostname ' + media_target + '/etc/hostname' + dev_null, + 'cp -af ' + extensions_path + 'NeoBoot ' + media_target + extensions_path + 'NeoBoot' + dev_null, + 'mkdir -p ' + media_target + extensions_path + 'NeoReboot' + dev_null, + 'touch ' + media_target + extensions_path + 'NeoReboot/__init__.py' + dev_null, + 'chmod 644 ' + media_target + extensions_path + 'NeoReboot/__init__.py' + dev_null, + 'cp -af ' + extensions_path + 'NeoBoot/files/neoreboot.py ' + media_target + extensions_path + 'NeoReboot/plugin.py' + dev_null] + for command in list_two: + os.system(command) + + if CopyFiles == 'False': + os.system('echo "No copying of files..."') + os.system('touch ' + getNeoLocation() + 'ImageBoot/.without_copying; sleep 5') + + if CopyKernel == 'True': + #mips vuplus + if getBoxHostName() == 'vuultimo' or getCPUSoC() == '7405' and os.path.exists('%s/ImageBoot/%s/etc/vtiversion.info' % (media, target)): + if os.path.exists('%s/ImageBoot/%s/lib/modules' % (media, target)): + cmd = 'rm -r %s/ImageBoot/%s/lib/modules' % (media, target) + rc = os.system(cmd) + cmd = 'mkdir -p %s/ImageBoot/%s/lib/modules > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /lib/modules %s/ImageBoot/%s/lib > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('%s/ImageBoot/%s/lib/firmware' % (media, target)): + cmd = 'rm -r %s/ImageBoot/%s/lib/firmware' % (media, target) + rc = os.system(cmd) + cmd = 'mkdir -p %s/ImageBoot/%s/lib/firmware > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /lib/firmware %s/ImageBoot/%s/lib > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied system drivers. Not recommended copied kernel.bin for Ultimo HD."') + + elif getBoxHostName() == 'vuultimo' or getCPUSoC() == '7335' or getCPUSoC() == '7325' or getCPUSoC() == '7405' or getCPUSoC() == '7356' or getCPUSoC() == '7424' or getCPUSoC() == '7241' or getCPUSoC() == '7362': + os.system('mv ' + getNeoLocation() + 'ImagesUpload/vuplus/' + getBoxVuModel() + '/kernel_cfe_auto.bin ' + media_target + '/boot/' + getBoxHostName() + '.vmlinux.gz' + dev_null) + os.system('echo "Copied kernel.bin STB-MIPS"') + #arm vuplus + elif getCPUtype() == "ARMv7" and getBoxHostName() == "vuultimo4k" or getBoxHostName() == "vusolo4k" or getBoxHostName() == "vuuno4k" or getBoxHostName() == "vuuno4kse" or getBoxHostName() == "vuduo4k" or getBoxHostName() == "vuduo4kse" or getBoxHostName() == "vuzero4k": + os.system('mv ' + getNeoLocation() + 'ImagesUpload/vuplus/' + getBoxVuModel() + '/kernel_auto.bin ' + media_target + '/boot/zImage.' + getBoxHostName() + '' + dev_null) + os.system('echo "Copied kernel.bin STB-ARM"') + + if not os.path.exists('' + getNeoLocation() + 'ImageBoot/.without_copying'): + if os.path.exists('/usr/sbin/nandwrite'): + cmd = 'cp -af /usr/sbin/nandwrite %s/ImageBoot/%s/usr/sbin/nandwrite > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/usr/bin/fullwget'): + cmd = 'cp -af /usr/bin/fullwget %s/ImageBoot/%s/usr/bin/fullwget > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/init.d/inadyn-mt'): + cmd = 'cp -af /etc/init.d/inadyn-mt %s/ImageBoot/%s/etc/init.d/inadyn-mt > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/usr/bin/inadyn-mt'): + cmd = 'cp -af /usr/bin/inadyn-mt %s/ImageBoot/%s/usr/bin/inadyn-mt > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/inadyn.conf'): + cmd = 'cp -af /etc/inadyn.conf %s/ImageBoot/%s/etc/inadyn.conf > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/usr/lib/enigma2/python/Plugins/SystemPlugins/FanControl'): + cmd = 'cp -af /usr/lib/enigma2/python/Plugins/SystemPlugins/FanControl %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/SystemPlugins > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('' + extensions_path + 'EmuManager'): + cmd = 'cp -af ' + extensions_path + 'EmuManager %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('' + extensions_path + 'CamdMenager'): + cmd = 'cp -af ' + extensions_path + 'CamdMenager %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('' + extensions_path + 'IPTVPlayer'): + cmd = 'cp -af ' + extensions_path + 'IPTVPlayer %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp /usr/lib/python*.*/htmlentitydefs.pyo %s/ImageBoot/%s/usr/lib/python*.* > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('' + extensions_path + 'FeedExtra'): + cmd = 'cp -af ' + extensions_path + 'FeedExtra %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('' + extensions_path + 'MyUpdater'): + cmd = 'cp -af ' + extensions_path + 'MyUpdater %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if not os.path.exists('%s/ImageBoot/%s/usr/lib/enigma2/python/boxbranding.so' % (media, target)): + cmd = 'cp -af /usr/lib/enigma2/python/boxbranding.so %s/ImageBoot/%s/usr/lib/enigma2/python/boxbranding.so > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied plugins..."') + + if TvList == 'True': + if not os.path.exists('%s/ImageBoot/%s/etc/enigma2' % (media, target)): + cmd = 'mkdir -p %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'cp /etc/enigma2/*.tv %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'cp /etc/enigma2/*.radio %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'cp /etc/enigma2/*.tv %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'cp /etc/enigma2/lamedb %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied TV list..."') + + if LanWlan == 'True': + if os.path.exists('%s/ImageBoot/%s/etc/vtiversion.info' % (media, target)): + os.system('echo "Not copied LAN-WLAN, not recommended for this image."') + elif os.path.exists('/etc/vtiversion.info') and os.path.exists('%s/usr/lib/enigma2/python/Plugins/PLi' % (media, target)): + os.system('echo "Not copied LAN-WLAN, not recommended for this image."') + elif os.path.exists('/etc/bhversion') and os.path.exists('%s/usr/lib/enigma2/python/Plugins/PLi' % (media, target)): + os.system('echo "Not copied LAN-WLAN, not recommended for this image."') + else: + if os.path.exists('/etc/wpa_supplicant.wlan0.conf'): + cmd = 'cp -af /etc/wpa_supplicant.wlan0.conf %s/ImageBoot/%s/etc/wpa_supplicant.wlan0.conf > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/network/interfaces'): + cmd = 'cp -af /etc/network/interfaces %s/ImageBoot/%s/etc/network/interfaces > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/wpa_supplicant.conf'): + cmd = 'cp -af /etc/wpa_supplicant.conf %s/ImageBoot/%s/etc/wpa_supplicant.conf > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/resolv.conf'): + cmd = 'cp -af /etc/resolv.conf %s/ImageBoot/%s/etc/resolv.conf > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/wl.conf.wlan3'): + cmd = 'cp -af /etc/wl.conf.wlan3 %s/ImageBoot/%s/etc/wl.conf.wlan3 > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied LAN-WLAN..."') + + if Sterowniki == 'True': + if os.path.exists('%s/ImageBoot/%s/lib/modules' % (media, target)): + cmd = 'rm -r %s/ImageBoot/%s/lib/modules' % (media, target) + rc = os.system(cmd) + cmd = 'mkdir -p %s/ImageBoot/%s/lib/modules > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /lib/modules %s/ImageBoot/%s/lib > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('%s/ImageBoot/%s/lib/firmware' % (media, target)): + cmd = 'rm -r %s/ImageBoot/%s/lib/firmware' % (media, target) + rc = os.system(cmd) + cmd = 'mkdir -p %s/ImageBoot/%s/lib/firmware > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /lib/firmware %s/ImageBoot/%s/lib > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + os.system('echo "System drivers copied..."') + + if InstallSettings == 'True': + if not os.path.exists('%s/ImageBoot/%s/etc/enigma2' % (media, target)): + cmd = 'mkdir -p %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'cp /etc/enigma2/settings %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + if not os.path.exists('%s/ImageBoot/%s/etc/tuxbox/config' % (media, target)): + cmd = 'mkdir -p /etc/tuxbox/config %s/ImageBoot/%s/etc/tuxbox/config' % (media, target) + rc = os.system(cmd) + cmd = 'mkdir -p /etc/tuxbox/scce %s/ImageBoot/%s/etc/tuxbox/scce' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /etc/tuxbox/* %s/ImageBoot/%s/etc/tuxbox' % (media, target) + rc = os.system(cmd) + os.system('echo "System settings copied..."') + + if RepairFTP == 'True': + if os.path.exists('%s/ImageBoot/%s/etc/vsftpd.conf' % (media, target)): + filename = media + '/ImageBoot/' + target + '/etc/vsftpd.conf' + if os.path.exists(filename): + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('listen=NO') != -1: + line = 'listen=YES\n' + elif line.find('listen_ipv6=YES') != -1: + line = 'listen_ipv6=NO\n' + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + os.system('echo "Repair ftp."') + + if SoftCam == 'True': + if os.path.exists('/etc/CCcam.cfg'): + cmd = 'cp -af /etc/CCcam.cfg %s/ImageBoot/%s/etc > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/tuxbox/config'): + cmd = 'cp -af /etc/tuxbox/config %s/ImageBoot/%s/etc/tuxbox > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied softcam files to the installed image..."') + + if MediaPortal == 'True': + if os.path.exists('' + extensions_path + 'MediaPortal'): + cmd = 'cp -af ' + extensions_path + 'MediaPortal %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af ' + extensions_path + 'mpgz %s/ImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/argparse.pyo %s/ImageBoot/%s/usr/lib/python2.7 > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/robotparser.pyo %s/ImageBoot/%s/usr/lib/python2.7 > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/site-packages/Crypto %s/ImageBoot/%s/usr/lib/python2.7/site-packages > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/site-packages/mechanize %s/ImageBoot/%s/usr/lib/python2.7/site-packages > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/site-packages/requests %s/ImageBoot/%s/usr/lib/python2.7/site-packages > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + cmd = 'cp -af /usr/lib/python2.7/site-packages/requests-2.11.1-py2.7.egg-info %s/ImageBoot/%s/usr/lib/python2.7/site-packages > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + + if not os.path.exists('%s/ImageBoot/%s/etc/enigma2' % (media, target)): + cmd = 'mkdir -p %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/enigma2/mp_2s4p'): + cmd = 'cp /etc/enigma2/mp_2s4p %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/enigma2/mp_config'): + cmd = 'cp /etc/enigma2/mp_config %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + if os.path.exists('/etc/enigma2/mp_pluginliste'): + cmd = 'cp /etc/enigma2/mp_pluginliste %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied MediaPortal..."') + elif not os.path.exists('' + extensions_path + 'MediaPortal'): + os.system('echo "MediaPortal not found."') + + if PiconR == 'True': + if os.path.exists('/usr/share/enigma2/picon'): + cmd = 'cp -af /usr/share/enigma2/picon %s/ImageBoot/%s/usr/share/enigma2' % (media, target) + rc = os.system(cmd) + os.system('echo "Copied picon..."') + elif not os.path.exists('/usr/share/enigma2/picon'): + os.system('echo "Picon flash not found."') + + if Kodi == 'True': + cmd = 'mkdir -p %s/ImageBoot/%s/home/root/.kodi > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if os.path.exists('/home/root/.kodi'): + os.system('echo "Kodi set ok."') + else: + if not os.path.exists('/home/root/.kodi'): + if not os.path.exists('/.multinfo'): + if os.path.exists('/media/hdd/.kodi'): + cmd = 'mv /media/hdd/.kodi /media/hdd/.kodi_flash; ln -sf "/media/hdd/.kodi_flash" "/home/root/.kodi"; ln -sf "/home/root/.kodi" "/media/hdd/.kodi" ' + rc = os.system(cmd) + os.system('echo "Kodi fix ok."') + else: + os.system('echo "Kodi not found.."') + else: + os.system('echo "Kodi path possible only from flash."') + else: + os.system('echo "Kodi not found."') + +# for all image: + if os.path.exists('%s/ImageBoot/%s/etc/rc.local' % (media, target)): + filename = '%s/ImageBoot/%s/etc/rc.local' % (media, target) + if os.path.exists(filename): + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('exit 0') != -1: + line = '\n' + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + cmd = 'echo -n "\n\n/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/userscript.sh \n\nexit 0" >> %s/ImageBoot/%s/etc/rc.local' % (media, target) + rc = os.system(cmd) + cmd = 'chmod 0755 %s/ImageBoot/%s/etc/rc.local' % (media, target) + rc = os.system(cmd) + + if os.path.exists('%s/ImageBoot/%s/etc/init.d/rc.local' % (media, target)): + filename = '%s/ImageBoot/%s/etc/init.d/rc.local' % (media, target) + if os.path.exists(filename): + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('exit 0') != -1: + line = '\n' + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + + cmd = 'echo -n "\n\n/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/userscript.sh \n\nexit 0" >> %s/ImageBoot/%s/etc/init.d/rc.local' % (media, target) + rc = os.system(cmd) + cmd = 'chmod 0755 %s/ImageBoot/%s/etc/init.d/rc.local' % (media, target) + rc = os.system(cmd) + + if not os.path.exists('%s/ImageBoot/%s/etc/init.d/rc.local' % (media, target)) and not os.path.exists('%s/ImageBoot/%s/etc/rc.local' % (media, target)) : + if os.path.exists('%s/ImageBoot/%s/etc/init.d' % (media, target)): +# cmd = 'ln -s %sImageBoot/%s/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/userscript.sh %sImageBoot/%s/etc/rcS.d/S99neo.local' % (media, +# target, +# media, +# target) + cmd = 'cp -af /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/userscript.sh %sImageBoot/%s/etc/rcS.d/S99neo.local' % (media, target) + rc = os.system(cmd) + cmd1 = 'chmod 0755 %s/ImageBoot/%s/etc/rcS.d/S99neo.local' % (media, target) + rc = os.system(cmd1) + elif not os.path.exists('%s/ImageBoot/%s/etc/init.d' % (media, target)): + os.system('echo "/etc/init.d not found."') + os.system('echo "Copied file neo_userscript.sh"') + + if not os.path.exists('' + getNeoLocation() + 'ImageBoot/.without_copying'): + if not os.path.exists('%s/ImageBoot/%s/etc/enigma2' % (media, target)): + cmd = 'mkdir -p %s/ImageBoot/%s/etc/enigma2' % (media, target) + rc = os.system(cmd) + cmd = 'touch %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd) + cmd = 'grep "config.Nims" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd) + cmd1 = 'grep "av.videomode.DVI" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd1) + cmd2 = 'grep "config.OpenWebif" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd2) + cmd3 = 'grep "config.osd" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd3) + cmd4 = 'grep "config.timezone.val" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd4) + cmd5 = 'grep "config.servicelist.startuproot" /etc/enigma2/settings >> %s/ImageBoot/%s/etc/enigma2/settings' % (media, target) + rc = os.system(cmd5) + cmd6 = 'grep "UUID=" /etc/fstab >> %s/ImageBoot/%s/etc/fstab' % (media, target) + rc = os.system(cmd6) + +##################################### + if not os.path.exists('' + media_target + '/boot/zImage.' + getBoxHostName() + '') and getCPUtype() == 'MIPS': + namefile = media + '/ImageBoot/' + target + '/etc/fstab' + namefile2 = namefile + '.tmp' + if os.path.exists(namefile2): + out = open(namefile2, 'w') + f = open(namefile, 'r') + for line in f.readlines(): + if line.find('/dev/mmcblk0p1') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p2') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p3') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p4') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p5') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p6') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p7') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p8') != -1: + line = '#' + line + elif line.find('/dev/mmcblk0p9') != -1: + line = '#' + line + elif line.find('/dev/root') != -1: + line = '#' + line + elif line.find('/dev/mtdblock1') != -1: + line = '#' + line + elif line.find('/dev/mtdblock2') != -1: + line = '#' + line + elif line.find('/dev/mtdblock3') != -1: + line = '#' + line + elif line.find('/dev/mtdblock4') != -1: + line = '#' + line + elif line.find('/dev/mtdblock5') != -1: + line = '#' + line + elif line.find('/dev/mtdblock6') != -1: + line = '#' + line + elif line.find('/dev/mtdblock7') != -1: + line = '#' + line + elif line.find('/dev/mtdblock8') != -1: + line = '#' + line + elif line.find('/dev/mtdblock9') != -1: + line = '#' + line + elif line.find('/dev/root') != -1: + line = '#' + line + out.write(line) + + f.close() + out.close() + os.rename(namefile2, namefile) + + tpmd = media + '/ImageBoot/' + target + '/etc/init.d/tpmd' + if os.path.exists(tpmd): + os.system('rm ' + tpmd) + + fname = media + '/ImageBoot/' + target + '/usr/lib/enigma2/python/Components/config.py' + if os.path.exists(fname): + fname2 = fname + '.tmp' + out = open(fname2, 'w') + f = open(fname, 'r') + for line in f.readlines(): + if line.find('if file(""/proc/stb/info/vumodel")') != -1: + line = '#' + line + out.write(line) + + f.close() + out.close() + os.rename(fname2, fname) + + targetfile = media + '/ImageBoot/' + target + '/etc/vsftpd.conf' + if os.path.exists(targetfile): + targetfile2 = targetfile + '.tmp' + out = open(targetfile2, 'w') + f = open(targetfile, 'r') + for line in f.readlines(): + if not line.startswith('nopriv_user'): + out.write(line) + + f.close() + out.close() + os.rename(targetfile2, targetfile) + + mypath = media + '/ImageBoot/' + target + '/usr/lib/opkg/info/' + cmd = 'mkdir -p %s/ImageBoot/%s/var/lib/opkg/info > /dev/null 2>&1' % (media, target) + rc = os.system(cmd) + if not os.path.exists(mypath): + mypath = media + '/ImageBoot/' + target + '/var/lib/opkg/info/' + for fn in os.listdir(mypath): + if fn.find('kernel-image') != -1 and fn.find('postinst') != -1: + filename = mypath + fn + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('/boot') != -1: + line = line.replace('/boot', '/boot > /dev/null 2>\\&1; exit 0') + out.write(line) + + if f.close(): + out.close() + os.rename(filename2, filename) + cmd = 'chmod -R 0755 %s' % filename + rc = os.system(cmd) + if fn.find('-bootlogo.postinst') != -1: + filename = mypath + fn + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('/boot') != -1: + line = line.replace('/boot', '/boot > /dev/null 2>\\&1; exit 0') + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + cmd = 'chmod -R 0755 %s' % filename + rc = os.system(cmd) + if fn.find('-bootlogo.postrm') != -1: + filename = mypath + fn + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('/boot') != -1: + line = line.replace('/boot', '/boot > /dev/null 2>\\&1; exit 0') + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + cmd = 'chmod -R 0755 %s' % filename + rc = os.system(cmd) + if fn.find('-bootlogo.preinst') != -1: + filename = mypath + fn + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('/boot') != -1: + line = line.replace('/boot', '/boot > /dev/null 2>\\&1; exit 0') + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + cmd = 'chmod -R 0755 %s' % filename + rc = os.system(cmd) + if fn.find('-bootlogo.prerm') != -1: + filename = mypath + fn + filename2 = filename + '.tmp' + out = open(filename2, 'w') + f = open(filename, 'r') + for line in f.readlines(): + if line.find('/boot') != -1: + line = line.replace('/boot', '/boot > /dev/null 2>\\&1; exit 0') + out.write(line) + + f.close() + out.close() + os.rename(filename2, filename) + cmd = 'chmod -R 0755 %s' % filename + rc = os.system(cmd) + + +# cmd = 'cp -f ' + extensions_path + 'NeoBoot/bin/hdd ' + getNeoLocation() + 'ImageBoot/%s/etc/init.d/hddusb' % target +# rc = os.system(cmd) + os.system('mkdir -p ' + media_target + '/media/hdd' + dev_null) + os.system('mkdir -p ' + media_target + '/media/usb' + dev_null) + os.system('mkdir -p ' + media_target + '/var/lib/opkg/info/' + dev_null) + os.system('touch ' + getNeoLocation() + 'ImageBoot/.data; echo "Data instalacji image" > ' + getNeoLocation() + 'ImageBoot/.data; echo " "; date > ' + getNeoLocation() + 'ImageBoot/.data') + os.system('mv -f ' + getNeoLocation() + 'ImageBoot/.data ' + getNeoLocation() + 'ImageBoot/%s/.data' % target) + cmd = 'touch /tmp/.init_reboot' + rc = os.system(cmd) + out = open(mediahome + '.neonextboot', 'w') + out.write(target) + out.close() + os.system('cp ' + getNeoLocation() + 'ImageBoot/.neonextboot ' + getNeoLocation() + 'ImageBoot/%s/.multinfo' % target) + out = open(mediahome + '.neonextboot', 'w') + out.write('Flash') + out.close() + if '.tar.xz' not in source and not os.path.exists('' + getNeoLocation() + '/ImageBoot/%s/etc/issue' % target): + os.system('echo ""; echo "No system installed! The reason for the installation error may be badly packed image files or it is not a system for your model."') + os.system('echo "The installed system may not start. Check the correctness of the installed image directory!!!"') + os.system('rm -r ' + getNeoLocation() + '/ImageBoot/%s' % target ) + + if os.path.exists('' + getNeoLocation() + 'ubi'): + os.system('rm -r ' + getNeoLocation() + 'ubi') + if os.path.exists('' + getNeoLocation() + 'image_cache/'): + os.system('rm -r ' + getNeoLocation() + 'image_cache') + if os.path.exists('' + getNeoLocation() + 'ImageBoot/.without_copying'): + os.system('rm -f ' + getNeoLocation() + 'ImageBoot/.without_copying') + + rc = RemoveUnpackDirs() + if os.path.exists('/tmp/init4'): + os.system('rm -f /tmp/init4; init 3') + + os.system('echo "End of installation:"; date +%T') + os.system('echo "If you want to save the installation process from the console press green."') + +def RemoveUnpackDirs(): + os.chdir(media + '/ImagesUpload') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/unpackedzip'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/unpackedzip') + + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/*.bin'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/*.bin') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/*.txt'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/*.txt') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/vuplus') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf4008'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/sf4008') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmio4k'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/osmio4k') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmio4kplus'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/osmio4kplus') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dm900'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/dm900') + + + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd60'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/hd60') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd61'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/hd61') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd51'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/hd51') + + + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/multibox'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/multibox') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/unforce_multibox.txt'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/unforce_multibox.txt') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/axas'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/axas') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/miraclebox') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/e4hd'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/e4hd') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/update') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/*.nfi'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/*.nfi') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/zgemma') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler1'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/formuler1') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler3'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/formuler3') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler4turbo'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/formuler4turbo') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/et*'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/et*') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/xpeedl*'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/xpeedl*') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmini'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/osmini') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/xp1000 '): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/xp1000 ') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dinobot '): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/dinobot ') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/e2/update'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/e2') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/et1x000'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/et1x000') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/protek4k'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/protek4k') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dm920 '): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/dm920 ') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/multibox'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/multibox ' + getNeoLocation() + 'ImagesUpload/multibox; rm -r ' + getNeoLocation() + 'ImagesUpload/multibox') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/octagon/sf8008'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/usb_update.bin ' + getNeoLocation() + 'ImagesUpload/octagon; rm -r ' + getNeoLocation() + 'ImagesUpload/octagon') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h7'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/h7; mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/h7') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/h7') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h9'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/h9; mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/h9') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/h9') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h9combo'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/force_h9combo_READ.ME ' + getNeoLocation() + 'ImagesUpload/h9combo; mv ' + getNeoLocation() + 'ImagesUpload/unforce_h9combo.txt ' + getNeoLocation() + 'ImagesUpload/h9combo') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/h9combo') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h10'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/force_h10_READ.ME ' + getNeoLocation() + 'ImagesUpload/h10; mv ' + getNeoLocation() + 'ImagesUpload/unforce_h10.txt ' + getNeoLocation() + 'ImagesUpload/h10') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/h10') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/uclan'): + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/usb_update.bin'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/usb_update.bin ' + getNeoLocation() + 'ImagesUpload/uclan') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/uclan') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/apploader.bin ' + getNeoLocation() + 'ImagesUpload/beyonwiz') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/beyonwiz') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/beyonwiz') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/beyonwiz') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/amiko'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/usb_update.bin ' + getNeoLocation() + 'ImagesUpload/amiko') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/apploader.bin ' + getNeoLocation() + 'ImagesUpload/amiko') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/amiko') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/amiko') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/amiko') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/usb_update.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/apploader.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/gigablue') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue'): + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/usb_update.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/apploader.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/bootargs.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('mv ' + getNeoLocation() + 'ImagesUpload/fastboot.bin ' + getNeoLocation() + 'ImagesUpload/gigablue') + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/gigablue') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz'): + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz') : + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/rootfs.tar.bz2') : + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.bz2') + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/et10000') : + rc = os.system('rm -r ' + getNeoLocation() + 'ImagesUpload/et10000') + + +def NEOBootExtract(source, target, ZipDelete, BlackHole): + RemoveUnpackDirs() + os.system('echo "Press green to hide Console or red to abort the installation\nInstallation started:"; date +%T;echo "Extracting the installation file..."') + + if os.path.exists('' + getNeoLocation() + 'ImageBoot/.without_copying'): + os.system('rm -f ' + getNeoLocation() + 'ImageBoot/.without_copying') + if os.path.exists('' + getNeoLocation() + 'image_cache'): + os.system('rm -rf ' + getNeoLocation() + 'image_cache') + + sourcefile = media + '/ImagesUpload/%s.zip' % source + sourcefile2 = media + '/ImagesUpload/%s.nfi' % source + + #Instalacja *.nfi + if os.path.exists(sourcefile2) is True: + if sourcefile2.endswith('.nfi'): + os.system('echo "Instalacja systemu skapowanego w plik nfi..."') + to = '' + getNeoLocation() + 'ImageBoot/' + target + cmd = 'mkdir %s > /dev/null 2<&1' % to + rc = os.system(cmd) + to = '' + getNeoLocation() + 'ImageBoot/' + target + cmd = 'chmod -R 0777 %s' % to + rc = os.system(cmd) + cmd = '' + extensions_path + 'NeoBoot/bin/nfidump ' + sourcefile2 + ' ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + if ZipDelete == 'True': + rc = os.system('rm -rf ' + sourcefile2) + else: + os.system('echo "NeoBoot keep the file: %s for reinstallation."' % sourcefile2) + #Instalacja *.zip + elif os.path.exists(sourcefile) is True: + os.system('unzip ' + sourcefile) + if ZipDelete == 'True': + os.system('rm -rf ' + sourcefile) + + #Instalacja MIPS + if getCPUtype() == 'MIPS': + if os.path.exists('' + getNeoLocation() + 'ubi') is False: + rc = os.system('mkdir ' + getNeoLocation() + 'ubi') + to = '' + getNeoLocation() + 'ImageBoot/' + target + cmd = 'mkdir %s > /dev/null 2<&1' % to + rc = os.system(cmd) + to = '' + getNeoLocation() + 'ImageBoot/' + target + cmd = 'chmod -R 0777 %s' % to + rc = os.system(cmd) + rootfname = 'rootfs.bin' + brand = '' + #NANDSIM + if os.path.exists('/lib/modules/%s/kernel/drivers/mtd/nand/nandsim.ko' % getKernelVersion()): + for i in range(0, 20): + mtdfile = '/dev/mtd' + str(i) + if os.path.exists(mtdfile) is False: + break + + mtd = str(i) + os.chdir(media + '/ImagesUpload') + #zgemma + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma'): + os.chdir('zgemma') + brand = 'zgemma' + rootfname = 'rootfs.bin' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/sh1'): + os.chdir('sh1') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/sh2'): + os.chdir('sh2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h2'): + os.chdir('h2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h3'): + os.chdir('h3') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h5'): + os.chdir('h5') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h7'): + os.chdir('h7') + + #miraclebox + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox'): + os.chdir('miraclebox') + brand = 'miraclebox' + rootfname = 'rootfs.bin' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/mini'): + os.chdir('mini') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/miniplus'): + os.chdir('miniplus') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/minihybrid'): + os.chdir('minihybrid') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/twin'): + os.chdir('twin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra'): + os.chdir('ultra') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/micro'): + os.chdir('micro') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/twinplus'): + os.chdir('twinplus') + #atemio + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio'): + os.chdir('atemio') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/5x00'): + os.chdir('5x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6000'): + os.chdir('6000') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6100'): + os.chdir('6100') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6200'): + os.chdir('6200') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/8x00'): + os.chdir('8x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/8x00'): + os.chdir('8x00') + #Xtrend + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et10000'): + os.chdir('et10000') + brand = 'et10000' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et9x00'): + os.chdir('et9x00') + brand = 'et9x00' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et8500'): + os.chdir('et8500') + brand = 'et8500' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et8000'): + os.chdir('et8000') + brand = 'et8000' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et7x00'): + os.chdir('et7x00') + brand = 'et7x00' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et6x00'): + os.chdir('et6x00') + brand = 'et6x00' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et5x00'): + os.chdir('et5x00') + brand = 'et5x00' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et4x00'): + os.chdir('et4x00') + brand = 'et4x00' + #formuler + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler1'): + os.chdir('formuler1') + brand = 'formuler1' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler2'): + os.chdir('formuler2') + brand = 'formuler2' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler3'): + os.chdir('formuler3') + brand = 'formuler3' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler4turbo'): + os.chdir('formuler4turbo') + brand = 'formuler4turbo' + #inne + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf3038'): + os.chdir('sf3038') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xpeedlx'): + os.chdir('xpeedlx') + brand = 'xpeedlx' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xpeedlx3'): + os.chdir('xpeedlx3') + brand = 'xpeedlx3' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xp1000'): + os.chdir('xp1000') + brand = 'xp1000' + #VuPlus + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus'): + os.chdir('vuplus') + brand = 'vuplus' + rootfname = 'root_cfe_auto.jffs2' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno'): + os.chdir('uno') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo'): + os.chdir('duo') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo'): + os.chdir('ultimo') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo'): + os.chdir('solo') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo2'): + os.chdir('duo2') + rootfname = 'root_cfe_auto.bin' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo2'): + os.chdir('solo2') + rootfname = 'root_cfe_auto.bin' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solose'): + os.chdir('solose') + rootfname = 'root_cfe_auto.bin' + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/zero'): + os.chdir('zero') + rootfname = 'root_cfe_auto.bin' + + #osmini + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmini'): + os.chdir('osmini') + brand = 'osmini' + + + #Instalacja image nandsim + os.system('echo "Instalacja - nandsim w toku..."') + rc = os.system('insmod /lib/modules/' + getKernelVersion() + '/kernel/drivers/mtd/nand/nandsim.ko cache_file=' + getNeoLocation() + 'image_cache first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=0x15;sleep 5' )#% getKernelVersion()) + cmd = 'dd if=%s of=/dev/mtdblock%s bs=2048' % (rootfname, mtd) + rc = os.system(cmd) + cmd = 'ubiattach /dev/ubi_ctrl -m %s -O 2048' % mtd + rc = os.system(cmd) + rc = os.system('mount -t ubifs ubi1_0 ' + getNeoLocation() + 'ubi') + os.chdir('/home/root') + cmd = 'cp -af ' + getNeoLocation() + 'ubi/* ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + rc = os.system('umount ' + getNeoLocation() + 'ubi') + cmd = 'ubidetach -m %s' % mtd + rc = os.system(cmd) + rc = os.system('rmmod nandsim') + rc = os.system('rm ' + getNeoLocation() + 'image_cache') + + if '.tar.xz' not in source and not os.path.exists('%s/ImageBoot/%s/etc/issue' % (media, target)): + os.system("echo 3 > /proc/sys/vm/drop_caches") + + os.system('echo ""; echo "Nie zainstalowano systemu ! Powodem b\xc5\x82\xc4\x99du instalacji mo\xc5\xbce by\xc4\x87 kernel-module-nandsim."') + os.system('echo "By uzyc innego narzedzia do rozpakowania image, ponow instalacje image jeszcze raz po restarcie tunera."') + os.system('echo "RESTART ZA 15 sekund..."') + + rc = os.system('rm -rf /lib/modules/%s/kernel/drivers/mtd/nand/nandsim.ko ' % getKernelVersion()) + + os.system('rm -r %s/ImageBoot/%s' % (media, target)) + os.system('sleep 5; init 4; sleep 5; init 3 ') + + #UBI_READER + elif os.path.exists('' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py'): + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/venton-hdx'): + os.chdir('venton-hdx') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/hde'): + os.chdir('hde') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/hdx'): + os.chdir('hdx') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/hdp'): + os.chdir('hdp') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox'): + os.chdir('miraclebox') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/mini'): + os.chdir('mini') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/miniplus'): + os.chdir('miniplus') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/minihybrid'): + os.chdir('minihybrid') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/twin'): + os.chdir('twin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra'): + os.chdir('ultra') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/micro'): + os.chdir('micro') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/microv2'): + os.chdir('microv2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/twinplus'): + os.chdir('twinplus') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/mini4k'): + os.chdir('mini4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra4k'): + os.chdir('ultra4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio'): + os.chdir('atemio') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/5x00'): + os.chdir('5x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6000'): + os.chdir('6000') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6100'): + os.chdir('6100') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/6200'): + os.chdir('6200') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/atemio/8x00'): + os.chdir('8x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xpeedlx'): + os.chdir('xpeedlx') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xpeedlx3'): + os.chdir('xpeedlx3') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/bwidowx'): + os.chdir('bwidowx') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/bwidowx2'): + os.chdir('bwidowx2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz'): + os.chdir('beyonwiz') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz/hdx'): + os.chdir('hdx') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz/hdp'): + os.chdir('hdp') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz/hde2'): + os.chdir('hde2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus'): + os.chdir('vuplus') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo'): + os.chdir('duo') + os.system('mv root_cfe_auto.jffs2 rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo'): + os.chdir('solo') + os.system('mv -f root_cfe_auto.jffs2 rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solose'): + os.chdir('solose') + os.system('mv -f root_cfe_auto.jffs2 rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo'): + os.chdir('ultimo') + os.system('mv -f root_cfe_auto.jffs2 rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno'): + os.chdir('uno') + os.system('mv -f root_cfe_auto.jffs2 rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo2'): + os.chdir('solo2') + os.system('mv -f root_cfe_auto.bin rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo2'): + os.chdir('duo2') + os.system('mv -f root_cfe_auto.bin rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/zero'): + os.chdir('zero') + os.system('mv -f root_cfe_auto.bin rootfs.bin') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo4k'): + os.chdir('solo4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno4k'): + os.chdir('uno4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo4k'): + os.chdir('ultimo4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo4k'): + os.chdir('duo4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo4kse'): + os.chdir('duo4kse') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/zero4k'): + os.chdir('zero4k') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno4kse'): + os.chdir('uno4kse') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et10000'): + os.chdir('et10000') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et9x00'): + os.chdir('et9x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et8500'): + os.chdir('et8500') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et8000'): + os.chdir('et8000') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et7x00'): + os.chdir('et7x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et6x00'): + os.chdir('et6x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et5x00'): + os.chdir('et5x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/et4x00'): + os.chdir('et4x00') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf8'): + os.chdir('sf') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf98'): + os.chdir('sf98') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf108'): + os.chdir('sf108') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf128'): + os.chdir('sf128') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf138'): + os.chdir('sf138') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf208'): + os.chdir('sf208') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf228'): + os.chdir('sf228') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf3038'): + os.chdir('sf3038') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf4008'): + os.chdir('sf4008') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/octagon/sf8008'): + os.chdir('sf8008') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue'): + os.chdir('gigablue') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue/quad'): + os.chdir('quad') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd2400'): + os.chdir('hd2400') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd51'): + os.chdir('hd51') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma'): + os.chdir('zgemma') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h3'): + os.chdir('h3') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h5'): + os.chdir('h5') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h7'): + os.chdir('h7') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/dm900'): + os.chdir('dm900') + #osmini + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmini'): + os.chdir('osmini') + #xp1000 + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/xp1000'): + os.chdir('xp1000') + + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler1'): + os.chdir('formuler1') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler2'): + os.chdir('formuler2') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler3'): + os.chdir('formuler3') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/formuler4turbo'): + os.chdir('formuler4turbo') + + #Instalacja image ubi_reader + os.system('echo "Instalacja - ubi_reader w toku..."') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/root_cfe_auto.*'): + os.system('mv -f root_cfe_auto.* rootfs.bin') + cmd = 'chmod 777 ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py' + rc = os.system(cmd) + cmd = 'python ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py rootfs.bin -o' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + os.chdir('/home/root') + os.system('mv ' + getNeoLocation() + 'ubi/rootfs/* ' + getNeoLocation() + 'ImageBoot/%s/' % target) + cmd = 'chmod -R +x ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + + else: + os.system('echo "NeoBoot wykrył błąd !!! Prawdopodobnie brak ubi_reader lub nandsim."') + +#ARM + elif getCPUtype() == 'ARMv7': + os.chdir('' + getNeoLocation() + 'ImagesUpload') + if os.path.exists('' + getNeoLocation() + 'ImagesUpload/h9/rootfs.ubi'): + os.chdir('h9') + os.system('mv -f rootfs.ubi rootfs.bin') + os.system('echo "Instalacja - ubi_reader w toku..."') + print '[NeoBoot] Extracting UBIFS image and moving extracted image to our target' + cmd = 'chmod 777 ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py' + rc = os.system(cmd) + cmd = 'python ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py rootfs.bin -o ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + os.chdir('/home/root') + cmd = 'cp -af -p ' + getNeoLocation() + 'ubi/rootfs/* ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'chmod -R +x ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'rm -rf ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/et10000/rootfs.bin'): + os.chdir('et10000') + os.system('mv -f rootfs.bin rootfs.bin') + os.system('echo "Instalacja - ubi_reader w toku..."') + print '[NeoBoot] Extracting UBIFS image and moving extracted image to our target' + cmd = 'chmod 777 ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py' + rc = os.system(cmd) + cmd = 'python ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py rootfs.bin -o ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + os.chdir('/home/root') + cmd = 'cp -af ' + getNeoLocation() + 'ubi/rootfs/* ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'chmod -R +x ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'rm -rf ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + #vuplus________________________ + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/solo4k'): + os.system('echo "Please wait. System installation VuPlus Solo4K."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/solo4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/solo4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno4k'): + os.system('echo "Please wait. System installation dla modelu VuPlus Uno4K."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/uno4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/uno4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/uno4kse'): + os.system('echo "Please wait. System installation VuPlus Uno4kse."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/uno4kse/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/uno4kse/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/zero4k'): + os.system('echo "Please wait. System installation VuPlus zero4K."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/zero4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/zero4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo4k'): + os.system('echo "Please wait. System installation VuPlus Ultimo4K."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/ultimo4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo4k'): + os.system('echo "Please wait. System installation VuPlus Duo4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/duo4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/duo4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/vuplus/duo4kse'): + os.system('echo "Please wait. System installation VuPlus Duo4kse."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/vuplus/duo4kse/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/vuplus/duo4kse/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + #________________________________ + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/sf4008'): + os.system('echo "Please wait. System installation Octagon SF4008."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/sf4008/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/sf4008/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/octagon/sf8008'): + os.system('echo "Please wait. System installation Octagon SF8008."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/octagon/sf8008/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/octagon/sf8008/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmio4k'): + os.system('echo "Please wait. System installation EDISION osmio4k"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/osmio4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/osmio4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/osmio4kplus'): + os.system('echo "Please wait. System installation EDISION osmio4kplus"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/osmio4kplus/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/osmio4kplus/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dm900'): + os.system('echo "Please wait. System installation Dreambox DM900."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/dm900/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/dm900/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dm920'): + os.system('echo "Please wait. System installation Dreambox DM920."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/dm920; tar -jxf ' + getNeoLocation() + 'ImagesUpload/dm920/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd51/rootfs.tar.bz2'): + os.system('echo "Please wait. System installation AX 4K Box HD51 "') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/hd51/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/hd51/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd60'): + os.system('echo "Please wait. System installation AX HD60 4K"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/hd60/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/hd60/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/hd61'): + os.system('echo "Please wait. System installation AX HD60 4K"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/hd61/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/hd61/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) +# elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/unpackedzip/hd61'): +# os.system('echo "Please wait. System installation AX 4K HD61"') +# cmd = 'chmod -R 777 ' + getNeoLocation() + 'ImagesUpload/unpackedzip; tar -jxf ' + getNeoLocation() + 'ImagesUpload/unpackedzip/hd61/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' +# rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/multibox'): + os.system('echo "Please wait. System installation AX multi twin or combo"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/multibox/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/multibox/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/axas/axasc4k'): + os.system('echo "Please wait. System installation Axas his c4k"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/axas/axasc4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/axas/axasc4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/e4hd'): + os.system('echo "Please wait. System installation Axas E4HD 4K Ultra w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/e4hd/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/e4hd/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue/quad4k'): + os.system('echo "Please wait. System installation GigaBlue quad4k"') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/gigablue/quad4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/gigablue/quad4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue/ue4k'): + os.system('echo "Please wait. System installation GigaBlue ue4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/gigablue/ue4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/gigablue/ue4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update/revo4k'): + os.system('echo "Please wait. System installation Revo4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/update/revo4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/update/revo4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update/force3uhd'): + os.system('echo "Please wait. System installation force3uhd."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/update/force3uhd/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/update/force3uhd/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update/galaxy4k'): + os.system('echo "Please wait. System installation Galaxy4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/update/galaxy4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/update/galaxy4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h7/rootfs.tar.bz2'): + os.system('echo "Please wait. System installation Zgemma H7."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/zgemma/h7/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/zgemma/h7/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/zgemma/h9/rootfs.tar.bz2'): + os.system('echo "Please wait. System installation Zgemma H9S ."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/zgemma/h9/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/zgemma/h9/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h9combo/rootfs.tar.bz2'): + os.system('echo "Please wait. System installation Zgemma h9combo ."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/h9combo/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/h9combo/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/h10/rootfs.tar.bz2'): + os.system('echo "Please wait. System installation Zgemma h10 ."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/h10/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/h10/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/mini4k'): + os.system('echo "Please wait. System installation Miraclebox mini4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/miraclebox/mini4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/miraclebox/mini4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra4k'): + os.system('echo "Please wait. System installation Miraclebox ultra4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/miraclebox/ultra4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update/lunix3-4k'): + os.system('echo "Please wait. System installation Qviart lunix3-4k w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/update/lunix3-4k; tar -jxf ' + getNeoLocation() + 'ImagesUpload/update/lunix3-4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/dinobot/u5'): + os.system('echo "Please wait. System installation dinobot w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/dinobot/u5; tar -jxf ' + getNeoLocation() + 'ImagesUpload/dinobot/u5/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/uclan/ustym4kpro'): + os.system('echo "Please wait. System installation ustym4kpro w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/uclan/ustym4kpro; tar -jxf ' + getNeoLocation() + 'ImagesUpload/uclan/ustym4kpro/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/et1x000'): + os.system('echo "Please wait. System installation GI ET-11000 4K w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/et1x000; tar -jxf ' + getNeoLocation() + 'ImagesUpload/et1x000/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/e2/update'): + os.system('echo "Please wait. System installation Ferguson Ariva 4K Combo w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/e2/update; tar -jxf ' + getNeoLocation() + 'ImagesUpload/e2/update/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/beyonwiz/v2'): + os.system('echo "Please wait. System installation beyonwiz v2 4K w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/beyonwiz/v2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/beyonwiz/v2/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/amiko/viper4k'): + os.system('echo "Please wait. System installation Amiko viper4k 4K w toku..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/amiko/viper4k; tar -jxf ' + getNeoLocation() + 'ImagesUpload/amiko/viper4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/update/tmtwin4k'): + os.system('echo "Please wait. System installation tmtwin4k."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/update/tmtwin4k/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/update/tmtwin4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue/trio4k'): + os.system('echo "Please wait. System installation trio4k 4K Combo..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/gigablue/trio4k; tar -jxf ' + getNeoLocation() + 'ImagesUpload/gigablue/trio4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/gigablue/ip4k'): + os.system('echo "Please wait. System installation gbip4k 4K..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/gigablue/ip4k; tar -jxf ' + getNeoLocation() + 'ImagesUpload/gigablue/ip4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/protek4k'): + os.system('echo "Please wait. System installation protek4k..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/protek4k; tar -jxf ' + getNeoLocation() + 'ImagesUpload/protek4k/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/multibox'): + os.system('echo "Please wait. System installation multibox..."') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/multibox; tar -jxf ' + getNeoLocation() + 'ImagesUpload/multibox/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.xz'): + os.system('echo "Please wait. System installation spakowanego w plik tar.xz w toku..."') + os.system('cp -af ' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.xz ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz; tar -jjxf ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.xz -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.gz'): + os.system('echo "Please wait. System installation spakowanego w plik tar.gz w toku..."') + os.system('cp -af ' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.gz ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz; /bin/tar -xzvf ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.bz2'): + os.system('echo "Please wait. System installation spakowanego w plik tar.bz2 w toku..."') + os.system('cp -af ' + getNeoLocation() + 'ImagesUpload/' + source + '.tar.bz2 ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.bz2') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.bz2; tar -jxf ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.bz2 -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/' + source + '.mb'): + os.system('echo "Please wait. System installation spakowanego w plik .mb w toku..."') + os.system('cp -af ' + getNeoLocation() + 'ImagesUpload/' + source + '.mb ' + getNeoLocation() + 'ImagesUpload/rootfs.tar.gz') + cmd = 'chmod 777 ' + getNeoLocation() + 'ImagesUpload/*.tar.gz; tar -xzvf ' + getNeoLocation() + 'ImagesUpload/*.tar.gz -C ' + getNeoLocation() + 'ImageBoot/' + target + ' > /dev/null 2>&1' + rc = os.system(cmd) + elif os.path.exists('' + getNeoLocation() + 'ImagesUpload/rootfs.bin'): + os.chdir('ImagesUpload') + os.system('mv -f rootfs.bin rootfs.bin') + os.system('echo "Instalacja - ubi_reader w toku..."') + print '[NeoBoot] Extracting UBIFS image and moving extracted image to our target' + cmd = 'chmod 777 ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py' + rc = os.system(cmd) + cmd = 'python ' + extensions_path + 'NeoBoot/ubi_reader/ubi_extract_files.py rootfs.bin -o ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + os.chdir('/home/root') + cmd = 'cp -af ' + getNeoLocation() + 'ubi/rootfs/* ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'chmod -R +x ' + getNeoLocation() + 'ImageBoot/' + target + rc = os.system(cmd) + cmd = 'rm -rf ' + getNeoLocation() + 'ubi' + rc = os.system(cmd) + + else: + os.system('echo "NeoBoot wykrył dłąd!!! Prawdopodobnie brak pliku instalacyjnego."') + + + if BlackHole == 'True': + if 'BlackHole' in source and os.path.exists('%s/ImageBoot/%s/usr/lib/enigma2/python/Blackhole' % (media, target)): + ver = source.replace('BlackHole-', '') + try: + text = ver.split('-')[0] + except: + text = '' + + cmd = 'mkdir ' + getNeoLocation() + 'ImageBoot/%s/boot/blackhole' % target + rc = os.system(cmd) + cmd = 'cp -f ' + extensions_path + 'NeoBoot/bin/version ' + getNeoLocation() + 'ImageBoot/%s/boot/blackhole' % target + rc = os.system(cmd) + cmd = 'mv ' + getNeoLocation() + 'ImageBoot/%s/usr/lib/enigma2/python/Blackhole/BhUtils.pyo ' + getNeoLocation() + 'ImageBoot/%s/usr/lib/enigma2/python/Blackhole/BhUtils.pyo.org' % (target, target) + rc = os.system(cmd) + cmd = 'cp -af ' + extensions_path + 'NeoBoot/bin/utilsbh ' + getNeoLocation() + 'ImageBoot/%s/usr/lib/enigma2/python/Blackhole/BhUtils.py' % target + rc = os.system(cmd) + localfile = '' + getNeoLocation() + 'ImageBoot/%s/boot/blackhole/version' % target + temp_file = open(localfile, 'w') + temp_file.write(text) + temp_file.close() + cmd = 'mv ' + getNeoLocation() + 'ImageBoot/%s/usr/bin/enigma2 ' + getNeoLocation() + 'ImageBoot/%s/usr/bin/enigma2-or' % (target, target) + rc = os.system(cmd) + fail = '' + getNeoLocation() + 'ImageBoot/%s/usr/bin/enigma2-or' % target + f = open(fail, 'r') + content = f.read() + f.close() + localfile2 = '' + getNeoLocation() + 'ImageBoot/%s/usr/bin/enigma2' % target + temp_file2 = open(localfile2, 'w') + temp_file2.write(content.replace('/proc/blackhole/version', '/boot/blackhole/version')) + temp_file2.close() + cmd = 'chmod -R 0755 %s' % localfile2 + rc = os.system(cmd) + cmd = 'rm -r ' + getNeoLocation() + 'ImageBoot/%s/usr/bin/enigma2-or' % target + rc = os.system(cmd) + return +#END diff --git a/NeoBoot/extract.pyo b/NeoBoot/extract.pyo new file mode 100644 index 0000000000000000000000000000000000000000..d459eef0594611cb2c2fa4eb1e6f63f2f2196077 GIT binary patch literal 60373 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 literal 0 HcmV?d00001 diff --git a/NeoBoot/neo_hd.png b/NeoBoot/neo_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..97243cea32a3c2b2f1025bc56f2c29651212acd4 GIT binary patch literal 15946 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 literal 0 HcmV?d00001 diff --git a/NeoBoot/neoinstal.mvi b/NeoBoot/neoinstal.mvi new file mode 100644 index 0000000000000000000000000000000000000000..fc4e3534f9e6aeb852a65a9e42ec8ad858f23db8 GIT binary patch literal 37500 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 BBuW4P literal 0 HcmV?d00001 diff --git a/NeoBoot/neologo.mvi b/NeoBoot/neologo.mvi new file mode 100644 index 0000000000000000000000000000000000000000..773c5cdeaa532cfec46cbea291d04bc0d8e83e71 GIT binary patch literal 42848 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
Ix5I4i#*X^wYL!)I6kYoi`2{`4vX^AJfe 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 O&ix*##>(69n*RpEVaDeG literal 0 HcmV?d00001 diff --git a/NeoBoot/neowait.mvi b/NeoBoot/neowait.mvi new file mode 100644 index 0000000000000000000000000000000000000000..dc4d38c9154de73f1b7c8832e8df7cc5f5c434b5 GIT binary patch literal 33830 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�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 literal 0 HcmV?d00001 diff --git a/NeoBoot/unpack.py b/NeoBoot/unpack.py new file mode 100644 index 0000000..3659d21 --- /dev/null +++ b/NeoBoot/unpack.py @@ -0,0 +1,336 @@ +# -*- coding: utf-8 -*- + +#from __init__ import _ +from Plugins.Extensions.NeoBoot.__init__ import _ +from Plugins.Extensions.NeoBoot.files.stbbranding import getNeoLocation, getKernelVersionString, getKernelImageVersion, getCPUtype, getCPUSoC, getImageNeoBoot, getBoxVuModel, getBoxHostName, getTunerModel +from enigma import getDesktop +from enigma import eTimer +from Screens.Screen import Screen +from Screens.Console import Console +from Screens.MessageBox import MessageBox +from Screens.ChoiceBox import ChoiceBox +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Screens.Standby import TryQuitMainloop +from Components.About import about +from Components.Sources.List import List +from Components.Button import Button +from Components.ActionMap import ActionMap, NumberActionMap +from Components.GUIComponent import * +from Components.MenuList import MenuList +from Components.Input import Input +from Components.Label import Label +from Components.ProgressBar import ProgressBar +from Components.ScrollLabel import ScrollLabel +from Components.Pixmap import Pixmap, MultiPixmap +from Components.config import * +from Components.ConfigList import ConfigListScreen +from Tools.LoadPixmap import LoadPixmap +from Tools.Directories import fileExists, pathExists, createDir, resolveFilename, SCOPE_PLUGINS +from os import system, listdir, mkdir, chdir, getcwd, rename as os_rename, remove as os_remove, popen +from os.path import dirname, isdir, isdir as os_isdir +import os +import time +if fileExists('/etc/vtiversion.info') or fileExists('/usr/lib/python3.8') and fileExists('/.multinfo'): + from Screens.Console import Console +else: + from Plugins.Extensions.NeoBoot.files.neoconsole import Console +LinkNeoBoot = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot' + +def getDS(): + s = getDesktop(0).size() + return (s.width(), s.height()) + +def isFHD(): + desktopSize = getDS() + return desktopSize[0] == 1920 + +def isHD(): + desktopSize = getDS() + return desktopSize[0] >= 1280 and desktopSize[0] < 1920 + +def isUHD(): + desktopSize = getDS() + return desktopSize[0] >= 1920 and desktopSize[0] < 3840 + +class InstallImage(Screen, ConfigListScreen): + if isFHD(): + skin = """ + + + + + + + + + + + + + \ + """ + else: + skin = """ + + + + + + + + + + + + + + + """ + + def __init__(self, session): + Screen.__init__(self, session) + fn = 'NewImage' + sourcelist = [] + for fn in os.listdir('%sImagesUpload' % getNeoLocation() ): + if fn.find('.zip') != -1: + fn = fn.replace('.zip', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.tar.xz') != -1: + fn = fn.replace('.tar.xz', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.tar.gz') != -1: + fn = fn.replace('.tar.gz', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.tar.bz2') != -1: + fn = fn.replace('.tar.bz2', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.mb') != -1: + fn = fn.replace('.mb', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.nfi') != -1: + fn = fn.replace('.nfi', '') + sourcelist.append((fn, fn)) + continue + if len(sourcelist) == 0: + sourcelist = [('None', 'None')] + self.source = ConfigSelection(choices=sourcelist) + self.target = ConfigText(fixed_size=False) + self.stopenigma = ConfigYesNo(default=False) + self.CopyFiles = ConfigYesNo(default=True) + self.CopyKernel = ConfigYesNo(default=True) + self.TvList = ConfigYesNo(default=False) + self.LanWlan = ConfigYesNo(default=False) + self.Sterowniki = ConfigYesNo(default=False) + self.InstallSettings = ConfigYesNo(default=False) + self.ZipDelete = ConfigYesNo(default=False) + self.RepairFTP = ConfigYesNo(default=False) + self.SoftCam = ConfigYesNo(default=False) + self.MediaPortal = ConfigYesNo(default=False) + self.PiconR = ConfigYesNo(default=False) + self.Kodi = ConfigYesNo(default=False) + self.BlackHole = ConfigYesNo(default=False) + self.target.value = '' + self.curselimage = '' + try: + if self.curselimage != self.source.value: + self.target.value = self.source.value[:-13] + self.curselimage = self.source.value + except: + pass + + self.createSetup() + ConfigListScreen.__init__(self, self.list, session=session) + self.source.addNotifier(self.typeChange) + self['actions'] = ActionMap(['OkCancelActions', + 'ColorActions', + 'CiSelectionActions', + 'VirtualKeyboardActions'], {'cancel': self.cancel, + 'red': self.cancel, + 'green': self.imageInstall, + 'yellow': self.HelpInstall, + 'blue': self.openKeyboard}, -2) + self['key_green'] = Label(_('Install')) + self['key_red'] = Label(_('Cancel')) + self['key_yellow'] = Label(_('Help')) + self['key_blue'] = Label(_('Keyboard')) + self['HelpWindow'] = Pixmap() + self['HelpWindow'].hide() + + def createSetup(self): + self.list = [] + self.list.append(getConfigListEntry(_('Source Image file'), self.source)) + self.list.append(getConfigListEntry(_('Image Name'), self.target)) + self.list.append(getConfigListEntry(_('Stop E2 processes during installation?'), self.stopenigma)) + self.list.append(getConfigListEntry(_('Copy files from Flash to the installed image ?'), self.CopyFiles )) + self.list.append(getConfigListEntry(_('Copy the kernel of the installed system (recommended ?'), self.CopyKernel )) + self.list.append(getConfigListEntry(_('Copy the channel list ?'), self.TvList)) + self.list.append(getConfigListEntry(_('Copy network settings LAN-WLAN ?'), self.LanWlan)) + self.list.append(getConfigListEntry(_('Copy the drivers ? (Recommended only other image.)'), self.Sterowniki)) + self.list.append(getConfigListEntry(_('Copy Settings to the new Image'), self.InstallSettings)) + self.list.append(getConfigListEntry(_('Delete Image zip after Install ?'), self.ZipDelete)) + self.list.append(getConfigListEntry(_('Repair FTP ? (Recommended only other image if it does not work.)'), self.RepairFTP)) + self.list.append(getConfigListEntry(_('Copy config SoftCam ?'), self.SoftCam)) + self.list.append(getConfigListEntry(_('Copy MediaPortal ?'), self.MediaPortal)) + self.list.append(getConfigListEntry(_('Copy picon flash to image install ?'), self.PiconR)) + self.list.append(getConfigListEntry(_('Transfer kodi settings ?'), self.Kodi)) + self.list.append(getConfigListEntry(_('Path BlackHole ? (Not recommended for VuPlus)'), self.BlackHole)) + + def HelpInstall(self): + self.session.open(HelpInstall) + + def typeChange(self, value): + self.createSetup() + self['config'].l.setList(self.list) + if self.curselimage != self.source.value: + self.target.value = self.source.value[:-13] + self.curselimage = self.source.value + + def openKeyboard(self): + sel = self['config'].getCurrent() + if sel: + if sel == self.target: + if self['config'].getCurrent()[1].help_window.instance is not None: + self['config'].getCurrent()[1].help_window.hide() + self.vkvar = sel[0] + if self.vkvar == _('Image Name'): + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title=self['config'].getCurrent()[0], text=self['config'].getCurrent()[1].value) + return + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + self['config'].getCurrent()[1].setValue(callback) + self['config'].invalidate(self['config'].getCurrent()) + return + + def imageInstall(self): + pluginpath = '' + LinkNeoBoot + '' + myerror = '' + source = self.source.value.replace(' ', '') + target = self.target.value.replace(' ', '') + for fn in os.listdir('%sImageBoot' % getNeoLocation()): + if fn == target: + myerror = _('Sorry, an Image with the name ') + target + _(' is already installed.\n Please try another name.') + continue + + if source == 'None': + myerror = _('You have to select one Image to install.\nPlease, upload your zip file in the folder: %sImagesUpload and select the image to install.') + if target == '': + myerror = _('You have to provide a name for the new Image.') + if target == 'Flash': + myerror = _('Sorry this name is reserved. Choose another name for the new Image.') + if len(target) > 30: + myerror = _('Sorry the name of the new Image is too long.') + if myerror: + myerror + self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO) + else: + myerror + message = "echo -e '" + message += _('NeoBot started installing new image.\n') + message += _('The installation process may take a few minutes.\n') + message += _('Please: DO NOT reboot your STB and turn off the power.\n') + message += _('Please, wait...\n') + message += "'" + cmd1 = 'python ' + pluginpath + '/ex_init.py' + cmd = '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s ' % (cmd1, + source, + target.replace(' ', '.'), + str(self.stopenigma.value), + str(self.CopyFiles.value), + str(self.CopyKernel.value), + str(self.TvList.value), + str(self.LanWlan.value), + str(self.Sterowniki.value), + str(self.InstallSettings.value), + str(self.ZipDelete.value), + str(self.RepairFTP.value), + str(self.SoftCam.value), + str(self.MediaPortal.value), + str(self.PiconR.value), + str(self.Kodi.value), + str(self.BlackHole.value)) + print '[NEO-BOOT]: ', cmd + from Plugins.Extensions.NeoBoot.plugin import PLUGINVERSION + self.session.open(Console, _('NeoBoot v.%s - Install new image') % PLUGINVERSION, [message, cmd]) + + def cancel(self): + self.close() + + +class HelpInstall(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + """ + else: + skin = """ + + """ + __module__ = __name__ + + def __init__(self, session): + Screen.__init__(self, session) + self['lab1'] = ScrollLabel('') + self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'DirectionActions'], {'back': self.close, + 'ok': self.close, + 'up': self['lab1'].pageUp, + 'left': self['lab1'].pageUp, + 'down': self['lab1'].pageDown, + 'right': self['lab1'].pageDown}) + self['lab1'].hide() + self.updatetext() + + def updatetext(self): + + message = _('Source Image file') + message += _(' - Select the software to be installed with the cursor (left or right).\n\n') + + message += _('Image Name') + message += _(' - to change, press blue on the remote control.\n\n') + + message += _('Copy files from Flash to the installed image ?') + message += _(' - this checking this option on it nothing will be copied from the image flash to the installed image in neoboot.\n\n') + + message += _('Copy the kernel of the installed system (recommended ?') + message += _('- after selecting this option, the kernel of the installed image will be copied to neoboot, only recommended for STB vuplus\n\n') + + message += _('Copy the channel list ?') + message += _(' - Option to copy channel list from flash to image installed in neoboot.\n\n') + + message += _('Copy mounting disks ? (Recommended)') + message += _(' - the option transfers mounts to the image installed in neoboot from the flashlight, recommended only if you are installing an image from a different model than you have.\n\n') + + message += _('Copy network settings LAN-WLAN ?') + message += _(' - the option moves files with the settings for lan and wlan.\n\n') + + message += _('Copy the drivers ? (Recommended only other image.)') + message += _(' - Option to copy drivers to the image installed in neoboot from the flashlight, recommended only if you are installing an image from a different model than you have.\n\n') + + message += _('Copy Settings to the new Image') + message += _(' - the option copies the software settings from the flashlight to the system being installed in the neobot.\n\n') + + message += _('Delete Image zip after Install ?') + message += _(' - po instalacji, opcja kasuje plik zip image z katalogu ImagesUpload.\n\n') + + message += _('Repair FTP ? (Recommended only other image if it does not work.)') + message += _(' - the option in some cases repairs the File Transfer Protocol connection in the installed image.\n\n') + + message += _('Copy config SoftCam ?') + message += _(' - the option copies oscam configi and cccam, openpli default.\n\n') + + message += _('Copy picon flash to image install ?') + message += _(' - cpuy picon from flash to image install in neoboot\n\n') + + message += _('Path BlackHole ? (Not recommended for VuPlus)') + message += _(' - option for image blackhole, helps to run BH in neoboot\n\n') + + self['lab1'].show() + self['lab1'].setText(message) + \ No newline at end of file diff --git a/NeoBoot/usedskin.py b/NeoBoot/usedskin.py new file mode 100644 index 0000000..ba6c362 --- /dev/null +++ b/NeoBoot/usedskin.py @@ -0,0 +1,62 @@ + +from Screens.Screen import Screen +from Components.Pixmap import Pixmap +import os + +# skin /neoskins/matrix/matrix_skin.py - mod.gutosie + +### ImageChooseFULLHD +ImageChooseFULLHD =""" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Default + + +Format:%A + + +Format:%e. %b. + + + + +""" diff --git a/NeoBoot/usedskin.pyo b/NeoBoot/usedskin.pyo new file mode 100644 index 0000000000000000000000000000000000000000..d0c86574d8602c106a8baf68532f1712311ed094 GIT binary patch literal 8335 zcmdT}+iu%N5T)XzD1^31f1nju1n>hZad}r_8CC2GE|8`{>>@y3TuNL~gqK`_T*Y>N zrJvcyKD4u>NG>lnWXEzGIi^GLvS((_&YYdy`RCj2zkmPm*GyV}9>L#V;5V`0;K9F+ zL?kKfNbfsRho3)^$RjD-k>2lQ=Q|R4EWLj$d2oCpc{|ea?h|-4_zyn29rz#n3J%A! z7~`lse-m7U?(%hV^rIy8x_e1_xfi)19?7pUeMu?%Ep&Z+u%I--a&JkKfCV%f$*Q8t zy(IVuH=?1YDoAzUi#c)qWF()@U&FJphhw=nb!TUOOjnV2KnaaU@=x`uLpyk z2cC~vFQKb=25&nF7=e*u9Kquw`IS4xL>zc%D`q*gYT1gd!N4?PBYEm3R@*1l3rRWZyQu#Y25Ug+F&EdUS4V^f1`O&68`7i&Wap0m>I8Gz)@|M;c| z*i{w?A;@f)(P$p{bsIFJYJ+Bi5dp*D5f1zXc*KMOvM7{B0iP%#Q#byddJx)VLC^n) z4sqy4Uc1Gcgrw%FV@&XjVGoG44r#+-!Yyd5*@o)8gm~oGj!6Ja%jo(p@Yo`aZgF}2 zmD6})(h{*8fAO^V@|^#wnq$C`J0+MiY@E)J>v)FKnNVYviE2@4*q*v2AMZ-a!VD5A z>nNrM;ms&(4mW3PZvS=}TjUI3(isg4?7}rBayFiG_hLbt0YES@1VhC_MF@tL@$d}* zw50(02@4j;Vx(l|bmK;@I$2t^z}@68vWv72+EG=&<;_f3N{DqyZwVj> zPg^bCWti!#x$AhH;mcEWIypMb>=wuY%xMi-s`;;gYeE9f=(a_;+702hatxg7sF0?% zj#j@R+Hyfv7Gq>psGvhK(jgaR>M4z2GZVFCm;2R5HT)$vn)qRk)HCTr!!NLBz-<7~a62Icuc7znaHe{s$DtSti9$~m3Jb0{p)9$GwG)4rjZ z%1|v(BUlqya3(qcPVc(NPT6UQqg7c6>ao00p*1b%^VmSo?#KcgCjV!N0=@{?C)sev zYI(|Lr!n?QNag%8AjoE+fk94jo^HUCEg*!vhoe@ED%u>RFdw&o@e&h4&)Y!q_SZx4 z0f)rgj8txNp>B1}PHU~u3l|e!v;C538E@r>IPGm$SGCR6 zOxex8u6);%US7b~`v;|(P5CC;W0;V&OMB3|4e}7}X$ek7P0=39;NdRgV+_Bj_;41B z<{(w$d7$i$*jcx8llbsWj;rW4Pq#$wnr;ofqz{#v@cmin$|KG_zNEhnN3MD=al95# zTtYQQLTG3};j8EkVJr&@yJLf#Y#S=y0uY7*Racus`5v54=+q_sgH_CTyH0}ex(zvG z>7f02zbg}rT3Vg+urN1q*$eIfA)I+a$Qy-uuM=tzq<#kmJc{)J$AW-4X6V` zXJ;q$1Ya6uW3QC3w{wbaR-Ix)>lI>~aW!*_1{%A?DYZuA zz4~NAl9l-R*|?g8=6vIj#F^I_iWm4^Gp}016zI|bN0L4UB1!I zzAJXylm2mf=`DOCvG3tf4+KkbhyhOE)U5* moZh16x=OIe`>cIv&wdTB*bAw*B6yz