杨振 4 anos atrás
commit
fb5f50cd02
100 arquivos alterados com 11531 adições e 0 exclusões
  1. 5 0
      .gitignore
  2. 97 0
      oem-config-gtk/usr/sbin/oem-config-remove-gtk
  3. BIN
      oem-config-gtk/usr/share/doc/oem-config-gtk/changelog.Debian.gz
  4. 64 0
      oem-config-gtk/usr/share/doc/oem-config-gtk/copyright
  5. 69 0
      oem-config-gtk/usr/share/ubiquity/desktop/oem-config-prepare-gtk.desktop
  6. BIN
      oem-config-gtk/usr/share/ubiquity/pixmaps/right.png
  7. BIN
      oem-config-gtk/usr/share/ubiquity/pixmaps/why.png
  8. BIN
      oem-config-gtk/usr/share/ubiquity/pixmaps/wrong.png
  9. 61 0
      oem-config/etc/init/oem-config.conf
  10. 32 0
      oem-config/usr/lib/oem-config/oem-config.service
  11. 7 0
      oem-config/usr/lib/oem-config/oem-config.target
  12. 8 0
      oem-config/usr/lib/oem-config/post-install/ubi-reload-keyboard
  13. 50 0
      oem-config/usr/lib/ubiquity/debian-installer-utils/register-module.post-base-installer-oem
  14. 16 0
      oem-config/usr/lib/ubiquity/tzsetup/post-base-installer-oem
  15. 1 0
      oem-config/usr/sbin/oem-config
  16. 161 0
      oem-config/usr/sbin/oem-config-firstboot
  17. 64 0
      oem-config/usr/sbin/oem-config-prepare
  18. 33 0
      oem-config/usr/sbin/oem-config-remove
  19. 48 0
      oem-config/usr/sbin/oem-config-wrapper
  20. BIN
      oem-config/usr/share/doc/oem-config/changelog.Debian.gz
  21. 64 0
      oem-config/usr/share/doc/oem-config/copyright
  22. 5 0
      oem-config/usr/share/lintian/overrides/oem-config
  23. BIN
      oem-config/usr/share/man/man8/oem-config-firstboot.8.gz
  24. BIN
      oem-config/usr/share/man/man8/oem-config-prepare.8.gz
  25. 1 0
      oem-config/usr/share/man/man8/oem-config.8.gz
  26. 55 0
      ubiquity-casper/usr/bin/casper-reconfigure
  27. 11 0
      ubiquity-casper/usr/lib/ubiquity/target-config/20xconfig
  28. 8 0
      ubiquity-casper/usr/lib/ubiquity/target-config/22gnome_panel_data
  29. 8 0
      ubiquity-casper/usr/lib/ubiquity/target-config/25modules
  30. 171 0
      ubiquity-casper/usr/lib/ubiquity/target-config/30accessibility
  31. 6 0
      ubiquity-casper/usr/lib/ubiquity/target-config/32gnome_power_manager
  32. 24 0
      ubiquity-casper/usr/lib/ubiquity/target-config/40install_driver_updates
  33. 18 0
      ubiquity-casper/usr/lib/ubiquity/target-config/45jackd2
  34. 11 0
      ubiquity-casper/usr/lib/ubiquity/target-config/49kubuntu_gnome_icon_cache
  35. BIN
      ubiquity-casper/usr/share/doc/ubiquity-casper/changelog.Debian.gz
  36. 62 0
      ubiquity-casper/usr/share/doc/ubiquity-casper/copyright
  37. 59 0
      ubiquity-frontend-gtk/usr/bin/kylin_checkpasswd
  38. BIN
      ubiquity-frontend-gtk/usr/lib/girepository-1.0/UbiquityMockResolver-1.0.typelib
  39. BIN
      ubiquity-frontend-gtk/usr/lib/ubiquity/panel
  40. 0 0
      ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/__init__.py
  41. 130 0
      ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/keyboard_query.py
  42. 372 0
      ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/nmwidgets.py
  43. 1932 0
      ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_ui.py
  44. BIN
      ubiquity-frontend-gtk/usr/lib/ubiquity/wallpaper
  45. BIN
      ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.a
  46. 1 0
      ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so
  47. 1 0
      ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so.0
  48. BIN
      ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so.0.0.0
  49. 133 0
      ubiquity-frontend-gtk/usr/share/applications/ubiquity.desktop
  50. BIN
      ubiquity-frontend-gtk/usr/share/doc/ubiquity-frontend-gtk/changelog.Debian.gz
  51. 64 0
      ubiquity-frontend-gtk/usr/share/doc/ubiquity-frontend-gtk/copyright
  52. 53 0
      ubiquity-frontend-gtk/usr/share/gir-1.0/UbiquityMockResolver-1.0.gir
  53. 9 0
      ubiquity-frontend-gtk/usr/share/gnome-shell/modes/ubiquity.json
  54. 184 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/16x16/apps/ubiquity.svg
  55. 210 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/22x22/apps/ubiquity.svg
  56. 226 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/24x24/apps/ubiquity.svg
  57. 227 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/32x32/apps/ubiquity.svg
  58. 212 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/48x48/apps/ubiquity.svg
  59. 222 0
      ubiquity-frontend-gtk/usr/share/icons/hicolor/64x64/apps/ubiquity.svg
  60. 5 0
      ubiquity-frontend-gtk/usr/share/menu/ubiquity-frontend-gtk
  61. 141 0
      ubiquity-frontend-gtk/usr/share/pixmaps/ubiquity.xpm
  62. 7 0
      ubiquity-frontend-gtk/usr/share/python3/runtime.d/ubiquity-frontend-gtk.rtupdate
  63. 43 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/gtkwidgets.xml
  64. 12 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/nm.xml
  65. 105 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepGhost.ui
  66. 81 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepIsOEM.ui
  67. 153 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepKeyboardConf.ui
  68. 55 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepKylinLanguage.ui
  69. 261 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLanguage.ui
  70. 34 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLanguageOnly.ui
  71. 71 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLicense.ui
  72. 43 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLocation.ui
  73. 1202 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAdvanced.ui
  74. 477 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAsk.ui
  75. 167 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAuto.ui
  76. 372 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartCrypto.ui
  77. 26 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPreInstall.ui
  78. 575 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPrepare.ui
  79. 26 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepSetup.ui
  80. 424 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepUserInfo.ui
  81. 26 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepWelcome.ui
  82. 113 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepWireless.ui
  83. 1267 0
      ubiquity-frontend-gtk/usr/share/ubiquity/gtk/ubiquity.ui
  84. 23 0
      ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions-ghost-x86-grub.sh
  85. 118 0
      ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions-ghost.sh
  86. 101 0
      ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions.sh
  87. 191 0
      ubiquity-frontend-gtk/usr/share/ubiquity/license/EULA
  88. 185 0
      ubiquity-frontend-gtk/usr/share/ubiquity/license/EULAE
  89. 10 0
      ubiquity-frontend-gtk/usr/share/ubiquity/license/run.sh
  90. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/cd_in_tray.png
  91. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/panel.png
  92. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/install.png
  93. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/manual.png
  94. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/reinstall.png
  95. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/sidebyside.png
  96. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/ubuntu_installed.png
  97. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/windows_square.png
  98. BIN
      ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/zoom-in.png
  99. BIN
      ubiquity-slideshow-kylin/usr/share/doc/ubiquity-slideshow-kylin/changelog.gz
  100. 22 0
      ubiquity-slideshow-kylin/usr/share/doc/ubiquity-slideshow-kylin/copyright

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+.idea
+.vscode
+
+*.deb
+

+ 97 - 0
oem-config-gtk/usr/sbin/oem-config-remove-gtk

@@ -0,0 +1,97 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+#
+# «oem-config-remove-gtk» - remove-oem-config after completing
+#
+# Copyright (C) 2010, Mario Limonciello
+# Copyright (C) 2010, Sebastian Heinlein
+#
+#
+# Ubiquity is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this application; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+import glob
+import os
+import sys
+
+from aptdaemon import client, enums
+from aptdaemon.gtk3widgets import AptProgressDialog
+from gi.repository import GLib, Gtk
+
+
+loop = GLib.MainLoop()
+
+
+def _on_failure(error):
+    dia = Gtk.MessageDialog(type=Gtk.MessageType.ERROR,
+                            buttons=Gtk.ButtonsType.CLOSE,
+                            message_format=error.message)
+    dia.run()
+    dia.hide()
+    loop.quit()
+    sys.exit(1)
+
+
+def _on_finished(dia):
+    loop.quit()
+    if dia._transaction.exit == enums.EXIT_SUCCESS:
+        sys.exit(0)
+    else:
+        sys.exit(1)
+
+
+def _on_transaction(trans):
+    apt_dialog = AptProgressDialog(trans)
+    theme = Gtk.IconTheme.get_default()
+    apt_dialog.set_icon(theme.load_icon("update-manager", 16, 0))
+    apt_dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
+    apt_dialog.run()
+    apt_dialog.connect("finished", _on_finished)
+
+
+def using_cryptsetup():
+    if os.path.exists("/home/.ecryptfs"):
+        return True
+
+    try:
+        with open("/etc/crypttab") as crypttab:
+            for line in crypttab:
+                if not line.startswith("#"):
+                    return True
+    except IOError:
+        pass
+
+    return False
+
+
+def main():
+    purge = []
+    for pkg in ('ubiquity', 'ubiquity-casper',
+                'ubiquity-ubuntu-artwork', 'ubiquity-slideshow-ubuntu',
+                'oem-config-slideshow-ubuntu', 'ubiquity-frontend-gtk'):
+        if glob.glob('/var/lib/dpkg/info/%s.list' % pkg):
+            purge.append(pkg)
+
+    if not using_cryptsetup():
+        purge.append("cryptsetup")
+
+    ac = client.AptClient()
+    ac.commit_packages(
+        install=[], reinstall=[], remove=[], purge=purge, upgrade=[],
+        downgrade=[], error_handler=_on_failure, reply_handler=_on_transaction)
+    loop.run()
+
+
+if __name__ == "__main__":
+    main()

BIN
oem-config-gtk/usr/share/doc/oem-config-gtk/changelog.Debian.gz


+ 64 - 0
oem-config-gtk/usr/share/doc/oem-config-gtk/copyright

@@ -0,0 +1,64 @@
+Ubiquity was formerly known as "Espresso", and originally as "Ubuntu
+Express", which is written and maintained by Javier Carranza
+<javier.carranza@interactors.coop> and Juanje Ojeda Croissier
+<juanje@interactors.coop>. This version draws on the work done on Ubuntu
+Express, but was renamed to avoid confusion, to reduce awkward branding
+considerations, and because Ubiquity concentrates on reusing
+debian-installer code and reducing duplicated translation and branding work
+as much as possible. Ubiquity has now substantially diverged from Ubuntu
+Express and is an independent project.
+
+The original Guadalinex source can be found at:
+	http://ws314.juntadeandalucia.es/guadalinex2005/live_installer/
+
+and Ubiquity is developed at:
+	http://bazaar.launchpad.net/~ubuntu-installer/ubiquity/trunk/
+
+Copyright (C) 2005  Javier Carranza
+Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010  Canonical Ltd.
+
+Ubiquity has been adapted for usage by the Mythbuntu
+team for the purposes of a Ubuntu derivative focused
+upon setting up a standalone MythTV box.
+
+Portions copyright (C) 2007 Mario Limonciello
+
+oem-config was written by Colin Watson <cjwatson@ubuntu.com>.
+It is:
+  Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd.
+  Copyright (C) 2006, 2007 Anirudh Ramesh
+
+Some code in oem-config is borrowed from base-config, whose copyright
+declaration is as follows:
+
+  This package is copyright 2000-2004 by Joey Hess <joeyh@debian.org>.
+  Portions are also copyright by Bruce Perens <bruce@hams.com>, Enrique
+  Zanardi <ezanard@debian.org>, Sven Rudolph, Luis Francisco Gonzalez
+  <luisgh@debian.org>, Ben Collins <bcollins@debian.org>, Matt Kraai
+  <kraai@debian.org>, Petter Reinholdtsen <pere@debian.org>, VA Linux
+  Systems, and Software in the Public Interest.
+
+License:
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+ubiquity-kde.png icon copyright 2007 David Vignoni.
+License: LGPL 3, see /usr/share/common-licenses/LGPL
+
+ubiquity.svg icon copyright 2010 K.Vishnoo Charan Reddy GPL-2+

+ 69 - 0
oem-config-gtk/usr/share/ubiquity/desktop/oem-config-prepare-gtk.desktop

@@ -0,0 +1,69 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Encoding=UTF-8
+Name=Prepare for shipping to end user
+Name[am]=ለመጨረሻው ተጠቃሚ ለመላክ ይዘጋጅ
+Name[ar]=جهز للشحن للمستخدم النهائي
+Name[ast]=Tresnar la entrega al usuariu final
+Name[be]=Падрыхтаваць да адпраўкі канчатковаму карыстальніку
+Name[bg]=Подготовка за доставяне на крайния потребител
+Name[bn]=ব্যবহারকারীর কাছে পাঠানোর জন্য প্রস্তুত করা হচ্ছে
+Name[bs]=Spremi za slanje krajnjem korisniku
+Name[ca]=Prepara per a la distribució a l'usuari final
+Name[cs]=Připravit pro odeslání koncovému uživateli
+Name[da]=Forbered til afsendelse til slutbruger
+Name[de]=Vorbereitung zur Auslieferung an den Endanwender
+Name[el]=Προετοιμασία για παράδοση στον τελικό χρήστη
+Name[eo]=Pretigi por sendi al fina uzanto
+Name[es]=Preparar para la entrega al usuario final
+Name[et]=Valmista ette tarnimiseks lõppkasutajale
+Name[eu]=Erabiltzaileari emateko prestatu
+Name[fi]=Valmistele loppukäyttäjälle toimittamista varten
+Name[fr]=Préparer en vue de l'expédition à l'utilisateur final
+Name[ga]=Ullmhaigh le haghaidh seolta don úsáideoir deireanach
+Name[gl]=Preparar para a entrega ao usuario final
+Name[gu]=અંતિમ વપરાશકાર નાં ઉપયોગ માટે તૈયાર છે.
+Name[he]=הכנה למשלוח אל משתמש קצה
+Name[hi]=अंतिम प्रयोक्ता को प्रेषण हेतु तैयार
+Name[hr]=Pripremi za isporuku krajnjem korisniku
+Name[hu]=Felkészítés átadásra a végfelhasználónak
+Name[id]=Persiapan mengirim ke pengguna akhir
+Name[it]=Preparazione per consegna all'utente
+Name[ja]=エンドユーザーへの出荷準備
+Name[ka]=მომხმარებლისათვის მიწოდების მომზადება
+Name[kk]=Соңғы пайдаланушыға көшіруге (бейімделуге) дайындық
+Name[km]=រៀប​ចំ​បញ្ជូន​ទៅ​អ្នក​ប្រើ
+Name[ko]=사용자에게 배송할 준비를 합니다
+Name[ku]=Ber bi bikarhênerên dawî ji bo guhestinê amade bike
+Name[lt]=Parengti išsiuntimui galutiniam naudotojui
+Name[lv]=Sagatavot nogādāšanai gala lietotājam
+Name[ml]=അവസാന ഉപയോക്താവിന് അയക്കുന്നതിനായി തയ്യാറാക്കുക
+Name[mr]=वापरकर्त्याला पाठवण्यासाठी तयार
+Name[ne]=अन्तिम प्रयोगकर्ताकहाँ पठाउन तयार गर्नुहोस्
+Name[nl]=Voorbereiden voor levering aan eindgebruiker
+Name[pa]=ਯੂਜ਼ਰ ਨੂੰ ਭੇਜਣ ਲਈ ਤਿਆਰ
+Name[pl]=Przygotowanie do dostarczenia użytkownikowi końcowemu
+Name[pt]=Preparar para enviar para o utilizador final
+Name[pt_BR]=Preparo para entregar ao usuário final
+Name[ro]=Pregătire pentru livrare la utilizatorul final
+Name[ru]=Подготовить к отправке конечному пользователю
+Name[sk]=Pripraviť na dodanie koncovému používateľovi
+Name[sl]=Pripravi za odpremo končnemu uporabniku
+Name[sq]=Përgatite për t'ia dërguar përdoruesit
+Name[sr]=Припреми за достављање крајњем кориснику
+Name[sv]=Förbered för leverans till slutanvändare
+Name[ta]=பயனருக்கு அனுப்ப தயார் செய்
+Name[th]=จัดเตรียมเพื่อส่งให้ผู้ใช้
+Name[tl]=Ihanda ang pagpapadala sa gagamit
+Name[tr]=Son kullanıcıya göndermek üzere hazırla
+Name[uk]=Підготувати для доставки кінцевому споживачеві
+Name[vi]=Chuẩn bị chuyển tới người dùng cuối
+Name[zh_CN]=准备寄送给最终用户
+Name[zh_TW]=準備傳輸至終端使用者
+Exec=oem-config-prepare
+Icon=preferences-system
+Terminal=false
+Categories=GTK;System;Settings;
+NotShowIn=KDE;MATE;UKUI
+X-Ubuntu-Gettext-Domain=oem-config

BIN
oem-config-gtk/usr/share/ubiquity/pixmaps/right.png


BIN
oem-config-gtk/usr/share/ubiquity/pixmaps/why.png


BIN
oem-config-gtk/usr/share/ubiquity/pixmaps/wrong.png


+ 61 - 0
oem-config/etc/init/oem-config.conf

@@ -0,0 +1,61 @@
+# oem-config - End-user configuration after initial OEM installation
+#
+# Run on the first boot after shipping to the end user to reconfigure the
+# system for them; removes itself thereafter.
+
+description	"End-user configuration after initial OEM installation"
+author		"Ubuntu Installer Team <ubuntu-installer@lists.ubuntu.com>"
+
+start on (starting gdm
+	  or starting kdm
+	  or starting xdm
+	  or starting lxdm
+	  or starting lightdm
+	  or starting oem-config-debconf)
+stop on (runlevel [06]
+	 or stopping gdm
+	 or stopping kdm
+	 or stopping xdm
+	 or stopping lxdm
+	 or stopping lightdm)
+
+emits starting-dm
+
+task
+normal exit 0 1
+
+console output
+
+script
+    [ -f /var/lib/oem-config/run ]
+
+    frontend=
+    type oem-config-firstboot >/dev/null 2>&1 || exit 0
+
+    debug=
+    automatic=
+    for x in $(cat /proc/cmdline); do
+	case $x in
+	    debug-oem-config)
+		debug=--debug
+		;;
+	    # We never want to run the oem-config job in the live environment
+	    # (as is the case in some custom configurations) or in recovery
+	    # mode.
+	    boot=casper|single)
+		exit 0
+		;;
+	    ubiquity/frontend=*)
+		frontend="${x#*=}"
+		export FRONTEND=$frontend
+		;;
+  	    automatic-oem-config)
+		automatic=--automatic
+		;;
+	esac
+    done
+
+    initctl emit starting-dm DM=oem-config-dm
+
+    exec oem-config-firstboot $debug $automatic
+end script

+ 32 - 0
oem-config/usr/lib/oem-config/oem-config.service

@@ -0,0 +1,32 @@
+[Unit]
+Description=End-user configuration after initial OEM installation
+ConditionFileIsExecutable=/usr/sbin/oem-config-firstboot
+ConditionPathExists=/dev/tty1
+
+# We never want to run the oem-config job in the live environment (as is the
+# case in some custom configurations) or in recovery mode.
+ConditionKernelCommandLine=!boot=casper
+ConditionKernelCommandLine=!single
+ConditionKernelCommandLine=!rescue
+ConditionKernelCommandLine=!emergency
+
+[Service]
+Type=oneshot
+StandardInput=tty
+StandardOutput=tty
+StandardError=tty
+TTYPath=/dev/tty1
+TTYReset=yes
+TTYVHangup=yes
+ExecStart=/bin/sh -ec '\
+    for x in $(cat /proc/cmdline); do				\
+	case $x in						\
+	    debug-oem-config) debug=--debug ;;			\
+	    ubiquity/frontend=*) export frontend="${x#*=}" ;;	\
+	    automatic-oem-config) automatic=--automatic ;;	\
+	esac;							\
+    done;							\
+    exec oem-config-firstboot $debug $automatic'
+
+[Install]
+WantedBy=oem-config.target

+ 7 - 0
oem-config/usr/lib/oem-config/oem-config.target

@@ -0,0 +1,7 @@
+[Unit]
+Description=OEM Configuration
+Requires=basic.target
+Conflicts=rescue.service rescue.target multi-user.target
+After=basic.target rescue.service rescue.target
+AllowIsolate=yes
+Wants=oem-config.service network-manager.service getty-static.service systemd-user-sessions.service

+ 8 - 0
oem-config/usr/lib/oem-config/post-install/ubi-reload-keyboard

@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# We need to update the udev properties and restart HAL after OEM-config
+# because we may have changed keyboard settings in /etc/default/keyboard,
+# which X.org uses to determine layout.
+
+udevadm trigger --action=change --property-match=ID_INPUT_KEY=1
+restart hal 2>/dev/null || true

+ 50 - 0
oem-config/usr/lib/ubiquity/debian-installer-utils/register-module.post-base-installer-oem

@@ -0,0 +1,50 @@
+#!/bin/sh
+QUEUE=/var/lib/register-module
+MODFILE=/etc/modules
+MODUTILSDIR=/etc/modprobe.d/
+
+create () {
+	if [ ! -e $1 ]; then
+		echo "# Local module settings" > $1
+		echo "# Created by the Debian installer" >> $1
+		echo "" >> $1
+	fi
+}
+
+for QUEUEFILE in $QUEUE/*.load; do
+	[ ! -e $QUEUEFILE ] && break
+	MODULE=$(basename $QUEUEFILE ".load")
+
+	create $MODFILE
+	echo "$MODULE" >> $MODFILE
+	rm $QUEUEFILE
+done
+
+OLDIFS=$IFS
+for QUEUEFILE in $QUEUE/*.params; do
+	[ ! -e $QUEUEFILE ] && break
+	MODULE=$(basename $QUEUEFILE ".params")
+	
+	IFS=":"
+	while read TYPE PARAMS; do
+		case $TYPE in
+		    options)
+			FILE=$MODUTILSDIR/local.conf
+			create $FILE
+			echo "options $MODULE $PARAMS" >> $FILE
+			;;
+		esac
+	done < $QUEUEFILE
+	IFS=$OLDIFS
+	rm $QUEUEFILE
+done
+
+FILE=$MODUTILSDIR/blacklist.local.conf
+for QUEUEFILE in $QUEUE/*.blacklist; do
+	[ ! -e $QUEUEFILE ] && break
+	MODULE=$(basename $QUEUEFILE ".blacklist")
+
+	create $FILE
+	echo "blacklist $MODULE" >> $FILE
+	rm $QUEUEFILE
+done

+ 16 - 0
oem-config/usr/lib/ubiquity/tzsetup/post-base-installer-oem

@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+. /usr/share/debconf/confmodule
+
+db_get time/zone
+zone="$RET"
+
+if [ -z "$zone" ] || [ ! -e /usr/share/zoneinfo/$zone ]; then
+	logger -t tzsetup "Warning: ignoring invalid time zone '$zone'"
+	exit 0
+fi
+
+echo "$zone" > /etc/timezone
+rm -f /etc/localtime
+cp -f /usr/share/zoneinfo/$zone /etc/localtime

+ 1 - 0
oem-config/usr/sbin/oem-config

@@ -0,0 +1 @@
+../lib/ubiquity/bin/ubiquity

+ 161 - 0
oem-config/usr/sbin/oem-config-firstboot

@@ -0,0 +1,161 @@
+#! /bin/bash
+# Run oem-config on the first boot after shipping to the end user.
+set -e
+
+# kylin add
+# to delete users from install created
+python3 /usr/lib/ubiquity/plugins/firstboot_utils.py
+# kylin end
+
+DEBUG=
+AUTOMATIC=
+for option;do
+	case $option in
+		--debug)
+			DEBUG=--debug
+			;;
+		--automatic)
+			AUTOMATIC=--automatic
+			;;
+	esac
+done
+
+# KDM stores the default user here, and apparently gets upset that we've
+# just removed its previous default user.
+rm -f /var/lib/kdm/kdmsts
+# Revert to creating a user at uid 1000.
+echo RESET passwd/user-uid | debconf-communicate >/dev/null
+if [ -z "$AUTOMATIC" ]; then
+	# These two templates have been preseeded, which does nasty things
+	# to their templates.  It's probably a bug in cdebconf's
+	# debconf-copydb that they end up still registered to
+	# debian-installer/dummy at this point, but let's just work around
+	# it for now so that we get sensible translated descriptions.
+	for q in passwd/user-fullname passwd/username; do
+		echo REGISTER "$q" "$q"
+		echo RESET "$q"
+	done | debconf-communicate oem-config >/dev/null
+fi
+
+# Remove the oem-config-prepare menu item.
+rm -f /usr/share/applications/oem-config-prepare-gtk.desktop \
+      /usr/share/applications/kde4/oem-config-prepare-kde.desktop
+# Run a command just before starting oem-config.
+RET="$(echo GET oem-config/early_command | debconf-communicate)" || true
+if [ "${RET%% *}" = 0 ]; then
+	command="${RET#* }"
+	log-output sh -c "$command" || true
+fi
+
+# TODO: will this work for X-based frontends when X isn't up yet?
+if [ -z "$FRONTEND" ]; then
+	FRONTEND="$(/usr/sbin/oem-config -q)"
+fi
+
+if [ ! -e '/var/log/installer' ]; then
+	mkdir -p /var/log/installer
+fi
+
+if [ "$DEBUG" ]; then
+	TRY=1
+else
+	TRY=5
+fi
+for try in $(seq 1 $TRY); do
+	CODE=0
+	if [ "$FRONTEND" = debconf_ui ]; then
+		plymouth quit || true
+		LANG=en_US.UTF-8 FRONTEND="$FRONTEND" \
+		/usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only \
+			2>>/var/log/oem-config.log \
+			|| CODE=$?
+	else
+		FRONTEND="$FRONTEND" \
+		/usr/bin/ubiquity-dm vt7 :0 oem \
+			/usr/sbin/oem-config-wrapper $DEBUG $AUTOMATIC --only || CODE=$?
+	fi
+	if [ "$CODE" -eq 0 ]; then
+		# Remove the temporary OEM configuration user, if possible
+		# and desired.
+		RET="$(echo GET oem-config/remove | debconf-communicate)"
+		if [ "${RET#* }" = true ] && getent passwd oem >/dev/null; then
+			pkill -u oem || true
+			userdel --force --remove oem || true
+		fi
+		### kylin add
+		### if has gui, after oem, disbale oem-config.target and go graphical.target
+		if [ -e "/usr/sbin/lightdm" ];then
+			/bin/systemctl set-default graphical.target || true
+			/bin/systemctl disable oem-config.service || true
+			/bin/systemctl disable oem-config.target || true
+			rm -f /lib/systemd/system/oem-config.* || true
+			/bin/systemctl --no-block isolate graphical.target || true
+		else
+		### if has no gui, after oem, disbale oem-config.target and go multi-user.target
+			/bin/systemctl set-default multi-user.target || true
+			/bin/systemctl disable oem-config.service || true
+			/bin/systemctl disable oem-config.target || true
+			rm -f /lib/systemd/system/oem-config.* || true
+			/bin/systemctl --no-block isolate multi-user.target || true
+		fi
+		### kylin end
+		exit 0
+	elif [ "$CODE" -eq 10 ]; then
+		cat <<EOF
+Your system is not yet configured. Press 'a' to try again, 's' for a
+recovery shell, or 'r' to reboot.
+EOF
+		while :; do
+			read -p '[asr] ' -n 1 REPLY
+			echo
+			case $REPLY in
+				A|a)	continue 2 ;;
+				S|s)
+					cat <<EOF
+After you type 'exit', your system will reboot.
+EOF
+					bash
+					reboot
+					sleep 3600
+					exit 1
+					;;
+				R|r)	reboot; sleep 3600; exit 1 ;;
+			esac
+		done
+		exit 1
+	fi
+done
+
+if [ -z "$DEBUG" ]; then
+	# Panic. At this point, probably the best thing we can do is drop to
+	# a shell so that the user has some hope of fixing things up.
+	cat <<EOF
+ERROR: The OEM installer failed. Your system may not be usable yet. Please
+report this as a bug to your vendor.
+
+To create a user so that you can use your new system normally, type:
+
+    adduser USERNAME
+
+... replacing USERNAME with the username you would like to use (your first
+name in lower case is normally a reasonable choice), and follow the prompts.
+If this succeeds, type 'exit' to reboot the system.
+
+EOF
+	bash
+
+	# Don't run again.
+	rm -f /var/lib/oem-config/run
+	RET="$(echo GET oem-config/remove | debconf-communicate)"
+	if [ "${RET#* }" = true ]; then
+		if getent passwd oem >/dev/null; then
+			pkill -u oem || true
+			userdel --force --remove oem || true
+		fi
+		apt-get -y purge ubiquity >>/var/log/oem-config.log 2>&1
+	fi
+
+	reboot
+fi
+
+exit 0

+ 64 - 0
oem-config/usr/sbin/oem-config-prepare

@@ -0,0 +1,64 @@
+#! /bin/sh
+set -e
+
+# Try to detect which frontend will be used by looking for a frontend
+# module.
+frontend=
+for f in gtk_ui kde_ui debconf_ui; do
+	if [ -f "/usr/lib/ubiquity/ubiquity/frontend/$f.py" ]; then
+		frontend="$f"
+		break
+	fi
+done
+
+quiet=
+if [ "$1" = --quiet ]; then
+	quiet=1
+	shift
+fi
+
+if [ "$(id -u)" = 0 ]; then
+	# Machine-specific, so remove in case this system is going to be
+	# cloned.  These will be regenerated on the first boot.
+	rm -f /etc/udev/rules.d/70-persistent-cd.rules \
+	      /etc/udev/rules.d/70-persistent-net.rules
+
+	rm -f /etc/NetworkManager/system-connections/*
+
+	# Potentially sensitive.
+	rm -f /home/oem/.ssh/known_hosts
+
+	cp -a /usr/lib/oem-config/oem-config.service /lib/systemd/system
+	cp -a /usr/lib/oem-config/oem-config.target /lib/systemd/system
+	/bin/systemctl enable oem-config.service
+	/bin/systemctl enable oem-config.target
+	/bin/systemctl set-default oem-config.target
+else
+	pkexec "$0" ${quiet:+--quiet} "$@"
+	exit 0
+fi
+
+if [ -z "$quiet" ]; then
+	MESSAGE='oem-config will run the next time the system boots.'
+	case $frontend in
+		gtk_ui)
+			if [ "$DISPLAY" ] && type zenity >/dev/null 2>&1; then
+				### kylin fix
+				### just quiet go oem mode
+				#zenity --title oem-config-prepare --info --text \
+				#	"$MESSAGE"
+				### kylin end
+				exit 0
+			fi
+			;;
+		kde_ui)
+			if [ "$DISPLAY" ] && type kdialog >/dev/null 2>&1; then
+				kdialog --title oem-config-prepare --msgbox "$MESSAGE"
+				exit 0
+			fi
+			;;
+	esac
+	echo "$MESSAGE"
+fi
+
+exit 0

+ 33 - 0
oem-config/usr/sbin/oem-config-remove

@@ -0,0 +1,33 @@
+#! /bin/sh
+# Remove oem-config.
+# TODO: all of this should be moved into oem-config itself, but that's far
+# too risky for 10.04 LTS since we have to be very careful not to open any
+# files shipped by any ubiquity binary package after removing them.
+set -e
+
+case $1 in
+	'')
+		eval "$(debconf-apt-progress --config)"
+		"$0" debconf
+		;;
+	debconf)
+		. /usr/share/debconf/confmodule
+
+		db_progress START 0 100 oem-config/removing
+		db_progress INFO debconf-apt-progress/preparing
+
+		debconf-apt-progress --from 0 --to 50 \
+			--logfile /var/log/oem-config.log -- \
+			apt-get -y purge ubiquity ubiquity-casper ubiquity-ubuntu-artwork
+		debconf-apt-progress --from 50 --to 75 \
+			--logfile /var/log/oem-config.log -- \
+			apt-get -y purge 'ubiquity-slideshow-*' || true
+		debconf-apt-progress --from 75 --to 100 \
+			--logfile /var/log/oem-config.log -- \
+			apt-get -y purge 'oem-config-slideshow-*' || true
+
+		debconf-apt-progress --stop
+		;;
+esac
+
+exit 0

+ 48 - 0
oem-config/usr/sbin/oem-config-wrapper

@@ -0,0 +1,48 @@
+#! /bin/sh
+# Run oem-config, plus other things that need to run after it in X.
+set -e
+
+### kylin fix
+### default use zh_CN in oem mode
+LANG=zh_CN.UTF-8 oem-config "$@"
+# LANG=en_US.UTF-8 oem-config "$@"
+### kylin end
+
+# 'set -e' will cause us to exit if oem-config fails.  Otherwise:
+
+# Don't run again.
+rm -f /var/lib/oem-config/run
+
+# Cleanup from anything the early command prepared
+RET="$(echo GET oem-config/late_command | debconf-communicate)" || true
+if [ "${RET%% *}" = 0 ]; then
+	command="${RET#* }"
+	log-output sh -c "$command" || true
+fi
+RET="$(echo GET oem-config/remove | debconf-communicate)"
+if [ "${RET#* }" = true ]; then
+	#debconf crashes with this set (LP: #641478)
+	unset DBUS_SESSION_BUS_ADDRESS
+	#mandb postinst doesn't like not knowing the locale
+	if [ -r /etc/default/locale ]; then
+		. /etc/default/locale
+		export LANG LANGUAGE
+	fi
+	# We're about to pull the rug out from under our own feet, so this
+	# has to run very late.
+	case $FRONTEND in
+		debconf_ui)
+			export DEBIAN_FRONTEND=dialog
+			oem-config-remove || true
+			;;
+		gtk_ui)
+			oem-config-remove-gtk || true
+			;;
+		kde_ui)
+			export DEBIAN_FRONTEND=kde
+			oem-config-remove || true
+			;;
+	esac
+fi
+
+exit 0

BIN
oem-config/usr/share/doc/oem-config/changelog.Debian.gz


+ 64 - 0
oem-config/usr/share/doc/oem-config/copyright

@@ -0,0 +1,64 @@
+Ubiquity was formerly known as "Espresso", and originally as "Ubuntu
+Express", which is written and maintained by Javier Carranza
+<javier.carranza@interactors.coop> and Juanje Ojeda Croissier
+<juanje@interactors.coop>. This version draws on the work done on Ubuntu
+Express, but was renamed to avoid confusion, to reduce awkward branding
+considerations, and because Ubiquity concentrates on reusing
+debian-installer code and reducing duplicated translation and branding work
+as much as possible. Ubiquity has now substantially diverged from Ubuntu
+Express and is an independent project.
+
+The original Guadalinex source can be found at:
+	http://ws314.juntadeandalucia.es/guadalinex2005/live_installer/
+
+and Ubiquity is developed at:
+	http://bazaar.launchpad.net/~ubuntu-installer/ubiquity/trunk/
+
+Copyright (C) 2005  Javier Carranza
+Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010  Canonical Ltd.
+
+Ubiquity has been adapted for usage by the Mythbuntu
+team for the purposes of a Ubuntu derivative focused
+upon setting up a standalone MythTV box.
+
+Portions copyright (C) 2007 Mario Limonciello
+
+oem-config was written by Colin Watson <cjwatson@ubuntu.com>.
+It is:
+  Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd.
+  Copyright (C) 2006, 2007 Anirudh Ramesh
+
+Some code in oem-config is borrowed from base-config, whose copyright
+declaration is as follows:
+
+  This package is copyright 2000-2004 by Joey Hess <joeyh@debian.org>.
+  Portions are also copyright by Bruce Perens <bruce@hams.com>, Enrique
+  Zanardi <ezanard@debian.org>, Sven Rudolph, Luis Francisco Gonzalez
+  <luisgh@debian.org>, Ben Collins <bcollins@debian.org>, Matt Kraai
+  <kraai@debian.org>, Petter Reinholdtsen <pere@debian.org>, VA Linux
+  Systems, and Software in the Public Interest.
+
+License:
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+ubiquity-kde.png icon copyright 2007 David Vignoni.
+License: LGPL 3, see /usr/share/common-licenses/LGPL
+
+ubiquity.svg icon copyright 2010 K.Vishnoo Charan Reddy GPL-2+

+ 5 - 0
oem-config/usr/share/lintian/overrides/oem-config

@@ -0,0 +1,5 @@
+oem-config: no-debconf-config
+
+# oem-config is at least in part a debconf application, to which this
+# warning doesn't apply.
+oem-config: debconf-is-not-a-registry *

BIN
oem-config/usr/share/man/man8/oem-config-firstboot.8.gz


BIN
oem-config/usr/share/man/man8/oem-config-prepare.8.gz


+ 1 - 0
oem-config/usr/share/man/man8/oem-config.8.gz

@@ -0,0 +1 @@
+ubiquity.8.gz

+ 55 - 0
ubiquity-casper/usr/bin/casper-reconfigure

@@ -0,0 +1,55 @@
+#! /bin/sh
+
+set -e
+export PATH=/usr/bin:/usr/sbin:/sbin:/bin
+
+frontend=noninteractive
+
+findcommandinroot() {
+    ROOT="$1/"
+    shift
+    while [ "$#" -ge 1 ]; do
+        P="$PATH"
+        while [ "$P" ]; do
+            D=${P%%:*}
+            P=${P#*:}
+            if [ "$D" = "$P" ]; then
+                P=
+            fi
+            if [ -z "$D" ]; then
+                D=.
+            fi
+            if [ -x "$ROOT$D/$1" ]; then
+                echo "$D/$1"
+                return 0
+            fi
+        done
+        shift
+    done
+    return 1
+}
+
+runcommandinroot() {
+    C=$(findcommandinroot "$1" "$2")
+    ROOT="$1"
+    shift
+    shift
+    [ -n "$C" ] && chroot "$ROOT" "$C" "$@"
+}
+
+root="$1"
+package="$2"
+
+version=$(runcommandinroot "$root" dpkg-query -W --showformat='${Version}' "$package" 2>/dev/null) || version=""
+
+if [ -z "$version" ]; then
+    echo >&2 "$0: package '$package' is not installed"
+    exit 0
+fi
+
+unset DEBIAN_HAS_FRONTEND
+unset DEBIAN_FRONTEND
+unset DEBCONF_REDIR
+runcommandinroot "$root" dpkg-reconfigure -fnoninteractive --no-reload "$package"
+
+exit 0

+ 11 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/20xconfig

@@ -0,0 +1,11 @@
+#! /bin/sh
+set -e
+
+if [ -f /etc/X11/xorg.conf ]; then
+    cp -a /etc/X11/xorg.conf /target/etc/X11/xorg.conf
+    # requires x11-common (>= 7.0.0-0ubuntu1)
+    mkdir -p /target/var/lib/x11
+    chroot /target sh -c 'md5sum /etc/X11/xorg.conf > /var/lib/x11/xorg.conf.md5sum'
+fi
+
+exit 0

+ 8 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/22gnome_panel_data

@@ -0,0 +1,8 @@
+#! /bin/sh
+set -e
+
+if laptop-detect; then
+    casper-reconfigure /target gnome-panel-data
+fi
+
+exit 0

+ 8 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/25modules

@@ -0,0 +1,8 @@
+#! /bin/sh
+set -e
+
+if [ -f /etc/modules ]; then
+    cp -a /etc/modules /target/etc/modules
+fi
+
+exit 0

+ 171 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/30accessibility

@@ -0,0 +1,171 @@
+#!/bin/sh
+# If you are looking to change accessibility profile settings, please look in
+# bin/casper-a11y-enable.
+
+. /usr/share/debconf/confmodule
+. /etc/casper.conf
+
+PREREQ=""
+DESCRIPTION="Configuring accessibility options..."
+db_get passwd/username
+TARGET_USERNAME="$RET"
+
+setup_profile()
+{
+	if [ -n "$PROFILE_NAME" ] &&
+	   [ -d /target/usr/share/a11y-profile-manager/profiles/$PROFILE_NAME ] &&
+	   [ -x /usr/bin/a11y-profile-manager ] &&
+	   [ -x /usr/bin/dconf ] &&
+	   [ -x /target/usr/bin/dconf ]; then
+		mkdir -p /target/tmp/user-a11y-profile-settings.d
+		/usr/bin/a11y-profile-manager -s $PROFILE_NAME -D /target/tmp/user-a11y-profile-settings.d/01-profile
+		if [ -n "$COPY_ORCA_CONFIG" ] &&
+		   [ -x /target/usr/bin/orca ]; then
+			su -c "/usr/bin/dconf dump /org/gnome/orca/ | \
+			      sed -e 's@\[/\]@\[org/gnome/orca\]@g' -e 's@\[profile/@\[org/gnome/orca/profile/@g' \
+			      > /home/$USERNAME/02-orca" $USERNAME
+			cp /home/$USERNAME/02-orca /target/tmp/user-a11y-profile-settings.d
+			if [ -x /target/usr/sbin/unity-greeter ]; then
+				mkdir -p /target/tmp/greeter-a11y-profile-settings.d
+				cat <<EOF > /target/tmp/greeter-a11y-profile-settings.d/01-greeter
+[com/canonical/unity-greeter]
+screen-reader=true
+EOF
+				cp /home/$USERNAME/02-orca /target/tmp/greeter-a11y-profile-settings.d
+			elif [ -x /target/usr/sbin/lightdm-gtk-greeter ]; then
+				mkdir -p /target/tmp/greeter-a11y-profile-settings.d
+				cp /home/$USERNAME/02-orca /target/tmp/greeter-a11y-profile-settings.d
+			fi
+		fi
+
+		if [ -n "$UG_SETTING" ] &&
+		   [ -x /target/usr/sbin/unity-greeter ]; then
+			mkdir -p /target/tmp/greeter-a11y-profile-settings.d
+			cat <<EOF > /target/tmp/greeter-a11y-profile-settings.d/01-greeter
+[com/canonical/unity-greeter]
+$UG_SETTING=true
+EOF
+		fi
+
+		if [ -n "$LGTK_VAR" ] &&
+		   [ -x /target/usr/sbin/lightdm-gtk-greeter ]; then
+			# If there is a better way to do this, I'm not currently aware of it.
+			mkdir -p /target/var/lib/lightdm/.cache/lightdm-gtk-greeter
+			cat <<EOF > /target/var/lib/lightdm/.cache/lightdm-gtk-greeter/state
+[a11y-states]
+$LGTK_VAR=true
+EOF
+			chroot /target chown -R lightdm.lightdm /var/lib/lightdm/.cache
+		fi
+
+		chroot /target /usr/bin/dconf compile /tmp/dconf.user /tmp/user-a11y-profile-settings.d
+		mkdir -p /target/home/$TARGET_USERNAME/.config/dconf
+		mv /target/tmp/dconf.user /target/home/$TARGET_USERNAME/.config/dconf/user
+		chroot /target chown -R $TARGET_USERNAME.$TARGET_USERNAME /home/$TARGET_USERNAME/.config
+
+		if [ -d /target/tmp/greeter-a11y-profile-settings.d ]; then
+			chroot /target /usr/bin/dconf compile /tmp/dconf.greeter /tmp/greeter-a11y-profile-settings.d
+			mkdir -p /target/var/lib/lightdm/.config/dconf
+			mv /target/tmp/dconf.greeter /target/var/lib/lightdm/.config/dconf/user
+			chroot /target chown -R lightdm.lightdm /var/lib/lightdm/.config
+		fi
+
+		if [ -d /target/tmp/user-a11y-profile-settings.d ]; then
+			rm -r /target/tmp/user-a11y-profile-settings.d
+		fi
+		if [ -d /target/tmp/greeter-a11y-profile-settings.d ]; then
+			rm -r /target/tmp/greeter-a11y-profile-settings.d
+		fi
+		if [ -f /home/$USERNAME/01-profile ]; then
+			rm /home/$USERNAME/01-profile
+		fi
+		if [ -f /home/$USERNAME/02-orca ]; then
+			rm /home/$USERNAME/02-orca
+		fi
+	fi
+}
+
+for x in $(cat /proc/cmdline); do
+	case $x in
+		# Lesser Visual Impairment
+		access=v1)
+			PROFILE_NAME=high-contrast
+			UG_SETTING=high-contrast
+			setup_profile
+			exit
+                        ;;
+		# Blindness
+		access=v3)
+			PROFILE_NAME=blindness
+			COPY_ORCA_CONFIG=true
+			setup_profile
+			exit
+                        ;;
+		# Braille
+		braille=ask)
+			PROFILE_NAME=braille
+			COPY_ORCA_CONFIG=true
+			setup_profile
+			exit
+                        ;;
+		# Minor Motor Difficulties
+		access=m1)
+			PROFILE_NAME=motor-difficulties
+			setup_profile
+			exit
+                        ;;
+		# Motor Difficulties - pointing devices
+		access=m2)
+			PROFILE_NAME=onscreen-keyboard
+			UG_SETTING=onscreen-keyboard
+			setup_profile
+			exit
+                        ;;
+		esac
+done
+
+# Check the live user GSettings for the active profile if any.
+A11Y_PROFILE="$(su -c 'gsettings get com.canonical.a11y-profile-manager active-profile' $USERNAME \
+		| sed -e s/\'//g)"
+
+case "$A11Y_PROFILE" in
+	# Lesser Visual Impairment
+	*high-contrast)
+		PROFILE_NAME=$A11Y_PROFILE
+		UG_SETTING=high-contrast
+		LGTK_VAR=contrast
+		setup_profile
+		exit
+		;;
+	# Blindness
+	*blindness)
+		PROFILE_NAME=$A11Y_PROFILE
+		COPY_ORCA_CONFIG=true
+		LGTK_VAR=reader
+		setup_profile
+		exit
+		;;
+	# Braille
+	*braille)
+		PROFILE_NAME=$A11Y_PROFILE
+		COPY_ORCA_CONFIG=true
+		LGTK_VAR=reader
+		setup_profile
+		exit
+		;;
+	# Minor Motor Difficulties
+	*motor-difficulties)
+		PROFILE_NAME=$A11Y_PROFILE
+		setup_profile
+		exit
+		;;
+	# Motor Difficulties - pointing devices
+	*onscreen-keyboard)
+		PROFILE_NAME=$A11Y_PROFILE
+		UG_SETTING=onscreen-keyboard
+		LGTK_VAR=keyboard
+		setup_profile
+		exit
+		;;
+esac
+

+ 6 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/32gnome_power_manager

@@ -0,0 +1,6 @@
+#! /bin/sh
+set -e
+
+casper-reconfigure /target gnome-power-manager
+
+exit 0

+ 24 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/40install_driver_updates

@@ -0,0 +1,24 @@
+#! /bin/sh
+set -e
+
+if [ ! -d /var/cache/driver-updates ]; then
+	exit 0
+fi
+
+install_dir=/var/cache/driver-updates
+
+trap "rm -rf /target$install_dir" EXIT HUP INT QUIT TERM
+mkdir -p "/target$install_dir"
+cp -a /var/cache/driver-updates/*.deb "/target$install_dir/" || exit 0
+
+# We cannot leave packages in a bad state. So if the install fails, remove
+# it. This will get caught in /var/log/syslog.
+for deb in "/target$install_dir"/*; do
+	[ -f "$deb" ] || continue
+	debbase="${deb##*/}"
+	if ! chroot /target dpkg -i "$install_dir/$debbase"; then
+		chroot /target dpkg -P "${debbase%%_*}"
+	fi
+done
+
+exit 0

+ 18 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/45jackd2

@@ -0,0 +1,18 @@
+#!/bin/sh
+set -e
+
+. /usr/share/debconf/confmodule
+
+if db_get jackd/tweak_rt_limits; then
+	# Using DEBCONF_DB_REPLACE is a hack to force configdb to be
+	# read-only, which debconf-copydb doesn't currently arrange for
+	# itself.
+	DEBCONF_DB_REPLACE=configdb debconf-copydb configdb targetdb \
+		-p jackd/tweak_rt_limits \
+		--config=Name:targetdb --config=Driver:File \
+		--config=Mode:0644 \
+		--config=Filename:/target/var/cache/debconf/config.dat
+	casper-reconfigure /target jackd2
+fi
+
+exit 0

+ 11 - 0
ubiquity-casper/usr/lib/ubiquity/target-config/49kubuntu_gnome_icon_cache

@@ -0,0 +1,11 @@
+#! /bin/sh
+set -e
+
+# livecd-rootfs deletes the Gnome icon cache for Kubuntu CDs to save space, recreate it here
+
+if [ -e "/target/usr/share/kubuntu-default-settings/" ] && [ -e "/target/usr/bin/gtk-update-icon-cache" ]; then
+    chroot /target gtk-update-icon-cache /usr/share/icons/hicolor
+    chroot /target gtk-update-icon-cache /usr/share/icons/oxygen
+fi
+
+exit 0

BIN
ubiquity-casper/usr/share/doc/ubiquity-casper/changelog.Debian.gz


+ 62 - 0
ubiquity-casper/usr/share/doc/ubiquity-casper/copyright

@@ -0,0 +1,62 @@
+Author: Tollef Fog Heen <tfheen@canonical.com>
+        Matt Zimmerman <mdz@canonical.com>
+        Colin Watson <cjwatson@canonical.com>
+
+Copyright:
+
+License (casper-md5check/md5.c, casper-md5check/md5,h}):
+
+	Copyright (C) 1999-2002 Aladdin Enterprises
+	All rights reserved.
+
+	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.
+
+License (bin/casper-set-selections):
+
+	The Debian installer preseeder is copyright 2004 by Joey Hess
+	<joeyh@debian.org> and others.
+
+	This program is free software; you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation; either version 2 of the License, or
+	(at your option) any later version.
+
+License (everything else):
+
+	Copyright (C) 2006 Marco Amadori <marco.amadori@gmail.com>
+	Copyright (C) 2005-2011 Canonical Ltd. <http://www.canonical.com/>
+	Copyright (C) 2008 Dell Inc.
+
+	This program is free software; you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation; either version 2 of the License, or
+	(at your option) any later version.
+
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with this program; if not, write to the Free Software
+	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+On Debian and Ubuntu systems, the complete text of the GNU General Public License
+can be found in /usr/share/common-licenses/GPL file.

+ 59 - 0
ubiquity-frontend-gtk/usr/bin/kylin_checkpasswd

@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- Mode: Python; coding: utf-8;
+
+import pwquality
+import sys
+
+import gettext
+# import locale
+LOCALEDIR = "/usr/share/locale"
+_ = gettext.gettext
+
+domain = "libpwquality"
+gettext.bindtextdomain(domain, LOCALEDIR)
+gettext.textdomain(domain)
+_ = gettext.gettext
+
+pwsetting = pwquality.PWQSettings()
+pwsetting.read_config()
+
+def set_locales():
+    # locale.setlocale(locale.LC_ALL, "")
+    domain = "libpwquality"
+    gettext.bindtextdomain(domain, LOCALEDIR)
+    gettext.textdomain(domain)
+    # gettext.install(domain, LOCALEDIR)
+    # domain = 'libpwquality'
+    # locale.bindtextdomain(domain, LOCALEDIR)
+    # locale.textdomain(domain)
+    # gettext.bindtextdomain(domain, LOCALEDIR)
+    # gettext.textdomain(domain)
+
+
+def read_config():
+    print("pwquality settings:")
+    print("minlen:", pwsetting.minlen)
+    print("minclass:", pwsetting.minclass)
+    print("dictcheck:", pwsetting.dictcheck)
+
+def check_pass(passwd):
+    try:
+        pwsetting.check(passwd)
+        print("ok;")
+    except pwquality.PWQError as e:
+        print("error;" +  _(e.args[1]))
+
+
+if __name__ == '__main__':
+    # set_locales()
+    if len(sys.argv) != 2 and len(sys.argv) != 3:
+        print(sys.argv[0] + ":\n\t\tread\n\t\tcheck\t<passwd>")
+        sys.exit(1)
+
+    if sys.argv[1] == "read" and len(sys.argv) == 2:
+        read_config()
+        sys.exit(0)
+
+    if sys.argv[1] == "check" and len(sys.argv) == 3:
+        check_pass(sys.argv[2])
+        sys.exit(0)

BIN
ubiquity-frontend-gtk/usr/lib/girepository-1.0/UbiquityMockResolver-1.0.typelib


BIN
ubiquity-frontend-gtk/usr/lib/ubiquity/panel


+ 0 - 0
ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/__init__.py


+ 130 - 0
ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/keyboard_query.py

@@ -0,0 +1,130 @@
+from gi.repository import Gtk, GObject, Gdk
+
+from ubiquity import keyboard_detector
+
+
+class Keyrow(Gtk.Box):
+    def __init__(self):
+        GObject.GObject.__init__(self, spacing=24)
+
+    def add_character(self, key):
+        l = Gtk.Label(label='<big>%s</big>' % key)
+        l.set_use_markup(True)
+        self.pack_start(l, True, True, 0)
+        l.show()
+
+    def clear(self):
+        for ch in self.get_children():
+            self.remove(ch)
+
+
+class KeyboardQuery(Gtk.Window):
+    __gtype_name__ = 'KeyboardQuery'
+    __gsignals__ = {
+        'layout_result': (
+            GObject.SignalFlags.RUN_FIRST, None, (GObject.TYPE_STRING,)),
+    }
+
+    def __init__(self, frontend):
+        Gtk.Window.__init__(self)
+
+        self.set_title(
+            frontend.get_string('ubiquity/text/keyboard_query_title'))
+        self.set_keep_above(True)
+        self.set_modal(True)
+        self.set_border_width(20)
+        self.set_property('resizable', False)
+        # TODO if we can allocate the space we'll need ahead of time, we can
+        # use center_on_parent here.
+        self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
+        self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
+        self.vbox = Gtk.Box(spacing=10)
+        self.vbox.set_orientation(Gtk.Orientation.VERTICAL)
+
+        self.press_string = \
+            frontend.get_string('ubiquity/text/keyboard_query_press')
+        self.present_string = \
+            frontend.get_string('ubiquity/text/keyboard_query_present')
+        self.heading = Gtk.Label(label=self.press_string)
+        self.heading.set_alignment(0, 0.5)
+        self.vbox.pack_start(self.heading, False, True, 0)
+
+        self.keyrow = Keyrow()
+        self.vbox.pack_start(self.keyrow, False, True, 0)
+
+        self.buttons = Gtk.ButtonBox()
+        self.buttons.set_spacing(12)
+        self.buttons.set_layout(Gtk.ButtonBoxStyle.START)
+        # FIXME evand 2009-12-16: i18n
+        no = Gtk.Button(stock=Gtk.STOCK_NO)
+        yes = Gtk.Button(stock=Gtk.STOCK_YES)
+        self.buttons.add(no)
+        self.buttons.add(yes)
+        self.vbox.add(self.buttons)
+
+        self.add(self.vbox)
+
+        yes.connect('clicked', self.have_key)
+        no.connect('clicked', self.no_have_key)
+        self.connect('key_press_event', self.key_press_event)
+
+        self.keyboard_detect = keyboard_detector.KeyboardDetector()
+        self.buttons.hide()
+
+    def run(self, *args):
+        self.show_all()
+        r = self.keyboard_detect.read_step(0)
+        self.process(r)
+
+    def process(self, r):
+        self.keyrow.clear()
+        for k in self.keyboard_detect.symbols:
+            self.keyrow.add_character(k)
+        if r == keyboard_detector.KeyboardDetector.PRESS_KEY:
+            self.heading.set_label(self.press_string)
+            self.buttons.hide()
+        elif (r == keyboard_detector.KeyboardDetector.KEY_PRESENT or
+              r == keyboard_detector.KeyboardDetector.KEY_PRESENT_P):
+            self.heading.set_label(self.present_string)
+            self.buttons.show()
+        elif r == keyboard_detector.KeyboardDetector.RESULT:
+            self.emit('layout_result', self.keyboard_detect.result)
+            self.hide()
+        else:
+            raise Exception('should not have got here')
+
+    def have_key(self, *args):
+        try:
+            r = self.keyboard_detect.read_step(self.keyboard_detect.present)
+            self.process(r)
+        except:
+            self.hide()
+
+    def no_have_key(self, *args):
+        try:
+            r = self.keyboard_detect.read_step(
+                self.keyboard_detect.not_present)
+            self.process(r)
+        except:
+            self.hide()
+
+    def key_press_event(self, widget, event):
+        # FIXME need to account for possible remapping.  Find the API to
+        # translate kernel keycodes to X keycodes (xkb).
+        # MIN_KEYCODE = 8
+
+        # FIXME escape should close the window.
+
+        code = event.hardware_keycode - 8
+        if code > 255:
+            return
+        if code in self.keyboard_detect.keycodes:
+            # XKB doesn't support keycodes > 255.
+            c = self.keyboard_detect.keycodes[code]
+            try:
+                r = self.keyboard_detect.read_step(c)
+                self.process(r)
+            except:
+                self.hide()
+
+GObject.type_register(KeyboardQuery)

+ 372 - 0
ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_components/nmwidgets.py

@@ -0,0 +1,372 @@
+import string
+
+from dbus.mainloop.glib import DBusGMainLoop
+DBusGMainLoop(set_as_default=True)
+
+from gi.repository import Gtk, GObject, GLib
+
+from ubiquity.nm import QueuedCaller, NetworkStore, NetworkManager
+
+
+class GLibQueuedCaller(QueuedCaller):
+    def __init__(self, *args):
+        QueuedCaller.__init__(self, *args)
+        self.timeout_id = 0
+
+    def start(self):
+        if self.timeout_id:
+            GLib.source_remove(self.timeout_id)
+        self.timeout_id = GLib.timeout_add(self.timeout, self.callback)
+
+
+class GtkNetworkStore(NetworkStore, Gtk.TreeStore):
+    def __init__(self):
+        NetworkStore.__init__(self)
+        Gtk.TreeStore.__init__(self, str, object, object)
+
+    def get_device_ids(self):
+        it = self.get_iter_first()
+        lst = []
+        while it:
+            lst.append(self[it][0])
+            it = self.iter_next(it)
+        return lst
+
+    def add_device(self, devid, vendor, model):
+        self.append(None, [devid, vendor, model])
+
+    def has_device(self, devid):
+        return self._it_for_device(devid) is not None
+
+    def remove_devices_not_in(self, devids):
+        self._remove_rows_not_in(None, devids)
+
+    def add_ap(self, devid, ssid, secure, strength):
+        dev_it = self._it_for_device(devid)
+        assert dev_it
+        self.append(dev_it, [ssid, secure, strength])
+
+    def has_ap(self, devid, ssid):
+        return self._it_for_ap(devid, ssid) is not None
+
+    def set_ap_strength(self, devid, ssid, strength):
+        it = self._it_for_ap(devid, ssid)
+        assert it
+        self[it][2] = strength
+
+    def remove_aps_not_in(self, devid, ssids):
+        dev_it = self._it_for_device(devid)
+        if not dev_it:
+            return
+        self._remove_rows_not_in(dev_it, ssids)
+
+    def _remove_rows_not_in(self, parent_it, ids):
+        it = self.iter_children(parent_it)
+        while it:
+            if self[it][0] in ids:
+                it = self.iter_next(it)
+            else:
+                if not self.remove(it):
+                    return
+
+    def _it_for_device(self, devid):
+        it = self.get_iter_first()
+        while it:
+            if self[it][0] == devid:
+                return it
+            it = self.iter_next(it)
+        return None
+
+    def _it_for_ap(self, devid, ssid):
+        dev_it = self._it_for_device(devid)
+        if not dev_it:
+            return None
+        it = self.iter_children(dev_it)
+        while it:
+            if self[it][0] == ssid:
+                return it
+            it = self.iter_next(it)
+        return None
+
+
+class NetworkManagerTreeView(Gtk.TreeView):
+    __gtype_name__ = 'NetworkManagerTreeView'
+
+    def __init__(self, password_entry=None, state_changed=None):
+        Gtk.TreeView.__init__(self)
+        self.password_entry = password_entry
+        self.configure_icons()
+        model = GtkNetworkStore()
+        model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
+        # TODO eventually this will subclass GenericTreeModel.
+        self.wifi_model = NetworkManager(model,
+                                         GLibQueuedCaller,
+                                         state_changed)
+        self.set_model(model)
+
+        ssid_column = Gtk.TreeViewColumn('')
+        cell_pixbuf = Gtk.CellRendererPixbuf()
+        cell_text = Gtk.CellRendererText()
+        ssid_column.pack_start(cell_pixbuf, False)
+        ssid_column.pack_start(cell_text, True)
+        ssid_column.set_cell_data_func(cell_text, self.data_func)
+        ssid_column.set_cell_data_func(cell_pixbuf, self.pixbuf_func)
+        self.connect('row-activated', self.row_activated)
+
+        self.append_column(ssid_column)
+        self.set_headers_visible(False)
+        self.setup_row_expansion_handling(model)
+
+    def setup_row_expansion_handling(self, model):
+        """
+        If the user collapses a row, save that state. If all the APs go away
+        and then return, such as when the user toggles the wifi kill switch,
+        the UI should keep the row collapsed if it already was, or expand it.
+        """
+        self.expand_all()
+        self.rows_changed_id = None
+
+        def queue_rows_changed(*args):
+            if self.rows_changed_id:
+                GLib.source_remove(self.rows_changed_id)
+            self.rows_changed_id = GLib.idle_add(self.rows_changed)
+
+        model.connect('row-inserted', queue_rows_changed)
+        model.connect('row-deleted', queue_rows_changed)
+
+        self.user_collapsed = {}
+
+        def collapsed(self, iterator, path, collapse):
+            udi = model[iterator][0]
+            self.user_collapsed[udi] = collapse
+
+        self.connect('row-collapsed', collapsed, True)
+        self.connect('row-expanded', collapsed, False)
+
+    def rows_changed(self, *args):
+        model = self.get_model()
+        i = model.get_iter_first()
+        while i:
+            udi = model[i][0]
+            try:
+                if not self.user_collapsed[udi]:
+                    path = model.get_path(i)
+                    self.expand_row(path, False)
+            except KeyError:
+                path = model.get_path(i)
+                self.expand_row(path, False)
+            i = model.iter_next(i)
+
+    def get_state(self):
+        return self.wifi_model.get_state()
+
+    def disconnect_from_ap(self):
+        self.wifi_model.disconnect_from_ap()
+
+    def row_activated(self, unused, path, column):
+        passphrase = None
+        if self.password_entry:
+            passphrase = self.password_entry.get_text()
+        self.connect_to_selection(passphrase)
+
+    def configure_icons(self):
+        it = Gtk.IconTheme()
+        default = Gtk.IconTheme.get_default()
+        default = default.load_icon(Gtk.STOCK_MISSING_IMAGE, 22, 0)
+        it.set_custom_theme('ubuntu-mono-light')
+        self.icons = []
+        for n in ['nm-signal-00',
+                  'nm-signal-25',
+                  'nm-signal-50',
+                  'nm-signal-75',
+                  'nm-signal-100',
+                  'nm-signal-00-secure',
+                  'nm-signal-25-secure',
+                  'nm-signal-50-secure',
+                  'nm-signal-75-secure',
+                  'nm-signal-100-secure']:
+            ico = it.lookup_icon(n, 22, 0)
+            if ico:
+                ico = ico.load_icon()
+            else:
+                ico = default
+            self.icons.append(ico)
+
+    def pixbuf_func(self, column, cell, model, iterator, data):
+        if not model.iter_parent(iterator):
+            cell.set_property('pixbuf', None)
+            return
+        strength = model[iterator][2]
+        if strength < 30:
+            icon = 0
+        elif strength < 50:
+            icon = 1
+        elif strength < 70:
+            icon = 2
+        elif strength < 90:
+            icon = 3
+        else:
+            icon = 4
+        if model[iterator][1]:
+            icon += 5
+        cell.set_property('pixbuf', self.icons[icon])
+
+    def data_func(self, column, cell, model, iterator, data):
+        ssid = model[iterator][0]
+
+        if not model.iter_parent(iterator):
+            txt = '%s %s' % (model[iterator][1], model[iterator][2])
+            cell.set_property('text', txt)
+        else:
+            cell.set_property('text', ssid)
+
+    def get_passphrase(self, ssid):
+        try:
+            cached = self.wifi_model.passphrases_cache[ssid]
+        except KeyError:
+            return ''
+        return cached
+
+    def is_row_an_ap(self):
+        model, iterator = self.get_selection().get_selected()
+        if iterator is None:
+            return False
+        return model.iter_parent(iterator) is not None
+
+    def is_row_connected(self):
+        model, iterator = self.get_selection().get_selected()
+        if iterator is None:
+            return False
+        ssid = model[iterator][0]
+        parent = model.iter_parent(iterator)
+        if parent and self.wifi_model.is_connected(model[parent][0], ssid):
+            return True
+        else:
+            return False
+
+    def connect_to_selection(self, passphrase):
+        model, iterator = self.get_selection().get_selected()
+        ssid = model[iterator][0]
+        parent = model.iter_parent(iterator)
+        if parent:
+            self.wifi_model.connect_to_ap(model[parent][0], ssid, passphrase)
+
+GObject.type_register(NetworkManagerTreeView)
+
+
+class NetworkManagerWidget(Gtk.Box):
+    __gtype_name__ = 'NetworkManagerWidget'
+    __gsignals__ = {
+        'connection': (
+            GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+            (GObject.TYPE_UINT,)),
+        'selection_changed': (
+            GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ()),
+        'pw_validated': (
+            GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
+            (GObject.TYPE_BOOLEAN,))}
+
+    def __init__(self):
+        Gtk.Box.__init__(self)
+        self.set_orientation(Gtk.Orientation.VERTICAL)
+        self.set_spacing(12)
+        self.password_entry = Gtk.Entry()
+        self.view = NetworkManagerTreeView(self.password_entry,
+                                           self.state_changed)
+        scrolled_window = Gtk.ScrolledWindow()
+        scrolled_window.set_policy(
+            Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
+        scrolled_window.set_shadow_type(Gtk.ShadowType.IN)
+        scrolled_window.add(self.view)
+        self.pack_start(scrolled_window, True, True, 0)
+        self.hbox = Gtk.Box(spacing=6)
+        self.pack_start(self.hbox, False, True, 0)
+        self.password_label = Gtk.Label(label='Password:')
+        self.password_entry.set_visibility(False)
+        self.password_entry.connect('activate', self.connect_to_ap)
+        self.password_entry.connect('changed', self.password_entry_changed)
+        self.display_password = Gtk.CheckButton(label='Display password')
+        self.display_password.connect('toggled', self.display_password_toggled)
+        self.hbox.pack_start(self.password_label, False, True, 0)
+        self.hbox.pack_start(self.password_entry, True, True, 0)
+        self.hbox.pack_start(self.display_password, False, True, 0)
+        self.hbox.set_sensitive(False)
+        self.selection = self.view.get_selection()
+        self.selection.connect('changed', self.changed)
+        self.show_all()
+
+    def translate(self, password_label_text, display_password_text):
+        self.password_label.set_label(password_label_text)
+        self.display_password.set_label(display_password_text)
+
+    def get_state(self):
+        return self.view.get_state()
+
+    def is_row_an_ap(self):
+        return self.view.is_row_an_ap()
+
+    def is_row_connected(self):
+        return self.view.is_row_connected()
+
+    def select_usable_row(self):
+        self.selection.select_path('0:0')
+
+    def state_changed(self, state):
+        self.emit('connection', state)
+
+    def password_is_valid(self):
+        passphrase = self.password_entry.get_text()
+        if len(passphrase) >= 8 and len(passphrase) < 64:
+            return True
+        if len(passphrase) == 64:
+            for c in passphrase:
+                if c not in string.hexdigits:
+                    return False
+            return True
+        else:
+            return False
+
+    def connect_to_ap(self, *args):
+        if self.password_is_valid():
+            passphrase = self.password_entry.get_text()
+            self.view.connect_to_selection(passphrase)
+
+    def disconnect_from_ap(self):
+        self.view.disconnect_from_ap()
+
+    def password_entry_changed(self, *args):
+        self.emit('pw_validated', self.password_is_valid())
+
+    def display_password_toggled(self, *args):
+        self.password_entry.set_visibility(self.display_password.get_active())
+
+    def changed(self, selection):
+        iterator = selection.get_selected()[1]
+        if not iterator:
+            return
+        row = selection.get_tree_view().get_model()[iterator]
+        secure = row[1]
+        ssid = row[0]
+        if secure:
+            self.hbox.set_sensitive(True)
+            passphrase = self.view.get_passphrase(ssid)
+            self.password_entry.set_text(passphrase)
+            self.emit('pw_validated', False)
+        else:
+            self.hbox.set_sensitive(False)
+            self.password_entry.set_text('')
+            self.emit('pw_validated', True)
+        self.emit('selection_changed')
+
+GObject.type_register(NetworkManagerWidget)
+
+
+if __name__ == '__main__':
+    window = Gtk.Window()
+    window.connect('destroy', Gtk.main_quit)
+    window.set_size_request(300, 300)
+    window.set_border_width(12)
+    nm = NetworkManagerWidget()
+    window.add(nm)
+    window.show_all()
+    Gtk.main()

+ 1932 - 0
ubiquity-frontend-gtk/usr/lib/ubiquity/ubiquity/frontend/gtk_ui.py

@@ -0,0 +1,1932 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+#
+# «gtk_ui» - GTK user interface
+#
+# Copyright (C) 2005 Junta de Andalucía
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd.
+#
+# Authors:
+#
+# - Javier Carranza <javier.carranza#interactors._coop>
+# - Juan Jesús Ojeda Croissier <juanje#interactors._coop>
+# - Antonio Olmo Titos <aolmo#emergya._info>
+# - Gumer Coronel Pérez <gcoronel#emergya._info>
+# - Colin Watson <cjwatson@ubuntu.com>
+# - Evan Dandrea <ev@ubuntu.com>
+# - Mario Limonciello <superm1@ubuntu.com>
+#
+# This file is part of Ubiquity.
+#
+# Ubiquity is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or at your option)
+# any later version.
+#
+# Ubiquity is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Ubiquity; if not, write to the Free Software Foundation, Inc., 51
+# Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+from __future__ import print_function
+
+import atexit
+import configparser
+from functools import reduce
+import gettext
+import gi
+import os
+import subprocess
+import sys
+import syslog
+import traceback
+
+import dbus
+from dbus.mainloop.glib import DBusGMainLoop
+DBusGMainLoop(set_as_default=True)
+
+# in query mode we won't be in X, but import needs to pass
+if 'DISPLAY' in os.environ:
+    from gi.repository import Gtk, Gdk, GObject, GLib, Atk
+    from ubiquity import gtkwidgets
+
+from ubiquity import (
+    filteredcommand, gsettings, i18n, validation, misc, osextras)
+from ubiquity.components import install, plugininstall, partman_commit
+import ubiquity.frontend.base
+from ubiquity.frontend.base import BaseFrontend
+from ubiquity.plugin import Plugin
+import ubiquity.progressposition
+
+# We create class attributes dynamically from UI files, and it's far too
+# tedious to list them all.
+__pychecker__ = 'no-classattr'
+
+# Define global path
+PATH = os.environ.get('UBIQUITY_PATH', False) or '/usr/share/ubiquity'
+
+# Define ui path
+UIDIR = os.environ.get('UBIQUITY_GLADE', False) or os.path.join(PATH, 'gtk')
+os.environ['UBIQUITY_GLADE'] = UIDIR
+
+
+# Define locale path
+LOCALEDIR = "/usr/share/locale"
+
+
+def set_root_cursor(cursor=None):
+    if cursor is None:
+        cursor = Gdk.Cursor.new(Gdk.CursorType.ARROW)
+    win = Gdk.get_default_root_window()
+    if win:
+        win.set_cursor(cursor)
+    gtkwidgets.refresh()
+
+
+class Controller(ubiquity.frontend.base.Controller):
+    def add_builder(self, builder):
+        self._wizard.builders.append(builder)
+
+    def translate(self, lang=None, just_me=True, not_me=False, reget=False):
+        if lang:
+            self._wizard.locale = lang
+        self._wizard.translate_pages(lang, just_me, not_me, reget)
+
+    def allow_go_forward(self, allowed):
+        try:
+            self._wizard.allow_go_forward(allowed)
+        except AttributeError:
+            pass
+
+    def allow_go_backward(self, allowed):
+        try:
+            self._wizard.allow_go_backward(allowed)
+        except AttributeError:
+            pass
+
+    def allow_change_step(self, allowed):
+        try:
+            self._wizard.allow_change_step(allowed)
+        except AttributeError:
+            pass
+
+    def allowed_change_step(self):
+        return self._wizard.allowed_change_step
+
+    def go_forward(self):
+        self._wizard.next.activate()
+
+    def go_backward(self):
+        self._wizard.back.activate()
+
+    def go_to_page(self, widget):
+        self._wizard.set_current_page(self._wizard.steps.page_num(widget))
+
+    def toggle_top_level(self):
+        if self._wizard.live_installer.get_property('visible'):
+            self._wizard.live_installer.hide()
+        else:
+            self._wizard.live_installer.show()
+        self._wizard.refresh()
+
+    def toggle_progress_section(self):
+        if self._wizard.progress_section.get_property('visible'):
+            self._wizard.progress_section.hide()
+        else:
+            self._wizard.progress_section.show()
+        self._wizard.refresh()
+
+    def get_string(self, name, lang=None, prefix=None):
+        return self._wizard.get_string(name, lang, prefix)
+
+    def toggle_navigation_control(self, hideFlag):
+        if hideFlag:
+            self._wizard.navigation_control.show()
+        else:
+            self._wizard.navigation_control.hide()
+        self._wizard.refresh()
+
+    def toggle_next_button(self, label='gtk-go-forward'):
+        self._wizard.toggle_next_button(label)
+
+    def toggle_skip_button(self, label='skip'):
+        self._wizard.toggle_skip_button(label)
+
+    def switch_to_install_interface(self):
+        self._wizard.switch_to_install_interface()
+
+
+class Wizard(BaseFrontend):
+    def __init__(self, distro):
+        def add_subpage(self, steps, name):
+            """Inserts a subpage into the notebook.  This assumes the file
+            shares the same base name as the page you are looking for."""
+            widget = None
+            uifile = UIDIR + '/' + name + '.ui'
+            if os.path.exists(uifile):
+                self.builder.add_from_file(uifile)
+                widget = self.builder.get_object(name)
+                steps.append_page(widget, None)
+            else:
+                print('Could not find ui file %s' % name, file=sys.stderr)
+            return widget
+
+        def add_widget(self, widget):
+            """Make a widget callable by the toplevel."""
+            if not isinstance(widget, Gtk.Widget):
+                return
+            name = Gtk.Buildable.get_name(widget)
+            widget.set_name(name)
+            if 'UBIQUITY_LDTP' in os.environ:
+                atk_desc = widget.get_accessible()
+                atk_desc.set_name(name)
+            self.all_widgets.add(widget)
+            setattr(self, widget.get_name(), widget)
+            # We generally want labels to be selectable so that people can
+            # easily report problems in them
+            # (https://launchpad.net/bugs/41618), but GTK+ likes to put
+            # selectable labels in the focus chain, and I can't seem to turn
+            # this off in glade and have it stick. Accordingly, make sure
+            # labels are unfocusable here.
+            label = None
+            if isinstance(widget, Gtk.Label):
+                label = widget
+            elif isinstance(widget, gtkwidgets.StateBox):
+                label = widget.label
+
+            if label:
+                label.set_selectable(True)
+                label.set_property('can-focus', False)
+
+        BaseFrontend.__init__(self, distro)
+        self.previous_excepthook = sys.excepthook
+        sys.excepthook = self.excepthook
+
+        # declare attributes
+        self.all_widgets = set()
+        self.gsettings_previous = {}
+        self.thunar_previous = {}
+        self.language_questions = ('live_installer', 'quit', 'back', 'next',
+                                   'warning_dialog', 'warning_dialog_label',
+                                   'cancelbutton', 'exitbutton',
+                                   'install_button', 'restart_to_continue')
+        self.current_page = None
+        self.backup = None
+        self.allowed_change_step = True
+        self.allowed_go_backward = True
+        self.allowed_go_forward = True
+        self.stay_on_page = False
+        self.progress_position = ubiquity.progressposition.ProgressPosition()
+        self.progress_cancelled = False
+        self.installing = False
+        self.installing_no_return = False
+        self.returncode = 0
+        self.history = []
+        self.builder = Gtk.Builder()
+        self.grub_options = Gtk.ListStore(
+            GObject.TYPE_STRING, GObject.TYPE_STRING)
+        self.finished_installing = False
+        self.finished_pages = False
+        self.parallel_db = None
+        self.timeout_id = None
+        self.screen_reader = False
+        self.orca_process = None
+
+        # To get a "busy mouse":
+        self.watch = Gdk.Cursor.new(Gdk.CursorType.WATCH)
+        self.set_busy_cursor(True)
+        atexit.register(set_root_cursor)
+
+        # Are we running alongside Orca?
+        with open('/proc/cmdline') as fp:
+            if 'access=v3' in fp.read():
+                self.screen_reader = True
+
+        # set default language
+        self.locale = i18n.reset_locale(self)
+
+        # set custom language
+        self.set_locales()
+
+        # Get the default window background color for the the current
+        # theme and set it as the background for the inline toolbar
+        # Make a thin Progress bar
+        provider = Gtk.CssProvider()
+        provider.load_from_data(b'''\
+            .inline-toolbar.toolbar {
+                background: @theme_bg_color;
+                border-color: transparent;
+                border-width: 0px;
+                padding: 0px;
+            }
+            GtkProgressBar {
+              -GtkProgressBar-min-horizontal-bar-height : 10;
+              -GtkProgressBar-min-horizontal-bar-width : 10;
+            }
+            GtkPaned {
+                -GtkPaned-handle-size: 10;
+            }
+            ''')
+        Gtk.StyleContext.add_provider_for_screen(
+            Gdk.Screen.get_default(),
+            provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
+
+        # load the main interface
+        self.builder.add_from_file('%s/ubiquity.ui' % UIDIR)
+
+        self.builders = [self.builder]
+        self.pages = []
+        self.pagesindex = 0
+        self.pageslen = 0
+        steps = self.builder.get_object("steps")
+        found_install = False
+        for mod in self.modules:
+            if hasattr(mod.module, 'PageGtk'):
+                mod.ui_class = mod.module.PageGtk
+                mod.controller = Controller(self)
+                mod.ui = mod.ui_class(mod.controller)
+                mod.title = mod.ui.get('plugin_title')
+                widgets = mod.ui.get('plugin_widgets')
+                optional_widgets = mod.ui.get('plugin_optional_widgets')
+                if not found_install:
+                    found_install = mod.ui.get('plugin_is_install')
+                if widgets or optional_widgets:
+                    def fill_out(widget_list):
+                        rv = []
+                        if not isinstance(widget_list, list):
+                            widget_list = [widget_list]
+                        for w in widget_list:
+                            if not w:
+                                continue
+                            if isinstance(w, str):
+                                w = add_subpage(self, steps, w)
+                            else:
+                                steps.append_page(w, None)
+                            rv.append(w)
+                        return rv
+                    mod.widgets = fill_out(widgets)
+                    mod.optional_widgets = fill_out(optional_widgets)
+                    mod.all_widgets = mod.widgets + mod.optional_widgets
+                    self.pageslen += 1
+                    self.pages.append(mod)
+
+        # If no plugins declare they are install, then we'll say the last one
+        # is
+        if not found_install:
+            self.pages[self.pageslen - 1].ui.plugin_is_install = True
+
+        self.toplevels = set()
+        for builder in self.builders:
+            for widget in builder.get_objects():
+                add_widget(self, widget)
+                if isinstance(widget, Gtk.Window):
+                    self.toplevels.add(widget)
+        self.builder.connect_signals(self)
+
+        for mod in self.pages:
+            progress = Gtk.ProgressBar()
+            progress.get_accessible().set_role(Atk.Role.INVALID)
+            progress.set_size_request(10, 10)
+            progress.set_fraction(0)
+            self.dot_grid.add(progress)
+
+        next_style = self.next.get_style_context()
+        next_style.add_class('ubiquity-next')
+
+        self.progress_pages = {
+            'empty': 0,
+            'dot_grid': 1,
+            'progress_bar': 2,
+        }
+
+        self.stop_debconf()
+        self.translate_widgets(reget=True)
+
+        self.customize_installer()
+
+        # Put up the a11y indicator.
+#        if osextras.find_on_path('a11y-profile-manager-indicator'):
+#            try:
+#                subprocess.Popen(['a11y-profile-manager-indicator',
+#                                  '-i'], preexec_fn=misc.drop_all_privileges)
+#                if osextras.find_on_path('canberra-gtk-play'):
+#                    subprocess.Popen(
+#                        ['canberra-gtk-play', '--id=system-ready'],
+#                        preexec_fn=misc.drop_all_privileges)
+#            except:
+#                print("Unable to set up accessibility profile support",
+#                      file=sys.stderr)
+#            self.live_installer.connect(
+#                'key-press-event', self.a11y_profile_keys)
+
+    def all_children(self, parent):
+        if isinstance(parent, Gtk.Container):
+            def recurse(x, y):
+                return x + self.all_children(y)
+            rv = reduce(recurse, parent.get_children(), [parent])
+            return rv
+        else:
+            return [parent]
+
+    def translate_pages(self, lang=None, just_current=True, not_current=False,
+                        reget=False):
+        current_page = self.pages[self.pagesindex]
+        if just_current:
+            pages = [current_page]
+        else:
+            pages = self.pages
+
+        if reget:
+            self.translate_reget(lang)
+
+        widgets = []
+        for p in pages:
+            # There's no sense retranslating the page we're leaving.
+            if not_current and p == current_page:
+                continue
+            prefix = p.ui.get('plugin_prefix')
+            for w in p.all_widgets:
+                for c in self.all_children(w):
+                    widgets.append((c, prefix))
+        if not just_current:
+            for toplevel in self.toplevels:
+                if toplevel.get_name() != 'live_installer':
+                    for c in self.all_children(toplevel):
+                        widgets.append((c, None))
+        self.translate_widgets(lang=lang, widgets=widgets, reget=False)
+        self.set_page_title(current_page, lang)
+
+        # Allow plugins to provide a hook for translation.
+        for p in pages:
+            # There's no sense retranslating the page we're leaving.
+            if not_current and p == current_page:
+                continue
+            if hasattr(p.ui, 'plugin_translate'):
+                try:
+                    p.ui.plugin_translate(lang or self.locale)
+                except Exception as e:
+                    print('Could not translate page (%s): %s' %
+                          (p.module.NAME, str(e)), file=sys.stderr)
+
+    def excepthook(self, exctype, excvalue, exctb):
+        """Crash handler."""
+
+        if (issubclass(exctype, KeyboardInterrupt) or
+                issubclass(exctype, SystemExit)):
+            return
+
+        # Restore the default cursor if we were using a spinning cursor on the
+        # root window.
+        try:
+            self.set_busy_cursor(False)
+        except Exception:
+            pass
+
+        tbtext = ''.join(traceback.format_exception(exctype, excvalue, exctb))
+        syslog.syslog(syslog.LOG_ERR,
+                      "Exception in GTK frontend (invoking crash handler):")
+        for line in tbtext.split('\n'):
+            syslog.syslog(syslog.LOG_ERR, line)
+        print("Exception in GTK frontend (invoking crash handler):",
+              file=sys.stderr)
+        print(tbtext, file=sys.stderr)
+
+        self.post_mortem(exctype, excvalue, exctb)
+
+        if os.path.exists('/usr/share/apport/apport-gtk'):
+            self.previous_excepthook(exctype, excvalue, exctb)
+            # In live session mode, update-notifier will pick up the crash
+            # report; in only-ubiquity mode we need to bring up the UI
+            # ourselves
+            # update-notifier doesn't work on overlayfs so also run if using
+            # maybe-ubiquity
+
+            # FIXME: Revert the check to maybe-ubiquity once inotify on
+            # overlayfs is fixed (crash will then be detected by
+            # update-notifier)
+            with open('/proc/cmdline') as fp:
+                if 'ubiquity' in fp.read():
+                    # we need to drop privileges, we cannot run GTK programs
+                    # with non-matching real/effective u/gid
+                    misc.drop_all_privileges()
+                    misc.execute('/usr/share/apport/apport-gtk')
+            sys.exit(1)
+        else:
+            self.crash_detail_label.set_text(tbtext)
+            self.crash_dialog.run()
+            self.crash_dialog.hide()
+            self.live_installer.hide()
+            self.refresh()
+            misc.execute_root("apport-bug", "ubiquity")
+            sys.exit(1)
+
+    def network_change(self, online=False):
+        if not online:
+            self.set_online_state(False)
+            return
+        # kobe:20160120 shade network
+        else:
+            self.set_online_state(False)
+            return
+#        if self.timeout_id:
+#            GLib.source_remove(self.timeout_id)
+#        self.timeout_id = GLib.timeout_add(300, self.check_returncode)
+
+    def set_online_state(self, state):
+        for p in self.pages:
+            if hasattr(p.ui, 'plugin_set_online_state'):
+                p.ui.plugin_set_online_state(state)
+
+    def thunar_set_volmanrc(self, fields):
+        previous = {}
+        if 'SUDO_USER' in os.environ:
+            thunar_dir = os.path.expanduser('~%s/.config/Thunar' %
+                                            os.environ['SUDO_USER'])
+        else:
+            thunar_dir = os.path.expanduser('~/.config/Thunar')
+        if os.path.isdir(thunar_dir):
+            thunar_volmanrc = '%s/volmanrc' % thunar_dir
+            parser = configparser.RawConfigParser()
+            parser.optionxform = str  # case-sensitive
+            parser.read(thunar_volmanrc)
+            if not parser.has_section('Configuration'):
+                parser.add_section('Configuration')
+            for key, value in fields.items():
+                if parser.has_option('Configuration', key):
+                    previous[key] = parser.get('Configuration', key)
+                else:
+                    previous[key] = 'TRUE'
+                parser.set('Configuration', key, value)
+            try:
+                with open('%s.new' % thunar_volmanrc,
+                          'w') as thunar_volmanrc_new:
+                    parser.write(thunar_volmanrc_new)
+                os.rename('%s.new' % thunar_volmanrc, thunar_volmanrc)
+            except (KeyboardInterrupt, SystemExit):
+                raise
+            except:
+                pass
+        return previous
+
+    def disable_terminal(self):
+        gs_schema = 'org.gnome.settings-daemon.plugins.media-keys'
+        gs_key = 'terminal'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        if gs_previous in self.gsettings_previous:
+            return
+
+        gs_value = gsettings.get(gs_schema, gs_key)
+        self.gsettings_previous[gs_previous] = gs_value
+
+        if gs_value:
+            gsettings.set(gs_schema, gs_key, '')
+
+        atexit.register(self.enable_terminal)
+
+    def enable_terminal(self):
+        gs_schema = 'org.gnome.settings-daemon.plugins.media-keys'
+        gs_key = 'terminal'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        gs_value = self.gsettings_previous[gs_previous]
+
+        gsettings.set(gs_schema, gs_key, gs_value)
+
+    def disable_screen_reader(self):
+        gs_key = 'screenreader'
+        for gs_schema in 'org.gnome.settings-daemon.plugins.media-keys', \
+                         'org.mate.SettingsDaemon.plugins.media-keys':
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+            if gs_previous in self.gsettings_previous:
+                return
+
+            gs_value = gsettings.get(gs_schema, gs_key)
+            self.gsettings_previous[gs_previous] = gs_value
+
+            if gs_value:
+                gsettings.set(gs_schema, gs_key, '')
+
+        atexit.register(self.enable_screen_reader)
+
+    def enable_screen_reader(self):
+        gs_key = 'screenreader'
+        for gs_schema in 'org.gnome.settings-daemon.plugins.media-keys', \
+                         'org.mate.SettingsDaemon.plugins.media-keys':
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+            gs_value = self.gsettings_previous[gs_previous]
+
+            gsettings.set(gs_schema, gs_key, gs_value)
+
+    def disable_screensaver(self):
+        gs_schema = 'org.gnome.desktop.screensaver'
+        gs_key = 'idle-activation-enabled'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        if gs_previous in self.gsettings_previous:
+            return
+
+        gs_value = gsettings.get(gs_schema, gs_key)
+        self.gsettings_previous[gs_previous] = gs_value
+
+        if gs_value:
+            gsettings.set(gs_schema, gs_key, False)
+
+        atexit.register(self.enable_screensaver)
+
+    def enable_screensaver(self):
+        gs_schema = 'org.gnome.desktop.screensaver'
+        gs_key = 'idle-activation-enabled'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        gs_value = self.gsettings_previous[gs_previous]
+
+        gsettings.set(gs_schema, gs_key, gs_value)
+
+    def disable_powermgr(self):
+        gs_schema = 'org.gnome.settings-daemon.plugins.power'
+        gs_key = 'active'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        if gs_previous in self.gsettings_previous:
+            return
+
+        gs_value = gsettings.get(gs_schema, gs_key)
+        self.gsettings_previous[gs_previous] = gs_value
+
+        if gs_value:
+            gsettings.set(gs_schema, gs_key, False)
+
+        atexit.register(self.enable_powermgr)
+
+    def enable_powermgr(self):
+        gs_schema = 'org.gnome.settings-daemon.plugins.power'
+        gs_key = 'active'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        gs_value = self.gsettings_previous[gs_previous]
+
+        gsettings.set(gs_schema, gs_key, gs_value)
+
+    def disable_logout_indicator(self):
+        gs_schema = 'com.canonical.indicator.session'
+        gs_key = 'suppress-logout-menuitem'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        if gs_previous in self.gsettings_previous:
+            return
+
+        gs_value = gsettings.get(gs_schema, gs_key)
+        self.gsettings_previous[gs_previous] = gs_value
+
+        if gs_value:
+            gsettings.set(gs_schema, gs_key, True)
+
+        atexit.register(self.enable_logout_indicator)
+
+    def enable_logout_indicator(self):
+        gs_schema = 'com.canonical.indicator.session'
+        gs_key = 'suppress-logout-menuitem'
+        gs_previous = '%s/%s' % (gs_schema, gs_key)
+        gs_value = self.gsettings_previous[gs_previous]
+
+        gsettings.set(gs_schema, gs_key, gs_value)
+
+    # Disable gnome-volume-manager automounting to avoid problems during
+    # partitioning.
+    def disable_volume_manager(self):
+        volumes_visible = (
+            'org.gnome.nautilus.desktop', 'volumes-visible', False)
+        media_automount = (
+            'org.gnome.desktop.media-handling', 'automount', False)
+        media_automount_open = (
+            'org.gnome.desktop.media-handling', 'automount-open', False)
+        media_autorun_never = (
+            'org.gnome.desktop.media-handling', 'autorun-never', True)
+        for keys in (volumes_visible, media_automount, media_automount_open,
+                     media_autorun_never):
+            gs_schema = keys[0]
+            gs_key = keys[1]
+            gs_wantedvalue = keys[2]
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+            if gs_previous in self.gsettings_previous:
+                continue
+
+            gs_value = gsettings.get(gs_schema, gs_key)
+            self.gsettings_previous[gs_previous] = gs_value
+
+            if gs_value != gs_wantedvalue:
+                gsettings.set(gs_schema, gs_key, gs_wantedvalue)
+
+        self.thunar_previous = self.thunar_set_volmanrc(
+            {'AutomountDrives': 'FALSE', 'AutomountMedia': 'FALSE'})
+
+        atexit.register(self.enable_volume_manager)
+
+    def enable_volume_manager(self):
+        volumes_visible = ('org.gnome.nautilus.desktop', 'volumes-visible')
+        media_automount = ('org.gnome.desktop.media-handling', 'automount')
+        media_automount_open = (
+            'org.gnome.desktop.media-handling', 'automount-open')
+        media_autorun_never = (
+            'org.gnome.desktop.media-handling', 'autorun-never')
+        for keys in (volumes_visible, media_automount, media_automount_open,
+                     media_autorun_never):
+            gs_schema = keys[0]
+            gs_key = keys[1]
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+            gs_value = self.gsettings_previous[gs_previous]
+
+            gsettings.set(gs_schema, gs_key, gs_value)
+
+        if self.thunar_previous:
+            self.thunar_set_volmanrc(self.thunar_previous)
+
+    def a11y_profile_keys(self, window, event):
+        if osextras.find_on_path('a11y-profile-manager'):
+            hc_profile_found = False
+            sr_profile_found = False
+
+            subp = subprocess.Popen(['a11y-profile-manager',
+                                    '-l'],
+                                    stdout=subprocess.PIPE,
+                                    preexec_fn=misc.drop_all_privileges,
+                                    universal_newlines=True)
+
+            for line in subp.stdout:
+                value = line.rstrip('\n')
+                if value.endswith('high-contrast'):
+                    hc_profile_found = True
+                    self.hc_profile_name = value
+                if value.endswith('blindness'):
+                    sr_profile_found = True
+                    self.sr_profile_name = value
+
+            if (hc_profile_found is True and event.state &
+                Gdk.ModifierType.CONTROL_MASK and
+                    event.keyval == Gdk.keyval_from_name('h')):
+                self.a11y_profile_high_contrast_activate()
+            elif (sr_profile_found is True and event.state &
+                  Gdk.ModifierType.SUPER_MASK and
+                    event.state & Gdk.ModifierType.MOD1_MASK and
+                    event.keyval == Gdk.keyval_from_name('s')):
+                self.a11y_profile_screen_reader_activate()
+
+    def a11y_profile_set(self, value):
+        gsettings.set("com.canonical.a11y-profile-manager",
+                      "active-profile", value)
+
+    def a11y_profile_high_contrast_activate(self):
+        self.a11y_profile_set(self.hc_profile_name)
+
+    def a11y_profile_screen_reader_activate(self, widget=None):
+        self.a11y_profile_set(self.sr_profile_name)
+        os.environ['UBIQUITY_A11Y_PROFILE'] = 'screen-reader'
+
+    def run(self):
+        """run the interface."""
+
+        if os.getuid() != 0:
+            title = ('This installer must be run with administrative '
+                     'privileges, and cannot continue without them.')
+            dialog = Gtk.MessageDialog(
+                self.live_installer, Gtk.DialogFlags.MODAL,
+                Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, title)
+            dialog.run()
+            sys.exit(1)
+
+        self.disable_volume_manager()
+        self.disable_screensaver()
+        self.disable_powermgr()
+        self.disable_screen_reader()
+
+        if 'UBIQUITY_ONLY' in os.environ:
+            self.disable_logout_indicator()
+            if 'UBIQUITY_DEBUG' not in os.environ:
+                self.disable_terminal()
+
+        # show interface
+        self.allow_change_step(True)
+
+        # Auto-connecting signals with additional parameters does not work.
+        self.grub_new_device_entry.connect(
+            'changed', self.grub_verify_loop, self.grub_fail_okbutton)
+
+        if 'UBIQUITY_AUTOMATIC' in os.environ:
+            self.debconf_progress_start(
+                0, self.pageslen, self.get_string('ubiquity/install/checking'))
+            self.debconf_progress_cancellable(False)
+            self.refresh()
+
+        self.set_current_page(0)
+        self.live_installer.show()
+
+        while(self.pagesindex < len(self.pages)):
+            if self.current_page is None:
+                return self.returncode
+
+            page = self.pages[self.pagesindex]
+            skip = False
+            if hasattr(page.ui, 'plugin_skip_page'):
+                if page.ui.plugin_skip_page():
+                    skip = True
+            automatic = False
+            if hasattr(page.ui, 'is_automatic'):
+                automatic = page.ui.is_automatic
+
+            if not skip and not page.filter_class:
+                # This page is just a UI page
+                self.dbfilter = None
+                self.dbfilter_status = None
+                if self.set_page(page.module.NAME):
+                    self.run_main_loop()
+            elif not skip:
+                old_dbfilter = self.dbfilter
+                if issubclass(page.filter_class, Plugin):
+                    ui = page.ui
+                else:
+                    ui = None
+                self.start_debconf()
+                self.dbfilter = page.filter_class(self, ui=ui)
+
+                if self.dbfilter is not None and self.dbfilter != old_dbfilter:
+                    self.allow_change_step(False)
+                    GLib.idle_add(
+                        lambda: self.dbfilter.start(auto_process=True))
+
+                page.controller.dbfilter = self.dbfilter
+                Gtk.main()
+                self.pending_quits = max(0, self.pending_quits - 1)
+                page.controller.dbfilter = None
+
+            if self.backup or self.dbfilter_handle_status():
+                if self.current_page is not None and not self.backup:
+                    self.process_step()
+                    if not self.stay_on_page:
+                        self.pagesindex = self.pagesindex + 1
+                    if automatic:
+                        # if no debconf_progress, create another one, set
+                        # start to pageindex
+                        self.debconf_progress_step(1)
+                        self.refresh()
+                if self.backup:
+                    self.pagesindex = self.pop_history()
+
+            self.refresh()
+
+        # There's still work to do (postinstall).  Let's keep the user
+        # entertained.
+        #kylin skip button
+        if os.path.isfile("/tmp/kylin_ubiquity_config"):
+            import configparser
+            kyconfig = configparser.ConfigParser()
+            kyconfig.read("/tmp/kylin_ubiquity_config")
+            if kyconfig.has_option("info","lang"):
+                kylang = kyconfig.get("info", "lang")
+                self.progress_cancel_button.set_label(self.get_string('ubiquity/text/progress_cancel_button', lang=kylang))
+        #end kylin
+
+        self.start_slideshow()
+        Gtk.main()
+        self.pending_quits = max(0, self.pending_quits - 1)
+        # postinstall will exit here by calling Gtk.main_quit in
+        # find_next_step.
+
+        self.unlock_environment()
+        if self.oem_user_config:
+            self.quit_installer()
+        elif not (self.get_reboot_seen() or self.get_shutdown_seen()):
+            self.live_installer.hide()
+            if ('UBIQUITY_ONLY' in os.environ or
+                    'UBIQUITY_GREETER' in os.environ):
+                txt = self.get_string('ubiquity/finished_restart_only')
+                self.quit_button.hide()
+            else:
+                txt = self.finished_label.get_label()
+                txt = txt.replace('${RELEASE}', misc.get_release().name)
+            self.finished_label.set_label(txt)
+            with misc.raised_privileges():
+                with open('/var/run/reboot-required', "w"):
+                    pass
+            self.finished_dialog.set_keep_above(True)
+            self.set_busy_cursor(False)
+            self.finished_dialog.run()
+        elif self.get_reboot():
+            self.reboot()
+        elif self.get_shutdown():
+            self.shutdown()
+
+        return self.returncode
+
+    def on_context_menu(self, unused_web_view, unused_context_menu,
+                        unused_event, unused_hit_test_result):
+        # True will not show the menu
+        return True
+
+    def on_slideshow_link_clicked(self, web_view, decision, decision_type):
+        gi.require_version('WebKit2', '4.0')
+        from gi.repository import WebKit2
+        if decision_type == WebKit2.PolicyDecisionType.NEW_WINDOW_ACTION:
+            request = decision.get_request()
+            uri = request.get_uri()
+            decision.ignore()
+            subprocess.Popen(['sensible-browser', uri],
+                             close_fds=True,
+                             preexec_fn=misc.drop_all_privileges)
+            return True
+        return False
+
+    # use old slideshow, old slideshow show more well
+    def start_slideshow(self):
+        self.progress_mode.set_current_page(
+            self.progress_pages['progress_bar'])
+
+        if not self.slideshow:
+            self.page_mode.hide()
+            return
+
+        self.page_section.hide()
+
+        slideshow_locale = self.slideshow_get_available_locale(
+            self.slideshow, self.locale)
+        slideshow_main = os.path.join(self.slideshow, 'slides', 'index.html')
+
+        parameters = []
+        parameters.append('locale=%s' % slideshow_locale)
+        ltr = i18n.get_string(
+            'default-ltr', slideshow_locale, 'ubiquity/imported')
+        if ltr == 'default:RTL':
+            parameters.append('rtl')
+        parameters_encoded = '&'.join(parameters)
+
+        slides = 'file://%s#%s' % (slideshow_main, parameters_encoded)
+
+        from gi.repository import WebKit
+        # We have no significant browsing interface, so there isn't much point
+        # in WebKit creating a memory-hungry cache.
+        WebKit.set_cache_model(WebKit.CacheModel.DOCUMENT_VIEWER)
+        webview = WebKit.WebView()
+        # WebKit puts file URLs in their own domain by default.
+        # This means that anything which checks for the same origin,
+        # such as creating a XMLHttpRequest, will fail unless this
+        # is disabled.
+        # http://www.gitorious.org/webkit/webkit/commit/624b946
+        s = webview.get_settings()
+        s.set_property('enable-file-access-from-file-uris', True)
+        s.set_property('enable-default-context-menu', False)
+        if (os.environ.get('UBIQUITY_A11Y_PROFILE') == 'screen-reader'):
+            s.set_property('enable-caret-browsing', True)
+
+        webview.connect('new-window-policy-decision-requested',
+                        self.on_slideshow_link_clicked)
+
+        self.webkit_scrolled_window.add(webview)
+        webview.open(slides)
+        # TODO do these in a page loaded callback
+        self.page_mode.show()
+        self.page_mode.set_current_page(1)
+        webview.show()
+        webview.grab_focus()
+
+    def start_slideshow_webkit2(self):
+        # WebKit2 spawns a process which we don't want to run as root
+        misc.drop_privileges_save()
+        self.progress_mode.set_current_page(
+            self.progress_pages['progress_bar'])
+
+        if not self.slideshow:
+            self.page_mode.hide()
+            return
+
+        self.page_section.hide()
+
+        slideshow_locale = self.slideshow_get_available_locale(
+            self.slideshow, self.locale)
+        slideshow_main = os.path.join(self.slideshow, 'slides', 'index.html')
+
+        parameters = []
+        parameters.append('locale=%s' % slideshow_locale)
+        ltr = i18n.get_string(
+            'default-ltr', slideshow_locale, 'ubiquity/imported')
+        if ltr == 'default:RTL':
+            parameters.append('rtl')
+        parameters_encoded = '&'.join(parameters)
+
+        slides = 'file://%s#%s' % (slideshow_main, parameters_encoded)
+
+        gi.require_version('WebKit2', '4.0')
+        from gi.repository import WebKit2
+        # We have no significant browsing interface, so there isn't much point
+        # in WebKit creating a memory-hungry cache.
+        context = WebKit2.WebContext.get_default()
+        context.set_cache_model(WebKit2.CacheModel.DOCUMENT_VIEWER)
+        webview = WebKit2.WebView()
+        # WebKit puts file URLs in their own domain by default.
+        # This means that anything which checks for the same origin,
+        # such as creating a XMLHttpRequest, will fail unless this
+        # is disabled.
+        # http://www.gitorious.org/webkit/webkit/commit/624b946
+        s = webview.get_settings()
+        s.set_property('allow-file-access-from-file-urls', True)
+        webview.connect('context-menu', self.on_context_menu)
+        if (os.environ.get('UBIQUITY_A11Y_PROFILE') == 'screen-reader'):
+            s.set_property('enable-caret-browsing', True)
+
+        webview.connect('decide-policy',
+                        self.on_slideshow_link_clicked)
+
+        webview.show()
+        self.page_mode.insert_page(webview, None, 1)
+        webview.load_uri(slides)
+        # TODO do these in a page loaded callback
+        self.page_mode.show()
+        self.page_mode.set_current_page(1)
+        webview.grab_focus()
+        misc.regain_privileges_save()
+
+    def customize_installer(self):
+        """Initial UI setup."""
+
+        self.live_installer.set_icon_name('ubiquity')
+        for eventbox in ['title_eventbox', 'progress_eventbox',
+                         'install_details_expander']:
+            box = self.builder.get_object(eventbox)
+            style = box.get_style_context()
+            style.add_class('menubar')
+
+        # TODO lazy load
+        import gi
+        gi.require_version("Vte", "2.91")
+        from gi.repository import Vte, Pango
+        misc.drop_privileges_save()
+        self.vte = Vte.Terminal()
+        self.install_details_sw.add(self.vte)
+        tail_cmd = [
+            '/bin/busybox', 'tail', '-f', '/var/log/installer/debug',
+            '-f', '/var/log/syslog', '-q',
+        ]
+        self.vte.spawn_sync(0, None, tail_cmd, None, 0, None, None, None)
+        fontdesc = Pango.font_description_from_string("Ubuntu Mono 8")
+        self.vte.set_font(fontdesc)
+        self.vte.show()
+        misc.regain_privileges_save()
+        # FIXME shrink the window horizontally instead of locking the window
+        # size.
+        self.live_installer.set_resizable(False)
+
+        def expand(widget):
+            if widget.get_property('expanded'):
+                self.progress_cancel_button.show()
+            else:
+                self.progress_cancel_button.hide()
+
+        self.install_details_expander.connect_after('activate', expand)
+
+        if self.custom_title:
+            self.live_installer.set_title(self.custom_title)
+        elif self.oem_config:
+            self.live_installer.set_title(self.get_string('oem_config_title'))
+        elif self.oem_user_config:
+            self.live_installer.set_title(
+                self.get_string('oem_user_config_title'))
+            self.live_installer.set_icon_name("preferences-system")
+            self.quit.hide()
+            self.back.hide()
+
+        self.progress_section.show()
+
+        if 'UBIQUITY_AUTOMATIC' in os.environ:
+            # Hide the notebook until the first page is ready.
+            self.page_mode.hide()
+            self.progress_mode.set_current_page(
+                self.progress_pages['progress_bar'])
+            self.live_installer.show()
+        else:
+            self.progress_mode.set_current_page(
+                self.progress_pages['dot_grid'])
+            self.progress_mode.show_all()
+        self.allow_change_step(False)
+
+        # The default instantiation of GtkComboBoxEntry creates a
+        # GtkCellRenderer, so reuse it.
+        self.grub_new_device_entry.set_model(self.grub_options)
+        self.grub_new_device_entry.set_entry_text_column(0)
+        renderer = Gtk.CellRendererText()
+        self.grub_new_device_entry.pack_start(renderer, True)
+        self.grub_new_device_entry.add_attribute(renderer, 'text', 1)
+
+        # Only show the Shutdown Now button if explicitly asked to.
+        if not self.show_shutdown_button:
+            self.shutdown_button.hide()
+
+        # Parse the slideshow size early to prevent the window from growing
+        if (self.oem_user_config and
+                os.path.exists('/usr/share/oem-config-slideshow')):
+            self.slideshow = '/usr/share/oem-config-slideshow'
+        else:
+            self.slideshow = '/usr/share/ubiquity-slideshow'
+
+        if os.path.exists(self.slideshow) and not self.hide_slideshow:
+            try:
+                cfg = configparser.ConfigParser()
+                cfg.read(os.path.join(self.slideshow, 'slideshow.conf'))
+                config_width = int(cfg.get('Slideshow', 'width'))
+                config_height = int(cfg.get('Slideshow', 'height'))
+            except:
+                config_width = 752
+                config_height = 442
+            self.webkit_scrolled_window.set_size_request(
+                config_width, config_height)
+        else:
+            self.slideshow = None
+
+        # set initial bottom bar status
+        self.allow_go_backward(False)
+
+        misc.add_connection_watch(self.network_change)
+
+    def set_window_hints(self, widget):
+        if (self.oem_user_config or
+                'UBIQUITY_ONLY' in os.environ or
+                'UBIQUITY_GREETER' in os.environ):
+            f = (Gdk.WMFunction.RESIZE | Gdk.WMFunction.MAXIMIZE |
+                 Gdk.WMFunction.MOVE)
+            if not self.oem_user_config:
+                f |= Gdk.WMFunction.CLOSE
+            widget.get_window().set_functions(f)
+
+    def lockdown_environment(self):
+        atexit.register(self.unlock_environment)
+        keys = (
+            ('com.canonical.indicator.session', 'suppress-logout-menuitem'),
+            ('com.canonical.indicator.session',
+             'suppress-logout-restart-shutdown'),
+            ('com.canonical.indicator.session', 'suppress-restart-menuitem'),
+            ('com.canonical.indicator.session', 'suppress-shutdown-menuitem'),
+            ('org.gnome.desktop.lockdown', 'disable-user-switching'),
+        )
+        for key in keys:
+            gs_schema = key[0]
+            gs_key = key[1]
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+            if gs_previous in self.gsettings_previous:
+                continue
+
+            gs_value = gsettings.get(gs_schema, gs_key)
+            self.gsettings_previous[gs_previous] = gs_value
+
+            gsettings.set(gs_schema, gs_key, True)
+
+        self.quit.hide()
+        f = (Gdk.WMFunction.RESIZE | Gdk.WMFunction.MAXIMIZE |
+             Gdk.WMFunction.MOVE)
+        if 'UBIQUITY_ONLY' not in os.environ:
+            f |= Gdk.WMFunction.MINIMIZE
+        self.live_installer.get_window().set_functions(f)
+        self.allow_change_step(False)
+        self.refresh()
+
+    def unlock_environment(self):
+        syslog.syslog('Reverting lockdown of the desktop environment.')
+        keys = (
+            ('com.canonical.indicator.session', 'suppress-logout-menuitem'),
+            ('com.canonical.indicator.session',
+             'suppress-logout-restart-shutdown'),
+            ('com.canonical.indicator.session', 'suppress-restart-menuitem'),
+            ('com.canonical.indicator.session', 'suppress-shutdown-menuitem'),
+            ('org.gnome.desktop.lockdown', 'disable-user-switching'),
+        )
+        for key in keys:
+            gs_schema = key[0]
+            gs_key = key[1]
+            gs_previous = '%s/%s' % (gs_schema, gs_key)
+
+            if gs_previous in self.gsettings_previous:
+                gs_value = self.gsettings_previous[gs_previous]
+                gsettings.set(gs_schema, gs_key, gs_value)
+
+        if not self.oem_user_config:
+            self.quit.show()
+        f = Gdk.WMFunction.RESIZE | Gdk.WMFunction.MAXIMIZE | \
+            Gdk.WMFunction.MOVE | Gdk.WMFunction.CLOSE
+        if 'UBIQUITY_ONLY' not in os.environ:
+            f |= Gdk.WMFunction.MINIMIZE
+        self.refresh()
+
+    def set_locales(self):
+        """internationalization config. Use only once."""
+
+        domain = self.distro + '-installer'
+        gettext.bindtextdomain(domain, LOCALEDIR)
+        self.builder.set_translation_domain(domain)
+        gettext.textdomain(domain)
+        gettext.install(domain, LOCALEDIR)
+
+    def translate_reget(self, lang):
+        if lang is None:
+            lang = self.locale
+        if lang is None:
+            languages = []
+        else:
+            languages = [lang]
+
+        core_names = ['ubiquity/text/%s' % q for q in self.language_questions]
+        core_names.append('ubiquity/text/oem_config_title')
+        core_names.append('ubiquity/text/oem_user_config_title')
+        core_names.append('ubiquity/imported/default-ltr')
+        core_names.append('ubiquity/text/release_notes_only')
+        core_names.append('ubiquity/text/update_installer_only')
+        core_names.append('ubiquity/text/USB')
+        core_names.append('ubiquity/text/CD')
+        stock_items = (
+            'cancel', 'close', 'go-back', 'go-forward', 'ok', 'quit')
+        for stock_item in stock_items:
+            core_names.append('ubiquity/imported/%s' % stock_item)
+        prefixes = []
+        for p in self.pages:
+            prefix = p.ui.get('plugin_prefix')
+            if not prefix:
+                prefix = 'ubiquity/text'
+            if p.ui.get('plugin_is_language'):
+                children = reduce(
+                    lambda x, y: x + self.all_children(y), p.all_widgets, [])
+                core_names.extend(
+                    [prefix + '/' + c.get_name() for c in children])
+                title = p.ui.get('plugin_title')
+                if title:
+                    core_names.extend([title])
+            prefixes.append(prefix)
+        i18n.get_translations(
+            languages=languages, core_names=core_names,
+            extra_prefixes=prefixes)
+
+    # widgets is a set of (widget, prefix) pairs
+    def translate_widgets(self, lang=None, widgets=None, reget=True):
+        if lang is None:
+            lang = self.locale
+        if widgets is None:
+            widgets = [(x, None) for x in self.all_widgets]
+
+        if reget:
+            self.translate_reget(lang)
+
+        # We always translate always-visible widgets
+        for q in self.language_questions:
+            if hasattr(self, q):
+                widgets.append((getattr(self, q), None))
+
+        for widget in widgets:
+            self.translate_widget(widget[0], lang=lang, prefix=widget[1])
+
+    def translate_widget(self, widget, lang=None, prefix=None):
+        if isinstance(widget, Gtk.Button) and widget.get_use_stock():
+            widget.set_label(widget.get_label())
+
+        text = self.get_string(widget.get_name(), lang, prefix)
+        if text is None:
+            return
+        name = widget.get_name()
+
+        if isinstance(widget, Gtk.Label):
+            widget.set_markup(text)
+
+        elif isinstance(widget, Gtk.Button):
+            question = i18n.map_widget_name(prefix, widget.get_name())
+            widget.set_label(text)
+
+            # Workaround for radio button labels disappearing on second
+            # translate when not visible. LP: #353090
+            widget.realize()
+
+            if question.startswith('ubiquity/imported/'):
+                stock_id = question[18:]
+                widget.set_use_stock(False)
+                widget.set_image(Gtk.Image.new_from_stock(
+                    'gtk-%s' % stock_id, Gtk.IconSize.BUTTON))
+
+        elif isinstance(widget, Gtk.Window):
+            if name == 'live_installer':
+                if self.custom_title:
+                    text = self.custom_title
+                elif self.oem_config:
+                    text = self.get_string('oem_config_title', lang)
+                elif self.oem_user_config:
+                    text = self.get_string('oem_user_config_title', lang)
+            widget.set_title(text)
+
+        elif isinstance(widget, Gtk.MenuItem):
+            widget.set_label(text)
+
+    def set_busy_cursor(self, busy):
+        if busy:
+            cursor = self.watch
+        else:
+            cursor = None
+        if (hasattr(self, "live_installer") and
+                self.live_installer.get_parent_window()):
+            self.live_installer.get_parent_window().set_cursor(cursor)
+        set_root_cursor(cursor)
+        self.busy_cursor = busy
+
+    def allow_change_step(self, allowed):
+        self.set_busy_cursor(not allowed)
+        self.back.set_sensitive(allowed and self.allowed_go_backward)
+        self.next.set_sensitive(allowed and self.allowed_go_forward)
+        self.allowed_change_step = allowed
+
+    def allow_go_backward(self, allowed):
+        self.back.set_sensitive(allowed and self.allowed_change_step)
+        self.allowed_go_backward = allowed
+
+    def allow_go_forward(self, allowed):
+        self.next.set_sensitive(allowed and self.allowed_change_step)
+        self.allowed_go_forward = allowed
+
+    def dbfilter_handle_status(self):
+        """If a dbfilter crashed, ask the user if they want to continue anyway.
+
+        Returns True to continue, or False to try again."""
+
+        if not self.dbfilter_status or self.current_page is None:
+            return True
+
+        syslog.syslog('dbfilter_handle_status: %s' % str(self.dbfilter_status))
+
+        # TODO cjwatson 2007-04-04: i18n
+        text = ('%s failed with exit code %s. Further information may be '
+                'found in /var/log/syslog. Do you want to try running this '
+                'step again before continuing? If you do not, your '
+                'installation may fail entirely or may be broken.' %
+                (self.dbfilter_status[0], self.dbfilter_status[1]))
+        dialog = Gtk.Dialog('%s crashed' % self.dbfilter_status[0],
+                            self.live_installer, Gtk.DialogFlags.MODAL,
+                            (Gtk.STOCK_QUIT, Gtk.ResponseType.CLOSE,
+                             'Continue anyway', 1,
+                             'Try again', 2))
+        self.dbfilter_status = None
+        label = Gtk.Label(label=text)
+        label.set_line_wrap(True)
+        label.set_selectable(False)
+        dialog.get_content_area().add(label)
+        dialog.show_all()
+        response = dialog.run()
+        dialog.hide()
+        syslog.syslog('dbfilter_handle_status: response %d' % response)
+        if response == 1:
+            return True
+        elif response == Gtk.ResponseType.CLOSE:
+            self.quit_installer()
+        else:
+            step = self.step_name(self.steps.get_current_page())
+            if step == "partman":
+                print('dbfilter_handle_status stepPart')
+                self.set_current_page(self.steps.page_num(self.stepPartAuto))
+            return False
+
+    def step_name(self, step_index, return_index=False):
+        w = self.steps.get_nth_page(step_index)
+        name = None
+        index = None
+        for p in self.pages:
+            if w in p.all_widgets:
+                name = p.module.NAME
+                index = self.pages.index(p)
+        if return_index:
+            return name, index
+        return name
+
+    def page_name(self, step_index):
+        return self.steps.get_nth_page(step_index).get_name()
+
+    def toggle_next_button(self, label='gtk-go-forward'):
+        if label != 'gtk-go-forward':
+            self.next.set_label(self.get_string(label))
+        else:
+            self.next.set_label(label)
+            self.translate_widget(self.next)
+
+    def toggle_skip_button(self, label='skip'):
+        self.skip.set_label(self.get_string(label))
+        self.skip.show()
+
+    def set_page(self, n):
+        self.run_automation_error_cmd()
+        # We only stop the backup process when we're on a page where questions
+        # need to be asked, otherwise you wont be able to back up past
+        # pages that do not stop on questions or are preseeded away.
+        self.backup = False
+        visible = self.live_installer.get_property('visible')
+        self.live_installer.show()
+        # Work around a bug in the wrap_fix code whereby the layout does not
+        # get properly rendered due to the window not being visible.
+        if not visible:
+            self.live_installer.resize_children()
+        self.page_mode.show()
+        cur = None
+        is_install = False
+        if 'UBIQUITY_GREETER' in os.environ:
+            for page in self.pages:
+                if page.module.NAME == 'language':
+                    # The greeter page is quite large.  Hide it upon leaving.
+                    page.ui.page.hide()
+                    break
+        for page in self.pages:
+            if page.module.NAME == n:
+                # Now ask ui class which page we want to be showing right now
+                if hasattr(page.ui, 'plugin_get_current_page'):
+                    cur = page.ui.call('plugin_get_current_page')
+                    if isinstance(cur, str) and hasattr(self, cur):
+                        cur = getattr(self, cur)  # for not-yet-plugins
+                elif page.widgets:
+                    cur = page.widgets[0]
+                elif page.optional_widgets:
+                    cur = page.optional_widgets[0]
+                if cur:
+                    self.set_page_title(page)
+                    self.skip.set_visible(
+                        hasattr(page.ui, 'plugin_on_skip_clicked'))
+                    cur.show()
+                    is_install = page.ui.get('plugin_is_install')
+                    break
+        if not cur:
+            return False
+
+        if is_install and not self.oem_user_config:
+            self.toggle_next_button('install_button')
+        else:
+            self.toggle_next_button()
+
+        num = self.steps.page_num(cur)
+        if num < 0:
+            print('Invalid page found for %s: %s' % (n, str(cur)),
+                  file=sys.stderr)
+            return False
+
+        self.add_history(page, cur)
+        self.set_current_page(num)
+
+        if self.pagesindex == 0:
+            self.allow_go_backward(False)
+        elif self.pages[self.pagesindex - 1].module.NAME == 'partman':
+            # We're past partitioning.  Unless the install fails, there is no
+            # going back.
+            self.allow_go_backward(False)
+        elif 'UBIQUITY_AUTOMATIC' not in os.environ:
+            self.allow_go_backward(True)
+
+        # If we are in oem-config, ensure the back button is displayed if
+        # and only if we are not on the first page.
+        if self.oem_user_config:
+            self.back.set_visible(self.pagesindex > 0)
+        return True
+
+    def set_page_title(self, page, lang=None):
+        """Fetches and/or retranslates a page title"""
+        title = None
+        if page.title:
+            title = self.get_string(page.title, lang)
+            if title:
+                title = title.replace('${RELEASE}', misc.get_release().name)
+                # TODO: Use attributes instead?  Would save having to
+                # hardcode the size in here.
+                self.page_title.set_markup(
+                    '<span size="xx-large">%s</span>' % title)
+                self.title_section.show()
+        if not page.title or not title:
+            self.title_section.hide()
+
+    def set_focus(self):
+        # Make sure that something reasonable has the focus.  If the first
+        # focusable item is a label or a button (often, the welcome text label
+        # and the quit button), set the focus to the next button.
+        if not self.live_installer.get_focus():
+            self.live_installer.child_focus(Gtk.DirectionType.TAB_FORWARD)
+        focus = self.live_installer.get_focus()
+        if focus:
+            if focus.__class__ == Gtk.Label:
+                # When it got focus, the whole text was selected.
+                focus.select_region(-1, -1)
+                self.next.grab_focus()
+            elif focus.__class__ == Gtk.Button:
+                self.next.grab_focus()
+        return True
+
+    def set_current_page(self, current):
+        if self.steps.get_current_page() == current:
+            # self.steps.set_current_page() will do nothing. Update state
+            # ourselves.
+            self.on_steps_switch_page(
+                self.steps, self.steps.get_nth_page(current), current)
+        else:
+            self.steps.set_current_page(current)
+
+    # Methods
+
+    def reboot(self, *args):
+        """Reboot the system after installing."""
+        self.returncode = 10
+        self.quit_installer()
+
+    def shutdown(self, *args):
+        """Shutdown the system after installing."""
+        self.returncode = 11
+        self.quit_installer()
+
+    def do_reboot(self):
+        """Callback for main program to actually reboot the machine."""
+        try:
+            session = dbus.Bus.get_session()
+            gnome_session = session.name_has_owner('org.gnome.SessionManager')
+        except dbus.exceptions.DBusException:
+            gnome_session = False
+
+        if gnome_session:
+            manager = session.get_object('org.gnome.SessionManager',
+                                         '/org/gnome/SessionManager')
+            manager.RequestReboot()
+        else:
+            # don't let reboot race with the shutdown of X in ubiquity-dm;
+            # reboot might be too fast and X will stay around forever instead
+            # of moving to plymouth
+            misc.execute_root(
+                "sh", "-c",
+                "if ! service display-manager status; then killall Xorg; "
+                "while pidof X; do sleep 0.5; done; fi; reboot")
+
+    def do_shutdown(self):
+        """Callback for main program to actually shutdown the machine."""
+        try:
+            session = dbus.Bus.get_session()
+            gnome_session = session.name_has_owner('org.gnome.SessionManager')
+        except dbus.exceptions.DBusException:
+            gnome_session = False
+
+        if gnome_session:
+            manager = session.get_object('org.gnome.SessionManager',
+                                         '/org/gnome/SessionManager')
+            manager.RequestShutdown()
+        else:
+            # don't let poweroff race with the shutdown of X in ubiquity-dm;
+            # poweroff might be too fast and X will stay around forever instead
+            # of moving to plymouth
+            misc.execute_root(
+                "sh", "-c",
+                "if ! service display-manager status; then killall Xorg; "
+                "while pidof X; do sleep 0.5; done; fi; poweroff")
+
+    def quit_installer(self, *args):
+        """Quit installer cleanly."""
+        # Let the user know we're shutting down.
+        self.finished_dialog.get_window().set_cursor(self.watch)
+        self.set_busy_cursor(True)
+        self.quit_button.set_sensitive(False)
+        self.reboot_button.set_sensitive(False)
+        self.refresh()
+
+        # exiting from application
+        self.current_page = None
+        self.warning_dialog.hide()
+        if self.dbfilter is not None:
+            self.dbfilter.cancel_handler()
+        # kobe
+        filename = '/tmp/kylin-data.ini'
+        if os.path.isfile(filename):
+            os.remove(filename)
+        self.quit_main_loop()
+
+    # Callbacks
+
+    def on_quit_clicked(self, unused_widget):
+        self.warning_dialog.set_transient_for(
+            self.live_installer.get_toplevel())
+        self.warning_dialog.show_all()
+        # Stop processing.
+        return True
+
+    def on_quit_cancelled(self, unused_widget):
+        self.warning_dialog.hide()
+
+    def on_live_installer_delete_event(self, widget, unused_event):
+        return self.on_quit_clicked(widget)
+
+    def on_skip_clicked(self, unused_widget):
+        ui = self.pages[self.pagesindex].ui
+        if hasattr(ui, 'plugin_on_skip_clicked'):
+            ui.plugin_on_skip_clicked()
+
+    def on_next_clicked(self, unused_widget):
+        """Callback to control the installation process between steps."""
+        if not self.allowed_change_step or not self.allowed_go_forward:
+            return
+
+        self.allow_change_step(False)
+        ui = self.pages[self.pagesindex].ui
+        if hasattr(ui, 'plugin_on_next_clicked'):
+            if ui.plugin_on_next_clicked():
+                # Stop processing and return to the page.
+                self.allow_change_step(True)
+                return
+
+        if self.dbfilter is not None:
+            self.dbfilter.ok_handler()
+            # expect recursive main loops to be exited and
+            # debconffilter_done() to be called when the filter exits
+        else:
+            self.find_next_step(self.pages[self.pagesindex].module.__name__)
+            self.quit_main_loop()
+
+    def process_step(self):
+        """Process and validate the results of this step."""
+        # setting actual step
+        step_num = self.steps.get_current_page()
+        step = self.page_name(step_num)
+        syslog.syslog('Step_before = %s' % step)
+
+    def on_back_clicked(self, unused_widget):
+        """Callback to set previous screen."""
+        if not self.allowed_change_step:
+            return
+
+        self.allow_change_step(False)
+        ui = self.pages[self.pagesindex].ui
+        if hasattr(ui, 'plugin_on_back_clicked'):
+            if ui.plugin_on_back_clicked():
+                # Stop processing and return to the page.
+                self.allow_change_step(True)
+                return
+
+        self.backup = True
+        self.stay_on_page = False
+
+        # Enabling next button
+        self.allow_go_forward(True)
+
+        if self.dbfilter is not None:
+            self.dbfilter.cancel_handler()
+            # expect recursive main loops to be exited and
+            # debconffilter_done() to be called when the filter exits
+        else:
+            self.find_next_step(self.pages[self.pagesindex].module.__name__)
+            self.quit_main_loop()
+
+    def on_steps_switch_page(self, unused_notebook, unused_page, current):
+        self.current_page = current
+        name, index = self.step_name(current, return_index=True)
+        if 'UBIQUITY_GREETER' in os.environ:
+            if name == 'language':
+                self.navigation_control.hide()
+            else:
+                self.navigation_control.show()
+        for i in range(len(self.pages))[:index + 1]:
+            self.dot_grid.get_child_at(i, 0).set_fraction(1)
+        for i in range(len(self.pages))[index + 1:]:
+            self.dot_grid.get_child_at(i, 0).set_fraction(0)
+
+        syslog.syslog('switched to page %s' % name)
+
+    # Callbacks provided to components.
+
+    def watch_debconf_fd(self, from_debconf, process_input):
+        GLib.io_add_watch(from_debconf,
+                          GLib.IO_IN | GLib.IO_ERR | GLib.IO_HUP,
+                          self.watch_debconf_fd_helper, process_input)
+
+    def watch_debconf_fd_helper(self, source, cb_condition, callback):
+        debconf_condition = 0
+        if (cb_condition & GLib.IO_IN) != 0:
+            debconf_condition |= filteredcommand.DEBCONF_IO_IN
+        if (cb_condition & GLib.IO_ERR) != 0:
+            debconf_condition |= filteredcommand.DEBCONF_IO_ERR
+        if (cb_condition & GLib.IO_HUP) != 0:
+            debconf_condition |= filteredcommand.DEBCONF_IO_HUP
+
+        return callback(source, debconf_condition)
+
+    def debconf_progress_start(self, progress_min, progress_max,
+                               progress_title):
+        self.progress_position.start(progress_min, progress_max,
+                                     progress_title)
+        self.debconf_progress_set(0)
+        self.debconf_progress_info(progress_title)
+
+    def debconf_progress_set(self, progress_val):
+        if self.progress_cancelled:
+            return False
+        self.progress_position.set(progress_val)
+        fraction = self.progress_position.fraction()
+        self.install_progress.set_fraction(fraction)
+        return True
+
+    def debconf_progress_step(self, progress_inc):
+        if self.progress_cancelled:
+            return False
+        self.progress_position.step(progress_inc)
+        fraction = self.progress_position.fraction()
+        self.install_progress.set_fraction(fraction)
+        return True
+
+    def debconf_progress_info(self, progress_info):
+        if self.progress_cancelled:
+            return False
+        self.install_progress_text.set_label(progress_info)
+        return True
+
+    def debconf_progress_stop(self):
+        self.progress_cancelled = False
+        self.progress_position.stop()
+
+    def debconf_progress_region(self, region_start, region_end):
+        self.progress_position.set_region(region_start, region_end)
+
+    def debconf_progress_cancellable(self, cancellable):
+        if cancellable:
+            self.progress_cancel_button.set_sensitive(True)
+        else:
+            self.progress_cancel_button.set_sensitive(False)
+            self.progress_cancelled = False
+
+    def on_progress_cancel_button_clicked(self, unused_button):
+        self.progress_cancelled = True
+
+    def debconffilter_done(self, dbfilter):
+        if not dbfilter.status:
+            self.find_next_step(dbfilter.__module__)
+        # TODO: This doesn't handle partman-commit failures.
+        elif dbfilter.__module__ in ('ubiquity.components.install',
+                                     'ubiquity.components.plugininstall'):
+            # We don't want to try to retry a failing step here, because it
+            # will have the same set of inputs, and thus likely the same
+            # result.
+            # TODO: We may want to call return_to_partitioning after the crash
+            # dialog instead.
+            self.crash_dialog.run()
+            self.crash_dialog.hide()
+            self.live_installer.hide()
+            self.refresh()
+            misc.execute_root("apport-bug", "ubiquity")
+            sys.exit(1)
+        if BaseFrontend.debconffilter_done(self, dbfilter):
+            self.quit_main_loop()
+            return True
+        else:
+            return False
+
+    def switch_to_install_interface(self):
+        self.installing = True
+        self.lockdown_environment()
+
+    def find_next_step(self, finished_step):
+        # TODO need to handle the case where debconffilters launched from
+        # here crash.  Factor code out of dbfilter_handle_status.
+        last_page = self.pages[-1].module.__name__
+        if finished_step == last_page and not self.backup:
+            self.finished_pages = True
+            if self.finished_installing or self.oem_user_config:
+                self.debconf_progress_info('')
+                # thaw container size
+                self.progress_section.set_size_request(-1, -1)
+                self.install_details_expander.show()
+                self.install_progress.show()
+                self.progress_section.show()
+                dbfilter = plugininstall.Install(self)
+                dbfilter.start(auto_process=True)
+
+        elif finished_step == 'ubi-partman':
+            # Flush changes to the database so that when the parallel db
+            # starts, it does so with the most recent changes.
+            self.stop_debconf()
+            self.start_debconf()
+            options = misc.grub_options()
+            self.grub_options.clear()
+            for opt in options:
+                self.grub_options.append(opt)
+            self.switch_to_install_interface()
+            from ubiquity.debconfcommunicator import DebconfCommunicator
+            if self.parallel_db is not None:
+                # Partitioning failed and we're coming back through again.
+                self.parallel_db.shutdown()
+            env = os.environ.copy()
+            # debconf-apt-progress, start_debconf()
+            env['DEBCONF_DB_REPLACE'] = 'configdb'
+            env['DEBCONF_DB_OVERRIDE'] = 'Pipe{infd:none outfd:none}'
+            self.parallel_db = DebconfCommunicator('ubiquity', cloexec=True,
+                                                   env=env)
+            dbfilter = partman_commit.PartmanCommit(self, db=self.parallel_db)
+            dbfilter.start(auto_process=True)
+
+        # FIXME OH DEAR LORD.  Use isinstance.
+        elif finished_step == 'ubiquity.components.partman_commit':
+            dbfilter = install.Install(self, db=self.parallel_db)
+            dbfilter.start(auto_process=True)
+
+        elif finished_step == 'ubiquity.components.install':
+            self.finished_installing = True
+            if self.finished_pages:
+                dbfilter = plugininstall.Install(self)
+                dbfilter.start(auto_process=True)
+            else:
+                # temporarily freeze container size
+                allocation = self.progress_section.get_allocation()
+                self.progress_section.set_size_request(
+                    allocation.width, allocation.height)
+                self.install_details_expander.hide()
+                self.install_progress.hide()
+
+        elif finished_step == 'ubiquity.components.plugininstall':
+            self.installing = False
+            self.run_success_cmd()
+            self.quit_main_loop()
+
+    def grub_verify_loop(self, widget, okbutton):
+        if widget is not None:
+            if validation.check_grub_device(widget.get_child().get_text()):
+                okbutton.set_sensitive(True)
+            else:
+                okbutton.set_sensitive(False)
+
+    def return_to_partitioning(self):
+        """If the install progress bar is up but still at the partitioning
+        stage, then errors can safely return us to partitioning.
+        """
+
+        self.page_section.show()
+        if self.installing and not self.installing_no_return:
+            # Stop the currently displayed page.
+            if self.dbfilter is not None:
+                self.dbfilter.cancel_handler()
+            # Go back to the partitioner and try again.
+            self.pagesindex = -1
+            for page in self.pages:
+                if page.module.NAME == 'partman':
+                    self.pagesindex = self.pages.index(page)
+                    break
+            if self.pagesindex == -1:
+                return
+
+            self.start_debconf()
+            ui = self.pages[self.pagesindex].ui
+            self.dbfilter = self.pages[self.pagesindex].filter_class(
+                self, ui=ui)
+            self.allow_change_step(False)
+            self.dbfilter.start(auto_process=True)
+            self.toggle_next_button()
+            self.translate_widget(self.next)
+            self.installing = False
+            self.progress_section.hide()
+            self.unlock_environment()
+
+    def error_dialog(self, title, msg, fatal=True):
+        # TODO: cancel button as well if capb backup
+        self.run_automation_error_cmd()
+        saved_busy_cursor = self.busy_cursor
+        self.set_busy_cursor(False)
+        if not msg:
+            msg = title
+        dialog = Gtk.MessageDialog(
+            self.live_installer, Gtk.DialogFlags.MODAL,
+            Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, msg)
+        dialog.set_title(title)
+        dialog.run()
+        self.set_busy_cursor(saved_busy_cursor)
+        dialog.hide()
+        if fatal:
+            self.return_to_partitioning()
+
+    def toggle_grub_fail(self, unused_widget):
+        if self.grub_no_new_device.get_active():
+            self.no_grub_warn.show()
+            self.grub_new_device_entry.set_sensitive(False)
+            self.abort_warn.hide()
+        elif self.grub_fail_option.get_active():
+            self.abort_warn.show()
+            self.no_grub_warn.hide()
+            self.grub_new_device_entry.set_sensitive(False)
+        else:
+            self.abort_warn.hide()
+            self.no_grub_warn.hide()
+            self.grub_new_device_entry.set_sensitive(True)
+
+    def bootloader_dialog(self, current_device):
+        l = self.skip_label.get_label()
+        l = l.replace('${RELEASE}', misc.get_release().name)
+        self.skip_label.set_label(l)
+        self.grub_new_device_entry.get_child().set_text(current_device)
+        self.grub_new_device_entry.get_child().grab_focus()
+        response = self.bootloader_fail_dialog.run()
+        self.bootloader_fail_dialog.hide()
+        if response == Gtk.ResponseType.OK:
+            if self.grub_new_device.get_active():
+                return self.grub_new_device_entry.get_child().get_text()
+            elif self.grub_no_new_device.get_active():
+                return 'skip'
+            else:
+                return ''
+        else:
+            return ''
+
+    def question_dialog(self, title, msg, options, use_templates=True):
+        self.run_automation_error_cmd()
+        saved_busy_cursor = self.busy_cursor
+        self.set_busy_cursor(False)
+        if not msg:
+            msg = title
+        buttons = []
+        for option in options:
+            if use_templates:
+                text = self.get_string(option)
+            else:
+                text = option
+            if text is None:
+                text = option
+            buttons.append((text, len(buttons) + 1))
+
+        self.ubi_question_dialog.set_title(title)
+        self.question_label.set_text(msg)
+        actions = self.ubi_question_dialog.get_action_area()
+        for action in actions.get_children():
+            actions.remove(action)
+        for text, response_id in buttons:
+            self.ubi_question_dialog.add_button(text, response_id)
+        self.ubi_question_dialog.show_all()
+        response = self.ubi_question_dialog.run()
+        self.set_busy_cursor(saved_busy_cursor)
+        self.ubi_question_dialog.hide()
+        if response < 0:
+            # something other than a button press, probably destroyed
+            return None
+        else:
+            return options[response - 1]
+
+    def refresh(self):
+        gtkwidgets.refresh()
+
+    def run_main_loop(self):
+        """Run the UI's main loop until it returns control to us."""
+        self.allow_change_step(True)
+        self.set_focus()
+        Gtk.main()
+        self.pending_quits = max(0, self.pending_quits - 1)
+
+    pending_quits = 0
+
+    def quit_main_loop(self):
+        """Return control to the next level up."""
+        # We quit in an idle function, because successive calls to
+        # main_quit will do nothing if the main loop hasn't had time to
+        # quit.  So we stagger calls to make sure that if this function
+        # is called multiple times (nested loops), it works as expected.
+        def idle_quit():
+            if self.pending_quits > 1:
+                quit_quit()
+            if Gtk.main_level() > 0:
+                Gtk.main_quit()
+            else:
+                self.pending_quits = max(0, self.pending_quits - 1)
+            return False
+
+        def quit_quit():
+            # Wait until we're actually out of this main loop
+            GLib.idle_add(idle_quit)
+            return False
+
+        if self.pending_quits == 0:
+            quit_quit()
+        self.pending_quits += 1
+
+# vim:ai:et:sts=4:tw=80:sw=4:

BIN
ubiquity-frontend-gtk/usr/lib/ubiquity/wallpaper


BIN
ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.a


+ 1 - 0
ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so

@@ -0,0 +1 @@
+libubimockresolver.so.0.0.0

+ 1 - 0
ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so.0

@@ -0,0 +1 @@
+libubimockresolver.so.0.0.0

BIN
ubiquity-frontend-gtk/usr/lib/x86_64-linux-gnu/libubimockresolver.so.0.0.0


+ 133 - 0
ubiquity-frontend-gtk/usr/share/applications/ubiquity.desktop

@@ -0,0 +1,133 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+# Do not translate the word "RELEASE".  It is used as a marker by casper.
+Name=Install RELEASE
+Name[am]=የተለቀቀውን መግጠሚያ
+Name[ar]=ثبّت RELEASE
+Name[ast]=Instalar RELEASE
+Name[be]=Усталяваць RELEASE
+Name[bg]=Инсталиране RELEASE
+Name[bn]=RELEASE ইনস্টল করুন
+Name[bs]=Instaliraj izdanje
+Name[ca]=Instal·la la versió RELEASE
+Name[cs]=Nainstalovat RELEASE
+Name[da]=Installér RELEASE
+Name[de]=RELEASE installieren
+Name[el]=Εγκατάσταση RELEASE
+Name[eo]=Instali RELEASE
+Name[es]=Instalar RELEASE
+Name[et]=Paigalda RELEASE
+Name[eu]=Instalatu RELEASE
+Name[fi]=Asenna RELEASE
+Name[fr]=Installer RELEASE
+Name[ga]=Suiteáil RELEASE
+Name[gl]=Instalar RELEASE
+Name[gu]=રિલીઝ નું સ્થાપન કરો.
+Name[he]=התקנת RELEASE
+Name[hi]=RELEASE को संस्थापित करें।
+Name[hr]=Instaliraj RELEASE
+Name[hu]=RELEASE telepítése
+Name[id]=Pasang RELEASE
+Name[it]=Installa RELEASE
+Name[ja]=RELEASE のインストール
+Name[ka]=RELEASE-ის დაყენება
+Name[kk]=РЕЛИЗДІ орнату
+Name[km]=ដំឡើង RELEASE
+Name[ko]=RELEASE 설치
+Name[ku]=RELEASE saz bike
+Name[lt]=Įdiegti RELEASE į kompiuterį
+Name[lv]=Instalēt RELEASE
+Name[mk]=Инсталирај RELEASE
+Name[ml]=RELEASE സജ്ജമാക്കുക
+Name[mr]=स्थापित RELEASE
+Name[ne]=RELEASE लाई स्थापन गर्नुहोस्
+Name[nl]=RELEASE installeren
+Name[pa]=RELEASE ਇੰਸਟਾਲ ਕਰੋ
+Name[pl]=Zainstaluj RELEASE
+Name[pt]=Instalar RELEASE
+Name[pt_BR]=Instalar o RELEASE
+Name[ro]=Instalare RELEASE
+Name[ru]=Установить RELEASE
+Name[sk]=Inštalovať RELEASE
+Name[sl]=Namesti RELEASE
+Name[sq]=Instalo RELEASE
+Name[sr]=Инсталирајте RELEASE
+Name[sv]=Installera RELEASE
+Name[ta]=RELEASE ஐ நிறுவு
+Name[th]=ติดตั้ง RELEASE
+Name[tl]=Iluklok ang RELEASE
+Name[tr]=RELEASE Kurulumu
+Name[uk]=Встановити RELEASE
+Name[vi]=Cài đặt RELEASE
+Name[zh_CN]=安装 RELEASE
+Name[zh_TW]=安裝 RELEASE
+Comment=Install this system permanently to your hard disk
+Comment[am]=ይኼን ሲስተም ሀርድ ዲስክዎ ላይ በቋሚነት ይጫኑት
+Comment[ar]=ثبّت هذا النظام على القرص الصلب
+Comment[ast]=Instalar permanentemente esti sistema nel to discu duru
+Comment[be]=Усталяваць гэтую сістэму на ваш цвёрды дыск
+Comment[bg]=Инсталиране Ubuntu трайно на твърдия диск
+Comment[bn]=এই সিস্টেমটি আপনার হার্ডডিস্কে স্থায়ীভাবে ইনস্টল করুন।
+Comment[bs]=Instaliraj ovaj sistem trajno na tvrdi disk
+Comment[ca]=Instal·la aquest sistema permanentment al disc dur
+Comment[cs]=Nainstalovat tento systém natrvalo na váš disk
+Comment[da]=Installér dette system permanent på din harddisk
+Comment[de]=Dieses System dauerhaft auf der Festplatte installieren
+Comment[el]=Εγκαταστήστε μόνιμα αυτό το σύστημα στο σκληρό σας δίσκο
+Comment[eo]=Instali ĉi tiun sistemon daŭre en via disko
+Comment[es]=Instalar permanentemente este sistema en su disco duro
+Comment[et]=Paigalda see süsteem jäädavalt oma kõvakettale
+Comment[eu]=Sistema hau betiko instalatu disko gogorrean
+Comment[fi]=Asenna tämä järjestelmä pysyvästi kiintolevyllesi
+Comment[fr]=Installer ce système de façon permanente sur votre disque dur
+Comment[ga]=Suiteáil an córas seo go buan ar do chruadhiosca
+Comment[gl]=Instalar o sistema de xeito permanente no disco ríxido
+Comment[gu]=આ સિસ્ટમ તમારી હાર્ડ ડિસ્ક પર હંમેશ માટે સ્થાપિત કરો
+Comment[he]=התקנת המערכת באופן קבוע על הכונן הקשיח
+Comment[hi]=इस तंत्र को आपके हार्ड डिस्क में स्थायी रूप से संस्थापित करें
+Comment[hr]=Trajno instaliraj sustav na čvrsti disk
+Comment[hu]=A rendszer telepítése merevlemezre
+Comment[id]=Memasang sistem ini secara permanen pada diska Anda
+Comment[it]=Installa questo sistema in modo permanente sul disco rigido
+Comment[ja]=このシステムをハードディスクにインストールします
+Comment[ka]=მოცემული სისტემის მყარ დისკზე ჩაყენება
+Comment[kk]=Жүйені қатқыл дискіңізге тұрақты орнату
+Comment[km]=ដំឡើង​ប្រព័ន្ធ​នេះ​ជា​អចិន្ត្រៃយ៍​ទៅ​កាន់​ថាស​រឹង​របស់​អ្នក
+Comment[ko]=이 시스템을 하드 디스크에 설치합니다.
+Comment[ku]=Sîstemê di hard dîskê xwe de saz bike
+Comment[lt]=Įdiegti Linux operacinę sistemą į kompiuterio (standųjį) diską
+Comment[lv]=Instalēt šo sistēmu cietajā diskā
+Comment[mk]=Инсталирајте го системот трајно на Вашиот тврд диск
+Comment[ml]=സ്ഥിരമായി ഹാര്‍ഡ് ഡിസ്കിലേക്ക് ഇന്‍സ്റ്റാള്‍ ചെയ്യുക
+Comment[mr]=ही प्रणाली कायमची तुमच्या हार्ड डिस्कवर स्थापित करा
+Comment[ne]=यो प्रणाली तपाईको हार्ड डिस्कमा थाई रुपमा प्रतिस्थापन गर्नुहोस्
+Comment[nl]=Dit systeem definitief op uw harde schijf installeren
+Comment[pa]=ਇਹ ਸਿਸਟਮ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਆਪਣੀ ਹਾਰਡ ਡਿਸਕ ਉੱਤੇ ਇੰਸਟਾਲ ਕਰੋ
+Comment[pl]=Zainstaluj system na dysku twardym
+Comment[pt]=Instalar este sistema permanentemente no seu disco rígido
+Comment[pt_BR]=Instalar este sistema de maneira permanente no seu disco rígido
+Comment[ro]=Instalați permanent acest sistem pe discul calculatorului
+Comment[ru]=Установить эту систему на жёсткий диск
+Comment[sk]=Nainštalovať systém natrvalo na pevný disk
+Comment[sl]=Trajno namesti sistem na trdi disk
+Comment[sq]=Instalo këtë sistem përgjithmonë në Hard Disk
+Comment[sr]=Инсталирајте овај систем трајно на ваш чврсти диск
+Comment[sv]=Installera detta system permanent på din hårddisk
+Comment[ta]=இந்த கணினியை நிறந்திரமாக தங்களுடைய கணினியில் நிறுவுக
+Comment[th]=ติดตั้งระบบนี้อย่างถาวรลงบนฮาร์ดดิสก์ของคุณ
+Comment[tl]=Iluklok ng permanente ang systema sa iyong hard disk
+Comment[tr]=Bu sistemi sabit diskinize kalıcı olarak kurun
+Comment[uk]=Встановити цю систему на жорсткий диск
+Comment[vi]=Cài hệ thống vào đĩa cứng
+Comment[zh_CN]=将这个系统永久安装在您的硬盘上
+Comment[zh_TW]=將此系統安裝到您的硬碟中
+Keywords=ubiquity;
+#use sh because pkexec is broken under xfce/lxce http://pad.lv/1193526
+Exec=sh -c 'ubiquity gtk_ui'
+Icon=ubiquity
+Terminal=false
+Categories=GTK;System;Settings;
+NotShowIn=KDE;
+#X-Ubuntu-Gettext-Domain=ubiquity-desktop
+X-Ayatana-Appmenu-Show-Stubs=False

BIN
ubiquity-frontend-gtk/usr/share/doc/ubiquity-frontend-gtk/changelog.Debian.gz


+ 64 - 0
ubiquity-frontend-gtk/usr/share/doc/ubiquity-frontend-gtk/copyright

@@ -0,0 +1,64 @@
+Ubiquity was formerly known as "Espresso", and originally as "Ubuntu
+Express", which is written and maintained by Javier Carranza
+<javier.carranza@interactors.coop> and Juanje Ojeda Croissier
+<juanje@interactors.coop>. This version draws on the work done on Ubuntu
+Express, but was renamed to avoid confusion, to reduce awkward branding
+considerations, and because Ubiquity concentrates on reusing
+debian-installer code and reducing duplicated translation and branding work
+as much as possible. Ubiquity has now substantially diverged from Ubuntu
+Express and is an independent project.
+
+The original Guadalinex source can be found at:
+	http://ws314.juntadeandalucia.es/guadalinex2005/live_installer/
+
+and Ubiquity is developed at:
+	http://bazaar.launchpad.net/~ubuntu-installer/ubiquity/trunk/
+
+Copyright (C) 2005  Javier Carranza
+Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010  Canonical Ltd.
+
+Ubiquity has been adapted for usage by the Mythbuntu
+team for the purposes of a Ubuntu derivative focused
+upon setting up a standalone MythTV box.
+
+Portions copyright (C) 2007 Mario Limonciello
+
+oem-config was written by Colin Watson <cjwatson@ubuntu.com>.
+It is:
+  Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd.
+  Copyright (C) 2006, 2007 Anirudh Ramesh
+
+Some code in oem-config is borrowed from base-config, whose copyright
+declaration is as follows:
+
+  This package is copyright 2000-2004 by Joey Hess <joeyh@debian.org>.
+  Portions are also copyright by Bruce Perens <bruce@hams.com>, Enrique
+  Zanardi <ezanard@debian.org>, Sven Rudolph, Luis Francisco Gonzalez
+  <luisgh@debian.org>, Ben Collins <bcollins@debian.org>, Matt Kraai
+  <kraai@debian.org>, Petter Reinholdtsen <pere@debian.org>, VA Linux
+  Systems, and Software in the Public Interest.
+
+License:
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+ubiquity-kde.png icon copyright 2007 David Vignoni.
+License: LGPL 3, see /usr/share/common-licenses/LGPL
+
+ubiquity.svg icon copyright 2010 K.Vishnoo Charan Reddy GPL-2+

+ 53 - 0
ubiquity-frontend-gtk/usr/share/gir-1.0/UbiquityMockResolver-1.0.gir

@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!-- This file was automatically generated from C sources - DO NOT EDIT!
+To affect the contents of this file, edit the original C definitions,
+and/or use gtk-doc annotations.  -->
+<repository version="1.2"
+            xmlns="http://www.gtk.org/introspection/core/1.0"
+            xmlns:c="http://www.gtk.org/introspection/c/1.0"
+            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+  <include name="Gio" version="2.0"/>
+  <namespace name="UbiquityMockResolver"
+             version="1.0"
+             shared-library="libubimockresolver.so.0"
+             c:identifier-prefixes="Ubiquity"
+             c:symbol-prefixes="ubiquity">
+    <class name="MockResolver"
+           c:symbol-prefix="mock_resolver"
+           c:type="UbiquityMockResolver"
+           parent="Gio.Resolver"
+           glib:type-name="UbiquityMockResolver"
+           glib:get-type="ubiquity_mock_resolver_get_type"
+           glib:type-struct="MockResolverClass">
+      <constructor name="new" c:identifier="ubiquity_mock_resolver_new">
+        <return-value transfer-ownership="full">
+          <type name="MockResolver" c:type="UbiquityMockResolver*"/>
+        </return-value>
+      </constructor>
+      <property name="hostname"
+                readable="0"
+                writable="1"
+                transfer-ownership="none">
+        <type name="utf8" c:type="gchar*"/>
+      </property>
+      <field name="parent">
+        <type name="Gio.Resolver" c:type="GResolver"/>
+      </field>
+      <field name="priv">
+        <type name="MockResolverPrivate"
+              c:type="UbiquityMockResolverPrivate*"/>
+      </field>
+    </class>
+    <record name="MockResolverClass"
+            c:type="UbiquityMockResolverClass"
+            glib:is-gtype-struct-for="MockResolver">
+      <field name="parent_class">
+        <type name="Gio.ResolverClass" c:type="GResolverClass"/>
+      </field>
+    </record>
+    <record name="MockResolverPrivate"
+            c:type="UbiquityMockResolverPrivate"
+            disguised="1">
+    </record>
+  </namespace>
+</repository>

+ 9 - 0
ubiquity-frontend-gtk/usr/share/gnome-shell/modes/ubiquity.json

@@ -0,0 +1,9 @@
+{
+    "hasWindows": true,
+    "components": ["polkitAgent", "networkAgent"],
+    "panel": { "left": [],
+               "center": ["dateMenu"],
+               "right": ["a11yGreeter", "keyboard", "aggregateMenu"]
+    }
+}
+

+ 184 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/16x16/apps/ubiquity.svg

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg3297" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 16 16" version="1.1" y="0px" x="0px" enable-background="new 0 0 16 16">
+<linearGradient id="rect2992_1_" y2="1924.4" gradientUnits="userSpaceOnUse" x2="2118.2" gradientTransform="matrix(.1242 0 0 .1864 -255.08 -343.25)" y1="1908" x1="2118.2">
+	<stop style="stop-color:#7A7A7A" offset="0"/>
+	<stop style="stop-color:#474747" offset="1"/>
+</linearGradient>
+<path id="rect2992" stroke-linejoin="round" d="m15.5 12.5c-0.3 2.5-0.2 3-0.8 3h-13.5c-0.6 0-0.4 0-0.8-3 4.9 0.1 10.1-0.4 15.1 0z" stroke="#353537" fill="url(#rect2992_1_)"/>
+<linearGradient id="rect9146_1_" y2="782.24" gradientUnits="userSpaceOnUse" x2="258.85" gradientTransform="matrix(.5546 0 0 .3595 -131.55 -267.21)" y1="782.24" x1="241.22">
+	<stop offset="0"/>
+	<stop style="stop-color:#bbb;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="rect9146" d="m2 13h10v2h-9.8l-0.2-2z" fill="url(#rect9146_1_)"/>
+<linearGradient id="path9148_1_" y2="780.58" gradientUnits="userSpaceOnUse" x2="248.32" gradientTransform="matrix(.5546 0 0 .3595 -131.99 -266.74)" y1="784.02" x1="248.38">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path9148" opacity=".8114" d="m2.2 15l-0.2-1.4c1 1.1 4.8 1.4 7.3 1.4h-7.1z" enable-background="new    " fill="url(#path9148_1_)"/>
+<radialGradient id="rect2990_1_" gradientUnits="userSpaceOnUse" cy="-304.09" cx="27.188" gradientTransform="matrix(1.1767 1.0377 -.7693 .8723 -261.73 240.15)" r="8">
+	<stop style="stop-color:#E6E6E6" offset="0"/>
+	<stop style="stop-color:#C8C8C8" offset="1"/>
+</radialGradient>
+<linearGradient id="rect2990_2_" y2="-434.3" gradientUnits="userSpaceOnUse" x2="-230" gradientTransform="matrix(1 0 0 -1 0 18)" y1="-429.84" x1="-227.61">
+	<stop style="stop-color:#969696" offset="0"/>
+	<stop style="stop-color:#B4B4B4" offset="1"/>
+</linearGradient>
+<path id="rect2990" stroke-linejoin="round" d="m1.5 1.5l-1 11v0h15v0l-1-11.2s-0.2-0.7-0.9-0.7h-11.3c-0.7-0.1-0.8 0.9-0.8 0.9v0z" stroke="url(#rect2990_2_)" stroke-linecap="round" fill="url(#rect2990_1_)"/>
+<path id="path2215" opacity=".7" stroke-linejoin="round" d="m1.5 12.5h13" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+<radialGradient id="path8117_1_" gradientUnits="userSpaceOnUse" cy="3228.7" cx="2118.7" gradientTransform="matrix(.1271 -0.0021 .00094059 .1225 -264.39 -380.49)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8117" d="m9.9 1c-0.4 0-0.6 0.2-0.6 0.4-1.8 2.9-5.6 1.9-7.1 5.3-0.1 0.9 0.1 2 0.9 2.7 1.1 1 3 1.7 5.1 1.6 4.2-0.1 7.8-2.8 4.7-6.3 0-0.2-0.3-3.2-0.3-3.2 0-0.2-0.3-0.4-0.6-0.4h-2.1zm-0.1 0.5h2.1c0.1 0 0.2 0 0.2 0.1l-0.4 3.1c3.5 2.8 0.3 5.1-3.4 5.2-3.4 0.1-5.3-1.1-5.1-3.1 1.2-3.4 5.7-1.8 6.5-5.3h0.1z" fill="url(#path8117_1_)"/>
+<radialGradient id="path9400_1_" gradientUnits="userSpaceOnUse" cy="-6571.1" cx="4579.6" gradientTransform="matrix(0.0617 0 0 -0.0654 -274.59 -424.59)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9400" d="m8 9c-0.7 0-1.4-0.2-1.8-0.8-0.3-0.5-0.3-1.2 0.1-1.6 0.5-0.5 1.3-0.6 2-0.6 0.6 0.1 1.2 0.3 1.6 0.9 0.3 0.4 0.2 1-0.1 1.4-0.5 0.5-1.2 0.7-1.8 0.7zm0-2.1c-0.5 0-1 0-1.4 0.2-0.2 0.3-0.2 0.7-0.1 0.9 0.3 0.4 0.7 0.6 1.2 0.6 0.6 0.1 1.2-0.1 1.6-0.5 0.2-0.2 0.4-0.7 0.1-1-0.2-0.1-0.6-0.1-0.9-0.1-0.1-0.1-0.3-0.1-0.5-0.1z" fill="url(#path9400_1_)"/>
+<g id="g9436" transform="matrix(-.046858 0 0 .077502 4.3055 -2.9911)">
+	<path id="path9438" d="m37.9 187.2c0.3 3.5 5 6.3 10.5 6.3s9.6-2.8 9.3-6.3c-0.4-3.4-5.1-6.2-10.5-6.2-5.4-0.1-9.6 2.7-9.3 6.2z" fill="#535353"/>
+</g>
+<g id="g9496" transform="matrix(-.046858 0 0 .077502 16.206 -2.9911)">
+	<path id="path9498" d="m37.9 187.2c0.3 3.5 5 6.3 10.5 6.3s9.6-2.8 9.3-6.3c-0.4-3.4-5.1-6.2-10.5-6.2-5.4-0.1-9.6 2.7-9.3 6.2z" fill="#535353"/>
+</g>
+<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="2541.3" cx="607.07" gradientTransform="matrix(.3333 0 0 .1429 -194.35 -349.05)" r="20.998">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<rect id="rect6300-3" opacity=".2" height="2" width="14" y="13" x="1" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+<radialGradient id="path8125_1_" gradientUnits="userSpaceOnUse" cy="12836" cx="5748.9" gradientTransform="matrix(0.0418 -0.0139 0.0034 0.038 -278.49 -404.74)" r="78.727">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".2503"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8125" d="m3.5 1.3c0 0.2 0 0.4-0.1 0.6 0 0.5-0.2 1.1-0.3 1.7-0.1 0.4 0.3 0.2 0.3 0.3 0.5-0.2 1-0.4 1.4-0.6l1.5-0.6c0.4-0.2 0.5-0.4 0.6-0.7 0-0.2 0.1-0.5-0.1-0.7-0.1-0.2-0.3-0.2-0.4-0.2h-2.6l-0.3 0.2zm0.6 0.4h1.8c0.2 0.1 0.1 0.2-0.1 0.3-0.6 0.2-1.2 0.4-1.8 0.7-0.1 0-0.1-0.2-0.1-0.3 0.1-0.2 0.1-0.4 0.1-0.6 0.1 0 0.1-0.1 0.1-0.1z" fill="url(#path8125_1_)"/>
+<radialGradient id="path9156_1_" gradientUnits="userSpaceOnUse" cy="-7524.5" cx="4684.8" gradientTransform="matrix(0.0603 0 0 -0.0568 -274.78 -422.48)" r="78.729">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6718"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9156" d="m8 8.7c-1.1 0-1.9-0.6-2-1.3 0-0.3 0.1-0.5 0.3-0.7 0.4-0.4 1-0.6 1.6-0.6s1.3 0.2 1.6 0.6c0.4 0.2 0.5 0.5 0.5 0.8-0.1 0.7-0.9 1.2-2 1.2zm0-1.8c-1 0-1.6 0.1-1.6 0.6s0.7 0.9 1.5 0.9 1.5-0.4 1.5-0.9c0.2-0.4-0.3-0.6-1.4-0.6z" fill="url(#path9156_1_)"/>
+<radialGradient id="path2638_1_" gradientUnits="userSpaceOnUse" cy="2576.4" cx="124.46" gradientTransform="matrix(.7203 0 0 .1401 -81.565 -351.88)" r="8.0591">
+	<stop style="stop-color:#0D0D0D" offset="0"/>
+	<stop style="stop-color:#0D0D0D;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2638" opacity=".1629" d="m13.9 9c0 0.6-2.6 1.1-5.8 1.1s-5.8-0.5-5.8-1.1c0-0.6 2.6-1.1 5.8-1.1s5.8 0.5 5.8 1.1z" enable-background="new    " fill="url(#path2638_1_)"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="-1636.3" cx="2511.6" gradientTransform="matrix(-.000086019 .1539 -.2444 0 -397.57 -385.68)" r="38.211">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="-436.6" cx="-193.38" gradientTransform="matrix(1 0 0 -1 0 18)" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m8.1 0.6c-0.5 0-0.9 0.4-0.9 0.8s0.4 0.8 0.8 0.8c0.5 0 0.8-0.4 0.8-0.8 0.1-0.4-0.3-0.8-0.7-0.8zm-2.5 0.8c-0.4 0-0.8 0.1-1.2 0.3l0.7 1.3c0.2-0.1 0.4-0.1 0.6-0.1h0.1c1.2 0 2.2 0.8 2.4 1.8h1.5c-0.1-0.8-0.5-1.5-1-2-0.2 0.1-0.4 0.2-0.6 0.2-0.8 0-1.4-0.6-1.5-1.4-0.2 0-0.5-0.1-0.7-0.1h-0.2-0.1zm-2.1 0.8c-0.6 0.5-1.1 1.1-1.3 1.9 0.4 0.3 0.6 0.7 0.6 1.2s-0.2 0.9-0.6 1.2c0.2 0.7 0.7 1.4 1.3 1.8l0.7-1.3c-0.5-0.4-0.8-1-0.8-1.7s0.3-1.3 0.8-1.8l-0.7-1.3zm-2.2 2.2c-0.5 0-0.8 0.4-0.8 0.8 0 0.5 0.4 0.8 0.8 0.8s0.8-0.4 0.8-0.8-0.3-0.8-0.8-0.8zm6.9 1.4c-0.2 1.1-1.2 1.9-2.3 1.9-0.3 0-0.5 0-0.7-0.1l-0.8 1.2c0.5 0.2 1 0.3 1.5 0.3 0.3 0 0.5 0 0.7-0.1 0-0.7 0.6-1.3 1.4-1.4h0.1c0.3 0 0.5 0.1 0.7 0.2 0.5-0.6 0.8-1.3 1-2h-1.6zm-0.1 2.5c-0.5 0-0.8 0.4-0.8 0.8s0.4 0.8 0.8 0.8c0.5 0 0.8-0.4 0.8-0.8s-0.4-0.8-0.8-0.8z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+	<polygon points="5.1 6 4.6 4.6 3.2 5.6 4.1 5.8" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="7 6.7 7 6.7" fill="none"/>
+	<polygon points="7 6.7 8.3 7.3 8.7 6.3" fill="#009FE8"/>
+	<polygon points="4.9 7.1 7 6.7 5.1 6" fill="#B2DEF0"/>
+	<polygon points="3.2 5.6 3.5 7.5 4.1 5.8" fill="#009FE8"/>
+	<polygon points="4.1 5.8 3.5 7.5 5.1 6" fill="#0091DA"/>
+	<polygon points="3.5 7.5 4.9 7.1 5.1 6" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="4.9 2.9 4.9 2.9" fill="none"/>
+	<polygon points="4.6 4.6 5.7 4.6 5.7 3.9" fill="#0062B0"/>
+	<polygon points="6.9 5.6 5.7 4.6 5.1 6" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="4.9 2.9 4.9 2.9" fill="none"/>
+	<polygon points="5.1 6 5.7 4.6 4.6 4.6" fill="#009FE8"/>
+	<polygon points="7.2 9.9 7.2 9.4 7.2 9.4 6.7 9.1" fill="#0062B0"/>
+	<polygon points="5.9 9.9 7.2 9.9 6.7 9.1" fill="#004380"/>
+	<polygon points="6.7 9.1 7.2 9.4 7.2 9.4 7.6 8" fill="#004380"/>
+	<polygon points="8.9 9.8 9.9 8.9 8.6 9" fill="#0062B0"/>
+	<polygon points="7.6 10.6 8.9 10.6 8.9 9.8 8 10 8.9 9.8 8.6 9" fill="#004380"/>
+	<polygon points="7.2 9.4 8.3 8.5 7.6 8" fill="#0062B0"/>
+	<polygon points="9.9 8.9 9.4 7.8 8.6 9" fill="#004380"/>
+	<polygon points="2.2 10.2 3.6 10.2 2.7 9.6" fill="#004380"/>
+	<polygon points="5.5 1.9 6.1 1.6 6.8 0.5" fill="#0091DA"/>
+	<polygon points="5.6 1 4.3 2.3 5.1 1.8" fill="#0091DA"/>
+	<polygon points="8.3 8.5 8.6 9 9.4 7.8 7.6 8" fill="#0091DA"/>
+	<polygon points="6.1 1.6 5.5 1.9 6.2 2.2" fill="#009FE8"/>
+	<polygon points="5.3 1.9 5.6 1 5.1 1.8" fill="#B2DEF0"/>
+	<polygon points="6.1 1.6 6.2 2.2 6.8 0.5" fill="#B2DEF0"/>
+	<polygon points="3.2 9.1 2.7 9.6 3.7 9 2.9 8.4" fill="#0091DA"/>
+	<polygon points="3.2 4.3 3.2 5.6 4.6 4.6" fill="#009FE8"/>
+	<polygon points="3.6 10.2 3.7 9 2.7 9.6" fill="#0062B0"/>
+	<polygon points="9.4 7.8 9.3 6.5 8.3 7.3" fill="#0062B0"/>
+	<polygon points="7.6 8 9.4 7.8 8.3 7.3" fill="#009FE8"/>
+	<polygon points="8.3 7.3 9.3 6.5 8.7 6.3" fill="#0091DA"/>
+	<polygon points="9.3 6.5 10.3 5.9 10 5.6" fill="#0091DA"/>
+	<polygon points="6.9 7.6 7.6 8 8.3 7.3" fill="#0062B0"/>
+	<polygon points="9.2 6 8.7 6.3 9.3 6.5 10 5.6" fill="#009FE8"/>
+	<polygon points="6.1 7.9 6.9 7.6 4.9 7.1" fill="#004380"/>
+	<polygon points="7 6.7 6.9 7.6 8.3 7.3" fill="#0091DA"/>
+	<polygon points="7 6.7 4.9 7.1 6.9 7.6" fill="#0062B0"/>
+	<polygon points="10.7 4.5 11.2 5.1 11.2 5.1 11.9 4.1" fill="#B2DEF0"/>
+	<polygon points="10.9 6 11.7 5.7 11.2 5.1" fill="#0091DA"/>
+	<polygon points="11.2 5.1 10.3 5.9 10.9 6" fill="#0062B0"/>
+	<polygon points="10 5.6 10.3 5.9 10.7 4.5" fill="#009FE8"/>
+	<polygon points="11.2 5.1 11.7 5.7 11.9 4.1" fill="#009FE8"/>
+	<polygon points="10.7 4.5 10.3 5.9 11.2 5.1" fill="#0091DA"/>
+	<polygon points="5.1 8.3 6.1 7.9 4.9 7.1" fill="#0091DA"/>
+	<polygon points="4.6 4.6 3.2 3 3.2 4.3" fill="#0091DA"/>
+	<polygon points="4.3 2.3 3.2 3 4.4 3.3" fill="#0091DA"/>
+	<polygon points="4.4 3.3 3.2 3 4.6 4.6" fill="#009FE8"/>
+	<polygon points="3.2 4.3 3.2 3 2.7 4.1" fill="#009FE8"/>
+	<polygon points="4.6 4.6 4.9 2.9 4.9 2.9 4.3 2.3 4.4 3.3" fill="#0062B0"/>
+	<polygon points="4.9 2.9 5.1 1.8 4.3 2.3" fill="#009FE8"/>
+	<polygon points="2 5.3 3.2 4.3 2.7 4.1" fill="#0062B0"/>
+	<polygon points="2 5.3 3.2 5.6 3.2 4.3 3.2 4.3" fill="#0091DA"/>
+	<polygon points="3.7 9 4.3 8.2 3.5 7.5" fill="#004380"/>
+	<polygon points="4.3 8.2 5.1 8.3 4.9 7.1" fill="#009FE8"/>
+	<polygon points="2.9 8.4 3.7 9 3.5 7.5" fill="#0062B0"/>
+	<polygon points="3.5 7.5 4.3 8.2 4.9 7.1" fill="#0062B0"/>
+	<polygon points="2.7 7.1 3.2 5.6 2 5.3" fill="#0062B0"/>
+	<polygon points="2.7 7.1 2.9 8.4 3.5 7.5" fill="#009FE8"/>
+	<polygon points="3.2 5.6 2.7 7.1 3.5 7.5" fill="#0091DA"/>
+	<polygon points="8.7 6.3 6.9 5.6 7 6.7" fill="#B2DEF0"/>
+	<polygon points="7 6.7 7 6.7 6.9 5.6 5.1 6" fill="#009FE8"/>
+	<polygon points="4.9 2.9 4.6 4.6 5.7 3.9" fill="#0091DA"/>
+	<polygon points="4.9 2.9 5.7 3.9 6.5 3.4" fill="#009FE8"/>
+	<polygon points="5.7 4.6 6.5 3.4 5.7 3.9" fill="#B2DEF0"/>
+	<polygon points="4.9 2.9 6.5 3.4 6.2 2.2" fill="#B2DEF0"/>
+	<polygon points="6.2 2.2 5.5 1.9 5.1 1.8 4.9 2.9" fill="#0091DA"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="4008.1" cx="65490" gradientTransform="matrix(0.006 0.004 -0.0234 0.0349 -297.47 -396.61)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m3.4 2.5c-0.5 0.4-0.9 1-1.1 1.6 0.4 0.3 0.6 0.7 0.6 1.2s-0.2 0.9-0.6 1.2c0.2 0.6 0.6 1.2 1.1 1.6l0.7-1.1c-0.5-0.4-0.7-1-0.7-1.7s0.2-1.3 0.7-1.8l-0.7-1zm0 0.3l0.4 0.7c-0.4 0.5-0.6 1-0.7 1.7 0-0.5-0.2-0.9-0.6-1.2 0.2-0.5 0.5-0.9 0.9-1.2zm-0.3 2.6c0.1 0.6 0.3 1.2 0.7 1.6l-0.4 0.7c-0.4-0.3-0.7-0.7-0.8-1.2 0.3-0.3 0.5-0.7 0.5-1.1z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="11420" cx="10395" gradientTransform="matrix(0.0259 -.00092255 0.0013 0.036 -283.2 -397.18)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m1.3 4.6c-0.3 0-0.6 0.3-0.6 0.7s0.3 0.7 0.7 0.7 0.6-0.4 0.6-0.7c0-0.4-0.3-0.7-0.7-0.7zm0 0.2c0.3 0 0.5 0.2 0.5 0.5s-0.2 0.4-0.5 0.4-0.4-0.2-0.4-0.4c0-0.3 0.1-0.5 0.4-0.5z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="12459" cx="11333" gradientTransform="matrix(0.0238 -.00084792 0.0012 0.0331 -277.07 -402.08)" r="26.28">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m8 0.8c-0.3 0-0.6 0.3-0.6 0.6 0 0.4 0.3 0.6 0.6 0.6s0.6-0.3 0.6-0.6-0.2-0.6-0.6-0.6zm0 0.2c0.3 0 0.5 0.2 0.5 0.4s-0.2 0.4-0.4 0.4-0.5-0.1-0.5-0.4c0-0.2 0.2-0.4 0.4-0.4z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="6094.7" cx="61384" gradientTransform="matrix(.00037398 0.007 0.0411 -0.0023 -268.44 -413.38)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m4.6 1.8c0.6-0.2 1.3-0.3 1.9-0.1 0.1 0.4 0.3 0.9 0.7 1.1s0.9 0.2 1.4 0c0.4 0.5 0.7 1.1 0.8 1.8h-1.2c-0.2-0.6-0.6-1.2-1.2-1.5s-1.2-0.4-1.8-0.3l-0.6-1zm0.3 0.1l0.4 0.7c0.6-0.1 1.2 0 1.7 0.3-0.3-0.3-0.6-0.7-0.6-1.1-0.5-0.1-1 0-1.5 0.1zm2.3 1.1c0.5 0.3 0.9 0.8 1.1 1.4h0.8c-0.1-0.5-0.3-0.9-0.6-1.3-0.4 0.1-0.9 0.1-1.3-0.1z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="1744" gradientUnits="userSpaceOnUse" x2="1206.9" gradientTransform="matrix(.1979 0 0 .1967 -227.43 -333.7)" y1="1715.6" x1="1206.9">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m15.3 6.5l-2.9 3.2-3-3.2h1.8c0.4-1.1-0.4-1.9-1.4-1.9-0.6 0-1.5 0.4-1.9 1.3-0.1 0.5-0.4 0.3-0.4-0.1 0-1.6 1.3-2.9 3.1-2.9s3.2 1.5 3.1 3.6h1.6z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="-299.3" gradientUnits="userSpaceOnUse" x2="-248.1" gradientTransform="matrix(1 0 0 -1 0 18)" y1="-355.3" x1="-294.67">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m13.2 7.5l-0.8 0.8-0.9-0.9h0.5c0.6-1.4-0.4-3.6-1.6-3.6-0.8 0-2.1 1.1-2.6 1.7 0.3-1.4 1.3-1.8 2.8-1.8s2.3 1.5 2 3.8h0.6z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+</svg>

+ 210 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/22x22/apps/ubiquity.svg

@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg2" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="22px" viewBox="0 0 22 22" width="22px" version="1.1" y="0px" x="0px" enable-background="new 0 0 22 22">
+<linearGradient id="rect2992_1_" y2="-1324.1" gradientUnits="userSpaceOnUse" x2="1423.6" gradientTransform="matrix(.1739 0 0 -.2485 -236.57 -307.65)" y1="-1307.7" x1="1423.6">
+	<stop style="stop-color:#7A7A7A" offset="0"/>
+	<stop style="stop-color:#474747" offset="1"/>
+</linearGradient>
+<path id="rect2992" stroke-linejoin="round" d="m21.496 17.5c-0.426 3.38-0.316 3.979-1.088 3.979-0.303 0.049-12.178 0-18.858 0-0.837 0-0.626 0.065-1.05-3.979h20.996z" stroke="#353537" fill="url(#rect2992_1_)"/>
+<linearGradient id="rect9146_1_" y2="-364.73" gradientUnits="userSpaceOnUse" x2="126.64" gradientTransform="matrix(.7376 0 0 -.5393 -77.41 -177.21)" y1="-364.73" x1="109.02">
+	<stop offset="0"/>
+	<stop style="stop-color:#bbb;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="rect9146" d="m2.7 18h13.3v3h-13l-0.3-3z" fill="url(#rect9146_1_)"/>
+<linearGradient id="path9148_1_" y2="-363.18" gradientUnits="userSpaceOnUse" x2="116.13" gradientTransform="matrix(.7376 0 0 -.5393 -77.996 -176.5)" y1="-366.63" x1="116.18">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path9148" opacity=".8114" d="m3 21l-0.2-2.163c1.354 1.714 6.32 2.163 9.743 2.163h-9.543z" enable-background="new    " fill="url(#path9148_1_)"/>
+<radialGradient id="rect2990_1_" gradientUnits="userSpaceOnUse" cy="19.241" cx="-82.648" gradientTransform="matrix(1.4589 .0052 .0036 -1 126.96 23.675)" r="11">
+	<stop style="stop-color:#E6E6E6" offset="0"/>
+	<stop style="stop-color:#C8C8C8" offset="1"/>
+</radialGradient>
+<linearGradient id="rect2990_2_" y2="424.49" gradientUnits="userSpaceOnUse" x2="-276.02" y1="418" x1="-274.5">
+	<stop style="stop-color:#969696" offset="0"/>
+	<stop style="stop-color:#B4B4B4" offset="1"/>
+</linearGradient>
+<path id="rect2990" stroke-linejoin="round" d="m2.5 2l-1.979 15.484c-0.014 0-0.021 0.004-0.021 0.016h21c0-0.012-0.007-0.016-0.021-0.016l-1.979-15.484c-0.09-0.701-0.793-1.5-1.5-1.5h-14c-0.707 0-1.41 0.799-1.5 1.5z" stroke="url(#rect2990_2_)" stroke-linecap="round" fill="url(#rect2990_1_)"/>
+<path id="path2215" opacity=".6" stroke-linejoin="round" d="m1.412 17.5h19.176" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="-1525.7" cx="339.19" gradientTransform="matrix(.4762 0 0 -.2143 -150.52 -307.44)" r="20.999">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<rect id="rect6300-3" opacity=".2" height="3" width="20" y="18" x="1" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+<g id="g9164" transform="matrix(.066101 -.011416 .0079191 .045854 -1.3921 -6.4254)">
+	<path id="path9166" d="m48.304 190.28c0.311 4.252 5.022 7.714 10.51 7.717 5.489-0.007 9.642-3.467 9.278-7.71-0.365-4.233-5.075-7.642-10.505-7.641-5.443-0.01-9.596 3.39-9.283 7.63z" fill="#E6E6E6"/>
+		<radialGradient id="path9168_1_" gradientUnits="userSpaceOnUse" cy="-71417" cx="25156" gradientTransform="matrix(.165 .0285 .0198 -.1144 -2680.3 -8699.2)" r="2.5635">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9168" d="m51.852 187.29c-0.5 0.536-1.076 1.393-1.073 2.544-0.004 0.095 0.002 0.171 0.005 0.267 0.219 2.919 3.896 5.4 8.026 5.395 2.356 0.001 4.508-0.816 5.757-2.177 0.535-0.58 1.146-1.546 1.034-2.831-0.25-2.905-3.924-5.353-8.016-5.35-2.342 0-4.485 0.8-5.733 2.15z" fill="url(#path9168_1_)"/>
+</g>
+<g id="g9170" transform="matrix(.067079 0 0 .046533 14.061 -7.2131)">
+	<path id="path9172" d="m48.298 190.28c0.32 4.25 5.023 7.713 10.511 7.713 5.503 0 9.638-3.463 9.288-7.713-0.379-4.229-5.081-7.639-10.511-7.639-5.445 0-9.594 3.41-9.288 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9174_1_" fx="22720" gradientUnits="userSpaceOnUse" cy="-68614" cx="22719" gradientTransform="matrix(.1674 0 0 -.1161 -3745.2 -7778)" r="2.5641">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9174" d="m51.85 187.29c-0.495 0.546-1.077 1.406-1.077 2.55 0 0.094 0 0.178 0.015 0.262 0.218 2.917 3.887 5.404 8.022 5.404 2.358 0 4.513-0.829 5.765-2.183 0.524-0.577 1.136-1.543 1.019-2.833-0.233-2.896-3.916-5.352-8.007-5.352-2.345 0-4.485 0.8-5.737 2.15z" fill="url(#path9174_1_)"/>
+</g>
+<radialGradient id="path8469_1_" gradientUnits="userSpaceOnUse" cy="-2247.5" cx="1606.7" gradientTransform="matrix(.1619 -.0029 -.0012 -.1681 -252.11 -357.91)" r="78.727">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8469" d="m13.206 1.7c-0.241 0-0.456 0.075-0.625 0.203s-0.292 0.326-0.299 0.552c-0.022 0.697-0.355 1.199-0.978 1.657-0.619 0.454-1.527 0.837-2.61 1.192-0.009 0.003-0.018-0.003-0.027 0-0.409 0.092-1.083 0.35-1.739 0.61-0.666 0.265-1.274 0.52-1.55 0.727-1.39 0.935-2.247 2.178-2.365 3.546-0.107 1.245 0.417 2.493 1.44 3.488 1.499 1.456 3.946 2.325 6.552 2.325 2.604 0 5.052-0.869 6.55-2.325 0.936-0.909 1.441-2.005 1.441-3.139 0-0.093 0.009-0.226 0-0.349-0.104-1.201-0.797-2.31-1.903-3.197-0.03-0.469-0.299-4.534-0.299-4.534-0.015-0.227-0.153-0.425-0.326-0.552s-0.385-0.204-0.625-0.204h-2.637zm0 0.494h2.637c0.058 0 0.109 0.017 0.136 0.029l0.326 4.767c-0.003 0.02-0.003 0.039 0 0.058 0.008 0.011 0.018 0.021 0.027 0.029 0.014 0.023 0.031 0.043 0.055 0.058 1.071 0.784 1.703 1.979 1.793 3.023 0.112 1.297-0.607 2.369-1.902 3.168-1.295 0.798-3.153 1.279-5.272 1.279-2.12 0-3.979-0.481-5.273-1.279-1.294-0.799-2.015-1.87-1.903-3.168 0.096-1.116 0.831-2.359 2.038-3.168 0.01-0.008 0.019-0.018 0.027-0.029 0.004-0.004 0.06-0.044 0.136-0.087s0.181-0.089 0.299-0.145c0.236-0.114 0.523-0.246 0.843-0.378 0.64-0.264 1.364-0.512 1.712-0.582 0.009 0.001 0.018 0.001 0.027 0 1.052-0.342 2.051-0.75 2.827-1.308 0.761-0.546 1.308-1.273 1.359-2.238 0.017-0.009 0.052-0.029 0.108-0.029z" fill="url(#path8469_1_)"/>
+<radialGradient id="path9156_1_" gradientUnits="userSpaceOnUse" cy="4948.2" cx="2954.4" gradientTransform="matrix(.0925 0 0 .0872 -262.58 -424.65)" r="78.727">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6718"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9156" d="m11 12c-1.683 0-2.972-0.845-3-1.965v-0.036c0-0.406 0.169-0.791 0.49-1.118 0.544-0.551 1.482-0.881 2.51-0.881 1.027 0 1.966 0.33 2.51 0.881 0.33 0.335 0.5 0.735 0.49 1.154-0.027 1.12-1.318 1.965-3 1.965zm0.05-2.746c-1.581 0-2.436 0.21-2.417 0.974 0.018 0.753 1.078 1.354 2.367 1.354s2.35-0.601 2.367-1.354c0.02-0.764-0.736-0.974-2.317-0.974z" fill="url(#path9156_1_)"/>
+<radialGradient id="path8473_1_" gradientUnits="userSpaceOnUse" cy="-8540.8" cx="2599.8" gradientTransform="matrix(.0822 -.0207 -.0068 -.053 -263.46 -394.15)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".2708"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8473" d="m5.005 1.702c-0.055 0.016-0.101 0.056-0.128 0.111-0.011 0.017-0.02 0.036-0.026 0.055l-0.051 0.194-0.694 2.882-0.103 0.472c-0.004 0.027-0.004 0.056 0 0.083 0.003 0.029 0.012 0.058 0.026 0.083 0.027 0.055 0.073 0.095 0.128 0.111 0.034 0.009 0.069 0.009 0.103 0l0.333-0.111 5.651-1.802h0.026c0.008 0.001 0.017 0.001 0.025 0 0.009 0.001 0.018 0.001 0.026 0 0.018-0.006 0.036-0.016 0.051-0.027 0.379-0.225 0.572-0.659 0.617-1.053 0.023-0.203 0.007-0.405-0.051-0.582-0.034-0.101-0.104-0.196-0.18-0.277s-0.174-0.143-0.308-0.139h-5.393c-0.017-0.003-0.035-0.003-0.052 0zm0.411 0.61h4.854c-0.013 0.069-0.029 0.116-0.052 0.194-0.041 0.144-0.119 0.26-0.102 0.25l-5.137 1.607 0.437-2.051z" fill="url(#path8473_1_)"/>
+<g id="g9158" transform="matrix(-.097811 0 0 .10767 8.2622 -4.8183)">
+	<path id="path9160" d="m48.299 190.28c0.315 4.254 5.027 7.709 10.513 7.709 5.491 0 9.645-3.456 9.28-7.709-0.364-4.227-5.072-7.637-10.508-7.637s-9.595 3.41-9.285 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9162_1_" gradientUnits="userSpaceOnUse" cy="-11039" cx="13858" gradientTransform="matrix(-.2441 0 0 -.2687 3441 -2776)" r="2.5646">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9162" d="m51.853 187.29c-0.504 0.535-1.078 1.397-1.078 2.54 0 0.091 0.005 0.181 0.01 0.272 0.22 2.921 3.894 5.397 8.027 5.397 2.351 0 4.503-0.825 5.751-2.186 0.539-0.58 1.148-1.542 1.038-2.83-0.25-2.902-3.924-5.351-8.022-5.351-2.331 0.01-4.478 0.8-5.726 2.16z" fill="url(#path9162_1_)"/>
+</g>
+<g id="g9190" transform="matrix(.097811 0 0 .10767 13.777 -4.8183)">
+	<path id="path9192" d="m48.306 190.28c0.31 4.254 5.012 7.709 10.503 7.709s9.645-3.456 9.285-7.709c-0.369-4.227-5.072-7.637-10.513-7.637s-9.594 3.41-9.275 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9194_1_" fx="10087" gradientUnits="userSpaceOnUse" cy="-11039" cx="10086" gradientTransform="matrix(.2441 0 0 -.2687 -2403.9 -2776)" r="2.5637">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9194" d="m51.851 187.3c-0.499 0.535-1.068 1.397-1.068 2.54v0.272c0.22 2.921 3.894 5.397 8.027 5.397 2.356 0 4.513-0.825 5.751-2.186 0.539-0.58 1.158-1.542 1.038-2.83-0.25-2.902-3.914-5.351-8.017-5.351-2.337 0-4.483 0.79-5.731 2.16z" fill="url(#path9194_1_)"/>
+</g>
+<radialGradient id="path2638_1_" gradientUnits="userSpaceOnUse" cy="-1498.4" cx="-15.838" gradientTransform="matrix(1.1045 0 0 -.2148 29.62 -308.46)" r="8.0625">
+	<stop style="stop-color:#0D0D0D" offset="0"/>
+	<stop style="stop-color:#0D0D0D;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2638" opacity=".1629" d="m21.032 13.363c0 0.957-3.987 1.731-8.905 1.731s-8.905-0.774-8.905-1.731c0-0.956 3.987-1.731 8.905-1.731s8.905 0.775 8.905 1.731z" enable-background="new    " fill="url(#path2638_1_)"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="1404.4" cx="1538.7" gradientTransform="matrix(-.00013190 .236 .3747 0 -458.02 -366.41)" r="38.214">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="457.6" cx="-190.38" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m77.175-3.74c-0.711 0-1.283 0.571-1.283 1.275 0 0.705 0.572 1.275 1.283 1.275s1.293-0.571 1.293-1.275c0-0.704-0.582-1.275-1.293-1.275zm-3.821 1.275c-0.641 0.047-1.256 0.206-1.824 0.438l1.152 1.953c0.295-0.092 0.601-0.143 0.923-0.159 0.063-0.003 0.126 0 0.19 0 1.767 0 3.242 1.229 3.609 2.869h2.297c-0.164-1.192-0.693-2.272-1.465-3.128-0.316 0.169-0.678 0.259-1.063 0.259-1.209 0-2.201-0.939-2.256-2.122-0.363-0.069-0.74-0.11-1.123-0.11-0.077 0-0.154-0.002-0.23 0-0.025 0.001-0.045-0.001-0.07 0-0.023 0.001-0.047-0.001-0.07 0-0.022 0.001-0.047-0.002-0.07 0zm-3.208 1.236c-0.925 0.713-1.63 1.694-2.005 2.819 0.593 0.402 0.982 1.078 0.982 1.843 0 0.766-0.39 1.441-0.982 1.843 0.375 1.125 1.08 2.107 2.005 2.82l1.143-1.963c-0.735-0.67-1.192-1.633-1.192-2.7 0-1.066 0.459-2.028 1.192-2.7l-1.143-1.962zm-3.268 3.387c-0.711 0-1.293 0.571-1.293 1.275 0 0.705 0.582 1.275 1.293 1.275s1.283-0.571 1.283-1.275c0-0.704-0.572-1.275-1.283-1.275zm10.527 2.072c-0.367 1.641-1.842 2.869-3.609 2.869-0.391 0-0.76-0.058-1.113-0.169l-1.153 1.953c0.699 0.285 1.463 0.448 2.266 0.448 0.384 0 0.76-0.041 1.123-0.11 0.057-1.133 0.977-2.05 2.115-2.122 0.049-0.003 0.092 0 0.141 0 0.385 0 0.746 0.091 1.063 0.26 0.771-0.856 1.301-1.936 1.465-3.128h-2.298zm-0.23 3.826c-0.711 0-1.283 0.57-1.283 1.275 0 0.703 0.572 1.275 1.283 1.275s1.293-0.572 1.293-1.275c0-0.705-0.582-1.275-1.293-1.275z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+	<polygon points="7.58 8.407 6.883 6.465 5.069 7.885 6.248 8.049" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="10.074 9.262 10.132 9.286 10.134 9.245" fill="none"/>
+	<polygon points="10.132 9.286 11.9 10.034 12.406 8.767 10.074 9.262" fill="#009FE8"/>
+	<polygon points="7.278 9.879 10.074 9.262 7.58 8.407" fill="#B2DEF0"/>
+	<polygon points="5.069 7.885 5.416 10.304 6.248 8.049" fill="#009FE8"/>
+	<polygon points="6.249 8.049 5.416 10.304 7.58 8.407" fill="#0091DA"/>
+	<polygon points="5.416 10.304 7.278 9.879 7.58 8.407" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="7.288 4.22 7.302 4.237 7.304 4.226" fill="none"/>
+	<polygon points="6.883 6.465 8.356 6.529 8.389 5.504" fill="#0062B0"/>
+	<polygon points="10.05 7.8 8.356 6.529 7.58 8.407" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="7.306 4.211 7.288 4.22 7.304 4.226" fill="none"/>
+	<polygon points="7.58 8.407 8.356 6.529 6.883 6.465" fill="#009FE8"/>
+	<polygon points="10.417 13.584 10.425 12.838 10.428 12.838 9.784 12.453" fill="#0062B0"/>
+	<polygon points="8.609 13.557 10.417 13.584 9.784 12.453" fill="#004380"/>
+	<polygon points="9.784 12.453 10.428 12.838 10.437 12.832 10.921 11.077" fill="#004380"/>
+	<polygon points="12.641 13.418 13.98 12.166 12.326 12.358" fill="#0062B0"/>
+	<polygon points="10.878 14.473 12.728 14.477 12.641 13.418 11.472 13.701 12.641 13.418 12.326 12.358" fill="#004380"/>
+	<polygon points="10.437 12.832 11.805 11.717 10.921 11.077" fill="#0062B0"/>
+	<polygon points="13.98 12.166 13.301 10.76 12.326 12.358" fill="#004380"/>
+	<polygon points="3.778 13.996 5.544 13.996 4.435 13.205" fill="#004380"/>
+	<polygon points="8.071 2.884 8.947 2.538 9.81 1.089" fill="#0091DA"/>
+	<polygon points="8.282 1.698 6.543 3.492 7.655 2.807" fill="#0091DA"/>
+	<polygon points="11.824 11.717 12.326 12.358 13.301 10.76 10.921 11.077" fill="#0091DA"/>
+	<polygon points="8.947 2.538 8.071 2.884 9.077 3.302" fill="#009FE8"/>
+	<polygon points="7.827 2.844 8.28 1.709 7.65 2.812" fill="#B2DEF0"/>
+	<polygon points="8.947 2.538 9.077 3.302 9.81 1.092" fill="#B2DEF0"/>
+	<polygon points="5.046 12.471 4.435 13.205 5.77 12.379 4.671 11.565" fill="#0091DA"/>
+	<polygon points="5.096 6.153 5.069 7.885 6.883 6.465" fill="#009FE8"/>
+	<polygon points="5.544 13.996 5.77 12.379 4.435 13.205" fill="#0062B0"/>
+	<polygon points="13.301 10.76 13.219 9.049 11.9 10.034" fill="#0062B0"/>
+	<polygon points="10.921 11.077 13.301 10.76 11.9 10.034" fill="#009FE8"/>
+	<polygon points="11.9 10.034 13.219 9.049 12.406 8.767" fill="#0091DA"/>
+	<polygon points="13.219 9.049 14.588 8.243 14.086 7.861" fill="#0091DA"/>
+	<polygon points="9.955 10.428 10.921 11.077 11.9 10.034" fill="#0062B0"/>
+	<polygon points="13.121 8.379 12.406 8.767 13.219 9.049 14.086 7.861" fill="#009FE8"/>
+	<polygon points="8.98 10.942 9.955 10.428 7.278 9.879" fill="#004380"/>
+	<polygon points="10.074 9.262 9.955 10.428 11.9 10.034" fill="#0091DA"/>
+	<polygon points="10.074 9.262 7.278 9.879 9.955 10.428" fill="#0062B0"/>
+	<polygon points="15.074 6.383 15.689 7.155 15.703 7.142 16.687 5.877" fill="#B2DEF0"/>
+	<polygon points="15.355 8.394 16.391 8.018 15.689 7.155" fill="#0091DA"/>
+	<polygon points="15.689 7.155 14.576 8.245 15.352 8.396" fill="#0062B0"/>
+	<polygon points="14.086 7.861 14.59 8.247 15.074 6.383" fill="#009FE8"/>
+	<polygon points="15.689 7.155 16.391 8.021 16.691 5.877" fill="#009FE8"/>
+	<polygon points="15.074 6.383 14.576 8.245 15.689 7.155" fill="#0091DA"/>
+	<polygon points="7.651 11.474 8.98 10.942 7.278 9.879" fill="#0091DA"/>
+	<polygon points="6.883 6.465 5.124 4.332 5.096 6.153" fill="#0091DA"/>
+	<polygon points="6.549 3.435 5.124 4.332 6.689 4.724" fill="#0091DA"/>
+	<polygon points="6.689 4.724 5.124 4.332 6.883 6.465" fill="#009FE8"/>
+	<polygon points="5.096 6.153 5.124 4.332 4.439 5.794 5.084 6.151" fill="#009FE8"/>
+	<polygon points="6.883 6.465 7.302 4.237 7.288 4.22 6.549 3.435 6.689 4.724" fill="#0062B0"/>
+	<polygon points="7.302 4.237 7.655 2.807 6.549 3.434 7.288 4.22" fill="#009FE8"/>
+	<polygon points="3.465 7.472 5.084 6.151 4.439 5.794" fill="#0062B0"/>
+	<polygon points="3.465 7.472 5.069 7.885 5.096 6.153 5.084 6.151" fill="#0091DA"/>
+	<polygon points="5.77 12.379 6.48 11.262 5.416 10.304" fill="#004380"/>
+	<polygon points="6.48 11.262 7.651 11.474 7.278 9.879" fill="#009FE8"/>
+	<polygon points="4.671 11.565 5.77 12.379 5.416 10.304" fill="#0062B0"/>
+	<polygon points="5.416 10.304 6.48 11.262 7.278 9.879" fill="#0062B0"/>
+	<polygon points="4.382 9.777 5.069 7.885 3.465 7.472" fill="#0062B0"/>
+	<polygon points="4.382 9.777 4.671 11.565 5.416 10.304" fill="#009FE8"/>
+	<polygon points="5.069 7.885 4.382 9.777 5.416 10.304" fill="#0091DA"/>
+	<polygon points="12.406 8.767 10.05 7.8 10.074 9.262" fill="#B2DEF0"/>
+	<polygon points="10.074 9.262 10.074 9.262 10.05 7.8 7.58 8.407" fill="#009FE8"/>
+	<polygon points="7.302 4.237 6.883 6.465 8.389 5.504" fill="#0091DA"/>
+	<polygon points="7.302 4.237 8.389 5.504 9.485 4.958 7.304 4.226" fill="#009FE8"/>
+	<polygon points="8.356 6.529 9.485 4.958 8.389 5.504" fill="#B2DEF0"/>
+	<polygon points="7.302 4.237 9.485 4.958 9.077 3.302" fill="#B2DEF0"/>
+	<polygon points="9.077 3.302 8.071 2.884 7.655 2.807 7.302 4.235" fill="#0091DA"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="-2419" cx="42022" gradientTransform="matrix(.0092 .0061 .0359 -.0536 -296.79 -380.79)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m5.007 3.392c-0.776 0.64-1.375 1.483-1.717 2.445 0.559 0.424 0.927 1.085 0.927 1.836s-0.368 1.413-0.927 1.837c0.342 0.962 0.941 1.806 1.717 2.445l0.956-1.643c-0.69-0.673-1.122-1.605-1.122-2.639 0-1.033 0.433-1.964 1.122-2.638l-0.956-1.643zm-0.078 0.474l0.644 1.121c-0.617 0.68-1.009 1.566-1.044 2.542-0.039-0.71-0.371-1.347-0.868-1.798 0.285-0.71 0.722-1.346 1.268-1.865zm-0.4 3.952c0.035 0.976 0.426 1.862 1.044 2.542l-0.644 1.121c-0.546-0.519-0.983-1.155-1.269-1.865 0.499-0.451 0.83-1.088 0.869-1.798z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="-7200" cx="6570.8" gradientTransform="matrix(.0397 -.0014 -.002 -.0553 -274.19 -381.59)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m1.668 6.64c-0.52 0.058-0.922 0.501-0.922 1.033 0 0.572 0.466 1.034 1.044 1.034s1.044-0.462 1.044-1.034-0.467-1.033-1.045-1.033c-0.038 0-0.069-0.001-0.084 0-0.012 0.001-0.024-0.002-0.037 0zm0.028 0.295c0.012-0.001 0.025 0.001 0.038 0h0.056c0.417 0 0.746 0.326 0.746 0.738s-0.33 0.739-0.747 0.739-0.745-0.326-0.745-0.739c0-0.381 0.285-0.692 0.652-0.738z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="-7869" cx="7172.1" gradientTransform="matrix(.0365 -.0013 -.0018 -.0508 -264.78 -389.2)" r="26.262">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m11.943 0.826c-0.479 0.053-0.848 0.46-0.848 0.95 0 0.526 0.428 0.95 0.959 0.95s0.959-0.424 0.959-0.95-0.428-0.95-0.959-0.95c-0.035 0-0.063-0.001-0.076 0s-0.023-0.002-0.035 0zm0.026 0.271c0.012-0.001 0.023 0.001 0.034 0h0.052c0.383 0 0.686 0.3 0.686 0.679s-0.303 0.679-0.686 0.679-0.685-0.3-0.685-0.679c0-0.351 0.261-0.637 0.599-0.679z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="-3726.9" cx="39480" gradientTransform="matrix(.00057345 .0107 -.0631 .0035 -249.95 -407.84)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m6.837 2.355c0.924-0.332 1.934-0.415 2.917-0.226 0.082 0.677 0.459 1.311 1.095 1.683 0.635 0.371 1.375 0.391 2.012 0.133 0.645 0.762 1.062 1.68 1.219 2.644l-1.863-0.014c-0.229-0.909-0.803-1.731-1.677-2.242s-1.875-0.61-2.787-0.368l-0.916-1.61zm0.439 0.169l0.63 1.092c0.88-0.179 1.824-0.068 2.666 0.385-0.581-0.383-0.956-0.976-1.091-1.614-0.742-0.113-1.496-0.063-2.205 0.137zm3.541 1.621c0.808 0.512 1.365 1.276 1.634 2.129l1.267 0.016c-0.169-0.713-0.491-1.393-0.95-1.982-0.627 0.193-1.331 0.154-1.951-0.163z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="-969.76" gradientUnits="userSpaceOnUse" x2="682.97" gradientTransform="matrix(.3035 0 0 -.3016 -191.77 -278.58)" y1="-941.36" x1="682.97">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m21.5 9.5l-4.454 5-4.546-5h2.76c0.621-1.654-0.654-2.812-2.134-2.812-1.051 0-2.477 0.574-2.959 2.003-0.25 0.743-0.692 0.417-0.675-0.229 0.066-2.491 1.925-4.484 4.699-4.484 2.775 0 4.838 2.245 4.682 5.521h2.627z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="373.45" gradientUnits="userSpaceOnUse" x2="-181.18" y1="429.45" x1="-227.75">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m19.266 10.556l-2.262 2.428-2.204-2.512h1.21c0.951-2.104-0.611-4.721-2.496-4.751-1.357-0.105-2.825 1.385-3.566 2.279 0.472-2.116 1.981-2.984 4.302-2.988 2.344-0.004 3.977 1.943 3.459 5.461l1.557 0.083z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+</svg>

+ 226 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/24x24/apps/ubiquity.svg

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg2" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="24px" viewBox="0 0 24 24" width="24px" version="1.1" y="0px" x="0px" enable-background="new 0 0 24 24">
+<linearGradient id="rect2723_1_" y2="-37875" gradientUnits="userSpaceOnUse" x2="7635.7" gradientTransform="matrix(.0378 0 0 -.0109 -276.39 -387.33)" y1="-37633" x1="7635.7">
+	<stop style="stop-opacity:0" offset="0"/>
+	<stop offset=".5"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</linearGradient>
+<rect id="rect2723" opacity=".4021" height="2.637" width="18.235" y="21.363" x="2.882" enable-background="new    " fill="url(#rect2723_1_)"/>
+<radialGradient id="path2725_1_" gradientUnits="userSpaceOnUse" cy="-37753" cx="13191" gradientTransform="matrix(.0222 0 0 -.0109 -271.45 -387.33)" r="117.12">
+	<stop offset="0"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2725" opacity=".4021" d="m21.109 21.363v2.637c1.143 0.005 2.762-0.591 2.762-1.318 0-0.729-1.275-1.319-2.762-1.319z" enable-background="new    " fill="url(#path2725_1_)"/>
+<radialGradient id="path2727_1_" gradientUnits="userSpaceOnUse" cy="-37753" cx="-12551" gradientTransform="matrix(-.0222 0 0 -.0109 -275.59 -387.33)" r="117.13">
+	<stop offset="0"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2727" opacity=".4021" d="m2.891 21.363v2.637c-1.142 0.005-2.762-0.591-2.762-1.318 0-0.729 1.275-1.319 2.762-1.319z" enable-background="new    " fill="url(#path2727_1_)"/>
+<linearGradient id="rect2992_1_" y2="-1319.1" gradientUnits="userSpaceOnUse" x2="1276.1" gradientTransform="matrix(.1905 0 0 -.2485 -231.05 -305.4)" y1="-1302.7" x1="1276.1">
+	<stop style="stop-color:#7A7A7A" offset="0"/>
+	<stop style="stop-color:#474747" offset="1"/>
+</linearGradient>
+<path id="rect2992" stroke-linejoin="round" d="m23.5 18.5c-0.466 3.38-0.352 3.982-1.195 3.982-0.332 0.048-13.338 0-20.655 0-0.917 0-0.686 0.064-1.15-3.979l23-0.003z" stroke="#353537" fill="url(#rect2992_1_)"/>
+<linearGradient id="rect9146_1_" y2="-361.88" gradientUnits="userSpaceOnUse" x2="126.29" gradientTransform="matrix(.7376 0 0 -.5393 -77.147 -174.67)" y1="-361.88" x1="108.66">
+	<stop offset="0"/>
+	<stop style="stop-color:#bbb;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="rect9146" d="m2.7 19h13.3v3h-13l-0.3-3z" fill="url(#rect9146_1_)"/>
+<linearGradient id="path9148_1_" y2="-360.33" gradientUnits="userSpaceOnUse" x2="115.77" gradientTransform="matrix(.7376 0 0 -.5393 -77.734 -173.96)" y1="-363.77" x1="115.83">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path9148" opacity=".8114" d="m3 22l-0.2-2.163c1.354 1.714 6.32 2.163 9.743 2.163h-9.543z" enable-background="new    " fill="url(#path9148_1_)"/>
+<radialGradient id="rect2990_1_" gradientUnits="userSpaceOnUse" cy="97.812" cx="-89.706" gradientTransform="matrix(1.5194 .0037 .003 -1.2368 143.22 126.64)" r="12">
+	<stop style="stop-color:#E6E6E6" offset="0"/>
+	<stop style="stop-color:#C8C8C8" offset="1"/>
+</radialGradient>
+<linearGradient id="rect2990_2_" y2="424.15" gradientUnits="userSpaceOnUse" x2="-281.04" y1="419" x1="-275.9">
+	<stop style="stop-color:#969696" offset="0"/>
+	<stop style="stop-color:#B4B4B4" offset="1"/>
+</linearGradient>
+<path id="rect2990" stroke-linejoin="round" d="m2.5 2l-1.978 16.482c-0.015 0-0.022 0.006-0.022 0.018h23c0-0.012-0.008-0.018-0.023-0.018l-1.977-16.482c-0.1-0.827-1.167-1.5-2-1.5h-15c-0.833 0-1.901 0.673-2 1.5z" stroke="url(#rect2990_2_)" stroke-linecap="round" fill="url(#rect2990_1_)"/>
+<path id="path2215" opacity=".6" stroke-linejoin="round" d="m1.499 18.5h21.002" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="-1520" cx="283.58" gradientTransform="matrix(.5238 0 0 -.2143 -136.54 -305.22)" r="21">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<rect id="rect6300-3" opacity=".2" height="3" width="22" y="19" x="1" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+<g id="g9164" transform="matrix(.066101 -.011416 .0079191 .045854 -.89214 -6.4254)">
+	<path id="path9166" d="m48.304 190.28c0.311 4.252 5.022 7.714 10.51 7.717 5.489-0.007 9.642-3.467 9.278-7.71-0.365-4.233-5.075-7.642-10.512-7.643-5.436-0.01-9.589 3.39-9.276 7.63z" fill="#E6E6E6"/>
+		<radialGradient id="path9168_1_" gradientUnits="userSpaceOnUse" cy="-71201" cx="25064" gradientTransform="matrix(.165 .0285 .0198 -.1144 -2669.4 -8671.9)" r="2.5635">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9168" d="m51.853 187.29c-0.5 0.536-1.076 1.393-1.073 2.544-0.004 0.095 0.002 0.171 0.005 0.267 0.219 2.919 3.896 5.4 8.026 5.395 2.356 0.001 4.508-0.816 5.757-2.177 0.535-0.58 1.146-1.546 1.034-2.831-0.25-2.905-3.924-5.353-8.016-5.35-2.343-0.01-4.486 0.8-5.733 2.15z" fill="url(#path9168_1_)"/>
+</g>
+<g id="g9170" transform="matrix(.067079 0 0 .046533 15.651 -7.2131)">
+	<path id="path9172" d="m48.296 190.28c0.32 4.25 5.037 7.713 10.511 7.713 5.503 0 9.652-3.463 9.288-7.713-0.379-4.229-5.066-7.639-10.511-7.639s-9.594 3.41-9.288 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9174_1_" gradientUnits="userSpaceOnUse" cy="-68407" cx="22622" gradientTransform="matrix(.1674 0 0 -.1161 -3728.9 -7754)" r="2.5654">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9174" d="m51.848 187.29c-0.495 0.546-1.077 1.406-1.077 2.55 0 0.094 0 0.178 0.015 0.262 0.218 2.917 3.887 5.404 8.022 5.404 2.358 0 4.513-0.829 5.765-2.183 0.524-0.577 1.136-1.543 1.034-2.833-0.247-2.896-3.916-5.352-8.022-5.352-2.33 0-4.485 0.8-5.737 2.15z" fill="url(#path9174_1_)"/>
+</g>
+<radialGradient id="path8469_1_" gradientUnits="userSpaceOnUse" cy="-2066.2" cx="1373.1" gradientTransform="matrix(.1861 -.0031 -.0014 -.1807 -246.79 -352.79)" r="78.725">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8469" d="m14.531 1.813c-0.277 0-0.524 0.081-0.719 0.219s-0.336 0.35-0.344 0.594c-0.025 0.75-0.408 1.289-1.125 1.781-0.711 0.488-1.755 0.9-3 1.281-0.01 0.003-0.021-0.003-0.031 0-0.471 0.099-1.245 0.376-2 0.656-0.765 0.284-1.464 0.558-1.781 0.781-1.597 1.005-2.583 2.342-2.718 3.813-0.124 1.339 0.479 2.679 1.656 3.75 1.722 1.566 4.535 2.5 7.531 2.5s5.809-0.934 7.531-2.5c1.074-0.978 1.656-2.155 1.656-3.375 0-0.099 0.012-0.242 0-0.374-0.119-1.292-0.916-2.485-2.187-3.439-0.036-0.504-0.344-4.875-0.344-4.875-0.018-0.244-0.176-0.457-0.375-0.594s-0.442-0.219-0.719-0.219h-3.031zm0 0.531h3.031c0.067 0 0.125 0.019 0.156 0.031l0.376 5.125c-0.004 0.021-0.004 0.042 0 0.063 0.01 0.012 0.02 0.022 0.031 0.031 0.016 0.025 0.037 0.047 0.063 0.063 1.232 0.843 1.959 2.127 2.063 3.25 0.129 1.395-0.699 2.549-2.188 3.406s-3.625 1.375-6.063 1.375c-2.437 0-4.574-0.518-6.063-1.375s-2.316-2.012-2.188-3.406c0.112-1.201 0.957-2.537 2.345-3.407 0.012-0.009 0.022-0.02 0.031-0.031 0.004-0.004 0.069-0.048 0.156-0.094s0.208-0.095 0.344-0.156c0.271-0.123 0.601-0.264 0.969-0.406 0.735-0.284 1.568-0.55 1.969-0.625 0.01 0.001 0.021 0.001 0.031 0 1.209-0.368 2.358-0.807 3.25-1.406 0.874-0.587 1.504-1.369 1.563-2.406 0.02-0.011 0.06-0.032 0.124-0.032z" fill="url(#path8469_1_)"/>
+<radialGradient id="path9156_1_" gradientUnits="userSpaceOnUse" cy="4937.7" cx="2944.6" gradientTransform="matrix(.0925 0 0 .0872 -260.67 -422.74)" r="78.727">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6718"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9156" d="m12 13c-1.683 0-2.972-0.845-3-1.965v-0.036c0-0.406 0.169-0.791 0.49-1.118 0.544-0.551 1.482-0.881 2.51-0.881 1.027 0 1.966 0.33 2.51 0.881 0.33 0.335 0.5 0.735 0.49 1.154-0.027 1.12-1.318 1.965-3 1.965zm0.05-2.746c-1.581 0-2.436 0.21-2.417 0.974 0.018 0.753 1.078 1.354 2.367 1.354s2.35-0.601 2.367-1.354c0.02-0.764-0.736-0.974-2.317-0.974z" fill="url(#path9156_1_)"/>
+<radialGradient id="path8473_1_" gradientUnits="userSpaceOnUse" cy="-7435.8" cx="2061" gradientTransform="matrix(.1001 -.0234 -.0082 -.0597 -258.67 -391.16)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path8473" d="m4.969 1.75c-0.068 0.018-0.124 0.064-0.156 0.125-0.013 0.02-0.024 0.04-0.031 0.063l-0.063 0.218-0.844 3.25-0.125 0.532c-0.006 0.031-0.006 0.063 0 0.094 0.004 0.033 0.015 0.065 0.031 0.094 0.032 0.061 0.089 0.106 0.157 0.124 0.041 0.011 0.084 0.011 0.125 0l0.406-0.125 6.875-2.031h0.031 0.031 0.032c0.022-0.007 0.043-0.018 0.062-0.031 0.46-0.254 0.695-0.743 0.75-1.188 0.028-0.228 0.008-0.457-0.062-0.656-0.041-0.113-0.127-0.221-0.219-0.313-0.093-0.091-0.212-0.161-0.375-0.156h-6.563c-0.02-0.002-0.042-0.002-0.062 0zm0.5 0.688h5.906c-0.015 0.078-0.035 0.131-0.063 0.219-0.049 0.162-0.145 0.293-0.124 0.281l-6.25 1.812 0.531-2.312z" fill="url(#path8473_1_)"/>
+<g id="g9158" transform="matrix(-.097811 0 0 .10767 8.1622 -3.8183)">
+	<path id="path9160" d="m48.299 190.28c0.315 4.254 5.027 7.709 10.513 7.709 5.491 0 9.645-3.456 9.275-7.709-0.364-4.227-5.067-7.637-10.503-7.637s-9.594 3.41-9.285 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9162_1_" gradientUnits="userSpaceOnUse" cy="-11004" cx="13805" gradientTransform="matrix(-.2441 0 0 -.2687 3428 -2766.7)" r="2.5646">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9162" d="m51.849 187.29c-0.499 0.535-1.073 1.397-1.073 2.54 0 0.091 0.005 0.181 0.01 0.272 0.22 2.921 3.894 5.397 8.027 5.397 2.351 0 4.503-0.825 5.751-2.186 0.539-0.58 1.148-1.542 1.038-2.83-0.25-2.902-3.924-5.351-8.022-5.351-2.337 0.01-4.478 0.8-5.731 2.16z" fill="url(#path9162_1_)"/>
+</g>
+<g id="g9190" transform="matrix(.097811 0 0 .10767 15.777 -3.8183)">
+	<path id="path9192" d="m48.307 190.28c0.31 4.254 5.012 7.709 10.503 7.709s9.645-3.456 9.285-7.709c-0.369-4.227-5.072-7.637-10.513-7.637s-9.595 3.41-9.275 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9194_1_" fx="10035" gradientUnits="userSpaceOnUse" cy="-11004" cx="10034" gradientTransform="matrix(.2441 0 0 -.2687 -2391.2 -2766.7)" r="2.5637">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9194" d="m51.851 187.3c-0.499 0.535-1.068 1.397-1.068 2.54v0.272c0.22 2.921 3.894 5.397 8.027 5.397 2.356 0 4.513-0.825 5.751-2.186 0.539-0.58 1.158-1.542 1.038-2.83-0.25-2.902-3.914-5.351-8.017-5.351-2.336 0-4.483 0.79-5.731 2.16z" fill="url(#path9194_1_)"/>
+</g>
+<radialGradient id="path2638_1_" gradientUnits="userSpaceOnUse" cy="-1492.8" cx="-15.743" gradientTransform="matrix(1.1045 0 0 -.2148 29.515 -307.24)" r="8.0625">
+	<stop style="stop-color:#0D0D0D" offset="0"/>
+	<stop style="stop-color:#0D0D0D;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2638" opacity=".1629" d="m21.032 13.363c0 0.957-3.987 1.731-8.905 1.731s-8.905-0.774-8.905-1.731c0-0.956 3.987-1.731 8.905-1.731s8.905 0.775 8.905 1.731z" enable-background="new    " fill="url(#path2638_1_)"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="1229" cx="1553.4" gradientTransform="matrix(-.00013190 .236 .3747 0 -457.4 -365.65)" r="38.214">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="458.6" cx="-189.38" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m12.091 0.501c-0.711 0-1.283 0.571-1.283 1.275 0 0.705 0.572 1.275 1.283 1.275s1.294-0.571 1.293-1.275c0.001-0.704-0.582-1.275-1.293-1.275zm-3.82 1.275c-0.641 0.047-1.256 0.206-1.825 0.438l1.154 1.953c0.294-0.092 0.6-0.143 0.922-0.159 0.063-0.003 0.126 0 0.19 0 1.767 0 3.242 1.229 3.609 2.869h2.296c-0.163-1.192-0.692-2.272-1.464-3.128-0.317 0.169-0.678 0.259-1.063 0.259-1.208 0-2.2-0.939-2.256-2.122-0.363-0.069-0.739-0.11-1.123-0.11-0.077 0-0.154-0.002-0.23 0-0.025 0.001-0.045-0.001-0.07 0-0.023 0.001-0.047-0.001-0.07 0-0.022 0.001-0.048-0.001-0.07 0zm-3.208 1.236c-0.925 0.713-1.63 1.694-2.005 2.819 0.593 0.402 0.982 1.078 0.982 1.843 0 0.766-0.389 1.441-0.982 1.843 0.375 1.125 1.08 2.107 2.005 2.82l1.143-1.963c-0.735-0.67-1.193-1.633-1.193-2.7 0-1.066 0.459-2.028 1.193-2.7l-1.143-1.962zm-3.269 3.387c-0.711 0-1.293 0.571-1.293 1.275 0 0.705 0.582 1.275 1.293 1.275s1.283-0.571 1.283-1.275c0.001-0.704-0.572-1.275-1.283-1.275zm10.528 2.072c-0.368 1.641-1.843 2.869-3.61 2.869-0.391 0-0.76-0.058-1.113-0.169l-1.153 1.953c0.699 0.285 1.463 0.448 2.266 0.448 0.384 0 0.759-0.041 1.123-0.11 0.056-1.133 0.976-2.05 2.116-2.122 0.048-0.003 0.091 0 0.14 0 0.385 0 0.747 0.091 1.063 0.259 0.771-0.856 1.301-1.936 1.464-3.128h-2.296zm-0.231 3.826c-0.711 0-1.283 0.57-1.283 1.275 0 0.703 0.572 1.275 1.283 1.275s1.293-0.572 1.293-1.275c0.001-0.705-0.581-1.275-1.293-1.275z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+	<polygon points="7.005 8.799 6.259 6.722 4.319 8.24 5.58 8.416" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="9.673 9.713 9.736 9.74 9.738 9.696" fill="none"/>
+	<polygon points="9.736 9.74 11.626 10.539 12.167 9.184 9.673 9.713" fill="#009FE8"/>
+	<polygon points="6.682 10.374 9.673 9.713 7.005 8.799" fill="#B2DEF0"/>
+	<polygon points="4.319 8.24 4.69 10.829 5.58 8.416" fill="#009FE8"/>
+	<polygon points="5.582 8.416 4.69 10.829 7.005 8.799" fill="#0091DA"/>
+	<polygon points="4.69 10.829 6.682 10.374 7.005 8.799" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="6.693 4.321 6.707 4.339 6.709 4.327" fill="none"/>
+	<polygon points="6.259 6.722 7.834 6.791 7.87 5.694" fill="#0062B0"/>
+	<polygon points="9.646 8.15 7.834 6.791 7.005 8.799" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="6.712 4.311 6.693 4.321 6.709 4.327" fill="none"/>
+	<polygon points="7.005 8.799 7.834 6.791 6.259 6.722" fill="#009FE8"/>
+	<polygon points="10.04 14.336 10.048 13.538 10.051 13.538 9.362 13.127" fill="#0062B0"/>
+	<polygon points="8.106 14.307 10.04 14.336 9.362 13.127" fill="#004380"/>
+	<polygon points="9.362 13.127 10.051 13.538 10.061 13.532 10.58 11.654" fill="#004380"/>
+	<polygon points="12.418 14.159 13.852 12.819 12.081 13.025" fill="#0062B0"/>
+	<polygon points="10.534 15.287 12.512 15.291 12.418 14.159 11.167 14.462 12.418 14.159 12.081 13.025" fill="#004380"/>
+	<polygon points="10.061 13.532 11.524 12.34 10.58 11.654" fill="#0062B0"/>
+	<polygon points="13.852 12.819 13.124 11.316 12.081 13.025" fill="#004380"/>
+	<polygon points="2.937 14.777 4.828 14.777 3.641 13.931" fill="#004380"/>
+	<polygon points="7.529 2.892 8.468 2.521 9.391 0.972" fill="#0091DA"/>
+	<polygon points="7.756 1.623 5.895 3.542 7.085 2.809" fill="#0091DA"/>
+	<polygon points="11.545 12.34 12.081 13.025 13.124 11.316 10.58 11.654" fill="#0091DA"/>
+	<polygon points="8.468 2.521 7.529 2.892 8.605 3.338" fill="#009FE8"/>
+	<polygon points="7.269 2.849 7.754 1.634 7.08 2.815" fill="#B2DEF0"/>
+	<polygon points="8.468 2.521 8.605 3.338 9.391 0.975" fill="#B2DEF0"/>
+	<polygon points="4.295 13.146 3.641 13.931 5.069 13.048 3.894 12.177" fill="#0091DA"/>
+	<polygon points="4.347 6.388 4.319 8.24 6.259 6.722" fill="#009FE8"/>
+	<polygon points="4.828 14.777 5.069 13.048 3.641 13.931" fill="#0062B0"/>
+	<polygon points="13.124 11.316 13.036 9.486 11.626 10.539" fill="#0062B0"/>
+	<polygon points="10.58 11.654 13.124 11.316 11.626 10.539" fill="#009FE8"/>
+	<polygon points="11.626 10.539 13.036 9.486 12.167 9.184" fill="#0091DA"/>
+	<polygon points="13.036 9.486 14.502 8.624 13.964 8.215" fill="#0091DA"/>
+	<polygon points="9.545 10.961 10.58 11.654 11.626 10.539" fill="#0062B0"/>
+	<polygon points="12.933 8.769 12.167 9.184 13.036 9.486 13.964 8.215" fill="#009FE8"/>
+	<polygon points="8.503 11.511 9.545 10.961 6.682 10.374" fill="#004380"/>
+	<polygon points="9.673 9.713 9.545 10.961 11.626 10.539" fill="#0091DA"/>
+	<polygon points="9.673 9.713 6.682 10.374 9.545 10.961" fill="#0062B0"/>
+	<polygon points="15.021 6.635 15.68 7.46 15.694 7.446 16.748 6.093" fill="#B2DEF0"/>
+	<polygon points="15.322 8.785 16.43 8.382 15.68 7.46" fill="#0091DA"/>
+	<polygon points="15.68 7.46 14.488 8.626 15.318 8.787" fill="#0062B0"/>
+	<polygon points="13.964 8.215 14.504 8.628 15.021 6.635" fill="#009FE8"/>
+	<polygon points="15.68 7.46 16.43 8.386 16.752 6.093" fill="#009FE8"/>
+	<polygon points="15.021 6.635 14.488 8.626 15.68 7.46" fill="#0091DA"/>
+	<polygon points="7.08 12.081 8.503 11.511 6.682 10.374" fill="#0091DA"/>
+	<polygon points="6.259 6.722 4.379 4.44 4.347 6.388" fill="#0091DA"/>
+	<polygon points="5.902 3.481 4.379 4.44 6.052 4.859" fill="#0091DA"/>
+	<polygon points="6.052 4.859 4.379 4.44 6.259 6.722" fill="#009FE8"/>
+	<polygon points="4.347 6.388 4.379 4.44 3.645 6.004 4.335 6.387" fill="#009FE8"/>
+	<polygon points="6.259 6.722 6.707 4.339 6.693 4.321 5.902 3.481 6.052 4.859" fill="#0062B0"/>
+	<polygon points="6.707 4.339 7.085 2.809 5.902 3.48 6.693 4.321" fill="#009FE8"/>
+	<polygon points="2.603 7.799 4.335 6.387 3.645 6.004" fill="#0062B0"/>
+	<polygon points="2.603 7.799 4.319 8.24 4.347 6.388 4.335 6.387" fill="#0091DA"/>
+	<polygon points="5.069 13.048 5.829 11.853 4.69 10.829" fill="#004380"/>
+	<polygon points="5.829 11.853 7.08 12.081 6.682 10.374" fill="#009FE8"/>
+	<polygon points="3.894 12.177 5.069 13.048 4.69 10.829" fill="#0062B0"/>
+	<polygon points="4.69 10.829 5.829 11.853 6.682 10.374" fill="#0062B0"/>
+	<polygon points="3.584 10.265 4.319 8.24 2.603 7.799" fill="#0062B0"/>
+	<polygon points="3.584 10.265 3.894 12.177 4.69 10.829" fill="#009FE8"/>
+	<polygon points="4.319 8.24 3.584 10.265 4.69 10.829" fill="#0091DA"/>
+	<polygon points="12.167 9.184 9.646 8.15 9.673 9.713" fill="#B2DEF0"/>
+	<polygon points="9.673 9.713 9.673 9.713 9.646 8.15 7.005 8.799" fill="#009FE8"/>
+	<polygon points="6.707 4.339 6.259 6.722 7.87 5.694" fill="#0091DA"/>
+	<polygon points="6.707 4.339 7.87 5.694 9.043 5.109 6.709 4.327" fill="#009FE8"/>
+	<polygon points="7.834 6.791 9.043 5.109 7.87 5.694" fill="#B2DEF0"/>
+	<polygon points="6.707 4.339 9.043 5.109 8.605 3.338" fill="#B2DEF0"/>
+	<polygon points="8.605 3.338 7.529 2.892 7.085 2.809 6.707 4.337" fill="#0091DA"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="-2413.5" cx="41897" gradientTransform="matrix(.0092 .0061 .0359 -.0536 -295.83 -379.74)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m5.007 3.392c-0.776 0.64-1.375 1.483-1.717 2.445 0.559 0.424 0.927 1.085 0.927 1.836s-0.368 1.413-0.927 1.837c0.342 0.962 0.941 1.806 1.717 2.445l0.956-1.643c-0.69-0.673-1.122-1.605-1.122-2.639 0-1.033 0.433-1.964 1.122-2.638l-0.956-1.643zm-0.078 0.474l0.644 1.121c-0.617 0.68-1.009 1.566-1.044 2.542-0.039-0.71-0.371-1.347-0.868-1.798 0.285-0.71 0.722-1.346 1.268-1.865zm-0.4 3.952c0.035 0.976 0.426 1.862 1.044 2.542l-0.644 1.121c-0.546-0.519-0.983-1.155-1.269-1.865 0.499-0.451 0.83-1.088 0.869-1.798z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="-7180.3" cx="6547.6" gradientTransform="matrix(.0397 -.0014 -.002 -.0553 -273.23 -380.53)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m1.668 6.64c-0.52 0.058-0.922 0.501-0.922 1.033 0 0.572 0.466 1.034 1.044 1.034s1.044-0.462 1.044-1.034-0.467-1.033-1.045-1.033c-0.038 0-0.069-0.001-0.084 0-0.012 0.001-0.024-0.002-0.037 0zm0.028 0.295c0.012-0.001 0.025 0.001 0.038 0h0.056c0.417 0 0.746 0.326 0.746 0.738s-0.33 0.739-0.747 0.739-0.745-0.326-0.745-0.739c0-0.381 0.285-0.692 0.652-0.738z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="-7847.6" cx="7146.7" gradientTransform="matrix(.0365 -.0013 -.0018 -.0508 -263.81 -388.14)" r="26.262">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m11.943 0.826c-0.478 0.053-0.848 0.46-0.848 0.95 0 0.526 0.429 0.95 0.96 0.95s0.958-0.424 0.958-0.95-0.428-0.95-0.958-0.95c-0.035 0-0.064-0.001-0.077 0-0.012 0.001-0.023-0.002-0.035 0zm0.026 0.271c0.011-0.001 0.023 0.001 0.034 0h0.052c0.383 0 0.685 0.3 0.685 0.679s-0.302 0.679-0.685 0.679-0.685-0.299-0.685-0.679c0-0.351 0.261-0.637 0.599-0.679z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="-3711" cx="39383" gradientTransform="matrix(.00057345 .0107 -.0631 .0035 -248.88 -406.85)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m6.837 2.355c0.924-0.332 1.934-0.415 2.917-0.226 0.082 0.677 0.459 1.311 1.095 1.683 0.635 0.371 1.376 0.391 2.012 0.133 0.645 0.762 1.062 1.68 1.219 2.644l-1.863-0.014c-0.228-0.909-0.803-1.731-1.677-2.242s-1.875-0.61-2.787-0.368l-0.916-1.61zm0.439 0.169l0.63 1.092c0.88-0.179 1.824-0.068 2.666 0.385-0.581-0.383-0.956-0.976-1.091-1.614-0.742-0.113-1.496-0.063-2.205 0.137zm3.541 1.621c0.808 0.512 1.365 1.276 1.634 2.129l1.267 0.016c-0.169-0.713-0.491-1.393-0.95-1.982-0.628 0.193-1.331 0.154-1.951-0.163z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="-965.45" gradientUnits="userSpaceOnUse" x2="680.68" gradientTransform="matrix(.3035 0 0 -.3016 -191.08 -277.28)" y1="-937.05" x1="680.68">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m21.5 9.5l-4.454 5-4.546-5h2.76c0.621-1.654-0.654-2.812-2.134-2.812-1.051 0-2.477 0.574-2.959 2.003-0.25 0.743-0.692 0.417-0.675-0.229 0.066-2.491 1.925-4.484 4.699-4.484 2.775 0 4.838 2.245 4.682 5.521h2.627z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="374.45" gradientUnits="userSpaceOnUse" x2="-180.18" y1="430.45" x1="-226.75">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m19.266 10.556l-2.262 2.428-2.204-2.512h1.21c0.951-2.104-0.611-4.721-2.496-4.751-1.357-0.105-2.825 1.385-3.566 2.279 0.472-2.116 1.981-2.984 4.302-2.988 2.344-0.004 3.977 1.943 3.459 5.461l1.557 0.083z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+</svg>

+ 227 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/32x32/apps/ubiquity.svg

@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg3786" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="32px" viewBox="0 0 32 32" width="32px" version="1.1" y="0px" x="0px" enable-background="new 0 0 32 32">
+<g id="g6029" enable-background="new    " transform="matrix(.66666 0 0 .626 -3.3331 3.797)">
+		<linearGradient id="rect2723_1_" y2="-47486" gradientUnits="userSpaceOnUse" x2="8420.5" gradientTransform="matrix(.0509 0 0 -.0137 -399.64 -608.02)" y1="-47243" x1="8420.5">
+		<stop style="stop-opacity:0" offset="0"/>
+		<stop offset=".5"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</linearGradient>
+		<rect id="rect2723" opacity=".4021" height="5.307" width="36.869" y="38.148" x="10.565" enable-background="new    " fill="url(#rect2723_1_)"/>
+		<radialGradient id="path2725_1_" gradientUnits="userSpaceOnUse" cy="-47435" cx="14616" gradientTransform="matrix(.0299 0 0 -.0137 -389.42 -608.02)" r="117.15">
+		<stop offset="0"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</radialGradient>
+	<path id="path2725" opacity=".4021" d="m47.416 38.15v5.306c2.31 0.009 5.584-1.189 5.584-2.654 0-1.464-2.578-2.652-5.584-2.652z" enable-background="new    " fill="url(#path2725_1_)"/>
+		<radialGradient id="path2727_1_" gradientUnits="userSpaceOnUse" cy="-47435" cx="-13633" gradientTransform="matrix(-.0299 0 0 -.0137 -397.15 -608.02)" r="117.14">
+		<stop offset="0"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</radialGradient>
+	<path id="path2727" opacity=".4021" d="m10.583 38.15v5.306c-2.309 0.009-5.583-1.189-5.583-2.654 0-1.464 2.577-2.652 5.583-2.652z" enable-background="new    " fill="url(#path2727_1_)"/>
+</g>
+<linearGradient id="rect6431_1_" y2="-413.56" gradientUnits="userSpaceOnUse" x2="156.36" gradientTransform="matrix(.6887 0 0 -.5067 -91.636 -179.77)" y1="-404.56" x1="156.29">
+	<stop style="stop-color:#7A7A7A" offset="0"/>
+	<stop style="stop-color:#474747" offset="1"/>
+</linearGradient>
+<path id="rect6431" stroke-linejoin="round" d="m0.508 25.486h30.984l-0.619 4.05h-29.677l-0.688-4.05v0z" stroke="#353537" stroke-linecap="round" stroke-width=".928" fill="url(#rect6431_1_)"/>
+<rect id="rect6381" height="1" width="31" y="25" x=".5" fill="#D2D2D3"/>
+<radialGradient id="path6345_1_" gradientUnits="userSpaceOnUse" cy="-3.168" cx="-71.059" gradientTransform="matrix(1.4045 0 0 -.9375 109.8 8.0292)" r="16">
+	<stop style="stop-color:#E6E6E6" offset="0"/>
+	<stop style="stop-color:#C8C8C8" offset="1"/>
+</radialGradient>
+<linearGradient id="path6345_2_" y2="426.75" gradientUnits="userSpaceOnUse" x2="-267.68" y1="413.2" x1="-261.86">
+	<stop style="stop-color:#969696" offset="0"/>
+	<stop style="stop-color:#B4B4B4" offset="1"/>
+</linearGradient>
+<path id="path6345" stroke-linejoin="round" d="m31.502 25.502l-4.682-17.121c-0.131-0.487-0.825-0.883-1.408-0.883h-18.985c-0.896 0-1.409 0.132-1.598 0.883l-4.331 17.104" stroke="url(#path6345_2_)" stroke-linecap="round" stroke-width=".9958" fill="url(#path6345_1_)"/>
+<path id="path7046" opacity=".35" d="m30.5 25.508l-29-0.016" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+<g id="g9164" enable-background="new    " transform="matrix(.067079 0 0 .046533 2.4612 -.21308)">
+	<path id="path9166" d="m48.301 190.28c0.313 4.25 5.023 7.713 10.511 7.713s9.645-3.463 9.281-7.713c-0.364-4.229-5.074-7.639-10.511-7.639s-9.594 3.41-9.281 7.64z" fill="#F0F0F0"/>
+		<radialGradient id="path9168_1_" fy="-67731" gradientUnits="userSpaceOnUse" cy="-67732" cx="22522" gradientTransform="matrix(.1674 0 0 -.1161 -3712.1 -7675.5)" r="2.5647">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9168" d="m51.853 187.29c-0.502 0.546-1.077 1.406-1.077 2.55 0 0.094 0.007 0.178 0.007 0.262 0.218 2.917 3.894 5.404 8.029 5.404 2.351 0 4.506-0.829 5.751-2.183 0.539-0.577 1.15-1.543 1.041-2.833-0.255-2.896-3.923-5.352-8.022-5.352-2.337 0-4.477 0.8-5.729 2.15z" fill="url(#path9168_1_)"/>
+</g>
+<g id="g9170" enable-background="new    " transform="matrix(.067079 0 0 .046533 21.361 -.21308)">
+	<path id="path9172" d="m48.309 190.28c0.306 4.25 5.008 7.713 10.511 7.713 5.474 0 9.638-3.463 9.259-7.713-0.349-4.229-5.066-7.639-10.497-7.639s-9.593 3.41-9.273 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9174_1_" fx="22241" fy="-67731" gradientUnits="userSpaceOnUse" cy="-67732" cx="22240" gradientTransform="matrix(.1674 0 0 -.1161 -3665 -7675.5)" r="2.5641">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9174" d="m51.862 187.29c-0.51 0.546-1.077 1.406-1.077 2.55v0.262c0.218 2.917 3.902 5.404 8.036 5.404 2.344 0 4.499-0.829 5.736-2.183 0.553-0.577 1.165-1.543 1.048-2.833-0.262-2.896-3.931-5.352-8.022-5.352-2.344 0-4.484 0.8-5.721 2.15z" fill="url(#path9174_1_)"/>
+</g>
+<radialGradient id="path3829_1_" gradientUnits="userSpaceOnUse" cy="-2070.8" cx="988.84" gradientTransform="matrix(.2457 -.0031 -.0018 -.1777 -231.22 -341.84)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path3829" d="m19.336 8.877c-0.355 0-0.676 0.08-0.928 0.215s-0.451 0.359-0.464 0.646c-0.032 0.688-0.534 1.206-1.485 1.691-0.946 0.482-2.311 0.884-3.96 1.26-0.011 0.003-0.021-0.003-0.031 0-0.615 0.096-1.64 0.338-2.631 0.615-0.99 0.275-1.9 0.583-2.32 0.799-0.005 0.003-0.026-0.002-0.031 0-2.091 0.987-3.404 2.316-3.589 3.812-0.169 1.367 0.641 2.727 2.197 3.78 2.275 1.542 5.958 2.429 9.901 2.429 3.942 0 7.655-0.885 9.932-2.429 1.422-0.963 2.196-2.165 2.196-3.412 0-0.136-0.018-0.267-0.029-0.368-0.163-1.308-1.186-2.506-2.848-3.442-0.053-0.543-0.464-4.765-0.464-4.765-0.026-0.286-0.239-0.48-0.495-0.615s-0.574-0.215-0.928-0.215h-4.023zm0 0.645h4.023c0.081 0 0.141 0.02 0.186 0.031l0.464 5.01c-0.001 0.011-0.001 0.021 0 0.03 0.007 0.022 0.019 0.043 0.03 0.062 0.022 0.039 0.055 0.07 0.094 0.092 1.629 0.831 2.592 2.082 2.723 3.135 0.081 0.655-0.138 1.258-0.619 1.814-0.482 0.557-1.246 1.052-2.228 1.475-1.962 0.846-4.789 1.353-8.014 1.353s-6.052-0.507-8.014-1.353c-0.981-0.422-1.746-0.917-2.228-1.474s-0.7-1.159-0.619-1.814c0.14-1.128 1.196-2.431 3.032-3.289 0.01 0.001 0.021 0.001 0.031 0 0.004-0.002 0.1-0.046 0.217-0.091 0.117-0.046 0.284-0.124 0.464-0.185 0.36-0.12 0.812-0.26 1.3-0.399 0.975-0.279 2.06-0.539 2.599-0.615 0.01 0.001 0.021 0.001 0.031 0 1.595-0.362 3.126-0.794 4.302-1.383 1.129-0.566 1.934-1.328 2.042-2.367 0.028-0.012 0.094-0.032 0.184-0.032z" fill="url(#path3829_1_)"/>
+<radialGradient id="path9156_1_" gradientUnits="userSpaceOnUse" cy="4944.5" cx="2144.3" gradientTransform="matrix(.1233 0 0 .0863 -248.89 -411.81)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9156" d="m16 20c-2.243 0-3.963-0.836-3.999-1.945-0.001-0.012-0.001-0.024-0.001-0.035 0-0.401 0.225-0.783 0.654-1.105 0.724-0.547 1.975-0.873 3.346-0.873s2.622 0.326 3.346 0.873c0.441 0.332 0.668 0.727 0.653 1.141-0.036 1.108-1.756 1.944-3.999 1.944zm0.067-2.718c-2.108 0-3.249 0.208-3.224 0.965 0.025 0.744 1.438 1.339 3.157 1.339s3.132-0.595 3.156-1.339c0.026-0.757-0.981-0.965-3.089-0.965z" fill="url(#path9156_1_)"/>
+<radialGradient id="path3825_1_" gradientUnits="userSpaceOnUse" cy="-9143.7" cx="1747.4" gradientTransform="matrix(.1209 -.0155 -.0055 -.0461 -249.51 -382.67)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".2775"/>
+	<stop style="stop-color:#8C8C8C" offset=".5236"/>
+	<stop style="stop-color:#ddd" offset="1"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path3825" d="m7.406 9.114c-0.012 0.007-0.022 0.017-0.03 0.028-0.012 0.007-0.022 0.017-0.03 0.028l-0.09 0.197-0.956 2.925-0.179 0.478c-0.002 0.009-0.002 0.019 0 0.028-0.002 0.009-0.002 0.019 0 0.028 0.007 0.012 0.018 0.021 0.03 0.028 0.007 0.012 0.018 0.021 0.03 0.029 0.01 0.002 0.02 0.002 0.03 0 0.01 0.002 0.02 0.002 0.03 0l0.478-0.112 8.276-1.828h0.03c0.009 0.001 0.02 0.001 0.029 0 0.468-0.194 0.747-0.619 0.807-0.985 0.03-0.181 0.019-0.338-0.06-0.506-0.084-0.179-0.305-0.343-0.538-0.338h-7.827c-0.01-0.001-0.02-0.001-0.03 0zm0.359 0.338h7.5c-0.011 0.07-0.031 0.209-0.09 0.365-0.058 0.156-0.151 0.298-0.239 0.337l-7.888 1.744 0.717-2.446z" fill="url(#path3825_1_)"/>
+<g id="g9158" enable-background="new    " transform="matrix(-.097811 0 0 .10767 9.1622 3.1817)">
+	<path id="path9160" d="m48.3 190.28c0.314 4.254 5.027 7.709 10.513 7.709 5.491 0 9.645-3.456 9.275-7.709-0.364-4.227-5.067-7.637-10.503-7.637s-9.595 3.41-9.285 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9162_1_" fx="13607" gradientUnits="userSpaceOnUse" cy="-10894" cx="13606" gradientTransform="matrix(-.2441 0 0 -.2687 3379.6 -2737.1)" r="2.563">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9162" d="m51.849 187.29c-0.499 0.535-1.073 1.397-1.073 2.54 0 0.091 0.005 0.181 0.01 0.272 0.22 2.921 3.894 5.397 8.027 5.397 2.351 0 4.503-0.825 5.751-2.186 0.539-0.58 1.148-1.542 1.038-2.83-0.25-2.902-3.924-5.351-8.022-5.351-2.336 0.01-4.478 0.8-5.731 2.16z" fill="url(#path9162_1_)"/>
+</g>
+<g id="g9190" enable-background="new    " transform="matrix(.097811 0 0 .10767 22.777 3.1817)">
+	<path id="path9192" d="m48.307 190.28c0.31 4.254 5.012 7.709 10.503 7.709s9.645-3.456 9.285-7.709c-0.369-4.227-5.072-7.637-10.513-7.637s-9.595 3.41-9.275 7.64z" fill="#E6E6E6"/>
+		<radialGradient id="path9194_1_" fx="9836.5" gradientUnits="userSpaceOnUse" cy="-10894" cx="9835.9" gradientTransform="matrix(.2441 0 0 -.2687 -2342.8 -2737.1)" r="2.5637">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9194" d="m51.851 187.29c-0.499 0.535-1.068 1.397-1.068 2.54v0.272c0.22 2.921 3.894 5.397 8.027 5.397 2.356 0 4.513-0.825 5.751-2.186 0.539-0.58 1.158-1.542 1.038-2.83-0.25-2.902-3.914-5.351-8.017-5.351-2.336 0.01-4.483 0.8-5.731 2.16z" fill="url(#path9194_1_)"/>
+</g>
+<linearGradient id="rect9146_1_" y2="-350.46" gradientUnits="userSpaceOnUse" x2="98.172" gradientTransform="matrix(.793 0 0 -.5393 -58.854 -161.52)" y1="-350.46" x1="80.547">
+	<stop offset="0"/>
+	<stop style="stop-color:#bbb;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="rect9146" d="m4.7 26h14.3v3h-13.977l-0.323-3z" fill="url(#rect9146_1_)"/>
+<linearGradient id="path9148_1_" y2="-348.91" gradientUnits="userSpaceOnUse" x2="87.659" gradientTransform="matrix(.793 0 0 -.5393 -59.485 -160.8)" y1="-352.36" x1="87.714">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path9148" opacity=".8114" d="m5.022 29l-0.215-2.163c1.456 1.714 6.795 2.163 10.477 2.163h-10.262z" enable-background="new    " fill="url(#path9148_1_)"/>
+<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="-1497.4" cx="136.63" gradientTransform="matrix(.7143 0 0 -.2143 -81.59 -293.37)" r="20.999">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<rect id="rect6300-3" opacity=".2" height="3" width="30" y="26" x="1" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+<g id="图层_2">
+	<ellipse opacity=".1" cy="19.022" cx="9.945" rx="7.375" ry="1.253"/>
+</g>
+	<polygon points="8.507 10.932 7.498 8.12 4.873 10.175 6.579 10.413" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="12.118 12.169 12.203 12.204 12.205 12.145" fill="none"/>
+	<polygon points="12.203 12.204 14.761 13.286 15.492 11.452 12.118 12.169" fill="#009FE8"/>
+	<polygon points="8.07 13.063 12.118 12.169 8.507 10.932" fill="#B2DEF0"/>
+	<polygon points="4.873 10.175 5.375 13.678 6.579 10.413" fill="#009FE8"/>
+	<polygon points="6.582 10.413 5.375 13.678 8.507 10.932" fill="#0091DA"/>
+	<polygon points="5.375 13.678 8.07 13.063 8.507 10.932" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="8.085 4.872 8.104 4.896 8.107 4.879" fill="none"/>
+	<polygon points="7.498 8.12 9.63 8.213 9.678 6.73" fill="#0062B0"/>
+	<polygon points="12.082 10.053 9.63 8.213 8.507 10.932" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="8.111 4.857 8.085 4.872 8.107 4.879" fill="none"/>
+	<polygon points="8.507 10.932 9.63 8.213 7.498 8.12" fill="#009FE8"/>
+	<polygon points="12.614 18.424 12.625 17.345 12.629 17.345 11.697 16.787" fill="#0062B0"/>
+	<polygon points="9.997 18.384 12.614 18.424 11.697 16.787" fill="#004380"/>
+	<polygon points="11.697 16.787 12.629 17.345 12.643 17.337 13.344 14.795" fill="#004380"/>
+	<polygon points="15.832 18.185 17.771 16.372 15.376 16.648" fill="#0062B0"/>
+	<polygon points="13.283 19.711 15.959 19.716 15.832 18.185 14.14 18.594 15.832 18.185 15.376 16.648" fill="#004380"/>
+	<polygon points="12.643 17.337 14.622 15.722 13.344 14.795" fill="#0062B0"/>
+	<polygon points="17.771 16.372 16.787 14.337 15.376 16.648" fill="#004380"/>
+	<polygon points="3.003 19.022 5.561 19.022 3.955 17.876" fill="#004380"/>
+	<polygon points="9.217 2.938 10.487 2.436 11.736 0.339" fill="#0091DA"/>
+	<polygon points="9.523 1.221 7.006 3.817 8.616 2.826" fill="#0091DA"/>
+	<polygon points="14.651 15.722 15.376 16.648 16.787 14.337 13.344 14.795" fill="#0091DA"/>
+	<polygon points="10.487 2.436 9.217 2.938 10.673 3.542" fill="#009FE8"/>
+	<polygon points="8.865 2.88 9.52 1.235 8.609 2.833" fill="#B2DEF0"/>
+	<polygon points="10.487 2.436 10.673 3.542 11.736 0.343" fill="#B2DEF0"/>
+	<polygon points="4.84 16.814 3.955 17.876 5.888 16.681 4.297 15.502" fill="#0091DA"/>
+	<polygon points="4.911 7.669 4.873 10.175 7.498 8.12" fill="#009FE8"/>
+	<polygon points="5.561 19.022 5.888 16.681 3.955 17.876" fill="#0062B0"/>
+	<polygon points="16.787 14.337 16.668 11.86 14.761 13.286" fill="#0062B0"/>
+	<polygon points="13.344 14.795 16.787 14.337 14.761 13.286" fill="#009FE8"/>
+	<polygon points="14.761 13.286 16.668 11.86 15.492 11.452" fill="#0091DA"/>
+	<polygon points="16.668 11.86 18.652 10.694 17.924 10.141" fill="#0091DA"/>
+	<polygon points="11.945 13.857 13.344 14.795 14.761 13.286" fill="#0062B0"/>
+	<polygon points="16.528 10.891 15.492 11.452 16.668 11.86 17.924 10.141" fill="#009FE8"/>
+	<polygon points="10.534 14.601 11.945 13.857 8.07 13.063" fill="#004380"/>
+	<polygon points="12.118 12.169 11.945 13.857 14.761 13.286" fill="#0091DA"/>
+	<polygon points="12.118 12.169 8.07 13.063 11.945 13.857" fill="#0062B0"/>
+	<polygon points="19.355 8.003 20.245 9.119 20.267 9.1 21.69 7.27" fill="#B2DEF0"/>
+	<polygon points="19.761 10.912 21.26 10.367 20.245 9.119" fill="#0091DA"/>
+	<polygon points="20.245 9.119 18.633 10.696 19.756 10.915" fill="#0062B0"/>
+	<polygon points="17.924 10.141 18.655 10.699 19.355 8.003" fill="#009FE8"/>
+	<polygon points="20.245 9.119 21.26 10.372 21.696 7.27" fill="#009FE8"/>
+	<polygon points="19.355 8.003 18.633 10.696 20.245 9.119" fill="#0091DA"/>
+	<polygon points="8.609 15.372 10.534 14.601 8.07 13.063" fill="#0091DA"/>
+	<polygon points="7.498 8.12 4.954 5.033 4.911 7.669" fill="#0091DA"/>
+	<polygon points="7.015 3.734 4.954 5.033 7.218 5.6" fill="#0091DA"/>
+	<polygon points="7.218 5.6 4.954 5.033 7.498 8.12" fill="#009FE8"/>
+	<polygon points="4.911 7.669 4.954 5.033 3.961 7.148 4.894 7.667" fill="#009FE8"/>
+	<polygon points="7.498 8.12 8.104 4.896 8.085 4.872 7.015 3.734 7.218 5.6" fill="#0062B0"/>
+	<polygon points="8.104 4.896 8.616 2.826 7.015 3.733 8.085 4.872" fill="#009FE8"/>
+	<polygon points="2.551 9.578 4.894 7.667 3.961 7.148" fill="#0062B0"/>
+	<polygon points="2.551 9.578 4.873 10.175 4.911 7.669 4.894 7.667" fill="#0091DA"/>
+	<polygon points="5.888 16.681 6.915 15.063 5.375 13.678" fill="#004380"/>
+	<polygon points="6.915 15.063 8.609 15.372 8.07 13.063" fill="#009FE8"/>
+	<polygon points="4.297 15.502 5.888 16.681 5.375 13.678" fill="#0062B0"/>
+	<polygon points="5.375 13.678 6.915 15.063 8.07 13.063" fill="#0062B0"/>
+	<polygon points="3.878 12.914 4.873 10.175 2.551 9.578" fill="#0062B0"/>
+	<polygon points="3.878 12.914 4.297 15.502 5.375 13.678" fill="#009FE8"/>
+	<polygon points="4.873 10.175 3.878 12.914 5.375 13.678" fill="#0091DA"/>
+	<polygon points="15.492 11.452 12.082 10.053 12.118 12.169" fill="#B2DEF0"/>
+	<polygon points="12.118 12.169 12.118 12.169 12.082 10.053 8.507 10.932" fill="#009FE8"/>
+	<polygon points="8.104 4.896 7.498 8.12 9.678 6.73" fill="#0091DA"/>
+	<polygon points="8.104 4.896 9.678 6.73 11.265 5.939 8.107 4.879" fill="#009FE8"/>
+	<polygon points="9.63 8.213 11.265 5.939 9.678 6.73" fill="#B2DEF0"/>
+	<polygon points="8.104 4.896 11.265 5.939 10.673 3.542" fill="#B2DEF0"/>
+	<polygon points="10.673 3.542 9.217 2.938 8.616 2.826 8.104 4.893" fill="#0091DA"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="1032.9" cx="1107.6" gradientTransform="matrix(-.00017632 .3155 .501 0 -513.46 -348.34)" r="38.212">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="462.6" cx="-185.38" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m15.995 0.501c-0.951 0-1.716 0.763-1.715 1.705-0.001 0.942 0.764 1.705 1.715 1.705 0.95 0 1.729-0.763 1.729-1.705s-0.779-1.705-1.729-1.705zm-5.107 1.705c-0.857 0.063-1.679 0.275-2.439 0.586l1.541 2.61c0.394-0.124 0.803-0.191 1.234-0.213 0.084-0.004 0.169 0 0.254 0 2.362 0 4.334 1.643 4.825 3.836h3.07c-0.219-1.594-0.925-3.038-1.957-4.182-0.424 0.226-0.906 0.346-1.421 0.346-1.615 0-2.941-1.255-3.016-2.837-0.486-0.092-0.988-0.146-1.501-0.146-0.103 0-0.206-0.004-0.308 0-0.033 0.001-0.061-0.001-0.094 0-0.031 0.001-0.063-0.002-0.094 0-0.03 0.002-0.063-0.002-0.094 0zm-4.288 1.651c-1.237 0.953-2.179 2.266-2.682 3.77 0.793 0.538 1.314 1.441 1.314 2.463 0 1.023-0.521 1.927-1.314 2.464 0.502 1.504 1.444 2.817 2.681 3.769l1.528-2.623c-0.983-0.896-1.595-2.184-1.595-3.61 0-1.425 0.614-2.711 1.595-3.609l-1.527-2.624zm-4.37 4.529c-0.951 0-1.729 0.763-1.729 1.704 0 0.942 0.778 1.705 1.729 1.705s1.716-0.763 1.715-1.705c0.001-0.942-0.764-1.704-1.715-1.704zm14.073 2.77c-0.491 2.193-2.463 3.835-4.825 3.835-0.523 0-1.016-0.078-1.488-0.226l-1.541 2.61c0.934 0.382 1.956 0.6 3.029 0.6 0.513 0 1.015-0.055 1.501-0.146 0.075-1.515 1.305-2.741 2.828-2.837 0.064-0.004 0.123 0 0.188 0 0.515 0 0.997 0.121 1.421 0.347 1.031-1.145 1.738-2.588 1.957-4.182h-3.07zm-0.308 5.114c-0.951 0-1.716 0.763-1.715 1.705-0.001 0.942 0.764 1.705 1.715 1.705 0.95 0 1.729-0.763 1.729-1.705 0.001-0.942-0.779-1.705-1.729-1.705z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="-1673.4" cx="30923" gradientTransform="matrix(.0123 .0081 .048 -.0716 -295.72 -365.66)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m6.525 4.366c-1.037 0.855-1.839 1.983-2.296 3.269 0.748 0.567 1.239 1.452 1.239 2.455s-0.491 1.888-1.239 2.454c0.457 1.287 1.259 2.415 2.296 3.269l1.278-2.196c-0.923-0.9-1.5-2.146-1.5-3.527 0-1.382 0.579-2.625 1.5-3.527l-1.278-2.197zm-0.104 0.633l0.861 1.499c-0.825 0.909-1.349 2.094-1.396 3.398-0.052-0.948-0.495-1.801-1.161-2.403 0.381-0.949 0.965-1.8 1.696-2.494zm-0.535 5.284c0.047 1.304 0.569 2.49 1.396 3.398l-0.861 1.499c-0.73-0.694-1.315-1.544-1.696-2.494 0.666-0.602 1.109-1.454 1.161-2.403z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="-5209.9" cx="4764.1" gradientTransform="matrix(.0531 -.0019 -.0027 -.0739 -265.46 -366.67)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m2.061 8.708c-0.695 0.077-1.233 0.669-1.233 1.382 0 0.765 0.623 1.382 1.396 1.382s1.396-0.617 1.396-1.382c0-0.766-0.623-1.382-1.396-1.382-0.051 0-0.092-0.001-0.112 0-0.017 0.001-0.033-0.002-0.051 0zm0.038 0.395c0.016-0.002 0.034 0.001 0.05 0h0.075c0.557 0 0.997 0.436 0.997 0.987s-0.44 0.987-0.997 0.987-0.997-0.436-0.997-0.987c0-0.51 0.381-0.927 0.872-0.987z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="-5704.2" cx="5205.8" gradientTransform="matrix(.0488 -.0017 -.0025 -.0679 -252.85 -376.87)" r="26.264">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m15.798 0.935c-0.64 0.072-1.134 0.616-1.134 1.271 0 0.703 0.573 1.27 1.283 1.27s1.282-0.567 1.282-1.27c0-0.704-0.571-1.271-1.282-1.271-0.047 0-0.085-0.001-0.103 0-0.016 0.002-0.031-0.001-0.046 0zm0.034 0.363c0.015-0.001 0.031 0.001 0.046 0h0.069c0.511 0 0.917 0.401 0.917 0.908s-0.405 0.907-0.917 0.907c-0.512 0-0.916-0.4-0.916-0.907 0-0.47 0.35-0.852 0.801-0.908z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="-2612.4" cx="29124" gradientTransform="matrix(.00076661 .0143 -.0843 .0047 -232.38 -402.24)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m8.971 2.98c1.236-0.444 2.586-0.556 3.9-0.301 0.11 0.905 0.615 1.753 1.464 2.249 0.848 0.496 1.84 0.523 2.688 0.179 0.863 1.018 1.42 2.245 1.631 3.534l-2.49-0.018c-0.306-1.216-1.074-2.314-2.242-2.997-1.169-0.683-2.507-0.815-3.725-0.491l-1.226-2.155zm0.587 0.225l0.842 1.46c1.177-0.239 2.438-0.091 3.564 0.514-0.776-0.512-1.277-1.304-1.458-2.158-0.992-0.15-1.999-0.082-2.948 0.184zm4.734 2.167c1.08 0.684 1.824 1.707 2.184 2.846l1.694 0.022c-0.227-0.953-0.656-1.862-1.271-2.65-0.839 0.258-1.779 0.207-2.607-0.218z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="-609.44" gradientUnits="userSpaceOnUse" x2="436.45" gradientTransform="matrix(.4057 0 0 -.4031 -157.06 -227.33)" y1="-581.04" x1="436.45">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m27.501 12.5l-4.882 6-4.859-6h2.473c0.83-2.212-0.875-3.728-2.854-3.728-1.405 0-3.312 0.768-3.956 2.678-0.335 0.993-0.925 0.558-0.902-0.305 0.088-3.331 2.573-5.994 6.284-5.994 3.709 0 6.465 2.97 6.258 7.349h2.438z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="378.45" gradientUnits="userSpaceOnUse" x2="-176.18" y1="434.45" x1="-222.75">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m25.482 13.5l-2.863 3.467-2.844-3.467h1.156c1.271-2.813-0.154-5.602-3.113-5.679-1.813-0.141-3.478 1.216-4.467 2.411 0.631-2.83 2.298-4.092 5.401-4.099 3.135-0.006 5.881 2.59 5.262 7.367h1.468z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+</svg>

+ 212 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/48x48/apps/ubiquity.svg

@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg3786" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="48px" viewBox="0 0 48 48" width="48px" version="1.1" y="0px" x="0px" enable-background="new 0 0 48 48">
+<linearGradient id="rect2723_1_" y2="-19468" gradientUnits="userSpaceOnUse" x2="3670" gradientTransform="matrix(.0764 0 0 -.0206 -256.23 -355.8)" y1="-19225" x1="3670">
+	<stop style="stop-opacity:0" offset="0"/>
+	<stop offset=".5"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</linearGradient>
+<rect id="rect2723" opacity=".3" height="5" width="36.868" y="40" x="5.565" enable-background="new    " fill="url(#rect2723_1_)"/>
+<radialGradient id="path2725_1_" gradientUnits="userSpaceOnUse" cy="-19345" cx="6431.2" gradientTransform="matrix(.0448 0 0 -.0206 -245.87 -355.8)" r="117.14">
+	<stop offset="0"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2725" opacity=".3" d="m42.417 40v5c2.31 0.009 5.583-1.12 5.583-2.5s-2.577-2.5-5.583-2.5z" enable-background="new    " fill="url(#path2725_1_)"/>
+<radialGradient id="path2727_1_" gradientUnits="userSpaceOnUse" cy="-19345" cx="-5766.8" gradientTransform="matrix(-.0448 0 0 -.0206 -253.17 -355.8)" r="117.14">
+	<stop offset="0"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2727" opacity=".3" d="m5.583 40v5c-2.309 0.009-5.583-1.12-5.583-2.5s2.577-2.5 5.583-2.5z" enable-background="new    " fill="url(#path2727_1_)"/>
+<linearGradient id="rect6431_1_" y2="-128.66" gradientUnits="userSpaceOnUse" x2="28.585" gradientTransform="matrix(1.0018 0 0 -.7596 -4.5783 -54.809)" y1="-119.66" x1="28.523">
+	<stop style="stop-color:#7A7A7A" offset="0"/>
+	<stop style="stop-color:#474747" offset="1"/>
+</linearGradient>
+<path id="rect6431" stroke-linejoin="round" d="m1.464 36.464h45.072l-0.901 6.072h-43.17l-1.001-6.072v0z" stroke="#353537" stroke-linecap="round" stroke-width=".928" fill="url(#rect6431_1_)"/>
+<rect id="rect6381" height="1" width="45" y="36" x="1.5" fill="#D2D2D3"/>
+<radialGradient id="path6345_1_" gradientUnits="userSpaceOnUse" cy="213.1" cx="12.706" gradientTransform="matrix(1.3767 .6972 .4681 -.9244 -105.12 201.21)" r="23.048">
+	<stop style="stop-color:#E6E6E6" offset="0"/>
+	<stop style="stop-color:#C8C8C8" offset="1"/>
+</radialGradient>
+<linearGradient id="path6345_2_" y2="434.5" gradientUnits="userSpaceOnUse" x2="-255.43" y1="414.7" x1="-255.69">
+	<stop style="stop-color:#969696" offset="0"/>
+	<stop style="stop-color:#B4B4B4" offset="1"/>
+</linearGradient>
+<path id="path6345" stroke-linejoin="round" d="m46.55 36.602l-6.81-25.773c-0.192-0.734-1.201-1.331-2.049-1.331h-27.617c-1.303 0-2.049 0.199-2.324 1.331l-6.3 25.749" stroke="url(#path6345_2_)" stroke-linecap="round" stroke-width=".9958" fill="url(#path6345_1_)"/>
+<path id="path7046" opacity=".4" d="m45.5 36.5l-43-0.023" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+<radialGradient id="path9001_1_" gradientUnits="userSpaceOnUse" cy="-1149.9" cx="635.88" gradientTransform="matrix(.3516 -.005 -.0026 -.2891 -203.22 -295.5)" r="78.727">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9001" d="m40.971 25.374c-0.217-1.998-1.676-3.903-4.1-5.407-0.049-0.578-0.67-7.97-0.67-7.97-0.049-0.568-0.771-0.997-1.685-0.997h-5.73c-0.92 0-1.631 0.435-1.654 1.011-0.105 2.604-3.312 3.962-8.096 5.199-1.676 0.29-6.046 1.655-7.049 2.254-2.952 1.573-4.713 3.671-4.957 5.91-0.222 2.036 0.845 4.073 3.004 5.737 3.159 2.435 8.38 3.889 13.966 3.889s10.807-1.454 13.968-3.889c1.971-1.519 3.032-3.351 3.032-5.209 0-0.175-0.01-0.352-0.029-0.528zm-16.971 8.616c-9.304 0-16.428-4.08-15.912-8.811 0.222-2.039 1.854-4.216 4.557-5.651 0.506-0.381 5.077-1.865 6.717-2.126 4.544-1.172 8.701-2.693 8.832-5.898 0.005-0.154 0.267-0.276 0.592-0.276h5.73c0.332 0 0.611 0.128 0.625 0.285l0.695 8.282c2.409 1.396 3.868 3.48 4.076 5.384 0.515 4.731-6.609 8.811-15.912 8.811z" fill="url(#path9001_1_)"/>
+<radialGradient id="path9003_1_" gradientUnits="userSpaceOnUse" cy="3200.8" cx="1324.7" gradientTransform="matrix(.1879 0 0 .1348 -225.76 -411.34)" r="78.731">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6718"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9003" d="m23.912 28.404c-3.419 0-6.04-1.307-6.095-3.04-0.001-0.019-0.001-0.037-0.001-0.056 0-0.627 0.344-1.224 0.996-1.729 1.104-0.853 3.011-1.363 5.1-1.363s3.996 0.51 5.1 1.363c0.672 0.52 1.016 1.137 0.995 1.784-0.056 1.735-2.677 3.041-6.095 3.041zm0-5.217c-3.213 0-4.849 1.295-4.811 2.477 0.038 1.163 2.191 2.093 4.811 2.093 2.619 0 4.773-0.93 4.811-2.093 0.037-1.183-1.599-2.477-4.811-2.477z" fill="url(#path9003_1_)"/>
+<path id="path9007" d="m6.016 34.619c-0.042 0.596-0.663 1.081-1.388 1.081s-1.273-0.485-1.225-1.081c0.048-0.592 0.669-1.07 1.387-1.07s1.267 0.478 1.226 1.07z" fill="#E1E1E1"/>
+<radialGradient id="path9009_1_" fx="-989.96" fy="-788.93" gradientUnits="userSpaceOnUse" cy="-789.34" cx="-990.56" gradientTransform="matrix(-.3295 0 0 -.3498 -321.67 -241.45)" r="2.5597">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#CECECE" offset=".16"/>
+	<stop style="stop-color:#888" offset=".4675"/>
+	<stop style="stop-color:#555" offset="1"/>
+</radialGradient>
+<path id="path9009" d="m5.547 34.201c0.066 0.074 0.142 0.195 0.142 0.357 0 0.012 0 0.022-0.001 0.034-0.028 0.411-0.514 0.757-1.06 0.757-0.311 0-0.595-0.113-0.759-0.304-0.071-0.082-0.152-0.217-0.137-0.397 0.033-0.405 0.518-0.75 1.059-0.75 0.308 0 0.591 0.114 0.756 0.303z" fill="url(#path9009_1_)"/>
+<path id="path9025" d="m36.912 10.697c-0.012 0.258 0.379 0.53 0.87 0.605 0.491 0.076 0.895-0.074 0.901-0.334 0.006-0.258-0.384-0.527-0.871-0.602-0.485-0.073-0.888 0.073-0.9 0.331z" fill="#E1E1E1"/>
+<radialGradient id="path9027_1_" fx="1304.2" fy="-1975.8" gradientUnits="userSpaceOnUse" cy="-1976.2" cx="1303.6" gradientTransform="matrix(.2233 .0344 .023 -.1494 -207.87 -329.23)" r="2.5637">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#CECECE" offset=".16"/>
+	<stop style="stop-color:#888" offset=".4675"/>
+	<stop style="stop-color:#555" offset="1"/>
+</radialGradient>
+<path id="path9027" d="m37.258 10.567c-0.05 0.025-0.109 0.069-0.119 0.138-0.002 0.004-0.002 0.009-0.002 0.015-0.008 0.178 0.299 0.377 0.668 0.434 0.211 0.032 0.41 0.013 0.535-0.051 0.053-0.028 0.117-0.077 0.119-0.155 0.004-0.177-0.302-0.375-0.669-0.431-0.209-0.032-0.408-0.014-0.532 0.05z" fill="url(#path9027_1_)"/>
+<linearGradient id="rect8993_1_" y2="-32.892" gradientUnits="userSpaceOnUse" x2="19.003" gradientTransform="matrix(1.0213 0 0 -.8989 6.5924 9.9337)" y1="-32.892" x1="1.3784">
+	<stop offset="0"/>
+	<stop style="stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="rect8993" d="m7.5 37h18.5v5h-18l-0.5-5z" fill="url(#rect8993_1_)"/>
+<linearGradient id="path8995_1_" y2="-31.341" gradientUnits="userSpaceOnUse" x2="8.4299" gradientTransform="matrix(1.0213 0 0 -.8989 5.7799 11.125)" y1="-34.788" x1="8.4849">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path8995" opacity=".8114" d="m8 42l-0.4-3.605c1.875 2.857 8.873 3.605 13.613 3.605h-13.213z" enable-background="new    " fill="url(#path8995_1_)"/>
+<radialGradient id="path9039_1_" gradientUnits="userSpaceOnUse" cy="-3967.1" cx="1150.6" gradientTransform="matrix(.1905 -.0251 -.0062 -.1007 -226.09 -355.05)" r="78.728">
+	<stop style="stop-color:#F5F5F5" offset="0"/>
+	<stop style="stop-color:#E7E7E7" offset=".4703"/>
+	<stop style="stop-color:#8C8C8C" offset=".6935"/>
+	<stop style="stop-color:#ddd" offset=".8354"/>
+	<stop style="stop-color:#A8A8A8" offset="1"/>
+</radialGradient>
+<path id="path9039" d="m10.907 11l-0.104 0.381-1.542 5.671-0.261 0.948 0.764-0.204 12.995-3.544 0.041-0.018 0.034-0.018c0.689-0.354 1.056-1.07 1.143-1.727 0.043-0.329 0.03-0.651-0.083-0.948-0.106-0.281-0.384-0.531-0.674-0.523v-0.018h-12.313zm0.439 0.35h11.977c0.006 0.048 0.019 0.075 0.007 0.165-0.038 0.285-0.2 1.305-0.606 1.528l-12.596 3.437 1.218-5.13z" fill="url(#path9039_1_)"/>
+<path id="path9091" d="m42.002 34.619c0.042 0.596 0.663 1.081 1.389 1.081 0.725 0 1.272-0.485 1.225-1.081-0.049-0.592-0.67-1.07-1.387-1.07-0.719 0-1.268 0.478-1.227 1.07z" fill="#E1E1E1"/>
+<radialGradient id="path9093_1_" fx="670.3" fy="-788.93" gradientUnits="userSpaceOnUse" cy="-789.34" cx="669.7" gradientTransform="matrix(.3295 0 0 -.3498 -177.35 -241.45)" r="2.5631">
+	<stop style="stop-color:#eee" offset="0"/>
+	<stop style="stop-color:#CECECE" offset=".16"/>
+	<stop style="stop-color:#888" offset=".4675"/>
+	<stop style="stop-color:#555" offset="1"/>
+</radialGradient>
+<path id="path9093" d="m42.471 34.201c-0.066 0.074-0.142 0.195-0.142 0.357 0 0.012 0.001 0.022 0.001 0.034 0.029 0.411 0.514 0.757 1.061 0.757 0.311 0 0.594-0.113 0.758-0.304 0.072-0.082 0.152-0.217 0.138-0.397-0.033-0.405-0.517-0.75-1.06-0.75-0.308 0-0.59 0.114-0.756 0.303z" fill="url(#path9093_1_)"/>
+<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="-710.24" cx="24.02" gradientTransform="matrix(1 0 0 -.3571 -.02 -214.16)" r="21">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<rect id="rect6300-3" opacity=".3" height="5" width="42" y="37" x="3" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+<radialGradient id="path2638_1_" gradientUnits="userSpaceOnUse" cy="-490" cx="-139.74" gradientTransform="matrix(2.2326 0 0 -.4341 335.98 -186.21)" r="8.0625">
+	<stop style="stop-color:#0D0D0D" offset="0"/>
+	<stop style="stop-color:#0D0D0D;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2638" opacity=".1629" d="m42 26.499c0.11 1.933-7.858 3.517-17.799 3.538-9.94 0.021-18.089-1.527-18.199-3.461-0.002-0.025-0.002-0.051-0.001-0.077-0.111-1.933 7.858-3.518 17.798-3.539s18.089 1.528 18.2 3.461c0.002 0.026 0.002 0.052 0.001 0.078z" enable-background="new    " fill="url(#path2638_1_)"/>
+	<polygon points="13.961 16.892 12.416 12.583 8.392 15.733 11.007 16.097" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="19.495 18.788 19.625 18.842 19.628 18.751" fill="none"/>
+	<polygon points="19.625 18.842 23.545 20.5 24.666 17.689 19.495 18.788" fill="#009FE8"/>
+	<polygon points="13.292 20.158 19.495 18.788 13.961 16.892" fill="#B2DEF0"/>
+	<polygon points="8.392 15.733 9.161 21.102 11.007 16.097" fill="#009FE8"/>
+	<polygon points="11.011 16.097 9.161 21.102 13.961 16.892" fill="#0091DA"/>
+	<polygon points="9.161 21.102 13.292 20.158 13.961 16.892" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="13.314 7.605 13.344 7.642 13.348 7.617" fill="none"/>
+	<polygon points="12.416 12.583 15.682 12.727 15.755 10.453" fill="#0062B0"/>
+	<polygon points="19.44 15.546 15.682 12.727 13.961 16.892" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="13.354 7.583 13.314 7.605 13.348 7.617" fill="none"/>
+	<polygon points="13.961 16.892 15.682 12.727 12.416 12.583" fill="#009FE8"/>
+	<polygon points="20.255 28.374 20.272 26.721 20.278 26.721 18.85 25.866" fill="#0062B0"/>
+	<polygon points="16.245 28.313 20.255 28.374 18.85 25.866" fill="#004380"/>
+	<polygon points="18.85 25.866 20.278 26.721 20.3 26.708 21.374 22.813" fill="#004380"/>
+	<polygon points="25.188 28.008 28.159 25.229 24.488 25.653" fill="#0062B0"/>
+	<polygon points="21.28 30.347 25.381 30.354 25.188 28.008 22.593 28.635 25.188 28.008 24.488 25.653" fill="#004380"/>
+	<polygon points="20.3 26.708 23.333 24.234 21.374 22.813" fill="#0062B0"/>
+	<polygon points="28.159 25.229 26.65 22.111 24.488 25.653" fill="#004380"/>
+	<polygon points="5.527 29.29 9.447 29.29 6.984 27.534" fill="#004380"/>
+	<polygon points="15.049 4.641 16.995 3.872 18.909 0.66" fill="#0091DA"/>
+	<polygon points="15.519 2.01 11.661 5.989 14.128 4.47" fill="#0091DA"/>
+	<polygon points="23.376 24.234 24.488 25.653 26.65 22.111 21.374 22.813" fill="#0091DA"/>
+	<polygon points="16.995 3.872 15.049 4.641 17.281 5.568" fill="#009FE8"/>
+	<polygon points="14.51 4.553 15.514 2.033 14.117 4.481" fill="#B2DEF0"/>
+	<polygon points="16.995 3.872 17.281 5.568 18.909 0.666" fill="#B2DEF0"/>
+	<polygon points="8.342 25.906 6.984 27.534 9.947 25.702 7.51 23.896" fill="#0091DA"/>
+	<polygon points="8.45 11.892 8.392 15.733 12.416 12.583" fill="#009FE8"/>
+	<polygon points="9.447 29.29 9.947 25.702 6.984 27.534" fill="#0062B0"/>
+	<polygon points="26.65 22.111 26.468 18.315 23.545 20.5" fill="#0062B0"/>
+	<polygon points="21.374 22.813 26.65 22.111 23.545 20.5" fill="#009FE8"/>
+	<polygon points="23.545 20.5 26.468 18.315 24.666 17.689" fill="#0091DA"/>
+	<polygon points="26.468 18.315 29.509 16.529 28.393 15.68" fill="#0091DA"/>
+	<polygon points="19.229 21.375 21.374 22.813 23.545 20.5" fill="#0062B0"/>
+	<polygon points="26.254 16.83 24.666 17.689 26.468 18.315 28.393 15.68" fill="#009FE8"/>
+	<polygon points="17.068 22.515 19.229 21.375 13.292 20.158" fill="#004380"/>
+	<polygon points="19.495 18.788 19.229 21.375 23.545 20.5" fill="#0091DA"/>
+	<polygon points="19.495 18.788 13.292 20.158 19.229 21.375" fill="#0062B0"/>
+	<polygon points="30.586 12.404 31.949 14.115 31.982 14.085 34.165 11.28" fill="#B2DEF0"/>
+	<polygon points="31.207 16.862 33.505 16.027 31.949 14.115" fill="#0091DA"/>
+	<polygon points="31.949 14.115 29.479 16.532 31.2 16.867" fill="#0062B0"/>
+	<polygon points="28.393 15.68 29.514 16.536 30.586 12.404" fill="#009FE8"/>
+	<polygon points="31.949 14.115 33.505 16.035 34.174 11.28" fill="#009FE8"/>
+	<polygon points="30.586 12.404 29.479 16.532 31.949 14.115" fill="#0091DA"/>
+	<polygon points="14.117 23.696 17.068 22.515 13.292 20.158" fill="#0091DA"/>
+	<polygon points="12.416 12.583 8.516 7.852 8.45 11.892" fill="#0091DA"/>
+	<polygon points="11.674 5.862 8.516 7.852 11.985 8.722" fill="#0091DA"/>
+	<polygon points="11.985 8.722 8.516 7.852 12.416 12.583" fill="#009FE8"/>
+	<polygon points="8.45 11.892 8.516 7.852 6.994 11.095 8.425 11.889" fill="#009FE8"/>
+	<polygon points="12.416 12.583 13.344 7.642 13.314 7.605 11.674 5.862 11.985 8.722" fill="#0062B0"/>
+	<polygon points="13.344 7.642 14.128 4.47 11.674 5.86 13.314 7.605" fill="#009FE8"/>
+	<polygon points="4.834 14.818 8.425 11.889 6.994 11.095" fill="#0062B0"/>
+	<polygon points="4.834 14.818 8.392 15.733 8.45 11.892 8.425 11.889" fill="#0091DA"/>
+	<polygon points="9.947 25.702 11.522 23.224 9.161 21.102" fill="#004380"/>
+	<polygon points="11.522 23.224 14.117 23.696 13.292 20.158" fill="#009FE8"/>
+	<polygon points="7.51 23.896 9.947 25.702 9.161 21.102" fill="#0062B0"/>
+	<polygon points="9.161 21.102 11.522 23.224 13.292 20.158" fill="#0062B0"/>
+	<polygon points="6.867 19.93 8.392 15.733 4.834 14.818" fill="#0062B0"/>
+	<polygon points="6.867 19.93 7.51 23.896 9.161 21.102" fill="#009FE8"/>
+	<polygon points="8.392 15.733 6.867 19.93 9.161 21.102" fill="#0091DA"/>
+	<polygon points="24.666 17.689 19.44 15.546 19.495 18.788" fill="#B2DEF0"/>
+	<polygon points="19.495 18.788 19.495 18.788 19.44 15.546 13.961 16.892" fill="#009FE8"/>
+	<polygon points="13.344 7.642 12.416 12.583 15.755 10.453" fill="#0091DA"/>
+	<polygon points="13.344 7.642 15.755 10.453 18.188 9.24 13.348 7.617" fill="#009FE8"/>
+	<polygon points="15.682 12.727 18.188 9.24 15.755 10.453" fill="#B2DEF0"/>
+	<polygon points="13.344 7.642 18.188 9.24 17.281 5.568" fill="#B2DEF0"/>
+	<polygon points="17.281 5.568 15.049 4.641 14.128 4.47 13.344 7.638" fill="#0091DA"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="839.91" cx="663.61" gradientTransform="matrix(-.00026660 .477 .7574 0 -630.53 -315.19)" r="38.212">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="470.6" cx="-177.38" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m23.928 0.501c-1.438 0-2.594 1.154-2.594 2.578s1.156 2.578 2.594 2.578 2.615-1.154 2.614-2.578c0.001-1.424-1.176-2.578-2.614-2.578zm-7.721 2.578c-1.296 0.095-2.538 0.416-3.688 0.886l2.33 3.947c0.595-0.187 1.213-0.29 1.865-0.322 0.127-0.006 0.256 0 0.385 0 3.571 0 6.552 2.484 7.295 5.8h4.641c-0.329-2.411-1.398-4.592-2.959-6.323-0.641 0.341-1.37 0.523-2.148 0.523-2.442 0-4.447-1.898-4.56-4.29-0.735-0.139-1.494-0.221-2.269-0.221-0.156 0-0.312-0.006-0.467 0-0.05 0.002-0.091-0.002-0.141 0-0.048 0.002-0.095-0.003-0.142 0-0.046 0.002-0.097-0.004-0.142 0zm-6.485 2.497c-1.869 1.441-3.294 3.425-4.053 5.699 1.199 0.812 1.986 2.178 1.986 3.725s-0.787 2.913-1.986 3.725c0.759 2.275 2.184 4.26 4.053 5.699l2.311-3.967c-1.487-1.354-2.412-3.301-2.412-5.457 0-2.155 0.927-4.099 2.412-5.458l-2.311-3.966zm-6.607 6.846c-1.438 0-2.615 1.154-2.614 2.578 0 1.424 1.176 2.578 2.614 2.578s2.594-1.154 2.594-2.578-1.156-2.578-2.594-2.578zm21.279 4.189c-0.743 3.316-3.724 5.8-7.295 5.8-0.791 0-1.536-0.119-2.25-0.343l-2.33 3.948c1.412 0.577 2.957 0.905 4.58 0.905 0.775 0 1.534-0.082 2.269-0.221 0.114-2.291 1.972-4.145 4.276-4.289 0.097-0.006 0.186 0 0.284 0 0.778 0 1.507 0.182 2.148 0.523 1.561-1.731 2.63-3.912 2.959-6.323h-4.641zm-0.466 7.733c-1.438 0-2.594 1.154-2.594 2.577 0 1.424 1.156 2.578 2.594 2.578s2.615-1.154 2.614-2.578c0.001-1.423-1.176-2.577-2.614-2.577z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="-925.66" cx="19901" gradientTransform="matrix(.0187 .0123 .0726 -.1083 -295.97 -336.8)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m9.609 6.345c-1.568 1.292-2.78 2.997-3.471 4.942 1.131 0.857 1.874 2.195 1.874 3.712s-0.743 2.855-1.874 3.712c0.691 1.945 1.903 3.651 3.471 4.942l1.934-3.321c-1.395-1.361-2.269-3.244-2.269-5.333s0.875-3.97 2.269-5.333l-1.934-3.321zm-0.157 0.957l1.302 2.266c-1.248 1.375-2.039 3.166-2.111 5.138-0.079-1.434-0.749-2.722-1.755-3.633 0.576-1.435 1.459-2.721 2.564-3.771zm-0.809 7.99c0.071 1.971 0.861 3.764 2.111 5.138l-1.302 2.266c-1.104-1.05-1.988-2.335-2.564-3.771 1.007-0.911 1.676-2.199 1.755-3.633z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="-3226.4" cx="2976.6" gradientTransform="matrix(.0803 -.0029 -.0041 -.1117 -250.1 -338.18)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m2.861 12.909c-1.052 0.118-1.865 1.013-1.865 2.09 0 1.157 0.942 2.09 2.11 2.09s2.11-0.933 2.11-2.09-0.942-2.09-2.11-2.09c-0.077 0-0.139-0.002-0.169 0-0.026 0.002-0.051-0.003-0.076 0zm0.056 0.597c0.024-0.003 0.051 0.002 0.075 0h0.113c0.842 0 1.507 0.659 1.507 1.493s-0.665 1.493-1.507 1.493c-0.842 0-1.507-0.659-1.507-1.493 0.001-0.771 0.577-1.401 1.319-1.493z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="-3546.5" cx="3260.4" gradientTransform="matrix(.0738 -.0026 -.0037 -.1027 -230.99 -353.68)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m23.63 1.157c-0.967 0.108-1.714 0.931-1.714 1.921 0 1.063 0.865 1.921 1.939 1.921 1.075 0 1.939-0.857 1.939-1.921s-0.864-1.921-1.939-1.921c-0.071 0-0.128-0.002-0.156 0-0.023 0.002-0.046-0.002-0.069 0zm0.052 0.549c0.022-0.002 0.047 0.002 0.069 0h0.104c0.774 0 1.385 0.606 1.385 1.372 0 0.767-0.611 1.372-1.385 1.372s-1.385-0.605-1.385-1.372c0-0.709 0.529-1.288 1.212-1.372z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="-1505.1" cx="18820" gradientTransform="matrix(.0012 .0217 -.1275 .0071 -198.46 -393.1)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m13.308 4.248c1.868-0.67 3.91-0.84 5.897-0.455 0.165 1.368 0.93 2.65 2.213 3.4s2.782 0.791 4.066 0.271c1.304 1.539 2.146 3.394 2.464 5.343l-3.765-0.028c-0.462-1.838-1.623-3.499-3.39-4.531-1.766-1.033-3.79-1.232-5.632-0.743l-1.853-3.257zm0.887 0.342l1.273 2.208c1.78-0.362 3.687-0.138 5.39 0.778-1.174-0.775-1.932-1.972-2.206-3.263-1.499-0.229-3.023-0.126-4.457 0.277zm7.158 3.275c1.633 1.035 2.758 2.581 3.303 4.304l2.56 0.033c-0.342-1.441-0.991-2.815-1.921-4.006-1.269 0.39-2.69 0.312-3.942-0.331z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="-247.79" gradientUnits="userSpaceOnUse" x2="196.43" gradientTransform="matrix(.6134 0 0 -.6095 -90.495 -123.54)" y1="-219.39" x1="196.43">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m41.325 18.48l-7.382 8.518-7.346-8.518h3.736c1.256-3.344-1.322-5.472-4.313-5.472-2.125 0-5.008 1.161-5.981 4.048-0.507 1.502-1.399 0.844-1.365-0.461 0.134-5.036 3.891-9.063 9.501-9.063 5.609 0 9.776 4.327 9.461 10.949l3.689-0.001z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="386.45" gradientUnits="userSpaceOnUse" x2="-168.18" y1="442.45" x1="-214.75">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m39.107 19.471l-5.164 5.925-5.133-5.925h2.192c1.922-4.254-0.897-7.341-4.706-7.402-2.743-0.214-5.203 1.782-6.7 3.589 0.954-4.277 3.92-7.132 8.61-7.141 4.738-0.009 9.393 3.841 8.346 10.954h2.555z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+<ellipse opacity=".1" cy="29.403" cx="16.084" rx="11.474" ry="1.949"/>
+</svg>

+ 222 - 0
ubiquity-frontend-gtk/usr/share/icons/hicolor/64x64/apps/ubiquity.svg

@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg id="svg3338" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="64px" viewBox="0 0 64 64" width="64px" version="1.1" y="0px" x="0px" enable-background="new 0 0 64 64">
+<g id="layer1">
+		<linearGradient id="rect2723_1_" y2="-14342" gradientUnits="userSpaceOnUse" x2="2703.9" gradientTransform="matrix(.1018 0 0 -.0275 -243.29 -333.72)" y1="-14100" x1="2703.9">
+		<stop style="stop-opacity:0" offset="0"/>
+		<stop offset=".5"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</linearGradient>
+		<rect id="rect2723" opacity=".3" height="6.667" width="49.16" y="53.333" x="7.42" enable-background="new    " fill="url(#rect2723_1_)"/>
+		<radialGradient id="path2725_1_" gradientUnits="userSpaceOnUse" cy="-14220" cx="4780.6" gradientTransform="matrix(.0598 0 0 -.0275 -229.12 -333.72)" r="117.14">
+		<stop offset="0"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</radialGradient>
+	<path id="path2725" opacity=".3" d="m56.557 53.334v6.666c3.078 0.012 7.443-1.494 7.443-3.334s-3.436-3.332-7.443-3.332z" enable-background="new    " fill="url(#path2725_1_)"/>
+		<radialGradient id="path2727_1_" gradientUnits="userSpaceOnUse" cy="-14220" cx="-4100.1" gradientTransform="matrix(-.0598 0 0 -.0275 -237.91 -333.72)" r="117.14">
+		<stop offset="0"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</radialGradient>
+	<path id="path2727" opacity=".3" d="m7.444 53.334v6.666c-3.079 0.012-7.444-1.494-7.444-3.334s3.437-3.332 7.444-3.332z" enable-background="new    " fill="url(#path2727_1_)"/>
+		<linearGradient id="rect6431_1_" y2="16.907" gradientUnits="userSpaceOnUse" x2="-40.833" gradientTransform="matrix(1.3574 0 0 -1.0099 87.507 74.126)" y1="25.906" x1="-40.895">
+		<stop style="stop-color:#7A7A7A" offset="0"/>
+		<stop style="stop-color:#474747" offset="1"/>
+	</linearGradient>
+		<path id="rect6431" stroke-linejoin="round" d="m1.464 48.464h61.072l-1.222 8.072h-58.493l-1.357-8.072z" stroke="#353537" stroke-linecap="round" stroke-width=".928" fill="url(#rect6431_1_)"/>
+	<rect id="rect6381" height="1.363" width="60.869" y="47.626" x="1.566" fill="#D2D2D3"/>
+		<radialGradient id="path6345_1_" gradientUnits="userSpaceOnUse" cy="284.02" cx="-56.783" gradientTransform="matrix(1.8622 .9518 .6332 -1.262 -58.15 428.88)" r="23.048">
+		<stop style="stop-color:#E6E6E6" offset="0"/>
+		<stop style="stop-color:#C8C8C8" offset="1"/>
+	</radialGradient>
+	<linearGradient id="path6345_2_" y2="442.5" gradientUnits="userSpaceOnUse" x2="-247.43" y1="422.7" x1="-247.69">
+		<stop style="stop-color:#969696" offset="0"/>
+		<stop style="stop-color:#B4B4B4" offset="1"/>
+	</linearGradient>
+		<path id="path6345" stroke-linejoin="round" d="m62.502 48.502l-9.211-35.188c-0.26-1.003-1.625-1.816-2.771-1.816h-37.357c-1.762 0-2.772 0.271-3.143 1.816l-8.522 35.154" stroke="url(#path6345_2_)" stroke-linecap="round" stroke-width=".9958" fill="url(#path6345_1_)"/>
+	<path id="path7046" opacity=".4" d="m61.5 48.516l-59-0.031" stroke="#fff" stroke-linecap="round" enable-background="new    " fill="none"/>
+		<radialGradient id="path9001_1_" gradientUnits="userSpaceOnUse" cy="-743.14" cx="427.08" gradientTransform="matrix(.4757 -.0069 -.0035 -.3975 -174.66 -248.17)" r="78.727">
+		<stop style="stop-color:#F5F5F5" offset="0"/>
+		<stop style="stop-color:#E7E7E7" offset=".4703"/>
+		<stop style="stop-color:#8C8C8C" offset=".6935"/>
+		<stop style="stop-color:#ddd" offset=".8354"/>
+		<stop style="stop-color:#A8A8A8" offset="1"/>
+	</radialGradient>
+	<path id="path9001" d="m54.961 32.764c-0.294-2.747-2.268-5.367-5.547-7.434-0.066-0.794-0.907-10.959-0.907-10.959-0.064-0.781-1.044-1.371-2.28-1.371h-7.754c-1.244 0-2.205 0.597-2.238 1.39-0.142 3.579-4.479 5.448-10.951 7.148-2.268 0.399-8.18 2.276-9.537 3.1-3.995 2.163-6.377 5.048-6.707 8.125-0.3 2.801 1.143 5.602 4.064 7.889 4.274 3.349 11.338 5.348 18.896 5.348 7.557 0 14.621-1.999 18.896-5.348 2.668-2.088 4.104-4.607 4.104-7.16 0-0.243-0.014-0.486-0.039-0.728zm-22.961 11.847c-12.587 0-22.226-5.61-21.528-12.114 0.301-2.803 2.509-5.797 6.165-7.769 0.685-0.525 6.869-2.565 9.088-2.923 6.148-1.612 11.771-3.704 11.947-8.111 0.008-0.211 0.362-0.379 0.801-0.379h7.754c0.448 0 0.828 0.176 0.846 0.392l0.941 11.388c3.258 1.919 5.233 4.784 5.514 7.402 0.697 6.504-8.941 12.114-21.528 12.114z" fill="url(#path9001_1_)"/>
+		<radialGradient id="path9003_1_" gradientUnits="userSpaceOnUse" cy="2494.5" cx="953.84" gradientTransform="matrix(.2466 0 0 .1743 -204.2 -408.55)" r="78.728">
+		<stop style="stop-color:#fff" offset="0"/>
+		<stop style="stop-color:#E7E7E7" offset=".4703"/>
+		<stop style="stop-color:#8C8C8C" offset=".6718"/>
+		<stop style="stop-color:#ddd" offset=".8354"/>
+		<stop style="stop-color:#A8A8A8" offset="1"/>
+	</radialGradient>
+	<path id="path9003" d="m32 37c-4.487 0-7.926-1.689-7.999-3.93 0-0.025-0.001-0.049-0.001-0.072 0-0.811 0.451-1.582 1.307-2.235 1.449-1.104 3.951-1.763 6.693-1.763s5.243 0.659 6.693 1.763c0.881 0.671 1.332 1.469 1.306 2.305-0.074 2.243-3.513 3.932-7.999 3.932zm0-6.746c-4.216 0-6.364 1.674-6.313 3.203 0.049 1.505 2.875 2.707 6.313 2.707s6.264-1.203 6.313-2.707c0.05-1.529-2.098-3.203-6.313-3.203z" fill="url(#path9003_1_)"/>
+	<path id="path9007" d="m7.997 45.493c-0.064 0.83-1.014 1.507-2.121 1.507s-1.945-0.677-1.872-1.507c0.074-0.826 1.023-1.493 2.12-1.493s1.935 0.667 1.873 1.493z" fill="#E1E1E1"/>
+		<radialGradient id="path9009_1_" fx="-679.26" fy="-442.96" gradientUnits="userSpaceOnUse" cy="-443.38" cx="-679.86" gradientTransform="matrix(-.5034 0 0 -.4878 -336.26 -170.78)" r="2.5634">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9009" d="m7.28 44.909c0.101 0.104 0.217 0.274 0.217 0.498 0 0.016-0.001 0.032-0.002 0.05-0.043 0.572-0.785 1.055-1.619 1.055-0.475 0-0.909-0.158-1.161-0.425-0.108-0.112-0.231-0.302-0.209-0.552 0.051-0.568 0.792-1.047 1.618-1.047 0.472 0 0.904 0.157 1.156 0.421z" fill="url(#path9009_1_)"/>
+	<path id="path9019" d="m11.016 13.31c0.118 0.526 0.883 0.813 1.706 0.639s1.387-0.744 1.26-1.268c-0.126-0.522-0.889-0.803-1.704-0.63s-1.38 0.735-1.262 1.259z" fill="#F0F0F0"/>
+		<radialGradient id="path9021_1_" fx="402.92" fy="-1020.6" gradientUnits="userSpaceOnUse" cy="-1021" cx="402.32" gradientTransform="matrix(.3741 -.0793 -.0421 -.315 -181.04 -276.7)" r="2.5662">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9021" d="m11.497 12.82c-0.066 0.084-0.137 0.211-0.118 0.356 0.002 0.01 0.004 0.021 0.006 0.031 0.082 0.363 0.675 0.558 1.294 0.427 0.353-0.075 0.662-0.245 0.826-0.457 0.071-0.091 0.146-0.232 0.108-0.39-0.087-0.358-0.679-0.551-1.293-0.421-0.35 0.074-0.658 0.244-0.823 0.454z" fill="url(#path9021_1_)"/>
+	<path id="path9025" d="m49 12.701c-0.018 0.531 0.641 1.089 1.475 1.245 0.83 0.155 1.514-0.153 1.525-0.685 0.012-0.529-0.648-1.081-1.473-1.235s-1.507 0.148-1.527 0.675z" fill="#E1E1E1"/>
+		<radialGradient id="path9027_1_" fx="661.72" fy="-727.87" gradientUnits="userSpaceOnUse" cy="-728.28" cx="661.12" gradientTransform="matrix(.3783 .0706 .039 -.3065 -171.19 -256.88)" r="2.5628">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9027" d="m49.585 12.435c-0.084 0.052-0.185 0.142-0.203 0.283-0.001 0.01-0.001 0.02-0.002 0.031-0.013 0.366 0.507 0.773 1.132 0.89 0.357 0.067 0.696 0.028 0.906-0.104 0.09-0.056 0.198-0.157 0.201-0.318 0.008-0.364-0.512-0.769-1.133-0.885-0.353-0.065-0.69-0.027-0.901 0.103z" fill="url(#path9027_1_)"/>
+		<linearGradient id="rect8993_1_" y2="107.77" gradientUnits="userSpaceOnUse" x2="-48.42" gradientTransform="matrix(1.3801 0 0 -1.2584 101.83 188.12)" y1="107.77" x1="-66.046">
+		<stop offset="0"/>
+		<stop style="stop-opacity:0" offset="1"/>
+	</linearGradient>
+	<path id="rect8993" d="m10 49h25v7h-24.324l-0.676-7z" fill="url(#rect8993_1_)"/>
+		<linearGradient id="path8995_1_" y2="106.35" gradientUnits="userSpaceOnUse" x2="-54.762" gradientTransform="matrix(1.3504 0 0 -1.2464 92.928 184.8)" y1="102.9" x1="-54.706">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#eee;stop-opacity:0" offset="1"/>
+	</linearGradient>
+	<path id="path8995" opacity=".8114" d="m10.529 56l-0.529-5c2.479 3.963 11.733 5 18 5h-17.471z" enable-background="new    " fill="url(#path8995_1_)"/>
+		<radialGradient id="path9039_1_" gradientUnits="userSpaceOnUse" cy="-2633.4" cx="811.3" gradientTransform="matrix(.2541 -.0358 -.0083 -.1439 -204.25 -330.18)" r="78.728">
+		<stop style="stop-color:#F5F5F5" offset="0"/>
+		<stop style="stop-color:#E7E7E7" offset=".4703"/>
+		<stop style="stop-color:#8C8C8C" offset=".6935"/>
+		<stop style="stop-color:#ddd" offset=".8354"/>
+		<stop style="stop-color:#A8A8A8" offset="1"/>
+	</radialGradient>
+	<path id="path9039" d="m14.542 13l-0.138 0.544-2.055 8.102-0.349 1.354 1.019-0.291 17.326-5.063 0.055-0.026 0.046-0.025c0.917-0.506 1.408-1.529 1.523-2.468 0.058-0.47 0.041-0.93-0.11-1.355-0.142-0.401-0.512-0.758-0.899-0.747v-0.025h-16.418zm0.587 0.501h15.968c0.008 0.068 0.026 0.106 0.009 0.235-0.05 0.407-0.265 1.864-0.807 2.182l-16.795 4.911 1.625-7.328z" fill="url(#path9039_1_)"/>
+	<path id="path9091" d="m56.003 45.493c0.063 0.83 1.015 1.507 2.121 1.507s1.944-0.677 1.871-1.507c-0.073-0.826-1.022-1.493-2.119-1.493s-1.935 0.667-1.873 1.493z" fill="#E1E1E1"/>
+		<radialGradient id="path9093_1_" fx="375.59" fy="-442.96" gradientUnits="userSpaceOnUse" cy="-443.38" cx="374.99" gradientTransform="matrix(.5034 0 0 -.4878 -130.78 -170.78)" r="2.5637">
+		<stop style="stop-color:#eee" offset="0"/>
+		<stop style="stop-color:#CECECE" offset=".16"/>
+		<stop style="stop-color:#888" offset=".4675"/>
+		<stop style="stop-color:#555" offset="1"/>
+	</radialGradient>
+	<path id="path9093" d="m56.721 44.909c-0.103 0.104-0.218 0.274-0.218 0.498 0 0.016 0.001 0.032 0.002 0.05 0.043 0.572 0.785 1.055 1.619 1.055 0.474 0 0.908-0.158 1.16-0.425 0.108-0.112 0.231-0.302 0.21-0.552-0.051-0.568-0.792-1.047-1.619-1.047-0.471 0-0.902 0.157-1.154 0.421z" fill="url(#path9093_1_)"/>
+		<radialGradient id="rect6300-3_1_" gradientUnits="userSpaceOnUse" cy="-389.33" cx="-45.195" gradientTransform="matrix(1.3526 0 0 -.4869 93.131 -137.15)" r="21">
+		<stop style="stop-color:#fff" offset="0"/>
+		<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+	</radialGradient>
+		<rect id="rect6300-3" opacity=".3" height="6.816" width="56.812" y="48.99" x="3.595" enable-background="new    " fill="url(#rect6300-3_1_)"/>
+</g>
+<radialGradient id="path2638_1_" gradientUnits="userSpaceOnUse" cy="-239.3" cx="-165.05" gradientTransform="matrix(2.9767 0 0 -.5788 523.88 -99.176)" r="8.0623">
+	<stop style="stop-color:#0D0D0D" offset="0"/>
+	<stop style="stop-color:#0D0D0D;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2638" opacity=".1629" d="m56.578 39.333c0 2.578-10.745 4.667-24 4.667-13.254 0-24-2.089-24-4.667 0-2.577 10.746-4.666 24-4.666 13.255 0 24 2.089 24 4.666z" enable-background="new    " fill="url(#path2638_1_)"/>
+<ellipse opacity=".1" cy="39.027" cx="23.023" rx="16.015" ry="2.721"/>
+	<polygon points="19.366 21.871 17.326 16.184 12.015 20.341 15.467 20.821" fill="#B2DEF0"/>
+	<polygon stroke="#231815" stroke-width=".883" points="26.67 24.372 26.841 24.444 26.847 24.324" fill="none"/>
+	<polygon points="26.841 24.444 32.016 26.633 33.496 22.923 26.67 24.372" fill="#009FE8"/>
+	<polygon points="18.483 26.182 26.67 24.372 19.366 21.871" fill="#B2DEF0"/>
+	<polygon points="12.015 20.341 13.03 27.427 15.467 20.821" fill="#009FE8"/>
+	<polygon points="15.472 20.821 13.03 27.427 19.366 21.871" fill="#0091DA"/>
+	<polygon points="13.03 27.427 18.483 26.182 19.366 21.871" fill="#009FE8"/>
+	<polygon stroke="#231815" stroke-width=".883" points="18.513 9.613 18.551 9.661 18.557 9.628" fill="none"/>
+	<polygon points="17.326 16.184 21.638 16.373 21.734 13.372" fill="#0062B0"/>
+	<polygon points="26.598 20.094 21.638 16.373 19.366 21.871" fill="#0091DA"/>
+	<polygon stroke="#231815" stroke-width=".883" points="18.565 9.584 18.513 9.613 18.557 9.628" fill="none"/>
+	<polygon points="19.366 21.871 21.638 16.373 17.326 16.184" fill="#009FE8"/>
+	<polygon points="27.674 37.025 27.696 34.844 27.704 34.844 25.818 33.715" fill="#0062B0"/>
+	<polygon points="22.38 36.945 27.674 37.025 25.818 33.715" fill="#004380"/>
+	<polygon points="25.818 33.715 27.704 34.844 27.733 34.826 29.15 29.685" fill="#004380"/>
+	<polygon points="34.184 36.543 38.106 32.875 33.262 33.436" fill="#0062B0"/>
+	<polygon points="29.025 39.629 34.439 39.639 34.184 36.543 30.761 37.369 34.184 36.543 33.262 33.436" fill="#004380"/>
+	<polygon points="27.733 34.826 31.735 31.562 29.15 29.685" fill="#0062B0"/>
+	<polygon points="38.106 32.875 36.115 28.76 33.262 33.436" fill="#004380"/>
+	<polygon points="8.233 38.234 13.408 38.234 10.157 35.918" fill="#004380"/>
+	<polygon points="20.802 5.7 23.371 4.685 25.897 0.445" fill="#0091DA"/>
+	<polygon points="21.422 2.228 16.33 7.479 19.587 5.474" fill="#0091DA"/>
+	<polygon points="31.794 31.562 33.262 33.436 36.115 28.76 29.15 29.685" fill="#0091DA"/>
+	<polygon points="23.371 4.685 20.802 5.7 23.749 6.923" fill="#009FE8"/>
+	<polygon points="20.091 5.584 21.416 2.257 19.572 5.489" fill="#B2DEF0"/>
+	<polygon points="23.371 4.685 23.749 6.923 25.897 0.453" fill="#B2DEF0"/>
+	<polygon points="11.949 33.77 10.157 35.918 14.068 33.5 10.851 31.116" fill="#0091DA"/>
+	<polygon points="12.091 15.271 12.015 20.341 17.326 16.184" fill="#009FE8"/>
+	<polygon points="13.408 38.234 14.068 33.5 10.157 35.918" fill="#0062B0"/>
+	<polygon points="36.115 28.76 35.874 23.749 32.016 26.633" fill="#0062B0"/>
+	<polygon points="29.15 29.685 36.115 28.76 32.016 26.633" fill="#009FE8"/>
+	<polygon points="32.016 26.633 35.874 23.749 33.496 22.923" fill="#0091DA"/>
+	<polygon points="35.874 23.749 39.888 21.392 38.415 20.271" fill="#0091DA"/>
+	<polygon points="26.32 27.788 29.15 29.685 32.016 26.633" fill="#0062B0"/>
+	<polygon points="35.592 21.789 33.496 22.923 35.874 23.749 38.415 20.271" fill="#009FE8"/>
+	<polygon points="23.467 29.293 26.32 27.788 18.483 26.182" fill="#004380"/>
+	<polygon points="26.67 24.372 26.32 27.788 32.016 26.633" fill="#0091DA"/>
+	<polygon points="26.67 24.372 18.483 26.182 26.32 27.788" fill="#0062B0"/>
+	<polygon points="41.31 15.947 43.109 18.205 43.153 18.166 46.034 14.463" fill="#B2DEF0"/>
+	<polygon points="42.13 21.831 45.163 20.729 43.109 18.205" fill="#0091DA"/>
+	<polygon points="43.109 18.205 39.848 21.394 42.12 21.838" fill="#0062B0"/>
+	<polygon points="38.415 20.271 39.895 21.401 41.31 15.947" fill="#009FE8"/>
+	<polygon points="43.109 18.205 45.163 20.739 46.045 14.463" fill="#009FE8"/>
+	<polygon points="41.31 15.947 39.848 21.394 43.109 18.205" fill="#0091DA"/>
+	<polygon points="19.572 30.852 23.467 29.293 18.483 26.182" fill="#0091DA"/>
+	<polygon points="17.326 16.184 12.178 9.938 12.091 15.271" fill="#0091DA"/>
+	<polygon points="16.348 7.312 12.178 9.938 16.758 11.086" fill="#0091DA"/>
+	<polygon points="16.758 11.086 12.178 9.938 17.326 16.184" fill="#009FE8"/>
+	<polygon points="12.091 15.271 12.178 9.938 10.17 14.218 12.059 15.267" fill="#009FE8"/>
+	<polygon points="17.326 16.184 18.551 9.661 18.513 9.613 16.348 7.312 16.758 11.086" fill="#0062B0"/>
+	<polygon points="18.551 9.661 19.587 5.474 16.348 7.31 18.513 9.613" fill="#009FE8"/>
+	<polygon points="7.319 19.133 12.059 15.267 10.17 14.218" fill="#0062B0"/>
+	<polygon points="7.319 19.133 12.015 20.341 12.091 15.271 12.059 15.267" fill="#0091DA"/>
+	<polygon points="14.068 33.5 16.146 30.228 13.03 27.427" fill="#004380"/>
+	<polygon points="16.146 30.228 19.572 30.852 18.483 26.182" fill="#009FE8"/>
+	<polygon points="10.851 31.116 14.068 33.5 13.03 27.427" fill="#0062B0"/>
+	<polygon points="13.03 27.427 16.146 30.228 18.483 26.182" fill="#0062B0"/>
+	<polygon points="10.002 25.88 12.015 20.341 7.319 19.133" fill="#0062B0"/>
+	<polygon points="10.002 25.88 10.851 31.116 13.03 27.427" fill="#009FE8"/>
+	<polygon points="12.015 20.341 10.002 25.88 13.03 27.427" fill="#0091DA"/>
+	<polygon points="33.496 22.923 26.598 20.094 26.67 24.372" fill="#B2DEF0"/>
+	<polygon points="26.67 24.372 26.67 24.372 26.598 20.094 19.366 21.871" fill="#009FE8"/>
+	<polygon points="18.551 9.661 17.326 16.184 21.734 13.372" fill="#0091DA"/>
+	<polygon points="18.551 9.661 21.734 13.372 24.945 11.771 18.557 9.628" fill="#009FE8"/>
+	<polygon points="21.638 16.373 24.945 11.771 21.734 13.372" fill="#B2DEF0"/>
+	<polygon points="18.551 9.661 24.945 11.771 23.749 6.923" fill="#B2DEF0"/>
+	<polygon points="23.749 6.923 20.802 5.7 19.587 5.474 18.551 9.655" fill="#0091DA"/>
+<radialGradient id="path2317_1_" gradientUnits="userSpaceOnUse" cy="749.64" cx="450.74" gradientTransform="matrix(-.00035547 .636 1.0099 0 -749.6 -284.87)" r="38.214">
+	<stop style="stop-color:#FFC391" offset="0"/>
+	<stop style="stop-color:#FA650B" offset="1"/>
+</radialGradient>
+<radialGradient id="path2317_2_" gradientUnits="userSpaceOnUse" cy="478.6" cx="-169.38" r="38.213">
+	<stop style="stop-color:#F9650D" offset="0"/>
+	<stop style="stop-color:#C15619" offset="1"/>
+</radialGradient>
+<path id="path2317" d="m31.904 0.668c-1.917 0-3.459 1.538-3.458 3.437-0.001 1.899 1.541 3.437 3.458 3.437s3.487-1.538 3.487-3.437-1.571-3.437-3.487-3.437zm-10.295 3.436c-1.727 0.126-3.384 0.555-4.918 1.182l3.108 5.263c0.793-0.249 1.617-0.386 2.486-0.43 0.17-0.008 0.341 0 0.513 0 4.762 0 8.736 3.311 9.728 7.733h6.188c-0.438-3.214-1.864-6.123-3.944-8.431-0.855 0.455-1.828 0.698-2.866 0.698-3.256 0-5.93-2.53-6.079-5.719-0.981-0.186-1.993-0.295-3.027-0.295-0.207 0-0.416-0.008-0.621 0-0.067 0.003-0.123-0.003-0.189 0-0.063 0.003-0.127-0.004-0.19 0-0.06 0.003-0.128-0.005-0.189-0.001zm-8.647 3.33c-2.491 1.921-4.392 4.567-5.404 7.599 1.599 1.084 2.648 2.905 2.648 4.967s-1.049 3.883-2.648 4.967c1.012 3.033 2.912 5.679 5.404 7.6l3.081-5.291c-1.981-1.806-3.216-4.401-3.216-7.276 0-2.873 1.237-5.466 3.216-7.276l-3.081-5.29zm-8.808 9.129c-1.917 0-3.486 1.538-3.486 3.437s1.569 3.437 3.486 3.437 3.459-1.538 3.458-3.437c0.001-1.899-1.541-3.437-3.458-3.437zm28.371 5.585c-0.992 4.422-4.966 7.733-9.728 7.733-1.054 0-2.048-0.158-2.999-0.457l-3.108 5.264c1.883 0.77 3.944 1.207 6.107 1.207 1.034 0 2.046-0.109 3.027-0.295 0.151-3.055 2.629-5.525 5.701-5.719 0.129-0.008 0.247 0 0.378 0 1.038 0 2.01 0.243 2.865 0.698 2.08-2.308 3.506-5.217 3.944-8.431h-6.187zm-0.621 10.311c-1.917 0-3.459 1.538-3.458 3.436-0.001 1.899 1.541 3.438 3.458 3.438s3.486-1.538 3.486-3.438c0-1.898-1.57-3.436-3.486-3.436z" display="none" stroke="url(#path2317_2_)" stroke-width="1.0018" fill="url(#path2317_1_)"/>
+<radialGradient id="path2272_1_" gradientUnits="userSpaceOnUse" cy="-556.3" cx="14518" gradientTransform="matrix(.0249 .0164 .0969 -.1444 -296.43 -307.57)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2272" opacity=".6" d="m12.813 8.46c-2.091 1.723-3.708 3.996-4.629 6.59 1.508 1.142 2.499 2.926 2.499 4.949 0 2.022-0.991 3.806-2.499 4.948 0.921 2.595 2.538 4.868 4.629 6.59l2.577-4.428c-1.86-1.814-3.024-4.325-3.024-7.11s1.166-5.293 3.024-7.111l-2.577-4.428zm-0.211 1.276l1.736 3.021c-1.663 1.833-2.718 4.221-2.814 6.85-0.105-1.912-0.999-3.63-2.34-4.845 0.769-1.912 1.946-3.626 3.418-5.026zm-1.078 10.653c0.095 2.629 1.149 5.019 2.814 6.85l-1.736 3.022c-1.471-1.399-2.65-3.113-3.418-5.027 1.342-1.215 2.235-2.934 2.34-4.845z" enable-background="new    " fill="url(#path2272_1_)"/>
+<radialGradient id="path2284_1_" gradientUnits="userSpaceOnUse" cy="-2252.8" cx="2106.8" gradientTransform="matrix(.107 -.0038 -.0054 -.1489 -235.1 -309.22)" r="26.269">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path2284" opacity=".6" d="m3.814 17.212c-1.403 0.157-2.487 1.35-2.487 2.787 0 1.542 1.256 2.786 2.813 2.786s2.813-1.244 2.813-2.786c0-1.543-1.256-2.787-2.813-2.787-0.104 0-0.186-0.003-0.226 0-0.033 0.003-0.066-0.004-0.1 0zm0.076 0.796c0.032-0.004 0.068 0.003 0.101 0h0.151c1.123 0 2.009 0.879 2.009 1.991 0 1.111-0.887 1.99-2.009 1.99s-2.01-0.879-2.01-1.99c-0.001-1.029 0.767-1.869 1.758-1.991z" enable-background="new    " fill="url(#path2284_1_)"/>
+<radialGradient id="path4951_1_" gradientUnits="userSpaceOnUse" cy="-2488.2" cx="2313.3" gradientTransform="matrix(.0984 -.0035 -.005 -.1369 -209.56 -329.98)" r="26.272">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4951" opacity=".6" d="m31.507 1.543c-1.29 0.144-2.286 1.241-2.286 2.561 0 1.418 1.154 2.561 2.586 2.561 1.431 0 2.585-1.143 2.585-2.561 0-1.417-1.154-2.561-2.585-2.561-0.095 0-0.171-0.003-0.208 0-0.031 0.002-0.062-0.003-0.092 0zm0.069 0.732c0.029-0.003 0.062 0.002 0.092 0h0.139c1.031 0 1.847 0.808 1.847 1.829 0 1.022-0.816 1.83-1.847 1.83-1.032 0-1.847-0.808-1.847-1.83 0-0.945 0.706-1.717 1.616-1.829z" enable-background="new    " fill="url(#path4951_1_)"/>
+<radialGradient id="path4955_1_" gradientUnits="userSpaceOnUse" cy="-959.54" cx="13788" gradientTransform="matrix(.0015 .0289 -.17 .0095 -164.09 -383.98)" r="116.22">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</radialGradient>
+<path id="path4955" opacity=".6" d="m17.743 5.665c2.492-0.895 5.214-1.12 7.863-0.607 0.221 1.824 1.24 3.534 2.951 4.534s3.71 1.055 5.421 0.36c1.738 2.052 2.862 4.527 3.285 7.125l-5.02-0.037c-0.615-2.451-2.164-4.665-4.519-6.042-2.356-1.377-5.054-1.644-7.511-0.99l-2.47-4.343zm1.184 0.455l1.697 2.944c2.373-0.482 4.916-0.183 7.186 1.038-1.565-1.033-2.576-2.629-2.94-4.351-1.999-0.305-4.031-0.169-5.943 0.369zm9.544 4.367c2.177 1.379 3.677 3.441 4.403 5.738l3.414 0.044c-0.455-1.921-1.322-3.753-2.562-5.341-1.691 0.52-3.586 0.417-5.255-0.441z" enable-background="new    " fill="url(#path4955_1_)"/>
+<linearGradient id="path4972_1_" y2="-66.955" gradientUnits="userSpaceOnUse" x2="83.174" gradientTransform="matrix(.8179 0 0 -.8127 -28.028 -17.751)" y1="-38.556" x1="83.174">
+	<stop style="stop-color:#D7E866" offset="0"/>
+	<stop style="stop-color:#8CAB2A" offset="1"/>
+</linearGradient>
+<path id="path4972" d="m55.102 24.5l-9.845 11.498-9.794-11.498h4.982c1.675-4.459-1.764-7.156-5.75-7.156-2.833 0-6.677 1.548-7.976 5.397-0.675 2.003-1.864 1.125-1.818-0.615 0.178-6.714 5.188-12.084 12.667-12.084s13.033 5.629 12.615 14.458h4.919z" stroke="#699536" fill="url(#path4972_1_)"/>
+<linearGradient id="path4980_1_" y2="394.45" gradientUnits="userSpaceOnUse" x2="-160.18" y1="450.45" x1="-206.75">
+	<stop style="stop-color:#fff" offset="0"/>
+	<stop style="stop-color:#fff;stop-opacity:0" offset="1"/>
+</linearGradient>
+<path id="path4980" opacity=".354" d="m52.811 25.5l-7.554 8.893-7.595-8.893h3.48c2.563-5.672-1.199-9.048-6.275-9.129-3.657-0.285-7.076 2.488-9.072 4.897 1.049-5.648 5.561-10.346 11.814-10.357 6.318-0.012 12.804 5.107 11.406 14.589h3.796z" stroke="url(#path4980_1_)" enable-background="new    " fill="none"/>
+</svg>

+ 5 - 0
ubiquity-frontend-gtk/usr/share/menu/ubiquity-frontend-gtk

@@ -0,0 +1,5 @@
+?package(ubiquity-frontend-gtk):\
+ needs="X11" \
+ section="Applications/System/Administration" \
+ title="Ubiquity Installer" command="/usr/bin/ubiquity" \
+ icon="/usr/share/pixmaps/ubiquity.xpm"

+ 141 - 0
ubiquity-frontend-gtk/usr/share/pixmaps/ubiquity.xpm

@@ -0,0 +1,141 @@
+/* XPM */
+static char *ubiquity[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 103 2 ",
+"   c #020102",
+".  c #080808",
+"X  c #385F00",
+"o  c #386000",
+"O  c #003E76",
+"+  c #434343",
+"@  c #494949",
+"#  c #545F44",
+"$  c #505050",
+"%  c #5C5C5C",
+"&  c #605F5F",
+"*  c #657A44",
+"=  c #626161",
+"-  c #6D6D6D",
+";  c #797F6F",
+":  c #706F70",
+">  c #737272",
+",  c #7B7A7A",
+"<  c #74C500",
+"1  c #6A9263",
+"2  c #BE9F0D",
+"3  c #B49711",
+"4  c #B69812",
+"5  c #B99B11",
+"6  c #BEA110",
+"7  c #B6A61E",
+"8  c #AAAB31",
+"9  c #C4A60E",
+"0  c #C7AB0F",
+"q  c #CAAE0E",
+"w  c #CEB30E",
+"e  c #D1B60D",
+"r  c #D4B90D",
+"t  c #C1A510",
+"y  c #C4A810",
+"u  c #CCBE1D",
+"i  c #D0B810",
+"p  c #DCC30C",
+"a  c #E3CA0B",
+"s  c #EDD509",
+"d  c #EFD809",
+"f  c #E6D210",
+"g  c #838F6F",
+"h  c #004380",
+"j  c #004B8D",
+"k  c #004F90",
+"l  c #005195",
+"z  c #00579D",
+"x  c #005B9D",
+"c  c #005BA2",
+"v  c #006CB6",
+"b  c #006EBC",
+"n  c #0072BB",
+"m  c #2077B9",
+"M  c #0075C0",
+"N  c #0079C5",
+"B  c #007CC8",
+"V  c #1486BA",
+"C  c #71B7BE",
+"Z  c #0083CD",
+"A  c #0D85CB",
+"S  c #0086D1",
+"D  c #018BD4",
+"F  c #008ED8",
+"G  c #0A97D5",
+"H  c #0194DD",
+"J  c #0998DE",
+"K  c #1A91D0",
+"L  c #2F9FDA",
+"P  c #3D9ED6",
+"I  c #0299E1",
+"U  c #199EE0",
+"Y  c #0FA1E6",
+"T  c #20A3E3",
+"R  c #26A8E6",
+"E  c #34ADE6",
+"W  c #35AFE8",
+"Q  c #4D95C6",
+"!  c #44B4E8",
+"~  c #5ABDEB",
+"^  c #62BDE8",
+"/  c #6CC5EC",
+"(  c #77C6EA",
+")  c #9D9C9C",
+"_  c #A6A6A6",
+"`  c #ADADAD",
+"'  c #B4B4B4",
+"]  c #BBBBBB",
+"[  c #C0BFBF",
+"{  c #82CCED",
+"}  c #C4C4C4",
+"|  c #C8C7C7",
+" . c #CBCBCB",
+".. c #D0CFCF",
+"X. c #D1CFD1",
+"o. c #D4D3D3",
+"O. c #D8D7D7",
+"+. c #D8D6D8",
+"@. c #DDDCDC",
+"#. c #E2E2E2",
+"$. c #EEEEEE",
+"%. c #F1F1F1",
+"&. c None",
+/* pixels */
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.I U &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.S K ( &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.I D S W &.&.&.&.0 e r q t &.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.Z H H S P &.&.t r p a s s a r t &.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.S Y ~ T H &.4 2 9 0 7 8 u f d r t &.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.N E ( ! I G C &.&.&.&.V 1 i s s r &.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.M I J ! / R ^ { W H &.&.&.6 p s s y &.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.H H F L Q m A J D b &.&.&.&.w d d w &.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.v v H n k &.B H N &.5 0 e p s &.&.q t 4 &.&.&.&.&.",
+"&.&.&.&.&.&.&.c &.&.&.&.&.v D x &.&.y a s &.&.&.&.6 &.&.&.&.&.&.",
+"&.&.&.&.&.&.&.n &.&.&.&.j &.z c &.&.&.y a &.&.&.t &.&.&.&.&.&.&.",
+"&.&.&.&.&.&.k z &.&.&.&.&.&.h &.&.&.&.&.t &.&.t &.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.O &.&.&.&.&.&.t t &.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.",
+"&.&.&.&.&. .@.#.@.#.@.#.@.#.@.#.#.$.%.$.%.$.%.%.%.$.$. .&.&.&.&.",
+"&.&.&.&.| $.%.%.%.%.%.%.%.%.%.%.%.%.%.%.$.%.%.%.%.%.%.#.} &.&.&.",
+"&.&.&. .$.$.$.$.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.#.&.&.&.",
+"&.&.' o.@.@.@.@.@.@.@.@.@.#.@.#.@.#.#.@.#.@.@.#.#.#.#.#.#. .&.&.",
+"&.` ] ] [ } [ } } | | | | |  . . . .| | | | } | [ } [ [ } ] ` &.",
+"&.'  . . .......o.O.o.@.O.@.@.@.@.O.O.o.o.o... . . . .| | | ] &.",
+"&.'  . . .o.o. .....X.o.o.+.@.#.@.@.@.o.o.o.o.o.X... . .|  .] &.",
+"&._ ` ` ' ' ) @ + # * # + $ _ } ] ] ] ] ] ' ' ' ' ' ' ` ` ` _ &.",
+"&.> % % % = @     X < X   . $ = & & % & & % % % % % % % % % : &.",
+"&.' | |  . .' > - ; g ; : , } +.O.o.o.o..... . .| } } } [ } ' &.",
+"&.'  . . .o...o.o.O.O.O.@.@.@.@.@.O.O.O.o.o.o.o. . . . .| | ] &.",
+"&.'  . . . . .o.o.o.+.O.O.@.@.@.O.O.O.O.o.o.o. .X. .|  .| | ] &.",
+"&._ ' ' ] ' ] ' ] ] ] ] [ [ [ ] [ ] ] ] ] ' ] ] ' ' ' ' ' ' _ &.",
+"&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&."
+};

+ 7 - 0
ubiquity-frontend-gtk/usr/share/python3/runtime.d/ubiquity-frontend-gtk.rtupdate

@@ -0,0 +1,7 @@
+#! /bin/sh
+set -e
+
+if [ "$1" = rtupdate ]; then
+	py3clean -p ubiquity-frontend-gtk /usr/lib/ubiquity
+	py3compile -p ubiquity-frontend-gtk -V 3.1- /usr/lib/ubiquity
+fi

+ 43 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/gtkwidgets.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- GLADE_CATALOG_PATH=/home/evan/code GLADE_MODULE_PATH=/home/evan/code/ glade -->
+<glade-catalog name="gtkwidgets" library="gladepython" domain="glade-3" depends="gtk+">
+ <init-function>glade_python_init</init-function>
+
+ <glade-widget-classes>
+   <glade-widget-class title="StylizedFrame" name="StylizedFrame" generic-name="stylizedframe">
+     <!-- ~/source/glade-3-3.7.0.is.3.6.7/plugins/gtk+/gtk+.xml -->
+     <!-- <property themed-icon="True" since="2.16" id="primary-icon-name" custom-layout="False" name="Primary Icon Name">
+			<parameter-spec>
+				<type>GParamString</type>
+			</parameter-spec>
+    </property> -->
+	 </glade-widget-class>
+   <glade-widget-class title="ResizeWidget" name="ResizeWidget" generic-name="resizewidget"/>
+   <glade-widget-class title="PartitionBox" name="PartitionBox" generic-name="partitionbox">
+       <!-- Probably need all of:
+       <set-property-function>glade_gtk_image_set_property</set-property-function>
+       <get-property-function>glade_gtk_image_get_property</get-property-function>
+       <read-widget-function>glade_gtk_image_read_widget</read-widget-function>
+       <write-widget-function>glade_gtk_image_write_widget</write-widget-function>
+
+       <create-editable-function>glade_gtk_image_create_editable</create-editable-function>
+       -->
+       <!-- See http://library.gnome.org/devel/gladeui/stable/widgetclasses.html -->
+       <!-- http://www.pygtk.org/articles/custom-widgets-glade/Custom_PyGTK_Widgets_in_Glade3-part-2.html
+            (using a custom adaptor) -->
+       <property themed-icon="True" id="icon-name" custom-layout="True" name="Icon Name"/>
+   </glade-widget-class>
+   <glade-widget-class title="StateBox" name="StateBox" generic-name="statebox"/>
+   <glade-widget-class title="GreyableBin" name="GreyableBin" generic-name="greyablebin"/>
+   <glade-widget-class title="DiskBox" name="DiskBox" generic-name="diskbox"/>
+ </glade-widget-classes>
+
+ <glade-widget-group name="ubiquity" title="Ubiquity">
+   <glade-widget-class-ref name="StylizedFrame"/>
+   <glade-widget-class-ref name="ResizeWidget"/>
+   <glade-widget-class-ref name="PartitionBox"/>
+   <glade-widget-class-ref name="StateBox"/>
+   <glade-widget-class-ref name="GreyableBin"/>
+   <glade-widget-class-ref name="DiskBox"/>
+ </glade-widget-group>
+</glade-catalog>

+ 12 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/nm.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glade-catalog name="nm" library="gladepython" domain="glade-3" depends="gtk+">
+ <init-function>glade_python_init</init-function>
+
+ <glade-widget-classes>
+   <glade-widget-class title="NetworkManagerWidget" name="NetworkManagerWidget" generic-name="nmwidget"/>
+ </glade-widget-classes>
+
+ <glade-widget-group name="networkmanager" title="Network Manager">
+   <glade-widget-class-ref name="NetworkManagerWidget"/>
+ </glade-widget-group>
+</glade-catalog>

+ 105 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepGhost.ui

@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepGhost">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <property name="orientation">vertical</property>
+    <property name="spacing">6</property>
+    <child>
+      <object class="GtkLabel" id="ghost_section_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">Install from liveos or ghost image</property>
+        <property name="wrap">True</property>
+        <property name="xalign">0</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkAlignment" id="alignment1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="left_padding">12</property>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkRadioButton" id="no_ghost">
+                <property name="label" translatable="yes">Install from liveos</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkRadioButton" id="use_ghost">
+                    <property name="label" translatable="yes">Install from ghost image</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">no_ghost</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFileChooserButton" id="ghost_file_chooser_button">
+                    <property name="title" translatable="yes">Select a ghost image</property>
+                    <property name="visible">False</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 81 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepIsOEM.ui

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepIsOEM">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <property name="orientation">vertical</property>
+    <property name="spacing">6</property>
+    <child>
+      <object class="GtkLabel" id="oem_section_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">You are about to install the operating system. Do you want to set up the account information of this computer now?</property>
+        <property name="wrap">True</property>
+        <property name="xalign">0</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkAlignment" id="alignment1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="left_padding">12</property>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkRadioButton" id="no_oem">
+                <property name="label" translatable="yes">Yes, set up the account information and start the installation now.</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkRadioButton" id="yes_oem">
+                <property name="label" translatable="yes">No, install only the operating system, and set the account information next time start.</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+                <property name="group">no_oem</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 153 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepKeyboardConf.ui

@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-requires gtkwidgets 0.0 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkAlignment" id="stepKeyboardConf">
+    <property name="visible">True</property>
+    <property name="top_padding">10</property>
+    <property name="left_padding">10</property>
+    <property name="right_padding">10</property>
+    <child>
+      <object class="GtkBox" id="keyboard_conf_vbox">
+        <property name="visible">True</property>
+        <property name="border_width">6</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkNotebook" id="notebook1">
+            <property name="visible">True</property>
+            <property name="show_tabs">False</property>
+            <property name="show_border">False</property>
+            <child>
+              <object class="GtkBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="keyboard_comment_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Choose your keyboard layout:</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="keyboard_layout_hbox">
+                    <property name="visible">True</property>
+                    <property name="spacing">12</property>
+                    <property name="homogeneous">True</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">never</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkTreeView" id="keyboardlayoutview">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="headers_visible">False</property>
+                            <property name="fixed_height_mode">True</property>
+                            <signal name="row_activated" handler="on_keyboardlayoutview_row_activated"/>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scrolledwindow2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hscrollbar_policy">never</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkTreeView" id="keyboardvariantview">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="headers_visible">False</property>
+                            <property name="fixed_height_mode">True</property>
+                            <signal name="row_activated" handler="on_keyboardvariantview_row_activated"/>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="keyboard_test">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">&#x2022;</property>
+                    <property name="placeholder_text">Type here to test your keyboard</property>
+                    <property name="activates_default">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment1">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="xscale">0</property>
+            <property name="yscale">0</property>
+            <child>
+              <object class="GtkButton" id="deduce_layout">
+                <property name="label" translatable="yes">Detect Keyboard Layout</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 55 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepKylinLanguage.ui

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepLanguage">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <property name="orientation">vertical</property>
+    <property name="spacing">10</property>
+    <child>
+      <object class="GtkScrolledWindow" id="scrolledwindow">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hscrollbar_policy">never</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkTreeView" id="language_treeview">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="vexpand">True</property>
+            <property name="headers_visible">False</property>
+            <signal name="row-activated" handler="on_language_activated" swapped="no"/>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="treeview-selection1"/>
+            </child>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="language_treeview-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes">Language Selector</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="pack_type">end</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkLabel" id="welcome_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">welcome_label</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 261 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLanguage.ui

@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkBox" id="stepLanguage">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <child>
+      <object class="GtkScrolledWindow" id="scrolledwindow">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hscrollbar_policy">never</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkTreeView" id="language_treeview">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="headers_visible">False</property>
+            <signal name="row-activated" handler="on_language_activated" swapped="no"/>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="treeview-selection1"/>
+            </child>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="language_treeview-atkobject">
+                <property name="AtkObject::accessible-name" translatable="yes">Language Selector</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkAlignment" id="alignment1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="top_padding">20</property>
+        <property name="left_padding">30</property>
+        <property name="right_padding">20</property>
+        <child>
+          <object class="GtkBox" id="vbox2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">36</property>
+            <child>
+              <object class="GtkBox" id="choice_section_vbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">30</property>
+                <child>
+                  <object class="GtkTable" id="table1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="n_rows">2</property>
+                    <property name="n_columns">2</property>
+                    <property name="column_spacing">32</property>
+                    <property name="row_spacing">20</property>
+                    <child>
+                      <object class="GtkImage" id="image1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="yalign">0</property>
+                        <property name="pixbuf">../pixmaps/cd_in_tray.png</property>
+                      </object>
+                      <packing>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkImage" id="image2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="yalign">0</property>
+                        <property name="pixbuf">../pixmaps/ubuntu_installed.png</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="install_ubuntu">
+                        <property name="label" translatable="yes">Install ${RELEASE}</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_action_appearance">False</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" id="install_ubuntu-atkobject">
+                            <property name="AtkObject::accessible-name" translatable="yes">Install Ubuntu</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="try_ubuntu">
+                        <property name="label" translatable="yes">Try ${RELEASE}</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="use_action_appearance">False</property>
+                        <child internal-child="accessible">
+                          <object class="AtkObject" id="try_ubuntu-atkobject">
+                            <property name="AtkObject::accessible-name" translatable="yes">Try Ubuntu</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="try_install_text_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <property name="label" translatable="yes">You can try ${RELEASE} without making any changes to your system, or install alongside or instead of your current operating system.</property>
+                    <property name="wrap">True</property>
+                    <property name="max_width_chars">50</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="extra_notes_vbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkLabel" id="release_notes_label">
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <property name="label" translatable="yes">You may wish to &lt;a href=""&gt;read the release notes&lt;/a&gt; or &lt;a href=""&gt;update this installer&lt;/a&gt;.</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                    <property name="max_width_chars">50</property>
+                    <signal name="activate-link" handler="on_link_clicked" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="oem_id_vbox">
+                    <property name="can_focus">False</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="oem_id_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="label" translatable="yes">You are installing in system manufacturer mode. Please enter a unique name for this batch of systems. This name will be saved on the installed system and can be used to help with bug reports.</property>
+                        <property name="wrap">True</property>
+                        <property name="max_width_chars">50</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="alignment2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="xalign">0</property>
+                        <property name="xscale">0</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkEntry" id="oem_id_entry">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="invisible_char">•</property>
+                            <property name="activates_default">True</property>
+                            <property name="width_chars">30</property>
+                            <accessibility>
+                              <relation type="labelled-by" target="oem_id_label"/>
+                            </accessibility>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" id="oem_id_entry-atkobject">
+                                <property name="AtkObject::accessible-name" translatable="yes">System Batch Name</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 34 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLanguageOnly.ui

@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkBox" id="stepLanguage">
+    <property name="visible">True</property>
+    <property name="border_width">6</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkScrolledWindow" id="language_scrolledwindow">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hscrollbar_policy">automatic</property>
+        <property name="vscrollbar_policy">automatic</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkIconView" id="language_iconview">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="row_spacing">0</property>
+            <property name="column_spacing">0</property>
+            <property name="margin">0</property>
+            <signal name="item_activated" handler="on_language_activated"/>
+            <signal name="selection_changed" handler="on_language_selection_changed"/>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 71 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLicense.ui

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepLicense">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkBox" id="box1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="vscrollbar_policy">always</property>
+            <property name="shadow_type">in</property>
+            <property name="min_content_width">600</property>
+            <property name="min_content_height">330</property>
+            <property name="overlay_scrolling">False</property>
+            <child>
+              <object class="GtkTextView" id="textview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hscroll_policy">natural</property>
+                <property name="vscroll_policy">natural</property>
+                <property name="pixels_inside_wrap">5</property>
+                <property name="editable">False</property>
+                <property name="wrap_mode">char</property>
+                <property name="cursor_visible">False</property>
+                <property name="accepts_tab">False</property>
+                <property name="monospace">True</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkCheckButton" id="license_agree_box">
+            <property name="label" translatable="yes">Yes, I agree to the License Agreement</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="xalign">0</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>

+ 43 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepLocation.ui

@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-requires gtkwidgets 0.0 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <object class="GtkBox" id="stepLocation">
+    <property name="visible">True</property>
+    <property name="spacing">12</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkEventBox" id="timezone_map_window">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkAlignment" id="alignment1">
+        <property name="visible">True</property>
+        <property name="left_padding">20</property>
+        <property name="right_padding">20</property>
+        <child>
+          <object class="GtkEntry" id="timezone_city_entry">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="invisible_char">&#x2022;</property>
+            <property name="placeholder_text">[type here to change]</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 1202 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAdvanced.ui

@@ -0,0 +1,1202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkDialog" id="partition_dialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Create partition</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox7">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkGrid" id="partition_dialog_grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="valign">start</property>
+            <property name="border_width">6</property>
+            <property name="row_spacing">6</property>
+            <property name="column_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="partition_size_label">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">Size:</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_create_place_label">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">Location:</property>
+                <property name="single_line_mode">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_use_label">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">Use as:</property>
+                <property name="single_line_mode">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="partition_use_combo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="hexpand">True</property>
+                <signal name="changed" handler="on_partition_use_combo_changed" swapped="no"/>
+                <accessibility>
+                  <relation type="labelled-by" target="partition_use_label"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_mount_label">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">Mount point:</property>
+                <property name="single_line_mode">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">5</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="partition_mount_combo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="has_entry">True</property>
+                <child internal-child="entry">
+                  <object class="GtkEntry" id="combobox-entry4">
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">•</property>
+                  </object>
+                </child>
+                <accessibility>
+                  <relation type="labelled-by" target="partition_mount_label"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">5</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="partition_place_grid">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="row_spacing">6</property>
+                <child>
+                  <object class="GtkRadioButton" id="partition_create_place_beginning">
+                    <property name="label" translatable="yes">Beginning of this space</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <accessibility>
+                      <relation type="labelled-by" target="partition_create_place_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="partition_create_place_end">
+                    <property name="label" translatable="yes">End of this space</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">partition_create_place_beginning</property>
+                    <accessibility>
+                      <relation type="labelled-by" target="partition_create_place_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="partition_size_grid">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="column_spacing">6</property>
+                <child>
+                  <object class="GtkSpinButton" id="partition_size_spinbutton">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">●</property>
+                    <property name="activates_default">True</property>
+                    <property name="width_chars">6</property>
+                    <property name="xalign">1</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <property name="climb_rate">100</property>
+                    <property name="numeric">True</property>
+                    <accessibility>
+                      <relation type="labelled-by" target="partition_size_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="partition_add_units">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">MB</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_create_type_label">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="xalign">1</property>
+                <property name="yalign">0</property>
+                <property name="label" translatable="yes">Type:</property>
+                <property name="single_line_mode">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkGrid" id="partiation_types_grid">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="row_spacing">6</property>
+                <child>
+                  <object class="GtkRadioButton" id="partition_create_type_primary">
+                    <property name="label" translatable="yes">Primary</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <accessibility>
+                      <relation type="labelled-by" target="partition_create_type_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="partition_create_type_logical">
+                    <property name="label" translatable="yes">Logical</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">partition_create_type_primary</property>
+                    <accessibility>
+                      <relation type="labelled-by" target="partition_create_type_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="partition_edit_format_checkbutton">
+                <property name="label" translatable="yes">Format the partition</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">4</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area7">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="partition_encryption_settings">
+                <property name="label" translatable="yes">Encryption options...</property>
+                <property name="use_action_appearance">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancelbutton1">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="partition_dialog_okbutton">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">partition_encryption_settings</action-widget>
+      <action-widget response="-6">cancelbutton1</action-widget>
+      <action-widget response="-5">partition_dialog_okbutton</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="partition_encryption_options">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Encryption Options</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="transient_for">partition_dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox5">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkGrid" id="encryption_options_grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">6</property>
+            <property name="row_spacing">6</property>
+            <property name="column_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="encryption_algorithm">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">Encryption:</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="partition_encryption_methods_combo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_encryption_key_size">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">Key size:</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="partition_encryption_key_size_combo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="crypto_iv_algorithm">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">1</property>
+                <property name="label" translatable="yes">IV algorithm:</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="partition_encryption_iv_combo">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area5">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton2">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="okbutton2">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancelbutton2</action-widget>
+      <action-widget response="-5">okbutton2</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="partition_lvm_dialog">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <property name="title" translatable="yes">Logical Volume Management</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="transient_for">partition_dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox4">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkGrid" id="lvm_group_grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">6</property>
+            <property name="row_spacing">6</property>
+            <property name="column_spacing">6</property>
+            <property name="column_homogeneous">True</property>
+            <child>
+              <object class="GtkLabel" id="partition_lvm_explanation">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">
+Logical Volume Management (LVM) lets Ubuntu treat multiple physical volumes as a single volume.</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_lvm_physical_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Physical volumes:</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="partition_lvm_logical_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Volume groups:</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="partition_lvm_physical_scroll">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="partition_lvm_physical_tree">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection2"/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="partition_lvm_logical_scroll">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="partition_lvm_logical_tree">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection3"/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolbar" id="partition_lvm_physical_toolbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="toolbar_style">text</property>
+                <property name="show_arrow">False</property>
+                <property name="icon_size">1</property>
+                <child>
+                  <object class="GtkMenuToolButton" id="partition_lvm_add_to">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Add to</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToolButton" id="partition_lvm_remove">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Remove</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolbar" id="partition_lvm_logical_toolbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="toolbar_style">text</property>
+                <property name="show_arrow">False</property>
+                <child>
+                  <object class="GtkToolButton" id="partition_lvm_logical_remove">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Remove group</property>
+                    <property name="use_underline">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkGrid" id="grid2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="column_spacing">6</property>
+                <child>
+                  <object class="GtkButton" id="partition_lvm_revert">
+                    <property name="label" translatable="yes">Revert</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="partition_lvm_status">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">1 group created, 1 group changed</property>
+                    <property name="single_line_mode">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">False</property>
+                <property name="pack_type">end</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancelbutton3">
+                <property name="label">gtk-cancel</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="okbutton3">
+                <property name="label">gtk-ok</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancelbutton3</action-widget>
+      <action-widget response="-5">okbutton3</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkMenu" id="partition_lvm_add_to_menu">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkMenuItem" id="partition_new_group">
+        <property name="use_action_appearance">False</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparatorMenuItem" id="separator">
+        <property name="use_action_appearance">False</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAlignment" id="stepPartAdvanced">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="top_padding">20</property>
+    <property name="bottom_padding">10</property>
+    <property name="left_padding">20</property>
+    <property name="right_padding">20</property>
+    <child>
+      <object class="GtkGrid" id="part_advanced_grid">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">6</property>
+        <child>
+          <object class="GtkGrid" id="bootloader_grid">
+            <property name="can_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="grub_device_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Help for GRUB device selection goes here.</property>
+                <property name="wrap">True</property>
+                <accessibility>
+                  <relation type="label-for" target="grub_device_entry"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="grub_device_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                  <attributes>
+                    <attribute name="text">0</attribute>
+                  </attributes>
+                </child>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext2">
+                    <property name="width-chars">60</property>
+                  </object>
+                  <attributes>
+                    <attribute name="text">1</attribute>
+                  </attributes>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="partition_list_buttonbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkLabel" id="part_advanced_recalculating_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Recalculating partitions…</property>
+                <property name="ellipsize">end</property>
+              </object>
+              <packing>
+                <property name="left_attach">4</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSpinner" id="part_advanced_recalculating_spinner">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+              </object>
+              <packing>
+                <property name="left_attach">5</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="partition_button_new_label">
+                <property name="label" translatable="yes">New partition table</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="sensitive">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="halign">end</property>
+                <signal name="clicked" handler="on_partition_list_new_label_activate" swapped="no"/>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="partition_button_lvm">
+                <property name="label" translatable="yes">LVM...</property>
+                <property name="use_action_appearance">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="halign">end</property>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="partition_button_undo">
+                <property name="label" translatable="yes">Revert</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="sensitive">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="halign">end</property>
+                <signal name="clicked" handler="on_partition_list_undo_activate" swapped="no"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkToolbar" id="partition_toolbar">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="hexpand">True</property>
+                <property name="toolbar_style">icons</property>
+                <property name="show_arrow">False</property>
+                <property name="icon_size">2</property>
+                <child>
+                  <object class="GtkToolButton" id="partition_button_new">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Add...</property>
+                    <property name="use_underline">True</property>
+                    <property name="icon_name">list-add-symbolic</property>
+                    <signal name="clicked" handler="on_partition_list_new_activate" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToolButton" id="partition_button_delete">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Delete</property>
+                    <property name="use_underline">True</property>
+                    <property name="icon_name">list-remove-symbolic</property>
+                    <signal name="clicked" handler="on_partition_list_delete_activate" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkToolButton" id="partition_button_edit">
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Change...</property>
+                    <property name="use_underline">True</property>
+                    <signal name="clicked" handler="on_partition_list_edit_activate" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="homogeneous">True</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="shadow_type">in</property>
+            <property name="min_content_height">180</property>
+            <property name="vscrollbar_policy">always</property>
+            <child>
+              <object class="GtkTreeView" id="partition_list_treeview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="rules_hint">True</property>
+                <property name="enable_search">False</property>
+                <signal name="button-press-event" handler="on_partition_list_treeview_button_press_event" swapped="no"/>
+                <signal name="key-press-event" handler="on_partition_list_treeview_key_press_event" swapped="no"/>
+                <signal name="popup-menu" handler="on_partition_list_treeview_popup_menu" swapped="no"/>
+                <signal name="row-activated" handler="on_partition_list_treeview_row_activated" swapped="no"/>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection"/>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="partition_warning_grid">
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkImage" id="part_advanced_warning_image">
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="stock">gtk-dialog-warning</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="part_advanced_warning_message">
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="xalign">0</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="partition_kylin_grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkImage" id="part_advanced_kylin_image">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="stock">gtk-dialog-warning</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="part_advanced_kylin_message">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Warning: The size of root is no less than 8G.</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 477 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAsk.ui

@@ -0,0 +1,477 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkAlignment" id="stepPartAsk">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="top_padding">20</property>
+    <property name="left_padding">24</property>
+    <property name="right_padding">24</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">3</property>
+        <property name="column_spacing">12</property>
+        <child>
+          <object class="GtkLabel" id="part_ask_heading">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">This computer currently has Ubuntu 11.04 on it. What would you like to do?</property>
+            <property name="wrap">True</property>
+            <property name="width_chars">45</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="left_padding">24</property>
+            <child>
+              <object class="GtkGrid" id="grid2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkBox" id="backupbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkCheckButton" id="backup_checkbutton">
+                        <property name="label" translatable="yes">Create Backup Partition</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="clicked" handler="on_backup_checkbutton_clicked" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="backuplabel">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">When checked, you must create one. Its mount point is /backup.</property>
+                        <property name="wrap">True</property>
+                        <property name="xalign">0</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="backup_checkbutton_factory">
+                        <property name="label" translatable="yes">Create Factory Backup</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="clicked" handler="on_backup_checkbutton_factory_clicked" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="alignment4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="backuplabel_factory">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">When checked, Installation will be factory backup.</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkExpander" id="expander1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child>
+                      <object class="GtkGrid" id="grid3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkRadioButton" id="resize_use_free">
+                            <property name="label" translatable="yes">Install Ubuntu alongside Windows</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="margin_top">9</property>
+                            <property name="xalign">0</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">custom_partitioning</property>
+                            <signal name="clicked" handler="part_ask_option_changed" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="resize_use_free_desc">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">&lt;span size="small"&gt;Documents, music, and other personal files will be kept. You can choose which operating system you want each time the computer starts up.&lt;/span&gt;</property>
+                            <property name="use_markup">True</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="replace_partition">
+                            <property name="label" translatable="yes">Erase Ubuntu and reinstall</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="margin_top">9</property>
+                            <property name="xalign">0</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">custom_partitioning</property>
+                            <signal name="clicked" handler="part_ask_option_changed" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="replace_partition_desc">
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">&lt;span size="small"&gt;&lt;span foreground="darkred"&gt;Warning:&lt;/span&gt; This will delete all your Ubuntu 11.04 programs, documents, photos, music, and any other files.&lt;/span&gt;</property>
+                            <property name="use_markup">True</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">3</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="reuse_partition">
+                            <property name="label" translatable="yes">Upgrade Ubuntu to 11.10</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="margin_top">9</property>
+                            <property name="xalign">0</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">custom_partitioning</property>
+                            <signal name="clicked" handler="part_ask_option_changed" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="reuse_partition_desc">
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">&lt;span size="small"&gt;Documents, music, and other personal files will be kept. Installed software will be kept where possible. System-wide settings will be cleared.&lt;/span&gt;</property>
+                            <property name="use_markup">True</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="other_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"> Others</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">13</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_top">15</property>
+                    <property name="left_padding">25</property>
+                    <property name="right_padding">25</property>
+                    <child>
+                      <object class="GtkHSeparator" id="hseparator2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">12</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="use_lvm_desc">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;span size="small"&gt;This will set up Logical Volume Management. It allows taking snapshots and easier partition resizing.&lt;/span&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">11</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="use_lvm">
+                    <property name="label" translatable="yes">Use LVM with the new Ubuntu installation</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_top">9</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="clicked" handler="on_crypto_lvm_toggled" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">10</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="use_crypto_desc">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;span size="small"&gt;You’ll choose a security key in the next step.&lt;/span&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">9</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="use_crypto">
+                    <property name="label" translatable="yes">Encrypt the new Ubuntu installation for security</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_top">21</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="clicked" handler="on_crypto_lvm_toggled" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">8</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="use_device_desc">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;span size="small"&gt;&lt;span foreground="darkred"&gt;Warning:&lt;/span&gt; This will delete all of your Windows programs, documents, photos, music, and any other files.&lt;/span&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">7</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="use_device">
+                    <property name="label" translatable="yes">Replace Windows with Ubuntu</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_top">9</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">custom_partitioning</property>
+                    <signal name="clicked" handler="part_ask_option_changed" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">6</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="custom_partitioning">
+                    <property name="label" translatable="yes">Advanced installation</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_top">9</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="clicked" handler="part_ask_option_changed" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment5">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_top">15</property>
+                    <property name="top_padding">5</property>
+                    <property name="bottom_padding">5</property>
+                    <child>
+                      <object class="GtkHSeparator" id="hseparator3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="databox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkCheckButton" id="data_checkbutton">
+                        <property name="label" translatable="yes">Create Data Partition</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="clicked" handler="on_data_checkbutton_clicked" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="alignment6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="datalabel">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">When checked, you must create one. Its mount point is /data. When you erase disk and install Kylin, data partition is the unallocated space except from other partitions.</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="custom_partitioning_desc">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;span size="small"&gt;You can create or resize partitions yourself, or choose multiple partitions for Ubuntu.&lt;/span&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="alignment2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_top">15</property>
+                    <property name="left_padding">25</property>
+                    <property name="right_padding">25</property>
+                    <child>
+                      <object class="GtkHSeparator" id="hseparator1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">5</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 167 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartAuto.ui

@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name gchararray1 -->
+      <column type="gchararray"/>
+      <!-- column-name gchararray2 -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkAlignment" id="stepPartAuto">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="top_padding">20</property>
+    <property name="left_padding">20</property>
+    <property name="right_padding">20</property>
+    <child>
+      <object class="GtkBox" id="vbox2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">24</property>
+        <child>
+          <object class="GtkBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="part_auto_select_drive_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Select drive:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="part_auto_select_drive">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="model">liststore1</property>
+                <signal name="changed" handler="part_auto_select_drive_changed" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkLabel" id="part_auto_allocate_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Allocate drive space by dragging the divider below:</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="top_padding">9</property>
+                <child>
+                  <object class="GtkEventBox" id="eventbox1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkNotebook" id="partition_container">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="show_tabs">False</property>
+                        <property name="show_border">False</property>
+                        <child>
+                          <object class="ResizeWidget" id="resizewidget">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                          </object>
+                        </child>
+                        <child type="tab">
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <object class="PartitionBox" id="partitionbox">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="extra"> </property>
+                            <property name="title">Ubuntu</property>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child type="tab">
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child type="tab">
+                          <placeholder/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="top_padding">16</property>
+                <child>
+                  <object class="GtkLabel" id="part_auto_hidden_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">&lt;small&gt;5 smaller partitions are hidden, use the &lt;a href=""&gt;advanced partitioning tool&lt;/a&gt; for more control&lt;/small&gt;</property>
+                    <property name="use_markup">True</property>
+                    <signal name="activate-link" handler="part_auto_hidden_label_activate_link" swapped="no"/>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 372 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPartCrypto.ui

@@ -0,0 +1,372 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAlignment" id="stepPartCrypto">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="xscale">0</property>
+    <property name="top_padding">20</property>
+    <property name="left_padding">24</property>
+    <property name="right_padding">24</property>
+    <child>
+      <object class="GtkGrid" id="crypto_grid">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">6</property>
+        <property name="column_spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="verified_crypto_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">1</property>
+            <property name="label" translatable="yes">Confirm the security key:</property>
+            <property name="justify">right</property>
+            <property name="single_line_mode">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">1</property>
+            <property name="label" translatable="yes">Choose a security key:</property>
+            <property name="justify">right</property>
+            <property name="single_line_mode">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_description">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Disk encryption protects your files in case you lose your computer. It requires you to enter a security key each time the computer starts up.</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_warning">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">&lt;span foreground="darkred"&gt;Warning:&lt;/span&gt; If you lose this security key, all data will be lost. If you need to, write down your key and keep it in a safe place elsewhere.</property>
+            <property name="use_markup">True</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_extra_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">end</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">For more security:</property>
+            <property name="justify">right</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">5</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkCheckButton" id="crypto_overwrite_space">
+            <property name="label" translatable="yes">Overwrite the available space first</property>
+            <property name="use_action_appearance">False</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_action_appearance">False</property>
+            <property name="xalign">0</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">5</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_extra_time">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">24</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">&lt;span weight="light" size="small"&gt;The installation may take much longer.&lt;/span&gt;</property>
+            <property name="use_markup">True</property>
+            <property name="single_line_mode">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">6</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="crypto_description_2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="xalign">0</property>
+            <property name="label" translatable="yes">Any files outside of Ubuntu will not be encrypted.</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="password_grid">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="row_spacing">6</property>
+            <property name="column_spacing">6</property>
+            <child>
+              <object class="GtkEntry" id="password">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="visibility">False</property>
+                <property name="invisible_char">●</property>
+                <property name="activates_default">True</property>
+                <property name="width_chars">20</property>
+                <property name="invisible_char_set">True</property>
+                <signal name="changed" handler="info_loop" swapped="no"/>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="verified_password">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="visibility">False</property>
+                <property name="invisible_char">●</property>
+                <property name="activates_default">True</property>
+                <property name="width_chars">20</property>
+                <property name="invisible_char_set">True</property>
+                <signal name="changed" handler="info_loop" swapped="no"/>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkNotebook" id="password_strength">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="show_tabs">False</property>
+                <property name="show_border">False</property>
+                <child>
+                  <object class="GtkFixed" id="empty">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password/too_short">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Short password</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#8b8b00000000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password/weak">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Weak password</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#8b8b00000000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password/fair">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Fair password</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#ffff8c8c0000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password/good">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Good password</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#000064640000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password/strong">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Strong password</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#000064640000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">5</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkNotebook" id="password_match">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="show_tabs">False</property>
+                <property name="show_border">False</property>
+                <child>
+                  <object class="GtkFixed" id="empty2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="password_mismatch">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Mismatch</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333329995"/>
+                      <attribute name="foreground" value="#8b8b00000000"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="password_ok">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="stock">gtk-apply</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">2</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 26 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPreInstall.ui

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepPreInstall">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkLabel" id="preinstall_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_top">10</property>
+        <property name="margin_bottom">10</property>
+        <property name="label" translatable="yes">configure done, click continue to install.</property>
+        <property name="use_markup">True</property>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 575 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepPrepare.ui

@@ -0,0 +1,575 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkAlignment" id="stepNoSpace">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="top_padding">20</property>
+    <property name="bottom_padding">20</property>
+    <property name="left_padding">20</property>
+    <property name="right_padding">20</property>
+    <child>
+      <object class="GtkBox" id="insufficient_space">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="no_show_all">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="label_required_space">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">6</property>
+            <property name="margin_bottom">6</property>
+            <property name="label" translatable="yes">You need at least ${SIZE} disk space to install ${RELEASE}.</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label_free_space">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">6</property>
+            <property name="margin_bottom">6</property>
+            <property name="label" translatable="yes">This computer has only ${SIZE}.</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAlignment" id="stepPrepare">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="top_padding">20</property>
+    <property name="bottom_padding">20</property>
+    <property name="left_padding">20</property>
+    <property name="right_padding">20</property>
+    <child>
+      <object class="GtkBox" id="prepare_vbox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">12</property>
+        <child>
+          <object class="GtkBox" id="box3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkCheckButton" id="prepare_download_updates">
+                <property name="label" translatable="yes">Download updates while installing ${RELEASE}</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="left_padding">25</property>
+                <child>
+                  <object class="GtkLabel" id="label_download_updates">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_bottom">6</property>
+                    <property name="label" translatable="yes">Not available because there is no Internet connection.
+</property>
+                    <property name="wrap">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <attributes>
+                      <attribute name="scale" value="0.83333333333333337"/>
+                    </attributes>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="nonfree_vbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkCheckButton" id="prepare_nonfree_software">
+                <property name="label" translatable="yes">Install third-party software for graphics and Wi-Fi hardware, Flash, MP3 and other media</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_nonfree_toggled" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="left_padding">25</property>
+                <child>
+                  <object class="GtkBox" id="box1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="valign">start</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkBox" id="box4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="orientation">vertical</property>
+                        <child>
+                          <object class="GtkLabel" id="prepare_foss_disclaimer_license">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="margin_top">3</property>
+                            <property name="label" translatable="yes">This software is subject to license terms included with its documentation. Some is proprietary. 
+</property>
+                            <property name="wrap">True</property>
+                            <property name="ellipsize">middle</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                            <attributes>
+                              <attribute name="scale" value="0.83333333333333337"/>
+                            </attributes>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="prepare_foss_disclaimer_extra_label">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Fluendo MP3 plugin includes MPEG Layer-3 audio decoding technology licensed from Fraunhofer IIS and Technicolor SA.
+</property>
+                            <property name="wrap">True</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">2.2351741291171123e-10</property>
+                            <attributes>
+                              <attribute name="scale" value="0.83333333333333337"/>
+                            </attributes>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="secureboot_box">
+                        <property name="can_focus">False</property>
+                        <property name="margin_top">6</property>
+                        <property name="margin_bottom">6</property>
+                        <property name="orientation">vertical</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkBox" id="box5">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <object class="GtkLabel" id="secureboot_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">start</property>
+                                <property name="margin_top">6</property>
+                                <property name="margin_bottom">6</property>
+                                <property name="label" translatable="yes">Installing third-party drivers requires turning off Secure Boot. To do this, you need to choose a security key now, and enter it when the system restarts.</property>
+                                <property name="use_markup">True</property>
+                                <property name="wrap">True</property>
+                                <property name="xalign">0</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" id="secureboot_more_button">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="relief">none</property>
+                                <signal name="clicked" handler="show_learn_more" swapped="no"/>
+                                <child>
+                                  <object class="GtkLabel" id="label1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">&lt;u&gt;Learn more...&lt;/u&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="box2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkCheckButton" id="disable_secureboot">
+                                <property name="label" translatable="yes">Turn off Secure Boot</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="on_secureboot_toggled" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="alignment3">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">25</property>
+                                <child>
+                                  <object class="GtkGrid" id="password_grid">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">6</property>
+                                    <property name="column_spacing">6</property>
+                                    <child>
+                                      <object class="GtkEntry" id="password">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="max_length">16</property>
+                                        <property name="visibility">False</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="activates_default">True</property>
+                                        <property name="width_chars">35</property>
+                                        <signal name="changed" handler="info_loop" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="verified_password">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="max_length">16</property>
+                                        <property name="visibility">False</property>
+                                        <property name="invisible_char">●</property>
+                                        <property name="activates_default">True</property>
+                                        <property name="width_chars">35</property>
+                                        <signal name="changed" handler="info_loop" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkNotebook" id="password_strength">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="show_tabs">False</property>
+                                        <property name="show_border">False</property>
+                                        <child>
+                                          <object class="GtkFixed" id="empty">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                          </object>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="password/too_short">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes">Short password</property>
+                                            <property name="xalign">0</property>
+                                            <attributes>
+                                              <attribute name="scale" value="0.83333333333329995"/>
+                                              <attribute name="foreground" value="#8b8b00000000"/>
+                                            </attributes>
+                                          </object>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="password/good">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes">Good password</property>
+                                            <property name="xalign">0</property>
+                                            <attributes>
+                                              <attribute name="scale" value="0.83333333333329995"/>
+                                              <attribute name="foreground" value="#000064640000"/>
+                                            </attributes>
+                                          </object>
+                                          <packing>
+                                            <property name="position">4</property>
+                                          </packing>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <placeholder/>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkNotebook" id="password_match">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="show_tabs">False</property>
+                                        <property name="show_border">False</property>
+                                        <child>
+                                          <object class="GtkFixed" id="empty2">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                          </object>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="password_mismatch">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes">Mismatch</property>
+                                            <property name="xalign">0</property>
+                                            <attributes>
+                                              <attribute name="scale" value="0.83333333333329995"/>
+                                              <attribute name="foreground" value="#8b8b00000000"/>
+                                            </attributes>
+                                          </object>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkImage" id="password_ok">
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">False</property>
+                                            <property name="xalign">0</property>
+                                            <property name="stock">gtk-apply</property>
+                                          </object>
+                                          <packing>
+                                            <property name="position">2</property>
+                                          </packing>
+                                        </child>
+                                        <child type="tab">
+                                          <placeholder/>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="password_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="halign">end</property>
+                                        <property name="label" translatable="yes">Choose a Secure Boot security key:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="verified_password_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="halign">end</property>
+                                        <property name="label" translatable="yes">Confirm Secure Boot security key:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAlignment" id="stepStates">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkAlignment" id="states">
+        <property name="sensitive">False</property>
+        <property name="can_focus">False</property>
+        <property name="no_show_all">True</property>
+        <property name="double_buffered">False</property>
+        <child>
+          <object class="GtkBox" id="vbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">7</property>
+            <child>
+              <object class="StateBox" id="prepare_sufficient_space">
+                    <property name="visible">True</property>
+                    <property name="label">that you have at least 3GB available drive space</property>
+                  </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="StateBox" id="prepare_power_source">
+                    <property name="visible">True</property>
+                    <property name="label">that you are plugged in to a power source</property>
+                  </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="StateBox" id="prepare_network_connection">
+                    <property name="visible">True</property>
+                    <property name="label">that you are connected to the Internet</property>
+                  </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>

+ 26 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepSetup.ui

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepSetup">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkLabel" id="message_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_top">10</property>
+        <property name="margin_bottom">10</property>
+        <property name="label" translatable="yes">label</property>
+        <property name="use_markup">True</property>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 424 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepUserInfo.ui

@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepUserInfo">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkEventBox" id="paddingbox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkGrid" id="userinfo_table">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="border_width">20</property>
+        <property name="row_spacing">6</property>
+        <property name="column_spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="username_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Pick a username:</property>
+            <property name="justify">right</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="password_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Choose a password:</property>
+            <property name="justify">right</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="verified_password_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Confirm your password:</property>
+            <property name="justify">right</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="login_vbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">3</property>
+            <child>
+              <object class="GtkRadioButton" id="login_auto">
+                <property name="label" translatable="yes">Log in automatically</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="draw_indicator">True</property>
+                <property name="group">login_pass</property>
+                <signal name="clicked" handler="on_authentication_toggled" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkRadioButton" id="login_pass">
+                <property name="label" translatable="yes">Require my password to log in</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="left_padding">20</property>
+                <child>
+                  <object class="GtkCheckButton" id="login_encrypt">
+                    <property name="label" translatable="yes">Encrypt my home folder</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="clicked" handler="on_authentication_toggled" swapped="no"/>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkEntry" id="password">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+                <property name="invisible_char">●</property>
+                <property name="activates_default">True</property>
+                <property name="width_chars">20</property>
+                <signal name="changed" handler="info_loop" swapped="no"/>
+                <accessibility>
+                  <relation type="labelled-by" target="password_label"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="password1_ok">
+                <property name="can_focus">False</property>
+                <property name="stock">gtk-yes</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="password_strength">
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;small&gt;&lt;span color="darkgreen"&gt;Strong password&lt;/span&gt;&lt;/small&gt;</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="hbox2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkEntry" id="verified_password">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="visibility">False</property>
+                <property name="invisible_char">●</property>
+                <property name="activates_default">True</property>
+                <property name="width_chars">20</property>
+                <signal name="changed" handler="info_loop" swapped="no"/>
+                <accessibility>
+                  <relation type="labelled-by" target="verified_password_label"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="password_ok">
+                <property name="can_focus">False</property>
+                <property name="stock">gtk-yes</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="password_error_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;small&gt;&lt;span color="darkred"&gt;You must enter a username&lt;/span&gt;&lt;/small&gt;</property>
+                <property name="use_markup">True</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="username_box">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkEntry" id="username">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="invisible_char">•</property>
+                <property name="activates_default">True</property>
+                <property name="width_chars">15</property>
+                <signal name="changed" handler="info_loop" swapped="no"/>
+                <accessibility>
+                  <relation type="labelled-by" target="username_label"/>
+                </accessibility>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkImage" id="username_ok">
+                <property name="can_focus">False</property>
+                <property name="stock">gtk-yes</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="username_error_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">&lt;small&gt;&lt;span color="darkred"&gt;You must enter a username&lt;/span&gt;&lt;/small&gt;</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="hostname_box">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">3</property>
+            <child>
+              <object class="GtkBox" id="box3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkEntry" id="hostname">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">•</property>
+                    <signal name="changed" handler="info_loop" swapped="no"/>
+                    <accessibility>
+                      <relation type="labelled-by" target="hostname_label"/>
+                      <relation type="labelled-by" target="hostname_extra_label"/>
+                    </accessibility>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkImage" id="hostname_ok">
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-yes</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="hostname_error_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;small&gt;&lt;span color="darkred"&gt;You must enter a name&lt;/span&gt;&lt;/small&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="hostname_extra_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">The name it uses when it talks to other computers.</property>
+                <property name="xalign">0</property>
+                <attributes>
+                  <attribute name="scale" value="0.83333333333333304"/>
+                </attributes>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="bottom_padding">20</property>
+            <child>
+              <object class="GtkLabel" id="hostname_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Your computer's name:</property>
+                <property name="xalign">1</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 26 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepWelcome.ui

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkBox" id="stepWelcome">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkLabel" id="welcome_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_top">10</property>
+        <property name="margin_bottom">10</property>
+        <property name="label" translatable="yes">label</property>
+        <property name="use_markup">True</property>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 113 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/stepWireless.ui

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <!-- interface-requires nm 0.0 -->
+  <object class="GtkBox" id="stepWireless">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">20</property>
+    <property name="orientation">vertical</property>
+    <property name="spacing">6</property>
+    <child>
+      <object class="GtkLabel" id="wireless_section_label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <property name="label" translatable="yes">Connecting this computer to a wi-fi network helps with</property>
+        <property name="wrap">True</property>
+        <property name="max-width-chars">50</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkAlignment" id="alignment1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="left_padding">12</property>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkRadioButton" id="no_wireless">
+                <property name="label" translatable="yes">I don't want to connect to a wi-fi network right now</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkRadioButton" id="use_wireless">
+                    <property name="label" translatable="yes">Connect to this network</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="xalign">0</property>
+                    <property name="active">True</property>
+                    <property name="draw_indicator">True</property>
+                    <property name="group">no_wireless</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAlignment" id="wireless_align">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="left_padding">22</property>
+                    <child>
+                      <object class="NetworkManagerWidget" id="nmwidget">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">12</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">True</property>
+        <property name="fill">True</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+</interface>

+ 1267 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/gtk/ubiquity.ui

@@ -0,0 +1,1267 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkDialog" id="bootloader_fail_dialog">
+    <property name="can_focus">True</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Bootloader install failed</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="icon_name">dialog-warning</property>
+    <property name="type_hint">dialog</property>
+    <property name="gravity">center</property>
+    <property name="transient_for">live_installer</property>
+    <signal name="realize" handler="set_window_hints" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox7">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area7">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="grub_fail_okbutton">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="bootloader_fail_vbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">18</property>
+            <child>
+              <object class="GtkBox" id="bootloader_fail_hbox3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkImage" id="bootloader_fail_image3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="stock">gtk-dialog-error</property>
+                    <property name="icon-size">6</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="bootloader_fail_hbox6">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkLabel" id="bootloader_fail_title">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Sorry, an error occurred and it was not possible to install the bootloader at the specified location.</property>
+                        <property name="wrap">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="bootloader_fail_frame1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkAlignment" id="bootloader_fail_alignment1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkBox" id="bootloader_fail_vbox2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="orientation">vertical</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkBox" id="bootloader_fail_vbox3">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <property name="spacing">3</property>
+                            <child>
+                              <object class="GtkRadioButton" id="grub_new_device">
+                                <property name="label" translatable="yes">Choose a different device to install the bootloader on:</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" handler="toggle_grub_fail" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="bootloader_failalignment1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">26</property>
+                                <child>
+                                  <object class="GtkComboBox" id="grub_new_device_entry">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="has_entry">True</property>
+                                    <child internal-child="entry">
+                                      <object class="GtkEntry" id="combobox-entry2">
+                                        <property name="can_focus">False</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="bootloader_fail_vbox4">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <property name="spacing">3</property>
+                            <child>
+                              <object class="GtkRadioButton" id="grub_no_new_device">
+                                <property name="label" translatable="yes">Continue without a bootloader.</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">grub_new_device</property>
+                                <signal name="toggled" handler="toggle_grub_fail" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="no_grub_warn">
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">24</property>
+                                <child>
+                                  <object class="GtkBox" id="bootloader_fail_hbox1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkImage" id="bootloader_fail_image1">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="stock">gtk-dialog-warning</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="skip_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;You will need to manually install a bootloader in order to start ${RELEASE}.&lt;/b&gt;&lt;/small&gt;</property>
+                                        <property name="use_markup">True</property>
+                                        <property name="wrap">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="bootloader_fail_vbox5">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkRadioButton" id="grub_fail_option">
+                                <property name="label" translatable="yes">Cancel the installation.</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">grub_new_device</property>
+                                <signal name="toggled" handler="toggle_grub_fail" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkAlignment" id="abort_warn">
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">24</property>
+                                <child>
+                                  <object class="GtkBox" id="bootloader_fail_hbox2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkImage" id="bootloader_fail_image2">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="stock">gtk-dialog-warning</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="abort_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;This may leave your computer unable to boot.&lt;/b&gt;&lt;/small&gt;</property>
+                                        <property name="use_markup">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="bootloader_fail_proceed">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">&lt;b&gt;How would you like to proceed?&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-5">grub_fail_okbutton</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="crash_dialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Installer crashed</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <signal name="realize" handler="set_window_hints" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox4">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="closebutton1">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="alignment27">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">6</property>
+            <child>
+              <object class="GtkBox" id="vbox51">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkLabel" id="crash_heading_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Installer crashed&lt;/b&gt;&lt;/big&gt;</property>
+                    <property name="use_markup">True</property>
+                    <property name="single_line_mode">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHSeparator" id="hseparator11">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">6</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="crash_text_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">We're sorry; the installer crashed. Please file a new bug report using the command 'ubuntu-bug ubiquity' in a terminal. This will gather information about your system and your installation process. The details will be sent to our bug tracker and a developer will attend to the problem as soon as possible.</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">False</property>
+                    <property name="padding">6</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="crash_detail_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">False</property>
+                    <property name="padding">6</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-7">closebutton1</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkDialog" id="finished_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes">Installation complete</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="type_hint">dialog</property>
+    <signal name="realize" handler="set_window_hints" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox3">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area3">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="quit_button">
+                <property name="label" translatable="yes">Continue using the live CD</property>
+                <property name="visible">False</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="quit_installer" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="reboot_button">
+                <property name="label" translatable="yes">Restart now</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="has_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="reboot" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="shutdown_button">
+                <property name="label" translatable="yes">Shutdown now</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <signal name="clicked" handler="shutdown" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkImage" id="image1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="ypad">2</property>
+                <property name="icon_name">dialog-information</property>
+                <property name="icon-size">6</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="padding">5</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkLabel" id="finished_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="xpad">6</property>
+                        <property name="ypad">6</property>
+                        <property name="label" translatable="yes">Installation is complete. You need to restart the computer in order to use the new installation. You can continue to use this live CD, although any changes you make or documents you save will not be preserved.</property>
+                        <property name="wrap">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="padding">6</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="padding">6</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">quit_button</action-widget>
+      <action-widget response="0">reboot_button</action-widget>
+      <action-widget response="0">shutdown_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkWindow" id="live_installer">
+    <property name="can_focus">False</property>
+    <property name="has_focus">True</property>
+    <property name="title" translatable="yes">Install</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-always</property>
+    <signal name="realize" handler="set_window_hints" swapped="no"/>
+    <signal name="delete-event" handler="on_live_installer_delete_event" swapped="no"/>
+    <child>
+      <object class="GtkBox" id="wizard">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkNotebook" id="page_mode">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="show_tabs">False</property>
+            <property name="show_border">False</property>
+            <child>
+              <object class="GtkBox" id="vbox2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkEventBox" id="title_eventbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkAlignment" id="title_section">
+                        <property name="can_focus">False</property>
+                        <property name="border_width">20</property>
+                        <child>
+                          <object class="GtkGrid" id="grid2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkLabel" id="page_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">start</property>
+                                <property name="hexpand">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">&lt;span size="xx-large"&gt;Page Title&lt;/span&gt;</property>
+                                <property name="use_markup">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkImage" id="page_logo">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">end</property>
+                                <property name="xalign">1</property>
+                                <property name="yalign">0</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEventBox" id="page_section">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="visible_window">False</property>
+                    <child>
+                      <object class="GtkBox" id="vbox11">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="orientation">vertical</property>
+                        <child>
+                          <object class="GtkScrolledWindow" id="scrolledwindow1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="vexpand">True</property>
+                            <property name="shadow_type">in</property>
+                            <property name="min_content_width">750</property>
+                            <property name="min_content_height">400</property>
+                            <property name="vscrollbar_policy">always</property>
+
+                            <child>
+                              <object class="GtkNotebook" id="steps">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="show_tabs">False</property>
+                                <property name="show_border">False</property>
+                                <signal name="switch-page" handler="on_steps_switch_page" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkAlignment" id="alignment11">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="top_padding">10</property>
+                            <property name="bottom_padding">20</property>
+                            <property name="left_padding">20</property>
+                            <property name="right_padding">20</property>
+                            <child>
+                              <object class="GtkBox" id="hbox_navigation">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkAlignment" id="alignment1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <child>
+                                      <object class="GtkBox" id="hbox_connecting">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="spacing">6</property>
+                                        <child>
+                                          <object class="GtkSpinner" id="connecting_spinner">
+                                            <property name="can_focus">False</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">True</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="connecting_label">
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes">Connecting...</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">True</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButtonBox" id="navigation_control">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">6</property>
+                                    <property name="layout_style">end</property>
+                                    <child>
+                                      <object class="GtkButton" id="quit">
+                                        <property name="label">gtk-quit</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="can_default">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="use_stock">True</property>
+                                        <signal name="clicked" handler="on_quit_clicked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="skip">
+                                        <property name="label" translatable="yes">Skip</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="can_default">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="no_show_all">True</property>
+                                        <signal name="clicked" handler="on_skip_clicked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="back">
+                                        <property name="label">gtk-go-back</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="can_default">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="use_stock">True</property>
+                                        <signal name="clicked" handler="on_back_clicked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkButton" id="next">
+                                        <property name="label">Continue</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="can_default">True</property>
+                                        <property name="has_default">True</property>
+                                        <property name="receives_default">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="use_stock">True</property>
+                                        <signal name="clicked" handler="on_next_clicked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">3</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="webkit_scrolled_window">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">never</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkEventBox" id="progress_eventbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkAlignment" id="progress_section">
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkNotebook" id="progress_mode">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="show_tabs">False</property>
+                    <property name="show_border">False</property>
+                    <child>
+                      <object class="GtkFixed" id="empty_progress">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                    <child type="tab">
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <object class="GtkGrid" id="dot_grid">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">center</property>
+                        <property name="valign">center</property>
+                        <property name="border_width">20</property>
+                        <property name="column_spacing">12</property>
+                        <property name="column_homogeneous">True</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child type="tab">
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="installing_expander">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="border_width">20</property>
+                        <property name="orientation">vertical</property>
+                        <child>
+                          <object class="GtkExpander" id="install_details_expander">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="label_fill">True</property>
+                            <child>
+                              <object class="GtkScrolledWindow" id="install_details_sw">
+                                <property name="height_request">100</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkBox" id="hbox12">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkLabel" id="install_progress_text">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Installing...</property>
+                                    <property name="wrap">True</property>
+                                    <property name="wrap_mode">word-char</property>
+                                    <property name="ellipsize">end</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="progress_cancel_button">
+                                    <property name="label" translatable="yes">_Skip</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="use_underline">True</property>
+                                    <signal name="clicked" handler="on_progress_cancel_button_clicked" swapped="no"/>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkProgressBar" id="install_progress">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child type="tab">
+                      <placeholder/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkDialog" id="ubi_question_dialog">
+    <property name="can_focus">False</property>
+    <property name="halign">start</property>
+    <property name="valign">start</property>
+    <property name="border_width">5</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="type_hint">dialog</property>
+    <property name="transient_for">live_installer</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox14">
+        <property name="can_focus">False</property>
+        <property name="halign">start</property>
+        <property name="valign">start</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area14">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="question_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">label</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkDialog" id="warning_dialog">
+    <property name="can_focus">True</property>
+    <property name="title" translatable="yes">Abort the installation?</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">center</property>
+    <property name="icon_name">dialog-warning</property>
+    <property name="type_hint">dialog</property>
+    <property name="gravity">center</property>
+    <property name="transient_for">live_installer</property>
+    <signal name="realize" handler="set_window_hints" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="cancelbutton">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_quit_cancelled" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="exitbutton">
+                <property name="label">gtk-quit</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="quit_installer" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="hbox27">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkImage" id="image3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="ypad">2</property>
+                <property name="icon_name">dialog-warning</property>
+                <property name="icon-size">6</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="padding">5</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">10</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment8">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkLabel" id="warning_dialog_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">Do you really want to abort the installation now?</property>
+                        <property name="wrap">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="padding">6</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">cancelbutton</action-widget>
+      <action-widget response="-7">exitbutton</action-widget>
+    </action-widgets>
+  </object>
+</interface>

+ 23 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions-ghost-x86-grub.sh

@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# kylin fix x86 ghost install, the device can not mount 
+### chroot
+if [ ! -e /target/dev ]; then
+    mkdir -p /target/dev
+    chmod 755 /target/dev
+fi
+
+if [ ! -e /target/proc ]; then
+    mkdir -p /target/proc
+    chmod 555 /target/proc
+fi
+
+if [ ! -e /target/sys ]; then
+    mkdir -p /target/sys
+    chmod 555 /target/sys
+fi
+
+if [ ! -e /target/run ]; then
+    mkdir -p /target/run
+    chmod 755 /target/run
+fi

+ 118 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions-ghost.sh

@@ -0,0 +1,118 @@
+#!/bin/bash
+
+# the kylin common post actions on ghost install
+# to update bootload
+
+KYARCH=$(archdetect)
+
+### chroot
+if [ ! -e /target/dev ]; then
+    mkdir -p /target/dev
+    chmod 755 /target/dev
+fi
+if [ ! -e /target/proc ]; then
+    mkdir -p /target/proc
+    chmod 555 /target/proc
+fi
+if [ ! -e /target/sys ]; then
+    mkdir -p /target/sys
+    chmod 555 /target/sys
+fi
+if [ ! -e /target/run ]; then
+    mkdir -p /target/run
+    chmod 755 /target/run
+fi
+
+mount --bind /dev /target/dev
+mount --bind /proc /target/proc
+mount --bind /sys /target/sys
+
+distrib_os=`cat /target/etc/lsb-release | grep "DISTRIB_ID" | cut -f 2 -d '='`
+
+if [ "x${KYARCH}" = "xarm64/efi" ]; then
+    if [ -f /target/usr/sbin/grub-install ]; then
+        echo "${KYARCH}: chroot /target grub-install... "
+        chroot /target grub-install
+    fi
+
+    if [ -f /target/usr/sbin/update-grub ]; then
+        echo "${KYARCH}: chroot /target update-grub... "
+        chroot /target update-grub
+    fi
+
+    if [ "x$distrib_os" = "xKylin" ]; then
+        if [ -f /target/boot/efi/EFI/kylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot /target/boot/efi/EFI/neokylin
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/neokylin/
+        fi
+    elif [ "x$distrib_os" = "xNeoKylin" ]; then
+        if [ -f /target/boot/efi/EFI/neokylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/neokylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/neokylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+        fi
+    elif [ "x$distrib_os" = "xPKSKylin" ]; then
+        if [ -f /target/boot/efi/EFI/pkskylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot /target/boot/efi/EFI/neokylin
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/neokylin/
+        fi
+    fi
+
+    if [ -d /boot/efi/EFI/ ]; then
+        mkdir -p /boot/efi/EFI/neokylin
+        cp -r /boot/efi/EFI/kylin/* /boot/efi/EFI/neokylin/
+    fi
+elif [ "x${KYARCH}" = "xarm64/generic" ]; then
+    chroot /target update-grub
+elif [ "x${KYARCH}" = "xmips64el/generic" ]; then
+    chroot /target update-grub
+fi
+
+umount /target/dev
+umount /target/proc
+umount /target/sys
+
+
+###nochroot
+#This is abandoned in sp3/v10
+#if [ "${KYARCH}" == "aarch64" ];then
+#    if [ -d /target/boot/efi ];then
+#        mkdir -p /target/boot/efi/boot/grub
+#        cp /target/boot/grub/grub.cfg /target/boot/efi/boot/grub
+#        cp /target/boot/grub/grub.cfg /target/boot/grub/grub.cfg-old
+#        GRUB_DEVICE_BOOT=`grub-probe --target=device /target/boot`
+#        GRUB_ROOT=`grub-probe --device $GRUB_DEVICE_BOOT --target=compatibility_hint`
+#        GRUB_EFI_CFG="/target/boot/efi/boot/grub/grub.cfg"
+#        sed -i "s/set root=(\${root})/set root='$GRUB_ROOT'/g" $GRUB_EFI_CFG
+#        sed -i 's#/uImage-ft2000plus#/Image#g' $GRUB_EFI_CFG
+#        sed -i 's#/uImage#/Image#g' $GRUB_EFI_CFG
+#        sed -i 's/console=ttyS.,115200 earlyprintk=uart8250-32bit,0x28001000//g' $GRUB_EFI_CFG
+#        sed -i 's/console=ttyS.,115200 earlycon=uart8250,mmio32,0x80028001000//g' $GRUB_EFI_CFG
+#        sed -i '/devicetree/d' $GRUB_EFI_CFG
+#        # cp /target/boot/efi/boot/grub/grub.cfg /target/boot/grub/grub.cfg
+#    fi
+#fi
+
+# amd64/efi should do something
+
+if [ "x${KYARCH}" = "x86_64/efi" ] || [ "x${KYARCH}" = "xamd64/efi" ]; then
+    if [ "x$distrib_os" = "xKylin" ]; then
+        if [ -f /target/boot/efi/EFI/kylin/grubx64.efi ]; then
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/kylin/grubx64.efi /target/boot/efi/EFI/boot/bootx64.efi
+        fi
+    elif [ "x$distrib_os" = "xNeoKylin" ]; then
+        if [ -f /target/boot/efi/EFI/neokylin/grubx64.efi ]; then
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/neokylin/grubx64.efi /target/boot/efi/EFI/boot/bootx64.efi
+        fi
+    fi
+fi
+

+ 101 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/kylin-postactions.sh

@@ -0,0 +1,101 @@
+#!/bin/bash
+
+# kylin common install post actions
+# the bootload configure, 
+# to uefi mode, efi file and grub.cfg
+# legacy update grub.cfg
+# and last oem config to firstboot run oem
+
+KYARCH=$(archdetect)
+
+distrib_os=`cat /target/etc/lsb-release | grep "DISTRIB_ID" | cut -f 2 -d '='`
+
+### chroot
+if [ "x${KYARCH}" = "xarm64/efi" ]; then
+    if [ -f /target/usr/sbin/grub-install ]; then
+        echo "${KYARCH}: chroot /target grub-install... "
+        chroot /target grub-install
+    fi
+
+    if [ -f /target/usr/sbin/update-grub ]; then
+        echo "${KYARCH}: chroot /target update-grub... "
+        chroot /target update-grub
+    fi
+
+    if [ "x$distrib_os" = "xKylin" ]; then
+        if [ -f /target/boot/efi/EFI/kylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot /target/boot/efi/EFI/neokylin
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+            cp /target/boot/efi/EFI/kylin/grubaa64.efi /target/boot/efi/EFI/neokylin/
+        fi
+    elif [ "x$distrib_os" = "xNeoKylin" ]; then
+        if [ -f /target/boot/efi/EFI/neokylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/neokylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/neokylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+        fi
+    elif [ "x$distrib_os" = "xPKSKylin" ]; then
+        if [ -f /target/boot/efi/EFI/pkskylin/grubaa64.efi ]; then
+            echo "${KYARCH}: chroot /target cp... "
+            mkdir -p /target/boot/efi/EFI/boot /target/boot/efi/EFI/neokylin
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/boot/bootaa64.efi
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/boot/grubaa64.efi
+            cp /target/boot/efi/EFI/pkskylin/grubaa64.efi /target/boot/efi/EFI/neokylin/
+        fi
+    fi
+elif [ "x${KYARCH}" = "xarm64/generic" ]; then
+    chroot /target update-grub
+elif [ "x${KYARCH}" = "xmips64el/generic" ]; then
+    chroot /target update-grub
+elif [ "x${KYARCH}" = "xx86_64/efi" ] || [ "x${KYARCH}" = "xamd64/efi" ]; then
+    if [ "x$distrib_os" = "xKylin" ]; then
+        if [ -f /target/boot/efi/EFI/kylin/grubx64.efi ]; then
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/kylin/grubx64.efi /target/boot/efi/EFI/boot/bootx64.efi
+        fi
+    elif [ "x$distrib_os" = "xNeoKylin" ]; then
+        if [ -f /target/boot/efi/EFI/neokylin/grubx64.efi ]; then
+            mkdir -p /target/boot/efi/EFI/boot
+            cp /target/boot/efi/EFI/neokylin/grubx64.efi /target/boot/efi/EFI/boot/bootx64.efi
+        fi
+    fi
+fi
+
+### OEM or QC
+if ! grep -q 'QC=true' /proc/cmdline; then
+    echo "OEM config: "
+    if [ -f /target/usr/sbin/oem-config-prepare ]; then
+        chroot /target /usr/sbin/oem-config-prepare
+    fi
+fi
+
+# TODO, repeat code
+### Install third-party software packages for local
+if [ -d /home/kylin/third-party ]; then
+    rsync -aHA /home/kylin/third-party /target/tmp
+    chroot /target /bin/sh -c 'find /tmp/third-party -name "*.deb" >/tmp/third-party/packages.list'
+    count=$(cat /target/tmp/third-party/packages.list | wc -l)
+    if [ $count -ne 0 ]; then
+        chroot /target /bin/sh -c 'unset DEBIAN_HAS_FRONTEND && UCF_FORCE_CONFFNEW=YES dpkg -i $(cat /tmp/third-party/packages.list | xargs)'
+    fi
+    rm -rf /target/tmp/third-party
+fi
+
+### Install third-party software packages
+if [ -d /cdrom/third-party ]; then
+    rsync -aHA /cdrom/third-party /target/tmp
+    chroot /target /bin/sh -c 'find /tmp/third-party -name "*.deb" >/tmp/third-party/packages.list'
+    count=$(cat /target/tmp/third-party/packages.list | wc -l)
+    if [ $count -ne 0 ]; then
+        chroot /target /bin/sh -c 'unset DEBIAN_HAS_FRONTEND && UCF_FORCE_CONFFNEW=YES dpkg -i $(cat /tmp/third-party/packages.list | xargs)'
+    fi
+    rm -rf /target/tmp/third-party
+fi
+
+### automatically install the packages listed in the /cdrom/.kylin-post-packages 
+if [ -f /cdrom/.kylin-post-packages ]; then
+    chroot /target /bin/sh -c "unset DEBIAN_HAS_FRONTEND && apt-get install -y $(cat /cdrom/.kylin-post-packages | xargs)"
+fi

+ 191 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/license/EULA

@@ -0,0 +1,191 @@
+银河麒麟最终用户使用许可协议
+银河麒麟操作系统隐私政策声明
+
+银河麒麟最终用户使用许可协议
+
+尊敬的银河麒麟操作系统及相关产品用户(以下称“您”或“贵机构”):
+
+首先感谢您选用由麒麟软件有限公司开发并制作发行的银河麒麟操作系统软件产品。
+
+    请在打开本软件介质包之前,仔细阅读本协议条款、提供的所有补充许可条款(统称“协议”)及银河麒麟操作系统隐私政策声明。一旦您打开本软件介质包,即表明您已接受本协议的条款,本协议将立即生效,对您和本公司双方具有法律约束力。
+
+1. 使用许可
+    按照已为之支付费用的用户数目及计算机硬件类型,麒麟软件有限公司(下称“麒麟软件”) 向您授予非排他、不可转让的许可,仅允许内部使用由麒麟软件提供的随附软件和文档以及任何错误纠正(统称“本软件”)。
+
+- 软件使用许可
+    在遵守本协议的条款和条件的情况下,麒麟软件给予贵机构非独占、不可转让、有限的许可,允许贵机构至多使用软件的五(5)份完整及未经修改的二进制格式副本,而此种软件副本仅可安装于贵机构操作的电脑中。
+
+- 教育机构使用许可
+    在遵守本协议的条款和条件的情况下,如果贵机构是教育机构,麒麟软件给予贵机构非独占、不可转让的许可,允许贵机构仅在内部使用随附的未经修改的二进制格式的软件。此处的“在内部使用”是指由在贵机构入学的学生、贵机构教员和员工使用软件。 
+
+- 字型软件使用
+    软件中包含生成字体样式的软件(“字型软件”)。贵机构不可从软件中分离字型软件。贵机构不可改动字型软件,以新增此等字型软件被作为软件的一部分交付予贵机构时所不具备的任何功能。贵机构不可将字型软件嵌入作为商业产品提供以换取收费或其他报酬的文件。 
+
+2. 限制
+    本软件受到版权(著作权)法、商标法和其他法律及国际知识产权公约的保护。麒麟软件和/或其许可方保留对本软件的所有权及所有相关的知识产权。对于麒麟软件或其许可方的任何商标、服务标记、标识或商号的任何权利、所有权或利益,本协议均不作任何授权。
+
+关于复制、修改及分发
+    如果在所有复制品中维持本协议书不变,您可以且必须根据《GNU GPL-GNU通用公共许可证》复制、修改及分发银河麒麟操作系统软件产品中遵守《GNU GPL-GNU通用公共许可证》协议的软件,其他不遵守《GNU GPL-GNU通用公共许可证》协议的银河麒麟操作系统软件产品必须根据符合相关法律之其他许可协议进行复制、修改及分发,但任何以银河麒麟操作系统软件产品为基础的衍生发行版未经麒麟软件有限公司的书面授权不能使用任何麒麟软件有限公司的商标或其他任何标志。
+    特别注意:该复制、修改及分发不包括本产品中包含的任何不适用《GNU GPL-GNU通用公共许可证》的软件,如银河麒麟操作系统软件产品中包含的输入法软件、字库软件、第三方应用软件等。除非适用法律禁止实施,否则您不得对上述软件进行复制、修改(包括反编译或反向工程)、分发。
+
+3. 有限担保
+    麒麟软件向您担保,自购买或其它合法取得之日起九十(90)天内(以收据副本为凭证),本软件的存储介质(如果有的话)在正常使用的情况下无材料和工艺方面的缺陷。除上述内容外,本软件按“原样”提供。在本有限担保项下,您的所有补偿及麒麟软件的全部责任为由麒麟软件选择更换本软件介质或退还本软件的购买费用。
+
+4. 担保的免责声明
+    除非在本协议中有明确规定,否则对于任何明示或默示的条件、陈述及担保,包括对适销性、对特定用途的适用性或非侵权性的任何默示的担保,均不予负责,但上述免责声明被认定为法律上无效的情况除外。
+
+5. 责任限制
+    在法律允许范围内,无论在何种情况下,无论采用何种有关责任的理论,无论因何种方式导致,对于因使用或无法使用本软件引起的或与之相关的任何收益损失、利润或数据损失,或者对于特殊的、间接的、后果性的、偶发的或惩罚性的损害赔偿,麒麟软件或其许可方均不承担任何责任(即使麒麟软件已被告知可能出现上述损害赔偿)。根据本协议,在任何情况下,无论是在合同、侵权行为(包括过失)方面,还是在其他方面,麒麟软件对您的责任将不超过您就本软件所支付的金额。即使上述担保未能达到其基本目的,上文所述的限制仍然适用。
+
+6. 终止
+    本协议在终止之前有效。您可以随时终止本协议,但必须同时销毁本软件的全部正本和副本。如果您未遵守本协议的任何规定,则本协议将不经麒麟软件发出通知立即终止。终止时,您必须销毁本软件的全部正本和副本,并且需承担因未遵守本协议而导致的法律责任。
+
+7. 管辖法律适用
+    与本协议相关的任何争议解决(包括但不限于诉讼、仲裁等)均受适用中华人民共和国法律管辖。任何其它国家和地区的选择法律规则不予适用。
+
+8. 可分割性
+    如果本协议中有任何规定被认定为无法执行,则删除相应规定,本协议仍然有效,除非该删除会防碍各方愿望根本目的的实现(在这种情况下,本协议将立即终止)。
+
+9. 完整性
+    本协议是您与麒麟软件就其标的达成的完整协议。它取代此前或同期的所有和本协议不一致的口头或书面往来信息、建议、陈述和担保。在本协议期间,有关报价、订单、回执或各方之间就本协议标的进行的其他往来通信中的任何冲突条款或附加条款,均以本协议为准。对本协议的任何修改均无约束力,除非通过书面进行修改并由每一方的授权代表签字。
+
+10. 商标和标识
+    贵机构承认并与麒麟软件有着以下共识,即麒麟软件拥有麒麟软件、银河麒麟商标,以及所有与麒麟软件、银河麒麟相关的商标、服务标记、标识及其他品牌标识(“麒麟软件标记”)。贵机构对麒麟软件标记的任何使用都应有利于麒麟软件。 
+
+11. 源代码
+    本软件可能包含源代码,其提供之唯一目的是在符合本协议条款之规定时供参考之用。源代码不可再分发,除非在本协议中有明确规定。 
+
+12. 因侵权而终止
+    如果本软件成为或在任一方看来可能成为任何知识产权侵权索赔之标的,则任一方可立即终止本协议。 
+
+13. Java技术限制
+    贵机构不可更改“Java平台界面”(简称“JPI”,即指明为“java”包或“java”包的任何子包中的类),无论通过在JPI中创建额外的类,还是通过其他方式导致对JPI中的类进行增添或更动,均为不可。如果贵机构创建一个额外的类以及一个或多个相关的API,而它们(i)扩展Java平台的功能;并且(ii)可供第三方软件开发者用于开发可调用上述额外API的额外软件,则贵机构必须迅即广泛公布对此种API的准确说明,以供所有开发者免费使用。贵机构不可创建、或授权贵机构的被许可人创建以任何方式标示为“java”、“javax”、“sun”的额外的类、界面、子包或Sun在任何命名约定中指明的类似约定。参见Java运行时环境二进制代码许可的适当版本(目前位于http://www.java.sun.com/jdk/index.html),以了解可与Java小程序和应用程序共同分发的运行时代码的可供情况。
+ 14.协议提供中英文两种版本,以上任何内容如有歧义,以中文版本为准。
+
+银河麒麟操作系统隐私政策声明
+
+版本发布日期:2019年12月18日
+版本生效日期:2019年12月18日
+
+尊敬的银河麒麟操作系统用户(以下简称“您”),银河麒麟操作系统系列软件产品是由麒麟软件有限公司(以下简称“我们”或“麒麟软件”)研制发行的,用于办公或构建企业及政府的信息化基础设施。
+麒麟软件非常重视您的个人信息和隐私保护,在您使用本产品的过程中,我们会按照《银河麒麟操作系统隐私政策声明》(以下简称“本声明”)收集、存储、使用您的个人信息。为了保证对您的个人隐私信息合法、合理、适度的收集、使用,并在安全、可控的情况下进行传输、存储,我们制定了本声明。我们将向您说明收集、保存和使用您的个人信息的方式,以及您访问、更正、删除和保护这些信息的方式。我们将会按照法律要求和业界成熟安全标准,为您的个人信息提供相应的安全保护措施。如您点击或勾选“同意”并确认提交,即视为您同意本隐私政策声明,并同意我公司将按照本政策来收集、存储和使用您的相关信息。
+
+本声明将帮助您了解以下内容:
+一、关于收集和使用涉及您的个人信息
+二、如何存储和保护涉及您的个人信息
+三、如何管理您的个人信息
+四、关于第三方软件的隐私说明
+五、关于未成年人使用产品
+六、本声明如何更新
+七、如何联系我们
+
+一、如何收集和使用您的个人信息
+
+1.收集涉及您的个人信息的情况
+
+我们在您使用银河麒麟操作系统产品过程中收集相关的信息,主要为了向您提供更高质量、更易用的产品和更好的服务。
+
+1)银河麒麟操作系统的产品授权许可机制,会根据您所使用计算机的网卡、固件和主板等信息通过加密机制和转换方法生成申请产品正式授权许可的机器码;您将该机器码发给麒麟软件商务人员根据合同及相关协议可申请正式许可。该机器码不包含您所使用计算机的网卡、固件和主板等设备具体信息。
+
+2)银河麒麟操作系统应用商店的服务器端,会根据您所使用计算机的CPU类型信息以及IP地址进行连接;实现您方便快捷使用应用商店。您所使用计算机的IP地址可能会记录在应用商店的服务器端系统的日志中。
+
+3)银河麒麟操作系统的升级更新,会根据您所使用计算机的IP地址进行连接;以便实现您确认是否更新升级系统。
+
+4)使用银河麒麟操作系统产品过程中,因业务往来及技术服务等您提供的电子邮箱、电话、姓名等个人信息。
+
+5)银河麒麟操作系统可能提供生物识别相关功能,会存储身份鉴别相关的信息在您的机器。这部分信息我们不收集和上传服务器。
+
+以后银河麒麟操作系统产品升级过程中,如新增涉及个人信息收集部分,将及时更新本部分内容。
+
+2. 使用涉及您的个人信息的情况
+
+我们严格遵守法律法规的规定及与用户的约定,将收集的信息用于以下用途。若我们超出以下用途使用您的信息,我们将再次向您进行说明,并征得您的同意。我们会将收集的信息用于以下用途:
+
+产品功能:主要涉及产品许可机制、应用商店使用、系统更新维护、生物识别等需要。
+
+安全保障:为保障您使用银河麒麟操作系统的安全,我们会利用相关信息协助提升产品的安全性、可靠性和可持续服务。
+
+与您沟通:我们会利用收集的信息(例如你提供的电子邮件地址、电话等)直接与你沟通。例如,业务联系、技术支持或服务回访。
+
+产品改进:将收集的信息用于改进产品当前的易用性、缺陷以及提升产品用户体验等。
+
+为了遵从相关法律法规、部门规章、政府指令的相关要求。
+
+3.信息的分享及对外提供
+
+我们不会共享或转让你的个人信息至第三方,但以下情况除外:
+
+1)获取您的明确同意:经您事先同意,我们可能与第三方分享您的个人信息;
+
+2)为实现外部处理的目的,我们可能会与关联公司或其他第三方合作伙伴(第三方服务供应商、承包商、代理、应用开发者等)分享您的个人信息,让他们按照我们的说明、隐私政策以及其他相关的保密和安全措施来为我们处理上述信息,并用于向您提供我们的服务,实现“如何收集和使用您的个人信息”部分所述目的。如我们与上述关联公司或第三方分享您的信息,我们将会采用加密、匿名化处理等手段保障您的信息安全。
+
+3)我们不会对外公开披露所收集的个人信息,如必须公开披露时,我们会向您告知此次公开披露的目的、披露信息的类型及可能涉及的敏感信息,并征得您的明示同意。
+
+4)随着我们业务的持续发展,我们有可能进行合并、收购、资产转让等交易,我们将告知相关情形,按照法律法规及不低于本声明所要求的标准继续保护或要求新的控制者继续保护您的个人信息。
+
+5)我们可能基于法律要求或相关部门的执法要求披露您的个人信息。
+
+如我们使用您的个人信息,超出了与收集时所声称的目的及具有直接或合理关联的范围,我们将在使用您的个人信息前,再次向您告知并征得你的明示同意。
+
+根据相关法律法规以及国家标准,在以下情况下我们可能会收集、使用您的个人信息,征得授权同意的例外情况:
+
+1)与国家安全、国防安全等国家利益直接相关的;
+2)与公共安全、公共卫生、公众知情等重大公共利益直接相关的;
+3)与犯罪侦查、起诉、审判和判决执行等直接相关的;
+4)出于维护您或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;
+5)所收集的个人信息是您自行向社会公众公开的;
+6)从合法公开披露的信息中收集的个人信息,如合法的新闻报道、政府信息公开等渠道;
+7)根据您要求签订和履行合同所必需的;
+8)用于维护所提供的产品或服务的安全稳定运行所必需的。如发现、处置产品或服务的故障;
+9)出于公共利益开展统计或学术研究所必需,且其对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的;
+10)法律法规规定的其他情形。
+
+二、我们如何存储和保护涉及您的个人信息
+
+1.信息存储的地点
+我们会按照法律法规规定,将在中国境内收集和产生的个人信息存储于中国境内。
+
+2.信息存储的期限
+一般而言,我们仅为实现目的所必需的时间保留您的个人信息。记录在日志中的信息会按配置在一定期限保存及自动删除。
+当我们的产品或服务发生停止运营的情形时,我们将以通知、公告等形式通知您,在合理的期限内删除您的个人信息或进行匿名化处理,并立即停止收集个人信息的活动。
+
+3.我们如何保护这些信息
+我们努力为用户的信息安全提供保障,以防止信息的丢失、不当使用、未经授权访问或披露。
+我们将在合理的安全水平内使用各种安全保护措施以保障信息的安全。例如,我们会使用加密技术(例如,SSL /TLS)、匿名化处理等手段来保护您的个人信息。
+我们建立专门的管理制度、流程和组织以保障信息的安全。例如,我们严格限制访问信息的人员范围,要求他们遵守保密义务,并进行审计。
+
+4.若发生个人信息泄露等安全事件,我们会依法启动应急预案,阻止安全事件扩大,并以推送通知、公告等形式告知您安全事件的情况、事件可能对你的影响以及我们将采取的补救措施。我们还将按照法律法规和监管部门要求,上报个人信息安全事件的处置情况。
+
+三、如何管理您的个人信息
+
+如果担心因使用银河麒麟操作系统产品导致个人信息的泄露,您可根据个人及业务需要考虑暂停或不使用涉及个人信息的相关功能,如产品正式授权许可、应用商店、系统更新升级、生物识别等。
+在使用银河麒麟操作系统之上使用第三方软件时,请注意个人隐私保护。
+
+四、关于第三方软件的隐私说明
+
+您在使用银河麒麟操作系统之上安装或使用第三方软件时,第三方软件的隐私保护和法律责任由第三方软件自行负责。
+您在使用银河麒麟操作系统之上安装或使用第三方软件时,请您仔细阅读和审查对应的隐私声明或条款;注意个人隐私保护。
+
+五、关于未成年人使用产品
+银河麒麟操作系统系列产品仅供成年人使用,如果您是未成年人,则需要您的监护人同意您使用本产品并同意相关服务条款。父母和监护人也应采取适当的预防措施保护未成年人,包括监督其对银河麒麟操作系统系列产品的使用。
+
+六、本声明如何更新
+我们保留适时更新本声明的权利,当本声明发生变更时,我们会通过产品安装过程或公司网站向您展示变更后的声明,只有在获取您的同意后,我们才会按照更新后的声明收集、使用、存储您的个人信息。
+
+七、如何联系我们
+如您对本声明存在任何疑问,或任何相关的投诉、意见,请联系麒麟软件客服热线400-089-1870、官方网站(www.kylinos.cn)以及麒麟软件进行咨询或反映。您可以通过发送邮件至market@kylinos.cn方式与我们联系。
+受理您的问题后,我们会及时、妥善处理。一般情况下,我公司将在15个工作日内给予答复。
+
+本声明自更新之日起生效,同时提供中英文两种版本,以上任何条款如有歧义,以中文版本为准。
+最近更新日期:2019年12月18日
+
+
+                                                             麒麟软件有限公司
+
+地址:天津市滨海高新区塘沽海洋科技园信安创业广场3号楼(300450)
+   北京市海淀区北四环西路9号银谷大厦20层(100190)
+   长沙市开福区三一大道156号工美大厦10楼(410073)
+电话:天津(022)58955650  北京(010)51659955  长沙(0731)88280170
+传真:天津(022)58955651  北京(010)62800607  长沙(0731)88280166
+公司网站:www.kylinos.cn
+电子邮件:support@kylinos.cn

+ 185 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/license/EULAE

@@ -0,0 +1,185 @@
+Respectable users of Kylin Linux (hereinafter referred to as "you" or "your organization"):
+
+Thank you for using Kylin Linux products developed&published by KylinSoft Corporation (For short "KylinSoft").
+
+Read the terms of this agreement and any provided supplemental license terms (Collectively "AGREEMENT") carefully before opening the software media package. By opening the software media package, you agree to the terms of this AGREEMENT. This Agreement takes effect at the moment, and it has force effect to both user and our company.
+
+1.LICENSE TO USE.
+KylinSoft grants you a non-exclusive and non-transferable license for the internal use only of the accompanying software and documentation and any error corrections provided by KylinSoft (collectively "Software"), by the number of users and the class of computer hardware for which the corresponding fee has been paid.
+
+— License to use software
+KylinSoft grants you a non-exclusive, non-transferable and limited license for the internal use under this Agreement and Terms. You are allowed to use FIVE(5) integrated and unmodified binary copies at most, which are only installed on the computer owned by your organization.
+
+— License to use in Educational Organization
+For Educational Organization, KylinSoft grants you a non-exclusive and non-transferable license for the internal use of the accompanying binary software under this Agreement and Terms. Here, "internal use" means that the software could be used by students, teachers, and staffs who belong to your organization.
+
+— License to use Font Software
+This software includes softwares that can generate font style ("Font Software"). You are not allowed to separate "Font Software" from this software. You are not granted to change "Font Software" to add any new functions not included in it when the Font Software was provided as a part of this software. You are not allowed to embed the Font Software in any file that may be used in commercial purpose or to get something in reward.
+
+2.RESTRICTIONS.
+Software is confidential and copyrighted. Title to Software and all associated intellectual property rights is retained by KylinSoft and/or its licensors. Except as specifically authorized in any Supplemental License Terms, you may not make copies of Software, other than a single copy of Software for archival purposes. No right, title or interest in or to any trademark, service mark, logo or trade name of KylinSoft or its licensors is granted under this Agreement.
+
+— License to copy, modify and distribute software
+For all copies that are granted under this Agreement, you may and must copy, modify and distribute the special part of Kylin Linux products which complies with "GNU GPL-GNU General Public License" according to the terms of "GNU GPL-GNU General Public License". For other Kylin Linux products which do not comply with "GNU GPL-GNU General Public License",you should copy, modify and distribute them according to the terms of related law. For any version derived from Kylin Linux products, you are not granted to use any KylinSoft, Kylin -related trademarks, service marks,logos and other brand designations ("Kylin Marks") without KylinSoft’s authorization.
+
+Special Notice: The definition of "copy, modify and distribute" mentioned as above does not apply to the software included in Kylin Linux products which does not comply with "GNU GPL-GNU General Public License", such as Input Method Software,Font Software, and Third Party Application Software,etc. Unless enforcement is prohibited by applicable law, you may not copy, modify(including decompile, or reverse engineer) and distribute this Software.
+
+3.LIMITED WARRANTY.
+KylinSoft warrants to you that for a period of ninety (90) days from the date of purchase or the date of obtaining Software through other legal means, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided “AS IS”. Your exclusive remedy and KylinSoft's entire liability under this limited warranty will be at KylinSoft's option to replace Software media or refund the fee paid for Software.
+
+4.DISCLAIMER OF WARRANTY.
+Unless specified in this agreement, all express or implied conditions, representations and warranties, including any implied warranty of merchantability, fitness for a particular purpose or non-infringement are disclaimed, except to the extent that these disclaimers are held to be legally invalid.
+
+5.LIMITATION OF LIABILITY.
+To the extent not prohibited by law, in no event will KylinSoft or its licensors be liable for any lost revenue, profit or data, or for special, indirect, consequential, incidental or punitive damages, however caused regardless of the theory of liability, arising out of or related to the use of or inability to use software, even if KylinSoft has been advised of the possibility of such damages. In no event will KylinSoft's liability to you, whether in contract, tort(including negligence),or otherwise, exceed the amount paid by you for Software under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose.
+
+6.TERMINATION.
+This Agreement is effective until terminated. You may terminate this Agreement at any time, but you should destroy all copies of Software at the same time. This Agreement will terminate immediately without notice from KylinSoft if you fail to comply with any provision of this Agreement. Upon Termination, you must destroy all copies of Software, and you shall bear the legal liability caused by non-compliance with this agreement.
+
+7. APPLICABLE LAW
+Any dispute settlement (including but not limited to litigation, arbitration, etc.) related to this Agreement will be governed by People's Republic of China law. The laws of any other country or region shall not apply.
+
+8.SEVERABILITY.
+If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the fundamental intent of the parties, in which case this Agreement will immediately terminate.
+
+9.INTEGRATION.
+This Agreement is the entire agreement between you and KylinSoft relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties which inconsistent with this Agreement, and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter. No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party.
+
+10.TRADEMARKS AND LOGOS.
+You acknowledge and agree as between you and KylinSoft that KylinSoft owns the KylinSoft, Kylin trademark and all KylinSoft, Kylin-related trademarks, service marks, logos and other brand designations ("Kylin Marks") and you agree to comply with the KylinSoft Trademark and Logo Usage Requirements. Any use you make of the Kylin Marks inures to 
+KylinSoft's benefit.
+
+11.SOURCE CODE.
+The Kylin Software may contain source code that is provided solely for reference purposes pursuant to the terms of this Agreement. Unless specified in this agreement,source code may not be redistributed.
+
+12.TERMINATION FOR INFRINGEMENT.
+Either party may terminate this Agreement immediately should any Software become, or in either party's opinion be likely to become, the subject of a claim of infringement of any intellectual property right.
+
+13.JAVATM TECHNOLOGY RESTRICTIONS.
+You may not modify the JavaTM Platform Interface ("JPI", identified as classes contained within the "java" package or any subpackages of the "java" package), by creating additional classes within the JPI or otherwise causing the addition to or modification of the classes in the JPI. In the event that you create an additional class and associated API(s) which (i) extends the functionality of the JavaTM Platform, and (ii) is exposed to third party software developers for the purpose of developing additional software which invokes such additional API, you must promptly publish broadly an accurate specification for such API for free use by all developers. Youmay not create, or authorize your licensees to create additional classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar onvention as specified by Sun in any naming convention designation. Refer to the appropriate version of the JavaTM Runtime Environment binary code license (currently located at http://www.java.sun.com/jdk/index.html) for the availability of runtime code which may be distributed with JavaTM applets and applications.
+14.The agreement is provided in both Chinese and English. In case of any ambiguity, the Chinese version shall prevail.
+Kylin Operating System Privacy Statement 
+
+Release Date:December 28, 2019
+Effective date:December 18, 2019
+
+Dear users("you"), the Kylin Operating System is developed and issued by KylinSoft Corporation ("we" and "KylinSoft"). It is mainly used as desktop office software or applied in building enterprise and government information infrastructure.
+
+KylinSoft Corporation ("we", "our", "us", and KylinSoft) fully understand and respect the importance of your privacy, and we will handle your personal data based on the "Kylin Operating System Privacy Statement" ("this Statement"). This statement is to ensure the legal and appropriate collection and use of your personal data. This Statement describes how we handle your personal data, and how you can access, correct, delete, and protect it. We will protect your personal data as the law and industrial standards required.  Upon agreeing and submitting this Statement, you accept all provisions as follows.
+
+We created this Statement to help you understand :
+1.	How KylinSoft Collects and Uses Your Personal Data
+2.  How KylinSoft Keep and Protect Your Personal Data
+3.  How KylinSoft Handles Your Personal Data
+4.  Third Party Providers and Their Services
+5.  How KylinSoft Handles the Personal Data of Children
+6.  How to Update this Statement
+7.  How to Contact KylinSoft
+
+How KylinSoft Collects and Uses Your Personal Data
+
+1. How KylinSoft Collects Your Personal Data
+
+KylinSoft collects your personal data mainly to improve its services to better satisfy customer needs
+
+1) The licensing mechanism of Kylin Operating System will generate the machine code to apply for the formal license through encryption mechanism and conversion according to the your computer's network card, firmware and motherboard; you can apply for formal license by sending the machine code to KylinSoft’s business personnel upon the contract and related agreements. The machine code does not include the details such as the network card, firmware, and motherboard of your computer. 
+
+2) The server-side of Kylin Operating System application store will be connected according to the CPU and IP address of your computer for your convenience. The IP address of your computer may be logged in the server-side system of the application store. 
+
+3) Kylin Operating System will be updated upon your computer's IP address; you can confirm whether to update the system. 
+
+4) While using Kylin Operating System, we may ask you to provide us with certain personal data that can be used to contact you or offer technical support to you. Personal data includes email address, phone number, name, etc.
+
+5)Kylin Operating System may provide biometric-related functions and will store authentication-related information on your machine. We do not collect or spread this part of the information.
+
+In the future, when updating Kylin Operating System, more personal data needed will be informed to you in a timely manner.
+
+2. How KylinSoft Uses Your Personal Data
+
+Strictly complying with applicable laws, regulations, as well as our policies, we may use your personal data to: 
+Provide product service: product licensing mechanism, application store, system update, biometric-related functions,etc.
+
+Ensure product security: while using Kylin Operating System, we may use relevant information to improve the security, reliability and sustainable services of our products.
+
+Contact you to establish business relationships, provide technical support and do service satisfaction survey.
+
+Improve our product and service: accessibility, defects, user experience, etc.
+
+Comply with applicable laws, regulations, and industry standards as well as our policies.
+
+We will contact you and ask for your permission if our use of your personal data is beyond the circumstances mentioned above.
+
+3. How KylinSoft Discloses Your Personal Data
+
+KylinSoft promises not to disclose or transfer your personal data to third parties, except the following cases: 
+1) KylinSoft will share your personal data to third parties with your prior consent.
+2) When authorizing relevant companies or other third-parties (service providers, contractors, agents, application developers, etc.) to do processing, KylinSoft may share your personal data with third parties so as to provide a better service to you. In accordance with our privacy policies and other relevant confidentiality measures, we will share your personal data with encryption, anonymity and other means to ensure the security of your information.
+3) We will not disclose your personal data . If necessary, we will inform you the purpose and ways of disclosure and sensitive information that involved; we will get your prior consent
+4) As our business develops, your personal data can be disclosed if KylinSoft is involved in merger, acquisitions, asset transactions; we will inform you the relevant circumstances, and continue to protect your personal data in accordance with laws, regulations and standards required by this statement.
+5) We may disclose your personal data by corresponding laws and regulations.
+
+If we use your personal data beyond those specified in this Statement, we will inform you again and obtain your prior consent.
+In accordance with relevant laws, regulations and national standards, we may not disclose your personal data without your prior consent except the following cases:
+
+1) Your personal data is provided in the interest of national security and national defense.
+2) Your personal data is provided in the interest of public safety, public health, public knowledge, etc..
+3) Your personal data is provided for criminal investigation, prosecution, trial and execution.
+4) Your personal data is provided for protecting your life or other people’s lives, and your property.
+5) You disclose your personal data on your own.
+6) Your personal data is collected from public, such as news reports, government information disclosure, etc..
+7) Your personal data is provided for signing and performance of contracts at your request.
+8) Your personal data is provided to check and solve the product malfunctions .
+9) Your personal data is provided for public statistical or academic research in which the data is de-identified.
+10) Your personal data is provided in other cases corresponding by laws and regulations.
+
+How KylinSoft Keep and Protect Your Personal Data 
+
+1. Location 
+We will saves information collected about you in China by corresponding laws and regulations .
+
+2. Duration 
+We will only retain your personal data for the period that is necessary to ensure we can fulfill the purposes outlined in this Statement. It will be saved in the log for a certain period and automatically deleted according to the configuration.
+
+When our product stop it's service, we will notify you in the form of notice and announcements, and delete or anonymize your personal data within a reasonable period of time, and immediately stop collecting your information.
+
+3. How SC2C Protect Your Personal Data
+We take the utmost care to ensure the security of users' personal data, preventing the loss, misuse, unauthorized access or disclosure of information.
+
+We will use various manners, such as encryption (SSL / TLS) and anonymity, to ensure the security of your personal data. 
+
+We establish special management systems, processes and organizations to ensure the security of information. For example, we severely limit the access to information, and require them to conduct audits complying with confidentiality obligations.
+
+4. In the event of a security incident such as the disclosure of personal data, we will initiate an emergency plan by corresponding laws and regulations to prevent the expansion of the security incident, and inform you the detail, possible impact and remedial measures in the form of notices, announcements, etc.. We will also report the security incidents by corresponding  laws, regulations and regulatory requirements.
+
+How KylinSoft Handles Your Personal Data 
+
+If you worry about the leak of your personal data while using Kylin Operating System, you may consider suspending or not using the relevant functions (such as product formal license, application store, system update,biometric-related functions,etc.)according to your personal and business needs, 
+When using third-party software on Kylin Operating System, please pay attention to your privacy protection.
+
+Third Party Providers and Their Services 
+
+KylinSoft has no control over the privacy and data protection policies of third parties, which are not governed by this Statement. 
+When you install or use third-party software on the Kylin Operating System, please refer to the respective privacy protection policies of these third parties before submitting your personal information to third parties or through third-party content, 
+
+How KylinSoft Handles the Personal Data of Children
+Our products and services are targeted at adults. Children cannot create their own user account without the consent of a parent or guardian. Our products must be used under the permission and supervision of parents and guardians with appropriate precautions.
+
+How to Update this Statement  
+We reserve the right to update this statement in due course. When this statement is changed, we will display the changed statement to you on the company's website. Only after obtaining your consent, will we collect, use and store your personal information in accordance with the updated statement.
+
+How to Contact KylinSoft 
+
+If you have any doubts about this Statement or any other problems concerning privacy protection, please contact us via email(market@kylinos.cn); Customer Service Hotline 400-089-1870 or the official website (www.Kylinos.cn) .
+After receiving your questions, we will deal with it in a timely manner. Our company will usually give a reply within 15 working days.
+
+This statement will take effect since updated.Both Chinese and English versions are provided. In case of any ambiguity, the Chinese version shall prevail.
+Last Updated: December 28, 2019
+
+
+                                             KylinSoft Corporation
+
+
+Tel: Tianjin(022)58955650  Beijing(010)51659955  Changsha(0731)88280170
+Fax: Tianjin(022)58955651  Beijing(010)62800607  Changsha(0731)88280166
+Website: www.Kylinos.cn  
+E-mail: support@Kylinos.cn

+ 10 - 0
ubiquity-frontend-gtk/usr/share/ubiquity/license/run.sh

@@ -0,0 +1,10 @@
+#!/bin/sh
+set -e
+
+# license gui config
+. /usr/share/debconf/confmodule
+
+db_input high ubiquity/agree_license || true
+# db_get ubiquity/use_nonfree
+# if [ "$RET" = "true" ]; then
+# fi

BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/cd_in_tray.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/panel.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/install.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/manual.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/reinstall.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/partitioner/sidebyside.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/ubuntu_installed.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/windows_square.png


BIN
ubiquity-frontend-gtk/usr/share/ubiquity/pixmaps/zoom-in.png


BIN
ubiquity-slideshow-kylin/usr/share/doc/ubiquity-slideshow-kylin/changelog.gz


+ 22 - 0
ubiquity-slideshow-kylin/usr/share/doc/ubiquity-slideshow-kylin/copyright

@@ -0,0 +1,22 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: ubiquity-slideshow-ubuntukylin
+Upstream-Contact: Ubuntu Kylin Members <ubuntukylin-members@lists.launchpad.net>
+Source:https://launchpad.net/~ubuntukylin-members
+
+Files: *
+Copyright: 2014, National University of Defense Technology(NUDT) & Kylin Ltd
+License: GPL-3
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff