From a3495651f0346cac7cbcf941b22239dc8e287a52 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Wed, 22 Jun 2011 17:57:37 +0000 Subject: [PATCH] *Added support for starting .wbfs game files from fat32/ntfs partitions on a sector size > 512 (tested with 4096) *modified libcustomfat and ntfs fragment fetch function to support >512 bytes per sector *Added new ehcmodule (thanks rodries) *Added real support of using both ports simultaniously without shutting down the other (thanks rodries for the ehcmodule works on this). There is no longer the limitation that the settings have to be on SD card for this. (ONLY HERMES CIOS) *Moved a few settings to Feature Settings and added a new Hard Drive Settings *Changed Wiinnertag path to only point to the path and not to the file. You must correct the path manually in custom path settings or reset you configs for this change or Winnertag won't work!! *Removed a few compile warnings for devkitPPC R23 --- HBC/META.XML | 4 +- Languages/czech.lang | 35 +- Languages/danish.lang | 38 +- Languages/dutch.lang | 38 +- Languages/english.lang | 29 +- Languages/finnish.lang | 29 +- Languages/french.lang | 38 +- Languages/german.lang | 38 +- Languages/hungarian.lang | 32 +- Languages/italian.lang | 38 +- Languages/japanese.lang | 38 +- Languages/korean.lang | 29 +- Languages/norwegian.lang | 35 +- Languages/polish.lang | 32 +- Languages/portuguese_br.lang | 32 +- Languages/portuguese_pt.lang | 38 +- Languages/russian.lang | 32 +- Languages/schinese.lang | 38 +- Languages/spanish.lang | 32 +- Languages/swedish.lang | 32 +- Languages/tchinese.lang | 38 +- Languages/thai.lang | 29 +- Languages/turkish.lang | 29 +- gui.pnproj | 2 +- source/Controls/DeviceHandler.cpp | 270 ++- source/Controls/DeviceHandler.hpp | 25 +- source/Controls/PartitionHandle.cpp | 23 +- source/Controls/PartitionHandle.h | 7 +- source/GUI/Text.cpp | 2 - source/StartUpProcess.cpp | 12 +- source/libs/libfat/libcustomfat.a | Bin 80260 -> 80328 bytes source/libs/libntfs/libcustomntfs.a | Bin 586762 -> 586874 bytes source/libs/libwbfs/libwbfs.c | 6 +- source/libs/libwbfs/libwbfs.h | 2 +- source/menu/menu_install.cpp | 2 - source/menu/menu_partition_selection.cpp | 12 +- source/mload/modules/ehcmodule_5.c | 1887 +++++++++-------- source/mload/modules/ehcmodule_5.h | 4 +- source/network/HTML_Stream.cpp | 2 - source/network/Wiinnertag.cpp | 20 +- source/network/networkops.cpp | 2 +- source/prompts/PromptWindows.cpp | 9 +- source/settings/CCategoryList.cpp | 8 +- source/settings/CCategoryList.hpp | 2 +- source/settings/CGameCategories.cpp | 5 +- source/settings/CSettings.cpp | 2 +- source/settings/SettingsEnums.h | 1 + source/settings/menus/FeatureSettingsMenu.cpp | 60 +- source/settings/menus/GUISettingsMenu.cpp | 37 - source/settings/menus/GameSettingsMenu.cpp | 20 +- source/settings/menus/GlobalSettings.cpp | 57 +- source/settings/menus/HardDriveSM.cpp | 271 +++ source/settings/menus/HardDriveSM.hpp | 47 + source/settings/menus/LoaderSettings.cpp | 255 --- source/settings/menus/LoaderSettings.hpp | 5 - source/settings/menus/ParentalControlSM.cpp | 60 +- source/settings/menus/SettingsMenu.hpp | 1 + source/system/IosLoader.cpp | 1 + source/usbloader/GameBooter.cpp | 16 +- source/usbloader/GameList.cpp | 4 +- source/usbloader/MountGamePartition.cpp | 22 +- source/usbloader/frag.c | 6 +- source/usbloader/frag.h | 2 +- source/usbloader/usbstorage2.c | 139 +- source/usbloader/usbstorage2.h | 16 +- source/usbloader/wbfs.cpp | 71 +- source/usbloader/wbfs.h | 2 +- source/usbloader/wbfs/wbfs_base.cpp | 10 +- source/usbloader/wbfs/wbfs_base.h | 3 +- source/usbloader/wbfs/wbfs_ext.h | 4 +- source/usbloader/wbfs/wbfs_fat.cpp | 49 +- source/usbloader/wbfs/wbfs_fat.h | 2 +- source/usbloader/wbfs/wbfs_ntfs.h | 4 +- source/usbloader/wbfs/wbfs_rw.c | 5 +- source/usbloader/wbfs/wbfs_rw.h | 2 +- source/usbloader/wbfs/wbfs_wbfs.cpp | 18 +- source/usbloader/wbfs/wbfs_wbfs.h | 4 +- source/xml/WiiTDB.cpp | 2 +- 78 files changed, 2391 insertions(+), 1862 deletions(-) create mode 100644 source/settings/menus/HardDriveSM.cpp create mode 100644 source/settings/menus/HardDriveSM.hpp diff --git a/HBC/META.XML b/HBC/META.XML index a4ced02b..d72cf3e2 100644 --- a/HBC/META.XML +++ b/HBC/META.XML @@ -2,8 +2,8 @@ USB Loader GX USB Loader GX Team - 2.1 r1092 - 201106202346 + 2.1 r1093 + 201106221731 Loads games from USB-devices USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times. diff --git a/Languages/czech.lang b/Languages/czech.lang index 208d2d3e..573e2102 100644 --- a/Languages/czech.lang +++ b/Languages/czech.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: David Jelinek (djelinek@hotmail.com) e->e,r->r,u->u, c->c \n" "Language-Team: r1056 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Automatický start síte" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "Cesta pro BCA kódy" @@ -231,6 +228,9 @@ msgstr "Zablokovat GUI nastavení" msgid "Block HBC Menu" msgstr "Zablokovat HBC nabídku" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Zablokovat opetovné zavedení IOS" @@ -390,6 +390,9 @@ msgstr "Nelze otevrít wiitdb.xml." msgid "Could not save." msgstr "Nelze uložit." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Stažení obalu" @@ -611,6 +614,9 @@ msgstr "Opustit kam?" msgid "Extracting files..." msgstr "Rozbaluji soubory..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Neúspešné formátování" @@ -768,6 +774,9 @@ msgstr "Hlavní nastavení" msgid "HOME Menu" msgstr "Hlavní menu" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Cesta pro Homebrew aplikace" @@ -812,18 +821,18 @@ msgstr "Vložte Wii disk" msgid "Install" msgstr "Instalace" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Chyba pri instalaci" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Nainstalovat hru" -msgid "Install directories" -msgstr "Instalacní adresáre" - -msgid "Install partitions" -msgstr "Instalacní oddíly" - msgid "Installing content... Ok!" msgstr "Instaluji obsah... Ok!" @@ -1598,6 +1607,12 @@ msgstr "z " msgid "seconds left" msgstr "sekund zbývá" +#~ msgid "Install directories" +#~ msgstr "Instalacní adresáre" + +#~ msgid "Install partitions" +#~ msgstr "Instalacní oddíly" + #~ msgid " Wad Saved as:" #~ msgstr " WAD uložen jako:" diff --git a/Languages/danish.lang b/Languages/danish.lang index 8ab15e9b..bb5c0643 100644 --- a/Languages/danish.lang +++ b/Languages/danish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Fox888[dk]\n" "Language-Team: [dk]\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "AutoInit netværk" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Automatisk skift af port er gjort on the fly. For denne mulighed skal du skifte alle brugerdefinerede stier til SD kortet først, for ellers kan det skade dit fil system." - msgid "BCA Codes Path" msgstr "Sti til BCA koder" @@ -231,6 +228,9 @@ msgstr "Bloker Gui indstillinger" msgid "Block HBC Menu" msgstr "Bloker HBC menu" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blokér IOS-reload" @@ -390,6 +390,9 @@ msgstr "Kunne ikke åbne wiitdb.xml" msgid "Could not save." msgstr "Kunne ikke gemme." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Cover-download" @@ -611,6 +614,9 @@ msgstr "Hvorhen?" msgid "Extracting files..." msgstr "Pakker filer ud..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formateringen mislykkedes" @@ -768,6 +774,9 @@ msgstr "Almindelig Indstillinger" msgid "HOME Menu" msgstr "" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Sti til homebrew-programmer" @@ -812,18 +821,18 @@ msgstr "Indsæt en Wii-DVD!" msgid "Install" msgstr "Installér" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Installationsfejl!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Installér nyt spil" -msgid "Install directories" -msgstr "Installer mappe" - -msgid "Install partitions" -msgstr "Installationspartitioner" - msgid "Installing content... Ok!" msgstr "Installerer indhold... Ok!" @@ -1598,6 +1607,15 @@ msgstr "af" msgid "seconds left" msgstr "sekunder tilbage" +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Automatisk skift af port er gjort on the fly. For denne mulighed skal du skifte alle brugerdefinerede stier til SD kortet først, for ellers kan det skade dit fil system." + +#~ msgid "Install directories" +#~ msgstr "Installer mappe" + +#~ msgid "Install partitions" +#~ msgstr "Installationspartitioner" + #~ msgid " Wad Saved as:" #~ msgstr " WAD gemt som:" diff --git a/Languages/dutch.lang b/Languages/dutch.lang index 5fb7cb0c..7a385944 100644 --- a/Languages/dutch.lang +++ b/Languages/dutch.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2011-06-20 07:25+0100\n" "Last-Translator: glowy\n" "Language-Team: tj_cool, glowy\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Netwerk Auto init." -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Automatisch poort wisselen word zonder onderbreking gedaan. Je moet eerst alle aangepaste paden veranderen naar SD-kaart voor deze optie anders kan het je bestandssysteem beschadigen." - msgid "BCA Codes Path" msgstr "Locatie BCA codes" @@ -231,6 +228,9 @@ msgstr "Blokkeer GUI Instellingen" msgid "Block HBC Menu" msgstr "Blokkeer HBC Menu" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Stop IOS herladen" @@ -390,6 +390,9 @@ msgstr "Kan wiitdb.xml niet openen." msgid "Could not save." msgstr "Kan niet opslaan." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Download hoesjes" @@ -611,6 +614,9 @@ msgstr "Stoppen naar?" msgid "Extracting files..." msgstr "Bestanden uitpakken..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formatteren mislukt" @@ -768,6 +774,9 @@ msgstr "Globale instellingen" msgid "HOME Menu" msgstr "" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Locatie homebrew apps" @@ -812,18 +821,18 @@ msgstr "Voer een Wii disk in!" msgid "Install" msgstr "Installeer" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Installatiefout!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Spel installeren" -msgid "Install directories" -msgstr "Installeer mappen" - -msgid "Install partitions" -msgstr "Installatie partitie" - msgid "Installing content... Ok!" msgstr "Installeren inhoud... Ok!" @@ -1597,3 +1606,12 @@ msgstr "van" msgid "seconds left" msgstr "seconden over" + +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Automatisch poort wisselen word zonder onderbreking gedaan. Je moet eerst alle aangepaste paden veranderen naar SD-kaart voor deze optie anders kan het je bestandssysteem beschadigen." + +#~ msgid "Install directories" +#~ msgstr "Installeer mappen" + +#~ msgid "Install partitions" +#~ msgstr "Installatie partitie" diff --git a/Languages/english.lang b/Languages/english.lang index eb68ebae..12d6d1e1 100644 --- a/Languages/english.lang +++ b/Languages/english.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "" +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "" @@ -812,18 +821,18 @@ msgstr "" msgid "Install" msgstr "" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "" -msgid "Install directories" -msgstr "" - -msgid "Install partitions" -msgstr "" - msgid "Installing content... Ok!" msgstr "" diff --git a/Languages/finnish.lang b/Languages/finnish.lang index 58325e10..8e974cad 100644 --- a/Languages/finnish.lang +++ b/Languages/finnish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: c64rmx\n" "Language-Team: \n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Autom. verkon käynnistys" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blokkaa IOS:in uudelleenlataus" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Kansien lataus" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "" +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formatointi ei onnistunut" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Apps polku" @@ -812,18 +821,18 @@ msgstr "Aseta Wii-levy!" msgid "Install" msgstr "Asenna" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Asennusvirhe!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Asenna peli" -msgid "Install directories" -msgstr "" - -msgid "Install partitions" -msgstr "" - msgid "Installing content... Ok!" msgstr "Asennetaan sisältöä... Ok!" diff --git a/Languages/french.lang b/Languages/french.lang index f39f63fa..731b7df2 100644 --- a/Languages/french.lang +++ b/Languages/french.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Kin8\n" "Language-Team: Badablek, Amour, ikya, Cyan & Kin8\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "AutoInit réseau" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Vous devez placer tous les dossiers personnalisés sur la carte SD avant d'utiliser cette option, sinon vous risquez d'endommager les données de vos disques USB." - msgid "BCA Codes Path" msgstr "Dossier codes BCA" @@ -231,6 +228,9 @@ msgstr "Bloquer Config. GUI" msgid "Block HBC Menu" msgstr "Bloquer Menu HBC" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Bloquer IOS reload" @@ -390,6 +390,9 @@ msgstr "Impossible d'ouvrir wiitdb.xml." msgid "Could not save." msgstr "Sauvegarde impossible." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Téléchargement Jaquettes" @@ -611,6 +614,9 @@ msgstr "Quitter vers où ?" msgid "Extracting files..." msgstr "Extraction des fichiers..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Échec du formatage" @@ -768,6 +774,9 @@ msgstr "Paramètres" msgid "HOME Menu" msgstr "Menu HOME" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Dossier Apps Homebrew" @@ -812,18 +821,18 @@ msgstr "Insérez un disque Wii !" msgid "Install" msgstr "Installer" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Erreur à l'installation !" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Installer un jeu" -msgid "Install directories" -msgstr "Dossiers d'installation" - -msgid "Install partitions" -msgstr "Installation" - msgid "Installing content... Ok!" msgstr "Installation contenu... OK!" @@ -1597,3 +1606,12 @@ msgstr "sur" msgid "seconds left" msgstr "secondes restantes" + +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Vous devez placer tous les dossiers personnalisés sur la carte SD avant d'utiliser cette option, sinon vous risquez d'endommager les données de vos disques USB." + +#~ msgid "Install directories" +#~ msgstr "Dossiers d'installation" + +#~ msgid "Install partitions" +#~ msgstr "Installation" diff --git a/Languages/german.lang b/Languages/german.lang index 764fe8e4..a0d127ba 100644 --- a/Languages/german.lang +++ b/Languages/german.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 17:00+0100\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2010-07-03 17:35-0800\n" "Last-Translator: TheRealVisitor\n" "Language-Team: Bertilax, Snoozer, wishmasterf, ZEN.13, TheRealVisitor\n" @@ -183,9 +183,6 @@ msgstr "Auto" msgid "AutoInit Network" msgstr "Autoinit. Netzwerk" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Automatische Portumschaltung wird jetzt direkt zur Programmlaufzeit durchgeführt. Für diese Option müssen zuerst alle eigenen Pfade auf die SD Karte verweisen, da ansonsten das Dateisystem beschädigt werden könnte." - msgid "BCA Codes Path" msgstr "BCA Codes" @@ -231,6 +228,9 @@ msgstr "Blocke GUI-Optionen" msgid "Block HBC Menu" msgstr "Blocke HBC Menü" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blocke IOS-Neuladen" @@ -390,6 +390,9 @@ msgstr "Konnte wiitdb.xml nicht öffnen." msgid "Could not save." msgstr "Es konnte nicht gespeichert werden." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Welche Cover herunterladen?" @@ -611,6 +614,9 @@ msgstr "Beenden zum..." msgid "Extracting files..." msgstr "Entpacke Dateien..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formatieren fehlgeschlagen" @@ -768,6 +774,9 @@ msgstr "Globale Einstellungen" msgid "HOME Menu" msgstr "HOME Menü" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Apps" @@ -812,18 +821,18 @@ msgstr "Eine Wii Disk einlegen!" msgid "Install" msgstr "Installieren" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Installationsfehler!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Spiel installieren" -msgid "Install directories" -msgstr "Installationsart" - -msgid "Install partitions" -msgstr "Partitionen installier." - msgid "Installing content... Ok!" msgstr "Installiere Inhalt... OK!" @@ -1597,3 +1606,12 @@ msgstr "von" msgid "seconds left" msgstr "Sekunden verbleiben" + +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Automatische Portumschaltung wird jetzt direkt zur Programmlaufzeit durchgeführt. Für diese Option müssen zuerst alle eigenen Pfade auf die SD Karte verweisen, da ansonsten das Dateisystem beschädigt werden könnte." + +#~ msgid "Install directories" +#~ msgstr "Installationsart" + +#~ msgid "Install partitions" +#~ msgstr "Partitionen installier." diff --git a/Languages/hungarian.lang b/Languages/hungarian.lang index 86b2ef06..a6404389 100644 --- a/Languages/hungarian.lang +++ b/Languages/hungarian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-12-29 11:05+0100\n" "Last-Translator: Springdale\n" "Language-Team: Tusk, Springdale\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Hálózat AutoInit" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "BCA kód útvonal" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "IOS újratöltés blokkolása" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "A mentés nem sikerült." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Boritó Letöltés" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Fájlok kicsomagolása..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formázás sikertelen" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "HOME Menü" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Útvonal" @@ -812,17 +821,17 @@ msgstr "Helyezz be Wii lemezt!" msgid "Install" msgstr "Telepítés" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Telepítési Hiba!" -msgid "Install a game" -msgstr "Játék telepítése" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Partíciók telepítése" +msgid "Install a game" +msgstr "Játék telepítése" msgid "Installing content... Ok!" msgstr "Tartalom telepítése... Ok!" @@ -1598,6 +1607,9 @@ msgstr "./" msgid "seconds left" msgstr "hátralévõ másodperc" +#~ msgid "Install partitions" +#~ msgstr "Partíciók telepítése" + #~ msgid " Wad Saved as:" #~ msgstr "Wad elmentve mint:" diff --git a/Languages/italian.lang b/Languages/italian.lang index 406b15f2..f7842fe2 100644 --- a/Languages/italian.lang +++ b/Languages/italian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2011-03-10 21:00+0200\n" "Last-Translator: Cambo \n" "Language-Team: Cambo\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Inizializz. Rete Automatica" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Il cambio automatico di porta è istantaneo. Per utilizzare questa opzione si devono preliminarmente impostare tutti i percorsi verso la scheda SD, altrimenti si rischia di danneggiare il filesystem del disco." - msgid "BCA Codes Path" msgstr "Cart. Codici BCA" @@ -231,6 +228,9 @@ msgstr "Blocca Interf. Grafica" msgid "Block HBC Menu" msgstr "Blocca Menu HBC" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blocca Ricarica cIOS" @@ -390,6 +390,9 @@ msgstr "Impossibile aprire il file wiitdb.xml." msgid "Could not save." msgstr "Impossibile salvare." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Scaricamento Copertine" @@ -611,6 +614,9 @@ msgstr "Uscita verso?" msgid "Extracting files..." msgstr "Sto scompattando i file..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Errore Formattazione" @@ -768,6 +774,9 @@ msgstr "Impostazioni Generali" msgid "HOME Menu" msgstr "Menu HOME" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Cart. Applic. Homebrew" @@ -812,18 +821,18 @@ msgstr "Inserisci un Disco nella Wii!" msgid "Install" msgstr "Installa" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Errore Installazione!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Installa un gioco" -msgid "Install directories" -msgstr "Installa Cartelle" - -msgid "Install partitions" -msgstr "Installa Partizioni" - msgid "Installing content... Ok!" msgstr "Sto installando il contenuto... Ok!" @@ -1598,6 +1607,15 @@ msgstr "di" msgid "seconds left" msgstr "secondi mancanti" +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Il cambio automatico di porta è istantaneo. Per utilizzare questa opzione si devono preliminarmente impostare tutti i percorsi verso la scheda SD, altrimenti si rischia di danneggiare il filesystem del disco." + +#~ msgid "Install directories" +#~ msgstr "Installa Cartelle" + +#~ msgid "Install partitions" +#~ msgstr "Installa Partizioni" + #~ msgid " Wad Saved as:" #~ msgstr " Wad salvato con il nome:" diff --git a/Languages/japanese.lang b/Languages/japanese.lang index ed7cf63c..849dcec3 100644 --- a/Languages/japanese.lang +++ b/Languages/japanese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: hosigumayuugi\n" "Language-Team: hosigumayuugi, papa, ichiroling\n" @@ -183,9 +183,6 @@ msgstr "自動" msgid "AutoInit Network" msgstr "自動ネット接続" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "ポートの自動切換を使用する場合ファイルシステムの破損を避けるため、独自のパス設定は全てSDカードにしてください" - msgid "BCA Codes Path" msgstr "BCAコード" @@ -231,6 +228,9 @@ msgstr "基本設定を制限" msgid "Block HBC Menu" msgstr "HBCメニューを制限" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "IOS再読み込み防止" @@ -390,6 +390,9 @@ msgstr "wiitdb.xmlを開けませんでした" msgid "Could not save." msgstr "保存できませんでした" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "何をダウンロードしますか" @@ -611,6 +614,9 @@ msgstr "どこに移動しますか?" msgid "Extracting files..." msgstr "解凍中です…" +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "初期化に失敗しました" @@ -768,6 +774,9 @@ msgstr "基本設定" msgid "HOME Menu" msgstr "HOMEボタンメニュー" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrewアプリ" @@ -812,18 +821,18 @@ msgstr "Wiiディスクを入れて下さい!" msgid "Install" msgstr "インストール" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "インストールエラー!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "ゲームをインストール" -msgid "Install directories" -msgstr "フォルダの構成" - -msgid "Install partitions" -msgstr "保存する領域" - msgid "Installing content... Ok!" msgstr "コンテンツをインストール...成功!" @@ -1597,3 +1606,12 @@ msgstr "中" msgid "seconds left" msgstr "秒で完了" + +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "ポートの自動切換を使用する場合ファイルシステムの破損を避けるため、独自のパス設定は全てSDカードにしてください" + +#~ msgid "Install directories" +#~ msgstr "フォルダの構成" + +#~ msgid "Install partitions" +#~ msgstr "保存する領域" diff --git a/Languages/korean.lang b/Languages/korean.lang index 64dccafd..adfca39c 100644 --- a/Languages/korean.lang +++ b/Languages/korean.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: nextos@korea.com\n" "Language-Team: \n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "자동네트웍설정" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "IOS 재로딩 막음" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "표지 다운로드" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "" +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "포맷 실패" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "HOME 메뉴" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "홈브류 경로" @@ -812,18 +821,18 @@ msgstr "Wii 디스크를 넣으세요!" msgid "Install" msgstr "설치" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "설치 에러!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "게임을 설치할까요" -msgid "Install directories" -msgstr "" - -msgid "Install partitions" -msgstr "" - msgid "Installing content... Ok!" msgstr "컨텐츠 인스톨중...성공!" diff --git a/Languages/norwegian.lang b/Languages/norwegian.lang index cb15f098..c0a00053 100644 --- a/Languages/norwegian.lang +++ b/Languages/norwegian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: raschi\n" "Language-Team: raschi\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Autostart nettverk" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "BCA kode sti" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blokkér IOS Reload" @@ -390,6 +390,9 @@ msgstr "Kan ikke åpne wiitdb.xml." msgid "Could not save." msgstr "Kan ikke lagre." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Cover nedlasting" @@ -611,6 +614,9 @@ msgstr "Avslutt til?" msgid "Extracting files..." msgstr "Pakker ut filer..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Feil ved formatering" @@ -768,6 +774,9 @@ msgstr "Globale innstillinger" msgid "HOME Menu" msgstr "HOME Meny" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Apps sti" @@ -812,18 +821,18 @@ msgstr "Sett inn en Wii plate!" msgid "Install" msgstr "Installér" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Installasjonsfeil!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Installér et spill" -msgid "Install directories" -msgstr "Installasjonsmapper" - -msgid "Install partitions" -msgstr "Installasjonspartisjoner" - msgid "Installing content... Ok!" msgstr "Installerer innhold... OK!" @@ -1598,6 +1607,12 @@ msgstr "av" msgid "seconds left" msgstr "sekunder gjenstår" +#~ msgid "Install directories" +#~ msgstr "Installasjonsmapper" + +#~ msgid "Install partitions" +#~ msgstr "Installasjonspartisjoner" + #~ msgid " Wad Saved as:" #~ msgstr " WAD lagret som:" diff --git a/Languages/polish.lang b/Languages/polish.lang index f656d972..483f17a1 100644 --- a/Languages/polish.lang +++ b/Languages/polish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: ziom666 (zadania_prog@vp.pl)\n" "Language-Team: \n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Autoinicjalizacja sieci" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "Sciezka kodow BCA" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blokoj przeladowanie IOS" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "Nie mozna zapisac" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Pobierz okladki" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Rozpakowywanie plikow..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Nie udalo sie sformatowac" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "Menu" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Sciezka plikacji homebrew" @@ -812,17 +821,17 @@ msgstr "Wloz plyte Wii!" msgid "Install" msgstr "Zainstaluj" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Blad instalacji" -msgid "Install a game" -msgstr "Zainstaluj gre" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Zainstaluj partycje" +msgid "Install a game" +msgstr "Zainstaluj gre" msgid "Installing content... Ok!" msgstr "Instalowanie zawartosci...Ok!" @@ -1598,6 +1607,9 @@ msgstr "z" msgid "seconds left" msgstr "sekund pozostalo" +#~ msgid "Install partitions" +#~ msgstr "Zainstaluj partycje" + #~ msgid " Wad Saved as:" #~ msgstr " Wad zapisano jako:" diff --git a/Languages/portuguese_br.lang b/Languages/portuguese_br.lang index 69d2d260..d571f3d2 100644 --- a/Languages/portuguese_br.lang +++ b/Languages/portuguese_br.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-23 18:52+0200\n" "Last-Translator: aniemotion\n" "Language-Team: boto12, aniemotion\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Auto-iniciar Rede" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "Caminho do BCA Codes" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Bloquear reload do IOS" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "Não foi possível gravar." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Download de Capas" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Extraindo arquivos..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Falha ao formatar" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "Menu Inicial" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Pasta Apps Homebrew" @@ -812,17 +821,17 @@ msgstr "Insira um Disco do Wii!" msgid "Install" msgstr "Instalar" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Erro de Instalação!" -msgid "Install a game" -msgstr "Instalar um jogo" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Instalare partições" +msgid "Install a game" +msgstr "Instalar um jogo" msgid "Installing content... Ok!" msgstr "Instalando conteúdo... Ok!" @@ -1598,6 +1607,9 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" +#~ msgid "Install partitions" +#~ msgstr "Instalare partições" + #~ msgid " Wad Saved as:" #~ msgstr " Wad salvo como:" diff --git a/Languages/portuguese_pt.lang b/Languages/portuguese_pt.lang index 1e6b1e4c..e66cf985 100644 --- a/Languages/portuguese_pt.lang +++ b/Languages/portuguese_pt.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2011-06-14 00:00-0000\n" "Last-Translator: pplucky \n" "Language-Team: Sky8000, pplucky\n" @@ -183,9 +183,6 @@ msgstr "Auto" msgid "AutoInit Network" msgstr "Auto-iniciar Rede" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "Mudança automática de porta é feita na hora. Para esta opção, tem de alterar antes todos os caminhos personalizados para o cartão SD ou pode danificar o sistema de ficheiros." - msgid "BCA Codes Path" msgstr "Cam. Códigos BCA" @@ -231,6 +228,9 @@ msgstr "Bloquear Config. GUI" msgid "Block HBC Menu" msgstr "Bloquear Menu HBC" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Bloquear Reload do IOS" @@ -390,6 +390,9 @@ msgstr "Não foi possível abrir o wiitdb.xml" msgid "Could not save." msgstr "Não foi possível gravar." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Download de Capas" @@ -611,6 +614,9 @@ msgstr "Sair para onde?" msgid "Extracting files..." msgstr "Extraindo ficheiros..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Falha ao formatar" @@ -768,6 +774,9 @@ msgstr "Configurações Globais" msgid "HOME Menu" msgstr "Menú Inicial" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Cam. Apps Homebrew" @@ -812,18 +821,18 @@ msgstr "Insira um Disco da Wii!" msgid "Install" msgstr "Instalar" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Erro de Instalação!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Instalar um jogo" -msgid "Install directories" -msgstr "Instalar directórios" - -msgid "Install partitions" -msgstr "Instalar partições" - msgid "Installing content... Ok!" msgstr "Instalando conteúdo... Ok!" @@ -1597,3 +1606,12 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" + +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "Mudança automática de porta é feita na hora. Para esta opção, tem de alterar antes todos os caminhos personalizados para o cartão SD ou pode danificar o sistema de ficheiros." + +#~ msgid "Install directories" +#~ msgstr "Instalar directórios" + +#~ msgid "Install partitions" +#~ msgstr "Instalar partições" diff --git a/Languages/russian.lang b/Languages/russian.lang index e5efec3b..004758f9 100644 --- a/Languages/russian.lang +++ b/Languages/russian.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: nikolai_ca\n" "Language-Team: Kir, alendit, nikolai_ca\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "АвтоИнициализация Сети" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "Путь к кодам BCA" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Блокировать перезагрузку IOS" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "Не могу сохранить." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Скачать обложку" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Распаковка файлов..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Форматирование не удалось" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "Домашнее Меню" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Путь к хоумбрю-программам" @@ -812,17 +821,17 @@ msgstr "Вставьте диск Wii!" msgid "Install" msgstr "Установка" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Ошибка установки!" -msgid "Install a game" -msgstr "Установить игру" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Установить разделы" +msgid "Install a game" +msgstr "Установить игру" msgid "Installing content... Ok!" msgstr "Установка контента... ОК!" @@ -1598,6 +1607,9 @@ msgstr "из" msgid "seconds left" msgstr "секунд осталось" +#~ msgid "Install partitions" +#~ msgstr "Установить разделы" + #~ msgid " Wad Saved as:" #~ msgstr " Wad сохранен как:" diff --git a/Languages/schinese.lang b/Languages/schinese.lang index 126f0078..f48ea0cc 100644 --- a/Languages/schinese.lang +++ b/Languages/schinese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: knife.hu kavid emul8ion\n" "Language-Team: kavid\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "自动检测网络" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "接口自动切换已生效。你需要立即更改所有自定义路径为SD卡,否则可能会损坏USB分区上的文件系统。" - msgid "BCA Codes Path" msgstr "BCA代码路径" @@ -231,6 +228,9 @@ msgstr "图形界面设置" msgid "Block HBC Menu" msgstr "HBC菜单" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "阻止IOS重新载入" @@ -390,6 +390,9 @@ msgstr "无法打开wiitdb.xml." msgid "Could not save." msgstr "无法保存" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "下载封面" @@ -611,6 +614,9 @@ msgstr "退出到哪里?" msgid "Extracting files..." msgstr "正在解压缩文件" +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "格式化失败" @@ -768,6 +774,9 @@ msgstr "全局设置" msgid "HOME Menu" msgstr "主菜单" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "自制程序路径" @@ -812,18 +821,18 @@ msgstr "插入 Wii 光盘!" msgid "Install" msgstr "安装" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "安装错误!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "安装游戏" -msgid "Install directories" -msgstr "安装目录" - -msgid "Install partitions" -msgstr "安装分区" - msgid "Installing content... Ok!" msgstr "正在安装程序主体... 完成!" @@ -1598,6 +1607,15 @@ msgstr "的" msgid "seconds left" msgstr "剩余秒数" +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "接口自动切换已生效。你需要立即更改所有自定义路径为SD卡,否则可能会损坏USB分区上的文件系统。" + +#~ msgid "Install directories" +#~ msgstr "安装目录" + +#~ msgid "Install partitions" +#~ msgstr "安装分区" + #~ msgid " Wad Saved as:" #~ msgstr "WAD 保存为:" diff --git a/Languages/spanish.lang b/Languages/spanish.lang index c11734e9..a12159e9 100644 --- a/Languages/spanish.lang +++ b/Languages/spanish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: SirPalax\n" "Language-Team: Penn, SirPalax\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "AutoIniciar la Red" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "Ruta Códigos BCA" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Impedir recarga IOS" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "¡No se pudo guardar!" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Descarga de Carátulas" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Extrayendo archivos..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "No se ha podido formatear" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "Menú HOME" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Ruta Apps Homebrew" @@ -812,17 +821,17 @@ msgstr "¡Inserta un Disco Wii!" msgid "Install" msgstr "Instalar" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "¡Error de Instalación!" -msgid "Install a game" -msgstr "Instalar un juego" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Instalar particiones" +msgid "Install a game" +msgstr "Instalar un juego" msgid "Installing content... Ok!" msgstr "Instalando contenido... ¡Correcto!" @@ -1598,6 +1607,9 @@ msgstr "de" msgid "seconds left" msgstr "segundos restantes" +#~ msgid "Install partitions" +#~ msgstr "Instalar particiones" + #~ msgid " Wad Saved as:" #~ msgstr " WAD guardado como:" diff --git a/Languages/swedish.lang b/Languages/swedish.lang index bd48d025..f105cc51 100644 --- a/Languages/swedish.lang +++ b/Languages/swedish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2010-01-19 17:39+0200\n" "Last-Translator: Katsurou\n" "Language-Team: Katsurou, pirateX\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Autoinitiera Nätverk" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "BCA kodssökväg" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "Blockera IOS omladdning" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "Kunde inte spara." +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Omslagsnedladdning" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Packar upp filer..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Formatering misslyckad" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "Hemmeny" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Apps" @@ -812,17 +821,17 @@ msgstr "Sätt i en Wii-skiva!" msgid "Install" msgstr "Installera" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Fel vid installering!" -msgid "Install a game" -msgstr "Installera ett spel" - -msgid "Install directories" +msgid "Install Partitions" msgstr "" -msgid "Install partitions" -msgstr "Installera partitioner" +msgid "Install a game" +msgstr "Installera ett spel" msgid "Installing content... Ok!" msgstr "Installerar innehåll... Ok!" @@ -1598,6 +1607,9 @@ msgstr "av" msgid "seconds left" msgstr "sekunder kvar" +#~ msgid "Install partitions" +#~ msgstr "Installera partitioner" + #~ msgid " Wad Saved as:" #~ msgstr "Wad sparad som:" diff --git a/Languages/tchinese.lang b/Languages/tchinese.lang index 85ef83a5..00489788 100644 --- a/Languages/tchinese.lang +++ b/Languages/tchinese.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2010-02-15 21:00+0800\n" "Last-Translator: Jane.H\n" "Language-Team: kyogc, Miller, Mika Li, Jane.H\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "自動檢查網路" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "立即生效連接埠自動切換功能。首先你需要在這選項改變所有自訂路徑為SD卡,否則可能會損壞檔案系統。" - msgid "BCA Codes Path" msgstr "BAC代碼路徑" @@ -231,6 +228,9 @@ msgstr "封鎖介面設定" msgid "Block HBC Menu" msgstr "封鎖 HBC 選單" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "封鎖 IOS 重新載入" @@ -390,6 +390,9 @@ msgstr "無法開啟wiitdb.xml。" msgid "Could not save." msgstr "無法儲存" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "下載封面" @@ -611,6 +614,9 @@ msgstr "退出到?" msgid "Extracting files..." msgstr "提取檔案中..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "格式化失敗" @@ -768,6 +774,9 @@ msgstr "整體設定" msgid "HOME Menu" msgstr "主選單" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "HBC 應用程式路徑" @@ -812,18 +821,18 @@ msgstr "插入 Wii 光碟!" msgid "Install" msgstr "安裝" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "安裝錯誤!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "安裝遊戲" -msgid "Install directories" -msgstr "安裝目錄" - -msgid "Install partitions" -msgstr "安裝磁區" - msgid "Installing content... Ok!" msgstr "正在安裝內容...完成!" @@ -1598,6 +1607,15 @@ msgstr "的" msgid "seconds left" msgstr "剩餘秒數" +#~ msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." +#~ msgstr "立即生效連接埠自動切換功能。首先你需要在這選項改變所有自訂路徑為SD卡,否則可能會損壞檔案系統。" + +#~ msgid "Install directories" +#~ msgstr "安裝目錄" + +#~ msgid "Install partitions" +#~ msgstr "安裝磁區" + #~ msgid " has been Saved. The text has not been verified. Some of the code may not work right with each other. If you experience trouble, open the text in a real text editor for more information." #~ msgstr "已經被儲存。內容尚未驗證。部分代碼可能無法作用。如果你遇到問題,請用文字編輯器打開文本文件以獲得更多的信息。" diff --git a/Languages/thai.lang b/Languages/thai.lang index 7f4d70e1..c493813d 100644 --- a/Languages/thai.lang +++ b/Languages/thai.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: Nitro_subzero \n" "Language-Team: Nitro_subzero\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "ทำการเชื่อมต่อเครือข่าย" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "โหลดบล๊อค IOS อีกครั้ง" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "บันทึกไม่ได้" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "ดาวน์โหลดปก" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "กำลังขยายไฟล์..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "ฟอร์แมตไม่ได้" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "เมนู HOME" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "ที่เก็บโปรแกรม Homebrew" @@ -812,18 +821,18 @@ msgstr "ใส่แผ่น Wii !" msgid "Install" msgstr "ติดตั้ง" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "ผิดพลาดขณะติดตั้ง!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "ติดตั้งเกมส์" -msgid "Install directories" -msgstr "" - -msgid "Install partitions" -msgstr "" - msgid "Installing content... Ok!" msgstr "ติดตั้งเนื้อหา... สำเร็จ!" diff --git a/Languages/turkish.lang b/Languages/turkish.lang index 6c5bdbc1..4254692e 100644 --- a/Languages/turkish.lang +++ b/Languages/turkish.lang @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: USB Loader GX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-18 11:39+0200\n" +"POT-Creation-Date: 2011-06-22 19:31+0200\n" "PO-Revision-Date: 2009-10-01 01:00+0200\n" "Last-Translator: omercigingelini\n" "Language-Team: omercigingelini\n" @@ -183,9 +183,6 @@ msgstr "" msgid "AutoInit Network" msgstr "Ağı ototanımla" -msgid "Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem." -msgstr "" - msgid "BCA Codes Path" msgstr "BCA Kod Yolu" @@ -231,6 +228,9 @@ msgstr "" msgid "Block HBC Menu" msgstr "" +msgid "Block Hard Drive Settings" +msgstr "" + msgid "Block IOS Reload" msgstr "IOS Yüklemesini Engelle" @@ -390,6 +390,9 @@ msgstr "" msgid "Could not save." msgstr "Kaydedilemedi" +msgid "Could not write to:" +msgstr "" + msgid "Cover Download" msgstr "Kapak Indirme" @@ -611,6 +614,9 @@ msgstr "" msgid "Extracting files..." msgstr "Dosyalar çıkarılıyor..." +msgid "Failed" +msgstr "" + msgid "Failed formating" msgstr "Biçimlendirme başarısız" @@ -768,6 +774,9 @@ msgstr "" msgid "HOME Menu" msgstr "HOME Menü" +msgid "Hard Drive Settings" +msgstr "" + msgid "Homebrew Apps Path" msgstr "Homebrew Yazılımlarının Yolu" @@ -812,18 +821,18 @@ msgstr "Bir Wii Diski Takın!" msgid "Install" msgstr "Kur" +msgid "Install Directories" +msgstr "" + msgid "Install Error!" msgstr "Kurulum Hatasi!" +msgid "Install Partitions" +msgstr "" + msgid "Install a game" msgstr "Oyun kur" -msgid "Install directories" -msgstr "" - -msgid "Install partitions" -msgstr "" - msgid "Installing content... Ok!" msgstr "İçerik kuruluyor.. OK!" diff --git a/gui.pnproj b/gui.pnproj index 0215da41..1fd2f361 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/Controls/DeviceHandler.cpp b/source/Controls/DeviceHandler.cpp index 82eaba86..ab192046 100644 --- a/source/Controls/DeviceHandler.cpp +++ b/source/Controls/DeviceHandler.cpp @@ -81,11 +81,14 @@ void DeviceHandler::UnMountAll() if(sd) delete sd; - if(usb) - delete usb; + if(usb0) + delete usb0; + if(usb1) + delete usb1; sd = NULL; - usb = NULL; + usb0 = NULL; + usb1 = NULL; } bool DeviceHandler::Mount(int dev) @@ -105,7 +108,12 @@ bool DeviceHandler::IsInserted(int dev) return SD_Inserted() && sd->IsMounted(0); else if(dev >= USB1 && dev <= USB8) - return USB_Inserted() && usb->IsMounted(dev-USB1); + { + int portPart = PartitionToPortPartition(dev-USB1); + PartitionHandle *usb = instance->GetUSBHandleFromPartition(dev-USB1); + if(usb) + return usb->IsMounted(portPart); + } return false; } @@ -135,86 +143,52 @@ bool DeviceHandler::MountSD() return sd->Mount(0, DeviceName[SD], true); } -const DISC_INTERFACE * DeviceHandler::GetUSBInterface() -{ - if(IOS_GetVersion() < 200) - return &__io_usbstorage; - - return &__io_usbstorage2; -} - static inline bool USBSpinUp() { - bool started = false; + bool started0 = true; + bool started1 = true; int retries = 400; - const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface(); + const DISC_INTERFACE * handle0 = NULL; + const DISC_INTERFACE * handle1 = NULL; + if(Settings.USBPort == 0 || Settings.USBPort == 2) + handle0 = DeviceHandler::GetUSB0Interface(); + if(Settings.USBPort == 1 || Settings.USBPort == 2) + handle1 = DeviceHandler::GetUSB1Interface(); + // wait 20 sec for the USB to spin up...stupid slow ass HDD do { - started = (handle->startup() && handle->isInserted()); - if(started) break; + if(handle0) + started0 = (handle0->startup() && handle0->isInserted()); + + if(handle1) + started1 = (handle1->startup() && handle1->isInserted()); + + if(started0 && started1) break; usleep(50000); } while(--retries > 0); - return started; + return (started0 && started1); } -bool DeviceHandler::SetUSBPort(int port, bool spinup) +bool DeviceHandler::MountUSB(int pos) { - int ret = USBStorage2_SetPort(port); - - if(spinup) - USBSpinUp(); - - return ret >= 0; -} - -void DeviceHandler::SetUSBPortFromPartition(int part) -{ - if(Settings.USBPort != 2) - return; - - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - if(!usbHandle) - return; - - if(part < usbHandle->GetPartitionCount()) - SetUSBPort(0); - else - SetUSBPort(1); -} - -bool DeviceHandler::MountUSB(int pos, bool spinup) -{ - if(spinup && !USBSpinUp()) + if(!usb0 && !usb1) return false; - if(!usb) - { - if(Settings.USBPort == 2) SetUSBPort(0); - usb = new PartitionHandle(GetUSBInterface()); - if(Settings.USBPort == 2 && IosLoader::IsHermesIOS()) - { - SetUSBPort(1); - usb->GetPort1Partitions(); - } - } - - if(usb->GetPartitionTotalCount() < 1) - { - delete usb; - usb = NULL; - return false; - } - - if(pos >= usb->GetPartitionTotalCount()) + if(pos >= GetUSBPartitionCount()) return false; - SetUSBPortFromPartition(pos); + int portPart = PartitionToPortPartition(pos); - return usb->Mount(pos, DeviceName[USB1+pos]); + if(PartitionToUSBPort(pos) == 0 && usb0) + return usb0->Mount(portPart, DeviceName[USB1+pos]); + else if(usb1) + return usb1->Mount(portPart, DeviceName[USB1+pos]); + + return false; } bool DeviceHandler::MountAllUSB(bool spinup) @@ -222,54 +196,88 @@ bool DeviceHandler::MountAllUSB(bool spinup) if(spinup && !USBSpinUp()) return false; - if(!usb) + if(!usb0 && (Settings.USBPort == 0 || Settings.USBPort == 2)) + usb0 = new PartitionHandle(GetUSB0Interface()); + if(!usb1 && (Settings.USBPort == 1 || Settings.USBPort == 2)) + usb1 = new PartitionHandle(GetUSB1Interface()); + + if(usb0 && usb0->GetPartitionCount() < 1) { - if(Settings.USBPort == 2) SetUSBPort(0); - usb = new PartitionHandle(GetUSBInterface()); - if(Settings.USBPort == 2 && IosLoader::IsHermesIOS()) - { - SetUSBPort(1); - usb->GetPort1Partitions(); - } + delete usb0; + usb0 = NULL; + } + if(usb1 && usb1->GetPartitionCount() < 1) + { + delete usb1; + usb1 = NULL; } bool result = false; + int partCount = GetUSBPartitionCount(); - for(int i = 0; i < usb->GetPartitionTotalCount(); i++) + for(int i = 0; i < partCount; i++) { - if(MountUSB(i, false)) + if(MountUSB(i)) result = true; } - if(Settings.USBPort == 2) - SetUSBPort(0); + return result; +} + +bool DeviceHandler::MountUSBPort1(bool spinup) +{ + if(spinup && !USBSpinUp()) + return false; + + if(!usb1 && (Settings.USBPort == 1 || Settings.USBPort == 2)) + usb1 = new PartitionHandle(GetUSB1Interface()); + + if(usb1 && usb1->GetPartitionCount() < 1) + { + delete usb1; + usb1 = NULL; + return false; + } + + bool result = false; + int partCount = GetUSBPartitionCount(); + int partCount0 = 0; + if(usb0) + partCount0 = usb0->GetPartitionCount(); + + for(int i = partCount0; i < partCount; i++) + { + if(MountUSB(i)) + result = true; + } return result; } void DeviceHandler::UnMountUSB(int pos) { - if(!usb) + if(pos >= GetUSBPartitionCount()) return; - if(pos >= usb->GetPartitionTotalCount()) - return; + int portPart = PartitionToPortPartition(pos); - SetUSBPortFromPartition(pos); - - usb->UnMount(pos); + if(PartitionToUSBPort(pos) == 0 && usb0) + return usb0->UnMount(portPart); + else if(usb1) + return usb1->UnMount(portPart); } void DeviceHandler::UnMountAllUSB() { - if(!usb) - return; + int partCount = GetUSBPartitionCount(); - for(int i = 0; i < usb->GetPartitionTotalCount(); i++) + for(int i = 0; i < partCount; i++) UnMountUSB(i); - delete usb; - usb = NULL; + delete usb0; + usb0 = NULL; + delete usb1; + usb1 = NULL; } int DeviceHandler::PathToDriveType(const char * path) @@ -292,9 +300,19 @@ const char * DeviceHandler::GetFSName(int dev) { return DeviceHandler::instance->sd->GetFSName(0); } - else if(dev >= USB1 && dev <= USB8 && DeviceHandler::instance->usb) + else if(dev >= USB1 && dev <= USB8) { - return DeviceHandler::instance->usb->GetFSName(dev-USB1); + int partCount0 = 0; + int partCount1 = 0; + if(DeviceHandler::instance->usb0) + partCount0 += DeviceHandler::instance->usb0->GetPartitionCount(); + if(DeviceHandler::instance->usb1) + partCount1 += DeviceHandler::instance->usb1->GetPartitionCount(); + + if(dev-USB1 > partCount0 && DeviceHandler::instance->usb0) + return DeviceHandler::instance->usb0->GetFSName(dev-USB1); + else if(DeviceHandler::instance->usb1) + return DeviceHandler::instance->usb1->GetFSName(dev-USB1-partCount0); } return NULL; @@ -305,9 +323,7 @@ int DeviceHandler::GetUSBFilesystemType(int partition) if(!instance) return -1; - PartitionHandle * usbHandle = instance->GetUSBHandle(); - - const char * FSName = usbHandle->GetFSName(partition); + const char *FSName = GetUSBFSName(partition); if(!FSName) return -1; if(strncmp(FSName, "WBFS", 4) == 0) @@ -321,3 +337,71 @@ int DeviceHandler::GetUSBFilesystemType(int partition) return -1; } + + +u16 DeviceHandler::GetUSBPartitionCount() +{ + if(!instance) + return 0; + + u16 partCount0 = 0; + u16 partCount1 = 0; + if(instance->usb0) + partCount0 = instance->usb0->GetPartitionCount(); + if(instance->usb1) + partCount1 = instance->usb1->GetPartitionCount(); + + return partCount0+partCount1; +} + +int DeviceHandler::PartitionToUSBPort(int part) +{ + if(!DeviceHandler::instance) + return 0; + + u16 partCount0 = 0; + if(DeviceHandler::instance->usb0) + partCount0 = instance->usb0->GetPartitionCount(); + + if(!instance->usb0 || part >= partCount0) + return 1; + else + return 0; +} + +int DeviceHandler::PartitionToPortPartition(int part) +{ + if(!DeviceHandler::instance) + return 0; + + u16 partCount0 = 0; + if(instance->usb0) + partCount0 = instance->usb0->GetPartitionCount(); + + if(!instance->usb0 || part >= partCount0) + return part-partCount0; + else + return part; +} + +const char *DeviceHandler::GetUSBFSName(int partition) +{ + if(!instance) + return NULL; + + const char * FSName = NULL; + PartitionHandle *handle = instance->GetUSBHandleFromPartition(partition); + + if(handle) + FSName = handle->GetFSName(PartitionToPortPartition(partition)); + + return FSName; +} + +PartitionHandle *DeviceHandler::GetUSBHandleFromPartition(int part) const +{ + if(PartitionToUSBPort(part) == 0) + return usb0; + else + return usb1; +} diff --git a/source/Controls/DeviceHandler.hpp b/source/Controls/DeviceHandler.hpp index 5a55eaac..0923cbbd 100644 --- a/source/Controls/DeviceHandler.hpp +++ b/source/Controls/DeviceHandler.hpp @@ -27,6 +27,7 @@ #define DEVICE_HANDLER_HPP_ #include "PartitionHandle.h" +#include "usbloader/usbstorage2.h" enum { @@ -70,31 +71,39 @@ class DeviceHandler //! Individual Mounts/UnMounts... bool MountSD(); bool MountAllUSB(bool spinUp = true); - bool MountUSB(int part, bool spinUp = true); + bool MountUSBPort1(bool spinUp = true); bool SD_Inserted() { if(sd) return sd->IsInserted(); return false; }; - bool USB_Inserted() { if(usb) return usb->IsInserted(); return false; }; + bool USB0_Inserted() { if(usb0) return usb0->IsInserted(); return false; }; + bool USB1_Inserted() { if(usb1) return usb1->IsInserted(); return false; }; void UnMountSD() { if(sd) delete sd; sd = NULL; }; void UnMountUSB(int pos); void UnMountAllUSB(); PartitionHandle * GetSDHandle() const { return sd; }; - PartitionHandle * GetUSBHandle() const { return usb; }; + PartitionHandle * GetUSB0Handle() const { return usb0; }; + PartitionHandle * GetUSB1Handle() const { return usb1; }; + PartitionHandle * GetUSBHandleFromPartition(int part) const; + static const DISC_INTERFACE *GetUSB0Interface() { return &__io_usbstorage2_port0; } + static const DISC_INTERFACE *GetUSB1Interface() { return &__io_usbstorage2_port1; } static int GetUSBFilesystemType(int part); static int PathToDriveType(const char * path); static const char * GetFSName(int dev); static const char * PathToFSName(const char * path) { return GetFSName(PathToDriveType(path)); }; - static const DISC_INTERFACE * GetUSBInterface(); - static bool SetUSBPort(int port, bool spinup = true); - static void SetUSBPortFromPartition(int part); + static int PartitionToUSBPort(int part); + static u16 GetUSBPartitionCount(); + static int PartitionToPortPartition(int part); + static const char *GetUSBFSName(int partition); private: - DeviceHandler() : sd(0), usb(0) { }; + DeviceHandler() : sd(0), gca(0), gcb(0), usb0(0), usb1(0) { }; ~DeviceHandler(); + bool MountUSB(int part); static DeviceHandler *instance; PartitionHandle * sd; PartitionHandle * gca; PartitionHandle * gcb; - PartitionHandle * usb; + PartitionHandle * usb0; + PartitionHandle * usb1; }; #endif diff --git a/source/Controls/PartitionHandle.cpp b/source/Controls/PartitionHandle.cpp index 7ebd408e..c2be3e29 100644 --- a/source/Controls/PartitionHandle.cpp +++ b/source/Controls/PartitionHandle.cpp @@ -67,10 +67,8 @@ static inline const char * PartFromType(int type) } PartitionHandle::PartitionHandle(const DISC_INTERFACE *discio) + : interface(discio) { - Port0Size = 0; - interface = discio; - // Sanity check if (!interface) return; @@ -93,23 +91,6 @@ PartitionHandle::~PartitionHandle() interface->shutdown(); } -void PartitionHandle::GetPort1Partitions() -{ - if(Port0Size != 0) - return; - - Port0Size = PartitionList.size(); - - // Start the device and check that it is inserted - if (!interface->startup()) - return; - - if (!interface->isInserted()) - return; - - FindPartitions(); -} - bool PartitionHandle::IsMounted(int pos) { if(pos < 0 || pos >= (int) MountNameList.size()) @@ -254,7 +235,7 @@ int PartitionHandle::FindPartitions() continue; } - if(le32(partition->block_count) > 0 && (!IsExisting(le32(partition->lba_start)) || Port0Size)) + if(le32(partition->block_count) > 0 && !IsExisting(le32(partition->lba_start))) { AddPartition(PartFromType(partition->type), le32(partition->lba_start), le32(partition->block_count), (partition->status == PARTITION_BOOTABLE), diff --git a/source/Controls/PartitionHandle.h b/source/Controls/PartitionHandle.h index c99787cb..89856e0a 100644 --- a/source/Controls/PartitionHandle.h +++ b/source/Controls/PartitionHandle.h @@ -145,17 +145,13 @@ class PartitionHandle //! Get the entrie number in MBR of this partition int GetPartitionNum(int pos) { if(valid(pos)) return PartitionList[pos].PartitionNum; else return -1; }; //! Get the count of found partitions - int GetPartitionCount() const { if(Port0Size) return Port0Size; else return PartitionList.size(); }; + int GetPartitionCount() const { return PartitionList.size(); }; //! Get the partition size in bytes u64 GetSize(int pos) { if(valid(pos)) return (u64) PartitionList[pos].SecCount*BYTES_PER_SECTOR; else return 0; }; //! Get the whole partition record struct PartitionFS * GetPartitionRecord(int pos) { if(valid(pos)) return &PartitionList[pos]; else return NULL; }; //! Get the disc interface of this handle const DISC_INTERFACE * GetDiscInterface() { return interface; }; - //! Get the port 1 partitions on usb - void GetPort1Partitions(); - //! Get the count of found partitions including second port partitions on usb - int GetPartitionTotalCount() const { return PartitionList.size(); }; protected: bool valid(int pos) { return (pos >= 0 && pos < (int) PartitionList.size()); } void AddPartition(const char * name, u64 lba_start, u64 sec_count, bool bootable, u8 part_type, u8 part_num); @@ -167,7 +163,6 @@ class PartitionHandle const DISC_INTERFACE *interface; std::vector PartitionList; std::vector MountNameList; - int Port0Size; }; #endif diff --git a/source/GUI/Text.cpp b/source/GUI/Text.cpp index aff1366c..2462c0ee 100644 --- a/source/GUI/Text.cpp +++ b/source/GUI/Text.cpp @@ -253,7 +253,6 @@ void Text::CalcLineOffsets() const wchar_t * origTxt = wText->c_str(); int ch = 0; int lastSpace = -1; - int lastSpaceIndex = -1; int currWidth = 0; int i = 0; @@ -288,7 +287,6 @@ void Text::CalcLineOffsets() else if (origTxt[ch] == ' ') { lastSpace = ch; - lastSpaceIndex = i; } ch++; diff --git a/source/StartUpProcess.cpp b/source/StartUpProcess.cpp index 111aaeeb..44b10121 100644 --- a/source/StartUpProcess.cpp +++ b/source/StartUpProcess.cpp @@ -69,8 +69,7 @@ int StartUpProcess::ParseArguments(int argc, char *argv[]) ptr = strcasestr(argv[i], "-usbport="); if(ptr) { - Settings.USBPort = LIMIT(atoi(ptr+strlen("-usbport=")), 0, 1); - DeviceHandler::SetUSBPort(Settings.USBPort, false); + Settings.USBPort = LIMIT(atoi(ptr+strlen("-usbport=")), 0, 2); } if(strlen(argv[i]) == 6 && strchr(argv[i], '=') == 0 && strchr(argv[i], '-') == 0) @@ -125,7 +124,7 @@ void StartUpProcess::SetTextf(const char * format, ...) bool StartUpProcess::USBSpinUp() { bool started = false; - const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface(); + const DISC_INTERFACE * handle = Settings.USBPort == 1 ? DeviceHandler::GetUSB1Interface() : DeviceHandler::GetUSB0Interface(); Timer countDown; // wait 10 sec for the USB to spin up...stupid slow ass HDD do @@ -186,6 +185,7 @@ int StartUpProcess::Execute() SetTextf("Loading cIOS %i\n", Settings.cios); DeviceHandler::DestroyInstance(); + USBStorage2_Deinit(); // Loading now the cios setup in the settings IosLoader::LoadAppCios(); @@ -205,9 +205,13 @@ int StartUpProcess::Execute() { SetTextf("Changing USB Port to %i\n", Settings.USBPort); DeviceHandler::Instance()->UnMountAllUSB(); - DeviceHandler::SetUSBPort(Settings.USBPort); DeviceHandler::Instance()->MountAllUSB(); } + else if(Settings.USBPort == 2) + { + SetTextf("Mounting USB Port to 1\n"); + DeviceHandler::Instance()->MountUSBPort1(); + } gprintf("\tLoading game categories...%s\n", GameCategories.Load(Settings.ConfigPath) ? "done" : "failed"); gprintf("\tLoading font...%s\n", Theme::LoadFont(Settings.ConfigPath) ? "done" : "failed (using default)"); diff --git a/source/libs/libfat/libcustomfat.a b/source/libs/libfat/libcustomfat.a index 4814828f4e565988b8d090a69c7fa2b1db9c5957..ff1d951d02d31a4cb568cd9a6802c35e8a8675df 100644 GIT binary patch delta 922 zcmYk3T}V@57{{OYJ!hNdM`F4UG~4{xhg;i9t8>V7T4ZfuK^jG320{iQgS>O0c zg%`@iSIUME6i5ZNXkB;_RFu)3C8AP;y6D1-$-IzSTkqLN?cDr-&-47>=YumEV?V^$ ziAv=GC)co_e^z~5mBvG%0oAH5lMZzlUY<+y!N9<#CS(xqWqdSNsY5H`R88hxs_uXA zU|(*0@=HjOj=7XyyLLvMi9-XMzm)%YJ6Q4Grwd!l&=Z_a@Z_r+X&Bzw7+4qUad~&R zR)d}vw=p2?h7$4UlE6uT#CI{lm(M)xkXVCb1fVs@c8^t|ghPTZSCGx4oTNPO3NmrW zUAd08NSP6}l`>kc7rZ9`kWZ|*(K^ihB>hHIjhR9+ZbXkoI)(M-V`v@5P5x#mp}om1T9rv2R>a@&O5_==7!nUJ@L%1?s9#(ja(^tFyab#lnHVLnX{oMJ?w)ohd|4L1|4!xPsnpsR zw$-Ee7+oVc9pq`D{m4v@z{KHE5R9IuJdU zoRVdb49X&qSy^rdq(u!`bD$Cw40x{^mAjtPGam)!eAQUDK$@J$q!_1}NFeIF9$s@I zGe#R>wgIgwM5YA5Mt_X_F)jd8mgzm}EDr;eDpM9f z3%XcL_@ZnGN)53n4m2+VjkKFCG8qarNbshMWH(W4>pMF;;<Sva-{-tlK`QXg@j-9JE{d`)D?*FYi;6JG*o!O41G2^r1YoZ%L`rU?hA_kH>vX3-4 zGHyG*sU0Aj%1Nk`FMO3m1yKH&mtsdvFCz-qD$D?cQ=B92#G;_UwNT2m#<;|IiSdf? zOv}kSwR&)%p8OIgU}_iuV{+5|@B`B#o%CQEVfkYZF89ZaP!o4T_2^!xC$?vjL`xA8 zCGh%`S_r=&A6Rz0ZvtTEJoJn60Mk5fC0x+0{D2m^$m0!ir;nPvICa7;vWKwf2vbnl z1XaAaL<(*i@}QLqrwTQ6uoL-?U3oPxoy`GgZ#7aXjf*ne7E>_9_N#TT&`;ByIMncV z6fEcDmW{3H%b%@JZh<&bD$Y@^3x_&}wH3WxoHbbf`LFD0>#Q2fOm*QWf?g_~!Ydf0 zaZQ$KR+AO#?P21kk|q*e@4*OZ*`y8ueVC?$0=DBgofMGAZko`Z>Z9n~b>%-vw|Qo%kVs3eaKrYXD}0vjDydbA#o5zP!Y-n~f4T Jdx+-@{trrX+jIZ` diff --git a/source/libs/libntfs/libcustomntfs.a b/source/libs/libntfs/libcustomntfs.a index 96e0e341ae424e5a42baaf17f3af978dd462deeb..bdf669c471677e664ed0a27134fdaeb475612f3a 100644 GIT binary patch delta 3963 zcmb_fe{2)?6@T~j-T5FMF~f~R5)tPIAt7meAtBglpf<40Nmvrrgt84m=s=KyMqq4p zE1%DHfd)#e&_w%IEO>G}KabMM#Zz3k`FCkK0ffm8 z>5HYW4aom0Cw)K$_XD}O`CnpCOYVW;VWoK(438-4lmOR`0iPLrc!|~n|6rni&OsTmAqXWbTmA*3|s_f%G$*BPl z&&dB*F%ke{#x6}%O{uyB#s`()8ZbV(sE-^(s=N*lFYRC8yx9TLqe*YZmM(fZQxZ;p zU3@i1WZyS()#(vi<5PmB_r`45FM4)HJv+IKH}uDJ=0#%VYUsP1@o_T!42|TFmscJO zJ_)>iFMvC2=nr**$=<8!J@$jz+HK#BYri32e@R=tk$f<98ROsz8DfE1Fl-NKb~g3+ z==1IniBMlI`4)i?jhq#->786Mi?dNak1X2gQTGmm>kxNE{jk-n{;I(o$cOB@Ks;U- ziT|Z*8W4AgyP&L%S(L?BE$UtexDWBG-C=%((*@w{065?V$AR@w?>-1-tqc>mTp{5` z_be!`ITw$)1N;>l$s<{+*s4ZGpAXyy2yO$OJ$Hu$*Fw;2&MKWQnZ@i~53+Ax%8OAqhE$Aox z-J@8?QOuzR$e7|Nm7lO-pzA|s_58bLH5@}i+%0#Qiv=rz*GK`xgJobkTn3iJ3?Q$) zY)o}F0@vOsE^&q8|8O?OT=IWo%;K-QYw^E@ zYu{aqI(P#M9xeTx-b?~NF4S(##h?cayFw%uT zh3?RV1@R&5G4?lp-xZ!b7C4DC&wtMwcprF{%C{{St25Zxd>7hSdx(toyaU_PGXljv z@W?$J*n&9cAkH^1f;tDqil@V@Sm%Ay?Av$D;_Ez&i6&PhhRiv7yY^Ux0Y`)*^jtnE zSIsPw13>7(p6R>wDmsj{myG!fjF9geS}rTA9kP;r-m5qra#MU_;_3IKdYc6KN(ad5 zC(C7@SdA95o3J~V;ygkeOVZ5)oHKt9E;UBX(=d${8jU% zdZp1L`x`J>LlZhp+;Y7$*=qkW>-MAvgH)*dTsV#KH`SMhai>9^I}B#^O>FT8qb!Ms zZncr3>TdhX@wh8|e@N?E2kRPKQOZ`!2MVCnX~R=i02SD=QtViTvK%{AM1Nx=W!w>Z z%SP;YnDYuq?o0=|UC`U{d#q+F^%Ri#ODE5@mm-x8q@J-xRvMA!vrl=IGLZ4`ma@=I z@wkm0G?gYI&k392ORV}Pr_tp01Wo->D&Fj`xvf4r8`h ztR!-3JDDB*ZVOplm_#(2q3y&z6|wY@3_bJ$IT5=4BpJ=r{(i|xXvH8I6cUjZ(3RIP zTj@n|bZxqkHTu^g!vN8tszj(?mKbgqC!r`7{vJt2VJ}kA*P9KW_9UM(7i;v;M~0s# zqSQEbuA8qJavz`K7s=$GJeou_W)pAoEn5g6sP zQ-x3U7r$y+wMwu?uOAea^-l5mN~L(*I5n`TR{XXpVWhcbM|Uq3{q{7(8nx{ZpD5Jb z^k#Vb#6RVw8D&SepAw%D6ZO#6Ylhj;yHW8M4QVFU=sC`~X<8B)*(6z`%QKASCAyRO pB98f$D&vlp6p$Uw3mUilEFCyfDJ^oQ17n+{r}w4AIm3Xtom34L8fW z>*n)0>0d&lDa@!Jq9F}i2dM2vQhv^2K*9NB9+yL{vVtWA0vij#gVbBL=W%&OJ z-qZv9EUN}tGfLJ0f3Jvq4*Y{de&8aO;x@Q{G<-$!bEm=bV2IAz9Hc(M!X5aA`DY8v z+V4&2ficI*HHqJz@(SvxWinn4v?+l$)2uz57C|GYh@CAjT~ba*>&ar08le3P$Qw_N zw=V_O-38$9V=i{IK$<(M*(2_q+V!;iRlN2x!|vC$Ypg#T(t>;(d>yPKG7rwXBU)UO z{O+xn{2gSJhBC>w3A2$3$2dE^kxAy6nkbt^D!@wYhrajfc*D6Vsry|03U}BMvNb<+LDwbV88(Mv)LH^7j#kyAz;saZG4@>_}L8ELZgR zlB3d#K2P;1fb>MnD&-AY<>h}88)}b)pDcgtj3n%~C+`Al6tOc| zClv5vQUlZ9B3B>BAq2k+Z-C08F7RnJR0Cs%C{lRg&>wJgesSjDafz z0Z)$!9FZ}|akQgs?I>xx30zX3Ns#iN7D89|Swm-bTUW*J9;McWWXqy%xqG$GcWmmF zRq?5y{Mj8*?c;tK7wY)r4s|;cTQS*9-(N^_O

(5LcI7N+%bR>f)(UdFYxb_kAW} z`njZK8Vg#~Wx8_?JDpak;o;qg24Ayr1Kxh-5*^Pbg|gPm3&8cDc={Gzz=WoTzIU zbzU;mn{>&qpT~oTEF40R58}XozJ&vmsR??~L2}C`+;3>w3)8y7Ica6UQ{~V$ zzF=Dp6rr32C})xM1WK7lOLNE~(`C9Yhqz5Wv^$4n&fVvaz)79PAFzEEjpdNV%O-~# zR^iAF9J!^|6Z#c+q{2c`S_vNfA{F2ls%TX_?ob!Mx*ykJ47_+^HQ_@(T$?I9smTE< zJj~^Cy(ru#wAM+oXMZ00QKlGbyBox(>!|1?&IOZR_29z0ekn#!%<#~AB7P-^uW#y| zM0NzT{}^=~&X_aR?CZNNB#!;I<;`4@X^JIcnlWZrjUjhLI^-fY6R4LAc6|!~ZOtVg zQRW2szUnJBdFbvdyp8o%E-9ne50k$VOAQ@Sa77$c$RqitAob>v>=Xjp$I?kho+Y-q z9e8I#l{)Omg^%$pat1(E$LhBciB6%%(BeS=Y3f)D& z-hjhH(I^h!cMk_JXmMCXvsJ$*QBQnNkNWcYWDUdW&SjeZkB`vbj!+U&4ytNxFZnq5w6 zFga~oPzmGUEpw)uS&*?o%wjA`Gd@=dKcvfRF*ZegP)@rGiT*E1X_@v~pqwluX9fMO zfu6X;*pz`9l0Gl-?ogU|cTg_Ylci2QC_3h_Dc)A%cIs~uH|iL>^2&BHD>FIb{r%)t zx*pNr$jw)d4UywqBBG4mtiwh-PLaLO7_Dwbfs_sec_sz_s - p->wii_sec_sz_s); @@ -648,7 +647,6 @@ u64 wbfs_estimate_disc(wbfs_t *p, read_wiidisc_callback_t read_src_wii_disc, voi d = 0; info = wbfs_ioalloc( p->disc_info_sz ); - b = (u8 *) info; read_src_wii_disc(callback_data, 0, 0x100, info->disc_header_copy); for (i = 0; i < p->n_wbfs_sec_per_disc; i++) @@ -739,12 +737,10 @@ int wbfs_extract_file(wbfs_disc_t*d, char *path, void **data) error: return ret; } -int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data) +int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data, u32 hdd_sector_size) { if (!d) return -1; - //! Use here real physical HDD sector size - extern u32 hdd_sector_size; wbfs_t *p = d->p; int src_wbs_nlb = p->wbfs_sec_sz / hdd_sector_size; int i, ret, last = 0; diff --git a/source/libs/libwbfs/libwbfs.h b/source/libs/libwbfs/libwbfs.h index 1b0e9877..22bfcd9a 100644 --- a/source/libs/libwbfs/libwbfs.h +++ b/source/libs/libwbfs/libwbfs.h @@ -221,7 +221,7 @@ extern "C" partition_selector_t sel, u32 *comp_size, u32 *real_size); typedef int (*_frag_append_t)(void *ff, u32 offset, u32 sector, u32 count); - int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data); + int wbfs_get_fragments(wbfs_disc_t *d, _frag_append_t append_fragment, void *callback_data, u32 hdd_sector_size); extern wbfs_t wbfs_iso_file; u32 wbfs_disc_sector_used(wbfs_disc_t *d); diff --git a/source/menu/menu_install.cpp b/source/menu/menu_install.cpp index fc43cb72..d618500f 100644 --- a/source/menu/menu_install.cpp +++ b/source/menu/menu_install.cpp @@ -91,11 +91,9 @@ int MenuInstall() } else { - USBStorage2_Watchdog(0); StartProgress(gametxt, name, 0, true, true); ret = WBFS_AddGame(); ProgressStop(); - USBStorage2_Watchdog(1); wiilight(0); if (ret != 0) { diff --git a/source/menu/menu_partition_selection.cpp b/source/menu/menu_partition_selection.cpp index 785fa474..0b45b168 100644 --- a/source/menu/menu_partition_selection.cpp +++ b/source/menu/menu_partition_selection.cpp @@ -20,17 +20,17 @@ int SelectPartitionMenu() int choice = -1; int ret = -1; - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - //create the partitionlist - for (int cnt = 0; cnt < usbHandle->GetPartitionCount(); cnt++) + for (int cnt = 0; cnt < DeviceHandler::GetUSBPartitionCount(); cnt++) { + PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(cnt); + int portPart = DeviceHandler::PartitionToPortPartition(cnt); /* Calculate size in gigabytes */ - f32 size = usbHandle->GetSize(cnt) / GB_SIZE; + f32 size = usbHandle->GetSize(portPart) / GB_SIZE; if (size) { - options.SetName(counter, "%s %d %s: ", tr( "Partition" ), cnt + 1, usbHandle->GetFSName(cnt)); + options.SetName(counter, "%s %d %s: ", tr( "Partition" ), cnt + 1, usbHandle->GetFSName(portPart)); options.SetValue(counter, "%.2fGB", size); } else @@ -98,7 +98,7 @@ int SelectPartitionMenu() if (ret >= 0) { - if (usbHandle->GetSize(ret)) + if (strcmp(options.GetValue(ret), tr( "Can't be formatted" )) != 0) { choice = ret; ExitSelect = true; diff --git a/source/mload/modules/ehcmodule_5.c b/source/mload/modules/ehcmodule_5.c index 8161ed9e..92599f2d 100644 --- a/source/mload/modules/ehcmodule_5.c +++ b/source/mload/modules/ehcmodule_5.c @@ -1,944 +1,977 @@ -#define size_ehcmodule_5 26234 +#define size_ehcmodule_5 27134 -unsigned char ehcmodule_5[26234] __attribute__((aligned (32)))={ +unsigned char ehcmodule_5[27134] __attribute__((aligned (32)))={ 127, 69, 76, 70, 1, 2, 1, 97, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 40, 0, 0, 0, 1, 19, 112, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 6, 6, 0, 52, 0, 32, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 160, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 212, 0, 0, 0, 160, 0, 0, 0, 160, 0, 0, 0, 52, 0, 0, 0, 52, 0, 240, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 212, 0, 240, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 0, 1, 8, 19, 112, 0, 0, 19, 112, 0, 0, 0, 0, 90, 208, 0, 0, 90, 208, 0, 240, 0, 5, 0, - 0, 0, 4, 0, 0, 0, 1, 0, 0, 91, 216, 19, 112, 96, 0, 19, 112, 96, 0, 0, 0, 10, 162, 0, 2, 153, 40, 0, 240, 0, 6, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 9, 19, 112, 0, 0, 0, 0, 0, 125, 0, 0, 0, - 120, 0, 0, 0, 126, 0, 0, 48, 0, 0, 0, 0, 127, 19, 114, 247, 40, 227, 160, 0, 0, 227, 160, 16, 0, 229, 159, 49, 0, 225, - 47, 255, 19, 229, 159, 192, 252, 229, 156, 192, 0, 225, 160, 0, 0, 231, 156, 193, 11, 225, 160, 0, 0, 225, 47, 255, - 28, 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, 176, 63, 234, 255, 255, 245, 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, - 176, 64, 234, 255, 255, 241, 227, 160, 0, 0, 238, 7, 15, 21, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 225, - 160, 0, 0, 227, 24, 0, 16, 10, 0, 0, 18, 227, 200, 128, 16, 227, 160, 32, 16, 229, 135, 32, 0, 225, 160, 0, 0, 225, - 160, 32, 13, 225, 160, 0, 0, 229, 159, 208, 144, 225, 160, 0, 0, 233, 45, 95, 254, 225, 160, 0, 0, 235, 0, 0, 15, 232, - 189, 95, 254, 225, 160, 0, 0, 225, 160, 208, 2, 227, 16, 0, 1, 10, 0, 0, 2, 225, 160, 0, 0, 227, 160, 0, 4, 235, 0, - 0, 5, 227, 24, 0, 1, 10, 0, 0, 1, 229, 159, 240, 88, 225, 160, 0, 0, 229, 159, 240, 84, 225, 160, 0, 0, 229, 159, 240, - 80, 225, 160, 0, 0, 229, 159, 32, 76, 225, 47, 255, 18, 225, 160, 0, 0, 238, 19, 15, 16, 225, 47, 255, 30, 225, 160, - 0, 0, 225, 160, 0, 0, 238, 3, 15, 16, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 69, 72, 67, 95, 67, 70, 71, - 0, 18, 52, 0, 1, 0, 0, 0, 0, 19, 112, 16, 157, 19, 114, 195, 128, 19, 114, 249, 40, 255, 255, 30, 128, 255, 255, 30, - 156, 255, 255, 29, 68, 19, 112, 13, 61, 225, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 40, - 2, 208, 16, 40, 2, 216, 4, 40, 0, 208, 7, 40, 1, 209, 19, 224, 7, 40, 16, 208, 12, 40, 17, 209, 14, 224, 11, 75, 8, - 104, 24, 224, 11, 72, 7, 224, 9, 75, 7, 34, 1, 96, 26, 32, 0, 224, 4, 72, 6, 224, 2, 72, 6, 224, 0, 72, 6, 188, 2, 71, - 8, 19, 112, 96, 48, 19, 112, 73, 29, 19, 112, 106, 200, 19, 112, 66, 25, 19, 112, 67, 97, 255, 255, 253, 102, 181, 112, - 28, 12, 28, 5, 240, 5, 252, 105, 28, 6, 32, 1, 66, 64, 240, 5, 252, 88, 14, 43, 115, 35, 12, 43, 115, 99, 10, 43, 115, + 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 0, 1, 8, 19, 112, 0, 0, 19, 112, 0, 0, 0, 0, 94, 48, 0, 0, 94, 48, 0, 240, 0, 5, 0, 0, + 0, 4, 0, 0, 0, 1, 0, 0, 95, 56, 19, 112, 96, 0, 19, 112, 96, 0, 0, 0, 10, 198, 0, 2, 154, 20, 0, 240, 0, 6, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 6, 0, 0, 0, 11, 0, 0, 0, 4, 0, 0, 0, 9, 19, 112, 0, 0, 0, 0, 0, 125, 0, 0, 0, 120, + 0, 0, 0, 126, 0, 0, 48, 0, 0, 0, 0, 127, 19, 114, 248, 20, 227, 160, 0, 0, 227, 160, 16, 0, 229, 159, 49, 0, 225, 47, + 255, 19, 229, 159, 192, 252, 229, 156, 192, 0, 225, 160, 0, 0, 231, 156, 193, 11, 225, 160, 0, 0, 225, 47, 255, 28, + 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, 176, 63, 234, 255, 255, 245, 225, 160, 0, 0, 225, 160, 0, 0, 227, 160, 176, + 64, 234, 255, 255, 241, 227, 160, 0, 0, 238, 7, 15, 21, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 225, 160, + 0, 0, 227, 24, 0, 16, 10, 0, 0, 18, 227, 200, 128, 16, 227, 160, 32, 16, 229, 135, 32, 0, 225, 160, 0, 0, 225, 160, + 32, 13, 225, 160, 0, 0, 229, 159, 208, 144, 225, 160, 0, 0, 233, 45, 95, 254, 225, 160, 0, 0, 235, 0, 0, 15, 232, 189, + 95, 254, 225, 160, 0, 0, 225, 160, 208, 2, 227, 16, 0, 1, 10, 0, 0, 2, 225, 160, 0, 0, 227, 160, 0, 4, 235, 0, 0, 5, + 227, 24, 0, 1, 10, 0, 0, 1, 229, 159, 240, 88, 225, 160, 0, 0, 229, 159, 240, 84, 225, 160, 0, 0, 229, 159, 240, 80, + 225, 160, 0, 0, 229, 159, 32, 76, 225, 47, 255, 18, 225, 160, 0, 0, 238, 19, 15, 16, 225, 47, 255, 30, 225, 160, 0, + 0, 225, 160, 0, 0, 238, 3, 15, 16, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 69, 72, 67, 95, 67, 70, 71, 0, + 18, 52, 0, 1, 0, 0, 0, 0, 19, 112, 17, 61, 19, 114, 195, 160, 19, 114, 250, 20, 255, 255, 30, 128, 255, 255, 30, 156, + 255, 255, 29, 68, 19, 112, 13, 221, 225, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 0, 40, 2, 208, + 16, 40, 2, 216, 4, 40, 0, 208, 7, 40, 1, 209, 19, 224, 7, 40, 16, 208, 12, 40, 17, 209, 14, 224, 11, 75, 8, 104, 24, + 224, 11, 72, 7, 224, 9, 75, 7, 34, 1, 96, 26, 32, 0, 224, 4, 72, 6, 224, 2, 72, 6, 224, 0, 72, 6, 188, 2, 71, 8, 19, + 112, 96, 48, 19, 112, 76, 109, 19, 112, 106, 232, 19, 112, 68, 253, 19, 112, 70, 133, 255, 255, 253, 102, 181, 112, + 28, 12, 28, 5, 240, 5, 253, 211, 28, 6, 32, 1, 66, 64, 240, 5, 253, 210, 14, 43, 115, 35, 12, 43, 115, 99, 10, 43, 115, 163, 124, 34, 124, 99, 6, 18, 4, 27, 67, 19, 124, 162, 115, 229, 2, 18, 67, 19, 124, 226, 6, 45, 67, 19, 28, 32, 96, - 29, 48, 12, 33, 4, 240, 5, 252, 88, 124, 35, 124, 96, 6, 27, 4, 0, 67, 24, 124, 163, 33, 4, 2, 27, 67, 24, 124, 227, - 67, 24, 240, 5, 252, 75, 28, 48, 240, 5, 252, 48, 32, 0, 188, 112, 188, 2, 71, 8, 181, 8, 75, 12, 28, 1, 34, 32, 104, - 24, 240, 5, 252, 81, 40, 0, 209, 13, 72, 9, 240, 5, 252, 40, 240, 4, 252, 99, 32, 200, 240, 0, 255, 33, 240, 4, 252, - 104, 32, 200, 240, 0, 255, 28, 231, 244, 188, 8, 188, 2, 71, 8, 19, 112, 96, 48, 19, 112, 96, 84, 181, 8, 75, 4, 28, - 1, 104, 24, 240, 5, 251, 252, 188, 8, 188, 1, 71, 0, 70, 192, 19, 112, 96, 48, 181, 240, 176, 139, 144, 4, 145, 5, 28, - 8, 28, 17, 28, 23, 146, 7, 240, 5, 252, 8, 76, 129, 104, 35, 43, 0, 209, 0, 224, 241, 168, 9, 240, 3, 254, 8, 75, 126, - 96, 24, 40, 0, 208, 4, 35, 128, 154, 9, 1, 27, 66, 154, 208, 4, 35, 1, 74, 122, 66, 91, 96, 19, 224, 224, 78, 121, 72, - 122, 104, 51, 24, 26, 42, 0, 208, 104, 43, 0, 219, 102, 75, 116, 104, 26, 28, 81, 209, 98, 28, 53, 75, 112, 104, 48, - 104, 28, 33, 31, 34, 16, 52, 31, 24, 18, 67, 140, 146, 2, 33, 16, 28, 34, 240, 3, 255, 166, 40, 0, 209, 0, 224, 195, + 29, 48, 12, 33, 4, 240, 5, 253, 216, 124, 35, 124, 96, 6, 27, 4, 0, 67, 24, 124, 163, 33, 4, 2, 27, 67, 24, 124, 227, + 67, 24, 240, 5, 253, 203, 28, 48, 240, 5, 253, 170, 32, 0, 188, 112, 188, 2, 71, 8, 181, 8, 75, 12, 28, 1, 34, 32, 104, + 24, 240, 5, 253, 249, 40, 0, 209, 13, 72, 9, 240, 5, 254, 4, 240, 4, 254, 15, 32, 200, 240, 0, 255, 113, 240, 4, 254, + 20, 32, 200, 240, 0, 255, 108, 231, 244, 188, 8, 188, 2, 71, 8, 19, 112, 96, 48, 19, 112, 96, 84, 181, 8, 75, 4, 28, + 1, 104, 24, 240, 5, 253, 118, 188, 8, 188, 1, 71, 0, 70, 192, 19, 112, 96, 48, 181, 240, 176, 139, 144, 4, 145, 5, 28, + 8, 28, 17, 28, 23, 146, 7, 240, 5, 253, 156, 76, 129, 104, 35, 43, 0, 209, 0, 224, 241, 168, 9, 240, 3, 255, 34, 75, + 126, 96, 24, 40, 0, 208, 4, 35, 128, 154, 9, 1, 27, 66, 154, 208, 4, 35, 1, 74, 122, 66, 91, 96, 19, 224, 224, 78, 121, + 72, 122, 104, 51, 24, 26, 42, 0, 208, 104, 43, 0, 219, 102, 75, 116, 104, 26, 28, 81, 209, 98, 28, 53, 75, 112, 104, + 48, 104, 28, 33, 31, 34, 16, 52, 31, 24, 18, 67, 140, 146, 2, 33, 16, 28, 34, 240, 4, 249, 24, 40, 0, 209, 0, 224, 195, 120, 35, 43, 67, 209, 11, 120, 99, 43, 73, 209, 8, 120, 163, 43, 83, 209, 5, 120, 227, 43, 79, 209, 2, 75, 103, 96, 51, 224, 8, 104, 43, 43, 0, 208, 2, 35, 0, 96, 43, 231, 218, 35, 1, 66, 91, 96, 43, 121, 98, 121, 163, 2, 18, 4, 27, 24, 211, 121, 34, 77, 95, 24, 155, 121, 226, 28, 40, 6, 18, 24, 155, 10, 219, 147, 3, 154, 3, 75, 91, 33, 0, 96, 26, - 34, 128, 1, 18, 240, 5, 250, 143, 75, 84, 104, 26, 75, 85, 66, 154, 209, 30, 32, 7, 35, 0, 70, 132, 70, 102, 64, 30, + 34, 128, 1, 18, 240, 5, 252, 63, 75, 84, 104, 26, 75, 85, 66, 154, 209, 30, 32, 7, 35, 0, 70, 132, 70, 102, 64, 30, 209, 4, 16, 218, 152, 2, 73, 82, 0, 146, 80, 80, 24, 226, 122, 18, 42, 0, 208, 10, 16, 218, 92, 168, 33, 1, 64, 177, 67, 8, 84, 168, 154, 2, 28, 16, 154, 3, 24, 128, 144, 2, 34, 128, 51, 1, 1, 210, 66, 147, 209, 227, 75, 63, 34, 31, 104, 27, 153, 5, 51, 31, 67, 147, 34, 128, 2, 18, 147, 3, 145, 2, 78, 60, 146, 6, 224, 97, 155, 4, 32, 15, 10, 93, 104, 51, 67, 133, 66, 157, 208, 63, 73, 56, 75, 57, 104, 10, 96, 53, 66, 154, 209, 33, 75, 57, 28, 40, 104, 28, 28, 33, 240, - 5, 251, 33, 75, 55, 8, 193, 0, 138, 88, 210, 35, 0, 147, 1, 35, 7, 64, 24, 70, 140, 35, 0, 144, 0, 224, 9, 72, 47, 70, - 97, 92, 64, 28, 1, 65, 25, 32, 1, 66, 8, 208, 0, 25, 18, 51, 1, 153, 0, 66, 139, 211, 242, 60, 1, 64, 44, 25, 21, 75, - 34, 104, 28, 27, 100, 44, 16, 220, 10, 44, 16, 208, 9, 34, 128, 152, 3, 33, 0, 2, 18, 240, 5, 250, 34, 44, 0, 221, 8, - 224, 0, 36, 16, 28, 40, 28, 33, 154, 3, 240, 3, 254, 255, 40, 0, 208, 29, 154, 4, 152, 6, 4, 209, 12, 73, 26, 67, 28, - 60, 66, 187, 216, 0, 28, 28, 154, 3, 152, 2, 24, 137, 28, 34, 240, 5, 249, 198, 152, 2, 28, 33, 240, 5, 251, 28, 155, - 2, 152, 4, 25, 27, 27, 63, 16, 164, 25, 0, 147, 2, 144, 4, 47, 0, 209, 155, 224, 5, 32, 128, 2, 0, 176, 11, 188, 240, - 188, 2, 71, 8, 152, 5, 153, 7, 240, 5, 251, 39, 32, 0, 231, 245, 70, 192, 19, 112, 107, 88, 19, 112, 106, 208, 19, 112, - 96, 24, 19, 112, 96, 12, 128, 0, 0, 1, 127, 255, 255, 255, 19, 112, 123, 128, 19, 112, 106, 212, 19, 112, 131, 128, - 181, 56, 28, 12, 240, 5, 250, 214, 30, 5, 209, 38, 44, 0, 208, 36, 104, 34, 42, 0, 208, 33, 120, 17, 120, 83, 6, 9, - 4, 27, 67, 11, 120, 145, 2, 9, 67, 11, 120, 209, 67, 11, 43, 6, 209, 21, 123, 17, 123, 83, 6, 9, 4, 27, 67, 11, 123, + 5, 252, 185, 75, 55, 8, 193, 0, 138, 88, 210, 35, 0, 147, 1, 35, 7, 64, 24, 70, 140, 35, 0, 144, 0, 224, 9, 72, 47, + 70, 97, 92, 64, 28, 1, 65, 25, 32, 1, 66, 8, 208, 0, 25, 18, 51, 1, 153, 0, 66, 139, 211, 242, 60, 1, 64, 44, 25, 21, + 75, 34, 104, 28, 27, 100, 44, 16, 220, 10, 44, 16, 208, 9, 34, 128, 152, 3, 33, 0, 2, 18, 240, 5, 251, 210, 44, 0, 221, + 8, 224, 0, 36, 16, 28, 40, 28, 33, 154, 3, 240, 4, 248, 113, 40, 0, 208, 29, 154, 4, 152, 6, 4, 209, 12, 73, 26, 67, + 28, 60, 66, 187, 216, 0, 28, 28, 154, 3, 152, 2, 24, 137, 28, 34, 240, 5, 251, 118, 152, 2, 28, 33, 240, 5, 252, 176, + 155, 2, 152, 4, 25, 27, 27, 63, 16, 164, 25, 0, 147, 2, 144, 4, 47, 0, 209, 155, 224, 5, 32, 128, 2, 0, 176, 11, 188, + 240, 188, 2, 71, 8, 152, 5, 153, 7, 240, 5, 252, 163, 32, 0, 231, 245, 70, 192, 19, 112, 107, 116, 19, 112, 106, 240, + 19, 112, 96, 24, 19, 112, 96, 12, 128, 0, 0, 1, 127, 255, 255, 255, 19, 112, 123, 160, 19, 112, 106, 244, 19, 112, 131, + 160, 181, 56, 28, 12, 240, 5, 252, 162, 30, 5, 209, 38, 44, 0, 208, 36, 104, 34, 42, 0, 208, 33, 120, 17, 120, 83, 6, + 9, 4, 27, 67, 11, 120, 145, 2, 9, 67, 11, 120, 209, 67, 11, 43, 6, 209, 21, 123, 17, 123, 83, 6, 9, 4, 27, 67, 11, 123, 145, 2, 9, 67, 11, 123, 209, 67, 11, 43, 122, 208, 2, 43, 136, 209, 7, 224, 2, 72, 5, 33, 21, 224, 1, 72, 4, 33, 20, - 240, 4, 250, 238, 28, 40, 188, 56, 188, 2, 71, 8, 70, 192, 19, 112, 1, 153, 181, 240, 176, 145, 75, 206, 33, 128, 104, - 24, 240, 5, 250, 97, 33, 32, 240, 5, 250, 144, 144, 8, 240, 0, 251, 131, 240, 5, 250, 211, 33, 120, 240, 5, 250, 140, - 153, 8, 72, 199, 240, 5, 250, 120, 72, 198, 154, 8, 28, 1, 35, 0, 240, 5, 250, 72, 73, 196, 144, 9, 32, 205, 240, 4, - 250, 109, 33, 0, 36, 1, 145, 7, 145, 11, 145, 6, 39, 0, 152, 8, 169, 15, 34, 0, 240, 5, 250, 122, 144, 14, 155, 14, - 43, 0, 209, 246, 44, 0, 208, 2, 152, 9, 240, 5, 250, 67, 74, 185, 158, 15, 35, 0, 96, 19, 46, 0, 209, 87, 75, 183, 104, - 27, 43, 0, 208, 5, 75, 182, 104, 27, 43, 0, 209, 1, 74, 181, 96, 19, 36, 0, 47, 0, 208, 222, 75, 178, 104, 27, 43, 0, - 208, 218, 75, 175, 104, 27, 43, 0, 209, 214, 75, 175, 104, 27, 43, 0, 208, 9, 240, 3, 253, 88, 40, 0, 208, 5, 240, 3, - 253, 84, 40, 0, 208, 1, 240, 3, 253, 80, 75, 168, 104, 27, 147, 4, 43, 0, 209, 36, 77, 167, 75, 167, 104, 42, 58, 1, - 66, 154, 216, 30, 78, 159, 76, 165, 35, 1, 96, 51, 104, 32, 33, 1, 74, 164, 240, 3, 254, 26, 155, 4, 96, 51, 40, 0, - 208, 9, 35, 128, 104, 42, 0, 155, 66, 154, 209, 4, 104, 35, 33, 128, 2, 9, 24, 91, 96, 35, 75, 154, 74, 156, 104, 25, - 104, 18, 66, 145, 211, 1, 34, 0, 96, 26, 75, 145, 36, 0, 104, 27, 43, 0, 209, 153, 152, 9, 73, 138, 240, 5, 249, 219, - 36, 1, 231, 147, 120, 51, 120, 112, 6, 27, 4, 0, 67, 24, 120, 179, 2, 27, 67, 24, 120, 243, 67, 24, 56, 1, 40, 6, 217, - 0, 226, 152, 240, 4, 255, 69, 0, 10, 0, 73, 2, 151, 2, 151, 2, 151, 0, 7, 0, 92, 38, 1, 37, 1, 226, 150, 123, 51, 123, - 116, 6, 27, 4, 36, 67, 28, 123, 179, 73, 119, 2, 27, 67, 28, 123, 243, 67, 28, 28, 32, 240, 5, 249, 53, 40, 0, 209, - 11, 125, 51, 125, 117, 6, 27, 4, 45, 67, 29, 125, 179, 2, 27, 67, 29, 125, 243, 38, 1, 67, 29, 226, 122, 28, 32, 73, - 120, 240, 5, 249, 35, 40, 0, 208, 0, 226, 108, 125, 51, 125, 117, 6, 27, 4, 45, 67, 29, 125, 179, 34, 1, 2, 27, 67, - 29, 125, 243, 39, 0, 67, 29, 75, 103, 38, 1, 96, 26, 75, 103, 96, 24, 72, 110, 240, 0, 251, 48, 75, 109, 34, 4, 104, - 27, 104, 155, 96, 154, 240, 1, 248, 39, 226, 87, 122, 50, 122, 115, 6, 18, 4, 27, 67, 19, 122, 178, 2, 18, 67, 19, 122, - 242, 67, 19, 154, 6, 66, 154, 209, 0, 226, 70, 240, 1, 248, 46, 38, 1, 37, 0, 226, 68, 126, 51, 126, 116, 6, 27, 4, - 36, 67, 28, 126, 179, 124, 50, 2, 27, 67, 28, 126, 243, 6, 18, 67, 28, 124, 115, 4, 27, 67, 19, 124, 178, 2, 18, 67, - 19, 124, 242, 67, 26, 146, 4, 125, 51, 125, 117, 6, 27, 4, 45, 67, 29, 125, 179, 2, 27, 67, 29, 125, 243, 67, 29, 155, - 6, 43, 0, 209, 16, 123, 51, 43, 0, 209, 13, 122, 50, 122, 115, 122, 176, 6, 18, 4, 27, 67, 19, 2, 0, 67, 3, 122, 240, - 67, 24, 240, 1, 248, 10, 28, 6, 224, 0, 38, 0, 153, 4, 28, 32, 25, 73, 145, 10, 0, 201, 240, 5, 249, 164, 34, 0, 28, - 37, 146, 5, 224, 7, 104, 40, 104, 105, 240, 5, 249, 156, 155, 5, 53, 8, 51, 1, 147, 5, 153, 5, 154, 10, 66, 145, 219, - 243, 73, 48, 104, 11, 147, 5, 43, 0, 208, 0, 225, 213, 154, 15, 123, 16, 123, 83, 6, 0, 4, 27, 67, 3, 123, 144, 2, 0, - 67, 3, 123, 208, 67, 3, 72, 51, 66, 131, 209, 0, 225, 38, 66, 131, 216, 31, 43, 6, 216, 11, 43, 5, 211, 0, 225, 180, - 43, 1, 209, 0, 224, 159, 43, 0, 208, 119, 43, 2, 208, 0, 225, 70, 225, 171, 43, 27, 216, 6, 43, 26, 211, 0, 224, 172, - 43, 12, 208, 0, 225, 61, 224, 156, 74, 37, 66, 147, 209, 0, 224, 167, 50, 1, 66, 147, 208, 0, 225, 52, 224, 246, 72, - 34, 66, 131, 209, 0, 224, 226, 66, 131, 216, 68, 74, 32, 66, 147, 209, 0, 224, 182, 66, 147, 216, 8, 58, 12, 66, 147, - 209, 0, 225, 17, 50, 2, 66, 147, 208, 0, 225, 31, 225, 20, 74, 25, 66, 147, 209, 0, 225, 22, 50, 1, 66, 147, 208, 0, - 225, 22, 224, 169, 70, 192, 19, 112, 96, 48, 19, 112, 96, 109, 0, 152, 150, 128, 19, 112, 1, 65, 19, 112, 106, 240, - 19, 112, 106, 196, 19, 112, 106, 200, 19, 112, 96, 20, 19, 112, 107, 84, 19, 114, 199, 32, 0, 0, 15, 254, 19, 112, 106, - 192, 19, 112, 107, 128, 19, 114, 199, 36, 19, 112, 96, 121, 19, 112, 21, 69, 19, 112, 96, 60, 85, 77, 83, 3, 85, 77, - 83, 1, 85, 77, 83, 130, 85, 77, 83, 16, 85, 77, 83, 128, 73, 196, 66, 139, 209, 0, 225, 63, 66, 139, 216, 7, 73, 194, - 66, 139, 208, 119, 73, 194, 66, 139, 208, 0, 224, 219, 224, 220, 74, 192, 66, 147, 209, 0, 225, 36, 50, 1, 66, 147, - 208, 0, 224, 210, 225, 20, 46, 0, 209, 0, 225, 55, 105, 162, 105, 35, 136, 21, 106, 34, 136, 27, 136, 16, 104, 34, 2, - 25, 10, 27, 120, 18, 67, 11, 2, 41, 10, 45, 67, 13, 146, 5, 4, 45, 104, 162, 12, 45, 120, 18, 149, 0, 2, 5, 10, 0, 67, - 40, 4, 0, 12, 0, 144, 1, 107, 32, 4, 27, 144, 2, 12, 27, 28, 48, 153, 5, 240, 1, 251, 44, 225, 3, 46, 0, 209, 0, 225, - 17, 104, 35, 28, 48, 120, 25, 104, 163, 136, 26, 105, 35, 240, 1, 251, 12, 224, 247, 46, 0, 208, 0, 225, 5, 104, 35, - 105, 34, 120, 24, 104, 163, 120, 25, 105, 163, 240, 0, 255, 46, 224, 235, 38, 0, 37, 1, 225, 4, 154, 11, 42, 0, 209, - 1, 240, 0, 254, 203, 240, 3, 249, 119, 39, 0, 28, 5, 40, 0, 219, 3, 75, 151, 34, 1, 96, 26, 39, 1, 155, 15, 38, 1, 122, - 25, 122, 90, 6, 9, 4, 18, 67, 10, 122, 153, 122, 219, 2, 9, 67, 10, 67, 19, 147, 6, 150, 11, 224, 230, 75, 141, 153, - 5, 38, 1, 96, 25, 37, 0, 39, 0, 224, 223, 104, 35, 104, 26, 75, 138, 224, 97, 104, 35, 37, 0, 120, 222, 75, 136, 120, - 27, 66, 179, 208, 16, 75, 135, 104, 27, 43, 0, 208, 12, 240, 3, 249, 40, 240, 0, 254, 206, 240, 0, 254, 180, 75, 129, - 112, 30, 240, 0, 254, 146, 240, 3, 249, 62, 28, 5, 75, 126, 112, 30, 224, 165, 35, 1, 96, 11, 154, 5, 75, 121, 72, 124, - 96, 26, 240, 0, 249, 164, 75, 123, 34, 4, 104, 27, 39, 0, 104, 155, 96, 154, 240, 0, 254, 154, 77, 120, 28, 40, 240, - 3, 250, 74, 75, 119, 96, 24, 104, 35, 43, 0, 208, 1, 104, 42, 96, 26, 75, 116, 104, 29, 224, 135, 104, 35, 105, 34, - 104, 24, 104, 163, 38, 1, 104, 25, 240, 3, 251, 254, 75, 111, 28, 5, 120, 26, 42, 0, 209, 0, 224, 148, 70, 105, 34, - 23, 92, 81, 112, 25, 104, 35, 40, 0, 221, 2, 104, 25, 72, 105, 224, 1, 104, 25, 72, 105, 240, 1, 248, 24, 224, 133, - 104, 35, 105, 34, 104, 24, 104, 163, 104, 25, 240, 3, 252, 134, 224, 97, 75, 100, 104, 26, 66, 81, 65, 74, 96, 26, 224, - 105, 104, 35, 104, 26, 75, 85, 96, 26, 38, 1, 231, 106, 122, 17, 122, 83, 6, 9, 4, 27, 67, 11, 122, 145, 122, 210, 2, - 9, 67, 11, 67, 26, 104, 37, 35, 0, 146, 6, 147, 13, 120, 42, 42, 95, 209, 26, 120, 106, 42, 68, 209, 23, 120, 170, 42, - 86, 209, 20, 120, 234, 42, 68, 209, 17, 77, 82, 74, 69, 96, 43, 104, 227, 33, 1, 96, 17, 43, 4, 209, 6, 104, 161, 168, - 13, 34, 4, 240, 4, 254, 134, 155, 13, 96, 43, 240, 3, 255, 12, 224, 17, 104, 227, 43, 4, 209, 4, 104, 161, 168, 13, - 34, 4, 240, 4, 254, 121, 28, 40, 153, 13, 240, 3, 255, 67, 144, 7, 40, 0, 208, 46, 75, 53, 34, 1, 96, 26, 38, 1, 37, - 0, 224, 43, 240, 3, 251, 66, 38, 1, 28, 5, 40, 0, 209, 42, 35, 1, 74, 60, 66, 91, 96, 19, 224, 37, 75, 45, 34, 1, 96, - 26, 104, 35, 105, 33, 104, 24, 104, 163, 104, 26, 247, 255, 251, 159, 28, 5, 38, 1, 224, 24, 154, 7, 42, 0, 208, 18, - 104, 35, 105, 34, 104, 25, 104, 163, 152, 7, 104, 27, 240, 4, 251, 17, 38, 1, 37, 0, 224, 10, 38, 1, 37, 6, 224, 6, - 37, 1, 38, 1, 66, 109, 39, 1, 224, 2, 38, 1, 37, 1, 66, 109, 153, 4, 0, 203, 24, 228, 224, 7, 104, 32, 104, 97, 240, - 4, 255, 141, 154, 4, 52, 8, 50, 1, 146, 4, 155, 4, 153, 10, 66, 139, 219, 243, 224, 9, 38, 1, 37, 1, 224, 1, 38, 1, - 37, 6, 66, 109, 224, 2, 37, 0, 38, 1, 149, 6, 74, 12, 36, 0, 104, 19, 43, 0, 208, 4, 152, 9, 73, 23, 240, 4, 255, 31, - 36, 1, 46, 0, 209, 0, 228, 213, 152, 15, 28, 41, 240, 4, 255, 117, 228, 208, 87, 70, 83, 2, 85, 77, 83, 131, 87, 70, - 83, 1, 87, 70, 83, 3, 19, 112, 96, 20, 19, 112, 106, 196, 19, 112, 1, 12, 19, 112, 107, 56, 19, 112, 21, 69, 19, 112, - 96, 60, 19, 114, 199, 32, 19, 114, 199, 36, 19, 112, 96, 16, 19, 112, 96, 137, 19, 112, 96, 164, 19, 112, 106, 204, - 19, 112, 96, 12, 19, 112, 96, 24, 0, 152, 150, 128, 74, 3, 35, 128, 104, 17, 2, 27, 67, 11, 96, 19, 71, 112, 70, 192, - 13, 4, 0, 204, 75, 2, 74, 3, 104, 25, 64, 10, 96, 26, 71, 112, 13, 4, 0, 204, 255, 255, 127, 255, 181, 16, 247, 255, - 255, 243, 32, 128, 240, 3, 254, 16, 33, 32, 240, 4, 255, 1, 76, 9, 96, 32, 32, 4, 240, 4, 255, 12, 104, 33, 34, 0, 32, - 4, 240, 4, 255, 47, 247, 255, 255, 215, 32, 4, 240, 4, 254, 216, 188, 16, 188, 1, 71, 0, 70, 192, 19, 112, 96, 32, 181, - 16, 28, 4, 75, 15, 28, 8, 0, 137, 24, 9, 104, 26, 0, 73, 35, 1, 240, 4, 254, 171, 75, 12, 33, 16, 96, 24, 72, 11, 240, - 3, 255, 18, 33, 16, 72, 10, 240, 3, 255, 25, 75, 10, 34, 55, 96, 28, 75, 9, 32, 4, 104, 27, 104, 155, 96, 154, 240, - 4, 254, 179, 188, 16, 188, 1, 71, 0, 19, 112, 96, 32, 19, 112, 96, 28, 13, 128, 0, 56, 13, 128, 0, 60, 19, 112, 106, - 224, 19, 112, 96, 60, 181, 112, 76, 21, 75, 21, 38, 2, 66, 118, 28, 33, 104, 24, 34, 0, 96, 38, 240, 4, 254, 191, 75, - 18, 77, 18, 104, 27, 104, 154, 35, 0, 96, 147, 74, 17, 104, 40, 96, 19, 240, 4, 254, 134, 104, 40, 240, 4, 254, 205, - 35, 1, 66, 91, 96, 43, 104, 35, 43, 0, 209, 3, 75, 11, 104, 27, 96, 35, 224, 0, 96, 38, 32, 4, 240, 4, 254, 125, 75, - 2, 104, 24, 188, 112, 188, 2, 71, 8, 19, 112, 106, 216, 19, 112, 96, 32, 19, 112, 96, 60, 19, 112, 96, 28, 19, 112, - 106, 224, 19, 112, 106, 220, 75, 2, 34, 0, 96, 24, 75, 2, 96, 26, 71, 112, 19, 112, 106, 228, 19, 112, 106, 224, 181, - 248, 76, 34, 38, 16, 104, 35, 77, 33, 67, 179, 96, 35, 104, 43, 73, 32, 104, 154, 121, 19, 121, 87, 6, 27, 4, 63, 67, - 31, 121, 147, 2, 27, 67, 31, 121, 211, 67, 31, 104, 11, 43, 0, 208, 18, 28, 56, 240, 0, 248, 56, 40, 0, 220, 20, 74, - 22, 35, 0, 96, 19, 75, 22, 96, 24, 32, 4, 240, 4, 254, 66, 104, 43, 34, 55, 104, 155, 64, 23, 96, 95, 224, 22, 75, 17, - 104, 27, 43, 0, 208, 8, 28, 56, 240, 0, 248, 33, 104, 43, 34, 55, 104, 155, 64, 23, 96, 95, 224, 2, 35, 55, 64, 31, - 96, 87, 104, 35, 67, 51, 96, 35, 75, 9, 104, 26, 67, 22, 96, 30, 32, 0, 188, 248, 188, 2, 71, 8, 70, 192, 13, 128, 0, - 60, 19, 112, 96, 60, 19, 112, 106, 224, 19, 112, 106, 220, 19, 112, 106, 228, 13, 128, 0, 56, 71, 24, 70, 192, 181, - 112, 28, 12, 28, 5, 240, 4, 254, 67, 28, 6, 32, 1, 66, 64, 240, 4, 254, 50, 104, 34, 75, 17, 66, 154, 209, 25, 75, 16, - 73, 17, 34, 1, 67, 19, 96, 75, 28, 32, 34, 8, 240, 4, 252, 219, 28, 32, 27, 100, 8, 164, 33, 8, 60, 2, 240, 4, 254, - 54, 2, 36, 35, 234, 10, 36, 6, 27, 67, 35, 96, 43, 28, 40, 33, 4, 240, 4, 254, 44, 28, 48, 240, 4, 254, 17, 188, 112, - 188, 1, 71, 0, 230, 0, 1, 112, 19, 112, 4, 153, 19, 112, 96, 36, 181, 56, 28, 4, 240, 4, 253, 202, 44, 38, 208, 72, - 44, 38, 216, 5, 44, 36, 208, 9, 44, 37, 208, 0, 224, 169, 224, 14, 44, 57, 208, 112, 44, 60, 208, 0, 224, 163, 224, - 110, 73, 83, 75, 84, 72, 84, 96, 75, 34, 8, 240, 4, 252, 163, 72, 82, 224, 150, 72, 82, 73, 82, 247, 255, 255, 171, - 76, 77, 75, 81, 77, 82, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 252, 148, 28, 40, 33, 8, 240, 4, 253, 242, 75, 77, 77, - 78, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 252, 136, 28, 40, 33, 8, 240, 4, 253, 230, 75, 73, 77, 74, 96, 99, 34, 8, - 28, 33, 28, 40, 240, 4, 252, 124, 28, 40, 33, 8, 240, 4, 253, 218, 75, 59, 72, 69, 96, 99, 28, 33, 34, 8, 240, 4, 252, - 113, 72, 66, 224, 100, 72, 66, 73, 66, 247, 255, 255, 121, 76, 52, 75, 65, 77, 57, 96, 99, 34, 8, 28, 40, 28, 33, 240, - 4, 252, 98, 28, 40, 33, 8, 240, 4, 253, 192, 75, 60, 77, 53, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 252, 86, 28, 40, - 33, 8, 240, 4, 253, 180, 75, 55, 77, 49, 96, 99, 34, 8, 28, 33, 28, 40, 240, 4, 252, 74, 28, 40, 33, 8, 240, 4, 253, - 168, 75, 34, 72, 50, 96, 99, 28, 33, 34, 8, 240, 4, 252, 63, 72, 47, 224, 50, 72, 47, 224, 0, 72, 47, 73, 47, 247, 255, - 255, 69, 76, 26, 75, 46, 77, 31, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 252, 46, 28, 40, 33, 8, 240, 4, 253, 140, 75, - 41, 77, 27, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 252, 34, 28, 40, 33, 8, 240, 4, 253, 128, 75, 36, 77, 23, 96, 99, - 34, 8, 28, 33, 28, 40, 240, 4, 252, 22, 28, 40, 33, 8, 240, 4, 253, 116, 75, 8, 72, 31, 96, 99, 28, 33, 34, 8, 240, - 4, 252, 11, 72, 28, 33, 8, 240, 4, 253, 105, 32, 0, 188, 56, 188, 2, 71, 8, 70, 192, 19, 112, 96, 36, 19, 112, 0, 96, - 255, 255, 30, 120, 32, 32, 93, 232, 32, 32, 64, 140, 255, 255, 31, 112, 19, 112, 0, 188, 255, 255, 31, 140, 19, 112, - 0, 196, 255, 255, 30, 52, 19, 112, 0, 204, 255, 255, 31, 104, 32, 32, 91, 20, 32, 32, 62, 108, 255, 255, 30, 176, 255, - 255, 30, 204, 255, 255, 29, 116, 255, 255, 30, 168, 32, 32, 94, 132, 32, 32, 93, 148, 32, 32, 63, 96, 255, 255, 33, - 48, 255, 255, 33, 76, 255, 255, 31, 244, 255, 255, 33, 40, 181, 56, 77, 11, 35, 0, 104, 42, 73, 10, 240, 4, 252, 201, - 76, 10, 73, 10, 34, 0, 96, 32, 104, 40, 240, 4, 253, 4, 104, 32, 240, 4, 252, 211, 104, 32, 240, 4, 253, 26, 188, 56, - 188, 1, 71, 0, 70, 192, 19, 112, 96, 44, 0, 152, 150, 128, 19, 112, 96, 52, 19, 112, 106, 232, 181, 8, 1, 67, 26, 27, - 0, 155, 24, 24, 0, 192, 247, 255, 255, 216, 188, 8, 188, 1, 71, 0, 0, 0, 181, 0, 74, 5, 2, 192, 104, 19, 104, 17, 26, - 201, 213, 0, 104, 19, 66, 129, 217, 249, 188, 1, 71, 0, 13, 128, 0, 16, 181, 8, 75, 24, 120, 26, 30, 83, 65, 154, 75, - 23, 96, 26, 240, 3, 252, 204, 75, 22, 33, 4, 96, 24, 28, 24, 240, 4, 252, 225, 240, 3, 252, 206, 34, 0, 28, 1, 72, 18, - 240, 3, 253, 3, 33, 160, 2, 73, 72, 16, 240, 4, 252, 201, 75, 16, 33, 128, 96, 24, 240, 4, 252, 122, 33, 32, 240, 4, - 252, 169, 75, 13, 96, 24, 240, 3, 251, 37, 40, 0, 219, 3, 247, 255, 250, 7, 32, 0, 224, 1, 32, 1, 66, 64, 188, 8, 188, - 2, 71, 8, 19, 112, 1, 12, 19, 112, 107, 80, 19, 114, 195, 128, 19, 112, 14, 77, 19, 113, 131, 128, 19, 112, 96, 48, - 19, 112, 96, 44, 181, 240, 7, 65, 213, 27, 34, 128, 78, 14, 77, 15, 76, 15, 35, 0, 1, 146, 104, 49, 0, 152, 104, 137, - 104, 47, 49, 68, 24, 9, 104, 8, 66, 187, 209, 5, 7, 193, 212, 7, 73, 9, 32, 2, 96, 8, 224, 3, 64, 32, 40, 3, 209, 0, - 96, 10, 51, 1, 43, 4, 209, 233, 188, 240, 188, 1, 71, 0, 19, 112, 96, 60, 19, 112, 107, 80, 0, 0, 32, 3, 19, 112, 107, - 84, 181, 240, 176, 131, 147, 1, 155, 8, 76, 14, 0, 91, 104, 38, 28, 13, 28, 23, 147, 0, 32, 10, 247, 255, 255, 79, 104, - 43, 154, 1, 64, 59, 66, 147, 208, 9, 104, 35, 27, 155, 213, 0, 104, 38, 154, 0, 66, 147, 211, 240, 32, 2, 66, 64, 224, - 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 70, 192, 13, 128, 0, 16, 181, 56, 28, 4, 240, 3, 251, 27, 33, 0, 28, 5, 34, - 96, 28, 32, 240, 4, 251, 64, 35, 64, 96, 163, 35, 128, 4, 91, 99, 101, 96, 35, 96, 99, 188, 56, 188, 1, 71, 0, 181, - 16, 75, 12, 36, 0, 104, 27, 108, 26, 42, 7, 220, 13, 73, 10, 104, 12, 0, 228, 24, 164, 0, 97, 25, 12, 106, 25, 1, 100, - 25, 12, 50, 1, 100, 26, 28, 32, 247, 255, 255, 215, 28, 32, 188, 16, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 112, - 107, 64, 181, 240, 28, 4, 176, 133, 28, 8, 28, 14, 147, 3, 28, 23, 240, 4, 250, 147, 35, 0, 98, 35, 5, 53, 35, 128, - 13, 45, 1, 91, 27, 93, 96, 224, 66, 175, 210, 1, 28, 61, 224, 49, 32, 128, 1, 64, 24, 54, 11, 54, 3, 54, 150, 2, 33, - 1, 28, 38, 54, 16, 145, 1, 224, 20, 152, 2, 240, 4, 250, 121, 34, 0, 198, 1, 97, 50, 155, 2, 33, 128, 28, 24, 35, 128, - 1, 91, 1, 73, 24, 192, 24, 109, 144, 2, 66, 189, 211, 0, 28, 61, 154, 1, 50, 1, 146, 1, 66, 189, 210, 8, 152, 1, 33, - 0, 15, 195, 34, 4, 66, 130, 65, 75, 6, 27, 43, 0, 209, 223, 66, 189, 208, 4, 28, 40, 153, 10, 240, 4, 251, 194, 26, - 109, 155, 3, 4, 40, 67, 24, 240, 4, 250, 80, 35, 128, 4, 91, 96, 160, 100, 37, 96, 35, 96, 99, 176, 5, 28, 40, 188, - 240, 188, 2, 71, 8, 0, 0, 181, 240, 176, 139, 28, 5, 247, 255, 255, 133, 28, 6, 32, 0, 46, 0, 209, 0, 224, 145, 99, - 245, 105, 42, 126, 107, 126, 47, 97, 104, 146, 3, 147, 7, 47, 0, 209, 25, 35, 8, 147, 0, 35, 160, 104, 105, 34, 8, 0, - 155, 28, 48, 247, 255, 255, 140, 247, 255, 255, 108, 28, 4, 28, 56, 44, 0, 208, 121, 107, 96, 99, 229, 240, 4, 250, - 30, 154, 3, 96, 48, 99, 180, 42, 0, 208, 4, 79, 58, 224, 3, 28, 52, 39, 128, 224, 0, 79, 56, 104, 235, 154, 7, 147, - 4, 42, 0, 208, 2, 35, 128, 0, 91, 67, 31, 105, 235, 150, 9, 5, 91, 13, 91, 147, 5, 154, 5, 35, 128, 4, 91, 58, 1, 147, - 6, 146, 8, 155, 5, 154, 3, 147, 0, 28, 32, 28, 59, 153, 4, 247, 255, 255, 92, 154, 3, 155, 4, 26, 18, 146, 3, 154, 7, - 24, 27, 147, 4, 42, 0, 208, 1, 155, 6, 96, 99, 154, 8, 155, 5, 24, 128, 66, 3, 209, 2, 34, 128, 6, 18, 24, 191, 155, - 3, 43, 0, 221, 11, 247, 255, 255, 38, 30, 6, 208, 52, 107, 112, 99, 245, 240, 4, 249, 218, 99, 166, 96, 32, 28, 52, - 231, 213, 35, 128, 4, 91, 96, 99, 105, 43, 158, 9, 148, 3, 43, 0, 208, 29, 126, 42, 146, 4, 42, 0, 209, 25, 247, 255, - 255, 14, 28, 4, 32, 0, 44, 0, 208, 27, 107, 96, 99, 229, 240, 4, 249, 192, 155, 3, 34, 128, 96, 24, 99, 156, 35, 128, - 0, 91, 6, 18, 64, 123, 67, 19, 154, 4, 28, 32, 146, 0, 33, 0, 34, 0, 247, 255, 255, 20, 104, 162, 35, 128, 4, 27, 67, - 19, 96, 163, 28, 48, 224, 0, 32, 0, 176, 11, 188, 240, 188, 2, 71, 8, 128, 0, 0, 128, 128, 0, 1, 128, 181, 56, 76, 19, - 37, 32, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 224, 18, - 104, 34, 67, 171, 104, 146, 32, 10, 96, 19, 247, 255, 253, 243, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, 67, - 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 66, 29, 209, 234, 188, 56, 188, 1, 71, 0, 19, 112, 96, 60, 181, 56, 76, - 19, 37, 32, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 224, - 18, 104, 34, 67, 43, 104, 146, 32, 10, 96, 19, 247, 255, 253, 201, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, - 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 66, 29, 208, 234, 188, 56, 188, 1, 71, 0, 19, 112, 96, 60, 181, 248, - 28, 12, 40, 0, 209, 33, 77, 28, 76, 29, 79, 29, 38, 0, 104, 43, 104, 155, 126, 25, 126, 90, 6, 9, 4, 18, 67, 10, 126, - 153, 126, 219, 2, 9, 67, 10, 67, 19, 105, 34, 108, 82, 66, 147, 211, 6, 105, 98, 108, 82, 66, 147, 216, 2, 247, 255, - 255, 142, 224, 25, 32, 10, 54, 1, 247, 255, 253, 147, 66, 190, 209, 226, 224, 18, 40, 1, 209, 16, 224, 6, 32, 10, 54, - 1, 247, 255, 253, 137, 66, 190, 209, 3, 224, 8, 77, 6, 79, 8, 38, 0, 104, 43, 104, 155, 105, 154, 108, 99, 66, 154, - 208, 239, 32, 0, 188, 248, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 114, 195, 160, 0, 0, 19, 136, 181, 0, 7, 67, - 213, 21, 75, 12, 104, 27, 104, 154, 75, 11, 108, 81, 64, 11, 43, 3, 209, 2, 35, 128, 1, 155, 100, 83, 75, 6, 104, 27, - 104, 154, 75, 6, 108, 145, 64, 11, 43, 3, 209, 2, 35, 128, 1, 155, 100, 147, 188, 1, 71, 0, 70, 192, 19, 112, 96, 60, - 0, 0, 32, 3, 181, 16, 75, 19, 28, 4, 104, 27, 52, 16, 104, 155, 0, 164, 25, 28, 34, 128, 104, 99, 1, 146, 66, 19, 209, - 0, 64, 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 253, 106, 34, 128, 104, 99, 1, 146, 66, 19, 208, 0, 64, 83, 34, - 46, 67, 147, 96, 99, 32, 5, 247, 255, 253, 94, 75, 4, 32, 5, 96, 99, 247, 255, 253, 89, 188, 16, 188, 1, 71, 0, 19, - 112, 96, 60, 0, 0, 24, 1, 181, 240, 176, 131, 75, 36, 28, 5, 104, 27, 53, 16, 104, 155, 0, 173, 25, 93, 104, 107, 74, - 33, 29, 44, 64, 26, 38, 4, 42, 1, 208, 4, 4, 154, 213, 51, 247, 255, 255, 192, 224, 48, 39, 136, 1, 127, 34, 4, 67, - 147, 67, 59, 96, 35, 32, 60, 247, 255, 253, 40, 104, 35, 74, 24, 32, 50, 64, 19, 96, 35, 247, 255, 253, 33, 75, 22, - 34, 128, 147, 0, 28, 32, 28, 33, 0, 82, 35, 0, 247, 255, 253, 156, 40, 0, 208, 2, 104, 107, 72, 17, 224, 20, 104, 35, - 34, 4, 66, 26, 209, 16, 62, 1, 46, 0, 209, 220, 34, 128, 1, 146, 67, 19, 33, 42, 67, 139, 96, 107, 32, 10, 96, 106, - 247, 255, 253, 2, 72, 8, 224, 1, 32, 1, 66, 64, 176, 3, 188, 240, 188, 2, 71, 8, 19, 112, 96, 60, 0, 0, 32, 1, 255, - 255, 254, 213, 0, 0, 19, 136, 255, 255, 248, 48, 255, 255, 251, 161, 181, 16, 75, 20, 28, 4, 104, 27, 52, 16, 104, 155, - 0, 164, 25, 28, 34, 128, 104, 99, 1, 146, 66, 19, 209, 0, 64, 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 252, 230, - 34, 128, 104, 99, 1, 146, 66, 19, 208, 0, 64, 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 252, 218, 75, 5, 32, 60, - 96, 99, 247, 255, 252, 213, 32, 1, 188, 16, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 0, 0, 24, 1, 32, 0, 71, 112, 75, - 5, 48, 16, 104, 27, 0, 128, 104, 155, 24, 24, 35, 128, 1, 155, 96, 67, 32, 0, 71, 112, 70, 192, 19, 112, 96, 60, 74, - 5, 32, 0, 104, 19, 104, 153, 35, 128, 1, 155, 100, 75, 104, 18, 104, 146, 100, 147, 71, 112, 70, 192, 19, 112, 96, 60, - 181, 0, 75, 10, 104, 27, 104, 154, 35, 128, 108, 81, 1, 155, 66, 25, 209, 0, 100, 83, 75, 5, 104, 27, 104, 154, 35, - 128, 108, 145, 1, 155, 66, 25, 209, 0, 100, 147, 32, 0, 188, 2, 71, 8, 19, 112, 96, 60, 75, 6, 33, 0, 104, 26, 35, 1, - 66, 91, 28, 16, 103, 17, 103, 147, 48, 152, 50, 160, 96, 1, 96, 19, 71, 112, 70, 192, 19, 112, 96, 60, 75, 6, 120, 27, - 30, 90, 65, 147, 74, 5, 0, 152, 96, 19, 74, 5, 24, 195, 0, 219, 104, 16, 51, 88, 24, 192, 71, 112, 19, 112, 1, 12, 19, - 112, 107, 80, 19, 112, 96, 60, 181, 16, 73, 19, 120, 9, 30, 72, 65, 129, 72, 18, 0, 140, 96, 1, 72, 17, 24, 97, 104, - 0, 0, 201, 24, 64, 111, 4, 33, 0, 44, 0, 208, 16, 128, 25, 128, 89, 28, 1, 49, 96, 136, 8, 4, 0, 10, 4, 14, 0, 67, 32, - 128, 152, 136, 73, 4, 9, 10, 8, 14, 9, 67, 1, 128, 217, 33, 1, 32, 0, 112, 17, 188, 16, 188, 2, 71, 8, 70, 192, 19, - 112, 1, 12, 19, 112, 107, 80, 19, 112, 96, 60, 181, 0, 28, 3, 224, 8, 120, 90, 58, 4, 6, 18, 14, 18, 42, 1, 217, 4, - 120, 26, 26, 137, 24, 155, 41, 0, 209, 244, 26, 24, 188, 2, 71, 8, 181, 240, 176, 133, 124, 130, 124, 195, 6, 18, 4, - 27, 67, 19, 125, 2, 28, 5, 2, 18, 67, 19, 125, 66, 67, 26, 208, 103, 34, 0, 146, 3, 146, 1, 224, 83, 6, 36, 4, 9, 2, - 18, 67, 12, 67, 20, 158, 3, 67, 35, 25, 156, 122, 98, 122, 163, 6, 18, 4, 27, 67, 19, 122, 226, 2, 18, 67, 19, 123, - 34, 67, 26, 208, 58, 39, 0, 151, 2, 28, 46, 224, 36, 6, 0, 4, 9, 2, 18, 67, 8, 67, 16, 67, 3, 25, 221, 123, 170, 123, - 235, 6, 18, 4, 27, 67, 19, 124, 42, 124, 104, 2, 18, 67, 19, 67, 24, 208, 1, 240, 2, 255, 250, 122, 106, 122, 171, 6, - 18, 4, 27, 67, 19, 122, 234, 123, 40, 2, 18, 67, 19, 67, 24, 208, 1, 240, 2, 255, 237, 154, 2, 55, 18, 50, 1, 146, 2, - 121, 35, 157, 2, 70, 156, 122, 96, 122, 161, 122, 226, 123, 35, 69, 101, 219, 209, 28, 53, 6, 6, 4, 8, 67, 48, 2, 18, - 67, 16, 67, 24, 240, 2, 255, 215, 158, 1, 154, 3, 54, 1, 50, 13, 150, 1, 146, 3, 124, 104, 158, 1, 124, 172, 124, 233, - 125, 42, 125, 107, 66, 134, 219, 163, 6, 36, 4, 8, 67, 32, 2, 18, 67, 16, 67, 24, 240, 2, 255, 193, 176, 5, 188, 240, - 188, 1, 71, 0, 0, 0, 181, 248, 30, 5, 209, 4, 75, 28, 34, 48, 112, 26, 112, 93, 224, 47, 76, 26, 28, 46, 28, 48, 33, - 10, 240, 4, 248, 128, 28, 48, 28, 15, 33, 10, 240, 4, 248, 119, 23, 251, 24, 255, 64, 95, 55, 48, 75, 20, 112, 39, 60, - 1, 28, 6, 66, 156, 209, 236, 75, 15, 34, 0, 118, 154, 45, 0, 218, 2, 34, 45, 112, 26, 34, 1, 35, 16, 72, 10, 224, 0, - 51, 1, 92, 193, 41, 48, 208, 251, 66, 72, 65, 65, 26, 91, 73, 6, 224, 2, 84, 136, 51, 1, 50, 1, 92, 200, 40, 0, 209, - 249, 84, 136, 188, 248, 188, 1, 71, 0, 70, 192, 19, 114, 197, 96, 19, 114, 197, 121, 19, 114, 197, 111, 181, 248, 30, - 4, 209, 4, 75, 24, 34, 48, 112, 26, 112, 92, 224, 40, 77, 22, 28, 47, 63, 10, 28, 32, 33, 10, 240, 4, 248, 23, 28, 32, - 28, 14, 33, 10, 240, 4, 248, 30, 54, 48, 112, 46, 61, 1, 28, 4, 66, 189, 209, 240, 74, 12, 35, 0, 118, 147, 28, 17, - 35, 16, 224, 0, 51, 1, 92, 202, 42, 48, 208, 251, 66, 81, 65, 74, 26, 155, 73, 6, 34, 0, 224, 2, 84, 136, 51, 1, 50, - 1, 92, 200, 40, 0, 209, 249, 84, 136, 188, 248, 188, 1, 71, 0, 19, 114, 197, 96, 19, 114, 197, 121, 181, 16, 40, 0, - 209, 4, 75, 24, 34, 48, 112, 26, 112, 88, 224, 40, 75, 22, 33, 15, 28, 28, 60, 8, 28, 10, 64, 2, 9, 0, 42, 9, 221, 0, - 50, 7, 50, 48, 112, 26, 59, 1, 66, 163, 209, 244, 74, 14, 35, 0, 118, 19, 35, 48, 112, 19, 35, 120, 112, 83, 35, 16, - 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, 66, 74, 65, 74, 26, 155, 73, 6, 34, 2, 224, 2, 84, 136, 51, 1, 50, 1, 92, - 200, 40, 0, 209, 249, 84, 136, 188, 16, 188, 1, 71, 0, 19, 114, 197, 96, 19, 114, 197, 119, 180, 15, 181, 240, 176, - 133, 171, 10, 203, 64, 34, 128, 1, 146, 169, 3, 128, 10, 147, 2, 36, 0, 77, 46, 79, 46, 224, 81, 28, 114, 146, 1, 43, - 37, 208, 12, 70, 106, 115, 19, 168, 3, 240, 3, 255, 41, 25, 4, 158, 1, 66, 172, 220, 68, 168, 3, 240, 3, 255, 222, 224, - 64, 120, 115, 43, 115, 208, 46, 43, 115, 216, 4, 43, 100, 208, 7, 43, 105, 209, 53, 224, 4, 43, 117, 208, 9, 43, 120, - 209, 48, 224, 20, 155, 2, 29, 26, 146, 2, 104, 24, 247, 255, 255, 26, 224, 19, 155, 2, 29, 26, 146, 2, 104, 24, 247, - 255, 255, 85, 28, 56, 240, 3, 255, 2, 25, 4, 28, 56, 66, 172, 220, 27, 224, 24, 155, 2, 29, 26, 146, 2, 104, 24, 247, - 255, 255, 127, 72, 16, 240, 3, 254, 244, 25, 4, 66, 172, 220, 14, 72, 13, 224, 10, 155, 2, 29, 26, 146, 2, 104, 30, - 28, 48, 240, 3, 254, 232, 25, 4, 66, 172, 220, 2, 28, 48, 240, 3, 255, 158, 158, 1, 54, 1, 120, 51, 43, 0, 209, 170, - 176, 5, 188, 240, 188, 8, 176, 4, 71, 24, 0, 0, 13, 171, 19, 114, 197, 96, 181, 240, 28, 12, 176, 133, 28, 6, 33, 0, - 32, 0, 247, 255, 252, 176, 126, 35, 43, 0, 209, 6, 74, 218, 33, 8, 96, 19, 104, 32, 240, 2, 254, 69, 96, 96, 105, 33, - 41, 0, 208, 9, 126, 99, 104, 160, 43, 0, 208, 2, 240, 2, 254, 59, 224, 1, 240, 2, 254, 64, 96, 224, 126, 35, 43, 0, - 209, 3, 75, 207, 104, 27, 105, 219, 224, 6, 126, 99, 43, 0, 208, 1, 75, 205, 224, 0, 75, 205, 104, 27, 147, 2, 77, 204, - 75, 205, 153, 2, 28, 40, 96, 25, 34, 96, 240, 2, 255, 104, 33, 0, 34, 48, 152, 2, 240, 3, 254, 69, 75, 195, 34, 0, 104, - 27, 28, 32, 100, 26, 75, 197, 34, 1, 104, 25, 64, 74, 96, 26, 247, 255, 251, 121, 75, 195, 100, 168, 96, 24, 126, 34, - 35, 15, 146, 1, 64, 26, 146, 3, 155, 3, 28, 7, 34, 128, 105, 176, 2, 29, 1, 146, 155, 1, 67, 2, 105, 225, 67, 42, 43, - 0, 209, 1, 72, 186, 224, 5, 5, 72, 35, 128, 9, 64, 5, 219, 67, 3, 28, 24, 67, 16, 240, 3, 253, 158, 77, 176, 35, 64, - 96, 171, 75, 180, 33, 255, 104, 27, 34, 255, 108, 91, 2, 9, 4, 18, 64, 25, 64, 26, 2, 9, 10, 18, 67, 10, 14, 25, 67, - 10, 33, 224, 64, 11, 33, 2, 67, 11, 6, 27, 67, 26, 96, 104, 96, 42, 107, 120, 240, 3, 253, 130, 35, 128, 153, 1, 4, - 91, 97, 40, 97, 107, 41, 0, 208, 16, 9, 203, 153, 3, 106, 114, 1, 27, 24, 91, 64, 218, 28, 19, 7, 218, 213, 3, 105, - 170, 35, 128, 67, 19, 224, 2, 105, 171, 34, 128, 67, 147, 97, 171, 77, 150, 75, 156, 105, 170, 28, 40, 64, 19, 97, 171, - 33, 96, 240, 2, 253, 195, 108, 173, 224, 4, 28, 40, 33, 96, 240, 2, 253, 189, 107, 173, 45, 0, 209, 248, 152, 2, 73, - 141, 34, 96, 240, 2, 254, 224, 75, 146, 120, 27, 43, 0, 208, 4, 75, 145, 72, 145, 104, 25, 247, 255, 254, 218, 75, 144, - 34, 1, 96, 26, 77, 130, 35, 0, 147, 1, 153, 1, 74, 139, 49, 1, 145, 1, 72, 140, 104, 17, 247, 254, 255, 192, 104, 43, - 33, 32, 105, 152, 240, 2, 253, 173, 104, 42, 73, 124, 39, 2, 108, 75, 105, 145, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, - 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 67, 59, 6, 24, 28, 19, 67, 3, 96, 11, 104, 43, 33, 32, - 105, 152, 240, 2, 253, 125, 247, 255, 251, 163, 247, 254, 255, 201, 154, 1, 42, 4, 208, 6, 28, 3, 51, 9, 209, 3, 72, - 118, 247, 255, 254, 158, 231, 200, 75, 114, 34, 0, 96, 26, 75, 109, 28, 7, 120, 27, 43, 0, 208, 3, 72, 113, 28, 57, - 247, 255, 254, 145, 47, 0, 209, 3, 75, 93, 104, 27, 43, 0, 208, 15, 75, 92, 104, 27, 104, 154, 75, 107, 50, 68, 104, - 27, 0, 155, 24, 211, 104, 27, 34, 5, 64, 19, 43, 5, 208, 2, 75, 84, 34, 1, 96, 26, 66, 121, 65, 121, 145, 1, 29, 122, - 208, 1, 41, 0, 208, 65, 247, 255, 251, 66, 77, 79, 33, 32, 104, 43, 105, 152, 240, 3, 254, 144, 104, 43, 33, 32, 105, - 152, 240, 2, 253, 39, 75, 82, 104, 42, 104, 27, 105, 145, 108, 91, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, 4, 18, 64, - 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 32, 2, 67, 3, 6, 24, 28, 19, 67, 3, 96, 11, 104, 43, 33, 32, 105, - 152, 240, 3, 254, 78, 247, 255, 251, 66, 126, 34, 42, 0, 208, 98, 9, 211, 32, 15, 64, 16, 1, 27, 24, 27, 106, 113, 34, - 1, 64, 154, 67, 145, 28, 10, 73, 70, 104, 9, 6, 9, 15, 201, 64, 153, 28, 11, 67, 19, 98, 115, 224, 79, 247, 255, 251, - 0, 75, 49, 108, 157, 224, 4, 107, 104, 33, 96, 240, 2, 253, 15, 107, 173, 45, 0, 209, 248, 77, 44, 34, 32, 28, 40, 153, - 2, 240, 2, 254, 42, 126, 34, 42, 0, 208, 16, 9, 211, 32, 15, 64, 16, 1, 27, 24, 27, 106, 113, 34, 1, 64, 154, 67, 145, - 28, 10, 105, 169, 6, 9, 15, 201, 64, 153, 28, 11, 67, 19, 98, 115, 77, 28, 33, 32, 104, 43, 38, 2, 105, 152, 240, 3, - 254, 41, 104, 43, 33, 32, 105, 152, 240, 2, 252, 192, 75, 30, 104, 42, 104, 27, 105, 145, 108, 91, 34, 255, 2, 18, 64, - 26, 2, 16, 34, 255, 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 67, 51, 6, 24, 28, 19, 67, 3, 96, 11, - 104, 43, 33, 32, 105, 152, 240, 3, 253, 232, 247, 255, 250, 220, 73, 10, 32, 1, 247, 255, 251, 2, 105, 33, 41, 0, 208, - 48, 126, 99, 104, 224, 43, 0, 208, 42, 240, 2, 252, 175, 224, 41, 19, 112, 107, 84, 19, 112, 96, 60, 19, 112, 106, 244, - 19, 112, 107, 72, 19, 114, 197, 0, 19, 112, 106, 252, 19, 112, 107, 64, 19, 112, 107, 20, 64, 64, 64, 0, 19, 112, 107, - 68, 1, 0, 0, 128, 19, 112, 106, 248, 19, 112, 96, 56, 19, 112, 96, 194, 19, 112, 107, 16, 19, 112, 41, 229, 19, 112, - 98, 156, 19, 112, 96, 240, 19, 112, 107, 80, 19, 112, 107, 4, 240, 2, 252, 138, 126, 35, 43, 0, 209, 3, 104, 96, 33, - 8, 240, 2, 252, 125, 155, 1, 43, 0, 208, 0, 105, 103, 176, 5, 28, 56, 188, 240, 188, 2, 71, 8, 181, 48, 176, 137, 70, - 108, 118, 33, 9, 201, 118, 97, 33, 128, 0, 137, 37, 0, 145, 7, 70, 105, 149, 0, 146, 4, 147, 2, 247, 255, 253, 246, - 176, 9, 188, 48, 188, 2, 71, 8, 181, 240, 176, 139, 28, 6, 70, 104, 48, 70, 136, 4, 72, 43, 70, 156, 104, 0, 70, 107, - 51, 66, 48, 248, 104, 0, 136, 27, 112, 66, 4, 27, 70, 98, 147, 1, 2, 19, 10, 18, 67, 19, 4, 26, 12, 19, 14, 18, 112, - 1, 159, 18, 112, 130, 112, 195, 155, 1, 4, 36, 10, 26, 14, 27, 67, 19, 4, 27, 12, 37, 12, 26, 14, 27, 113, 3, 14, 36, - 2, 43, 67, 35, 4, 27, 113, 66, 14, 26, 12, 27, 113, 195, 172, 2, 35, 0, 113, 130, 118, 35, 35, 64, 97, 227, 75, 21, - 9, 201, 144, 2, 118, 97, 97, 37, 66, 159, 217, 22, 28, 40, 240, 2, 252, 52, 28, 42, 28, 57, 96, 160, 240, 3, 251, 237, - 28, 33, 28, 48, 247, 255, 253, 171, 104, 164, 28, 6, 28, 33, 28, 56, 28, 42, 240, 3, 251, 226, 28, 32, 240, 2, 252, - 63, 224, 5, 28, 48, 96, 167, 28, 33, 247, 255, 253, 155, 28, 6, 176, 11, 28, 48, 188, 240, 188, 2, 71, 8, 70, 192, 19, - 112, 96, 60, 19, 136, 0, 0, 181, 0, 176, 133, 145, 0, 35, 0, 33, 2, 34, 1, 147, 1, 147, 2, 247, 255, 255, 148, 176, - 5, 188, 2, 71, 8, 181, 0, 176, 133, 28, 19, 34, 0, 145, 0, 146, 1, 146, 2, 33, 1, 34, 11, 247, 255, 255, 134, 176, 5, - 188, 2, 71, 8, 181, 0, 176, 133, 34, 0, 146, 0, 146, 1, 146, 2, 28, 11, 34, 9, 33, 0, 247, 255, 255, 120, 176, 5, 188, - 2, 71, 8, 181, 112, 28, 4, 176, 132, 32, 1, 28, 14, 240, 2, 251, 224, 30, 5, 208, 18, 35, 0, 147, 0, 35, 1, 147, 1, - 28, 32, 33, 128, 34, 8, 35, 0, 149, 2, 247, 255, 255, 97, 30, 4, 219, 1, 120, 43, 112, 51, 28, 40, 240, 2, 251, 234, - 224, 1, 36, 4, 66, 100, 176, 4, 28, 32, 188, 112, 188, 2, 71, 8, 181, 16, 176, 132, 70, 108, 2, 18, 52, 27, 120, 36, - 67, 19, 34, 0, 146, 0, 145, 2, 34, 6, 33, 128, 148, 1, 247, 255, 255, 67, 176, 4, 188, 16, 188, 2, 71, 8, 0, 0, 181, - 240, 176, 137, 75, 65, 28, 2, 104, 30, 0, 129, 104, 179, 24, 9, 50, 16, 0, 201, 0, 146, 24, 154, 28, 11, 51, 88, 28, - 7, 24, 240, 144, 5, 24, 113, 32, 0, 103, 8, 104, 81, 29, 21, 74, 56, 64, 10, 42, 1, 209, 99, 34, 4, 146, 4, 147, 7, - 75, 54, 32, 10, 96, 43, 247, 254, 255, 156, 75, 52, 32, 100, 96, 43, 247, 254, 255, 151, 75, 51, 34, 128, 96, 43, 35, - 250, 0, 219, 147, 0, 0, 82, 35, 0, 28, 40, 28, 41, 247, 255, 248, 15, 104, 42, 75, 45, 28, 4, 64, 19, 43, 5, 209, 50, - 35, 192, 1, 27, 64, 26, 35, 128, 0, 219, 66, 154, 208, 43, 40, 0, 209, 43, 32, 100, 247, 254, 255, 121, 75, 38, 74, - 38, 104, 24, 96, 26, 154, 7, 35, 22, 147, 1, 24, 179, 147, 2, 35, 128, 144, 6, 33, 128, 152, 5, 34, 6, 0, 91, 148, 0, - 247, 255, 254, 231, 30, 4, 219, 12, 28, 123, 32, 0, 4, 27, 144, 0, 144, 1, 144, 2, 12, 27, 152, 5, 33, 0, 34, 5, 247, - 255, 254, 217, 28, 4, 75, 21, 154, 6, 96, 26, 44, 0, 219, 2, 224, 8, 36, 1, 66, 100, 155, 4, 59, 1, 147, 4, 43, 0, 209, - 169, 44, 0, 219, 10, 0, 187, 25, 219, 0, 219, 24, 246, 55, 1, 35, 0, 103, 243, 103, 55, 224, 1, 36, 1, 66, 100, 176, - 9, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 0, 0, 32, 1, 0, 0, 24, 3, 0, 0, 25, 3, 0, 0, 16, 1, 0, - 0, 32, 5, 19, 112, 96, 56, 0, 6, 26, 128, 181, 248, 76, 25, 28, 6, 104, 35, 104, 157, 35, 1, 96, 171, 247, 255, 255, - 97, 30, 7, 218, 24, 104, 35, 33, 55, 104, 155, 28, 52, 104, 90, 32, 10, 64, 10, 96, 90, 52, 16, 247, 254, 255, 18, 0, - 164, 75, 15, 25, 44, 96, 99, 32, 50, 247, 254, 255, 11, 75, 13, 32, 100, 96, 99, 247, 254, 255, 6, 75, 11, 96, 99, 75, - 7, 32, 55, 104, 26, 104, 146, 104, 81, 64, 1, 96, 81, 104, 27, 34, 4, 104, 155, 28, 56, 96, 154, 188, 248, 188, 2, 71, - 8, 70, 192, 19, 112, 96, 60, 0, 0, 24, 3, 0, 0, 25, 3, 0, 0, 16, 1, 181, 240, 176, 137, 75, 126, 34, 0, 104, 31, 0, - 131, 24, 27, 0, 219, 28, 30, 147, 5, 54, 88, 24, 251, 28, 4, 25, 190, 103, 26, 32, 50, 247, 254, 254, 218, 37, 3, 150, - 6, 72, 118, 247, 255, 251, 219, 32, 50, 247, 254, 254, 210, 35, 22, 147, 1, 155, 6, 34, 0, 147, 2, 35, 128, 146, 0, - 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 254, 69, 40, 0, 218, 12, 72, 109, 247, 255, 251, 198, 32, 50, 247, 254, 254, - 189, 61, 1, 32, 100, 247, 254, 254, 185, 45, 0, 209, 222, 224, 2, 154, 5, 24, 187, 224, 38, 28, 32, 247, 255, 249, 106, - 75, 100, 66, 152, 209, 0, 224, 184, 32, 100, 247, 254, 254, 169, 72, 98, 247, 255, 251, 172, 35, 22, 147, 1, 155, 6, - 34, 0, 147, 2, 35, 128, 146, 0, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 254, 25, 40, 0, 218, 6, 72, 90, 53, 1, 247, - 255, 251, 153, 45, 3, 209, 221, 224, 12, 0, 163, 25, 27, 0, 219, 24, 251, 110, 26, 75, 85, 66, 154, 209, 46, 28, 32, - 247, 255, 249, 199, 76, 83, 224, 144, 28, 32, 247, 255, 249, 14, 32, 100, 247, 254, 254, 125, 28, 32, 247, 255, 249, - 52, 74, 73, 66, 144, 209, 0, 224, 130, 32, 100, 247, 254, 254, 115, 72, 75, 247, 255, 251, 118, 35, 0, 154, 6, 147, - 0, 35, 22, 147, 1, 35, 128, 146, 2, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 253, 227, 40, 0, 218, 7, 72, 63, 61, 1, - 247, 255, 251, 99, 45, 0, 209, 215, 76, 64, 224, 102, 72, 64, 247, 255, 251, 92, 28, 99, 147, 5, 4, 27, 12, 27, 147, - 7, 0, 163, 25, 28, 0, 228, 37, 0, 25, 63, 32, 50, 247, 254, 254, 73, 72, 57, 28, 41, 247, 255, 251, 75, 35, 0, 147, - 0, 147, 1, 147, 2, 28, 48, 33, 0, 34, 5, 155, 7, 247, 255, 253, 187, 30, 4, 218, 7, 76, 50, 28, 41, 72, 50, 27, 100, - 247, 255, 251, 57, 53, 1, 224, 3, 72, 48, 28, 41, 247, 255, 251, 51, 155, 5, 34, 0, 103, 250, 103, 59, 44, 0, 218, 47, - 33, 0, 28, 48, 247, 255, 254, 5, 32, 50, 247, 254, 254, 32, 72, 40, 247, 255, 251, 35, 35, 22, 147, 1, 155, 6, 34, 0, - 147, 2, 35, 128, 146, 0, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 253, 144, 30, 4, 218, 6, 72, 32, 247, 255, 251, 17, - 34, 0, 103, 58, 76, 31, 224, 2, 72, 31, 247, 255, 251, 10, 53, 1, 44, 0, 218, 7, 15, 233, 34, 0, 35, 4, 66, 171, 65, - 74, 6, 18, 42, 0, 209, 172, 44, 0, 219, 4, 72, 24, 247, 255, 250, 250, 224, 0, 76, 6, 176, 9, 28, 32, 188, 240, 188, - 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 112, 97, 75, 19, 112, 97, 0, 255, 255, 251, 161, 19, 112, 97, 30, 19, 112, 97, - 69, 149, 11, 32, 119, 255, 255, 251, 160, 19, 112, 97, 106, 255, 255, 247, 103, 19, 112, 97, 155, 19, 112, 97, 181, - 255, 255, 224, 192, 19, 112, 97, 212, 19, 112, 97, 243, 19, 112, 98, 55, 19, 112, 98, 14, 255, 255, 247, 62, 19, 112, - 98, 52, 19, 112, 98, 87, 181, 16, 75, 10, 34, 1, 104, 27, 28, 4, 104, 155, 96, 154, 247, 255, 248, 117, 40, 0, 219, - 2, 28, 32, 247, 255, 254, 202, 75, 3, 34, 4, 104, 27, 104, 155, 96, 154, 188, 16, 188, 2, 71, 8, 19, 112, 96, 60, 181, - 240, 176, 141, 144, 6, 32, 22, 28, 13, 240, 2, 249, 151, 30, 7, 209, 0, 224, 214, 32, 10, 247, 254, 253, 159, 35, 18, - 147, 0, 152, 6, 28, 57, 34, 1, 35, 0, 247, 255, 253, 197, 40, 0, 218, 54, 72, 180, 247, 255, 250, 152, 76, 179, 104, - 32, 247, 255, 255, 202, 28, 6, 32, 20, 247, 254, 253, 138, 75, 176, 104, 32, 104, 27, 0, 130, 104, 155, 51, 68, 24, - 155, 104, 26, 46, 0, 219, 4, 75, 172, 64, 26, 75, 172, 66, 154, 208, 13, 247, 255, 254, 81, 32, 20, 247, 254, 253, 118, - 75, 166, 104, 27, 104, 154, 75, 164, 50, 68, 104, 27, 0, 155, 24, 211, 104, 27, 32, 30, 247, 254, 253, 106, 35, 18, - 147, 0, 152, 6, 28, 57, 34, 1, 35, 0, 247, 255, 253, 144, 30, 4, 218, 1, 72, 158, 224, 165, 28, 57, 34, 18, 28, 40, - 240, 3, 249, 9, 28, 56, 240, 2, 249, 102, 120, 170, 120, 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, - 26, 112, 234, 14, 27, 122, 42, 112, 171, 122, 107, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 26, 114, - 106, 14, 27, 122, 170, 114, 43, 122, 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 26, 114, 234, 14, - 27, 123, 42, 114, 171, 123, 107, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 26, 14, 27, 115, 43, 124, - 107, 115, 106, 0, 88, 24, 192, 0, 128, 24, 192, 240, 2, 249, 13, 14, 3, 116, 171, 12, 3, 116, 235, 10, 3, 117, 43, 117, - 104, 40, 0, 209, 1, 72, 120, 224, 204, 124, 107, 33, 0, 0, 90, 24, 210, 0, 146, 24, 210, 240, 3, 248, 250, 33, 0, 145, - 10, 145, 5, 28, 46, 225, 51, 32, 9, 240, 2, 248, 242, 30, 4, 208, 49, 154, 5, 28, 33, 6, 19, 14, 27, 147, 3, 35, 9, - 147, 0, 34, 2, 155, 3, 152, 6, 247, 255, 253, 32, 124, 179, 124, 245, 6, 27, 4, 45, 67, 29, 125, 51, 28, 33, 2, 27, - 67, 29, 125, 115, 34, 9, 67, 29, 155, 10, 24, 237, 28, 40, 240, 3, 248, 145, 28, 32, 240, 2, 248, 238, 120, 170, 120, - 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 28, 14, 27, 112, 171, 112, 236, 28, 32, 240, 2, 248, 192, - 30, 7, 209, 6, 28, 53, 72, 86, 36, 4, 247, 255, 249, 205, 66, 100, 225, 3, 120, 235, 152, 6, 147, 0, 28, 57, 34, 2, - 155, 3, 247, 255, 252, 235, 40, 0, 218, 5, 28, 4, 72, 78, 28, 53, 247, 255, 249, 188, 224, 238, 120, 41, 145, 2, 121, - 43, 0, 216, 24, 192, 0, 64, 240, 2, 248, 159, 14, 3, 114, 107, 12, 3, 114, 171, 10, 3, 114, 235, 115, 40, 40, 0, 209, - 2, 28, 53, 72, 68, 224, 93, 155, 2, 154, 2, 26, 228, 25, 210, 146, 3, 148, 4, 121, 43, 33, 0, 0, 218, 24, 210, 0, 82, - 240, 3, 248, 134, 33, 0, 145, 11, 145, 8, 224, 177, 122, 107, 122, 172, 6, 27, 4, 36, 67, 28, 122, 235, 154, 11, 2, - 27, 67, 28, 123, 43, 153, 3, 67, 28, 24, 164, 28, 32, 34, 9, 240, 3, 248, 47, 120, 35, 147, 2, 121, 35, 0, 216, 26, - 192, 240, 2, 248, 106, 14, 3, 115, 163, 12, 3, 115, 227, 10, 3, 116, 35, 116, 96, 40, 0, 209, 2, 28, 53, 72, 42, 224, - 40, 153, 3, 155, 4, 28, 10, 153, 2, 24, 82, 153, 2, 146, 3, 26, 91, 147, 4, 121, 35, 33, 0, 0, 218, 26, 210, 240, 3, - 248, 79, 152, 3, 153, 4, 247, 255, 248, 33, 35, 11, 144, 2, 70, 106, 92, 154, 115, 98, 155, 2, 43, 0, 208, 31, 28, 24, - 240, 2, 248, 64, 14, 3, 114, 99, 12, 3, 114, 163, 10, 3, 114, 227, 115, 32, 40, 0, 209, 6, 72, 23, 28, 53, 36, 4, 247, - 255, 249, 70, 66, 100, 224, 119, 153, 3, 154, 2, 240, 2, 255, 234, 153, 3, 155, 4, 28, 10, 153, 2, 24, 82, 153, 2, 146, - 3, 26, 91, 147, 4, 34, 0, 146, 7, 146, 9, 224, 68, 70, 192, 19, 112, 98, 121, 19, 112, 107, 80, 19, 112, 96, 60, 0, - 0, 49, 5, 0, 0, 16, 5, 19, 112, 98, 163, 19, 112, 98, 198, 19, 112, 98, 96, 19, 112, 98, 236, 19, 112, 99, 22, 19, 112, - 99, 56, 19, 112, 99, 89, 123, 162, 123, 227, 6, 18, 4, 27, 67, 19, 124, 34, 153, 7, 2, 18, 67, 19, 124, 98, 67, 19, - 24, 201, 145, 2, 28, 8, 34, 7, 153, 3, 240, 2, 255, 178, 154, 2, 153, 3, 120, 19, 24, 201, 145, 3, 153, 2, 121, 18, - 121, 75, 2, 18, 67, 26, 4, 18, 10, 17, 14, 19, 67, 11, 4, 27, 153, 2, 12, 26, 14, 27, 113, 11, 113, 74, 154, 9, 155, - 7, 50, 1, 51, 7, 146, 9, 147, 7, 121, 35, 153, 9, 66, 153, 211, 207, 154, 8, 155, 11, 50, 1, 51, 18, 146, 8, 147, 11, - 121, 43, 153, 8, 66, 153, 210, 0, 231, 72, 28, 56, 240, 1, 255, 230, 154, 5, 155, 10, 50, 1, 51, 13, 146, 5, 147, 10, - 39, 0, 124, 115, 153, 5, 66, 153, 210, 0, 230, 198, 28, 53, 36, 0, 47, 0, 208, 7, 28, 56, 240, 1, 255, 211, 44, 0, 208, - 2, 28, 40, 247, 254, 255, 151, 176, 13, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 181, 248, 28, 4, 38, 3, 39, 64, 224, - 79, 104, 160, 240, 2, 255, 38, 10, 3, 64, 51, 28, 5, 43, 2, 208, 7, 107, 227, 108, 34, 105, 89, 24, 138, 0, 65, 12, - 73, 26, 82, 97, 90, 108, 35, 43, 0, 208, 59, 66, 47, 208, 57, 75, 36, 120, 27, 43, 0, 208, 2, 72, 35, 247, 255, 248, - 157, 6, 235, 213, 6, 75, 32, 120, 27, 43, 0, 208, 2, 72, 32, 247, 255, 248, 148, 7, 107, 213, 6, 75, 27, 120, 27, 43, - 0, 208, 2, 72, 28, 247, 255, 248, 139, 6, 171, 213, 6, 75, 23, 120, 27, 43, 0, 208, 2, 72, 25, 247, 255, 248, 130, 7, - 43, 213, 6, 75, 18, 120, 27, 43, 0, 208, 2, 72, 21, 247, 255, 248, 121, 75, 15, 120, 27, 43, 0, 208, 2, 72, 19, 247, - 255, 248, 114, 75, 11, 120, 27, 43, 0, 208, 8, 72, 16, 247, 255, 248, 107, 224, 4, 107, 164, 44, 0, 209, 173, 32, 0, - 224, 3, 107, 227, 32, 1, 66, 64, 97, 88, 75, 11, 34, 0, 104, 27, 100, 26, 188, 248, 188, 2, 71, 8, 19, 112, 106, 248, - 19, 112, 99, 118, 19, 112, 99, 131, 19, 112, 99, 139, 19, 112, 99, 160, 19, 112, 99, 179, 19, 112, 99, 190, 19, 112, - 105, 116, 19, 112, 96, 60, 181, 240, 176, 131, 28, 5, 35, 9, 7, 193, 213, 60, 75, 58, 120, 27, 43, 0, 208, 2, 72, 57, - 247, 255, 248, 59, 75, 57, 104, 28, 44, 0, 208, 9, 107, 96, 33, 96, 240, 3, 248, 79, 107, 96, 33, 96, 240, 1, 254, 239, - 107, 164, 231, 243, 76, 51, 104, 35, 43, 0, 208, 24, 108, 88, 33, 32, 240, 3, 248, 65, 104, 35, 33, 32, 108, 88, 240, - 1, 254, 224, 104, 35, 34, 128, 4, 82, 97, 26, 74, 43, 108, 88, 104, 18, 33, 32, 107, 82, 97, 90, 240, 3, 248, 32, 104, - 35, 105, 154, 75, 39, 96, 26, 75, 35, 104, 24, 247, 255, 255, 78, 35, 0, 40, 0, 208, 4, 74, 36, 104, 18, 100, 19, 35, - 5, 66, 91, 7, 106, 213, 40, 75, 26, 120, 27, 43, 0, 208, 2, 72, 31, 247, 254, 255, 251, 33, 128, 1, 137, 79, 28, 78, - 29, 35, 1, 34, 0, 145, 1, 104, 56, 104, 49, 104, 128, 0, 148, 48, 68, 25, 0, 70, 140, 104, 4, 69, 98, 209, 7, 32, 1, - 66, 32, 209, 10, 75, 22, 96, 24, 35, 1, 66, 91, 224, 5, 73, 20, 64, 12, 44, 3, 209, 1, 153, 1, 96, 1, 50, 1, 42, 4, - 209, 228, 43, 0, 208, 4, 34, 18, 66, 42, 208, 1, 35, 6, 66, 91, 176, 3, 28, 24, 188, 240, 188, 2, 71, 8, 70, 192, 19, - 112, 106, 248, 19, 112, 99, 207, 19, 112, 107, 20, 19, 112, 106, 252, 19, 112, 107, 8, 19, 112, 107, 4, 19, 112, 96, - 60, 19, 112, 99, 240, 19, 112, 107, 80, 19, 112, 107, 84, 0, 0, 32, 3, 181, 240, 176, 131, 147, 1, 70, 107, 51, 39, - 120, 30, 28, 5, 30, 115, 6, 27, 14, 27, 145, 0, 28, 23, 43, 15, 216, 61, 28, 4, 52, 160, 104, 32, 40, 0, 208, 56, 33, - 0, 34, 31, 240, 2, 254, 139, 104, 35, 74, 29, 96, 26, 28, 43, 51, 152, 104, 24, 240, 2, 254, 7, 104, 35, 96, 88, 28, - 56, 240, 2, 254, 2, 104, 35, 70, 105, 96, 152, 29, 202, 120, 17, 104, 35, 70, 106, 115, 25, 28, 209, 104, 35, 120, 10, - 115, 90, 104, 34, 35, 6, 46, 6, 217, 0, 35, 10, 28, 44, 115, 147, 52, 160, 104, 32, 153, 8, 28, 50, 48, 15, 240, 2, - 254, 34, 28, 43, 51, 144, 104, 24, 123, 105, 104, 35, 34, 31, 247, 255, 249, 214, 40, 31, 208, 6, 40, 0, 219, 5, 72, - 5, 224, 3, 32, 3, 66, 64, 224, 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 85, 83, 66, 67, 255, 255, 216, 238, 181, 240, - 28, 4, 176, 131, 52, 160, 28, 5, 145, 0, 28, 23, 33, 255, 34, 13, 104, 32, 240, 2, 254, 62, 28, 43, 51, 144, 104, 24, - 123, 41, 104, 35, 34, 13, 247, 255, 249, 176, 40, 13, 208, 1, 40, 0, 218, 40, 40, 0, 219, 43, 28, 43, 51, 160, 104, - 28, 104, 32, 240, 2, 253, 174, 144, 1, 104, 96, 240, 2, 253, 170, 28, 6, 104, 160, 240, 2, 253, 166, 74, 16, 153, 1, - 123, 35, 66, 145, 209, 21, 47, 0, 208, 0, 96, 56, 154, 0, 42, 0, 208, 0, 112, 19, 53, 152, 104, 43, 66, 158, 209, 12, - 28, 179, 4, 27, 12, 54, 12, 27, 4, 54, 67, 30, 96, 46, 32, 0, 224, 4, 72, 5, 224, 2, 72, 5, 224, 0, 72, 5, 176, 3, 188, - 240, 188, 2, 71, 8, 83, 66, 83, 85, 255, 255, 216, 237, 255, 255, 216, 236, 255, 255, 216, 235, 181, 240, 176, 135, - 74, 75, 75, 76, 120, 18, 28, 6, 104, 31, 42, 0, 208, 1, 73, 74, 224, 0, 73, 74, 96, 25, 28, 51, 51, 144, 104, 24, 75, - 72, 104, 27, 104, 153, 105, 195, 49, 68, 0, 155, 24, 203, 104, 25, 35, 1, 66, 11, 209, 6, 74, 68, 36, 1, 96, 19, 75, - 62, 66, 100, 96, 31, 224, 113, 75, 60, 42, 0, 208, 1, 74, 60, 224, 0, 74, 60, 96, 26, 75, 62, 120, 27, 43, 0, 208, 17, - 136, 243, 34, 255, 147, 0, 33, 33, 35, 0, 147, 1, 147, 2, 247, 255, 249, 80, 28, 4, 28, 33, 72, 55, 247, 254, 254, 209, - 32, 60, 247, 254, 249, 200, 224, 6, 33, 0, 247, 255, 249, 166, 32, 5, 247, 254, 249, 193, 36, 0, 75, 41, 120, 26, 75, - 41, 42, 0, 208, 1, 74, 41, 224, 0, 74, 41, 28, 53, 96, 26, 53, 144, 44, 0, 218, 10, 32, 50, 247, 254, 249, 176, 104, - 40, 33, 0, 247, 255, 249, 142, 32, 5, 247, 254, 249, 169, 224, 48, 123, 49, 104, 40, 247, 255, 249, 134, 28, 4, 32, - 5, 247, 254, 249, 160, 72, 33, 28, 33, 247, 254, 254, 162, 44, 0, 219, 34, 123, 113, 104, 40, 247, 255, 249, 120, 28, - 4, 32, 5, 247, 254, 249, 146, 72, 27, 28, 33, 247, 254, 254, 148, 44, 0, 219, 20, 32, 10, 247, 254, 249, 137, 70, 105, - 49, 23, 104, 40, 247, 255, 249, 143, 28, 4, 28, 33, 72, 20, 247, 254, 254, 133, 44, 0, 219, 5, 72, 19, 247, 254, 254, - 128, 75, 7, 96, 31, 224, 4, 75, 6, 34, 1, 96, 31, 75, 8, 96, 26, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, - 112, 1, 15, 19, 112, 96, 56, 0, 15, 66, 64, 0, 3, 13, 64, 19, 112, 96, 60, 19, 112, 107, 84, 19, 112, 1, 13, 19, 112, - 100, 17, 19, 112, 100, 50, 19, 112, 100, 89, 19, 112, 100, 129, 19, 112, 100, 176, 181, 240, 176, 141, 146, 6, 70, 106, - 50, 79, 120, 18, 28, 31, 70, 107, 51, 95, 146, 7, 70, 106, 120, 27, 50, 83, 120, 18, 6, 27, 22, 27, 146, 8, 70, 106, - 50, 47, 147, 4, 35, 0, 112, 19, 74, 147, 77, 148, 28, 6, 145, 5, 147, 10, 96, 19, 147, 3, 36, 0, 28, 163, 43, 1, 216, - 0, 225, 6, 44, 0, 208, 33, 28, 48, 33, 0, 247, 255, 255, 38, 30, 4, 219, 1, 32, 5, 224, 0, 32, 60, 247, 254, 249, 37, - 75, 137, 104, 27, 104, 154, 75, 136, 50, 68, 104, 27, 0, 155, 24, 211, 104, 27, 44, 0, 218, 9, 154, 3, 50, 1, 146, 3, - 42, 2, 221, 0, 224, 232, 32, 10, 247, 254, 249, 17, 224, 219, 35, 0, 147, 3, 155, 4, 154, 8, 59, 1, 6, 27, 22, 27, 147, - 4, 42, 0, 208, 59, 104, 43, 74, 123, 147, 2, 120, 19, 43, 0, 208, 1, 75, 121, 224, 0, 75, 121, 96, 43, 154, 7, 155, - 18, 146, 1, 147, 0, 28, 58, 35, 0, 28, 48, 153, 5, 247, 255, 254, 66, 75, 110, 154, 2, 28, 4, 96, 26, 28, 131, 43, 1, - 216, 0, 224, 190, 40, 0, 218, 0, 224, 178, 155, 6, 34, 144, 25, 146, 28, 60, 147, 2, 146, 9, 224, 18, 155, 9, 123, 113, - 104, 24, 28, 34, 155, 2, 247, 255, 248, 69, 28, 131, 43, 1, 216, 0, 224, 159, 40, 0, 219, 69, 66, 160, 209, 67, 154, - 2, 26, 36, 24, 18, 146, 2, 44, 0, 209, 234, 224, 62, 104, 43, 74, 93, 147, 2, 120, 19, 43, 0, 208, 1, 75, 91, 224, 0, - 75, 91, 96, 43, 154, 7, 155, 18, 146, 1, 147, 0, 28, 58, 35, 128, 28, 48, 153, 5, 247, 255, 254, 6, 75, 80, 154, 2, - 28, 4, 96, 26, 40, 0, 218, 3, 72, 83, 28, 33, 247, 254, 253, 178, 28, 163, 43, 1, 217, 125, 44, 0, 218, 22, 224, 113, - 28, 51, 51, 144, 104, 24, 123, 49, 28, 58, 155, 6, 247, 255, 248, 10, 30, 4, 218, 3, 72, 74, 28, 33, 247, 254, 253, - 158, 28, 163, 43, 1, 217, 96, 44, 0, 219, 5, 66, 188, 208, 5, 224, 2, 47, 0, 209, 231, 224, 1, 76, 68, 224, 86, 75, - 59, 74, 61, 104, 27, 147, 2, 120, 19, 43, 0, 208, 1, 75, 59, 224, 0, 75, 59, 74, 54, 70, 105, 96, 19, 28, 48, 49, 47, - 170, 10, 247, 255, 254, 33, 30, 4, 218, 34, 72, 58, 28, 33, 247, 254, 253, 121, 28, 99, 209, 3, 75, 46, 154, 2, 96, - 26, 224, 65, 28, 52, 52, 144, 104, 32, 123, 49, 247, 255, 248, 73, 123, 51, 32, 15, 104, 34, 64, 24, 9, 219, 1, 27, - 106, 81, 24, 27, 32, 1, 64, 152, 67, 129, 98, 81, 70, 105, 28, 48, 49, 47, 170, 10, 247, 255, 253, 253, 28, 4, 75, 31, - 154, 2, 96, 26, 28, 163, 43, 1, 217, 34, 155, 10, 43, 0, 208, 7, 75, 37, 104, 27, 43, 0, 208, 3, 70, 107, 34, 1, 51, - 47, 112, 26, 44, 0, 219, 12, 75, 32, 36, 0, 104, 27, 43, 0, 208, 7, 70, 107, 51, 47, 120, 27, 43, 0, 208, 2, 76, 28, - 224, 0, 28, 4, 155, 4, 43, 0, 221, 2, 44, 0, 218, 0, 230, 247, 34, 0, 44, 0, 218, 0, 34, 1, 75, 9, 96, 26, 154, 21, - 42, 0, 208, 3, 70, 107, 51, 47, 120, 27, 112, 19, 155, 22, 43, 0, 208, 2, 155, 10, 154, 22, 96, 19, 176, 13, 28, 32, - 188, 240, 188, 2, 71, 8, 19, 112, 107, 84, 19, 112, 96, 56, 19, 112, 96, 60, 19, 112, 107, 80, 19, 112, 1, 15, 0, 15, - 66, 64, 0, 3, 13, 64, 19, 112, 100, 186, 19, 112, 100, 205, 255, 255, 216, 233, 19, 112, 100, 229, 19, 112, 107, 28, - 255, 255, 216, 234, 181, 240, 28, 3, 176, 143, 51, 160, 145, 7, 104, 30, 33, 128, 70, 111, 1, 9, 55, 55, 37, 0, 172, - 9, 24, 118, 144, 6, 112, 61, 28, 32, 33, 0, 34, 16, 240, 2, 251, 218, 46, 0, 208, 87, 35, 6, 147, 1, 35, 1, 147, 2, - 35, 10, 147, 5, 153, 7, 35, 0, 152, 6, 34, 0, 149, 4, 148, 0, 151, 3, 247, 255, 254, 131, 28, 5, 28, 41, 72, 40, 247, - 254, 252, 216, 28, 107, 208, 69, 45, 0, 219, 2, 120, 59, 43, 0, 208, 64, 153, 7, 171, 9, 34, 3, 112, 26, 1, 74, 112, - 90, 34, 18, 113, 26, 34, 0, 113, 90, 28, 48, 33, 0, 34, 18, 240, 2, 251, 174, 75, 28, 53, 2, 209, 1, 74, 28, 224, 0, - 74, 28, 96, 26, 171, 9, 147, 0, 35, 6, 147, 1, 35, 0, 147, 2, 147, 3, 147, 4, 35, 10, 147, 5, 153, 7, 152, 6, 28, 50, - 35, 18, 247, 255, 254, 81, 28, 5, 28, 41, 72, 19, 247, 254, 252, 166, 45, 0, 219, 19, 120, 179, 33, 15, 70, 108, 64, - 25, 52, 55, 72, 15, 112, 33, 247, 254, 252, 155, 120, 35, 59, 2, 6, 27, 14, 27, 43, 2, 217, 3, 224, 3, 37, 4, 66, 109, - 224, 0, 77, 9, 176, 15, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 100, 244, 19, 112, 96, 56, 0, 38, 37, 160, - 0, 152, 150, 128, 19, 112, 101, 21, 19, 112, 101, 52, 255, 255, 216, 239, 181, 240, 176, 147, 70, 106, 35, 0, 50, 71, - 112, 19, 74, 197, 28, 4, 32, 16, 112, 16, 72, 196, 28, 34, 50, 152, 96, 16, 174, 12, 58, 8, 96, 17, 28, 8, 130, 115, - 28, 49, 130, 179, 247, 255, 249, 179, 28, 5, 28, 41, 72, 190, 247, 254, 252, 96, 45, 0, 218, 0, 225, 195, 75, 188, 104, - 27, 43, 0, 208, 37, 75, 187, 121, 50, 121, 153, 66, 145, 209, 23, 121, 217, 121, 114, 66, 145, 209, 19, 137, 25, 137, - 50, 66, 145, 209, 15, 137, 89, 137, 114, 66, 145, 209, 11, 123, 25, 123, 178, 66, 145, 209, 7, 123, 89, 123, 242, 66, - 145, 209, 3, 123, 154, 124, 51, 66, 154, 208, 8, 168, 12, 247, 254, 251, 12, 37, 1, 72, 171, 247, 254, 252, 53, 66, - 109, 225, 167, 170, 12, 121, 17, 75, 167, 38, 0, 113, 153, 121, 81, 113, 217, 137, 17, 129, 25, 137, 81, 129, 89, 123, - 145, 115, 25, 123, 209, 115, 89, 124, 18, 115, 154, 74, 161, 35, 128, 66, 91, 96, 19, 35, 0, 147, 10, 147, 5, 224, 221, - 138, 111, 138, 171, 154, 10, 4, 63, 67, 31, 24, 191, 122, 58, 72, 155, 0, 82, 153, 5, 247, 254, 252, 14, 34, 156, 35, - 0, 25, 18, 147, 9, 147, 6, 146, 11, 224, 191, 122, 123, 122, 189, 6, 27, 4, 45, 67, 29, 122, 251, 2, 27, 67, 29, 123, - 59, 67, 29, 155, 9, 24, 237, 121, 107, 43, 8, 209, 115, 121, 235, 43, 80, 209, 112, 121, 43, 43, 1, 217, 109, 154, 11, - 35, 1, 112, 19, 121, 169, 72, 137, 34, 1, 247, 254, 251, 234, 35, 0, 115, 102, 115, 38, 147, 8, 147, 7, 224, 49, 123, - 170, 123, 235, 6, 18, 4, 27, 67, 19, 124, 42, 2, 18, 67, 19, 124, 106, 67, 19, 154, 8, 24, 155, 120, 218, 42, 2, 209, - 28, 120, 154, 6, 17, 41, 0, 218, 11, 123, 33, 41, 0, 209, 8, 42, 0, 208, 6, 115, 34, 121, 25, 121, 91, 2, 9, 67, 25, - 72, 119, 224, 10, 123, 97, 41, 0, 209, 9, 42, 0, 208, 7, 115, 98, 121, 25, 121, 91, 2, 9, 72, 114, 67, 25, 247, 254, - 251, 184, 155, 7, 154, 8, 51, 1, 50, 7, 147, 7, 146, 8, 121, 43, 154, 7, 66, 154, 211, 201, 123, 33, 41, 0, 208, 93, - 123, 98, 42, 0, 208, 90, 72, 105, 247, 254, 251, 165, 75, 97, 123, 34, 168, 12, 116, 26, 123, 98, 116, 90, 121, 122, - 112, 34, 120, 170, 96, 98, 115, 218, 120, 235, 96, 163, 247, 254, 250, 105, 75, 91, 74, 97, 72, 97, 96, 26, 120, 33, - 104, 162, 247, 254, 251, 142, 28, 35, 51, 144, 70, 105, 104, 24, 49, 71, 247, 254, 254, 140, 40, 0, 218, 89, 224, 85, - 123, 170, 123, 235, 6, 18, 4, 27, 67, 19, 124, 42, 124, 104, 2, 18, 67, 19, 67, 24, 208, 1, 240, 1, 250, 129, 122, 106, + 240, 4, 252, 154, 28, 40, 188, 56, 188, 2, 71, 8, 70, 192, 19, 112, 1, 153, 181, 240, 176, 145, 75, 206, 33, 128, 120, + 27, 36, 1, 147, 8, 75, 205, 104, 24, 240, 5, 252, 75, 33, 32, 240, 5, 252, 48, 144, 6, 240, 0, 251, 207, 240, 5, 252, + 25, 33, 120, 240, 5, 252, 72, 153, 6, 72, 198, 240, 5, 252, 6, 72, 197, 154, 6, 28, 1, 35, 0, 240, 5, 252, 94, 73, 195, + 28, 7, 32, 205, 240, 4, 252, 21, 33, 0, 145, 9, 145, 7, 145, 5, 152, 6, 169, 15, 34, 0, 240, 5, 252, 68, 144, 14, 155, + 14, 43, 0, 209, 246, 44, 0, 208, 2, 28, 56, 240, 5, 252, 79, 74, 185, 158, 15, 35, 0, 96, 19, 46, 0, 209, 93, 75, 183, + 104, 27, 43, 0, 208, 5, 75, 182, 104, 27, 43, 0, 209, 1, 74, 181, 96, 19, 155, 5, 36, 0, 43, 0, 208, 221, 75, 178, 104, + 27, 43, 0, 208, 217, 75, 175, 104, 27, 43, 0, 209, 213, 75, 175, 104, 27, 43, 0, 208, 9, 240, 3, 254, 179, 40, 0, 208, + 5, 240, 3, 254, 175, 40, 0, 208, 1, 240, 3, 254, 171, 75, 168, 104, 27, 147, 4, 43, 0, 209, 41, 77, 166, 75, 167, 104, + 42, 58, 1, 66, 154, 216, 35, 78, 158, 76, 165, 35, 1, 33, 1, 96, 51, 104, 32, 74, 163, 240, 3, 255, 137, 153, 4, 96, + 49, 40, 0, 208, 14, 75, 161, 104, 26, 75, 161, 0, 146, 88, 211, 43, 0, 209, 7, 32, 128, 4, 64, 104, 41, 240, 5, 251, + 143, 104, 35, 24, 192, 96, 32, 75, 151, 74, 155, 104, 25, 104, 18, 66, 145, 211, 1, 34, 0, 96, 26, 75, 142, 36, 0, 104, + 27, 43, 0, 209, 147, 28, 56, 73, 135, 240, 5, 251, 241, 36, 1, 231, 141, 120, 51, 120, 112, 6, 27, 4, 0, 67, 24, 120, + 179, 2, 27, 67, 24, 120, 243, 67, 24, 56, 1, 40, 6, 217, 0, 227, 2, 240, 5, 248, 237, 0, 10, 0, 74, 3, 1, 3, 1, 3, 1, + 0, 7, 0, 93, 38, 1, 37, 1, 227, 0, 123, 51, 123, 116, 6, 27, 4, 36, 67, 28, 123, 179, 73, 116, 2, 27, 67, 28, 123, 243, + 67, 28, 28, 32, 240, 5, 250, 221, 40, 0, 209, 11, 125, 51, 125, 117, 6, 27, 4, 45, 67, 29, 125, 179, 2, 27, 67, 29, + 125, 243, 38, 1, 67, 29, 226, 228, 28, 32, 73, 119, 240, 5, 250, 203, 40, 0, 208, 0, 226, 214, 125, 51, 125, 117, 6, + 27, 4, 45, 67, 29, 125, 179, 34, 1, 2, 27, 67, 29, 125, 243, 38, 1, 67, 29, 75, 100, 96, 26, 75, 100, 96, 24, 72, 109, + 240, 0, 251, 121, 75, 109, 34, 4, 104, 27, 104, 155, 96, 154, 240, 1, 248, 110, 34, 0, 146, 5, 226, 192, 122, 50, 122, + 115, 6, 18, 4, 27, 67, 19, 122, 178, 153, 7, 2, 18, 67, 19, 122, 242, 67, 19, 66, 153, 209, 0, 226, 175, 240, 1, 248, + 115, 38, 1, 37, 0, 226, 173, 126, 51, 126, 116, 6, 27, 4, 36, 67, 28, 126, 179, 124, 50, 2, 27, 67, 28, 126, 243, 6, + 18, 67, 28, 124, 115, 4, 27, 67, 19, 124, 178, 2, 18, 67, 19, 124, 242, 67, 26, 146, 4, 125, 51, 125, 117, 6, 27, 4, + 45, 67, 29, 125, 179, 154, 7, 2, 27, 67, 29, 125, 243, 67, 29, 42, 0, 209, 16, 123, 51, 43, 0, 209, 13, 122, 50, 122, + 115, 122, 176, 6, 18, 4, 27, 67, 19, 2, 0, 67, 3, 122, 240, 67, 24, 240, 1, 248, 79, 28, 6, 224, 0, 38, 0, 155, 4, 28, + 32, 25, 91, 0, 217, 147, 11, 240, 5, 251, 23, 33, 0, 28, 37, 145, 10, 224, 7, 104, 40, 104, 105, 240, 5, 251, 15, 154, + 10, 53, 8, 50, 1, 146, 10, 155, 10, 153, 11, 66, 139, 219, 243, 72, 45, 104, 1, 41, 0, 208, 0, 226, 63, 154, 15, 123, + 21, 123, 83, 6, 45, 4, 27, 67, 43, 123, 149, 2, 45, 67, 43, 123, 213, 67, 43, 77, 50, 66, 171, 209, 0, 225, 32, 66, + 171, 216, 33, 43, 6, 216, 12, 43, 5, 211, 0, 225, 247, 43, 1, 209, 0, 224, 165, 43, 0, 209, 0, 224, 124, 43, 2, 208, + 0, 225, 88, 225, 237, 43, 27, 216, 7, 38, 0, 43, 26, 211, 0, 224, 175, 43, 12, 208, 0, 225, 78, 224, 162, 74, 35, 66, + 147, 209, 0, 224, 169, 50, 1, 66, 147, 208, 0, 225, 69, 224, 238, 77, 32, 66, 171, 209, 0, 224, 218, 66, 171, 216, 71, + 74, 30, 66, 147, 209, 0, 224, 190, 66, 147, 216, 56, 58, 12, 66, 147, 209, 0, 225, 34, 50, 2, 66, 147, 208, 0, 225, + 48, 225, 37, 19, 112, 1, 12, 19, 112, 96, 48, 19, 112, 96, 109, 0, 152, 150, 128, 19, 112, 1, 65, 19, 112, 107, 12, + 19, 112, 106, 228, 19, 112, 106, 232, 19, 112, 96, 20, 19, 112, 107, 108, 19, 114, 200, 12, 0, 0, 15, 255, 19, 112, + 106, 224, 19, 112, 107, 160, 19, 112, 107, 104, 19, 112, 107, 44, 19, 114, 200, 16, 19, 112, 96, 121, 19, 112, 21, 229, + 19, 112, 96, 60, 85, 77, 83, 3, 85, 77, 83, 1, 85, 77, 83, 130, 85, 77, 83, 16, 74, 208, 66, 147, 209, 0, 224, 247, + 50, 1, 66, 147, 208, 0, 224, 247, 224, 130, 73, 205, 66, 139, 209, 0, 225, 100, 66, 139, 216, 8, 73, 203, 66, 139, 209, + 0, 224, 124, 73, 202, 66, 139, 208, 0, 224, 232, 224, 233, 74, 200, 66, 147, 209, 0, 225, 51, 50, 1, 66, 147, 208, 0, + 224, 223, 225, 34, 46, 0, 209, 0, 225, 116, 105, 162, 105, 35, 136, 21, 106, 34, 136, 27, 136, 16, 104, 34, 2, 25, 10, + 27, 120, 18, 67, 11, 2, 41, 10, 45, 67, 13, 146, 10, 4, 45, 104, 162, 12, 45, 120, 18, 149, 0, 2, 5, 10, 0, 67, 40, + 4, 0, 12, 0, 144, 1, 107, 32, 4, 27, 144, 2, 12, 27, 28, 48, 153, 10, 240, 1, 251, 132, 224, 10, 46, 0, 209, 0, 225, + 78, 104, 35, 28, 48, 120, 25, 104, 163, 136, 26, 105, 35, 240, 1, 251, 100, 28, 5, 38, 1, 225, 117, 104, 35, 105, 34, + 120, 24, 104, 163, 120, 25, 105, 163, 240, 0, 255, 121, 231, 243, 37, 1, 225, 106, 152, 8, 240, 3, 250, 131, 28, 5, + 40, 2, 216, 8, 40, 2, 208, 2, 34, 1, 40, 0, 209, 0, 34, 0, 75, 159, 96, 26, 224, 3, 34, 0, 146, 5, 40, 0, 219, 3, 75, + 157, 34, 1, 96, 26, 146, 5, 155, 15, 122, 25, 122, 90, 6, 9, 4, 18, 67, 10, 122, 153, 122, 219, 2, 9, 67, 10, 67, 19, + 147, 7, 231, 206, 75, 148, 37, 0, 96, 25, 240, 3, 250, 47, 38, 1, 149, 5, 225, 62, 104, 35, 104, 26, 75, 144, 224, 105, + 104, 35, 120, 219, 147, 8, 43, 1, 216, 2, 75, 139, 153, 8, 96, 25, 75, 137, 224, 27, 35, 1, 96, 3, 75, 136, 72, 138, + 96, 25, 240, 0, 249, 243, 75, 137, 34, 4, 104, 27, 104, 155, 96, 154, 240, 0, 254, 232, 34, 0, 146, 5, 77, 133, 28, + 40, 240, 3, 251, 98, 75, 132, 96, 24, 104, 35, 43, 0, 208, 1, 104, 42, 96, 26, 75, 129, 104, 29, 231, 154, 28, 123, + 208, 11, 75, 121, 104, 27, 43, 0, 208, 7, 28, 56, 240, 5, 249, 245, 28, 56, 240, 5, 249, 186, 39, 1, 66, 127, 104, 35, + 105, 34, 104, 24, 104, 163, 104, 25, 240, 3, 253, 97, 75, 118, 28, 5, 120, 26, 42, 0, 208, 11, 34, 0, 112, 26, 104, + 35, 40, 0, 221, 2, 104, 25, 72, 113, 224, 1, 104, 25, 72, 113, 240, 1, 248, 108, 28, 121, 208, 0, 231, 113, 75, 102, + 104, 27, 43, 0, 209, 0, 231, 108, 72, 108, 154, 6, 28, 1, 35, 0, 240, 5, 249, 194, 28, 7, 231, 100, 104, 35, 105, 34, + 104, 24, 104, 163, 104, 25, 240, 3, 253, 253, 231, 91, 75, 101, 104, 26, 66, 81, 65, 74, 96, 26, 224, 153, 104, 35, + 104, 26, 75, 87, 96, 26, 38, 1, 231, 91, 122, 17, 122, 83, 6, 9, 4, 27, 67, 11, 122, 145, 122, 210, 2, 9, 67, 11, 67, + 26, 104, 37, 35, 0, 146, 7, 147, 13, 120, 42, 42, 95, 209, 26, 120, 106, 42, 68, 209, 23, 120, 170, 42, 86, 209, 20, + 120, 234, 42, 68, 209, 17, 77, 83, 74, 72, 96, 43, 104, 227, 33, 1, 96, 17, 43, 4, 209, 6, 104, 161, 168, 13, 34, 4, + 240, 5, 248, 27, 155, 13, 96, 43, 240, 4, 248, 153, 224, 17, 104, 227, 43, 4, 209, 4, 104, 161, 168, 13, 34, 4, 240, + 5, 248, 14, 28, 40, 153, 13, 240, 4, 248, 208, 144, 9, 40, 0, 208, 94, 75, 56, 34, 1, 96, 26, 38, 1, 37, 0, 150, 5, + 224, 134, 240, 3, 252, 130, 38, 1, 28, 5, 40, 0, 208, 0, 224, 127, 35, 1, 74, 60, 66, 91, 96, 19, 224, 122, 75, 46, + 34, 1, 96, 26, 28, 122, 208, 7, 28, 56, 240, 5, 249, 94, 28, 56, 240, 5, 249, 35, 39, 1, 66, 127, 104, 35, 105, 33, + 104, 24, 104, 163, 38, 1, 104, 26, 247, 255, 251, 119, 75, 36, 28, 5, 104, 27, 43, 0, 208, 96, 72, 42, 154, 6, 28, 1, + 35, 0, 240, 5, 249, 62, 28, 7, 224, 88, 155, 9, 43, 0, 208, 82, 28, 121, 208, 11, 75, 27, 104, 27, 43, 0, 208, 7, 28, + 56, 240, 5, 249, 56, 28, 56, 240, 5, 248, 253, 39, 1, 66, 127, 104, 35, 105, 34, 104, 25, 104, 163, 152, 9, 104, 27, + 240, 4, 252, 125, 75, 17, 104, 27, 43, 0, 208, 6, 72, 24, 154, 6, 28, 1, 35, 0, 240, 5, 249, 25, 28, 7, 38, 1, 37, 0, + 224, 49, 38, 1, 37, 6, 224, 45, 37, 1, 34, 1, 38, 1, 66, 109, 146, 5, 224, 40, 85, 77, 83, 128, 87, 70, 83, 2, 85, 77, + 83, 131, 87, 70, 83, 1, 87, 70, 83, 3, 19, 112, 107, 104, 19, 112, 96, 20, 19, 112, 106, 228, 19, 112, 21, 229, 19, + 112, 96, 60, 19, 114, 200, 12, 19, 114, 200, 16, 19, 112, 96, 16, 19, 112, 96, 137, 19, 112, 96, 164, 0, 152, 150, 128, + 19, 112, 106, 236, 19, 112, 96, 12, 19, 112, 96, 24, 38, 1, 37, 1, 66, 109, 153, 4, 0, 203, 24, 228, 224, 7, 104, 32, + 104, 97, 240, 5, 248, 175, 154, 4, 52, 8, 50, 1, 146, 4, 155, 4, 153, 11, 66, 139, 219, 243, 224, 9, 38, 1, 37, 1, 224, + 1, 38, 1, 37, 6, 66, 109, 224, 2, 37, 0, 38, 1, 149, 7, 75, 8, 36, 0, 104, 27, 43, 0, 208, 4, 28, 56, 73, 6, 240, 5, + 248, 203, 36, 1, 46, 0, 209, 0, 228, 101, 152, 15, 28, 41, 240, 5, 248, 167, 228, 96, 19, 112, 96, 20, 0, 152, 150, + 128, 74, 3, 35, 128, 104, 17, 2, 27, 67, 11, 96, 19, 71, 112, 70, 192, 13, 4, 0, 204, 75, 2, 74, 3, 104, 25, 64, 10, + 96, 26, 71, 112, 13, 4, 0, 204, 255, 255, 127, 255, 181, 16, 247, 255, 255, 243, 32, 128, 240, 3, 255, 104, 33, 32, + 240, 5, 248, 85, 76, 9, 96, 32, 32, 4, 240, 5, 248, 92, 104, 33, 34, 0, 32, 4, 240, 5, 248, 79, 247, 255, 255, 215, + 32, 4, 240, 5, 248, 110, 188, 16, 188, 1, 71, 0, 70, 192, 19, 112, 96, 32, 181, 16, 28, 4, 75, 15, 28, 8, 0, 137, 24, + 9, 104, 26, 0, 73, 35, 1, 240, 5, 248, 117, 75, 12, 33, 16, 96, 24, 72, 11, 240, 4, 248, 110, 33, 16, 72, 10, 240, 4, + 248, 117, 75, 10, 34, 55, 96, 28, 75, 9, 32, 4, 104, 27, 104, 155, 96, 154, 240, 5, 248, 73, 188, 16, 188, 1, 71, 0, + 19, 112, 96, 32, 19, 112, 96, 28, 13, 128, 0, 56, 13, 128, 0, 60, 19, 112, 107, 0, 19, 112, 96, 60, 181, 112, 76, 21, + 75, 21, 38, 2, 66, 118, 28, 33, 104, 24, 34, 0, 96, 38, 240, 5, 248, 59, 75, 18, 77, 18, 104, 27, 104, 154, 35, 0, 96, + 147, 74, 17, 104, 40, 96, 19, 240, 5, 248, 68, 104, 40, 240, 5, 248, 9, 35, 1, 66, 91, 96, 43, 104, 35, 43, 0, 209, + 3, 75, 11, 104, 27, 96, 35, 224, 0, 96, 38, 32, 4, 240, 5, 248, 19, 75, 2, 104, 24, 188, 112, 188, 2, 71, 8, 19, 112, + 106, 248, 19, 112, 96, 32, 19, 112, 96, 60, 19, 112, 96, 28, 19, 112, 107, 0, 19, 112, 106, 252, 75, 2, 34, 0, 96, 24, + 75, 2, 96, 26, 71, 112, 19, 112, 107, 4, 19, 112, 107, 0, 181, 248, 76, 34, 38, 16, 104, 35, 77, 33, 67, 179, 96, 35, + 104, 43, 73, 32, 104, 154, 121, 19, 121, 87, 6, 27, 4, 63, 67, 31, 121, 147, 2, 27, 67, 31, 121, 211, 67, 31, 104, 11, + 43, 0, 208, 18, 28, 56, 240, 0, 248, 56, 40, 0, 220, 20, 74, 22, 35, 0, 96, 19, 75, 22, 96, 24, 32, 4, 240, 4, 255, + 216, 104, 43, 34, 55, 104, 155, 64, 23, 96, 95, 224, 22, 75, 17, 104, 27, 43, 0, 208, 8, 28, 56, 240, 0, 248, 33, 104, + 43, 34, 55, 104, 155, 64, 23, 96, 95, 224, 2, 35, 55, 64, 31, 96, 87, 104, 35, 67, 51, 96, 35, 75, 9, 104, 26, 67, 22, + 96, 30, 32, 0, 188, 248, 188, 2, 71, 8, 70, 192, 13, 128, 0, 60, 19, 112, 96, 60, 19, 112, 107, 0, 19, 112, 106, 252, + 19, 112, 107, 4, 13, 128, 0, 56, 71, 24, 70, 192, 181, 112, 28, 12, 28, 5, 240, 4, 255, 93, 28, 6, 32, 1, 66, 64, 240, + 4, 255, 92, 104, 34, 75, 17, 66, 154, 209, 25, 75, 16, 73, 17, 34, 1, 67, 19, 96, 75, 28, 32, 34, 8, 240, 4, 254, 59, + 28, 32, 27, 100, 8, 164, 33, 8, 60, 2, 240, 4, 255, 102, 2, 36, 35, 234, 10, 36, 6, 27, 67, 35, 96, 43, 28, 40, 33, + 4, 240, 4, 255, 92, 28, 48, 240, 4, 255, 59, 188, 112, 188, 1, 71, 0, 230, 0, 1, 112, 19, 112, 4, 153, 19, 112, 96, + 36, 181, 56, 28, 4, 240, 4, 255, 148, 44, 38, 208, 72, 44, 38, 216, 5, 44, 36, 208, 9, 44, 37, 208, 0, 224, 169, 224, + 14, 44, 57, 208, 112, 44, 60, 208, 0, 224, 163, 224, 110, 73, 83, 75, 84, 72, 84, 96, 75, 34, 8, 240, 4, 254, 3, 72, + 82, 224, 150, 72, 82, 73, 82, 247, 255, 255, 171, 76, 77, 75, 81, 77, 82, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 253, + 244, 28, 40, 33, 8, 240, 4, 255, 34, 75, 77, 77, 78, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 253, 232, 28, 40, 33, 8, + 240, 4, 255, 22, 75, 73, 77, 74, 96, 99, 34, 8, 28, 33, 28, 40, 240, 4, 253, 220, 28, 40, 33, 8, 240, 4, 255, 10, 75, + 59, 72, 69, 96, 99, 28, 33, 34, 8, 240, 4, 253, 209, 72, 66, 224, 100, 72, 66, 73, 66, 247, 255, 255, 121, 76, 52, 75, + 65, 77, 57, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 253, 194, 28, 40, 33, 8, 240, 4, 254, 240, 75, 60, 77, 53, 96, 99, + 34, 8, 28, 40, 28, 33, 240, 4, 253, 182, 28, 40, 33, 8, 240, 4, 254, 228, 75, 55, 77, 49, 96, 99, 34, 8, 28, 33, 28, + 40, 240, 4, 253, 170, 28, 40, 33, 8, 240, 4, 254, 216, 75, 34, 72, 50, 96, 99, 28, 33, 34, 8, 240, 4, 253, 159, 72, + 47, 224, 50, 72, 47, 224, 0, 72, 47, 73, 47, 247, 255, 255, 69, 76, 26, 75, 46, 77, 31, 96, 99, 34, 8, 28, 40, 28, 33, + 240, 4, 253, 142, 28, 40, 33, 8, 240, 4, 254, 188, 75, 41, 77, 27, 96, 99, 34, 8, 28, 40, 28, 33, 240, 4, 253, 130, + 28, 40, 33, 8, 240, 4, 254, 176, 75, 36, 77, 23, 96, 99, 34, 8, 28, 33, 28, 40, 240, 4, 253, 118, 28, 40, 33, 8, 240, + 4, 254, 164, 75, 8, 72, 31, 96, 99, 28, 33, 34, 8, 240, 4, 253, 107, 72, 28, 33, 8, 240, 4, 254, 153, 32, 0, 188, 56, + 188, 2, 71, 8, 70, 192, 19, 112, 96, 36, 19, 112, 0, 96, 255, 255, 30, 120, 32, 32, 93, 232, 32, 32, 64, 140, 255, 255, + 31, 112, 19, 112, 0, 188, 255, 255, 31, 140, 19, 112, 0, 196, 255, 255, 30, 52, 19, 112, 0, 204, 255, 255, 31, 104, + 32, 32, 91, 20, 32, 32, 62, 108, 255, 255, 30, 176, 255, 255, 30, 204, 255, 255, 29, 116, 255, 255, 30, 168, 32, 32, + 94, 132, 32, 32, 93, 148, 32, 32, 63, 96, 255, 255, 33, 48, 255, 255, 33, 76, 255, 255, 31, 244, 255, 255, 33, 40, 181, + 56, 77, 11, 35, 0, 104, 42, 73, 10, 240, 4, 254, 147, 76, 10, 73, 10, 34, 0, 96, 32, 104, 40, 240, 4, 254, 128, 104, + 32, 240, 4, 254, 145, 104, 32, 240, 4, 254, 86, 188, 56, 188, 1, 71, 0, 70, 192, 19, 112, 96, 44, 0, 152, 150, 128, + 19, 112, 96, 52, 19, 112, 107, 8, 181, 8, 1, 67, 26, 27, 0, 155, 24, 24, 0, 192, 247, 255, 255, 216, 188, 8, 188, 1, + 71, 0, 0, 0, 181, 0, 74, 5, 2, 192, 104, 19, 104, 17, 26, 201, 213, 0, 104, 19, 66, 129, 217, 249, 188, 1, 71, 0, 13, + 128, 0, 16, 181, 8, 75, 23, 120, 26, 75, 23, 96, 26, 240, 3, 254, 42, 75, 22, 33, 4, 96, 24, 28, 24, 240, 4, 254, 39, + 240, 3, 254, 44, 34, 0, 28, 1, 72, 18, 240, 3, 254, 97, 33, 160, 2, 73, 72, 16, 240, 4, 254, 63, 75, 16, 33, 128, 96, + 24, 240, 4, 254, 26, 33, 32, 240, 4, 253, 255, 75, 13, 96, 24, 240, 3, 252, 127, 40, 0, 219, 3, 247, 255, 249, 185, + 32, 0, 224, 1, 32, 1, 66, 64, 188, 8, 188, 2, 71, 8, 19, 112, 1, 12, 19, 112, 107, 104, 19, 114, 195, 160, 19, 112, + 14, 237, 19, 113, 131, 160, 19, 112, 96, 48, 19, 112, 96, 44, 181, 240, 7, 67, 213, 29, 33, 128, 79, 15, 78, 16, 34, + 0, 35, 0, 1, 137, 104, 56, 104, 53, 104, 128, 70, 172, 48, 68, 24, 128, 104, 4, 69, 99, 209, 5, 7, 224, 212, 8, 72, + 9, 36, 2, 80, 132, 224, 4, 77, 8, 64, 44, 44, 3, 209, 0, 96, 1, 51, 1, 50, 4, 43, 4, 209, 231, 188, 240, 188, 1, 71, + 0, 19, 112, 96, 60, 19, 112, 107, 104, 19, 112, 107, 108, 0, 0, 32, 3, 181, 240, 176, 131, 147, 1, 155, 8, 76, 14, 0, + 91, 104, 38, 28, 13, 28, 23, 147, 0, 32, 10, 247, 255, 255, 79, 104, 43, 154, 1, 64, 59, 66, 147, 208, 9, 104, 35, 27, + 155, 213, 0, 104, 38, 154, 0, 66, 147, 211, 240, 32, 2, 66, 64, 224, 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 70, + 192, 13, 128, 0, 16, 181, 56, 28, 4, 240, 3, 252, 115, 33, 0, 28, 5, 34, 96, 28, 32, 240, 4, 252, 160, 35, 64, 96, 163, + 35, 128, 4, 91, 99, 101, 96, 35, 96, 99, 188, 56, 188, 1, 71, 0, 181, 16, 75, 12, 36, 0, 104, 27, 108, 26, 42, 7, 220, + 13, 73, 10, 104, 12, 0, 228, 24, 164, 0, 97, 25, 12, 106, 25, 1, 100, 25, 12, 50, 1, 100, 26, 28, 32, 247, 255, 255, + 215, 28, 32, 188, 16, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 112, 107, 88, 181, 240, 28, 4, 176, 133, 28, 8, 28, + 14, 147, 3, 28, 23, 240, 4, 251, 243, 35, 0, 98, 35, 5, 53, 35, 128, 13, 45, 1, 91, 27, 93, 96, 224, 66, 175, 210, 1, + 28, 61, 224, 49, 32, 128, 1, 64, 24, 54, 11, 54, 3, 54, 150, 2, 33, 1, 28, 38, 54, 16, 145, 1, 224, 20, 152, 2, 240, + 4, 251, 217, 34, 0, 198, 1, 97, 50, 155, 2, 33, 128, 28, 24, 35, 128, 1, 91, 1, 73, 24, 192, 24, 109, 144, 2, 66, 189, + 211, 0, 28, 61, 154, 1, 50, 1, 146, 1, 66, 189, 210, 8, 152, 1, 33, 0, 15, 195, 34, 4, 66, 130, 65, 75, 6, 27, 43, 0, + 209, 223, 66, 189, 208, 4, 28, 40, 153, 10, 240, 4, 253, 62, 26, 109, 155, 3, 4, 40, 67, 24, 240, 4, 251, 176, 35, 128, + 4, 91, 96, 160, 100, 37, 96, 35, 96, 99, 176, 5, 28, 40, 188, 240, 188, 2, 71, 8, 0, 0, 181, 240, 176, 139, 28, 5, 247, + 255, 255, 133, 28, 6, 32, 0, 46, 0, 209, 0, 224, 145, 99, 245, 105, 42, 126, 107, 126, 47, 97, 104, 146, 3, 147, 7, + 47, 0, 209, 25, 35, 8, 147, 0, 35, 160, 104, 105, 34, 8, 0, 155, 28, 48, 247, 255, 255, 140, 247, 255, 255, 108, 28, + 4, 28, 56, 44, 0, 208, 121, 107, 96, 99, 229, 240, 4, 251, 126, 154, 3, 96, 48, 99, 180, 42, 0, 208, 4, 79, 58, 224, + 3, 28, 52, 39, 128, 224, 0, 79, 56, 104, 235, 154, 7, 147, 4, 42, 0, 208, 2, 35, 128, 0, 91, 67, 31, 105, 235, 150, + 9, 5, 91, 13, 91, 147, 5, 154, 5, 35, 128, 4, 91, 58, 1, 147, 6, 146, 8, 155, 5, 154, 3, 147, 0, 28, 32, 28, 59, 153, + 4, 247, 255, 255, 92, 154, 3, 155, 4, 26, 18, 146, 3, 154, 7, 24, 27, 147, 4, 42, 0, 208, 1, 155, 6, 96, 99, 154, 8, + 155, 5, 24, 128, 66, 3, 209, 2, 34, 128, 6, 18, 24, 191, 155, 3, 43, 0, 221, 11, 247, 255, 255, 38, 30, 6, 208, 52, + 107, 112, 99, 245, 240, 4, 251, 58, 99, 166, 96, 32, 28, 52, 231, 213, 35, 128, 4, 91, 96, 99, 105, 43, 158, 9, 148, + 3, 43, 0, 208, 29, 126, 42, 146, 4, 42, 0, 209, 25, 247, 255, 255, 14, 28, 4, 32, 0, 44, 0, 208, 27, 107, 96, 99, 229, + 240, 4, 251, 32, 155, 3, 34, 128, 96, 24, 99, 156, 35, 128, 0, 91, 6, 18, 64, 123, 67, 19, 154, 4, 28, 32, 146, 0, 33, + 0, 34, 0, 247, 255, 255, 20, 104, 162, 35, 128, 4, 27, 67, 19, 96, 163, 28, 48, 224, 0, 32, 0, 176, 11, 188, 240, 188, + 2, 71, 8, 128, 0, 0, 128, 128, 0, 1, 128, 181, 56, 76, 19, 37, 32, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, + 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 224, 18, 104, 34, 67, 171, 104, 146, 32, 10, 96, 19, 247, 255, 253, + 243, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 66, 29, 209, + 234, 188, 56, 188, 1, 71, 0, 19, 112, 96, 60, 181, 56, 76, 19, 37, 32, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, + 18, 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 224, 18, 104, 34, 67, 43, 104, 146, 32, 10, 96, 19, 247, 255, + 253, 201, 104, 35, 104, 155, 120, 25, 120, 90, 6, 9, 4, 18, 67, 10, 120, 153, 120, 219, 2, 9, 67, 10, 67, 19, 66, 29, + 208, 234, 188, 56, 188, 1, 71, 0, 19, 112, 96, 60, 181, 248, 28, 12, 40, 0, 209, 33, 77, 28, 76, 29, 79, 29, 38, 0, + 104, 43, 104, 155, 126, 25, 126, 90, 6, 9, 4, 18, 67, 10, 126, 153, 126, 219, 2, 9, 67, 10, 67, 19, 105, 34, 108, 82, + 66, 147, 211, 6, 105, 98, 108, 82, 66, 147, 216, 2, 247, 255, 255, 142, 224, 25, 32, 10, 54, 1, 247, 255, 253, 147, + 66, 190, 209, 226, 224, 18, 40, 1, 209, 16, 224, 6, 32, 10, 54, 1, 247, 255, 253, 137, 66, 190, 209, 3, 224, 8, 77, + 6, 79, 8, 38, 0, 104, 43, 104, 155, 105, 154, 108, 99, 66, 154, 208, 239, 32, 0, 188, 248, 188, 2, 71, 8, 70, 192, 19, + 112, 96, 60, 19, 114, 195, 192, 0, 0, 19, 136, 181, 0, 7, 67, 213, 21, 75, 12, 104, 27, 104, 154, 75, 11, 108, 81, 64, + 11, 43, 3, 209, 2, 35, 128, 1, 155, 100, 83, 75, 6, 104, 27, 104, 154, 75, 6, 108, 145, 64, 11, 43, 3, 209, 2, 35, 128, + 1, 155, 100, 147, 188, 1, 71, 0, 70, 192, 19, 112, 96, 60, 0, 0, 32, 3, 181, 16, 75, 19, 28, 4, 104, 27, 52, 16, 104, + 155, 0, 164, 25, 28, 34, 128, 104, 99, 1, 146, 66, 19, 209, 0, 64, 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 253, + 106, 34, 128, 104, 99, 1, 146, 66, 19, 208, 0, 64, 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 253, 94, 75, 4, 32, + 5, 96, 99, 247, 255, 253, 89, 188, 16, 188, 1, 71, 0, 19, 112, 96, 60, 0, 0, 24, 1, 181, 240, 176, 131, 75, 36, 28, + 5, 104, 27, 53, 16, 104, 155, 0, 173, 25, 93, 104, 107, 74, 33, 29, 44, 64, 26, 38, 4, 42, 1, 208, 4, 4, 154, 213, 51, + 247, 255, 255, 192, 224, 48, 39, 136, 1, 127, 34, 4, 67, 147, 67, 59, 96, 35, 32, 60, 247, 255, 253, 40, 104, 35, 74, + 24, 32, 50, 64, 19, 96, 35, 247, 255, 253, 33, 75, 22, 34, 128, 147, 0, 28, 32, 28, 33, 0, 82, 35, 0, 247, 255, 253, + 156, 40, 0, 208, 2, 104, 107, 72, 17, 224, 20, 104, 35, 34, 4, 66, 26, 209, 16, 62, 1, 46, 0, 209, 220, 34, 128, 1, + 146, 67, 19, 33, 42, 67, 139, 96, 107, 32, 10, 96, 106, 247, 255, 253, 2, 72, 8, 224, 1, 32, 1, 66, 64, 176, 3, 188, + 240, 188, 2, 71, 8, 19, 112, 96, 60, 0, 0, 32, 1, 255, 255, 254, 213, 0, 0, 19, 136, 255, 255, 248, 48, 255, 255, 251, + 161, 181, 16, 75, 20, 28, 4, 104, 27, 52, 16, 104, 155, 0, 164, 25, 28, 34, 128, 104, 99, 1, 146, 66, 19, 209, 0, 64, + 83, 34, 46, 67, 147, 96, 99, 32, 5, 247, 255, 252, 230, 34, 128, 104, 99, 1, 146, 66, 19, 208, 0, 64, 83, 34, 46, 67, + 147, 96, 99, 32, 5, 247, 255, 252, 218, 75, 5, 32, 60, 96, 99, 247, 255, 252, 213, 32, 1, 188, 16, 188, 2, 71, 8, 70, + 192, 19, 112, 96, 60, 0, 0, 24, 1, 75, 5, 48, 16, 104, 27, 0, 128, 104, 155, 24, 24, 35, 128, 1, 155, 96, 67, 32, 0, + 71, 112, 70, 192, 19, 112, 96, 60, 74, 5, 32, 0, 104, 19, 104, 153, 35, 128, 1, 155, 100, 75, 104, 18, 104, 146, 100, + 147, 71, 112, 70, 192, 19, 112, 96, 60, 181, 0, 75, 10, 104, 27, 104, 154, 35, 128, 108, 81, 1, 155, 66, 25, 209, 0, + 100, 83, 75, 5, 104, 27, 104, 154, 35, 128, 108, 145, 1, 155, 66, 25, 209, 0, 100, 147, 32, 0, 188, 2, 71, 8, 19, 112, + 96, 60, 75, 6, 33, 0, 104, 26, 35, 1, 66, 91, 28, 16, 103, 17, 103, 147, 48, 152, 50, 160, 96, 1, 96, 19, 71, 112, 70, + 192, 19, 112, 96, 60, 181, 112, 75, 13, 104, 25, 28, 11, 51, 84, 28, 10, 120, 29, 50, 120, 35, 0, 224, 9, 0, 156, 24, + 228, 0, 228, 104, 22, 52, 88, 25, 12, 50, 40, 66, 134, 208, 4, 51, 1, 66, 171, 219, 243, 32, 0, 224, 0, 28, 32, 188, + 112, 188, 2, 71, 8, 19, 112, 96, 60, 181, 240, 176, 133, 77, 24, 28, 1, 36, 0, 32, 0, 70, 172, 145, 1, 224, 26, 0, 166, + 25, 54, 0, 246, 25, 174, 111, 53, 45, 0, 208, 18, 0, 197, 83, 92, 39, 0, 25, 93, 128, 111, 54, 96, 136, 55, 48, 1, 4, + 63, 10, 57, 14, 63, 67, 15, 128, 175, 136, 118, 4, 54, 10, 55, 14, 54, 67, 62, 128, 238, 52, 1, 70, 103, 104, 61, 28, + 46, 54, 84, 120, 54, 66, 180, 218, 2, 153, 1, 66, 136, 219, 218, 112, 16, 176, 5, 188, 240, 188, 2, 71, 8, 70, 192, + 19, 112, 96, 60, 181, 0, 28, 3, 224, 8, 120, 90, 58, 4, 6, 18, 14, 18, 42, 1, 217, 4, 120, 26, 26, 137, 24, 155, 41, + 0, 209, 244, 26, 24, 188, 2, 71, 8, 181, 240, 176, 133, 124, 130, 124, 195, 6, 18, 4, 27, 67, 19, 125, 2, 28, 5, 2, + 18, 67, 19, 125, 66, 67, 26, 208, 103, 34, 0, 146, 3, 146, 1, 224, 83, 6, 36, 4, 9, 2, 18, 67, 12, 67, 20, 158, 3, 67, + 35, 25, 156, 122, 98, 122, 163, 6, 18, 4, 27, 67, 19, 122, 226, 2, 18, 67, 19, 123, 34, 67, 26, 208, 58, 39, 0, 151, + 2, 28, 46, 224, 36, 6, 0, 4, 9, 2, 18, 67, 8, 67, 16, 67, 3, 25, 221, 123, 170, 123, 235, 6, 18, 4, 27, 67, 19, 124, + 42, 124, 104, 2, 18, 67, 19, 67, 24, 208, 1, 240, 3, 249, 66, 122, 106, 122, 171, 6, 18, 4, 27, 67, 19, 122, 234, 123, + 40, 2, 18, 67, 19, 67, 24, 208, 1, 240, 3, 249, 53, 154, 2, 55, 18, 50, 1, 146, 2, 121, 35, 157, 2, 70, 156, 122, 96, + 122, 161, 122, 226, 123, 35, 69, 101, 219, 209, 28, 53, 6, 6, 4, 8, 67, 48, 2, 18, 67, 16, 67, 24, 240, 3, 249, 31, + 158, 1, 154, 3, 54, 1, 50, 13, 150, 1, 146, 3, 124, 104, 158, 1, 124, 172, 124, 233, 125, 42, 125, 107, 66, 134, 219, + 163, 6, 36, 4, 8, 67, 32, 2, 18, 67, 16, 67, 24, 240, 3, 249, 9, 176, 5, 188, 240, 188, 1, 71, 0, 0, 0, 181, 248, 30, + 5, 209, 4, 75, 28, 34, 48, 112, 26, 112, 93, 224, 47, 76, 26, 28, 46, 28, 48, 33, 10, 240, 4, 249, 236, 28, 48, 28, + 15, 33, 10, 240, 4, 249, 255, 23, 251, 24, 255, 64, 95, 55, 48, 75, 20, 112, 39, 60, 1, 28, 6, 66, 156, 209, 236, 75, + 15, 34, 0, 118, 154, 45, 0, 218, 2, 34, 45, 112, 26, 34, 1, 35, 16, 72, 10, 224, 0, 51, 1, 92, 193, 41, 48, 208, 251, + 66, 72, 65, 65, 26, 91, 73, 6, 224, 2, 84, 136, 51, 1, 50, 1, 92, 200, 40, 0, 209, 249, 84, 136, 188, 248, 188, 1, 71, + 0, 70, 192, 19, 114, 197, 128, 19, 114, 197, 153, 19, 114, 197, 143, 181, 248, 30, 4, 209, 4, 75, 24, 34, 48, 112, 26, + 112, 92, 224, 40, 77, 22, 28, 47, 63, 10, 28, 32, 33, 10, 240, 4, 249, 129, 28, 32, 28, 14, 33, 10, 240, 4, 249, 86, + 54, 48, 112, 46, 61, 1, 28, 4, 66, 189, 209, 240, 74, 12, 35, 0, 118, 147, 28, 17, 35, 16, 224, 0, 51, 1, 92, 202, 42, + 48, 208, 251, 66, 81, 65, 74, 26, 155, 73, 6, 34, 0, 224, 2, 84, 136, 51, 1, 50, 1, 92, 200, 40, 0, 209, 249, 84, 136, + 188, 248, 188, 1, 71, 0, 19, 114, 197, 128, 19, 114, 197, 153, 181, 16, 40, 0, 209, 4, 75, 24, 34, 48, 112, 26, 112, + 88, 224, 40, 75, 22, 33, 15, 28, 28, 60, 8, 28, 10, 64, 2, 9, 0, 42, 9, 221, 0, 50, 7, 50, 48, 112, 26, 59, 1, 66, 163, + 209, 244, 74, 14, 35, 0, 118, 19, 35, 48, 112, 19, 35, 120, 112, 83, 35, 16, 224, 0, 51, 1, 92, 209, 41, 48, 208, 251, + 66, 74, 65, 74, 26, 155, 73, 6, 34, 2, 224, 2, 84, 136, 51, 1, 50, 1, 92, 200, 40, 0, 209, 249, 84, 136, 188, 16, 188, + 1, 71, 0, 19, 114, 197, 128, 19, 114, 197, 151, 180, 15, 181, 240, 176, 133, 171, 10, 203, 64, 34, 128, 1, 146, 169, + 3, 128, 10, 147, 2, 36, 0, 77, 46, 79, 46, 224, 81, 28, 114, 146, 1, 43, 37, 208, 12, 70, 106, 115, 19, 168, 3, 240, + 4, 248, 121, 25, 4, 158, 1, 66, 172, 220, 68, 168, 3, 240, 4, 249, 90, 224, 64, 120, 115, 43, 115, 208, 46, 43, 115, + 216, 4, 43, 100, 208, 7, 43, 105, 209, 53, 224, 4, 43, 117, 208, 9, 43, 120, 209, 48, 224, 20, 155, 2, 29, 26, 146, + 2, 104, 24, 247, 255, 255, 26, 224, 19, 155, 2, 29, 26, 146, 2, 104, 24, 247, 255, 255, 85, 28, 56, 240, 4, 248, 82, + 25, 4, 28, 56, 66, 172, 220, 27, 224, 24, 155, 2, 29, 26, 146, 2, 104, 24, 247, 255, 255, 127, 72, 16, 240, 4, 248, + 68, 25, 4, 66, 172, 220, 14, 72, 13, 224, 10, 155, 2, 29, 26, 146, 2, 104, 30, 28, 48, 240, 4, 248, 56, 25, 4, 66, 172, + 220, 2, 28, 48, 240, 4, 249, 26, 158, 1, 54, 1, 120, 51, 43, 0, 209, 170, 176, 5, 188, 240, 188, 8, 176, 4, 71, 24, + 0, 0, 13, 171, 19, 114, 197, 128, 181, 240, 28, 12, 176, 133, 28, 6, 33, 0, 32, 0, 247, 255, 252, 160, 126, 35, 43, + 0, 209, 9, 74, 221, 104, 17, 74, 221, 0, 137, 80, 139, 104, 32, 33, 8, 240, 2, 255, 138, 96, 96, 105, 33, 41, 0, 208, + 9, 126, 99, 104, 160, 43, 0, 208, 2, 240, 2, 255, 128, 224, 1, 240, 2, 255, 133, 96, 224, 126, 35, 43, 0, 209, 3, 75, + 210, 104, 27, 105, 219, 224, 6, 126, 99, 43, 0, 208, 1, 75, 207, 224, 0, 75, 207, 104, 27, 147, 2, 77, 207, 75, 207, + 153, 2, 28, 40, 96, 25, 34, 96, 240, 3, 248, 177, 33, 0, 34, 48, 152, 2, 240, 3, 255, 146, 75, 197, 34, 0, 104, 27, + 28, 32, 100, 26, 75, 200, 34, 1, 104, 25, 64, 74, 96, 26, 247, 255, 251, 102, 75, 197, 100, 168, 96, 24, 126, 34, 35, + 15, 146, 1, 64, 26, 146, 3, 155, 3, 28, 7, 34, 128, 105, 176, 2, 29, 1, 146, 155, 1, 67, 2, 105, 225, 67, 42, 43, 0, + 209, 1, 72, 188, 224, 5, 5, 72, 35, 128, 9, 64, 5, 219, 67, 3, 28, 24, 67, 16, 240, 3, 254, 235, 77, 179, 35, 64, 96, + 171, 75, 182, 33, 255, 104, 27, 34, 255, 108, 91, 2, 9, 4, 18, 64, 25, 64, 26, 2, 9, 10, 18, 67, 10, 14, 25, 67, 10, + 33, 224, 64, 11, 33, 2, 67, 11, 6, 27, 67, 26, 96, 104, 96, 42, 107, 120, 240, 3, 254, 207, 35, 128, 153, 1, 4, 91, + 97, 40, 97, 107, 41, 0, 208, 16, 9, 203, 153, 3, 106, 114, 1, 27, 24, 91, 64, 218, 28, 19, 7, 218, 213, 3, 105, 170, + 35, 128, 67, 19, 224, 2, 105, 171, 34, 128, 67, 147, 97, 171, 77, 153, 75, 158, 105, 170, 28, 40, 64, 19, 97, 171, 33, + 96, 240, 2, 255, 8, 108, 173, 224, 4, 28, 40, 33, 96, 240, 2, 255, 2, 107, 173, 45, 0, 209, 248, 152, 2, 73, 143, 34, + 96, 240, 3, 248, 41, 75, 148, 120, 27, 43, 0, 208, 4, 75, 147, 72, 148, 104, 25, 247, 255, 254, 215, 75, 147, 34, 1, + 96, 26, 77, 132, 35, 0, 147, 1, 153, 1, 74, 141, 49, 1, 145, 1, 72, 143, 104, 17, 247, 254, 255, 173, 104, 43, 33, 32, + 105, 152, 240, 2, 254, 242, 104, 42, 73, 127, 39, 2, 108, 75, 105, 145, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, 4, 18, + 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 67, 59, 6, 24, 28, 19, 67, 3, 96, 11, 104, 43, 33, 32, 105, 152, + 240, 2, 254, 194, 247, 255, 251, 144, 247, 254, 255, 182, 154, 1, 42, 4, 208, 6, 28, 3, 51, 9, 209, 3, 72, 120, 247, + 255, 254, 155, 231, 200, 75, 116, 34, 0, 96, 26, 75, 112, 28, 7, 120, 27, 43, 0, 208, 3, 72, 115, 28, 57, 247, 255, + 254, 142, 47, 0, 209, 6, 75, 94, 104, 26, 75, 94, 0, 146, 88, 211, 43, 0, 208, 15, 74, 93, 75, 90, 104, 18, 104, 27, + 104, 146, 0, 155, 50, 68, 24, 210, 104, 18, 33, 5, 64, 10, 42, 5, 208, 2, 74, 85, 33, 1, 80, 153, 66, 121, 65, 121, + 145, 1, 29, 122, 208, 1, 41, 0, 208, 65, 247, 255, 251, 44, 77, 80, 33, 32, 104, 43, 105, 152, 240, 3, 255, 166, 104, + 43, 33, 32, 105, 152, 240, 2, 254, 105, 75, 83, 104, 42, 104, 27, 105, 145, 108, 91, 34, 255, 2, 18, 64, 26, 2, 16, + 34, 255, 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 32, 2, 67, 3, 6, 24, 28, 19, 67, 3, 96, 11, 104, + 43, 33, 32, 105, 152, 240, 3, 255, 124, 247, 255, 251, 44, 126, 34, 42, 0, 208, 98, 9, 211, 32, 15, 64, 16, 1, 27, 24, + 27, 106, 113, 34, 1, 64, 154, 67, 145, 28, 10, 73, 70, 104, 9, 6, 9, 15, 201, 64, 153, 28, 11, 67, 19, 98, 115, 224, + 79, 247, 255, 250, 234, 75, 50, 108, 157, 224, 4, 107, 104, 33, 96, 240, 2, 254, 81, 107, 173, 45, 0, 209, 248, 77, + 45, 34, 32, 28, 40, 153, 2, 240, 2, 255, 112, 126, 34, 42, 0, 208, 16, 9, 211, 32, 15, 64, 16, 1, 27, 24, 27, 106, 113, + 34, 1, 64, 154, 67, 145, 28, 10, 105, 169, 6, 9, 15, 201, 64, 153, 28, 11, 67, 19, 98, 115, 77, 29, 33, 32, 104, 43, + 38, 2, 105, 152, 240, 3, 255, 63, 104, 43, 33, 32, 105, 152, 240, 2, 254, 2, 75, 31, 104, 42, 104, 27, 105, 145, 108, + 91, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 67, 51, 6, + 24, 28, 19, 67, 3, 96, 11, 104, 43, 33, 32, 105, 152, 240, 3, 255, 22, 247, 255, 250, 198, 73, 11, 32, 1, 247, 255, + 250, 236, 105, 33, 41, 0, 208, 48, 126, 99, 104, 224, 43, 0, 208, 42, 240, 2, 253, 241, 224, 41, 19, 112, 107, 104, + 19, 112, 107, 108, 19, 112, 96, 60, 19, 112, 107, 16, 19, 112, 107, 96, 19, 114, 197, 32, 19, 112, 107, 28, 19, 112, + 107, 88, 19, 112, 107, 56, 64, 64, 64, 0, 19, 112, 107, 92, 1, 0, 0, 128, 19, 112, 107, 20, 19, 112, 96, 56, 19, 112, + 96, 194, 19, 112, 107, 52, 19, 112, 42, 177, 19, 112, 98, 156, 19, 112, 96, 240, 19, 112, 107, 36, 240, 2, 253, 204, + 126, 35, 43, 0, 209, 3, 104, 96, 33, 8, 240, 2, 253, 191, 155, 1, 43, 0, 208, 0, 105, 103, 176, 5, 28, 56, 188, 240, + 188, 2, 71, 8, 181, 48, 176, 137, 70, 108, 118, 33, 9, 201, 118, 97, 33, 128, 0, 137, 37, 0, 145, 7, 70, 105, 149, 0, + 146, 4, 147, 2, 247, 255, 253, 240, 176, 9, 188, 48, 188, 2, 71, 8, 181, 240, 176, 139, 28, 6, 70, 104, 48, 70, 136, + 4, 72, 43, 70, 156, 104, 0, 70, 107, 51, 66, 48, 248, 104, 0, 136, 27, 112, 66, 4, 27, 70, 98, 147, 1, 2, 19, 10, 18, + 67, 19, 4, 26, 12, 19, 14, 18, 112, 1, 159, 18, 112, 130, 112, 195, 155, 1, 4, 36, 10, 26, 14, 27, 67, 19, 4, 27, 12, + 37, 12, 26, 14, 27, 113, 3, 14, 36, 2, 43, 67, 35, 4, 27, 113, 66, 14, 26, 12, 27, 113, 195, 172, 2, 35, 0, 113, 130, + 118, 35, 35, 64, 97, 227, 75, 21, 9, 201, 144, 2, 118, 97, 97, 37, 66, 159, 217, 22, 28, 40, 240, 2, 253, 118, 28, 42, + 28, 57, 96, 160, 240, 3, 253, 55, 28, 33, 28, 48, 247, 255, 253, 165, 104, 164, 28, 6, 28, 33, 28, 56, 28, 42, 240, + 3, 253, 44, 28, 32, 240, 2, 253, 129, 224, 5, 28, 48, 96, 167, 28, 33, 247, 255, 253, 149, 28, 6, 176, 11, 28, 48, 188, + 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 136, 0, 0, 181, 0, 176, 133, 145, 0, 35, 0, 33, 2, 34, 1, 147, 1, + 147, 2, 247, 255, 255, 148, 176, 5, 188, 2, 71, 8, 181, 0, 176, 133, 28, 19, 34, 0, 145, 0, 146, 1, 146, 2, 33, 1, 34, + 11, 247, 255, 255, 134, 176, 5, 188, 2, 71, 8, 181, 0, 176, 133, 34, 0, 146, 0, 146, 1, 146, 2, 28, 11, 34, 9, 33, 0, + 247, 255, 255, 120, 176, 5, 188, 2, 71, 8, 181, 112, 28, 4, 176, 132, 32, 1, 28, 14, 240, 2, 253, 34, 30, 5, 208, 18, + 35, 0, 147, 0, 35, 1, 147, 1, 28, 32, 33, 128, 34, 8, 35, 0, 149, 2, 247, 255, 255, 97, 30, 4, 219, 1, 120, 43, 112, + 51, 28, 40, 240, 2, 253, 44, 224, 1, 36, 4, 66, 100, 176, 4, 28, 32, 188, 112, 188, 2, 71, 8, 181, 16, 176, 132, 70, + 108, 2, 18, 52, 27, 120, 36, 67, 19, 34, 0, 146, 0, 145, 2, 34, 6, 33, 128, 148, 1, 247, 255, 255, 67, 176, 4, 188, + 16, 188, 2, 71, 8, 0, 0, 181, 240, 176, 137, 75, 65, 28, 2, 104, 30, 0, 129, 104, 179, 24, 9, 50, 16, 0, 201, 0, 146, + 24, 154, 28, 11, 51, 88, 28, 7, 24, 240, 144, 5, 24, 113, 32, 0, 103, 8, 104, 81, 29, 21, 74, 56, 64, 10, 42, 1, 209, + 99, 34, 4, 146, 4, 147, 7, 75, 54, 32, 10, 96, 43, 247, 254, 255, 134, 75, 52, 32, 100, 96, 43, 247, 254, 255, 129, + 75, 51, 34, 128, 96, 43, 35, 250, 0, 219, 147, 0, 0, 82, 35, 0, 28, 40, 28, 41, 247, 254, 255, 249, 104, 42, 75, 45, + 28, 4, 64, 19, 43, 5, 209, 50, 35, 192, 1, 27, 64, 26, 35, 128, 0, 219, 66, 154, 208, 43, 40, 0, 209, 43, 32, 100, 247, + 254, 255, 99, 75, 38, 74, 38, 104, 24, 96, 26, 154, 7, 35, 22, 147, 1, 24, 179, 147, 2, 35, 128, 144, 6, 33, 128, 152, + 5, 34, 6, 0, 91, 148, 0, 247, 255, 254, 231, 30, 4, 219, 12, 28, 123, 32, 0, 4, 27, 144, 0, 144, 1, 144, 2, 12, 27, + 152, 5, 33, 0, 34, 5, 247, 255, 254, 217, 28, 4, 75, 21, 154, 6, 96, 26, 44, 0, 219, 2, 224, 8, 36, 1, 66, 100, 155, + 4, 59, 1, 147, 4, 43, 0, 209, 169, 44, 0, 219, 10, 0, 187, 25, 219, 0, 219, 24, 246, 55, 1, 35, 0, 103, 243, 103, 55, + 224, 1, 36, 1, 66, 100, 176, 9, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 0, 0, 32, 1, 0, 0, 24, 3, + 0, 0, 25, 3, 0, 0, 16, 1, 0, 0, 32, 5, 19, 112, 96, 56, 0, 6, 26, 128, 181, 248, 76, 25, 28, 6, 104, 35, 104, 157, 35, + 1, 96, 171, 247, 255, 255, 97, 30, 7, 218, 24, 104, 35, 33, 55, 104, 155, 28, 52, 104, 90, 32, 10, 64, 10, 96, 90, 52, + 16, 247, 254, 254, 252, 0, 164, 75, 15, 25, 44, 96, 99, 32, 50, 247, 254, 254, 245, 75, 13, 32, 100, 96, 99, 247, 254, + 254, 240, 75, 11, 96, 99, 75, 7, 32, 55, 104, 26, 104, 146, 104, 81, 64, 1, 96, 81, 104, 27, 34, 4, 104, 155, 28, 56, + 96, 154, 188, 248, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 0, 0, 24, 3, 0, 0, 25, 3, 0, 0, 16, 1, 181, 240, 176, 137, + 75, 126, 34, 0, 104, 31, 0, 131, 24, 27, 0, 219, 28, 30, 147, 5, 54, 88, 24, 251, 28, 4, 25, 190, 103, 26, 32, 50, 247, + 254, 254, 196, 37, 3, 150, 6, 72, 118, 247, 255, 251, 213, 32, 50, 247, 254, 254, 188, 35, 22, 147, 1, 155, 6, 34, 0, + 147, 2, 35, 128, 146, 0, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 254, 69, 40, 0, 218, 12, 72, 109, 247, 255, 251, 192, + 32, 50, 247, 254, 254, 167, 61, 1, 32, 100, 247, 254, 254, 163, 45, 0, 209, 222, 224, 2, 154, 5, 24, 187, 224, 38, 28, + 32, 247, 255, 249, 84, 75, 100, 66, 152, 209, 0, 224, 184, 32, 100, 247, 254, 254, 147, 72, 98, 247, 255, 251, 166, + 35, 22, 147, 1, 155, 6, 34, 0, 147, 2, 35, 128, 146, 0, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 254, 25, 40, 0, 218, + 6, 72, 90, 53, 1, 247, 255, 251, 147, 45, 3, 209, 221, 224, 12, 0, 163, 25, 27, 0, 219, 24, 251, 110, 26, 75, 85, 66, + 154, 209, 46, 28, 32, 247, 255, 249, 175, 76, 83, 224, 144, 28, 32, 247, 255, 248, 248, 32, 100, 247, 254, 254, 103, + 28, 32, 247, 255, 249, 30, 74, 73, 66, 144, 209, 0, 224, 130, 32, 100, 247, 254, 254, 93, 72, 75, 247, 255, 251, 112, + 35, 0, 154, 6, 147, 0, 35, 22, 147, 1, 35, 128, 146, 2, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 253, 227, 40, 0, 218, + 7, 72, 63, 61, 1, 247, 255, 251, 93, 45, 0, 209, 215, 76, 64, 224, 102, 72, 64, 247, 255, 251, 86, 28, 99, 147, 5, 4, + 27, 12, 27, 147, 7, 0, 163, 25, 28, 0, 228, 37, 0, 25, 63, 32, 50, 247, 254, 254, 51, 72, 57, 28, 41, 247, 255, 251, + 69, 35, 0, 147, 0, 147, 1, 147, 2, 28, 48, 33, 0, 34, 5, 155, 7, 247, 255, 253, 187, 30, 4, 218, 7, 76, 50, 28, 41, + 72, 50, 27, 100, 247, 255, 251, 51, 53, 1, 224, 3, 72, 48, 28, 41, 247, 255, 251, 45, 155, 5, 34, 0, 103, 250, 103, + 59, 44, 0, 218, 47, 33, 0, 28, 48, 247, 255, 254, 5, 32, 50, 247, 254, 254, 10, 72, 40, 247, 255, 251, 29, 35, 22, 147, + 1, 155, 6, 34, 0, 147, 2, 35, 128, 146, 0, 28, 48, 33, 128, 34, 6, 0, 91, 247, 255, 253, 144, 30, 4, 218, 6, 72, 32, + 247, 255, 251, 11, 34, 0, 103, 58, 76, 31, 224, 2, 72, 31, 247, 255, 251, 4, 53, 1, 44, 0, 218, 7, 15, 233, 34, 0, 35, + 4, 66, 171, 65, 74, 6, 18, 42, 0, 209, 172, 44, 0, 219, 4, 72, 24, 247, 255, 250, 244, 224, 0, 76, 6, 176, 9, 28, 32, + 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 60, 19, 112, 97, 75, 19, 112, 97, 0, 255, 255, 251, 161, 19, 112, 97, + 30, 19, 112, 97, 69, 149, 11, 32, 119, 255, 255, 251, 160, 19, 112, 97, 106, 255, 255, 247, 103, 19, 112, 97, 155, 19, + 112, 97, 181, 255, 255, 224, 192, 19, 112, 97, 212, 19, 112, 97, 243, 19, 112, 98, 55, 19, 112, 98, 14, 255, 255, 247, + 62, 19, 112, 98, 52, 19, 112, 98, 87, 181, 16, 75, 10, 34, 1, 104, 27, 28, 4, 104, 155, 96, 154, 247, 255, 248, 95, + 40, 0, 219, 2, 28, 32, 247, 255, 254, 202, 75, 3, 34, 4, 104, 27, 104, 155, 96, 154, 188, 16, 188, 2, 71, 8, 19, 112, + 96, 60, 181, 240, 176, 141, 144, 6, 32, 22, 28, 13, 240, 2, 250, 217, 30, 7, 209, 0, 224, 214, 32, 10, 247, 254, 253, + 137, 35, 18, 147, 0, 152, 6, 28, 57, 34, 1, 35, 0, 247, 255, 253, 197, 40, 0, 218, 54, 72, 180, 247, 255, 250, 146, + 76, 179, 104, 32, 247, 255, 255, 202, 28, 6, 32, 20, 247, 254, 253, 116, 75, 176, 104, 32, 104, 27, 0, 130, 104, 155, + 51, 68, 24, 155, 104, 26, 46, 0, 219, 4, 75, 172, 64, 26, 75, 172, 66, 154, 208, 13, 247, 255, 254, 81, 32, 20, 247, + 254, 253, 96, 75, 166, 104, 27, 104, 154, 75, 164, 50, 68, 104, 27, 0, 155, 24, 211, 104, 27, 32, 30, 247, 254, 253, + 84, 35, 18, 147, 0, 152, 6, 28, 57, 34, 1, 35, 0, 247, 255, 253, 144, 30, 4, 218, 1, 72, 158, 224, 165, 28, 57, 34, + 18, 28, 40, 240, 3, 250, 83, 28, 56, 240, 2, 250, 168, 120, 170, 120, 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, + 19, 4, 27, 12, 26, 112, 234, 14, 27, 122, 42, 112, 171, 122, 107, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, + 12, 26, 114, 106, 14, 27, 122, 170, 114, 43, 122, 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 26, + 114, 234, 14, 27, 123, 42, 114, 171, 123, 107, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 26, 14, 27, + 115, 43, 124, 107, 115, 106, 0, 88, 24, 192, 0, 128, 24, 192, 240, 2, 250, 79, 14, 3, 116, 171, 12, 3, 116, 235, 10, + 3, 117, 43, 117, 104, 40, 0, 209, 1, 72, 120, 224, 204, 124, 107, 33, 0, 0, 90, 24, 210, 0, 146, 24, 210, 240, 3, 250, + 68, 33, 0, 145, 10, 145, 5, 28, 46, 225, 51, 32, 9, 240, 2, 250, 52, 30, 4, 208, 49, 154, 5, 28, 33, 6, 19, 14, 27, + 147, 3, 35, 9, 147, 0, 34, 2, 155, 3, 152, 6, 247, 255, 253, 32, 124, 179, 124, 245, 6, 27, 4, 45, 67, 29, 125, 51, + 28, 33, 2, 27, 67, 29, 125, 115, 34, 9, 67, 29, 155, 10, 24, 237, 28, 40, 240, 3, 249, 219, 28, 32, 240, 2, 250, 48, + 120, 170, 120, 235, 2, 18, 67, 26, 4, 18, 10, 19, 14, 18, 67, 19, 4, 27, 12, 28, 14, 27, 112, 171, 112, 236, 28, 32, + 240, 2, 250, 2, 30, 7, 209, 6, 28, 53, 72, 86, 36, 4, 247, 255, 249, 199, 66, 100, 225, 3, 120, 235, 152, 6, 147, 0, + 28, 57, 34, 2, 155, 3, 247, 255, 252, 235, 40, 0, 218, 5, 28, 4, 72, 78, 28, 53, 247, 255, 249, 182, 224, 238, 120, + 41, 145, 2, 121, 43, 0, 216, 24, 192, 0, 64, 240, 2, 249, 225, 14, 3, 114, 107, 12, 3, 114, 171, 10, 3, 114, 235, 115, + 40, 40, 0, 209, 2, 28, 53, 72, 68, 224, 93, 155, 2, 154, 2, 26, 228, 25, 210, 146, 3, 148, 4, 121, 43, 33, 0, 0, 218, + 24, 210, 0, 82, 240, 3, 249, 208, 33, 0, 145, 11, 145, 8, 224, 177, 122, 107, 122, 172, 6, 27, 4, 36, 67, 28, 122, 235, + 154, 11, 2, 27, 67, 28, 123, 43, 153, 3, 67, 28, 24, 164, 28, 32, 34, 9, 240, 3, 249, 121, 120, 35, 147, 2, 121, 35, + 0, 216, 26, 192, 240, 2, 249, 172, 14, 3, 115, 163, 12, 3, 115, 227, 10, 3, 116, 35, 116, 96, 40, 0, 209, 2, 28, 53, + 72, 42, 224, 40, 153, 3, 155, 4, 28, 10, 153, 2, 24, 82, 153, 2, 146, 3, 26, 91, 147, 4, 121, 35, 33, 0, 0, 218, 26, + 210, 240, 3, 249, 153, 152, 3, 153, 4, 247, 255, 248, 27, 35, 11, 144, 2, 70, 106, 92, 154, 115, 98, 155, 2, 43, 0, + 208, 31, 28, 24, 240, 2, 249, 130, 14, 3, 114, 99, 12, 3, 114, 163, 10, 3, 114, 227, 115, 32, 40, 0, 209, 6, 72, 23, + 28, 53, 36, 4, 247, 255, 249, 64, 66, 100, 224, 119, 153, 3, 154, 2, 240, 3, 249, 52, 153, 3, 155, 4, 28, 10, 153, 2, + 24, 82, 153, 2, 146, 3, 26, 91, 147, 4, 34, 0, 146, 7, 146, 9, 224, 68, 70, 192, 19, 112, 98, 121, 19, 112, 107, 104, + 19, 112, 96, 60, 0, 0, 49, 5, 0, 0, 16, 5, 19, 112, 98, 163, 19, 112, 98, 198, 19, 112, 98, 96, 19, 112, 98, 236, 19, + 112, 99, 22, 19, 112, 99, 56, 19, 112, 99, 89, 123, 162, 123, 227, 6, 18, 4, 27, 67, 19, 124, 34, 153, 7, 2, 18, 67, + 19, 124, 98, 67, 19, 24, 201, 145, 2, 28, 8, 34, 7, 153, 3, 240, 3, 248, 252, 154, 2, 153, 3, 120, 19, 24, 201, 145, + 3, 153, 2, 121, 18, 121, 75, 2, 18, 67, 26, 4, 18, 10, 17, 14, 19, 67, 11, 4, 27, 153, 2, 12, 26, 14, 27, 113, 11, 113, + 74, 154, 9, 155, 7, 50, 1, 51, 7, 146, 9, 147, 7, 121, 35, 153, 9, 66, 153, 211, 207, 154, 8, 155, 11, 50, 1, 51, 18, + 146, 8, 147, 11, 121, 43, 153, 8, 66, 153, 210, 0, 231, 72, 28, 56, 240, 2, 249, 40, 154, 5, 155, 10, 50, 1, 51, 13, + 146, 5, 147, 10, 39, 0, 124, 115, 153, 5, 66, 153, 210, 0, 230, 198, 28, 53, 36, 0, 47, 0, 208, 7, 28, 56, 240, 2, 249, + 21, 44, 0, 208, 2, 28, 40, 247, 254, 255, 145, 176, 13, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 181, 248, 28, 4, 38, + 3, 39, 64, 224, 79, 104, 160, 240, 3, 248, 112, 10, 3, 64, 51, 28, 5, 43, 2, 208, 7, 107, 227, 108, 34, 105, 89, 24, + 138, 0, 65, 12, 73, 26, 82, 97, 90, 108, 35, 43, 0, 208, 59, 66, 47, 208, 57, 75, 36, 120, 27, 43, 0, 208, 2, 72, 35, + 247, 255, 248, 151, 6, 235, 213, 6, 75, 32, 120, 27, 43, 0, 208, 2, 72, 32, 247, 255, 248, 142, 7, 107, 213, 6, 75, + 27, 120, 27, 43, 0, 208, 2, 72, 28, 247, 255, 248, 133, 6, 171, 213, 6, 75, 23, 120, 27, 43, 0, 208, 2, 72, 25, 247, + 255, 248, 124, 7, 43, 213, 6, 75, 18, 120, 27, 43, 0, 208, 2, 72, 21, 247, 255, 248, 115, 75, 15, 120, 27, 43, 0, 208, + 2, 72, 19, 247, 255, 248, 108, 75, 11, 120, 27, 43, 0, 208, 8, 72, 16, 247, 255, 248, 101, 224, 4, 107, 164, 44, 0, + 209, 173, 32, 0, 224, 3, 107, 227, 32, 1, 66, 64, 97, 88, 75, 11, 34, 0, 104, 27, 100, 26, 188, 248, 188, 2, 71, 8, + 19, 112, 107, 20, 19, 112, 99, 118, 19, 112, 99, 131, 19, 112, 99, 139, 19, 112, 99, 160, 19, 112, 99, 179, 19, 112, + 99, 190, 19, 112, 105, 116, 19, 112, 96, 60, 181, 240, 176, 131, 144, 1, 35, 9, 7, 192, 213, 60, 75, 59, 120, 27, 43, + 0, 208, 2, 72, 58, 247, 255, 248, 53, 75, 58, 104, 28, 44, 0, 208, 9, 107, 96, 33, 96, 240, 3, 249, 67, 107, 96, 33, + 96, 240, 2, 248, 49, 107, 164, 231, 243, 76, 52, 104, 35, 43, 0, 208, 24, 108, 88, 33, 32, 240, 3, 249, 53, 104, 35, + 33, 32, 108, 88, 240, 2, 248, 34, 104, 35, 34, 128, 4, 82, 97, 26, 74, 44, 108, 88, 104, 18, 33, 32, 107, 82, 97, 90, + 240, 3, 249, 58, 104, 35, 105, 154, 75, 40, 96, 26, 75, 36, 104, 24, 247, 255, 255, 78, 35, 0, 40, 0, 208, 4, 74, 37, + 104, 18, 100, 19, 35, 5, 66, 91, 152, 1, 7, 64, 213, 40, 75, 27, 120, 27, 43, 0, 208, 2, 72, 32, 247, 254, 255, 244, + 32, 128, 1, 128, 79, 28, 78, 30, 33, 0, 35, 1, 34, 0, 70, 132, 104, 56, 104, 132, 104, 48, 52, 68, 24, 100, 104, 37, + 66, 130, 209, 7, 32, 1, 66, 40, 209, 10, 75, 23, 80, 88, 35, 1, 66, 91, 224, 5, 72, 21, 64, 5, 45, 3, 209, 1, 70, 96, + 96, 32, 50, 1, 49, 4, 42, 4, 209, 229, 43, 0, 208, 5, 153, 1, 34, 18, 66, 10, 208, 1, 35, 6, 66, 91, 176, 3, 28, 24, + 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 20, 19, 112, 99, 207, 19, 112, 107, 56, 19, 112, 107, 28, 19, 112, 107, + 40, 19, 112, 107, 36, 19, 112, 96, 60, 19, 112, 99, 240, 19, 112, 107, 104, 19, 112, 107, 108, 0, 0, 32, 3, 181, 240, + 176, 131, 147, 1, 70, 107, 51, 39, 120, 30, 28, 5, 30, 115, 6, 27, 14, 27, 145, 0, 28, 23, 43, 15, 216, 61, 28, 4, 52, + 160, 104, 32, 40, 0, 208, 56, 33, 0, 34, 31, 240, 2, 255, 211, 104, 35, 74, 29, 96, 26, 28, 43, 51, 152, 104, 24, 240, + 2, 255, 79, 104, 35, 96, 88, 28, 56, 240, 2, 255, 74, 104, 35, 70, 105, 96, 152, 29, 202, 120, 17, 104, 35, 70, 106, + 115, 25, 28, 209, 104, 35, 120, 10, 115, 90, 104, 34, 35, 6, 46, 6, 217, 0, 35, 10, 28, 44, 115, 147, 52, 160, 104, + 32, 153, 8, 28, 50, 48, 15, 240, 2, 255, 106, 28, 43, 51, 144, 104, 24, 123, 105, 104, 35, 34, 31, 247, 255, 249, 212, + 40, 31, 208, 6, 40, 0, 219, 5, 72, 5, 224, 3, 32, 3, 66, 64, 224, 0, 32, 0, 176, 3, 188, 240, 188, 2, 71, 8, 85, 83, + 66, 67, 255, 255, 216, 238, 181, 240, 28, 4, 176, 131, 52, 160, 28, 5, 145, 0, 28, 23, 33, 255, 34, 13, 104, 32, 240, + 2, 255, 134, 28, 43, 51, 144, 104, 24, 123, 41, 104, 35, 34, 13, 247, 255, 249, 174, 40, 13, 208, 1, 40, 0, 218, 40, + 40, 0, 219, 43, 28, 43, 51, 160, 104, 28, 104, 32, 240, 2, 254, 246, 144, 1, 104, 96, 240, 2, 254, 242, 28, 6, 104, + 160, 240, 2, 254, 238, 74, 16, 153, 1, 123, 35, 66, 145, 209, 21, 47, 0, 208, 0, 96, 56, 154, 0, 42, 0, 208, 0, 112, + 19, 53, 152, 104, 43, 66, 158, 209, 12, 28, 179, 4, 27, 12, 54, 12, 27, 4, 54, 67, 30, 96, 46, 32, 0, 224, 4, 72, 5, + 224, 2, 72, 5, 224, 0, 72, 5, 176, 3, 188, 240, 188, 2, 71, 8, 83, 66, 83, 85, 255, 255, 216, 237, 255, 255, 216, 236, + 255, 255, 216, 235, 181, 240, 176, 135, 74, 78, 75, 79, 120, 18, 28, 6, 104, 31, 42, 0, 208, 1, 73, 77, 224, 0, 73, + 77, 96, 25, 28, 51, 51, 144, 104, 24, 75, 75, 104, 27, 104, 153, 105, 195, 49, 68, 0, 155, 24, 203, 104, 25, 35, 1, + 66, 11, 209, 9, 74, 71, 36, 1, 104, 17, 74, 70, 0, 137, 80, 139, 75, 64, 66, 100, 96, 31, 224, 116, 75, 62, 42, 0, 208, + 1, 74, 61, 224, 0, 74, 61, 96, 26, 75, 64, 120, 27, 43, 0, 208, 17, 136, 243, 34, 255, 147, 0, 33, 33, 35, 0, 147, 1, + 147, 2, 247, 255, 249, 75, 28, 4, 28, 33, 72, 58, 247, 254, 254, 198, 32, 60, 247, 254, 249, 173, 224, 6, 33, 0, 247, + 255, 249, 161, 32, 5, 247, 254, 249, 166, 36, 0, 75, 43, 120, 26, 75, 43, 42, 0, 208, 1, 74, 42, 224, 0, 74, 42, 28, + 53, 96, 26, 53, 144, 44, 0, 218, 10, 32, 50, 247, 254, 249, 149, 104, 40, 33, 0, 247, 255, 249, 137, 32, 5, 247, 254, + 249, 142, 224, 48, 123, 49, 104, 40, 247, 255, 249, 129, 28, 4, 32, 5, 247, 254, 249, 133, 72, 36, 28, 33, 247, 254, + 254, 151, 44, 0, 219, 34, 123, 113, 104, 40, 247, 255, 249, 115, 28, 4, 32, 5, 247, 254, 249, 119, 72, 30, 28, 33, 247, + 254, 254, 137, 44, 0, 219, 20, 32, 10, 247, 254, 249, 110, 70, 105, 49, 23, 104, 40, 247, 255, 249, 138, 28, 4, 28, + 33, 72, 23, 247, 254, 254, 122, 44, 0, 219, 5, 72, 21, 247, 254, 254, 117, 75, 9, 96, 31, 224, 7, 75, 7, 33, 1, 96, + 31, 75, 10, 104, 26, 75, 10, 0, 146, 80, 209, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 1, 15, 19, + 112, 96, 56, 0, 15, 66, 64, 0, 3, 13, 64, 19, 112, 96, 60, 19, 112, 107, 104, 19, 112, 107, 108, 19, 112, 1, 13, 19, + 112, 100, 17, 19, 112, 100, 50, 19, 112, 100, 89, 19, 112, 100, 129, 19, 112, 100, 176, 181, 240, 176, 141, 146, 6, + 70, 106, 50, 79, 120, 18, 28, 31, 70, 107, 51, 95, 146, 7, 70, 106, 120, 27, 50, 83, 120, 18, 6, 27, 22, 27, 146, 8, + 70, 106, 50, 47, 147, 4, 35, 0, 112, 19, 74, 156, 145, 5, 104, 17, 74, 156, 0, 137, 77, 156, 28, 6, 147, 10, 80, 139, + 147, 3, 36, 0, 28, 163, 43, 1, 216, 5, 75, 149, 33, 1, 104, 26, 75, 149, 0, 146, 224, 30, 44, 0, 208, 36, 28, 48, 33, + 0, 247, 255, 255, 22, 30, 4, 219, 1, 32, 5, 224, 0, 32, 60, 247, 254, 248, 253, 74, 143, 75, 139, 104, 18, 104, 27, + 104, 146, 0, 155, 50, 68, 24, 210, 104, 18, 44, 0, 218, 12, 154, 3, 50, 1, 146, 3, 42, 2, 221, 3, 74, 133, 33, 1, 80, + 153, 224, 231, 32, 10, 247, 254, 248, 230, 224, 219, 35, 0, 147, 3, 155, 4, 154, 8, 59, 1, 6, 27, 22, 27, 147, 4, 42, + 0, 208, 59, 104, 43, 74, 126, 147, 2, 120, 19, 43, 0, 208, 1, 75, 125, 224, 0, 75, 125, 96, 43, 154, 7, 155, 18, 146, + 1, 147, 0, 28, 58, 35, 0, 28, 48, 153, 5, 247, 255, 254, 47, 75, 115, 154, 2, 28, 4, 96, 26, 28, 131, 43, 1, 216, 0, + 224, 189, 40, 0, 218, 0, 224, 178, 155, 6, 34, 144, 25, 146, 28, 60, 147, 2, 146, 9, 224, 18, 155, 9, 123, 113, 104, + 24, 28, 34, 155, 2, 247, 255, 248, 48, 28, 131, 43, 1, 216, 0, 224, 159, 40, 0, 219, 69, 66, 160, 209, 67, 154, 2, 26, + 36, 24, 18, 146, 2, 44, 0, 209, 234, 224, 62, 104, 43, 74, 96, 147, 2, 120, 19, 43, 0, 208, 1, 75, 95, 224, 0, 75, 95, + 96, 43, 154, 7, 155, 18, 146, 1, 147, 0, 28, 58, 35, 128, 28, 48, 153, 5, 247, 255, 253, 243, 75, 85, 154, 2, 28, 4, + 96, 26, 40, 0, 218, 3, 72, 87, 28, 33, 247, 254, 253, 151, 28, 163, 43, 1, 217, 124, 44, 0, 218, 22, 224, 113, 28, 51, + 51, 144, 104, 24, 123, 49, 28, 58, 155, 6, 247, 254, 255, 245, 30, 4, 218, 3, 72, 78, 28, 33, 247, 254, 253, 131, 28, + 163, 43, 1, 217, 96, 44, 0, 219, 5, 66, 188, 208, 5, 224, 2, 47, 0, 209, 231, 224, 1, 76, 71, 224, 86, 75, 63, 74, 65, + 104, 27, 147, 2, 120, 19, 43, 0, 208, 1, 75, 63, 224, 0, 75, 63, 74, 58, 70, 105, 96, 19, 28, 48, 49, 47, 170, 10, 247, + 255, 254, 14, 30, 4, 218, 34, 72, 61, 28, 33, 247, 254, 253, 94, 28, 99, 209, 3, 75, 50, 154, 2, 96, 26, 224, 64, 28, + 52, 52, 144, 104, 32, 123, 49, 247, 255, 248, 52, 123, 51, 32, 15, 104, 34, 64, 24, 9, 219, 1, 27, 106, 81, 24, 27, + 32, 1, 64, 152, 67, 129, 98, 81, 70, 105, 28, 48, 49, 47, 170, 10, 247, 255, 253, 234, 28, 4, 75, 36, 154, 2, 96, 26, + 28, 163, 43, 1, 217, 33, 155, 10, 43, 0, 208, 7, 75, 40, 104, 27, 43, 0, 208, 3, 70, 107, 34, 1, 51, 47, 112, 26, 44, + 0, 219, 12, 75, 35, 36, 0, 104, 27, 43, 0, 208, 7, 70, 107, 51, 47, 120, 27, 43, 0, 208, 2, 76, 31, 224, 0, 28, 4, 155, + 4, 43, 0, 221, 2, 44, 0, 218, 0, 230, 239, 44, 0, 218, 4, 75, 14, 33, 1, 104, 26, 0, 146, 224, 3, 75, 11, 33, 0, 104, + 26, 0, 146, 75, 10, 80, 209, 154, 21, 42, 0, 208, 3, 70, 107, 51, 47, 120, 27, 112, 19, 155, 22, 43, 0, 208, 2, 155, + 10, 154, 22, 96, 19, 176, 13, 28, 32, 188, 240, 188, 2, 71, 8, 19, 112, 107, 104, 19, 112, 107, 108, 19, 112, 96, 56, + 19, 112, 96, 60, 19, 112, 1, 15, 0, 15, 66, 64, 0, 3, 13, 64, 19, 112, 100, 186, 19, 112, 100, 205, 255, 255, 216, 233, + 19, 112, 100, 229, 19, 112, 107, 64, 255, 255, 216, 234, 181, 240, 28, 3, 176, 143, 51, 160, 145, 7, 104, 30, 33, 128, + 70, 111, 1, 9, 55, 55, 37, 0, 172, 9, 24, 118, 144, 6, 112, 61, 28, 32, 33, 0, 34, 16, 240, 2, 253, 8, 46, 0, 208, 87, + 35, 6, 147, 1, 35, 1, 147, 2, 35, 10, 147, 5, 153, 7, 35, 0, 152, 6, 34, 0, 149, 4, 148, 0, 151, 3, 247, 255, 254, 113, + 28, 5, 28, 41, 72, 40, 247, 254, 252, 182, 28, 107, 208, 69, 45, 0, 219, 2, 120, 59, 43, 0, 208, 64, 153, 7, 171, 9, + 34, 3, 112, 26, 1, 74, 112, 90, 34, 18, 113, 26, 34, 0, 113, 90, 28, 48, 33, 0, 34, 18, 240, 2, 252, 220, 75, 28, 53, + 2, 209, 1, 74, 28, 224, 0, 74, 28, 96, 26, 171, 9, 147, 0, 35, 6, 147, 1, 35, 0, 147, 2, 147, 3, 147, 4, 35, 10, 147, + 5, 153, 7, 152, 6, 28, 50, 35, 18, 247, 255, 254, 63, 28, 5, 28, 41, 72, 19, 247, 254, 252, 132, 45, 0, 219, 19, 120, + 179, 33, 15, 70, 108, 64, 25, 52, 55, 72, 15, 112, 33, 247, 254, 252, 121, 120, 35, 59, 2, 6, 27, 14, 27, 43, 2, 217, + 3, 224, 3, 37, 4, 66, 109, 224, 0, 77, 9, 176, 15, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 100, 244, 19, + 112, 96, 56, 0, 38, 37, 160, 0, 152, 150, 128, 19, 112, 101, 21, 19, 112, 101, 52, 255, 255, 216, 239, 181, 240, 176, + 147, 70, 106, 79, 212, 35, 0, 50, 71, 112, 19, 28, 4, 104, 58, 72, 210, 37, 16, 84, 133, 72, 209, 28, 34, 50, 152, 96, + 16, 174, 12, 58, 8, 96, 17, 28, 8, 130, 115, 28, 49, 130, 179, 247, 255, 249, 149, 28, 5, 28, 41, 72, 203, 247, 254, + 252, 60, 45, 0, 218, 0, 225, 230, 104, 59, 74, 200, 0, 153, 88, 138, 42, 0, 208, 42, 74, 199, 24, 201, 0, 137, 24, 81, + 121, 136, 121, 50, 66, 144, 209, 25, 121, 200, 121, 114, 66, 144, 209, 21, 28, 10, 137, 8, 137, 49, 50, 8, 66, 136, + 209, 15, 136, 80, 137, 113, 66, 136, 209, 11, 121, 16, 123, 177, 66, 136, 209, 7, 121, 80, 123, 241, 66, 136, 209, 3, + 121, 145, 124, 50, 66, 145, 208, 8, 168, 12, 247, 254, 250, 225, 37, 1, 72, 181, 247, 254, 252, 10, 66, 109, 225, 195, + 0, 153, 24, 201, 72, 176, 171, 12, 121, 26, 0, 137, 24, 65, 113, 138, 121, 90, 38, 0, 113, 202, 137, 24, 28, 10, 129, + 8, 137, 89, 50, 8, 128, 81, 123, 153, 113, 17, 123, 217, 113, 81, 124, 27, 113, 147, 74, 168, 35, 128, 66, 91, 96, 19, + 35, 0, 147, 8, 147, 5, 224, 232, 138, 111, 138, 171, 154, 8, 4, 63, 67, 31, 24, 191, 122, 58, 72, 161, 0, 82, 153, 5, + 247, 254, 251, 221, 34, 156, 35, 0, 25, 18, 147, 10, 147, 6, 146, 11, 224, 202, 122, 123, 122, 189, 6, 27, 4, 45, 67, + 29, 122, 251, 2, 27, 67, 29, 123, 59, 67, 29, 155, 10, 24, 237, 121, 107, 43, 8, 209, 126, 121, 235, 43, 80, 209, 123, + 121, 43, 43, 1, 217, 120, 154, 11, 35, 1, 112, 19, 121, 169, 72, 144, 34, 1, 247, 254, 251, 185, 35, 0, 115, 102, 115, + 38, 147, 9, 147, 7, 224, 49, 123, 170, 123, 235, 6, 18, 4, 27, 67, 19, 124, 42, 2, 18, 67, 19, 124, 106, 67, 19, 154, + 9, 24, 155, 120, 218, 42, 2, 209, 28, 120, 154, 6, 17, 41, 0, 218, 11, 123, 33, 41, 0, 209, 8, 42, 0, 208, 6, 115, 34, + 121, 25, 121, 91, 2, 9, 67, 25, 72, 125, 224, 10, 123, 97, 41, 0, 209, 9, 42, 0, 208, 7, 115, 98, 121, 25, 121, 91, + 2, 9, 72, 121, 67, 25, 247, 254, 251, 135, 155, 7, 154, 9, 51, 1, 50, 7, 147, 7, 146, 9, 121, 43, 154, 7, 66, 154, 211, + 201, 123, 33, 41, 0, 208, 104, 123, 98, 42, 0, 208, 101, 72, 112, 247, 254, 251, 116, 73, 98, 74, 103, 104, 11, 0, 152, + 24, 195, 0, 155, 123, 32, 24, 211, 116, 24, 123, 96, 116, 88, 121, 123, 112, 35, 104, 9, 120, 171, 0, 136, 24, 65, 0, + 137, 24, 82, 96, 99, 115, 211, 120, 235, 168, 12, 96, 163, 247, 254, 250, 45, 75, 92, 74, 98, 72, 98, 96, 26, 120, 33, + 104, 162, 247, 254, 251, 82, 28, 35, 51, 144, 70, 105, 104, 24, 49, 71, 247, 254, 254, 86, 40, 0, 218, 89, 224, 85, + 123, 170, 123, 235, 6, 18, 4, 27, 67, 19, 124, 42, 124, 104, 2, 18, 67, 19, 67, 24, 208, 1, 240, 1, 251, 141, 122, 106, 122, 171, 6, 18, 4, 27, 67, 19, 122, 234, 123, 40, 2, 18, 67, 19, 115, 174, 115, 238, 116, 46, 116, 110, 67, 24, 208, - 1, 240, 1, 250, 112, 121, 107, 114, 110, 114, 174, 114, 238, 115, 46, 43, 9, 209, 4, 74, 72, 75, 63, 168, 12, 96, 26, - 224, 39, 43, 8, 209, 10, 121, 235, 43, 80, 209, 7, 121, 43, 43, 1, 217, 4, 121, 171, 74, 66, 26, 211, 74, 56, 96, 19, - 155, 6, 154, 9, 51, 1, 50, 18, 147, 6, 146, 9, 121, 59, 154, 6, 66, 154, 210, 0, 231, 58, 155, 5, 154, 10, 51, 1, 50, - 13, 147, 5, 146, 10, 173, 12, 124, 107, 154, 5, 66, 154, 210, 0, 231, 27, 72, 53, 247, 254, 251, 51, 28, 40, 247, 254, - 250, 3, 77, 49, 224, 148, 72, 50, 247, 254, 251, 43, 70, 107, 51, 71, 120, 25, 120, 34, 72, 48, 247, 254, 251, 36, 75, - 34, 74, 47, 96, 26, 28, 35, 51, 144, 104, 24, 120, 33, 247, 254, 254, 18, 40, 0, 218, 2, 72, 43, 247, 254, 251, 22, - 74, 42, 75, 27, 121, 225, 96, 26, 28, 35, 51, 144, 104, 24, 122, 226, 247, 254, 253, 245, 40, 0, 218, 2, 72, 37, 247, - 254, 251, 7, 72, 37, 70, 109, 247, 254, 251, 3, 53, 70, 35, 0, 112, 43, 28, 35, 51, 144, 104, 24, 136, 227, 33, 161, - 147, 0, 35, 1, 147, 1, 34, 254, 35, 0, 149, 2, 247, 254, 253, 109, 40, 0, 218, 56, 72, 27, 247, 254, 250, 238, 35, 8, - 115, 163, 224, 58, 70, 192, 19, 112, 96, 64, 44, 13, 224, 1, 19, 112, 101, 86, 19, 112, 107, 56, 19, 112, 107, 36, 19, - 112, 101, 128, 19, 112, 107, 0, 19, 112, 101, 166, 19, 112, 101, 205, 19, 112, 102, 4, 19, 112, 102, 18, 19, 112, 102, - 33, 255, 255, 251, 79, 19, 112, 102, 102, 255, 255, 177, 224, 255, 255, 216, 240, 19, 112, 102, 53, 19, 112, 102, 148, - 19, 112, 102, 189, 255, 255, 251, 78, 19, 112, 102, 222, 255, 255, 251, 77, 19, 112, 102, 252, 19, 112, 103, 43, 19, - 112, 103, 102, 120, 41, 72, 24, 49, 1, 6, 9, 14, 9, 115, 161, 247, 254, 250, 176, 28, 37, 53, 160, 104, 43, 43, 0, 209, - 7, 32, 129, 1, 64, 240, 1, 249, 147, 35, 31, 48, 31, 67, 152, 96, 40, 52, 160, 104, 35, 37, 0, 43, 0, 209, 4, 74, 12, - 75, 13, 37, 4, 96, 26, 66, 109, 74, 12, 75, 12, 96, 26, 45, 0, 208, 5, 75, 8, 72, 11, 104, 25, 247, 254, 250, 143, 224, - 2, 72, 9, 247, 254, 250, 139, 176, 19, 28, 40, 188, 240, 188, 2, 71, 8, 19, 112, 103, 141, 255, 255, 251, 75, 19, 112, - 107, 0, 0, 15, 66, 64, 19, 112, 96, 56, 19, 112, 103, 164, 19, 112, 103, 198, 181, 8, 33, 0, 247, 255, 251, 104, 188, - 8, 188, 2, 71, 8, 0, 0, 181, 240, 176, 139, 171, 8, 34, 18, 112, 26, 1, 74, 112, 90, 34, 0, 112, 154, 112, 218, 113, - 90, 28, 15, 28, 2, 33, 36, 50, 160, 113, 25, 104, 20, 34, 128, 1, 18, 24, 164, 144, 7, 44, 0, 208, 42, 38, 0, 33, 0, - 34, 36, 28, 32, 240, 2, 249, 63, 171, 8, 34, 6, 147, 0, 35, 10, 37, 0, 146, 1, 147, 5, 152, 7, 28, 57, 28, 34, 35, 36, - 149, 2, 149, 3, 149, 4, 247, 255, 251, 233, 40, 0, 219, 7, 120, 35, 34, 31, 64, 19, 43, 5, 208, 6, 43, 7, 209, 8, 224, - 3, 54, 1, 46, 2, 208, 9, 231, 220, 75, 6, 34, 1, 96, 26, 224, 4, 75, 4, 96, 29, 224, 1, 32, 4, 66, 64, 176, 11, 188, - 240, 188, 2, 71, 8, 19, 112, 107, 12, 181, 112, 176, 136, 28, 22, 28, 29, 34, 37, 171, 7, 112, 26, 1, 74, 112, 90, 28, - 2, 50, 160, 104, 20, 34, 128, 1, 18, 24, 164, 44, 0, 208, 42, 147, 0, 35, 2, 147, 1, 35, 0, 147, 2, 147, 3, 147, 4, - 35, 10, 147, 5, 28, 34, 35, 8, 247, 255, 251, 174, 40, 0, 219, 29, 168, 6, 28, 33, 34, 4, 240, 2, 248, 171, 45, 0, 208, - 1, 155, 6, 96, 43, 29, 33, 168, 6, 34, 4, 240, 2, 248, 162, 46, 0, 208, 1, 155, 6, 96, 51, 35, 128, 154, 6, 1, 27, 32, - 0, 66, 154, 209, 5, 75, 4, 34, 1, 96, 26, 224, 1, 32, 4, 66, 64, 176, 8, 188, 112, 188, 2, 71, 8, 19, 112, 107, 12, - 181, 240, 176, 131, 123, 131, 28, 15, 28, 5, 66, 187, 217, 72, 78, 40, 73, 40, 72, 41, 96, 49, 33, 0, 247, 254, 249, - 212, 75, 39, 28, 40, 96, 51, 28, 57, 247, 255, 252, 204, 30, 4, 219, 53, 74, 33, 28, 57, 96, 50, 28, 40, 247, 255, 255, - 86, 28, 4, 28, 33, 72, 32, 247, 254, 249, 193, 44, 0, 219, 40, 28, 43, 51, 160, 104, 26, 35, 128, 1, 27, 92, 211, 33, - 31, 64, 25, 72, 27, 247, 254, 249, 180, 28, 59, 29, 62, 51, 20, 0, 182, 0, 155, 25, 170, 147, 1, 28, 57, 24, 235, 28, - 40, 247, 255, 255, 130, 153, 1, 28, 4, 89, 75, 89, 114, 72, 18, 28, 33, 247, 254, 249, 160, 89, 114, 75, 17, 66, 154, - 217, 3, 154, 1, 89, 83, 43, 9, 216, 1, 36, 33, 66, 100, 74, 6, 75, 5, 96, 26, 224, 1, 36, 3, 66, 100, 176, 3, 28, 32, - 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 56, 0, 15, 66, 64, 19, 112, 103, 231, 1, 49, 45, 0, 19, 112, 104, 2, - 19, 112, 104, 22, 19, 112, 104, 43, 0, 0, 1, 255, 181, 240, 176, 141, 175, 9, 37, 40, 112, 61, 1, 77, 112, 125, 14, - 21, 112, 189, 70, 110, 12, 21, 36, 0, 112, 253, 113, 122, 10, 21, 54, 47, 10, 26, 112, 52, 113, 61, 113, 188, 113, 250, - 114, 59, 114, 124, 123, 130, 66, 138, 217, 28, 29, 10, 0, 146, 88, 18, 146, 7, 42, 0, 208, 22, 77, 15, 34, 1, 96, 42, - 154, 7, 151, 0, 67, 83, 34, 10, 146, 1, 34, 6, 146, 5, 154, 18, 148, 2, 150, 3, 148, 4, 247, 255, 250, 240, 96, 44, - 40, 0, 221, 7, 120, 51, 43, 0, 209, 3, 224, 3, 32, 3, 66, 64, 224, 0, 72, 3, 176, 13, 188, 240, 188, 2, 71, 8, 70, 192, - 19, 112, 107, 28, 255, 255, 216, 234, 181, 240, 176, 141, 147, 7, 1, 75, 175, 9, 37, 42, 70, 156, 112, 61, 35, 8, 70, - 101, 67, 43, 112, 123, 14, 21, 155, 7, 112, 189, 70, 110, 12, 21, 36, 0, 112, 253, 113, 122, 10, 21, 54, 47, 10, 26, - 112, 52, 113, 61, 113, 188, 113, 250, 114, 59, 114, 124, 123, 130, 66, 138, 217, 32, 29, 10, 0, 146, 88, 18, 70, 148, - 69, 164, 208, 26, 77, 17, 35, 1, 96, 43, 155, 7, 151, 0, 70, 98, 67, 90, 70, 148, 34, 1, 146, 2, 34, 6, 146, 5, 39, - 10, 154, 18, 70, 99, 151, 1, 150, 3, 148, 4, 247, 255, 250, 162, 96, 44, 40, 0, 221, 7, 120, 51, 43, 0, 209, 3, 224, - 3, 32, 3, 66, 64, 224, 0, 72, 3, 176, 13, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 28, 255, 255, 216, 234, 181, - 240, 176, 135, 28, 28, 147, 2, 28, 11, 51, 4, 0, 155, 145, 3, 88, 25, 28, 6, 28, 11, 67, 99, 32, 128, 2, 64, 28, 23, - 66, 131, 217, 2, 240, 2, 248, 151, 144, 2, 155, 3, 32, 1, 51, 4, 0, 155, 66, 64, 147, 5, 224, 28, 154, 2, 28, 37, 66, - 148, 217, 0, 28, 21, 4, 43, 12, 27, 147, 4, 155, 12, 28, 48, 147, 0, 153, 3, 28, 58, 155, 4, 247, 255, 255, 67, 40, - 0, 219, 12, 154, 4, 25, 127, 26, 164, 154, 5, 4, 36, 89, 147, 12, 36, 67, 93, 155, 12, 25, 91, 147, 12, 44, 0, 209, - 224, 176, 7, 188, 240, 188, 2, 71, 8, 181, 240, 176, 135, 28, 28, 147, 2, 28, 11, 51, 4, 0, 155, 145, 3, 88, 25, 28, - 6, 28, 11, 67, 99, 32, 128, 2, 64, 28, 23, 66, 131, 217, 2, 240, 2, 248, 89, 144, 2, 155, 3, 32, 1, 51, 4, 0, 155, 66, - 64, 147, 5, 224, 28, 154, 2, 28, 37, 66, 148, 217, 0, 28, 21, 4, 43, 12, 27, 147, 4, 155, 12, 28, 48, 147, 0, 153, 3, - 28, 58, 155, 4, 247, 255, 255, 73, 40, 0, 219, 12, 154, 4, 25, 127, 26, 164, 154, 5, 4, 36, 89, 147, 12, 36, 67, 93, - 155, 12, 25, 91, 147, 12, 44, 0, 209, 224, 176, 7, 188, 240, 188, 2, 71, 8, 181, 240, 176, 139, 74, 135, 35, 0, 128, - 19, 74, 135, 36, 0, 128, 19, 75, 134, 74, 135, 112, 28, 75, 135, 79, 135, 112, 28, 35, 120, 144, 8, 66, 91, 96, 19, - 28, 56, 153, 8, 247, 255, 251, 218, 40, 0, 218, 0, 224, 241, 34, 1, 75, 129, 115, 186, 104, 25, 41, 0, 208, 74, 121, - 91, 43, 0, 209, 3, 75, 126, 120, 27, 66, 26, 208, 29, 76, 122, 35, 0, 115, 163, 77, 124, 75, 124, 38, 1, 96, 43, 28, - 35, 51, 144, 104, 24, 136, 227, 33, 161, 147, 0, 28, 35, 51, 14, 147, 2, 34, 254, 35, 0, 150, 1, 247, 254, 250, 171, - 75, 117, 96, 43, 40, 0, 218, 1, 115, 166, 224, 188, 123, 163, 51, 1, 115, 163, 75, 108, 72, 113, 121, 29, 28, 41, 247, - 254, 248, 34, 78, 104, 28, 41, 28, 48, 247, 255, 254, 59, 28, 4, 28, 33, 72, 108, 247, 254, 248, 24, 28, 163, 43, 1, - 216, 9, 28, 48, 247, 255, 253, 154, 74, 94, 35, 121, 66, 91, 96, 19, 34, 0, 75, 91, 224, 61, 44, 0, 218, 0, 224, 153, - 75, 88, 34, 1, 112, 26, 75, 89, 112, 29, 224, 139, 38, 1, 113, 92, 37, 0, 28, 60, 150, 6, 55, 144, 28, 40, 30, 67, 65, - 152, 144, 9, 40, 0, 209, 5, 75, 84, 120, 27, 7, 217, 213, 1, 46, 0, 209, 41, 72, 87, 28, 41, 247, 253, 255, 236, 6, - 43, 14, 27, 28, 25, 72, 76, 147, 5, 247, 255, 254, 3, 144, 7, 153, 7, 72, 80, 247, 253, 255, 224, 155, 7, 51, 2, 43, - 1, 216, 16, 154, 9, 42, 0, 208, 13, 74, 73, 75, 70, 72, 67, 96, 26, 247, 255, 253, 91, 74, 63, 35, 121, 66, 91, 96, - 19, 75, 60, 34, 0, 112, 26, 224, 105, 155, 7, 43, 0, 218, 59, 46, 0, 208, 52, 78, 61, 75, 62, 73, 66, 96, 51, 136, 227, - 32, 0, 96, 8, 115, 160, 104, 56, 147, 0, 28, 35, 34, 1, 51, 14, 146, 1, 147, 2, 33, 161, 35, 0, 34, 254, 247, 254, 250, - 44, 75, 53, 144, 5, 96, 51, 40, 0, 218, 5, 73, 55, 35, 1, 32, 0, 115, 163, 96, 8, 224, 5, 123, 163, 34, 1, 51, 1, 115, - 163, 75, 42, 113, 90, 75, 40, 72, 49, 123, 155, 153, 5, 28, 26, 147, 6, 247, 253, 255, 153, 75, 38, 38, 0, 120, 27, - 7, 216, 213, 3, 153, 5, 15, 206, 224, 0, 53, 1, 154, 6, 66, 149, 219, 144, 224, 29, 33, 23, 70, 104, 74, 29, 92, 8, - 35, 1, 96, 19, 113, 16, 154, 8, 152, 8, 137, 17, 74, 19, 128, 17, 137, 65, 74, 19, 128, 17, 74, 19, 70, 105, 112, 19, - 34, 23, 75, 19, 92, 81, 112, 25, 74, 23, 75, 21, 32, 0, 96, 26, 75, 14, 34, 0, 96, 26, 224, 14, 74, 12, 35, 122, 66, - 91, 96, 19, 72, 12, 247, 255, 252, 239, 75, 8, 34, 0, 112, 26, 72, 20, 247, 253, 255, 97, 32, 3, 66, 64, 176, 11, 188, - 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 24, 19, 112, 107, 32, 19, 112, 107, 60, 19, 112, 107, 0, 19, 112, 96, 64, - 19, 114, 197, 128, 19, 112, 107, 36, 19, 112, 1, 14, 19, 112, 96, 56, 0, 152, 150, 128, 0, 15, 66, 64, 19, 112, 104, - 98, 19, 112, 104, 128, 19, 112, 104, 103, 19, 112, 107, 84, 19, 112, 104, 157, 19, 112, 104, 198, 181, 8, 74, 10, 104, - 19, 43, 0, 208, 13, 75, 9, 33, 16, 112, 25, 35, 0, 73, 8, 96, 19, 74, 8, 112, 11, 96, 19, 72, 7, 33, 0, 34, 20, 240, - 1, 254, 17, 188, 8, 188, 1, 71, 0, 19, 112, 107, 56, 19, 112, 96, 64, 19, 112, 107, 60, 19, 112, 107, 84, 19, 112, 107, - 36, 181, 240, 176, 135, 75, 120, 36, 0, 104, 29, 45, 0, 208, 0, 224, 229, 75, 118, 32, 0, 104, 27, 104, 155, 96, 157, - 247, 253, 248, 99, 74, 116, 35, 100, 66, 91, 96, 19, 74, 115, 35, 1, 96, 19, 74, 114, 72, 115, 112, 21, 74, 115, 112, - 19, 247, 253, 254, 251, 75, 114, 120, 27, 43, 1, 208, 4, 43, 2, 208, 6, 34, 0, 146, 4, 224, 6, 35, 1, 147, 4, 36, 1, - 224, 2, 34, 1, 146, 4, 36, 0, 0, 167, 224, 176, 75, 99, 74, 105, 104, 29, 0, 163, 25, 27, 0, 219, 24, 235, 103, 92, - 111, 27, 96, 20, 43, 0, 209, 54, 104, 171, 34, 1, 51, 68, 25, 219, 104, 27, 66, 26, 209, 2, 28, 32, 247, 253, 252, 223, - 78, 88, 34, 1, 104, 51, 104, 155, 51, 68, 25, 219, 104, 27, 66, 26, 208, 35, 28, 32, 247, 254, 251, 253, 35, 140, 0, - 219, 24, 192, 40, 1, 216, 4, 35, 100, 74, 80, 66, 91, 96, 19, 224, 130, 28, 32, 247, 254, 250, 140, 144, 3, 32, 20, - 247, 253, 249, 176, 104, 51, 104, 155, 51, 68, 25, 219, 104, 26, 155, 3, 43, 0, 219, 4, 75, 77, 64, 26, 75, 77, 66, - 154, 208, 2, 28, 32, 247, 254, 251, 220, 0, 160, 25, 0, 0, 192, 24, 43, 111, 27, 43, 0, 208, 100, 75, 64, 34, 1, 48, - 88, 96, 26, 24, 40, 247, 255, 254, 44, 144, 3, 40, 0, 209, 87, 75, 56, 34, 1, 96, 26, 79, 65, 74, 57, 96, 16, 28, 56, - 247, 252, 255, 230, 77, 52, 34, 4, 104, 43, 72, 62, 104, 155, 96, 154, 247, 253, 254, 132, 32, 100, 247, 253, 249, 123, - 32, 128, 1, 0, 240, 0, 253, 105, 78, 57, 75, 57, 34, 1, 96, 51, 75, 57, 144, 4, 112, 26, 104, 43, 154, 3, 104, 155, - 32, 0, 96, 154, 247, 252, 255, 201, 72, 53, 247, 253, 254, 108, 75, 52, 34, 0, 120, 25, 155, 4, 72, 51, 147, 0, 35, - 1, 247, 255, 253, 123, 144, 5, 28, 56, 247, 252, 255, 185, 104, 43, 34, 4, 104, 155, 96, 154, 70, 107, 34, 15, 92, 210, - 75, 40, 152, 4, 112, 26, 75, 43, 96, 51, 240, 0, 253, 91, 155, 5, 43, 0, 218, 7, 72, 40, 247, 253, 254, 75, 28, 32, - 247, 253, 252, 132, 76, 38, 224, 27, 72, 38, 247, 253, 254, 67, 75, 38, 104, 27, 43, 0, 208, 20, 52, 2, 224, 18, 28, - 32, 247, 253, 252, 118, 52, 1, 55, 4, 154, 4, 66, 148, 220, 0, 231, 74, 72, 18, 247, 252, 255, 139, 74, 7, 104, 19, - 34, 4, 104, 155, 96, 154, 75, 5, 104, 28, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 56, 19, 112, - 96, 60, 19, 112, 107, 0, 19, 112, 107, 84, 19, 112, 107, 60, 19, 112, 104, 227, 19, 112, 1, 15, 19, 112, 1, 12, 19, - 112, 107, 80, 0, 0, 57, 5, 0, 0, 16, 5, 19, 112, 17, 29, 19, 112, 105, 118, 19, 112, 96, 56, 0, 152, 150, 128, 19, 112, - 106, 248, 19, 112, 105, 167, 19, 112, 96, 64, 19, 114, 197, 128, 0, 15, 66, 64, 19, 112, 105, 140, 255, 255, 251, 162, - 19, 112, 105, 164, 19, 112, 107, 12, 181, 0, 30, 3, 208, 1, 34, 0, 96, 26, 74, 12, 32, 0, 120, 18, 42, 1, 209, 16, 74, - 10, 120, 18, 42, 16, 208, 12, 43, 0, 208, 4, 50, 4, 73, 8, 0, 146, 88, 82, 96, 26, 75, 5, 120, 26, 75, 5, 50, 20, 0, - 146, 88, 208, 188, 2, 71, 8, 70, 192, 19, 112, 107, 60, 19, 112, 96, 64, 19, 114, 197, 128, 181, 240, 176, 139, 75, - 78, 104, 27, 43, 0, 209, 0, 224, 139, 75, 77, 34, 16, 112, 26, 75, 76, 120, 26, 75, 76, 42, 0, 208, 1, 74, 76, 224, - 0, 74, 76, 78, 76, 96, 26, 172, 4, 35, 0, 28, 53, 130, 99, 130, 163, 53, 144, 28, 33, 104, 40, 247, 254, 251, 0, 75, - 71, 121, 34, 121, 153, 66, 145, 209, 23, 121, 217, 121, 98, 66, 145, 209, 19, 137, 25, 137, 34, 66, 145, 209, 15, 137, - 89, 137, 98, 66, 145, 209, 11, 123, 25, 123, 162, 66, 145, 209, 7, 123, 89, 123, 226, 66, 145, 209, 3, 123, 154, 124, - 35, 66, 154, 208, 6, 168, 4, 247, 253, 252, 101, 72, 56, 247, 253, 253, 143, 224, 80, 28, 32, 247, 253, 252, 94, 74, - 54, 75, 47, 104, 40, 96, 26, 120, 49, 247, 254, 248, 123, 40, 0, 219, 70, 104, 178, 42, 0, 208, 7, 6, 18, 104, 40, 121, - 241, 14, 18, 247, 254, 248, 98, 40, 0, 219, 61, 76, 41, 35, 0, 115, 163, 77, 36, 75, 42, 39, 1, 96, 43, 28, 35, 51, - 144, 104, 24, 136, 227, 33, 161, 147, 0, 28, 35, 51, 14, 147, 2, 34, 254, 35, 0, 151, 1, 247, 253, 255, 220, 75, 28, - 96, 43, 40, 0, 218, 6, 115, 167, 28, 32, 33, 0, 247, 254, 254, 77, 72, 30, 224, 34, 123, 163, 78, 25, 51, 1, 115, 163, - 75, 28, 28, 32, 96, 43, 121, 49, 247, 255, 248, 75, 75, 18, 96, 43, 40, 0, 219, 17, 121, 49, 28, 32, 247, 255, 250, - 213, 40, 0, 219, 13, 121, 50, 75, 9, 112, 26, 75, 19, 112, 31, 224, 8, 72, 19, 224, 6, 72, 19, 224, 4, 72, 19, 224, - 2, 72, 19, 224, 0, 72, 19, 176, 11, 188, 240, 188, 2, 71, 8, 19, 112, 107, 56, 19, 112, 96, 64, 19, 112, 1, 15, 19, - 112, 96, 56, 0, 15, 66, 64, 0, 3, 13, 64, 19, 114, 197, 128, 19, 112, 107, 36, 19, 112, 101, 128, 0, 152, 150, 128, - 255, 255, 252, 20, 1, 49, 45, 0, 19, 112, 107, 60, 255, 255, 252, 15, 255, 255, 252, 23, 255, 255, 252, 22, 255, 255, - 252, 19, 255, 255, 252, 18, 181, 240, 176, 131, 75, 57, 76, 58, 120, 26, 38, 1, 30, 83, 65, 154, 75, 56, 96, 34, 104, - 27, 43, 0, 208, 99, 75, 55, 0, 146, 104, 27, 104, 155, 28, 25, 49, 68, 24, 138, 104, 18, 66, 22, 208, 89, 34, 0, 32, - 0, 96, 154, 247, 252, 254, 74, 104, 32, 247, 254, 248, 191, 30, 7, 218, 3, 104, 32, 247, 254, 248, 186, 28, 7, 32, 60, - 247, 252, 255, 222, 77, 41, 72, 42, 104, 43, 28, 57, 104, 154, 75, 37, 50, 68, 104, 27, 38, 1, 0, 155, 24, 211, 104, - 27, 28, 26, 147, 1, 247, 253, 252, 212, 76, 32, 35, 1, 96, 35, 47, 0, 219, 48, 155, 1, 74, 32, 64, 26, 75, 32, 66, 154, - 209, 42, 74, 32, 35, 0, 112, 19, 34, 0, 96, 34, 247, 255, 254, 242, 74, 29, 75, 30, 96, 26, 40, 0, 219, 12, 74, 26, - 35, 0, 112, 22, 96, 35, 72, 27, 247, 252, 254, 16, 104, 43, 34, 4, 104, 155, 38, 0, 96, 154, 224, 17, 28, 57, 72, 23, - 96, 38, 247, 253, 252, 171, 75, 17, 34, 0, 112, 26, 32, 100, 247, 252, 255, 159, 72, 17, 247, 252, 253, 252, 104, 43, - 34, 4, 104, 155, 96, 154, 32, 100, 247, 252, 255, 149, 176, 3, 28, 48, 188, 240, 188, 2, 71, 8, 19, 112, 1, 12, 19, - 112, 107, 80, 19, 112, 107, 84, 19, 112, 96, 60, 19, 112, 105, 185, 0, 0, 49, 5, 0, 0, 16, 5, 19, 112, 107, 60, 0, 15, - 66, 64, 19, 112, 96, 56, 19, 112, 17, 29, 19, 112, 105, 213, 181, 240, 176, 131, 75, 30, 34, 0, 104, 27, 146, 1, 43, - 0, 208, 50, 247, 255, 255, 104, 75, 27, 104, 27, 43, 0, 209, 44, 75, 26, 120, 27, 43, 0, 208, 40, 77, 25, 79, 26, 76, - 26, 78, 27, 96, 47, 121, 49, 28, 32, 247, 255, 249, 243, 40, 0, 219, 29, 96, 47, 121, 49, 28, 32, 28, 11, 29, 10, 51, - 20, 0, 146, 0, 155, 25, 18, 25, 27, 247, 255, 250, 47, 40, 0, 219, 15, 75, 17, 104, 26, 42, 0, 208, 7, 121, 49, 35, - 128, 49, 4, 0, 137, 89, 9, 1, 27, 66, 153, 209, 3, 28, 19, 30, 90, 65, 147, 147, 1, 152, 1, 176, 3, 188, 240, 188, 2, - 71, 8, 19, 112, 107, 56, 19, 112, 107, 84, 19, 112, 107, 60, 19, 112, 96, 56, 0, 15, 66, 64, 19, 114, 197, 128, 19, - 112, 107, 36, 19, 112, 107, 12, 181, 240, 176, 135, 75, 66, 144, 3, 104, 27, 146, 4, 43, 0, 209, 7, 75, 64, 104, 27, - 43, 0, 208, 3, 0, 66, 75, 63, 8, 82, 96, 26, 75, 62, 104, 27, 43, 0, 208, 6, 75, 61, 104, 26, 42, 1, 221, 2, 34, 1, - 96, 26, 224, 101, 4, 9, 12, 9, 79, 56, 38, 4, 36, 0, 145, 5, 247, 255, 254, 255, 30, 67, 65, 152, 104, 59, 66, 64, 64, - 4, 43, 0, 208, 3, 74, 50, 104, 19, 43, 3, 208, 79, 44, 0, 219, 3, 75, 48, 120, 27, 43, 1, 208, 4, 75, 45, 34, 1, 36, - 1, 96, 26, 66, 100, 75, 43, 104, 27, 43, 0, 209, 61, 75, 38, 104, 26, 75, 42, 42, 0, 208, 1, 74, 41, 224, 0, 74, 41, - 96, 26, 28, 99, 208, 24, 32, 0, 247, 252, 253, 61, 77, 39, 34, 0, 104, 43, 72, 38, 104, 155, 96, 154, 154, 4, 75, 37, - 120, 25, 155, 5, 146, 0, 154, 3, 247, 255, 250, 237, 28, 4, 72, 34, 247, 252, 253, 43, 104, 43, 34, 4, 104, 155, 96, - 154, 74, 32, 75, 24, 96, 26, 44, 0, 218, 2, 75, 20, 34, 1, 96, 26, 75, 18, 104, 27, 43, 0, 208, 3, 75, 17, 104, 27, - 43, 0, 209, 15, 75, 15, 104, 27, 43, 0, 209, 5, 75, 14, 120, 27, 43, 1, 209, 1, 44, 0, 218, 7, 62, 1, 46, 0, 209, 162, - 67, 228, 15, 224, 224, 2, 32, 0, 224, 0, 32, 1, 176, 7, 188, 240, 188, 2, 71, 8, 19, 112, 106, 240, 19, 112, 107, 12, - 19, 112, 106, 192, 19, 112, 106, 196, 19, 112, 107, 84, 19, 112, 107, 60, 19, 112, 96, 56, 0, 152, 150, 128, 0, 45, - 198, 192, 19, 112, 96, 60, 19, 114, 197, 128, 19, 112, 96, 64, 19, 112, 17, 29, 0, 15, 66, 64, 181, 240, 176, 133, 75, - 39, 28, 7, 104, 27, 28, 22, 32, 0, 43, 0, 209, 67, 4, 9, 12, 9, 36, 0, 145, 3, 247, 255, 254, 111, 40, 0, 208, 2, 44, - 0, 219, 5, 224, 0, 36, 0, 74, 31, 120, 19, 43, 1, 208, 4, 75, 30, 34, 1, 36, 1, 96, 26, 66, 100, 75, 27, 104, 27, 43, - 0, 209, 234, 73, 26, 74, 27, 96, 17, 28, 98, 208, 22, 77, 26, 32, 0, 104, 42, 104, 146, 96, 147, 247, 252, 252, 182, - 75, 23, 28, 58, 120, 25, 72, 23, 155, 3, 150, 0, 247, 255, 250, 170, 28, 4, 72, 21, 247, 252, 252, 170, 104, 43, 34, - 4, 104, 155, 96, 154, 74, 18, 75, 13, 96, 26, 44, 0, 218, 2, 75, 9, 34, 1, 96, 26, 75, 7, 104, 27, 43, 0, 209, 194, - 44, 0, 219, 192, 32, 1, 176, 5, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 12, 19, 112, 107, 60, 19, 112, 107, - 84, 0, 45, 198, 192, 19, 112, 96, 56, 19, 112, 96, 60, 19, 112, 96, 64, 19, 114, 197, 128, 19, 112, 17, 29, 0, 15, 66, - 64, 181, 240, 176, 137, 74, 95, 104, 19, 43, 0, 209, 6, 75, 94, 104, 27, 105, 153, 96, 17, 106, 26, 75, 93, 96, 26, - 75, 92, 77, 90, 104, 28, 38, 0, 28, 55, 104, 43, 55, 8, 0, 191, 80, 252, 28, 32, 33, 0, 34, 96, 240, 1, 249, 245, 104, - 43, 33, 96, 88, 248, 240, 0, 249, 214, 52, 127, 33, 31, 54, 1, 67, 140, 46, 8, 209, 234, 37, 8, 38, 31, 28, 32, 33, - 0, 34, 96, 240, 1, 249, 227, 61, 1, 28, 32, 33, 96, 52, 127, 240, 0, 249, 195, 67, 180, 45, 0, 209, 241, 75, 72, 34, - 255, 96, 28, 75, 68, 39, 128, 104, 29, 35, 255, 2, 18, 4, 27, 76, 69, 38, 0, 5, 255, 146, 2, 147, 3, 33, 0, 96, 37, - 34, 96, 28, 40, 240, 1, 249, 198, 28, 40, 240, 0, 249, 152, 28, 50, 100, 104, 104, 35, 30, 81, 65, 138, 5, 210, 96, - 90, 104, 35, 34, 0, 96, 154, 104, 35, 33, 31, 97, 159, 53, 127, 67, 141, 104, 34, 28, 40, 146, 5, 240, 0, 249, 132, - 144, 6, 28, 40, 240, 0, 249, 128, 144, 1, 28, 40, 240, 0, 249, 124, 144, 7, 28, 40, 240, 0, 249, 120, 35, 255, 2, 27, - 153, 2, 147, 4, 34, 255, 155, 1, 4, 18, 64, 11, 146, 1, 153, 3, 154, 7, 2, 27, 64, 10, 10, 18, 67, 19, 14, 0, 154, 6, - 67, 3, 32, 224, 64, 16, 33, 2, 67, 8, 154, 5, 6, 0, 67, 3, 96, 19, 104, 34, 35, 128, 4, 91, 97, 19, 104, 34, 33, 96, - 97, 83, 204, 1, 54, 1, 240, 0, 249, 100, 46, 6, 209, 175, 76, 22, 77, 26, 104, 32, 105, 110, 240, 0, 249, 75, 144, 2, - 104, 32, 240, 0, 249, 71, 28, 7, 104, 32, 240, 0, 249, 67, 144, 3, 104, 32, 240, 0, 249, 63, 155, 4, 153, 1, 64, 31, - 155, 3, 2, 63, 64, 11, 10, 27, 67, 31, 154, 2, 14, 3, 28, 56, 67, 24, 35, 224, 64, 19, 33, 2, 67, 11, 6, 27, 67, 24, - 96, 48, 105, 104, 33, 96, 240, 0, 249, 57, 176, 9, 188, 240, 188, 1, 71, 0, 70, 192, 19, 112, 107, 76, 19, 112, 96, - 60, 19, 112, 106, 236, 19, 112, 107, 8, 19, 114, 195, 160, 181, 248, 75, 16, 39, 128, 104, 28, 38, 0, 4, 127, 28, 32, - 247, 252, 253, 241, 46, 3, 208, 15, 28, 37, 35, 31, 53, 127, 67, 157, 107, 104, 240, 1, 248, 182, 96, 103, 96, 32, 33, - 96, 28, 32, 240, 0, 249, 18, 54, 1, 28, 44, 231, 234, 28, 32, 33, 96, 240, 0, 249, 11, 188, 248, 188, 1, 71, 0, 19, - 112, 107, 8, 181, 240, 176, 131, 247, 255, 255, 12, 247, 255, 255, 214, 76, 65, 75, 66, 104, 34, 104, 24, 77, 65, 97, - 144, 104, 89, 78, 65, 97, 209, 104, 154, 79, 64, 96, 42, 104, 218, 105, 27, 96, 50, 96, 59, 33, 96, 240, 0, 249, 1, - 104, 35, 33, 0, 105, 154, 100, 211, 105, 154, 100, 145, 105, 155, 28, 24, 147, 1, 240, 0, 248, 209, 155, 1, 104, 34, - 100, 88, 104, 59, 105, 145, 108, 91, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, - 2, 32, 224, 64, 3, 39, 2, 67, 59, 6, 24, 28, 19, 67, 3, 96, 11, 104, 35, 34, 128, 105, 153, 4, 18, 96, 74, 105, 154, - 33, 0, 96, 145, 105, 153, 34, 128, 5, 210, 97, 138, 105, 153, 34, 128, 4, 82, 97, 10, 105, 153, 97, 74, 105, 152, 33, - 96, 240, 0, 248, 179, 104, 35, 33, 96, 105, 216, 240, 0, 248, 194, 104, 35, 33, 0, 105, 218, 100, 211, 105, 218, 100, - 145, 105, 223, 28, 56, 240, 0, 248, 147, 33, 96, 100, 120, 104, 40, 240, 0, 248, 179, 104, 47, 104, 35, 28, 56, 100, - 251, 35, 0, 100, 187, 240, 0, 248, 134, 33, 96, 100, 120, 104, 40, 240, 0, 248, 146, 104, 48, 33, 96, 240, 0, 248, 162, - 104, 53, 104, 35, 33, 0, 100, 235, 100, 169, 28, 40, 240, 0, 248, 117, 33, 96, 100, 104, 104, 48, 240, 0, 248, 129, - 176, 3, 188, 240, 188, 1, 71, 0, 70, 192, 19, 112, 96, 60, 19, 114, 195, 160, 19, 112, 106, 244, 19, 112, 107, 72, 19, - 112, 107, 68, 181, 248, 76, 35, 75, 35, 96, 35, 240, 0, 248, 74, 40, 0, 219, 58, 240, 0, 249, 117, 74, 32, 104, 131, - 96, 32, 96, 26, 104, 32, 35, 1, 104, 130, 104, 17, 66, 11, 209, 252, 33, 252, 240, 0, 248, 91, 38, 128, 39, 128, 76, - 23, 37, 0, 4, 118, 1, 127, 104, 35, 33, 4, 108, 219, 81, 94, 104, 35, 108, 219, 89, 88, 53, 4, 240, 0, 248, 75, 66, - 189, 209, 243, 247, 255, 255, 65, 104, 35, 34, 2, 51, 84, 112, 26, 247, 252, 255, 185, 104, 35, 32, 0, 104, 154, 105, - 155, 108, 91, 97, 147, 104, 35, 34, 4, 104, 155, 96, 154, 104, 35, 74, 8, 104, 155, 96, 26, 104, 35, 104, 155, 104, - 27, 224, 1, 32, 1, 66, 64, 188, 248, 188, 2, 71, 8, 19, 112, 96, 60, 19, 114, 198, 36, 0, 1, 0, 32, 0, 1, 0, 33, 181, - 8, 33, 224, 72, 4, 2, 9, 240, 1, 249, 66, 75, 3, 96, 24, 23, 192, 188, 8, 188, 2, 71, 8, 19, 112, 163, 128, 19, 112, - 96, 68, 71, 112, 71, 112, 181, 16, 28, 4, 240, 1, 249, 62, 28, 32, 188, 16, 188, 2, 71, 8, 181, 16, 28, 4, 240, 1, 249, - 54, 28, 32, 188, 16, 188, 2, 71, 8, 181, 16, 28, 4, 240, 1, 249, 46, 28, 32, 188, 16, 188, 2, 71, 8, 181, 8, 240, 1, - 249, 71, 188, 8, 188, 1, 71, 0, 181, 8, 240, 1, 249, 65, 188, 8, 188, 1, 71, 0, 181, 8, 240, 1, 249, 59, 188, 8, 188, - 1, 71, 0, 181, 8, 75, 12, 28, 1, 34, 32, 104, 24, 240, 1, 249, 45, 40, 0, 209, 13, 72, 9, 240, 1, 249, 4, 240, 0, 249, - 63, 32, 200, 247, 252, 251, 253, 240, 0, 249, 68, 32, 200, 247, 252, 251, 248, 231, 244, 188, 8, 188, 2, 71, 8, 19, - 112, 96, 68, 19, 112, 105, 237, 181, 8, 75, 4, 28, 1, 104, 24, 240, 1, 248, 216, 188, 8, 188, 1, 71, 0, 70, 192, 19, - 112, 96, 68, 181, 248, 76, 13, 28, 15, 104, 33, 28, 30, 28, 24, 28, 21, 67, 81, 240, 1, 248, 228, 28, 56, 28, 41, 28, - 50, 247, 255, 252, 173, 35, 1, 40, 0, 208, 5, 104, 33, 28, 48, 67, 105, 240, 1, 248, 247, 35, 0, 28, 24, 188, 248, 188, - 2, 71, 8, 19, 114, 199, 32, 181, 16, 76, 11, 104, 32, 40, 0, 208, 3, 240, 0, 252, 39, 35, 0, 96, 35, 76, 8, 104, 35, - 43, 0, 209, 3, 72, 7, 247, 251, 252, 132, 96, 32, 74, 6, 35, 1, 66, 91, 96, 19, 188, 16, 188, 1, 71, 0, 19, 112, 107, - 96, 19, 112, 107, 88, 0, 0, 128, 32, 19, 112, 96, 24, 181, 56, 75, 14, 104, 24, 40, 0, 208, 1, 247, 251, 252, 139, 76, - 12, 75, 10, 104, 32, 37, 0, 96, 29, 40, 0, 208, 2, 240, 0, 251, 254, 96, 37, 75, 8, 104, 24, 40, 0, 208, 1, 240, 0, - 251, 91, 75, 5, 34, 0, 96, 26, 188, 56, 188, 1, 71, 0, 70, 192, 19, 112, 107, 88, 19, 112, 107, 96, 19, 112, 107, 92, - 181, 240, 176, 135, 75, 37, 28, 7, 104, 24, 145, 5, 40, 0, 208, 1, 247, 251, 252, 100, 75, 33, 77, 34, 34, 0, 96, 26, - 104, 43, 43, 0, 209, 23, 247, 255, 249, 93, 78, 31, 36, 0, 28, 48, 247, 255, 250, 124, 75, 29, 96, 24, 40, 0, 208, 43, - 154, 5, 104, 51, 33, 0, 144, 0, 146, 1, 72, 26, 34, 0, 148, 2, 240, 0, 249, 238, 96, 40, 40, 0, 208, 30, 77, 23, 104, - 44, 44, 0, 208, 11, 72, 22, 28, 57, 34, 6, 240, 0, 254, 210, 40, 0, 208, 19, 28, 32, 240, 0, 251, 179, 35, 0, 96, 43, - 75, 11, 28, 57, 104, 24, 240, 0, 251, 54, 75, 12, 28, 4, 96, 24, 40, 0, 208, 4, 72, 11, 28, 57, 34, 6, 240, 0, 254, - 234, 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 88, 19, 112, 107, 92, 19, 114, 199, 32, 19, 114, - 199, 36, 19, 112, 72, 161, 19, 112, 107, 96, 19, 112, 96, 72, 181, 8, 28, 3, 28, 10, 32, 0, 28, 25, 35, 0, 240, 1, 248, - 56, 188, 8, 188, 1, 71, 0, 181, 8, 32, 1, 33, 0, 34, 0, 35, 0, 240, 1, 248, 46, 188, 8, 188, 2, 71, 8, 181, 8, 32, 17, - 33, 0, 34, 0, 35, 0, 240, 1, 248, 36, 188, 8, 188, 2, 71, 8, 181, 8, 32, 18, 33, 0, 34, 0, 35, 0, 240, 1, 248, 26, 188, - 8, 188, 2, 71, 8, 181, 56, 28, 5, 28, 12, 30, 19, 221, 4, 32, 2, 28, 41, 28, 34, 240, 1, 248, 13, 188, 56, 188, 1, 71, - 0, 181, 56, 28, 5, 28, 12, 30, 19, 221, 4, 32, 9, 28, 41, 28, 34, 240, 1, 248, 0, 188, 56, 188, 1, 71, 0, 181, 8, 28, - 3, 28, 10, 32, 5, 28, 25, 35, 0, 240, 0, 255, 245, 188, 8, 188, 1, 71, 0, 181, 8, 28, 3, 28, 10, 32, 6, 28, 25, 35, - 0, 240, 0, 255, 234, 188, 8, 188, 1, 71, 0, 181, 56, 28, 5, 28, 12, 28, 19, 28, 41, 28, 34, 32, 16, 240, 0, 255, 222, - 188, 56, 188, 2, 71, 8, 181, 8, 32, 128, 33, 0, 34, 0, 35, 0, 240, 0, 255, 212, 188, 8, 188, 1, 71, 0, 181, 8, 32, 129, - 33, 0, 34, 0, 35, 0, 240, 0, 255, 202, 188, 8, 188, 1, 71, 0, 181, 0, 35, 0, 224, 3, 51, 1, 6, 27, 14, 27, 8, 64, 40, - 0, 209, 249, 30, 88, 6, 0, 14, 0, 188, 2, 71, 8, 0, 0, 181, 240, 176, 133, 144, 1, 32, 84, 145, 3, 146, 2, 28, 30, 159, - 11, 247, 251, 251, 98, 28, 4, 30, 48, 209, 1, 32, 128, 0, 128, 247, 251, 251, 91, 28, 5, 32, 128, 2, 0, 97, 32, 247, - 255, 255, 218, 75, 125, 117, 32, 97, 227, 154, 10, 75, 124, 96, 37, 96, 30, 11, 211, 67, 115, 97, 163, 155, 12, 98, - 231, 43, 0, 208, 50, 33, 0, 28, 50, 28, 40, 240, 0, 254, 102, 35, 87, 112, 43, 35, 66, 112, 107, 35, 70, 112, 171, 35, - 83, 112, 235, 28, 48, 247, 255, 255, 188, 114, 40, 159, 10, 73, 111, 14, 59, 113, 43, 12, 59, 113, 107, 10, 59, 113, - 171, 113, 239, 105, 162, 35, 6, 66, 138, 217, 16, 73, 106, 35, 7, 66, 138, 217, 12, 73, 105, 35, 8, 66, 138, 217, 8, - 73, 104, 35, 9, 66, 138, 217, 4, 75, 103, 66, 147, 65, 155, 66, 91, 51, 10, 125, 34, 24, 155, 114, 107, 224, 6, 28, - 57, 152, 2, 34, 1, 28, 43, 159, 1, 240, 0, 248, 207, 120, 43, 120, 106, 6, 27, 4, 18, 67, 26, 120, 171, 2, 27, 67, 26, - 120, 235, 67, 26, 75, 91, 66, 154, 208, 4, 72, 90, 240, 0, 255, 49, 72, 90, 224, 40, 75, 90, 104, 27, 66, 95, 65, 95, - 46, 0, 208, 12, 47, 0, 208, 10, 28, 48, 247, 255, 255, 117, 122, 43, 66, 131, 208, 4, 72, 81, 240, 0, 255, 30, 72, 82, - 224, 21, 154, 10, 42, 0, 208, 31, 47, 0, 208, 29, 121, 42, 121, 107, 6, 18, 4, 27, 67, 19, 121, 170, 159, 10, 2, 18, - 67, 19, 121, 234, 67, 19, 66, 187, 208, 16, 72, 69, 240, 0, 255, 7, 72, 72, 240, 0, 255, 4, 72, 71, 240, 0, 255, 1, - 28, 32, 247, 251, 250, 232, 28, 40, 247, 251, 250, 229, 36, 0, 224, 100, 122, 46, 39, 1, 28, 58, 64, 178, 96, 98, 122, - 43, 28, 22, 147, 0, 114, 35, 121, 42, 121, 107, 6, 18, 4, 27, 67, 19, 121, 170, 121, 232, 2, 18, 67, 19, 67, 24, 105, - 33, 96, 224, 240, 0, 254, 168, 67, 112, 97, 160, 122, 107, 125, 34, 64, 159, 98, 99, 26, 155, 105, 226, 64, 216, 64, - 218, 4, 18, 12, 18, 4, 51, 12, 27, 133, 98, 50, 128, 4, 1, 133, 32, 0, 82, 30, 88, 24, 130, 66, 91, 64, 26, 155, 3, - 28, 37, 53, 72, 99, 99, 12, 201, 155, 0, 98, 39, 128, 42, 26, 127, 154, 1, 64, 223, 99, 34, 100, 39, 154, 2, 159, 12, - 99, 162, 47, 0, 209, 1, 100, 103, 224, 11, 30, 112, 24, 65, 66, 112, 64, 8, 247, 251, 250, 125, 141, 34, 100, 96, 8, - 210, 33, 255, 240, 0, 253, 155, 28, 35, 51, 72, 136, 25, 108, 32, 122, 35, 56, 1, 65, 25, 240, 0, 254, 104, 4, 2, 104, - 96, 12, 18, 28, 3, 59, 12, 135, 162, 66, 154, 217, 0, 135, 163, 247, 251, 250, 99, 35, 0, 100, 224, 101, 35, 176, 5, - 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 0, 4, 96, 144, 19, 112, 107, 108, 0, 63, 255, 255, 0, 127, 255, 255, 0, 255, - 255, 255, 1, 255, 255, 255, 3, 255, 255, 255, 87, 66, 70, 83, 19, 112, 106, 12, 19, 112, 106, 24, 19, 112, 107, 104, - 19, 112, 106, 34, 19, 112, 106, 63, 19, 112, 105, 116, 71, 56, 70, 192, 181, 240, 176, 165, 144, 9, 28, 24, 146, 10, - 147, 11, 145, 15, 247, 251, 250, 51, 35, 1, 74, 140, 77, 141, 66, 91, 96, 19, 104, 43, 28, 4, 43, 0, 209, 3, 152, 11, - 247, 251, 250, 39, 96, 40, 75, 136, 152, 11, 33, 0, 96, 24, 34, 1, 152, 10, 28, 35, 157, 9, 240, 0, 249, 24, 40, 0, - 208, 0, 224, 246, 35, 255, 0, 91, 92, 227, 43, 85, 209, 28, 51, 171, 51, 255, 92, 227, 43, 170, 209, 23, 28, 224, 73, - 125, 34, 4, 240, 0, 253, 138, 40, 0, 208, 16, 77, 123, 28, 32, 48, 54, 28, 41, 34, 3, 240, 0, 253, 129, 40, 0, 208, - 7, 28, 32, 48, 82, 28, 41, 34, 3, 240, 0, 253, 121, 40, 0, 209, 5, 168, 20, 33, 0, 34, 64, 240, 0, 253, 22, 224, 6, - 28, 33, 49, 191, 49, 255, 168, 20, 34, 64, 240, 0, 252, 204, 175, 32, 151, 5, 32, 228, 39, 1, 66, 127, 0, 64, 38, 0, - 173, 20, 144, 14, 151, 8, 122, 235, 122, 47, 122, 105, 122, 170, 147, 7, 120, 32, 120, 99, 6, 0, 4, 27, 67, 24, 120, - 163, 2, 27, 67, 24, 120, 227, 67, 24, 75, 97, 66, 152, 208, 3, 121, 40, 40, 0, 209, 0, 224, 162, 2, 9, 4, 18, 67, 17, - 67, 57, 159, 7, 6, 59, 67, 25, 145, 7, 121, 43, 43, 15, 209, 101, 33, 227, 32, 0, 0, 73, 159, 8, 144, 12, 35, 0, 145, - 13, 149, 4, 154, 7, 152, 10, 24, 210, 146, 8, 28, 17, 28, 35, 34, 1, 157, 9, 240, 0, 248, 169, 40, 0, 208, 0, 224, 135, - 72, 78, 153, 14, 92, 34, 92, 99, 2, 18, 4, 27, 67, 26, 77, 76, 155, 13, 152, 8, 92, 225, 93, 99, 67, 10, 6, 27, 67, - 19, 24, 192, 35, 235, 144, 8, 0, 91, 92, 227, 152, 10, 147, 16, 75, 69, 153, 8, 92, 227, 34, 1, 147, 17, 35, 236, 0, - 91, 92, 227, 157, 9, 147, 18, 75, 65, 92, 227, 147, 19, 28, 35, 240, 0, 248, 128, 40, 0, 209, 95, 120, 34, 120, 99, - 6, 18, 4, 27, 67, 19, 120, 162, 73, 54, 2, 18, 67, 19, 120, 226, 67, 19, 66, 139, 209, 10, 154, 43, 66, 150, 209, 2, - 144, 0, 155, 8, 224, 48, 152, 8, 66, 184, 208, 1, 54, 1, 28, 7, 153, 17, 157, 18, 2, 11, 4, 42, 152, 16, 153, 19, 67, - 19, 67, 3, 6, 10, 67, 19, 208, 53, 154, 12, 50, 1, 146, 12, 42, 8, 209, 162, 224, 47, 152, 10, 153, 7, 34, 1, 28, 35, - 159, 9, 240, 0, 248, 79, 40, 0, 209, 45, 120, 34, 120, 99, 6, 18, 4, 27, 67, 19, 120, 162, 73, 29, 2, 18, 67, 19, 120, - 226, 67, 19, 66, 139, 209, 27, 154, 43, 66, 150, 209, 15, 155, 7, 144, 0, 157, 44, 147, 1, 152, 9, 153, 15, 154, 10, - 155, 11, 149, 2, 247, 255, 253, 201, 28, 5, 28, 32, 247, 251, 249, 79, 224, 17, 159, 7, 152, 8, 66, 135, 208, 4, 54, - 1, 151, 8, 224, 1, 157, 4, 151, 8, 153, 5, 66, 141, 208, 1, 53, 16, 231, 65, 28, 32, 247, 251, 249, 61, 37, 0, 176, - 37, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, 112, 107, 100, 19, 112, 107, 108, 19, 112, 106, 91, - 19, 112, 106, 96, 87, 66, 70, 83, 0, 0, 1, 199, 0, 0, 1, 201, 0, 0, 1, 215, 0, 0, 1, 217, 71, 40, 71, 56, 181, 16, 109, - 3, 28, 4, 43, 0, 208, 9, 72, 13, 240, 0, 253, 46, 72, 12, 240, 0, 253, 43, 72, 12, 240, 0, 253, 40, 224, 13, 104, 0, - 247, 251, 249, 14, 108, 224, 247, 251, 249, 11, 108, 96, 40, 0, 208, 1, 247, 251, 249, 6, 28, 32, 247, 251, 249, 3, - 188, 16, 188, 1, 71, 0, 19, 112, 106, 12, 19, 112, 106, 100, 19, 112, 105, 116, 181, 240, 28, 3, 51, 72, 176, 131, 136, - 26, 122, 3, 28, 5, 65, 26, 146, 1, 35, 1, 74, 48, 66, 91, 96, 19, 34, 0, 28, 14, 146, 0, 39, 0, 224, 79, 104, 43, 25, - 219, 123, 27, 43, 0, 208, 68, 106, 233, 155, 0, 49, 1, 24, 201, 34, 1, 107, 168, 108, 235, 107, 44, 240, 0, 248, 83, - 108, 233, 28, 48, 34, 6, 240, 0, 251, 106, 40, 0, 209, 51, 32, 12, 247, 251, 248, 177, 30, 6, 209, 9, 72, 32, 240, 0, - 252, 224, 72, 31, 240, 0, 252, 221, 72, 31, 240, 0, 252, 218, 224, 46, 28, 43, 51, 72, 96, 53, 96, 183, 136, 24, 247, - 251, 248, 158, 28, 3, 96, 112, 40, 0, 209, 12, 72, 21, 240, 0, 252, 203, 72, 21, 240, 0, 252, 200, 72, 20, 240, 0, 252, - 197, 28, 48, 247, 251, 248, 172, 224, 21, 106, 233, 154, 0, 49, 1, 24, 137, 107, 168, 107, 44, 154, 1, 240, 0, 248, - 28, 109, 43, 51, 1, 101, 43, 224, 9, 155, 0, 55, 1, 28, 26, 155, 1, 24, 210, 146, 0, 143, 171, 66, 159, 211, 172, 38, - 0, 176, 3, 28, 48, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, 112, 106, 12, 19, 112, 106, 144, 19, 112, - 105, 116, 71, 32, 70, 192, 181, 16, 104, 3, 28, 4, 109, 26, 58, 1, 101, 26, 104, 64, 247, 251, 248, 123, 28, 32, 247, - 251, 248, 120, 188, 16, 188, 1, 71, 0, 0, 0, 181, 240, 176, 137, 104, 5, 147, 0, 106, 107, 146, 1, 28, 6, 30, 154, 28, - 8, 64, 208, 4, 2, 12, 18, 104, 104, 146, 4, 70, 132, 152, 4, 104, 116, 48, 128, 0, 64, 90, 32, 122, 47, 106, 42, 144, - 2, 36, 1, 40, 0, 209, 0, 224, 194, 58, 1, 64, 250, 27, 219, 146, 6, 63, 2, 28, 10, 64, 250, 147, 5, 155, 6, 28, 23, - 70, 96, 64, 31, 8, 131, 59, 1, 28, 26, 64, 10, 146, 7, 209, 0, 224, 133, 155, 2, 152, 5, 106, 233, 64, 131, 24, 121, - 147, 3, 24, 201, 75, 87, 104, 26, 108, 235, 66, 138, 209, 5, 74, 85, 28, 24, 104, 17, 74, 85, 104, 18, 224, 18, 107, - 44, 107, 168, 34, 1, 240, 0, 248, 165, 30, 4, 208, 0, 224, 149, 106, 235, 152, 3, 73, 76, 24, 251, 24, 27, 96, 11, 75, - 75, 108, 233, 104, 24, 75, 75, 104, 26, 240, 0, 250, 227, 154, 7, 104, 108, 0, 145, 155, 0, 26, 100, 66, 156, 217, 0, - 28, 28, 108, 235, 152, 1, 24, 89, 28, 34, 240, 0, 250, 213, 152, 0, 153, 1, 27, 0, 25, 9, 144, 0, 145, 1, 55, 1, 40, - 0, 208, 71, 154, 6, 66, 186, 210, 68, 155, 4, 104, 114, 51, 1, 4, 27, 12, 27, 147, 4, 51, 128, 0, 91, 90, 211, 36, 1, - 147, 2, 39, 0, 43, 0, 209, 54, 224, 95, 122, 43, 152, 0, 64, 216, 106, 43, 25, 194, 144, 3, 66, 154, 217, 1, 27, 219, - 147, 3, 154, 5, 106, 233, 155, 2, 24, 121, 64, 147, 24, 201, 107, 168, 107, 44, 154, 3, 155, 1, 240, 0, 248, 86, 40, - 0, 209, 70, 122, 43, 152, 3, 153, 0, 64, 152, 154, 3, 26, 9, 28, 3, 145, 0, 24, 191, 41, 0, 208, 15, 152, 6, 66, 184, - 210, 12, 154, 4, 104, 113, 50, 1, 4, 18, 12, 18, 146, 4, 50, 128, 0, 82, 90, 138, 146, 2, 42, 0, 208, 42, 39, 0, 153, - 1, 24, 201, 145, 1, 104, 107, 154, 0, 66, 154, 210, 197, 36, 0, 42, 0, 208, 34, 155, 5, 158, 2, 106, 233, 64, 158, 24, - 121, 107, 44, 107, 168, 25, 137, 108, 235, 34, 1, 240, 0, 248, 35, 30, 4, 209, 20, 106, 235, 108, 233, 24, 255, 75, - 11, 25, 190, 96, 30, 75, 11, 104, 24, 75, 11, 104, 26, 240, 0, 250, 99, 108, 233, 152, 1, 154, 0, 240, 0, 250, 94, 224, - 2, 36, 1, 224, 0, 28, 4, 176, 9, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, 112, 107, 100, 19, 112, - 107, 108, 71, 32, 70, 192, 239, 0, 0, 204, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 230, 0, 0, 16, 225, 47, - 255, 30, 230, 0, 0, 48, 225, 47, 255, 30, 230, 0, 0, 80, 225, 47, 255, 30, 230, 0, 0, 112, 225, 47, 255, 30, 230, 0, - 0, 144, 225, 47, 255, 30, 230, 0, 0, 176, 225, 47, 255, 30, 230, 0, 0, 208, 225, 47, 255, 30, 230, 0, 0, 240, 225, 47, - 255, 30, 230, 0, 1, 16, 225, 47, 255, 30, 230, 0, 1, 48, 225, 47, 255, 30, 230, 0, 1, 80, 225, 47, 255, 30, 230, 0, - 1, 112, 225, 47, 255, 30, 230, 0, 1, 144, 225, 47, 255, 30, 230, 0, 1, 176, 225, 47, 255, 30, 230, 0, 1, 208, 225, 47, - 255, 30, 230, 0, 1, 240, 225, 47, 255, 30, 230, 0, 2, 16, 225, 47, 255, 30, 230, 0, 2, 48, 225, 47, 255, 30, 230, 0, - 2, 80, 225, 47, 255, 30, 230, 0, 2, 112, 225, 47, 255, 30, 230, 0, 2, 144, 225, 47, 255, 30, 230, 0, 2, 176, 225, 47, - 255, 30, 230, 0, 2, 208, 225, 47, 255, 30, 230, 0, 2, 240, 225, 47, 255, 30, 230, 0, 3, 16, 225, 47, 255, 30, 230, 0, - 3, 48, 225, 47, 255, 30, 230, 0, 3, 80, 225, 47, 255, 30, 230, 0, 3, 112, 225, 47, 255, 30, 230, 0, 3, 144, 225, 47, - 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, 30, 230, 0, 3, 240, 225, 47, 255, 30, 230, - 0, 4, 16, 225, 47, 255, 30, 230, 0, 4, 48, 225, 47, 255, 30, 230, 0, 4, 80, 225, 47, 255, 30, 230, 0, 4, 112, 225, 47, - 255, 30, 230, 0, 4, 144, 225, 47, 255, 30, 230, 0, 4, 176, 225, 47, 255, 30, 230, 0, 4, 208, 225, 47, 255, 30, 230, - 0, 4, 240, 225, 47, 255, 30, 230, 0, 5, 16, 225, 47, 255, 30, 230, 0, 5, 48, 225, 47, 255, 30, 230, 0, 5, 80, 225, 47, - 255, 30, 230, 0, 6, 144, 225, 47, 255, 30, 230, 0, 7, 240, 225, 47, 255, 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, - 10, 16, 225, 47, 255, 30, 226, 144, 16, 0, 227, 176, 0, 4, 239, 0, 0, 171, 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, - 0, 0, 180, 3, 70, 113, 8, 73, 0, 64, 0, 73, 90, 9, 0, 73, 68, 142, 188, 3, 71, 112, 226, 81, 32, 1, 1, 47, 255, 30, - 58, 0, 0, 54, 225, 80, 0, 1, 154, 0, 0, 34, 225, 17, 0, 2, 10, 0, 0, 35, 227, 17, 2, 14, 1, 160, 17, 129, 3, 160, 48, - 8, 19, 160, 48, 1, 227, 81, 2, 1, 49, 81, 0, 0, 49, 160, 18, 1, 49, 160, 50, 3, 58, 255, 255, 250, 227, 81, 1, 2, 49, - 81, 0, 0, 49, 160, 16, 129, 49, 160, 48, 131, 58, 255, 255, 250, 227, 160, 32, 0, 225, 80, 0, 1, 32, 64, 0, 1, 33, 130, - 32, 3, 225, 80, 0, 161, 32, 64, 0, 161, 33, 130, 32, 163, 225, 80, 1, 33, 32, 64, 1, 33, 33, 130, 33, 35, 225, 80, 1, - 161, 32, 64, 1, 161, 33, 130, 33, 163, 227, 80, 0, 0, 17, 176, 50, 35, 17, 160, 18, 33, 26, 255, 255, 239, 225, 160, - 0, 2, 225, 47, 255, 30, 3, 160, 0, 1, 19, 160, 0, 0, 225, 47, 255, 30, 227, 81, 8, 1, 33, 160, 24, 33, 35, 160, 32, - 16, 51, 160, 32, 0, 227, 81, 12, 1, 33, 160, 20, 33, 34, 130, 32, 8, 227, 81, 0, 16, 33, 160, 18, 33, 34, 130, 32, 4, - 227, 81, 0, 4, 130, 130, 32, 3, 144, 130, 32, 161, 225, 160, 2, 48, 225, 47, 255, 30, 225, 47, 255, 31, 225, 160, 0, - 0, 227, 80, 0, 0, 19, 224, 0, 0, 234, 0, 1, 11, 227, 81, 0, 0, 10, 255, 255, 248, 233, 45, 64, 3, 235, 255, 255, 188, - 232, 189, 64, 6, 224, 3, 0, 146, 224, 65, 16, 3, 225, 47, 255, 30, 227, 81, 0, 0, 10, 0, 0, 67, 224, 32, 192, 1, 66, - 97, 16, 0, 226, 81, 32, 1, 10, 0, 0, 39, 225, 176, 48, 0, 66, 96, 48, 0, 225, 83, 0, 1, 154, 0, 0, 38, 225, 17, 0, 2, - 10, 0, 0, 40, 227, 17, 2, 14, 1, 160, 17, 129, 3, 160, 32, 8, 19, 160, 32, 1, 227, 81, 2, 1, 49, 81, 0, 3, 49, 160, - 18, 1, 49, 160, 34, 2, 58, 255, 255, 250, 227, 81, 1, 2, 49, 81, 0, 3, 49, 160, 16, 129, 49, 160, 32, 130, 58, 255, - 255, 250, 227, 160, 0, 0, 225, 83, 0, 1, 32, 67, 48, 1, 33, 128, 0, 2, 225, 83, 0, 161, 32, 67, 48, 161, 33, 128, 0, - 162, 225, 83, 1, 33, 32, 67, 49, 33, 33, 128, 1, 34, 225, 83, 1, 161, 32, 67, 49, 161, 33, 128, 1, 162, 227, 83, 0, - 0, 17, 176, 34, 34, 17, 160, 18, 33, 26, 255, 255, 239, 227, 92, 0, 0, 66, 96, 0, 0, 225, 47, 255, 30, 225, 60, 0, 0, - 66, 96, 0, 0, 225, 47, 255, 30, 51, 160, 0, 0, 1, 160, 15, 204, 3, 128, 0, 1, 225, 47, 255, 30, 227, 81, 8, 1, 33, 160, - 24, 33, 35, 160, 32, 16, 51, 160, 32, 0, 227, 81, 12, 1, 33, 160, 20, 33, 34, 130, 32, 8, 227, 81, 0, 16, 33, 160, 18, - 33, 34, 130, 32, 4, 227, 81, 0, 4, 130, 130, 32, 3, 144, 130, 32, 161, 227, 92, 0, 0, 225, 160, 2, 51, 66, 96, 0, 0, - 225, 47, 255, 30, 225, 47, 255, 31, 225, 160, 0, 0, 227, 80, 0, 0, 195, 224, 1, 2, 179, 160, 1, 2, 234, 0, 0, 183, 227, - 81, 0, 0, 10, 255, 255, 247, 233, 45, 64, 3, 235, 255, 255, 177, 232, 189, 64, 6, 224, 3, 0, 146, 224, 65, 16, 3, 225, - 47, 255, 30, 71, 112, 70, 192, 33, 16, 6, 2, 14, 3, 65, 200, 67, 19, 6, 2, 14, 0, 67, 16, 65, 200, 67, 24, 71, 112, - 70, 192, 181, 112, 28, 4, 28, 13, 42, 3, 217, 33, 28, 11, 67, 3, 7, 158, 208, 18, 120, 32, 120, 41, 66, 136, 209, 29, - 58, 1, 35, 0, 224, 5, 52, 1, 51, 1, 120, 32, 92, 233, 66, 136, 209, 20, 66, 154, 209, 247, 32, 0, 188, 112, 188, 2, - 71, 8, 28, 13, 28, 4, 201, 8, 200, 64, 66, 158, 209, 4, 58, 4, 28, 4, 28, 13, 42, 3, 216, 244, 32, 0, 42, 0, 209, 222, - 231, 237, 26, 64, 231, 235, 70, 192, 181, 240, 28, 5, 28, 14, 28, 20, 42, 15, 217, 3, 28, 11, 67, 3, 7, 159, 208, 10, - 44, 0, 208, 5, 35, 0, 92, 242, 84, 234, 51, 1, 66, 163, 209, 250, 188, 240, 188, 2, 71, 8, 28, 21, 28, 12, 28, 3, 104, - 38, 96, 30, 104, 102, 96, 94, 104, 166, 96, 158, 104, 230, 61, 16, 96, 222, 52, 16, 51, 16, 45, 15, 216, 242, 58, 16, - 9, 23, 28, 126, 1, 63, 1, 54, 27, 215, 25, 133, 28, 60, 25, 142, 47, 3, 217, 217, 28, 52, 28, 59, 28, 42, 204, 2, 59, - 4, 194, 2, 43, 3, 216, 250, 63, 4, 8, 188, 28, 99, 0, 155, 0, 164, 24, 237, 24, 246, 27, 60, 231, 200, 70, 192, 181, - 112, 28, 3, 7, 132, 208, 13, 42, 0, 208, 64, 6, 13, 58, 1, 14, 45, 36, 3, 224, 2, 42, 0, 208, 57, 58, 1, 112, 29, 51, - 1, 66, 35, 209, 248, 42, 3, 217, 41, 37, 255, 64, 13, 2, 44, 67, 37, 4, 44, 28, 30, 67, 37, 42, 15, 217, 18, 28, 28, - 28, 22, 62, 16, 96, 37, 96, 101, 96, 165, 96, 229, 52, 16, 46, 15, 216, 247, 58, 16, 9, 22, 54, 1, 1, 54, 25, 158, 35, - 15, 64, 26, 42, 3, 217, 12, 28, 52, 28, 19, 59, 4, 196, 32, 43, 3, 216, 251, 58, 4, 8, 147, 51, 1, 0, 155, 24, 246, - 35, 3, 64, 26, 28, 51, 42, 0, 208, 6, 6, 9, 14, 12, 33, 0, 84, 92, 49, 1, 66, 138, 209, 251, 188, 112, 188, 2, 71, 8, - 120, 2, 120, 11, 48, 1, 49, 1, 42, 0, 208, 1, 66, 154, 208, 247, 26, 208, 71, 112, 35, 0, 92, 194, 51, 1, 42, 0, 209, - 251, 30, 88, 71, 112, 70, 192, 181, 240, 28, 3, 32, 0, 42, 0, 208, 72, 28, 8, 67, 24, 36, 3, 30, 85, 64, 4, 209, 42, - 28, 30, 28, 13, 42, 3, 217, 67, 104, 31, 104, 8, 66, 135, 209, 63, 58, 4, 28, 32, 42, 0, 208, 54, 72, 34, 24, 61, 67, - 189, 79, 33, 28, 32, 66, 61, 209, 47, 29, 28, 29, 8, 224, 11, 204, 8, 200, 2, 66, 139, 209, 45, 58, 4, 42, 0, 208, 40, - 77, 25, 25, 89, 67, 153, 66, 57, 209, 35, 28, 38, 28, 5, 42, 3, 216, 239, 28, 35, 28, 1, 42, 0, 208, 33, 30, 85, 120, - 28, 120, 8, 66, 132, 209, 18, 32, 0, 45, 0, 208, 16, 44, 0, 208, 14, 61, 1, 34, 0, 224, 4, 66, 170, 208, 12, 50, 1, - 44, 0, 208, 9, 24, 152, 120, 68, 24, 136, 120, 64, 66, 132, 208, 244, 26, 32, 188, 240, 188, 2, 71, 8, 32, 0, 231, 250, - 28, 41, 28, 51, 30, 85, 231, 222, 120, 36, 120, 0, 26, 32, 231, 242, 70, 192, 254, 254, 254, 255, 128, 128, 128, 128, - 0, 0, 0, 0, 71, 120, 70, 192, 234, 255, 254, 125, 71, 120, 70, 192, 234, 255, 254, 137, 71, 120, 70, 192, 234, 255, - 254, 123, 71, 120, 70, 192, 234, 255, 254, 253, 71, 120, 70, 192, 234, 255, 233, 149, 71, 120, 70, 192, 234, 255, 254, - 119, 71, 120, 70, 192, 234, 255, 254, 184, 71, 120, 70, 192, 234, 255, 254, 163, 71, 120, 70, 192, 234, 255, 233, 174, - 229, 159, 192, 0, 225, 47, 255, 28, 19, 112, 87, 81, 71, 120, 70, 192, 234, 255, 254, 124, 71, 120, 70, 192, 234, 255, - 254, 244, 71, 120, 70, 192, 234, 255, 255, 62, 71, 120, 70, 192, 234, 255, 254, 84, 71, 120, 70, 192, 234, 255, 254, - 80, 71, 120, 70, 192, 234, 255, 254, 112, 71, 120, 70, 192, 234, 255, 254, 86, 71, 120, 70, 192, 234, 255, 254, 88, - 71, 120, 70, 192, 234, 255, 233, 162, 71, 120, 70, 192, 234, 255, 254, 96, 71, 120, 70, 192, 234, 255, 254, 144, 71, - 120, 70, 192, 234, 255, 233, 152, 71, 120, 70, 192, 234, 255, 254, 136, 71, 120, 70, 192, 234, 255, 254, 84, 71, 120, - 70, 192, 234, 255, 233, 106, 71, 120, 70, 192, 234, 255, 254, 124, 71, 120, 70, 192, 234, 255, 254, 34, 71, 120, 70, - 192, 234, 255, 254, 66, 71, 120, 70, 192, 234, 255, 233, 94, 71, 120, 70, 192, 234, 255, 254, 82, 71, 120, 70, 192, - 234, 255, 254, 118, 71, 120, 70, 192, 234, 255, 254, 34, 0, 0, 0, 0, 73, 79, 83, 32, 109, 111, 100, 117, 108, 101, 0, - 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 229, 31, - 240, 4, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 15, 66, 64, 19, 114, 198, 36, 16, - 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 87, 66, 70, 83, 32, 110, 111, 116, 32, 101, - 110, 111, 117, 103, 104, 32, 109, 101, 109, 111, 114, 121, 33, 10, 0, 47, 100, 101, 118, 47, 117, 115, 98, 49, 50, 51, - 0, 47, 100, 101, 118, 47, 117, 115, 98, 49, 50, 51, 47, 79, 70, 70, 0, 102, 105, 114, 115, 116, 32, 114, 101, 97, 100, - 32, 115, 101, 99, 116, 111, 114, 32, 40, 37, 105, 41, 32, 79, 75, 10, 0, 102, 105, 114, 115, 116, 32, 114, 101, 97, - 100, 32, 115, 101, 99, 116, 111, 114, 32, 40, 37, 105, 41, 32, 69, 82, 82, 79, 82, 10, 0, 101, 104, 99, 105, 95, 105, - 110, 116, 95, 119, 111, 114, 107, 105, 110, 103, 95, 99, 97, 108, 108, 98, 97, 99, 107, 95, 112, 97, 114, 116, 49, 44, - 32, 116, 105, 109, 101, 111, 117, 116, 58, 32, 37, 117, 10, 0, 117, 114, 98, 32, 114, 101, 116, 118, 97, 108, 58, 32, - 37, 105, 10, 0, 117, 110, 97, 98, 108, 101, 32, 116, 111, 32, 103, 101, 116, 32, 100, 101, 118, 105, 99, 101, 32, 100, - 101, 115, 99, 46, 46, 46, 10, 0, 103, 101, 116, 116, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, - 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 32, 45, 32, 114, 101, 115, 101, 116, 10, 0, 101, 114, 114, 111, 114, 32, 103, - 101, 116, 116, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, - 10, 0, 103, 101, 116, 116, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, - 84, 79, 82, 32, 45, 32, 97, 100, 113, 117, 105, 114, 101, 32, 45, 32, 114, 101, 115, 101, 116, 10, 0, 85, 83, 66, 95, - 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 32, 111, 107, 10, 0, 116, 114, 121, 105, 110, 103, - 32, 85, 83, 66, 95, 82, 69, 81, 95, 83, 69, 84, 65, 68, 68, 82, 69, 83, 83, 58, 32, 37, 100, 10, 0, 117, 110, 97, 98, - 108, 101, 32, 116, 111, 32, 115, 101, 116, 32, 100, 101, 118, 105, 99, 101, 32, 97, 100, 100, 114, 58, 32, 37, 100, - 10, 0, 85, 83, 66, 95, 82, 69, 81, 95, 83, 69, 84, 65, 68, 68, 82, 69, 83, 83, 32, 111, 107, 58, 32, 37, 100, 10, 0, - 101, 114, 114, 111, 114, 32, 99, 104, 101, 99, 107, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, - 69, 83, 67, 82, 73, 80, 84, 79, 82, 10, 0, 111, 107, 32, 99, 104, 101, 99, 107, 105, 110, 103, 32, 85, 83, 66, 95, 82, - 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 10, 0, 105, 110, 105, 116, 32, 111, 107, 10, 0, 98, - 117, 102, 102, 101, 114, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, 109, 101, 109, 41, 10, 0, 95, 95, 117, - 115, 98, 95, 103, 101, 116, 100, 101, 115, 99, 32, 101, 114, 114, 111, 114, 32, 85, 83, 66, 95, 68, 84, 95, 68, 69, - 86, 73, 67, 69, 58, 32, 114, 101, 116, 114, 121, 10, 0, 95, 95, 117, 115, 98, 95, 103, 101, 116, 100, 101, 115, 99, - 32, 101, 114, 114, 111, 114, 32, 85, 83, 66, 95, 68, 84, 95, 68, 69, 86, 73, 67, 69, 10, 0, 117, 100, 100, 45, 62, 99, - 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 115, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, - 109, 101, 109, 41, 10, 0, 95, 95, 117, 115, 98, 95, 103, 101, 116, 100, 101, 115, 99, 32, 101, 114, 114, 111, 114, 32, - 85, 83, 66, 95, 68, 84, 95, 67, 79, 78, 70, 73, 71, 58, 32, 114, 101, 116, 114, 121, 10, 0, 117, 99, 100, 45, 62, 105, - 110, 116, 101, 114, 102, 97, 99, 101, 115, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, 109, 101, 109, 41, - 10, 0, 117, 105, 100, 45, 62, 101, 110, 100, 112, 111, 105, 110, 116, 115, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, - 111, 32, 109, 101, 109, 41, 10, 0, 117, 105, 100, 45, 62, 101, 120, 116, 114, 97, 32, 61, 61, 32, 78, 85, 76, 76, 32, - 40, 110, 111, 32, 109, 101, 109, 41, 10, 0, 10, 113, 116, 100, 32, 101, 114, 114, 111, 114, 33, 58, 0, 32, 66, 65, 66, - 66, 76, 69, 0, 32, 32, 109, 105, 115, 115, 101, 100, 32, 109, 105, 99, 114, 111, 32, 102, 114, 97, 109, 101, 0, 32, - 32, 100, 97, 116, 97, 98, 117, 102, 102, 101, 114, 32, 101, 114, 114, 111, 114, 0, 32, 119, 114, 111, 110, 103, 32, - 97, 99, 107, 0, 32, 116, 111, 111, 32, 109, 97, 110, 121, 32, 101, 114, 114, 111, 114, 115, 0, 105, 110, 116, 101, 114, - 114, 117, 112, 116, 95, 99, 97, 108, 108, 98, 97, 99, 107, 95, 104, 97, 110, 100, 32, 83, 84, 83, 95, 73, 78, 84, 10, - 0, 105, 110, 116, 101, 114, 114, 117, 112, 116, 95, 99, 97, 108, 108, 98, 97, 99, 107, 95, 104, 97, 110, 100, 32, 83, - 84, 83, 95, 80, 67, 68, 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, 32, 114, 101, 115, 101, 116, 58, 32, - 66, 85, 76, 75, 32, 82, 69, 83, 69, 84, 32, 37, 105, 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, 32, 114, - 101, 115, 101, 116, 58, 32, 99, 108, 101, 97, 114, 104, 97, 108, 116, 32, 105, 110, 32, 114, 101, 116, 32, 37, 105, - 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, 32, 114, 101, 115, 101, 116, 58, 32, 99, 108, 101, 97, 114, 104, - 97, 108, 116, 32, 111, 117, 116, 32, 114, 101, 116, 32, 37, 105, 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, - 32, 114, 101, 115, 101, 116, 58, 32, 85, 83, 66, 95, 71, 101, 116, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, - 111, 110, 32, 114, 101, 116, 32, 37, 105, 10, 0, 114, 101, 115, 101, 116, 32, 111, 107, 10, 0, 95, 95, 115, 101, 110, - 100, 95, 99, 98, 119, 32, 114, 101, 116, 32, 37, 105, 10, 0, 95, 95, 85, 83, 66, 95, 66, 108, 107, 77, 115, 103, 84, - 105, 109, 101, 111, 117, 116, 32, 37, 105, 10, 0, 95, 95, 114, 101, 97, 100, 95, 99, 115, 119, 32, 37, 105, 10, 0, 32, - 32, 32, 32, 83, 67, 83, 73, 95, 84, 69, 83, 84, 95, 85, 78, 73, 84, 95, 82, 69, 65, 68, 89, 32, 114, 101, 116, 32, 37, - 105, 10, 0, 32, 32, 32, 32, 83, 67, 83, 73, 95, 82, 69, 81, 85, 69, 83, 84, 95, 83, 69, 78, 83, 69, 32, 114, 101, 116, - 32, 37, 105, 10, 0, 32, 32, 32, 32, 83, 67, 83, 73, 95, 82, 69, 81, 85, 69, 83, 84, 95, 83, 69, 78, 83, 69, 32, 115, - 116, 97, 116, 117, 115, 32, 37, 120, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, - 41, 58, 32, 85, 83, 66, 95, 71, 101, 116, 68, 101, 115, 99, 114, 105, 112, 116, 111, 114, 115, 32, 37, 105, 10, 0, 85, - 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 100, 101, 118, 105, 99, 101, 32, 99, - 104, 97, 110, 103, 101, 100, 33, 33, 33, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, - 40, 41, 58, 32, 117, 99, 100, 32, 37, 105, 32, 80, 111, 119, 101, 114, 32, 37, 105, 32, 109, 65, 10, 0, 85, 83, 66, - 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 32, - 115, 117, 98, 99, 108, 97, 115, 115, 32, 37, 105, 32, 97, 116, 97, 95, 112, 114, 111, 116, 32, 37, 105, 32, 10, 0, 73, - 110, 32, 80, 111, 105, 110, 116, 58, 32, 37, 105, 10, 0, 79, 117, 116, 32, 80, 111, 105, 110, 116, 58, 32, 37, 105, - 10, 0, 101, 112, 95, 105, 110, 32, 37, 120, 32, 101, 112, 95, 111, 117, 116, 32, 37, 120, 10, 0, 85, 83, 66, 83, 116, - 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 99, 97, 110, 110, 111, 116, 32, 102, 105, 110, 100, 32, - 97, 110, 121, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 33, 33, 33, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, - 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 99, 111, 110, 102, 58, 32, 37, 120, 32, 97, 108, 116, 73, 110, 116, 101, - 114, 102, 97, 99, 101, 58, 32, 37, 120, 10, 0, 85, 83, 66, 95, 71, 101, 116, 67, 111, 110, 102, 105, 103, 117, 114, - 97, 116, 105, 111, 110, 40, 41, 32, 69, 114, 114, 111, 114, 46, 32, 67, 111, 110, 116, 105, 110, 117, 101, 46, 10, 0, - 65, 99, 116, 117, 97, 108, 32, 99, 111, 110, 102, 58, 32, 37, 120, 32, 32, 32, 110, 101, 120, 116, 32, 99, 111, 110, - 102, 58, 32, 37, 120, 10, 0, 85, 83, 66, 95, 83, 101, 116, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, - 110, 40, 41, 32, 69, 114, 114, 111, 114, 10, 0, 85, 83, 66, 95, 83, 101, 116, 65, 108, 116, 101, 114, 110, 97, 116, - 105, 118, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 41, 32, 69, 114, 114, 111, 114, 46, 32, 67, 111, 110, 116, - 105, 110, 117, 101, 10, 0, 85, 83, 66, 95, 83, 101, 116, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, - 40, 41, 32, 38, 32, 85, 83, 66, 95, 83, 101, 116, 65, 108, 116, 101, 114, 110, 97, 116, 105, 118, 101, 73, 110, 116, - 101, 114, 102, 97, 99, 101, 40, 41, 32, 79, 75, 10, 0, 71, 101, 116, 95, 77, 97, 120, 95, 76, 117, 110, 40, 41, 58, - 32, 101, 114, 114, 44, 32, 100, 101, 102, 97, 117, 108, 116, 32, 109, 97, 120, 95, 108, 117, 110, 61, 56, 10, 0, 71, - 101, 116, 95, 77, 97, 120, 95, 76, 117, 110, 40, 41, 58, 32, 79, 75, 58, 32, 37, 105, 10, 0, 85, 83, 66, 83, 116, 111, - 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 116, 114, 121, 95, 115, 116, 97, 116, 117, 115, 32, 37, 105, - 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 79, 75, 44, 32, 114, 101, - 116, 117, 114, 110, 32, 48, 10, 0, 32, 32, 32, 32, 115, 116, 97, 114, 116, 95, 115, 116, 111, 112, 32, 99, 109, 100, - 32, 114, 101, 116, 32, 37, 105, 10, 0, 32, 32, 32, 32, 73, 110, 113, 117, 105, 114, 121, 32, 114, 101, 116, 32, 37, - 105, 10, 0, 32, 32, 32, 32, 68, 101, 118, 105, 99, 101, 32, 84, 121, 112, 101, 58, 32, 37, 120, 10, 0, 32, 32, 32, 32, - 82, 101, 97, 100, 67, 97, 112, 97, 99, 105, 116, 121, 32, 114, 101, 116, 32, 37, 105, 32, 32, 115, 101, 99, 116, 111, - 114, 95, 115, 105, 122, 101, 58, 32, 37, 117, 32, 32, 115, 101, 99, 116, 111, 114, 115, 58, 32, 37, 117, 10, 0, 70, - 97, 115, 116, 32, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 77, 111, 117, 110, 116, 76, 85, 78, 32, 37, 105, - 35, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 77, 111, 117, 110, 116, 76, 85, 78, 58, 32, 114, 101, 116, - 32, 37, 105, 10, 0, 85, 83, 66, 83, 84, 79, 82, 65, 71, 69, 95, 71, 69, 84, 95, 77, 65, 88, 95, 76, 85, 78, 32, 114, - 101, 116, 32, 37, 105, 32, 109, 97, 120, 108, 117, 110, 32, 37, 105, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, - 101, 95, 77, 111, 117, 110, 116, 76, 85, 78, 32, 102, 97, 105, 108, 33, 33, 33, 10, 0, 10, 42, 42, 42, 42, 42, 42, 42, + 1, 240, 1, 251, 124, 121, 107, 114, 110, 114, 174, 114, 238, 115, 46, 43, 9, 209, 4, 74, 73, 75, 64, 168, 12, 96, 26, + 224, 39, 43, 8, 209, 10, 121, 235, 43, 80, 209, 7, 121, 43, 43, 1, 217, 4, 121, 171, 74, 67, 26, 211, 74, 57, 96, 19, + 155, 6, 154, 10, 51, 1, 50, 18, 147, 6, 146, 10, 121, 59, 154, 6, 66, 154, 210, 0, 231, 47, 155, 5, 154, 8, 51, 1, 50, + 13, 147, 5, 146, 8, 173, 12, 124, 107, 154, 5, 66, 154, 210, 0, 231, 16, 72, 54, 247, 254, 250, 247, 28, 40, 247, 254, + 249, 199, 77, 50, 224, 159, 72, 51, 247, 254, 250, 239, 70, 107, 51, 71, 120, 25, 120, 34, 72, 49, 247, 254, 250, 232, + 75, 35, 74, 48, 96, 26, 28, 35, 51, 144, 104, 24, 120, 33, 247, 254, 253, 220, 40, 0, 218, 2, 72, 44, 247, 254, 250, + 218, 74, 43, 75, 28, 121, 225, 96, 26, 28, 35, 51, 144, 104, 24, 122, 226, 247, 254, 253, 191, 40, 0, 218, 2, 72, 38, + 247, 254, 250, 203, 72, 38, 70, 109, 247, 254, 250, 199, 53, 70, 35, 0, 112, 43, 28, 35, 51, 144, 104, 24, 136, 227, + 33, 161, 147, 0, 35, 1, 147, 1, 34, 254, 35, 0, 149, 2, 247, 254, 253, 55, 40, 0, 218, 58, 72, 28, 247, 254, 250, 178, + 35, 8, 115, 163, 224, 60, 70, 192, 19, 112, 107, 104, 19, 112, 96, 64, 44, 13, 224, 1, 19, 112, 101, 86, 19, 112, 107, + 76, 19, 114, 198, 232, 19, 112, 101, 128, 19, 112, 107, 32, 19, 112, 101, 166, 19, 112, 101, 205, 19, 112, 102, 4, 19, + 112, 102, 18, 19, 112, 102, 33, 255, 255, 251, 79, 19, 112, 102, 102, 255, 255, 177, 224, 255, 255, 216, 240, 19, 112, + 102, 53, 19, 112, 102, 148, 19, 112, 102, 189, 255, 255, 251, 78, 19, 112, 102, 222, 255, 255, 251, 77, 19, 112, 102, + 252, 19, 112, 103, 43, 19, 112, 103, 102, 120, 41, 72, 29, 49, 1, 6, 9, 14, 9, 115, 161, 247, 254, 250, 114, 28, 35, + 51, 160, 104, 27, 43, 0, 209, 16, 77, 24, 104, 43, 43, 0, 209, 7, 32, 129, 1, 64, 240, 1, 250, 153, 35, 31, 48, 31, + 67, 152, 96, 40, 74, 18, 28, 35, 104, 18, 51, 160, 96, 26, 52, 160, 104, 35, 37, 0, 43, 0, 209, 4, 74, 14, 75, 14, 37, + 4, 96, 26, 66, 109, 74, 13, 75, 14, 96, 26, 45, 0, 208, 5, 75, 10, 72, 12, 104, 25, 247, 254, 250, 72, 224, 2, 72, 11, + 247, 254, 250, 68, 176, 19, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 103, 141, 19, 112, 107, 24, 255, 255, + 251, 75, 19, 112, 107, 32, 0, 15, 66, 64, 19, 112, 96, 56, 19, 112, 103, 164, 19, 112, 103, 198, 181, 8, 33, 0, 247, + 255, 251, 38, 188, 8, 188, 2, 71, 8, 0, 0, 181, 240, 176, 139, 171, 8, 34, 18, 112, 26, 1, 74, 112, 90, 34, 0, 112, + 154, 112, 218, 113, 90, 28, 15, 28, 2, 33, 36, 50, 160, 113, 25, 104, 20, 34, 128, 1, 18, 24, 164, 144, 7, 44, 0, 208, + 48, 38, 0, 33, 0, 34, 36, 28, 32, 240, 2, 250, 69, 171, 8, 34, 6, 147, 0, 35, 10, 37, 0, 146, 1, 147, 5, 152, 7, 28, + 57, 28, 34, 35, 36, 149, 2, 149, 3, 149, 4, 247, 255, 251, 175, 40, 0, 219, 7, 120, 35, 34, 31, 64, 19, 43, 5, 208, + 6, 43, 7, 209, 11, 224, 3, 54, 1, 46, 2, 208, 15, 231, 220, 75, 9, 33, 1, 104, 26, 75, 8, 0, 146, 80, 209, 224, 7, 75, + 5, 104, 26, 75, 5, 0, 146, 80, 213, 224, 1, 32, 4, 66, 64, 176, 11, 188, 240, 188, 2, 71, 8, 19, 112, 107, 104, 19, + 112, 107, 44, 181, 112, 176, 136, 28, 22, 28, 29, 34, 37, 171, 7, 112, 26, 1, 74, 112, 90, 28, 2, 50, 160, 104, 20, + 34, 128, 1, 18, 24, 164, 44, 0, 208, 34, 147, 0, 35, 2, 147, 1, 35, 0, 147, 2, 147, 3, 147, 4, 35, 10, 147, 5, 28, 34, + 35, 8, 247, 255, 251, 108, 40, 0, 219, 21, 168, 6, 28, 33, 34, 4, 240, 2, 249, 169, 45, 0, 208, 1, 155, 6, 96, 43, 29, + 33, 168, 6, 34, 4, 240, 2, 249, 160, 32, 0, 46, 0, 208, 4, 155, 6, 96, 51, 224, 1, 32, 4, 66, 64, 176, 8, 188, 112, + 188, 2, 71, 8, 181, 240, 176, 131, 123, 131, 28, 15, 28, 5, 66, 187, 217, 72, 78, 40, 73, 40, 72, 41, 96, 49, 33, 0, + 247, 254, 249, 140, 75, 39, 28, 40, 96, 51, 28, 57, 247, 255, 252, 166, 30, 4, 219, 53, 74, 33, 28, 57, 96, 50, 28, + 40, 247, 255, 255, 88, 28, 4, 28, 33, 72, 32, 247, 254, 249, 121, 44, 0, 219, 40, 28, 43, 51, 160, 104, 26, 35, 128, + 1, 27, 92, 211, 33, 31, 64, 25, 72, 27, 247, 254, 249, 108, 28, 59, 29, 62, 51, 20, 0, 182, 0, 155, 25, 170, 147, 1, + 28, 57, 24, 235, 28, 40, 247, 255, 255, 140, 153, 1, 28, 4, 89, 75, 89, 114, 72, 18, 28, 33, 247, 254, 249, 88, 89, + 114, 75, 17, 66, 154, 217, 3, 154, 1, 89, 83, 43, 9, 216, 1, 36, 33, 66, 100, 74, 6, 75, 5, 96, 26, 224, 1, 36, 3, 66, + 100, 176, 3, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 56, 0, 15, 66, 64, 19, 112, 103, 231, 1, 49, 45, + 0, 19, 112, 104, 2, 19, 112, 104, 22, 19, 112, 104, 43, 0, 0, 1, 255, 181, 240, 176, 141, 175, 9, 37, 40, 112, 61, 1, + 77, 112, 125, 14, 21, 112, 189, 70, 110, 12, 21, 36, 0, 112, 253, 113, 122, 10, 21, 54, 47, 10, 26, 112, 52, 113, 61, + 113, 188, 113, 250, 114, 59, 114, 124, 123, 130, 66, 138, 217, 28, 29, 10, 0, 146, 88, 18, 146, 7, 42, 0, 208, 22, 77, + 15, 34, 1, 96, 42, 154, 7, 151, 0, 67, 83, 34, 10, 146, 1, 34, 6, 146, 5, 154, 18, 148, 2, 150, 3, 148, 4, 247, 255, + 250, 184, 96, 44, 40, 0, 221, 7, 120, 51, 43, 0, 209, 3, 224, 3, 32, 3, 66, 64, 224, 0, 72, 3, 176, 13, 188, 240, 188, + 2, 71, 8, 70, 192, 19, 112, 107, 64, 255, 255, 216, 234, 181, 240, 176, 141, 147, 7, 1, 75, 175, 9, 37, 42, 70, 156, + 112, 61, 35, 8, 70, 101, 67, 43, 112, 123, 14, 21, 155, 7, 112, 189, 70, 110, 12, 21, 36, 0, 112, 253, 113, 122, 10, + 21, 54, 47, 10, 26, 112, 52, 113, 61, 113, 188, 113, 250, 114, 59, 114, 124, 123, 130, 66, 138, 217, 32, 29, 10, 0, + 146, 88, 18, 70, 148, 69, 164, 208, 26, 77, 17, 35, 1, 96, 43, 155, 7, 151, 0, 70, 98, 67, 90, 70, 148, 34, 1, 146, + 2, 34, 6, 146, 5, 39, 10, 154, 18, 70, 99, 151, 1, 150, 3, 148, 4, 247, 255, 250, 106, 96, 44, 40, 0, 221, 7, 120, 51, + 43, 0, 209, 3, 224, 3, 32, 3, 66, 64, 224, 0, 72, 3, 176, 13, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 64, 255, + 255, 216, 234, 181, 240, 176, 135, 28, 28, 147, 2, 28, 11, 51, 4, 0, 155, 145, 3, 88, 25, 28, 6, 28, 11, 67, 99, 32, + 128, 2, 64, 28, 23, 66, 131, 217, 2, 240, 2, 249, 135, 144, 2, 155, 3, 32, 1, 51, 4, 0, 155, 66, 64, 147, 5, 224, 28, + 154, 2, 28, 37, 66, 148, 217, 0, 28, 21, 4, 43, 12, 27, 147, 4, 155, 12, 28, 48, 147, 0, 153, 3, 28, 58, 155, 4, 247, + 255, 255, 67, 40, 0, 219, 12, 154, 4, 25, 127, 26, 164, 154, 5, 4, 36, 89, 147, 12, 36, 67, 93, 155, 12, 25, 91, 147, + 12, 44, 0, 209, 224, 176, 7, 188, 240, 188, 2, 71, 8, 181, 240, 176, 135, 28, 28, 147, 2, 28, 11, 51, 4, 0, 155, 145, + 3, 88, 25, 28, 6, 28, 11, 67, 99, 32, 128, 2, 64, 28, 23, 66, 131, 217, 2, 240, 2, 249, 73, 144, 2, 155, 3, 32, 1, 51, + 4, 0, 155, 66, 64, 147, 5, 224, 28, 154, 2, 28, 37, 66, 148, 217, 0, 28, 21, 4, 43, 12, 27, 147, 4, 155, 12, 28, 48, + 147, 0, 153, 3, 28, 58, 155, 4, 247, 255, 255, 73, 40, 0, 219, 12, 154, 4, 25, 127, 26, 164, 154, 5, 4, 36, 89, 147, + 12, 36, 67, 93, 155, 12, 25, 91, 147, 12, 44, 0, 209, 224, 176, 7, 188, 240, 188, 2, 71, 8, 181, 240, 176, 139, 76, + 181, 144, 8, 104, 32, 73, 181, 0, 67, 34, 0, 82, 90, 73, 180, 37, 0, 82, 90, 75, 179, 38, 164, 84, 29, 75, 179, 73, + 179, 84, 29, 67, 112, 35, 120, 74, 178, 66, 91, 24, 64, 96, 19, 153, 8, 247, 255, 251, 175, 40, 0, 218, 0, 225, 73, + 104, 35, 74, 172, 67, 94, 33, 1, 24, 182, 0, 154, 115, 177, 24, 210, 78, 170, 0, 146, 89, 144, 24, 178, 40, 0, 208, + 101, 121, 82, 42, 0, 209, 3, 74, 167, 120, 18, 66, 17, 208, 42, 38, 164, 67, 115, 77, 161, 32, 0, 24, 234, 28, 17, 49, + 8, 113, 136, 76, 162, 73, 162, 24, 235, 96, 33, 28, 17, 136, 210, 49, 144, 51, 14, 104, 8, 39, 1, 146, 0, 147, 2, 33, + 161, 35, 0, 34, 254, 151, 1, 247, 254, 250, 87, 75, 155, 96, 35, 75, 143, 40, 0, 218, 4, 104, 27, 67, 94, 25, 173, 115, + 175, 224, 253, 104, 27, 67, 94, 25, 173, 53, 8, 121, 171, 51, 1, 113, 171, 76, 135, 72, 147, 104, 35, 39, 164, 0, 154, + 24, 211, 74, 139, 0, 155, 24, 211, 121, 30, 28, 49, 247, 253, 255, 185, 104, 32, 75, 133, 67, 120, 28, 49, 24, 192, + 247, 255, 254, 24, 28, 5, 28, 41, 72, 137, 247, 253, 255, 173, 28, 171, 43, 1, 216, 13, 104, 32, 73, 126, 67, 71, 24, + 120, 247, 255, 253, 118, 74, 124, 35, 121, 66, 91, 96, 19, 33, 0, 104, 35, 74, 118, 224, 71, 45, 0, 218, 0, 224, 201, + 104, 35, 74, 115, 33, 1, 84, 209, 74, 115, 84, 214, 224, 186, 39, 1, 113, 85, 38, 0, 151, 6, 28, 37, 28, 50, 30, 83, + 65, 154, 146, 9, 42, 0, 209, 5, 75, 112, 120, 27, 7, 220, 213, 1, 47, 0, 209, 51, 72, 115, 28, 49, 247, 253, 255, 125, + 76, 99, 33, 164, 104, 32, 74, 102, 67, 72, 6, 51, 14, 27, 28, 25, 24, 128, 147, 5, 247, 255, 253, 215, 144, 7, 153, + 7, 72, 105, 247, 253, 255, 108, 155, 7, 51, 2, 43, 1, 216, 21, 155, 9, 43, 0, 208, 18, 104, 32, 33, 164, 75, 95, 67, + 72, 74, 96, 96, 26, 74, 89, 24, 128, 247, 255, 253, 45, 74, 88, 35, 121, 66, 91, 96, 19, 104, 35, 74, 82, 33, 0, 84, + 209, 224, 149, 155, 7, 43, 0, 218, 90, 47, 0, 208, 82, 104, 42, 39, 164, 0, 147, 67, 122, 76, 88, 73, 77, 32, 0, 81, + 24, 24, 139, 28, 25, 49, 8, 113, 136, 76, 78, 73, 78, 96, 33, 28, 25, 49, 144, 104, 8, 73, 71, 136, 219, 24, 82, 147, + 0, 50, 14, 35, 1, 147, 1, 146, 2, 35, 0, 33, 161, 34, 254, 247, 254, 249, 174, 75, 70, 144, 5, 96, 35, 40, 0, 218, 10, + 104, 43, 74, 61, 67, 95, 72, 70, 24, 191, 36, 1, 0, 155, 33, 0, 115, 188, 80, 25, 224, 14, 104, 43, 74, 56, 67, 95, + 24, 191, 55, 8, 121, 186, 36, 1, 50, 1, 113, 186, 0, 154, 24, 211, 74, 53, 0, 155, 24, 211, 113, 92, 75, 44, 34, 164, + 104, 27, 72, 58, 67, 83, 74, 46, 153, 5, 24, 211, 123, 155, 39, 0, 28, 26, 147, 6, 247, 253, 255, 1, 75, 45, 120, 27, + 7, 216, 213, 3, 153, 5, 15, 207, 224, 0, 54, 1, 154, 6, 66, 150, 218, 0, 231, 103, 224, 36, 75, 30, 72, 37, 104, 27, + 34, 1, 0, 153, 24, 201, 0, 137, 80, 10, 70, 108, 24, 65, 32, 23, 93, 4, 113, 12, 152, 8, 0, 89, 137, 4, 72, 23, 82, + 12, 152, 8, 137, 68, 72, 22, 82, 12, 73, 22, 36, 23, 84, 202, 70, 105, 74, 21, 92, 97, 84, 209, 74, 27, 75, 24, 32, + 0, 96, 26, 75, 20, 34, 0, 96, 26, 224, 20, 76, 12, 74, 17, 35, 122, 66, 91, 104, 32, 96, 19, 35, 164, 67, 88, 75, 13, + 24, 192, 247, 255, 252, 149, 104, 35, 74, 8, 33, 0, 84, 209, 72, 21, 247, 253, 254, 188, 32, 3, 66, 64, 176, 11, 188, + 240, 188, 2, 71, 8, 19, 112, 107, 104, 19, 112, 107, 60, 19, 112, 107, 68, 19, 112, 107, 84, 19, 112, 96, 64, 19, 114, + 197, 160, 19, 112, 107, 32, 19, 114, 198, 232, 19, 112, 1, 14, 19, 112, 96, 56, 0, 152, 150, 128, 0, 15, 66, 64, 19, + 112, 104, 98, 19, 112, 104, 128, 19, 112, 104, 103, 19, 112, 107, 108, 19, 112, 104, 157, 19, 112, 104, 198, 181, 16, + 75, 16, 104, 28, 75, 16, 0, 160, 88, 195, 43, 0, 208, 22, 74, 14, 93, 19, 43, 0, 208, 14, 75, 13, 33, 16, 85, 25, 35, + 0, 85, 19, 74, 12, 33, 0, 80, 131, 25, 0, 75, 11, 0, 128, 24, 192, 34, 20, 240, 1, 254, 179, 75, 4, 0, 164, 34, 0, 80, + 226, 188, 16, 188, 1, 71, 0, 19, 112, 107, 104, 19, 112, 107, 76, 19, 112, 107, 84, 19, 112, 96, 64, 19, 112, 107, 108, + 19, 114, 198, 232, 181, 240, 176, 135, 40, 1, 208, 4, 40, 2, 208, 6, 32, 0, 144, 2, 224, 5, 33, 1, 145, 2, 37, 1, 224, + 2, 34, 1, 146, 2, 37, 0, 78, 114, 34, 0, 104, 51, 32, 0, 104, 155, 0, 175, 96, 154, 247, 252, 255, 149, 74, 111, 35, + 100, 66, 91, 96, 19, 72, 110, 172, 4, 247, 253, 254, 67, 25, 228, 224, 177, 75, 105, 74, 107, 104, 30, 35, 1, 81, 211, + 72, 106, 75, 107, 33, 0, 81, 193, 85, 89, 0, 169, 25, 73, 74, 105, 0, 136, 35, 0, 80, 131, 35, 1, 66, 91, 96, 35, 0, + 203, 24, 243, 103, 93, 73, 101, 111, 27, 96, 13, 43, 0, 209, 57, 104, 179, 32, 1, 51, 68, 25, 219, 104, 27, 66, 24, + 209, 2, 28, 40, 247, 253, 252, 24, 73, 86, 104, 11, 104, 155, 51, 68, 25, 219, 104, 27, 7, 218, 213, 39, 28, 40, 247, + 254, 251, 77, 35, 140, 0, 219, 96, 32, 24, 192, 40, 1, 216, 4, 35, 100, 74, 78, 66, 91, 96, 19, 224, 115, 28, 40, 247, + 254, 249, 219, 144, 3, 96, 32, 32, 20, 247, 253, 248, 232, 72, 71, 153, 3, 104, 3, 104, 155, 51, 68, 25, 219, 104, 26, + 41, 0, 219, 4, 75, 75, 64, 26, 75, 75, 66, 154, 208, 3, 28, 40, 247, 254, 251, 41, 96, 32, 0, 168, 25, 64, 0, 192, 24, + 51, 111, 27, 43, 0, 208, 82, 74, 66, 73, 61, 104, 19, 48, 88, 0, 155, 34, 1, 80, 90, 24, 48, 247, 255, 253, 183, 40, + 0, 209, 67, 73, 60, 74, 56, 104, 11, 33, 1, 0, 155, 80, 153, 74, 53, 80, 152, 74, 59, 88, 155, 43, 0, 208, 1, 72, 58, + 224, 0, 72, 58, 247, 253, 253, 200, 72, 57, 247, 253, 253, 197, 32, 100, 247, 253, 248, 172, 78, 55, 75, 56, 32, 1, + 96, 51, 75, 55, 112, 24, 72, 55, 247, 253, 253, 185, 75, 44, 32, 164, 104, 27, 74, 53, 67, 88, 24, 128, 74, 53, 92, + 209, 75, 53, 34, 0, 147, 0, 35, 1, 247, 255, 253, 11, 73, 46, 75, 50, 34, 0, 96, 32, 112, 10, 96, 51, 40, 0, 218, 7, + 72, 48, 247, 253, 253, 160, 28, 40, 247, 253, 251, 199, 75, 46, 224, 3, 72, 46, 247, 253, 253, 152, 35, 1, 96, 35, 224, + 2, 28, 40, 247, 253, 251, 188, 53, 1, 52, 4, 55, 4, 152, 2, 66, 133, 220, 0, 231, 73, 72, 39, 247, 252, 254, 210, 73, + 12, 34, 4, 104, 11, 104, 155, 96, 154, 154, 4, 155, 5, 42, 1, 209, 6, 74, 9, 33, 0, 96, 17, 43, 1, 209, 5, 35, 2, 224, + 2, 43, 1, 209, 1, 74, 4, 96, 19, 75, 3, 104, 24, 176, 7, 188, 240, 188, 2, 71, 8, 19, 112, 96, 60, 19, 112, 107, 32, + 19, 112, 104, 227, 19, 112, 107, 108, 19, 112, 107, 76, 19, 112, 107, 84, 19, 114, 198, 232, 19, 112, 107, 104, 0, 0, + 57, 5, 0, 0, 16, 5, 19, 112, 107, 44, 19, 112, 105, 118, 19, 112, 105, 135, 19, 112, 105, 154, 19, 112, 96, 56, 0, 152, + 150, 128, 19, 112, 107, 20, 19, 112, 105, 203, 19, 114, 197, 160, 19, 112, 96, 64, 19, 112, 107, 160, 0, 7, 161, 32, + 19, 112, 105, 176, 255, 255, 251, 162, 19, 112, 105, 200, 19, 112, 17, 185, 181, 0, 30, 2, 208, 1, 35, 0, 96, 19, 75, + 19, 73, 19, 104, 27, 32, 0, 92, 201, 41, 1, 209, 28, 73, 17, 92, 201, 41, 16, 208, 24, 42, 0, 208, 9, 0, 152, 24, 192, + 0, 192, 24, 195, 24, 89, 49, 4, 72, 12, 0, 137, 88, 11, 96, 19, 75, 7, 74, 9, 104, 27, 0, 153, 24, 201, 92, 210, 0, + 201, 24, 203, 24, 155, 51, 20, 74, 5, 0, 155, 88, 152, 188, 2, 71, 8, 70, 192, 19, 112, 107, 104, 19, 112, 107, 84, + 19, 112, 96, 64, 19, 114, 197, 160, 181, 240, 176, 139, 75, 104, 104, 26, 75, 104, 0, 145, 88, 203, 43, 0, 209, 0, 224, + 188, 75, 102, 33, 16, 84, 153, 75, 102, 120, 25, 75, 102, 41, 0, 208, 1, 73, 101, 224, 0, 73, 101, 39, 164, 67, 122, + 78, 101, 96, 25, 172, 4, 35, 0, 24, 178, 130, 99, 130, 163, 50, 144, 104, 16, 28, 33, 247, 254, 250, 55, 77, 88, 104, + 43, 0, 154, 24, 211, 74, 94, 0, 155, 24, 210, 121, 145, 121, 35, 66, 153, 209, 25, 121, 209, 121, 99, 66, 153, 209, + 21, 28, 19, 137, 17, 137, 34, 51, 8, 66, 145, 209, 15, 136, 89, 137, 98, 66, 145, 209, 11, 121, 25, 123, 162, 66, 145, + 209, 7, 121, 89, 123, 226, 66, 145, 209, 3, 121, 154, 124, 35, 66, 154, 208, 6, 168, 4, 247, 253, 251, 142, 72, 77, + 247, 253, 252, 184, 224, 119, 28, 32, 247, 253, 251, 135, 74, 74, 75, 68, 96, 26, 104, 43, 67, 123, 24, 242, 50, 144, + 104, 16, 92, 241, 247, 253, 255, 166, 40, 0, 219, 105, 104, 43, 67, 95, 25, 246, 104, 178, 42, 0, 208, 9, 28, 51, 51, + 144, 6, 18, 104, 24, 121, 241, 14, 18, 247, 253, 255, 136, 40, 0, 219, 91, 75, 53, 120, 26, 75, 53, 42, 0, 208, 1, 74, + 52, 224, 0, 74, 52, 76, 46, 96, 26, 104, 34, 38, 164, 67, 114, 77, 50, 32, 0, 24, 171, 28, 25, 49, 8, 113, 136, 136, + 219, 49, 136, 24, 170, 104, 8, 50, 14, 33, 1, 147, 0, 145, 1, 146, 2, 33, 161, 34, 254, 35, 0, 247, 253, 254, 246, 40, + 0, 218, 9, 104, 32, 35, 1, 67, 70, 25, 168, 115, 131, 33, 0, 247, 254, 253, 104, 72, 39, 224, 51, 104, 35, 79, 35, 28, + 48, 67, 88, 24, 40, 28, 2, 50, 8, 121, 145, 49, 1, 113, 145, 0, 154, 24, 211, 0, 155, 24, 251, 121, 25, 247, 254, 255, + 121, 40, 0, 219, 29, 104, 35, 67, 94, 0, 154, 24, 211, 0, 155, 24, 251, 25, 112, 121, 25, 247, 255, 250, 39, 40, 0, + 219, 19, 104, 35, 0, 154, 24, 210, 0, 146, 24, 191, 121, 57, 74, 11, 84, 209, 74, 20, 33, 1, 84, 209, 224, 8, 72, 19, + 224, 6, 72, 19, 224, 4, 72, 19, 224, 2, 72, 19, 224, 0, 72, 19, 176, 11, 188, 240, 188, 2, 71, 8, 19, 112, 107, 104, + 19, 112, 107, 76, 19, 112, 96, 64, 19, 112, 1, 15, 19, 112, 96, 56, 0, 15, 66, 64, 0, 3, 13, 64, 19, 114, 197, 160, + 19, 114, 198, 232, 19, 112, 101, 128, 0, 12, 53, 0, 255, 255, 252, 20, 19, 112, 107, 84, 255, 255, 252, 15, 255, 255, + 252, 23, 255, 255, 252, 22, 255, 255, 252, 19, 255, 255, 252, 18, 181, 240, 176, 131, 76, 59, 75, 60, 104, 34, 38, 1, + 0, 146, 88, 211, 43, 0, 208, 105, 75, 57, 104, 27, 104, 155, 28, 25, 49, 68, 24, 138, 104, 18, 66, 22, 208, 96, 34, + 0, 32, 0, 96, 154, 247, 252, 253, 64, 104, 32, 247, 253, 255, 203, 30, 7, 218, 3, 104, 32, 247, 253, 255, 198, 28, 7, + 32, 60, 247, 252, 254, 212, 77, 44, 76, 42, 104, 43, 72, 44, 104, 154, 104, 35, 50, 68, 0, 155, 24, 211, 104, 27, 28, + 57, 28, 26, 147, 1, 247, 253, 251, 219, 104, 34, 72, 35, 0, 147, 33, 1, 80, 25, 38, 1, 47, 0, 219, 53, 153, 1, 72, 34, + 64, 8, 73, 34, 66, 136, 209, 47, 72, 34, 33, 0, 84, 129, 74, 27, 32, 0, 80, 152, 247, 255, 254, 191, 40, 0, 219, 15, + 104, 35, 73, 23, 0, 154, 32, 0, 80, 80, 73, 26, 72, 27, 84, 206, 247, 252, 253, 3, 104, 43, 34, 4, 104, 155, 38, 0, + 96, 154, 224, 21, 104, 35, 74, 15, 0, 155, 80, 158, 72, 21, 28, 57, 247, 253, 251, 171, 104, 35, 72, 16, 33, 0, 84, + 193, 32, 100, 247, 252, 254, 142, 72, 14, 247, 252, 252, 235, 104, 43, 34, 4, 104, 155, 96, 154, 32, 100, 247, 252, + 254, 132, 176, 3, 28, 48, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 104, 19, 112, 107, 108, 19, 112, 96, 60, 19, + 112, 105, 221, 0, 0, 49, 5, 0, 0, 16, 5, 19, 112, 107, 84, 19, 112, 17, 185, 19, 112, 105, 249, 181, 240, 176, 131, + 76, 42, 75, 43, 104, 34, 0, 146, 88, 211, 34, 0, 146, 1, 43, 0, 208, 70, 247, 255, 255, 103, 104, 35, 73, 38, 0, 154, + 88, 81, 41, 0, 209, 62, 73, 37, 92, 201, 41, 0, 208, 58, 39, 164, 28, 56, 67, 88, 78, 34, 24, 211, 77, 34, 0, 155, 24, + 243, 25, 64, 121, 25, 247, 255, 249, 57, 40, 0, 219, 44, 104, 35, 0, 154, 24, 210, 0, 145, 24, 113, 0, 210, 121, 9, + 67, 95, 24, 211, 24, 203, 29, 26, 51, 20, 0, 146, 0, 155, 25, 120, 25, 82, 25, 91, 247, 255, 249, 118, 40, 0, 219, 23, + 104, 35, 74, 20, 0, 153, 88, 138, 42, 0, 208, 13, 24, 201, 0, 136, 24, 54, 121, 48, 0, 201, 24, 201, 24, 9, 49, 4, 0, + 137, 35, 128, 89, 73, 1, 27, 66, 153, 209, 3, 28, 19, 30, 90, 65, 147, 147, 1, 152, 1, 176, 3, 188, 240, 188, 2, 71, + 8, 70, 192, 19, 112, 107, 104, 19, 112, 107, 76, 19, 112, 107, 108, 19, 112, 107, 84, 19, 114, 198, 232, 19, 114, 197, + 160, 19, 112, 107, 44, 181, 240, 176, 135, 75, 81, 144, 3, 104, 27, 146, 4, 43, 0, 209, 8, 75, 79, 104, 26, 75, 79, + 0, 146, 88, 211, 43, 0, 208, 1, 75, 78, 96, 24, 75, 78, 104, 27, 43, 0, 208, 9, 75, 73, 104, 26, 75, 76, 0, 146, 88, + 208, 40, 1, 221, 2, 33, 1, 80, 209, 224, 126, 4, 9, 12, 9, 79, 70, 38, 4, 36, 0, 145, 5, 247, 255, 254, 231, 30, 67, + 65, 152, 104, 59, 66, 64, 64, 4, 43, 0, 208, 6, 75, 60, 74, 64, 104, 27, 0, 155, 88, 155, 43, 3, 208, 101, 44, 0, 219, + 5, 75, 56, 74, 60, 104, 27, 92, 211, 43, 1, 208, 7, 75, 53, 33, 1, 104, 26, 75, 55, 0, 146, 36, 1, 80, 209, 66, 100, + 75, 49, 74, 52, 104, 27, 0, 155, 88, 154, 42, 0, 209, 75, 74, 46, 88, 154, 75, 50, 42, 0, 208, 1, 74, 50, 224, 0, 74, + 50, 96, 26, 28, 99, 208, 29, 32, 0, 247, 252, 252, 12, 77, 47, 34, 0, 104, 43, 32, 164, 104, 155, 96, 154, 75, 35, 74, + 45, 104, 27, 67, 88, 24, 128, 74, 44, 92, 209, 154, 4, 155, 5, 146, 0, 154, 3, 247, 255, 250, 15, 28, 4, 72, 40, 247, + 252, 251, 245, 104, 43, 34, 4, 104, 155, 96, 154, 74, 38, 75, 30, 96, 26, 44, 0, 218, 5, 75, 22, 33, 1, 104, 26, 75, + 25, 0, 146, 80, 209, 75, 22, 104, 27, 43, 0, 208, 6, 75, 17, 104, 26, 75, 20, 0, 146, 88, 211, 43, 0, 209, 18, 75, 14, + 74, 17, 104, 27, 0, 153, 88, 138, 42, 0, 209, 5, 74, 15, 92, 211, 43, 1, 209, 1, 44, 0, 218, 7, 62, 1, 46, 0, 209, 137, + 67, 228, 15, 224, 224, 2, 32, 0, 224, 0, 32, 1, 176, 7, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 12, 19, 112, + 107, 104, 19, 112, 107, 44, 19, 112, 106, 224, 19, 112, 106, 228, 19, 112, 107, 108, 19, 112, 107, 84, 19, 112, 96, + 56, 0, 152, 150, 128, 0, 12, 53, 0, 19, 112, 96, 60, 19, 114, 197, 160, 19, 112, 96, 64, 19, 112, 17, 185, 0, 7, 161, + 32, 181, 240, 176, 133, 75, 49, 28, 23, 104, 26, 75, 49, 0, 146, 88, 211, 144, 2, 32, 0, 43, 0, 209, 85, 4, 9, 12, 9, + 36, 0, 145, 3, 247, 255, 254, 56, 40, 0, 208, 2, 44, 0, 219, 7, 224, 0, 36, 0, 75, 38, 74, 40, 104, 27, 92, 211, 43, + 1, 208, 7, 75, 35, 33, 1, 104, 26, 75, 37, 0, 146, 36, 1, 80, 209, 66, 100, 77, 31, 75, 34, 104, 42, 0, 146, 88, 211, + 43, 0, 209, 226, 73, 32, 74, 32, 96, 17, 28, 98, 208, 26, 78, 31, 32, 0, 104, 50, 104, 146, 96, 147, 247, 252, 251, + 105, 104, 43, 32, 164, 67, 88, 74, 27, 24, 128, 74, 27, 92, 209, 154, 2, 155, 3, 151, 0, 247, 255, 249, 177, 28, 4, + 72, 24, 247, 252, 251, 89, 104, 51, 34, 4, 104, 155, 96, 154, 74, 22, 75, 16, 96, 26, 44, 0, 218, 5, 75, 9, 33, 1, 104, + 26, 75, 11, 0, 146, 80, 209, 75, 6, 104, 26, 75, 8, 0, 146, 88, 211, 43, 0, 209, 176, 44, 0, 219, 174, 32, 1, 176, 5, + 188, 240, 188, 2, 71, 8, 19, 112, 107, 104, 19, 112, 107, 44, 19, 112, 107, 84, 19, 112, 107, 108, 0, 15, 66, 64, 19, + 112, 96, 56, 19, 112, 96, 60, 19, 114, 197, 160, 19, 112, 96, 64, 19, 112, 17, 185, 0, 7, 161, 32, 181, 240, 176, 137, + 74, 95, 104, 19, 43, 0, 209, 6, 75, 94, 104, 27, 105, 153, 96, 17, 106, 26, 75, 93, 96, 26, 75, 92, 77, 90, 104, 28, + 38, 0, 28, 55, 104, 43, 55, 8, 0, 191, 80, 252, 28, 32, 33, 0, 34, 96, 240, 1, 249, 253, 104, 43, 33, 96, 88, 248, 240, + 0, 249, 214, 52, 127, 33, 31, 54, 1, 67, 140, 46, 8, 209, 234, 37, 8, 38, 31, 28, 32, 33, 0, 34, 96, 240, 1, 249, 235, + 61, 1, 28, 32, 33, 96, 52, 127, 240, 0, 249, 195, 67, 180, 45, 0, 209, 241, 75, 72, 34, 255, 96, 28, 75, 68, 39, 128, + 104, 29, 35, 255, 2, 18, 4, 27, 76, 69, 38, 0, 5, 255, 146, 2, 147, 3, 33, 0, 96, 37, 34, 96, 28, 40, 240, 1, 249, 206, + 28, 40, 240, 0, 249, 152, 28, 50, 100, 104, 104, 35, 30, 81, 65, 138, 5, 210, 96, 90, 104, 35, 34, 0, 96, 154, 104, + 35, 33, 31, 97, 159, 53, 127, 67, 141, 104, 34, 28, 40, 146, 5, 240, 0, 249, 132, 144, 6, 28, 40, 240, 0, 249, 128, + 144, 1, 28, 40, 240, 0, 249, 124, 144, 7, 28, 40, 240, 0, 249, 120, 35, 255, 2, 27, 153, 2, 147, 4, 34, 255, 155, 1, + 4, 18, 64, 11, 146, 1, 153, 3, 154, 7, 2, 27, 64, 10, 10, 18, 67, 19, 14, 0, 154, 6, 67, 3, 32, 224, 64, 16, 33, 2, + 67, 8, 154, 5, 6, 0, 67, 3, 96, 19, 104, 34, 35, 128, 4, 91, 97, 19, 104, 34, 33, 96, 97, 83, 204, 1, 54, 1, 240, 0, + 249, 100, 46, 6, 209, 175, 76, 22, 77, 26, 104, 32, 105, 110, 240, 0, 249, 75, 144, 2, 104, 32, 240, 0, 249, 71, 28, + 7, 104, 32, 240, 0, 249, 67, 144, 3, 104, 32, 240, 0, 249, 63, 155, 4, 153, 1, 64, 31, 155, 3, 2, 63, 64, 11, 10, 27, + 67, 31, 154, 2, 14, 3, 28, 56, 67, 24, 35, 224, 64, 19, 33, 2, 67, 11, 6, 27, 67, 24, 96, 48, 105, 104, 33, 96, 240, + 0, 249, 57, 176, 9, 188, 240, 188, 1, 71, 0, 70, 192, 19, 112, 107, 100, 19, 112, 96, 60, 19, 112, 107, 72, 19, 112, + 107, 40, 19, 114, 195, 192, 181, 248, 75, 16, 39, 128, 104, 28, 38, 0, 4, 127, 28, 32, 247, 252, 252, 153, 46, 3, 208, + 15, 28, 37, 35, 31, 53, 127, 67, 157, 107, 104, 240, 1, 248, 190, 96, 103, 96, 32, 33, 96, 28, 32, 240, 0, 249, 18, + 54, 1, 28, 44, 231, 234, 28, 32, 33, 96, 240, 0, 249, 11, 188, 248, 188, 1, 71, 0, 19, 112, 107, 40, 181, 240, 176, + 131, 247, 255, 255, 12, 247, 255, 255, 214, 76, 65, 75, 66, 104, 34, 104, 24, 77, 65, 97, 144, 104, 89, 78, 65, 97, + 209, 104, 154, 79, 64, 96, 42, 104, 218, 105, 27, 96, 50, 96, 59, 33, 96, 240, 0, 249, 1, 104, 35, 33, 0, 105, 154, + 100, 211, 105, 154, 100, 145, 105, 155, 28, 24, 147, 1, 240, 0, 248, 209, 155, 1, 104, 34, 100, 88, 104, 59, 105, 145, + 108, 91, 34, 255, 2, 18, 64, 26, 2, 16, 34, 255, 4, 18, 64, 26, 10, 18, 67, 2, 14, 24, 67, 2, 32, 224, 64, 3, 39, 2, + 67, 59, 6, 24, 28, 19, 67, 3, 96, 11, 104, 35, 34, 128, 105, 153, 4, 18, 96, 74, 105, 154, 33, 0, 96, 145, 105, 153, + 34, 128, 5, 210, 97, 138, 105, 153, 34, 128, 4, 82, 97, 10, 105, 153, 97, 74, 105, 152, 33, 96, 240, 0, 248, 179, 104, + 35, 33, 96, 105, 216, 240, 0, 248, 194, 104, 35, 33, 0, 105, 218, 100, 211, 105, 218, 100, 145, 105, 223, 28, 56, 240, + 0, 248, 147, 33, 96, 100, 120, 104, 40, 240, 0, 248, 179, 104, 47, 104, 35, 28, 56, 100, 251, 35, 0, 100, 187, 240, + 0, 248, 134, 33, 96, 100, 120, 104, 40, 240, 0, 248, 146, 104, 48, 33, 96, 240, 0, 248, 162, 104, 53, 104, 35, 33, 0, + 100, 235, 100, 169, 28, 40, 240, 0, 248, 117, 33, 96, 100, 104, 104, 48, 240, 0, 248, 129, 176, 3, 188, 240, 188, 1, + 71, 0, 70, 192, 19, 112, 96, 60, 19, 114, 195, 192, 19, 112, 107, 16, 19, 112, 107, 96, 19, 112, 107, 92, 181, 248, + 76, 35, 75, 35, 96, 35, 240, 0, 248, 74, 40, 0, 219, 58, 240, 0, 249, 121, 74, 32, 104, 131, 96, 32, 96, 26, 104, 32, + 35, 1, 104, 130, 104, 17, 66, 11, 209, 252, 33, 252, 240, 0, 248, 91, 38, 128, 39, 128, 76, 23, 37, 0, 4, 118, 1, 127, + 104, 35, 33, 4, 108, 219, 81, 94, 104, 35, 108, 219, 89, 88, 53, 4, 240, 0, 248, 75, 66, 189, 209, 243, 247, 255, 255, + 65, 104, 35, 34, 2, 51, 84, 112, 26, 247, 252, 254, 95, 104, 35, 32, 0, 104, 154, 105, 155, 108, 91, 97, 147, 104, 35, + 34, 4, 104, 155, 96, 154, 104, 35, 74, 8, 104, 155, 96, 26, 104, 35, 104, 155, 104, 27, 224, 1, 32, 1, 66, 64, 188, + 248, 188, 2, 71, 8, 19, 112, 96, 60, 19, 114, 199, 16, 0, 1, 0, 32, 0, 1, 0, 33, 181, 8, 33, 224, 72, 4, 2, 9, 240, + 1, 249, 94, 75, 3, 96, 24, 23, 192, 188, 8, 188, 2, 71, 8, 19, 112, 163, 160, 19, 112, 96, 68, 71, 112, 71, 112, 181, + 16, 28, 4, 240, 1, 249, 42, 28, 32, 188, 16, 188, 2, 71, 8, 181, 16, 28, 4, 240, 1, 249, 34, 28, 32, 188, 16, 188, 2, + 71, 8, 181, 16, 28, 4, 240, 1, 249, 26, 28, 32, 188, 16, 188, 2, 71, 8, 181, 8, 240, 1, 249, 27, 188, 8, 188, 1, 71, + 0, 181, 8, 240, 1, 249, 21, 188, 8, 188, 1, 71, 0, 181, 8, 240, 1, 249, 15, 188, 8, 188, 1, 71, 0, 181, 8, 75, 12, 28, + 1, 34, 32, 104, 24, 240, 1, 249, 45, 40, 0, 209, 13, 72, 9, 240, 1, 249, 56, 240, 0, 249, 67, 32, 200, 247, 252, 250, + 165, 240, 0, 249, 72, 32, 200, 247, 252, 250, 160, 231, 244, 188, 8, 188, 2, 71, 8, 19, 112, 96, 68, 19, 112, 106, 17, + 181, 8, 75, 4, 28, 1, 104, 24, 240, 1, 248, 170, 188, 8, 188, 1, 71, 0, 70, 192, 19, 112, 96, 68, 181, 248, 76, 13, + 28, 15, 104, 33, 28, 30, 28, 24, 28, 21, 67, 81, 240, 1, 248, 208, 28, 56, 28, 41, 28, 50, 247, 255, 252, 119, 35, 1, + 40, 0, 208, 5, 104, 33, 28, 48, 67, 105, 240, 1, 248, 203, 35, 0, 28, 24, 188, 248, 188, 2, 71, 8, 19, 114, 200, 12, + 181, 16, 76, 11, 104, 32, 40, 0, 208, 3, 240, 0, 252, 43, 35, 0, 96, 35, 76, 8, 104, 35, 43, 0, 209, 3, 72, 7, 247, + 251, 250, 220, 96, 32, 74, 6, 35, 1, 66, 91, 96, 19, 188, 16, 188, 1, 71, 0, 19, 112, 107, 124, 19, 112, 107, 116, 0, + 0, 128, 32, 19, 112, 96, 24, 181, 56, 75, 14, 104, 24, 40, 0, 208, 1, 247, 251, 250, 227, 76, 12, 75, 10, 104, 32, 37, + 0, 96, 29, 40, 0, 208, 2, 240, 0, 252, 2, 96, 37, 75, 8, 104, 24, 40, 0, 208, 1, 240, 0, 251, 95, 75, 5, 34, 0, 96, + 26, 188, 56, 188, 1, 71, 0, 70, 192, 19, 112, 107, 116, 19, 112, 107, 124, 19, 112, 107, 120, 181, 240, 176, 135, 75, + 38, 28, 7, 104, 24, 145, 5, 40, 0, 208, 1, 247, 251, 250, 188, 75, 34, 77, 35, 34, 0, 96, 26, 104, 43, 43, 0, 209, 25, + 75, 33, 36, 0, 104, 24, 247, 255, 248, 198, 78, 31, 28, 48, 247, 255, 249, 236, 75, 30, 96, 24, 40, 0, 208, 43, 154, + 5, 104, 51, 33, 0, 144, 0, 146, 1, 72, 27, 34, 0, 148, 2, 240, 0, 249, 240, 96, 40, 40, 0, 208, 30, 77, 24, 104, 44, + 44, 0, 208, 11, 72, 23, 28, 57, 34, 6, 240, 0, 254, 216, 40, 0, 208, 19, 28, 32, 240, 0, 251, 181, 35, 0, 96, 43, 75, + 11, 28, 57, 104, 24, 240, 0, 251, 56, 75, 13, 28, 4, 96, 24, 40, 0, 208, 4, 72, 12, 28, 57, 34, 6, 240, 0, 254, 240, + 176, 7, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 107, 116, 19, 112, 107, 120, 19, 112, 107, 104, 19, 114, + 200, 12, 19, 114, 200, 16, 19, 112, 75, 241, 19, 112, 107, 124, 19, 112, 96, 72, 181, 8, 28, 3, 28, 10, 32, 0, 28, 25, + 35, 0, 240, 0, 255, 214, 188, 8, 188, 1, 71, 0, 181, 8, 32, 1, 33, 0, 34, 0, 35, 0, 240, 0, 255, 204, 188, 8, 188, 2, + 71, 8, 181, 8, 32, 17, 33, 0, 34, 0, 35, 0, 240, 0, 255, 194, 188, 8, 188, 2, 71, 8, 181, 8, 32, 18, 33, 0, 34, 0, 35, + 0, 240, 0, 255, 184, 188, 8, 188, 2, 71, 8, 181, 56, 28, 5, 28, 12, 30, 19, 221, 4, 32, 2, 28, 41, 28, 34, 240, 0, 255, + 171, 188, 56, 188, 1, 71, 0, 181, 56, 28, 5, 28, 12, 30, 19, 221, 4, 32, 9, 28, 41, 28, 34, 240, 0, 255, 158, 188, 56, + 188, 1, 71, 0, 181, 8, 28, 3, 28, 10, 32, 5, 28, 25, 35, 0, 240, 0, 255, 147, 188, 8, 188, 1, 71, 0, 181, 8, 28, 3, + 28, 10, 32, 6, 28, 25, 35, 0, 240, 0, 255, 136, 188, 8, 188, 1, 71, 0, 181, 56, 28, 5, 28, 12, 28, 19, 28, 41, 28, 34, + 32, 16, 240, 0, 255, 124, 188, 56, 188, 2, 71, 8, 181, 8, 32, 128, 33, 0, 34, 0, 35, 0, 240, 0, 255, 114, 188, 8, 188, + 1, 71, 0, 181, 8, 32, 129, 33, 0, 34, 0, 35, 0, 240, 0, 255, 104, 188, 8, 188, 1, 71, 0, 181, 0, 35, 0, 224, 3, 51, + 1, 6, 27, 14, 27, 8, 64, 40, 0, 209, 249, 30, 88, 6, 0, 14, 0, 188, 2, 71, 8, 0, 0, 181, 240, 176, 133, 144, 1, 32, + 84, 145, 3, 146, 2, 28, 30, 159, 11, 247, 251, 249, 182, 28, 4, 30, 48, 209, 1, 32, 128, 0, 128, 247, 251, 249, 175, + 28, 5, 32, 128, 2, 0, 97, 32, 247, 255, 255, 218, 75, 125, 117, 32, 97, 227, 154, 10, 75, 124, 96, 37, 96, 30, 11, 211, + 67, 115, 97, 163, 155, 12, 98, 231, 43, 0, 208, 50, 33, 0, 28, 50, 28, 40, 240, 0, 254, 106, 35, 87, 112, 43, 35, 66, + 112, 107, 35, 70, 112, 171, 35, 83, 112, 235, 28, 48, 247, 255, 255, 188, 114, 40, 159, 10, 73, 111, 14, 59, 113, 43, + 12, 59, 113, 107, 10, 59, 113, 171, 113, 239, 105, 162, 35, 6, 66, 138, 217, 16, 73, 106, 35, 7, 66, 138, 217, 12, 73, + 105, 35, 8, 66, 138, 217, 8, 73, 104, 35, 9, 66, 138, 217, 4, 75, 103, 66, 147, 65, 155, 66, 91, 51, 10, 125, 34, 24, + 155, 114, 107, 224, 6, 28, 57, 152, 2, 34, 1, 28, 43, 159, 1, 240, 0, 248, 207, 120, 43, 120, 106, 6, 27, 4, 18, 67, + 26, 120, 171, 2, 27, 67, 26, 120, 235, 67, 26, 75, 91, 66, 154, 208, 4, 72, 90, 240, 0, 255, 97, 72, 90, 224, 40, 75, + 90, 104, 27, 66, 95, 65, 95, 46, 0, 208, 12, 47, 0, 208, 10, 28, 48, 247, 255, 255, 117, 122, 43, 66, 131, 208, 4, 72, + 81, 240, 0, 255, 78, 72, 82, 224, 21, 154, 10, 42, 0, 208, 31, 47, 0, 208, 29, 121, 42, 121, 107, 6, 18, 4, 27, 67, + 19, 121, 170, 159, 10, 2, 18, 67, 19, 121, 234, 67, 19, 66, 187, 208, 16, 72, 69, 240, 0, 255, 55, 72, 72, 240, 0, 255, + 52, 72, 71, 240, 0, 255, 49, 28, 32, 247, 251, 249, 60, 28, 40, 247, 251, 249, 57, 36, 0, 224, 100, 122, 46, 39, 1, + 28, 58, 64, 178, 96, 98, 122, 43, 28, 22, 147, 0, 114, 35, 121, 42, 121, 107, 6, 18, 4, 27, 67, 19, 121, 170, 121, 232, + 2, 18, 67, 19, 67, 24, 105, 33, 96, 224, 240, 0, 254, 148, 67, 112, 97, 160, 122, 107, 125, 34, 64, 159, 98, 99, 26, + 155, 105, 226, 64, 216, 64, 218, 4, 18, 12, 18, 4, 51, 12, 27, 133, 98, 50, 128, 4, 1, 133, 32, 0, 82, 30, 88, 24, 130, + 66, 91, 64, 26, 155, 3, 28, 37, 53, 72, 99, 99, 12, 201, 155, 0, 98, 39, 128, 42, 26, 127, 154, 1, 64, 223, 99, 34, + 100, 39, 154, 2, 159, 12, 99, 162, 47, 0, 209, 1, 100, 103, 224, 11, 30, 112, 24, 65, 66, 112, 64, 8, 247, 251, 248, + 209, 141, 34, 100, 96, 8, 210, 33, 255, 240, 0, 253, 159, 28, 35, 51, 72, 136, 25, 108, 32, 122, 35, 56, 1, 65, 25, + 240, 0, 254, 84, 4, 2, 104, 96, 12, 18, 28, 3, 59, 12, 135, 162, 66, 154, 217, 0, 135, 163, 247, 251, 248, 183, 35, + 0, 100, 224, 101, 35, 176, 5, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 0, 4, 96, 144, 19, 112, 107, 136, 0, 63, 255, + 255, 0, 127, 255, 255, 0, 255, 255, 255, 1, 255, 255, 255, 3, 255, 255, 255, 87, 66, 70, 83, 19, 112, 106, 48, 19, 112, + 106, 60, 19, 112, 107, 132, 19, 112, 106, 70, 19, 112, 106, 99, 19, 112, 105, 116, 71, 56, 70, 192, 181, 240, 176, 165, + 144, 9, 28, 24, 146, 10, 147, 11, 145, 15, 247, 251, 248, 135, 35, 1, 74, 140, 77, 141, 66, 91, 96, 19, 104, 43, 28, + 4, 43, 0, 209, 3, 152, 11, 247, 251, 248, 123, 96, 40, 75, 136, 152, 11, 33, 0, 96, 24, 34, 1, 152, 10, 28, 35, 157, + 9, 240, 0, 249, 24, 40, 0, 208, 0, 224, 246, 35, 255, 0, 91, 92, 227, 43, 85, 209, 28, 51, 171, 51, 255, 92, 227, 43, + 170, 209, 23, 28, 224, 73, 125, 34, 4, 240, 0, 253, 142, 40, 0, 208, 16, 77, 123, 28, 32, 48, 54, 28, 41, 34, 3, 240, + 0, 253, 133, 40, 0, 208, 7, 28, 32, 48, 82, 28, 41, 34, 3, 240, 0, 253, 125, 40, 0, 209, 5, 168, 20, 33, 0, 34, 64, + 240, 0, 253, 26, 224, 6, 28, 33, 49, 191, 49, 255, 168, 20, 34, 64, 240, 0, 252, 208, 175, 32, 151, 5, 32, 228, 39, + 1, 66, 127, 0, 64, 38, 0, 173, 20, 144, 14, 151, 8, 122, 235, 122, 47, 122, 105, 122, 170, 147, 7, 120, 32, 120, 99, + 6, 0, 4, 27, 67, 24, 120, 163, 2, 27, 67, 24, 120, 227, 67, 24, 75, 97, 66, 152, 208, 3, 121, 40, 40, 0, 209, 0, 224, + 162, 2, 9, 4, 18, 67, 17, 67, 57, 159, 7, 6, 59, 67, 25, 145, 7, 121, 43, 43, 15, 209, 101, 33, 227, 32, 0, 0, 73, 159, + 8, 144, 12, 35, 0, 145, 13, 149, 4, 154, 7, 152, 10, 24, 210, 146, 8, 28, 17, 28, 35, 34, 1, 157, 9, 240, 0, 248, 169, + 40, 0, 208, 0, 224, 135, 72, 78, 153, 14, 92, 34, 92, 99, 2, 18, 4, 27, 67, 26, 77, 76, 155, 13, 152, 8, 92, 225, 93, + 99, 67, 10, 6, 27, 67, 19, 24, 192, 35, 235, 144, 8, 0, 91, 92, 227, 152, 10, 147, 16, 75, 69, 153, 8, 92, 227, 34, + 1, 147, 17, 35, 236, 0, 91, 92, 227, 157, 9, 147, 18, 75, 65, 92, 227, 147, 19, 28, 35, 240, 0, 248, 128, 40, 0, 209, + 95, 120, 34, 120, 99, 6, 18, 4, 27, 67, 19, 120, 162, 73, 54, 2, 18, 67, 19, 120, 226, 67, 19, 66, 139, 209, 10, 154, + 43, 66, 150, 209, 2, 144, 0, 155, 8, 224, 48, 152, 8, 66, 184, 208, 1, 54, 1, 28, 7, 153, 17, 157, 18, 2, 11, 4, 42, + 152, 16, 153, 19, 67, 19, 67, 3, 6, 10, 67, 19, 208, 53, 154, 12, 50, 1, 146, 12, 42, 8, 209, 162, 224, 47, 152, 10, + 153, 7, 34, 1, 28, 35, 159, 9, 240, 0, 248, 79, 40, 0, 209, 45, 120, 34, 120, 99, 6, 18, 4, 27, 67, 19, 120, 162, 73, + 29, 2, 18, 67, 19, 120, 226, 67, 19, 66, 139, 209, 27, 154, 43, 66, 150, 209, 15, 155, 7, 144, 0, 157, 44, 147, 1, 152, + 9, 153, 15, 154, 10, 155, 11, 149, 2, 247, 255, 253, 201, 28, 5, 28, 32, 247, 250, 255, 163, 224, 17, 159, 7, 152, 8, + 66, 135, 208, 4, 54, 1, 151, 8, 224, 1, 157, 4, 151, 8, 153, 5, 66, 141, 208, 1, 53, 16, 231, 65, 28, 32, 247, 250, + 255, 145, 37, 0, 176, 37, 28, 40, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, 112, 107, 128, 19, 112, 107, + 136, 19, 112, 106, 127, 19, 112, 106, 132, 87, 66, 70, 83, 0, 0, 1, 199, 0, 0, 1, 201, 0, 0, 1, 215, 0, 0, 1, 217, 71, + 40, 71, 56, 181, 16, 109, 3, 28, 4, 43, 0, 208, 9, 72, 13, 240, 0, 253, 94, 72, 12, 240, 0, 253, 91, 72, 12, 240, 0, + 253, 88, 224, 13, 104, 0, 247, 250, 255, 98, 108, 224, 247, 250, 255, 95, 108, 96, 40, 0, 208, 1, 247, 250, 255, 90, + 28, 32, 247, 250, 255, 87, 188, 16, 188, 1, 71, 0, 19, 112, 106, 48, 19, 112, 106, 136, 19, 112, 105, 116, 181, 240, + 28, 3, 51, 72, 176, 131, 136, 26, 122, 3, 28, 5, 65, 26, 146, 1, 35, 1, 74, 48, 66, 91, 96, 19, 34, 0, 28, 14, 146, + 0, 39, 0, 224, 79, 104, 43, 25, 219, 123, 27, 43, 0, 208, 68, 106, 233, 155, 0, 49, 1, 24, 201, 34, 1, 107, 168, 108, + 235, 107, 44, 240, 0, 248, 83, 108, 233, 28, 48, 34, 6, 240, 0, 251, 110, 40, 0, 209, 51, 32, 12, 247, 250, 255, 5, + 30, 6, 209, 9, 72, 32, 240, 0, 253, 16, 72, 31, 240, 0, 253, 13, 72, 31, 240, 0, 253, 10, 224, 46, 28, 43, 51, 72, 96, + 53, 96, 183, 136, 24, 247, 250, 254, 242, 28, 3, 96, 112, 40, 0, 209, 12, 72, 21, 240, 0, 252, 251, 72, 21, 240, 0, + 252, 248, 72, 20, 240, 0, 252, 245, 28, 48, 247, 250, 255, 0, 224, 21, 106, 233, 154, 0, 49, 1, 24, 137, 107, 168, 107, + 44, 154, 1, 240, 0, 248, 28, 109, 43, 51, 1, 101, 43, 224, 9, 155, 0, 55, 1, 28, 26, 155, 1, 24, 210, 146, 0, 143, 171, + 66, 159, 211, 172, 38, 0, 176, 3, 28, 48, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, 112, 106, 48, 19, 112, + 106, 180, 19, 112, 105, 116, 71, 32, 70, 192, 181, 16, 104, 3, 28, 4, 109, 26, 58, 1, 101, 26, 104, 64, 247, 250, 254, + 207, 28, 32, 247, 250, 254, 204, 188, 16, 188, 1, 71, 0, 0, 0, 181, 240, 176, 137, 104, 5, 147, 0, 106, 107, 146, 1, + 28, 6, 30, 154, 28, 8, 64, 208, 4, 2, 12, 18, 104, 104, 146, 4, 70, 132, 152, 4, 104, 116, 48, 128, 0, 64, 90, 32, 122, + 47, 106, 42, 144, 2, 36, 1, 40, 0, 209, 0, 224, 194, 58, 1, 64, 250, 27, 219, 146, 6, 63, 2, 28, 10, 64, 250, 147, 5, + 155, 6, 28, 23, 70, 96, 64, 31, 8, 131, 59, 1, 28, 26, 64, 10, 146, 7, 209, 0, 224, 133, 155, 2, 152, 5, 106, 233, 64, + 131, 24, 121, 147, 3, 24, 201, 75, 87, 104, 26, 108, 235, 66, 138, 209, 5, 74, 85, 28, 24, 104, 17, 74, 85, 104, 18, + 224, 18, 107, 44, 107, 168, 34, 1, 240, 0, 248, 165, 30, 4, 208, 0, 224, 149, 106, 235, 152, 3, 73, 76, 24, 251, 24, + 27, 96, 11, 75, 75, 108, 233, 104, 24, 75, 75, 104, 26, 240, 0, 250, 231, 154, 7, 104, 108, 0, 145, 155, 0, 26, 100, + 66, 156, 217, 0, 28, 28, 108, 235, 152, 1, 24, 89, 28, 34, 240, 0, 250, 217, 152, 0, 153, 1, 27, 0, 25, 9, 144, 0, 145, + 1, 55, 1, 40, 0, 208, 71, 154, 6, 66, 186, 210, 68, 155, 4, 104, 114, 51, 1, 4, 27, 12, 27, 147, 4, 51, 128, 0, 91, + 90, 211, 36, 1, 147, 2, 39, 0, 43, 0, 209, 54, 224, 95, 122, 43, 152, 0, 64, 216, 106, 43, 25, 194, 144, 3, 66, 154, + 217, 1, 27, 219, 147, 3, 154, 5, 106, 233, 155, 2, 24, 121, 64, 147, 24, 201, 107, 168, 107, 44, 154, 3, 155, 1, 240, + 0, 248, 86, 40, 0, 209, 70, 122, 43, 152, 3, 153, 0, 64, 152, 154, 3, 26, 9, 28, 3, 145, 0, 24, 191, 41, 0, 208, 15, + 152, 6, 66, 184, 210, 12, 154, 4, 104, 113, 50, 1, 4, 18, 12, 18, 146, 4, 50, 128, 0, 82, 90, 138, 146, 2, 42, 0, 208, + 42, 39, 0, 153, 1, 24, 201, 145, 1, 104, 107, 154, 0, 66, 154, 210, 197, 36, 0, 42, 0, 208, 34, 155, 5, 158, 2, 106, + 233, 64, 158, 24, 121, 107, 44, 107, 168, 25, 137, 108, 235, 34, 1, 240, 0, 248, 35, 30, 4, 209, 20, 106, 235, 108, + 233, 24, 255, 75, 11, 25, 190, 96, 30, 75, 11, 104, 24, 75, 11, 104, 26, 240, 0, 250, 103, 108, 233, 152, 1, 154, 0, + 240, 0, 250, 98, 224, 2, 36, 1, 224, 0, 28, 4, 176, 9, 28, 32, 188, 240, 188, 2, 71, 8, 70, 192, 19, 112, 96, 80, 19, + 112, 107, 128, 19, 112, 107, 136, 71, 32, 70, 192, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 204, 225, 47, 255, 30, 225, 160, + 0, 0, 225, 160, 0, 0, 230, 0, 0, 16, 225, 47, 255, 30, 230, 0, 0, 48, 225, 47, 255, 30, 230, 0, 0, 80, 225, 47, 255, + 30, 230, 0, 0, 112, 225, 47, 255, 30, 230, 0, 0, 144, 225, 47, 255, 30, 230, 0, 0, 176, 225, 47, 255, 30, 230, 0, 0, + 208, 225, 47, 255, 30, 230, 0, 0, 240, 225, 47, 255, 30, 230, 0, 1, 16, 225, 47, 255, 30, 230, 0, 1, 48, 225, 47, 255, + 30, 230, 0, 1, 80, 225, 47, 255, 30, 230, 0, 1, 112, 225, 47, 255, 30, 230, 0, 1, 144, 225, 47, 255, 30, 230, 0, 1, + 176, 225, 47, 255, 30, 230, 0, 1, 208, 225, 47, 255, 30, 230, 0, 1, 240, 225, 47, 255, 30, 230, 0, 2, 16, 225, 47, 255, + 30, 230, 0, 2, 48, 225, 47, 255, 30, 230, 0, 2, 80, 225, 47, 255, 30, 230, 0, 2, 112, 225, 47, 255, 30, 230, 0, 2, 144, + 225, 47, 255, 30, 230, 0, 2, 176, 225, 47, 255, 30, 230, 0, 2, 208, 225, 47, 255, 30, 230, 0, 2, 240, 225, 47, 255, + 30, 230, 0, 3, 16, 225, 47, 255, 30, 230, 0, 3, 48, 225, 47, 255, 30, 230, 0, 3, 80, 225, 47, 255, 30, 230, 0, 3, 112, + 225, 47, 255, 30, 230, 0, 3, 144, 225, 47, 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, + 30, 230, 0, 3, 240, 225, 47, 255, 30, 230, 0, 4, 16, 225, 47, 255, 30, 230, 0, 4, 48, 225, 47, 255, 30, 230, 0, 4, 80, + 225, 47, 255, 30, 230, 0, 4, 112, 225, 47, 255, 30, 230, 0, 4, 144, 225, 47, 255, 30, 230, 0, 4, 176, 225, 47, 255, + 30, 230, 0, 4, 208, 225, 47, 255, 30, 230, 0, 4, 240, 225, 47, 255, 30, 230, 0, 5, 16, 225, 47, 255, 30, 230, 0, 5, + 48, 225, 47, 255, 30, 230, 0, 5, 80, 225, 47, 255, 30, 230, 0, 6, 144, 225, 47, 255, 30, 230, 0, 7, 240, 225, 47, 255, + 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, 10, 16, 225, 47, 255, 30, 226, 144, 16, 0, 227, 176, 0, 4, 239, 0, 0, 171, + 225, 47, 255, 30, 225, 160, 0, 0, 225, 160, 0, 0, 180, 3, 70, 113, 8, 73, 0, 64, 0, 73, 90, 9, 0, 73, 68, 142, 188, + 3, 71, 112, 226, 81, 32, 1, 1, 47, 255, 30, 58, 0, 0, 54, 225, 80, 0, 1, 154, 0, 0, 34, 225, 17, 0, 2, 10, 0, 0, 35, + 227, 17, 2, 14, 1, 160, 17, 129, 3, 160, 48, 8, 19, 160, 48, 1, 227, 81, 2, 1, 49, 81, 0, 0, 49, 160, 18, 1, 49, 160, + 50, 3, 58, 255, 255, 250, 227, 81, 1, 2, 49, 81, 0, 0, 49, 160, 16, 129, 49, 160, 48, 131, 58, 255, 255, 250, 227, 160, + 32, 0, 225, 80, 0, 1, 32, 64, 0, 1, 33, 130, 32, 3, 225, 80, 0, 161, 32, 64, 0, 161, 33, 130, 32, 163, 225, 80, 1, 33, + 32, 64, 1, 33, 33, 130, 33, 35, 225, 80, 1, 161, 32, 64, 1, 161, 33, 130, 33, 163, 227, 80, 0, 0, 17, 176, 50, 35, 17, + 160, 18, 33, 26, 255, 255, 239, 225, 160, 0, 2, 225, 47, 255, 30, 3, 160, 0, 1, 19, 160, 0, 0, 225, 47, 255, 30, 227, + 81, 8, 1, 33, 160, 24, 33, 35, 160, 32, 16, 51, 160, 32, 0, 227, 81, 12, 1, 33, 160, 20, 33, 34, 130, 32, 8, 227, 81, + 0, 16, 33, 160, 18, 33, 34, 130, 32, 4, 227, 81, 0, 4, 130, 130, 32, 3, 144, 130, 32, 161, 225, 160, 2, 48, 225, 47, + 255, 30, 225, 47, 255, 31, 225, 160, 0, 0, 227, 80, 0, 0, 19, 224, 0, 0, 234, 0, 1, 9, 227, 81, 0, 0, 10, 255, 255, + 248, 233, 45, 64, 3, 235, 255, 255, 188, 232, 189, 64, 6, 224, 3, 0, 146, 224, 65, 16, 3, 225, 47, 255, 30, 227, 81, + 0, 0, 10, 0, 0, 67, 224, 32, 192, 1, 66, 97, 16, 0, 226, 81, 32, 1, 10, 0, 0, 39, 225, 176, 48, 0, 66, 96, 48, 0, 225, + 83, 0, 1, 154, 0, 0, 38, 225, 17, 0, 2, 10, 0, 0, 40, 227, 17, 2, 14, 1, 160, 17, 129, 3, 160, 32, 8, 19, 160, 32, 1, + 227, 81, 2, 1, 49, 81, 0, 3, 49, 160, 18, 1, 49, 160, 34, 2, 58, 255, 255, 250, 227, 81, 1, 2, 49, 81, 0, 3, 49, 160, + 16, 129, 49, 160, 32, 130, 58, 255, 255, 250, 227, 160, 0, 0, 225, 83, 0, 1, 32, 67, 48, 1, 33, 128, 0, 2, 225, 83, + 0, 161, 32, 67, 48, 161, 33, 128, 0, 162, 225, 83, 1, 33, 32, 67, 49, 33, 33, 128, 1, 34, 225, 83, 1, 161, 32, 67, 49, + 161, 33, 128, 1, 162, 227, 83, 0, 0, 17, 176, 34, 34, 17, 160, 18, 33, 26, 255, 255, 239, 227, 92, 0, 0, 66, 96, 0, + 0, 225, 47, 255, 30, 225, 60, 0, 0, 66, 96, 0, 0, 225, 47, 255, 30, 51, 160, 0, 0, 1, 160, 15, 204, 3, 128, 0, 1, 225, + 47, 255, 30, 227, 81, 8, 1, 33, 160, 24, 33, 35, 160, 32, 16, 51, 160, 32, 0, 227, 81, 12, 1, 33, 160, 20, 33, 34, 130, + 32, 8, 227, 81, 0, 16, 33, 160, 18, 33, 34, 130, 32, 4, 227, 81, 0, 4, 130, 130, 32, 3, 144, 130, 32, 161, 227, 92, + 0, 0, 225, 160, 2, 51, 66, 96, 0, 0, 225, 47, 255, 30, 225, 47, 255, 31, 225, 160, 0, 0, 227, 80, 0, 0, 195, 224, 1, + 2, 179, 160, 1, 2, 234, 0, 0, 181, 227, 81, 0, 0, 10, 255, 255, 247, 233, 45, 64, 3, 235, 255, 255, 177, 232, 189, 64, + 6, 224, 3, 0, 146, 224, 65, 16, 3, 225, 47, 255, 30, 71, 112, 70, 192, 33, 16, 6, 2, 14, 3, 65, 200, 67, 19, 6, 2, 14, + 0, 67, 16, 65, 200, 67, 24, 71, 112, 70, 192, 181, 112, 28, 4, 28, 13, 42, 3, 217, 33, 28, 11, 67, 3, 7, 158, 208, 18, + 120, 32, 120, 41, 66, 136, 209, 29, 58, 1, 35, 0, 224, 5, 52, 1, 51, 1, 120, 32, 92, 233, 66, 136, 209, 20, 66, 154, + 209, 247, 32, 0, 188, 112, 188, 2, 71, 8, 28, 13, 28, 4, 201, 8, 200, 64, 66, 158, 209, 4, 58, 4, 28, 4, 28, 13, 42, + 3, 216, 244, 32, 0, 42, 0, 209, 222, 231, 237, 26, 64, 231, 235, 70, 192, 181, 240, 28, 5, 28, 14, 28, 20, 42, 15, 217, + 3, 28, 11, 67, 3, 7, 159, 208, 10, 44, 0, 208, 5, 35, 0, 92, 242, 84, 234, 51, 1, 66, 163, 209, 250, 188, 240, 188, + 2, 71, 8, 28, 21, 28, 12, 28, 3, 104, 38, 96, 30, 104, 102, 96, 94, 104, 166, 96, 158, 104, 230, 61, 16, 96, 222, 52, + 16, 51, 16, 45, 15, 216, 242, 58, 16, 9, 23, 28, 126, 1, 63, 1, 54, 27, 215, 25, 133, 28, 60, 25, 142, 47, 3, 217, 217, + 28, 52, 28, 59, 28, 42, 204, 2, 59, 4, 194, 2, 43, 3, 216, 250, 63, 4, 8, 188, 28, 99, 0, 155, 0, 164, 24, 237, 24, + 246, 27, 60, 231, 200, 70, 192, 181, 112, 28, 3, 7, 132, 208, 13, 42, 0, 208, 64, 6, 13, 58, 1, 14, 45, 36, 3, 224, + 2, 42, 0, 208, 57, 58, 1, 112, 29, 51, 1, 66, 35, 209, 248, 42, 3, 217, 41, 37, 255, 64, 13, 2, 44, 67, 37, 4, 44, 28, + 30, 67, 37, 42, 15, 217, 18, 28, 28, 28, 22, 62, 16, 96, 37, 96, 101, 96, 165, 96, 229, 52, 16, 46, 15, 216, 247, 58, + 16, 9, 22, 54, 1, 1, 54, 25, 158, 35, 15, 64, 26, 42, 3, 217, 12, 28, 52, 28, 19, 59, 4, 196, 32, 43, 3, 216, 251, 58, + 4, 8, 147, 51, 1, 0, 155, 24, 246, 35, 3, 64, 26, 28, 51, 42, 0, 208, 6, 6, 9, 14, 12, 33, 0, 84, 92, 49, 1, 66, 138, + 209, 251, 188, 112, 188, 2, 71, 8, 120, 2, 120, 11, 48, 1, 49, 1, 42, 0, 208, 1, 66, 154, 208, 247, 26, 208, 71, 112, + 35, 0, 92, 194, 51, 1, 42, 0, 209, 251, 30, 88, 71, 112, 70, 192, 181, 240, 28, 3, 32, 0, 42, 0, 208, 72, 28, 8, 67, + 24, 36, 3, 30, 85, 64, 4, 209, 42, 28, 30, 28, 13, 42, 3, 217, 67, 104, 31, 104, 8, 66, 135, 209, 63, 58, 4, 28, 32, + 42, 0, 208, 54, 72, 34, 24, 61, 67, 189, 79, 33, 28, 32, 66, 61, 209, 47, 29, 28, 29, 8, 224, 11, 204, 8, 200, 2, 66, + 139, 209, 45, 58, 4, 42, 0, 208, 40, 77, 25, 25, 89, 67, 153, 66, 57, 209, 35, 28, 38, 28, 5, 42, 3, 216, 239, 28, 35, + 28, 1, 42, 0, 208, 33, 30, 85, 120, 28, 120, 8, 66, 132, 209, 18, 32, 0, 45, 0, 208, 16, 44, 0, 208, 14, 61, 1, 34, + 0, 224, 4, 66, 170, 208, 12, 50, 1, 44, 0, 208, 9, 24, 152, 120, 68, 24, 136, 120, 64, 66, 132, 208, 244, 26, 32, 188, + 240, 188, 2, 71, 8, 32, 0, 231, 250, 28, 41, 28, 51, 30, 85, 231, 222, 120, 36, 120, 0, 26, 32, 231, 242, 70, 192, 254, + 254, 254, 255, 128, 128, 128, 128, 0, 0, 0, 0, 71, 120, 70, 192, 234, 255, 254, 196, 71, 120, 70, 192, 234, 255, 254, + 85, 71, 120, 70, 192, 234, 255, 254, 139, 71, 120, 70, 192, 234, 255, 254, 139, 71, 120, 70, 192, 234, 255, 232, 227, + 71, 120, 70, 192, 234, 255, 232, 229, 71, 120, 70, 192, 234, 255, 254, 85, 71, 120, 70, 192, 234, 255, 232, 177, 229, + 159, 192, 0, 225, 47, 255, 28, 19, 112, 90, 177, 71, 120, 70, 192, 234, 255, 254, 240, 71, 120, 70, 192, 234, 255, 254, + 90, 71, 120, 70, 192, 234, 255, 254, 98, 71, 120, 70, 192, 234, 255, 232, 170, 71, 120, 70, 192, 234, 255, 254, 96, + 71, 120, 70, 192, 234, 255, 254, 102, 71, 120, 70, 192, 234, 255, 254, 150, 71, 120, 70, 192, 234, 255, 254, 106, 71, + 120, 70, 192, 234, 255, 254, 144, 71, 120, 70, 192, 234, 255, 254, 72, 71, 120, 70, 192, 234, 255, 255, 48, 71, 120, + 70, 192, 234, 255, 254, 136, 71, 120, 70, 192, 234, 255, 232, 187, 71, 120, 70, 192, 234, 255, 254, 130, 71, 120, 70, + 192, 234, 255, 254, 72, 71, 120, 70, 192, 234, 255, 254, 86, 71, 120, 70, 192, 234, 255, 254, 216, 71, 120, 70, 192, + 234, 255, 254, 72, 71, 120, 70, 192, 234, 255, 254, 86, 71, 120, 70, 192, 234, 255, 254, 72, 71, 120, 70, 192, 234, + 255, 254, 68, 71, 120, 70, 192, 234, 255, 232, 136, 71, 120, 70, 192, 234, 255, 254, 122, 0, 0, 0, 0, 73, 79, 83, 32, + 109, 111, 100, 117, 108, 101, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 229, 31, 240, 4, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 7, 161, + 32, 19, 114, 199, 16, 16, 16, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 87, 66, 70, 83, + 32, 110, 111, 116, 32, 101, 110, 111, 117, 103, 104, 32, 109, 101, 109, 111, 114, 121, 33, 10, 0, 47, 100, 101, 118, + 47, 117, 115, 98, 49, 50, 51, 0, 47, 100, 101, 118, 47, 117, 115, 98, 49, 50, 51, 47, 79, 70, 70, 0, 102, 105, 114, + 115, 116, 32, 114, 101, 97, 100, 32, 115, 101, 99, 116, 111, 114, 32, 40, 37, 105, 41, 32, 79, 75, 10, 0, 102, 105, + 114, 115, 116, 32, 114, 101, 97, 100, 32, 115, 101, 99, 116, 111, 114, 32, 40, 37, 105, 41, 32, 69, 82, 82, 79, 82, + 10, 0, 101, 104, 99, 105, 95, 105, 110, 116, 95, 119, 111, 114, 107, 105, 110, 103, 95, 99, 97, 108, 108, 98, 97, 99, + 107, 95, 112, 97, 114, 116, 49, 44, 32, 116, 105, 109, 101, 111, 117, 116, 58, 32, 37, 117, 10, 0, 117, 114, 98, 32, + 114, 101, 116, 118, 97, 108, 58, 32, 37, 105, 10, 0, 117, 110, 97, 98, 108, 101, 32, 116, 111, 32, 103, 101, 116, 32, + 100, 101, 118, 105, 99, 101, 32, 100, 101, 115, 99, 46, 46, 46, 10, 0, 103, 101, 116, 116, 105, 110, 103, 32, 85, 83, + 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 32, 45, 32, 114, 101, 115, 101, 116, 10, + 0, 101, 114, 114, 111, 114, 32, 103, 101, 116, 116, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, + 69, 83, 67, 82, 73, 80, 84, 79, 82, 10, 0, 103, 101, 116, 116, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, + 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 32, 45, 32, 97, 100, 113, 117, 105, 114, 101, 32, 45, 32, 114, 101, + 115, 101, 116, 10, 0, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 32, 111, 107, + 10, 0, 116, 114, 121, 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 83, 69, 84, 65, 68, 68, 82, 69, 83, 83, 58, + 32, 37, 100, 10, 0, 117, 110, 97, 98, 108, 101, 32, 116, 111, 32, 115, 101, 116, 32, 100, 101, 118, 105, 99, 101, 32, + 97, 100, 100, 114, 58, 32, 37, 100, 10, 0, 85, 83, 66, 95, 82, 69, 81, 95, 83, 69, 84, 65, 68, 68, 82, 69, 83, 83, 32, + 111, 107, 58, 32, 37, 100, 10, 0, 101, 114, 114, 111, 114, 32, 99, 104, 101, 99, 107, 105, 110, 103, 32, 85, 83, 66, + 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 10, 0, 111, 107, 32, 99, 104, 101, 99, 107, + 105, 110, 103, 32, 85, 83, 66, 95, 82, 69, 81, 95, 71, 69, 84, 68, 69, 83, 67, 82, 73, 80, 84, 79, 82, 10, 0, 105, 110, + 105, 116, 32, 111, 107, 10, 0, 98, 117, 102, 102, 101, 114, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, 109, + 101, 109, 41, 10, 0, 95, 95, 117, 115, 98, 95, 103, 101, 116, 100, 101, 115, 99, 32, 101, 114, 114, 111, 114, 32, 85, + 83, 66, 95, 68, 84, 95, 68, 69, 86, 73, 67, 69, 58, 32, 114, 101, 116, 114, 121, 10, 0, 95, 95, 117, 115, 98, 95, 103, + 101, 116, 100, 101, 115, 99, 32, 101, 114, 114, 111, 114, 32, 85, 83, 66, 95, 68, 84, 95, 68, 69, 86, 73, 67, 69, 10, + 0, 117, 100, 100, 45, 62, 99, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 115, 32, 61, 61, 32, 78, 85, + 76, 76, 32, 40, 110, 111, 32, 109, 101, 109, 41, 10, 0, 95, 95, 117, 115, 98, 95, 103, 101, 116, 100, 101, 115, 99, + 32, 101, 114, 114, 111, 114, 32, 85, 83, 66, 95, 68, 84, 95, 67, 79, 78, 70, 73, 71, 58, 32, 114, 101, 116, 114, 121, + 10, 0, 117, 99, 100, 45, 62, 105, 110, 116, 101, 114, 102, 97, 99, 101, 115, 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, + 110, 111, 32, 109, 101, 109, 41, 10, 0, 117, 105, 100, 45, 62, 101, 110, 100, 112, 111, 105, 110, 116, 115, 32, 61, + 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, 109, 101, 109, 41, 10, 0, 117, 105, 100, 45, 62, 101, 120, 116, 114, 97, + 32, 61, 61, 32, 78, 85, 76, 76, 32, 40, 110, 111, 32, 109, 101, 109, 41, 10, 0, 10, 113, 116, 100, 32, 101, 114, 114, + 111, 114, 33, 58, 0, 32, 66, 65, 66, 66, 76, 69, 0, 32, 32, 109, 105, 115, 115, 101, 100, 32, 109, 105, 99, 114, 111, + 32, 102, 114, 97, 109, 101, 0, 32, 32, 100, 97, 116, 97, 98, 117, 102, 102, 101, 114, 32, 101, 114, 114, 111, 114, 0, + 32, 119, 114, 111, 110, 103, 32, 97, 99, 107, 0, 32, 116, 111, 111, 32, 109, 97, 110, 121, 32, 101, 114, 114, 111, 114, + 115, 0, 105, 110, 116, 101, 114, 114, 117, 112, 116, 95, 99, 97, 108, 108, 98, 97, 99, 107, 95, 104, 97, 110, 100, 32, + 83, 84, 83, 95, 73, 78, 84, 10, 0, 105, 110, 116, 101, 114, 114, 117, 112, 116, 95, 99, 97, 108, 108, 98, 97, 99, 107, + 95, 104, 97, 110, 100, 32, 83, 84, 83, 95, 80, 67, 68, 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, 32, 114, + 101, 115, 101, 116, 58, 32, 66, 85, 76, 75, 32, 82, 69, 83, 69, 84, 32, 37, 105, 10, 0, 117, 115, 98, 115, 116, 111, + 114, 97, 103, 101, 32, 114, 101, 115, 101, 116, 58, 32, 99, 108, 101, 97, 114, 104, 97, 108, 116, 32, 105, 110, 32, + 114, 101, 116, 32, 37, 105, 10, 0, 117, 115, 98, 115, 116, 111, 114, 97, 103, 101, 32, 114, 101, 115, 101, 116, 58, + 32, 99, 108, 101, 97, 114, 104, 97, 108, 116, 32, 111, 117, 116, 32, 114, 101, 116, 32, 37, 105, 10, 0, 117, 115, 98, + 115, 116, 111, 114, 97, 103, 101, 32, 114, 101, 115, 101, 116, 58, 32, 85, 83, 66, 95, 71, 101, 116, 67, 111, 110, 102, + 105, 103, 117, 114, 97, 116, 105, 111, 110, 32, 114, 101, 116, 32, 37, 105, 10, 0, 114, 101, 115, 101, 116, 32, 111, + 107, 10, 0, 95, 95, 115, 101, 110, 100, 95, 99, 98, 119, 32, 114, 101, 116, 32, 37, 105, 10, 0, 95, 95, 85, 83, 66, + 95, 66, 108, 107, 77, 115, 103, 84, 105, 109, 101, 111, 117, 116, 32, 37, 105, 10, 0, 95, 95, 114, 101, 97, 100, 95, + 99, 115, 119, 32, 37, 105, 10, 0, 32, 32, 32, 32, 83, 67, 83, 73, 95, 84, 69, 83, 84, 95, 85, 78, 73, 84, 95, 82, 69, + 65, 68, 89, 32, 114, 101, 116, 32, 37, 105, 10, 0, 32, 32, 32, 32, 83, 67, 83, 73, 95, 82, 69, 81, 85, 69, 83, 84, 95, + 83, 69, 78, 83, 69, 32, 114, 101, 116, 32, 37, 105, 10, 0, 32, 32, 32, 32, 83, 67, 83, 73, 95, 82, 69, 81, 85, 69, 83, + 84, 95, 83, 69, 78, 83, 69, 32, 115, 116, 97, 116, 117, 115, 32, 37, 120, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, + 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 85, 83, 66, 95, 71, 101, 116, 68, 101, 115, 99, 114, 105, 112, 116, + 111, 114, 115, 32, 37, 105, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, + 100, 101, 118, 105, 99, 101, 32, 99, 104, 97, 110, 103, 101, 100, 33, 33, 33, 10, 0, 85, 83, 66, 83, 116, 111, 114, + 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 117, 99, 100, 32, 37, 105, 32, 80, 111, 119, 101, 114, 32, 37, + 105, 32, 109, 65, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 105, 110, + 116, 101, 114, 102, 97, 99, 101, 32, 115, 117, 98, 99, 108, 97, 115, 115, 32, 37, 105, 32, 97, 116, 97, 95, 112, 114, + 111, 116, 32, 37, 105, 32, 10, 0, 73, 110, 32, 80, 111, 105, 110, 116, 58, 32, 37, 105, 10, 0, 79, 117, 116, 32, 80, + 111, 105, 110, 116, 58, 32, 37, 105, 10, 0, 101, 112, 95, 105, 110, 32, 37, 120, 32, 101, 112, 95, 111, 117, 116, 32, + 37, 120, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 99, 97, 110, 110, + 111, 116, 32, 102, 105, 110, 100, 32, 97, 110, 121, 32, 105, 110, 116, 101, 114, 102, 97, 99, 101, 33, 33, 33, 10, 0, + 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 99, 111, 110, 102, 58, 32, 37, 120, + 32, 97, 108, 116, 73, 110, 116, 101, 114, 102, 97, 99, 101, 58, 32, 37, 120, 10, 0, 85, 83, 66, 95, 71, 101, 116, 67, + 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 40, 41, 32, 69, 114, 114, 111, 114, 46, 32, 67, 111, 110, + 116, 105, 110, 117, 101, 46, 10, 0, 65, 99, 116, 117, 97, 108, 32, 99, 111, 110, 102, 58, 32, 37, 120, 32, 32, 32, 110, + 101, 120, 116, 32, 99, 111, 110, 102, 58, 32, 37, 120, 10, 0, 85, 83, 66, 95, 83, 101, 116, 67, 111, 110, 102, 105, + 103, 117, 114, 97, 116, 105, 111, 110, 40, 41, 32, 69, 114, 114, 111, 114, 10, 0, 85, 83, 66, 95, 83, 101, 116, 65, + 108, 116, 101, 114, 110, 97, 116, 105, 118, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 41, 32, 69, 114, 114, + 111, 114, 46, 32, 67, 111, 110, 116, 105, 110, 117, 101, 10, 0, 85, 83, 66, 95, 83, 101, 116, 67, 111, 110, 102, 105, + 103, 117, 114, 97, 116, 105, 111, 110, 40, 41, 32, 38, 32, 85, 83, 66, 95, 83, 101, 116, 65, 108, 116, 101, 114, 110, + 97, 116, 105, 118, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 41, 32, 79, 75, 10, 0, 71, 101, 116, 95, 77, 97, + 120, 95, 76, 117, 110, 40, 41, 58, 32, 101, 114, 114, 44, 32, 100, 101, 102, 97, 117, 108, 116, 32, 109, 97, 120, 95, + 108, 117, 110, 61, 56, 10, 0, 71, 101, 116, 95, 77, 97, 120, 95, 76, 117, 110, 40, 41, 58, 32, 79, 75, 58, 32, 37, 105, + 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, 32, 116, 114, 121, 95, 115, 116, + 97, 116, 117, 115, 32, 37, 105, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 79, 112, 101, 110, 40, 41, 58, + 32, 79, 75, 44, 32, 114, 101, 116, 117, 114, 110, 32, 48, 10, 0, 32, 32, 32, 32, 115, 116, 97, 114, 116, 95, 115, 116, + 111, 112, 32, 99, 109, 100, 32, 114, 101, 116, 32, 37, 105, 10, 0, 32, 32, 32, 32, 73, 110, 113, 117, 105, 114, 121, + 32, 114, 101, 116, 32, 37, 105, 10, 0, 32, 32, 32, 32, 68, 101, 118, 105, 99, 101, 32, 84, 121, 112, 101, 58, 32, 37, + 120, 10, 0, 32, 32, 32, 32, 82, 101, 97, 100, 67, 97, 112, 97, 99, 105, 116, 121, 32, 114, 101, 116, 32, 37, 105, 32, + 32, 115, 101, 99, 116, 111, 114, 95, 115, 105, 122, 101, 58, 32, 37, 117, 32, 32, 115, 101, 99, 116, 111, 114, 115, + 58, 32, 37, 117, 10, 0, 70, 97, 115, 116, 32, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 77, 111, 117, 110, 116, + 76, 85, 78, 32, 37, 105, 35, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 77, 111, 117, 110, 116, 76, 85, + 78, 58, 32, 114, 101, 116, 32, 37, 105, 10, 0, 85, 83, 66, 83, 84, 79, 82, 65, 71, 69, 95, 71, 69, 84, 95, 77, 65, 88, + 95, 76, 85, 78, 32, 114, 101, 116, 32, 37, 105, 32, 109, 97, 120, 108, 117, 110, 32, 37, 105, 10, 0, 85, 83, 66, 83, + 116, 111, 114, 97, 103, 101, 95, 77, 111, 117, 110, 116, 76, 85, 78, 32, 102, 97, 105, 108, 33, 33, 33, 10, 0, 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 82, 111, 100, 114, 105, 101, 115, 32, 101, 104, 99, - 109, 111, 100, 117, 108, 101, 32, 49, 46, 48, 10, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 73, 110, 105, 116, - 40, 41, 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 10, 0, 85, 83, - 66, 83, 116, 111, 114, 97, 103, 101, 95, 73, 110, 105, 116, 40, 41, 32, 79, 107, 10, 0, 69, 114, 114, 111, 114, 32, - 82, 101, 97, 100, 105, 110, 103, 32, 115, 101, 99, 116, 111, 114, 32, 48, 10, 0, 79, 75, 32, 82, 101, 97, 100, 105, - 110, 103, 32, 115, 101, 99, 116, 111, 114, 32, 48, 10, 0, 85, 110, 112, 108, 117, 103, 58, 32, 114, 101, 115, 101, 116, - 32, 37, 105, 32, 115, 116, 97, 116, 117, 115, 32, 37, 120, 10, 0, 102, 97, 115, 116, 95, 114, 101, 109, 111, 117, 110, - 116, 32, 75, 79, 32, 114, 101, 116, 32, 37, 105, 10, 0, 85, 83, 66, 32, 65, 108, 108, 111, 99, 58, 32, 110, 111, 116, - 32, 101, 110, 111, 117, 103, 104, 32, 109, 101, 109, 111, 114, 121, 33, 10, 0, 119, 98, 102, 115, 32, 101, 114, 114, - 111, 114, 32, 0, 98, 97, 100, 32, 109, 97, 103, 105, 99, 0, 104, 100, 32, 115, 101, 99, 116, 111, 114, 32, 115, 105, - 122, 101, 32, 100, 111, 101, 115, 110, 39, 116, 32, 109, 97, 116, 99, 104, 0, 104, 100, 32, 110, 117, 109, 32, 115, - 101, 99, 116, 111, 114, 32, 100, 111, 101, 115, 110, 39, 116, 32, 109, 97, 116, 99, 104, 0, 78, 84, 70, 83, 0, 70, 65, - 84, 0, 116, 114, 121, 105, 110, 103, 32, 116, 111, 32, 99, 108, 111, 115, 101, 32, 119, 98, 102, 115, 32, 119, 104, - 105, 108, 101, 32, 100, 105, 115, 99, 115, 32, 115, 116, 105, 108, 108, 32, 111, 112, 101, 110, 0, 97, 108, 108, 111, - 99, 97, 116, 105, 110, 103, 32, 109, 101, 109, 111, 114, 121, 0 + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 82, 111, 100, 114, 105, 101, + 115, 32, 101, 104, 99, 109, 111, 100, 117, 108, 101, 32, 49, 46, 48, 10, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, + 95, 73, 110, 105, 116, 40, 41, 10, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 10, 10, 0, 68, 101, 118, 105, 99, 101, 32, 105, 115, 32, 97, 32, 100, 118, 100, 10, 0, 68, 101, 118, 105, 99, 101, + 32, 105, 115, 32, 97, 32, 117, 115, 98, 104, 100, 10, 0, 85, 83, 66, 83, 116, 111, 114, 97, 103, 101, 95, 73, 110, 105, + 116, 40, 41, 32, 79, 107, 10, 0, 69, 114, 114, 111, 114, 32, 82, 101, 97, 100, 105, 110, 103, 32, 115, 101, 99, 116, + 111, 114, 32, 48, 10, 0, 79, 75, 32, 82, 101, 97, 100, 105, 110, 103, 32, 115, 101, 99, 116, 111, 114, 32, 48, 10, 0, + 85, 110, 112, 108, 117, 103, 58, 32, 114, 101, 115, 101, 116, 32, 37, 105, 32, 115, 116, 97, 116, 117, 115, 32, 37, + 120, 10, 0, 102, 97, 115, 116, 95, 114, 101, 109, 111, 117, 110, 116, 32, 75, 79, 32, 114, 101, 116, 32, 37, 105, 10, + 0, 85, 83, 66, 32, 65, 108, 108, 111, 99, 58, 32, 110, 111, 116, 32, 101, 110, 111, 117, 103, 104, 32, 109, 101, 109, + 111, 114, 121, 33, 10, 0, 119, 98, 102, 115, 32, 101, 114, 114, 111, 114, 32, 0, 98, 97, 100, 32, 109, 97, 103, 105, + 99, 0, 104, 100, 32, 115, 101, 99, 116, 111, 114, 32, 115, 105, 122, 101, 32, 100, 111, 101, 115, 110, 39, 116, 32, + 109, 97, 116, 99, 104, 0, 104, 100, 32, 110, 117, 109, 32, 115, 101, 99, 116, 111, 114, 32, 100, 111, 101, 115, 110, + 39, 116, 32, 109, 97, 116, 99, 104, 0, 78, 84, 70, 83, 0, 70, 65, 84, 0, 116, 114, 121, 105, 110, 103, 32, 116, 111, + 32, 99, 108, 111, 115, 101, 32, 119, 98, 102, 115, 32, 119, 104, 105, 108, 101, 32, 100, 105, 115, 99, 115, 32, 115, + 116, 105, 108, 108, 32, 111, 112, 101, 110, 0, 97, 108, 108, 111, 99, 97, 116, 105, 110, 103, 32, 109, 101, 109, 111, + 114, 121, 0 }; diff --git a/source/mload/modules/ehcmodule_5.h b/source/mload/modules/ehcmodule_5.h index cefdbf57..85b0d531 100644 --- a/source/mload/modules/ehcmodule_5.h +++ b/source/mload/modules/ehcmodule_5.h @@ -1,3 +1,3 @@ -#define size_ehcmodule_5 26234 +#define size_ehcmodule_5 27134 -extern unsigned char ehcmodule_5[26234]; +extern unsigned char ehcmodule_5[27134]; diff --git a/source/network/HTML_Stream.cpp b/source/network/HTML_Stream.cpp index ffac2d61..e5fc7a52 100644 --- a/source/network/HTML_Stream.cpp +++ b/source/network/HTML_Stream.cpp @@ -114,12 +114,10 @@ char * HTML_Stream::CopyString(const char * stopat) u32 blocksize = 1024; u32 counter = 0; - u32 allocatedsize = 0; char * outtext = (char*) malloc(blocksize); if (!outtext) return NULL; - allocatedsize = blocksize; memset(outtext, 0, blocksize); while ((htmlstringcompare( HTML_File, stopat, position ) != 0) && (position + strlen(stopat) < filesize)) diff --git a/source/network/Wiinnertag.cpp b/source/network/Wiinnertag.cpp index 15225085..77a7e166 100644 --- a/source/network/Wiinnertag.cpp +++ b/source/network/Wiinnertag.cpp @@ -97,7 +97,15 @@ bool Wiinnertag::Send(const char *gameID) bool Wiinnertag::TagGame(const char *gameID) { - Wiinnertag Tag(Settings.WiinnertagPath); + string fullpath = Settings.WiinnertagPath; + if(fullpath.size() == 0) + return false; + + if(fullpath[fullpath.size()-1] != '/') + fullpath += '/'; + fullpath += "Wiinnertag.xml"; + + Wiinnertag Tag(fullpath); return Tag.Send(gameID); } @@ -115,7 +123,15 @@ static const char * XMLSaveCallback(mxml_node_t *node, int where) bool Wiinnertag::CreateExample(const string &filepath) { - FILE * f = fopen(filepath.c_str(), "wb"); + if(filepath.size() == 0) + return false; + + string fullpath = filepath; + if(fullpath[fullpath.size()-1] != '/') + fullpath += '/'; + fullpath += "Wiinnertag.xml"; + + FILE * f = fopen(fullpath.c_str(), "wb"); if(!f) return false; diff --git a/source/network/networkops.cpp b/source/network/networkops.cpp index c0cc8d97..ed6ffcae 100644 --- a/source/network/networkops.cpp +++ b/source/network/networkops.cpp @@ -210,7 +210,7 @@ s32 download_request(const char * url, char * filename) //Form a nice request header to send to the webserver char header[strlen(path) + strlen(domain) + strlen(url) + 100]; - sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\nReferer: %s\r\nConnection: close\r\n\r\n", path, domain, url); + sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\nReferer: %s\r\nUser-Agent: USBLoaderGX\r\nConnection: close\r\n\r\n", path, domain, url); s32 filesize = network_request(connection, header, filename); diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index c185fbb6..4c8f20a1 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -1077,10 +1077,11 @@ int DiscWait(const char *title, const char *msg, const char *btn1Label, const ch ***************************************************************************/ int FormatingPartition(const char *title, int part_num) { - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); + PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(part_num); + int portPart = DeviceHandler::PartitionToPortPartition(part_num); char text[255]; - sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(part_num) / GB_SIZE); + sprintf(text, "%s: %.2fGB", tr( "Partition" ), usbHandle->GetSize(portPart) / GB_SIZE); int choice = WindowPrompt(tr( "Do you want to format:" ), text, tr( "Yes" ), tr( "No" )); if (choice == 0) return -666; @@ -1117,7 +1118,7 @@ int FormatingPartition(const char *title, int part_num) ResumeGui(); VIDEO_WaitVSync(); - ret = WBFS_Format(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num)); + ret = WBFS_Format(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), DeviceHandler::PartitionToUSBPort(part_num)); if (ret < 0) { @@ -1125,7 +1126,7 @@ int FormatingPartition(const char *title, int part_num) } else { - PartitionFS * partition = usbHandle->GetPartitionRecord(part_num); + PartitionFS * partition = usbHandle->GetPartitionRecord(portPart); partition->PartitionType = 0xBF; partition->FSName = "WBFS"; sleep(1); diff --git a/source/settings/CCategoryList.cpp b/source/settings/CCategoryList.cpp index 87873990..d1ead16d 100644 --- a/source/settings/CCategoryList.cpp +++ b/source/settings/CCategoryList.cpp @@ -35,10 +35,16 @@ CCategoryList CategoryList; CCategoryList::CCategoryList() { - nameList[0] = tr("All"); + clear(); goToFirst(); } +void CCategoryList::clear() +{ + nameList.clear(); + nameList[0] = tr("All"); +} + const char * CCategoryList::operator[](unsigned int id) { map::iterator itr = nameList.find(id); diff --git a/source/settings/CCategoryList.hpp b/source/settings/CCategoryList.hpp index 6cb6c2da..91e509cb 100644 --- a/source/settings/CCategoryList.hpp +++ b/source/settings/CCategoryList.hpp @@ -51,7 +51,7 @@ class CCategoryList bool findCategory(unsigned int id) { listIter = nameList.find(id); return listIter != nameList.end(); }; int pos() const { return distance(nameList.begin(), listIter); } int size() const { return nameList.size(); } - void clear() { nameList.clear(); } + void clear(); private: string configPath; map::const_iterator listIter; diff --git a/source/settings/CGameCategories.cpp b/source/settings/CGameCategories.cpp index 32c4fb33..e8a182eb 100644 --- a/source/settings/CGameCategories.cpp +++ b/source/settings/CGameCategories.cpp @@ -59,6 +59,8 @@ const vector &CGameCategories::operator[](const char *id) const static const char * XMLSaveCallback(mxml_node_t *node, int where) { const char *name = node->value.element.name; + if(!name) + return NULL; if (where == MXML_WS_BEFORE_OPEN) { @@ -76,7 +78,7 @@ static const char * XMLSaveCallback(mxml_node_t *node, int where) else if(!strcmp(name, "Game")) return "\n\t"; } - return (NULL); + return NULL; } bool CGameCategories::Load(string filepath) @@ -389,6 +391,7 @@ bool CGameCategories::ImportFromWiiTDB(const string &xmlpath) } XML_DB.CloseFile(); + gameList.FilterList(filter.c_str()); return true; } diff --git a/source/settings/CSettings.cpp b/source/settings/CSettings.cpp index 7a26a6b4..9d7f480b 100644 --- a/source/settings/CSettings.cpp +++ b/source/settings/CSettings.cpp @@ -67,7 +67,7 @@ void CSettings::SetDefault() snprintf(BcaCodepath, sizeof(BcaCodepath), "%s/bca/", BootDevice); snprintf(WipCodepath, sizeof(WipCodepath), "%s/wip/", BootDevice); snprintf(WDMpath, sizeof(WDMpath), "%s/wdm/", BootDevice); - snprintf(WiinnertagPath, sizeof(WiinnertagPath), "%s/Wiinnertag.xml", ConfigPath); + snprintf(WiinnertagPath, sizeof(WiinnertagPath), "%s/", ConfigPath); snprintf(theme_path, sizeof(theme_path), "%stheme/", ConfigPath); snprintf(dolpath, sizeof(dolpath), "%s/", BootDevice); strcpy(theme, ""); diff --git a/source/settings/SettingsEnums.h b/source/settings/SettingsEnums.h index 94045701..ec5e732e 100644 --- a/source/settings/SettingsEnums.h +++ b/source/settings/SettingsEnums.h @@ -171,6 +171,7 @@ enum BLOCK_GAMEID_CHANGE = 0x8000, BLOCK_CATEGORIES_MOD = 0x010000, BLOCK_FEATURE_SETTINGS = 0x020000, + BLOCK_HARD_DRIVE_SETTINGS = 0x040000, BLOCK_ALL = 0xFFFFFFFF, }; diff --git a/source/settings/menus/FeatureSettingsMenu.cpp b/source/settings/menus/FeatureSettingsMenu.cpp index abd804f2..3d6fe864 100644 --- a/source/settings/menus/FeatureSettingsMenu.cpp +++ b/source/settings/menus/FeatureSettingsMenu.cpp @@ -39,12 +39,23 @@ static const char * OnOffText[] = trNOOP( "ON" ) }; +static const char * WiilightText[WIILIGHT_MAX] = +{ + trNOOP( "OFF" ), + trNOOP( "ON" ), + trNOOP( "Only for Install" ) +}; + FeatureSettingsMenu::FeatureSettingsMenu() : SettingsMenu(tr("Features Settings"), &GuiOptions, MENU_NONE) { int Idx = 0; Options->SetName(Idx++, "%s", tr( "Titles from WiiTDB" )); Options->SetName(Idx++, "%s", tr( "Cache Titles" )); + Options->SetName(Idx++, "%s", tr( "Wiilight" )); + Options->SetName(Idx++, "%s", tr( "Rumble" )); + Options->SetName(Idx++, "%s", tr( "AutoInit Network" )); + Options->SetName(Idx++, "%s", tr( "Messageboard Update" )); Options->SetName(Idx++, "%s", tr( "Wiinnertag" )); Options->SetName(Idx++, "%s", tr( "Import Categories" )); @@ -61,6 +72,18 @@ void FeatureSettingsMenu::SetOptionValues() //! Settings: Cache Titles Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.CacheTitles] )); + //! Settings: Wiilight + Options->SetValue(Idx++, "%s", tr( WiilightText[Settings.wiilight] )); + + //! Settings: Rumble + Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.rumble] )); + + //! Settings: AutoInit Network + Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.autonetwork] )); + + //! Settings: Messageboard Update + Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.PlaylogUpdate] )); + //! Settings: Wiinnertag Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.Wiinnertag] )); @@ -93,6 +116,30 @@ int FeatureSettingsMenu::GetMenuInternal() GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path); } + //! Settings: Wiilight + else if (ret == ++Idx) + { + if (++Settings.wiilight >= WIILIGHT_MAX) Settings.wiilight = 0; + } + + //! Settings: Rumble + else if (ret == ++Idx) + { + if (++Settings.rumble >= MAX_ON_OFF) Settings.rumble = 0; //RUMBLE + } + + //! Settings: AutoInit Network + else if (ret == ++Idx) + { + if (++Settings.autonetwork >= MAX_ON_OFF) Settings.autonetwork = 0; + } + + //! Settings: Messageboard Update + else if (ret == ++Idx ) + { + if (++Settings.PlaylogUpdate >= MAX_ON_OFF) Settings.PlaylogUpdate = 0; + } + //! Settings: Winnertag else if (ret == ++Idx) { @@ -109,7 +156,10 @@ int FeatureSettingsMenu::GetMenuInternal() } } - if(Settings.Wiinnertag == ON && !CheckFile(Settings.WiinnertagPath)) + char filepath[200]; + snprintf(filepath, sizeof(filepath), "%sWiinnertag.xml", Settings.WiinnertagPath); + + if(Settings.Wiinnertag == ON && !CheckFile(filepath)) { int choice = WindowPrompt(tr("Warning"), tr("No Wiinnertag.xml found in the config path. Do you want an example file created?"), tr("Yes"), tr("No")); if(choice) @@ -117,9 +167,15 @@ int FeatureSettingsMenu::GetMenuInternal() if(Wiinnertag::CreateExample(Settings.WiinnertagPath)) { char text[200]; - snprintf(text, sizeof(text), "%s %s", tr("An example file was created here:"), Settings.WiinnertagPath); + snprintf(text, sizeof(text), "%s %s", tr("An example file was created here:"), filepath); WindowPrompt(tr("Success"), text, tr("OK")); } + else + { + char text[200]; + snprintf(text, sizeof(text), "%s %s", tr("Could not write to:"), filepath); + WindowPrompt(tr("Failed"), text, tr("OK")); + } } } } diff --git a/source/settings/menus/GUISettingsMenu.cpp b/source/settings/menus/GUISettingsMenu.cpp index d464f329..81291362 100644 --- a/source/settings/menus/GUISettingsMenu.cpp +++ b/source/settings/menus/GUISettingsMenu.cpp @@ -41,13 +41,6 @@ static const char * OnOffText[MAX_ON_OFF] = trNOOP( "ON" ) }; -static const char * WiilightText[WIILIGHT_MAX] = -{ - trNOOP( "OFF" ), - trNOOP( "ON" ), - trNOOP( "Only for Install" ) -}; - static const char * GameInfoText[GAMEINFO_MAX] = { trNOOP( "Game ID" ), @@ -118,9 +111,6 @@ GuiSettingsMenu::GuiSettingsMenu() Options->SetName(Idx++, "%s", tr( "Font Scale Factor" )); Options->SetName(Idx++, "%s", tr( "Keyboard" )); Options->SetName(Idx++, "%s", tr( "Disc Artwork Download" )); - Options->SetName(Idx++, "%s", tr( "Wiilight" )); - Options->SetName(Idx++, "%s", tr( "Rumble" )); - Options->SetName(Idx++, "%s", tr( "AutoInit Network" )); Options->SetName(Idx++, "%s", tr( "Screensaver" )); Options->SetName(Idx++, "%s", tr( "Mark new games" )); Options->SetName(Idx++, "%s", tr( "Show Free Space" )); @@ -187,15 +177,6 @@ void GuiSettingsMenu::SetOptionValues() //! Settings: Disc Artwork Download Options->SetValue(Idx++, "%s", tr( DiscArtDownloadText[Settings.discart] )); - //! Settings: Wiilight - Options->SetValue(Idx++, "%s", tr( WiilightText[Settings.wiilight] )); - - //! Settings: Rumble - Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.rumble] )); - - //! Settings: AutoInit Network - Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.autonetwork] )); - //! Settings: Screensaver Options->SetValue(Idx++, "%s", tr( ScreensaverText[Settings.screensaver] )); @@ -336,24 +317,6 @@ int GuiSettingsMenu::GetMenuInternal() if (++Settings.discart >= DISCARTS_MAX_CHOICE) Settings.discart = 0; } - //! Settings: Wiilight - else if (ret == ++Idx) - { - if (++Settings.wiilight >= WIILIGHT_MAX) Settings.wiilight = 0; - } - - //! Settings: Rumble - else if (ret == ++Idx) - { - if (++Settings.rumble >= MAX_ON_OFF) Settings.rumble = 0; //RUMBLE - } - - //! Settings: AutoInit Network - else if (ret == ++Idx) - { - if (++Settings.autonetwork >= MAX_ON_OFF) Settings.autonetwork = 0; - } - //! Settings: Screensaver else if (ret == ++Idx) { diff --git a/source/settings/menus/GameSettingsMenu.cpp b/source/settings/menus/GameSettingsMenu.cpp index 8ffaf2ca..618fa22a 100644 --- a/source/settings/menus/GameSettingsMenu.cpp +++ b/source/settings/menus/GameSettingsMenu.cpp @@ -69,8 +69,8 @@ void GameSettingsMenu::SetupMainButtons() SetMainButton(pos++, tr( "Game Load" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Ocarina" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Categories" ), MainButtonImgData, MainButtonImgOverData); - SetMainButton(pos++, tr( "Uninstall Menu" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Default Gamesettings" ), MainButtonImgData, MainButtonImgOverData); + SetMainButton(pos++, tr( "Uninstall Menu" ), MainButtonImgData, MainButtonImgOverData); } void GameSettingsMenu::CreateSettingsMenu(int menuNr) @@ -126,15 +126,6 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr) ShowMenu(); } - //! Uninstall Menu - else if(menuNr == Idx++) - { - HideMenu(); - ResumeGui(); - CurrentMenu = new UninstallSM(DiscHeader); - Append(CurrentMenu); - } - //! Default Gamesettings else if(menuNr == Idx++) { @@ -145,6 +136,15 @@ void GameSettingsMenu::CreateSettingsMenu(int menuNr) GameSettings.Save(); } } + + //! Uninstall Menu + else if(menuNr == Idx++) + { + HideMenu(); + ResumeGui(); + CurrentMenu = new UninstallSM(DiscHeader); + Append(CurrentMenu); + } } void GameSettingsMenu::DeleteSettingsMenu() diff --git a/source/settings/menus/GlobalSettings.cpp b/source/settings/menus/GlobalSettings.cpp index 4f754380..22a2c90a 100644 --- a/source/settings/menus/GlobalSettings.cpp +++ b/source/settings/menus/GlobalSettings.cpp @@ -32,6 +32,7 @@ #include "SoundSettingsMenu.hpp" #include "CustomPathsSM.hpp" #include "FeatureSettingsMenu.hpp" +#include "HardDriveSM.hpp" GlobalSettings::GlobalSettings() : FlyingButtonsMenu(tr("Global Settings")) @@ -70,12 +71,13 @@ void GlobalSettings::SetupMainButtons() SetMainButton(pos++, tr( "GUI Settings" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Loader Settings" ), MainButtonImgData, MainButtonImgOverData); - SetMainButton(pos++, tr( "Parental Control" ), MainButtonImgData, MainButtonImgOverData); + SetMainButton(pos++, tr( "Hard Drive Settings" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Features" ), MainButtonImgData, MainButtonImgOverData); + SetMainButton(pos++, tr( "Parental Control" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Sound" ), MainButtonImgData, MainButtonImgOverData); - SetMainButton(pos++, tr( "Custom Paths" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Theme Menu" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Theme Downloader" ), MainButtonImgData, MainButtonImgOverData); + SetMainButton(pos++, tr( "Custom Paths" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Update" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Default Settings" ), MainButtonImgData, MainButtonImgOverData); SetMainButton(pos++, tr( "Credits" ), creditsImgData, creditsImgOverData); @@ -116,10 +118,10 @@ void GlobalSettings::CreateSettingsMenu(int menuNr) CurrentMenu = new LoaderSettings(); Append(CurrentMenu); } - //! Parental Control + //! Hard Drive Settings else if(menuNr == Idx++) { - if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS)) + if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_HARD_DRIVE_SETTINGS)) { WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" )); return; @@ -127,7 +129,7 @@ void GlobalSettings::CreateSettingsMenu(int menuNr) HideMenu(); ResumeGui(); - CurrentMenu = new ParentalControlSM(); + CurrentMenu = new HardDriveSM(); Append(CurrentMenu); } //! Feature @@ -144,6 +146,20 @@ void GlobalSettings::CreateSettingsMenu(int menuNr) CurrentMenu = new FeatureSettingsMenu(); Append(CurrentMenu); } + //! Parental Control + else if(menuNr == Idx++) + { + if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS)) + { + WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" )); + return; + } + + HideMenu(); + ResumeGui(); + CurrentMenu = new ParentalControlSM(); + Append(CurrentMenu); + } //! Sound else if(menuNr == Idx++) { @@ -158,20 +174,6 @@ void GlobalSettings::CreateSettingsMenu(int menuNr) CurrentMenu = new SoundSettingsMenu(); Append(CurrentMenu); } - //! Custom Paths - else if(menuNr == Idx++) - { - if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS)) - { - WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" )); - return; - } - - HideMenu(); - ResumeGui(); - CurrentMenu = new CustomPathsSM(); - Append(CurrentMenu); - } //! Theme Menu else if(menuNr == Idx++) { @@ -194,6 +196,20 @@ void GlobalSettings::CreateSettingsMenu(int menuNr) returnMenu = MENU_THEMEDOWNLOADER; } + //! Custom Paths + else if(menuNr == Idx++) + { + if(!Settings.godmode && (Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS)) + { + WindowPrompt(tr( "Permission denied." ), tr( "Console must be unlocked for this option." ), tr( "OK" )); + return; + } + + HideMenu(); + ResumeGui(); + CurrentMenu = new CustomPathsSM(); + Append(CurrentMenu); + } //! Update else if(menuNr == Idx++) { @@ -270,6 +286,9 @@ void GlobalSettings::DeleteSettingsMenu() case CFeatureSettings: delete ((FeatureSettingsMenu *) CurrentMenu); break; + case CHardDriveSM: + delete ((HardDriveSM *) CurrentMenu); + break; case CSettingsMenu: default: delete CurrentMenu; diff --git a/source/settings/menus/HardDriveSM.cpp b/source/settings/menus/HardDriveSM.cpp new file mode 100644 index 00000000..09e2632f --- /dev/null +++ b/source/settings/menus/HardDriveSM.cpp @@ -0,0 +1,271 @@ +/**************************************************************************** + * Copyright (C) 2011 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include +#include +#include "HardDriveSM.hpp" +#include "Controls/DeviceHandler.hpp" +#include "settings/CSettings.h" +#include "prompts/PromptWindows.h" +#include "language/gettext.h" +#include "usbloader/GameList.h" +#include "usbloader/wbfs.h" +#include "usbloader/utils.h" +#include "prompts/ProgressWindow.h" +#include "settings/GameTitles.h" +#include "system/IosLoader.h" +#include "wad/nandtitle.h" + +static const char * OnOffText[] = +{ + trNOOP( "OFF" ), + trNOOP( "ON" ) +}; + +static const char * InstallToText[INSTALL_TO_MAX] = +{ + trNOOP( "None" ), + trNOOP( "GAMEID_Gamename" ), + trNOOP( "Gamename [GAMEID]" ) +}; + +static const char * SplitSizeText[INSTALL_TO_MAX] = +{ + trNOOP( "No Splitting" ), + trNOOP( "Split each 2GB" ), + trNOOP( "Split each 4GB" ), +}; + +static inline bool IsValidPartition(int fs_type, int cios) +{ + if (IosLoader::IsWaninkokoIOS(cios) && NandTitles.VersionOf(TITLE_ID(1, cios)) < 18) + { + return fs_type == PART_FS_WBFS; + } + else + { + return fs_type == PART_FS_WBFS || fs_type == PART_FS_FAT || fs_type == PART_FS_NTFS || fs_type == PART_FS_EXT; + } +} + +HardDriveSM::HardDriveSM() + : SettingsMenu(tr("Hard Drive Settings"), &GuiOptions, MENU_NONE) +{ + int Idx = 0; + Options->SetName(Idx++, "%s", tr( "Game/Install Partition" )); + Options->SetName(Idx++, "%s", tr( "Multiple Partitions" )); + Options->SetName(Idx++, "%s", tr( "USB Port" )); + Options->SetName(Idx++, "%s", tr( "Install Directories" )); + Options->SetName(Idx++, "%s", tr( "Game Split Size" )); + Options->SetName(Idx++, "%s", tr( "Install Partitions" )); + Options->SetName(Idx++, "%s", tr( "Sync FAT32 FS Info" )); + + OldSettingsPartition = Settings.partition; + OldSettingsMultiplePartitions = Settings.MultiplePartitions; + NewSettingsUSBPort = Settings.USBPort; + + SetOptionValues(); +} + +HardDriveSM::~HardDriveSM() +{ + //! if partition has changed, Reinitialize it + if (Settings.partition != OldSettingsPartition || + Settings.MultiplePartitions != OldSettingsMultiplePartitions || + Settings.USBPort != NewSettingsUSBPort) + { + WBFS_CloseAll(); + + if(Settings.USBPort != NewSettingsUSBPort) + { + DeviceHandler::Instance()->UnMountAllUSB(); + Settings.USBPort = NewSettingsUSBPort; + DeviceHandler::Instance()->MountAllUSB(); + + if(Settings.partition >= DeviceHandler::GetUSBPartitionCount()) + Settings.partition = 0; + } + + if(Settings.MultiplePartitions) + WBFS_OpenAll(); + else + WBFS_OpenPart(Settings.partition); + + //! Reload the new game titles + gameList.ReadGameList(); + GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path); + } +} + +void HardDriveSM::SetOptionValues() +{ + int Idx = 0; + + //! Settings: Game/Install Partition + PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(Settings.partition); + int checkPart = DeviceHandler::PartitionToPortPartition(Settings.partition); + + //! Get the partition name and it's size in GB's + Options->SetValue(Idx++, "%s (%.2fGB)", usbHandle->GetFSName(checkPart), usbHandle->GetSize(checkPart)/GB_SIZE); + + //! Settings: Multiple Partitions + Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.MultiplePartitions] )); + + //! Settings: USB Port + if(NewSettingsUSBPort == 2) + Options->SetValue(Idx++, tr("Both Ports")); + else + Options->SetValue(Idx++, "%i", NewSettingsUSBPort); + + //! Settings: Install directories + Options->SetValue(Idx++, "%s", tr( InstallToText[Settings.InstallToDir] )); + + //! Settings: Game Split Size + Options->SetValue(Idx++, "%s", tr( SplitSizeText[Settings.GameSplit] )); + + //! Settings: Install partitions + if(Settings.InstallPartitions == ONLY_GAME_PARTITION) + Options->SetValue(Idx++, "%s", tr("Only Game Partition")); + else if(Settings.InstallPartitions == ALL_PARTITIONS) + Options->SetValue(Idx++, "%s", tr("All Partitions")); + else if(Settings.InstallPartitions == REMOVE_UPDATE_PARTITION) + Options->SetValue(Idx++, "%s", tr("Remove update")); + + //! Settings: Sync FAT32 FS Info + Options->SetValue(Idx++, " "); +} + +int HardDriveSM::GetMenuInternal() +{ + int ret = optionBrowser->GetClickedOption(); + + if (ret < 0) + return MENU_NONE; + + int Idx = -1; + + //! Settings: Game/Install Partition + if (ret == ++Idx) + { + // Select the next valid partition, even if that's the same one + int fs_type = 0; + int ios = IOS_GetVersion(); + int retries = 20; + do + { + Settings.partition = (Settings.partition + 1) % DeviceHandler::GetUSBPartitionCount(); + fs_type = DeviceHandler::GetUSBFilesystemType(Settings.partition); + } + while (!IsValidPartition(fs_type, ios) && --retries > 0); + + if(fs_type == PART_FS_FAT && Settings.GameSplit == GAMESPLIT_NONE) + Settings.GameSplit = GAMESPLIT_4GB; + } + + //! Settings: Multiple Partitions + else if (ret == ++Idx) + { + if (++Settings.MultiplePartitions >= MAX_ON_OFF) Settings.MultiplePartitions = 0; + } + + //! Settings: USB Port + else if (ret == ++Idx) + { + if(!IosLoader::IsHermesIOS()) + { + WindowPrompt(tr("ERROR:"), tr("USB Port changing is only supported on Hermes cIOS."), tr("OK")); + NewSettingsUSBPort = 0; + Settings.USBPort = 0; + } + + else if (++NewSettingsUSBPort >= 3) // 2 = both ports + NewSettingsUSBPort = 0; + } + + //! Settings: Install directories + else if (ret == ++Idx) + { + if (++Settings.InstallToDir >= INSTALL_TO_MAX) Settings.InstallToDir = 0; + } + + //! Settings: Game Split Size + else if (ret == ++Idx) + { + if (++Settings.GameSplit >= GAMESPLIT_MAX) + { + if(DeviceHandler::GetUSBFilesystemType(Settings.partition) == PART_FS_FAT) + Settings.GameSplit = GAMESPLIT_2GB; + else + Settings.GameSplit = GAMESPLIT_NONE; + } + } + + //! Settings: Install partitions + else if (ret == ++Idx) + { + switch(Settings.InstallPartitions) + { + case ONLY_GAME_PARTITION: + Settings.InstallPartitions = ALL_PARTITIONS; + break; + case ALL_PARTITIONS: + Settings.InstallPartitions = REMOVE_UPDATE_PARTITION; + break; + default: + case REMOVE_UPDATE_PARTITION: + Settings.InstallPartitions = ONLY_GAME_PARTITION; + break; + } + } + + //! Settings: Sync FAT32 FS Info + else if (ret == ++Idx ) + { + int choice = WindowPrompt(0, tr("Do you want to sync free space info sector on all FAT32 partitions?"), tr("Yes"), tr("Cancel")); + if(choice) + { + StartProgress(tr("Synchronizing..."), tr("Please wait..."), 0, false, false); + int partCount = DeviceHandler::GetUSBPartitionCount(); + for(int i = 0; i < partCount; ++i) + { + ShowProgress(i, partCount); + if(DeviceHandler::GetUSBFilesystemType(i) == PART_FS_FAT) + { + PartitionHandle *usb = DeviceHandler::Instance()->GetUSBHandleFromPartition(i); + if(!usb) continue; + struct statvfs stats; + char drive[20]; + snprintf(drive, sizeof(drive), "%s:/", usb->MountName(i)); + memset(&stats, 0, sizeof(stats)); + memcpy(&stats.f_flag, "SCAN", 4); + statvfs(drive, &stats); + } + } + ProgressStop(); + } + } + + SetOptionValues(); + + return MENU_NONE; +} diff --git a/source/settings/menus/HardDriveSM.hpp b/source/settings/menus/HardDriveSM.hpp new file mode 100644 index 00000000..5d0ac6e3 --- /dev/null +++ b/source/settings/menus/HardDriveSM.hpp @@ -0,0 +1,47 @@ +/**************************************************************************** + * Copyright (C) 2011 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef HARDDRIVE_MENU_HPP_ +#define HARDDRIVE_MENU_HPP_ + +#include "SettingsMenu.hpp" + +class HardDriveSM : public SettingsMenu +{ + public: + HardDriveSM(); + ~HardDriveSM(); + virtual int GetType() { return CHardDriveSM; }; + protected: + void SetOptionValues(); + int GetMenuInternal(); + + int OldSettingsPartition; + int OldSettingsMultiplePartitions; + int NewSettingsUSBPort; + + OptionList GuiOptions; +}; + + +#endif diff --git a/source/settings/menus/LoaderSettings.cpp b/source/settings/menus/LoaderSettings.cpp index e4f4a6e3..b2b3df80 100644 --- a/source/settings/menus/LoaderSettings.cpp +++ b/source/settings/menus/LoaderSettings.cpp @@ -22,22 +22,13 @@ * distribution. ***************************************************************************/ #include -#include #include "LoaderSettings.hpp" -#include "Controls/DeviceHandler.hpp" #include "usbloader/usbstorage2.h" #include "settings/CSettings.h" -#include "prompts/ProgressWindow.h" #include "prompts/PromptWindows.h" #include "language/gettext.h" #include "wad/nandtitle.h" #include "prompts/TitleBrowser.h" -#include "usbloader/GameList.h" -#include "usbloader/wbfs.h" -#include "usbloader/utils.h" -#include "system/IosLoader.h" -#include "settings/GameTitles.h" -#include "xml/xml.h" #include "menu.h" static const char * OnOffText[] = @@ -74,20 +65,6 @@ static const char * LanguageText[MAX_LANGUAGE] = trNOOP( "Console Default" ) }; -static const char * InstallToText[INSTALL_TO_MAX] = -{ - trNOOP( "None" ), - trNOOP( "GAMEID_Gamename" ), - trNOOP( "Gamename [GAMEID]" ) -}; - -static const char * SplitSizeText[INSTALL_TO_MAX] = -{ - trNOOP( "No Splitting" ), - trNOOP( "Split each 2GB" ), - trNOOP( "Split each 4GB" ), -}; - static const char * Error002Text[] = { trNOOP( "No" ), @@ -95,18 +72,6 @@ static const char * Error002Text[] = trNOOP( "Anti" ) }; -static inline bool IsValidPartition(int fs_type, int cios) -{ - if (IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, cios)) < 18) - { - return fs_type == PART_FS_WBFS; - } - else - { - return fs_type == PART_FS_WBFS || fs_type == PART_FS_FAT || fs_type == PART_FS_NTFS || fs_type == PART_FS_EXT; - } -} - LoaderSettings::LoaderSettings() : SettingsMenu(tr("Loader Settings"), &GuiOptions, MENU_NONE) { @@ -118,57 +83,14 @@ LoaderSettings::LoaderSettings() Options->SetName(Idx++, "%s", tr( "Patch Country Strings" )); Options->SetName(Idx++, "%s", tr( "Ocarina" )); Options->SetName(Idx++, "%s", tr( "Boot/Standard" )); - Options->SetName(Idx++, "%s", tr( "Game/Install Partition" )); - Options->SetName(Idx++, "%s", tr( "Multiple Partitions" )); - Options->SetName(Idx++, "%s", tr( "USB Port" )); - Options->SetName(Idx++, "%s", tr( "Install directories" )); - Options->SetName(Idx++, "%s", tr( "Game Split Size" )); Options->SetName(Idx++, "%s", tr( "Quick Boot" )); Options->SetName(Idx++, "%s", tr( "Error 002 fix" )); Options->SetName(Idx++, "%s", tr( "Block IOS Reload" )); - Options->SetName(Idx++, "%s", tr( "Install partitions" )); Options->SetName(Idx++, "%s", tr( "Return To" )); - Options->SetName(Idx++, "%s", tr( "Messageboard Update" )); - Options->SetName(Idx++, "%s", tr( "Sync FAT32 FS Info" )); - - OldSettingsPartition = Settings.partition; - OldSettingsMultiplePartitions = Settings.MultiplePartitions; - NewSettingsUSBPort = Settings.USBPort; SetOptionValues(); } -LoaderSettings::~LoaderSettings() -{ - //! if partition has changed, Reinitialize it - if (Settings.partition != OldSettingsPartition || - Settings.MultiplePartitions != OldSettingsMultiplePartitions || - Settings.USBPort != NewSettingsUSBPort) - { - WBFS_CloseAll(); - - if(Settings.USBPort != NewSettingsUSBPort) - { - DeviceHandler::Instance()->UnMountAllUSB(); - Settings.USBPort = NewSettingsUSBPort; - DeviceHandler::SetUSBPort(Settings.USBPort); - DeviceHandler::Instance()->MountAllUSB(); - - if(Settings.partition >= DeviceHandler::Instance()->GetUSBHandle()->GetPartitionTotalCount()) - Settings.partition = 0; - } - - if(Settings.MultiplePartitions) - WBFS_OpenAll(); - else - WBFS_OpenPart(Settings.partition); - - //! Reload the new game titles - gameList.ReadGameList(); - GameTitles.LoadTitlesFromWiiTDB(Settings.titlestxt_path); - } -} - void LoaderSettings::SetOptionValues() { int Idx = 0; @@ -194,25 +116,6 @@ void LoaderSettings::SetOptionValues() else Options->SetValue(Idx++, "********"); - //! Settings: Game/Install Partition - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - // Get the partition name and it's size in GB's - Options->SetValue(Idx++, "%s (%.2fGB)", usbHandle->GetFSName(Settings.partition), usbHandle->GetSize(Settings.partition)/GB_SIZE); - - //! Settings: Multiple Partitions - Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.MultiplePartitions] )); - - //! Settings: USB Port - if(NewSettingsUSBPort == 2) - Options->SetValue(Idx++, tr("Both Ports")); - else - Options->SetValue(Idx++, "%i", NewSettingsUSBPort); - - //! Settings: Install directories - Options->SetValue(Idx++, "%s", tr( InstallToText[Settings.InstallToDir] )); - - //! Settings: Game Split Size - Options->SetValue(Idx++, "%s", tr( SplitSizeText[Settings.GameSplit] )); //! Settings: Quick Boot Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.quickboot] )); @@ -223,14 +126,6 @@ void LoaderSettings::SetOptionValues() //! Settings: Block IOS Reload Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.BlockIOSReload] )); - //! Settings: Install partitions - if(Settings.InstallPartitions == ONLY_GAME_PARTITION) - Options->SetValue(Idx++, "%s", tr("Only Game Partition")); - else if(Settings.InstallPartitions == ALL_PARTITIONS) - Options->SetValue(Idx++, "%s", tr("All Partitions")); - else if(Settings.InstallPartitions == REMOVE_UPDATE_PARTITION) - Options->SetValue(Idx++, "%s", tr("Remove update")); - //! Settings: Return To const char* TitleName = NULL; u64 tid = NandTitles.FindU32(Settings.returnTo); @@ -238,12 +133,6 @@ void LoaderSettings::SetOptionValues() TitleName = NandTitles.NameOf(tid); TitleName = TitleName ? TitleName : strlen(Settings.returnTo) > 0 ? Settings.returnTo : tr(OnOffText[0]); Options->SetValue(Idx++, "%s", TitleName); - - //! Settings: Messageboard Update - Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.PlaylogUpdate] )); - - //! Settings: Sync FAT32 FS Info - Options->SetValue(Idx++, " "); } int LoaderSettings::GetMenuInternal() @@ -310,101 +199,6 @@ int LoaderSettings::GetMenuInternal() } } - //! Settings: Game/Install Partition - else if (ret == ++Idx) - { - // Select the next valid partition, even if that's the same one - int fs_type = 0; - int ios = IOS_GetVersion(); - int retries = 20; - do - { - Settings.partition = (Settings.partition + 1) % DeviceHandler::Instance()->GetUSBHandle()->GetPartitionTotalCount(); - fs_type = DeviceHandler::GetUSBFilesystemType(Settings.partition); - } - while (!IsValidPartition(fs_type, ios) && --retries > 0); - - if(fs_type == PART_FS_FAT && Settings.GameSplit == GAMESPLIT_NONE) - Settings.GameSplit = GAMESPLIT_4GB; - } - - //! Settings: Multiple Partitions - else if (ret == ++Idx) - { - if (++Settings.MultiplePartitions >= MAX_ON_OFF) Settings.MultiplePartitions = 0; - } - - //! Settings: USB Port - else if (ret == ++Idx) - { - if(!IosLoader::IsHermesIOS()) - { - WindowPrompt(tr("ERROR:"), tr("USB Port changing is only supported on Hermes cIOS."), tr("OK")); - NewSettingsUSBPort = 0; - Settings.USBPort = 0; - } - - else if (++NewSettingsUSBPort >= 3) // 2 = both ports - NewSettingsUSBPort = 0; - - if(NewSettingsUSBPort == 2) - { - bool allSDPaths = true; - if(strncmp(Settings.covers_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.coversFull_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.disc_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.theme_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.titlestxt_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.update_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.Cheatcodespath, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.TxtCheatcodespath, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.dolpath, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.homebrewapps_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.BcaCodepath, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.WipCodepath, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.languagefiles_path, "usb", 3) == 0) - allSDPaths = false; - else if(strncmp(Settings.WDMpath, "usb", 3) == 0) - allSDPaths = false; - - if(!allSDPaths) - { - WindowPrompt(tr("ERROR:"), tr("Automatic port switching is done on the fly. You need to change all custom paths to SD-Card first for this option or else it could damage a filesystem."), tr("OK")); - NewSettingsUSBPort = 0; - } - } - } - - //! Settings: Install directories - else if (ret == ++Idx) - { - if (++Settings.InstallToDir >= INSTALL_TO_MAX) Settings.InstallToDir = 0; - } - - //! Settings: Game Split Size - else if (ret == ++Idx) - { - if (++Settings.GameSplit >= GAMESPLIT_MAX) - { - if(DeviceHandler::GetUSBFilesystemType(Settings.partition) == PART_FS_FAT) - Settings.GameSplit = GAMESPLIT_2GB; - else - Settings.GameSplit = GAMESPLIT_NONE; - } - } - //! Settings: Quick Boot else if (ret == ++Idx) { @@ -423,24 +217,6 @@ int LoaderSettings::GetMenuInternal() if (++Settings.BlockIOSReload >= 3) Settings.BlockIOSReload = 0; } - //! Settings: Install partitions - else if (ret == ++Idx) - { - switch(Settings.InstallPartitions) - { - case ONLY_GAME_PARTITION: - Settings.InstallPartitions = ALL_PARTITIONS; - break; - case ALL_PARTITIONS: - Settings.InstallPartitions = REMOVE_UPDATE_PARTITION; - break; - default: - case REMOVE_UPDATE_PARTITION: - Settings.InstallPartitions = ONLY_GAME_PARTITION; - break; - } - } - //! Settings: Return To else if (ret == ++Idx) { @@ -450,37 +226,6 @@ int LoaderSettings::GetMenuInternal() snprintf(Settings.returnTo, sizeof(Settings.returnTo), "%s", tidChar); } - //! Settings: Messageboard Update - else if (ret == ++Idx ) - { - if (++Settings.PlaylogUpdate >= MAX_ON_OFF) Settings.PlaylogUpdate = 0; - } - - //! Settings: Sync FAT32 FS Info - else if (ret == ++Idx ) - { - int choice = WindowPrompt(0, tr("Do you want to sync free space info sector on all FAT32 partitions?"), tr("Yes"), tr("Cancel")); - if(choice) - { - StartProgress(tr("Synchronizing..."), tr("Please wait..."), 0, false, false); - PartitionHandle * usb = DeviceHandler::Instance()->GetUSBHandle(); - for(int i = 0; i < usb->GetPartitionCount(); ++i) - { - ShowProgress(i, usb->GetPartitionCount()); - if(strncmp(usb->GetFSName(i), "FAT", 3) == 0) - { - struct statvfs stats; - char drive[20]; - snprintf(drive, sizeof(drive), "%s:/", usb->MountName(i)); - memset(&stats, 0, sizeof(stats)); - memcpy(&stats.f_flag, "SCAN", 4); - statvfs(drive, &stats); - } - } - ProgressStop(); - } - } - SetOptionValues(); return MENU_NONE; diff --git a/source/settings/menus/LoaderSettings.hpp b/source/settings/menus/LoaderSettings.hpp index 9ff3eb61..a3b03bdb 100644 --- a/source/settings/menus/LoaderSettings.hpp +++ b/source/settings/menus/LoaderSettings.hpp @@ -30,16 +30,11 @@ class LoaderSettings : public SettingsMenu { public: LoaderSettings(); - ~LoaderSettings(); virtual int GetType() { return CLoaderSettings; }; protected: void SetOptionValues(); int GetMenuInternal(); - int OldSettingsPartition; - int OldSettingsMultiplePartitions; - int NewSettingsUSBPort; - OptionList GuiOptions; }; diff --git a/source/settings/menus/ParentalControlSM.cpp b/source/settings/menus/ParentalControlSM.cpp index 93f5b3d4..1c82ac4a 100644 --- a/source/settings/menus/ParentalControlSM.cpp +++ b/source/settings/menus/ParentalControlSM.cpp @@ -59,14 +59,15 @@ ParentalControlSM::ParentalControlSM() Options->SetName(Idx++, "%s", tr( "Block Global Settings" )); Options->SetName(Idx++, "%s", tr( "Block Gui Settings" )); Options->SetName(Idx++, "%s", tr( "Block Loader Settings" )); - Options->SetName(Idx++, "%s", tr( "Block Parental Settings" )); + Options->SetName(Idx++, "%s", tr( "Block Hard Drive Settings" )); Options->SetName(Idx++, "%s", tr( "Block Feature Settings" )); + Options->SetName(Idx++, "%s", tr( "Block Parental Settings" )); Options->SetName(Idx++, "%s", tr( "Block Sound Settings" )); + Options->SetName(Idx++, "%s", tr( "Block Theme Downloader" )); + Options->SetName(Idx++, "%s", tr( "Block Theme Menu" )); Options->SetName(Idx++, "%s", tr( "Block Custom Paths" )); Options->SetName(Idx++, "%s", tr( "Block Updates" )); Options->SetName(Idx++, "%s", tr( "Block Reset Settings" )); - Options->SetName(Idx++, "%s", tr( "Block Theme Downloader" )); - Options->SetName(Idx++, "%s", tr( "Block Theme Menu" )); Options->SetName(Idx++, "%s", tr( "Block Game Settings" )); Options->SetName(Idx++, "%s", tr( "Block HBC Menu" )); Options->SetName(Idx++, "%s", tr( "Block Title Launcher" )); @@ -111,15 +112,24 @@ void ParentalControlSM::SetOptionValues() //! Settings: Block Loader Settings Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_LOADER_SETTINGS) != 0)])); - //! Settings: Block Parental Settings - Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS) != 0)])); + //! Settings: Block Hard Drive Settings + Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_HARD_DRIVE_SETTINGS) != 0)])); //! Settings: Block Feature Settings Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_FEATURE_SETTINGS) != 0)])); + //! Settings: Block Parental Settings + Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_PARENTAL_SETTINGS) != 0)])); + //! Settings: Block Sound Settings Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_SOUND_SETTINGS) != 0)])); + //! Settings: Block Theme Downloader + Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_DOWNLOADER) != 0)])); + + //! Settings: Block Theme Menu + Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_MENU) != 0)])); + //! Settings: Block Custom Paths Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_CUSTOMPATH_SETTINGS) != 0)])); @@ -129,12 +139,6 @@ void ParentalControlSM::SetOptionValues() //! Settings: Block Reset Settings Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_RESET_SETTINGS) != 0)])); - //! Settings: Block Theme Downloader - Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_DOWNLOADER) != 0)])); - - //! Settings: Block Theme Menu - Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_THEME_MENU) != 0)])); - //! Settings: Block Game Settings Options->SetValue(Idx++, "%s", tr(OnOffText[((Settings.ParentalBlocks & BLOCK_GAME_SETTINGS) != 0)])); @@ -240,10 +244,10 @@ int ParentalControlSM::GetMenuInternal() Settings.ParentalBlocks ^= BLOCK_LOADER_SETTINGS; } - //! Settings: Block Parental Settings + //! Settings: Hard Drive Settings else if (ret == ++Idx) { - Settings.ParentalBlocks ^= BLOCK_PARENTAL_SETTINGS; + Settings.ParentalBlocks ^= BLOCK_HARD_DRIVE_SETTINGS; } //! Settings: Block Feature Settings @@ -252,12 +256,30 @@ int ParentalControlSM::GetMenuInternal() Settings.ParentalBlocks ^= BLOCK_FEATURE_SETTINGS; } + //! Settings: Block Parental Settings + else if (ret == ++Idx) + { + Settings.ParentalBlocks ^= BLOCK_PARENTAL_SETTINGS; + } + //! Settings: Block Sound Settings else if (ret == ++Idx) { Settings.ParentalBlocks ^= BLOCK_SOUND_SETTINGS; } + //! Settings: Block Theme Downloader + else if (ret == ++Idx) + { + Settings.ParentalBlocks ^= BLOCK_THEME_DOWNLOADER; + } + + //! Settings: Block Theme Menu + else if (ret == ++Idx) + { + Settings.ParentalBlocks ^= BLOCK_THEME_MENU; + } + //! Settings: Block Custom Paths else if (ret == ++Idx) { @@ -276,18 +298,6 @@ int ParentalControlSM::GetMenuInternal() Settings.ParentalBlocks ^= BLOCK_RESET_SETTINGS; } - //! Settings: Block Theme Downloader - else if (ret == ++Idx) - { - Settings.ParentalBlocks ^= BLOCK_THEME_DOWNLOADER; - } - - //! Settings: Block Theme Menu - else if (ret == ++Idx) - { - Settings.ParentalBlocks ^= BLOCK_THEME_MENU; - } - //! Settings: Block Game Settings else if (ret == ++Idx) { diff --git a/source/settings/menus/SettingsMenu.hpp b/source/settings/menus/SettingsMenu.hpp index 2ff454bc..6d3901df 100644 --- a/source/settings/menus/SettingsMenu.hpp +++ b/source/settings/menus/SettingsMenu.hpp @@ -39,6 +39,7 @@ enum CGameLoadSM, CUninstallSM, CFeatureSettings, + CHardDriveSM, }; class SettingsMenu : public GuiWindow diff --git a/source/system/IosLoader.cpp b/source/system/IosLoader.cpp index bd94cfa0..1186e05d 100644 --- a/source/system/IosLoader.cpp +++ b/source/system/IosLoader.cpp @@ -113,6 +113,7 @@ s32 IosLoader::LoadGameCios(s32 ios) WBFS_CloseAll(); WDVD_Close(); DeviceHandler::DestroyInstance(); + USBStorage2_Deinit(); ret = ReloadIosSafe(ios); diff --git a/source/usbloader/GameBooter.cpp b/source/usbloader/GameBooter.cpp index 66d10fe9..82f44be2 100644 --- a/source/usbloader/GameBooter.cpp +++ b/source/usbloader/GameBooter.cpp @@ -32,7 +32,6 @@ u32 AppEntrypoint = 0; struct discHdr *dvdheader = NULL; -extern u32 hdd_sector_size; extern int mountMethod; int GameBooter::BootGCMode() @@ -126,8 +125,7 @@ int GameBooter::SetupDisc(u8 * gameID) int ret = -1; - if(((IosLoader::IsWaninkokoIOS() && IOS_GetRevision() < 18) || - hdd_sector_size != 512) && gameList.GetGameFS(gameID) == PART_FS_WBFS) + if(IosLoader::IsWaninkokoIOS() && IOS_GetRevision() < 18) { gprintf("Disc_SetUSB..."); ret = Disc_SetUSB(gameID); @@ -185,6 +183,10 @@ int GameBooter::BootGame(const char * gameID) if(ret < 0) return ret; + //! Remember game's USB port + int partition = gameList.GetPartitionNumber(gameHeader.id); + int usbport = DeviceHandler::PartitionToUSBPort(partition); + //! Setup game configuration from game settings. If no game settings exist use global/default. GameCFG * game_cfg = GameSettings.GetGameCFG(gameHeader.id); u8 videoChoice = game_cfg->video == INHERIT ? Settings.videomode : game_cfg->video; @@ -270,20 +272,14 @@ int GameBooter::BootGame(const char * gameID) //! Shadow mload - Only needed on some games with Hermes v5.1 (Check is inside the function) shadow_mload(); - //! Remember game's USB port - int usbport = USBStorage2_GetPort(); - gprintf("Shutting down devices...\n"); //! Flush all caches and close up all devices WBFS_CloseAll(); DeviceHandler::DestroyInstance(); if(Settings.USBPort == 2) - { //! Reset USB port because device handler changes it for cache flushing - USBStorage2_Init(); USBStorage2_SetPort(usbport); - USBStorage2_Deinit(); - } + USBStorage2_Deinit(); USB_Deinitialize(); //! Modify Wii Message Board to display the game starting here diff --git a/source/usbloader/GameList.cpp b/source/usbloader/GameList.cpp index ef0b48a5..c1b0620e 100644 --- a/source/usbloader/GameList.cpp +++ b/source/usbloader/GameList.cpp @@ -167,10 +167,10 @@ int GameList::ReadGameList() } else { - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); int cnt = 0; + int partitions = DeviceHandler::GetUSBPartitionCount(); - for(int part = 0; part < usbHandle->GetPartitionTotalCount(); ++part) + for(int part = 0; part < partitions; ++part) { int ret = InternalReadList(part); if(ret > 0) cnt += ret; diff --git a/source/usbloader/MountGamePartition.cpp b/source/usbloader/MountGamePartition.cpp index 9ff9d3dd..f3c78665 100644 --- a/source/usbloader/MountGamePartition.cpp +++ b/source/usbloader/MountGamePartition.cpp @@ -14,11 +14,12 @@ static int FindGamePartition() { - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); + int partCount = DeviceHandler::GetUSBPartitionCount(); + // Loop through all WBFS partitions first to check them in case IOS249 Rev < 18 - for(int i = 0; i < usbHandle->GetPartitionCount(); ++i) + for(int i = 0; i < partCount; ++i) { - if(strncmp(usbHandle->GetFSName(i), "WBFS", 4) != 0) + if(DeviceHandler::GetUSBFilesystemType(i) != PART_FS_WBFS) continue; if (WBFS_OpenPart(i) == 0) @@ -33,11 +34,11 @@ static int FindGamePartition() return -1; // Loop through FAT/NTFS/EXT partitions, and find the first partition with games on it (if there is one) - for(int i = 0; i < usbHandle->GetPartitionCount(); ++i) + for(int i = 0; i < partCount; ++i) { - if(strncmp(usbHandle->GetFSName(i), "NTFS", 4) != 0 && - strncmp(usbHandle->GetFSName(i), "FAT", 3) != 0 && - strncmp(usbHandle->GetFSName(i), "LINUX", 5) != 0) + if(DeviceHandler::GetUSBFilesystemType(i) != PART_FS_NTFS && + DeviceHandler::GetUSBFilesystemType(i) != PART_FS_FAT && + DeviceHandler::GetUSBFilesystemType(i) != PART_FS_EXT) { continue; } @@ -64,7 +65,6 @@ static int FindGamePartition() static int PartitionChoice() { int ret = -1; - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); int choice = WindowPrompt(tr( "No WBFS or FAT/NTFS/EXT partition found" ), tr( "You need to select or format a partition" ), tr( "Select" ), tr( "Format" ), tr( "Return" )); @@ -79,9 +79,9 @@ static int PartitionChoice() if(part_num >= 0) { if(IosLoader::IsWaninkokoIOS() && NandTitles.VersionOf(TITLE_ID(1, IOS_GetVersion())) < 18 && - (strncmp(usbHandle->GetFSName(part_num), "NTFS", 4) == 0 || - strncmp(usbHandle->GetFSName(part_num), "FAT", 3) == 0 || - strncmp(usbHandle->GetFSName(part_num), "LINUX", 5) == 0)) + (DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_NTFS || + DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_FAT || + DeviceHandler::GetUSBFilesystemType(part_num) == PART_FS_EXT)) { WindowPrompt(tr("Warning:"), tr("You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."), tr("OK")); } diff --git a/source/usbloader/frag.c b/source/usbloader/frag.c index 94bcc2c1..54e85904 100644 --- a/source/usbloader/frag.c +++ b/source/usbloader/frag.c @@ -161,7 +161,7 @@ int frag_remap(FragList *ff, FragList *log, FragList *phy) return 0; } -int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset) +int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset, const u32 hdd_sector_size) { struct stat st; FragList *fs = NULL; @@ -220,7 +220,7 @@ int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 // if wbfs file format, remap. wbfs_disc_t *d = WBFS_OpenDisc(id); if (!d) { ret_val = -4; WBFS_CloseDisc(d); goto out; } - ret = wbfs_get_fragments(d, &frag_append, fs); + ret = wbfs_get_fragments(d, &frag_append, fs, hdd_sector_size); WBFS_CloseDisc(d); if (ret) { ret_val = -5; goto out; } } @@ -234,7 +234,7 @@ int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 wbfs_disc_t *d = WBFS_OpenDisc(id); if (!d) { ret_val = -4; goto out; } frag_init(fw, MAX_FRAG); - ret = wbfs_get_fragments(d, &frag_append, fw); + ret = wbfs_get_fragments(d, &frag_append, fw, hdd_sector_size); if (ret) { ret_val = -5; goto out; } WBFS_CloseDisc(d); // DEBUG: frag_list->num = MAX_FRAG-10; // stress test diff --git a/source/usbloader/frag.h b/source/usbloader/frag.h index f2d60082..57c7fedb 100644 --- a/source/usbloader/frag.h +++ b/source/usbloader/frag.h @@ -39,7 +39,7 @@ int frag_get(FragList *ff, u32 offset, u32 count, u32 *poffset, u32 *psector, u3 int frag_remap(FragList *ff, FragList *log, FragList *phy); -int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset); +int get_frag_list_for_file(char *fname, u8 *id, const u8 wbfs_part_fs, const u32 lba_offset, const u32 hdd_sector_size); int get_frag_list(u8 *id); int set_frag_list(u8 *id); diff --git a/source/usbloader/usbstorage2.c b/source/usbloader/usbstorage2.c index 66bbd963..a3bf846e 100644 --- a/source/usbloader/usbstorage2.c +++ b/source/usbloader/usbstorage2.c @@ -59,8 +59,9 @@ #define isMEM2Buffer(p) (((u32) p & 0x10000000) != 0) -#define MAX_BUFFER_SECTORS 256 -#define UMS_HEAPSIZE 0x8000 +#define MAX_SECTOR_SIZE 4096 +#define MAX_BUFFER_SECTORS 128 +#define UMS_HEAPSIZE 2*1024 /* Variables */ static char fs[] ATTRIBUTE_ALIGN(32) = "/dev/usb2"; @@ -69,15 +70,14 @@ static char fs3[] ATTRIBUTE_ALIGN(32) = "/dev/usb/ehc"; static u8 * mem2_ptr = NULL; static s32 hid = -1, fd = -1; -static u32 usb2_port = 0; //autodetect mode (works only with hermes ios & rodries ehcmodule) -u32 hdd_sector_size = 512; +static u32 usb2_port = -1; //current USB port +bool hddInUse[2] = { false, false }; +u32 hdd_sector_size[2] = { 512, 512 }; -s32 USBStorage2_Init(void) +s32 USBStorage2_Init(u32 port) { - s32 ret; - - /* Already open */ - if (fd >= 0) return 0; + if(hddInUse[port]) + return 0; /* Create heap */ if (hid < 0) @@ -87,46 +87,33 @@ s32 USBStorage2_Init(void) } /* Open USB device */ - fd = IOS_Open(fs, 0); + if (fd < 0) fd = IOS_Open(fs, 0); if (fd < 0) fd = IOS_Open(fs2, 0); if (fd < 0) fd = IOS_Open(fs3, 0); if (fd < 0) return fd; - IOS_IoctlvFormat(hid, fd, USB_IOCTL_SET_PORT, "i:", usb2_port); + USBStorage2_SetPort(port); /* Initialize USB storage */ - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":"); + IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_INIT, ":"); /* Get device capacity */ - if (USBStorage2_GetCapacity(&hdd_sector_size) == 0) - { - ret = IPC_ENOENT; - goto err; - } + if (USBStorage2_GetCapacity(port, &hdd_sector_size[port]) == 0) + return IPC_ENOENT; + + hddInUse[port] = true; return 0; // 0->HDD, 1->DVD - - err: - /* Close USB device */ - if (fd >= 0) - { - IOS_Close(fd); - fd = -1; - } - - return ret; } -void USBStorage2_Deinit(void) +void USBStorage2_Deinit() { /* Close USB device */ if (fd >= 0) { - IOS_Close(fd); + IOS_Close(fd); // not sure to close the fd is needed fd = -1; } - - hdd_sector_size = 512; } s32 USBStorage2_SetPort(u32 port) @@ -154,13 +141,17 @@ s32 USBStorage2_GetPort() return usb2_port; } -s32 USBStorage2_Watchdog(u32 on_off) +s32 USBStorage2_GetCapacity(u32 port, u32 *_sector_size) { if (fd >= 0) { s32 ret; + u32 sector_size = 0; + USBStorage2_SetPort(port); - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_WATCHDOG, "i:", on_off); + ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", §or_size); + + if (ret && _sector_size) *_sector_size = sector_size; return ret; } @@ -168,23 +159,7 @@ s32 USBStorage2_Watchdog(u32 on_off) return IPC_ENOENT; } -s32 USBStorage2_GetCapacity(u32 *_sector_size) -{ - if (fd >= 0) - { - s32 ret; - - ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_UMS_GET_CAPACITY, ":i", &hdd_sector_size); - - if (ret && _sector_size) *_sector_size = hdd_sector_size; - - return ret; - } - - return IPC_ENOENT; -} - -s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer) +s32 USBStorage2_ReadSectors(u32 port, u32 sector, u32 numSectors, void *buffer) { u8 *buf = (u8 *) buffer; s32 ret = -1; @@ -193,14 +168,16 @@ s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer) if (fd < 0) return fd; if (!mem2_ptr) - mem2_ptr = (u8 *) MEM2_alloc(hdd_sector_size * MAX_BUFFER_SECTORS); + mem2_ptr = (u8 *) MEM2_alloc(MAX_SECTOR_SIZE * MAX_BUFFER_SECTORS); + + USBStorage2_SetPort(port); s32 read_secs, read_size; while(numSectors > 0) { read_secs = numSectors > MAX_BUFFER_SECTORS ? MAX_BUFFER_SECTORS : numSectors; - read_size = read_secs*hdd_sector_size; + read_size = read_secs*hdd_sector_size[port]; // Do not read more than MAX_BUFFER_SECTORS sectors at once and create a mem overflow! if (!isMEM2Buffer(buffer)) @@ -227,7 +204,7 @@ s32 USBStorage2_ReadSectors(u32 sector, u32 numSectors, void *buffer) return ret; } -s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer) +s32 USBStorage2_WriteSectors(u32 port, u32 sector, u32 numSectors, const void *buffer) { u8 *buf = (u8 *) buffer; s32 ret = -1; @@ -237,14 +214,16 @@ s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer) /* Device not opened */ if (!mem2_ptr) - mem2_ptr = (u8 *) MEM2_alloc(hdd_sector_size * MAX_BUFFER_SECTORS); + mem2_ptr = (u8 *) MEM2_alloc(MAX_SECTOR_SIZE * MAX_BUFFER_SECTORS); + + USBStorage2_SetPort(port); s32 write_size, write_secs; while(numSectors > 0) { write_secs = numSectors > MAX_BUFFER_SECTORS ? MAX_BUFFER_SECTORS : numSectors; - write_size = write_secs*hdd_sector_size; + write_size = write_secs*hdd_sector_size[port]; /* MEM1 buffer */ if (!isMEM2Buffer(buffer)) @@ -274,22 +253,22 @@ s32 USBStorage2_WriteSectors(u32 sector, u32 numSectors, const void *buffer) static bool __usbstorage_Startup(void) { - return USBStorage2_Init() >= 0; + return USBStorage2_Init(0) >= 0; } static bool __usbstorage_IsInserted(void) { - return (USBStorage2_GetCapacity(NULL) != 0); + return (USBStorage2_GetCapacity(0, NULL) != 0); } static bool __usbstorage_ReadSectors(u32 sector, u32 numSectors, void *buffer) { - return (USBStorage2_ReadSectors(sector, numSectors, buffer) >= 0); + return (USBStorage2_ReadSectors(0, sector, numSectors, buffer) >= 0); } static bool __usbstorage_WriteSectors(u32 sector, u32 numSectors, const void *buffer) { - return (USBStorage2_WriteSectors(sector, numSectors, buffer) >= 0); + return (USBStorage2_WriteSectors(0, sector, numSectors, buffer) >= 0); } static bool __usbstorage_ClearStatus(void) @@ -299,11 +278,12 @@ static bool __usbstorage_ClearStatus(void) static bool __usbstorage_Shutdown(void) { - USBStorage2_Deinit(); + hddInUse[0] = false; + hdd_sector_size[0] = 512; return true; } -const DISC_INTERFACE __io_usbstorage2 = { +const DISC_INTERFACE __io_usbstorage2_port0 = { DEVICE_TYPE_WII_UMS, FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, (FN_MEDIUM_STARTUP) &__usbstorage_Startup, (FN_MEDIUM_ISINSERTED) &__usbstorage_IsInserted, @@ -312,3 +292,40 @@ const DISC_INTERFACE __io_usbstorage2 = { (FN_MEDIUM_CLEARSTATUS) &__usbstorage_ClearStatus, (FN_MEDIUM_SHUTDOWN) &__usbstorage_Shutdown }; + +static bool __usbstorage_Startup2(void) +{ + return USBStorage2_Init(1) >= 0; +} + +static bool __usbstorage_IsInserted2(void) +{ + return (USBStorage2_GetCapacity(1, NULL) != 0); +} + +static bool __usbstorage_ReadSectors2(u32 sector, u32 numSectors, void *buffer) +{ + return (USBStorage2_ReadSectors(1, sector, numSectors, buffer) >= 0); +} + +static bool __usbstorage_WriteSectors2(u32 sector, u32 numSectors, const void *buffer) +{ + return (USBStorage2_WriteSectors(1, sector, numSectors, buffer) >= 0); +} + +static bool __usbstorage_Shutdown2(void) +{ + hddInUse[1] = false; + hdd_sector_size[1] = 512; + return true; +} + +const DISC_INTERFACE __io_usbstorage2_port1 = { + DEVICE_TYPE_WII_UMS, FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_WII_USB, + (FN_MEDIUM_STARTUP) &__usbstorage_Startup2, + (FN_MEDIUM_ISINSERTED) &__usbstorage_IsInserted2, + (FN_MEDIUM_READSECTORS) &__usbstorage_ReadSectors2, + (FN_MEDIUM_WRITESECTORS) &__usbstorage_WriteSectors2, + (FN_MEDIUM_CLEARSTATUS) &__usbstorage_ClearStatus, + (FN_MEDIUM_SHUTDOWN) &__usbstorage_Shutdown2 +}; diff --git a/source/usbloader/usbstorage2.h b/source/usbloader/usbstorage2.h index d47dcdb4..cd8c528d 100644 --- a/source/usbloader/usbstorage2.h +++ b/source/usbloader/usbstorage2.h @@ -9,22 +9,20 @@ extern "C" #endif /* Prototypes */ - s32 USBStorage2_Init(void); - void USBStorage2_Deinit(void); - s32 USBStorage2_Umount(void); - s32 USBStorage2_GetCapacity(u32 *); + s32 USBStorage2_Init(u32 port); + void USBStorage2_Deinit(); + s32 USBStorage2_GetCapacity(u32 port, u32 *size); - s32 USBStorage2_ReadSectors(u32, u32, void *); - s32 USBStorage2_WriteSectors(u32, u32, const void *); - - s32 USBStorage2_Watchdog(u32 on_off); + s32 USBStorage2_ReadSectors(u32 port, u32 sector, u32 numSectors, void *buffer); + s32 USBStorage2_WriteSectors(u32 port, u32 sector, u32 numSectors, const void *buffer); s32 USBStorage2_SetPort(u32 port); s32 USBStorage2_GetPort(); #define DEVICE_TYPE_WII_UMS (('W'<<24)|('U'<<16)|('M'<<8)|'S') - extern const DISC_INTERFACE __io_usbstorage2; + extern const DISC_INTERFACE __io_usbstorage2_port0; + extern const DISC_INTERFACE __io_usbstorage2_port1; #ifdef __cplusplus } diff --git a/source/usbloader/wbfs.cpp b/source/usbloader/wbfs.cpp index d47e6c99..e1010243 100644 --- a/source/usbloader/wbfs.cpp +++ b/source/usbloader/wbfs.cpp @@ -28,8 +28,6 @@ wbfs_disc_t* WBFS_OpenDisc(u8 *discid) if(!VALID(part)) return NULL; - DeviceHandler::SetUSBPortFromPartition(part); - return WbfsList[part]->OpenDisc(discid); } @@ -42,8 +40,6 @@ void WBFS_CloseDisc(wbfs_disc_t *disc) if(!VALID(part_num)) return; - DeviceHandler::SetUSBPortFromPartition(part_num); - WbfsList[part_num]->CloseDisc(disc); } @@ -55,10 +51,9 @@ s32 WBFS_Init(u32 device) s32 WBFS_OpenAll() { int ret = -1; + int partCount = DeviceHandler::GetUSBPartitionCount(); - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - - for(int i = 0; i < usbHandle->GetPartitionTotalCount(); ++i) + for(int i = 0; i < partCount; ++i) { if(WBFS_OpenPart(i) == 0) ret = 0; @@ -69,14 +64,9 @@ s32 WBFS_OpenAll() s32 WBFS_OpenPart(int part_num) { - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - if(part_num < 0 || part_num >= usbHandle->GetPartitionTotalCount()) - return -1; - - //! No need to switch ports on other partitions than WBFS - //! the open() function does not actually read from drive there. - if(strncmp(usbHandle->GetFSName(part_num), "WBFS", 4) == 0) - DeviceHandler::SetUSBPortFromPartition(part_num); + PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(part_num); + if(!usbHandle || part_num < 0 || part_num >= DeviceHandler::GetUSBPartitionCount()) + return -1; // close WBFS_Close(part_num); @@ -84,23 +74,26 @@ s32 WBFS_OpenPart(int part_num) if(part_num >= (int) WbfsList.size()) WbfsList.resize(part_num+1); - gprintf("\tWBFS_OpenPart: filesystem: %s, start sector %u, sector count: %u\n", usbHandle->GetFSName(part_num), usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num)); + int portPart = DeviceHandler::PartitionToPortPartition(part_num); + int usbPort = DeviceHandler::PartitionToUSBPort(part_num); - if (strncmp(usbHandle->GetFSName(part_num), "FAT", 3) == 0) + gprintf("\tWBFS_OpenPart: filesystem: %s, start sector %u, sector count: %u\n", usbHandle->GetFSName(portPart), usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart)); + + if (strncmp(usbHandle->GetFSName(portPart), "FAT", 3) == 0) { - WbfsList[part_num] = new Wbfs_Fat(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num); + WbfsList[part_num] = new Wbfs_Fat(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort); } - else if (strncmp(usbHandle->GetFSName(part_num), "NTFS", 4) == 0) + else if (strncmp(usbHandle->GetFSName(portPart), "NTFS", 4) == 0) { - WbfsList[part_num] = new Wbfs_Ntfs(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num); + WbfsList[part_num] = new Wbfs_Ntfs(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort); } - else if (strncmp(usbHandle->GetFSName(part_num), "LINUX", 5) == 0) + else if (strncmp(usbHandle->GetFSName(portPart), "LINUX", 5) == 0) { - WbfsList[part_num] = new Wbfs_Ext(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num); + WbfsList[part_num] = new Wbfs_Ext(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort); } - else if (strncmp(usbHandle->GetFSName(part_num), "WBFS", 4) == 0) + else if (strncmp(usbHandle->GetFSName(portPart), "WBFS", 4) == 0) { - WbfsList[part_num] = new Wbfs_Wbfs(usbHandle->GetLBAStart(part_num), usbHandle->GetSecCount(part_num), part_num); + WbfsList[part_num] = new Wbfs_Wbfs(usbHandle->GetLBAStart(portPart), usbHandle->GetSecCount(portPart), part_num, usbPort); } else { @@ -122,11 +115,6 @@ bool WBFS_Close(int part_num) if(!VALID(part_num)) return false; - //! No need to switch ports on other partitions than WBFS - //! the close() function does not actually write to drive there. - if(WbfsList[part_num]->GetFSType() == PART_FS_WBFS) - DeviceHandler::SetUSBPortFromPartition(part_num); - delete WbfsList[part_num]; WbfsList[part_num] = NULL; @@ -143,9 +131,9 @@ void WBFS_CloseAll() WBFS_Close(i); } -s32 WBFS_Format(u32 lba, u32 size) +s32 WBFS_Format(u32 lba, u32 size, u32 port) { - Wbfs_Wbfs Part(WBFS_MIN_DEVICE, lba, size); + Wbfs_Wbfs Part(WBFS_MIN_DEVICE, lba, size, port); return Part.Format(); } @@ -155,7 +143,6 @@ s32 WBFS_GetCount(int part_num, u32 *count) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); int ret = WbfsList[part_num]->GetCount(count); return ret; @@ -166,8 +153,6 @@ s32 WBFS_GetHeaders(int part_num, struct discHdr *outbuf, u32 cnt, u32 len) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->GetHeaders(outbuf, cnt, len); } @@ -177,8 +162,6 @@ s32 WBFS_CheckGame(u8 *discid) if(!VALID(part_num)) return 0; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->CheckGame(discid); } @@ -187,8 +170,6 @@ s32 WBFS_AddGame(void) if(!VALID(Settings.partition)) return -1; - DeviceHandler::SetUSBPortFromPartition(Settings.partition); - return WbfsList[Settings.partition]->AddGame(); } @@ -198,8 +179,6 @@ s32 WBFS_RemoveGame(u8 *discid) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->RemoveGame(discid); } @@ -209,8 +188,6 @@ s32 WBFS_GameSize(u8 *discid, f32 *size) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->GameSize(discid, size); } @@ -219,8 +196,6 @@ s32 WBFS_DiskSpace(f32 *used, f32 *free) if(!VALID(Settings.partition)) return -1; - DeviceHandler::SetUSBPortFromPartition(Settings.partition); - return WbfsList[Settings.partition]->DiskSpace(used, free); } @@ -230,8 +205,6 @@ s32 WBFS_RenameGame(u8 *discid, const void *newname) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->RenameGame(discid, newname); } @@ -241,8 +214,6 @@ s32 WBFS_ReIDGame(u8 *discid, const void *newID) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->ReIDGame(discid, newID); } @@ -251,8 +222,6 @@ u64 WBFS_EstimeGameSize(void) if(!VALID(Settings.partition)) return 0; - DeviceHandler::SetUSBPortFromPartition(Settings.partition); - return WbfsList[Settings.partition]->EstimateGameSize(); } @@ -262,8 +231,6 @@ int WBFS_GetFragList(u8 *id) if(!VALID(part_num)) return -1; - DeviceHandler::SetUSBPortFromPartition(part_num); - return WbfsList[part_num]->GetFragList(id); } diff --git a/source/usbloader/wbfs.h b/source/usbloader/wbfs.h index 1e9f2f73..15db3463 100644 --- a/source/usbloader/wbfs.h +++ b/source/usbloader/wbfs.h @@ -20,7 +20,7 @@ extern "C" /* Prototypes */ s32 WBFS_Init(u32 device); - s32 WBFS_Format(u32 lba, u32 size); + s32 WBFS_Format(u32 lba, u32 size, u32 port); s32 WBFS_GetCount(int part, u32 *count); s32 WBFS_GetHeaders(int part, struct discHdr *, u32, u32); s32 WBFS_CheckGame(u8 *gameid); diff --git a/source/usbloader/wbfs/wbfs_base.cpp b/source/usbloader/wbfs/wbfs_base.cpp index ee811704..89896256 100644 --- a/source/usbloader/wbfs/wbfs_base.cpp +++ b/source/usbloader/wbfs/wbfs_base.cpp @@ -12,24 +12,22 @@ #include "wbfs_base.h" -Wbfs::Wbfs(u32 l, u32 s, u32 part) - : hdd(NULL), lba(l), size(s), partition(part) +Wbfs::Wbfs(u32 l, u32 s, u32 part, u32 port) + : hdd(NULL), lba(l), size(s), partition(part), usbport(port) { } s32 Wbfs::Init(u32 device) { s32 ret; - const DISC_INTERFACE * handle = DeviceHandler::GetUSBInterface(); switch (WBFS_DEVICE_USB) { case WBFS_DEVICE_USB: /* Initialize USB storage */ - ret = handle->startup(); - if (ret) + + if (DeviceHandler::GetUSBPartitionCount() > 0) { - currentHandle = handle; /* Setup callbacks */ readCallback = __ReadUSB; writeCallback = __WriteUSB; diff --git a/source/usbloader/wbfs/wbfs_base.h b/source/usbloader/wbfs/wbfs_base.h index f8d892d4..9385f13f 100644 --- a/source/usbloader/wbfs/wbfs_base.h +++ b/source/usbloader/wbfs/wbfs_base.h @@ -12,7 +12,7 @@ class Wbfs { public: - Wbfs(u32 lba, u32 size, u32 part); + Wbfs(u32 lba, u32 size, u32 part, u32 usbport); ~Wbfs() { Close(); }; static s32 Init(u32); s32 CheckGame(u8 *); @@ -40,6 +40,7 @@ class Wbfs const u32 lba; const u32 size; const u32 partition; + const u32 usbport; }; #endif //_H diff --git a/source/usbloader/wbfs/wbfs_ext.h b/source/usbloader/wbfs/wbfs_ext.h index 8822a0e0..c8ee6765 100644 --- a/source/usbloader/wbfs/wbfs_ext.h +++ b/source/usbloader/wbfs/wbfs_ext.h @@ -6,8 +6,8 @@ class Wbfs_Ext: public Wbfs_Fat { public: - Wbfs_Ext(u32 lba, u32 size, u32 part) : - Wbfs_Fat(lba, size, part) + Wbfs_Ext(u32 lba, u32 size, u32 part, u32 port) : + Wbfs_Fat(lba, size, part, port) { } virtual u8 GetFSType(void) { return PART_FS_EXT; } diff --git a/source/usbloader/wbfs/wbfs_fat.cpp b/source/usbloader/wbfs/wbfs_fat.cpp index 02bb7c02..b2af0e1c 100644 --- a/source/usbloader/wbfs/wbfs_fat.cpp +++ b/source/usbloader/wbfs/wbfs_fat.cpp @@ -36,10 +36,10 @@ using namespace std; static const char wbfs_fat_dir[] = "/wbfs"; static const char invalid_path[] = "/\\:|<>?*\"'"; -extern u32 hdd_sector_size; +extern u32 hdd_sector_size[2]; -Wbfs_Fat::Wbfs_Fat(u32 lba, u32 size, u32 part) : - Wbfs(lba, size, part), fat_hdr_list(NULL), fat_hdr_count(0) +Wbfs_Fat::Wbfs_Fat(u32 lba, u32 size, u32 part, u32 port) : + Wbfs(lba, size, part, port), fat_hdr_list(NULL), fat_hdr_count(0) { memset(wbfs_fs_drive, 0, sizeof(wbfs_fs_drive)); } @@ -48,13 +48,13 @@ s32 Wbfs_Fat::Open() { Close(); - PartitionHandle * usbHandle = DeviceHandler::Instance()->GetUSBHandle(); - - if(partition < (u32) usbHandle->GetPartitionTotalCount()) + if(partition < (u32) DeviceHandler::GetUSBPartitionCount()) { - if (lba == usbHandle->GetLBAStart(partition)) + PartitionHandle *usbHandle = DeviceHandler::Instance()->GetUSBHandleFromPartition(partition); + int portPart = DeviceHandler::PartitionToPortPartition(partition); + if (lba == usbHandle->GetLBAStart(portPart)) { - sprintf(wbfs_fs_drive, "%s:", usbHandle->MountName(partition)); + sprintf(wbfs_fs_drive, "%s:", usbHandle->MountName(portPart)); return 0; } } @@ -90,7 +90,7 @@ wbfs_disc_t* Wbfs_Fat::OpenDisc(u8 *discid) wbfs_disc_t *iso_file = (wbfs_disc_t *) calloc(sizeof(wbfs_disc_t), 1); if (iso_file == NULL) return NULL; // mark with a special wbfs_part - wbfs_iso_file.wbfs_sec_sz = 512; + wbfs_iso_file.wbfs_sec_sz = hdd_sector_size[usbport]; iso_file->p = &wbfs_iso_file; iso_file->header = (wbfs_disc_info_t*) malloc(sizeof(wbfs_disc_info_t)); if(!iso_file->header) @@ -307,14 +307,14 @@ u64 Wbfs_Fat::EstimateGameSize() { wbfs_t *part = NULL; u64 size = (u64) 143432 * 2 * 0x8000ULL; - u32 n_sector = size / hdd_sector_size; - u32 wii_sec_sz; + u32 n_sector = size / hdd_sector_size[usbport]; // init a temporary dummy part // as a placeholder for wbfs_size_disc - part = wbfs_open_partition(nop_rw_sector, nop_rw_sector, NULL, hdd_sector_size, n_sector, 0, 1); + wbfs_set_force_mode(1); + part = wbfs_open_partition(nop_rw_sector, nop_rw_sector, NULL, hdd_sector_size[usbport], n_sector, 0, 1); + wbfs_set_force_mode(0); if (!part) return -1; - wii_sec_sz = part->wii_sec_sz; partition_selector_t part_sel = (partition_selector_t) Settings.InstallPartitions; @@ -649,12 +649,17 @@ wbfs_t* Wbfs_Fat::OpenPart(char *fname) // wbfs 'partition' file ret = split_open(&split, fname); if (ret) return NULL; + + wbfs_set_force_mode(1); + part = wbfs_open_partition(split_read_sector, nop_rw_sector, //readonly //split_write_sector, - &split, hdd_sector_size, split.total_sec, 0, 0); + &split, hdd_sector_size[usbport], split.total_sec, 0, 0); + + wbfs_set_force_mode(0); + if (!part) - { split_close(&split); - } + return part; } @@ -732,11 +737,15 @@ wbfs_t* Wbfs_Fat::CreatePart(u8 *id, char *path) return NULL; } - part = wbfs_open_partition(split_read_sector, split_write_sector, &split, hdd_sector_size, n_sector, 0, 1); + wbfs_set_force_mode(1); + + part = wbfs_open_partition(split_read_sector, split_write_sector, &split, hdd_sector_size[usbport], n_sector, 0, 1); + + wbfs_set_force_mode(0); + if (!part) - { split_close(&split); - } + return part; } @@ -813,5 +822,5 @@ int Wbfs_Fat::GetFragList(u8 *id) int ret = FindFilename(id, fname, sizeof(fname)); if (!ret) return -1; - return get_frag_list_for_file(fname, id, GetFSType(), lba); + return get_frag_list_for_file(fname, id, GetFSType(), lba, hdd_sector_size[usbport]); } diff --git a/source/usbloader/wbfs/wbfs_fat.h b/source/usbloader/wbfs/wbfs_fat.h index 54b6a9cd..d23688e1 100644 --- a/source/usbloader/wbfs/wbfs_fat.h +++ b/source/usbloader/wbfs/wbfs_fat.h @@ -10,7 +10,7 @@ class Wbfs_Fat: public Wbfs { public: - Wbfs_Fat(u32 lba, u32 size, u32 part); + Wbfs_Fat(u32 lba, u32 size, u32 part, u32 port); virtual s32 Open(); virtual void Close(); diff --git a/source/usbloader/wbfs/wbfs_ntfs.h b/source/usbloader/wbfs/wbfs_ntfs.h index ca8479f3..93c52354 100644 --- a/source/usbloader/wbfs/wbfs_ntfs.h +++ b/source/usbloader/wbfs/wbfs_ntfs.h @@ -6,8 +6,8 @@ class Wbfs_Ntfs: public Wbfs_Fat { public: - Wbfs_Ntfs(u32 lba, u32 size, u32 part) : - Wbfs_Fat(lba, size, part) + Wbfs_Ntfs(u32 lba, u32 size, u32 part, u32 port) : + Wbfs_Fat(lba, size, part, port) { } virtual u8 GetFSType(void) { return PART_FS_NTFS; } diff --git a/source/usbloader/wbfs/wbfs_rw.c b/source/usbloader/wbfs/wbfs_rw.c index f759f065..338b4358 100644 --- a/source/usbloader/wbfs/wbfs_rw.c +++ b/source/usbloader/wbfs/wbfs_rw.c @@ -12,7 +12,6 @@ rw_sector_callback_t readCallback = NULL; rw_sector_callback_t writeCallback = NULL; -const DISC_INTERFACE * currentHandle = NULL; s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) { @@ -80,7 +79,7 @@ s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) if (sectors > MAX_NB_SECTORS) sectors = MAX_NB_SECTORS; /* USB read */ - ret = currentHandle->readSectors(partition_offset + cnt, sectors, ptr); + ret = info->handle->readSectors(partition_offset + cnt, sectors, ptr); if (!ret) return -1; /* Increment counter */ @@ -108,7 +107,7 @@ s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) if (sectors > MAX_NB_SECTORS) sectors = MAX_NB_SECTORS; /* USB write */ - ret = currentHandle->writeSectors(partition_offset + cnt, sectors, ptr); + ret = info->handle->writeSectors(partition_offset + cnt, sectors, ptr); if (!ret) return -1; /* Increment counter */ diff --git a/source/usbloader/wbfs/wbfs_rw.h b/source/usbloader/wbfs/wbfs_rw.h index 98ae31e5..f67941f3 100644 --- a/source/usbloader/wbfs/wbfs_rw.h +++ b/source/usbloader/wbfs/wbfs_rw.h @@ -15,11 +15,11 @@ extern "C" u32 hdd_sector_size; u32 partition_lba; u32 partition_num_sec; + const DISC_INTERFACE * handle; } WBFS_PartInfo; extern rw_sector_callback_t readCallback; extern rw_sector_callback_t writeCallback; - extern const DISC_INTERFACE * currentHandle; s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf); s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf); diff --git a/source/usbloader/wbfs/wbfs_wbfs.cpp b/source/usbloader/wbfs/wbfs_wbfs.cpp index 6fa15c17..1c9f8cac 100644 --- a/source/usbloader/wbfs/wbfs_wbfs.cpp +++ b/source/usbloader/wbfs/wbfs_wbfs.cpp @@ -1,21 +1,24 @@ #include "wbfs_wbfs.h" +#include "Controls/DeviceHandler.hpp" #include "prompts/ProgressWindow.h" #include "settings/CSettings.h" #include "usbloader/wbfs.h" +#include "usbloader/usbstorage2.h" #include "wbfs_rw.h" #define MAX_WBFS_SECTORSIZE 4096 -extern u32 hdd_sector_size; +extern u32 hdd_sector_size[2]; s32 Wbfs_Wbfs::Open() { wbfs_t *part = NULL; PartInfo.wbfs_sector_size = MAX_WBFS_SECTORSIZE; - PartInfo.hdd_sector_size = hdd_sector_size; + PartInfo.hdd_sector_size = hdd_sector_size[usbport]; PartInfo.partition_lba = lba; PartInfo.partition_num_sec = size; + PartInfo.handle = (usbport == 0) ? DeviceHandler::GetUSB0Interface() : DeviceHandler::GetUSB1Interface(); u8 * buffer = (u8 *) malloc(MAX_WBFS_SECTORSIZE); memset(buffer, 0, MAX_WBFS_SECTORSIZE); @@ -80,17 +83,18 @@ void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc) s32 Wbfs_Wbfs::Format() { WBFS_PartInfo HDD_Inf; - HDD_Inf.wbfs_sector_size = hdd_sector_size; - HDD_Inf.hdd_sector_size = hdd_sector_size; + HDD_Inf.wbfs_sector_size = hdd_sector_size[usbport]; + HDD_Inf.hdd_sector_size = hdd_sector_size[usbport]; HDD_Inf.partition_lba = lba; HDD_Inf.partition_num_sec = size; + HDD_Inf.handle = (usbport == 0) ? DeviceHandler::GetUSB0Interface() : DeviceHandler::GetUSB1Interface(); //! If size is over 500GB in sectors and sector size is 512 //! set 2048 as hdd sector size - if(size > 1048576000 && hdd_sector_size == 512) + if(size > 1048576000 && hdd_sector_size[usbport] == 512) { HDD_Inf.wbfs_sector_size = 2048; - HDD_Inf.partition_num_sec = size/(2048/hdd_sector_size); + HDD_Inf.partition_num_sec = size/(2048/hdd_sector_size[usbport]); } wbfs_t *partition = NULL; @@ -221,5 +225,5 @@ s32 Wbfs_Wbfs::GetFragList(u8 *id) { //! Doesn't have to be called ".iso" just something different than .wbfs but with a dot. //! So that the code doesn't fail. - return get_frag_list_for_file((char *) ".iso", id, GetFSType(), lba); + return get_frag_list_for_file((char *) ".iso", id, GetFSType(), lba, hdd_sector_size[usbport]); } diff --git a/source/usbloader/wbfs/wbfs_wbfs.h b/source/usbloader/wbfs/wbfs_wbfs.h index ae23f431..45938d48 100644 --- a/source/usbloader/wbfs/wbfs_wbfs.h +++ b/source/usbloader/wbfs/wbfs_wbfs.h @@ -9,8 +9,8 @@ class Wbfs_Wbfs: public Wbfs { public: - Wbfs_Wbfs(u32 device, u32 lba, u32 size) : - Wbfs(device, lba, size) + Wbfs_Wbfs(u32 device, u32 lba, u32 size, u32 port) : + Wbfs(device, lba, size, port) { } diff --git a/source/xml/WiiTDB.cpp b/source/xml/WiiTDB.cpp index be43d8a4..9f937a38 100644 --- a/source/xml/WiiTDB.cpp +++ b/source/xml/WiiTDB.cpp @@ -665,7 +665,7 @@ bool WiiTDB::GetGenreList(const char * id, vector & genre) ++ptr; } - while(genre_num > 0 && genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ') + while(genre.size() > genre_num && genre[genre_num].size() > 0 && genre[genre_num][genre[genre_num].size()-1] == ' ') genre[genre_num].erase(genre[genre_num].size()-1); delete [] data;