SmartInstaller contribution based on the Nokia Qt SDK 1.0 release ADM
authorSantosh V Patil <santosh.v.patil@nokia.com>
Wed, 30 Jun 2010 11:01:26 +0530
branchADM
changeset 48 364021cecc90
parent 47 3f419852be07
SmartInstaller contribution based on the Nokia Qt SDK 1.0 release
smartinstaller/adm/data/ADM.rss
smartinstaller/adm/data/ADM_reg.rss
smartinstaller/adm/docs/notes.doc
smartinstaller/adm/gfx/adm.svg
smartinstaller/adm/group/ADM.mmp
smartinstaller/adm/group/bld.inf
smartinstaller/adm/group/icons_scalable_dc.mk
smartinstaller/adm/inc/ADM.hrh
smartinstaller/adm/inc/ADM.pan
smartinstaller/adm/inc/ADMAppUi.h
smartinstaller/adm/inc/ADMApplication.h
smartinstaller/adm/inc/ADMDocument.h
smartinstaller/adm/inc/ADMDownloadHandler.h
smartinstaller/adm/inc/ADMGlobalProgressDialogHandler.h
smartinstaller/adm/inc/ADMGlobalProgressDialogObserver.h
smartinstaller/adm/inc/ADMInstallManager.h
smartinstaller/adm/inc/ADMPackageInfo.h
smartinstaller/adm/inc/ADMSisParser.h
smartinstaller/adm/inc/ADMStateMachine.h
smartinstaller/adm/inc/ADMStateMachineDebug.h
smartinstaller/adm/inc/ADMXmlParser.h
smartinstaller/adm/inc/ADMglobalqueryobserver.h
smartinstaller/adm/inc/progressdialog.h
smartinstaller/adm/loc/ADM.loc
smartinstaller/adm/loc/adm-original.loc
smartinstaller/adm/loc/adm_00.loc
smartinstaller/adm/loc/adm_01.loc
smartinstaller/adm/loc/adm_02.loc
smartinstaller/adm/loc/adm_03.loc
smartinstaller/adm/loc/adm_04.loc
smartinstaller/adm/loc/adm_05.loc
smartinstaller/adm/loc/adm_06.loc
smartinstaller/adm/loc/adm_07.loc
smartinstaller/adm/loc/adm_08.loc
smartinstaller/adm/loc/adm_09.loc
smartinstaller/adm/loc/adm_10.loc
smartinstaller/adm/loc/adm_129.loc
smartinstaller/adm/loc/adm_13.loc
smartinstaller/adm/loc/adm_14.loc
smartinstaller/adm/loc/adm_15.loc
smartinstaller/adm/loc/adm_157.loc
smartinstaller/adm/loc/adm_158.loc
smartinstaller/adm/loc/adm_159.loc
smartinstaller/adm/loc/adm_16.loc
smartinstaller/adm/loc/adm_160.loc
smartinstaller/adm/loc/adm_161.loc
smartinstaller/adm/loc/adm_17.loc
smartinstaller/adm/loc/adm_18.loc
smartinstaller/adm/loc/adm_186.loc
smartinstaller/adm/loc/adm_25.loc
smartinstaller/adm/loc/adm_26.loc
smartinstaller/adm/loc/adm_27.loc
smartinstaller/adm/loc/adm_28.loc
smartinstaller/adm/loc/adm_29.loc
smartinstaller/adm/loc/adm_30.loc
smartinstaller/adm/loc/adm_31.loc
smartinstaller/adm/loc/adm_32.loc
smartinstaller/adm/loc/adm_326.loc
smartinstaller/adm/loc/adm_327.loc
smartinstaller/adm/loc/adm_33.loc
smartinstaller/adm/loc/adm_37.loc
smartinstaller/adm/loc/adm_39.loc
smartinstaller/adm/loc/adm_401.loc
smartinstaller/adm/loc/adm_402.loc
smartinstaller/adm/loc/adm_42.loc
smartinstaller/adm/loc/adm_44.loc
smartinstaller/adm/loc/adm_45.loc
smartinstaller/adm/loc/adm_49.loc
smartinstaller/adm/loc/adm_50.loc
smartinstaller/adm/loc/adm_51.loc
smartinstaller/adm/loc/adm_54.loc
smartinstaller/adm/loc/adm_57.loc
smartinstaller/adm/loc/adm_58.loc
smartinstaller/adm/loc/adm_59.loc
smartinstaller/adm/loc/adm_65.loc
smartinstaller/adm/loc/adm_67.loc
smartinstaller/adm/loc/adm_68.loc
smartinstaller/adm/loc/adm_70.loc
smartinstaller/adm/loc/adm_76.loc
smartinstaller/adm/loc/adm_78.loc
smartinstaller/adm/loc/adm_79.loc
smartinstaller/adm/loc/adm_83.loc
smartinstaller/adm/loc/adm_93.loc
smartinstaller/adm/loc/adm_94.loc
smartinstaller/adm/loc/adm_96.loc
smartinstaller/adm/sis/adm.pkg
smartinstaller/adm/sis/config.ini
smartinstaller/adm/src/ADM.cpp
smartinstaller/adm/src/ADMAppUi.cpp
smartinstaller/adm/src/ADMApplication.cpp
smartinstaller/adm/src/ADMDocument.cpp
smartinstaller/adm/src/ADMDownloadHandler.cpp
smartinstaller/adm/src/ADMGlobalProgressDialogHandler.cpp
smartinstaller/adm/src/ADMInstallManager.cpp
smartinstaller/adm/src/ADMPackageInfo.cpp
smartinstaller/adm/src/ADMSisParser.cpp
smartinstaller/adm/src/ADMStateMachine.cpp
smartinstaller/adm/src/ADMXmlParser.cpp
smartinstaller/adm/src/ADMglobalqueryobserver.cpp
smartinstaller/adm/src/progressdialog.cpp
smartinstaller/adm/xml/changesfile.dtd
smartinstaller/adm/xml/depcontents.dtd
smartinstaller/adm/xml/test_depcontents.xml
smartinstaller/bootstrap/data/smartinstaller.rss
smartinstaller/bootstrap/data/smartinstaller_reg.rss
smartinstaller/bootstrap/dll/smartinstallerdll.cpp
smartinstaller/bootstrap/dll/smartinstallerdll.h
smartinstaller/bootstrap/eabi/smartinstalleru.def
smartinstaller/bootstrap/group/bld.inf
smartinstaller/bootstrap/group/smartinstaller.mmp
smartinstaller/bootstrap/group/smartinstallerdll.mmp
smartinstaller/bootstrap/inc/bootstrapapplication.h
smartinstaller/bootstrap/inc/bootstrapappui.h
smartinstaller/bootstrap/inc/bootstrapconst.h
smartinstaller/bootstrap/inc/bootstrapdocument.h
smartinstaller/bootstrap/inc/bootstrapglobalwaitnoteobserver.h
smartinstaller/bootstrap/inc/bootstrapinstallationobserver.h
smartinstaller/bootstrap/inc/bootstrapstatemachine.h
smartinstaller/bootstrap/loc/smartinstaller-original.loc
smartinstaller/bootstrap/loc/smartinstaller.loc
smartinstaller/bootstrap/loc/smartinstaller_00.loc
smartinstaller/bootstrap/loc/smartinstaller_01.loc
smartinstaller/bootstrap/loc/smartinstaller_02.loc
smartinstaller/bootstrap/loc/smartinstaller_03.loc
smartinstaller/bootstrap/loc/smartinstaller_04.loc
smartinstaller/bootstrap/loc/smartinstaller_05.loc
smartinstaller/bootstrap/loc/smartinstaller_06.loc
smartinstaller/bootstrap/loc/smartinstaller_07.loc
smartinstaller/bootstrap/loc/smartinstaller_08.loc
smartinstaller/bootstrap/loc/smartinstaller_09.loc
smartinstaller/bootstrap/loc/smartinstaller_10.loc
smartinstaller/bootstrap/loc/smartinstaller_129.loc
smartinstaller/bootstrap/loc/smartinstaller_13.loc
smartinstaller/bootstrap/loc/smartinstaller_14.loc
smartinstaller/bootstrap/loc/smartinstaller_15.loc
smartinstaller/bootstrap/loc/smartinstaller_157.loc
smartinstaller/bootstrap/loc/smartinstaller_158.loc
smartinstaller/bootstrap/loc/smartinstaller_159.loc
smartinstaller/bootstrap/loc/smartinstaller_16.loc
smartinstaller/bootstrap/loc/smartinstaller_160.loc
smartinstaller/bootstrap/loc/smartinstaller_161.loc
smartinstaller/bootstrap/loc/smartinstaller_17.loc
smartinstaller/bootstrap/loc/smartinstaller_18.loc
smartinstaller/bootstrap/loc/smartinstaller_186.loc
smartinstaller/bootstrap/loc/smartinstaller_25.loc
smartinstaller/bootstrap/loc/smartinstaller_26.loc
smartinstaller/bootstrap/loc/smartinstaller_27.loc
smartinstaller/bootstrap/loc/smartinstaller_28.loc
smartinstaller/bootstrap/loc/smartinstaller_29.loc
smartinstaller/bootstrap/loc/smartinstaller_30.loc
smartinstaller/bootstrap/loc/smartinstaller_31.loc
smartinstaller/bootstrap/loc/smartinstaller_32.loc
smartinstaller/bootstrap/loc/smartinstaller_326.loc
smartinstaller/bootstrap/loc/smartinstaller_327.loc
smartinstaller/bootstrap/loc/smartinstaller_33.loc
smartinstaller/bootstrap/loc/smartinstaller_37.loc
smartinstaller/bootstrap/loc/smartinstaller_39.loc
smartinstaller/bootstrap/loc/smartinstaller_401.loc
smartinstaller/bootstrap/loc/smartinstaller_402.loc
smartinstaller/bootstrap/loc/smartinstaller_42.loc
smartinstaller/bootstrap/loc/smartinstaller_44.loc
smartinstaller/bootstrap/loc/smartinstaller_45.loc
smartinstaller/bootstrap/loc/smartinstaller_49.loc
smartinstaller/bootstrap/loc/smartinstaller_50.loc
smartinstaller/bootstrap/loc/smartinstaller_51.loc
smartinstaller/bootstrap/loc/smartinstaller_54.loc
smartinstaller/bootstrap/loc/smartinstaller_57.loc
smartinstaller/bootstrap/loc/smartinstaller_58.loc
smartinstaller/bootstrap/loc/smartinstaller_59.loc
smartinstaller/bootstrap/loc/smartinstaller_65.loc
smartinstaller/bootstrap/loc/smartinstaller_67.loc
smartinstaller/bootstrap/loc/smartinstaller_68.loc
smartinstaller/bootstrap/loc/smartinstaller_70.loc
smartinstaller/bootstrap/loc/smartinstaller_76.loc
smartinstaller/bootstrap/loc/smartinstaller_78.loc
smartinstaller/bootstrap/loc/smartinstaller_79.loc
smartinstaller/bootstrap/loc/smartinstaller_83.loc
smartinstaller/bootstrap/loc/smartinstaller_93.loc
smartinstaller/bootstrap/loc/smartinstaller_94.loc
smartinstaller/bootstrap/loc/smartinstaller_96.loc
smartinstaller/bootstrap/sis/config.ini
smartinstaller/bootstrap/sis/example_dep.xml
smartinstaller/bootstrap/sis/smartinstaller.pkg
smartinstaller/bootstrap/sis/wrapper.pkg
smartinstaller/bootstrap/src/bootstrap.cpp
smartinstaller/bootstrap/src/bootstrapapplication.cpp
smartinstaller/bootstrap/src/bootstrapappui.cpp
smartinstaller/bootstrap/src/bootstrapdocument.cpp
smartinstaller/bootstrap/src/bootstrapglobalwaitnoteobserver.cpp
smartinstaller/bootstrap/src/bootstrapinstallationobserver.cpp
smartinstaller/bootstrap/src/bootstrapstatemachine.cpp
smartinstaller/common/config.cpp
smartinstaller/common/config.h
smartinstaller/common/debug.h
smartinstaller/common/globalqueryobserver.cpp
smartinstaller/common/globalqueryobserver.h
smartinstaller/common/globals.h
smartinstaller/common/globalwaitnote.cpp
smartinstaller/common/globalwaitnote.h
smartinstaller/common/macros.h
smartinstaller/common/networkstatuslistener.cpp
smartinstaller/common/networkstatuslistener.h
smartinstaller/common/networkstatusobserver.h
smartinstaller/common/utils.cpp
smartinstaller/common/utils.h
smartinstaller/doc/Nokia_Smart_Installer_for_Symbian_Developers_Guide_v1_0_en.pdf
smartinstaller/doc/doc.pro
smartinstaller/doc/images/smartinstaller-icon.png
smartinstaller/doc/qt-defines.qdocconf
smartinstaller/doc/qt-html-templates.qdocconf
smartinstaller/doc/smartinstaller-online.qdocconf
smartinstaller/doc/smartinstaller.qdoc
smartinstaller/doc/smartinstaller.qdocconf
smartinstaller/doc/templates/images/api_examples.png
smartinstaller/doc/templates/images/api_lookup.png
smartinstaller/doc/templates/images/api_topics.png
smartinstaller/doc/templates/images/arrow_down.png
smartinstaller/doc/templates/images/bg_l.png
smartinstaller/doc/templates/images/bg_l_blank.png
smartinstaller/doc/templates/images/bg_ll.png
smartinstaller/doc/templates/images/bg_ll_blank.png
smartinstaller/doc/templates/images/bg_lr.png
smartinstaller/doc/templates/images/bg_r.png
smartinstaller/doc/templates/images/bg_ul.png
smartinstaller/doc/templates/images/bg_ul_blank.png
smartinstaller/doc/templates/images/bg_ur.png
smartinstaller/doc/templates/images/bg_ur_blank.png
smartinstaller/doc/templates/images/box_bg.png
smartinstaller/doc/templates/images/breadcrumb.png
smartinstaller/doc/templates/images/bullet_dn.png
smartinstaller/doc/templates/images/bullet_gt.png
smartinstaller/doc/templates/images/bullet_sq.png
smartinstaller/doc/templates/images/bullet_up.png
smartinstaller/doc/templates/images/content_bg.png
smartinstaller/doc/templates/images/feedbackground.png
smartinstaller/doc/templates/images/form_bg.png
smartinstaller/doc/templates/images/header.png
smartinstaller/doc/templates/images/header_bg.png
smartinstaller/doc/templates/images/horBar.png
smartinstaller/doc/templates/images/page.png
smartinstaller/doc/templates/images/page_bg.png
smartinstaller/doc/templates/images/print.png
smartinstaller/doc/templates/images/qt_guide.png
smartinstaller/doc/templates/images/qt_icon.png
smartinstaller/doc/templates/images/qt_ref_doc.png
smartinstaller/doc/templates/images/qt_tools.png
smartinstaller/doc/templates/images/sep.png
smartinstaller/doc/templates/images/spinner.gif
smartinstaller/doc/templates/images/sprites-combined.png
smartinstaller/doc/templates/scripts/functions.js
smartinstaller/doc/templates/scripts/jquery.js
smartinstaller/doc/templates/scripts/narrow.js
smartinstaller/doc/templates/scripts/superfish.js
smartinstaller/doc/templates/style/OfflineStyle.css
smartinstaller/doc/templates/style/narrow.css
smartinstaller/doc/templates/style/style.css
smartinstaller/doc/templates/style/style_ie6.css
smartinstaller/doc/templates/style/style_ie7.css
smartinstaller/doc/templates/style/style_ie8.css
smartinstaller/doc/templates/style/superfish.css
smartinstaller/doc/templates/style/superfish_skin.css
smartinstaller/group/bld.inf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/data/ADM.rss	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file contains all the resources for the ADM.
+
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME ADMX	// 4 letter ID
+
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.hrh>
+#include <appinfo.rh>
+#include "ADM.hrh"
+#include "ADM.loc"
+#include <adm.mbg>
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+//	Define the resource file signature
+//	This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+	{
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+	{
+	buf="ADMX";
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+	{
+	menubar = r_menubar;
+	cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_menubar
+//   Main menubar
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_menubar
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_menu; }
+		};
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_menu
+//   Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_menu
+	{
+	items =
+		{
+		MENU_ITEM
+				{
+				command = EAknSoftkeyExit;
+				txt = R_AVKON_SOFTKEYS_EXIT;
+				}
+		};
+	}
+
+// ----------------------------------------------------------------------------
+//
+// r_localisable_app_info
+//
+// ----------------------------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
+	{
+	short_caption = qtn_short_caption_string;
+	caption_and_icon =
+	CAPTION_AND_ICON_INFO
+		{
+		caption = qtn_caption_string;
+
+		number_of_icons = 1;
+		icon_file = "\\resource\\apps\\adm.mif";
+		};
+	}
+
+// -----------------------------------------------------------------------------
+// Dialog for error messages
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_adm_wait_dialog_error_query
+{
+// EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar | EEikDialogFlagCbaButtons | EEikDialogFlagNotifyEsc | EEikDialogFlagWait;
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+	items=
+	{
+		DLG_LINE
+		{
+			type = EAknCtQuery;
+			id = EGeneralQuery;
+			control = AVKON_CONFIRMATION_QUERY
+			{
+				layout = EConfirmationLayout;
+				animation = R_QGN_NOTE_ERROR_ANIM;
+			};
+		}
+	};
+}
+
+RESOURCE DIALOG r_adm_exit_query
+{
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+	items=
+	{
+		DLG_LINE
+		{
+			type = EAknCtQuery;
+			id = EGeneralQuery;
+			control = AVKON_CONFIRMATION_QUERY
+			{
+				layout = EConfirmationLayout;
+				bmpfile = "\\resource\\apps\\adm.mif";
+				bmpid = 16384;
+				bmpmask = 16385;
+			};
+		}
+	};
+}
+
+// Prefixes for download size
+RESOURCE TBUF16 r_kb { buf = string_r_kb; }
+RESOURCE TBUF16 r_mb { buf = string_r_mb; }
+RESOURCE TBUF16 r_gb { buf = string_r_gb; }
+
+RESOURCE TBUF r_adm_continuing_inst_text
+	{
+	buf = string_r_adm_continuing_inst_text;
+	}
+
+// Informative messages
+RESOURCE TBUF64 r_adm_installation_ok_text
+	{
+	buf = string_r_adm_installation_ok_text;
+	}
+
+// Wait notes
+RESOURCE TBUF64 r_adm_cancelling_installation_wait_text
+	{
+	buf = string_r_adm_cancelling_installation_wait_text;
+	}
+
+RESOURCE TBUF64 r_adm_reverting_changes_wait_text
+	{
+	buf = string_r_adm_reverting_changes_wait_text;
+	}
+
+RESOURCE TBUF64 r_adm_finalizing_installation_wait_text
+	{
+	buf = string_r_adm_finalizing_installation_wait_text;
+	}
+
+// Wait note detailed error message base
+RESOURCE TBUF64 r_adm_detailed_cancelling_installation_wait_text
+	{
+	buf = string_r_adm_detailed_cancelling_installation_wait_text;
+	}
+
+// Detailed error messages shown in wait note
+RESOURCE TBUF64 r_adm_err_conn_lost_text
+	{
+	buf = string_r_adm_err_conn_lost_text;
+	}
+
+// Error strings
+RESOURCE TBUF64 r_adm_error_text
+	{
+	buf = string_r_adm_error_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_no_pending_installations_text
+	{
+	buf = string_r_adm_err_no_pending_installations_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_installation_not_enough_space_text
+	{
+	buf = string_r_adm_err_installation_not_enough_space_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_installation_failed_text
+	{
+	buf = string_r_adm_err_installation_failed_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_installation_unsupported_device_text
+	{
+	buf = string_r_adm_err_installation_unsupported_device_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_download_failed_text
+	{
+	buf = string_r_adm_err_download_failed_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_unsupported_version_text
+	{
+	buf = string_r_adm_err_unsupported_version_text;
+	}
+
+// New strings
+// Wait notes
+RESOURCE TBUF64 r_adm_verifying_sw_text
+	{
+	buf = string_r_adm_verifying_sw_text;
+	}
+
+RESOURCE TBUF64 r_adm_downloading_text
+	{
+	buf = string_r_adm_downloading_text;
+	}
+
+RESOURCE TBUF64 r_adm_installing_text
+	{
+	buf = string_r_adm_installing_text;
+	}
+
+// Prompts
+RESOURCE TBUF64 r_adm_sw_update_required_text
+	{
+	buf = string_r_adm_sw_update_required_text;
+	}
+
+RESOURCE TBUF64 r_adm_roaming_text
+	{
+	buf = string_r_adm_roaming_text;
+	}
+
+RESOURCE TBUF64 r_adm_dl_prompt_text
+	{
+	buf = string_r_adm_dl_prompt_text;
+	}
+
+RESOURCE TBUF64 r_adm_launch_app_text
+	{
+	buf = string_r_adm_launch_app_text;
+	}
+
+// Informative
+RESOURCE TBUF r_adm_inst_can_be_resumed_text
+	{
+	buf = string_r_inst_adm_can_be_resumed_text;
+	}
+
+RESOURCE TBUF r_adm_inst_can_be_resumed_ovi_text
+	{
+	buf = string_r_inst_adm_can_be_resumed_ovi_text;
+	}
+
+// Old strings. Just keep them here for a while for documentation purposes.
+#if 0
+// User cancellation message string
+RESOURCE TBUF128 r_adm_continue_to_download_text
+	{
+	buf = string_r_adm_continue_to_download_text;
+	}
+
+// Device is roaming. Continue to download?
+RESOURCE TBUF128 r_adm_roaming_continue_to_download_text
+	{
+	buf = string_r_adm_roaming_continue_to_download_text;
+	}
+
+RESOURCE TBUF64 r_adm_env_creation_wait_text
+	{
+	buf = string_r_adm_preparing_inst_text;
+	}
+
+RESOURCE TBUF64 r_adm_download_wait_text
+	{
+	buf = string_r_adm_download_wait_text;
+	}
+
+RESOURCE TBUF64 r_adm_err_user_cancellation_text
+	{
+	buf = string_r_adm_err_user_cancellation_text;
+	}
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/data/ADM_reg.rss	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file contains the application registration resource.
+*
+*
+*/
+
+
+
+#include "ADM.hrh"
+#include "ADM.loc"
+#include <appinfo.rh>
+#include <ADM.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 _UID3
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="ADM";
+	localisable_resource_file =  "\\resource\\apps\\ADM";
+	localisable_resource_id = R_LOCALISABLE_APP_INFO;
+
+	//hidden = KAppIsHidden;
+	embeddability = KAppNotEmbeddable;
+	newfile = KAppDoesNotSupportNewFile;
+//	launch = KAppLaunchInBackground;
+	}
Binary file smartinstaller/adm/docs/notes.doc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/gfx/adm.svg	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" height="44px" version="1.1" viewBox="0.003 0 44 44" width="44px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+<path d="M36.396,22.734c1.008-0.671,1.467-1.966,1.369-2.815l0.008-9.421c0.1-1.37-0.746-3.473-3.498-3.473h-9.266  c-2.374,0-3.493,1.594-3.506,3.248l-0.014-0.054c-0.264-0.931-1.217-1.398-2.057-1.174l-4.283,1.147L14,5.906  c-0.249-0.925-1.193-1.416-2.056-1.186L9.321,5.423C8.428,5.661,7.893,6.582,8.13,7.479l1.149,4.286l-4.28,1.149  c-0.893,0.237-1.427,1.158-1.189,2.055l0.696,2.611c0.266,0.985,1.261,1.408,2.058,1.189l4.283-1.149l1.152,4.305  c0.021,0.081,0.05,0.159,0.083,0.234H9.815c-1.737,0-3.501,1.008-3.501,3.403l-0.01,9.418c-0.122,1.688,1.028,3.472,3.497,3.472  h9.267c1.896,0,2.691-1,2.967-1.423c0.404,0.617,1.245,1.423,2.959,1.423h9.266c3.008,0,3.611-2.466,3.504-3.397l0.008-9.419  C37.854,24.503,37.312,23.349,36.396,22.734z M22.042,23.584c-0.418-0.646-1.279-1.424-2.959-1.424h-1.881  c0.567-0.395,0.854-1.116,0.667-1.816l-1.152-4.292l4.291-1.15c0.178-0.048,0.346-0.125,0.496-0.227l-0.006,5.171  c-0.084,1.178,0.5,2.306,1.379,2.896C22.62,22.91,22.305,23.181,22.042,23.584z" fill-opacity="0.2" stroke-opacity="0.2"/>
+<path d="M12.964,21.663c0.091,0.334,0.446,0.582,0.834,0.479l2.625-0.705c0.361-0.1,0.576-0.472,0.479-0.834  l-1.41-5.258l5.253-1.408c0.357-0.097,0.586-0.47,0.482-0.837l-0.223-0.833c0,0-7.489,0.591-11.426-5.877  C9.215,6.486,9,6.858,9.096,7.221l1.408,5.252l-5.247,1.408c-0.362,0.097-0.577,0.469-0.481,0.831l0.695,2.608  c0.097,0.357,0.466,0.585,0.834,0.484l5.249-1.408L12.964,21.663z M24.995,22.314h9.266c2.688,0,2.504-2.396,2.504-2.396  l0.012-1.904H22.508l-0.014,1.904C22.495,21.522,23.515,22.314,24.995,22.314z M22.508,33.152l-0.014,1.902  c0,1.494,0.895,2.398,2.5,2.398h9.266c2.688,0,2.504-2.398,2.504-2.398l0.012-1.902H22.508z M7.314,33.152l-0.013,1.902  c0,1.225,0.646,2.398,2.5,2.398h9.267c2.686,0,2.504-2.398,2.504-2.398l0.01-1.902H7.314z" fill-opacity="0.5" stroke-opacity="0.5"/>
+<linearGradient gradientTransform="matrix(0.9659 -0.2588 0.2588 0.9659 -1.1695 4.4663)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="11.5015" x2="11.5015" y1="1.4536" y2="24.9693">
+<stop offset="0" style="stop-color:#AED63A"/>
+<stop offset="1" style="stop-color:#0F581C"/>
+</linearGradient>
+<path d="M13.798,21.142c-0.388,0.104-0.743-0.145-0.834-0.479l-1.41-5.267l-5.249,1.408  c-0.368,0.101-0.737-0.127-0.834-0.484l-0.695-2.608c-0.096-0.362,0.119-0.734,0.481-0.831l5.247-1.408L9.096,6.221  C9,5.858,9.215,5.486,9.578,5.39l2.625-0.703c0.362-0.097,0.733,0.116,0.831,0.479l1.408,5.252l5.248-1.406  c0.346-0.092,0.729,0.099,0.836,0.479l0.701,2.608c0.104,0.367-0.125,0.74-0.482,0.837l-5.253,1.408l1.41,5.258  c0.098,0.362-0.117,0.734-0.479,0.834L13.798,21.142L13.798,21.142z" fill="url(#SVGID_1_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="14.2378" x2="14.239" y1="10.415" y2="21.2101">
+<stop offset="0" style="stop-color:#AED63A"/>
+<stop offset="1" style="stop-color:#0F581C"/>
+</linearGradient>
+<path d="M16.901,19.603l-1.41-5.258l-1.225-0.707l1.587,5.916l-2.007,0.539l-1.586-5.921l-0.707,1.225  l1.41,5.267c0.103,0.38,0.491,0.57,0.834,0.479l2.625-0.705C16.83,20.328,16.984,19.913,16.901,19.603z" fill="url(#SVGID_2_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="10.8931" x2="14.0335" y1="5.0503" y2="16.7704">
+<stop offset="0" style="stop-color:#AED63A"/>
+<stop offset="1" style="stop-color:#0F581C"/>
+</linearGradient>
+<path d="M13.034,5.166c-0.101-0.371-0.476-0.573-0.831-0.479L9.578,5.39C9.173,5.495,9.012,5.904,9.096,6.221  l1.408,5.252l1.225,0.707l-1.583-5.906l2.006-0.538l1.584,5.907l0.707-1.225L13.034,5.166z" fill="url(#SVGID_3_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="12.4756" x2="13.5305" y1="10.9512" y2="14.8881">
+<stop offset="0" style="stop-color:#AED63A"/>
+<stop offset="1" style="stop-color:#0F581C"/>
+</linearGradient>
+<path d="M21.227,12.1l-0.701-2.608c-0.1-0.352-0.461-0.579-0.836-0.479l-5.248,1.406l-0.707,1.225  l5.908-1.583l0.535,1.993l-5.912,1.585l1.225,0.707l5.253-1.408C21.18,12.819,21.307,12.395,21.227,12.1z M6.354,15.756l-0.53-1.992  l5.904-1.584l-1.225-0.707l-5.247,1.408c-0.381,0.103-0.573,0.489-0.481,0.831l0.695,2.608c0.101,0.372,0.48,0.581,0.834,0.484  l5.249-1.408l0.707-1.225L12.26,14.17L6.354,15.756z" fill="url(#SVGID_4_)"/>
+<rect fill="none" height="44" width="44.007"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="29.6357" x2="29.6357" y1="7.1211" y2="21.0072">
+<stop offset="0" style="stop-color:#3687FF"/>
+<stop offset="1" style="stop-color:#051F7D"/>
+</linearGradient>
+<path d="M34.274,7.025h-9.266c-2.688,0-2.5,2.4-2.5,2.4l-0.014,9.492c0,1.06,0.504,2.396,2.5,2.396h9.266  c2.688,0,2.504-2.396,2.504-2.396l0.012-9.492C36.776,7.871,35.796,7.025,34.274,7.025z" fill="url(#SVGID_5_)"/>
+<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_6_" x1="22.0386" x2="22.0386" y1="22.2559" y2="36.1462">
+<stop offset="0" style="stop-color:#3687FF"/>
+<stop offset="1" style="stop-color:#051F7D"/>
+</linearGradient>
+<path d="M36.776,24.564c0-1.428-0.834-2.404-2.502-2.404h-9.266c-2.688,0-2.5,2.404-2.5,2.404l-0.014,9.49  c0,1.032,0.482,2.398,2.5,2.398h9.266c2.688,0,2.504-2.398,2.504-2.398L36.776,24.564z M19.083,22.16H9.815  c-2.686,0-2.501,2.404-2.501,2.404l-0.013,9.49c0,1.712,1.171,2.398,2.5,2.398h9.267c2.686,0,2.504-2.398,2.504-2.398l0.01-9.49  C21.583,23.199,20.803,22.16,19.083,22.16z" fill="url(#SVGID_6_)"/>
+<path d="M23.714,20.01c-0.313-0.303-0.354-0.756-0.354-1.006L23.349,9.34  c0.064-1.104,0.688-1.424,1.648-1.451h9.266c0.789,0.021,1.096,0.213,1.293,0.44l0.615-0.622c-0.367-0.383-0.953-0.682-1.896-0.682  h-9.266c-2.688,0-2.5,2.4-2.5,2.4l-0.014,9.492c0,0-0.072,1.002,0.604,1.713L23.714,20.01z M25.009,22.16  c-2.688,0-2.5,2.404-2.5,2.404l-0.014,9.49c0,0-0.072,1.002,0.604,1.715l0.615-0.621c-0.313-0.304-0.354-0.758-0.354-1.006  l-0.012-9.666c0.064-1.104,0.688-1.422,1.648-1.449h9.266c0.789,0.021,1.096,0.211,1.293,0.438l0.615-0.62  c-0.367-0.387-0.953-0.686-1.896-0.686H25.009z M9.815,22.16c-2.686,0-2.501,2.404-2.501,2.404l-0.013,9.49  c0,0-0.073,1.002,0.605,1.715l0.615-0.621c-0.313-0.304-0.354-0.758-0.354-1.006l-0.012-9.666c0.064-1.104,0.688-1.422,1.647-1.449  h9.266c0.789,0.021,1.094,0.211,1.293,0.438l0.615-0.62c-0.367-0.387-0.953-0.686-1.896-0.686H9.815z" fill="#FFFFFF" fill-opacity="0.3" stroke-opacity="0.3"/>
+<path d="M34.261,21.314c2.688,0,2.504-2.396,2.504-2.396l0.012-9.492c0,0,0.072-1.01-0.605-1.719l-0.615,0.622  c0.332,0.325,0.359,0.875,0.355,1.011c0,0,0.006,9.619,0.006,9.664c-0.039,1.08-0.684,1.418-1.645,1.439h-9.266  c-0.783-0.016-1.094-0.211-1.293-0.434l-0.615,0.621c0.369,0.385,0.953,0.684,1.896,0.684H34.261z M35.556,23.466  c0.332,0.325,0.359,0.874,0.355,1.011c0,0,0.006,9.621,0.006,9.666c-0.039,1.08-0.684,1.418-1.645,1.438h-9.266  c-0.783-0.014-1.094-0.209-1.293-0.432l-0.615,0.621c0.369,0.383,0.953,0.684,1.896,0.684h9.266c2.688,0,2.504-2.398,2.504-2.398  l0.012-9.49c0,0,0.072-1.009-0.605-1.719L35.556,23.466z M20.364,23.466c0.33,0.325,0.359,0.874,0.355,1.011  c0,0,0.006,9.621,0.006,9.666c-0.041,1.08-0.686,1.418-1.645,1.438H9.813c-0.783-0.014-1.094-0.209-1.291-0.432L7.907,35.77  c0.369,0.383,0.953,0.684,1.895,0.684h9.267c2.686,0,2.504-2.398,2.504-2.398l0.01-9.49c0,0,0.074-1.009-0.604-1.719L20.364,23.466z  " fill-opacity="0.2" stroke-opacity="0.2"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/group/ADM.mmp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This is the project specification file for ADM.
+*
+*
+*/
+
+
+TARGET			ADM.exe
+TARGETTYPE		exe
+UID			0x100039CE 0x2002CCCE
+
+// Use the maximum stack of 80kB
+EPOCSTACKSIZE		0x14000
+
+SOURCEPATH		../src
+SOURCE			ADM.cpp
+SOURCE			ADMApplication.cpp
+SOURCE			ADMAppUi.cpp
+SOURCE			ADMStateMachine.cpp
+SOURCE			ADMDocument.cpp
+SOURCE			ADMXmlParser.cpp
+SOURCE			ADMPackageInfo.cpp
+SOURCE			ADMDownloadHandler.cpp
+SOURCE			ADMInstallManager.cpp
+SOURCE			progressdialog.cpp
+SOURCE			ADMSisParser.cpp
+
+SOURCEPATH		../../common
+SOURCE			config.cpp
+SOURCE			utils.cpp
+SOURCE			globalwaitnote.cpp
+SOURCE			globalqueryobserver.cpp
+SOURCE			networkstatuslistener.cpp
+
+SOURCEPATH		../data
+
+START RESOURCE	ADM.rss
+LANG		00 01 02 03 04 05 06 07 08 09 10 13 14 15 16 17 18 25 26 27 28 29
+LANG		30 31 32 33 37 39 42 44 45 49 50 51 54 57 58 59 65 67 68 70 76 78 79
+LANG		83 93 94 96 129 157 158 159 160 161 186 326 327 401 402
+LANG		sc
+HEADER
+TARGETPATH resource/apps
+END	//RESOURCE
+
+START RESOURCE	ADM_reg.rss
+#ifdef WINSCW
+TARGETPATH	  /private/10003a3f/apps
+#else
+TARGETPATH	  /private/10003a3f/import/apps
+#endif
+END	//RESOURCE
+
+// ---------------------------------------------------
+// Includes
+USERINCLUDE	   ../inc ../../common ../loc
+
+SYSTEMINCLUDE	/epoc32/include/private
+SYSTEMINCLUDE 	/epoc32/include/private/swi
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/osextensions
+SYSTEMINCLUDE	/epoc32/include/middleware
+SYSTEMINCLUDE	/epoc32/include/domain/middleware
+SYSTEMINCLUDE	/epoc32/include/domain/osextensions
+SYSTEMINCLUDE	/epoc32/include/ctsy
+
+LIBRARY		euser.lib
+LIBRARY		apparc.lib
+LIBRARY		bafl.lib
+LIBRARY		cone.lib
+LIBRARY		eikcore.lib
+LIBRARY		avkon.lib
+LIBRARY		commonengine.lib
+LIBRARY		efsrv.lib
+LIBRARY		estor.lib
+LIBRARY		etel.lib		// Network information (roaming)
+LIBRARY		etelmm.lib		// Phone information
+LIBRARY		hal.lib			// Phone information (HAL)
+LIBRARY		sysutil.lib		// Phone information (SysUtil::)
+LIBRARY		aknnotify.lib
+LIBRARY		hlplch.lib
+LIBRARY		SWInstCli.lib		// Silent installation
+LIBRARY		DownloadMgr.lib		// Http fetch
+LIBRARY		SenXml.LIB		// Xml parser
+LIBRARY		ws32.lib
+LIBRARY		apgrfx.lib
+LIBRARY		centralrepository.lib	// CRepository
+LIBRARY		sisregistryclient.lib   // Sis Registry information
+LIBRARY		PlatformEnv.lib
+LIBRARY		flogger.lib		// Logging
+//HACK - FIXME: internal libraries
+LIBRARY		sisxfile.lib
+LIBRARY		siscontroller.lib
+LIBRARY		swidataprovider.lib
+LIBRARY		connmon.lib
+LANG SC
+
+VENDORID	0
+SECUREID	0x2002CCCE
+CAPABILITY	ReadUserData NetworkServices TrustedUI ReadDeviceData WriteDeviceData
+
+MACRO PRODUCTION_RELEASE		// Use production server for package download URL
+MACRO FEATURE_INSTALL_RESUME		// Enable installation resuming support
+MACRO FEATURE_CHANGES_DOWNLOAD_URL	// Allow download URL override in changes XML file
+MACRO FEATURE_CHANGES_USE_UID		// Use UID as the changes filename
+MACRO FEATURE_INSTALL_DRIVE_SELECTION	// Install-time installation drive selection
+MACRO FEATURE_LAUNCH_INSTALLED_APP 	// Launch installed application
+MACRO FEATURE_REPORTING 		// Reports the installation completion and status
+MACRO DO_LOG				// Enable logging
+MACRO USE_LOGFILE			// Log also to file in addition to trace log
+MACRO DEBUG_ADM			// More verbose ADM logging
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/group/bld.inf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file provides the information required for building the whole of a ADM.
+*
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../loc/adm.loc MW_LAYER_LOC_EXPORT_PATH(adm.loc)
+
+PRJ_MMPFILES
+
+gnumakefile icons_scalable_dc.mk
+
+ADM.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/group/icons_scalable_dc.mk	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,73 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:  This is file for creating .mif file (scalable icon)
+#
+# ============================================================================
+#  Name	 : Icons_scalable_dc.mk
+#  Part of  : Smart Installer
+#
+#  Description: This is file for creating .mif file (scalable icon)
+#
+# ============================================================================
+
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\adm.mif
+HDRTARGETFILENAME=$(EPOCROOT)epoc32\include\adm.mbg
+SVG=adm.svg
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN :
+	@echo ...Deleting $(ICONTARGETFILENAME)
+	del /q /f $(ICONTARGETFILENAME)
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK
+# and this command crashes, consider adding "/X" to the command line.
+# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm>
+# ----------------------------------------------------------------------------
+
+RESOURCE : $(ICONTARGETFILENAME)
+
+$(ICONTARGETFILENAME) : $(ICONDIR)\$(SVG)
+	mifconv $(ICONTARGETFILENAME) /H$(HDRTARGETFILENAME) \
+		/c16,8 $(ICONDIR)\$(SVG)
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADM.hrh	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file contains declarations for constants of ADM.
+*     The file can be included in C++ or resource file.
+*
+*
+*/
+
+
+#ifndef __ADM_HRH__
+#define __ADM_HRH__
+
+#define _UID3 0x2002CCCE
+
+// ADM enumerate command codes
+enum TADMIds
+	{
+	ECommand1 = 0x6001, // start value must not be 0
+	ECommand2,
+	EHelp,
+	EAbout
+	};
+
+#endif // __ADM_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADM.pan	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This file contains panic codes.
+*
+*
+*/
+
+
+
+#ifndef __ADM_PAN__
+#define __ADM_PAN__
+
+/** ADM application panic codes */
+enum TADMPanics
+	{
+	EPanicAdmUi = 1,
+	EPanicAdmCmdLineArgs,
+	EPanicAdmCmdInvalidProtocol,
+	EPanicAdmCmdInvalidBootstrap,
+	EPanicAdmCmdInvalidWrapperUid,
+	EPanicAdmCmdInvalidIAP,
+	EPanicAdmCmdInvalidLaunchState,
+	EPanicAdmCmdInvalidLaunchState2,
+	EPanicAdmFileSystemAccess
+	};
+
+inline void Panic(TADMPanics aReason)
+	{
+	_LIT(applicationName, "SmartInstADM");
+	User::Panic(applicationName, aReason);
+	}
+
+#endif // __ADM_PAN__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMAppUi.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,445 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares UI class for application.
+*
+*
+*/
+
+
+#ifndef __ADMAPPUI_h__
+#define __ADMAPPUI_h__
+
+// INCLUDE FILES
+#include <aknappui.h>
+#include <aknglobalnote.h>
+#include <aknglobalconfirmationquery.h>
+#include <etelmm.h>
+#include <flogger.h>
+#include "progressdialog.h"
+#include "globalwaitnote.h"
+#include "globalqueryobserver.h"
+#include "ADMDownloadHandler.h"
+#include "ADMInstallManager.h"
+#include "networkstatusobserver.h"
+
+#include "debug.h"
+
+_LIT(KADMPrivatePath, "c:\\private\\2002CCCE\\");
+_LIT(KADMResumeInfoFile, "c:\\private\\2002CCCE\\resume");
+
+// FORWARD DECLARATIONS
+class CEikonEnv;
+class CStateMachine;
+class CDepTree;
+class CXmlParser;
+class CSisParser;
+class CPackageInfo;
+class CAknGlobalNote;
+class CGlobalQueryObserver;
+class CGlobalWaitNoteObserver;
+class CNetworkStatusListener;
+
+enum TExitReason
+	{
+	EExitNoError = 0,
+	EUserCancelled,
+	EDownloadFailed,
+	EInsufficientMemory,
+	EDeviceNotSupported,       // 5
+	EInstallationFailed,
+	EInvalidBootstrapVersion,
+	ERootInstallationFailed,
+
+	ELastExitState
+	};
+
+// Maximum length of the size prefix ("kB", "MB", "GB"). Must match resource
+// file definition (TBUF16).
+const TInt KMaxPrefixLen = 16;
+
+// CLASS DECLARATION
+/**
+ * CADMAppUi application UI class.
+ * Interacts with the user through the UI and request message processing
+ * from the handler class
+ */
+class CADMAppUi : public CAknAppUi,
+	public CGlobalQueryObserver::MGlobalQueryClient,
+	public CProgressDialog::MProgressDialogClient,
+	public CGlobalWaitNote::MGlobalWaitNoteClient
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * ConstructL.
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CADMAppUi.
+	 * C++ default constructor. This needs to be public due to
+	 * the way the framework constructs the AppUi
+	 */
+	CADMAppUi();
+
+	/**
+	 * ~CADMAppUi.
+	 * Virtual Destructor.
+	 */
+	virtual ~CADMAppUi();
+
+	/**
+	* Handle the Global Query Response
+	*/
+	void HandleGlobalQueryResponseL(const TInt aResponse);
+
+	// Returns EikonEnv
+	inline CEikonEnv* EikonEnv() const { return iEikonEnv; }
+
+	// -------------------------------------------------------------------------
+	// Interfaces for CStateFactory
+	/**
+	 * Displays proper error dialogs before starting the cleanups.
+	 * This function MUST NOT LEAVE.
+	 */
+	void HandleFailure();
+
+	/**
+	 * Shows the final error message, if any, and exits the application.
+	 */
+	void ExitApp();
+
+	/**
+	 * Shows the progress bar.
+	 */
+	void ShowGlobalProgressL(const TInt aResourceId, const TInt aStartValue, const TInt aEndValue, const TInt aCurrent = -1, const TInt aLast = -1);
+
+	/**
+	 * Shows global error dialog with 'OK' CBA.
+	 */
+	void ShowGlobalErrorQueryL(const TInt aResourceId);
+
+	/**
+	 * Display global query seeking user permission
+	 * to fetch dependencies from the web server.
+	 */
+	void ShowDownloadQueryL(const TInt aResourceId, const TInt aInfoResourceId = -1);
+
+	/**
+	 * Shows the application launch confirmation prompt.
+	 */
+	void ShowLaunchPromptL(const TDesC& aAppName, const TDesC& aIconFilename = KNullDesC);
+
+	/**
+	 * Deletes a file pointed by aFilename.
+	 */
+	void DeleteFile(const TDesC& aFilename);
+
+	// -------------------------------------------------------------------------
+
+private:
+	// Functions from base classes
+
+	/**
+	 * From CEikAppUi, HandleCommandL.
+	 * Takes care of command handling.
+	 * @param aCommand Command to be handled.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+	/**
+	 * Window server event. Handles key presses.
+	 */
+	void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );
+
+	//From MProgressDialogClient
+	void ProgressDialogCancelled();
+	void WaitNoteCancelled();
+
+	TInt ShowGlobalNoteL( const TAknGlobalNoteType aType , const TInt aResourceId );
+	TInt ShowExitNoteL();
+	void ShowWaitNoteL( const TInt aResourceId, const TBool aCancellable, const TInt aDetailedResourceId = -1 );
+	void ShowWaitNoteNumL( const TInt aResourceId, const TInt aCurrent, const TInt aLast );
+	void CancelWaitNote();
+	void CancelProgressBar();
+	void ProcessCommandLineArgsL();
+
+	/**
+	 * Verifies available disk space.
+	 *
+	 * Returns true, if enough disk space is available
+	 */
+	TBool VerifyAvailableDiskSpaceL();
+
+	/**
+	 * Pretty prints aSize to aDescr and prefixes it with kB, MB or GB
+	 * depending on the value of aSize.
+	 */
+	void PrettyPrint(const TUint32 aSize, TDes &aDescr);
+
+	/**
+	 * Reads the resources.
+	 *
+	 * Leaves with standard error codes, if it encounters errors.
+	 */
+	void ReadStaticResourcesL();
+
+	/**
+	 * Loads required icons.
+	 */
+	void LoadIconsL();
+
+	/**
+	 * Reads the configuration file.
+	 *
+	 * @return KErrNone if all succesful, error code otherwise
+	 */
+	TInt ReadConfigurationL();
+
+	/**
+	 * Returns the phone information
+	 *
+	 * @return KErrNone, if phone information was succesfully retrieved, error number otherwise.
+	 */
+	TInt GetPhoneInformation();
+
+	/**
+	 * Returns roaming status.
+	 *
+	 * @return ETrue, if phone is roaming
+	 */
+	TBool RegisteredRoaming();
+
+	/**
+	 * Returns the phone memory drive.
+	 *
+	 * @return Phone memory drive
+	 */
+	TInt PhoneMemoryDrive();
+
+	/**
+	 * Returns the memory card drive.
+	 *
+	 * @return Memory card drive
+	 */
+	TInt MemoryCardDrive();
+
+	/**
+	 * Returns true, if the user selected IAP is a WLAN access point.
+	 */
+	TBool UsingWLAN();
+
+	/**
+	 * Returns the Bearer type corresponding to the selected IAP Id.
+	 *
+	 * @return Bearer type
+	 */
+	TInt BearerType();
+
+	/**
+	 * Read the bootstrap version and file names from the resume file.
+	 *
+	 * @return Standard Symbian error code
+	 */
+	TInt ReadResumeInfoL();
+
+private:
+	friend class CStateMachine;
+	friend class CDownloadHandler;
+
+	/**
+	 * State machine running the application logic.
+	 */
+	CStateMachine*     iStateMachine;
+
+	/**
+	 * Application exit reason
+	 */
+	TExitReason iExitReason;
+
+	/**
+	 * Silent installation completion status
+	 */
+	TBool iSilentInstallationOk;
+
+	/**
+	 * Set to ETrue, if non-silent installation was used. Used to hide
+	 * our "Installation complete" note.
+	 */
+	TBool iNonSilentInstallation;
+
+	CProgressDialog* iProgress;
+	CGlobalWaitNote* iWaitNote;
+	CAknGlobalConfirmationQuery* iGlobalConfirmationQuery;
+	CGlobalQueryObserver* iGlobalQueryObserver;
+
+	/**
+	 * Full path to the application icon we're installing. Provided in the
+	 * installer/wrapper package.
+	 */
+	HBufC* iAppIconFilename;
+
+	/**
+	 * Holds the current string shown in the query dialog
+	 */
+	HBufC* iQueryMessage;
+
+	/**
+	 * Path to dependency name. Given as a command line parameter.
+	 */
+	HBufC* iDepFileName;
+
+	/**
+	 * Path to the application sis file. Given as a command line parameter.
+	 */
+	HBufC* iSisFileName;
+
+	/**
+	 * The application name to be installed. Read from the resume file,
+	 * not available if not resuming the installation.
+	 */
+	HBufC* iMainAppName;
+
+	/**
+	 * Bootstrap version that was used to launch ADM.
+	 */
+	TInt iBootstrapVersion;
+
+	/**
+	 * IAP for the download manager. We try to utilise any existing connection.
+	 * If that is not available, browser default IAP will be used, if set.
+	 * If that is not available, user will be prompted for the IAP.
+	 */
+	TUint32 iIAP;
+
+	/**
+	 * URL to server stored to config.ini. If configuration file does not exist,
+	 * default hard-coded (KDefaultDepServerName) URL is used.
+	 */
+	HBufC8* iConfigUrl;
+
+	/**
+	 * The wrapper package UID. This package will be uninstalled
+	 * after succesful installation as it is not required any longer.
+	 */
+	TUid iWrapperPackageUid;
+
+	/**
+	 * Handle to file server we got from CEikonEnv::Static()->FsSession().
+	 */
+	RFs iRfs;
+
+	/**
+	 * Telephony Server (etelmm).
+	 */
+	RTelServer iTelServer;
+
+	/**
+	 * Phone Object
+	 */
+	RMobilePhone iPhone;
+
+	/**
+	 * Software version string
+	 */
+	HBufC* iSwVersion; ///< owned
+
+	/**
+	 * Machine UID
+	 */
+	TInt iMachineUid;
+
+	/**
+	 * True, if resuming installation
+	 */
+	TBool iResumingInstallation;
+
+	/**
+	 * True, if installation resume information is required
+	 */
+	TBool iIsResumeRequired;
+
+	/**
+	 * True, if Ovi Store client is running
+	 */
+	TBool iOviStoreRunning;
+
+	/**
+	* True, if App Launch is possible.
+	 */
+	TBool iAppLaunch;
+
+#ifdef _DEBUG
+	/**
+	 * Manufacturer ID as described by EHalData.
+	 */
+	TInt iManufacturer;
+
+	/**
+	 * Model ID
+	 */
+	TInt iModel;
+
+	/**
+	 * Hardware revision
+	 */
+	TInt iHardwareRev;
+
+	/**
+	 * Software revision
+	 */
+	TInt iSoftwareRev;
+
+	/**
+	 * Device family
+	 */
+	TInt iDeviceFamily;
+
+	/**
+	 * Device family revision
+	 */
+	TInt iDeviceFamilyRev;
+
+	/**
+	 * CPU architecture
+	 */
+	TInt iCpuArch;
+
+	/**
+	 * CPU ABI
+	 */
+	TInt iCpuABI;
+
+	/**
+	 * CPU speed
+	 */
+	TInt iCpuSpeed;
+#endif
+
+	/**
+	 * Localised resource strings for "kB", "MB" and "GB" used by PrettyPrint().
+	 */
+	TBuf<KMaxPrefixLen> iPrefixKb;
+	TBuf<KMaxPrefixLen> iPrefixMb;
+	TBuf<KMaxPrefixLen> iPrefixGb;
+
+	INIT_OBJECT_DEBUG_LOG
+	};
+
+#endif // __ADMAPPUI_h__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMApplication.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares main application class.
+*
+*
+*/
+
+
+#ifndef __ADMAPPLICATION_H__
+#define __ADMAPPLICATION_H__
+
+// INCLUDES
+#include <aknapp.h>
+#include "ADM.hrh"
+
+// UID for the application;
+// this should correspond to the uid defined in the mmp file
+const TUid KUidADMApp =
+	{
+	_UID3
+	};
+
+// CLASS DECLARATION
+
+/**
+ * CADMApplication application class.
+ * Provides factory to create concrete document object.
+ * An instance of CADMApplication is the application part of the
+ * AVKON application framework for the ADM example application.
+ */
+class CADMApplication : public CAknApplication
+	{
+public:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, AppDllUid.
+	 * @return Application's UID (KUidADMApp).
+	 */
+	TUid AppDllUid() const;
+
+protected:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, CreateDocumentL.
+	 * Creates CADMDocument document object. The returned
+	 * pointer in not owned by the CADMApplication object.
+	 * @return A pointer to the created document object.
+	 */
+	CApaDocument* CreateDocumentL();
+	};
+
+#endif // __ADMAPPLICATION_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMDocument.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares document class for application.
+*
+*
+*/
+
+
+#ifndef __ADMDOCUMENT_h__
+#define __ADMDOCUMENT_h__
+
+// INCLUDES
+#include <akndoc.h>
+
+// FORWARD DECLARATIONS
+class CADMAppUi;
+class CEikApplication;
+
+// CLASS DECLARATION
+
+/**
+ * CADMDocument application class.
+ * An instance of class CADMDocument is the Document part of the
+ * AVKON application framework for the ADM example application.
+ */
+class CADMDocument : public CAknDocument
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * NewL.
+	 * Two-phased constructor.
+	 * Construct a CADMDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CADMDocument.
+	 */
+	static CADMDocument* NewL(CEikApplication& aApp);
+
+	/**
+	 * NewLC.
+	 * Two-phased constructor.
+	 * Construct a CADMDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CADMDocument.
+	 */
+	static CADMDocument* NewLC(CEikApplication& aApp);
+
+	/**
+	 * ~CADMDocument
+	 * Virtual Destructor.
+	 */
+	virtual ~CADMDocument();
+
+public:
+	// Functions from base classes
+
+	/**
+	 * CreateAppUiL
+	 * From CEikDocument, CreateAppUiL.
+	 * Create a CADMAppUi object and return a pointer to it.
+	 * The object returned is owned by the Uikon framework.
+	 * @return Pointer to created instance of AppUi.
+	 */
+	CEikAppUi* CreateAppUiL();
+
+private:
+	// Constructors
+
+	/**
+	 * ConstructL
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CADMDocument.
+	 * C++ default constructor.
+	 * @param aApp Application creating this document.
+	 */
+	CADMDocument(CEikApplication& aApp);
+
+	};
+
+#endif // __ADMDOCUMENT_h__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMDownloadHandler.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares DownloadHandler class for application.
+*
+*
+*/
+
+
+#ifndef __ADMDOWNLOADHANDLER_H__
+#define __ADMDOWNLOADHANDLER_H__
+
+#include <e32base.h>
+#include <downloadmgrclient.h>
+#include "globals.h"
+#include "networkstatusobserver.h"
+
+// Forward declarations
+class CADMAppUi;
+class CNetworkStatusListener;
+class RFileLogger;
+
+class CDownloadHandler : public CBase,
+	public MHttpDownloadMgrObserver,
+	public MNetworkStatusObserver
+	{
+public:
+	class MDownloadClient
+		{
+	public:
+		virtual void HandleIapChanged( const TUint32 aIAP ) = 0;
+		virtual void HandleHttpFetchCompleted( const TDesC& aDlFilename, const TInt aDownloadType, const TInt32 aBytesDownloaded, const TReal32 aAvgDlSpeed, const TInt64 aDlTime ) = 0;
+		virtual void HandleHttpFetchInProgress( const TInt32 aDownloaded, const TInt32 aTotalDownloadSize, const TReal32 aAvgDlSpeed ) = 0;
+		virtual void HandleHttpFetchFailure( const TDesC& aDlFilename, const TInt aGlobalErrorId, const TInt aErrorId, const TInt aFetchType ) = 0;
+		virtual void HandleDownloadDeleting() = 0;
+		};
+
+#ifdef USE_LOGFILE
+public:
+	static CDownloadHandler* NewL(MDownloadClient* aDlClient, RFileLogger& aLogger, const TBool aMasterInstance);
+	void Log(TRefByValue<const TDesC16> aFmt, ...);
+
+private:
+	CDownloadHandler( MDownloadClient* aDlClient, RFileLogger& aLogger, const TBool aMasterInstance );
+
+private:
+	RFileLogger&        iLog; ///< Not Owned
+
+#else
+public:
+	static CDownloadHandler* NewL(MDownloadClient* aDlClient, const TBool aMasterInstance);
+	static CDownloadHandler* NewLC(MDownloadClient* aDlClient, const TBool aMasterInstance);
+
+private:
+	CDownloadHandler( MDownloadClient* aDlClient, const TBool aMasterInstance );
+#endif
+
+public:
+	~CDownloadHandler();
+
+public:
+	void HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent );
+	void StartDownloadL( const TDesC8& aDepUrl, const TDesC& aFileName, const TDesC& aDownloadPath, const TInt aFetchType );
+	void CancelAllDownloads();
+	void SetIAP( TUint32 aIAP );
+
+	inline EDownloadError GetDownloadError() const
+		{
+		return iDownloadError;
+		}
+
+	//From MNetworkStatusObserver
+	void HandleNetworkStatusChangedL( const TInt aStatus );
+
+private:
+	void ConstructL();
+	TBool ProcessDlErrors(const TInt32 aGlErrId, const TInt32 aErrId, EDownloadError& aDownloadError);
+	TInt64 UpdateDownloadSpeed(const TInt32 aBytesDownloaded);
+	void DoHandleHttpFetchFailure(const TDesC& aDlFilename, const TInt aGlobalErrorId, const TInt aErrorId);
+
+private:
+	MDownloadClient*    iDlClient;
+	CNetworkStatusListener* iNetworkStatusListener;
+	TInt                iFetchType;
+	TBool               iMasterInstance;
+	TBool               iNetworkLost; // ETrue, if used network connection is lost during download
+	TBool               iCancelled; // ETrue, if called HandleHttpFailure()
+	HBufC8*             iUrl;
+	TPtrC8              iPtrToUrl; //to avoid a temporary TPtrC8 being passed by IPC
+	HBufC*              iResponseBodyFileName;
+	TPtr                iPtrToResponseBodyFileName;
+	RHttpDownloadMgr    iDownloadManager;
+	TInt32              iIAP;
+	TInt                iConnectionAttempt;
+	EDownloadError      iDownloadError;
+	TInt                iDownloadState;
+	TInt                iProgressState;
+	TTime               iDlStartTime;
+	TReal32             iDlAvgSpeed;
+	};
+
+#endif  //__ADMDOWNLOADHANDLER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMGlobalProgressDialogHandler.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares CGlobalProgressDialogHandler class for application.
+*
+*
+*/
+
+
+#ifndef __ADMGlobalProgressDialogHandler_h__
+#define __ADMGlobalProgressDialogHandler_h__
+
+#include <e32base.h>
+#include "ADMGlobalProgressDialogObserver.h"
+
+class CGlobalProgressDialogHandler : public CActive
+	{
+public:
+	~CGlobalProgressDialogHandler();
+	static CGlobalProgressDialogHandler* NewL(MGlobalProgressDialogObserver& aObserver);
+	static CGlobalProgressDialogHandler* NewLC(MGlobalProgressDialogObserver& aObserver);
+public:
+	void StartHandler();
+private:
+	CGlobalProgressDialogHandler(MGlobalProgressDialogObserver& aObserver)
+			: CActive (EPriorityStandard), iObserver(aObserver){};
+	void ConstructL();
+private: // from CActive
+	void RunL();
+	void DoCancel();
+private: // data
+	MGlobalProgressDialogObserver& iObserver;
+	};
+#endif //__ADMGlobalProgressDialogHandler_h__
+//EOF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMGlobalProgressDialogObserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares MGlobalProgressDialogObserver class for application.
+*
+*
+*/
+
+
+#ifndef __ADMGLOBALPROGRESSDIALOGOBSERVER_H__
+#define __ADMGLOBALPROGRESSDIALOGOBSERVER_H__
+
+class MGlobalProgressDialogObserver
+	{
+public:
+	//keep these methods short running because they are called
+	//from within an active object
+	virtual void ProcessCancelOptionL() = 0;
+	virtual void ProcessDoneOptionL() = 0;
+	};
+
+#endif  __ADMGLOBALPROGRESSDIALOGOBSERVER_H__
+//EOF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMInstallManager.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares the CInstallManager class for ADM application.
+*
+*
+*/
+
+
+#ifndef __ADMINSTALLMANAGER_H__
+#define __ADMINSTALLMANAGER_H__
+
+#include <e32base.h>
+#include <swinstdefs.h>
+#include <swinstapi.h>
+
+//TODO: KNoDriveSelected is currently redefined in statemachine.cpp.
+//#include <sisregistrysession.h> //for KNoDriveSelected
+
+class TSisInfo;
+
+class CInstallManager: public CActive
+	{
+public:
+	class MInstallClient
+		{
+	public:
+		virtual void HandleInstallCompletedL(TInt aStatus) = 0;
+		};
+#ifdef USE_LOGFILE
+public:
+	static CInstallManager* NewL(MInstallClient* aInstallClient, RFileLogger& aLogger);
+	static CInstallManager* NewLC(MInstallClient* aInstallClient, RFileLogger& aLogger);
+private:
+	CInstallManager(MInstallClient* aInstallClient, RFileLogger& aLogger);
+
+private:
+	RFileLogger& iLog;
+#else
+public:
+	static CInstallManager* NewL(MInstallClient* aInstallClient);
+	static CInstallManager* NewLC(MInstallClient* aInstallClient);
+private:
+	CInstallManager(MInstallClient* aInstallClient);
+#endif
+
+public:
+	~CInstallManager();
+
+public:
+	TBool IsPackagePresentL( const TUid& aUid );
+	TBool GetPackageVersionInfoL(const TUid& aUid, TVersion& aVersion);
+	TBool GetPackageInstalledDriveL(const TUid& aUid, TChar& aWrapperDrive);
+	TBool GetPackageSidsL(const TUid& aUid, RArray<TUid>& aSids);
+	void SilentInstallPackageL(const TDesC& aInstallFilename, const TChar aInstallDrive = 'C');
+	TInt SilentUnInstallPackage(const TUid& aPkgUid);
+	void SilentUninstallPackageAsync(const TUid& aPkgUid);
+	TInt InstallPackage(const TDesC& aInstallFilename);
+	TUid GetPackageUidL(const TUid& aSid);
+	void CancelAll();
+	TInt CancelInstallation();
+	TInt CancelUninstallation();
+
+protected:
+	TSisInfo GetPackageInfoL(const TUid& aUid, TBool& aIsInstalled);
+	void RunL();
+	void DoCancel();
+
+private:
+	void ConstructL();
+
+private:
+	MInstallClient*    iInstallClient;
+	HBufC*             iInstallFilename;
+	TInt               iInstallAttempt;
+
+	SwiUI::TInstallOptionsPckg     iOptionsPckg;
+	SwiUI::TUninstallOptionsPckg   iUninstallOptionsPckg;
+	SwiUI::RSWInstSilentLauncher   iLauncher;
+	};
+
+#endif  //__ADMINSTALLMANAGER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMPackageInfo.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,317 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares the various classes required to maintain the Package Info and Dependency Tree for ADM application.
+*
+*
+*/
+
+
+#ifndef __PACKAGEINFO_H__
+#define __PACKAGEINFO_H__
+
+const TInt NOT_VISITED = 0;
+const TInt BEING_VISITED = 1;
+const TInt DONE_VISITED = 2;
+
+// Forward Declaration
+class CXmlParser;
+class CPackageInfo;
+class CADMAppUi;
+class RFileLogger;
+
+class Edge : public CBase
+{
+public:
+	static Edge* NewL(CPackageInfo *aVtx1, CPackageInfo *aVtx2);
+	static Edge* NewLC(CPackageInfo *aVtx1, CPackageInfo *aVtx2);
+	~Edge(){}
+
+	inline CPackageInfo *GetVertexOrg() const;
+	inline CPackageInfo *GetVertexDst() const;
+
+private:
+	void ConstructL();
+	Edge(CPackageInfo *aVtx1, CPackageInfo *aVtx2);
+
+private:
+	friend class CPackageInfo;
+
+	CPackageInfo *iVertexOrg;
+	CPackageInfo *iVertexDst;
+	TDblQueLink iEdgeDlink;
+};
+
+enum PackageStatus
+	{
+	EPackageStatusUnknown,
+	EPackageInstalled,
+	EPackageToBeFetched,
+	EPackageToBeUpgraded,
+	EPackageFetchedInstalled,
+	EPackageRootToBeInstalled,
+	EPackageRootInstalled
+	//EPackageToBeInstalled,
+	//EPackageInstallationFailed
+	};
+
+
+// Class for storing Depfile data
+class CPackageInfo: public CBase
+	{
+public:
+	static CPackageInfo* NewL();
+	static CPackageInfo* NewLC();
+	~CPackageInfo();
+
+	// Sort Order By Drive Priority
+	static const TLinearOrder<CPackageInfo> KSortOrderByDrivePriority;
+
+	//Comparator Function for sort by name
+	static TInt CompareByDrivePriority( const CPackageInfo& aPackageOne,const CPackageInfo& aPackageTwo );
+
+	void AddEdgeL(CPackageInfo* aDest);
+	void VisitL(CDepTree *aDepTree);
+	void SetDepFileNameL(const TDesC& aName);
+	void SetChangesFileNameL();
+	void SetSisFileNameL(const TDesC& aName);
+	HBufC8* GetDownloadUrlL();
+
+	inline HBufC8* GetURL() const
+		{
+		return iUrl;
+		};
+
+	inline HBufC* GetChangesFileName() const
+		{
+		return iChangesFileName;
+		}
+
+	inline HBufC* GetDepFileName() const
+		{
+		return iDepFileName;
+		}
+
+	inline HBufC* GetPackageName() const
+		{
+		return iPackageName;
+		};
+
+	inline HBufC* GetSisPackageName() const
+		{
+		return iSisPackageName;
+		};
+
+	inline PackageStatus GetPackageStatus() const
+		{
+		return iPackageStatus;
+		}
+
+	inline TUint32 GetPackageUid() const
+		{
+		return iPackageUid;
+		}
+
+	inline void SetPackageStatus(const PackageStatus& aStatus)
+		{
+		iPackageStatus = aStatus;
+		}
+
+	inline TUint32 GetDownloadSize() const
+		{
+		return iDownloadSize;
+		}
+
+	inline TUint32 GetInstallSize() const
+		{
+		return iInstalledSize;
+		}
+
+	inline TVersion GetPackageVersion() const
+		{
+		return iVersion;
+		}
+
+	inline TUint32 GetDrivePriority() const
+		{
+		return iDrivePriority;
+		}
+	inline void SetInstallDrive(const TChar aDrive)
+		{
+		iInstallDrive = aDrive;
+		}
+	inline TChar GetInstallDrive() const
+		{
+		return iInstallDrive;
+		}
+
+	inline TChar GetMandatoryInstallDrive() const
+		{
+		return iMandatoryInstallDrive;
+		}
+
+private:
+	void ConstructL();
+	CPackageInfo();
+
+private:
+	friend class CXmlParser;
+	friend class CDepTree;
+	friend class CSisParser;
+
+	// Mandatory fields
+	TUint32 iPackageUid;
+	TVersion iDepVersion;
+
+	// Optional Fields
+	HBufC* iPackageName;
+	HBufC* iVendor;
+	HBufC* iDateOfSubmission;//the input was a separate day,month, year format. This should've been converted into a string??
+	HBufC* iDateOfModification;//the input was a separate day,month, year format. This should've been converted into a string??
+
+	TUint32 iDownloadSize;
+	TUint32 iInstalledSize;
+
+	TVersion iVersion;
+	HBufC8* iUrl;
+	HBufC8* iDownloadUrl;
+
+	HBufC* iDepFileName;
+	//HBufC8 iDepUrl;
+
+	HBufC* iChangesFileName;
+	HBufC* iSisPackageName;
+	PackageStatus iPackageStatus;
+
+	TUint32 iDrivePriority; //priority to set as 'C' drive (for now)
+	TChar iInstallDrive; //drive in which the package needs to be installed
+	TChar iMandatoryInstallDrive; //mandatory drive specified in the changes file of the package.
+	//This is for Edges management in a package
+	TUint32 iVisited;
+
+	TDblQue<Edge>     iEdgeDlinkHdr;
+	TDblQueIter<Edge> iEdgeDlinkIter;
+
+	//This is the link for added packages connection
+	TDblQueLink iPackageDlink;
+	};
+
+
+class CDepTree: public CBase
+	{
+#ifdef USE_LOGFILE
+public:
+	static CDepTree* NewL(RFileLogger& aLogger, const TDesC& aDownloadPath);
+	static CDepTree* NewLC(RFileLogger& aLogger, const TDesC& aDownloadPath);
+private:
+	CDepTree(RFileLogger& aLogger);
+
+private:
+	RFileLogger& iLog; ///< Not owned
+#else
+
+public:
+	static CDepTree* NewL(const TDesC& aDownloadPath);
+	static CDepTree* NewLC(const TDesC& aDownloadPath);
+private:
+	CDepTree();
+#endif
+
+public:
+	~CDepTree();
+	TBool SetDriveInfo();
+	void GetDriveListL(RFs& aRFs, RArray<TChar>& aDriveLetters, RArray<TInt64>& aDriveSpaces);
+
+	void AddPackageInfo(CPackageInfo *aPackageInfo);
+	void AddFetchPackageInfo(CPackageInfo *aPackageInfo);
+	CPackageInfo* LocatePackageInDepTree(const TUint32& aDepPackageUid);
+	CPackageInfo* GetNextNode();
+	CPackageInfo* GetFetchNode( TInt nodeLocation);
+	CPackageInfo* GetNextFetchNode();
+	CPackageInfo* GetNextSortedNode();
+	CPackageInfo* GetPreviousFetchNode();
+	inline void SetMachineId(TUint32 machineId)
+		{
+		iMachineId = machineId;
+		}
+	inline TUint32 GetMachineId()
+		{
+		return iMachineId;
+		}
+	inline CPackageInfo* GetCurrentFetchNode() const
+		{
+		return iFetchList[iCurrentPackage];
+		}
+
+	inline TInt NodesCount() const
+		{
+		return iFetchList.Count();
+		}
+
+	inline TInt CountDownloadNodes() const
+		{
+		// -1 is because iSortedlist contains also the root package
+		// which is not actually downloaded
+		if (iSortedList.Count() > 0)
+			return iSortedList.Count() - 1;
+		else
+			return 0;
+		}
+
+	inline TUint32 GetTotalDownloadSize() const
+		{
+		return iTotalDownloadSize;
+		}
+
+	inline TUint32 GetMaxDownloadSize() const
+		{
+		return iMaxDownloadSize;
+		}
+
+	TBool ConstructFetchListL();
+	TBool IsDepTreeEmpty() const;
+	TBool IsCyclePresent() const;
+	TPtrC GetDownloadPath() const;
+	CPackageInfo* GetRootNode();
+	void RemoveDownloadedFiles(RFs& aRfs);
+	void DeleteFile(RFs& aRfs, const TDesC& aFileName, const TDesC& aFilePath );
+
+private:
+	void ConstructL(const TDesC& aDownloadPath);
+
+private:
+	friend class CPackageInfo;
+
+	HBufC* iDownloadPath;
+	RPointerArray<CPackageInfo> iFetchList; //Fetch list - the order in which the packages need to be fetched.
+	//Cannot sort Fetchlist, as that would collapse the fetch order.
+	RPointerArray<CPackageInfo> iSortedList; //The sorted fetch list based on drive priority
+
+	TInt iCurrentPackage;
+	TInt iSortedPackage;
+	TBool iCyclePresent;
+
+	// This is for added Packages in a Dep Tree
+	TDblQue<CPackageInfo> iPackageDlinkHdr;
+	// This is used for traversal of the tree to get the next pkg to be updated
+	TDblQueIter<CPackageInfo> iPackageDlinkFetchIter;
+	//Include the device info.
+
+	TUint32 iTotalDownloadSize;
+	TUint32 iMaxDownloadSize;
+	TUint32 iMachineId;
+	TChar iDownloadDrive; //drive in which the package needs to be downloaded
+	};
+
+#endif //__PACKAGEINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMSisParser.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares the CXmlParser class for ADM application.
+*
+*
+*/
+
+
+#ifndef __ADMSISPARSER_H__
+#define __ADMSISPARSER_H__
+
+#include <e32base.h>
+#include <f32file.h>
+
+// Forward Declaration
+class CPackageInfo;
+class CDepTree;
+namespace Swi {
+namespace Sis {
+class CController;
+}
+}
+
+class CSisParser: public CBase
+	{
+public:
+	static CSisParser* NewL();
+	static CSisParser* NewLC();
+	~CSisParser();
+
+	CPackageInfo* GetDepContentsL(const TDesC& aDepFileName, CPackageInfo *packageInfo,CDepTree* mainTree);
+
+public:
+
+	enum XmlParserError
+		{
+		EErrorXmlNotWelformed,
+		EMissingPackageUid,
+		EMissingPackageName,
+		EMissingPackageVersion,
+		EMissingVendorName,
+		EMissingPackageUrl,
+		EInvalidPackageUid,
+		EIncorrectPackageUid,
+		EMissingDepVersion,
+		EInvalidVersion,
+		EInvalidMachineID,
+		EMissingDepFileName,
+		EMissingSisFileName,
+		EMissingSubmissionDate,
+		EMissingModificationDate,
+		EMissingDownloadSize,
+		EMissingInstalledSize,
+		EMissingMachineID,
+		EDeviceNotSupported,
+		};
+
+private:
+	void ConstructL();
+	CSisParser();
+	void SetDependenciesL(CPackageInfo* aPackageInfo, CDepTree* mainTree, Swi::Sis::CController* controller, const TDesC& aFileName);
+	void SetLanguageSpecificNamesL(Swi::Sis::CController* aController, CPackageInfo* aPackage);
+private:
+	RFs iRfs;
+	};
+
+#endif __ADMSISPARSER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMStateMachine.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,562 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     State machine
+*
+*
+*/
+
+
+#ifndef ADMSTATEMACHINE_H_
+#define ADMSTATEMACHINE_H_
+
+#include <e32base.h>
+#include <e32debug.h>
+
+#include "ADMAppUi.h"
+#include "ADMInstallManager.h"
+#include "ADMPackageInfo.h"
+#include "ADMSisParser.h"
+#include "ADMXmlParser.h"
+
+// Forward declarations
+class TState;
+class CStateMachine;
+
+enum TStatePanic
+	{
+	EPanicStateIndexOutOfBounds = 1000,
+	EPanicStateImplementationMissing,
+	EPanicStateInvalidBootstrapVersion,
+	EPanicStateInvalidMachineUid,
+	EPanicStateFetchStatus,
+	EPanicStateFetchPackageNull,
+	EPanicStateUnexpectedPackage,
+	EPanicStateUnexpectedRootPackage,
+	EPanicStateWrapperNotInstalled
+	};
+
+const TInt KUnknownState = -40000;
+
+// Timeout for waiting for download deletion. Default 2 s.
+const TInt KDlDeletingTimeout = 2*1000*1000;
+
+class CStateFactory : public CBase
+	{
+public:
+	enum TAppState
+		{
+		EStateSetup = 0,                   // 0
+		EStateSetupParsing,
+		EStateBuildDepTree,
+		EStateDownloadChangesFile,
+		EStateParseChangesFile,
+		EStateDownloadDepFile,             // 5
+		EStateParseDepFile,
+		EStateBuildFetchList,
+		EStateVerifyAvailableDiskSpace,
+		EStateConfirmDownload,
+		EStateConfirmRoamingDownload,      // 10
+		EStateStartDependencyDownload,
+		EStateDownloadDependency,
+		EStateInstallDependency,
+		EStateInstallAppSis,
+		EStateUninstallDependency,         // 15
+		EStatePrepareExitWithError,
+		EStateLaunchApp,
+		EStateExit,
+
+		EStateLast
+		};
+
+	TState& GetState(const TAppState aState) const;
+	TInt StateIndex(const TState* aState) const;
+
+	inline CStateMachine& StateMachine() const { return iStateMachine; }
+
+	static CStateFactory* NewL(CStateMachine& aStateMachine);
+	~CStateFactory();
+
+private:
+	CStateFactory(CStateMachine& aStateMachine);
+	void ConstructL();
+
+private:
+	TFixedArray<TState*, EStateLast> iStates;
+	CStateMachine&   iStateMachine;
+	};
+
+// Base class for a state
+class TState
+	{
+public:
+	//friend class CStateFactory;
+	//friend class CStateMachine;
+
+	TState(const CStateFactory& aFactory);
+
+	// Change of states
+	virtual void Enter() const;
+	virtual void Exit() const;
+
+	// Events from UI
+	virtual void UserAccepted();
+	virtual void UserRejected();
+	virtual void UserCancelled();
+
+	// Events from DownloadManager
+	virtual void DownloadInProgress(const TInt aAlreadyDownloaded, const TInt aDownloadSize, const TReal32 aAvgDlSpeed);
+	virtual void DownloadCompleted(const TInt aBytesDownloaded);
+	virtual void DownloadFailed();
+	virtual void DownloadCancelled();
+
+	// Events from InstallManager
+	virtual void InstallInProgress();
+	virtual void InstallCompleted(TInt aStatus);
+	virtual void InstallationCancelled();
+
+protected:
+	void DownloadFailed(const CStateFactory::TAppState aState);
+	void PanicInState(TStatePanic aPanic) const;
+
+protected:
+	const CStateFactory& iFactory;
+	CStateMachine& iStateMachine;
+	};
+
+// ----------------------------------------------------------------------------
+class TStateSetup : public TState
+	{
+public:
+	TStateSetup(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateSetupParsing : public TState
+	{
+public:
+	TStateSetupParsing(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateDownloadDepFile : public TState
+	{
+public:
+	TStateDownloadDepFile(const CStateFactory& aFactory);
+
+	void Enter() const;
+
+	void DownloadCompleted(const TInt aBytesDownloaded);
+	void DownloadFailed();
+	};
+// ----------------------------------------------------------------------------
+class TStateParseDepFile : public TState
+	{
+public:
+	TStateParseDepFile(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateBuildDepTree : public TState
+	{
+public:
+	TStateBuildDepTree(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateDownloadChangesFile : public TState
+	{
+public:
+	TStateDownloadChangesFile(const CStateFactory& aFactory);
+
+	void Enter() const;
+
+	void DownloadCompleted(const TInt aBytesDownloaded);
+	void DownloadFailed();
+	};
+// ----------------------------------------------------------------------------
+class TStateParseChangesFile : public TState
+	{
+public:
+	TStateParseChangesFile(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateBuildFetchList : public TState
+	{
+public:
+	TStateBuildFetchList(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateVerifyAvailableDiskSpace : public TState
+	{
+public:
+	TStateVerifyAvailableDiskSpace(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateConfirmDownload : public TState
+	{
+public:
+	TStateConfirmDownload(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void UserAccepted();
+	};
+// ----------------------------------------------------------------------------
+class TStateConfirmRoamingDownload : public TState
+	{
+public:
+	TStateConfirmRoamingDownload(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void UserAccepted();
+	};
+// ----------------------------------------------------------------------------
+class TStateStartDependencyDownload : public TState
+	{
+public:
+	TStateStartDependencyDownload(const CStateFactory& aFactory);
+
+	void Enter() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateDownloadDependency : public TState
+	{
+public:
+	TStateDownloadDependency(const CStateFactory& aFactory);
+
+	void Enter() const;
+
+	void DownloadCompleted(const TInt aBytesDownloaded);
+	void DownloadInProgress(const TInt aAlreadyDownloaded, const TInt aDownloadSize, const TReal32 aAvgDlSpeed);
+	void DownloadFailed();
+
+private:
+	TBool iRetryDownload; // Set to true, if we're retrying download
+	};
+// ----------------------------------------------------------------------------
+class TStateInstallDependency : public TState
+	{
+public:
+	TStateInstallDependency(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void Exit() const;
+	void InstallCompleted(TInt aStatus);
+	};
+// ----------------------------------------------------------------------------
+class TStateInstallAppSis : public TState
+	{
+public:
+	TStateInstallAppSis(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void InstallCompleted(TInt aStatus);
+	};
+// ----------------------------------------------------------------------------
+class TStateUninstallDependency : public TState
+	{
+public:
+	TStateUninstallDependency(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void InstallCompleted(TInt aStatus);
+	};
+// ----------------------------------------------------------------------------
+class TStatePrepareExitWithError : public TState
+	{
+public:
+	TStatePrepareExitWithError(const CStateFactory& aFactory);
+
+	void Enter() const;
+
+private:
+	TInt CreateInstallationResumeInfo() const;
+	void BackupFilesL() const;
+	};
+// ----------------------------------------------------------------------------
+class TStateLaunchApp : public TState
+	{
+public:
+	TStateLaunchApp(const CStateFactory& aFactory);
+
+	void Enter() const;
+	void UserAccepted();
+	void UserRejected();
+};
+// ----------------------------------------------------------------------------
+class TStateExit : public TState
+	{
+public:
+	TStateExit(const CStateFactory& aFactory);
+
+	void Enter() const;
+
+private:
+	void RemoveResumeFiles() const;
+
+#ifdef FEATURE_REPORTING
+	void Report() const;
+
+public:
+	void DownloadInProgress(const TInt /* aAlreadyDownloaded */, const TInt /* aDownloadSize */, const TReal32 /* aAvgDlSpeed */);
+	void DownloadCompleted(const TInt /* aBytesDownloaded */);
+	void DownloadFailed();
+	void DownloadCancelled();
+#endif
+	};
+
+// ----------------------------------------------------------------------------
+class CStateMachine : public CActive,
+	public CInstallManager::MInstallClient,
+	public CDownloadHandler::MDownloadClient
+	{
+public:
+	friend class TState;
+	friend class TStateBuildDepTree;
+	friend class TStateBuildFetchList;
+	friend class TStateConfirmDownload;
+	friend class TStateConfirmRoaming;
+	friend class TStateDownloadChangesFile;
+	friend class TStateDownloadDepFile;
+	friend class TStateDownloadDependency;
+	friend class TStateExit;
+	friend class TStateInstallAppSis;
+	friend class TStateInstallDependency;
+	friend class TStateLaunchApp;
+	friend class TStateParseChangesFile;
+	friend class TStateParseDepFile;
+	friend class TStateParseSisFile;
+	friend class TStatePrepareExitWithError;
+	friend class TStateSetup;
+	friend class TStateSetupParsing;
+	friend class TStateStartDependencyDownload;
+	friend class TStateUninstallDependency;
+	friend class TStateVerifyAvailableDiskSpace;
+	friend class TStateWaitForUserConfirmation;
+
+	static CStateMachine* NewL(CADMAppUi& aAppUi, const TDesC& aDownloadPath);
+	~CStateMachine();
+
+	void Start();
+	void Stop();
+	void SetStartState(const CStateFactory::TAppState aState);
+	void SetState(const CStateFactory::TAppState aState);
+	TInt StateIndex() const;
+
+	// Interfacing for ADM
+	// Called when user has made a selection in a query dialog
+	void SetIAP(TUint32 aIAP);
+	void HandleUserResponse(TInt aResponse);
+	CStateFactory::TAppState FailedState() const { return iFailedState; }
+	inline TInt32 TotalDownloadSize() const { return iDepTree->GetTotalDownloadSize(); }
+	inline HBufC* LaunchCaption() const
+		{
+			CPackageInfo* root = iDepTree->GetRootNode();
+			if (root)
+				return root->GetPackageName();
+			else
+				return NULL;
+		}
+
+#ifdef USE_LOGFILE
+	RFileLogger& Log() const { return iAppUi.iLog; }
+#endif
+
+	// Interface to ADM
+	inline TBool ResumeRequired() const { return iAppUi.iIsResumeRequired; }
+	inline TInt MachineUid() const { return iAppUi.iMachineUid; }
+	inline TInt BootstrapVersion() const { return iAppUi.iBootstrapVersion; }
+	inline TBool RegisteredRoaming() const { return iAppUi.RegisteredRoaming(); }
+	inline TBool UsingWLAN() const { return iAppUi.UsingWLAN(); }
+	inline TBool OviStoreRunning() const { return iAppUi.iOviStoreRunning; }
+	inline TBool ResumingInstallation() const { return iAppUi.iResumingInstallation; }
+	inline HBufC* DepFilename() const { return iAppUi.iDepFileName; }
+	inline HBufC* SisFilename() const { return iAppUi.iSisFileName; }
+	inline HBufC8* ConfigUrl() const { return iAppUi.iConfigUrl; }
+	inline TUid& WrapperPackageUid() const { return (TUid&)iAppUi.iWrapperPackageUid; }
+	inline RFs& FsSession() const { return iAppUi.EikonEnv()->FsSession(); }
+	inline void SetSilentInstallationOk(const TBool aOk) { iAppUi.iSilentInstallationOk = aOk; }
+	inline void SetNonSilentInstallation(const TBool aVal) { iAppUi.iNonSilentInstallation = aVal; }
+	inline void SetAppLaunch(const TBool aSuccess) { iAppUi.iAppLaunch = aSuccess; }
+	inline TBool AppLaunch() const { return iAppUi.iAppLaunch; }
+	inline TInt ExitReason() const { return iAppUi.iExitReason; }
+	void UpdateProgressBar(const TInt aStartValue, const TInt aEndValue);
+	void StopProgressBar() const;
+	void SetFailureReason(TExitReason aReason);
+	void ShowDownloadQueryL(const TInt aResourceId, const TInt aInfoResourceId = -1);
+	void ShowWaitNoteL(const TInt aResourceId);
+	void ShowInstallingWaitNoteL(const TInt aCurrent, const TInt aLast);
+	void ShowProgressBarL(const TInt aStartValue, const TInt aEndValue, const TInt aCurrent = -1, const TInt aLast = -1);
+	void StopWaitNote();
+
+protected:
+	void RunL();
+	void DoCancel();
+	TInt RunError(const TInt aError);
+
+	void SetState(TState& aState);
+
+	//From MInstallClient
+	void HandleInstallCompletedL(TInt aStatus);
+
+	//From MDownloadClient
+	/**
+	 * Called by Download Manager when IAP has changed.
+	 * @param aIAP IAP ID
+	 */
+	void HandleIapChanged(const TUint32 aIAP);
+	/**
+	 * Called by Download Manager when downloading of a packet is completed.
+	 * @param aDlFileName Name of the downloaded file.
+	 * @param aResponseType Download type.
+	 * @param aDownloadSize Total number of bytes downloaded.
+	 */
+	void HandleHttpFetchCompleted( const TDesC& aDlFilename, const TInt aDownloadType, const TInt32 aBytesDownloaded, const TReal32 aAvgDlSpeed, const TInt64 aDlTime );
+
+	/**
+	 * Called when download manager has retrieved a packet from the network.
+	 * Required for updating the progress bar.
+	 */
+	void HandleHttpFetchInProgress(const TInt32 aAlreadyDownloaded, const TInt32 aDownloadSize, const TReal32 aAvgDlSpeed);
+
+	/**
+	 * Called when download manager encounters a problem while downloading
+	 */
+	void HandleHttpFetchFailure( const TDesC& aDlFilename, const TInt aGlobalErrorId, const TInt aErrorId, const TInt aFetchType );
+
+	/**
+	 * Called when download manager is deleting the download.
+	 */
+	void HandleDownloadDeleting();
+
+	// State machine required functions
+	//void HandleFailure();
+	//TBool VerifyAvailableDiskSpace();
+	//void SilentInstallDownloadedPackageL();
+
+private:
+	CStateMachine(CADMAppUi& aAppUi);
+	void ConstructL(const TDesC& aDownloadPath);
+
+private:
+	CADMAppUi&			iAppUi;
+	CStateFactory*		iStateFactory;     //< owns
+	CInstallManager*	iInstallManager;   //< owns
+	CDownloadHandler*	iDownloadHandler;  //< owns
+
+	CXmlParser*			iXmlParser; //< owns
+	CSisParser*			iSisParser; //< owns
+	CDepTree*			iDepTree;   //< owns
+	CPackageInfo*		iCurrentPackage;
+
+	/**
+	 * Path to the downloaded file. Updated after each finishing each
+	 * download (completed or failed).
+	 */
+	HBufC*              iDownloadedFile;   //< owns
+
+	/**
+	 * Current state.
+	 */
+	TState*             iState;
+
+	/**
+	 * The state that experienced failure that causes ADM to exit.
+	 */
+	CStateFactory::TAppState    iFailedState;
+
+	/**
+	 * Number of dependency tree nodes processed so far.
+	 */
+	TInt   iNodesProcessed;
+
+	/**
+	 * Progress bar current value.
+	 */
+	TInt32 iProgressCurrentValue;
+
+	/**
+	 * Progress bar maximum value. Stays constant after being set.
+	 */
+	TInt32 iProgressMaxValue;
+
+	/**
+	 * Current package # being downloaded/installed.
+	 */
+	TInt iCounterCurrent;
+
+	/**
+	 * Total number of packages being downloaded/installed.
+	 */
+	TInt iCounterMax;
+
+	/**
+	 * Total size of the packages to be downloaded in bytes.
+	 * Used in progress bar update.
+	 */
+	TInt32 iDownloadSize;
+
+	/**
+	 * Downloaded bytes so far.
+	 * Used in progress bar update.
+	 */
+	TInt32 iCumulativeDepDownloaded;
+
+	/**
+	 * Total number of bytes downloaded during session. Includes all
+	 * dependency XML file downloads and .sis file downloads.
+	 */
+	TInt32 iCumulativeDownloaded;
+
+	/**
+	 * Time in microseconds used in downloading, used for calculating average download speed.
+	 */
+	TInt64 iDownloadTime;
+
+	/**
+	 * Drive in which wrapper is installed.
+	 */
+	TChar iWrapperInstalledDrive;
+
+	/**
+	 * Restart Attempt for Download Failure
+	 */
+	TInt iRestartAttempt;
+
+#ifdef FEATURE_LAUNCH_INSTALLED_APP
+	/**
+	 * App Launch name
+	 */
+	TFileName iLaunchName;
+	TFileName iLaunchIconFilename;
+	TApaAppCaption iLaunchCaption;
+#endif
+
+	/**
+	 * Semaphore for signalling download deleting.
+	 */
+	RSemaphore iDlDeletingSemaphore;
+	};
+
+#endif /* ADMSTATEMACHINE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMStateMachineDebug.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     State machine debug macros
+*
+*
+*/
+
+
+#ifndef __ADMSTATEMACHINEDEBUG_H__
+#define __ADMSTATEMACHINEDEBUG_H__
+
+#ifdef DEBUG_ADM
+
+// We need to redefine the logging macros for accessing the logger
+//TPtrC8((TUint8*)__PRETTY_FUNCTION__)
+#define LOG_FUNC { RDebug::Printf("+ %s", __PRETTY_FUNCTION__); }
+
+#undef LOG
+#undef LOG2
+#undef LOG3
+#undef LOG4
+#undef LOG5
+#undef LOG6
+#undef LOG7
+#undef LOG8
+#undef LOG8_2
+
+#ifdef USE_LOGFILE
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); iAppUi.iLog.Write( KMsg ); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define LOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print(_L("RDebug _L8() at line %d"), __LINE__); }
+
+#define SLOG( aMsg ) { _LIT(KMsg, aMsg); iStateMachine.Log().Write( KMsg ); RDebug::Print( KMsg ); }
+#define SLOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define SLOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define SLOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2, aParam3 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define SLOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define SLOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define SLOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define SLOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define SLOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); iStateMachine.Log().WriteFormat( KMsg, aParam1 ); RDebug::Print(_L("RDebug _L8() at line %d"), __LINE__); }
+#else
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define LOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); TBuf8<256> t; t.AppendFormat(KMsg, aParam1); RDebug::RawPrint(t); }
+#endif
+
+#else
+
+#define LOG_FUNC
+#define LOG( a )
+#define LOG2( a, b )
+#define LOG3( a, b, c )
+#define LOG4( a, b, c, d )
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 )
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 )
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 )
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 )
+#define LOG8_2( a, b )
+#define SLOG( a )
+#define SLOG2( a, b )
+#define SLOG3( a, b, c )
+#define SLOG4( a, b, c, d )
+#define SLOG5( aMsg, aParam1, aParam2, aParam3, aParam4 )
+#define SLOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 )
+#define SLOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 )
+#define SLOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 )
+#define SLOG8_2( a, b )
+
+#endif // DEBUG_ADM
+
+#endif // __ADMSTATEMACHINEDEBUG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMXmlParser.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares the CXmlParser class for ADM application.
+*
+*
+*/
+
+
+#ifndef __ADMXMLPARSER_H__
+#define __ADMXMLPARSER_H__
+
+#include <e32base.h>
+#include <f32file.h>
+
+// Mandatory depfile xml elements
+_LIT8(KFieldPackageUid, "PackageUid");
+_LIT8(KFieldDepVersion, "Version");
+
+// Optional depfile xml elements
+_LIT8(KFieldDependency, "Dependency");
+_LIT8(KFieldDepPackageUid, "Uid");
+_LIT8(KFieldDepPackageName, "Name");
+_LIT8(KFieldDepPackageVersion, "Version");
+_LIT8(KFieldDepVendor, "Vendor");
+_LIT8(KFieldDepUrl, "Url");
+_LIT8(KFieldVersionInformation,"Information");
+_LIT8(KFieldInstallPackageName,"InstallPackageName");
+
+// Mandatory changes xml elements
+_LIT8(KFieldDepFileName,"DependentFileName");
+_LIT8(KFieldDateOfSubmission,"DateOfSubmission");
+_LIT8(KFieldDateOfModification,"DateOfModification");
+_LIT8(KFieldDownloadSize,"DownloadSize");
+_LIT8(KFieldInstalledSize,"InstalledSize");
+_LIT8(KFieldDescription,"Description");
+
+_LIT8(KFieldSupportedDevice,"SupportedDevice");
+_LIT8(KFieldDeviceName,"Name");
+_LIT8(KFieldDeviceMachineId,"MachineId");
+_LIT8(KFieldDeviceVersion,"Version");
+
+_LIT8(KFieldDate,"Date");
+_LIT8(KFieldDay,"Day");
+_LIT8(KFieldMonth,"Month");
+_LIT8(KFieldYear,"Year");
+
+_LIT8(KFieldDrivePriority,"DrivePriority");
+_LIT8(KFieldMandatoryInstallDrive,"MandatoryInstallDrive");
+
+//<!ELEMENT Package ( Name, Uid, Version, Vendor, Dependencies?, DateOfSubmission, DateOfModification, SupportedDevices, Size, Url*, Description?)>
+
+// Forward Declaration
+class CPackageInfo;
+class CSenXmlReader;
+class CSenDomFragment;
+class CDepTree;
+class CSenElement;
+
+enum XmlParserError
+	{
+	EErrorXmlNotWelformed,
+	EMissingPackageUid,
+	EMissingPackageName,
+	EMissingPackageVersion,
+	EMissingVendorName,
+	EMissingPackageUrl,
+	EInvalidPackageUid,
+	EIncorrectPackageUid,
+	EMissingDepVersion,
+	EInvalidVersion,
+	EInvalidMachineID,
+	EMissingDepFileName,
+	EMissingSisFileName,
+	EMissingSubmissionDate,
+	EMissingModificationDate,
+	EMissingDownloadSize,
+	EMissingInstalledSize,
+	EMissingMachineID,
+	EUnsupportedDevice,
+	EInvalidDrivePriority,
+	};
+
+class CXmlParser: public CBase
+	{
+public:
+	static CXmlParser* NewL();
+	static CXmlParser* NewLC();
+	~CXmlParser();
+
+	CPackageInfo* GetDepContentsL(const TDesC& aDepFileName, CPackageInfo *packageInfo,CDepTree* mainTree);
+	void GetChangesInfoL(const TDesC& aChangesFileName, CPackageInfo *packageInfo,CDepTree* mainTree);
+
+private:
+	void ConstructL();
+	CXmlParser();
+	TInt StringToInt(const TDesC8& aString, TUint32& aInt);
+	void SetDependenciesL(CPackageInfo* aPackageInfo, CDepTree* mainTree);
+	void GetVersionInfoL(CPackageInfo *packageInfo,TUint32 machineId);
+	void  SetDate(const TDesC8& aDatePtr);
+	TBool checkMachineIdL(CSenElement *versionInfo,TUint32 machineId);
+	void InitL();
+
+private:
+	CSenXmlReader* iXmlReader;
+	CSenDomFragment* iDomFragment;
+	RFs iRfs;
+	};
+
+#endif __ADMXMLPARSER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/ADMglobalqueryobserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares CGlobalQueryObserver class for application.
+*
+*
+*/
+
+
+#ifndef __BOOTSTRAPGLOBALQUERYOBSERVER_H__
+#define __BOOTSTRAPGLOBALQUERYOBSERVER_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+class CADMAppUi;
+
+/**
+* CGlobalQueryObserver class
+*/
+class CGlobalQueryObserver:
+	public CActive
+	{
+	public:  // Constructors and destructor
+		/**
+		* NewL
+		* Two-phased constructor.
+		*/
+		static CGlobalQueryObserver* NewL(CADMAppUi* aCBootstrapAppUiObj);
+
+		/**
+		* ~CGlobalQueryObserver
+		* Destructor.
+		*/
+		virtual ~CGlobalQueryObserver();
+
+	public:     // New function
+		/**
+		* Start
+		* Start the activator.
+		*/
+		void Start();
+
+		/*
+		* SetSelectItemFlag
+		* Set iSelectItemFlag.
+		*/
+		void SetSelectItemFlag();
+
+		/*
+		* UnsetSelectItemFlag
+		* Unset iSelectItemFlag.
+		*/
+		void UnsetSelectItemFlag();
+
+	private:    // New function
+		/**
+		* CGlobalQueryObserver
+		* C++ default constructor.
+		*/
+		CGlobalQueryObserver(CADMAppUi* aCBootstrapAppUiObj);
+
+		/**
+		* ConstructL
+		* Symbian default constructor.
+		*/
+		void ConstructL();
+
+	private:    // From CActive
+		/**
+		* RunL
+		* From CActive, handle an event.
+		*/
+		void RunL();
+
+		/**
+		* DoCancel
+		* From CActive, implement the Cancel protocol.
+		*/
+		void DoCancel();
+
+	private: // Data
+		/**
+		* iSelectItemFlag
+		*/
+		TBool iSelectItemFlag;
+
+		/**
+		*Call Back
+		*/
+		CADMAppUi* iCBootstrapAppUiObj;
+	};
+
+#endif // __BOOTSTRAPGLOBALQUERYOBSERVER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/inc/progressdialog.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef PROGRESSDIALOG_H_
+#define PROGRESSDIALOG_H_
+
+#include <e32base.h>
+
+class CAknGlobalProgressDialog;
+class CProgressDialog : public CActive
+{
+public:
+	class MProgressDialogClient
+	{
+	public:
+		virtual void ProgressDialogCancelled() = 0;
+	};
+	static CProgressDialog* NewL(MProgressDialogClient& aOwner);
+	~CProgressDialog();
+	void StartL(const TDesC& aPrompt, TInt aFinal=0);
+	void Add(TInt aProgress);
+	void Update(TInt aProgress, TInt aFinal=-1);
+	void Stop();
+private:
+	CProgressDialog(MProgressDialogClient& aOwner);
+	void RunL();
+	void DoCancel();
+	void ConstructL();
+
+private:
+	CAknGlobalProgressDialog* iProgress;
+	MProgressDialogClient& iOwner;
+	TInt iCurrentValue;
+	TInt iFinalValue;
+};
+
+#endif /* PROGRESSDIALOG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/ADM.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Localisable Resource file for the ADM.
+
+*
+*/
+
+
+#if LANGUAGE_00
+#include "adm_00.loc"
+#elif LANGUAGE_01
+#include "adm_01.loc"
+#elif LANGUAGE_02
+#include "adm_02.loc"
+#elif LANGUAGE_03
+#include "adm_03.loc"
+#elif LANGUAGE_04
+#include "adm_04.loc"
+#elif LANGUAGE_05
+#include "adm_05.loc"
+#elif LANGUAGE_06
+#include "adm_06.loc"
+#elif LANGUAGE_07
+#include "adm_07.loc"
+#elif LANGUAGE_08
+#include "adm_08.loc"
+#elif LANGUAGE_09
+#include "adm_09.loc"
+#elif LANGUAGE_10
+#include "adm_10.loc"
+#elif LANGUAGE_13
+#include "adm_13.loc"
+#elif LANGUAGE_14
+#include "adm_14.loc"
+#elif LANGUAGE_15
+#include "adm_15.loc"
+#elif LANGUAGE_16
+#include "adm_16.loc"
+#elif LANGUAGE_17
+#include "adm_17.loc"
+#elif LANGUAGE_18
+#include "adm_18.loc"
+#elif LANGUAGE_25
+#include "adm_25.loc"
+#elif LANGUAGE_26
+#include "adm_26.loc"
+#elif LANGUAGE_27
+#include "adm_27.loc"
+#elif LANGUAGE_28
+#include "adm_28.loc"
+#elif LANGUAGE_29
+#include "adm_29.loc"
+#elif LANGUAGE_30
+#include "adm_30.loc"
+#elif LANGUAGE_31
+#include "adm_31.loc"
+#elif LANGUAGE_32
+#include "adm_32.loc"
+#elif LANGUAGE_33
+#include "adm_33.loc"
+#elif LANGUAGE_37
+#include "adm_37.loc"
+#elif LANGUAGE_39
+#include "adm_39.loc"
+#elif LANGUAGE_42
+#include "adm_42.loc"
+#elif LANGUAGE_44
+#include "adm_44.loc"
+#elif LANGUAGE_45
+#include "adm_45.loc"
+#elif LANGUAGE_49
+#include "adm_49.loc"
+#elif LANGUAGE_50
+#include "adm_50.loc"
+#elif LANGUAGE_51
+#include "adm_51.loc"
+#elif LANGUAGE_54
+#include "adm_54.loc"
+#elif LANGUAGE_57
+#include "adm_57.loc"
+#elif LANGUAGE_58
+#include "adm_58.loc"
+#elif LANGUAGE_59
+#include "adm_59.loc"
+#elif LANGUAGE_65
+#include "adm_65.loc"
+#elif LANGUAGE_67
+#include "adm_67.loc"
+#elif LANGUAGE_68
+#include "adm_68.loc"
+#elif LANGUAGE_70
+#include "adm_70.loc"
+#elif LANGUAGE_76
+#include "adm_76.loc"
+#elif LANGUAGE_78
+#include "adm_78.loc"
+#elif LANGUAGE_79
+#include "adm_79.loc"
+#elif LANGUAGE_83
+#include "adm_83.loc"
+#elif LANGUAGE_93
+#include "adm_93.loc"
+#elif LANGUAGE_94
+#include "adm_94.loc"
+#elif LANGUAGE_96
+#include "adm_96.loc"
+#elif LANGUAGE_129
+#include "adm_129.loc"
+#elif LANGUAGE_157
+#include "adm_157.loc"
+#elif LANGUAGE_158
+#include "adm_158.loc"
+#elif LANGUAGE_159
+#include "adm_159.loc"
+#elif LANGUAGE_160
+#include "adm_160.loc"
+#elif LANGUAGE_161
+#include "adm_161.loc"
+#elif LANGUAGE_186
+#include "adm_186.loc"
+#elif LANGUAGE_326
+#include "adm_326.loc"
+#elif LANGUAGE_327
+#include "adm_327.loc"
+#elif LANGUAGE_401
+#include "adm_401.loc"
+#elif LANGUAGE_402
+#include "adm_402.loc"
+//#else
+//#include "adm-original.loc"
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm-original.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Localisable Resource file for the ADM.
+
+*
+*/
+
+
+// ----------------------------------------------------------------------------
+// LOCALISATION STRINGS
+// ----------------------------------------------------------------------------
+
+//d:Caption string for the application. ADM = Application Dependency Manager
+//d:Application long name, shown for instance, in the Installed Applications list
+//d:Do NOT localize!
+#define qtn_caption_string "Nokia Smart Installer ADM"
+
+//d:Caption short string for the application.
+//d:Application short name
+//d:Do NOT localize!
+#define qtn_short_caption_string "Smart Installer ADM"
+
+//d:Resource file path
+//d:Do NOT localize!
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+
+// ----------------------------------------------------------------------------
+//d:String to be displayed while the preparing device before
+//d:starting dependency downloads
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_PREPARING_INST_TEXT "Preparing installation"
+
+// ----------------------------------------------------------------------------
+//d:Download confirmation query
+//d:%U = indication amount of download: "xxx.yy kB" or "xxx.yy MB" or "xxx.yy GB"
+//d:Suffixes will be localised as well, see below (STRING_R_KB, STRING_R_MB and
+//d:STRING_R_GB).
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_CONTINUE_TO_DOWNLOAD_TEXT "Continue to download %U?"
+
+// ----------------------------------------------------------------------------
+//d:Same as STRING_R_ADM_CONTINUE_TO_DOWNLOAD_TEXT except this is shown
+//d:when the device is roaming.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ROAMING_CONTINUE_TO_DOWNLOAD_TEXT "Device is roaming. Continue to download %U?"
+
+// ----------------------------------------------------------------------------
+//d:Shown after the user has pressed 'cancel' to confirm if the user wants to continue
+//d:the installation later (from the menu grid). The user has the following
+//d:options to choose from: "Yes" and "No". System default translations for those
+//d:options are used (R_AVKON_SOFTKEYS_YES_NO).
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_CONTINUE_INSTALLATION_LATER_TEXT "Continue installation later?"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the user resumes the installation by selecting Smart Installer ADM
+//d:from the application menu grid.
+//d:%U is the name of the application to be installed, for instance: Fluidlauncher
+//d:The user has the possibility to select "Yes" or "No". System default translations
+//d:for those options are used (R_AVKON_SOFTKEYS_YES_NO).
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_CONTINUE_INSTALLATION_TEXT "Continue installation of %U?"
+
+// ----------------------------------------------------------------------------
+//d:Suffix for kilobyte kB
+//l:popup_note_window
+//r:3.1
+#define STRING_R_KB				"kB"
+
+// ----------------------------------------------------------------------------
+//d:Suffix for megabyte MB
+//l:popup_note_window
+//r:3.1
+#define STRING_R_MB				"MB"
+
+// ----------------------------------------------------------------------------
+//d:Suffix for gigabyte GB
+//l:popup_note_window
+//r:3.1
+#define STRING_R_GB				"GB"
+
+// ----------------------------------------------------------------------------
+//d:Shown after succesful installation
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_INSTALLATION_OK_TEXT   "Installation complete"
+
+// ----------------------------------------------------------------------------
+//d:Download progress bar dialog
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_DOWNLOAD_WAIT_TEXT      "Downloading and installing"
+
+// ----------------------------------------------------------------------------
+//d:Cleaning up wait note when user has cancelled the installation
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_CANCELLING_INSTALLATION_WAIT_TEXT   "Cancelling installation"
+
+// ----------------------------------------------------------------------------
+//d:Cleaning up wait note when network error has occured
+//d:%U is one of the detailed description of the error shown below.
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_DETAILED_CANCELLING_INSTALLATION_WAIT_TEXT "%U!\nCancelling installation"
+
+// ----------------------------------------------------------------------------
+//d:Detailed description of network error: network connection lost
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_ERR_CONN_LOST_TEXT "Network connection lost"
+
+// ----------------------------------------------------------------------------
+//d:Cleaning up wait note when an error occured during installation, but it
+//d:is not caused by user cancelling the installation.
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_REVERTING_CHANGES_WAIT_TEXT         "Reverting changes"
+
+// ----------------------------------------------------------------------------
+//d:Shown when finalising the installation.
+//d:Shown when silently installing application sis.
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_FINALIZING_INSTALLATION_WAIT_TEXT   "Finalizing installation"
+
+// ----------------------------------------------------------------------------
+// Error strings
+// ----------------------------------------------------------------------------
+
+// ----------------------------------------------------------------------------
+//d:General error string. Shown when an error occurs that
+//d:we want to give more detailed information about the error.
+//d:%N is the error number in decimal
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERROR_TEXT "Error occured! %N"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the user tries to restart smartinstallation from the application
+//d:menu grid, but no installations are pending.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_NO_PENDING_INSTALLATIONS_TEXT "No pending installations"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the user tries to restart smartinstallation from the application
+//d:menu grid, but the previous installation was succesful i.e. no installation
+//d:is pending.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_LATEST_INSTALLATION_OK_TEXT "No pending installations: the latest installation was succesful."
+
+// ----------------------------------------------------------------------------
+//d:Generic error note describing that installation has failed.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_INSTALLATION_FAILED_TEXT "Installation failed!"
+
+// ----------------------------------------------------------------------------
+//d:Shown when installation is tried on an unsupported device.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_INSTALLATION_UNSUPPORTED_DEVICE_TEXT "Device is not supported"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the device does not have enough free space to install
+//d:the dependencies.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_INSTALLATION_NOT_ENOUGH_SPACE_TEXT "Not enough space for the installation"
+
+// ----------------------------------------------------------------------------
+//d:Shown when download has failed to other than network timeout.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_DOWNLOAD_FAILED_TEXT "Download failed!"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the user has explicitly cancelled the installation.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_USER_CANCELLATION_TEXT "Installation cancelled!"
+
+// ----------------------------------------------------------------------------
+//d:Shown when installation is started from an ubsupported Smart Installer version.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ERR_UNSUPPORTED_VERSION_TEXT "Unsupported Smart Installer version"
+
+// ============================================================================
+//
+// Ovi Store UI flow related new strings
+//
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:String to be displayed when installation is continued instead of
+//d:the default STRING_R_ADM_PREPARING_INST_TEXT "Preparing installation"
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_CONTINUING_INST_TEXT "Continuing installation"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:String to be displayed while the preparing device before
+//d:starting dependency downloads
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_VERIFYING_SW_TEXT "Verifying components"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Details to download confirmation query. Used in STRING_R_ADM_DL_PROMPT_TEXT.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_SW_UPDATE_REQUIRED_TEXT "Download required."
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Details to download confirmation query. Linefeed '\n' is required to separate
+//d:the message from the next line.
+//d:Used in STRING_R_ADM_DL_PROMPT_TEXT as the %1U parameter.
+//d:See description of STRING_R_ADM_DL_PROMPT_TEXT for details.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_ROAMING_TEXT "Phone is roaming.\n"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Download confirmation query
+//d:%0U = STRING_R_ADM_SW_UPDATE_REQUIRED_TEXT
+//d:%1U = STRING_R_ADM_ROAMING_TEXT, if the phone is roaming. Otherwise empty.
+//d:%2U = indication amount of download: "xxx.yy kB" or "xxx.yy MB" or "xxx.yy GB"
+//d:Suffixes will be localised as well, see below (STRING_R_KB, STRING_R_MB and
+//d:STRING_R_GB).
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_DL_PROMPT_TEXT "%0U\n%1UDownload %2U?"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Download confirmation query, version for custom softkeys.
+//d:User has the option to select "Now" or "Later",
+//d:see STRING_R_SK_NOW_TEXT and STRING_R_SK_LATER_TEXT.
+//d:%0U = STRING_R_ADM_SW_UPDATE_REQUIRED_TEXT
+//d:%1U = STRING_R_ADM_ROAMING_TEXT, if the phone is roaming. Otherwise empty.
+//d:%2U = indication amount of download: "xxx.yy kB" or "xxx.yy MB" or "xxx.yy GB"
+//d:Suffixes will be localised as well, see below (STRING_R_KB, STRING_R_MB and
+//d:STRING_R_GB).
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_DL_PROMPT_NOW_TEXT "%0U\n%1UDownload %2U now?"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:(Left) Softkey label. Used together with STRING_R_ADM_DL_PROMPT_NOW_TEXT
+//l:control_pane_t1
+//r:3.1
+#define STRING_R_SK_NOW_TEXT "Now"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:(Right) Softkey label. Used together with STRING_R_ADM_DL_PROMPT_NOW_TEXT
+//l:control_pane_t2
+//r:3.1
+#define STRING_R_SK_LATER_TEXT "Later"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Download progress bar dialog
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_DOWNLOADING_TEXT "Downloading %0N of %1N"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Installation wait note
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_R_ADM_INSTALLING_TEXT "Installing %0N of %1N"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Queries the user, if the installed application is to be launched
+//d:%U is the name of the application that is retrieved from the sis package.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_ADM_LAUNCH_APP_TEXT "Installation complete. Launch %U?"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Shown if the user has cancelled installation to indicate the possibility of
+//d:continuing this installation later.
+//d:%U = STRING_R_INST_ADM_CAN_BE_RESUMED_OVI_TEXT only if Ovi Store client is running
+//d:Otherwise it will be empty.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_INST_ADM_CAN_BE_RESUMED_TEXT "To continue this installation later, select this icon in your Application menu%U"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:Shown in STRING_R_INST_ADM_CAN_BE_RESUMED_TEXT.
+//d:See description of STRING_R_INST_ADM_CAN_BE_RESUMED_TEXT
+//d:%U = Name of the application to be launched. It is localised, if localisation
+//d:for the name is provided by the application supplier.
+//l:popup_note_window
+//r:3.1
+#define STRING_R_INST_ADM_CAN_BE_RESUMED_OVI_TEXT " or find '%U' on the Ovi Store"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_00.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U?"
+#define string_r_adm_continue_to_download_text "Continue to download %U?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U!\nCancelling installation"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost"
+#define string_r_adm_err_download_failed_text "Download failed!"
+#define string_r_adm_err_installation_failed_text "Installation failed!"
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space for the installation"
+#define string_r_adm_err_installation_unsupported_device_text "Device is not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations: the latest installation was succesful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled!"
+#define string_r_adm_error_text "Error occured! %N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizing installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Launch %U?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Device is roaming. Continue to download %U?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' on the Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your Application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_01.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "Download %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_02.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Annulation de l'installation"
+#define string_r_adm_continue_installation_later_text "Continuer l'installation plus tard ?"
+#define string_r_adm_continue_installation_text "Continuer l'installation de %U[60] ?"
+#define string_r_adm_continue_to_download_text "Télécharger %U[77] ?"
+#define string_r_adm_continuing_inst_text "Reprise de l'installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnnulation de l'installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UTélécharger %2U ?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UTélécharger %2U ?"
+#define string_r_adm_download_wait_text "Téléchargement et installation en cours"
+#define string_r_adm_downloading_text "Téléchargement de %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Connexion au réseau perdue."
+#define string_r_adm_err_download_failed_text "Le téléchargement a échoué."
+#define string_r_adm_err_installation_failed_text "L'installation a échoué."
+#define string_r_adm_err_installation_not_enough_space_text "Espace insuffisant pour l'installation"
+#define string_r_adm_err_installation_unsupported_device_text "Appareil non supporté"
+#define string_r_adm_err_latest_installation_ok_text "Aucune installation en instance. La dernière installation a réussi."
+#define string_r_adm_err_no_pending_installations_text "Aucune installation en instance"
+#define string_r_adm_err_unsupported_version_text "Version de Smart Installer non supportée"
+#define string_r_adm_err_user_cancellation_text "Installation annulée"
+#define string_r_adm_error_text "Une erreur s'est produite:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalisation de l'installation"
+#define string_r_adm_installation_ok_text "Installation terminée"
+#define string_r_adm_installing_text "Installation de %0N de %1N"
+#define string_r_adm_launch_app_text "Installation terminée. Ouvrir %U[60] ?"
+#define string_r_adm_preparing_inst_text "Préparation de l'installation"
+#define string_r_adm_reverting_changes_wait_text "Annulation des modifications"
+#define string_r_adm_roaming_continue_to_download_text "Téléphone en itinérance. Télécharger %U[28] quand-même ?"
+#define string_r_adm_roaming_text "Téléphone en itinérance.\n"
+#define string_r_adm_sw_update_required_text "Téléchargement nécessaire."
+#define string_r_adm_verifying_sw_text "Vérification des composants"
+#define string_r_gb "Go"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ou recherchez \"%U\" dans Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "Pr cont. l'instal. ulté­rieurement, sélect. cette icône dans le menu de votre appli.%U"
+#define string_r_kb "ko"
+#define string_r_mb "Mo"
+#define string_r_sk_later_text "Plus tard"
+#define string_r_sk_now_text "Maintenant"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_03.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Installation wird abgebrochen"
+#define string_r_adm_continue_installation_later_text "Installation später fortsetzen?"
+#define string_r_adm_continue_installation_text "Installation von %U[69] fortsetzen?"
+#define string_r_adm_continue_to_download_text "%U[82] herunterladen?"
+#define string_r_adm_continuing_inst_text "Installation wird fortgesetzt"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInstallation wird abgebrochen."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U%2U jetzt herunterladen?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U%2U herunterladen?"
+#define string_r_adm_download_wait_text "Wird heruntergeladen und installiert"
+#define string_r_adm_downloading_text "%0N von %1N wird heruntergeladen"
+#define string_r_adm_err_conn_lost_text "Netzverbindung unterbrochen."
+#define string_r_adm_err_download_failed_text "Download fehlgeschlagen."
+#define string_r_adm_err_installation_failed_text "Installation fehlgeschlagen."
+#define string_r_adm_err_installation_not_enough_space_text "Zu wenig Speicherplatz zum Installieren"
+#define string_r_adm_err_installation_unsupported_device_text "Gerät nicht unterstützt"
+#define string_r_adm_err_latest_installation_ok_text "Keine ausstehenden Installationen. Die aktuelle Installation war erfolgreich."
+#define string_r_adm_err_no_pending_installations_text "Keine ausstehenden Installationen"
+#define string_r_adm_err_unsupported_version_text "Nicht unterstützte Version von Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Installation abgebrochen"
+#define string_r_adm_error_text "Ein Fehler ist aufgetreten:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Installation wird abgeschlossen"
+#define string_r_adm_installation_ok_text "Installation abgeschlossen"
+#define string_r_adm_installing_text "%0N von %1N wird installiert"
+#define string_r_adm_launch_app_text "Installation abgeschlossen. %U[55] öffnen?"
+#define string_r_adm_preparing_inst_text "Installation wird vorbereitet"
+#define string_r_adm_reverting_changes_wait_text "Änderungen werden rückgängig gemacht"
+#define string_r_adm_roaming_continue_to_download_text "Telefon ist beim Roaming. %U[40] trotzdem herunterladen?"
+#define string_r_adm_roaming_text "Telefon bei Roaming.\n"
+#define string_r_adm_sw_update_required_text "Download erforderlich."
+#define string_r_adm_verifying_sw_text "Komponenten werden überprüft"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " oder '%U' im Ovi Store suchen"
+#define string_r_inst_adm_can_be_resumed_text "Installation später fortsetzen: dieses Symbol im Programm­menü wählen%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Später"
+#define string_r_sk_now_text "Jetzt"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_04.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelando instalación"
+#define string_r_adm_continue_installation_later_text "¿Desea continuar con la instalación en otro momento?"
+#define string_r_adm_continue_installation_text "¿Desea continuar con la instalación de %U[60]?"
+#define string_r_adm_continue_to_download_text "¿Descargar %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuando la instalación"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelando instalación."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U¿Descargar %2U ahora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U¿Descargar %2U?"
+#define string_r_adm_download_wait_text "Descargando e instalando"
+#define string_r_adm_downloading_text "Descargando %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Se ha perdido la conexión de red."
+#define string_r_adm_err_download_failed_text "Error al descargar."
+#define string_r_adm_err_installation_failed_text "Error al instalar."
+#define string_r_adm_err_installation_not_enough_space_text "No hay espacio suficiente para instalar"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositivo no compatible"
+#define string_r_adm_err_latest_installation_ok_text "Ninguna instalación pendiente. La última instalación se ha realizado correctamente."
+#define string_r_adm_err_no_pending_installations_text "Ninguna instalación pendiente"
+#define string_r_adm_err_unsupported_version_text "Versión de Smart Installer no compatible"
+#define string_r_adm_err_user_cancellation_text "Instalación cancelada"
+#define string_r_adm_error_text "Se ha producido un error:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizando instalación"
+#define string_r_adm_installation_ok_text "Instalación completa"
+#define string_r_adm_installing_text "Instalando %0N de %1N"
+#define string_r_adm_launch_app_text "Instalación completada. ¿Abrir %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparando instalación"
+#define string_r_adm_reverting_changes_wait_text "Descartando cambios"
+#define string_r_adm_roaming_continue_to_download_text "Teléfono en itinerancia. ¿Desea descargar %U[26] de todos modos?"
+#define string_r_adm_roaming_text "Teléfono en itinerancia.\n"
+#define string_r_adm_sw_update_required_text "Descarga requerida."
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " o busque '%U' en la Tienda Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Seleccione este icono en el menú de la aplicación%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Después"
+#define string_r_sk_now_text "Ahora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_05.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Annullamento dell'installazione in corso"
+#define string_r_adm_continue_installation_later_text "Continuare l'installazione più tardi?"
+#define string_r_adm_continue_installation_text "Continuare l'installazione di %U[60]?"
+#define string_r_adm_continue_to_download_text "Scaricare %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuazione dell'installazione in corso"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnnullamento dell'installazione in corso."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UScaricare %2U ora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UScaricare %2U?"
+#define string_r_adm_download_wait_text "Scaricamento e installazione in corso"
+#define string_r_adm_downloading_text "Scaricamento %0N di %1N in corso"
+#define string_r_adm_err_conn_lost_text "Connessione di rete persa."
+#define string_r_adm_err_download_failed_text "Download non riuscito."
+#define string_r_adm_err_installation_failed_text "Installazione non riuscita."
+#define string_r_adm_err_installation_not_enough_space_text "Spazio insufficiente per installare"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositivo non supportato"
+#define string_r_adm_err_latest_installation_ok_text "Nessuna installazione in sospeso. L'ultima installazione è stata completata."
+#define string_r_adm_err_no_pending_installations_text "Nessuna installazione in sospeso"
+#define string_r_adm_err_unsupported_version_text "Versione di Smart Installer non supportata"
+#define string_r_adm_err_user_cancellation_text "Installazione annullata"
+#define string_r_adm_error_text "Si è verificato l'errore:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Completamento dell'installazione in corso"
+#define string_r_adm_installation_ok_text "Installazione completata"
+#define string_r_adm_installing_text "Installazione %0N di %1N in corso"
+#define string_r_adm_launch_app_text "Installazione completata. Aprire %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparazione dell'installazione in corso"
+#define string_r_adm_reverting_changes_wait_text "Annullamento delle modifiche in corso"
+#define string_r_adm_roaming_continue_to_download_text "Il telefono è in roaming. Scaricare %U[52] comunque?"
+#define string_r_adm_roaming_text "Telefono in roaming.\n"
+#define string_r_adm_sw_update_required_text "Richiesto scaricamento."
+#define string_r_adm_verifying_sw_text "Verifica dei componenti in corso"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " o trovare \"%U\" in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "Per continuare l'in­stallazione dopo, se­lezionare l'icona nel menu dell'applicazione%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "In seguito"
+#define string_r_sk_now_text "Ora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_06.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Avbryter installationen"
+#define string_r_adm_continue_installation_later_text "Fortsätt installationen senare?"
+#define string_r_adm_continue_installation_text "Fortsätt installation av %U[60]?"
+#define string_r_adm_continue_to_download_text "Ladda ned %U[77]?"
+#define string_r_adm_continuing_inst_text "Installationen fortsätter"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAvbryter installationen."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1ULadda ned %2U nu?"
+#define string_r_adm_dl_prompt_text "%0U\n%1ULadda ned %2U?"
+#define string_r_adm_download_wait_text "Laddar ned och installerar"
+#define string_r_adm_downloading_text "Laddar ned %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Nätverksanslutning förlorad."
+#define string_r_adm_err_download_failed_text "Nedladdning misslyckad."
+#define string_r_adm_err_installation_failed_text "Installation misslyckad."
+#define string_r_adm_err_installation_not_enough_space_text "Det finns inte tillräckligt med utrymme för att installera"
+#define string_r_adm_err_installation_unsupported_device_text "Enhet stöds inte"
+#define string_r_adm_err_latest_installation_ok_text "Inga väntande installationer. Senaste installationen lyckad."
+#define string_r_adm_err_no_pending_installations_text "Inga väntande installationer"
+#define string_r_adm_err_unsupported_version_text "Smart Installer-version stöds inte"
+#define string_r_adm_err_user_cancellation_text "Installationen avbruten"
+#define string_r_adm_error_text "Fel inträffade:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Slutför installationen"
+#define string_r_adm_installation_ok_text "Installationen avslutad"
+#define string_r_adm_installing_text "Installerar %0N of %1N"
+#define string_r_adm_launch_app_text "Installationen klar. Öppna %U[60]?"
+#define string_r_adm_preparing_inst_text "Förbereder installation"
+#define string_r_adm_reverting_changes_wait_text "Återställer ändringar"
+#define string_r_adm_roaming_continue_to_download_text "Telefonen utför roaming. Ladda ned %U[56] ändå?"
+#define string_r_adm_roaming_text "Telefonen utför roaming.\n"
+#define string_r_adm_sw_update_required_text "Nedladdning krävs."
+#define string_r_adm_verifying_sw_text "Verifierar komponenter"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " eller hitta %U i Ovi Butik"
+#define string_r_inst_adm_can_be_resumed_text "För att fortsätta installationen senare, välj denna ikon i din programmeny%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Senare"
+#define string_r_sk_now_text "Nu"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_07.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Annullerer installationen"
+#define string_r_adm_continue_installation_later_text "Fortsæt installationen senere?"
+#define string_r_adm_continue_installation_text "Fortsæt installationen af %U[60]?"
+#define string_r_adm_continue_to_download_text "Hent %U[77]?"
+#define string_r_adm_continuing_inst_text "Fortsætter installationen"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnnullerer installationen."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UHent %2U nu?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UHent %2U?"
+#define string_r_adm_download_wait_text "Henter og installerer"
+#define string_r_adm_downloading_text "Henter %0N af %1N"
+#define string_r_adm_err_conn_lost_text "Netværks­forbindelsen er afbrudt."
+#define string_r_adm_err_download_failed_text "Hentningen mislykkedes."
+#define string_r_adm_err_installation_failed_text "Installationen mislykkedes."
+#define string_r_adm_err_installation_not_enough_space_text "Der er ikke nok plads til installationen"
+#define string_r_adm_err_installation_unsupported_device_text "Enheden understøttes ikke"
+#define string_r_adm_err_latest_installation_ok_text "Der er ingen afventende installationer. Den seneste installation blev fuldført."
+#define string_r_adm_err_no_pending_installations_text "Der er ingen afventende installationer"
+#define string_r_adm_err_unsupported_version_text "Ikke-understøttet Smart Installer-version"
+#define string_r_adm_err_user_cancellation_text "Installationen er annulleret"
+#define string_r_adm_error_text "Der opstod en fejl:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Fuldfører installationen"
+#define string_r_adm_installation_ok_text "Installationen er fuldført"
+#define string_r_adm_installing_text "Installerer %0N af %1N"
+#define string_r_adm_launch_app_text "Installationen er fuldført. Åbn %U[60]?"
+#define string_r_adm_preparing_inst_text "Forbereder installation"
+#define string_r_adm_reverting_changes_wait_text "Gendanner ændringer"
+#define string_r_adm_roaming_continue_to_download_text "Telefonen roamer. Hent %U[53] alligevel?"
+#define string_r_adm_roaming_text "Telefonen roamer.\n"
+#define string_r_adm_sw_update_required_text "Hentning kræves."
+#define string_r_adm_verifying_sw_text "Kontrollerer komponenter"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " eller find %U i Ovi Marked"
+#define string_r_inst_adm_can_be_resumed_text "Du kan fortsætte instal. senere ved at vælge dette ikon i din programmenu%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Senere"
+#define string_r_sk_now_text "Nu"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_08.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Avbryter installering"
+#define string_r_adm_continue_installation_later_text "Fortsette installeringen senere?"
+#define string_r_adm_continue_installation_text "Fortsette installeringen av %U[60]?"
+#define string_r_adm_continue_to_download_text "Laste ned %U[77]?"
+#define string_r_adm_continuing_inst_text "Fortsetter installasjonen"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAvbryter installering."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1ULaste ned %2U nå?"
+#define string_r_adm_dl_prompt_text "%0U\n%1ULaste ned %2U?"
+#define string_r_adm_download_wait_text "Laster ned og installerer"
+#define string_r_adm_downloading_text "Laster ned %0N av %1N"
+#define string_r_adm_err_conn_lost_text "Nettverkstilkobling brutt."
+#define string_r_adm_err_download_failed_text "Kunne ikke laste ned."
+#define string_r_adm_err_installation_failed_text "Kunne ikke installere."
+#define string_r_adm_err_installation_not_enough_space_text "Ikke nok plass til å installere"
+#define string_r_adm_err_installation_unsupported_device_text "Enheten støttes ikke"
+#define string_r_adm_err_latest_installation_ok_text "Ingen ventende installeringer. Forrige installering fullført."
+#define string_r_adm_err_no_pending_installations_text "Ingen ventende installeringer"
+#define string_r_adm_err_unsupported_version_text "Denne Smart Installer-versjonen støttes ikke"
+#define string_r_adm_err_user_cancellation_text "Installering avbrutt"
+#define string_r_adm_error_text "En feil oppstod:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Fullfører installering"
+#define string_r_adm_installation_ok_text "Installering fullført"
+#define string_r_adm_installing_text "Installerer %0N av %1N"
+#define string_r_adm_launch_app_text "Installasjonen er fullført. Åpne %U[60]?"
+#define string_r_adm_preparing_inst_text "Forbereder installering"
+#define string_r_adm_reverting_changes_wait_text "Tilbakestiller endringer"
+#define string_r_adm_roaming_continue_to_download_text "Telefonen veksler nett. Laste ned %U[55] likevel?"
+#define string_r_adm_roaming_text "Telefonen veksler nett.\n"
+#define string_r_adm_sw_update_required_text "Nedlasting kreves."
+#define string_r_adm_verifying_sw_text "Bekrefter komponenter"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " eller finner %U i Ovi Butikk"
+#define string_r_inst_adm_can_be_resumed_text "Hvis du vil fortsette install. senere, velger du dette ikonet i progr.menyen%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Senere"
+#define string_r_sk_now_text "NÃ¥"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_09.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Peruutetaan asennusta"
+#define string_r_adm_continue_installation_later_text "Jatketaanko asennusta myöhemmin?"
+#define string_r_adm_continue_installation_text "Jatketaanko sovelluksen %U[52] asennusta?"
+#define string_r_adm_continue_to_download_text "Ladataanko %U[77]?"
+#define string_r_adm_continuing_inst_text "Jatketaan asennusta"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nPeruutetaan asennusta."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1ULadataanko %2U nyt?"
+#define string_r_adm_dl_prompt_text "%0U\n%1ULadataanko %2U?"
+#define string_r_adm_download_wait_text "Ladataan ja asennetaan"
+#define string_r_adm_downloading_text "Ladataan %0N/%1N"
+#define string_r_adm_err_conn_lost_text "Yhteys verkkoon katkennut."
+#define string_r_adm_err_download_failed_text "Lataus epäonnistui."
+#define string_r_adm_err_installation_failed_text "Asennus epäonnistui."
+#define string_r_adm_err_installation_not_enough_space_text "Tila ei riitä asentamiseen"
+#define string_r_adm_err_installation_unsupported_device_text "Laite ei ole tuettu"
+#define string_r_adm_err_latest_installation_ok_text "Ei odottavia asennuksia. Viimeisin asennus onnistui."
+#define string_r_adm_err_no_pending_installations_text "Ei odottavia asennuksia"
+#define string_r_adm_err_unsupported_version_text "Laite ei tue Smart Installer ‑versiota"
+#define string_r_adm_err_user_cancellation_text "Asennus keskeytetty"
+#define string_r_adm_error_text "Tapahtui virhe:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Viimeistellään asennusta"
+#define string_r_adm_installation_ok_text "Asennus valmis"
+#define string_r_adm_installing_text "Asennetaan %0N/%1N"
+#define string_r_adm_launch_app_text "Asennus valmis. Avataanko %U[60]?"
+#define string_r_adm_preparing_inst_text "Valmistellaan asennusta"
+#define string_r_adm_reverting_changes_wait_text "Palautetaan muutoksia"
+#define string_r_adm_roaming_continue_to_download_text "Puhelin on vierasverkossa. Ladataanko %U[36] silti?"
+#define string_r_adm_roaming_text "Puhelin on vierasverkossa.\n"
+#define string_r_adm_sw_update_required_text "Tiedostoja ladattava."
+#define string_r_adm_verifying_sw_text "Tarkistetaan osia"
+#define string_r_gb "Gt"
+#define string_r_inst_adm_can_be_resumed_ovi_text " tai etsi %U Ovi Kaupasta"
+#define string_r_inst_adm_can_be_resumed_text "Jos haluat jatkaa asennusta myöh., valitse tämä kuvake sov. valikosta%U"
+#define string_r_kb "kt"
+#define string_r_mb "Mt"
+#define string_r_sk_later_text "Myöhemmin"
+#define string_r_sk_now_text "Nyt"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_10.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Canceling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "Download %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCanceling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation canceled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizing installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_129.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[31]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[27] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_13.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "A cancelar instalação"
+#define string_r_adm_continue_installation_later_text "Continuar instalação mais tarde?"
+#define string_r_adm_continue_installation_text "Continuar instalação de %U[60]?"
+#define string_r_adm_continue_to_download_text "Efectuar download de %U[60]?"
+#define string_r_adm_continuing_inst_text "A continuar a instalação"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nA cancelar instalação."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UTransferir %2U agora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UTransferir %2U?"
+#define string_r_adm_download_wait_text "A efectuar download e instalação"
+#define string_r_adm_downloading_text "A transferir %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Ligação de rede perdida."
+#define string_r_adm_err_download_failed_text "O download falhou."
+#define string_r_adm_err_installation_failed_text "A instalação falhou."
+#define string_r_adm_err_installation_not_enough_space_text "Sem espaço suficiente para a instalação"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositivo não suportado"
+#define string_r_adm_err_latest_installation_ok_text "Sem instalações pendentes. A última instalação foi bem sucedida."
+#define string_r_adm_err_no_pending_installations_text "Sem instalações pendentes"
+#define string_r_adm_err_unsupported_version_text "Versão Smart Installer não suportada"
+#define string_r_adm_err_user_cancellation_text "Instalação cancelada"
+#define string_r_adm_error_text "Ocorreu um erro:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "A finalizar a instalação"
+#define string_r_adm_installation_ok_text "Instalação concluída"
+#define string_r_adm_installing_text "A instalar %0N de %1N"
+#define string_r_adm_launch_app_text "Instalação completa. Abrir %U[60]?"
+#define string_r_adm_preparing_inst_text "A preparar instalação"
+#define string_r_adm_reverting_changes_wait_text "A reverter alterações"
+#define string_r_adm_roaming_continue_to_download_text "Telefone em roaming. Transferir, mesmo assim, %U[39]?"
+#define string_r_adm_roaming_text "Telefone em roaming.\n"
+#define string_r_adm_sw_update_required_text "Transferência necessária."
+#define string_r_adm_verifying_sw_text "A verificar componentes"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ou encontre '%U' na Loja Ovi"
+#define string_r_inst_adm_can_be_resumed_text "P/ continuar instal. poster., selec. ícone menu apl.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Mais tarde"
+#define string_r_sk_now_text "Agora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_14.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Yükleme iptal ediliyor"
+#define string_r_adm_continue_installation_later_text "Yüklemeye daha sonra devam et?"
+#define string_r_adm_continue_installation_text "%U[77] yüklemeye devam et?"
+#define string_r_adm_continue_to_download_text "%U[90] indir?"
+#define string_r_adm_continuing_inst_text "Yükleme devam ediyor"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nYükleme iptal ediliyor."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U %2U ÅŸimdi indir?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U %2U indir?"
+#define string_r_adm_download_wait_text "İndiriliyor ve yükleniyor"
+#define string_r_adm_downloading_text "%0N/%1N indiriliyor"
+#define string_r_adm_err_conn_lost_text "Şebeke bağlantısı kayboldu."
+#define string_r_adm_err_download_failed_text "İndirme başarısız."
+#define string_r_adm_err_installation_failed_text "Yükleme başarısız."
+#define string_r_adm_err_installation_not_enough_space_text "Yükleme için yeterli alan yok"
+#define string_r_adm_err_installation_unsupported_device_text "Cihaz desteklenmiyor"
+#define string_r_adm_err_latest_installation_ok_text "Bekleyen yükleme yok. En son yükleme başarıyla tamamlandı."
+#define string_r_adm_err_no_pending_installations_text "Bekleyen yükleme yok"
+#define string_r_adm_err_unsupported_version_text "Desteklenmeyen Smart Installer sürümü"
+#define string_r_adm_err_user_cancellation_text "Yükleme iptal edildi"
+#define string_r_adm_error_text "Hata oluÅŸtu:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Yükleme tamamlanıyor"
+#define string_r_adm_installation_ok_text "Yükleme tamamlandı"
+#define string_r_adm_installing_text "%0N/%1N yükleniyor"
+#define string_r_adm_launch_app_text "Yükleme tamamlandı. %U[47] uygulamasını aç?"
+#define string_r_adm_preparing_inst_text "Yüklemeye hazırlanılıyor"
+#define string_r_adm_reverting_changes_wait_text "Değişiklikler geri alınıyor"
+#define string_r_adm_roaming_continue_to_download_text "Telefon dolaşımda. %U[61] gene de indirilsin mi?"
+#define string_r_adm_roaming_text "Telefon dolaşımda.\n"
+#define string_r_adm_sw_update_required_text "Ä°ndirme gerekiyor."
+#define string_r_adm_verifying_sw_text "Bileşenler doğrulanıyor"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ya da Ovi Mağaza'da '%U' öğesini bulun"
+#define string_r_inst_adm_can_be_resumed_text "Bu yükl. daha sonra devam etmk için, uygulama menünüzde bu simgeyi seçin%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Daha sonra"
+#define string_r_sk_now_text "Åžimdi"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_15.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Hætti við uppsetningu"
+#define string_r_adm_continue_installation_later_text "Halda uppsetningu áfram síðar?"
+#define string_r_adm_continue_installation_text "Halda áfram uppsetningu á %U[60]?"
+#define string_r_adm_continue_to_download_text "Hlaða niður %U[77]?"
+#define string_r_adm_continuing_inst_text "Held áfram uppsetningu"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nHættir við uppsetningu."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UHlaða niður %2U núna?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UHlaða niður %2U?"
+#define string_r_adm_download_wait_text "Hleð niður og set upp"
+#define string_r_adm_downloading_text "Hleð niður %0N af %1N"
+#define string_r_adm_err_conn_lost_text "Nettenging slitnaði."
+#define string_r_adm_err_download_failed_text "Niðurhal mistókst."
+#define string_r_adm_err_installation_failed_text "Uppsetning mistókst."
+#define string_r_adm_err_installation_not_enough_space_text "Ekki er nægt pláss til að setja upp"
+#define string_r_adm_err_installation_unsupported_device_text "Tækið er ekki stutt"
+#define string_r_adm_err_latest_installation_ok_text "Engin uppsetning í bið. Síðasta uppsetning heppnaðist."
+#define string_r_adm_err_no_pending_installations_text "Engin uppsetning í bið"
+#define string_r_adm_err_unsupported_version_text "Óstudd útgáfa af Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Hætt við uppsetningu"
+#define string_r_adm_error_text "Villa kom upp:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Lýk uppsetningu"
+#define string_r_adm_installation_ok_text "Uppsetningu er lokið"
+#define string_r_adm_installing_text "Set upp %0N af %1N"
+#define string_r_adm_launch_app_text "Uppsetningu lokið. Opna %U[60]?"
+#define string_r_adm_preparing_inst_text "Ræsi uppsetningu"
+#define string_r_adm_reverting_changes_wait_text "Afturkalla breytingar"
+#define string_r_adm_roaming_continue_to_download_text "Síminn er í reiki. Hlaða samt niður %U[60]?"
+#define string_r_adm_roaming_text "Síminn er í reiki.\n"
+#define string_r_adm_sw_update_required_text "Niðurhals krafist."
+#define string_r_adm_verifying_sw_text "Sannvotta íhluti"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " eða finna '%U' í Ovi-verslun"
+#define string_r_inst_adm_can_be_resumed_text "Til að halda áfram síðar velurðu táknið í valmynd forritsins%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Síðar"
+#define string_r_sk_now_text "Núna"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_157.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[31]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[27] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_158.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[31]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[27] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_159.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[31]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[27] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_16.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Отмена уÑтановки"
+#define string_r_adm_continue_installation_later_text "Продолжить уÑтановку позже?"
+#define string_r_adm_continue_installation_text "Продолжить уÑтановку Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ \"%U[38]\"?"
+#define string_r_adm_continue_to_download_text "Загрузить %U[77]?"
+#define string_r_adm_continuing_inst_text "Продолжение уÑтановки"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nОтмена уÑтановки."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UЗагрузить %2U ÑейчаÑ?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UЗагрузить %2U?"
+#define string_r_adm_download_wait_text "ВыполнÑетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° и уÑтановка"
+#define string_r_adm_downloading_text "Загрузка %0N из %1N"
+#define string_r_adm_err_conn_lost_text "Подключение к Ñети прервано."
+#define string_r_adm_err_download_failed_text "Ошибка загрузки."
+#define string_r_adm_err_installation_failed_text "Ошибка уÑтановки."
+#define string_r_adm_err_installation_not_enough_space_text "ÐедоÑтаточно меÑта Ð´Ð»Ñ ÑƒÑтановки"
+#define string_r_adm_err_installation_unsupported_device_text "УÑтройÑтво не поддерживаетÑÑ"
+#define string_r_adm_err_latest_installation_ok_text "Ðет незавершенных уÑтановок. ПоÑледнÑÑ ÑƒÑтановка выполнена уÑпешно."
+#define string_r_adm_err_no_pending_installations_text "Ðет незавершенных уÑтановок"
+#define string_r_adm_err_unsupported_version_text "ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ ÑƒÑтановщика"
+#define string_r_adm_err_user_cancellation_text "УÑтановка отменена"
+#define string_r_adm_error_text "Произошла ошибка:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Завершение уÑтановки"
+#define string_r_adm_installation_ok_text "УÑтановка завершена"
+#define string_r_adm_installing_text "УÑтановка %0N из %1N"
+#define string_r_adm_launch_app_text "УÑтановка завершена. Открыть приложение \"%U[38]\"?"
+#define string_r_adm_preparing_inst_text "Подготовка к уÑтановке"
+#define string_r_adm_reverting_changes_wait_text "Отмена Ñделанных изменений"
+#define string_r_adm_roaming_continue_to_download_text "Телефон в роуминге. Ð’Ñе равно загрузить %U[39]?"
+#define string_r_adm_roaming_text "Телефон в роуминге.\n"
+#define string_r_adm_sw_update_required_text "ТребуетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°."
+#define string_r_adm_verifying_sw_text "Проверка компонентов"
+#define string_r_gb "ГБ"
+#define string_r_inst_adm_can_be_resumed_ovi_text " или найдите \"%U\" в Магазине Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Чтобы продолжить уÑтановку позже, выбе­рите Ñтот значок в меню приложений%U"
+#define string_r_kb "КБ"
+#define string_r_mb "МБ"
+#define string_r_sk_later_text "Позже"
+#define string_r_sk_now_text "СейчаÑ"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_160.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[31]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[27] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_161.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "Download %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_17.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Telepítés megszakítása"
+#define string_r_adm_continue_installation_later_text "Később folytatja a telepítést?"
+#define string_r_adm_continue_installation_text "Folytatja %U[68] telepítését?"
+#define string_r_adm_continue_to_download_text "Letölti ezt: %U[77]?"
+#define string_r_adm_continuing_inst_text "Telepítés folytatása"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nA telepítés megszakítása folyamatban."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1ULetölt %2U-t most?"
+#define string_r_adm_dl_prompt_text "%0U\n%1ULetölt %2U-t?"
+#define string_r_adm_download_wait_text "Letöltés és telepítés folyamatban"
+#define string_r_adm_downloading_text "Letöltés: %0N / %1N"
+#define string_r_adm_err_conn_lost_text "Megszakadt a hálózati kapcsolat."
+#define string_r_adm_err_download_failed_text "A letöltés sikertelen."
+#define string_r_adm_err_installation_failed_text "A telepítés sikertelen."
+#define string_r_adm_err_installation_not_enough_space_text "Nincs elég hely a telepítéshez"
+#define string_r_adm_err_installation_unsupported_device_text "Az eszköz nem támogatott"
+#define string_r_adm_err_latest_installation_ok_text "Nincs függőben lévő telepítés. A legutóbbi telepítés sikeres volt."
+#define string_r_adm_err_no_pending_installations_text "Nincs függőben lévő telepítés"
+#define string_r_adm_err_unsupported_version_text "Nem támogatott Smart Installer-verzió"
+#define string_r_adm_err_user_cancellation_text "Telepítés megszakítva"
+#define string_r_adm_error_text "Hiba történt:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Telepítés befejezése"
+#define string_r_adm_installation_ok_text "A telepítés befejeződött"
+#define string_r_adm_installing_text "Telepítés %0N / %1N"
+#define string_r_adm_launch_app_text "A telepítés befejeződött. Megnyitja ezt: %U[39]?"
+#define string_r_adm_preparing_inst_text "Telepítés előkészítése folyamatban"
+#define string_r_adm_reverting_changes_wait_text "Módosítások visszaállítása"
+#define string_r_adm_roaming_continue_to_download_text "A telefon barangolás módban van. Mégis letölti ezt: %U[39]?"
+#define string_r_adm_roaming_text "A telefon barangol.\n"
+#define string_r_adm_sw_update_required_text "Letöltés szükséges."
+#define string_r_adm_verifying_sw_text "Összetevők ellenőrzése"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " vagy keresse meg a(z) '%U' alkalmazást az Ovi áruházban"
+#define string_r_inst_adm_can_be_resumed_text "A telepítés későbbi folyt.-hoz vál. ki ezt a ikont az alk. menüből,%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Később"
+#define string_r_sk_now_text "Most"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_18.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Installatie wordt geannuleerd"
+#define string_r_adm_continue_installation_later_text "Later doorgaan met installeren?"
+#define string_r_adm_continue_installation_text "Doorgaan met installeren van %U[60]?"
+#define string_r_adm_continue_to_download_text "%U[84] downloaden?"
+#define string_r_adm_continuing_inst_text "Installatie wordt voortgezet"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInstallatie wordt geannuleerd."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U %2U nu downloaden?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U %2U Downloaden?"
+#define string_r_adm_download_wait_text "Downloaden en installeren"
+#define string_r_adm_downloading_text "%0N van %1N gedownload"
+#define string_r_adm_err_conn_lost_text "Netwerkverbinding verbroken."
+#define string_r_adm_err_download_failed_text "Downloaden mislukt."
+#define string_r_adm_err_installation_failed_text "Installatie mislukt."
+#define string_r_adm_err_installation_not_enough_space_text "Onvoldoende ruimte voor installatie"
+#define string_r_adm_err_installation_unsupported_device_text "Apparaat wordt niet ondersteund"
+#define string_r_adm_err_latest_installation_ok_text "Geen installaties in de wacht. De laatste installatie is geslaagd."
+#define string_r_adm_err_no_pending_installations_text "Geen installaties in de wacht"
+#define string_r_adm_err_unsupported_version_text "Niet-ondersteunde versie van Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Installatie geannuleerd"
+#define string_r_adm_error_text "Er is een fout opgetreden:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Installatie voltooien"
+#define string_r_adm_installation_ok_text "Installatie voltooid"
+#define string_r_adm_installing_text "%0N van %1N geïnstalleerd"
+#define string_r_adm_launch_app_text "Installatie voltooid. %U[71] openen?"
+#define string_r_adm_preparing_inst_text "Installatie voorbereiden"
+#define string_r_adm_reverting_changes_wait_text "Wijzigingen worden teruggedraaid"
+#define string_r_adm_roaming_continue_to_download_text "Telefoon aan het roamen. %U[46] toch downloaden?"
+#define string_r_adm_roaming_text "Telefoon aan het roamen.\n"
+#define string_r_adm_sw_update_required_text "Downloaden vereist."
+#define string_r_adm_verifying_sw_text "Componenten verifiëren"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " of '%U' zoeken in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "Select.dit pictogram in het menu om deze installatie later voort te zetten%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Nu"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_186.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelling installation"
+#define string_r_adm_continue_installation_later_text "Continue installation later?"
+#define string_r_adm_continue_installation_text "Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "Download %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Downloading and installing"
+#define string_r_adm_downloading_text "Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "Network connection lost."
+#define string_r_adm_err_download_failed_text "Download failed."
+#define string_r_adm_err_installation_failed_text "Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "No pending installations"
+#define string_r_adm_err_unsupported_version_text "Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "Installation cancelled"
+#define string_r_adm_error_text "Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalising installation"
+#define string_r_adm_installation_ok_text "Installation complete"
+#define string_r_adm_installing_text "Installing %0N of %1N"
+#define string_r_adm_launch_app_text "Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "Download required."
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Later"
+#define string_r_sk_now_text "Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_25.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Rušení instalace"
+#define string_r_adm_continue_installation_later_text "Chcete v instalaci pokraÄovat pozdÄ›ji?"
+#define string_r_adm_continue_installation_text "Chcete pokraÄovat v instalaci aplikace %U[60]?"
+#define string_r_adm_continue_to_download_text "Chcete stáhnout soubor o velikosti %U[60]?"
+#define string_r_adm_continuing_inst_text "PokraÄování instalace"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nRušení instalace."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UChcete nyní stahovat %2U?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UChcete stahovat %2U?"
+#define string_r_adm_download_wait_text "Stahování a instalace"
+#define string_r_adm_downloading_text "Stahování: %0N z %1N"
+#define string_r_adm_err_conn_lost_text "Spojení se sítí bylo ztraceno."
+#define string_r_adm_err_download_failed_text "Stahování se nezdařilo."
+#define string_r_adm_err_installation_failed_text "Instalace se nezdařila."
+#define string_r_adm_err_installation_not_enough_space_text "Nedostatek místa pro instalaci"
+#define string_r_adm_err_installation_unsupported_device_text "Soubor není podporován"
+#define string_r_adm_err_latest_installation_ok_text "NeÄekají žádné instalace. Poslední instalace byla úspěšná."
+#define string_r_adm_err_no_pending_installations_text "NeÄekají žádné instalace"
+#define string_r_adm_err_unsupported_version_text "Nepodporovaná verze inteligentního instalaÄního programu"
+#define string_r_adm_err_user_cancellation_text "Instalace byla zrušena"
+#define string_r_adm_error_text "Došlo k chybě:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "DokonÄování instalace"
+#define string_r_adm_installation_ok_text "Instalace byla dokonÄena"
+#define string_r_adm_installing_text "Instalace: %0N z %1N"
+#define string_r_adm_launch_app_text "Instalace byla dokonÄena. Chcete aplikaci %U[33] spustit?"
+#define string_r_adm_preparing_inst_text "Příprava instalace"
+#define string_r_adm_reverting_changes_wait_text "Vracení změn"
+#define string_r_adm_roaming_continue_to_download_text "Telefon se nachází v roamingu. Chcete přesto stáhnout soubor o velikosti %U[18]?"
+#define string_r_adm_roaming_text "Telefon se nachází v roamingu.\n"
+#define string_r_adm_sw_update_required_text "Je nutné stahování."
+#define string_r_adm_verifying_sw_text "Ověřování souÄástí"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " nebo aplikaci %U najděte ve službě Ovi Obchod"
+#define string_r_inst_adm_can_be_resumed_text "Chcete-li v instalaci pokraÄovat pozdÄ›ji, zvolte v menu aplikace tuto ikonu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Později"
+#define string_r_sk_now_text "Nyní"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_26.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Ruší sa inštalácia"
+#define string_r_adm_continue_installation_later_text "PokraÄovaÅ¥ v inÅ¡talácii neskôr?"
+#define string_r_adm_continue_installation_text "PokraÄovaÅ¥ v inÅ¡talácii aplikácie %U[60]?"
+#define string_r_adm_continue_to_download_text "NaÄítaÅ¥ %U[77]?"
+#define string_r_adm_continuing_inst_text "PokraÄuje sa v inÅ¡talácii"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInštalácia sa ruší."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UNaÄítaÅ¥ %2U teraz?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UNaÄítaÅ¥ %2U?"
+#define string_r_adm_download_wait_text "NaÄítava a inÅ¡taluje sa"
+#define string_r_adm_downloading_text "NaÄítava sa %0N z %1N"
+#define string_r_adm_err_conn_lost_text "Pripojenie k sieti sa prerušilo."
+#define string_r_adm_err_download_failed_text "NaÄítanie zlyhalo."
+#define string_r_adm_err_installation_failed_text "Inštalácia zlyhala."
+#define string_r_adm_err_installation_not_enough_space_text "Nedostatok miesta na inštaláciu"
+#define string_r_adm_err_installation_unsupported_device_text "Zariadenie nemá podporu"
+#define string_r_adm_err_latest_installation_ok_text "Žiadne nedokonÄené inÅ¡talácie. Posledná inÅ¡talácia bola úspeÅ¡ná."
+#define string_r_adm_err_no_pending_installations_text "Žiadne nedokonÄené inÅ¡talácie"
+#define string_r_adm_err_unsupported_version_text "Nepodporovaná verzia aplikácie Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Inštalácia bola zrušená"
+#define string_r_adm_error_text "Vyskytla sa chyba:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "DokonÄuje sa inÅ¡talácia"
+#define string_r_adm_installation_ok_text "InÅ¡talácia ukonÄená"
+#define string_r_adm_installing_text "Inštaluje sa %0N z %1N"
+#define string_r_adm_launch_app_text "InÅ¡talácia je ukonÄená. OtvoriÅ¥ aplikáciu %U[39]?"
+#define string_r_adm_preparing_inst_text "Pripravuje sa inštalácia"
+#define string_r_adm_reverting_changes_wait_text "Prebieha vrátenie zmien"
+#define string_r_adm_roaming_continue_to_download_text "Telefón je v režime roamingu. Chcete aj tak naÄítaÅ¥ súbor %U[39]?"
+#define string_r_adm_roaming_text "Telefón je v režime roamingu.\n"
+#define string_r_adm_sw_update_required_text "Vyžaduje sa naÄítanie."
+#define string_r_adm_verifying_sw_text "Overujú sa súÄasti"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " alebo vyhľadajte aplikáciu '%U' v Obchode Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Ak chcete pokraÄovaÅ¥ v inÅ¡tal. neskôr, vyberte túto ikonu v menu apl.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Neskôr"
+#define string_r_sk_now_text "Teraz"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_27.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Anulowanie instalacji"
+#define string_r_adm_continue_installation_later_text "Kontynuować instalację później?"
+#define string_r_adm_continue_installation_text "Kontynuować instalację aplikacji %U[60]?"
+#define string_r_adm_continue_to_download_text "Pobrać %U[77]?"
+#define string_r_adm_continuing_inst_text "Kontynuacja instalacji"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnulowanie instalacji."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UPobrać %2U teraz?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UPobrać %2U?"
+#define string_r_adm_download_wait_text "Pobieranie i instalowanie"
+#define string_r_adm_downloading_text "Pobieranie %0N z %1N"
+#define string_r_adm_err_conn_lost_text "Utracono połączenie z siecią."
+#define string_r_adm_err_download_failed_text "Pobieranie nie powiodło się."
+#define string_r_adm_err_installation_failed_text "Instalacja nie powiodła się."
+#define string_r_adm_err_installation_not_enough_space_text "Za mało miejsca, aby zainstalować"
+#define string_r_adm_err_installation_unsupported_device_text "Urządzenie nie jest obsługiwane"
+#define string_r_adm_err_latest_installation_ok_text "Brak oczekujących instalacji. Ostatnia instalacja powiodła się."
+#define string_r_adm_err_no_pending_installations_text "Brak oczekujÄ…cych instalacji"
+#define string_r_adm_err_unsupported_version_text "Nieobsługiwana wersja aplikacji Smart Installer"
+#define string_r_adm_err_user_cancellation_text "InstalacjÄ™ anulowano"
+#define string_r_adm_error_text "Wystąpił błąd:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Kończenie instalacji"
+#define string_r_adm_installation_ok_text "Instalacja zakończona"
+#define string_r_adm_installing_text "Instalowanie %0N z %1N"
+#define string_r_adm_launch_app_text "Instalacja zakończona. Otworzyć %U[39]?"
+#define string_r_adm_preparing_inst_text "Przygotowywanie do instalacji"
+#define string_r_adm_reverting_changes_wait_text "Anulowanie zmian"
+#define string_r_adm_roaming_continue_to_download_text "Telefon korzysta z innej sieci. Pobrać %U[60]?"
+#define string_r_adm_roaming_text "Tel. korz. z innej sieci.\n"
+#define string_r_adm_sw_update_required_text "Wymagane pobranie."
+#define string_r_adm_verifying_sw_text "Weryfikacja komponentów"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " lub znajdź aplikację „%U†w Sklepie Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Aby kontynuować instalację później, wybierz tę ikonę w menu swojej aplikacji%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Później"
+#define string_r_sk_now_text "Teraz"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_28.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Preklicevanje namestitve"
+#define string_r_adm_continue_installation_later_text "Želite nadaljevati z namestitvijo pozneje?"
+#define string_r_adm_continue_installation_text "Želite nadaljevati z namestitvijo aplikacije %U[39]?"
+#define string_r_adm_continue_to_download_text "Želite prenesti %U[77]?"
+#define string_r_adm_continuing_inst_text "Nadaljevanje namestitve"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nPreklicevanje namestitve."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UŽelite prenesti %2U zdaj?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UŽelite prenesti %2U?"
+#define string_r_adm_download_wait_text "PrenaÅ¡anje in nameÅ¡Äanje"
+#define string_r_adm_downloading_text "Prenašanje %0N od %1N"
+#define string_r_adm_err_conn_lost_text "Povezava z omrežjem je bila prekinjena."
+#define string_r_adm_err_download_failed_text "Prenos ni uspel."
+#define string_r_adm_err_installation_failed_text "Namestitev ni uspela."
+#define string_r_adm_err_installation_not_enough_space_text "Ni dovolj prostora za namestitev"
+#define string_r_adm_err_installation_unsupported_device_text "Naprava ni podprta"
+#define string_r_adm_err_latest_installation_ok_text "Ni ÄakajoÄih namestitev. Zadnja namestitev je bila uspeÅ¡na."
+#define string_r_adm_err_no_pending_installations_text "Ni ÄakajoÄih namestitev"
+#define string_r_adm_err_unsupported_version_text "Nepodprta razliÄica aplikacije Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Namestitev je preklicana"
+#define string_r_adm_error_text "Prišlo je do napake:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "ZakljuÄevanje namestitve"
+#define string_r_adm_installation_ok_text "Namestitev je konÄana"
+#define string_r_adm_installing_text "NameÅ¡Äanje %0N od %1N"
+#define string_r_adm_launch_app_text "Namestitev konÄana. Želite odpreti %U[60]?"
+#define string_r_adm_preparing_inst_text "Pripravljanje namestitve"
+#define string_r_adm_reverting_changes_wait_text "Preklicevanje sprememb"
+#define string_r_adm_roaming_continue_to_download_text "Telefon gostuje. Želite vseeno prenesti %U[39]?"
+#define string_r_adm_roaming_text "Telefon gostuje.\n"
+#define string_r_adm_sw_update_required_text "Potreben je prenos."
+#define string_r_adm_verifying_sw_text "Preverjanje komponent"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ali pa poiÅ¡Äite '%U' v Trgovini Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Če želite to name­stitev nadaljevati pozneje, izberite to ikono v meniju aplik.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Pozneje"
+#define string_r_sk_now_text "Zdaj"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_29.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "å–消安è£ä¸­"
+#define string_r_adm_continue_installation_later_text "是å¦æ–¼ç¨å¾Œç¹¼çºŒå®‰è£ï¼Ÿ"
+#define string_r_adm_continue_installation_text "是å¦ç¹¼çºŒå®‰è£%U[40]?"
+#define string_r_adm_continue_to_download_text "是å¦ä¸‹è¼‰%U[42]?"
+#define string_r_adm_continuing_inst_text "繼續安è£"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nå–消安è£ä¸­ã€‚"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U是å¦è¦ç¾åœ¨ä¸‹è¼‰%2U?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U是å¦ä¸‹è¼‰%2U?"
+#define string_r_adm_download_wait_text "正在下載並安è£"
+#define string_r_adm_downloading_text "正在下載%1N之%0N"
+#define string_r_adm_err_conn_lost_text "網路連線中斷。"
+#define string_r_adm_err_download_failed_text "下載失敗。"
+#define string_r_adm_err_installation_failed_text "安è£å¤±æ•—。"
+#define string_r_adm_err_installation_not_enough_space_text "空間ä¸è¶³ï¼Œç„¡æ³•å®‰è£"
+#define string_r_adm_err_installation_unsupported_device_text "è£ç½®ä¸æ”¯æ´"
+#define string_r_adm_err_latest_installation_ok_text "沒有擱置的安è£ã€‚最近一次安è£å·²æˆåŠŸã€‚"
+#define string_r_adm_err_no_pending_installations_text "沒有擱置的安è£"
+#define string_r_adm_err_unsupported_version_text "ä¸æ”¯æ´çš„智慧安è£ç‰ˆæœ¬"
+#define string_r_adm_err_user_cancellation_text "安è£å·²å–消"
+#define string_r_adm_error_text "發生錯誤:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "正在完æˆå®‰è£"
+#define string_r_adm_installation_ok_text "安è£å®Œæˆ"
+#define string_r_adm_installing_text "正在安è£%1N之%0N"
+#define string_r_adm_launch_app_text "安è£å®Œæˆã€‚是å¦é–‹å•Ÿ%U[37]?"
+#define string_r_adm_preparing_inst_text "準備安è£ä¸­"
+#define string_r_adm_reverting_changes_wait_text "回復變更"
+#define string_r_adm_roaming_continue_to_download_text "手機正在漫éŠã€‚是å¦ä»è¦ä¸‹è¼‰%U[33]?"
+#define string_r_adm_roaming_text "手機正在漫éŠã€‚\n"
+#define string_r_adm_sw_update_required_text "必須下載。"
+#define string_r_adm_verifying_sw_text "正在驗證元件"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " 或在Ovi商店中尋找\n\"%U\""
+#define string_r_inst_adm_can_be_resumed_text "è‹¥è¦ç¨å¾Œç¹¼çºŒæ­¤å®‰è£ï¼Œè«‹åœ¨æ‚¨çš„應用程å¼åŠŸèƒ½è¡¨ä¸­é¸å–%U圖示"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "ç¨å¾Œ"
+#define string_r_sk_now_text "ç¾åœ¨"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_30.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "å–消安è£ä¸­"
+#define string_r_adm_continue_installation_later_text "是å¦æ–¼ç¨å¾Œç¹¼çºŒå®‰è£ï¼Ÿ"
+#define string_r_adm_continue_installation_text "是å¦ç¹¼çºŒå®‰è£%U[40]?"
+#define string_r_adm_continue_to_download_text "是å¦ä¸‹è¼‰%U[42]?"
+#define string_r_adm_continuing_inst_text "繼續安è£"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nå–消安è£ä¸­ã€‚"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U是å¦è¦ç¾åœ¨ä¸‹è¼‰%2U?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U是å¦ä¸‹è¼‰%2U?"
+#define string_r_adm_download_wait_text "正在下載並安è£"
+#define string_r_adm_downloading_text "正在下載%1N之%0N"
+#define string_r_adm_err_conn_lost_text "網絡連接中斷。"
+#define string_r_adm_err_download_failed_text "下載失敗。"
+#define string_r_adm_err_installation_failed_text "安è£å¤±æ•—。"
+#define string_r_adm_err_installation_not_enough_space_text "空間ä¸è¶³ï¼Œç„¡æ³•å®‰è£"
+#define string_r_adm_err_installation_unsupported_device_text "è£ç½®ä¸æ”¯æ´"
+#define string_r_adm_err_latest_installation_ok_text "沒有擱置的安è£ã€‚最近一次安è£å·²æˆåŠŸã€‚"
+#define string_r_adm_err_no_pending_installations_text "沒有擱置的安è£"
+#define string_r_adm_err_unsupported_version_text "ä¸æ”¯æ´çš„智慧安è£ç‰ˆæœ¬"
+#define string_r_adm_err_user_cancellation_text "安è£å·²å–消"
+#define string_r_adm_error_text "發生錯誤:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "正在完æˆå®‰è£"
+#define string_r_adm_installation_ok_text "安è£å®Œæˆ"
+#define string_r_adm_installing_text "正在安è£%1N之%0N"
+#define string_r_adm_launch_app_text "安è£å®Œæˆã€‚是å¦é–‹å•Ÿ%U[37]?"
+#define string_r_adm_preparing_inst_text "準備安è£ä¸­"
+#define string_r_adm_reverting_changes_wait_text "回復更æ›"
+#define string_r_adm_roaming_continue_to_download_text "手機正在漫éŠã€‚是å¦ä»è¦ä¸‹è¼‰%U[33]?"
+#define string_r_adm_roaming_text "手機正在漫éŠã€‚\n"
+#define string_r_adm_sw_update_required_text "必須下載。"
+#define string_r_adm_verifying_sw_text "正在驗證部件"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " 或在Ovi商店中找尋\n\"%U\""
+#define string_r_inst_adm_can_be_resumed_text "è¦åœ¨ç¨å¾Œç¹¼çºŒæ­¤å®‰è£ï¼Œåœ¨æ‚¨çš„應用程å¼åŠŸèƒ½è¡¨ä¸­é¸æ“‡%U圖示"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "ç¨å¾Œ"
+#define string_r_sk_now_text "ç¾åœ¨"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_31.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "正在å–消安装"
+#define string_r_adm_continue_installation_later_text "ç¨åŽç»§ç»­å®‰è£…?"
+#define string_r_adm_continue_installation_text "继续安装%U[43]?"
+#define string_r_adm_continue_to_download_text "下载%U[45]?"
+#define string_r_adm_continuing_inst_text "正在继续安装"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\n正在å–消安装。"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U立刻下载%2U?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U下载%2U?"
+#define string_r_adm_download_wait_text "正在下载和安装"
+#define string_r_adm_downloading_text "正在下载 %0N/%1N"
+#define string_r_adm_err_conn_lost_text "网络连接丢失。"
+#define string_r_adm_err_download_failed_text "下载失败。"
+#define string_r_adm_err_installation_failed_text "安装失败。"
+#define string_r_adm_err_installation_not_enough_space_text "无足够安装空间"
+#define string_r_adm_err_installation_unsupported_device_text "设备ä¸å—支æŒ"
+#define string_r_adm_err_latest_installation_ok_text "无挂起的安装。最新安装æˆåŠŸã€‚"
+#define string_r_adm_err_no_pending_installations_text "无挂起的安装"
+#define string_r_adm_err_unsupported_version_text "智能安装程åºç‰ˆæœ¬ä¸å—支æŒ"
+#define string_r_adm_err_user_cancellation_text "安装已å–消"
+#define string_r_adm_error_text "å‘生错误:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "安装å³å°†å®Œæˆ"
+#define string_r_adm_installation_ok_text "安装完æˆ"
+#define string_r_adm_installing_text "正在安装 %0N/%1N"
+#define string_r_adm_launch_app_text "安装完æˆã€‚打开%U[39]?"
+#define string_r_adm_preparing_inst_text "正在准备安装"
+#define string_r_adm_reverting_changes_wait_text "正在æ¢å¤æ›´æ”¹"
+#define string_r_adm_roaming_continue_to_download_text "手机正在漫游。ä»ç„¶ä¸‹è½½%U[35]?"
+#define string_r_adm_roaming_text "手机正在漫游。\n"
+#define string_r_adm_sw_update_required_text "需è¦ä¸‹è½½ã€‚"
+#define string_r_adm_verifying_sw_text "正在验è¯ç»„件"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " 或在Ovi商店查找\"%U\""
+#define string_r_inst_adm_can_be_resumed_text "è‹¥è¦ä»¥åŽå†ç»§ç»­æ­¤å®‰è£…,在应用程åºåŠŸèƒ½è¡¨%U中选择此图标"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "ç¨åŽ"
+#define string_r_sk_now_text "现在"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_32.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "#Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "#\\resource\\apps\\ADM"
+#define qtn_short_caption_string "#Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "#Cancelling installation"
+#define string_r_adm_continue_installation_later_text "#Continue installation later?"
+#define string_r_adm_continue_installation_text "#Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "#Download %U[77]?"
+#define string_r_adm_continuing_inst_text "#Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "#%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "#%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "#%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "#Downloading and installing"
+#define string_r_adm_downloading_text "#Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "#Network connection lost."
+#define string_r_adm_err_download_failed_text "#Download failed."
+#define string_r_adm_err_installation_failed_text "#Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "#Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "#Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "#No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "#No pending installations"
+#define string_r_adm_err_unsupported_version_text "#Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "#Installation cancelled"
+#define string_r_adm_error_text "#Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "#Finalising installation"
+#define string_r_adm_installation_ok_text "#Installation complete"
+#define string_r_adm_installing_text "#Installing %0N of %1N"
+#define string_r_adm_launch_app_text "#Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "#Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "#Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "#Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "#Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "#Download required."
+#define string_r_adm_verifying_sw_text "#Verifying components"
+#define string_r_gb "#GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text "# or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "#To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "#kB"
+#define string_r_mb "#MB"
+#define string_r_sk_later_text "#Later"
+#define string_r_sk_now_text "#Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_326.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Membatalkan pemasangan"
+#define string_r_adm_continue_installation_later_text "Teruskan pemasangan nanti?"
+#define string_r_adm_continue_installation_text "Teruskan pemasangan %U[31]?"
+#define string_r_adm_continue_to_download_text "Muat turun %U[39]?"
+#define string_r_adm_continuing_inst_text "Meneruskan pemasangan"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nMembatalkan pemasangan."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UMuat turun %2U sekarang?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UMuat turun %2U?"
+#define string_r_adm_download_wait_text "Memuat turun dan memasang"
+#define string_r_adm_downloading_text "Memuat turun %0N daripada %1N"
+#define string_r_adm_err_conn_lost_text "Sambungan rangkaian hilang."
+#define string_r_adm_err_download_failed_text "Muat turun gagal."
+#define string_r_adm_err_installation_failed_text "Pemasangan gagal."
+#define string_r_adm_err_installation_not_enough_space_text "Tidak cukup ruang untuk memasang"
+#define string_r_adm_err_installation_unsupported_device_text "Peranti tidak disokong"
+#define string_r_adm_err_latest_installation_ok_text "Tiada pemasangan belum selesai. Pemasangan terkini berjaya."
+#define string_r_adm_err_no_pending_installations_text "Tiada pemasangan belum selesai"
+#define string_r_adm_err_unsupported_version_text "Versi Smart Installer yang tak disokong"
+#define string_r_adm_err_user_cancellation_text "Pemasangan dibatalkan"
+#define string_r_adm_error_text "Ralat telah berlaku:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Menyelesaikan pemasangan"
+#define string_r_adm_installation_ok_text "Pemasangan selesai"
+#define string_r_adm_installing_text "Memasang %0N daripada %1N"
+#define string_r_adm_launch_app_text "Pemasangan selesai. Buka %U[31]?"
+#define string_r_adm_preparing_inst_text "Menyediakan pemasangan"
+#define string_r_adm_reverting_changes_wait_text "Membalikkan perubahan"
+#define string_r_adm_roaming_continue_to_download_text "Telefon sedang merayau. Muat turun %U[29] juga?"
+#define string_r_adm_roaming_text "Telefon sedang merayau.\n"
+#define string_r_adm_sw_update_required_text "Muat turun diperlukan."
+#define string_r_adm_verifying_sw_text "Mengesahkan komponen"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " atau mencari '%U' dalam Kedai Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Untuk meneruskan pemsngn ini kmdian, pilih ikon ini dalam menu aplikasi anda%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Kemudian"
+#define string_r_sk_now_text "Sekarang"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_327.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Membatalkan penginstalan"
+#define string_r_adm_continue_installation_later_text "Lanjutkan penginstalan nanti?"
+#define string_r_adm_continue_installation_text "Lanjutkan penginstalan %U[31]?"
+#define string_r_adm_continue_to_download_text "Download %U[39]?"
+#define string_r_adm_continuing_inst_text "Melanjutkan penginstalan"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nMembatalkan penginstalan."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U sekarang?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Men-download dan menginstal"
+#define string_r_adm_downloading_text "Men-download %0N dari %1N"
+#define string_r_adm_err_conn_lost_text "Sambungan jaringan terputus."
+#define string_r_adm_err_download_failed_text "Download gagal."
+#define string_r_adm_err_installation_failed_text "Penginstalan gagal."
+#define string_r_adm_err_installation_not_enough_space_text "Kapasitas tidak cukup untuk melakukan penginstalan"
+#define string_r_adm_err_installation_unsupported_device_text "Perangkat tidak didukung"
+#define string_r_adm_err_latest_installation_ok_text "Tidak ada penginstalan tertunda. Penginstalan terakhir berhasil."
+#define string_r_adm_err_no_pending_installations_text "Tidak ada penginstalan tertunda"
+#define string_r_adm_err_unsupported_version_text "Versi Penginstal Pintar tidak didukung"
+#define string_r_adm_err_user_cancellation_text "Penginstalan dibatalkan"
+#define string_r_adm_error_text "Terjadi kesalahan:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Menyelesaikan penginstalan"
+#define string_r_adm_installation_ok_text "Penginstalan selesai"
+#define string_r_adm_installing_text "Menginstal %0N dari %1N"
+#define string_r_adm_launch_app_text "Penginstalan selesai. Buka %U[31]?"
+#define string_r_adm_preparing_inst_text "Menyiapkan penginstalan"
+#define string_r_adm_reverting_changes_wait_text "Mengembalikan perubahan"
+#define string_r_adm_roaming_continue_to_download_text "Telepon sedang roaming. Tetap download %U[21]?"
+#define string_r_adm_roaming_text "Telepon sedang roaming.\n"
+#define string_r_adm_sw_update_required_text "Download diperlukan."
+#define string_r_adm_verifying_sw_text "Memverifikasi komponen"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " atau cari '%U' di Kios Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Utk melanjutkan p'instalan ini nanti, plh ikon di menu aplik.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Nanti"
+#define string_r_sk_now_text "Sekarang"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_33.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸¢à¸à¹€à¸¥à¸´à¸â€‹à¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_continue_installation_later_text "ติดตั้ง​ต่อใน​ภายหลัง?"
+#define string_r_adm_continue_installation_text "ติดตั้ง %U[83] ต่อ?"
+#define string_r_adm_continue_to_download_text "ดาวน์โหลด %U[85]?"
+#define string_r_adm_continuing_inst_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸”ำเนินà¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง​ต่อ"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nà¸à¸³à¸¥à¸±à¸‡â€‹à¸¢à¸à¹€à¸¥à¸´à¸â€‹à¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1Uดาวน์โหลด %2U ตอนนี้?"
+#define string_r_adm_dl_prompt_text "%0U\n%1Uดาวน์โหลด %2U?"
+#define string_r_adm_download_wait_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸”าวน์โหลด​à¹à¸¥à¸°â€‹à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_downloading_text "à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลด %0N จาภ%1N"
+#define string_r_adm_err_conn_lost_text "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­â€‹à¹€à¸„รือข่าย​ขาดหาย"
+#define string_r_adm_err_download_failed_text "à¸à¸²à¸£à¸”าวน์โหลด​ล้มเหลว"
+#define string_r_adm_err_installation_failed_text "à¸à¸²à¸£à¸•à¸´à¸”ตั้ง​ล้มเหลว"
+#define string_r_adm_err_installation_not_enough_space_text "พื้นที่ไม่พอ​สำหรับ​à¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_err_installation_unsupported_device_text "อุปà¸à¸£à¸“์ไม่สนับสนุน"
+#define string_r_adm_err_latest_installation_ok_text "ไม่มีà¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง​ที่รออยู่ à¸à¸²à¸£à¸•à¸´à¸”ตั้ง​ครั้งล่าสุด​สำเร็จà¹à¸¥à¹‰à¸§"
+#define string_r_adm_err_no_pending_installations_text "ไม่มีà¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง​ที่รออยู่"
+#define string_r_adm_err_unsupported_version_text "เวอร์ชัน Smart Installer ไม่สนับสนุน"
+#define string_r_adm_err_user_cancellation_text "ยà¸à¹€à¸¥à¸´à¸â€‹à¸à¸²à¸£â€‹â€‹à¸•à¸´à¸”ตั้ง​​à¹à¸¥à¹‰à¸§"
+#define string_r_adm_error_text "เà¸à¸´à¸”ข้อผิดพลาด:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸ªà¸´à¹‰à¸™â€‹à¸ªà¸¸à¸”​à¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_installation_ok_text "à¸à¸²à¸£â€‹à¸•à¸´à¸”​ตั้ง​เสร็จ​สมบูรณ์"
+#define string_r_adm_installing_text "à¸à¸³à¸¥à¸±à¸‡à¸•à¸´à¸”ตั้ง %0N จาภ%1N"
+#define string_r_adm_launch_app_text "à¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง​เสร็จ​สมบูรณ์ เปิด %U[66]?"
+#define string_r_adm_preparing_inst_text "à¸à¸³à¸¥à¸±à¸‡à¹€à¸•à¸£à¸µà¸¢à¸¡à¸à¸²à¸£à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_reverting_changes_wait_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸¢à¸à¹€à¸¥à¸´à¸â€‹à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡"
+#define string_r_adm_roaming_continue_to_download_text "โทรศัพท์​à¸à¸³à¸¥à¸±à¸‡â€‹à¸‚้าม​เครือข่าย ยืนยัน​ดาวน์โหลด %U[43]?"
+#define string_r_adm_roaming_text "โทรศัพท์​à¸à¸³à¸¥à¸±à¸‡â€‹à¸‚้าม​เครือข่าย\n"
+#define string_r_adm_sw_update_required_text "ต้องดาวน์โหลด"
+#define string_r_adm_verifying_sw_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šâ€‹à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸š"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " หรือ​ค้นหา \"%U\" ใน​ร้านค้า Ovi"
+#define string_r_inst_adm_can_be_resumed_text "ในà¸à¸²à¸£â€‹à¸•à¸´à¸”ตั้ง​ต่อ​ภายหลัง ให้เลือà¸â€‹à¹„อคอนนี้​ในเมนู​à¹à¸­à¸›à¸žà¸¥à¸´à¹€à¸„ชั่น​ของคุณ%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "ภายหลัง"
+#define string_r_sk_now_text "ตอนนี้"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_37.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "إلغاء التثبيت"
+#define string_r_adm_continue_installation_later_text "متابعة التثبيت Ùيما بعد؟"
+#define string_r_adm_continue_installation_text "متابعة تبيت %U[77]؟"
+#define string_r_adm_continue_to_download_text "تنزيل %U[77]؟"
+#define string_r_adm_continuing_inst_text "متابعة التثبيت"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nإلغاء التثبيت."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1Uتنزيل %2U الآن؟"
+#define string_r_adm_dl_prompt_text "%0U\n%1Uتنزيل %2U؟"
+#define string_r_adm_download_wait_text "التنزيل والتثبيت"
+#define string_r_adm_downloading_text "تنزيل %0N من %1N"
+#define string_r_adm_err_conn_lost_text "تم Ùقد الاتصال بالشبكة."
+#define string_r_adm_err_download_failed_text "Ùشل التنزيل."
+#define string_r_adm_err_installation_failed_text "Ùشل التثبيت."
+#define string_r_adm_err_installation_not_enough_space_text "المساحة غير كاÙية للتثبيت"
+#define string_r_adm_err_installation_unsupported_device_text "الجهاز غير مدعم"
+#define string_r_adm_err_latest_installation_ok_text "لا توجد عمليات تثبيت معلقة. التثبيت الأخير كان ناجحًا."
+#define string_r_adm_err_no_pending_installations_text "لا توجد عمليات تثبيت معلقة"
+#define string_r_adm_err_unsupported_version_text "إصدار Smart Installer غير معتمد"
+#define string_r_adm_err_user_cancellation_text "تم إلغاء التثبيت"
+#define string_r_adm_error_text "حدث خطأ:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "جار إنهاء التثبيت"
+#define string_r_adm_installation_ok_text "انتهى التثبيت"
+#define string_r_adm_installing_text "تثبيت %0N من %1N"
+#define string_r_adm_launch_app_text "تم التثبيت. هل تريد Ùتح %U[77]ØŸ"
+#define string_r_adm_preparing_inst_text "جار التحضير للتثبيت"
+#define string_r_adm_reverting_changes_wait_text "تغيير اتجاه التغييرات"
+#define string_r_adm_roaming_continue_to_download_text "الهات٠يتجول. هل تريد تنزيل %U[54] على أي حال؟"
+#define string_r_adm_roaming_text "الهات٠ÙÙŠ وضع التجوال.\n"
+#define string_r_adm_sw_update_required_text "يلزم التنزيل."
+#define string_r_adm_verifying_sw_text "التحقق من المكونات"
+#define string_r_gb "ج.ب"
+#define string_r_inst_adm_can_be_resumed_ovi_text " أو ابحث عن %U ÙÙŠ متجر Ovi"
+#define string_r_inst_adm_can_be_resumed_text "لمتابعة عملية التثبيت هذه لاحقًا، حدد هذا الرمز ÙÙŠ قائمة التطبيقات%U"
+#define string_r_kb "ك.ب"
+#define string_r_mb "م.ب"
+#define string_r_sk_later_text "لاحقاً"
+#define string_r_sk_now_text "الآن"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_39.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Kinakansela ang pag-install"
+#define string_r_adm_continue_installation_later_text "Ipagpatuloy ang pag-install mamaya?"
+#define string_r_adm_continue_installation_text "Ipagpatuloy ang pag-install ng %U[60]?"
+#define string_r_adm_continue_to_download_text "I-download ang %U[77]?"
+#define string_r_adm_continuing_inst_text "Ipinagpapatuloy ang pag-install"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nKinakansela ang pag-install."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UI-download ang %2U ngayon?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UI-download ang %2U?"
+#define string_r_adm_download_wait_text "Dina-download at ini-install"
+#define string_r_adm_downloading_text "Dina-download ang %0N ng %1N"
+#define string_r_adm_err_conn_lost_text "Nawala ang koneksyon sa network."
+#define string_r_adm_err_download_failed_text "Nabigo ang pag-download."
+#define string_r_adm_err_installation_failed_text "Nabigo ang pag-install."
+#define string_r_adm_err_installation_not_enough_space_text "Hindi sapat na puwang upang i-install"
+#define string_r_adm_err_installation_unsupported_device_text "Hindi suportado ang aparato"
+#define string_r_adm_err_latest_installation_ok_text "Walang nakabinbing mga pag-install. Matagumpay ang pinakahuling pag-insall."
+#define string_r_adm_err_no_pending_installations_text "Walang nakabinbing mga pag-install"
+#define string_r_adm_err_unsupported_version_text "Hindi sinusuportahang bersyon ng Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Ikinansela ang pag-install"
+#define string_r_adm_error_text "May naganap na error:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Isinasapinal ang pag-install"
+#define string_r_adm_installation_ok_text "Nakumpleto ang pag-install"
+#define string_r_adm_installing_text "Ini-instal ang %0N ng %1N"
+#define string_r_adm_launch_app_text "Kumpleto na ang pag-install. Buksan ang %U[39]?"
+#define string_r_adm_preparing_inst_text "Ihinahanda ang pag-install"
+#define string_r_adm_reverting_changes_wait_text "Ibinabalik ang mga pagbabago"
+#define string_r_adm_roaming_continue_to_download_text "Naka-roaming ang telepono. I-download pa rin ang %U[39]?"
+#define string_r_adm_roaming_text "Naka-roaming ang telepono.\n"
+#define string_r_adm_sw_update_required_text "Kinakailangan ang pag-download."
+#define string_r_adm_verifying_sw_text "Pinapatotohanan ang mga bahagi"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " o hanapin ang '%U' sa Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "Upang ituloy ito pag-install sa paglaon, piliin icon na ito sa menu ng iyo app.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Sa paglaon"
+#define string_r_sk_now_text "Ngayon"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_401.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Instalazioa bertan behera uzten"
+#define string_r_adm_continue_installation_later_text "Geroago instalatzen jarraitu?"
+#define string_r_adm_continue_installation_text "%U[78] instalatzen jarraitu?"
+#define string_r_adm_continue_to_download_text "%U[85] deskargatu?"
+#define string_r_adm_continuing_inst_text "Instalazioa jarraitzen"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInstalazioa bertan behera uzten."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDeskargatu %2U orain?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDeskargatu %2U?"
+#define string_r_adm_download_wait_text "Deskargatzen eta instalatzen"
+#define string_r_adm_downloading_text "Deskargatzen %1N-tik %0N"
+#define string_r_adm_err_conn_lost_text "Sareko konexioa galdu da."
+#define string_r_adm_err_download_failed_text "Deskargak huts egin du."
+#define string_r_adm_err_installation_failed_text "Instalazioak huts egin du."
+#define string_r_adm_err_installation_not_enough_space_text "Ez dago instalatzeko adina memoria"
+#define string_r_adm_err_installation_unsupported_device_text "Ez da gailua onartzen"
+#define string_r_adm_err_latest_installation_ok_text "Ez dago instalaziorik zain. Azken instalazioa behar bezala osatu zen."
+#define string_r_adm_err_no_pending_installations_text "Ez dago instalaziorik zain"
+#define string_r_adm_err_unsupported_version_text "Ez da Smart Installer-en bertsioa onartzen"
+#define string_r_adm_err_user_cancellation_text "Instalazioa bertan behera utzi da"
+#define string_r_adm_error_text "Errore bat gertatu da:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Instalazioa amaitzen"
+#define string_r_adm_installation_ok_text "Instalazioa osatu da"
+#define string_r_adm_installing_text "Instalatzen %1N-tik %0N"
+#define string_r_adm_launch_app_text "Instalazioa osatu da. Ireki %U[60]?"
+#define string_r_adm_preparing_inst_text "Instalazioa prestatzen"
+#define string_r_adm_reverting_changes_wait_text "Aldaketak leheneratzen"
+#define string_r_adm_roaming_continue_to_download_text "Telefonoa ibiltaritzan dago. %U[45] deskargatu halere?"
+#define string_r_adm_roaming_text "Telefonoa ibiltaritzan dago.\n"
+#define string_r_adm_sw_update_required_text "Deskarga behar da."
+#define string_r_adm_verifying_sw_text "Osagaiak egiaztatzen"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " edo bilatu '%U' Ovi Dendan"
+#define string_r_inst_adm_can_be_resumed_text "Instalazioa geroago jarraitzeko, hautatu aplikazioaren menuan dagoen ikonoa%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Geroago"
+#define string_r_sk_now_text "Orain"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_402.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelando instalación"
+#define string_r_adm_continue_installation_later_text "Continuar a instalación máis tarde?"
+#define string_r_adm_continue_installation_text "Continuar a instalación de %U[60]?"
+#define string_r_adm_continue_to_download_text "Descargar %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuando a instalación"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelando instalación."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDescargar %2U agora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDescargar %2U?"
+#define string_r_adm_download_wait_text "Descargando e instalando"
+#define string_r_adm_downloading_text "Descargando %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Conexión de rede perdida."
+#define string_r_adm_err_download_failed_text "Erro na descarga."
+#define string_r_adm_err_installation_failed_text "Erro na instalación."
+#define string_r_adm_err_installation_not_enough_space_text "Espazo insuficiente para a instalación"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositivo non compatible"
+#define string_r_adm_err_latest_installation_ok_text "Ningunha instalación pendente. A última instalación fíxose correctamente."
+#define string_r_adm_err_no_pending_installations_text "Ningunha instalación pendente"
+#define string_r_adm_err_unsupported_version_text "Versión non compatible de Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Instalación cancelada"
+#define string_r_adm_error_text "Produciuse un erro:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizando a instalación"
+#define string_r_adm_installation_ok_text "Instalación completa"
+#define string_r_adm_installing_text "Instalando %0N de %1N"
+#define string_r_adm_launch_app_text "Instalación completa. Abrir %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparando instalación"
+#define string_r_adm_reverting_changes_wait_text "Revertendo cambios"
+#define string_r_adm_roaming_continue_to_download_text "O teléfono está en itinerancia. Descargar %U[30] igualmente?"
+#define string_r_adm_roaming_text "O teléfono está en itinerancia.\n"
+#define string_r_adm_sw_update_required_text "Descarga requirida."
+#define string_r_adm_verifying_sw_text "Verificando compoñentes"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ou buscar \"%U\" en Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "Seleccione esta icona no menú da súa aplicación%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Despois"
+#define string_r_sk_now_text "Agora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_42.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "ОтмÑна на инÑталирането"
+#define string_r_adm_continue_installation_later_text "Продължаване на инÑталирането по-къÑно?"
+#define string_r_adm_continue_installation_text "Продължаване на инÑталирането на %U[60]?"
+#define string_r_adm_continue_to_download_text "ИзтеглÑне на %U[77]?"
+#define string_r_adm_continuing_inst_text "ИнÑталирането продължава"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nОтмÑна на инÑталирането."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UИзтеглÑне на %2U Ñега?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UИзтеглÑне на %2U?"
+#define string_r_adm_download_wait_text "ИзтеглÑне и инÑталиране"
+#define string_r_adm_downloading_text "ИзтеглÑне на %0N от %1N"
+#define string_r_adm_err_conn_lost_text "Връзката Ñ Ð¼Ñ€ÐµÐ¶Ð°Ñ‚Ð° е прекъÑната."
+#define string_r_adm_err_download_failed_text "ИзтеглÑнето е неуÑпешно."
+#define string_r_adm_err_installation_failed_text "ИнÑталирането е неуÑпешно."
+#define string_r_adm_err_installation_not_enough_space_text "ÐÑма доÑтатъчно мÑÑто за инÑталиране"
+#define string_r_adm_err_installation_unsupported_device_text "УÑтройÑтвото не Ñе поддържа"
+#define string_r_adm_err_latest_installation_ok_text "ÐÑма чакащи инÑталации. ПоÑледната инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð±ÐµÑˆÐµ уÑпешна."
+#define string_r_adm_err_no_pending_installations_text "ÐÑма чакащи инÑталации"
+#define string_r_adm_err_unsupported_version_text "Тази верÑÐ¸Ñ Ð½Ð° Smart Installer не Ñе поддържа"
+#define string_r_adm_err_user_cancellation_text "ИнÑталирането е отменено"
+#define string_r_adm_error_text "Възникна грешка:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Приключване на инÑталациÑта"
+#define string_r_adm_installation_ok_text "ИнÑталирането е завършено"
+#define string_r_adm_installing_text "ИнÑталиране на %0N от %1N"
+#define string_r_adm_launch_app_text "ИнÑталирането приключи. ОтварÑне на %U[39]?"
+#define string_r_adm_preparing_inst_text "ПодготвÑне на инÑталациÑ"
+#define string_r_adm_reverting_changes_wait_text "ИзчиÑтване на промените"
+#define string_r_adm_roaming_continue_to_download_text "Телефонът е в роуминг. ИзтеглÑне на %U[27] въпреки това?"
+#define string_r_adm_roaming_text "Телефонът е в роуминг.\n"
+#define string_r_adm_sw_update_required_text "Ðеобходимо е изтеглÑне."
+#define string_r_adm_verifying_sw_text "Проверка на компонентите"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " или потърÑете '%U' в Ovi Магазин"
+#define string_r_inst_adm_can_be_resumed_text "За да продължите инÑталирането по-къÑно, изберете тази икона в менюто на приложението%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "По-къÑно"
+#define string_r_sk_now_text "Сега"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_44.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "S'està cancel·lant la instal·lació"
+#define string_r_adm_continue_installation_later_text "Vols continuar la instal·lació en un altre moment?"
+#define string_r_adm_continue_installation_text "Vols continuar la instal·lació de %U[60]?"
+#define string_r_adm_continue_to_download_text "Vols descarregar %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuant instal·lació"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nS'està cancel·lant la instal·lació."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UVols descarregar %2U ara?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UVols descarregar %2U?"
+#define string_r_adm_download_wait_text "S'està descarregant i instal·lant"
+#define string_r_adm_downloading_text "Descarregant %0N de %1N"
+#define string_r_adm_err_conn_lost_text "S'ha perdut la connexió de xarxa."
+#define string_r_adm_err_download_failed_text "Error durant la descàrrega."
+#define string_r_adm_err_installation_failed_text "Error durant la instal·lació."
+#define string_r_adm_err_installation_not_enough_space_text "No hi ha prou espai per instal·lar"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositiu no compatible"
+#define string_r_adm_err_latest_installation_ok_text "No hi ha cap instal·lació pendent. La darrera instal·lació s'ha dut a terme correctament."
+#define string_r_adm_err_no_pending_installations_text "No hi ha cap instal·lació pendent"
+#define string_r_adm_err_unsupported_version_text "La versió d'Smart Installer no és compatible"
+#define string_r_adm_err_user_cancellation_text "Instal·lació cancel·lada"
+#define string_r_adm_error_text "S'ha produït un error:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "S'està finalitzant la instal·lació"
+#define string_r_adm_installation_ok_text "Instal·lació finalitzada"
+#define string_r_adm_installing_text "Instal·lant %0N de %1N"
+#define string_r_adm_launch_app_text "Instal·lació completa. Vols obrir %U[60]?"
+#define string_r_adm_preparing_inst_text "S'està preparant la instal·lació"
+#define string_r_adm_reverting_changes_wait_text "S'estan descartant els canvis"
+#define string_r_adm_roaming_continue_to_download_text "El telèfon és en itinerància. Vols descarregar %U[31] igualment?"
+#define string_r_adm_roaming_text "El telèfon és en itinerància.\n"
+#define string_r_adm_sw_update_required_text "Descàrrega necessària."
+#define string_r_adm_verifying_sw_text "Comprovant components"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " o busca '%U' a la botiga Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Per continuar, selecciona aquesta icona en el menú d'aplicacions%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Més tard"
+#define string_r_sk_now_text "Ara"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_45.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Otkazivanje instalacije"
+#define string_r_adm_continue_installation_later_text "Nastaviti instalaciju kasnije?"
+#define string_r_adm_continue_installation_text "Nastaviti instalaciju %U[77]?"
+#define string_r_adm_continue_to_download_text "Preuzeti %U[77]?"
+#define string_r_adm_continuing_inst_text "Nastavak instalacije"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nOtkazivanje instalacije."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UPreuzeti %2U sada?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UPreuzeti %2U?"
+#define string_r_adm_download_wait_text "Preuzimanje i instaliranje"
+#define string_r_adm_downloading_text "Preuzimanje %0N od %1N"
+#define string_r_adm_err_conn_lost_text "Mrežna veza je izgubljena."
+#define string_r_adm_err_download_failed_text "Preuzimanje nije uspjelo."
+#define string_r_adm_err_installation_failed_text "Instalacija nije uspjela."
+#define string_r_adm_err_installation_not_enough_space_text "Nema dovoljno prostora za instalaciju"
+#define string_r_adm_err_installation_unsupported_device_text "Uređaj nije podržan"
+#define string_r_adm_err_latest_installation_ok_text "Nema instalacija na Äekanju. Najnovija instalacija bila je uspjeÅ¡na."
+#define string_r_adm_err_no_pending_installations_text "Nema instalacija na Äekanju"
+#define string_r_adm_err_unsupported_version_text "Nepodržana verzija Smart Installera"
+#define string_r_adm_err_user_cancellation_text "Instalacija otkazana"
+#define string_r_adm_error_text "Došlo je do pogreške:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Završavanje instaliranja"
+#define string_r_adm_installation_ok_text "Instalacija dovršena"
+#define string_r_adm_installing_text "Instaliranje %0N od %1N"
+#define string_r_adm_launch_app_text "Instalacija dovršena. Otvoriti %U[60]?"
+#define string_r_adm_preparing_inst_text "Priprema instalacije"
+#define string_r_adm_reverting_changes_wait_text "Vraćanje promjena"
+#define string_r_adm_roaming_continue_to_download_text "Telefon je u roamingu. Preuzeti %U[53] svejedno?"
+#define string_r_adm_roaming_text "Telefon je u roamingu.\n"
+#define string_r_adm_sw_update_required_text "Potrebno je preuzimanje."
+#define string_r_adm_verifying_sw_text "Ovjeravanje komponenti"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ili pronađite '%U' u Ovi trgovini"
+#define string_r_inst_adm_can_be_resumed_text "Za nastavak instala­cije kasnije odaberi­te ovu ikonu u izborniku aplikacija%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Kasnije"
+#define string_r_sk_now_text "Sad"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_49.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Installimise tühistamine"
+#define string_r_adm_continue_installation_later_text "Kas jätkata installimist hiljem?"
+#define string_r_adm_continue_installation_text "Kas jätkata rakenduse %U[51] installimist?"
+#define string_r_adm_continue_to_download_text "Kas %U[68] alla laadida?"
+#define string_r_adm_continuing_inst_text "Installimise jätkamine"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInstallimise tühistamine."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UKas laadida %2U kohe alla?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UKas laadida %2U kohe alla?"
+#define string_r_adm_download_wait_text "Allalaadimine ja installimine"
+#define string_r_adm_downloading_text "Allalaadimine: %0N/%1N"
+#define string_r_adm_err_conn_lost_text "Võrguühendus on katkenud."
+#define string_r_adm_err_download_failed_text "Allalaadimine nurjus."
+#define string_r_adm_err_installation_failed_text "Installimine nurjus."
+#define string_r_adm_err_installation_not_enough_space_text "Installimiseks pole piisavalt ruumi"
+#define string_r_adm_err_installation_unsupported_device_text "Seda seadet ei toetata"
+#define string_r_adm_err_latest_installation_ok_text "Ootel installe pole. Viimane installimine õnnestus."
+#define string_r_adm_err_no_pending_installations_text "Ootel installe pole"
+#define string_r_adm_err_unsupported_version_text "Seda Smart Installeri versiooni ei toetata"
+#define string_r_adm_err_user_cancellation_text "Installimine on tühistatud"
+#define string_r_adm_error_text "Ilmnes tõrge:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Installimise lõpuleviimine"
+#define string_r_adm_installation_ok_text "Installimine on lõpule viidud"
+#define string_r_adm_installing_text "Installimine: %0N/%1N"
+#define string_r_adm_launch_app_text "Installimine on lõpule viidud. Kas %U[55] avada?"
+#define string_r_adm_preparing_inst_text "Installimiseks ettevalmistamine"
+#define string_r_adm_reverting_changes_wait_text "Muudatuste tagasivõtmine"
+#define string_r_adm_roaming_continue_to_download_text "Telefon töötab rändlusrežiimis. Kas laadida %U[31] siiski alla?"
+#define string_r_adm_roaming_text "Telefon töötab rändlusrežiimis.\n"
+#define string_r_adm_sw_update_required_text "Allalaadimine on nõutav."
+#define string_r_adm_verifying_sw_text "Komponentide kontrollimine"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " või otsi rakendust %U rakendusest Ovi Pood."
+#define string_r_inst_adm_can_be_resumed_text "Kui soovid installimist hiljem jätkata, vali rakenduste menüüst ikoon%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Hiljem"
+#define string_r_sk_now_text "Kohe"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_50.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "لغو نصب"
+#define string_r_adm_continue_installation_later_text "ادامه نصب در Ùرصتی دیگر؟"
+#define string_r_adm_continue_installation_text "ادامه نصب %U[77]؟"
+#define string_r_adm_continue_to_download_text "بارگیری %U[77]؟"
+#define string_r_adm_continuing_inst_text "ادامه نصب"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nلغو نصب."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1Uاکنون %2U بارگیری شود؟"
+#define string_r_adm_dl_prompt_text "%0U\n%1U%2U بارگیری شود؟"
+#define string_r_adm_download_wait_text "بارگیری و نصب"
+#define string_r_adm_downloading_text "بارگیری %0N از %1N"
+#define string_r_adm_err_conn_lost_text "اتصال شبکه قطع شد."
+#define string_r_adm_err_download_failed_text "بارگیری انجام نشد."
+#define string_r_adm_err_installation_failed_text "نصب انجام نشد."
+#define string_r_adm_err_installation_not_enough_space_text "Ùضای کاÙÛŒ برای نصب وجود ندارد"
+#define string_r_adm_err_installation_unsupported_device_text "دستگاه پشتیبانی نمی شود"
+#define string_r_adm_err_latest_installation_ok_text "نصب در حال تعویقی وجود ندارد. آخرین نصب موÙقیت آمیز بوده است."
+#define string_r_adm_err_no_pending_installations_text "نصب در حال تعویقی وجود ندارد"
+#define string_r_adm_err_unsupported_version_text "نسخه پشتیبانی نشده نصب کننده هوشمند"
+#define string_r_adm_err_user_cancellation_text "نصب لغو شد"
+#define string_r_adm_error_text "خطا رخ داد:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "اتمام نصب"
+#define string_r_adm_installation_ok_text "نصب کامل شد"
+#define string_r_adm_installing_text "نصب %0N از %1N"
+#define string_r_adm_launch_app_text "نصب کامل شد. %U[71] باز شود؟"
+#define string_r_adm_preparing_inst_text "در حال آماده سازی برای نصب"
+#define string_r_adm_reverting_changes_wait_text "بازگشت به تغییرات"
+#define string_r_adm_roaming_continue_to_download_text "تلÙÙ† در حال رومینگ است. در هر صورت %U[51] بارگیری شود؟"
+#define string_r_adm_roaming_text "تلÙÙ† در حال رومینگ است.\n"
+#define string_r_adm_sw_update_required_text "بارگیری لازم است."
+#define string_r_adm_verifying_sw_text "در حال تأیید مؤلÙÙ‡ ها"
+#define string_r_gb "گیگابایت"
+#define string_r_inst_adm_can_be_resumed_ovi_text " یا یاÙتن'%U'در Ùروشگاه Ovi"
+#define string_r_inst_adm_can_be_resumed_text "برای ادامه نصب در Ùرصتی دیگر، این نماد را در منوی برنامه خود انتخاب کنید%U"
+#define string_r_kb "کیلوبایت"
+#define string_r_mb "مگابایت"
+#define string_r_sk_later_text "بعداً"
+#define string_r_sk_now_text "اکنون"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_51.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Annulation de l'installation en cours"
+#define string_r_adm_continue_installation_later_text "Continuer l'installation plus tard?"
+#define string_r_adm_continue_installation_text "Continuer l'installation de %U[60]?"
+#define string_r_adm_continue_to_download_text "Télécharger %U[77]?"
+#define string_r_adm_continuing_inst_text "Reprise de l'installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnnulation de l'installation."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UTélécharger %2U maintenant?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UTélécharger %2U?"
+#define string_r_adm_download_wait_text "Téléchargement et installation"
+#define string_r_adm_downloading_text "Téléchargement de %0N sur %1N en cours"
+#define string_r_adm_err_conn_lost_text "Connexion réseau perdue."
+#define string_r_adm_err_download_failed_text "Échec du téléchargement."
+#define string_r_adm_err_installation_failed_text "Échec de l'installation."
+#define string_r_adm_err_installation_not_enough_space_text "Espace insuffisant pour l'installation"
+#define string_r_adm_err_installation_unsupported_device_text "Appareil non pris en charge"
+#define string_r_adm_err_latest_installation_ok_text "Aucune installation en attente. La dernière installation a réussi."
+#define string_r_adm_err_no_pending_installations_text "Aucune installation en attente"
+#define string_r_adm_err_unsupported_version_text "Version de Smart Installer non prise en charge"
+#define string_r_adm_err_user_cancellation_text "Installation annulée"
+#define string_r_adm_error_text "Une erreur s'est produite:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalisation de l'installation"
+#define string_r_adm_installation_ok_text "Installation terminée"
+#define string_r_adm_installing_text "Installation de %0N sur %1N en cours"
+#define string_r_adm_launch_app_text "Installation terminée. Ouvrir %U[60]?"
+#define string_r_adm_preparing_inst_text "Préparation de l'installation"
+#define string_r_adm_reverting_changes_wait_text "Annulation des changements"
+#define string_r_adm_roaming_continue_to_download_text "Téléphone en itinérance. Télécharger %U[28] quand même?"
+#define string_r_adm_roaming_text "Téléphone en itinérance.\n"
+#define string_r_adm_sw_update_required_text "Téléchargement requis."
+#define string_r_adm_verifying_sw_text "Vérification des composants en cours"
+#define string_r_gb "Go"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ou trouvez '%U' dans la Boutique Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Pour continuer l'ins­tallation plus tard, sélectionnez l'icône dans le menu de l'appl.%U"
+#define string_r_kb "ko"
+#define string_r_mb "Mo"
+#define string_r_sk_later_text "Plus tard"
+#define string_r_sk_now_text "Maintenant"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_54.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "ΑκÏÏωση εγκατάστασης…"
+#define string_r_adm_continue_installation_later_text "Συνέχιση εγκατάστασης αÏγότεÏα;"
+#define string_r_adm_continue_installation_text "Συνέχιση εγκατάστασης του %U[61];"
+#define string_r_adm_continue_to_download_text "Λήψη %U[78];"
+#define string_r_adm_continuing_inst_text "Συνέχιση εγκατάστασης…"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nΓίνεται ακÏÏωση της εγκατάστασης."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UΛήψη %2U Ï„ÏŽÏα;"
+#define string_r_adm_dl_prompt_text "%0U\n%1UΛήψη %2U;"
+#define string_r_adm_download_wait_text "Λήψη και εγκατάσταση…"
+#define string_r_adm_downloading_text "Λήψη %0N από %1N…"
+#define string_r_adm_err_conn_lost_text "Η σÏνδεση με το δίκτυο χάθηκε."
+#define string_r_adm_err_download_failed_text "Η λήψη απέτυχε."
+#define string_r_adm_err_installation_failed_text "Η εγκατάσταση απέτυχε."
+#define string_r_adm_err_installation_not_enough_space_text "ΑνεπαÏκής χώÏος για εγκατάσταση"
+#define string_r_adm_err_installation_unsupported_device_text "Μη υποστηÏιζόμενη συσκευή"
+#define string_r_adm_err_latest_installation_ok_text "Δεν υπάÏχουν εκκÏεμείς εγκαταστάσεις. Η τελευταία εγκατάσταση ήταν επιτυχής."
+#define string_r_adm_err_no_pending_installations_text "Δεν υπάÏχουν εκκÏεμείς εγκαταστάσεις"
+#define string_r_adm_err_unsupported_version_text "Μη υποστηÏιζόμενη έκδοση Smart Installer"
+#define string_r_adm_err_user_cancellation_text "Η εγκατάσταση ακυÏώθηκε"
+#define string_r_adm_error_text "ΠαÏουσιάστηκε σφάλμα:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "ΟλοκλήÏωση εγκατάστασης…"
+#define string_r_adm_installation_ok_text "Η εγκατάσταση ολοκληÏώθηκε"
+#define string_r_adm_installing_text "Εγκατάσταση %0N από %1N…"
+#define string_r_adm_launch_app_text "Η εγκατάσταση ολοκληÏώθηκε. Άνοιγμα %U[40];"
+#define string_r_adm_preparing_inst_text "ΠÏοετοιμασία εγκατάστασης…"
+#define string_r_adm_reverting_changes_wait_text "ΕπαναφοÏά αλλαγών…"
+#define string_r_adm_roaming_continue_to_download_text "Τηλέφωνο σε πεÏιαγωγή. Λήψη %U[50] οπωσδήποτε;"
+#define string_r_adm_roaming_text "Τηλέφωνο σε πεÏιαγωγή.\n"
+#define string_r_adm_sw_update_required_text "Απαιτείται λήψη."
+#define string_r_adm_verifying_sw_text "Επαλήθευση στοιχείων…"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ή βÏείτε το \"%U\" στο Κατάστημα Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Για να συνεχίσετε την εγκατ. αÏγότεÏα, επιλ. αυτό το εικον. στο Î¼ÎµÎ½Î¿Ï ÎµÏ†Î±Ïμογής%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "ΑÏγότεÏα"
+#define string_r_sk_now_text "ΤώÏα"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_57.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "מבטל התקנה"
+#define string_r_adm_continue_installation_later_text "להמשיך בהתקנה במועד מ×וחר יותר?"
+#define string_r_adm_continue_installation_text "להמשיך בהתקנה של %U[77]?"
+#define string_r_adm_continue_to_download_text "להוריד ×ת %U[77]?"
+#define string_r_adm_continuing_inst_text "ממשיך בהתקנה"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nמבטל התקנה."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1Uלהוריד ×ת %2U כעת?"
+#define string_r_adm_dl_prompt_text "%0U\n%1Uלהוריד ×ת %2U?"
+#define string_r_adm_download_wait_text "מוריד ומתקין"
+#define string_r_adm_downloading_text "מוריד %0N מתוך %1N"
+#define string_r_adm_err_conn_lost_text "חיבור לרשת ×בד."
+#define string_r_adm_err_download_failed_text "הורדה נכשלה."
+#define string_r_adm_err_installation_failed_text "התקנה נכשלה."
+#define string_r_adm_err_installation_not_enough_space_text "×ין מספיק ×ž×§×•× ×œ×”×ª×§× ×”"
+#define string_r_adm_err_installation_unsupported_device_text "התקן ×œ× × ×ª×ž×š"
+#define string_r_adm_err_latest_installation_ok_text "×ין התקנות ממתינות. ההתקנה ×”×חרונה הצליחה."
+#define string_r_adm_err_no_pending_installations_text "×ין התקנות ממתינות"
+#define string_r_adm_err_unsupported_version_text "גרסת Smart Installer ×œ× × ×ª×ž×›×ª"
+#define string_r_adm_err_user_cancellation_text "ההתקנה בוטלה"
+#define string_r_adm_error_text "×ירעה שגי××”:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "×ž×©×œ×™× ×”×ª×§× ×”"
+#define string_r_adm_installation_ok_text "ההתקנה הושלמה"
+#define string_r_adm_installing_text "מתקין %0N מתוך %1N"
+#define string_r_adm_launch_app_text "התקנה הסתיימה. לפתוח ×ת %U[60]?"
+#define string_r_adm_preparing_inst_text "מכין ×ת ההתקנה"
+#define string_r_adm_reverting_changes_wait_text "מחזיר שינויי×"
+#define string_r_adm_roaming_continue_to_download_text "הטלפון מבצע נדידה. להוריד ×ת %U[53] בכל מקרה?"
+#define string_r_adm_roaming_text "הטלפון מבצע נדידה.\n"
+#define string_r_adm_sw_update_required_text "דרושה הורדה."
+#define string_r_adm_verifying_sw_text "מ×מת רכיבי×"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ×ו חפש ×ת '%U' ב'חנות Ovi'"
+#define string_r_inst_adm_can_be_resumed_text "כדי להמשיך בהתקנה זו מ×וחר יותר, בחר סמל ×–×” בתפריט ×”×™×™×©×•×ž×™× ×©×œ×š%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "מ×וחר יותר"
+#define string_r_sk_now_text "כעת"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_58.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "#Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "#\\resource\\apps\\ADM"
+#define qtn_short_caption_string "#Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "#Cancelling installation"
+#define string_r_adm_continue_installation_later_text "#Continue installation later?"
+#define string_r_adm_continue_installation_text "#Continue installation of %U[60]?"
+#define string_r_adm_continue_to_download_text "#Download %U[77]?"
+#define string_r_adm_continuing_inst_text "#Continuing installation"
+#define string_r_adm_detailed_cancelling_installation_wait_text "#%U\nCancelling installation."
+#define string_r_adm_dl_prompt_now_text "#%0U\n%1UDownload %2U now?"
+#define string_r_adm_dl_prompt_text "#%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "#Downloading and installing"
+#define string_r_adm_downloading_text "#Downloading %0N of %1N"
+#define string_r_adm_err_conn_lost_text "#Network connection lost."
+#define string_r_adm_err_download_failed_text "#Download failed."
+#define string_r_adm_err_installation_failed_text "#Installation failed."
+#define string_r_adm_err_installation_not_enough_space_text "#Not enough space to install"
+#define string_r_adm_err_installation_unsupported_device_text "#Device not supported"
+#define string_r_adm_err_latest_installation_ok_text "#No pending installations. The latest installation was successful."
+#define string_r_adm_err_no_pending_installations_text "#No pending installations"
+#define string_r_adm_err_unsupported_version_text "#Unsupported Smart Installer version"
+#define string_r_adm_err_user_cancellation_text "#Installation cancelled"
+#define string_r_adm_error_text "#Error occurred:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "#Finalising installation"
+#define string_r_adm_installation_ok_text "#Installation complete"
+#define string_r_adm_installing_text "#Installing %0N of %1N"
+#define string_r_adm_launch_app_text "#Installation complete. Open %U[60]?"
+#define string_r_adm_preparing_inst_text "#Preparing installation"
+#define string_r_adm_reverting_changes_wait_text "#Reverting changes"
+#define string_r_adm_roaming_continue_to_download_text "#Phone is roaming. Download %U[54] anyway?"
+#define string_r_adm_roaming_text "#Phone is roaming.\n"
+#define string_r_adm_sw_update_required_text "#Download required."
+#define string_r_adm_verifying_sw_text "#Verifying components"
+#define string_r_gb "#GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text "# or find '%U' in Ovi Store"
+#define string_r_inst_adm_can_be_resumed_text "#To continue this installation later, select this icon in your application menu%U"
+#define string_r_kb "#kB"
+#define string_r_mb "#MB"
+#define string_r_sk_later_text "#Later"
+#define string_r_sk_now_text "#Now"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_59.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Membatalkan penginstalan"
+#define string_r_adm_continue_installation_later_text "Lanjutkan penginstalan nanti?"
+#define string_r_adm_continue_installation_text "Lanjutkan penginstalan %U[60]?"
+#define string_r_adm_continue_to_download_text "Download %U[77]?"
+#define string_r_adm_continuing_inst_text "Melanjutkan penginstalan"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nMembatalkan penginstalan."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDownload %2U sekarang?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDownload %2U?"
+#define string_r_adm_download_wait_text "Men-download dan menginstal"
+#define string_r_adm_downloading_text "Men-download %0N dari %1N"
+#define string_r_adm_err_conn_lost_text "Sambungan jaringan terputus."
+#define string_r_adm_err_download_failed_text "Download gagal."
+#define string_r_adm_err_installation_failed_text "Penginstalan gagal."
+#define string_r_adm_err_installation_not_enough_space_text "Kapasitas tidak cukup untuk melakukan penginstalan"
+#define string_r_adm_err_installation_unsupported_device_text "Perangkat tidak didukung"
+#define string_r_adm_err_latest_installation_ok_text "Tidak ada penginstalan tertunda. Penginstalan terakhir berhasil."
+#define string_r_adm_err_no_pending_installations_text "Tidak ada penginstalan tertunda"
+#define string_r_adm_err_unsupported_version_text "Versi Penginstal Pintar tidak didukung"
+#define string_r_adm_err_user_cancellation_text "Penginstalan dibatalkan"
+#define string_r_adm_error_text "Terjadi kesalahan:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Menyelesaikan penginstalan"
+#define string_r_adm_installation_ok_text "Penginstalan selesai"
+#define string_r_adm_installing_text "Menginstal %0N dari %1N"
+#define string_r_adm_launch_app_text "Penginstalan selesai. Buka %U[60]?"
+#define string_r_adm_preparing_inst_text "Menyiapkan penginstalan"
+#define string_r_adm_reverting_changes_wait_text "Mengembalikan perubahan"
+#define string_r_adm_roaming_continue_to_download_text "Telepon sedang roaming. Tetap download %U[39]?"
+#define string_r_adm_roaming_text "Telepon sedang roaming.\n"
+#define string_r_adm_sw_update_required_text "Download diperlukan."
+#define string_r_adm_verifying_sw_text "Memverifikasi komponen"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " atau cari '%U' di Kios Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Utk melanjutkan p'instalan ini nanti, plh ikon di menu aplik.%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Nanti"
+#define string_r_sk_now_text "Sekarang"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_65.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "설치를 취소하는 중"
+#define string_r_adm_continue_installation_later_text "ë‚˜ì¤‘ì— ì„¤ì¹˜ë¥¼ 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+#define string_r_adm_continue_installation_text "%U[33]ì˜ ì„¤ì¹˜ë¥¼ 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+#define string_r_adm_continue_to_download_text "%U[34]ì„(를) 다운로드하시겠습니까?"
+#define string_r_adm_continuing_inst_text "설치 계ì†"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\n설치를 취소하는 중입니다."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U %2U 다운로드하시겠습니까?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U 지금 %2U 다운로드하시겠습니까?"
+#define string_r_adm_download_wait_text "다운로드 ë° ì„¤ì¹˜ 중입니다."
+#define string_r_adm_downloading_text "%1N 중 %0N 다운로드 중"
+#define string_r_adm_err_conn_lost_text "ë„¤íŠ¸ì›Œí¬ ì—°ê²°ì´ ëŠì–´ì¡ŒìŠµë‹ˆë‹¤."
+#define string_r_adm_err_download_failed_text "다운로드를 실패했습니다."
+#define string_r_adm_err_installation_failed_text "설치를 실패했습니다."
+#define string_r_adm_err_installation_not_enough_space_text "설치할 ê³µê°„ì´ ë¶€ì¡±í•©ë‹ˆë‹¤."
+#define string_r_adm_err_installation_unsupported_device_text "지ì›ë˜ì§€ 않는 장치입니다."
+#define string_r_adm_err_latest_installation_ok_text "보류 ì¤‘ì¸ ì„¤ì¹˜ê°€ 없습니다. 마지막 설치가 성공ì ì´ì—ˆìŠµë‹ˆë‹¤."
+#define string_r_adm_err_no_pending_installations_text "보류 ì¤‘ì¸ ì„¤ì¹˜ê°€ 없습니다."
+#define string_r_adm_err_unsupported_version_text "지ì›ë˜ì§€ 않는 Smart Installer 버전입니다."
+#define string_r_adm_err_user_cancellation_text "설치가 취소ë˜ì—ˆìŠµë‹ˆë‹¤."
+#define string_r_adm_error_text "오류 ë°œìƒ:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "설치를 마치는 중"
+#define string_r_adm_installation_ok_text "설치가 완료ë˜ì—ˆìŠµë‹ˆë‹¤."
+#define string_r_adm_installing_text "%1N 중 %0N 설치 중"
+#define string_r_adm_launch_app_text "설치가 완료ë˜ì—ˆìŠµë‹ˆë‹¤. %U[22]ì„(를) 여시겠습니까?"
+#define string_r_adm_preparing_inst_text "설치를 준비하는 중"
+#define string_r_adm_reverting_changes_wait_text "변경 ì‚¬í•­ì„ ë˜ëŒë¦¬ëŠ” 중"
+#define string_r_adm_roaming_continue_to_download_text "í°ì„ ë¡œë°í•˜ëŠ” 중입니다. %U[18]ì„(를) 다운로드하시겠습니까?"
+#define string_r_adm_roaming_text "í°ì„ ë¡œë°í•˜ëŠ” 중입니다.\n"
+#define string_r_adm_sw_update_required_text "다운로드가 필요합니다."
+#define string_r_adm_verifying_sw_text "구성 요소 확ì¸"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ë˜ëŠ” Ovi Storeì—ì„œ '%U' 검색"
+#define string_r_inst_adm_can_be_resumed_text "ë‚˜ì¤‘ì— ì„¤ì¹˜í•˜ë ¤ë©´ 애플리케ì´ì…˜ 메뉴 %Uì—ì„œ 해당 ì•„ì´ì½˜ì„ ì„ íƒí•©ë‹ˆë‹¤."
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "나중ì—"
+#define string_r_sk_now_text "지금"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_67.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Atceļ instalēšanu"
+#define string_r_adm_continue_installation_later_text "Vai turpinÄt instalÄ“Å¡anu vÄ“lÄk?"
+#define string_r_adm_continue_installation_text "Vai turpinÄt %U[68] instalÄ“Å¡anu?"
+#define string_r_adm_continue_to_download_text "Vai lejupielÄdÄ“t %U[77]?"
+#define string_r_adm_continuing_inst_text "Turpina instalēšanu"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAtceļ instalēšanu."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UVai lejupielÄdÄ“t %2U tÅ«lÄ«t?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UVai lejupielÄdÄ“t %2U?"
+#define string_r_adm_download_wait_text "LejupielÄdÄ“ un instalÄ“"
+#define string_r_adm_downloading_text "LejupielÄdÄ“ %0N no %1N"
+#define string_r_adm_err_conn_lost_text "Zudis savienojums ar tīklu."
+#define string_r_adm_err_download_failed_text "LejupielÄdÄ“Å¡ana neizdevÄs."
+#define string_r_adm_err_installation_failed_text "InstalÄ“Å¡ana neizdevÄs."
+#define string_r_adm_err_installation_not_enough_space_text "Nepietiek vietas, lai instalētu"
+#define string_r_adm_err_installation_unsupported_device_text "Nepiemērota ierīce"
+#define string_r_adm_err_latest_installation_ok_text "Nav instalÄciju, kas gaida. PÄ“dÄ“jÄ instalÄ“Å¡ana bija veiksmÄ«ga."
+#define string_r_adm_err_no_pending_installations_text "Nav instalÄciju, kas gaida."
+#define string_r_adm_err_unsupported_version_text "Nepiemērota Smart Installer versija"
+#define string_r_adm_err_user_cancellation_text "Instalēšana atcelta"
+#define string_r_adm_error_text "RadÄs kļūda:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Pabeidz instalēšanu"
+#define string_r_adm_installation_ok_text "Instalēšana pabeigta"
+#define string_r_adm_installing_text "Instalē %0N no %1N"
+#define string_r_adm_launch_app_text "Instalēšana pabeigta. Vai atvērt %U[60]?"
+#define string_r_adm_preparing_inst_text "Sagatavo instalÄciju"
+#define string_r_adm_reverting_changes_wait_text "Atjauno izmaiņas"
+#define string_r_adm_roaming_continue_to_download_text "TÄlrunis atrodas viesabonÄ“Å¡anas režīmÄ. Vai tomÄ“r lejupielÄdÄ“t %U[18]?"
+#define string_r_adm_roaming_text "TÄlrunis ir viesabonÄ“Å¡anas režīmÄ.\n"
+#define string_r_adm_sw_update_required_text "NepiecieÅ¡ama lejupielÄde."
+#define string_r_adm_verifying_sw_text "PÄrbauda komponentus"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " vai atrodiet %U Ovi veikalÄ"
+#define string_r_inst_adm_can_be_resumed_text "Lai instalÄ“Å¡anu turpinÄtu vÄ“lÄk, izvÄ“lieties Å¡o ikonu progr. izvÄ“lnÄ“%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "VÄ“lÄk"
+#define string_r_sk_now_text "Tagad"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_68.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Atšaukiamas įdiegimas"
+#define string_r_adm_continue_installation_later_text "Tęsti įdiegimą vėliau?"
+#define string_r_adm_continue_installation_text "Tęsti %U[70] įdiegimą?"
+#define string_r_adm_continue_to_download_text "Parsisiųsti %U[77]?"
+#define string_r_adm_continuing_inst_text "Tęsiamas diegimas"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAtšaukiamas įdiegimas."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UAtsisiųsti %2U dabar?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UAtsisiųsti %2U?"
+#define string_r_adm_download_wait_text "ParsisiunÄiama ir įdiegiama"
+#define string_r_adm_downloading_text "AtsisiunÄiama %0N iÅ¡ %1N"
+#define string_r_adm_err_conn_lost_text "Tinklo ryšys nutrūko."
+#define string_r_adm_err_download_failed_text "Parsisiųsti nepavyko."
+#define string_r_adm_err_installation_failed_text "Įdiegti nepavyko."
+#define string_r_adm_err_installation_not_enough_space_text "Nepakanka vietos įdiegti"
+#define string_r_adm_err_installation_unsupported_device_text "Prietaisas nepalaikomas"
+#define string_r_adm_err_latest_installation_ok_text "NÄ—ra laukianÄių diegimų. Paskutinis diegimas buvo sÄ—kmingas."
+#define string_r_adm_err_no_pending_installations_text "NÄ—ra laukianÄių diegimų"
+#define string_r_adm_err_unsupported_version_text "Nepalaikoma „Smart Installer“ versija"
+#define string_r_adm_err_user_cancellation_text "Įdiegimas nutrauktas"
+#define string_r_adm_error_text "Įvyko klaida:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Baigia įdiegti"
+#define string_r_adm_installation_ok_text "Įdiegta"
+#define string_r_adm_installing_text "Diegiama %0N iš %1N"
+#define string_r_adm_launch_app_text "Diegimas baigtas. Atidaryti %U[60]?"
+#define string_r_adm_preparing_inst_text "Ruošiasi įdiegti programą"
+#define string_r_adm_reverting_changes_wait_text "Sugrąžinami pakeitimai"
+#define string_r_adm_roaming_continue_to_download_text "Telefonas veikia užsienio tinkle. Vis tiek atsisiųsti %U[39]?"
+#define string_r_adm_roaming_text "Telefonas veikia užsienio tinkle.\n"
+#define string_r_adm_sw_update_required_text "Būtina atsisiųsti."
+#define string_r_adm_verifying_sw_text "Tikrinami komponentai"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " arba ieškokite „%U“ „Ovi“ parduotuvėje“"
+#define string_r_inst_adm_can_be_resumed_text "Norėdami tęsti diegi-mą vėliau, rinkitės šią piktogramą programos meniu%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "VÄ—liau"
+#define string_r_sk_now_text "Dabar"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_70.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Membatalkan pemasangan"
+#define string_r_adm_continue_installation_later_text "Teruskan pemasangan nanti?"
+#define string_r_adm_continue_installation_text "Teruskan pemasangan %U[60]?"
+#define string_r_adm_continue_to_download_text "Muat turun %U[77]?"
+#define string_r_adm_continuing_inst_text "Meneruskan pemasangan"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nMembatalkan pemasangan."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UMuat turun %2U sekarang?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UMuat turun %2U?"
+#define string_r_adm_download_wait_text "Memuat turun dan memasang"
+#define string_r_adm_downloading_text "Memuat turun %0N daripada %1N"
+#define string_r_adm_err_conn_lost_text "Sambungan rangkaian hilang."
+#define string_r_adm_err_download_failed_text "Muat turun gagal."
+#define string_r_adm_err_installation_failed_text "Pemasangan gagal."
+#define string_r_adm_err_installation_not_enough_space_text "Tidak cukup ruang untuk memasang"
+#define string_r_adm_err_installation_unsupported_device_text "Peranti tidak disokong"
+#define string_r_adm_err_latest_installation_ok_text "Tiada pemasangan belum selesai. Pemasangan terkini berjaya."
+#define string_r_adm_err_no_pending_installations_text "Tiada pemasangan belum selesai"
+#define string_r_adm_err_unsupported_version_text "Versi Smart Installer yang tak disokong"
+#define string_r_adm_err_user_cancellation_text "Pemasangan dibatalkan"
+#define string_r_adm_error_text "Ralat telah berlaku:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Menyelesaikan pemasangan"
+#define string_r_adm_installation_ok_text "Pemasangan selesai"
+#define string_r_adm_installing_text "Memasang %0N daripada %1N"
+#define string_r_adm_launch_app_text "Pemasangan selesai. Buka %U[60]?"
+#define string_r_adm_preparing_inst_text "Menyediakan pemasangan"
+#define string_r_adm_reverting_changes_wait_text "Membalikkan perubahan"
+#define string_r_adm_roaming_continue_to_download_text "Telefon sedang merayau. Muat turun %U[56] juga?"
+#define string_r_adm_roaming_text "Telefon sedang merayau.\n"
+#define string_r_adm_sw_update_required_text "Muat turun diperlukan."
+#define string_r_adm_verifying_sw_text "Mengesahkan komponen"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " atau mencari '%U' dalam Kedai Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Untuk meneruskan pemsngn ini kmdian, pilih ikon ini dalam menu aplikasi anda%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Kemudian"
+#define string_r_sk_now_text "Sekarang"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_76.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelando a instalação"
+#define string_r_adm_continue_installation_later_text "Continuar a instalação mais tarde?"
+#define string_r_adm_continue_installation_text "Continuar a instalação de %U[60]?"
+#define string_r_adm_continue_to_download_text "Fazer download de %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuando a instalação"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelando a instalação."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UFazer download de %2U agora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UFazer download de %2U?"
+#define string_r_adm_download_wait_text "Fazendo download e instalando"
+#define string_r_adm_downloading_text "Fazendo download de %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Perda de conexão com a rede."
+#define string_r_adm_err_download_failed_text "Falha no download."
+#define string_r_adm_err_installation_failed_text "Falha na instalação."
+#define string_r_adm_err_installation_not_enough_space_text "Espaço insuficiente para instalar"
+#define string_r_adm_err_installation_unsupported_device_text "Dispositivo sem suporte"
+#define string_r_adm_err_latest_installation_ok_text "Não há instalações pendentes. A última instalação foi bem-sucedida."
+#define string_r_adm_err_no_pending_installations_text "Não há instalações pendentes"
+#define string_r_adm_err_unsupported_version_text "Versão do Smart Installer sem suporte"
+#define string_r_adm_err_user_cancellation_text "A instalação foi cancelada"
+#define string_r_adm_error_text "Ocorreu um erro:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizando instalação"
+#define string_r_adm_installation_ok_text "A instalação foi concluída"
+#define string_r_adm_installing_text "Instalando %0N de %1N"
+#define string_r_adm_launch_app_text "Instalação concluída. Abrir %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparando instalação"
+#define string_r_adm_reverting_changes_wait_text "Revertendo alterações"
+#define string_r_adm_roaming_continue_to_download_text "O telefone está em roaming. Fazer download de %U[28] mesmo assim?"
+#define string_r_adm_roaming_text "O telefone está em roaming.\n"
+#define string_r_adm_sw_update_required_text "Download necessário."
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ou encontre \"%U\" na Ovi Loja"
+#define string_r_inst_adm_can_be_resumed_text "Para contin. a instalação mais tarde, selec. este ícone no menu Aplicativos%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Mais tarde"
+#define string_r_sk_now_text "Agora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_78.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Anulare instalare în curs"
+#define string_r_adm_continue_installation_later_text "Continuaţi instalarea mai târziu?"
+#define string_r_adm_continue_installation_text "Continuaţi instalarea aplicaţiei %U[60]?"
+#define string_r_adm_continue_to_download_text "Descărcaţi %U[77]?"
+#define string_r_adm_continuing_inst_text "Se continuă instalarea"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nAnulare instalare în curs."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UDescărcaţi %2U acum?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UDescărcaţi %2U?"
+#define string_r_adm_download_wait_text "Descărcare şi instalare în curs"
+#define string_r_adm_downloading_text "Se descarcă %0N din %1N"
+#define string_r_adm_err_conn_lost_text "Conexiune cu reţeaua întreruptă."
+#define string_r_adm_err_download_failed_text "Eroare la descărcare."
+#define string_r_adm_err_installation_failed_text "Eroare la instalare."
+#define string_r_adm_err_installation_not_enough_space_text "Spaţiu insuficient pentru instalare"
+#define string_r_adm_err_installation_unsupported_device_text "Aparat neacceptat"
+#define string_r_adm_err_latest_installation_ok_text "Nicio instalare în aşteptare. Ultima instalare a reuşit."
+#define string_r_adm_err_no_pending_installations_text "Nicio instalare în aşteptare"
+#define string_r_adm_err_unsupported_version_text "Versiune Smart Installer neacceptată"
+#define string_r_adm_err_user_cancellation_text "Instalare anulată"
+#define string_r_adm_error_text "Eroare:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizare instalare în curs"
+#define string_r_adm_installation_ok_text "Instalare terminată"
+#define string_r_adm_installing_text "Se instalează %0N din %1N"
+#define string_r_adm_launch_app_text "Instalare finaliyată. Deschideţi %U[60]?"
+#define string_r_adm_preparing_inst_text "Pregătire instalare în curs"
+#define string_r_adm_reverting_changes_wait_text "Renunţare la modificări în curs"
+#define string_r_adm_roaming_continue_to_download_text "Telefon în roaming. Descărcaţi %U[60]?"
+#define string_r_adm_roaming_text "Telefon în roaming.\n"
+#define string_r_adm_sw_update_required_text "Descărcare necesară."
+#define string_r_adm_verifying_sw_text "Verificare componente în curs"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " sau căutaţi %U[09] în Magazinul Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Pentru a relua instalarea, selectati această pictogramă din meniul Aplicaţii%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Mai târziu"
+#define string_r_sk_now_text "Acum"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_79.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Instalacija se poništava"
+#define string_r_adm_continue_installation_later_text "Nastaviti instalaciju kasnije?"
+#define string_r_adm_continue_installation_text "Nastaviti instalaciju aplikacije %U[60]?"
+#define string_r_adm_continue_to_download_text "Preuzeti %U[77]?"
+#define string_r_adm_continuing_inst_text "Instaliranje se nastavlja"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nInstalacija se poništava."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UOdmah preuzeti %2U?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UPreuzeti %2U?"
+#define string_r_adm_download_wait_text "Preuzima se i instalira"
+#define string_r_adm_downloading_text "Preuzima se %0N od %1N"
+#define string_r_adm_err_conn_lost_text "Mrežna veza je prekinuta."
+#define string_r_adm_err_download_failed_text "Preuzimanje nije uspelo."
+#define string_r_adm_err_installation_failed_text "Instalacija nije uspela."
+#define string_r_adm_err_installation_not_enough_space_text "Nema dovoljno prostora za instaliranje"
+#define string_r_adm_err_installation_unsupported_device_text "Uređaj nije podržan"
+#define string_r_adm_err_latest_installation_ok_text "Nema instalacija na Äekanju. Poslednja instalacija je bila uspeÅ¡na."
+#define string_r_adm_err_no_pending_installations_text "Nema instalacija na Äekanju"
+#define string_r_adm_err_unsupported_version_text "Verzija programa Smart Installer nije podržana"
+#define string_r_adm_err_user_cancellation_text "Instalacija je poništena"
+#define string_r_adm_error_text "Došlo je do greške:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Instalacija se dovršava"
+#define string_r_adm_installation_ok_text "Instalacija je završena"
+#define string_r_adm_installing_text "Instalira se %0N od %1N"
+#define string_r_adm_launch_app_text "Instaliranje je završeno. Otvoriti %U[60]?"
+#define string_r_adm_preparing_inst_text "Instalacija se priprema"
+#define string_r_adm_reverting_changes_wait_text "Promene se poništavaju"
+#define string_r_adm_roaming_continue_to_download_text "Telefon je u romingu. Ipak preuzeti %U[60]?"
+#define string_r_adm_roaming_text "Telefon je u romingu.\n"
+#define string_r_adm_sw_update_required_text "Potrebno je preuzimanje."
+#define string_r_adm_verifying_sw_text "Komponente se proveravaju"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " ili nađite '%U' u Ovi prodavnici"
+#define string_r_inst_adm_can_be_resumed_text "Da biste kasnije nastavili instaliranje, izaberite ovu ikonu u meniju aplikacija%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Kasnije"
+#define string_r_sk_now_text "Odmah"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_83.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Cancelando instalación"
+#define string_r_adm_continue_installation_later_text "¿Continuar la instalación después?"
+#define string_r_adm_continue_installation_text "¿Continuar la instalación de %U[60]?"
+#define string_r_adm_continue_to_download_text "¿Descargar %U[77]?"
+#define string_r_adm_continuing_inst_text "Continuando la instalación"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nCancelando instalación."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U ¿Descargar %2U ahora?"
+#define string_r_adm_dl_prompt_text "%0U\n%1U ¿Descargar %2U?"
+#define string_r_adm_download_wait_text "Descargando e instalando"
+#define string_r_adm_downloading_text "Descargando %0N de %1N"
+#define string_r_adm_err_conn_lost_text "Se perdió la conexión a la red."
+#define string_r_adm_err_download_failed_text "Falló la descarga."
+#define string_r_adm_err_installation_failed_text "Falló la instalación."
+#define string_r_adm_err_installation_not_enough_space_text "No hay suficiente espacio para instalar"
+#define string_r_adm_err_installation_unsupported_device_text "No se admite el dispositivo"
+#define string_r_adm_err_latest_installation_ok_text "No hay instalaciones pendientes. La última instalación fue correcta."
+#define string_r_adm_err_no_pending_installations_text "No hay instalaciones pendientes"
+#define string_r_adm_err_unsupported_version_text "Versión de Smart Installer no admitida"
+#define string_r_adm_err_user_cancellation_text "Instalación cancelada"
+#define string_r_adm_error_text "Se produjo un error:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Finalizando instalación"
+#define string_r_adm_installation_ok_text "Instalación finalizada"
+#define string_r_adm_installing_text "Instalando %0N de %1N"
+#define string_r_adm_launch_app_text "Instalación finalizada. ¿Abrir %U[60]?"
+#define string_r_adm_preparing_inst_text "Preparando instalación"
+#define string_r_adm_reverting_changes_wait_text "Revirtiendo cambios"
+#define string_r_adm_roaming_continue_to_download_text "El teléfono está en roaming. ¿Descargar %U[47] de todos modos?"
+#define string_r_adm_roaming_text "El teléfono está en roaming.\n"
+#define string_r_adm_sw_update_required_text "Requiere descarga."
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " o busque '%U' en la Tienda Ovi"
+#define string_r_inst_adm_can_be_resumed_text "P/cont. desp. con ins­talación, sel. icono en menú aplicación%U"
+#define string_r_kb "KB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Después"
+#define string_r_sk_now_text "Ahora"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_93.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Триває ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑтановленнÑ"
+#define string_r_adm_continue_installation_later_text "Продовжити вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ–Ð·Ð½Ñ–ÑˆÐµ?"
+#define string_r_adm_continue_installation_text "Продовжити вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ \"%U[38]\"?"
+#define string_r_adm_continue_to_download_text "Завантажити %U[77]?"
+#define string_r_adm_continuing_inst_text "ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð²ÑтановленнÑ"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nТриває ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑтановленнÑ."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UЗавантажити %2U зараз?"
+#define string_r_adm_dl_prompt_text "%0U\n%1UЗавантажити %2U?"
+#define string_r_adm_download_wait_text "Триває Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¹ уÑтановленнÑ"
+#define string_r_adm_downloading_text "Триває Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ %0N із %1N"
+#define string_r_adm_err_conn_lost_text "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· мережею втрачено."
+#define string_r_adm_err_download_failed_text "Помилка завантаженнÑ."
+#define string_r_adm_err_installation_failed_text "Помилка вÑтановленнÑ."
+#define string_r_adm_err_installation_not_enough_space_text "ÐедоÑтатньо міÑÑ†Ñ Ð´Ð»Ñ Ð²ÑтановленнÑ"
+#define string_r_adm_err_installation_unsupported_device_text "ПриÑтрій не підтримуєтьÑÑ"
+#define string_r_adm_err_latest_installation_ok_text "Ðемає незавершених уÑтановлень. ОÑтаннє вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ уÑпішно."
+#define string_r_adm_err_no_pending_installations_text "Ðемає незавершених уÑтановлень"
+#define string_r_adm_err_unsupported_version_text "Ðепідтримувана верÑÑ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ вÑтановленнÑ"
+#define string_r_adm_err_user_cancellation_text "УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑкаÑовано"
+#define string_r_adm_error_text "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²ÑтановленнÑ"
+#define string_r_adm_installation_ok_text "УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾"
+#define string_r_adm_installing_text "Триває вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %0N із %1N"
+#define string_r_adm_launch_app_text "УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾. Відкрити програму \"%U[38]\"?"
+#define string_r_adm_preparing_inst_text "Триває підготовка до вÑтановленнÑ"
+#define string_r_adm_reverting_changes_wait_text "Триває ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½"
+#define string_r_adm_roaming_continue_to_download_text "Телефон у роумінгу. УÑе одно завантажити %U[39]?"
+#define string_r_adm_roaming_text "Телефон у роумінгу.\n"
+#define string_r_adm_sw_update_required_text "Потрібне завантаженнÑ."
+#define string_r_adm_verifying_sw_text "Триває перевірка компонентів"
+#define string_r_gb "Гб"
+#define string_r_inst_adm_can_be_resumed_ovi_text " або знайдіть \"%U\" в Магаз. Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Щоб продовжити вÑтан. пізніше, ви­беріть цей значок в ме­ню прогр.%U"
+#define string_r_kb "Кб"
+#define string_r_mb "Мб"
+#define string_r_sk_later_text "Пізніше"
+#define string_r_sk_now_text "Зараз"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_94.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "تنصیب منسوخ کرنا"
+#define string_r_adm_continue_installation_later_text "بعد میں تنصیب جاری رکھيں؟"
+#define string_r_adm_continue_installation_text "%U[79] کی تنصیب جاری کریں؟"
+#define string_r_adm_continue_to_download_text "%U[84] ڈاؤن لوڈ کریں؟"
+#define string_r_adm_continuing_inst_text "تنصیب جاری کررÛا ÛÛ’"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nتنصیب منسوخ کرنا"
+#define string_r_adm_dl_prompt_now_text "%0U\n%1U %2U ڈاؤن لوڈ کریں؟"
+#define string_r_adm_dl_prompt_text "%0U\n%1U %2U ڈاؤن لوڈ کریں؟"
+#define string_r_adm_download_wait_text "ڈاؤن لوڈ اور نصب کرنا"
+#define string_r_adm_downloading_text "%1N میں سے %0N ڈاؤن لوڈ کررÛا ÛÛ’"
+#define string_r_adm_err_conn_lost_text "نیٹ ورک Ú©ÛŒ کنکشن ضاâ€Ø¦ÛŒØ¹ Ûوگئی۔"
+#define string_r_adm_err_download_failed_text "ڈاؤن لوڈ ناکام رÛا۔۔"
+#define string_r_adm_err_installation_failed_text "تنصیب ناکام رÛا۔۔"
+#define string_r_adm_err_installation_not_enough_space_text "نصب کرنے کیلئے کاÙÛŒ Ø¬Ú¯Û Ù†Ûیں ÛÛ’"
+#define string_r_adm_err_installation_unsupported_device_text "Ø¢Ù„Û Ú©ÛŒ سÛولت میسر Ù†ÛÙŠÚº"
+#define string_r_adm_err_latest_installation_ok_text "کوئی ملتوی تنصیبات امیرÛÛ” جدید ترین تنصیب کاروباری سے شروع کریں"
+#define string_r_adm_err_no_pending_installations_text "کوئی ملتوی تنصیبات امیرÛ"
+#define string_r_adm_err_unsupported_version_text "اسمارٹ انسٹالر ورژن Ú©ÛŒ غیر متعاونت یاÙتÛ"
+#define string_r_adm_err_user_cancellation_text "تنصیب منسوخ کردی گئی"
+#define string_r_adm_error_text "نقص واقع Ûوتا تھا:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "تنصیب Ú©Ùˆ حتمی Ø´Ú©Ù„ دے رÛا ÛÛ’"
+#define string_r_adm_installation_ok_text "تنصیب مکمل Ûوگئی"
+#define string_r_adm_installing_text "%1N میں سے %0N نصب کررÛا ÛÛ’"
+#define string_r_adm_launch_app_text "تنصیب مکمل Ûوگیا ÛÛ’Û” %U کھولیں؟"
+#define string_r_adm_preparing_inst_text "نصب کرنے Ú©ÛŒ تیاری کررÛا ÛÛ’"
+#define string_r_adm_reverting_changes_wait_text "تبدیلیکں بازیاÙت کریں"
+#define string_r_adm_roaming_continue_to_download_text "Ùون رومنگ کررÛا ÛÛ’Û” کسی بھی حالت میں ڈاؤن لوڈ %U[35] کریں؟"
+#define string_r_adm_roaming_text "Ùون رومنگ کررÛا ÛÛ’Û”\n"
+#define string_r_adm_sw_update_required_text "ڈاؤن لوڈ درکار ÛÛ’Û”"
+#define string_r_adm_verifying_sw_text "اجزا Ú©ÛŒ توثیق کررÛا ÛÛ’"
+#define string_r_gb "گ ب"
+#define string_r_inst_adm_can_be_resumed_ovi_text " یا Ovi اسٹور میں '%U' تلاش کریں"
+#define string_r_inst_adm_can_be_resumed_text "تنصیب Ú©Ùˆ بعد میں مکمل کرنے کیلئے ÙÛرست پروگرام%U میں ÛŒÛ Ø¢Ø¦ÛŒÚ©Ù† منتخب کریں"
+#define string_r_kb "ک ب"
+#define string_r_mb "م ب"
+#define string_r_sk_later_text "بعد میں"
+#define string_r_sk_now_text "ابھی"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/loc/adm_96.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,41 @@
+CHARACTER_SET UTF8
+#define qtn_caption_string "Nokia Smart Installer ADM"
+#define qtn_loc_resource_file_1 "\\resource\\apps\\ADM"
+#define qtn_short_caption_string "Smart Installer ADM"
+#define string_r_adm_cancelling_installation_wait_text "Äang hủy cài đặt"
+#define string_r_adm_continue_installation_later_text "Tiếp tục cài đặt sau?"
+#define string_r_adm_continue_installation_text "Tiếp tục cài đặt %U[77]?"
+#define string_r_adm_continue_to_download_text "Tải vỠ%U[77]?"
+#define string_r_adm_continuing_inst_text "Äang tiếp tục cài đặt"
+#define string_r_adm_detailed_cancelling_installation_wait_text "%U\nÄang hủy cài đặt."
+#define string_r_adm_dl_prompt_now_text "%0U\n%1UTải vỠ%2U bây gi�"
+#define string_r_adm_dl_prompt_text "%0U\n%1UTải vỠ%2U?"
+#define string_r_adm_download_wait_text "Äang tải vá» và cài đặt"
+#define string_r_adm_downloading_text "Äang tải vá» %0N/%1N"
+#define string_r_adm_err_conn_lost_text "Mất kết nối mạng."
+#define string_r_adm_err_download_failed_text "Không tải vỠđược."
+#define string_r_adm_err_installation_failed_text "Không cài đặt được."
+#define string_r_adm_err_installation_not_enough_space_text "Không đủ dung lượng để cài đặt"
+#define string_r_adm_err_installation_unsupported_device_text "Thiết bị không được hỗ trợ"
+#define string_r_adm_err_latest_installation_ok_text "Không có cài đặt Ä‘ang chá». Cài đặt sau cùng đã thành công."
+#define string_r_adm_err_no_pending_installations_text "Không có cài đặt Ä‘ang chá»"
+#define string_r_adm_err_unsupported_version_text "Phiên bản Smart Installer không được hỗ trợ"
+#define string_r_adm_err_user_cancellation_text "Äã hủy cài đặt"
+#define string_r_adm_error_text "Lỗi đã xảy ra:\n%N"
+#define string_r_adm_finalizing_installation_wait_text "Äang hoàn tất cài đặt"
+#define string_r_adm_installation_ok_text "Cài đặt hoàn tất"
+#define string_r_adm_installing_text "Äang cài đặt %0N/%1N"
+#define string_r_adm_launch_app_text "Cài đặt hoàn tất. Mở %U[77]?"
+#define string_r_adm_preparing_inst_text "Äang chuẩn bị cài đặt"
+#define string_r_adm_reverting_changes_wait_text "Äang hoàn nguyên thay đổi"
+#define string_r_adm_roaming_continue_to_download_text "Äiện thoại Ä‘ang chuyển vùng. Vẫn tải vá» %U[39]?"
+#define string_r_adm_roaming_text "Äiện thoại Ä‘ang chuyển vùng.\n"
+#define string_r_adm_sw_update_required_text "Bắt buá»™c tải vá»."
+#define string_r_adm_verifying_sw_text "Äang xác minh các thành phần"
+#define string_r_gb "GB"
+#define string_r_inst_adm_can_be_resumed_ovi_text " hoặc tìm '%U' trong Cửa hàng Ovi"
+#define string_r_inst_adm_can_be_resumed_text "Äể tiếp tục cài đặt này sau, chá»n biểu tượng này trong menu ứng dụng của bạn%U"
+#define string_r_kb "kB"
+#define string_r_mb "MB"
+#define string_r_sk_later_text "Sau"
+#define string_r_sk_now_text "Bây giá»"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/sis/adm.pkg	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,146 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: 
+;
+; Installation file for ADM application
+;
+;Language - standard language definitions
+;EN,FR,GE,SP,IT,SW,DA,NO,FI,AM, EA,PO,TU,IC, YW, YH, YP,RU, YJ, YT,HU,DU,   ,CS,SK,PL,SL,TC,HK,ZH,JA, MA,   ,TH,AR,TL, BA, GL,BG,CA,HR,ET,FA,CF,EL,HE,HI,IN,   LV,LT,MS,BP,RO,SR,LS,UK,UR,VI
+&01,02,03,04,05,06,07,08,09,10,129,13,14,15,157,158,159,16,160,161,17,18,186,25,26,27,28,29,30,31,32,326,327,33,37,39,401,402,42,44,45,49,50,51,54,57,58,59,65,67,68,70,76,78,79,83,93,94,96
+
+; standard SIS file header
+#{
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM",
+"Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM","Nokia Smart Installer ADM"
+},
+(0x2002CCCE),0,24,1
+
+;Localised Vendor name
+%{
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia"
+}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v3.1, v3.2, v5.0
+[0x102032BE], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+[0x102752AE], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+[0x1028315F], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+
+;Files to install
+"\Epoc32\data\z\private\10003a3f\import\apps\ADM_reg.rsc"-"c:\private\10003a3f\import\apps\ADM_reg.rsc"
+"\Epoc32\data\z\resource\apps\adm.mif"-"c:\resource\apps\adm.mif"
+"config.ini"-"c:\private\2002CCCE\config.ini"
+
+; Localised resource files
+{
+"\epoc32\data\z\resource\apps\adm.r01"
+"\epoc32\data\z\resource\apps\adm.r02"
+"\epoc32\data\z\resource\apps\adm.r03"
+"\epoc32\data\z\resource\apps\adm.r04"
+"\epoc32\data\z\resource\apps\adm.r05"
+"\epoc32\data\z\resource\apps\adm.r06"
+"\epoc32\data\z\resource\apps\adm.r07"
+"\epoc32\data\z\resource\apps\adm.r08"
+"\epoc32\data\z\resource\apps\adm.r09"
+"\epoc32\data\z\resource\apps\adm.r10"
+"\epoc32\data\z\resource\apps\adm.r129"
+"\epoc32\data\z\resource\apps\adm.r13"
+"\epoc32\data\z\resource\apps\adm.r14"
+"\epoc32\data\z\resource\apps\adm.r15"
+"\epoc32\data\z\resource\apps\adm.r157"
+"\epoc32\data\z\resource\apps\adm.r158"
+"\epoc32\data\z\resource\apps\adm.r159"
+"\epoc32\data\z\resource\apps\adm.r16"
+"\epoc32\data\z\resource\apps\adm.r160"
+"\epoc32\data\z\resource\apps\adm.r161"
+"\epoc32\data\z\resource\apps\adm.r17"
+"\epoc32\data\z\resource\apps\adm.r18"
+"\epoc32\data\z\resource\apps\adm.r186"
+"\epoc32\data\z\resource\apps\adm.r25"
+"\epoc32\data\z\resource\apps\adm.r26"
+"\epoc32\data\z\resource\apps\adm.r27"
+"\epoc32\data\z\resource\apps\adm.r28"
+"\epoc32\data\z\resource\apps\adm.r29"
+"\epoc32\data\z\resource\apps\adm.r30"
+"\epoc32\data\z\resource\apps\adm.r31"
+"\epoc32\data\z\resource\apps\adm.r32"
+"\epoc32\data\z\resource\apps\adm.r326"
+"\epoc32\data\z\resource\apps\adm.r327"
+"\epoc32\data\z\resource\apps\adm.r33"
+"\epoc32\data\z\resource\apps\adm.r37"
+"\epoc32\data\z\resource\apps\adm.r39"
+"\epoc32\data\z\resource\apps\adm.r401"
+"\epoc32\data\z\resource\apps\adm.r402"
+"\epoc32\data\z\resource\apps\adm.r42"
+"\epoc32\data\z\resource\apps\adm.r44"
+"\epoc32\data\z\resource\apps\adm.r45"
+"\epoc32\data\z\resource\apps\adm.r49"
+"\epoc32\data\z\resource\apps\adm.r50"
+"\epoc32\data\z\resource\apps\adm.r51"
+"\epoc32\data\z\resource\apps\adm.r54"
+"\epoc32\data\z\resource\apps\adm.r57"
+"\epoc32\data\z\resource\apps\adm.r58"
+"\epoc32\data\z\resource\apps\adm.r59"
+"\epoc32\data\z\resource\apps\adm.r65"
+"\epoc32\data\z\resource\apps\adm.r67"
+"\epoc32\data\z\resource\apps\adm.r68"
+"\epoc32\data\z\resource\apps\adm.r70"
+"\epoc32\data\z\resource\apps\adm.r76"
+"\epoc32\data\z\resource\apps\adm.r78"
+"\epoc32\data\z\resource\apps\adm.r79"
+"\epoc32\data\z\resource\apps\adm.r83"
+"\epoc32\data\z\resource\apps\adm.r93"
+"\epoc32\data\z\resource\apps\adm.r94"
+"\epoc32\data\z\resource\apps\adm.r96"
+}-"c:\resource\apps\adm.rsc"
+
+"\Epoc32\release\armv5\urel\ADM.exe"-"c:\sys\bin\ADM.exe"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADM.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main application class
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "ADMApplication.h"
+
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CADMApplication;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMAppUi.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,1483 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CADMAppUi implementation
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <ADM.rsg>
+#include <ADM.mbg>
+#include <bacline.h>
+#include <COEUTILS.H>
+#include <mmtsy_names.h>    // Phone information
+#include <hal.h>            // Hal::GetData()
+#include <PathInfo.h>       // PathInfo::
+#include <sysutil.h>        // SysUtil::DiskSpaceBelowCriticalLevel(), GetSWVersion()
+#include <stringloader.h>   // StringLoader::LoadLC()
+#include <aknquerydialog.h>
+#include <aknnotewrappers.h>
+#include <avkon.rsg>        // Default dialogs
+#include <BAUTILS.H>
+#include <rconnmon.h>
+#include "ADM.hrh"
+#include "ADM.pan"
+#include "ADMApplication.h"
+#include "ADMAppUi.h"
+#include "ADMStateMachine.h"
+#include "ADMXmlParser.h"
+#include "ADMSisParser.h"
+#include "ADMPackageInfo.h"
+#include "ADMDownloadHandler.h"
+#include "ADMInstallManager.h"
+#include "networkstatuslistener.h"
+
+#include "debug.h"
+#include "globals.h"
+#include "config.h"
+#include "macros.h"
+#include "utils.h"
+
+#ifdef USE_LOGFILE
+_LIT(KADMLogDir, "ADM");
+_LIT(KADMLogFileName, "log.txt" );
+_LIT(KADMLogFile, "?:\\logs\\ADM\\log.txt");
+#endif
+
+/**
+ * Download path for dependency packages
+ */
+_LIT(KADMFolderPath,"?:\\system\\adm\\");
+
+// ============================ MEMBER FUNCTIONS ===============================
+void CADMAppUi::ConstructL()
+	{
+	LOG( "+ CADMAppUi::ConstructL()" );
+
+	// Hide from application task list
+	HideApplicationFromFSW();
+
+	// Initialise app UI with standard value.
+	BaseConstructL( ENoScreenFurniture /*CAknAppUi::EAknEnableSkin*/);
+	StatusPane()->MakeVisible(EFalse);
+
+	// Set download path
+	TChar systemDrive;
+	RFs::DriveToChar(RFs::GetSystemDrive(), systemDrive);
+	HBufC* downloadPath = KADMFolderPath().AllocLC();
+	downloadPath->Des()[0] = systemDrive;
+
+	// Create the state machine
+	iStateMachine = CStateMachine::NewL(*this, *downloadPath);
+
+	iRfs = iEikonEnv->FsSession();
+
+	iOviStoreRunning = CUtils::OviStoreRunning();
+
+	// Process command line arguments
+	ProcessCommandLineArgsL();
+
+	iProgress = CProgressDialog::NewL(*this);
+
+	// If we don't have exit reason set, we can show the progress already
+	if (iExitReason == EExitNoError)
+		{
+		// Show progress bar with little progress already early on
+		const TInt waitNoteRes = iResumingInstallation
+				? R_ADM_CONTINUING_INST_TEXT
+				: R_ADM_VERIFYING_SW_TEXT;
+		ShowGlobalProgressL( waitNoteRes, 1, 10 );
+		}
+
+	iSwVersion = HBufC::NewL(KSysUtilVersionTextLength);
+
+	// Initialize the telephone server
+	User::LeaveIfError( iTelServer.Connect() );
+	User::LeaveIfError( iTelServer.LoadPhoneModule( KMmTsyModuleName ) );
+	User::LeaveIfError( iPhone.Open( iTelServer, KMmTsyPhoneName ) );
+
+	// Get device information
+	User::LeaveIfError( GetPhoneInformation() );
+
+	// Ignore the return code. Default URL will be used if error happens (leaves if no memory)
+	ReadConfigurationL();
+
+	ReadStaticResourcesL();
+
+	// Kick the state machine running
+	iStateMachine->Start();
+
+	CleanupStack::PopAndDestroy(downloadPath);
+
+	LOG( "- CADMAppUi::ConstructL()" );
+	}
+
+// -----------------------------------------------------------------------------
+// CADMAppUi::CADMAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CADMAppUi::CADMAppUi() :
+		iExitReason(EExitNoError),
+		iIAP(KInvalidIapId),
+		iIsResumeRequired(ETrue)
+	{
+	// disable possible transition effects
+	SetFullScreenApp(EFalse);
+	INIT_DEBUG_LOG( KADMLogFile(), KADMLogDir, KADMLogFileName );
+	LOG( "CADMAppUi::CADMAppUi()" );
+	// Restore our thread priority to normal, we have been launched
+	// with EPriorityBackground
+//	RThread().SetPriority(EPriorityNormal);
+	}
+
+// -----------------------------------------------------------------------------
+// CADMAppUi::~CADMAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CADMAppUi::~CADMAppUi()
+	{
+	LOG( "CADMAppUi::~CADMAppUi()" );
+
+	// Stop the state machine
+	iStateMachine->Stop();
+
+	// Just be make sure that all global stuff is out from the screen
+	CancelProgressBar();
+	CancelWaitNote();
+
+	iPhone.Close();
+	iTelServer.Close();
+
+	DELETE_IF_NONNULL( iQueryMessage            );
+	DELETE_IF_NONNULL( iGlobalConfirmationQuery );
+	DELETE_IF_NONNULL( iGlobalQueryObserver     );
+	delete iAppIconFilename;
+	delete iMainAppName;
+	delete iConfigUrl;
+	delete iSwVersion;
+	delete iProgress;
+	delete iDepFileName;
+	delete iSisFileName;
+	delete iStateMachine;
+
+	CLOSE_DEBUG_LOG;
+	}
+
+// -----------------------------------------------------------------------------
+// Processes the command line parameters and sets state machine initial
+// state according to the parameters.
+//
+// Requires that the state machine has been instantiated (iStateMachine).
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ProcessCommandLineArgsL()
+	{
+	LOG( "+ ProcessCommandLineArgsL()" );
+	CCommandLineArguments* args = CCommandLineArguments::NewLC();
+	const TInt count = args->Count();
+
+#ifdef FEATURE_INSTALL_RESUME
+	// If ADM is launched from the menu, we don't get any command line parameters
+	// Need to read the info from the resume info file, if it exists.
+	if (count == 1)
+		{
+		CleanupStack::PopAndDestroy(args);
+		const TInt ret = ReadResumeInfoL();
+		if (ret != KErrNone)
+			{
+			ShowGlobalNoteL(EAknGlobalErrorNote, R_ADM_ERR_NO_PENDING_INSTALLATIONS_TEXT);
+			ExitApp();
+			}
+		iResumingInstallation = ETrue;
+		return;
+		}
+#else
+	if (count == 1)
+		{
+		User::Leave( KErrNotSupported );
+		}
+#endif // FEATURE_INSTALL_RESUME
+
+	// index to the command line args, starting at 1 (0 = executable name)
+	TInt index = 1;
+
+#ifdef DO_LOG
+	for (int i = 0; i < count; i++)
+		{
+		LOG3( "Arg[%d]='%S'", i, &(args->Arg(i)) );
+		}
+#endif
+
+	TPtrC arg = args->Arg(index++);
+	TLex lex(arg);
+	TUint32 protocolVerRaw = 0;
+	TUint32 protocolVer = 0;
+	TUint32 tmp;
+	if ( lex.Val(protocolVerRaw, EDecimal) == 0)
+		{
+		LOG3( "(cmd) pVer(raw) = %d (%03x)", protocolVerRaw, protocolVerRaw );
+		protocolVer = (protocolVerRaw & KCmdLineBitProtocolVerMask);
+		}
+	else
+		{
+		LOG( "Invalid P/BVersion, PANIC" );
+		Panic(EPanicAdmCmdLineArgs);
+		}
+
+	if (protocolVer < 15)
+		{
+		// assume it's old version without the bit field support
+		LOG2( "Using old args %d", protocolVer );
+
+		// Following are the command line args passed in the old version of Bootstrap:
+		// arg 0 - ADM.exe
+		// arg 1 - Bootstrap Version
+		// arg 2 - WrapperUid
+		// arg 3 - IAP
+		// arg 4 - Sisfilename
+		// arg 5 - Depfilename (optional)
+
+		// Get the Bootstrap version
+		iBootstrapVersion = protocolVer;
+		LOG2("(cmd) BVersion: %x", iBootstrapVersion);
+
+		// Get the Wrapper uid
+		TPtrC uidPtr = args->Arg(index++);
+		lex.Assign(uidPtr);
+		TUint32 uid = 0;
+		if ( lex.Val(uid, EDecimal ) == 0)
+			{
+			LOG2("(cmd) Wrapper Uid: 0x%x", uid);
+
+			iWrapperPackageUid = TUid::Uid(uid);
+			}
+
+		// See if at least the minimum options required are provided
+		if (count < 5)
+			{
+			LOG2( "Incorrect # of arguments (%d) passed from bootstrap, PANIC", count );
+			Panic(EPanicAdmCmdLineArgs);
+			}
+
+		// Get Iap
+		TPtrC iapPtr = args->Arg(index++);
+		lex.Assign(iapPtr);
+		if ( lex.Val(iIAP, EDecimal) == 0 )
+			{
+			LOG2("(cmd) IAP: %d", iIAP);
+			iStateMachine->SetIAP(iIAP);
+			}
+
+		switch (iBootstrapVersion)
+			{
+			case 1:
+			case 2:
+				{
+				if ( count != 6 )
+					{
+					LOG2( "Incorrect # of arguments (%d) passed from bootstrap, PANIC", count );
+					Panic(EPanicAdmCmdLineArgs);
+					}
+				iDepFileName = args->Arg(index++).AllocL();
+				LOG2( "(cmd) DepFile: '%S'", iDepFileName);
+
+				iSisFileName = args->Arg(index++).AllocL();
+				LOG2( "(cmd) AppSis: '%S'", iSisFileName);
+				break;
+				}
+			case 3:
+				{
+				iDepFileName = args->Arg(index++).AllocL();
+				LOG2( "(cmd) DepFile: '%S'", iDepFileName);
+				break;
+				}
+			case 4:
+				{
+				iSisFileName = args->Arg(index++).AllocL();
+				LOG2( "(cmd) AppSis: '%S'", iSisFileName);
+				break;
+				}
+			default:
+				LOG2( "Invalid BVersion %d, PANIC", iBootstrapVersion );
+				Panic(EPanicAdmCmdLineArgs);
+				break;
+			}
+		}
+	else if (protocolVer == 15)
+		{
+		LOG( "Using new args" );
+
+		// Command line arguments, version 15 specification:
+		//
+		//31               9  8  7  6  5  4  3  2  1  0
+		// +-------------+--+--+--+--+--+--+--+--+--+--+
+		// | reserved    |  |  |  |  |  |  |           |
+		// +-------------+--+--+--+--+--+--+--+--+--+--+
+		//
+		//      value
+		// bits range description
+		//  0-3  0-15 Command line parameter protocol version:
+		//             0 = not supported
+		//             1 = ADM.exe 1 <wrapper_uid> <iap> <depfile> <sisfile>
+		//             2 = ADM.exe 2 <wrapper_uid> <iap> <depfile> <sisfile>
+		//             3 = ADM.exe 3 <wrapper_uid> <iap> <depfile>
+		//             4 = ADM.exe 4 <wrapper_uid> <iap> <sisfile> (this was used in beta1, beta2)
+		//            15 = ADM.exe 15 [parameters as specified by other bits]
+		//
+		//         since
+		//  bit  version type command line parameter present
+		//    4      4     N  Bootstrap version number
+		//    5      4     N  Wrapper UID
+		//    6      4     N  IAP
+		//    7      4     N  ADM launch condition code:
+		//                    KCmdLineCancelAdm: ADM needs to cancel installation
+		//                    KCmdLineLaunchAdm: ADM starts normally
+		//    8      4     S  Full path to dependency XML file
+		//    9      4     S  Full path to application SIS file
+		//
+		// Types:
+		//  N  Natural decimal number (range 0 - 2^32-1, fits to TUint32)
+		//  S  UTF-8 string, must NOT contains spaces or other whitespaces
+		//
+		// Command line parameters appear in the order of the bits set, i.e.
+		// if bits 4, 8, 9 are set the command line parameters are:
+		// ADM.exe 784 <bootstrap_version> <dep_file> <sis_file>
+		//
+		// If command line protocol version is less than 15, it is assumed that
+		// old version command line parameter format is used.
+		//
+
+		// new version. bit fields define which parameters are present
+		// these has to be processed in the right order: from LSB to MSB
+		if (protocolVerRaw & KCmdLineBitBootstrapVersion)
+			{
+			TPtrC arg = args->Arg(index++);
+			lex.Assign(arg);
+			if ( lex.Val(iBootstrapVersion) == 0 )
+				{
+				LOG2( "(cmd) BVersion: %x", iBootstrapVersion );
+				}
+			else
+				{
+				LOG( "Invalid BVersion" );
+				Panic(EPanicAdmCmdInvalidBootstrap);
+				}
+			}
+		if (protocolVerRaw & KCmdLineBitWrapperUid)
+			{
+			TPtrC arg = args->Arg(index++);
+			lex.Assign(arg);
+			if ( lex.Val(tmp, EDecimal) == 0 )
+				{
+				LOG2("(cmd) Wrapper Uid: 0x%x", tmp);
+				iWrapperPackageUid = TUid::Uid(tmp);
+				}
+			else
+				{
+				LOG( "Invalid wrapper package UID" );
+				Panic(EPanicAdmCmdInvalidWrapperUid);
+				}
+			}
+		if (protocolVerRaw & KCmdLineBitIAP)
+			{
+			TPtrC arg = args->Arg(index++);
+			lex.Assign(arg);
+			if ( lex.Val(iIAP, EDecimal) == 0 )
+				{
+				LOG2("(cmd) IAP: %d", iIAP);
+				iStateMachine->SetIAP(iIAP);
+				}
+			else
+				{
+				LOG( "Invalid IAP" );
+				Panic(EPanicAdmCmdInvalidIAP);
+				}
+			}
+		if (protocolVerRaw & KCmdLineBitADMLaunchControl)
+			{
+			TPtrC arg = args->Arg(index++);
+			lex.Assign(arg);
+			if ( lex.Val(tmp, EDecimal) == 0 )
+				{
+				LOG2("(cmd) LState %d", tmp);
+				switch (tmp)
+					{
+				case KCmdLineLaunchAdm:
+					// this is valid, nothing needs to be done
+					break;
+				case KCmdLineCancelAdmNoResume:
+					iIsResumeRequired = EFalse;
+					// fall-through
+				case KCmdLineCancelAdm:
+					iStateMachine->SetStartState(CStateFactory::EStatePrepareExitWithError);
+					iStateMachine->SetFailureReason(EUserCancelled);
+					break;
+				default:
+					LOG2( "Invalid LState %d, PANIC", tmp );
+					Panic(EPanicAdmCmdInvalidLaunchState2);
+					break;
+					} // switch
+				}
+			else
+				{
+				LOG( "Invalid LState, PANIC" );
+				Panic(EPanicAdmCmdInvalidLaunchState);
+				}
+			}
+		if (protocolVerRaw & KCmdLineBitFileDep)
+			{
+			iDepFileName = args->Arg(index++).AllocL();
+			LOG2( "(cmd) DepFile: '%S'", iDepFileName);
+			}
+		if (protocolVerRaw & KCmdLineBitFileSis)
+			{
+			iSisFileName = args->Arg(index++).AllocL();
+			LOG2( "(cmd) SisFile: '%S'", iSisFileName);
+			}
+		}
+	else
+		{
+		LOG2( "Invalid PVersion %d, PANIC", protocolVer );
+		Panic(EPanicAdmCmdInvalidProtocol);
+		}
+	CleanupStack::PopAndDestroy(args);
+
+	LOG3( "- ProcessCommandLineArgsL(): %d->%d", count, index );
+	}
+
+// -----------------------------------------------------------------------------
+// Read the information from the resume info file, if launched from the menu.
+// -----------------------------------------------------------------------------
+//
+TInt CADMAppUi::ReadResumeInfoL()
+	{
+	LOG( "+ ReadResumeInfo()" );
+	RArray< TPtrC > lineBuffer;
+	TInt err = 0;
+	HBufC* buffer = ReadConfigFile( iRfs, KADMResumeInfoFile, lineBuffer, err );
+
+	if ( buffer && err == KErrNone )
+		{
+		// Read the main application name
+		TPtrC namePtr = GetConfigValue( KRFieldAppName, lineBuffer, err );
+		if ( err == KErrNone )
+			{
+			iMainAppName = namePtr.AllocL();
+			LOG2( "Resuming '%S'", iMainAppName );
+			}
+
+		// Get BootstrapVersion from the resume info file
+		TPtrC bootstrapVersionLine = GetConfigValue( KRFieldBootstrap, lineBuffer, err );
+		if ( err == KErrNone )
+			{
+			TLex lex(bootstrapVersionLine);
+			if ( lex.Val(iBootstrapVersion) == 0 )
+				{
+				LOG2( "(resume) Version: %d", iBootstrapVersion );
+				}
+			else
+				{
+				// TODO: Error: Can this ever happen?!
+				//LOG( "Incorrect version in the resume info" );
+				return KErrNotSupported;
+				}
+			}
+		else
+			{
+			LOG2( "Failed to read version from the resume info (%d)", err );
+			return err;
+			}
+		}
+	else
+		{
+		LOG( "! No resume information, cannot continue" );
+		// Resume information file doesn't exist
+		return err;
+		}
+
+	// Get the Wrapper uid
+	TPtrC uidPtr = GetConfigValue( KRFieldWrapperPkgUid, lineBuffer, err );
+	if ( err == KErrNone )
+		{
+		TLex lex(uidPtr);
+		TUint32 uid = 0;
+		if ( lex.Val(uid, EDecimal ) == 0)
+			{
+			LOG2( "Wrapper Uid: 0x%x", uid );
+			iWrapperPackageUid = TUid::Uid(uid);
+			}
+		else
+			{
+			//LOG( "Incorrect wrapper UID in resume info" );
+			return KErrNotSupported;
+			}
+		}
+	else
+		{
+		LOG2( "Failed to read wrapper UID from the resume info (%d)", err );
+		return err;
+		}
+
+	switch (iBootstrapVersion)
+		{
+		case 1:
+		case 2:
+		case 3:
+			{
+			// Get AppFileName from the resume information file
+			TPtrC depFileNameLine = GetConfigValue( KRFieldDepFileName, lineBuffer, err );
+			if ( err == KErrNone )
+				{
+				iDepFileName = depFileNameLine.AllocL();
+
+				LOG2( "(resume) DepFileName = '%S'", iDepFileName );
+
+				if ( !BaflUtils::FileExists(iRfs, *iDepFileName) )
+					{
+					LOG2( "(resume) DepFile '%S' missing, cannot continue!", iDepFileName );
+					return KErrNotFound;
+					}
+				}
+			else
+				{
+				LOG2( "Failed to read from the resume info (%d)", err );
+				return err;
+				}
+			}
+			break;
+		case 4:
+		default:
+			break;
+		}
+
+	switch (iBootstrapVersion)
+		{
+		case 1:
+		case 2:
+		case 4:
+			{
+			// Get AppFileName from the resume info file
+			TPtrC appFileNameLine = GetConfigValue( KRFieldAppFileName, lineBuffer, err );
+			if ( err == KErrNone )
+				{
+				iSisFileName = appFileNameLine.AllocL();
+
+				LOG2( "(resume) AppSis = '%S'", iSisFileName );
+
+				if ( !BaflUtils::FileExists(iRfs, *iSisFileName) )
+					{
+					LOG2( "(resume) AppSis '%S' missing, cannot continue!", iSisFileName );
+					return KErrNotFound;
+					}
+				}
+			else
+				{
+				LOG2( "Failed to read from the resume info (%d)", err );
+				return err;
+				}
+			}
+			break;
+		case 3:
+		default:
+			break;
+		}
+	LOG2( "- ReadResumeInfo(): ret=%d", err );
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// Handles WindowServer events. Used to catch 'End Call' key.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination )
+	{
+	if ( aEvent.Key()->iCode == EKeyPhoneEnd )
+		{
+		iStateMachine->HandleUserResponse( EKeyPhoneEnd );
+		}
+	else
+		{
+		CEikAppUi::HandleWsEventL( aEvent, aDestination );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CADMAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EEikCmdExit:
+		case EAknSoftkeyExit:
+			Exit();
+			break;
+
+		default:
+			Panic(EPanicAdmUi);
+			break;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Callback CGlobalWaitNote
+//
+// Called when global wait note was cancelled
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::WaitNoteCancelled()
+	{
+	LOG2( "! Wait note cancelled (%d)", iStateMachine->StateIndex() );
+	iStateMachine->HandleUserResponse( EAknSoftkeyCancel );
+	}
+
+// -----------------------------------------------------------------------------
+// Callback CProgressDialog
+//
+// Called when progress dialog was cancelled
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ProgressDialogCancelled()
+	{
+	LOG2( "! Progress dialog cancelled (%d)", iStateMachine->StateIndex() );
+	iStateMachine->HandleUserResponse( EAknSoftkeyCancel );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::HandleGlobalQueryResponseL(const TInt aResponse)
+	{
+	LOG2( "+ HandleGlobalQueryResponseL(): %d", aResponse );
+	iStateMachine->HandleUserResponse( aResponse );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ShowDownloadQueryL(const TInt aResourceId, const TInt aInfoResourceId)
+	{
+	const TInt KMaxDownloadSizeMsg = 32;
+
+	if ( iGlobalQueryObserver )
+		{
+		iGlobalQueryObserver->Cancel();
+		delete iGlobalQueryObserver;
+		iGlobalQueryObserver = NULL;
+		}
+	iGlobalQueryObserver = CGlobalQueryObserver::NewL(this, EFalse);
+
+	DELETE_IF_NONNULL( iGlobalConfirmationQuery );
+	DELETE_IF_NONNULL( iQueryMessage );
+	iGlobalConfirmationQuery = CAknGlobalConfirmationQuery::NewL();
+
+	TBuf<KMaxDownloadSizeMsg> dlSizeDescr;
+	PrettyPrint( iStateMachine->TotalDownloadSize(), dlSizeDescr );
+
+	CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(3);
+	CleanupStack::PushL(strings);
+	HBufC* msg = StringLoader::LoadLC( R_ADM_SW_UPDATE_REQUIRED_TEXT, iEikonEnv );
+	HBufC* info;
+	if (aInfoResourceId != -1)
+		{
+		info = StringLoader::LoadLC( aInfoResourceId, iEikonEnv );
+		}
+	else
+		{
+		info = KNullDesC().AllocLC();
+		}
+	strings->AppendL(*msg);
+	strings->AppendL(*info);
+	strings->AppendL(dlSizeDescr);
+	iQueryMessage = StringLoader::LoadL( aResourceId, *strings, iEikonEnv );
+	CleanupStack::PopAndDestroy(3, strings); // strings, msg, info
+
+	// Cancel the progress dialog just before querying the user to reduce flicker
+	CancelProgressBar();
+
+	iGlobalConfirmationQuery->ShowConfirmationQueryL(
+		iGlobalQueryObserver->iStatus,
+		*iQueryMessage,
+		0
+		);
+	iGlobalQueryObserver->Start();
+#if 0
+	const TInt KMaxDownloadSizeMsg = 32;
+	TBuf<KMaxDownloadSizeMsg> dlSizeDescr;
+	PrettyPrint( iDepTree->GetTotalDownloadSize(), dlSizeDescr );
+	HBufC* string = StringLoader::LoadLC( aResourceId, dlSizeDescr, iEikonEnv );
+
+	CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+	const TInt ret = dlg->ExecuteLD( R_AVKON_DIALOG_EMPTY_MENUBAR, *string );
+
+	CleanupStack::PopAndDestroy(); // string
+
+	return ret;
+#endif
+	}
+
+// -----------------------------------------------------------------------------
+// Shows the application launch query dialog
+// @param aAppName Application name, caption, to be shown to the user
+// @param aIconFilename Full path to the application icon, KNullDesC if none.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ShowLaunchPromptL(const TDesC& aAppName, const TDesC& aIconFilename)
+	{
+	if ( iGlobalQueryObserver )
+		{
+		iGlobalQueryObserver->Cancel();
+		delete iGlobalQueryObserver;
+		iGlobalQueryObserver = NULL;
+		}
+	iGlobalQueryObserver = CGlobalQueryObserver::NewL(this, EFalse);
+
+	DELETE_IF_NONNULL( iGlobalConfirmationQuery );
+	DELETE_IF_NONNULL( iQueryMessage );
+	iGlobalConfirmationQuery = CAknGlobalConfirmationQuery::NewL();
+	iQueryMessage = StringLoader::LoadL( R_ADM_LAUNCH_APP_TEXT, aAppName, iEikonEnv );
+	iGlobalConfirmationQuery->ShowConfirmationQueryL(
+		iGlobalQueryObserver->iStatus,
+		*iQueryMessage,
+		0, // Softkeys
+		0, // Animation
+		aIconFilename,
+		EMbmAdmAdm,      // BitmapId
+		EMbmAdmAdm_mask  // MaskId
+		);
+	iGlobalQueryObserver->Start();
+	// Cancel the progress dialog and notes after creating the note to reduce flicker
+	CancelProgressBar();
+	CancelWaitNote();
+	}
+
+// -----------------------------------------------------------------------------
+// @param aType Global note type.
+// @param aResourceId Resource ID to text to be displayed.
+// -----------------------------------------------------------------------------
+//
+TInt CADMAppUi::ShowGlobalNoteL( const TAknGlobalNoteType aType, const TInt aResourceId )
+	{
+	// Allocate TBuf with constant length.
+	TBuf<KMaxMsgSize> text( NULL );
+
+	// Do we have a valid resource ID for the note?
+	if (aResourceId != -1)
+		{
+		// Reads a resource into a descriptor.
+		iEikonEnv->ReadResourceL( text, aResourceId );
+
+		if ( iStateMachine->FailedState() == CStateFactory::EStateLast &&
+				iExitReason != EExitNoError)
+			{
+			const TInt error = iStateMachine->FailedState() * 100 + iExitReason;
+			text.Append('\n');
+			text.AppendNum( error );
+			}
+
+		// Cancel any progress dialog
+		CancelProgressBar();
+		// Cancel any wait notes
+		CancelWaitNote();
+
+		if (aType == EAknGlobalErrorNote )
+			{
+			CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
+			return dlg->ExecuteLD( R_ADM_EXIT_QUERY, text );
+			}
+		else
+			{
+			// Create new CAknGlobalNote instance.
+			CAknGlobalNote* globalNote = CAknGlobalNote::NewLC();
+			globalNote->ShowNoteL( aType, text );
+			CleanupStack::PopAndDestroy(globalNote);
+			}
+		}
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// Shows the exit note with information, how the interrupted/cancelled installation
+// can be continued.
+// -----------------------------------------------------------------------------
+//
+TInt CADMAppUi::ShowExitNoteL()
+	{
+	TInt ret = KErrNone;
+	// The order of this table must match TExitReason order
+	static const TInt errorNotes[ELastExitState] = {
+/* EExitNoError           0 */  -1,
+/* EUserCancelled         1 */  -1, //R_ADM_INST_CAN_BE_RESUMED_TEXT,
+/* EDownloadFailed        2 */  R_ADM_ERR_DOWNLOAD_FAILED_TEXT,
+/* EInsufficientMemory    3 */  R_ADM_ERR_INSTALLATION_NOT_ENOUGH_SPACE_TEXT,
+/* EDeviceNotSupported    4 */  R_ADM_ERR_INSTALLATION_UNSUPPORTED_DEVICE_TEXT,
+/* EInstallationFailed    5 */  R_ADM_ERR_INSTALLATION_FAILED_TEXT,
+/* ERootInstallationFailed  */  -1
+	};
+
+	// First, show an error note describing what went wrong
+	if (errorNotes[iExitReason] > 0)
+		{
+		CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
+		HBufC* msg = StringLoader::LoadLC( errorNotes[iExitReason], iEikonEnv );
+		note->ExecuteLD( *msg );
+		CleanupStack::PopAndDestroy(); // msg
+		}
+
+	if (iExitReason != EDeviceNotSupported)
+		{
+		// Then show the "installation can be continued later" information
+		// but only if the device is a supported one.
+		CAknQueryDialog* dlg = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
+		HBufC* oviMsg = NULL;
+		if (iOviStoreRunning)
+			{
+			// TODO: Change ADM so root node would always contain the main application sis information
+			HBufC* caption = iStateMachine->LaunchCaption();
+			if (!caption)
+				{
+				caption = KNullDesC().AllocL();
+				}
+			oviMsg = StringLoader::LoadLC(
+					R_ADM_INST_CAN_BE_RESUMED_OVI_TEXT,
+					*caption,
+					iEikonEnv
+					);
+			}
+		else
+			{
+			oviMsg = KNullDesC().AllocLC();
+			}
+		HBufC* mainMsg = StringLoader::LoadLC(
+				R_ADM_INST_CAN_BE_RESUMED_TEXT,
+				*oviMsg,
+				iEikonEnv
+				);
+		ret = dlg->ExecuteLD( R_ADM_EXIT_QUERY, *mainMsg );
+		CleanupStack::PopAndDestroy(2, oviMsg);
+		}
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// Creates a wait note displaying given resource ID.
+// @param aResourceId Resource ID to be shown
+// @param aCancellable ETrue, if wait note is cancellable
+// @param aDetailedResourceId Additional resource ID to be shown, -1 if none
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ShowWaitNoteL( const TInt aResourceId,
+		const TBool aCancellable,
+		const TInt aDetailedResourceId
+		)
+	{
+	TBuf<KMaxMsgSize> resourceMsg;
+	CancelWaitNote();
+
+	if (aDetailedResourceId != -1)
+		{
+		iEikonEnv->ReadResourceL( resourceMsg, aDetailedResourceId );
+		HBufC* msg = StringLoader::LoadL( aResourceId, resourceMsg, iEikonEnv );
+		resourceMsg.Copy( *msg );
+		delete msg;
+		}
+	else
+		{
+		iEikonEnv->ReadResourceL( resourceMsg, aResourceId );
+		}
+
+	iWaitNote = CGlobalWaitNote::NewL(*this, aCancellable );
+	iWaitNote->ShowNoteL( resourceMsg );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ShowWaitNoteNumL( const TInt aResourceId, const TInt aCurrent, const TInt aLast)
+	{
+	CancelWaitNote();
+
+	CArrayFix<TInt>* vals = new (ELeave) CArrayFixFlat<TInt>(2);
+	CleanupStack::PushL(vals);
+	vals->AppendL(aCurrent);
+	vals->AppendL(aLast);
+	HBufC* msg = StringLoader::LoadLC( aResourceId, *vals, iEikonEnv );
+
+	iWaitNote = CGlobalWaitNote::NewL( *this, ETrue );
+	iWaitNote->ShowNoteL( *msg );
+
+	CleanupStack::PopAndDestroy(2, vals);
+	}
+
+// -----------------------------------------------------------------------------
+// Removes currently shown wait note.
+// -----------------------------------------------------------------------------//
+//
+void CADMAppUi::CancelWaitNote()
+	{
+	if ( iWaitNote )
+		{
+		TRAP_IGNORE( iWaitNote->CancelNoteL() );
+		delete iWaitNote;
+		iWaitNote = NULL;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Removes currently shown progress bar.
+// -----------------------------------------------------------------------------//
+//
+void CADMAppUi::CancelProgressBar()
+	{
+	if ( iProgress )
+		{
+		iProgress->Cancel();
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// ShowGlobalProgressL()
+//
+// aResourceId  Resource ID of the text to be shown on the progress bar
+// aStartValue  Progress bar start value
+// aEndValue    Progress bar end value
+// aCurrent     Resource string value0
+// aLast        Resource string value1
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ShowGlobalProgressL(const TInt aResourceId,
+		const TInt aStartValue, const TInt aEndValue,
+		const TInt aCurrent, const TInt aLast)
+	{
+	HBufC *msg = NULL;
+	CArrayFix<TInt>* vals = new (ELeave) CArrayFixFlat<TInt>(2);
+	CleanupStack::PushL(vals);
+
+	if (aCurrent != -1)
+		{
+		vals->AppendL(aCurrent);
+		vals->AppendL(aLast);
+
+		// Read the resource
+		msg = StringLoader::LoadLC( aResourceId, *vals, iEikonEnv );
+		}
+	else
+		{
+		// Read the resource
+		msg = iEikonEnv->AllocReadResourceLC( aResourceId );
+
+		// Special case: append the application name to the string
+		if (aResourceId == R_ADM_CONTINUING_INST_TEXT)
+			{
+			if (iMainAppName && iMainAppName->Length() > 0)
+				{
+				HBufC* newmsg = HBufC::NewL(msg->Length() + iMainAppName->Length() + 3);
+				newmsg->Des().Copy(*msg);
+				newmsg->Des().Append('\n');
+				newmsg->Des().Append('\'');
+				newmsg->Des().Append(*iMainAppName);
+				newmsg->Des().Append('\'');
+				CleanupStack::PopAndDestroy(msg);
+				msg = newmsg;
+				CleanupStack::PushL(msg);
+				}
+			}
+		}
+
+	iProgress->Cancel();
+	iProgress->StartL( *msg, aEndValue );
+	iProgress->Update(aStartValue, aEndValue);
+
+	CleanupStack::PopAndDestroy(2, vals); // msg, vals
+	}
+
+// -----------------------------------------------------------------------------
+// Shows a proper wait note before the cleanup starts.
+//
+// This function MUST NOT LEAVE.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::HandleFailure()
+	{
+	LOG3( "+ CADMAppUi::HandleFailure(): %d. err=%d", iStateMachine->StateIndex(), iExitReason);
+	// Disable wait note and progress bar, if any
+	CancelProgressBar();
+	CancelWaitNote();
+
+	// Delete the dep file
+	if ( iDepFileName )
+		{
+		// We need to ignore, if delete leaves as we are currently already
+		// handling an error case.
+		// TODO: Remove if(), DeleteFile() copes with NULL filenames.
+		DeleteFile( *iDepFileName );
+		// TODO: Should we 'delete iDepFileName;' and set it to NULL?
+		}
+	TInt err = KErrNone;
+	TInt waitNoteResource;
+	TInt detailedInfoResource = -1;
+
+	switch (iExitReason)
+		{
+		case EDownloadFailed:
+			waitNoteResource = R_ADM_DETAILED_CANCELLING_INSTALLATION_WAIT_TEXT;
+			detailedInfoResource = R_ADM_ERR_CONN_LOST_TEXT;
+			break;
+		case EUserCancelled:
+		case EInstallationFailed:
+			waitNoteResource = R_ADM_CANCELLING_INSTALLATION_WAIT_TEXT;
+			break;
+		default:
+			waitNoteResource = R_ADM_REVERTING_CHANGES_WAIT_TEXT;
+			break;
+		}
+
+	// Do the cleanup depending on the state that experienced failure
+	if ( iStateMachine->FailedState() >= CStateFactory::EStateDownloadChangesFile )
+		{
+		TRAP(err, ShowWaitNoteL( waitNoteResource, EFalse, detailedInfoResource ));
+		}
+
+	LOG2( "- CADMAppUi::HandleFailure(): %d", err );
+	}
+
+// -----------------------------------------------------------------------------
+// Shows the final error message and exits application
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::ExitApp()
+	{
+	LOG3( "+ CADMAppUi::ExitApp(): %d, %d", iExitReason, iAppLaunch );
+
+	// Remove any progress bar
+	CancelProgressBar();
+	// Remove any wait note
+	CancelWaitNote();
+
+	// Just checking that iExitReason is in the proper range
+	if ( iExitReason >= 0 && iExitReason < ELastExitState )
+		{
+		// If we have an additional note to display, show it. We need to
+		// trap any leaves.
+		TRAP_IGNORE(
+				{
+				if ( iSilentInstallationOk && iExitReason == EExitNoError )
+					{
+					// If we used non-silent installation, the "Installation complete" note
+					// was already shown by S60 Installer. Don't show it here again.
+					// If the user has launched the application, don't show the note
+					if (!iNonSilentInstallation && !iAppLaunch)
+						{
+						ShowGlobalNoteL( EAknGlobalConfirmationNote, R_ADM_INSTALLATION_OK_TEXT );
+						// We need to wait 350ms to show the note as the call to Exit() below would kill
+						// the AppUi and also the note.
+						User::After(350000);
+						}
+					}
+				else
+					{
+					if (!iNonSilentInstallation)
+						{
+						// Show ADM again in task list. This is because we're using
+						// CAknQueryDialog: we don't want that to get hidden.
+						HideApplicationFromFSW(EFalse);
+						// This call returns after user has dismissed the error dialog
+						ShowExitNoteL();
+						}
+					}
+				}
+			);
+		}
+#ifdef _DEBUG
+	else
+		{
+		LOG2( "Invalid exit reason %d", iExitReason );
+		User::Invariant();
+		}
+#endif
+
+	// Set the ADM icon hidden, if everything went smoothly or any resume info file exists.
+	const TBool hideAdm = !( (iExitReason != EExitNoError || iExitReason == EDeviceNotSupported) && iIsResumeRequired );
+	const TInt err = CUtils::HideApplicationFromMenu( KUidADMApp.iUid, hideAdm );
+	LOG3( "ADM icon hidden: %d (%d)", hideAdm, err );
+
+	RunAppShutter();
+	Exit();
+
+	LOG( "- CADMAppUi::ExitApp()" );
+	}
+
+// -----------------------------------------------------------------------------
+// Delete a file pointed by aFilename.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::DeleteFile(const TDesC& aFilename)
+	{
+	iRfs.Delete(aFilename);
+	}
+
+// -----------------------------------------------------------------------------
+// Pretty prints number as text string using KiB, MiB and GiB prefixes when needed.
+//
+// aSize    Number to pretty print. Only positive integers supported.
+// aDescr   Descriptor holding the pretty printed number string.
+// -----------------------------------------------------------------------------
+//
+void CADMAppUi::PrettyPrint(const TUint32 aSize, TDes& aDescr)
+	{
+	_LIT(KFmtDecimals,  "%02d");
+	TLocale locale;
+	TUint32 size = aSize, rem;
+	TPtrC sizePrefix( iPrefixKb );
+
+	// We don't pretty print bytes because "bytes" would a new string
+	// to localize. This is just to minimize that work.
+	if (aSize < 1024*1024)
+		{
+		size /= 1024;
+		rem = (aSize * 100 / 1024) % 100;
+		}
+	else if (aSize < 1024*1024*1024)
+		{
+		size /= 1024*1024;
+		rem = (aSize * 100 / (1024*1024)) % 100;
+		sizePrefix.Set( iPrefixMb );
+		}
+	else
+		{
+		// TInt64 is needed, because aSize*100 will overflow on big values of aSize
+		TInt64 remBig( aSize );
+		remBig = ((remBig * 100) / (1024*1024*1024)) % 100;
+		rem = remBig;
+		size /= 1024*1024*1024;
+		sizePrefix.Set( iPrefixGb );
+		}
+
+	aDescr.Num(size);
+	// Add decimals only if they != .00
+	if (rem)
+		{
+		aDescr.Append(locale.DecimalSeparator());
+		aDescr.AppendFormat(KFmtDecimals, rem);
+		}
+//    if (aSize > 999)
+//        aDescr.Insert(aDescr.Length() - 6, iLocale.ThousandsSeparator());
+	aDescr.Append(sizePrefix);
+}
+
+// -----------------------------------------------------------------------------
+// Gets detailed phone information and stores it internally.
+//
+// Returns KErrNone, if fetching of machine UID was succesful
+// -----------------------------------------------------------------------------
+//
+TInt CADMAppUi::GetPhoneInformation()
+	{
+	LOG( "+ GetPhoneInformation()" );
+
+	//TODO: Remove unnecessary information, currently MachineUid is only needed
+	TInt r = HAL::Get(HALData::EMachineUid, iMachineUid);
+#if _DEBUG
+	HAL::Get(HALData::EManufacturer, iManufacturer);
+	HAL::Get(HALData::EManufacturerHardwareRev, iHardwareRev);
+	HAL::Get(HALData::EManufacturerSoftwareRev, iSoftwareRev);
+	HAL::Get(HALData::EModel, iModel);
+	HAL::Get(HALData::EDeviceFamily, iDeviceFamily);
+	HAL::Get(HALData::EDeviceFamilyRev, iDeviceFamilyRev);
+	HAL::Get(HALData::ECPUArch, iCpuArch);
+	HAL::Get(HALData::ECPUABI, iCpuABI );
+	HAL::Get(HALData::ECPUSpeed, iCpuSpeed );
+#endif
+	TPtr swVer(iSwVersion->Des());
+	SysUtil::GetSWVersion(swVer);
+
+	LOG8_2( "  machine uid = 0x%08x",       iMachineUid);
+#if _DEBUG
+	LOG8_2( "  model = 0x%08x",             iModel);
+	LOG8_2(	"  manufacturer	= %d",			iManufacturer);
+	LOG8_2(	"  hardware	rev	= %d",			iHardwareRev);
+	LOG8_2(	"  software	rev	= %d",			iSoftwareRev);
+	LOG8_2(	"  device family = %d",			iDeviceFamily);
+	LOG8_2(	"  device family rev = %d",		iDeviceFamilyRev);
+	LOG8_2(	"  CPU architecture	= 0x%08x",	iCpuArch);
+	LOG8_2(	"  CPU ABI = %d",				iCpuABI);
+	LOG8_2(	"  CPU speed = %d",				iCpuSpeed);
+#endif
+	LOG2("	Sw Ver = %S",					iSwVersion);
+
+	LOG8_2( "- GetPhoneInformation (%d)", r);
+
+	return r;
+	}
+
+// -----------------------------------------------------------------------------
+// Returns true if the phone is roaming
+// -----------------------------------------------------------------------------
+//
+TBool CADMAppUi::RegisteredRoaming()
+	{
+	LOG( "+ RegisteredRoaming()" );
+	// Get registeration status
+	TRequestStatus status;
+	TInt ret = EFalse; // Default to not roaming
+
+	RMobilePhone::TMobilePhoneRegistrationStatus regStatus(
+		RMobilePhone::ERegistrationUnknown );
+	iPhone.GetNetworkRegistrationStatus( status, regStatus );
+	User::WaitForRequest( status );
+
+	if ( RMobilePhone::ERegisteredRoaming == regStatus )
+		{
+		ret = ETrue;
+		}
+
+	LOG2( "- RegisteredRoaming: %d", ret );
+
+	return ret;
+	}
+#if 0
+// ---------------------------------------------------------------------------
+// CADMAppUi::PhoneMemoryDrive
+//
+// @return Drive number for phone memory.
+// ---------------------------------------------------------------------------
+//
+TInt CADMAppUi::PhoneMemoryDrive()
+	{
+	TInt res = 0;
+	TInt err = RFs::CharToDrive( PathInfo::PhoneMemoryRootPath()[0], res );
+	__ASSERT_ALWAYS( !err, Panic( EPanicAdmFileSystemAccess ) );
+
+	return res;
+	}
+
+// ---------------------------------------------------------------------------
+// CADMAppUi::MemoryCardDrive
+//
+// @return Drive number for memory card.
+// ---------------------------------------------------------------------------
+//
+TInt CADMAppUi::MemoryCardDrive()
+	{
+	TInt res = 0;
+	TInt err = RFs::CharToDrive( PathInfo::MemoryCardRootPath()[0], res );
+	__ASSERT_ALWAYS( !err, Panic( EPanicAdmFileSystemAccess ) );
+
+	return res;
+	}
+#endif
+// ---------------------------------------------------------------------------
+// CADMAppUi::ReadStaticResourcesL
+//
+// @return KErrNone if configuration was read correctly, error code otherwise
+// ---------------------------------------------------------------------------
+//
+void CADMAppUi::ReadStaticResourcesL()
+	{
+	iEikonEnv->ReadResourceL( iPrefixKb, R_KB );
+	iEikonEnv->ReadResourceL( iPrefixMb, R_MB );
+	iEikonEnv->ReadResourceL( iPrefixGb, R_GB );
+	}
+
+// ---------------------------------------------------------------------------
+// CADMAppUi::UsingWLAN
+//
+// @return ETrue, if selected bearer is WLAN
+// ---------------------------------------------------------------------------
+//
+TBool CADMAppUi::UsingWLAN()
+	{
+	return BearerType() == EBearerWLAN;
+	}
+
+// ---------------------------------------------------------------------------
+// CADMAppUi::CheckBearerTypeL
+//
+// @return Bearer type
+// ---------------------------------------------------------------------------
+//
+TInt CADMAppUi::BearerType()
+	{
+	LOG2( "+ BearerType(): IAP=%d", iIAP );
+	RConnectionMonitor monitor;
+	TRequestStatus status = KRequestPending;
+	TUint iapId(0);
+	TInt bearer( 0 );
+	TUint count;
+	TUint ids[ 15 ];
+
+	TRAPD( err, monitor.ConnectL() );
+	if (err != KErrNone )
+		{
+		LOG2( "BearerType: Connect to RConnMon failed. %d", err );
+		return err;
+		}
+
+	// Get the connection count
+	monitor.GetConnectionCount( count, status );
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+		{
+		LOG2( "GetConnCount failed. %d", status.Int() );
+		monitor.Close();
+		return status.Int();
+		}
+#ifdef DO_LOG
+	else
+		{
+		LOG2( "BearerType: %d connections:", count);
+		}
+#endif
+
+	// Get the connection info for each connection
+	TUint numSubConnections;
+	TInt i;
+
+	for ( i = 1; i <= count; i++ )
+		{
+		TInt ret = monitor.GetConnectionInfo( i, ids[ i-1 ], numSubConnections );
+		if ( ret == KErrNone )
+			{
+			LOG3( "BearerType: ConnID[%d] = %d" , i, ids[ i-1 ] );
+			// Get the IAP Id of the connection
+			monitor.GetUintAttribute( ids[ i-1 ], 0, KIAPId, iapId, status );
+			User::WaitForRequest( status );
+			if ( status.Int() != KErrNone )
+				{
+				LOG2( "GetIapId failed. %d", status.Int() );
+				// try next connection
+				continue;
+				}
+#ifdef DO_LOG
+			else
+				{
+				LOG3( "BearerType: IapId = %d, IAP = %d", iapId, iIAP );
+				}
+#endif
+			// If the IAP matches with the one set in ADM
+			// iIAP is initialized to KInvalidIapId
+			if ( iapId == iIAP || iIAP == KInvalidIapId )
+				{
+#ifdef DO_LOG
+				LOG2( "BearerType: Getting bearer for IapId %d", iapId );
+#endif
+				// Get the Bearer of the IAP Id.
+				monitor.GetIntAttribute( ids[ i-1 ], 0, KBearer, bearer, status );
+				User::WaitForRequest( status );
+				if ( status.Int() != KErrNone )
+					{
+					LOG2( "BearerType: GetBearerType failed. %d", status.Int() );
+					// try next connection
+					continue;
+					}
+#ifdef DO_LOG
+				else
+					{
+					LOG3( "BearerType: IapId %d: bearer = %d", iapId, bearer );
+					}
+#endif
+				// we found matching IAP ID, break out of the loop
+				break;
+				}
+			}
+		else
+			{
+			LOG2( "GetConnInfo failed. %d", ret );
+			return ret;
+			}
+		}
+	TBuf<KConnMonMaxStringAttributeLength> iapName;
+
+	// Get the string attrib of the IAP Id
+	monitor.GetStringAttribute( ids[ i-1 ], 0, KIAPName, iapName, status );
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+		{
+		LOG2( "BearerType: GetStrAttr failed. %d", status.Int() );
+		}
+	else
+		{
+		LOG5( "* Selected IAP %d (%d), conn %d '%S'", iapId, bearer, ids[i-1], &iapName );
+		}
+
+	// Close the RConnMon object
+	monitor.Close();
+
+	LOG2( "- BearerType(): %d", bearer );
+
+	return bearer;
+	}
+
+// ---------------------------------------------------------------------------
+// CADMAppUi::ReadConfiguration
+//
+// @return KErrNone if configuration was read correctly, error code otherwise
+// ---------------------------------------------------------------------------
+//
+TInt CADMAppUi::ReadConfigurationL()
+	{
+	TFileName configFile;
+	RArray< TPtrC > lineBuffer;
+	TInt ret( KErrNone );
+
+	// Find the configuration file from the private directory
+	ret = iRfs.PrivatePath(configFile);
+	if (ret == KErrNone)
+		{
+		TBuf<2> appDrive;
+		// Insert the drive of the running application
+		appDrive.Copy(Application()->AppFullName().Left(2));
+		configFile.Insert(0, appDrive);
+		// Append the configuration file name
+		configFile.Append(KConfigFile);
+
+		LOG2( "configFile = %S", &configFile );
+
+		HBufC* buffer = ReadConfigFile(iRfs, configFile, lineBuffer, ret );
+
+		if ( buffer && ret == KErrNone )
+			{
+			TPtrC line = GetConfigValue( KCfgTagUrl, lineBuffer, ret );
+			if ( ret == KErrNone )
+				{
+				iConfigUrl = HBufC8::NewL(line.Length());
+				iConfigUrl->Des().Copy(line);
+				LOG8_2( "configUrl = %S", iConfigUrl );
+				}
+			delete buffer;
+			}
+		}
+		if ( !iConfigUrl )
+			{
+			// Error occured while reading the configuration, use default URL
+			iConfigUrl = HBufC8::NewL(KDefaultDepServerUrl().Length());
+			*iConfigUrl = KDefaultDepServerUrl;
+			LOG8_2( "configUrl = %S (default)", iConfigUrl );
+			}
+
+	lineBuffer.Close();
+
+	return ret;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMApplication.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Main application class
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "ADM.hrh"
+#include "ADMDocument.h"
+#include "ADMApplication.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CADMApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CADMApplication::CreateDocumentL()
+	{
+	// Create an ADM document, and return a pointer to it
+	return CADMDocument::NewL(*this);
+	}
+
+// -----------------------------------------------------------------------------
+// CADMApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid CADMApplication::AppDllUid() const
+	{
+	// Return the UID for the ADM application
+	return KUidADMApp;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMDocument.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CADMDocument implementation
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "ADMAppUi.h"
+#include "ADMDocument.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CADMDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CADMDocument* CADMDocument::NewL(CEikApplication& aApp)
+	{
+	CADMDocument* self = NewLC(aApp);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CADMDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CADMDocument* CADMDocument::NewLC(CEikApplication& aApp)
+	{
+	CADMDocument* self = new (ELeave) CADMDocument(aApp);
+
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CADMDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CADMDocument::ConstructL()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CADMDocument::CADMDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CADMDocument::CADMDocument(CEikApplication& aApp) :
+	CAknDocument(aApp)
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CADMDocument::~CADMDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CADMDocument::~CADMDocument()
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CADMDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CADMDocument::CreateAppUiL()
+	{
+	// Create the application user interface, and return a pointer to it;
+	// the framework takes ownership of this object
+	return new (ELeave) CADMAppUi;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMDownloadHandler.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,608 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CDownloadHandler implementation
+*
+*
+*/
+
+
+#include <aknappui.h>
+#include <COEUTILS.H>
+#include <wlanerrorcodes.h> //For download error handling
+#include <etelpckt.h>       //For download error handling
+#include <exterror.h>       //For download error handling
+#include <httpdownloadmgrcommon.h> // For download error handling (not in S60 5.0 SDK)
+
+#include "ADM.hrh"
+#include "ADMDownloadHandler.h"
+#include "ADMAppUi.h"
+#include "networkstatuslistener.h"
+
+#include "globals.h"
+#include "macros.h"
+/*
+#ifdef USE_LOGFILE
+#include "debug.h"
+#undef LOG
+#undef LOG2
+#undef LOG3
+#undef LOG4
+#undef LOG5
+#undef LOG6
+#undef LOG7
+#undef LOG8
+#undef LOG8_2
+
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); iAppUi.iLog.Write( KMsg ); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define LOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); iAppUi.iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print(_L("RDebug _L8() at line %d"), __LINE__); }
+#endif
+*/
+#ifdef USE_LOGFILE
+// Logging version
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDownloadHandler* CDownloadHandler::NewL(MDownloadClient* aDlClient, RFileLogger& aLogger, const TBool aMasterInstance)
+	{
+	CDownloadHandler* object = new ( ELeave ) CDownloadHandler(aDlClient, aLogger, aMasterInstance);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	CleanupStack::Pop();
+	return object;
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDownloadHandler::CDownloadHandler(MDownloadClient* aDlClient, RFileLogger& aLogger, const TBool aMasterInstance) :
+	iLog(aLogger),
+	iDlClient(aDlClient),
+	iMasterInstance(aMasterInstance),
+	iPtrToResponseBodyFileName(0,0)
+	{
+	}
+#else
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDownloadHandler* CDownloadHandler::NewLC(MDownloadClient* aDlClient, const TBool aMasterInstance)
+	{
+	CDownloadHandler* object = new ( ELeave ) CDownloadHandler(aDlClient, aMasterInstance);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CDownloadHandler* CDownloadHandler::NewL(MDownloadClient* aDlClient, const TBool aMasterInstance)
+	{
+	CDownloadHandler* object = CDownloadHandler::NewLC(aDlClient, aMasterInstance);
+	CleanupStack::Pop();
+	return object;
+	}
+
+CDownloadHandler::CDownloadHandler(MDownloadClient* aDlClient, const TBool aMasterInstance) :
+	iDlClient(aDlClient),
+	iMasterInstance(aMasterInstance),
+	iPtrToResponseBodyFileName(0,0)
+	{
+	}
+#endif
+
+// ---------------------------------------------------------------------------
+// Default destructor
+// ---------------------------------------------------------------------------
+//
+CDownloadHandler::~CDownloadHandler()
+	{
+	DELETE_IF_NONNULL( iUrl );
+	DELETE_IF_NONNULL( iResponseBodyFileName );
+
+	delete iNetworkStatusListener;
+	iDownloadManager.DeleteAll();
+	iDownloadManager.Close();
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDownloadHandler::ConstructL()
+	{
+//	TBool masterInstance(!(iADMAppUiObj->EikonEnv()->StartedAsServerApp()));
+	const TUid uid = {_UID3};
+	iDownloadManager.ConnectL(uid , *this, iMasterInstance );
+	iNetworkStatusListener = CNetworkStatusListener::NewL( *this );
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDownloadHandler::SetIAP(TUint32 aIAP)
+	{
+	iIAP = aIAP;
+	if ( iIAP > 0)
+		{
+		LOG2( "CDownloadHandler::SetIap(): %d", aIAP );
+		// Set the download manager to silent mode
+		iDownloadManager.SetBoolAttribute( EDlMgrSilentMode, ETrue );
+		iDownloadManager.SetIntAttribute( EDlMgrIap, iIAP );
+		iNetworkStatusListener->SetIapIdToMonitor(iIAP);
+		}
+	}
+
+#ifdef USE_LOGFILE
+void CDownloadHandler::Log(TRefByValue<const TDesC16> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list, aFmt);
+	TBuf<0x100> buf;
+	buf.AppendFormatList(aFmt, list);
+	iLog.Write(buf);
+	}
+#endif
+
+// -----------------------------------------------------------------------------
+// Callback for CNetworkStatusObserver
+//
+// Called when the connection status changes
+// -----------------------------------------------------------------------------
+//
+void CDownloadHandler::HandleNetworkStatusChangedL(const TInt aStatus)
+	{
+	LOG2( "+ HandleNetworkStatusChangedL(): %d", aStatus );
+
+	// Did we lose the network connection?
+	if (aStatus == EConnMonStatusNotAvailable)
+		{
+		iNetworkLost = ETrue;
+		}
+
+	//LOG2( "- HandleNetworkStatusChangedL(): %d", iNetworkLost );
+	}
+
+// -----------------------------------------------------------------------------
+// Processes download errors and sets aDownloadError
+//
+// @param aGlErrId Global error ID from download manager.
+// @param aErrId Error ID from download manager.
+// @param aDownloadError Reference to the download error variable function is
+//      going to set in case of known error.
+// -----------------------------------------------------------------------------
+//
+TBool CDownloadHandler::ProcessDlErrors(const TInt32 aGlErrId, const TInt32 aErrId, EDownloadError& aDownloadError)
+	{
+	if (iFetchType && (aGlErrId || aErrId))
+		LOG4( "+ ProcessDlErrors(%d, %d, %d)", aGlErrId, aErrId, aDownloadError );
+	TBool requestRestart = EFalse;
+	// Process the error codes
+	switch (aErrId)
+		{
+		case KErrNone:
+			// everything a-OK!
+			break;
+		case EConnectionFailed:
+			aDownloadError = EDlErrDownloadFailure;
+			break;
+		case ETransactionFailed:
+			// We set the download error to network failure as that's the
+			// error propagated to TState::DownloadFailed().
+			// The state machine will try to restart the download, if the
+			// error code is EDlErrDownloadFailure, but NOT for EDlErrNetworkFailure.
+			aDownloadError = EDlErrDownloadFailure;
+			requestRestart = ETrue;
+			break;
+		case EObjectNotFound:
+			aDownloadError = EDlErrFileNotFound;
+			break;
+		default:
+			LOG2( "Unhandled ErrId %d", aErrId );
+			aDownloadError = EDlErrDownloadFailure;
+			break;
+		}
+	// Process the global error code
+	switch (aGlErrId)
+		{
+		case KErrNone:
+			// everything a-OK!
+			break;
+		case KErrCancel:
+		case KErrAbort:
+			// The user has cancelled the download / IAP selection box
+			aDownloadError = EDlErrCancelled;
+			break;
+		case KErrDiskFull:
+			// Disk full
+			aDownloadError = EDlErrNotEnoughSpace;
+			break;
+		case KErrUnknown:
+			// act on KErrUnknown only, if error ID is not set
+			if (aErrId == KErrNone)
+				{
+				aDownloadError = EDlErrDownloadFailure;
+				requestRestart = ETrue;
+				}
+			break;
+		case KErrNotFound:
+		case KErrBadName:
+		case KErrNotSupported:
+		case KErrCommsLineFail:
+		case KErrTimedOut:
+		case KErrCouldNotConnect:
+		case KErrDisconnected:
+		case KErrGprsServicesNotAllowed:
+		case KErrGsmMMNetworkFailure:
+		// WLAN network related errors:
+		case KErrWlanNetworkNotFound:
+		case KErrWlanRoamingFailed:
+		case KErrWlanNetworkLost:
+#if 0
+		case KErrBadName:
+		case KErrNotSupported:
+		case KErrWlanOpenAuthFailed:
+		case KErrWlanSharedKeyAuthRequired:
+		case KErrWlanSharedKeyAuthFailed:
+		case KErrWlanWpaAuthRequired:
+		case KErrWlanIllegalEncryptionKeys:
+		case KErrWlanPskModeRequired:
+		case KErrWlanEapModeRequired:
+		case KErrWlanSimNotInstalled:
+		case KErrWlanNotSubscribed:
+		case KErrWlanAccessBarred:
+		case KErrWlanPasswordExpired:
+		case KErrWlanNoDialinPermissions:
+		case KErrWlanAccountDisabled:
+		case KErrWlanRestrictedLogonHours:
+		case KErrWlanServerCertificateExpired:
+		case KErrWlanCerficateVerifyFailed:
+		case KErrWlanNoUserCertificate:
+		case KErrWlanNoCipherSuite:
+		case KErrWlanUserRejected:
+		case KErrWlanUserCertificateExpired:
+		// less fatal, but still needs to fail the download:
+		case KErrWlanWpaAuthFailed:
+		case KErrWlan802dot1xAuthFailed:
+		case KErrWlanIllegalWpaPskKey:
+		case KErrWlanEapSimFailed:
+		case KErrWlanEapTlsFailed:
+		case KErrWlanEapPeapFailed:
+		case KErrWlanEapMsChapv2:
+		case KErrWlanEapAkaFailed:
+		case KErrWlanEapTtlsFailed:
+		case KErrWlanLeapFailed:
+		case KErrWlanEapGtcFailed:
+#endif
+			// A fatal network error has occured, don't retry the download
+			requestRestart = EFalse;
+			aDownloadError = EDlErrNetworkFailure;
+			break;
+		default:
+			if (!requestRestart)
+				{
+				// We assume all the other error codes to be 'hard' network errors
+				LOG2( "Unhandled GlErrId %d", aGlErrId );
+				aDownloadError = EDlErrNetworkFailure;
+				}
+			break;
+		}
+	if (iFetchType && aDownloadError != ENoError)
+		LOG3( "- ProcessDlErrors(): %d, %d", requestRestart, aDownloadError );
+	return requestRestart;
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CDownloadHandler::HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent )
+	{
+	TInt32 glErrId = KErrNone;
+	TInt32 errId = ENoError;
+
+	// Get error IDs
+	aDownload.GetIntAttribute( EDlAttrGlobalErrorId, glErrId );
+	aDownload.GetIntAttribute( EDlAttrErrorId, errId );
+
+#ifdef DO_LOG
+	if (iFetchType)
+		{
+		_LIT(KFmt, ", GlErrId=%6d, ErrId=%d");
+		TBuf<64> buf;
+
+		if ( ((glErrId != KErrNone) || (errId != ENoError)) && glErrId != KErrUnknown )
+			{
+			buf.AppendFormat(KFmt, glErrId, errId);
+			}
+
+		if ( ( iDownloadState != aEvent.iDownloadState ) ||
+			 ( iProgressState != aEvent.iProgressState ) )
+			{
+			iDownloadState = aEvent.iDownloadState;
+			iProgressState = aEvent.iProgressState;
+
+			LOG5( "DlSt=%5d, PrSt=%5d, L=%d%S", iDownloadState, iProgressState, iNetworkLost, &buf );
+			}
+		}
+#endif
+
+	if (iNetworkLost && !iCancelled)
+		{
+		TBuf<KMaxPath> fn;
+		aDownload.GetStringAttribute( EDlAttrDestFilename, fn );
+		iDownloadError = EDlErrNetworkFailure;
+		LOG2( "Connection lost! Cancelling '%S' download.", &fn );
+		DoHandleHttpFetchFailure(fn, glErrId, errId);
+		return;
+		}
+
+	switch ( aEvent.iDownloadState )
+		{
+		case EHttpDlCreated:
+			{
+			break;
+			}
+		case EHttpDlInprogress:
+			{
+			// Already downloaded content size
+			TInt32 downloadedSize( 0 );
+			// Total download size
+			TInt32 dlLength( 0 );
+
+			if ( aEvent.iProgressState == EHttpProgConnected )
+				{
+				TInt32 iap;
+				// Get the selected IAP (ignore any errors from Get())
+				iDownloadManager.GetIntAttribute( EDlMgrIap, iap );
+				if (iIAP != iap)
+					{
+					LOG2( "* Using IAP %d", iap );
+					iIAP = iap;
+					iDlClient->HandleIapChanged(iIAP);
+					}
+				}
+
+			aDownload.GetIntAttribute( EDlAttrDownloadedSize, downloadedSize );
+			aDownload.GetIntAttribute( EDlAttrLength, dlLength );
+
+			UpdateDownloadSpeed(downloadedSize);
+
+			iDlClient->HandleHttpFetchInProgress( downloadedSize, dlLength, iDlAvgSpeed );
+			break;
+			}
+		case EHttpDlPaused:
+		case EHttpDlFailed:
+// These two fill fold to EHttpDlFailed. We don't want to process failure events twice.
+//		case EHttpDlNonPausableNetworkLoss:
+//		case EHttpDlMultipleMOFailed:
+			{
+			TBuf<KMaxPath> buf;
+
+			aDownload.GetStringAttribute( EDlAttrDestFilename, buf );
+
+			// We just monitor the progress state and start download, when
+			// content-type is received. Any errors are ignored in this state.
+			if (
+				// we have to check error codes in EHttpProgNone state, otherwise
+				// we'll end up infinite loop, for instance, in AP selection cancellation
+				 ( aEvent.iProgressState == EHttpContentTypeReceived ) ||
+				 ( ( aEvent.iProgressState == EHttpProgNone ) && ( errId == ENoError) ) )
+				{
+				// TODO: Should we check glErrId and do Reset() before starting download?
+				// need to start the download if not already started
+				LOG( "Starting download" );
+				aDownload.Start();
+				// Start timing the download
+				iDlStartTime.UniversalTime();
+				// ignore any errors, so we can start the download
+				break;
+				}
+			if ( ProcessDlErrors(glErrId, errId, iDownloadError) )
+				{
+				if (++iConnectionAttempt < KDownloadConnectionRetries)
+					{
+					LOG4( "Restarting download due to network failure (%d: %d, %d)", iConnectionAttempt, glErrId, errId );
+					// TODO: Do we need to do a Reset() before Start()?
+					aDownload.Start();
+					// We don't restart the download timer on purpose
+					//
+					// Clear the error id so it doesn't get caught below
+					// as this is not an error situation.
+					iDownloadError = EDlErrNoError;
+					}
+				else
+					{
+					LOG4( "Too many retries, cancelling download (%d; %d, %d)", iDownloadError, glErrId, errId );
+					// iDownloadError has been set properly by ProcessDlErrors()
+					}
+				}
+			if ( iDownloadError != KErrNone )
+				{
+				if (iFetchType)
+					LOG2( "DlErr=%d", iDownloadError );
+				// Inform about it
+				DoHandleHttpFetchFailure(buf, glErrId, errId);
+				// TODO: Just in case: don't delete the download in HandleDMgrEventL
+				// That seems to cause problems on different devices.
+				// Download failed, delete it
+				// aDownload.Delete();
+				}
+			break;
+			}
+		case EHttpDlCompleted:
+			{
+			TBuf<KMaxPath> buf;
+			// Download Manager total Length of the download
+			TInt32 dlLength( 0 );
+			aDownload.GetIntAttribute( EDlAttrLength, dlLength );
+			aDownload.GetStringAttribute( EDlAttrDestFilename, buf );
+			const TInt64 dlTime = UpdateDownloadSpeed(dlLength);
+			iDlClient->HandleHttpFetchCompleted(buf, iFetchType, dlLength, iDlAvgSpeed, dlTime);
+			break;
+			}
+		case EHttpDlDeleting:
+			// Signal that we're deleting the download
+			iDlClient->HandleDownloadDeleting();
+			break;
+		default:
+			{
+			break;
+			}
+		} // switch
+	}
+
+// -----------------------------------------------------------------------------
+// Updates the average download speed counter
+// @param aBytesDownloaded Bytes downloaded during this download
+// @returns Time in microseconds spend in this download
+// -----------------------------------------------------------------------------
+//
+TInt64 CDownloadHandler::UpdateDownloadSpeed(const TInt32 aBytesDownloaded)
+	{
+	TInt64 fromDlStart = 0;
+	if (aBytesDownloaded > 0)
+		{
+		TTime time;
+		time.UniversalTime();
+
+		fromDlStart = time.MicroSecondsFrom(iDlStartTime).Int64();
+
+		// Use ifs to avoid divide-by-zero
+		if (fromDlStart > 0)
+			{
+			iDlAvgSpeed = aBytesDownloaded*1000000.0 / fromDlStart;
+			}
+		}
+	return fromDlStart;
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CDownloadHandler::CancelAllDownloads()
+	{
+	// Remove all downloads
+	iDownloadManager.DeleteAll();
+	}
+
+// -----------------------------------------------------------------------------
+// Handles client callback when download fails
+// -----------------------------------------------------------------------------
+//
+void CDownloadHandler::DoHandleHttpFetchFailure(const TDesC& aDlFilename, const TInt aGlobalErrorId, const TInt aErrorId)
+	{
+	if (!iCancelled)
+		{
+		iDlClient->HandleHttpFetchFailure(aDlFilename, aGlobalErrorId, aErrorId, iFetchType);
+		iCancelled = ETrue;
+		}
+	else
+		{
+		LOG( "DoHandleHttpFetchFailure(): Called, but already cancelled" );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CDownloadHandler::StartDownloadL(const TDesC8& aDepUrl, const TDesC& aFileName,
+								const TDesC& aDownloadPath, const TInt aFetchType)
+	{
+	__ASSERT_ALWAYS( (aDepUrl.Length() > 0) && (aFileName.Length() > 0) && (aDownloadPath.Length() > 0), User::Leave( KErrArgument) );
+
+	// Cleanup is required in case the API is called
+	// multiple times.
+	DELETE_IF_NONNULL( iUrl );
+	DELETE_IF_NONNULL( iResponseBodyFileName );
+
+	// Set the full Url after appending the filename. +1 for '/'
+	iUrl = HBufC8::NewL( aDepUrl.Length() + aFileName.Length() + 1 );
+	TPtr8 ptr(iUrl->Des());
+	ptr.Copy(aDepUrl);
+	// Append forward slash if that's missing
+	if (ptr.Right(1)[0] != '/')
+		ptr.Append('/');
+
+	ptr.Append(aFileName);
+
+	iDownloadError = EDlErrNoError;
+	iCancelled = EFalse;
+	iConnectionAttempt = 0;
+
+	// Create a new download
+	TBool retried = EFalse;
+	TBool isNewDl = ETrue;
+	iPtrToUrl.Set(*iUrl);
+
+	// Set the full response body file name
+	// based on the actual filename to be downloaded.
+	iResponseBodyFileName = HBufC::NewL(aDownloadPath.Length()+ aFileName.Length());
+	iPtrToResponseBodyFileName.Set(iResponseBodyFileName->Des());
+	iPtrToResponseBodyFileName.Copy(aDownloadPath);
+	iPtrToResponseBodyFileName.Append(aFileName);
+
+	ConeUtils::EnsurePathExistsL(iPtrToResponseBodyFileName);
+
+	TBuf<KMaxFileName> buf;
+	buf.Copy(ptr);
+retry:
+	if (aFetchType)
+		{
+		LOG2( "+ StartDownload(): '%S'", &buf );
+		LOG2( "  to '%S'", &iPtrToResponseBodyFileName );
+		}
+
+	RHttpDownload& dl = iDownloadManager.CreateDownloadL( iPtrToUrl, isNewDl );
+
+	if (isNewDl)
+		{
+		// Start download
+		dl.SetStringAttribute( EDlAttrDestFilename, iPtrToResponseBodyFileName );
+		User::LeaveIfError( dl.Start() );
+		// This timer will be reset, when content-type is received, but if it's not
+		// we need to have a sane starting time, otherwise dl avg speed calculation
+		// does not work properly.
+		iDlStartTime.UniversalTime();
+		iFetchType = aFetchType;
+		iDlAvgSpeed = 0.0;
+		}
+	else
+		{
+		LOG( "Download exists, deleting all" );
+		// Remove any downloads
+		iDownloadManager.DeleteAll();
+		if (!retried)
+			{
+			LOG( "Download exists, retrying.." );
+			retried = ETrue;
+			// we leave isNewDl set to ETrue, so we would accept any existing download for the same URL
+			goto retry;
+			}
+		LOG( "Download exists, retry failed. Panic!" );
+		User::Leave( KErrAlreadyExists );
+		}
+	}
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMGlobalProgressDialogHandler.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CGlobalProgressDialogHandler implementation
+*
+*
+*/
+
+
+#include <avkon.hrh>
+#include "ADMGlobalProgressDialogHandler.h"
+
+CGlobalProgressDialogHandler::~CGlobalProgressDialogHandler()
+	{
+	Cancel();
+	}
+
+void CGlobalProgressDialogHandler::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CGlobalProgressDialogHandler* CGlobalProgressDialogHandler::NewLC(MGlobalProgressDialogObserver& aObserver)
+	{
+	CGlobalProgressDialogHandler* self = new (ELeave) CGlobalProgressDialogHandler(aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CGlobalProgressDialogHandler* CGlobalProgressDialogHandler::NewL(MGlobalProgressDialogObserver& aObserver)
+	{
+	CGlobalProgressDialogHandler* self = CGlobalProgressDialogHandler::NewLC(aObserver);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+void CGlobalProgressDialogHandler::DoCancel()
+	{
+	// Nothing to be done here
+	}
+
+void CGlobalProgressDialogHandler::StartHandler()
+	{
+	SetActive();
+	}
+
+void CGlobalProgressDialogHandler::RunL()
+	{
+	if(iStatus == EAknSoftkeyCancel)
+		{
+		iObserver.ProcessCancelOptionL();
+		}
+	else if(iStatus == EAknSoftkeyDone)
+		{
+		iObserver.ProcessDoneOptionL();
+		}
+	else
+		{
+		}
+	Cancel();
+	}
+//EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMInstallManager.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CInstallManager implementation
+*
+*
+*/
+
+
+#include <swi/swispubsubdefs.h>
+#include <swi/sisregistrysession.h>
+#include <swi/sisregistryentry.h>
+#include <swi/sisregistrypackage.h>
+#include <e32base.h>
+#include "ADMAppUi.h"
+#include "ADMInstallManager.h"
+
+#include "macros.h"
+#include "debug.h"
+
+class TSisInfo
+	{
+public:
+	TVersion iVersion;
+	TChar iInstalledDrive;
+	RArray<TUid> iSids;
+	};
+
+_LIT8(KMIME,"x-epoc/x-sisx-app");
+
+#ifdef USE_LOGFILE
+CInstallManager* CInstallManager::NewLC(MInstallClient* aInstallClient, RFileLogger& aLogger)
+	{
+	CInstallManager* object = new ( ELeave ) CInstallManager(aInstallClient, aLogger);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CInstallManager* CInstallManager::NewL(MInstallClient* aInstallClient, RFileLogger& aLogger)
+	{
+	CInstallManager* object = CInstallManager::NewLC(aInstallClient, aLogger);
+	CleanupStack::Pop();
+	return object;
+	}
+
+CInstallManager::CInstallManager(MInstallClient* aInstallClient, RFileLogger& aLogger) :
+	CActive(EPriorityStandard),
+	iLog(aLogger),
+	iInstallClient(aInstallClient)
+	{
+	CActiveScheduler::Add(this);
+	}
+#else
+CInstallManager* CInstallManager::NewLC(MInstallClient* aInstallClient)
+	{
+	CInstallManager* object = new ( ELeave ) CInstallManager(aInstallClient);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CInstallManager* CInstallManager::NewL(MInstallClient* aInstallClient)
+	{
+	CInstallManager* object = CInstallManager::NewLC(aInstallClient);
+	CleanupStack::Pop();
+	return object;
+	}
+
+CInstallManager::CInstallManager(MInstallClient* aInstallClient) :
+	CActive(EPriorityStandard),
+	iInstallClient(aInstallClient)
+	{
+	CActiveScheduler::Add(this);
+	}
+#endif
+
+CInstallManager::~CInstallManager()
+	{
+	Cancel();
+	iLauncher.Close();
+	DELETE_IF_NONNULL( iInstallFilename );
+	}
+
+void CInstallManager::RunL()
+	{
+	if ( ((iStatus.Int() == SwiUI::KSWInstErrBusy )||(iStatus.Int() == KErrInUse) || (iStatus.Int() == KErrServerBusy) ) &&
+			((++iInstallAttempt) <= KAttemptsToAccessInstaller) )
+		{
+		LOG( "CInstallManager: Installer busy, waiting" );
+		User::After( KIterationTimer );
+		// Start asynchronous silent installation again
+		if( !IsActive() )
+			{
+			SetActive();
+			}
+
+		iStatus = KRequestPending;
+
+		iLauncher.SilentInstall( iStatus, *iInstallFilename, iOptionsPckg );
+		}
+	else
+		{
+		LOG2( "CInstallManager: Install completed (%d)", iInstallAttempt );
+		iInstallClient->HandleInstallCompletedL( iStatus.Int() );
+		}
+	}
+
+void CInstallManager::DoCancel()
+	{
+	CancelInstallation();
+	CancelUninstallation();
+	}
+
+void CInstallManager::ConstructL()
+	{
+	User::LeaveIfError(iLauncher.Connect());
+	}
+
+TBool CInstallManager::IsPackagePresentL( const TUid& aUid )
+	{
+	TSisInfo sisInfo;
+	TBool isInstalled;
+
+	sisInfo = GetPackageInfoL(aUid, isInstalled);
+
+	return isInstalled;
+	}
+
+TBool CInstallManager::GetPackageSidsL(const TUid& aUid, RArray<TUid>& aSids)
+	{
+	TSisInfo sisInfo;
+	TBool isInstalled;
+
+	sisInfo = GetPackageInfoL(aUid, isInstalled);
+
+	if (isInstalled)
+		{
+		aSids = sisInfo.iSids;
+		}
+
+	return isInstalled;
+	}
+
+TBool CInstallManager::GetPackageInstalledDriveL(const TUid& aUid, TChar& aWrapperDrive)
+	{
+	TSisInfo sisInfo;
+	TBool isInstalled;
+
+	sisInfo = GetPackageInfoL(aUid, isInstalled);
+
+	if (isInstalled)
+		{
+		aWrapperDrive = sisInfo.iInstalledDrive;
+		}
+
+	return isInstalled;
+	}
+
+TBool CInstallManager::GetPackageVersionInfoL(const TUid& aUid, TVersion& aVersion)
+	{
+	TSisInfo sisInfo;
+	TBool isInstalled;
+
+	sisInfo = GetPackageInfoL(aUid, isInstalled);
+
+	if (isInstalled)
+		{
+		aVersion = sisInfo.iVersion;
+		}
+
+	return isInstalled;
+	}
+
+TSisInfo CInstallManager::GetPackageInfoL(const TUid& aUid, TBool& aIsPkgInstalled)
+	{
+	TSisInfo sisInfo;
+	// Connect to SisRegistry to fetch Package info
+	Swi::RSisRegistrySession registrySession;
+
+	User::LeaveIfError( registrySession.Connect() );
+	CleanupClosePushL(registrySession);
+
+	aIsPkgInstalled = registrySession.IsInstalledL( aUid );
+
+	if ( aIsPkgInstalled )
+		{
+		Swi::RSisRegistryEntry entry;
+
+		// Open registry entry to get version information.
+		User::LeaveIfError(entry.Open(registrySession, aUid));
+		CleanupClosePushL(entry);
+
+		// Get the data
+		sisInfo.iVersion = entry.VersionL();
+		sisInfo.iInstalledDrive = entry.SelectedDriveL();
+		entry.SidsL(sisInfo.iSids);
+
+		CleanupStack::PopAndDestroy(&entry);
+		}
+
+	CleanupStack::PopAndDestroy(&registrySession);
+
+	return sisInfo;
+	}
+
+void CInstallManager::SilentInstallPackageL(const TDesC& aInstallFilename, const TChar aInstallDrive)
+	{
+	LOG2( "+ SilentInstallPackage(): '%S'", &aInstallFilename );
+
+	DELETE_IF_NONNULL( iInstallFilename );
+	iInstallFilename = aInstallFilename.AllocL();
+	iInstallAttempt = 0;
+
+	SwiUI::TInstallOptions Options;
+
+	Options.iUpgrade = SwiUI::EPolicyAllowed;
+	Options.iOCSP    = SwiUI::EPolicyNotAllowed;
+	RFs::DriveToChar(aInstallDrive, Options.iDrive);
+	Options.iUntrusted = SwiUI::EPolicyNotAllowed;
+	Options.iCapabilities = SwiUI::EPolicyAllowed;
+	Options.iOverwrite = SwiUI::EPolicyAllowed;
+
+	iOptionsPckg = Options;
+
+	// We have to cancel any pending async request, because we might
+	// get called during installation (user cancel, for instance)
+	if (IsActive())
+		{
+		Cancel();
+		}
+
+	// Start asynchronous silent installation
+	iStatus = KRequestPending;
+	SetActive();
+	iLauncher.SilentInstall( iStatus, *iInstallFilename, iOptionsPckg);
+	}
+
+TInt CInstallManager::SilentUnInstallPackage(const TUid& aPkgUid)
+	{
+	TInt ret;
+
+	SwiUI::TUninstallOptions Options;
+	SwiUI::TUninstallOptionsPckg OptionsPckg;
+
+	// TODO: Missing iBreakDependency: Allowed or not?
+	Options.iBreakDependency = SwiUI::EPolicyAllowed;
+	Options.iKillApp = SwiUI::EPolicyAllowed;
+	OptionsPckg = Options;
+
+	// Start silent uninstallation
+	// If connection to Install server fails,
+	// make KAttemptsToAccessInstaller connection attempts
+	for (TInt i = 0; i < KAttemptsToAccessInstaller; i++)
+		{
+		// Silent Uninstallation
+		ret = iLauncher.SilentUninstall( aPkgUid, OptionsPckg, KMIME );
+
+		// SWI returns KErrInUse & KErrServerBusy as well.
+		// SwiUI errors are returned as is
+		if ( ret == SwiUI::KSWInstErrBusy ||
+			 ret == KErrInUse ||
+			 ret == KErrServerBusy)
+			{
+			LOG3( "Installer busy, retrying (%d: %d)", i, ret );
+			// Wait a while and then retry the uninstallation again
+			User::After( KIterationTimer );
+			}
+		else
+			{
+			break;
+			}
+		}
+
+	return ret;
+	}
+
+void CInstallManager::SilentUninstallPackageAsync(const TUid& aPkgUid)
+	{
+	SwiUI::TUninstallOptions options;
+
+	// TODO: Missing iBreakDependency: Allowed or not?
+	options.iBreakDependency = SwiUI::EPolicyAllowed;
+	options.iKillApp = SwiUI::EPolicyAllowed;
+	iUninstallOptionsPckg = options;
+
+	// We have to cancel any pending async request, because we might
+	// get called during uninstallation (user cancel, for instance)
+	if (IsActive())
+		{
+		Cancel();
+		}
+
+	// Start asynchronous silent uninstallation
+	iStatus = KRequestPending;
+	SetActive();
+	iLauncher.SilentUninstall( iStatus, aPkgUid, iUninstallOptionsPckg, KMIME );
+	}
+
+void CInstallManager::CancelAll()
+	{
+	Cancel();
+	CancelInstallation();
+	CancelUninstallation();
+	}
+
+TInt CInstallManager::CancelInstallation()
+	{
+	return iLauncher.CancelAsyncRequest(SwiUI::ERequestSilentInstall);
+	}
+
+TInt CInstallManager::CancelUninstallation()
+	{
+	return iLauncher.CancelAsyncRequest(SwiUI::ERequestSilentUninstall);
+	}
+
+TInt CInstallManager::InstallPackage(const TDesC& aInstallFilename)
+	{
+	LOG2( "+ InstallPackage(): '%S'", &aInstallFilename );
+
+	DELETE_IF_NONNULL( iInstallFilename );
+	iInstallFilename = aInstallFilename.AllocL();
+
+	TInt ret;
+	SwiUI::RSWInstLauncher Launcher;
+
+	ret = Launcher.Connect();
+	if (ret != KErrNone)
+		{
+		return ret;
+		}
+
+	// Start Installation
+	// If connection to Install server fails,
+	// make KAttemptsToAccessInstaller connection attempts
+	for (TInt i = 0; i < KAttemptsToAccessInstaller; i++)
+		{
+		// Normal installation
+		ret = Launcher.Install(*iInstallFilename);
+
+		// SWI returns KErrInUse & KErrServerBusy as well.
+		// SwiUI errors are returned as is
+		if ( ret == SwiUI::KSWInstErrBusy ||
+			 ret == KErrInUse ||
+			 ret == KErrServerBusy)
+			{
+			LOG3( "Installer busy, retrying (%d: %d)", i, ret );
+			// Wait a while and then retry the uninstallation again
+			User::After( KIterationTimer );
+			}
+		else
+			{
+			break;
+			}
+		}
+	Launcher.Close();
+	return ret;
+	}
+
+TUid CInstallManager::GetPackageUidL(const TUid& aSid)
+	{
+	// Connect to SisRegistry to fetch Package info
+	Swi::RSisRegistrySession registrySession;
+	User::LeaveIfError(registrySession.Connect());
+	CleanupClosePushL(registrySession);
+
+	Swi::CSisRegistryPackage* pkg = NULL;
+	pkg = registrySession.SidToPackageL(aSid);
+
+	CleanupStack::PopAndDestroy(&registrySession);
+
+	TUid uid = TUid::Uid(0);
+	if ( pkg )
+		{
+		uid = pkg->Uid();
+		}
+
+	delete pkg;
+
+	return uid;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMPackageInfo.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,809 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CPackageInfo implementation
+*
+*
+*/
+
+
+#include <e32base.h>
+#include <f32file.h>
+#include <sysutil.h>        // SysUtil::DiskSpaceBelowCriticalLevel()
+
+#include "ADMXmlParser.h"
+#include "ADMPackageInfo.h"
+#include "ADMDownloadHandler.h"
+#include "ADMAppUi.h"
+
+#include "macros.h"
+
+//TODO: Right place?!
+// The extension of the changes file
+_LIT(KChangesExt,"_changes.xml");
+
+CPackageInfo* CPackageInfo::NewLC()
+	{
+	CPackageInfo* object = new ( ELeave ) CPackageInfo();
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CPackageInfo* CPackageInfo::NewL()
+	{
+	CPackageInfo* object = CPackageInfo::NewLC();
+	CleanupStack::Pop();
+	return object;
+	}
+
+void CPackageInfo::ConstructL()
+	{
+	}
+
+CPackageInfo::CPackageInfo() :
+	iPackageStatus(EPackageStatusUnknown),
+	iEdgeDlinkHdr(_FOFF(Edge, iEdgeDlink)),
+	iEdgeDlinkIter(iEdgeDlinkHdr)
+	{
+	}
+
+CPackageInfo::~CPackageInfo()
+	{
+	Edge* currentitem;
+
+	iEdgeDlinkIter.SetToFirst();
+
+	// Clear the memory allocated for all Edges.
+	while((currentitem = iEdgeDlinkIter++) != NULL)
+		{
+		currentitem->iEdgeDlink.Deque();
+		delete currentitem;
+		};
+
+	DELETE_IF_NONNULL( iPackageName );
+	DELETE_IF_NONNULL( iVendor );
+	DELETE_IF_NONNULL( iDateOfSubmission );
+	DELETE_IF_NONNULL( iDateOfModification );
+	DELETE_IF_NONNULL( iUrl );
+	DELETE_IF_NONNULL( iDownloadUrl );
+	DELETE_IF_NONNULL( iDepFileName );
+	DELETE_IF_NONNULL( iChangesFileName );
+	DELETE_IF_NONNULL( iSisPackageName );
+	}
+
+void CPackageInfo::AddEdgeL(CPackageInfo* aDest)
+	{
+	User::LeaveIfNull(aDest);
+
+	Edge* newEdge = Edge::NewL(this, aDest);
+	if (iEdgeDlinkHdr.IsEmpty())
+		{
+		// This is the first Edge in the list
+		iEdgeDlinkHdr.AddFirst(*newEdge);
+		iEdgeDlinkIter.SetToFirst();
+		}
+	else
+		{
+		// Append Edge to the list
+		iEdgeDlinkHdr.AddLast(*newEdge);
+		iEdgeDlinkIter.SetToLast();
+		}
+	}
+
+void CPackageInfo::VisitL(CDepTree *aDepTree)
+	{
+	// TODO: Proper error handling
+	User::LeaveIfNull(aDepTree);
+
+	Edge *e;
+	CPackageInfo *temp;
+
+	if (iVisited == BEING_VISITED)
+		{
+		// Cycle is detected
+		aDepTree->iCyclePresent = ETrue;
+		return;
+		}
+	if (iVisited == DONE_VISITED)
+		{
+		// Node already visited added to the fetch list
+		return;
+		}
+
+	iVisited = BEING_VISITED;
+
+	// Visit all the Edges first
+	while(iEdgeDlinkIter!= NULL)
+		{
+		e = iEdgeDlinkIter--;
+		temp = e->GetVertexDst();
+		temp->VisitL(aDepTree);
+		}
+	iVisited = DONE_VISITED;
+
+	aDepTree->AddFetchPackageInfo(this);
+	}
+
+void CPackageInfo::SetDepFileNameL(const TDesC& aName)
+	{
+	__ASSERT_ALWAYS( aName.Length() > 0, User::Leave( KErrArgument) );
+
+	DELETE_IF_NONNULL( iDepFileName );
+	iDepFileName = aName.AllocL();
+	}
+
+//TODO : Clean possible?
+void CPackageInfo::SetChangesFileNameL()
+	{
+	DELETE_IF_NONNULL( iChangesFileName );
+
+#ifdef FEATURE_CHANGES_USE_UID
+	//By default, use Packageuid as the Changes filename.
+	//set the length as ( PackageUIDLength (8) + Changes_ext length )
+	iChangesFileName = HBufC::NewL(8 + KChangesExt().Length());
+	TPtr nameBufPtr = iChangesFileName->Des();
+	nameBufPtr.Num(GetPackageUid(), EHex);
+	nameBufPtr.Append(KChangesExt);
+#else
+	//Use Packagename as the Changes filename.
+	// If package name is NULL, then Package UID is used as Changes file name.
+	if( GetPackageName() != NULL )
+		{
+		iChangesFileName = HBufC::NewL( GetPackageName()->Length() +
+										KChangesExt().Length() );
+		TPtr nameBufPtr = iChangesFileName->Des();
+		nameBufPtr.Copy(GetPackageName()->Des());
+
+		const TInt nameLength = GetPackageName()->LocateReverse('.');
+
+		if (nameLength != KErrNotFound)
+			{
+			//Remove the extension.
+			nameBufPtr.Delete( nameLength, GetPackageName()->Length() - nameLength);
+			}
+		nameBufPtr.Append(KChangesExt);
+		}
+	else
+		{
+		iChangesFileName = HBufC::NewL(8 + KChangesExt().Length());
+		TPtr nameBufPtr = iChangesFileName->Des();
+		nameBufPtr.Num(GetPackageUid(), EHex);
+		nameBufPtr.Append(KChangesExt);
+		}
+#endif
+	}
+
+void CPackageInfo::SetSisFileNameL(const TDesC& aName)
+	{
+	__ASSERT_ALWAYS( aName.Length() > 0, User::Leave( KErrArgument) );
+
+	DELETE_IF_NONNULL( iSisPackageName );
+	iSisPackageName = aName.AllocL();
+	}
+
+// -----------------------------------------------------------------------------
+// Creates download URL for the package. The constructed URL is stored in
+// member variable iDownloadUrl. The URL is constructed only once, the
+// subsequent calls to this return iDownloadUrl.
+//
+//     base_url/package/version/dep_file
+// i.e.
+//     http://server.somewhere.net/root/qt/4.6.1/qt_dep.xml
+// -----------------------------------------------------------------------------
+//
+HBufC8* CPackageInfo::GetDownloadUrlL()
+	{
+#ifdef FEATURE_CHANGES_DOWNLOAD_URL
+	if (iDownloadUrl)
+		{
+		return iDownloadUrl;
+		}
+
+	// Url should never be null as specifying
+	// the Url in changes file is mandatory
+	User::LeaveIfNull(iUrl);
+
+	TInt len = iUrl->Des().Length();
+#ifdef FEATURE_CHANGES_USE_UID
+	len += 8; // UID length as HEX string // iPackageName->Length();
+#else
+	len += iPackageName->Length();
+#endif
+
+	// TVersion: iMajor(8bit), iMinor(8bit), iBuild(16bit) = 255 255 65535
+	// delimiters: /qt/4.6.1/ => //../ = (len=5)
+	len += (3+3+5 + 5);
+
+	HBufC8* url = HBufC8::NewL(len);
+	TPtr8 urlPtr = url->Des();
+	// Construct the download path:
+	//     base_url/package/version/dep_file
+	// i.e.
+	//     http://server.somewhere.net/root/qt/4.6.1/qt_dep.xml
+	urlPtr.Copy(*iUrl);
+
+	// Append forward slash if that's missing
+	if (urlPtr.Right(1)[0] != '/')
+		{
+		urlPtr.Append('/');
+		}
+
+#ifdef FEATURE_CHANGES_USE_UID
+	urlPtr.AppendNum(iPackageUid, EHex);
+#else
+	urlPtr.Append(iPackageName->Des());
+#endif
+	urlPtr.Append('/');
+	urlPtr.AppendNum(iVersion.iMajor);
+	urlPtr.Append('.');
+	urlPtr.AppendNum(iVersion.iMinor);
+	urlPtr.Append('.');
+	urlPtr.AppendNum(iVersion.iBuild);
+	urlPtr.Append('/');
+
+	iDownloadUrl = url;
+
+	return url;
+#else
+	// Url should never be null as specifying
+	// the Url in changes file is mandatory
+	User::LeaveIfNull(iUrl);
+	return iUrl;
+#endif // FEATURE_CHANGES_DOWNLOAD_URL
+	}
+
+#ifdef USE_LOGFILE
+CDepTree* CDepTree::NewLC(RFileLogger& aLogger, const TDesC& aDownloadPath)
+	{
+	CDepTree* object = new ( ELeave ) CDepTree(aLogger);
+#else
+CDepTree* CDepTree::NewLC(const TDesC& aDownloadPath)
+	{
+	CDepTree* object = new ( ELeave ) CDepTree();
+#endif
+	CleanupStack::PushL( object );
+	object->ConstructL(aDownloadPath);
+	return object;
+	}
+
+#ifdef USE_LOGFILE
+CDepTree* CDepTree::NewL(RFileLogger& aLogger, const TDesC& aDownloadPath)
+	{
+	CDepTree* object = CDepTree::NewLC(aLogger, aDownloadPath);
+#else
+CDepTree* CDepTree::NewL(const TDesC& aDownloadPath)
+	{
+	CDepTree* object = CDepTree::NewLC(aDownloadPath);
+#endif
+	CleanupStack::Pop();
+	return object;
+	}
+
+#ifdef USE_LOGFILE
+CDepTree::CDepTree(RFileLogger& aLogger) :
+	iLog(aLogger),
+#else
+CDepTree::CDepTree() :
+#endif
+	iCurrentPackage(-1),
+	iSortedPackage(-1),
+	iCyclePresent(EFalse),
+	iPackageDlinkHdr(_FOFF(CPackageInfo,iPackageDlink)),
+	iPackageDlinkFetchIter(iPackageDlinkHdr)
+	{
+	iFetchList.Reset();
+	iSortedList.Reset();
+	}
+
+void CDepTree::ConstructL(const TDesC& aDownloadPath)
+	{
+	iDownloadPath = aDownloadPath.AllocL();
+	}
+
+CDepTree::~CDepTree()
+	{
+	DELETE_IF_NONNULL( iDownloadPath );
+
+	CPackageInfo* currentPackage;
+	iPackageDlinkFetchIter.SetToFirst();
+
+	TDblQueIter<CPackageInfo> PackageIter(iPackageDlinkHdr);
+	PackageIter.SetToFirst();
+
+	// Clear memory allocated for all packages
+	while((currentPackage = PackageIter++) != NULL)
+		{
+		currentPackage->iPackageDlink.Deque();
+		delete currentPackage;
+		};
+
+	iFetchList.Close();
+	iSortedList.Close();
+	}
+
+const TLinearOrder<CPackageInfo> CPackageInfo::KSortOrderByDrivePriority(CPackageInfo::CompareByDrivePriority);
+
+TInt CPackageInfo::CompareByDrivePriority( const CPackageInfo& aPackageOne, const CPackageInfo& aPackageTwo )
+{
+	if ( (aPackageOne.GetDrivePriority()) > (aPackageTwo.GetDrivePriority()) )
+		{
+		return -1;
+		}
+	else
+		{
+		return 1;
+		}
+}
+
+TBool CDepTree::ConstructFetchListL()
+	{
+	if(iPackageDlinkHdr.IsEmpty())
+		{
+		return EFalse;
+		}
+
+	CPackageInfo *rootNode = iPackageDlinkHdr.First();
+	rootNode->VisitL(this);
+	return ETrue;
+	}
+
+TBool CDepTree::SetDriveInfo()
+	{
+#ifdef FEATURE_INSTALL_DRIVE_SELECTION
+	TInt driveIndex = 0;
+	CPackageInfo* currentNode = NULL;
+	TBool retStatus = ETrue; // Default to successful check
+	RArray<TChar> driveLetters(EDriveZ-EDriveA+1);
+	RArray<TInt64> driveSpaces(EDriveZ-EDriveA+1);
+	RFs fs;
+
+	if (fs.Connect() != KErrNone)
+		{
+		return EFalse;
+		}
+
+	CleanupClosePushL(fs);
+	CleanupClosePushL(driveLetters);
+	CleanupClosePushL(driveSpaces);
+
+	// Get the drive letters and spaces
+	TRAPD(err, GetDriveListL(fs, driveLetters, driveSpaces) );
+	if (err != KErrNone)
+		{
+		return EFalse;
+		}
+
+	// The packages are sorted based on priority
+	for (TInt index = 0; (index < iSortedList.Count()) && (retStatus != EFalse); index++ )
+		{
+		//LOG2( "Index is %d", index );
+
+		currentNode = iSortedList[index];
+
+		const TChar mandatoryDriveLetter = currentNode->GetMandatoryInstallDrive();
+
+		if ( mandatoryDriveLetter )
+			{
+			// Reset the driveIndex for drive selection of each package.
+			for ( driveIndex = 0; driveIndex < driveSpaces.Count(); driveIndex++ )
+				{
+				// Check whether the current drive is the mandatory drive.
+				if ( driveLetters[driveIndex] == mandatoryDriveLetter )
+					{
+					// Check whether there is enough space in mandatory drive.
+					if ( currentNode->GetInstallSize() < driveSpaces[driveIndex] )
+						{
+						LOG3( "PkgUid 0x%08X installation forced to %c:", currentNode->GetPackageUid(), (char)driveLetters[driveIndex] );
+						currentNode->SetInstallDrive(driveLetters[driveIndex]);
+						driveSpaces[driveIndex] -= currentNode->GetInstallSize();
+						}
+					else
+						{
+						retStatus = EFalse;
+						}
+					break;
+					}
+				}
+			}// if ( mandatoryDriveLetter )
+		else
+			{
+			// driveIndex is reset -> there could be a smaller package which fits in previous drive.
+			for ( driveIndex = 0; driveIndex < driveSpaces.Count(); driveIndex++ )
+				{
+				if (currentNode->GetInstallSize() < driveSpaces[driveIndex])
+					{
+					currentNode->SetInstallDrive(driveLetters[driveIndex]);
+					driveSpaces[driveIndex] -= currentNode->GetInstallSize();
+					break;
+					}
+				}
+			}// else of if ( mandatoryDriveLetter )
+
+		if ( driveSpaces.Count() <= driveIndex )
+			{
+			//Invalid mandatory drive specified.
+			retStatus = EFalse;
+			}
+		}// for loop of packages
+
+	// All the dependent sis files are assigned the drives where they need to be installed.
+	// Now go thru the drives to figure out which one can accommodate the download.
+
+	// This is done as a final act so that the memory is not blocked unnecessarily by download,
+	// which otherwise could be used to install a dependency sis.
+
+	// Reset the driveIndex -> start from system drive.
+	for ( driveIndex = 0; ( driveIndex < driveSpaces.Count() ) && ( retStatus != EFalse ); driveIndex++ )
+		{
+/*
+		TInt drive;
+		RFs::CharToDrive(driveLetters[driveIndex], drive);
+		if (!SysUtil::DiskSpaceBelowCriticalLevelL(&fs, iMaxDownloadSize, drive))
+			{
+*/
+		if ( driveSpaces[driveIndex] > iMaxDownloadSize )
+			{
+			driveSpaces[driveIndex] -= iMaxDownloadSize;
+			iDownloadDrive = driveLetters[driveIndex];
+			//Drive specified in download path is overriden.
+			iDownloadPath->Des()[0] = iDownloadDrive;
+			LOG4( "Download drive %c: free %ld (%.02f MB)", (char)iDownloadDrive, driveSpaces[driveIndex], (TReal)driveSpaces[driveIndex]/1048576.0 );
+			break;
+			}
+		}
+
+	// Fail, if no drive has space to max download size.
+	if ( driveSpaces.Count() <= driveIndex )
+		{
+		// Fail: no memory.
+		retStatus = EFalse;
+		}
+
+	CleanupStack::PopAndDestroy(3, &fs);
+
+	return retStatus;
+
+#else
+	TInt64 driveSpace = iMaxDownloadSize;
+	CPackageInfo* currentNode = NULL;
+	const TInt installDrive = RFs::GetSystemDrive();
+	TChar instDriveLetter;
+	TInt err;
+	TBool retStatus = ETrue; // Default to successful check
+	RFs fs;
+
+	err = fs.Connect();
+	if (err != KErrNone)
+		return EFalse;
+
+	CleanupClosePushL(fs);
+
+	RFs::DriveToChar(installDrive, instDriveLetter);
+
+	// The install size of all dependent packages to be installed is added to the required driveSpace.
+	for (TInt index = 0; index < iSortedList.Count(); index++ )
+		{
+		currentNode = iSortedList[index];
+		driveSpace += currentNode->GetInstallSize();
+		// Set the installation drive for the package
+		currentNode->SetInstallDrive(instDriveLetter);
+		}
+
+	// check whether there is enough space in C to download and install all dependencies.
+	TRAP( err, retStatus = !SysUtil::DiskSpaceBelowCriticalLevelL( &fs, driveSpace, installDrive ) );
+
+	// If free space check fails, indicate not enough space
+	if (err != KErrNone)
+		retStatus = EFalse;
+
+	CleanupStack::PopAndDestroy(&fs);
+
+	return retStatus;
+#endif
+	}
+
+void CDepTree::GetDriveListL(RFs& aRFs, RArray<TChar>& aDriveLetters, RArray<TInt64>& aDriveSpaces)
+	{
+	// This is the LFSS free space threshold
+	const TInt freeSpaceAdjustment = 1024 * 384;
+
+	// get information about drives
+	TDriveList driveList;
+
+	// List all drives in the system
+	User::LeaveIfError( aRFs.DriveList(driveList) );
+
+	TVolumeInfo volInfo;
+	TInt64 volSpace = 0;
+	TChar systemDriveLetter;
+	const TInt systemDrive = RFs::GetSystemDrive();
+
+	// Not sure whether the first DriveLetter in the while loop corresponds to SystemDrive.
+	// Hence setting it explicitly as the first entry in Drive Array
+	RFs::DriveToChar(systemDrive, systemDriveLetter);
+	if (aRFs.Volume(volInfo, systemDrive) == KErrNone)
+		{
+		LOG4( "SysDrive %c: Free %ld (%.02f MB)", (char)systemDriveLetter, volInfo.iFree, (TReal)volInfo.iFree/1048576.0 );
+		volSpace = volInfo.iFree - freeSpaceAdjustment;  // bytes
+		if (volSpace < 0)
+			{
+			volSpace = 0;
+			}
+		}
+
+	User::LeaveIfError(aDriveLetters.Append(systemDriveLetter));
+	User::LeaveIfError(aDriveSpaces.Append(volSpace));
+
+	// Check all drives
+	for (TInt driveNumber = EDriveA; driveNumber <= EDriveZ; driveNumber++)
+		{
+
+		if (!driveList[driveNumber])
+			{
+			// Not a recognised drive
+			continue;
+			}
+
+		if (aRFs.Volume(volInfo, driveNumber) != KErrNone)
+			{
+			// The volume is not usable (e.g. no media card inserted)
+			continue;
+			}
+
+		if (driveNumber == systemDrive)
+			{
+			//System Drive, already added to the list
+			continue;
+			}
+
+		if ( (volInfo.iDrive.iType==EMediaNotPresent) ||
+			 (volInfo.iDrive.iType==EMediaRom) ||
+			 (volInfo.iDrive.iType==EMediaRemote) ||
+			 (volInfo.iDrive.iType==EMediaRam) ||
+			 (volInfo.iDrive.iType==EMediaUnknown) )
+			{
+			// Exclude drives not suitable for installation
+			continue;
+			}
+
+		// Do not list read only and substituted drives as an option to install to
+		if (volInfo.iDrive.iDriveAtt & KDriveAttRom ||
+			volInfo.iDrive.iDriveAtt & KDriveAttSubsted)
+			{
+			continue;
+			}
+
+		const TInt64 volSpace = volInfo.iFree - freeSpaceAdjustment;  // bytes
+		if (volSpace < 0)
+			{
+			// Volume space below 0 => skip drive
+			continue;
+			}
+
+		TChar drvLetter;
+		User::LeaveIfError(RFs::DriveToChar(driveNumber, drvLetter));
+		User::LeaveIfError(aDriveLetters.Append(drvLetter));
+		User::LeaveIfError(aDriveSpaces.Append(volSpace));
+		LOG4( "Drive %c: Free %ld (%.02f MB)", (char)drvLetter, volSpace, (TReal)volSpace/1048576.0 );
+		} // for
+	}
+
+TBool CDepTree::IsDepTreeEmpty() const
+	{
+	return (iPackageDlinkHdr.IsEmpty());
+	}
+
+TBool CDepTree::IsCyclePresent() const
+	{
+	return iCyclePresent;
+	}
+
+void CDepTree::AddPackageInfo(CPackageInfo *aPackageInfo)
+	{
+	if(iPackageDlinkHdr.IsEmpty())
+		{
+		// This is the first node in the list
+		iPackageDlinkHdr.AddFirst(*aPackageInfo);
+		iPackageDlinkFetchIter.SetToFirst();
+		}
+	else
+		{
+		// Append node to the list
+		iPackageDlinkHdr.AddLast(*aPackageInfo);
+		}
+	}
+
+TPtrC CDepTree::GetDownloadPath() const
+	{
+	return iDownloadPath->Des();
+	}
+
+void CDepTree::AddFetchPackageInfo(CPackageInfo *aPackageInfo)
+	{
+	iFetchList.Append(aPackageInfo);
+	//Add the download/install sizes only if the package is not already installed.
+	if(aPackageInfo->iPackageStatus != EPackageInstalled)
+		{
+		iSortedList.InsertInOrder(aPackageInfo,CPackageInfo::KSortOrderByDrivePriority);
+		iTotalDownloadSize += aPackageInfo->iDownloadSize;
+
+		if(aPackageInfo->iDownloadSize > iMaxDownloadSize)
+			{
+			iMaxDownloadSize = aPackageInfo->iDownloadSize;
+			}
+		}
+	}
+
+CPackageInfo* CDepTree::LocatePackageInDepTree(const TUint32& aDepPackageUid)
+	{
+	CPackageInfo* currentItem;
+	TDblQueIter<CPackageInfo> PackageIter(iPackageDlinkHdr);
+	PackageIter.SetToFirst();
+
+	while((currentItem = PackageIter++) != NULL)
+		{
+		if(currentItem->iPackageUid == aDepPackageUid)
+			{
+			return currentItem;
+			}
+		};
+	return NULL;
+	}
+
+CPackageInfo* CDepTree::GetNextNode()
+	{
+	CPackageInfo* nextNode;
+
+	if(iPackageDlinkFetchIter++ != NULL)
+		{
+		// This is because the first node is the root package and
+		// tree is already created from it.
+		nextNode = iPackageDlinkFetchIter;
+		}
+	else
+		{
+		// This case should never arise, as the api
+		// should not get called.
+		nextNode = NULL;
+		}
+	return nextNode;
+	}
+
+CPackageInfo* CDepTree::GetFetchNode( TInt nodeLocation)
+	{
+	CPackageInfo* node = NULL;
+
+	if (iFetchList.Count() > nodeLocation )
+		{
+		node = iFetchList[nodeLocation];
+		}
+	return node;
+	}
+
+
+CPackageInfo* CDepTree::GetNextFetchNode()
+	{
+	CPackageInfo* nextNode = NULL;
+
+	if (iFetchList.Count() > (iCurrentPackage+1) )
+		{
+		nextNode = iFetchList[++iCurrentPackage];
+		}
+	return nextNode;
+	}
+
+//TODO: Remove this. this is only for testing purpose.
+//otherwise, there is never a need to get the sorted nodes separately.
+CPackageInfo* CDepTree::GetNextSortedNode()
+	{
+	CPackageInfo* nextNode = NULL;
+
+	if (iSortedList.Count() > (iSortedPackage+1) )
+		{
+		nextNode = iSortedList[++iSortedPackage];
+		}
+	return nextNode;
+	}
+
+CPackageInfo* CDepTree::GetPreviousFetchNode()
+	{
+	CPackageInfo* previousNode = NULL;
+	if (iCurrentPackage > 0)
+		{
+		previousNode = iFetchList[--iCurrentPackage];
+		}
+	 return previousNode;
+	}
+
+void CDepTree::RemoveDownloadedFiles(RFs& aRfs)
+	{
+	CPackageInfo* currentItem;
+	TDblQueIter<CPackageInfo> PackageIter(iPackageDlinkHdr);
+	PackageIter.SetToFirst();
+
+	// Remove all the downloaded dep and changes file
+	while((currentItem = PackageIter) != NULL)
+		{
+		if ( currentItem->iDepFileName )
+			{
+			DeleteFile(aRfs, *(currentItem->iDepFileName), *iDownloadPath);
+			}
+		if ( currentItem->iChangesFileName )
+			{
+			DeleteFile(aRfs, *(currentItem->iChangesFileName), *iDownloadPath);
+			}
+		if ( currentItem->iSisPackageName )
+			{
+			DeleteFile(aRfs, *(currentItem->iSisPackageName), *iDownloadPath);
+			}
+		PackageIter++;
+		}
+	}
+
+void CDepTree::DeleteFile(RFs& aRfs, const TDesC& aFileName, const TDesC& aFilePath )
+	{
+	TFileName filename;
+
+	filename.Copy(aFilePath);
+	filename.Append(aFileName);
+	aRfs.Delete(filename);
+	}
+
+CPackageInfo* CDepTree::GetRootNode()
+	{
+	if (iPackageDlinkHdr.IsEmpty())
+		{
+		return NULL;
+		}
+	else
+		{
+		return iPackageDlinkHdr.First();
+		}
+	}
+
+Edge* Edge::NewLC(CPackageInfo *aVtx1, CPackageInfo *aVtx2)
+	{
+	Edge* object = new ( ELeave ) Edge(aVtx1, aVtx2);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+Edge* Edge::NewL(CPackageInfo *aVtx1, CPackageInfo *aVtx2)
+	{
+	Edge* object = Edge::NewLC(aVtx1, aVtx2);
+	CleanupStack::Pop();
+	return object;
+	}
+
+void Edge::ConstructL()
+	{
+	}
+
+Edge::Edge(CPackageInfo *aVtx1, CPackageInfo *aVtx2)
+	{
+	iVertexOrg = aVtx1;
+	iVertexDst = aVtx2;
+	}
+
+CPackageInfo* Edge::GetVertexOrg() const
+	{
+	return iVertexOrg;
+	}
+
+CPackageInfo* Edge::GetVertexDst() const
+	{
+	return iVertexDst;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMSisParser.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Declares the CXmlParser class for ADM application.
+*
+*
+*/
+
+
+#include "ADMSisParser.h"
+#include "ADMPackageInfo.h"
+#include <sisparser.h>
+#include <siscontents.h>
+#include <siscontroller.h>
+#include <sisinfo.h>
+#include <sisdependency.h>
+#include <sisuid.h>
+#include <sisversion.h>
+#include <sisprerequisites.h>
+#include <sisversionrange.h>
+#include <filesisdataprovider.h>
+#include <dessisdataprovider.h>
+#include <sisversionrange.h>
+#include <sisinstallblock.h>
+#include <sissupportedlanguages.h>
+
+using namespace Swi;
+
+CSisParser* CSisParser::NewLC()
+	{
+	CSisParser* object = new ( ELeave ) CSisParser();
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CSisParser* CSisParser::NewL()
+	{
+	CSisParser* object = CSisParser::NewLC();
+	CleanupStack::Pop();
+	return object;
+	}
+
+CSisParser::CSisParser()
+	{
+	}
+
+CSisParser::~CSisParser()
+	{
+	iRfs.Close();
+	}
+
+void CSisParser::ConstructL()
+	{
+	User::LeaveIfError(iRfs.Connect());
+	}
+
+//TODO: a http sis data provider would allow partial download?
+CPackageInfo* CSisParser::GetDepContentsL(const TDesC& aDepFileName, CPackageInfo *packageInfo,CDepTree* mainTree)
+	{
+	CFileSisDataProvider *provider = CFileSisDataProvider::NewLC(iRfs, aDepFileName);
+	Sis::CContents* contents = Sis::Parser::ContentsL(*provider);
+	CleanupStack::PushL(contents);
+	HBufC8* controllerpkg = contents->ReadControllerL();
+	CleanupStack::PushL(controllerpkg);
+	CDesDataProvider* controllerProvider= CDesDataProvider::NewLC(*controllerpkg);
+	Sis::CController* controller = CController::NewLC(*controllerProvider);
+	SetDependenciesL(packageInfo, mainTree, controller, aDepFileName);
+
+	CleanupStack::PopAndDestroy(controller);
+	CleanupStack::PopAndDestroy(controllerProvider);
+	CleanupStack::PopAndDestroy(controllerpkg);
+	CleanupStack::PopAndDestroy(contents);
+	CleanupStack::PopAndDestroy(provider);
+	return packageInfo;
+	}
+
+void CSisParser::SetDependenciesL(CPackageInfo *packageInfo,CDepTree* mainTree, Sis::CController* controller, const TDesC& aFileName)
+	{
+	//have now extracted the controller (header information) from the sis file.
+	if(mainTree->IsDepTreeEmpty())
+		{
+		packageInfo = CPackageInfo::NewL();
+		packageInfo->iPackageUid = controller->Info().Uid().Uid().iUid;
+		packageInfo->iVendor = controller->Info().UniqueVendorName().Data().AllocL();
+		packageInfo->iVersion = TVersion(controller->Info().Version().Major(),
+				controller->Info().Version().Minor(),
+				controller->Info().Version().Build());
+		SetLanguageSpecificNamesL(controller, packageInfo);
+
+		packageInfo->iPackageStatus = EPackageRootToBeInstalled;
+		//TODO: HACK - ADM expects to use iPackageName as a filename, SIS file contains only UIDs
+		packageInfo->iSisPackageName = aFileName.AllocL();
+		//TODO: end HACK
+		mainTree->AddPackageInfo(packageInfo);
+		}
+
+	//Get dependencies
+	const RPointerArray<Sis::CDependency> &deps(controller->Prerequisites().Dependencies());
+	for(TInt i=0;i<deps.Count();i++)
+		{
+		const Sis::CDependency* dep(deps[i]);
+		TUint32 uid = dep->Uid().Uid().iUid;
+		CPackageInfo *dependentPackage = mainTree->LocatePackageInDepTree(uid);
+		if(dependentPackage == NULL)
+			{
+			dependentPackage = CPackageInfo::NewLC();
+			dependentPackage->iPackageUid = dep->Uid().Uid().iUid;
+			//TODO: HACK - ADM expects to use iPackageName as a filename, SIS file contains only UIDs
+			TBuf<8> uidBuf;
+			uidBuf.Num(dependentPackage->iPackageUid, EHex);
+			dependentPackage->iPackageName = uidBuf.AllocL();
+			//TODO: end HACK
+			packageInfo->AddEdgeL(dependentPackage);
+			mainTree->AddPackageInfo(dependentPackage);
+			CleanupStack::Pop(dependentPackage);
+			}
+		//embedded and outer sis may depend on different version of the same package - in this case, use the higher version number
+		const Sis::CVersion& ver = dep->VersionRange()->From();
+		if(dependentPackage->iVersion.iMajor < ver.Major() ||
+				(dependentPackage->iVersion.iMajor == ver.Major() && dependentPackage->iVersion.iMinor < ver.Minor()) ||
+				(dependentPackage->iVersion.iMajor == ver.Major() && dependentPackage->iVersion.iMinor == ver.Minor() && dependentPackage->iVersion.iBuild < ver.Build()))
+			{
+			dependentPackage->iVersion = TVersion(ver.Major(),
+					ver.Minor(),
+					ver.Build());
+			}
+		//also available : dependency names (localised list)
+		}
+
+	//Get embedded SIS files' dependencies too
+	const RPointerArray<Sis::CController> &embedded = controller->InstallBlock().EmbeddedControllers();
+	for(TInt i=0;i<embedded.Count();i++)
+		{
+		SetDependenciesL(packageInfo, mainTree, embedded[i], KNullDesC);
+		}
+	}
+
+void CSisParser::SetLanguageSpecificNamesL(Sis::CController* aController, CPackageInfo* aPackageInfo)
+	{
+	const Sis::CSupportedLanguages &lang = aController->SupportedLanguages();
+	TLocale locale;
+	TInt langIdx = KErrNotFound;
+	// find the language index, so we can access the proper localised
+	// names in the sis package
+	for (TInt downgradeIdx = -1; downgradeIdx < 3; downgradeIdx++)
+		{
+		// Go through the language downgrade path
+		// See the documentation of TLocale::LanguageDowngrade()
+		const TLanguage language = (downgradeIdx == -1)
+				? User::Language()
+				: locale.LanguageDowngrade(downgradeIdx);
+		if (language == ELangNone)
+			break;
+		for (TInt i = 0; i < lang.Count(); i++)
+			{
+			if (lang[i] == language)
+				{
+				langIdx = i;
+				break;
+				}
+			}
+		}
+	const RPointerArray<Sis::CString>& names = aController->Info().Names();
+	// also available: VendorNames()
+
+	// Set localised name for the package
+	// Sis package didn't contain localised name, use the default
+	if (langIdx != KErrNotFound)
+		{
+		aPackageInfo->iPackageName = names[langIdx]->Data().AllocL();
+		}
+	else if (names.Count() > 0)
+		{
+		aPackageInfo->iPackageName = names[0]->Data().AllocL();
+		}
+	else
+		{
+		aPackageInfo->iPackageName = KNullDesC().AllocL();
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMStateMachine.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,2340 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     State machine implementation
+*
+*
+*/
+
+
+#include <ADM.rsg>
+#include "ADMApplication.h" // KUidADMApp
+#include "ADMStateMachine.h"
+#include "ADMStateMachineDebug.h"
+#include "globals.h"
+#include "config.h"
+
+#include <e32std.h>
+#include <sysutil.h>        // SysUtil::DiskSpaceBelowCriticalLevel()
+#include <BAUTILS.H>
+#include <apgcli.h>
+
+// Use Char 0xFF to indicate no drive is selected
+const TChar KNoDriveSelected = 0xFF;
+
+// Used to force the progress bar to finish
+const TInt KProgressBarFullValue = 100;
+
+TInt CompareVersions(TVersion& version1, TVersion& version2);
+
+// ---------------------------------------------------------------------------
+// Panic
+//
+// Raises a panic with specific panic code.
+// ---------------------------------------------------------------------------
+//
+LOCAL_C inline void Panic(TInt aPanicCode)
+	{
+	_LIT(KPanic, "SmartInst-SM");
+	User::Panic( KPanic, aPanicCode );
+	}
+
+LOCAL_C inline void Panic(TInt aPanicCode, TInt aState)
+	{
+	_LIT(KPanic, "SmartInst-SM");
+	const TInt reason = aState*100 + aPanicCode;
+	User::Panic( KPanic, reason );
+	}
+
+// -----------------------------------------------------------------------------
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CStateMachine::CStateMachine(CADMAppUi& aAppUi) :
+	CActive(EPriorityNormal),
+	iAppUi(aAppUi),
+	iFailedState( CStateFactory::EStateLast )
+	{
+	CActiveScheduler::Add(this);
+	}
+
+// -----------------------------------------------------------------------------
+// NewL()
+// -----------------------------------------------------------------------------
+//
+CStateMachine* CStateMachine::NewL(CADMAppUi& aAppUi, const TDesC& aDownloadPath)
+	{
+	CStateMachine* self = new (ELeave) CStateMachine(aAppUi);
+	CleanupStack::PushL(self);
+	self->ConstructL(aDownloadPath);
+	CleanupStack::Pop();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::ConstructL(const TDesC& aDownloadPath)
+	{
+	// Create a local semaphore for handling the download deleting
+	// This must be the first to be created and last to be destroyed.
+	iDlDeletingSemaphore.CreateLocal(0);
+
+	iXmlParser = CXmlParser::NewL();
+	iSisParser = CSisParser::NewL();
+
+#ifdef USE_LOGFILE
+	iInstallManager = CInstallManager::NewL(this, iAppUi.iLog);
+	iDepTree = CDepTree::NewL(iAppUi.iLog, aDownloadPath);
+	iDownloadHandler = CDownloadHandler::NewL(this, iAppUi.iLog, !(iAppUi.EikonEnv()->StartedAsServerApp()));
+#else
+	iInstallManager = CInstallManager::NewL(this);
+	iDepTree = CDepTree::NewL(aDownloadPath);
+	iDownloadHandler = CDownloadHandler::NewL(this, !(iAppUi.EikonEnv()->StartedAsServerApp()));
+#endif
+
+	iStateFactory = CStateFactory::NewL(*this);
+	}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CStateMachine::~CStateMachine()
+	{
+	if (IsActive())
+		{
+		Cancel();
+		}
+	delete iStateFactory;
+	delete iDownloadHandler;
+	delete iInstallManager;
+	delete iDepTree;
+	delete iSisParser;
+	delete iXmlParser;
+	delete iDownloadedFile;
+
+	iDlDeletingSemaphore.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// Updates the displayed progress bar
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::UpdateProgressBar(TInt aStartValue, TInt aEndValue)
+	{
+	iAppUi.iProgress->Update(aStartValue, aEndValue);
+	}
+
+// -----------------------------------------------------------------------------
+// Removes the displayed progress bar
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::StopProgressBar() const
+	{
+	iAppUi.iProgress->Cancel();
+	}
+
+// -----------------------------------------------------------------------------
+// Sets the failure state and reason for exit
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::SetFailureReason(TExitReason aReason)
+	{
+	iAppUi.iExitReason = aReason;
+	iFailedState = (CStateFactory::TAppState)StateIndex();
+	// If the device is not supported, don't create resume info
+	if (aReason == EDeviceNotSupported)
+		{
+		iAppUi.iIsResumeRequired = EFalse;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Shows the download query dialog with a specified text.
+// @param aResourceId Resource ID for the text to be shown.
+// @param aInfoResourceId Resource ID for additional information text.
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::ShowDownloadQueryL(const TInt aResourceId, const TInt aInfoResourceId)
+	{
+	iAppUi.ShowDownloadQueryL( aResourceId, aInfoResourceId );
+	}
+
+// -----------------------------------------------------------------------------
+// Shows wait note
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::ShowWaitNoteL(const TInt aResourceId)
+	{
+	iAppUi.ShowWaitNoteL( aResourceId, ETrue );
+	}
+
+// -----------------------------------------------------------------------------
+// Shows wait note with the specified values
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::ShowInstallingWaitNoteL(const TInt aCurrent, const TInt aLast)
+	{
+	iAppUi.ShowWaitNoteNumL( R_ADM_INSTALLING_TEXT, aCurrent, aLast );
+	}
+
+// -----------------------------------------------------------------------------
+// Shows the progress bar with the specified values
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::ShowProgressBarL(const TInt aStartValue, const TInt aEndValue, const TInt aCurrent, const TInt aLast)
+	{
+	iAppUi.ShowGlobalProgressL( R_ADM_DOWNLOADING_TEXT,
+			aStartValue, aEndValue,
+			aCurrent, aLast );
+	}
+
+// -----------------------------------------------------------------------------
+// Stops the wait note
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::StopWaitNote()
+	{
+	iAppUi.CancelWaitNote();
+	}
+
+// -----------------------------------------------------------------------------
+// Starts the state machine from the initial state.
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::Start()
+	{
+	LOG( "+ CStateMachine::Start()" );
+
+	// If the initial state has been set, don't change it here
+	if (!iState)
+		{
+		iState = &iStateFactory->GetState( CStateFactory::EStateSetup );
+		}
+
+	iStatus = KRequestPending;
+	SetActive();
+	// send signal that this request has completed
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+// -----------------------------------------------------------------------------
+// Stops the state machine
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::Stop()
+	{
+	LOG( "+ CStateMachine::Stop()" );
+	Cancel();
+	iDepTree->RemoveDownloadedFiles( FsSession() );
+	// Log statistics. Prevent divide-by-zero.
+	if (iDownloadTime == 0)
+		iDownloadTime = 1;
+	LOG4( "Total %d kB in %.1f s, avg %.2f kB/s",
+			iCumulativeDownloaded/1024,
+			iDownloadTime/1000000.0,
+			iCumulativeDownloaded*1000000.0 / iDownloadTime / 1024.0);
+	}
+
+// -----------------------------------------------------------------------------
+// Returns current state ID
+// -----------------------------------------------------------------------------
+//
+TInt CStateMachine::StateIndex() const
+	{
+	return iStateFactory->StateIndex(iState);
+	}
+
+// -----------------------------------------------------------------------------
+// Request the next state we want the application to go to
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::SetState(const CStateFactory::TAppState aState)
+	{
+	SetState( iStateFactory->GetState(aState) );
+	}
+
+// -----------------------------------------------------------------------------
+// Set the starting state of the state machine, but do not invoke state change
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::SetStartState(const CStateFactory::TAppState aState)
+	{
+	iState = &iStateFactory->GetState( aState );
+	}
+
+// -----------------------------------------------------------------------------
+// Request the next state we want the application to go to
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::SetState(TState& aState)
+	{
+	LOG3( "+ SetState(): %d -> %d", iStateFactory->StateIndex(iState), iStateFactory->StateIndex(&aState) );
+
+	iState->Exit();
+	iState = &aState;
+	SetActive();
+	// send signal that this request has completed
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete(status, KErrNone);
+
+	//LOG2( "- SetState(): now in %d", iStateFactory->StateIndex(iState) );
+	}
+
+// -----------------------------------------------------------------------------
+// Active object heart
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::RunL()
+	{
+	//LOG2( "+ CStateEngine::RunL(): state=%d", iStateFactory->StateIndex(iState) );
+	iState->Enter();
+	//LOG2( "- CStateEngine::RunL(): %d", iStateFactory->StateIndex(iState) );
+	}
+
+// -----------------------------------------------------------------------------
+// Handles the leaves from RunL().
+//
+// SPECIFIC CASES NOT DONE YET:
+// -
+// -----------------------------------------------------------------------------
+//
+TInt CStateMachine::RunError(const TInt aError)
+	{
+	LOG3("+ SM::RunError(): %d, %d", StateIndex(), aError );
+
+	TExitReason err = EInstallationFailed;
+
+	switch ( aError )
+		{
+		case KLeaveExit:
+			{
+			// TODO: Ugly hack: we need to return KLeaveExit as RunError()
+			// gets called when application exit is called within RunL().
+			//LOG( "Exit() left" );
+			return KLeaveExit;
+			}
+		case SwiUI::KSWInstErrUserCancel:
+			{
+			LOG( "User cancelled installation" );
+			// User cancelled the installation
+			err = EUserCancelled;
+			}
+			break;
+		case SwiUI::KSWInstErrInsufficientMemory:
+			{
+			LOG( "Installer left: not enough space" );
+			err = EInsufficientMemory;
+			}
+			break;
+		case SwiUI::KSWInstErrMissingDependency:
+			{
+			LOG( "Installer left: missing dependency." );
+			//err = EInstallationFailed;
+			}
+			break;
+		case SwiUI::KSWInstErrFileCorrupted:
+		case SwiUI::KSWInstErrPackageNotSupported:
+		case SwiUI::KSWInstErrGeneralError:
+		case SwiUI::KSWInstErrNoRights:
+		case SwiUI::KSWInstErrNetworkFailure:
+		case SwiUI::KSWInstErrAccessDenied:
+		case SwiUI::KSWInstUpgradeError:
+			{
+			LOG2( "Installer left, err=%d", aError );
+			//err = EInstallationFailed;
+			}
+			break;
+		case KErrServerTerminated:
+			{
+			LOG( "Server process terminated, cannot continue." );
+			}
+			break;
+		case EUnsupportedDevice:
+			{
+			LOG( "MachineId not present in supported devices list" );
+			err = EDeviceNotSupported;
+			}
+			break;
+		case KErrAlreadyExists:
+			{
+			// Download already exists
+			LOG( "Existing download" );
+			err = EDownloadFailed;
+			}
+			break;
+		default:
+			{
+			LOG2( "Uncategorized leave %d, exiting", aError );
+			}
+			break;
+		}
+
+	LOG2( "Exiting due to failure %d", err );
+	SetFailureReason( err );
+	SetState( CStateFactory::EStatePrepareExitWithError );
+
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::DoCancel()
+	{
+	LOG( "CStateMachine::DoCancel()" );
+	iDownloadHandler->CancelAllDownloads();
+	iInstallManager->CancelAll();
+	}
+
+// -----------------------------------------------------------------------------
+// Sets the internet access point identifier for download handler
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::SetIAP(TUint32 aIAP)
+	{
+	iDownloadHandler->SetIAP(aIAP);
+	}
+
+// -----------------------------------------------------------------------------
+// Handles the UI event from AppUi, filters it and passes it to states.
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleUserResponse(TInt aStatus)
+	{
+	switch (aStatus)
+		{
+		case EAknSoftkeyYes:
+			iState->UserAccepted();
+			break;
+		case EAknSoftkeyNo:
+			iState->UserRejected();
+			break;
+		case EAknSoftkeyCancel:
+		case EKeyPhoneEnd:
+			// fall-through
+		default:
+			iState->UserCancelled();
+			break;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleInstallCompletedL(TInt aStatus)
+	{
+	LOG4( "HandleInstallCompletedL(%d): %d. '%S'", aStatus, StateIndex(), iCurrentPackage->GetSisPackageName() );
+	// TODO: Can iCurrentPackage ever be null? In case of root package installation??
+
+	iState->InstallCompleted( aStatus );
+	}
+
+// -----------------------------------------------------------------------------
+// Called, if IAP has changed
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleIapChanged(const TUint32 aIAP)
+	{
+	iAppUi.iIAP = aIAP;
+	SetIAP(aIAP);
+	}
+
+// -----------------------------------------------------------------------------
+// Called when download has finished.
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleHttpFetchCompleted(
+		const TDesC& aDlFilename,
+		const TInt /* aDownloadType */,
+		const TInt32 aBytesDownloaded,
+		const TReal32 aAvgDlSpeed, // bytes/second
+		const TInt64 aDlTime       // microseconds
+		)
+	{
+	delete iDownloadedFile;
+	iDownloadedFile = NULL;
+	iDownloadedFile = aDlFilename.Alloc();
+	iDownloadSize = aBytesDownloaded;
+	// Indicate that we've downloaded this amount already to keep progress bar happy
+	iCumulativeDownloaded += aBytesDownloaded;
+	// Calculate cumulative average download speed
+	iDownloadTime += aDlTime;
+
+#ifdef DEBUG_ADM
+	TReal32 avgDlSpeed = iCumulativeDownloaded*1000000.0 / iDownloadTime;
+
+#ifdef _DEBUG
+	TBuf<32> buf;
+	TReal r = avgDlSpeed;
+	TRealFormat fmt(3, 2);
+	fmt.iType = KRealFormatFixed; // | KDoNotUseTriads;
+	buf.AppendNum(r/1024.0, fmt);
+	buf.Append(' ');
+	buf.Append(iAppUi.iPrefixKb);
+	buf.Append('/');
+	buf.Append('s');
+	iAppUi.EikonEnv()->InfoMsg(buf);
+#endif
+
+	LOG8( "DL %7d/%7d (%.1f s, %3.02f kB/s) (total: %d kB, %.1f s, avg %.02f kB/s) OK",
+			aBytesDownloaded, aBytesDownloaded, aDlTime/1000000.0, aAvgDlSpeed/1024.0,
+			iCumulativeDownloaded/1024, iDownloadTime/1000000.0, avgDlSpeed/1024.0 );
+#endif
+	iState->DownloadCompleted(aBytesDownloaded);
+	}
+
+// -----------------------------------------------------------------------------
+// Called when download manager has retrieved a packet from the network.
+// Required for updating the progress bar.
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleHttpFetchInProgress(const TInt32 aAlreadyDownloaded, const TInt32 aDownloadSize, const TReal32 aAvgDlSpeed)
+	{
+	iState->DownloadInProgress(aAlreadyDownloaded, aDownloadSize, aAvgDlSpeed);
+	}
+
+// -----------------------------------------------------------------------------
+// Called when download manager encounters a problem while downloading
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleHttpFetchFailure(
+		const TDesC& aDlFilename,
+		const TInt aGlobalErrorId,
+		const TInt aErrorId,
+		const TInt aFetchType
+		)
+	{
+	if (aFetchType)
+		{
+		LOG5( "+ HandleHttpFetchFailure(): %d. %d, %d '%S'", StateIndex(), aGlobalErrorId, aErrorId, &aDlFilename );
+		}
+	delete iDownloadedFile;
+	iDownloadedFile = NULL;
+	iDownloadedFile = aDlFilename.Alloc();
+	// TODO: Filter the errors here and invoke proper callbacks in states
+	iState->DownloadFailed();
+	LOG( "- HandleHttpFetchFailure()" );
+	}
+
+// -----------------------------------------------------------------------------
+// Signals the semaphore that download deleting is in progress (and the installation
+// can safely continue).
+// -----------------------------------------------------------------------------
+//
+void CStateMachine::HandleDownloadDeleting()
+	{
+	iDlDeletingSemaphore.Signal();
+	}
+
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TState& CStateFactory::GetState(const TAppState aState) const
+	{
+	__ASSERT_DEBUG( aState < EStateLast, Panic(EPanicStateIndexOutOfBounds) );
+	return *iStates[aState];
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CStateFactory::StateIndex(const TState* aState) const
+	{
+	TInt state;
+	for (state = 0; state < EStateLast; state++)
+		{
+		if (iStates[state] == aState)
+			{
+			return state;
+			}
+		}
+	// We end up here, if the state is not set, which may happen, if this
+	// is called before CStateMachine::Start() or CStateMachine::SetState().
+	return KUnknownState;
+	}
+
+// -----------------------------------------------------------------------------
+// Creates a new CStateFactory.
+// @return Newly created CStateFactory.
+// -----------------------------------------------------------------------------
+//
+CStateFactory* CStateFactory::NewL(CStateMachine& aStateMachine)
+	{
+	CStateFactory* self = new (ELeave) CStateFactory(aStateMachine);
+	CleanupStack::PushL(self);
+
+	// Create the states
+	self->iStates[EStateSetup]                      = new (ELeave) TStateSetup(*self);
+	self->iStates[EStateSetupParsing]               = new (ELeave) TStateSetupParsing(*self);
+	self->iStates[EStateBuildDepTree]               = new (ELeave) TStateBuildDepTree(*self);
+	self->iStates[EStateDownloadDepFile]            = new (ELeave) TStateDownloadDepFile(*self);
+	self->iStates[EStateParseDepFile]               = new (ELeave) TStateParseDepFile(*self);
+	self->iStates[EStateDownloadChangesFile]        = new (ELeave) TStateDownloadChangesFile(*self);
+	self->iStates[EStateParseChangesFile]           = new (ELeave) TStateParseChangesFile(*self);
+	self->iStates[EStateBuildFetchList]             = new (ELeave) TStateBuildFetchList(*self);
+	self->iStates[EStateVerifyAvailableDiskSpace]   = new (ELeave) TStateVerifyAvailableDiskSpace(*self);
+	self->iStates[EStateConfirmDownload]            = new (ELeave) TStateConfirmDownload(*self);
+	self->iStates[EStateConfirmRoamingDownload]     = new (ELeave) TStateConfirmRoamingDownload(*self);
+	self->iStates[EStateStartDependencyDownload]    = new (ELeave) TStateStartDependencyDownload(*self);
+	self->iStates[EStateDownloadDependency]         = new (ELeave) TStateDownloadDependency(*self);
+	self->iStates[EStateInstallDependency]          = new (ELeave) TStateInstallDependency(*self);
+	self->iStates[EStateInstallAppSis]              = new (ELeave) TStateInstallAppSis(*self);
+	self->iStates[EStateUninstallDependency]        = new (ELeave) TStateUninstallDependency(*self);
+	self->iStates[EStatePrepareExitWithError]       = new (ELeave) TStatePrepareExitWithError(*self);
+	self->iStates[EStateLaunchApp]                  = new (ELeave) TStateLaunchApp(*self);
+	self->iStates[EStateExit]                       = new (ELeave) TStateExit(*self);
+
+	CleanupStack::Pop();
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CStateFactory::CStateFactory(CStateMachine& aStateMachine) :
+	iStateMachine(aStateMachine)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// Default destructor
+// -----------------------------------------------------------------------------
+//
+CStateFactory::~CStateFactory()
+	{
+	// Deletes all state objects
+	iStates.DeleteAll();
+	}
+
+// =============================================================================
+
+TState::TState(const CStateFactory& aFactory) :
+	iFactory(aFactory),
+	iStateMachine(aFactory.StateMachine())
+	{
+	}
+
+void TState::PanicInState(TStatePanic aPanic) const
+	{
+	Panic(aPanic, iFactory.StateIndex(this));
+	}
+
+// Change of states
+void TState::Enter() const
+	{
+	}
+
+void TState::Exit() const
+	{
+	}
+
+// Events from UI
+void TState::UserAccepted()
+	{
+	LOG_FUNC
+	}
+
+// -----------------------------------------------------------------------------
+// Implements the default user cancel behaviour. If needed, overwrite in the
+// state implementation.
+// -----------------------------------------------------------------------------
+//
+void TState::UserCancelled()
+	{
+	LOG_FUNC
+	iStateMachine.SetFailureReason(EUserCancelled);
+	iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+	}
+
+// -----------------------------------------------------------------------------
+// Implements the default user reject behaviour. If needed, overwrite in the
+// state implementation.
+// -----------------------------------------------------------------------------
+//
+void TState::UserRejected()
+	{
+	UserCancelled();
+	}
+
+// Events from DownloadManager
+void TState::DownloadInProgress(const TInt /* aAlreadyDownloaded */, const TInt /* aDownloadSize */, const TReal32 /* aAvgDlSpeed */)
+	{
+	//LOG_FUNC
+	}
+
+void TState::DownloadCompleted(const TInt /* aBytesDownloaded */)
+	{
+	LOG_FUNC
+	}
+
+ void TState::DownloadFailed()
+	{
+	LOG_FUNC
+	}
+
+void TState::DownloadFailed(const CStateFactory::TAppState aState)
+	{
+	const EDownloadError errId = iStateMachine.iDownloadHandler->GetDownloadError();
+	SLOG3( "+ DownloadFailed(): %d. err=%d", iStateMachine.StateIndex(), errId );
+
+	if ( (errId == EDlErrDownloadFailure ) && ( iStateMachine.iRestartAttempt < KDownloadRestartRetries) )
+		{
+		iStateMachine.iRestartAttempt++;
+		SLOG2( "Download restart, attempt %d", iStateMachine.iRestartAttempt );
+		iStateMachine.SetState( aState );
+		}
+	else
+		{
+		SLOG3( "Aborting download. (%d; %d)", iStateMachine.iRestartAttempt, errId );
+//      iStateMachine.iRestartAttempt = 0;
+		iStateMachine.SetFailureReason(EDownloadFailed);
+		iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+		}
+	}
+
+void TState::DownloadCancelled()
+	{
+	LOG_FUNC
+	iStateMachine.SetFailureReason(EUserCancelled);
+	iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+	}
+
+// Events from InstallManager
+void TState::InstallInProgress()
+	{
+	LOG_FUNC
+	}
+
+void TState::InstallCompleted(TInt /* aStatus */)
+	{
+	LOG_FUNC
+	}
+
+void TState::InstallationCancelled()
+	{
+	LOG_FUNC
+	}
+
+// =============================================================================
+TStateSetup::TStateSetup(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	LOG_FUNC
+	}
+
+void TStateSetup::Enter() const
+	{
+	LOG_FUNC
+
+	// TODO: Check if we are roaming and proceed according to that
+
+	iStateMachine.SetState( CStateFactory::EStateSetupParsing );
+	}
+
+TStateSetupParsing::TStateSetupParsing(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateSetupParsing::Enter() const
+	{
+	const TInt mUid = iStateMachine.MachineUid();
+	if ( mUid )
+		{
+		iStateMachine.iDepTree->SetMachineId( mUid );
+		}
+	else
+		{
+		PanicInState( EPanicStateInvalidMachineUid );
+		}
+
+	// Get the drive where wrapper package was installed to
+	const TBool driveStatus = iStateMachine.iInstallManager->GetPackageInstalledDriveL(
+			iStateMachine.WrapperPackageUid(),
+			iStateMachine.iWrapperInstalledDrive);
+
+
+#ifdef __WINS__
+	iStateMachine.iWrapperInstalledDrive = 'C';
+#else
+	if ( !driveStatus )
+		{
+		// Read the wrapper installed drive from resume info file.
+		// TODO: What if user has tried to install on a removable drive and it's not available during the menu launch?
+		}
+#endif
+
+	SLOG3( "Installer pkg on %c: (%d)", (char)iStateMachine.iWrapperInstalledDrive, driveStatus );
+
+	// Cannot combine this with drive status. User might be trying to reinstall an app, already present in the device!
+	TVersion version, minVersion = KMinBootstrapSisVersion;
+	if ( iStateMachine.iInstallManager->GetPackageVersionInfoL(KUidBootstrap, version) )
+		{
+		// Compare installed and min required Bootstrap versions
+		if ( CompareVersions(minVersion, version) == EGreaterFirstVersion )
+			{
+			iStateMachine.SetFailureReason( EInvalidBootstrapVersion );
+			iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+			return;
+			}
+		}
+	else
+		{
+		// Launched from the menu grid
+		}
+
+	switch ( iStateMachine.BootstrapVersion() )
+		{
+		case 1:
+		case 2:
+		case 3:
+			{
+			// Parses the dependency file included withing the wrapper package.
+			SLOG2( "* Parsing '%S'", iStateMachine.DepFilename() );
+			iStateMachine.iXmlParser->GetDepContentsL(
+					*iStateMachine.DepFilename(),
+					iStateMachine.iCurrentPackage,
+					iStateMachine.iDepTree
+				);
+			iStateMachine.SetState( CStateFactory::EStateBuildDepTree );
+			}
+			break;
+		case 4:
+			{
+			// Parses the application.sis file included in the wrapper package.
+			SLOG2( "* Parsing '%S'", iStateMachine.SisFilename() );
+			iStateMachine.iSisParser->GetDepContentsL(
+					*iStateMachine.SisFilename(),
+					iStateMachine.iCurrentPackage,
+					iStateMachine.iDepTree
+				);
+			iStateMachine.SetState( CStateFactory::EStateBuildDepTree );
+			}
+			break;
+		default:
+			{
+			SLOG2( "Invalid bootstrap v%d", iStateMachine.BootstrapVersion() );
+			iStateMachine.SetFailureReason( EInvalidBootstrapVersion );
+			iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+			}
+			break;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateParseDepFile::TStateParseDepFile(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateParseDepFile::Enter() const
+	{
+	SLOG2( "+ ParseDepFileL(): '%S'", iStateMachine.iDownloadedFile );
+	iStateMachine.iXmlParser->GetDepContentsL(
+			*iStateMachine.iDownloadedFile,
+			iStateMachine.iCurrentPackage,
+			iStateMachine.iDepTree
+		);
+	iStateMachine.SetState( CStateFactory::EStateBuildDepTree );
+	SLOG2( "- ParseDepFileL(): '%S'", iStateMachine.iDownloadedFile );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateParseChangesFile::TStateParseChangesFile(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateParseChangesFile::Enter() const
+	{
+	SLOG2("+ ParseChangesFileL(): '%S'", iStateMachine.iDownloadedFile);
+	// Parse the provided changes file.
+	// the parameter aChangesFileName will be invalid after the call
+	iStateMachine.iXmlParser->GetChangesInfoL(
+			*iStateMachine.iDownloadedFile,
+			iStateMachine.iCurrentPackage,
+			iStateMachine.iDepTree
+		);
+	iStateMachine.SetState( CStateFactory::EStateDownloadDepFile );
+	SLOG2( "- ParseChangesFileL(): '%S'", iStateMachine.iDownloadedFile );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateBuildFetchList::TStateBuildFetchList(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateBuildFetchList::Enter() const
+	{
+	// Construct the list of dependent packages
+	SLOG( "Building dependency list" );
+	iStateMachine.iDepTree->ConstructFetchListL();
+
+	// Remove all downloaded dep files
+	SLOG( "Removing downloaded files" );
+	iStateMachine.iDepTree->RemoveDownloadedFiles( iStateMachine.FsSession() );
+
+	// Check if cycle exists
+	if ( iStateMachine.iDepTree->IsCyclePresent() )
+		{
+		// TODO: Inform user about configuration failure, exit gracefully
+		SLOG( "! Failure: cycle exists in the graph." );
+		iStateMachine.SetFailureReason( EInstallationFailed );
+		iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+		}
+	iStateMachine.SetState( CStateFactory::EStateVerifyAvailableDiskSpace );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateVerifyAvailableDiskSpace::TStateVerifyAvailableDiskSpace(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateVerifyAvailableDiskSpace::Enter() const
+	{
+	// MaxDownloadSize is subtracted from available System drive space.
+
+	// In case of silent installation of main app, if there is no space available in the drive selected by the user for wrapper,
+	// normal installation to follow.
+
+	// Set the drive info
+	if ( iStateMachine.iDepTree->SetDriveInfo() )
+		{
+		// With Ovi Store prompt always
+		const TInt dlThreshold = iStateMachine.OviStoreRunning()
+				? 0
+				: KDownloadPromptThreshold;
+		const TInt dlSize = iStateMachine.iDepTree->GetTotalDownloadSize();
+
+		SLOG3( "Download size %d (%d)", dlSize, dlThreshold );
+
+#ifdef DEBUG_ADM
+		// Print all the drives set. To be removed after testing.
+		CPackageInfo *node = NULL;
+		while( (node = iStateMachine.iDepTree->GetNextSortedNode()) != NULL )
+			{
+			SLOG5( "PkgUid 0x%08X: InstDrive %c:, prio %d, size %d",
+					node->GetPackageUid(), (char)node->GetInstallDrive(),
+					node->GetDrivePriority(), node->GetInstallSize() );
+			}
+#endif
+		// Show user how much to download and confirm, if he/she wants to do that
+		// if we have dependencies to download at all
+		if ( dlSize > 0 )
+			{
+			// Finalize the progress bar
+			iStateMachine.UpdateProgressBar( KProgressBarFullValue, KProgressBarFullValue );
+
+			// We need to download dependencies
+			if ( iStateMachine.UsingWLAN() && !iStateMachine.OviStoreRunning() )
+				{
+				// If using WLAN, start the dependency download immediately without prompting the user
+				iStateMachine.SetState( CStateFactory::EStateStartDependencyDownload );
+				}
+			else if ( iStateMachine.RegisteredRoaming() )
+				{
+				// If the device is roaming, always prompt the user
+				iStateMachine.SetState( CStateFactory::EStateConfirmRoamingDownload );
+				}
+			else if ( dlSize > dlThreshold )
+				{
+				// If not using WLAN and the download threshold has exceeded, prompt the user
+				iStateMachine.SetState( CStateFactory::EStateConfirmDownload );
+				}
+			else
+				{
+				// Otherwise, continue the download automatically without prompting the user
+				iStateMachine.SetState( CStateFactory::EStateStartDependencyDownload );
+				}
+			}
+		else
+			{
+			SLOG( "Nothing to download, dependencies OK." );
+			// Keep the next progress bar update happy
+			iStateMachine.iProgressMaxValue = KProgressBarFullValue;
+			// Finalize the progress bar
+			iStateMachine.UpdateProgressBar( KProgressBarFullValue*95/100, KProgressBarFullValue );
+			iStateMachine.SetState( CStateFactory::EStateInstallAppSis );
+			}
+		}
+	else
+		{
+		iStateMachine.SetFailureReason( EInsufficientMemory );
+		iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Builds the dependency tree. This function controls the state machine.
+// -----------------------------------------------------------------------------
+//
+TStateBuildDepTree::TStateBuildDepTree(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateBuildDepTree::Enter() const
+	{
+	SLOG2( "+ BuildDepTreeL(%d)", iStateMachine.iNodesProcessed );
+
+	// Update progress bar
+	iStateMachine.iNodesProcessed++;
+
+	iStateMachine.iCurrentPackage = iStateMachine.iDepTree->GetNextNode();
+	CPackageInfo* package = iStateMachine.iCurrentPackage;
+
+	if ( package == NULL )
+		{
+		SLOG( "Last package processed" );
+		// Do the final progress bar update
+		iStateMachine.UpdateProgressBar( KProgressBarFullValue*95/100, KProgressBarFullValue );
+
+		iStateMachine.SetState( CStateFactory::EStateBuildFetchList );
+		}
+	else
+		{
+		SLOG3( "* Processing 0x%08X (%d)", package->GetPackageUid(), package->GetPackageStatus() );
+
+		iStateMachine.UpdateProgressBar( iStateMachine.iNodesProcessed,
+				iStateMachine.iNodesProcessed+2 );
+
+		// Call the install class api to validate and set the package status
+		TUid uid = TUid::Uid( package->GetPackageUid() );
+		TVersion version, test;
+
+		test = package->GetPackageVersion();
+
+		if (iStateMachine.iInstallManager->GetPackageVersionInfoL(uid, version))
+			{
+			// Compare installed and required verions
+			// to find if upgrade is required.
+			if ( (CompareVersions(test, version) ) == EGreaterFirstVersion)
+				{
+				SLOG8( "Package 0x%08X: upgrade %d.%02d.%d -> %d.%02d.%d",
+						uid.iUid,
+						version.iMajor, version.iMinor, version.iBuild,
+						test.iMajor, test.iMinor, test.iBuild
+						);
+				package->SetPackageStatus(EPackageToBeUpgraded);
+				}
+			else
+				{
+				SLOG5( "Package 0x%08X: v%d.%02d.%d already installed", uid.iUid,
+						version.iMajor, version.iMinor, version.iBuild
+						);
+				package->SetPackageStatus(EPackageInstalled);
+				}
+			}
+		else
+			{
+			SLOG5( "Package 0x%08X: v%d.%02d.%d to be downloaded", uid.iUid,
+					test.iMajor, test.iMinor, test.iBuild
+					);
+			package->SetPackageStatus(EPackageToBeFetched);
+			}
+
+		iStateMachine.SetState( CStateFactory::EStateDownloadChangesFile );
+		}
+	SLOG2( "- BuildDepTreeL(%d)", iStateMachine.iNodesProcessed );
+	}
+
+// -----------------------------------------------------------------------------
+// Requests a download for the dependecy sis package _dep.xml file.
+// -----------------------------------------------------------------------------
+//
+TStateDownloadDepFile::TStateDownloadDepFile(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateDownloadDepFile::Enter() const
+	{
+	//Here fetch the dep file of the current package.
+	SLOG2( "+ FetchDepFileL(): 0x%08X", iStateMachine.iCurrentPackage->GetPackageUid() );
+
+	// TODO:Here the download Url should never be null]
+	// as its mandatory to specify the Url in changes file.
+	TPtrC8 urlPtr(NULL, 0);
+	if (iStateMachine.iCurrentPackage->GetDownloadUrlL() != NULL)
+		{
+		SLOG8_2( "DepPkg URL: '%S'", iStateMachine.iCurrentPackage->GetDownloadUrlL() );
+		urlPtr.Set(iStateMachine.iCurrentPackage->GetDownloadUrlL()->Des() );
+		}
+	else
+		{
+		SLOG8_2( "DepPkg URL: '%S' (default)", iStateMachine.ConfigUrl() );
+		urlPtr.Set( *iStateMachine.ConfigUrl() );
+		}
+
+	User::LeaveIfNull( iStateMachine.iCurrentPackage->GetDepFileName() );
+
+	SLOG2( "Downloading DEP: '%S'", iStateMachine.iCurrentPackage->GetDepFileName() );
+
+	iStateMachine.iDownloadHandler->StartDownloadL(
+		urlPtr,
+		*iStateMachine.iCurrentPackage->GetDepFileName(),
+		iStateMachine.iDepTree->GetDownloadPath(),
+		1);
+	// We don't request a new state after this. When download completes
+	// succesfully, a new state change will be requested.
+	}
+
+void TStateDownloadDepFile::DownloadCompleted(const TInt /* aBytesDownloaded */)
+	{
+	iStateMachine.iRestartAttempt = 0;
+	iStateMachine.SetState( CStateFactory::EStateParseDepFile );
+	}
+
+void TStateDownloadDepFile::DownloadFailed()
+	{
+	LOG_FUNC
+	TState::DownloadFailed( CStateFactory::EStateDownloadDepFile );
+	}
+
+// -----------------------------------------------------------------------------
+// Requests a download for the _changes.xml file.
+// -----------------------------------------------------------------------------
+//
+TStateDownloadChangesFile::TStateDownloadChangesFile(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateDownloadChangesFile::Enter() const
+	{
+	// See if the URL is provided as part of the
+	// dep file, otherwise use the default one.
+	TPtrC8 urlPtr(NULL, 0);
+	if ( iStateMachine.iCurrentPackage->GetURL() != NULL )
+		{
+		SLOG8_2( "Changes URL: '%S'", iStateMachine.iCurrentPackage->GetURL() );
+		urlPtr.Set(iStateMachine.iCurrentPackage->GetURL()->Des());
+		}
+	else
+		{
+		SLOG8_2( "Changes URL: '%S' (default)", iStateMachine.ConfigUrl() );
+		urlPtr.Set( *iStateMachine.ConfigUrl() );
+		}
+
+		//TODO: The only reason why this is back here :
+		//Changes file name for Root is not set when root is parsed. Fix it.
+		iStateMachine.iCurrentPackage->SetChangesFileNameL();
+	SLOG2( "Downloading CHANGES: '%S'", iStateMachine.iCurrentPackage->GetChangesFileName() );
+
+	// Download the changes file
+	iStateMachine.iDownloadHandler->StartDownloadL(
+		urlPtr,
+		*iStateMachine.iCurrentPackage->GetChangesFileName(),
+		iStateMachine.iDepTree->GetDownloadPath(),
+		0);
+	// We don't request a new state after this. When download completes
+	// succesfully, a new state change will be requested by DownloadCompleted()
+	}
+
+void TStateDownloadChangesFile::DownloadCompleted(const TInt /*aBytesDownloaded*/)
+	{
+	LOG_FUNC
+
+	iStateMachine.iNodesProcessed++;
+	iStateMachine.UpdateProgressBar( iStateMachine.iNodesProcessed, iStateMachine.iNodesProcessed+2 );
+
+	iStateMachine.iRestartAttempt = 0;
+	iStateMachine.SetState( CStateFactory::EStateParseChangesFile );
+	}
+
+void TStateDownloadChangesFile::DownloadFailed()
+	{
+	LOG_FUNC
+	TState::DownloadFailed( CStateFactory::EStateDownloadChangesFile );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateStartDependencyDownload::TStateStartDependencyDownload(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateStartDependencyDownload::Enter() const
+	{
+	const TUint32 totalDlSize = iStateMachine.iDepTree->GetTotalDownloadSize();
+	SLOG2( "Starting to download %d bytes", totalDlSize );
+
+	// Remove all downloads before proceeding
+	iStateMachine.iDownloadHandler->CancelAllDownloads();
+
+	// Start progress bar from beginning
+	iStateMachine.iCounterCurrent = 1;
+	iStateMachine.iCounterMax = iStateMachine.iDepTree->CountDownloadNodes();
+
+	// reset to zero for download and install of packages.
+	iStateMachine.iDownloadSize = 0;
+	iStateMachine.iNodesProcessed = 0;
+
+	// Start the dependency download!
+	iStateMachine.SetState( CStateFactory::EStateDownloadDependency );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateDownloadDependency::TStateDownloadDependency(const CStateFactory& aFactory) :
+	TState(aFactory),
+	iRetryDownload(EFalse)
+	{
+	}
+
+void TStateDownloadDependency::Enter() const
+	{
+	SLOG3( "+ FetchPackageL(%d): retry=%d", iStateMachine.iNodesProcessed, iRetryDownload );
+
+	CPackageInfo* fetchPackage = NULL;
+
+	if ( iRetryDownload )
+		{
+		fetchPackage = iStateMachine.iDepTree->GetCurrentFetchNode();
+		}
+	else
+		{
+		iStateMachine.iNodesProcessed++;
+		// always ensure that iCurrentPackage points to the correct one
+		fetchPackage = iStateMachine.iDepTree->GetNextFetchNode();
+		}
+	iStateMachine.iCurrentPackage = fetchPackage;
+
+	if ( !fetchPackage )
+		{
+/*
+		//end of list - we're finished
+		SLOG2( "Uninstalling wrapper 0x%08X", iStateMachine.WrapperPackageUid().iUid );
+		TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage(
+			iStateMachine.WrapperPackageUid() );
+		SLOG2( "Uninstall status: %d", err);
+*/
+		// Wrapper has been uninstalled, ready to exit/launch
+		iStateMachine.SetState( CStateFactory::EStateExit );
+		return;
+		}
+/*
+	// Attempting to fix 'Network connection lost!' errors on 3G. Does not help.
+	SLOG( "Deleting all downloads" );
+	iStateMachine.iDownloadHandler->CancelAllDownloads();
+*/
+	switch ( fetchPackage->GetPackageStatus() )
+		{
+		case EPackageRootToBeInstalled:
+			{
+			//SLOG( "* Installing AppSis" );
+
+			iStateMachine.SetState( CStateFactory::EStateInstallAppSis );
+			}
+			break;
+		case EPackageToBeFetched:
+		case EPackageToBeUpgraded:
+			{
+			SLOG2( "* Package 0x%08X to be Fetched/Upgraded", fetchPackage->GetPackageUid() );
+
+			// Initialize progress bar
+			//ShowGlobalProgressL(R_ADM_DOWNLOAD_WAIT_TEXT, 0, KMaxTInt);
+
+			if ( iStateMachine.iCounterMax > 0 )
+				{
+				iStateMachine.StopWaitNote();
+				// prevent progress bar from starting from previous dl size
+				iStateMachine.iProgressCurrentValue = 0;
+				iStateMachine.iCumulativeDepDownloaded = 0;
+				iStateMachine.iProgressMaxValue = fetchPackage->GetDownloadSize();
+				iStateMachine.ShowProgressBarL(
+						0,
+						iStateMachine.iProgressMaxValue,
+						iStateMachine.iCounterCurrent,
+						iStateMachine.iCounterMax
+						);
+				}
+
+			// TODO:Here the download Url should never be null,
+			// as its mandatory to specify the Url in changes file.
+			TPtrC8 urlPtr(NULL, 0);
+			if (fetchPackage->GetDownloadUrlL() != NULL )
+				{
+				SLOG8_2( "Package URL: '%S'", fetchPackage->GetDownloadUrlL());
+				urlPtr.Set(fetchPackage->GetDownloadUrlL()->Des());
+				}
+			else
+				{
+				SLOG8_2( "Package URL: '%S' (default)", iStateMachine.ConfigUrl() );
+				urlPtr.Set(*iStateMachine.ConfigUrl());
+				}
+
+			User::LeaveIfNull( fetchPackage->GetSisPackageName() );
+
+			SLOG2( "Downloading: '%S'", fetchPackage->GetSisPackageName() );
+			iStateMachine.iDownloadHandler->StartDownloadL(
+				urlPtr,
+				*fetchPackage->GetSisPackageName(),
+				iStateMachine.iDepTree->GetDownloadPath(),
+				2);
+			}
+			break;
+		case EPackageInstalled:
+			{
+			SLOG2( "* Package 0x%08X installed", fetchPackage->GetPackageUid());
+			//FetchPackageL();
+			iStateMachine.SetState( CStateFactory::EStateDownloadDependency );
+			}
+			break;
+		default:
+			{
+			// TODO: Better error handling
+			Panic( EPanicStateFetchStatus );
+			}
+			break;
+		} // switch
+	SLOG2( "- FetchPackageL(%d)", iStateMachine.iNodesProcessed );
+	}
+
+void TStateDownloadDependency::DownloadCompleted(const TInt aBytesDownloaded)
+	{
+	iRetryDownload = EFalse;
+	// Indicate that we've downloaded this amount already to keep progress bar happy
+	iStateMachine.iCumulativeDepDownloaded += aBytesDownloaded;
+	iStateMachine.iDownloadSize = iStateMachine.iCumulativeDepDownloaded;
+	iStateMachine.SetState( CStateFactory::EStateInstallDependency );
+	}
+
+void TStateDownloadDependency::DownloadInProgress(const TInt aAlreadyDownloaded, const TInt aDownloadSize, const TReal32 aAvgDlSpeed)
+	{
+	static TInt32 prevAlready = 0;
+	// Prevents log and event flooding
+	if (aAlreadyDownloaded != prevAlready)
+		{
+		prevAlready = aAlreadyDownloaded;
+
+		iStateMachine.iDownloadSize = aAlreadyDownloaded + iStateMachine.iCumulativeDepDownloaded;
+		iStateMachine.iProgressCurrentValue =
+				iStateMachine.iCumulativeDepDownloaded + aAlreadyDownloaded;
+		if (aAvgDlSpeed > 0)
+			{
+			SLOG4( "DL %7d/%7d (%3.02f kB/s)", aAlreadyDownloaded, aDownloadSize, aAvgDlSpeed/1024 );
+			}
+		else
+			{
+			SLOG3( "DL %7d/%7d", aAlreadyDownloaded, aDownloadSize );
+			}
+		// Update the progress bar
+		iStateMachine.UpdateProgressBar( iStateMachine.iProgressCurrentValue,
+				iStateMachine.iProgressMaxValue );
+		}
+	}
+
+void TStateDownloadDependency::DownloadFailed()
+	{
+	LOG_FUNC
+	iRetryDownload = ETrue;
+	TState::DownloadFailed( CStateFactory::EStateDownloadDependency );
+	}
+
+// -----------------------------------------------------------------------------
+// Uninstalls installed dependencies one at the time
+// -----------------------------------------------------------------------------
+//
+TStateUninstallDependency::TStateUninstallDependency(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateUninstallDependency::Enter() const
+	{
+	CPackageInfo* node = iStateMachine.iDepTree->GetPreviousFetchNode();
+	// Uninstall all the fetched and installed dependencies
+	if (node)
+		{
+		// TODO: Can the package present check be moved to Install handler?. Below is an async function though.
+		if ( (node->GetPackageStatus() == EPackageFetchedInstalled) &&
+			( iStateMachine.iInstallManager->IsPackagePresentL(TUid::Uid(node->GetPackageUid())) ) )
+			{
+			SLOG2( "Uninstalling: 0x%x", node->GetPackageUid() );
+
+			iStateMachine.iInstallManager->
+				SilentUninstallPackageAsync( TUid::Uid(node->GetPackageUid()) );
+			// the next event will be triggered by InstallCompleted() below
+			}
+		else
+			{
+			SLOG2( "Skipping: 0x%x", node->GetPackageUid() );
+			// Process the next package
+			iStateMachine.SetState( CStateFactory::EStateUninstallDependency );
+			}
+		}
+	else
+		{
+		SLOG( "About to uninstall wrapper" );
+		// We've processed the dependency tree, uninstall the wrapper
+		// Failure reason is set before calling EPrepareForExitWithError
+		iStateMachine.SetState( CStateFactory::EStateExit );
+		}
+	}
+
+// This is actually handling the UNinstallation completed event
+void TStateUninstallDependency::InstallCompleted(TInt aStatus)
+	{
+	SLOG2( "UninstallDependencyCompleted(): %d", aStatus );
+	// Try to uninstall next dependency, without minding the status code
+	iStateMachine.SetState( CStateFactory::EStateUninstallDependency );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateLaunchApp::TStateLaunchApp(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateLaunchApp::Enter() const
+	{
+	RArray<TUid> appSids;
+	TBool launchStatus = ETrue;
+	// Get the SID list from installer
+	TUid uid = TUid::Uid( iStateMachine.iCurrentPackage->GetPackageUid() );
+	const TBool status = iStateMachine.iInstallManager->GetPackageSidsL(uid, appSids);
+
+	if ( status )
+		{
+#ifdef DEBUG_ADM
+		for (TInt i = 0; i < appSids.Count(); i++)
+			{
+			SLOG3( "SID[%d]=0x%08X", i, appSids[i] );
+			}
+#endif
+		TApaAppInfo appInfo;
+		RApaLsSession lsSession;
+
+		// Connect to Apparc
+		if ( !lsSession.Connect() )
+			{
+			CleanupClosePushL( lsSession );
+
+			for (TInt i = 0; i < appSids.Count(); i++)
+				{
+				TInt ret = lsSession.GetAppInfo( appInfo, appSids[i] );
+				// Get the app Info of the Sid.
+				if ( ret == KErrNone )
+					{
+					HBufC* iconFilename = NULL;
+					// Get the application icon, if any. It's used in the launch dialog.
+					ret = lsSession.GetAppIcon( appSids[i], iconFilename );
+					if (ret == KErrNone)
+						{
+						// We have a launchable exe and icon: get the executable name and caption
+						iStateMachine.iLaunchName = appInfo.iFullName;
+						iStateMachine.iLaunchCaption = appInfo.iCaption;
+						iStateMachine.iLaunchIconFilename.Copy( *iconFilename );
+						SLOG5( "LaunchExe %d '%S' '%S' '%S'", i, &iStateMachine.iLaunchName, &iStateMachine.iLaunchCaption, &iStateMachine.iLaunchIconFilename );
+
+						delete iconFilename;
+						break;
+						}
+					// The .exe didn't have an icon, try next .exe.
+					// We're assuming that only exe's having an icon are the ones we should launch
+					} // if
+				} // for
+			CleanupStack::PopAndDestroy( &lsSession );
+			} //if ( !lsSession.Connect() )
+		else
+			{
+			launchStatus = EFalse;
+			}
+		} // if( status )
+	else
+		{
+		launchStatus = EFalse;
+		}
+
+	appSids.Close();
+
+	if ( launchStatus && iStateMachine.iLaunchName.Length() )
+		{
+		iStateMachine.SetAppLaunch(ETrue);
+		iStateMachine.iAppUi.ShowLaunchPromptL( iStateMachine.iLaunchCaption, iStateMachine.iLaunchIconFilename );
+		}
+	else
+		{
+		// No executable to launch!
+		iStateMachine.SetState( CStateFactory::EStateExit );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void TStateLaunchApp::UserAccepted()
+	{
+	RApaLsSession lsSession;
+
+	// Connect to Apparc
+	User::LeaveIfError( lsSession.Connect() );
+	CleanupClosePushL( lsSession );
+
+	CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+	cmdLine->SetExecutableNameL( iStateMachine.iLaunchName );
+	cmdLine->SetCommandL( EApaCommandRun );
+
+	SLOG3( "Launching %S '%S'", &iStateMachine.iLaunchCaption, &iStateMachine.iLaunchName );
+	// Launch the application
+	// TODO: Better error handling
+	User::LeaveIfError( lsSession.StartApp( *cmdLine ) );
+
+	CleanupStack::PopAndDestroy( 2, &lsSession ); // cmdLine, lsSession
+
+	iStateMachine.SetState( CStateFactory::EStateExit );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void TStateLaunchApp::UserRejected()
+	{
+	SLOG( "User denied application launch" );
+	iStateMachine.SetAppLaunch(EFalse);
+	iStateMachine.SetState( CStateFactory::EStateExit );
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateExit::TStateExit(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateExit::Enter() const
+	{
+	SLOG2( "Exit (%d)", iStateMachine.FailedState() );
+
+#ifdef FEATURE_INSTALL_RESUME
+	// FailedState is checked to differentiate a completion of successful menu launch from failure cases.
+	// Also uninstall the wrapper, when the resume information file is not required
+	// (in case of Bootstrap failure mode - KCmdLineCancelAdmNoResume)
+	if ( ( iStateMachine.FailedState() == CStateFactory::EStateLast ) ||
+			 ( iStateMachine.FailedState() == KUnknownState ) ||
+			 ( !iStateMachine.ResumeRequired() )
+			)
+		{
+		// Do the final cleanup here: remove the wrapper package, which
+		// will also remove the bootstrap
+		SLOG2( "Uninstalling wrapper 0x%08X", iStateMachine.WrapperPackageUid().iUid );
+		const TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage(
+				iStateMachine.WrapperPackageUid() );
+		if (err != KErrNone)
+			{
+			SLOG2( "! Uninstall failed (%d)", err );
+			}
+
+		// Remove resume info files
+		RemoveResumeFiles();
+		}
+	else
+		{
+		// Remove only the bootstrap.
+		// Wrapper is retained for Menu launch.
+		// It is possible that bootstrap is already removed in previous unsuccessful menu launch
+		if ( iStateMachine.iInstallManager->IsPackagePresentL( KUidBootstrap ) )
+			{
+			SLOG2( "Uninstalling bootstrap 0x%08X", KUidBootstrap );
+			const TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage( KUidBootstrap );
+			// ignore any errors
+			if (err != KErrNone)
+				{
+				SLOG2( "! Uninstall failed (%d)", err );
+				}
+			}
+		}
+#else
+	// Do the final cleanup here: remove the wrapper package
+	SLOG2( "Uninstalling wrapper 0x%08X", iStateMachine.WrapperPackageUid().iUid );
+	const TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage(
+			iStateMachine.WrapperPackageUid() );
+	if (err != KErrNone)
+		{
+		SLOG2( "! Uninstall failed (%d)", err );
+		}
+#endif // FEATURE_INSTALL_RESUME
+
+#ifdef FEATURE_REPORTING
+	// Report only the specified cases
+	switch ( iStateMachine.ExitReason() )
+		{
+	case EExitNoError:
+	case EUserCancelled:
+//	case EDownloadFailed:
+	case EInsufficientMemory:
+	case EDeviceNotSupported:
+	case EInstallationFailed:
+	case EInvalidBootstrapVersion:
+	case ERootInstallationFailed:
+		Report();
+		break;
+	default:
+		break;
+		}
+#else
+	// We can exit the application
+	// The default failure reason is "No Error"
+	iStateMachine.iAppUi.ExitApp();
+
+	// Above call does not return
+#endif
+	}
+
+// -----------------------------------------------------------------------------
+// RemoveResumeFiles()
+// On successful completion of the installation process, remove the resume info file.
+// -----------------------------------------------------------------------------
+//
+void TStateExit::RemoveResumeFiles() const
+	{
+	if ( BaflUtils::FileExists(iStateMachine.FsSession(), KADMResumeInfoFile) )
+		{
+		RArray< TPtrC > lineBuffer;
+		TInt ret = 0;
+		HBufC* buffer = ReadConfigFile( iStateMachine.FsSession(), KADMResumeInfoFile, lineBuffer, ret );
+
+		if ( buffer && ret == KErrNone )
+			{
+			// Get AppFileName from the config file
+			TPtrC appFileNameLine = GetConfigValue( KRFieldAppFileName, lineBuffer, ret );
+			if ( ret == KErrNone )
+				{
+				SLOG2( "AppFileName = '%S'", &appFileNameLine );
+
+				if ( BaflUtils::FileExists(iStateMachine.FsSession(), appFileNameLine) )
+					{
+					const TInt err = iStateMachine.FsSession().Delete( appFileNameLine );
+					SLOG2( "AppFile has been deleted (%d)", err);
+					}
+				}
+			else
+				{
+				SLOG2( "Failed to read value from resume info (%d)", ret );
+				}
+			delete buffer;
+			}
+		ret = iStateMachine.FsSession().Delete( KADMResumeInfoFile );
+		SLOG2( "Resume info has been deleted (%d)", ret );
+
+		// TODO: Need to remove the copied dep file as well
+		}
+	}
+#ifdef FEATURE_REPORTING
+// -----------------------------------------------------------------------------
+// Creates a report about the installation and sends that to the server
+// -----------------------------------------------------------------------------
+//
+void TStateExit::Report() const
+	{
+	_LIT8(KFmtVersion, "%d.%02d.%d");
+	_LIT(KOK, "OK");
+	TBuf8<KMaxFileName> url;
+	url.Copy( *iStateMachine.ConfigUrl() );
+
+	// -----------------------------------------------------------------------------
+	// The base report URL is:
+	// http://server/root/x.yy.z/reason/flags/OK
+	//
+	// where
+	//
+	// http://server/root/     ConfigUrl()
+	// x.yy.z                  ADM version formatted as %d.%02d.%d
+	// reason                  iExitReason
+	// flags                   Flags defined below in Report Version 1
+	// OK                      Non-existing file
+	//
+	// -----------------------------------------------------------------------------
+	// Report Version 1
+	//
+	//31        11 10  9  8  7  6  5  4  3  2  1  0
+	// +-------+--+--+--+--+--+--+--+--+--+--+--+--+
+	// |reservd|  |  |                 |           |
+	// +-------+--+--+--+--+--+--+--+--+--+--+--+--+
+	//
+	//      value
+	// bits range  description
+	//  0-3  0-15  Report version
+	//
+	// Other bits for version 1
+	//
+	//      value
+	// bits range  description
+	//  4-9  0-63  Number of packages downloaded
+	//   10   1    Ovi Store running
+	//   11   1    Application launched
+	// -----------------------------------------------------------------------------
+	//
+
+	// Get the ADM version
+	TVersion version;
+	iStateMachine.iInstallManager->GetPackageVersionInfoL(KUidADMApp, version);
+
+#if 0
+	const TUint32 KReportVersion = 1;
+	TUint32 flags;
+	flags  = KReportVersion                                        << 0;  // 4 bits (0-15)
+	flags |= (iStateMachine.iDepTree->CountDownloadNodes() & 0x3f) << 4;  // 6 bits (0-63)
+	flags |= iStateMachine.OviStoreRunning()                       << 10; // 1 bit
+	flags |= iStateMachine.AppLaunch()                             << 11; // 1 bit
+	SLOG2( "Exit: 0x%08x", flags );
+#endif
+
+	url.AppendFormat(KFmtVersion, version.iMajor, version.iMinor, version.iBuild);
+	url.Append('/');
+	url.AppendNum( iStateMachine.ExitReason() );
+	url.Append('/');
+	url.AppendNum( iStateMachine.OviStoreRunning() );
+	url.Append('/');
+	url.AppendNum( iStateMachine.ResumingInstallation() );
+	url.Append('/');
+#if 0
+	url.AppendNumFixedWidthUC(flags, EHex, 8);
+	url.Append('/');
+	url.AppendNum( iStateMachine.OviStoreRunning() );
+	url.Append('/');
+	url.AppendNum( iStateMachine.AppLaunch() );
+	url.Append('/');
+#endif
+	iStateMachine.iDownloadHandler->StartDownloadL(
+		url,
+		KOK,
+		iStateMachine.iDepTree->GetDownloadPath(),
+		0);
+	}
+
+// -----------------------------------------------------------------------------
+// Ignore "in progress" event calls.
+// -----------------------------------------------------------------------------
+//
+void TStateExit::DownloadInProgress(const TInt /* aAlreadyDownloaded */, const TInt /* aDownloadSize */, const TReal32 /* aAvgDlSpeed */)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// Transfer control to ExitApp().
+// -----------------------------------------------------------------------------
+//
+void TStateExit::DownloadCompleted(const TInt /* aBytesDownloaded */)
+	{
+	iStateMachine.iAppUi.ExitApp();
+	}
+
+// -----------------------------------------------------------------------------
+// Transfer control to ExitApp().
+// -----------------------------------------------------------------------------
+//
+void TStateExit::DownloadFailed()
+	{
+	iStateMachine.iAppUi.ExitApp();
+	}
+
+// -----------------------------------------------------------------------------
+// Transfer control to ExitApp().
+// -----------------------------------------------------------------------------
+//
+void TStateExit::DownloadCancelled()
+	{
+	iStateMachine.iAppUi.ExitApp();
+	}
+#endif
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStatePrepareExitWithError::TStatePrepareExitWithError(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStatePrepareExitWithError::Enter() const
+	{
+	// Show the user a wait note, if needed
+	iStateMachine.iAppUi.HandleFailure();
+
+	// TODO: FIX THIS! DlMgr requires some time for its AOs to do the cleanup.
+	User::After(1000000);
+	iStateMachine.iDownloadHandler->CancelAllDownloads();
+	iStateMachine.iDepTree->RemoveDownloadedFiles( iStateMachine.FsSession() );
+
+#ifdef FEATURE_INSTALL_RESUME
+	// Backup the resume info for future launch
+	if ( iStateMachine.ResumeRequired() )
+		{
+		// Create the resume information
+		if ( CreateInstallationResumeInfo() == KErrNone )
+			{
+			// Dependencies are not uninstalled if launched from Menu
+			iStateMachine.SetState( CStateFactory::EStateExit );
+			return;
+			}
+		}
+	// If no resume info required or CreateInstallationResumeInfo fails.
+	iStateMachine.SetState( CStateFactory::EStateUninstallDependency );
+#else
+	// Trigger the dependency uninstallation
+	iStateMachine.SetState( CStateFactory::EStateUninstallDependency );
+#endif // FEATURE_INSTALL_RESUME
+	}
+
+// -----------------------------------------------------------------------------
+// CreateInstallationResumeInfo
+// Backup the necessary information to continue the installation later i.e.
+// from the application menu grid.
+// -----------------------------------------------------------------------------
+//
+#define CHECK(a) {    \
+	if (a != KErrNone) \
+		goto failed;   \
+	pos++;             \
+	}
+
+TInt TStatePrepareExitWithError::CreateInstallationResumeInfo() const
+	{
+	SLOG( "+ CreateInstallationResumeInfo()" );
+
+	// This is increment in each CHECK() macro
+	TInt pos = 0;
+
+	// Step 0: Backup the required files to ADM Private folder.
+	// (Also the names are written to resume info file)
+	TRAPD( err, BackupFilesL() );
+	CHECK(err);
+
+	RFile outFile;
+	CPackageInfo* node = NULL;
+
+	TInt numberOfNodes = iStateMachine.iDepTree->NodesCount();
+	// Skip the main application
+	if (numberOfNodes > 0)
+		{
+		numberOfNodes--;
+		}
+
+	err = outFile.Open( iStateMachine.FsSession(), KADMResumeInfoFile, EFileWrite | EFileStreamText | EFileShareAny );
+	CHECK(err);
+
+	// Step 1: Write the application name
+	node = iStateMachine.iDepTree->GetRootNode();
+	SLOG3( "Saving state for '%S' (%d)", node->GetPackageName(), numberOfNodes );
+	err = WriteToConfigFile( outFile, KRFieldAppName, *node->GetPackageName() );
+	CHECK(err);
+
+	// Step 2: Write the depPkg UIDs to resume info file.
+	// A new resume info file is already created as part of the "BackupFilesL()"
+	// If user presses cancel before the fetchlist is constructed, then this loop will not execute.
+	for (TInt i = 0; i < numberOfNodes; i++)
+		{
+		node =  iStateMachine.iDepTree->GetFetchNode( i );
+		SLOG2( "Adding info: 0x%08X", node->GetPackageUid() );
+
+		err = WriteIntToConfigFile( outFile, KRFieldDepPkgUid, node->GetPackageUid() );
+		CHECK(err);
+		}
+
+#if 0
+	node = iStateMachine.iDepTree->GetRootNode();
+	SLOG2( "Adding main: 0x%08X", node->GetPackageUid() );
+
+	// Step 3: Write the Root pkg UID to resume info file.
+	// TODO: Check whether this is really needed.
+	err = WriteIntToConfigFile( outFile, KRootPkgUid, node->GetPackageUid() );
+	CHECK(err);
+#endif
+
+	// Step 4: Write the BootstrapVersion to resume info file.
+	err = WriteIntToConfigFile( outFile, KRFieldBootstrap, iStateMachine.BootstrapVersion() );
+	CHECK(err);
+
+	// Step 5: Write the Wrapper installed drive to resume info file.
+	err = WriteIntToConfigFile( outFile, KRFieldWrapperDrive, iStateMachine.iWrapperInstalledDrive );
+	CHECK(err);
+
+	// Step 6: Write the Wrapper Package UID.
+	err = WriteIntToConfigFile( outFile, KRFieldWrapperPkgUid, iStateMachine.WrapperPackageUid().iUid );
+
+	if (err != KErrNone)
+		{
+failed:
+		SLOG3( "Resume info creation failed (%d: %d)", pos, err );
+		// Remove the resume info file in error situation as it might not contain
+		// all the information needed to continue the installation
+		const TInt deleteStatus = iStateMachine.FsSession().Delete(KADMResumeInfoFile);
+		SLOG2( "Resume info has been removed (%d)", deleteStatus );
+		}
+
+	if (pos)
+		{
+		outFile.Close();
+		}
+
+	SLOG2( "- CreateInstallationResumeInfo(): %d", err );
+
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// BackupFiles
+// In case of failure during the complete installation process,
+// backup the required files for future launch.
+// -----------------------------------------------------------------------------
+//
+void TStatePrepareExitWithError::BackupFilesL() const
+	{
+#if 0
+	HBufC* destFileName = NULL;
+	TInt err = KErrNone, pos = 0;
+
+	// Backup the main application sis file to a folder. - Copy to ADM Private folder?!
+	TParsePtrC appFileName( *iStateMachine.SisFilename() );
+
+	destFileName = HBufC::NewLC( appFileName.NameAndExt().Length() + KADMPrivatePath().Length() );
+	TPtr nameBufPtr = destFileName->Des();
+
+	nameBufPtr.Append( KADMPrivatePath );
+	nameBufPtr.Append( appFileName.NameAndExt() );
+
+	// TODO: Do the file copying in AO
+	CFileMan* fileMan = CFileMan::NewL( iStateMachine.FsSession() );
+	CleanupStack::PushL(fileMan);
+	err = fileMan->Copy( *iStateMachine.SisFilename(), *destFileName );
+	CleanupStack::PopAndDestroy(fileMan);
+
+	if (err != KErrNone)
+		{
+failed:
+		CleanupStack::PopAndDestroy(destFileName);
+		SLOG3( "Failed to create backup (%d: %d)", pos, err );
+		User::Leave(err);
+		}
+
+	// Backup the info. The file is not present yet.
+	RFile outFile;
+	err = outFile.Replace( iStateMachine.FsSession(), KADMResumeInfoFile, EFileWrite | EFileStreamText | EFileShareAny );
+	CHECK(err);
+
+	// TODO: Backup the depfile in case of Bootstrap version 2 and save the name as well.
+
+	// Write the AppFilename to resume info file.
+	err = WriteToConfigFile( outFile, KAppFileName, destFileName->Des() );
+	CHECK(err);
+	CleanupStack::PopAndDestroy(); // destFileName
+#endif
+	// Backup the info. The file is not present yet.
+	RFile outFile;
+
+	// If no resume info file exists, create a new one.
+	// In case a resume info file exists, replace the file with a new one.
+	// (One resume information file supported at any point of time)
+	TInt err = outFile.Replace( iStateMachine.FsSession(), KADMResumeInfoFile, EFileWrite | EFileStreamText | EFileShareAny );
+
+	if (err != KErrNone)
+		{
+		goto failed;
+		}
+
+	// TODO: Backup the depfile in case of Bootstrap version 2 and save the name as well.
+
+	// Write the AppFilename to resume info file.
+	err = WriteToConfigFile( outFile, KRFieldAppFileName, iStateMachine.SisFilename()->Des() );
+
+	if (err != KErrNone)
+		{
+failed:
+		SLOG2( "- BackupFiles(): LEAVE %d", err );
+		outFile.Close();
+		User::Leave(err);
+		}
+
+	outFile.Close();
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateInstallDependency::TStateInstallDependency(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateInstallDependency::Enter() const
+	{
+	SLOG3( "Installing '%S' to %c:", iStateMachine.iDownloadedFile, (char)iStateMachine.iCurrentPackage->GetInstallDrive() );
+	// Replace the downloading note with installing note
+	iStateMachine.ShowInstallingWaitNoteL( iStateMachine.iCounterCurrent, iStateMachine.iCounterMax );
+	iStateMachine.StopProgressBar();
+
+	// TODO: FIX THIS! This is an ugly hack to give time for S60 DlMgr AOs to
+	// finish their cleanups. To fix this properly, we need to wait till we get
+	// "EHttpDlDeleting" event before starting the installation. This has to be
+	// called before CancelAllDownloads(), otherwise DlMgrServer will die in
+	// CBase91 PANIC.
+	User::After(1000000);
+	// We need to remove the download(s) before starting the installation.
+	// Otherwise we might get KErrInUse error while installing. This happens
+	// quite often when using E: / F: drive as the download drive.
+	iStateMachine.iDownloadHandler->CancelAllDownloads();
+
+	// Wait for the "DlDeleting" event
+	iStateMachine.iDlDeletingSemaphore.Wait(KDlDeletingTimeout);
+
+	iStateMachine.iInstallManager->SilentInstallPackageL(
+			*iStateMachine.iDownloadedFile,
+			iStateMachine.iCurrentPackage->GetInstallDrive()
+		 );
+
+	iStateMachine.UpdateProgressBar(iStateMachine.iCumulativeDepDownloaded,
+			iStateMachine.iProgressMaxValue );
+	}
+
+void TStateInstallDependency::Exit() const
+	{
+	// Remove the wait note
+#if 0
+	if ( !iStateMachine.OviStoreRunning() )
+		{
+		iStateMachine.StopWaitNote();
+		}
+#endif
+	}
+
+void TStateInstallDependency::InstallCompleted(TInt aStatus)
+	{
+	LOG_FUNC
+
+	CPackageInfo *curr = iStateMachine.iDepTree->GetCurrentFetchNode();
+	User::LeaveIfNull(curr);
+	SLOG3( "Removing '%S%S'", &iStateMachine.iDepTree->GetDownloadPath(), curr->GetSisPackageName() );
+
+	// Delete the .sis file as its no longer required.
+	iStateMachine.iDepTree->DeleteFile( iStateMachine.FsSession(),
+					*curr->GetSisPackageName(),
+					iStateMachine.iDepTree->GetDownloadPath()
+					);
+	if (aStatus == KErrNone)
+		{
+		if (curr->GetPackageStatus() == EPackageToBeFetched )
+			{
+			curr->SetPackageStatus(EPackageFetchedInstalled);
+			}
+		else if (curr->GetPackageStatus() == EPackageRootToBeInstalled )
+			{
+			curr->SetPackageStatus(EPackageRootInstalled);
+			}
+		else
+			{
+			SLOG2( "Unexpected package status %d", curr->GetPackageStatus() );
+			}
+
+		// Dependency package succesfully installed, update the counter to keep UI happy
+		iStateMachine.iCounterCurrent++;
+		// Download the next dependency
+		iStateMachine.SetState( CStateFactory::EStateDownloadDependency );
+		}
+	else
+		{
+		SLOG2( "Dependency installation failed %d", aStatus );
+		iStateMachine.SetFailureReason( EInstallationFailed );
+		iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TStateInstallAppSis::TStateInstallAppSis(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateInstallAppSis::Enter() const
+	{
+	// We need to find the root package
+	if (iStateMachine.iCurrentPackage == NULL)
+		{
+		SLOG( "Finding root package" );
+		CPackageInfo* package = NULL;
+		while ( (package = iStateMachine.iDepTree->GetNextFetchNode()) != NULL )
+			{
+			if (package->GetPackageStatus() == EPackageRootToBeInstalled)
+				{
+				SLOG3( "Root: UID 0x%08X, '%S'", package->GetPackageUid(), package->GetPackageName() );
+				break;
+				}
+			}
+		iStateMachine.iCurrentPackage = package;
+		}
+	// iStateMachine.iCurrentPackage should now point to a correct packege,
+	// the application.sis, in this case. Just make sure, it really does that.
+	// Do we have a package set?
+	if ( iStateMachine.iCurrentPackage )
+		{
+		if ( iStateMachine.BootstrapVersion() == 3 )
+			{
+/*
+			SLOG( "Uninstalling smartinstaller (bootstrap)" );
+			TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage(
+					iStateMachine.WrapperPackageUid() );
+			SLOG2( "Uninstall status: %d", err);
+*/
+			// Delete the dependency file that was provided with the wrapper
+			// TODO: Remove if(), DeleteFile() copes with NULL filenames.
+			if ( iStateMachine.DepFilename() )
+				{
+				iStateMachine.iAppUi.DeleteFile( *iStateMachine.DepFilename() );
+				}
+
+#ifdef FEATURE_LAUNCH_INSTALLED_APP
+			SLOG( "Dependencies and application are installed, ready to launch!" );
+			iStateMachine.SetState( CStateFactory::EStateLaunchApp );
+#else
+			SLOG( "Dependencies and application are installed, ready to exit!" );
+			iStateMachine.SetState( CStateFactory::EStateExit );
+#endif
+			}
+		else
+			{
+			SLOG3( "* Installing AppSis 0x%08x '%S'", iStateMachine.iCurrentPackage->GetPackageUid(), iStateMachine.SisFilename() );
+
+			// TODO: Leave or not to leave?
+			//User::LeaveIfNull( iStateMachine.SisFilename() );
+
+			// Update the progress bar
+			iStateMachine.UpdateProgressBar( iStateMachine.iProgressMaxValue,
+				iStateMachine.iProgressMaxValue );
+
+			//First try silent install - if package is self-signed, this will fail
+			//according to policy, so retry with a normal install.
+
+			//User might not have been prompted for drive selection.
+			//In that case, it is ok to prompt for drive selection as part of the Wrapper Package Installation.
+			//This will be the case when files are injected into the Bootstrap import folder and not in a common "?:/ADM" drive.
+
+			TChar installDrive = iStateMachine.SisFilename()->Des()[0];
+			installDrive.UpperCase();
+			if (installDrive < 'A' || installDrive > 'Z')
+				{
+				installDrive = KNoDriveSelected;
+				}
+
+			// If the wrapper installed drive is not selected, use the application.sis
+			// destination drive as the installed drive. This way the developer can
+			// control, if he/she wants to prompt the installation drive or force it
+			// already in the wrapper/installer .pkg file. This can be controlled
+			// by using '!' as the destination drive (=prompt) or by using a fixed
+			// drive letter A->Z (=don't prompt).
+			if ( iStateMachine.iWrapperInstalledDrive == KNoDriveSelected )
+				{
+				iStateMachine.iWrapperInstalledDrive = installDrive;
+				}
+
+			if ( iStateMachine.iWrapperInstalledDrive != KNoDriveSelected )
+				{
+				SLOG3( "Installing AppSis '%S' to %c:", iStateMachine.SisFilename(), (char)iStateMachine.iWrapperInstalledDrive );
+
+				// First show the wait note and then remove progress bar.
+				// MUCH less flicker this way.
+				iStateMachine.ShowWaitNoteL( R_ADM_FINALIZING_INSTALLATION_WAIT_TEXT );
+				iStateMachine.StopProgressBar();
+				iStateMachine.iInstallManager->SilentInstallPackageL( *iStateMachine.SisFilename(), iStateMachine.iWrapperInstalledDrive );
+				}
+			else
+				{
+				SLOG( "! No installation drive selected, prompting" );
+				// User will be prompted for the drive.
+
+				//TODO: This is a hack. Change the Installcompleted logic to accomodate this.
+				iStateMachine.StopWaitNote();
+				iStateMachine.StopProgressBar();
+				TInt aStatus = iStateMachine.iInstallManager->
+						InstallPackage( *iStateMachine.SisFilename() );
+				iStateMachine.SetNonSilentInstallation(ETrue);
+				iStateMachine.HandleInstallCompletedL( aStatus );
+				}
+			} // if
+		}
+	else
+		{
+		// Hmm. We should've had a root package, but apparently we didn't. Odd.
+		SLOG( "! Unexpected root package. PANIC" );
+		PanicInState(EPanicStateUnexpectedRootPackage);
+		}
+	}
+
+void TStateInstallAppSis::InstallCompleted(TInt aStatus)
+	{
+	LOG_FUNC
+
+	//It is possible for silent installation of the main app to fail due to insufficient memory
+	//TODO: would it be wise to move the below conditions to InstallManager and have some different error returned to statemachine?
+
+	if ( ( aStatus == SwiUI::KSWInstErrSecurityFailure ) || ( aStatus == SwiUI::KSWInstErrInsufficientMemory ) )
+		{
+		// We have a wait note displayed. If silent install failed,
+		// it needs to be removed so the installer UI won't be affected.
+		iStateMachine.StopWaitNote();
+
+		//SwiUI collapses the real error, Swi::ESignatureSelfSigned is what we should
+		//be checking here. SwiUI::GetLastErrorL is not implemented
+		//If the silent install fails, because of a self signed package, try again
+		//with interactive install.
+		// This is a synchronous call which returns the control here after
+		// installation is finished (or cancelled, or an error occurs or..)
+		aStatus = iStateMachine.iInstallManager->InstallPackage(
+				*iStateMachine.SisFilename() );
+		iStateMachine.SetNonSilentInstallation(ETrue);
+		}
+	else if ( aStatus == KErrNone )
+		{
+		// We end up here, if the silent installation completes succesfully
+		iStateMachine.SetSilentInstallationOk(ETrue);
+		}
+	// Was installation succesful?
+	if (aStatus == KErrNone)
+		{
+		CPackageInfo *curr = iStateMachine.iDepTree->GetCurrentFetchNode();
+		User::LeaveIfNull(curr);
+		//TODO: What if root package is set in HandleInstallComplete!!!
+		// The next if should _always_ be true here
+		if ( curr->GetPackageStatus() == EPackageRootToBeInstalled )
+			{
+			curr->SetPackageStatus(EPackageRootInstalled);
+			}
+		else if ( curr->GetPackageStatus() != EPackageRootInstalled )
+			{
+			SLOG2( "! Invalid root package status %d", curr->GetPackageStatus() );
+			}
+
+		CPackageInfo* fetchPackage = iStateMachine.iDepTree->GetNextFetchNode();
+
+		// TODO: This is duplicated code from TStateDownloadDependency
+		if ( !fetchPackage )
+			{
+/*
+			//end of list - we're finished
+			SLOG( "Uninstalling wrapper" );
+			TInt err = iStateMachine.iInstallManager->SilentUnInstallPackage(
+					iStateMachine.WrapperPackageUid() );
+			SLOG2( "Uninstall status: %d", err);
+			// Wrapper has been uninstalled, ready to exit
+*/
+#ifdef FEATURE_LAUNCH_INSTALLED_APP
+			iStateMachine.SetState( CStateFactory::EStateLaunchApp );
+#else
+			iStateMachine.SetState( CStateFactory::EStateExit );
+#endif
+			return;
+			}
+		else
+			{
+			// We should be at the end of the list, but seems that we're not.
+			SLOG2( "! Unexpected package 0x%08X. PANIC", fetchPackage->GetPackageUid() );
+			PanicInState(EPanicStateUnexpectedPackage);
+			}
+		}
+	else
+		{
+		const TExitReason reason = (aStatus == SwiUI::KSWInstErrUserCancel)
+				? EUserCancelled
+				: EInstallationFailed;
+		iStateMachine.SetFailureReason( reason );
+		iStateMachine.SetState( CStateFactory::EStatePrepareExitWithError );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// Confirms the user to continue the download when download threshold is exceeded
+// -----------------------------------------------------------------------------
+//
+TStateConfirmDownload::TStateConfirmDownload(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateConfirmDownload::Enter() const
+	{
+	// Show download query as we are roaming
+	iStateMachine.ShowDownloadQueryL( R_ADM_DL_PROMPT_TEXT );
+	// the next state will get invoked by the user reply to the query
+	}
+
+void TStateConfirmDownload::UserAccepted()
+	{
+	// This is called when the user has selected "Yes" in the confirmation query
+	iStateMachine.SetState( CStateFactory::EStateStartDependencyDownload );
+	}
+
+// -----------------------------------------------------------------------------
+// Confirms the user to continue the download if device is roaming
+// -----------------------------------------------------------------------------
+//
+TStateConfirmRoamingDownload::TStateConfirmRoamingDownload(const CStateFactory& aFactory) :
+	TState(aFactory)
+	{
+	}
+
+void TStateConfirmRoamingDownload::Enter() const
+	{
+	// Show download query as we are roaming
+	iStateMachine.ShowDownloadQueryL( R_ADM_DL_PROMPT_TEXT, R_ADM_ROAMING_TEXT );
+	// the next state will get invoked by the user reply to the query
+	}
+
+void TStateConfirmRoamingDownload::UserAccepted()
+	{
+	// This is called when the user has selected "Yes" in the confirmation query
+	iStateMachine.SetState( CStateFactory::EStateStartDependencyDownload );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMXmlParser.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,594 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CXmlParser implementation
+*
+*
+*/
+
+
+#include <SenDomFragment.h>
+#include <SenXmlReader.h>
+#include <SenElement.h>
+#include "ADMXmlParser.h"
+#include "ADMPackageInfo.h"
+#include "macros.h"
+#include "config.h"
+
+_LIT(KSisExtension,".sis");
+
+CXmlParser* CXmlParser::NewLC()
+	{
+	CXmlParser* object = new ( ELeave ) CXmlParser();
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+CXmlParser* CXmlParser::NewL()
+	{
+	CXmlParser* object = CXmlParser::NewLC();
+	CleanupStack::Pop();
+	return object;
+	}
+
+CXmlParser::CXmlParser()
+	:iXmlReader(NULL),
+	iDomFragment(NULL)
+	{
+	}
+
+CXmlParser::~CXmlParser()
+	{
+	iRfs.Close();
+
+	if ( iXmlReader )
+		{
+		delete iXmlReader;
+		iXmlReader = NULL;
+		}
+	if ( iDomFragment )
+		{
+		delete iDomFragment;
+		iDomFragment = NULL;
+		}
+	}
+
+void CXmlParser::ConstructL()
+	{
+	User::LeaveIfError(iRfs.Connect());
+	}
+
+void CXmlParser::InitL()
+	{
+	// Do the cleanup as this function could be
+	// called multiple times.
+	if ( iXmlReader )
+	   {
+	   delete iXmlReader;
+	   iXmlReader = NULL;
+	   }
+
+	if ( iDomFragment )
+	   {
+	   delete iDomFragment;
+	   iDomFragment = NULL;
+	   }
+
+	iXmlReader = CSenXmlReader::NewL(EErrorOnUnrecognisedTags);
+	iDomFragment = CSenDomFragment::NewL();
+
+	iXmlReader->SetContentHandler(*iDomFragment);
+	iDomFragment->SetReader(*iXmlReader);
+	}
+
+void CXmlParser::GetChangesInfoL(const TDesC& aChangesFileName, CPackageInfo *packageInfo,CDepTree* mainTree)
+	{
+	InitL();
+
+	iXmlReader->ParseL(iRfs, aChangesFileName);
+
+	// Get package uid
+	// Leave if package uid not present
+	CSenElement* packageElement;
+	packageElement = iDomFragment->AsElement().Element(KFieldDepPackageUid);
+	if (packageElement == NULL)
+		{
+		User::Leave(EMissingPackageUid);
+		}
+	TPtrC8 packageUidPtr = packageElement->Content();
+	TUint32 packageUid=0;
+	if (StringToInt(packageUidPtr,packageUid) != KErrNone)
+		{
+		User::Leave(EInvalidPackageUid);
+		}
+
+	//Check whether the packageId received in changes file is same as the one already stored in the packageinfo from dependency info.
+	//If there is mismatch, exit. If it matches, proceed further.
+	if(packageUid != packageInfo->iPackageUid)
+		{
+		User::Leave(EIncorrectPackageUid);
+		}
+
+	packageElement = iDomFragment->AsElement().Element(KFieldDepPackageName);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iPackageName );
+		packageInfo->iPackageName = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingPackageName);
+		}
+
+	// Get dependent package vendor
+	packageElement = iDomFragment->AsElement().Element(KFieldDepVendor);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iVendor );
+		packageInfo->iVendor = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingVendorName);
+		}
+
+	// Get Priority for the drive
+	//This is optional.Hence no Leave for Missing Priority.
+	//Default is 0.
+	packageElement = iDomFragment->AsElement().Element(KFieldDrivePriority);
+	if(packageElement)
+		{
+		TPtrC8 drivePtr = packageElement->Content();
+		if (StringToInt(drivePtr,packageInfo->iDrivePriority) != KErrNone)
+			{
+			User::Leave(EInvalidDrivePriority);
+			}
+		}
+
+	// Get the mandatory drive.
+	//This is optional.Hence no Leave for Missing info.
+	//Default is none.
+	packageElement = iDomFragment->AsElement().Element(KFieldMandatoryInstallDrive);
+	if(packageElement)
+		{
+		packageInfo->iMandatoryInstallDrive = packageElement->ContentUnicodeL()->Des()[0];
+		}
+
+	GetVersionInfoL(packageInfo,mainTree->GetMachineId());
+	}
+
+void CXmlParser::GetVersionInfoL(CPackageInfo *packageInfo,TUint32 machineId)
+	{
+	RPointerArray<CSenElement> versionInfo;
+	CleanupClosePushL(versionInfo);
+
+	iDomFragment->AsElement().ElementsL(versionInfo,KFieldVersionInformation);
+	const TInt versionInfoCount(versionInfo.Count());
+	TVersion latestVersion(0,0,0);
+	TInt latestVersionCount = -1;
+	CSenElement* packageElement;
+
+	//Changes file will contain different versions of the package along
+	//with the list of supporrted devices for that perticular version.
+
+	//If no version was specified in the dep file, then the latest should be read.
+	//While reading the latest, it should be confirmed whether the same supports the given device.
+
+	for (TInt i=0; i<versionInfoCount; ++i)
+		{
+		packageElement = versionInfo[i]->Element(KFieldDepPackageVersion);
+		if (packageElement == NULL)
+			{
+			User::Leave(EMissingDepVersion);
+			}
+
+		TPtrC8 versionPtr = packageElement->Content();
+		TVersion ver;
+		if (SetVersion(versionPtr, ver) == EFalse)
+			{
+			User::Leave(EInvalidVersion);
+			}
+
+		//Check whether the MachineID of this device is supported for this corresponding version in the changes file.
+		if(checkMachineIdL(versionInfo[i],machineId))
+			{
+			if((CompareVersions(packageInfo->iVersion,ver) == EEqualVersion)||(CompareVersions(packageInfo->iVersion,ver) == EGreaterSecondVersion))
+				{
+				//Version specified in the dep file of parent matches the version in the changes file which inturn matches to the MachineID. :)
+				//Or there exists a greater version in changes file.
+				latestVersion = ver;
+				latestVersionCount = i;
+				}
+			}
+		}//end of for loop
+
+	if(latestVersionCount == -1)
+		{
+		//No matching Machine IDs at all for any version specified in the changes file.
+		User::Leave(EUnsupportedDevice);
+		}
+	else
+		{
+		packageInfo->iVersion = latestVersion;
+		}
+
+	// Get dependent package URL
+	packageElement= versionInfo[latestVersionCount]->Element(KFieldDepUrl);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iUrl );
+		TPtrC8 urlPtr = packageElement->Content();
+
+		HBufC8* url = urlPtr.AllocL();
+
+		packageInfo->iUrl = url;
+		}
+	else
+		{
+		User::Leave(EMissingPackageUrl);
+		}
+
+
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldDepFileName);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iDepFileName );
+		packageInfo->iDepFileName = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingDepFileName);
+		}
+
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldInstallPackageName);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iSisPackageName );
+		packageInfo->iSisPackageName = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingSisFileName);
+		}
+
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldDateOfSubmission);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iDateOfSubmission );
+		packageInfo->iDateOfSubmission = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingSubmissionDate);
+		}
+	//TODO: There needs to be a separate function to convert the Date format into a string format.
+	//Call that function here.
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldDateOfModification);
+	if (packageElement)
+		{
+		DELETE_IF_NONNULL( packageInfo->iDateOfModification );
+		packageInfo->iDateOfModification = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EMissingModificationDate);
+		}
+
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldDownloadSize);
+	TPtrC8 downloadSizePtr = packageElement->Content();
+	TUint32 downloadSize=0;
+	if (StringToInt(downloadSizePtr,downloadSize) != KErrNone)
+		{
+		User::Leave(EInvalidPackageUid);
+		}
+	if(downloadSize)
+		{
+		packageInfo->iDownloadSize = downloadSize;
+		}
+	else
+		{
+		User::Leave(EMissingDownloadSize);
+		}
+
+	packageElement = versionInfo[latestVersionCount]->Element(KFieldInstalledSize);
+	TPtrC8 installedSizePtr = packageElement->Content();
+	TUint32 installedSize=0;
+	if (StringToInt(installedSizePtr,installedSize) != KErrNone)
+		{
+		User::Leave(EInvalidPackageUid);
+		}
+	if(installedSize)
+		{
+		packageInfo->iInstalledSize = installedSize;
+		}
+	else
+		{
+		User::Leave(EMissingInstalledSize);
+		}
+	CleanupStack::PopAndDestroy(&versionInfo);
+}
+
+TBool CXmlParser::checkMachineIdL(CSenElement *versionInfo, TUint32 machineId)
+	{
+	RPointerArray<CSenElement> deviceInfo;
+	CleanupClosePushL(deviceInfo);
+
+	versionInfo->ElementsL(deviceInfo,KFieldSupportedDevice);
+	const TInt deviceInfoCount(deviceInfo.Count());
+
+	CSenElement* packageElement;
+
+	// See if the device is supported by this
+	// particular version, by comparing the list
+	// of machine ids supported by the version
+	// with the machine id of device. .
+	for(TInt i=0;i<deviceInfoCount;i++)
+		{
+		packageElement = deviceInfo[i]->Element(KFieldDeviceMachineId);
+
+		if (packageElement == NULL)
+			{
+			User::Leave(EMissingMachineID);
+			}
+		TPtrC8 packageUidPtr = packageElement->Content();
+		TUint32 changesMachineId = 0;
+		if (StringToInt(packageUidPtr,changesMachineId) != KErrNone)
+			{
+			User::Leave(EInvalidMachineID);
+			}
+		if(changesMachineId == machineId)
+			{
+			CleanupStack::PopAndDestroy(&deviceInfo);
+			return ETrue;
+			}
+		}
+	CleanupStack::PopAndDestroy(&deviceInfo);
+	return EFalse;
+	}
+
+CPackageInfo* CXmlParser::GetDepContentsL(const TDesC& aDepFileName, CPackageInfo *packageInfo, CDepTree* aMainTree)
+	{
+	InitL();
+
+	iXmlReader->ParseL(iRfs, aDepFileName);
+
+	// Get package uid
+	// Leave if package uid not present
+	CSenElement* packageElement;
+	packageElement = iDomFragment->AsElement().Element(KFieldPackageUid);
+	if (packageElement == NULL)
+		{
+		User::Leave(EMissingPackageUid);
+		}
+	TPtrC8 packageUidPtr = packageElement->Content();
+	TUint32 packageUid=0;
+	if (StringToInt(packageUidPtr,packageUid) != KErrNone)
+		{
+		User::Leave(EInvalidPackageUid);
+		}
+
+	User::LeaveIfNull(aMainTree);
+	if(aMainTree->IsDepTreeEmpty())
+		{
+		// Add root package(first package) to the list
+		packageInfo = CPackageInfo::NewL();
+		packageInfo->iPackageUid = packageUid;
+		packageInfo->iPackageStatus = EPackageRootToBeInstalled;
+		aMainTree->AddPackageInfo(packageInfo);
+		}
+	else
+		{
+		User::LeaveIfNull(packageInfo);
+		if(packageInfo->iPackageUid != packageUid)
+			{
+			//the package pointer doesn't match the depfile
+			User::Leave(EInvalidPackageUid);
+			}
+		}
+
+	// Get Dep version
+	// Leave if Dep version is not present
+	packageElement = iDomFragment->AsElement().Element(KFieldDepVersion);
+	if (packageElement == NULL)
+		{
+		User::Leave(EMissingDepVersion);
+		}
+	else
+		{
+		TPtrC8 versionPtr = packageElement->Content();
+		TVersion ver;
+		if (SetVersion(versionPtr, ver) == EFalse)
+			{
+			User::Leave(EInvalidVersion);
+			}
+		packageInfo->iDepVersion = ver;
+		}
+
+	// Parse the dependencies
+	SetDependenciesL(packageInfo, aMainTree);
+
+	return packageInfo;
+	}
+
+void CXmlParser::SetDependenciesL(CPackageInfo* aPackageInfo, CDepTree* aMainTree)
+	{
+	// Get dependencies
+	RPointerArray<CSenElement> dependency;
+	CleanupClosePushL(dependency);
+
+	iDomFragment->AsElement().ElementsL(dependency,KFieldDependency);
+	const TInt DependencyCount(dependency.Count());
+
+	User::LeaveIfNull(aMainTree);
+	User::LeaveIfNull(aPackageInfo);
+
+
+	TBool IsNonRootNodeDep = 1;
+
+	// Check if the dependencies are of the root node.
+	// If yes, then clear the flag
+	if (aMainTree->GetRootNode() == aPackageInfo)
+		{
+		IsNonRootNodeDep = 0;
+		}
+
+	for (TInt i=0; i<DependencyCount; ++i)
+		{
+		// Get dependency UID
+		CSenElement* packageElement;
+		TUint32 depPackageUid = 0;
+		packageElement = dependency[i]->Element(KFieldDepPackageUid);
+		if (packageElement == NULL)
+			{
+			User::Leave(EMissingPackageUid);
+			}
+		TPtrC8 depPackageUidPtr = packageElement->Content();
+		if ( StringToInt(depPackageUidPtr,depPackageUid) != KErrNone )
+			{
+			User::Leave(EInvalidPackageUid);
+			}
+
+		// Check if the dependency already present in the tree.
+		CPackageInfo* depPackageInfo = aMainTree->LocatePackageInDepTree(depPackageUid);
+
+		// If dependency is listed in the tree,
+		// create a new edge for it
+		if (depPackageInfo != NULL)
+			{
+			aPackageInfo->AddEdgeL(depPackageInfo);
+			continue;
+			}
+
+		// Dependency is not already present, so create a new node
+		depPackageInfo = CPackageInfo::NewL();
+		aMainTree->AddPackageInfo(depPackageInfo);
+
+		depPackageInfo->iPackageUid = depPackageUid;
+		aPackageInfo->AddEdgeL(depPackageInfo);
+
+		// Get dependent package name
+		packageElement = dependency[i]->Element(KFieldDepPackageName);
+		if (packageElement)
+			{
+			depPackageInfo->iPackageName = packageElement->ContentUnicodeL();
+			}
+		else if(IsNonRootNodeDep)
+			{
+			User::Leave(EMissingPackageName);
+			}
+		else
+			{
+			depPackageInfo->iPackageName = HBufC::NewL(
+												depPackageUidPtr.Length() +
+												KSisExtension().Length());
+
+			TPtr depPackageName(depPackageInfo->iPackageName->Des());
+			depPackageName.Copy(depPackageUidPtr);
+			depPackageName.Append(KSisExtension);
+			}
+
+
+		// Get dependent package version
+		packageElement = dependency[i]->Element(KFieldDepPackageVersion);
+
+		if(packageElement)
+			{
+			TPtrC8 versionPtr = packageElement->Content();
+			TVersion ver;
+			if (SetVersion(versionPtr, ver) == EFalse)
+				{
+				User::Leave(EInvalidVersion);
+				}
+			depPackageInfo->iVersion = ver;
+			}
+		else if(IsNonRootNodeDep)
+			{
+			User::Leave(EMissingPackageVersion);
+			}
+
+		// Get dependent package vendor
+		packageElement = dependency[i]->Element(KFieldDepVendor);
+		if (packageElement)
+			{
+			depPackageInfo->iVendor = packageElement->ContentUnicodeL();
+			}
+		else if(IsNonRootNodeDep)
+			{
+			User::Leave(EMissingVendorName);
+			}
+
+#ifdef url_support
+		// Get dependent package URL
+		packageElement = dependency[i]->Element(KFieldDepUrl);
+
+		if (packageElement)
+			{
+			TPtrC8 urlPtr = packageElement->Content();
+			HBufC8* url = urlPtr.AllocL();
+
+			TPtr8 urlPtr2 = url->Des();
+			urlPtr2.Copy(urlPtr);
+
+			depPackageInfo->iUrl = url;
+			}
+		else if(IsNonRootNodeDep)
+			{
+			User::Leave(EMissingPackageUrl);
+			}
+#else
+		// Ignore the Url(if specified) for the root node.
+		if(IsNonRootNodeDep)
+			{
+			// Get dependent package URL
+			packageElement = dependency[i]->Element(KFieldDepUrl);
+			if (packageElement)
+				{
+				depPackageInfo->iUrl = packageElement->Content().AllocL();
+				}
+			else
+				{
+				User::Leave(EMissingPackageUrl);
+				}
+			}
+#endif
+		//Set the changes file name
+		depPackageInfo->SetChangesFileNameL();
+		}
+	CleanupStack::PopAndDestroy(&dependency);
+	}
+
+TInt CXmlParser::StringToInt(const TDesC8& aString, TUint32& aInt)
+	{
+	 // Function will return EFalse if string conversion fails.
+	 TLex8 lex(aString);
+	 lex.SkipSpace();
+
+	 if (lex.Peek() == '0')
+		 {
+		 lex.Inc();
+		 TChar c( lex.Peek() );
+		 c.LowerCase();
+		 if (c == 'x')
+			 {
+			 lex.Inc();
+			 return ( lex.Val(aInt,EHex) );
+			 }
+		 else
+			 {
+			 lex.UnGet();
+			 }
+		 }
+	 return ( lex.Val(aInt,EDecimal) );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/ADMglobalqueryobserver.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     CGlobalQueryObserver implementation
+*
+*
+*/
+
+
+//  INCLUDES
+#include <eikenv.h>
+#include <e32base.h>
+
+#include "ADMglobalqueryobserver.h"
+#include "ADMappui.h"
+
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::NewL()
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver*
+		CGlobalQueryObserver::NewL(CADMAppUi* aCBootstrapAppUiObj)
+	{
+	CGlobalQueryObserver* active =
+		new ( ELeave ) CGlobalQueryObserver(aCBootstrapAppUiObj);
+	CleanupStack::PushL( active );
+	active->ConstructL();
+	CleanupStack::Pop();
+	return active;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::~CGlobalQueryObserver()
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver::~CGlobalQueryObserver()
+	{
+	Cancel();
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::Start()
+// Start the activator.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::Start()
+	{
+	SetActive();
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::CGlobalQueryObserver()
+// C++ default constructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver::CGlobalQueryObserver(CADMAppUi* aCBootstrapAppUiObj)
+: CActive( EActivePriorityDefault ),
+  iCBootstrapAppUiObj( aCBootstrapAppUiObj )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::ConstructL()
+// Symbian default constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::ConstructL()
+	{
+	CActiveScheduler::Add( this );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::RunL()
+// Handle an event.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::RunL()
+	{
+	Cancel();
+	if ( iSelectItemFlag )
+		{
+		iCBootstrapAppUiObj->HandleGlobalQueryResponseL( iStatus.Int() );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::DoCancel()
+// Implement the Cancel protocol.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::DoCancel()
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::SetSelectItemFlag()
+// Set iSelectItemFlag.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::SetSelectItemFlag()
+	{
+	iSelectItemFlag = ETrue;
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::SetSelectItemFlag()
+// Set iSelectItemFlag.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::UnsetSelectItemFlag()
+	{
+	iSelectItemFlag = EFalse;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/src/progressdialog.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "progressdialog.h"
+#include <aknglobalprogressdialog.h>
+CProgressDialog* CProgressDialog::NewL(MProgressDialogClient& aOwner)
+{
+	CProgressDialog* self = new(ELeave) CProgressDialog(aOwner);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+CProgressDialog::CProgressDialog(MProgressDialogClient& aOwner) :
+	CActive(EPriorityStandard), iOwner(aOwner)
+{
+}
+
+void CProgressDialog::ConstructL()
+{
+	iProgress = CAknGlobalProgressDialog::NewL();
+	CActiveScheduler::Add(this);
+}
+
+void CProgressDialog::StartL(const TDesC& aPrompt, TInt aFinal)
+{
+	if(!IsActive()) {
+		iProgress->ShowProgressDialogL(iStatus, aPrompt, 0, aFinal);
+		SetActive();
+	}
+	iCurrentValue = 0;
+	iFinalValue = aFinal;
+}
+
+void CProgressDialog::Update(TInt aProgress, TInt aFinal)
+{
+	iCurrentValue = aProgress;
+	iFinalValue = aFinal;
+	iProgress->UpdateProgressDialog(aProgress, iFinalValue);
+}
+
+void CProgressDialog::Add(TInt aProgress)
+{
+	iCurrentValue += aProgress;
+	iProgress->UpdateProgressDialog(iCurrentValue, iFinalValue);
+}
+
+void CProgressDialog::Stop()
+{
+	iProgress->ProcessFinished();
+}
+
+void CProgressDialog::RunL()
+{
+	if(iStatus.Int() == EAknSoftkeyCancel)
+		iOwner.ProgressDialogCancelled();
+}
+
+CProgressDialog::~CProgressDialog()
+{
+	Cancel();
+	delete iProgress;
+}
+
+void CProgressDialog::DoCancel()
+{
+	iProgress->CancelProgressDialog();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/xml/changesfile.dtd	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!ELEMENT Package ( Name, Uid, Vendor,Information+, Description )>
+	<!ELEMENT Name (#PCDATA)>
+	<!ELEMENT Uid (#PCDATA)>
+	<!ELEMENT Vendor (#PCDATA)>
+	<!ELEMENT Information (Version, DependentFileName,InstallPackageName,DateOfSubmission, DateOfModification, SupportedDevices+, DownloadSize, InstalledSize, Url)>
+		<!ELEMENT Version (#PCDATA)>
+		<!ELEMENT DependentFileName (#PCDATA)>
+		<!ELEMENT InstallPackageName(#PCDATA)>
+		<!ELEMENT DateOfSubmission (#PCDATA)>
+		<!ELEMENT DateOfModification (#PCDATA)>
+		<!ELEMENT SupportedDevices (Name, MachineId)>
+			<!ELEMENT Name (#PCDATA)>
+			<!ELEMENT MachineId (#PCDATA)>
+		<!ELEMENT DownloadSize (#PCDATA)>
+		<!ELEMENT InstalledSize (#PCDATA)>
+		<!ELEMENT Url (#PCDATA)>
+	<!ELEMENT Description (#PCDATA)>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/xml/depcontents.dtd	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!ELEMENT DepFileContents ( PackageUid, Version, Dependency+ )>
+	<!ELEMENT PackageUid (#PCDATA)>
+	<!ELEMENT Version (#PCDATA)>
+	<!ELEMENT Dependency ( Uid, Name?, Version, Vendor?, Url?, Description?, DependencyAttribute* )>
+	<!ELEMENT Uid (#PCDATA)>
+	<!ELEMENT Name (#PCDATA)>
+	<!ELEMENT Version (#PCDATA)>
+	<!ELEMENT Vendor (#PCDATA)>
+	<!ELEMENT Url (#PCDATA)>
+	<!ELEMENT Description (#PCDATA)>
+	<!ELEMENT DependencyAttribute ( DependencyAttribute_IntValue | DependencyAttribute_StrValue )>
+		<!ELEMENT DependencyAttribute_IntValue (#PCDATA)>
+		<!ELEMENT DependencyAttribute_StrValue (#PCDATA)>
+		<!ATTLIST DependencyAttribute Name CDATA #REQUIRED>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/adm/xml/test_depcontents.xml	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE DepFileContents SYSTEM "depcontents.dtd">
+
+<DepFileContents>
+    <PackageUid>0x12340002</PackageUid>
+    <Version>0.1</Version>
+    
+    <Dependency>
+        <Uid>0x12340580</Uid>        
+    </Dependency>
+    
+    <Dependency>
+        <Uid>0x12340582</Uid>
+        <Name>Testerweb</Name>
+        <Version>0.1, 0.5</Version>
+        <Vendor>Nokia Corp</Vendor>
+        <Url>http://www.nokia.com/fetchtest</Url>
+        <Description>This package needs to be downloaded from the URL specified to the Vendor</Description>
+        
+        <DependencyAttribute Name="FutureAttribName">
+            <DependencyAttribute_StrValue>Testerweb</DependencyAttribute_StrValue>
+        </DependencyAttribute>        
+    </Dependency>        
+</DepFileContents>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/data/smartinstaller.rss	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Resource file for Bootstrap
+*
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME SIBS    // 4 letter ID
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <appinfo.rh>
+#include "smartinstaller.loc"
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+//    Define the resource file signature
+//    This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+		{
+		}
+
+// -----------------------------------------------------------------------------
+//
+//    Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+		{
+		buf="SIBS";
+		}
+
+// -----------------------------------------------------------------------------
+//
+//    Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+	{
+	menubar = r_focusevent_menubar;
+	cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+	}
+
+
+RESOURCE MENU_BAR r_focusevent_menubar
+	{
+	titles =
+		{
+		};
+	}
+
+// ----------------------------------------------------------------------------
+//
+// r_bootstrap_localisable_app_info
+//
+// ----------------------------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_bootstrap_localisable_app_info
+	{
+	short_caption = string_r_sibs_short_caption_string;
+	caption_and_icon =
+		CAPTION_AND_ICON_INFO
+		{
+		caption = string_r_sibs_caption_string;
+		};
+	}
+
+RESOURCE TBUF r_http_transaction_err            {   buf = string_r_http_transaction_err;          }
+RESOURCE TBUF r_installation_failure_err        {   buf = string_r_installation_failure_err;      }
+RESOURCE TBUF r_installation_cancelled          {   buf = string_r_installation_cancelled;        }
+
+// New strings
+RESOURCE TBUF r_adm_verifying_sw_text           {   buf = string_r_adm_verifying_sw_text;         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/data/smartinstaller_reg.rss	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Registration Resource file for Bootstrap
+*
+*
+*/
+
+
+#include "smartinstaller.loc"
+#include <appinfo.rh>
+#include <smartinstaller.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x2002CCCD
+
+RESOURCE APP_REGISTRATION_INFO
+  {
+  app_file="smartinstaller";
+  localisable_resource_file =  "\\resource\\apps\\smartinstaller";
+  localisable_resource_id = R_BOOTSTRAP_LOCALISABLE_APP_INFO;
+
+  hidden = KAppIsHidden;
+  embeddability = KAppNotEmbeddable;
+  newfile = KAppDoesNotSupportNewFile;
+  }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/dll/smartinstallerdll.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Wrapper DLL
+*
+*
+*/
+
+#include <cmmanager.h>      // @since 3.2
+#include <cmdestination.h>  // @since 3.2
+
+#include "smartinstallerdll.h"
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHelper* CHelper::NewL()
+	{
+	CHelper* self = CHelper::NewLC();
+	CleanupStack::Pop();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHelper* CHelper::NewLC()
+	{
+	CHelper* self = new (ELeave) CHelper();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Default destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHelper::~CHelper()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUint CHelper::GetDefaultIapForSNAPL(const TUint aSNAPId)
+	{
+	RCmManager cmManager;
+	TUint iap( 0 );
+
+	cmManager.OpenLC();
+	RCmDestination dest( cmManager.DestinationL( aSNAPId ) );
+	CleanupClosePushL( dest );
+	if ( dest.ConnectionMethodCount() <= 0 )
+		{
+		User::Leave( KErrNotFound );
+		}
+
+	RCmConnectionMethod meth( dest.ConnectionMethodL(0) );
+	CleanupClosePushL(meth);
+	iap = meth.GetIntAttributeL(CMManager::ECmIapId);
+	CleanupStack::PopAndDestroy( 3, &cmManager ); // cMeth, dest, cmManager
+
+	return iap;
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHelper::GetSnapIapsL(const TUint aSNAPId, RArray<TUint32>& aIapArray)
+	{
+	RCmManager cmManager;
+	cmManager.OpenLC();
+
+	RCmDestination dest = cmManager.DestinationL( aSNAPId );
+	CleanupClosePushL(dest);
+	const TInt count = dest.ConnectionMethodCount();
+	if ( count <= 0 )
+		{
+		User::Leave(KErrNotFound);
+		}
+	// Fill the array with IAP IDs. We're assuming they are in priority order.
+	for (TInt i = 0; i < count; i++)
+		{
+		RCmConnectionMethod meth( dest.ConnectionMethodL(i) );
+		CleanupClosePushL(meth);
+		aIapArray.AppendL( meth.GetIntAttributeL(CMManager::ECmIapId) );
+		CleanupStack::PopAndDestroy(&meth);
+		}
+	CleanupStack::PopAndDestroy( 2, &cmManager ); // destination, cmManager
+	}
+
+// ---------------------------------------------------------------------------
+// Default 2nd level constructor
+// ---------------------------------------------------------------------------
+//
+void CHelper::ConstructL()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CHelper::CHelper()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/dll/smartinstallerdll.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Wrapper DLL
+*
+*
+*/
+
+#include <e32base.h>
+
+// Forward declarations
+class RCmManager;
+
+class MHelperWrapper
+	{
+public:
+	virtual TUint GetDefaultIapForSNAPL(const TUint aSNAPId) = 0;
+	virtual void GetSnapIapsL(const TUint aSNAPId, RArray<TUint32>& aIapArray) = 0;
+	};
+
+class CHelper : public CBase,
+	public MHelperWrapper
+	{
+public:
+	IMPORT_C static CHelper* NewL();
+	IMPORT_C static CHelper* NewLC();
+	IMPORT_C ~CHelper();
+
+	TUint GetDefaultIapForSNAPL(const TUint aSNAPId);
+	void GetSnapIapsL(const TUint aSNAPId, RArray<TUint32>& aIapArray);
+
+private:
+	CHelper();
+	void ConstructL();
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/eabi/smartinstalleru.def	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,12 @@
+EXPORTS
+	_ZN7CHelper4NewLEv @ 1 NONAME
+	_ZN7CHelper5NewLCEv @ 2 NONAME
+	_ZN7CHelperD0Ev @ 3 NONAME
+	_ZN7CHelperD1Ev @ 4 NONAME
+	_ZN7CHelperD2Ev @ 5 NONAME
+	_ZTI7CHelper @ 6 NONAME ; #<TI>#
+	_ZTV7CHelper @ 7 NONAME ; #<VT>#
+	_ZN7CHelper12GetSnapIapsLEjR6RArrayImE @ 8 NONAME
+	_ZN7CHelper21GetDefaultIapForSNAPLEj @ 9 NONAME
+	_ZThn4_N7CHelper12GetSnapIapsLEjR6RArrayImE @ 10 NONAME ; #<thunk>#
+	_ZThn4_N7CHelper21GetDefaultIapForSNAPLEj @ 11 NONAME ; #<thunk>#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/group/bld.inf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Build file for Bootstrap
+*
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../loc/smartinstaller.loc	MW_LAYER_LOC_EXPORT_PATH(smartinstaller.loc)
+
+PRJ_MMPFILES
+smartinstaller.mmp
+smartinstallerdll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/group/smartinstaller.mmp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     MMP file for Bootstrap
+*
+*
+*/
+
+
+TARGET            smartinstaller.exe
+TARGETTYPE        exe
+UID		  0x100039CE 0x2002CCCD
+
+// Use maximum stack of 80kB
+EPOCSTACKSIZE		0x14000
+
+SECUREID	  	0x2002CCCD
+
+SOURCEPATH		..\src
+SOURCE			bootstrap.cpp
+SOURCE			bootstrapapplication.cpp
+SOURCE			bootstrapappui.cpp
+SOURCE			bootstrapdocument.cpp
+SOURCE			bootstrapglobalwaitnoteobserver.cpp
+SOURCE 			bootstrapinstallationobserver.cpp
+SOURCE			bootstrapstatemachine.cpp
+
+SOURCEPATH		..\..\common
+SOURCE			config.cpp
+SOURCE			utils.cpp
+
+SOURCEPATH		..\data
+
+START RESOURCE	smartinstaller.rss
+LANG		00 01 02 03 04 05 06 07 08 09 10 13 14 15 16 17 18 25 26 27 28 29
+LANG		30 31 32 33 37 39 42 44 45 49 50 51 54 57 58 59 65 67 68 70 76 78 79
+LANG		83 93 94 96 129 157 158 159 160 161 186 326 327 401 402
+LANG		sc
+HEADER
+TARGETPATH resource\apps
+END	//RESOURCE
+
+START RESOURCE	smartinstaller_reg.rss
+#ifdef WINSCW
+TARGETPATH		\private\10003a3f\apps
+#else
+TARGETPATH		\private\10003a3f\import\apps
+#endif
+END	//RESOURCE
+
+
+
+USERINCLUDE		..\inc
+USERINCLUDE		..\dll
+USERINCLUDE		..\..\common
+USERINCLUDE		..\loc
+
+SYSTEMINCLUDE	\epoc32\include\private\swi
+SYSTEMINCLUDE	\epoc32\include\private
+SYSTEMINCLUDE	\epoc32\include
+SYSTEMINCLUDE	\epoc32\include\ecom
+
+SYSTEMINCLUDE	\epoc32\include\osextensions
+SYSTEMINCLUDE	\epoc32\include\middleware
+SYSTEMINCLUDE	\epoc32\include\domain\middleware
+
+
+LIBRARY			euser.lib
+LIBRARY			apparc.lib
+LIBRARY			cone.lib
+LIBRARY			eikcore.lib
+LIBRARY			avkon.lib
+LIBRARY			commonengine.lib
+LIBRARY			efsrv.lib
+LIBRARY			estor.lib
+LIBRARY			eikcoctl.lib
+LIBRARY			eikdlg.lib
+LIBRARY			aknnotify.lib
+LIBRARY			sisregistryclient.lib   // Sis Registry information
+LIBRARY			apgrfx.lib
+LIBRARY			ws32.lib
+LIBRARY			SWInstCli.lib		// Silent Installation
+LIBRARY			DownloadMgr.lib		// Download
+LIBRARY			flogger.lib		// Logging
+LIBRARY     		centralrepository.lib
+LIBRARY     		esock.lib
+LIBRARY     		connmon.lib
+LIBRARY			SenXml.LIB		// Xml parser
+
+LANG SC
+
+VENDORID		0
+CAPABILITY		NetworkServices	TrustedUI ReadUserData ReadDeviceData WriteDeviceData
+
+//MACRO USE_ADMCHANGES_URL //URL read from ADM changes file is disabled.
+
+MACRO PRODUCTION_RELEASE
+MACRO FEATURE_BOOTSTRAP_SETIAP	// Use browser IAP
+MACRO USE_LOGFILE
+MACRO DEBUG_ADM
+MACRO DO_LOG					// Additional logging
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/group/smartinstallerdll.mmp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     MMP file for SmartInstaller DLL
+*
+*
+*/
+
+
+TARGET		smartinstaller.dll
+TARGETTYPE	DLL
+UID		0x1000008D 0x2002CCD0
+VENDORID	0
+//SECUREID	0x2002CCCF
+CAPABILITY	NetworkServices TrustedUI ReadUserData ReadDeviceData WriteDeviceData
+
+SOURCEPATH	..\dll
+SOURCE		smartinstallerdll.cpp
+
+USERINCLUDE	..\dll
+USERINCLUDE	..\inc
+USERINCLUDE	..\..\common
+USERINCLUDE	..\loc
+
+SYSTEMINCLUDE	\epoc32\include\private\swi
+SYSTEMINCLUDE	\epoc32\include\private
+SYSTEMINCLUDE	\epoc32\include
+SYSTEMINCLUDE	\epoc32\include\ecom
+
+SYSTEMINCLUDE	\epoc32\include\osextensions
+SYSTEMINCLUDE	\epoc32\include\middleware
+SYSTEMINCLUDE	\epoc32\include\domain\middleware
+
+LIBRARY		euser.lib
+LIBRARY		cmmanager.lib
+
+DEFFILE		smartinstaller.def
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapapplication.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Main Application File for Bootstrap
+*
+*
+*/
+
+
+#ifndef __BOOTSTRAPAPPLICATION_H__
+#define __BOOTSTRAPAPPLICATION_H__
+
+// INCLUDES
+#include <aknapp.h>
+
+// CLASS DECLARATION
+
+/**
+* CBootstrapApplication application class.
+* Provides factory to create concrete document object.
+*/
+class CBootstrapApplication : public CAknApplication
+	{
+	public: // Functions from base classes
+
+		/**
+		* From CApaApplication, AppDllUid.
+		* @return Application's UID
+		*/
+		TUid AppDllUid() const;
+
+	protected: // Functions from base classes
+
+		/**
+		* From CApaApplication, CreateDocumentL.
+		* Creates CCBootstrapDocument document object. The returned
+		* pointer in not owned by the CBootstrapApplication object.
+		* @return A pointer to the created document object.
+		*/
+		CApaDocument* CreateDocumentL();
+	};
+
+#endif // __BOOTSTRAPAPPLICATION_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapappui.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CBootstrapAppUi application UI class declaration.
+*
+*
+*/
+
+
+#ifndef __BOOTSTRAPAPPUI_H__
+#define __BOOTSTRAPAPPUI_H__
+
+// INCLUDES
+#include <eikapp.h>
+#include <aknappui.h>
+#include <aknglobalconfirmationquery.h>
+#include "debug.h"
+
+// FORWARD DECLARATIONS
+class CAknGlobalNote;
+class CGlobalWaitNoteObserver;
+class CStateMachine;
+
+enum AppErrorId
+		{
+		ENoAppError = 0,					//0
+		EInstallationFailed,
+		EDownloadFailed				//2
+		};
+
+// CLASS DECLARATION
+/**
+* CBootstrapAppUi application UI class.
+* Interacts with the user through the UI and request message processing
+* from the handler class
+*/
+class CBootstrapAppUi : public CAknAppUi
+		{
+public: // Constructors and destructor
+
+	/**
+	 * ConstructL.
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CBootstrapAppUi.
+	 * C++ default constructor. This needs to be public due to
+	 * the way the framework constructs the AppUi
+	 */
+	CBootstrapAppUi();
+
+	/**
+	 * ~CBootstrapAppUi.
+	 * Virtual Destructor.
+	 */
+	virtual ~CBootstrapAppUi();
+
+	/**
+	 * ExitApp
+	 * Handle exit of App for success as well failures on all cases
+	 */
+	void ExitApp(TInt aAppState);
+
+	/**
+	 * HandleGlobalWaitNoteCancel
+	 * Handle user press cancel
+	 */
+	void HandleGlobalWaitNoteCancel(const TInt& aStatus);
+
+	/**
+	 * SetErrorId
+	 * Set the Error Id - to determine the type of error note displayed.
+	 */
+	inline void SetErrorId( AppErrorId aErrorId )
+		{
+		iErrorId = aErrorId;
+		};
+
+	inline CEikonEnv* EikonEnv() const {return iEikonEnv;}
+
+private:
+
+	/**
+	 * InitializeSIL
+	 * Init the app and start the SM.
+	 */
+	void InitializeSIL();
+
+	/**
+	 * WaitForInstallCompleteL
+	 * Subscribe to the installer and get the wrapper UID (latest installation) once installer is free.
+	 */
+	void WaitForInstallCompleteL();
+
+	/**
+	 * HandleForegroundEventL
+	 * Push the application to background.
+	 * Called by the framework when the application switches
+	 * to foreground.
+	 */
+	void HandleForegroundEventL(TBool aForeground);
+
+	/**
+	 * SendToBackgroundL
+	 * Sends application to background.
+	 */
+	void SendToBackgroundL(TBool aBackground = ETrue);
+
+	/**
+	 * ShowGlobalWaitNoteL
+	 * Show the Global wait note. (starts in EBSStateInit)
+	 */
+	void ShowGlobalWaitNoteL();
+
+	/**
+	 * StopGlobalWaitNoteL
+	 * Stop the Global wait note incase of failure.
+	 */
+	void StopGlobalWaitNoteL();
+
+	/**
+	 * ShowNoteL
+	 * Show an error note incase of failure.
+	 */
+	void ShowNoteL( const TAknGlobalNoteType& aType , const TInt& aResourceId );
+
+	/**
+	 * GetLatestInstalledL
+	 * Get the UID of latest installation.
+	 */
+	TUint32 GetLatestInstalledL();
+
+private: // Data
+	friend class CStateMachine;
+
+	CStateMachine* iStateMachine;  //< owns
+
+	CAknGlobalNote* iGlobalWaitNote; //< owns
+
+	CGlobalWaitNoteObserver* iGlobalWaitNoteObserver; //< owns
+
+	/**
+	 * ETrue, if Ovi Store client is running
+	 */
+	TBool iOviStoreRunning;
+
+	/**
+	 * Wrapper package UID
+	 */
+	TUint32 iWrapperPackageUid;
+
+	/**
+	 * Can Bootstrap UI be moved to foreground
+	 */
+	TBool iAllowForeground;
+
+	/**
+	 * WaitNoteId
+	 */
+	TInt iGlobalWaitNoteId;
+
+	/**
+	 * ErrorId - used to determine whether and type of error note to be displayed
+	 */
+	AppErrorId iErrorId;
+
+	INIT_OBJECT_DEBUG_LOG
+};
+
+#endif // __BootstrapAPPUI_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapconst.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of Bootstrap constants.
+*
+*
+*/
+
+#ifndef __BOOTSTRAPCONST_H__
+#define __BOOTSTRAPCONST_H__
+
+#include <e32base.h>
+
+// UID for the application;
+// this should correspond to the uid defined in the mmp file
+const TUid KUidBootstrapApp = { 0x2002CCCD };
+
+// ADM Uid
+const TUid KUidAdm = { 0x2002CCCE };
+
+// Max no of connection attempts to Installer
+const TInt KMaxInstallerConnectionAttempts = 6;
+
+// Max no of download reattempts
+const TInt KMaxDlConnectionAttempts = 6;
+#endif // __BOOTSTRAPCONST_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapdocument.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of CBootstrapDocument class.
+*
+*
+*/
+
+
+#ifndef __BOOTSTRAPDOCUMENT_H__
+#define __BOOTSTRAPDOCUMENT_H__
+
+// INCLUDES
+#include <akndoc.h>
+
+// FORWARD DECLARATIONS
+class CBootstrapAppUi;
+class CEikApplication;
+
+
+// CLASS DECLARATION
+
+/**
+* CBootstrapDocument application class.
+* An instance of class CBootstrapDocument is the Document part of the
+* AVKON application framework for the Bootstrap application.
+*/
+class CBootstrapDocument : public CAknDocument
+	{
+	public: // Constructors and destructor
+
+		/**
+		* NewL.
+		* Two-phased constructor.
+		* Construct a CBootstrapDocument for the AVKON application aApp
+		* using two phase construction, and return a pointer
+		* to the created object.
+		* @param aApp Application creating this document.
+		* @return A pointer to the created instance of CBootstrapDocument.
+		*/
+		static CBootstrapDocument* NewL( CEikApplication& aApp );
+
+		/**
+		* NewLC.
+		* Two-phased constructor.
+		* Construct a CBootstrapDocument for the AVKON application aApp
+		* using two phase construction, and return a pointer
+		* to the created object.
+		* @param aApp Application creating this document.
+		* @return A pointer to the created instance of CBootstrapDocument.
+		*/
+		static CBootstrapDocument* NewLC( CEikApplication& aApp );
+
+		/**
+		* ~CBootstrapDocument
+		* Virtual Destructor.
+		*/
+		virtual ~CBootstrapDocument();
+
+	public: // Functions from base classes
+
+		/**
+		* CreateAppUiL
+		* From CEikDocument, CreateAppUiL.
+		* Create a CBootstrapAppUi object and return a pointer to it.
+		* The object returned is owned by the Uikon framework.
+		* @return Pointer to created instance of AppUi.
+		*/
+		CEikAppUi* CreateAppUiL();
+
+	private: // Constructors
+
+		/**
+		* ConstructL
+		* 2nd phase constructor.
+		*/
+		void ConstructL();
+
+		/**
+		* CBootstrapDocument.
+		* C++ default constructor.
+		* @param aApp Application creating this document.
+		*/
+		CBootstrapDocument( CEikApplication& aApp );
+
+	};
+
+#endif // __BOOTSTRAPDOCUMENT_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapglobalwaitnoteobserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of CGlobalWaitNoteObserver class.
+*
+*
+*/
+
+
+#include <e32base.h>
+
+class CBootstrapAppUi;
+
+class CGlobalWaitNoteObserver : public CActive
+	{
+	public:
+		CGlobalWaitNoteObserver(CBootstrapAppUi* aADMAppUiObj);
+		virtual ~CGlobalWaitNoteObserver();
+		void Start();
+	protected:
+		void RunL() ;
+		TInt RunError(TInt aError);
+		void DoCancel();
+	private:
+		CBootstrapAppUi* iBsAppUiObj;
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapinstallationobserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of CInstallObserver class.
+*
+*
+*/
+
+
+#include <e32base.h>
+
+class CStateMachine;
+
+class CInstallObserver : public CActive
+{
+public:
+	CInstallObserver(CStateMachine* aStateMachineObj);
+	virtual ~CInstallObserver();
+	void Start();
+
+private:
+	void RunL() ;
+	TInt RunError(TInt aError);
+	void DoCancel();
+
+private:
+	CStateMachine* iStateMachineObj;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/inc/bootstrapstatemachine.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Declaration of CStateMachine class.
+*
+*
+*/
+
+
+#include <e32base.h>
+#include <downloadmgrclient.h>
+#include <swinstapi.h>
+
+#include "bootstrapappui.h"
+#include "globals.h"
+#include "debug.h"
+
+// Mandatory changes XML elements
+_LIT8(KFieldVersion, "Version");
+_LIT8(KFieldSisName, "SisFileName");
+// Optional changes XML elements
+_LIT8(KFieldUrl, "Url");
+
+// SmartInstaller bootstrap states
+enum EBSAppState
+	{
+	EBSStateInit = 0,		// 0
+	EBSStateSetup,
+	EBSStateDownloadChanges,
+	EBSStateParseChanges,
+	EBSStateDownloadAdm,
+	EBSStateInstallAdm,		// 5
+	EBSStateLaunchAdm,
+	EBSStateExitWithError,
+	EBSStateExit,
+	EBSStateLast			// not actual state
+	};
+
+enum EXmlParserError
+	{
+	EXmlErrorNotWelformed,
+	EXmlErrorMissingVersion,
+	EXmlErrorInvalidVersion,
+	EXmlErrorMissingSisFileName,
+	};
+
+struct TAdmChangesInfo
+	{
+TAdmChangesInfo():
+	iVersion(0,0,0),
+	iSisName(NULL),
+	iUrl(NULL)
+	{}
+~TAdmChangesInfo()
+	{
+	delete iSisName;
+	delete iUrl;
+	}
+
+	TVersion iVersion;
+	HBufC* iSisName;
+	HBufC8* iUrl;
+	};
+
+// Forward declarations
+class CInstallObserver;
+class RConnectionMonitor;
+class CHelper;
+
+class CStateMachine : public CActive,
+	public MHttpDownloadMgrObserver
+	{
+public:
+	static CStateMachine* NewL(CBootstrapAppUi& aSIUiObj, TUint32 aWrapperUid);
+	static CStateMachine* NewLC(CBootstrapAppUi& aSIUiObj, TUint32 aWrapperUid);
+
+	/**
+	 * ~CStateMachine.
+	 * Virtual Destructor.
+	 */
+	virtual ~CStateMachine();
+
+	/**
+	 * Start the state machine
+	 */
+	void Start();
+
+	/**
+	 * Stop the state machine
+	 */
+	void Stop();
+
+	/**
+	 * HandleWaitNoteCancel
+	 * Called by AppUi on User Press Cancel
+	 */
+	void HandleWaitNoteCancel();
+
+	/**
+	 * HandleInstallCompleteL
+	 * Called on installation complete by Installation Observer
+	 */
+	void HandleInstallCompleteL(const TInt& aStatus);
+
+	/**
+	 * HandleDMgrEventL
+	 * Handle download manager events.
+	 */
+	void HandleDMgrEventL(RHttpDownload& aDownload, THttpDownloadEvent aEvent );
+
+	/**
+	 * HandleFailure
+	 * Perform the state specific cleanup in case of a failure
+	 */
+	void HandleFailure(TBool aUserCancel = EFalse);
+
+private:
+	/**
+	 * CStateMachine.
+	 * C++ default constructor.
+	 */
+	CStateMachine(CBootstrapAppUi& aSIUiObj, TUint32 aWrapperUid);
+
+	/**
+	 * ConstructL.
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * RunL
+	 * Called for each state transition
+	 */
+	void RunL();
+
+	/**
+	 * RunError
+	 * Called incase of an error
+	 */
+	TInt RunError(TInt aError);
+
+	/**
+	 * DoCancel
+	 *
+	 */
+	void DoCancel();
+
+	/**
+	 * SetNextState
+	 * Transition to the next state
+	 */
+	void RequestState(const EBSAppState aNextState);
+
+	/**
+	 * StateInitL
+	 * Set the sisfilename and dep filename to be passed to ADM
+	 */
+	void StateInitL();
+
+	/**
+	 * StateDownloadL
+	 * Download the specified file.
+	 */
+	void StateDownloadL();
+
+	/**
+	 * StateParseChangesL
+	 * Parse the ADM changes file
+	 */
+	void StateParseChangesL();
+
+	/**
+	 * StateInstallAdmL
+	 * Installs the specified package
+	 */
+	void StateInstallAdmL();
+
+	/**
+	 * StateLaunchAdmL
+	 * Launch ADM
+	 */
+	void StateLaunchAdmL();
+
+	/**
+	 * IsAdmDownloadRequired
+	 * Check whether ADM sis needs to be downloaded
+	 */
+	TBool IsAdmDownloadRequired();
+
+	/**
+	 * DeleteFile
+	 * Delete the given file
+	 */
+	void DeleteFile(const TDesC& aFileName);
+
+	/**
+	* IsPackagePresentL
+	* Check if the ADM is already present in the device or not
+	*/
+	TBool IsPackagePresentL(const TUid& aUid, TVersion& aVersion);
+
+	/**
+	 * ReadConfigurationL
+	 * Read the config file
+	 */
+	TInt ReadConfigurationL();
+
+	/**
+	 * ProcessDlErrors
+	 * Identify the download error
+	 */
+	TBool ProcessDlErrors(const TInt32 aErrId, const TInt32 aGlErrId, EDownloadError& aDownloadError);
+
+	/**
+	 * Returns ETrue, if Ovi Store client is running
+	 */
+	inline TBool OviStoreRunning() const { return iAppUi.iOviStoreRunning; }
+
+#ifdef FEATURE_BOOTSTRAP_SETIAP
+	void SetIAP(const TUint aIAP);
+	void SetAndValidateIAPL();
+	void GetSnapIapsL(const TUint aSNAPId);
+	TBool IsIapActive(RConnectionMonitor& aMonitor, TInt& aIAP);
+#endif
+
+private:
+	CBootstrapAppUi& iAppUi;
+
+	/**
+	 * ADM installation status on the device
+	 */
+	TBool iIsAdmInstalled;
+
+	/**
+	 * Current application state
+	 */
+	EBSAppState iAppState;
+
+	/**
+	 * Wrapper package UID. Passed to ADM.
+	 */
+	TUint32 iWrapperPackageUid;
+
+	/**
+	 * IAP for Download Manager. Passed to ADM.
+	 */
+	TInt32 iIAP;
+
+	/**
+	 * IAP array for the browser SNAP.
+	 */
+	RArray<TUint32> iIapArray;
+
+	/**
+	 * IAP array index. Points to the IAP currently in use.
+	 */
+	TUint32 iIapArrayIndex;
+
+	/**
+	 * Dep filename. Passed to ADM.
+	 */
+	HBufC* iDepFilename;
+
+	/**
+	 * Main application SIS filename. Passed to ADM.
+	 */
+	HBufC* iSisFilename;
+
+	/**
+	 * ADM changes info, filled by parsing downloaded adm_changes.xml
+	 */
+	TAdmChangesInfo iAdmChangesInfo;
+
+	/**
+	 * Bootstrap failure status. Passed to ADM.
+	 */
+	 TBool iBootstrapFailed;
+
+	/**
+	 * IAP cancel flag.
+	 */
+	TBool iIsIapCancelled;
+
+	/**
+	 * URL provided by the configuration file to the server root or
+	 * the default URL, if config file is missing.
+	 */
+	HBufC8* iConfigUrl;
+
+	/**
+	 * URL
+	 */
+	HBufC8* iUrl;
+
+	/**
+	 * File to be downloaded
+	 */
+	TPtrC iFileName;
+
+	/**
+	 * Url to download from.
+	 */
+	HBufC8* iDownloadUrl;
+
+	/**
+	 * Downloaded filename
+	 */
+	HBufC* iDownloadFileName;
+
+	/**
+	 * Version of ADM present in the device.
+	 */
+	TVersion iAdmInstalledVersion;
+
+	/*
+	 * DownloadManager
+	 */
+	RHttpDownloadMgr iDownloadManager;
+
+	/**
+	 * SwiUI launcher
+	 */
+	SwiUI::RSWInstSilentLauncher iLauncher;
+
+	/**
+	 * Options for Swi Launcher
+	 */
+	SwiUI::TInstallOptionsPckg iOptionsPckg;
+
+	/**
+	 * Current installation attempt
+	 */
+	TInt iInstallAttempt;
+
+	/**
+	 * Track the download State - mainly for logging.
+	 */
+	TInt iDownloadState;
+
+	/**
+	 * Track the Progress State of a download - mainly for logging.
+	 */
+	TInt iProgressState;
+
+	/**
+	 * Current connnection reattempt number.
+	 */
+	TInt iConnectionAttempt;
+
+	/**
+	 * Specific download error.
+	 */
+	EDownloadError iDownloadError;
+
+	CInstallObserver* iInstallObsrv; //< owns
+
+#ifdef USE_LOGFILE
+	RFileLogger& iLog; //< reference to iAppUi.iLog
+#endif
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller-original.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Localisation file for SmartInstaller Bootstrap
+*
+*
+*/
+
+// ----------------------------------------------------------------------------
+//	LOCALISATION STRINGS
+// ----------------------------------------------------------------------------
+
+//Caption string for app.
+//d:Application long name, shown for instance, in the Installed Applications list
+//d:Do NOT localize!
+//l:list_single_graphic_pane_t1
+//r:3.1
+#define STRING_r_sibs_caption_string 		"Nokia Smart Installer"
+
+//Short caption string for app.
+//d:Application short name
+//d:Do NOT localize!
+//l:cell_app_pane_t1
+//r:3.1
+#define STRING_r_sibs_short_caption_string	"Smart Installer"
+
+//d:Resource file path
+//d:Do NOT localize!
+//l:none
+//r:3.1
+#define STRING_r_smartinstaller_loc_resource_file_1	"\\resource\\apps\\smartinstaller"
+
+// ----------------------------------------------------------------------------
+//d:String to be displayed while the preparing device for 'smartinstallation'
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_r_adm_env_creation_wait_text	"Preparing installation"
+
+// ----------------------------------------------------------------------------
+//d:Shown when download has failed to other than network timeout.
+//l:popup_note_window
+//r:3.1
+#define STRING_r_http_transaction_err		"Download error!"
+
+// ----------------------------------------------------------------------------
+//d:Generic error note describing that installation has failed.
+//l:popup_note_window
+//r:3.1
+#define STRING_r_installation_failure_err	"Installation failed!"
+
+// ----------------------------------------------------------------------------
+//d:Shown when the user has explicitly cancelled the installation.
+//l:popup_note_window
+//r:3.1
+#define STRING_r_installation_cancelled		"Installation cancelled!"
+
+// ----------------------------------------------------------------------------
+//d:NEW STRING!
+//d:String to be displayed while the preparing device for 'smartinstallation'
+//l:popup_note_wait_window
+//r:3.1
+#define STRING_r_adm_verifying_sw_text		"Verifying components"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     SmartInstaller bootstrap localisation files
+*
+*
+*/
+
+#if LANGUAGE_00
+#include "smartinstaller_00.loc"
+#elif LANGUAGE_01
+#include "smartinstaller_01.loc"
+#elif LANGUAGE_02
+#include "smartinstaller_02.loc"
+#elif LANGUAGE_03
+#include "smartinstaller_03.loc"
+#elif LANGUAGE_04
+#include "smartinstaller_04.loc"
+#elif LANGUAGE_05
+#include "smartinstaller_05.loc"
+#elif LANGUAGE_06
+#include "smartinstaller_06.loc"
+#elif LANGUAGE_07
+#include "smartinstaller_07.loc"
+#elif LANGUAGE_08
+#include "smartinstaller_08.loc"
+#elif LANGUAGE_09
+#include "smartinstaller_09.loc"
+#elif LANGUAGE_10
+#include "smartinstaller_10.loc"
+#elif LANGUAGE_13
+#include "smartinstaller_13.loc"
+#elif LANGUAGE_14
+#include "smartinstaller_14.loc"
+#elif LANGUAGE_15
+#include "smartinstaller_15.loc"
+#elif LANGUAGE_16
+#include "smartinstaller_16.loc"
+#elif LANGUAGE_17
+#include "smartinstaller_17.loc"
+#elif LANGUAGE_18
+#include "smartinstaller_18.loc"
+#elif LANGUAGE_25
+#include "smartinstaller_25.loc"
+#elif LANGUAGE_26
+#include "smartinstaller_26.loc"
+#elif LANGUAGE_27
+#include "smartinstaller_27.loc"
+#elif LANGUAGE_28
+#include "smartinstaller_28.loc"
+#elif LANGUAGE_29
+#include "smartinstaller_29.loc"
+#elif LANGUAGE_30
+#include "smartinstaller_30.loc"
+#elif LANGUAGE_31
+#include "smartinstaller_31.loc"
+#elif LANGUAGE_32
+#include "smartinstaller_32.loc"
+#elif LANGUAGE_33
+#include "smartinstaller_33.loc"
+#elif LANGUAGE_37
+#include "smartinstaller_37.loc"
+#elif LANGUAGE_39
+#include "smartinstaller_39.loc"
+#elif LANGUAGE_42
+#include "smartinstaller_42.loc"
+#elif LANGUAGE_44
+#include "smartinstaller_44.loc"
+#elif LANGUAGE_45
+#include "smartinstaller_45.loc"
+#elif LANGUAGE_49
+#include "smartinstaller_49.loc"
+#elif LANGUAGE_50
+#include "smartinstaller_50.loc"
+#elif LANGUAGE_51
+#include "smartinstaller_51.loc"
+#elif LANGUAGE_54
+#include "smartinstaller_54.loc"
+#elif LANGUAGE_57
+#include "smartinstaller_57.loc"
+#elif LANGUAGE_58
+#include "smartinstaller_58.loc"
+#elif LANGUAGE_59
+#include "smartinstaller_59.loc"
+#elif LANGUAGE_65
+#include "smartinstaller_65.loc"
+#elif LANGUAGE_67
+#include "smartinstaller_67.loc"
+#elif LANGUAGE_68
+#include "smartinstaller_68.loc"
+#elif LANGUAGE_70
+#include "smartinstaller_70.loc"
+#elif LANGUAGE_76
+#include "smartinstaller_76.loc"
+#elif LANGUAGE_78
+#include "smartinstaller_78.loc"
+#elif LANGUAGE_79
+#include "smartinstaller_79.loc"
+#elif LANGUAGE_83
+#include "smartinstaller_83.loc"
+#elif LANGUAGE_93
+#include "smartinstaller_93.loc"
+#elif LANGUAGE_94
+#include "smartinstaller_94.loc"
+#elif LANGUAGE_96
+#include "smartinstaller_96.loc"
+#elif LANGUAGE_129
+#include "smartinstaller_129.loc"
+#elif LANGUAGE_157
+#include "smartinstaller_157.loc"
+#elif LANGUAGE_158
+#include "smartinstaller_158.loc"
+#elif LANGUAGE_159
+#include "smartinstaller_159.loc"
+#elif LANGUAGE_160
+#include "smartinstaller_160.loc"
+#elif LANGUAGE_161
+#include "smartinstaller_161.loc"
+#elif LANGUAGE_186
+#include "smartinstaller_186.loc"
+#elif LANGUAGE_326
+#include "smartinstaller_326.loc"
+#elif LANGUAGE_327
+#include "smartinstaller_327.loc"
+#elif LANGUAGE_401
+#include "smartinstaller_401.loc"
+#elif LANGUAGE_402
+#include "smartinstaller_402.loc"
+#else
+#include "smartinstaller-original.loc"
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_00.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error!"
+#define string_r_installation_cancelled "Installation cancelled!"
+#define string_r_installation_failure_err "Installation failed!"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_01.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_02.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Préparation de l'installation"
+#define string_r_adm_verifying_sw_text "Vérification des composants"
+#define string_r_http_transaction_err "Erreur durant le téléchargement"
+#define string_r_installation_cancelled "Installation annulée"
+#define string_r_installation_failure_err "L'installation a échoué."
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_03.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Installation wird vorbereitet"
+#define string_r_adm_verifying_sw_text "Komponenten werden überprüft"
+#define string_r_http_transaction_err "Downloadfehler"
+#define string_r_installation_cancelled "Installation abgebrochen"
+#define string_r_installation_failure_err "Installation fehlgeschlagen"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_04.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparando instalación"
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_http_transaction_err "Error de descarga"
+#define string_r_installation_cancelled "Instalación cancelada"
+#define string_r_installation_failure_err "Error de instalación"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_05.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparazione dell'installazione in corso"
+#define string_r_adm_verifying_sw_text "Verifica dei componenti in corso"
+#define string_r_http_transaction_err "Errore di scaricamento"
+#define string_r_installation_cancelled "Installazione annullata"
+#define string_r_installation_failure_err "Installazione non riuscita"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_06.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Förbereder installation"
+#define string_r_adm_verifying_sw_text "Verifierar komponenter"
+#define string_r_http_transaction_err "Nedladdningsfel"
+#define string_r_installation_cancelled "Installationen avbruten"
+#define string_r_installation_failure_err "Installation misslyckad"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_07.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Forbereder installation"
+#define string_r_adm_verifying_sw_text "Kontrollerer komponenter"
+#define string_r_http_transaction_err "Fejl ved hentning"
+#define string_r_installation_cancelled "Installationen er annulleret"
+#define string_r_installation_failure_err "Installationen mislykkedes"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_08.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Forbereder installering"
+#define string_r_adm_verifying_sw_text "Bekrefter komponenter"
+#define string_r_http_transaction_err "Nedlastingsfeil"
+#define string_r_installation_cancelled "Installering avbrutt"
+#define string_r_installation_failure_err "Kunne ikke installere"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_09.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Valmistellaan asennusta"
+#define string_r_adm_verifying_sw_text "Tarkistetaan osia"
+#define string_r_http_transaction_err "Latausvirhe"
+#define string_r_installation_cancelled "Asennus keskeytetty"
+#define string_r_installation_failure_err "Asennus epäonnistui"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_10.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation canceled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_129.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_13.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "A preparar instalação"
+#define string_r_adm_verifying_sw_text "A verificar componentes"
+#define string_r_http_transaction_err "Erro de download"
+#define string_r_installation_cancelled "Instalação cancelada"
+#define string_r_installation_failure_err "Instalação falhou"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_14.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Yüklemeye hazırlanılıyor"
+#define string_r_adm_verifying_sw_text "Bileşenler doğrulanıyor"
+#define string_r_http_transaction_err "İndirme hatası"
+#define string_r_installation_cancelled "Yükleme iptal edildi"
+#define string_r_installation_failure_err "Yüklenemedi"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_15.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Ræsi uppsetningu"
+#define string_r_adm_verifying_sw_text "Sannvotta íhluti"
+#define string_r_http_transaction_err "Niðurhalsvilla"
+#define string_r_installation_cancelled "Hætt við uppsetningu"
+#define string_r_installation_failure_err "Uppsetning mistókst"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_157.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_158.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_159.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_16.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Подготовка к уÑтановке"
+#define string_r_adm_verifying_sw_text "Проверка компонентов"
+#define string_r_http_transaction_err "Ошибка загрузки"
+#define string_r_installation_cancelled "УÑтановка отменена"
+#define string_r_installation_failure_err "Ошибка уÑтановки"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_160.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_161.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_17.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Telepítés előkészítése folyamatban"
+#define string_r_adm_verifying_sw_text "Összetevők ellenőrzése"
+#define string_r_http_transaction_err "Letöltési hiba"
+#define string_r_installation_cancelled "Telepítés megszakítva"
+#define string_r_installation_failure_err "A telepítés sikertelen"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_18.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Installatie voorbereiden"
+#define string_r_adm_verifying_sw_text "Componenten verifiëren"
+#define string_r_http_transaction_err "Downloadfout"
+#define string_r_installation_cancelled "Installatie geannuleerd"
+#define string_r_installation_failure_err "Installatie mislukt"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_186.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparing installation"
+#define string_r_adm_verifying_sw_text "Verifying components"
+#define string_r_http_transaction_err "Download error"
+#define string_r_installation_cancelled "Installation cancelled"
+#define string_r_installation_failure_err "Installation failed"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_25.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Příprava instalace"
+#define string_r_adm_verifying_sw_text "Ověřování souÄástí"
+#define string_r_http_transaction_err "Chyba stahování"
+#define string_r_installation_cancelled "Instalace byla zrušena"
+#define string_r_installation_failure_err "Instalace se nezdařila"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_26.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Pripravuje sa inštalácia"
+#define string_r_adm_verifying_sw_text "Overujú sa súÄasti"
+#define string_r_http_transaction_err "Chyba pri naÄítaní"
+#define string_r_installation_cancelled "Inštalácia bola zrušená"
+#define string_r_installation_failure_err "Inštalácia zlyhala"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_27.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Przygotowywanie do instalacji"
+#define string_r_adm_verifying_sw_text "Weryfikacja komponentów"
+#define string_r_http_transaction_err "BÅ‚Ä…d pobierania"
+#define string_r_installation_cancelled "InstalacjÄ™ anulowano"
+#define string_r_installation_failure_err "Instalacja nie powiodła się"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_28.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Pripravljanje namestitve"
+#define string_r_adm_verifying_sw_text "Preverjanje komponent"
+#define string_r_http_transaction_err "Napaka pri prenosu"
+#define string_r_installation_cancelled "Namestitev je preklicana"
+#define string_r_installation_failure_err "Namestitev ni uspela"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_29.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "準備安è£ä¸­"
+#define string_r_adm_verifying_sw_text "正在驗證元件"
+#define string_r_http_transaction_err "下載錯誤"
+#define string_r_installation_cancelled "安è£å·²å–消"
+#define string_r_installation_failure_err "安è£å¤±æ•—"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_30.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "準備安è£ä¸­"
+#define string_r_adm_verifying_sw_text "正在驗證部件"
+#define string_r_http_transaction_err "下載錯誤"
+#define string_r_installation_cancelled "安è£å·²å–消"
+#define string_r_installation_failure_err "安è£å¤±æ•—"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_31.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "正在准备安装"
+#define string_r_adm_verifying_sw_text "正在验è¯ç»„件"
+#define string_r_http_transaction_err "下载错误"
+#define string_r_installation_cancelled "安装已å–消"
+#define string_r_installation_failure_err "安装失败"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_32.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "#Preparing installation"
+#define string_r_adm_verifying_sw_text "#Verifying components"
+#define string_r_http_transaction_err "#Download error"
+#define string_r_installation_cancelled "#Installation cancelled"
+#define string_r_installation_failure_err "#Installation failed"
+#define string_r_sibs_caption_string "#Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "#Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "#\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_326.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Menyediakan pemasangan"
+#define string_r_adm_verifying_sw_text "Mengesahkan komponen"
+#define string_r_http_transaction_err "Ralat muat turun"
+#define string_r_installation_cancelled "Pemasangan dibatalkan"
+#define string_r_installation_failure_err "Pemasangan gagal"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_327.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Menyiapkan penginstalan"
+#define string_r_adm_verifying_sw_text "Memverifikasi komponen"
+#define string_r_http_transaction_err "Kesalahan saat download"
+#define string_r_installation_cancelled "Penginstalan dibatalkan"
+#define string_r_installation_failure_err "Penginstalan gagal"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_33.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "à¸à¸³à¸¥à¸±à¸‡à¹€à¸•à¸£à¸µà¸¢à¸¡à¸à¸²à¸£à¸•à¸´à¸”ตั้ง"
+#define string_r_adm_verifying_sw_text "à¸à¸³à¸¥à¸±à¸‡â€‹à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šâ€‹à¸ªà¹ˆà¸§à¸™à¸›à¸£à¸°à¸à¸­à¸š"
+#define string_r_http_transaction_err "ข้อผิดพลาด​à¸à¸²à¸£â€‹à¸”าวน์โหลด"
+#define string_r_installation_cancelled "ยà¸à¹€à¸¥à¸´à¸â€‹à¸à¸²à¸£â€‹â€‹à¸•à¸´à¸”ตั้ง​​à¹à¸¥à¹‰à¸§"
+#define string_r_installation_failure_err "à¸à¸²à¸£à¸•à¸´à¸”ตั้ง​ล้มเหลว"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_37.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "جار التحضير للتثبيت"
+#define string_r_adm_verifying_sw_text "التحقق من المكونات"
+#define string_r_http_transaction_err "خطأ ÙÙŠ التنزيل"
+#define string_r_installation_cancelled "تم إلغاء التثبيت"
+#define string_r_installation_failure_err "Ùشل التثبيت"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_39.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Ihinahanda ang pag-install"
+#define string_r_adm_verifying_sw_text "Pinapatotohanan ang mga bahagi"
+#define string_r_http_transaction_err "Error sa pag-download"
+#define string_r_installation_cancelled "Ikinansela ang pag-install"
+#define string_r_installation_failure_err "Nabigo ang pag-install"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_401.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Instalazioa prestatzen"
+#define string_r_adm_verifying_sw_text "Osagaiak egiaztatzen"
+#define string_r_http_transaction_err "Errorea deskargatzean"
+#define string_r_installation_cancelled "Instalazioa bertan behera utzi da"
+#define string_r_installation_failure_err "Instalazioak huts egin du"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_402.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparando instalación"
+#define string_r_adm_verifying_sw_text "Verificando compoñentes"
+#define string_r_http_transaction_err "Erro na descarga"
+#define string_r_installation_cancelled "Instalación cancelada"
+#define string_r_installation_failure_err "Erro na instalación"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_42.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "ПодготвÑне на инÑталациÑ"
+#define string_r_adm_verifying_sw_text "Проверка на компонентите"
+#define string_r_http_transaction_err "Грешка при инÑталирането"
+#define string_r_installation_cancelled "ИнÑталирането е отменено"
+#define string_r_installation_failure_err "ИнÑталирането е неуÑпешно"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_44.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "S'està preparant la instal·lació"
+#define string_r_adm_verifying_sw_text "Comprovant components"
+#define string_r_http_transaction_err "Error durant la descàrrega"
+#define string_r_installation_cancelled "Instal·lació cancel·lada"
+#define string_r_installation_failure_err "Error durant la instal·lació"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_45.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Priprema instalacije"
+#define string_r_adm_verifying_sw_text "Ovjeravanje komponenti"
+#define string_r_http_transaction_err "Pogreška preuzimanja"
+#define string_r_installation_cancelled "Instalacija otkazana"
+#define string_r_installation_failure_err "Instalacija nije uspjela"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_49.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Installimiseks ettevalmistamine"
+#define string_r_adm_verifying_sw_text "Komponentide kontrollimine"
+#define string_r_http_transaction_err "Allalaadimistõrge"
+#define string_r_installation_cancelled "Installimine on tühistatud"
+#define string_r_installation_failure_err "Installimine nurjus"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_50.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "در حال آماده سازی برای نصب"
+#define string_r_adm_verifying_sw_text "در حال تأیید مؤلÙÙ‡ ها"
+#define string_r_http_transaction_err "خطای بارگیری"
+#define string_r_installation_cancelled "نصب لغو شد"
+#define string_r_installation_failure_err "نصب انجام نشد."
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_51.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Préparation de l'installation"
+#define string_r_adm_verifying_sw_text "Vérification des composants en cours"
+#define string_r_http_transaction_err "Erreur de téléchargement"
+#define string_r_installation_cancelled "Installation annulée"
+#define string_r_installation_failure_err "Échec de l'installation"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_54.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "ΠÏοετοιμασία εγκατάστασης…"
+#define string_r_adm_verifying_sw_text "Επαλήθευση στοιχείων…"
+#define string_r_http_transaction_err "Σφάλμα λήψης"
+#define string_r_installation_cancelled "Η εγκατάσταση ακυÏώθηκε"
+#define string_r_installation_failure_err "Η εγκατάσταση απέτυχε"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_57.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "מכין ×ת ההתקנה"
+#define string_r_adm_verifying_sw_text "מ×מת רכיבי×"
+#define string_r_http_transaction_err "שגי×ת הורדה"
+#define string_r_installation_cancelled "ההתקנה בוטלה"
+#define string_r_installation_failure_err "ההתקנה נכשלה"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_58.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "#Preparing installation"
+#define string_r_adm_verifying_sw_text "#Verifying components"
+#define string_r_http_transaction_err "#Download error"
+#define string_r_installation_cancelled "#Installation cancelled"
+#define string_r_installation_failure_err "#Installation failed"
+#define string_r_sibs_caption_string "#Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "#Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "#\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_59.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Menyiapkan penginstalan"
+#define string_r_adm_verifying_sw_text "Memverifikasi komponen"
+#define string_r_http_transaction_err "Kesalahan saat download"
+#define string_r_installation_cancelled "Penginstalan dibatalkan"
+#define string_r_installation_failure_err "Penginstalan gagal"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_65.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "설치를 준비하는 중"
+#define string_r_adm_verifying_sw_text "구성 요소 확ì¸"
+#define string_r_http_transaction_err "다운로드 오류"
+#define string_r_installation_cancelled "설치가 취소ë˜ì—ˆìŠµë‹ˆë‹¤."
+#define string_r_installation_failure_err "설치를 실패했습니다."
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_67.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Sagatavo instalÄciju"
+#define string_r_adm_verifying_sw_text "PÄrbauda komponentus"
+#define string_r_http_transaction_err "LejupielÄdes kļūda"
+#define string_r_installation_cancelled "Instalēšana atcelta"
+#define string_r_installation_failure_err "InstalÄ“Å¡ana neizdevÄs"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_68.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Ruošiasi įdiegti programą"
+#define string_r_adm_verifying_sw_text "Tikrinami komponentai"
+#define string_r_http_transaction_err "Parsisiuntimo klaida"
+#define string_r_installation_cancelled "Įdiegimas nutrauktas"
+#define string_r_installation_failure_err "Įdiegti nepavyko"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_70.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Menyediakan pemasangan"
+#define string_r_adm_verifying_sw_text "Mengesahkan komponen"
+#define string_r_http_transaction_err "Ralat muat turun"
+#define string_r_installation_cancelled "Pemasangan dibatalkan"
+#define string_r_installation_failure_err "Pemasangan gagal"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_76.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparando instalação"
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_http_transaction_err "Erro no download"
+#define string_r_installation_cancelled "A instalação foi cancelada"
+#define string_r_installation_failure_err "Falha na instalação"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_78.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Pregătire instalare în curs"
+#define string_r_adm_verifying_sw_text "Verificare componente în curs"
+#define string_r_http_transaction_err "Eroare la descărcare"
+#define string_r_installation_cancelled "Instalare anulată"
+#define string_r_installation_failure_err "Eroare la instalare"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_79.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Instalacija se priprema"
+#define string_r_adm_verifying_sw_text "Komponente se proveravaju"
+#define string_r_http_transaction_err "Greška pri preuzimanju"
+#define string_r_installation_cancelled "Instalacija je poništena"
+#define string_r_installation_failure_err "Instalacija nije uspela"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_83.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Preparando instalación"
+#define string_r_adm_verifying_sw_text "Verificando componentes"
+#define string_r_http_transaction_err "Error en la descarga"
+#define string_r_installation_cancelled "Instalación cancelada"
+#define string_r_installation_failure_err "Falló la instalación"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_93.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Триває підготовка до вÑтановленнÑ"
+#define string_r_adm_verifying_sw_text "Триває перевірка компонентів"
+#define string_r_http_transaction_err "Помилка завантаженнÑ"
+#define string_r_installation_cancelled "УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑкаÑовано"
+#define string_r_installation_failure_err "Помилка вÑтановленнÑ"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_94.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "نصب کرنے Ú©ÛŒ تیاری کررÛا ÛÛ’"
+#define string_r_adm_verifying_sw_text "اجزا Ú©ÛŒ توثیق کررÛا ÛÛ’"
+#define string_r_http_transaction_err "ڈاؤن لوڈ نقص"
+#define string_r_installation_cancelled "تنصیب منسوخ کردی گئی"
+#define string_r_installation_failure_err "تنصیب ناکام"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/loc/smartinstaller_96.loc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,9 @@
+CHARACTER_SET UTF8
+#define string_r_adm_env_creation_wait_text "Äang chuẩn bị cài đặt"
+#define string_r_adm_verifying_sw_text "Äang xác minh các thành phần"
+#define string_r_http_transaction_err "Lá»—i tải vá»"
+#define string_r_installation_cancelled "Äã hủy cài đặt"
+#define string_r_installation_failure_err "Không cài đặt được"
+#define string_r_sibs_caption_string "Nokia Smart Installer"
+#define string_r_sibs_short_caption_string "Smart Installer"
+#define string_r_smartinstaller_loc_resource_file_1 "\\resource\\apps\\smartinstaller"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/sis/example_dep.xml	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<DepFileContents>
+	<PackageUid>0xA000A641</PackageUid>
+	<Version>1.0.0</Version>
+
+  <Dependency>
+	<Uid>0x2001E61C</Uid>
+	<DepValue>Value</DepValue>
+		<Name>qt.sis</Name>
+		<Version>4.6.0</Version>
+		<Vendor>Nokia</Vendor>
+		<Description>Dependency to Qt Library</Description>
+	</Dependency>
+</DepFileContents>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/sis/smartinstaller.pkg	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,151 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+; Languages
+;EN,FR,GE,SP,IT,SW,DA,NO,FI,AM, EA,PO,TU,IC, YW, YH, YP,RU, YJ, YT,HU,DU,   ,CS,SK,PL,SL,TC,HK,ZH,JA, MA,   ,TH,AR,TL, BA, GL,BG,CA,HR,ET,FA,CF,EL,HE,HI,IN,   LV,LT,MS,BP,RO,SR,LS,UK,UR,VI
+&01,02,03,04,05,06,07,08,09,10,129,13,14,15,157,158,159,16,160,161,17,18,186,25,26,27,28,29,30,31,32,326,327,33,37,39,401,402,42,44,45,49,50,51,54,57,58,59,65,67,68,70,76,78,79,83,93,94,96
+
+; Header
+; Version is specified as major.minor.build
+; = public major version
+; = public minor version
+; = build week * 1000 (2) + internal release (1) + build # (2)
+; public versions have the release number as the minor version, starting from 0
+; i.e. first release version would be v1.0.xxyzz where
+;   xx is the release build week
+;    y is the internal release number (even = release, odd = beta)
+;   zz is the release build number
+#{
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer",
+"Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer","Nokia Smart Installer"
+},(0x2002CCCD),0,24,1
+
+;Localised Vendor name
+%{
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia",
+"Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia","Nokia"
+}
+
+;Unique	Vendor name
+:"Nokia"
+
+;Supports Series 60 v3.1, v3.2, v5.0
+[0x102032BE], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+[0x102752AE], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+[0x1028315F], 0, 0, 0, {
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID",
+"S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID","S60ProductID"
+}
+
+; BootStrap Files
+"\epoc32\data\z\private\10003a3f\import\apps\smartinstaller_reg.RSC"-"c:\private\10003a3f\import\apps\smartinstaller_reg.rsc", FF
+"config.ini"-"c:\private\2002CCCD\config.ini",FF
+
+; Localised resource files
+{
+"\epoc32\data\z\resource\apps\smartinstaller.r01"
+"\epoc32\data\z\resource\apps\smartinstaller.r02"
+"\epoc32\data\z\resource\apps\smartinstaller.r03"
+"\epoc32\data\z\resource\apps\smartinstaller.r04"
+"\epoc32\data\z\resource\apps\smartinstaller.r05"
+"\epoc32\data\z\resource\apps\smartinstaller.r06"
+"\epoc32\data\z\resource\apps\smartinstaller.r07"
+"\epoc32\data\z\resource\apps\smartinstaller.r08"
+"\epoc32\data\z\resource\apps\smartinstaller.r09"
+"\epoc32\data\z\resource\apps\smartinstaller.r10"
+"\epoc32\data\z\resource\apps\smartinstaller.r13"
+"\epoc32\data\z\resource\apps\smartinstaller.r14"
+"\epoc32\data\z\resource\apps\smartinstaller.r15"
+"\epoc32\data\z\resource\apps\smartinstaller.r16"
+"\epoc32\data\z\resource\apps\smartinstaller.r17"
+"\epoc32\data\z\resource\apps\smartinstaller.r18"
+"\epoc32\data\z\resource\apps\smartinstaller.r25"
+"\epoc32\data\z\resource\apps\smartinstaller.r26"
+"\epoc32\data\z\resource\apps\smartinstaller.r27"
+"\epoc32\data\z\resource\apps\smartinstaller.r28"
+"\epoc32\data\z\resource\apps\smartinstaller.r29"
+"\epoc32\data\z\resource\apps\smartinstaller.r30"
+"\epoc32\data\z\resource\apps\smartinstaller.r31"
+"\epoc32\data\z\resource\apps\smartinstaller.r32"
+"\epoc32\data\z\resource\apps\smartinstaller.r33"
+"\epoc32\data\z\resource\apps\smartinstaller.r37"
+"\epoc32\data\z\resource\apps\smartinstaller.r39"
+"\epoc32\data\z\resource\apps\smartinstaller.r42"
+"\epoc32\data\z\resource\apps\smartinstaller.r44"
+"\epoc32\data\z\resource\apps\smartinstaller.r45"
+"\epoc32\data\z\resource\apps\smartinstaller.r49"
+"\epoc32\data\z\resource\apps\smartinstaller.r50"
+"\epoc32\data\z\resource\apps\smartinstaller.r51"
+"\epoc32\data\z\resource\apps\smartinstaller.r54"
+"\epoc32\data\z\resource\apps\smartinstaller.r57"
+"\epoc32\data\z\resource\apps\smartinstaller.r58"
+"\epoc32\data\z\resource\apps\smartinstaller.r59"
+"\epoc32\data\z\resource\apps\smartinstaller.r65"
+"\epoc32\data\z\resource\apps\smartinstaller.r67"
+"\epoc32\data\z\resource\apps\smartinstaller.r68"
+"\epoc32\data\z\resource\apps\smartinstaller.r70"
+"\epoc32\data\z\resource\apps\smartinstaller.r76"
+"\epoc32\data\z\resource\apps\smartinstaller.r78"
+"\epoc32\data\z\resource\apps\smartinstaller.r79"
+"\epoc32\data\z\resource\apps\smartinstaller.r83"
+"\epoc32\data\z\resource\apps\smartinstaller.r93"
+"\epoc32\data\z\resource\apps\smartinstaller.r94"
+"\epoc32\data\z\resource\apps\smartinstaller.r96"
+"\epoc32\data\z\resource\apps\smartinstaller.r129"
+"\epoc32\data\z\resource\apps\smartinstaller.r157"
+"\epoc32\data\z\resource\apps\smartinstaller.r158"
+"\epoc32\data\z\resource\apps\smartinstaller.r159"
+"\epoc32\data\z\resource\apps\smartinstaller.r160"
+"\epoc32\data\z\resource\apps\smartinstaller.r161"
+"\epoc32\data\z\resource\apps\smartinstaller.r186"
+"\epoc32\data\z\resource\apps\smartinstaller.r326"
+"\epoc32\data\z\resource\apps\smartinstaller.r327"
+"\epoc32\data\z\resource\apps\smartinstaller.r401"
+"\epoc32\data\z\resource\apps\smartinstaller.r402"
+}-"c:\resource\apps\smartinstaller.rsc"
+"\epoc32\release\armv5\urel\smartinstaller.dll"-"c:\sys\bin\smartinstaller.dll", FF
+"\epoc32\release\armv5\urel\smartinstaller.exe"-"c:\sys\bin\smartinstaller.exe", FR, RI
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/sis/wrapper.pkg	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Wrapper package file which delivers the developer application sis file (fluidlauncher.sis)
+;
+; Languages
+&EN
+
+; Header
+#{"FluidLauncher[S] installer"},(0xe0000236),1,0,24
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v3.1, v3.2, v5.0
+[0x102032BE], 0, 0, 0, {"S60ProductID"}
+[0x102752AE], 0, 0, 0, {"S60ProductID"}
+[0x1028315F], 0, 0, 0, {"S60ProductID"}
+
+; Wrapped depfile and actual Sis application
+;"fluidlauncher.sis"-"!:\private\2002CCCE\import\fluidlauncher.sis"
+"fluidlauncher462_s.sis"-"!:\private\2002CCCE\import\fluidlauncher.sis"
+
+; Nokia SmartInstaller App
+@"smartinstaller.sis",(0x2002CCCD)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrap.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Main Application class.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "bootstrapapplication.h"
+
+/**
+ * factory function to create the CBootstrapApplication class
+ */
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CBootstrapApplication;
+	}
+
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication( NewApplication );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapapplication.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CBootstrapApplication class implementation.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "bootstrapconst.h"
+#include "bootstrapdocument.h"
+#include "bootstrapapplication.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CBootstrapApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CBootstrapApplication::CreateDocumentL()
+	{
+	// Create an Bootstrap document, and return a pointer to it
+	return (static_cast<CApaDocument*>
+					( CBootstrapDocument::NewL( *this ) ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid CBootstrapApplication::AppDllUid() const
+	{
+	// Return the UID for the Bootstrap application
+	return KUidBootstrapApp;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapappui.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CBootstrapAppUi class implementation.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknglobalnote.h>
+#include <stringloader.h>
+#include <smartinstaller.rsg>
+#include <apgcli.h>
+#include <swi/swispubsubdefs.h>
+
+#include "bootstrapapplication.h"
+#include "bootstrapappui.h"
+#include "bootstrapglobalwaitnoteobserver.h"
+#include "bootstrapstatemachine.h"
+#include "debug.h"
+#include "globals.h"
+#include "macros.h"
+#include "config.h"
+#include "utils.h"
+
+#ifdef USE_LOGFILE
+// Logging information
+_LIT(KADMLogDir, "ADM");
+_LIT(KBootstrapLogFileName, "log-boot.txt" );
+_LIT(KBootstrapLogFile, "?:\\logs\\ADM\\log-boot.txt");
+#endif
+
+// -----------------------------------------------------------------------------
+// CBootstrapAppUi::ConstructL()
+// ConstructL of BootstrapApp.
+// -----------------------------------------------------------------------------
+//
+void CBootstrapAppUi::ConstructL()
+	{
+	TRAPD(err, InitializeSIL());
+
+	if(err != KErrNone)
+		{
+		LOG2( "Init failed %d", err );
+		SetErrorId(EInstallationFailed);
+		ExitApp(EBSStateInit);
+		}
+	else
+		{
+		iStateMachine = CStateMachine::NewL(*this,iWrapperPackageUid);
+		iStateMachine->Start();
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapAppUi::CBootstrapAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CBootstrapAppUi::CBootstrapAppUi():
+		iAllowForeground(EFalse)
+	{
+	LOG ( "SmartInstaller bootstrap begins" );
+	// disable possible transition effects
+	SetFullScreenApp(EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapAppUi::~CBootstrapAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CBootstrapAppUi::~CBootstrapAppUi()
+	{
+	LOG( "~SmartInstaller()" );
+
+	delete iGlobalWaitNoteObserver;
+	delete iGlobalWaitNote;
+	delete iStateMachine;
+
+	LOG( "SmartInstaller bootstrap ends" );
+	CLOSE_DEBUG_LOG;
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::InitializeSIL
+// Enter function in EBSStateInit,
+// Leaves if Connect failure to downloadmanager,SWI Launcher, Unable to identify ADM Presence
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::InitializeSIL()
+	{
+	LOG("+ Init()");
+
+	// Create the log
+	INIT_DEBUG_LOG( KBootstrapLogFile(), KADMLogDir, KBootstrapLogFileName );
+
+	// Hide from application task list
+	HideApplicationFromFSW();
+
+	// Send application to background
+	SendToBackgroundL();
+
+	// Check if Ovi Store client is running
+	// Logging purposes only at the moment
+	iOviStoreRunning = CUtils::OviStoreRunning();
+	if ( iOviStoreRunning )
+		{
+		LOG( "! Ovi Store running" );
+		}
+
+	// Wait for the installer to be free
+	WaitForInstallCompleteL();
+
+	// Initialise app UI with standard value.
+	BaseConstructL( ENoScreenFurniture /* CAknAppUi::EAknEnableSkin */ );
+	StatusPane()->MakeVisible(EFalse);
+
+	LOG("- Init()");
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::WaitForInstallCompleteL
+// called in EBSStateInit,
+// Wait for the wrapper package to be completed. Then fetch the wrapper package UID
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::WaitForInstallCompleteL()
+	{
+	LOG( "+ WaitForInstallComplete()" );
+
+	// Use publish and subscribe mechanism to
+	// get notified when installer is free.
+	RProperty installComplete;
+	User::LeaveIfError(installComplete.Attach(KUidSystemCategory, Swi::KUidSoftwareInstallKey));
+
+	TInt value(-1);
+	TInt err(-1);
+	err = installComplete.Get( KUidSystemCategory, Swi::KUidSoftwareInstallKey, value );
+	if ( err != KErrNone)
+		{
+		LOG( "! Unable to get installer" );
+		installComplete.Close();
+		User::Leave(err);
+		}
+	else if((value & Swi::KSwisOperationMask) == Swi::ESwisNone)
+		{
+		LOG( "Installer is idle" );
+		// Installer is idle.
+		}
+	else
+		{
+		LOG( "Waiting for installer to become idle" );
+		TRequestStatus status;
+		installComplete.Subscribe(status);
+		User::WaitForRequest( status );
+		if ( status.Int() != KErrNone )
+			{
+			LOG2( "Failed to subscribe: %d", status.Int() );
+			installComplete.Close();
+			User::Leave( status.Int() );
+			}
+		}
+
+	// Get the Uid of the latest installed package
+	iWrapperPackageUid = GetLatestInstalledL();
+
+	iAllowForeground = ETrue;
+
+	installComplete.Close();
+
+	ShowGlobalWaitNoteL();
+
+	SendToBackgroundL(EFalse);
+
+	LOG( "- WaitForInstallComplete()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::GetLatestInstalledL
+// Get the latest package installed in the device.
+// Called in EBSStateInit on completion of wrapper installation.
+// ---------------------------------------------------------------------------
+//
+TUint32 CBootstrapAppUi::GetLatestInstalledL()
+	{
+	LOG( "+ GetLatestInstalled()" );
+
+	// Use publish and subscribe mechanism to
+	// get Uid of the latest installed package.
+	RProperty lastInstall;
+	User::LeaveIfError(lastInstall.Attach(KUidSystemCategory, KUidSwiLatestInstallation));
+
+	TInt value = -1;
+	User::LeaveIfError(lastInstall.Get( KUidSystemCategory, KUidSwiLatestInstallation, value ));
+
+	LOG2( "- GetLatestInstalled(): 0x%08x", value );
+	return value;
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::HandleGlobalWaitNoteCancel
+// Call OnExitOfState() when the process is cancelled.
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::HandleGlobalWaitNoteCancel(const TInt& aStatus)
+	{
+	LOG2( "+ CancelNoteEvent(%d) ", aStatus );
+
+	// Do the cleanup based on the state
+	if (aStatus == -1)
+		{
+		iGlobalWaitNoteId = -1;
+		//TODO: Is there a possibility of statemachine not being present here.?
+		iStateMachine->HandleWaitNoteCancel();
+		}
+
+	LOG( "- CancelNoteEvent() ");
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::SendToBackgroundL
+// Called to move the app background/foreground.
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::SendToBackgroundL(TBool aBackground)
+	{
+	LOG2( "+ SendToBackground(%d)", aBackground );
+	// We have gained the focus
+	RWsSession aWsSession;
+	User::LeaveIfError( aWsSession.Connect() );
+	TApaTask task(aWsSession);
+
+	// Initialise the object with the window group id of
+	// our application (so that it represent our app)
+	task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
+	if (aBackground)
+		{
+		task.SendToBackground();
+		}
+	else
+		{
+		task.BringToForeground();
+		}
+	aWsSession.Close();
+	LOG( "- SendToBackground() ");
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::ShowGlobalWaitNoteL
+// Show the Global wait note. (starts in EBSStateInit)
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::ShowGlobalWaitNoteL()
+	{
+	// Allocate TBuf with constant length.
+	TBuf<KMaxMsgSize> text( NULL );
+
+	// Reads a resource into a descriptor.
+	CEikonEnv::Static()->ReadResource( text, R_ADM_VERIFYING_SW_TEXT );
+
+	// Create new CAknGlobalNote instance.
+	iGlobalWaitNote = CAknGlobalNote::NewL();
+
+	iGlobalWaitNoteObserver = new (ELeave) CGlobalWaitNoteObserver(this);
+	iGlobalWaitNoteObserver->iStatus = KRequestPending;
+	iGlobalWaitNoteObserver->Start();
+
+	iGlobalWaitNoteId = iGlobalWaitNote->ShowNoteL(
+					iGlobalWaitNoteObserver->iStatus,
+					EAknGlobalWaitNote,
+					text );
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::StopGlobalWaitNoteL
+// Stop the Global wait note, incase of any exit.
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::StopGlobalWaitNoteL()
+	{
+	LOG2( "+ StopWaitNote(%d)", iGlobalWaitNoteId );
+	if ( iGlobalWaitNote && (iGlobalWaitNoteId >= 0) )
+		{
+		iGlobalWaitNote->CancelNoteL(iGlobalWaitNoteId);
+		}
+	iGlobalWaitNoteId = -1;
+
+	DELETE_IF_NONNULL( iGlobalWaitNote         );
+	DELETE_IF_NONNULL( iGlobalWaitNoteObserver );
+	LOG( "- StopWaitNote()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::ShowNoteL
+// Show the note on Exit on Error
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::ShowNoteL( const TAknGlobalNoteType& aType, const TInt& aResourceId )
+	{
+	// Allocate TBuf with constant length.
+	TBuf<KMaxMsgSize> text;
+
+	// Reads a resource into a descriptor.
+	CEikonEnv::Static()->ReadResource( text, aResourceId );
+
+	// Create new CAknGlobalNote instance.
+	CAknGlobalNote* globalNote = CAknGlobalNote::NewLC();
+	globalNote->ShowNoteL( aType , text );
+	CleanupStack::PopAndDestroy(globalNote);
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::HandleForegroundEventL
+// On receiving the foreground event, send the app to background.
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::HandleForegroundEventL(TBool aForeground)
+	{
+	LOG3("+ HandleForegroundEvent(%d): %d", aForeground, iAllowForeground );
+	CAknAppUi::HandleForegroundEventL(aForeground);
+
+	if (aForeground && !iAllowForeground)
+		{
+		SendToBackgroundL();
+		}
+	LOG("- HandleForegroundEvent()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::ExitApp
+// Handle success and failures on all cases
+// Display an error notice and exit the application.
+// Perform the necessary state specific cleanup.
+// ---------------------------------------------------------------------------
+//
+void CBootstrapAppUi::ExitApp(TInt aAppState)
+	{
+	LOG3( "+ ExitApp(%d): %d", aAppState, iErrorId );
+
+	TInt resourceId = ENoAppError;
+
+	switch ( iErrorId )
+		{
+		case ENoAppError:
+			break;
+		case EInstallationFailed:
+			{
+			resourceId = R_INSTALLATION_FAILURE_ERR;
+			}
+			break;
+		case EDownloadFailed:
+			{
+			resourceId = R_HTTP_TRANSACTION_ERR;
+			}
+			break;
+		default:
+			LOG2( "Unknown error %d, ignoring", iErrorId );
+			break;
+		}
+
+	if (resourceId != 0)
+		{
+		// Display error message
+		TRAP_IGNORE( {
+			StopGlobalWaitNoteL();
+			ShowNoteL(EAknGlobalErrorNote, resourceId);
+			} );
+		}
+	else
+		{
+		// the final error note is displayed by ADM.
+		// make a pause before removing the note to hide the "installation OK"
+		// note displayed by S60 installer
+		User::After(1500000);
+		TRAP_IGNORE( StopGlobalWaitNoteL() );
+		}
+
+	// Stop the state machine
+	iStateMachine->Stop();
+
+	LOG( "StateMachine stopped" );
+
+	Exit();
+
+	LOG( "- ExitApp()" );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapdocument.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CBootstrapDocument class implementation.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include "BootstrapAppUi.h"
+#include "BootstrapDocument.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBootstrapDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBootstrapDocument* CBootstrapDocument::NewL( CEikApplication& aApp )
+	{
+	CBootstrapDocument* self = NewLC( aApp );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBootstrapDocument* CBootstrapDocument::NewLC( CEikApplication&
+															 aApp )
+	{
+	CBootstrapDocument* self =
+		new ( ELeave ) CBootstrapDocument( aApp );
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBootstrapDocument::ConstructL()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CBootstrapDocument::CBootstrapDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CBootstrapDocument::CBootstrapDocument( CEikApplication& aApp )
+	: CAknDocument( aApp )
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapDocument::~CBootstrapDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CBootstrapDocument::~CBootstrapDocument()
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CBootstrapDocument::CreateAppUiL()
+	{
+	// Create the application user interface, and return a pointer to it;
+	// the framework takes ownership of this object
+	return ( static_cast <CEikAppUi*> ( new ( ELeave )
+										CBootstrapAppUi ) );
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapglobalwaitnoteobserver.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CGlobalWaitNoteObserver class implementation.
+*
+*
+*/
+
+
+#include "bootstrapglobalwaitnoteobserver.h"
+#include "bootstrapappui.h"
+
+CGlobalWaitNoteObserver::CGlobalWaitNoteObserver(CBootstrapAppUi* aBsAppUiObj) :
+	CActive(CActive::EPriorityStandard),
+	iBsAppUiObj(aBsAppUiObj)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CGlobalWaitNoteObserver::~CGlobalWaitNoteObserver()
+	{
+	Cancel();
+	}
+
+void CGlobalWaitNoteObserver::RunL()
+	{
+	// Invoke the handler function for cancel
+	iBsAppUiObj->HandleGlobalWaitNoteCancel(iStatus.Int());
+	}
+
+TInt CGlobalWaitNoteObserver::RunError(TInt aError)
+	{
+	return KErrNone;
+	}
+
+void CGlobalWaitNoteObserver::DoCancel()
+	{
+	}
+
+void CGlobalWaitNoteObserver::Start()
+	{
+	SetActive();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapinstallationobserver.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CInstallObserver class implementation.
+*
+*
+*/
+
+
+#include <e32base.h>
+#include <swinstdefs.h>
+#include "bootstrapinstallationobserver.h"
+#include "bootstrapstatemachine.h"
+
+CInstallObserver::CInstallObserver(CStateMachine* aStateMachineObj) :
+	CActive(CActive::EPriorityStandard),
+	iStateMachineObj(aStateMachineObj)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CInstallObserver::~CInstallObserver()
+	{
+	Cancel();
+	}
+
+void CInstallObserver::RunL()
+	{
+	// Invoke the handler function installation complete,
+	// passing the status
+	iStateMachineObj->HandleInstallCompleteL(iStatus.Int());
+	}
+
+TInt CInstallObserver::RunError(TInt aError)
+	{
+	iStateMachineObj->HandleFailure(aError);
+	return KErrNone;
+	}
+
+void CInstallObserver::DoCancel()
+	{
+	}
+
+void CInstallObserver::Start()
+	{
+	SetActive();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/bootstrap/src/bootstrapstatemachine.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,1686 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CStateMachine class implementation.
+*
+*
+*/
+
+#include <e32base.h>
+#include <aknappui.h>
+#include <swinstdefs.h>
+#include <swi/sisregistrysession.h>
+#include <swi/sisregistryentry.h>
+#include <httpdownloadmgrcommon.h>
+#include <coeutils.h>
+#include <SenDomFragment.h>
+#include <SenXmlReader.h>
+#include <SenElement.h>
+#include <centralrepository.h>      // CRepository
+#include <browseruisdkcrkeys.h>     // KCRUidBrowser
+
+#include <wlanerrorcodes.h> 		//For download error handling
+#include <etelpckt.h>       		//For download error handling
+#include <exterror.h>       		//For download error handling
+#include <httpdownloadmgrcommon.h>	//For download error handling (not in S60 5.0 SDK)
+
+#include <es_enum.h>
+#include <rconnmon.h>
+#include <eikdef.h>
+
+#include "bootstrapstatemachine.h"
+#include "bootstrapappui.h"
+#include "bootstrapconst.h"
+#include "bootstrapinstallationobserver.h"
+#include "smartinstallerdll.h"
+#include "debug.h"
+#include "globals.h"
+#include "macros.h"
+#include "config.h"
+#include "utils.h" // HideAppFromMenuL()
+
+// ADM binary name
+_LIT(KAdmExePath, "ADM.exe");
+_LIT(KDownloadFolder,"?:\\system\\adm\\");
+// Sis file extension
+_LIT(KSisExtn,".SIS");
+_LIT(KSisxExtn,".SISX");
+// Xml file extension
+_LIT(KXMLExtn,".XML");
+// Dep file extension
+_LIT(KDepExtn,"_DEP");
+// ADM changes file name
+_LIT(KAdmChangesFile, "adm_changes.xml");
+// Private folder of SWI Daemon
+_LIT(KSWIDaemonPrivateFolder, "\\private\\10202dce\\");
+
+// ---------------------------------------------------------------------------
+// CStateMachine::NewLC
+// ---------------------------------------------------------------------------
+//
+CStateMachine* CStateMachine::NewLC(CBootstrapAppUi& aSIUiObj, TUint32 aWrapperUid)
+	{
+	CStateMachine* object = new ( ELeave ) CStateMachine(aSIUiObj, aWrapperUid);
+	CleanupStack::PushL( object );
+	object->ConstructL();
+	return object;
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::NewL
+// ---------------------------------------------------------------------------
+//
+CStateMachine* CStateMachine::NewL(CBootstrapAppUi& aSIUiObj, TUint32 aWrapperUid)
+	{
+	CStateMachine* object = CStateMachine::NewLC(aSIUiObj, aWrapperUid);
+	CleanupStack::Pop();
+	return object;
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::CStateMachine
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+CStateMachine::CStateMachine(CBootstrapAppUi& aBsAppUiObj, TUint32 aWrapperUid) :
+							CActive(CActive::EPriorityStandard),
+							iAppUi(aBsAppUiObj),
+							iWrapperPackageUid(aWrapperUid),
+							iAdmChangesInfo(),
+							iBootstrapFailed(EFalse)
+#ifdef USE_LOGFILE
+							, iLog(aBsAppUiObj.iLog)
+#endif
+	{
+	CActiveScheduler::Add(this);
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::ConstructL
+// 2nd phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::ConstructL()
+	{
+	// Connect to the Download Manager
+	TBool masterInstance(!(iAppUi.EikonEnv()->StartedAsServerApp()));
+	iDownloadManager.ConnectL( KUidBootstrapApp, *this, masterInstance );
+
+	User::LeaveIfError(iLauncher.Connect());
+
+	iIsAdmInstalled = IsPackagePresentL(KUidAdm, iAdmInstalledVersion);
+
+	ReadConfigurationL();
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::~CStateMachine
+// Virtual Destructor.
+// ---------------------------------------------------------------------------
+//
+CStateMachine::~CStateMachine()
+	{
+	LOG( "~StateMachine()" );
+	Cancel();
+	DELETE_IF_NONNULL( iDepFilename );
+	DELETE_IF_NONNULL( iSisFilename );
+	DELETE_IF_NONNULL( iDownloadUrl );
+	delete iInstallObsrv;
+	delete iConfigUrl;
+	delete iUrl;
+	delete iDownloadFileName;
+	iIapArray.Close();
+	iDownloadManager.DeleteAll();
+	iDownloadManager.Close();
+	iLauncher.Close();
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::RunL
+// Called for each state transition
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::RunL()
+	{
+	switch (iAppState)
+		{
+		case EBSStateInit:
+			{
+			StateInitL();
+			RequestState(EBSStateDownloadChanges);
+			}
+			break;
+		case EBSStateDownloadChanges:
+			{
+			StateDownloadL();
+			// No need to request a state change. HandleDMgrEventL() will
+			// trigger a correct event after the download has completed.
+			}
+			break;
+		case EBSStateParseChanges:
+			{
+			StateParseChangesL();
+			if( IsAdmDownloadRequired() )
+				{
+				RequestState(EBSStateDownloadAdm);
+				}
+			else
+				{
+				RequestState(EBSStateLaunchAdm);
+				}
+			}
+			break;
+		case EBSStateDownloadAdm:
+			{
+			StateDownloadL();
+			// No need to request a state change. HandleDMgrEventL() will
+			// trigger a correct event after the download has completed.
+			}
+			break;
+		case EBSStateInstallAdm:
+			{
+			StateInstallAdmL();
+			// No need to request a state change. HandleInstallCompleteL() will
+			// trigger a correct event after the installation has completed.
+			}
+			break;
+		case EBSStateLaunchAdm:
+			{
+			StateLaunchAdmL();
+			RequestState(EBSStateExit);
+			}
+			break;
+		case EBSStateExit:
+			{
+			// Exit the application
+			Cancel();
+			iAppUi.ExitApp(iAppState);
+			}
+			break;
+		case EBSStateExitWithError:
+			{
+			Cancel();
+			//Error Id needs to be already set before the state transition.
+			iAppUi.ExitApp(iAppState);
+			}
+			break;
+		default:
+			LOG2( "Ignoring state change %d", iAppState );
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::StateComplete
+// Trigger the state transition.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::RequestState(const EBSAppState aNextState)
+	{
+	LOG3( "+ RequestState(): %d->%d", iAppState, aNextState );
+	iAppState = aNextState;
+	iStatus = KRequestPending;
+
+	if( !IsActive() )
+		{
+		SetActive();
+		}
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete( status, KErrNone );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::RunError
+// Call Handlefailure incase of error.
+// ---------------------------------------------------------------------------
+//
+TInt CStateMachine::RunError(TInt aError)
+	{
+	LOG2( "+ CStateMachine::RunError(%d)", aError );
+	if ( aError != KLeaveExit )
+		{
+		HandleFailure();
+		return KErrNone;
+		}
+	else
+		{
+		return KLeaveExit;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::DoCancel()
+	{
+	LOG( "+ CStateMachine::DoCancel()" );
+	iLauncher.CancelAsyncRequest(SwiUI::ERequestSilentInstall);
+	iDownloadManager.DeleteAll();
+	LOG( "- CStateMachine::DoCancel()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::Start
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::Start()
+	{
+	SetActive();
+
+	// send signal that this request has completed
+	TRequestStatus* status = &iStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::Stop
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::Stop()
+	{
+	LOG( "+ CStateMachine::Stop()" );
+	Cancel();
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::ReadConfigurationL
+// Leaves if runs out of memory
+// Called from ConstructL in InitState
+// @return KErrNone if configuration was read correctly, error code otherwise
+// ---------------------------------------------------------------------------
+//
+TInt CStateMachine::ReadConfigurationL()
+	{
+	LOG( "+ ReadConfiguration()" );
+
+	TFileName configFile;
+	RArray< TPtrC > lineBuffer;
+	RFs& rfs = CEikonEnv::Static()->FsSession();
+
+	// Find the configuration file from the private directory
+	TInt ret = rfs.PrivatePath( configFile );
+	if ( ret == KErrNone )
+		{
+		TBuf<2> appDrive;
+		// Insert the drive of the running application
+		appDrive.Copy(iAppUi.Application()->AppFullName().Left(2));
+		configFile.Insert( 0, appDrive );
+		// Append the configuration file name
+		configFile.Append( KConfigFile );
+
+		LOG2( "configFile = %S", &configFile );
+
+		HBufC* buffer = ReadConfigFile( rfs, configFile, lineBuffer, ret );
+
+		if ( buffer && ret == KErrNone )
+			{
+			// Get Url from the config file
+			TPtrC urlLine = GetConfigValue( KCfgTagUrl, lineBuffer, ret );
+			if ( ret == KErrNone )
+				{
+				iConfigUrl = HBufC8::NewL( urlLine.Length() );
+				iConfigUrl->Des().Copy(urlLine );
+				LOG8_2( "configUrl = %S", iConfigUrl );
+				}
+			delete buffer;
+			}
+		}
+	if ( !iConfigUrl )
+		{
+		// Error occured while reading the configuration, use default URL
+		iConfigUrl = HBufC8::NewL( KDefaultDepServerUrl().Length() );
+		*iConfigUrl = KDefaultDepServerUrl;
+		LOG8_2( "configUrl = %S (default)", iConfigUrl );
+		}
+
+	lineBuffer.Close();
+
+	LOG2("-  ReadConfiguration(): %d", ret );
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// CBootstrapAppUi::StateInitL
+// Enter in EBSStateSetup,
+//
+// Read the sis file name and dep file name, based on Bootstrap version
+// Set the ADM changes file to download and the url to download from.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::StateInitL()
+	{
+	LOG2( "+ SetFileNameInfo(): ver = %d", KBootstrapVersion );
+
+	if( ( KBootstrapVersion < 1 ) && ( KBootstrapVersion > 4 ) )
+		{
+		// Unsupported Bootstrap version
+		User::Leave( KErrNotSupported );
+		}
+
+	// Connect to SisRegistry to fetch Package info
+	Swi::RSisRegistrySession registrySession;
+	User::LeaveIfError( registrySession.Connect() );
+	CleanupClosePushL( registrySession );
+
+	Swi::RSisRegistryEntry entry;
+
+	// Open registry entry
+	User::LeaveIfError( entry.Open( registrySession, TUid::Uid( iWrapperPackageUid ) ) );
+	CleanupClosePushL( entry );
+
+	RPointerArray<HBufC> packageFiles;
+	entry.FilesL( packageFiles );
+	const TInt filesCount( packageFiles.Count() );
+
+	// look into the files installed as part of the package,
+	// to find the dep file name and actuall application file name.
+	for ( TInt i=0; i<filesCount; i++ )
+		{
+		TParsePtrC parse( *packageFiles[i] );
+		TPtrC orgExtn = parse.Ext();
+
+		if ( orgExtn.Length() == 0 )
+			{
+			continue;
+			}
+
+		HBufC* extn = orgExtn.AllocLC();
+		TPtr extnPtr = extn->Des();
+		extnPtr.UpperCase();
+
+		if ( KBootstrapVersion != 3 )
+			{
+			if (( extnPtr.Compare(KSisExtn) == 0 ) || ( extnPtr.Compare(KSisxExtn) == 0 ) )
+				{
+				TPtrC privatePath( KNullDesC );
+				const TInt KDriveLength = 2;
+				if ( ( packageFiles[i]->Length() ) > ( KSWIDaemonPrivateFolder().Length() + KDriveLength ) )
+					{
+					privatePath.Set( packageFiles[i]->Des().Mid( KDriveLength ) );
+					privatePath.Set( privatePath.Left( KSWIDaemonPrivateFolder().Length() ) );
+					}
+
+				// Ignore if its a Stub Sis file
+				if ( privatePath.CompareF( KSWIDaemonPrivateFolder ) )
+					{
+					if ( iSisFilename == NULL )
+						{
+						iSisFilename = packageFiles[i]->AllocL();
+						LOG2( "Application sis '%S'", iSisFilename );
+						}
+					else
+						// More than one sis present in the Wrapper Pkg
+						{
+						LOG2( "! More than one sis file present: '%S'. LEAVE.", packageFiles[i] );
+						//TODO:GM: should there be a new error code for this??
+						User::Leave( KErrNotSupported );
+						}
+					}
+				} // if sis extension
+			} // if (KBoostraVersion != 3)
+
+		if ( KBootstrapVersion != 4 )
+			{
+			if( extnPtr.Compare(KXMLExtn) == 0 )
+				{
+				TPtrC orgName = parse.Name();
+				const TInt namelength = orgName.Length();
+				const TInt depSuffixlength = KDepExtn().Length();
+
+				if ( namelength > depSuffixlength )
+					{
+					TPtrC depSuffix = orgName.Mid( ( namelength-depSuffixlength ), depSuffixlength );
+
+					HBufC* name = depSuffix.AllocLC();
+					TPtr namePtr = name->Des();
+					namePtr.UpperCase();
+
+					if ( namePtr.Compare( KDepExtn ) == 0 )
+						{
+						if ( iDepFilename == NULL )
+							{
+							iDepFilename = packageFiles[i]->AllocL();
+							LOG2( "Dep file name is '%S'", iDepFilename );
+							}
+						else
+							// More than one dep file present in the Wrapper Pkg
+							{
+							LOG2( "! More than one dep file present: '%S'. LEAVE.", packageFiles[i] );
+							//TODO:GM: should there be a new error code for this??
+							User::Leave( KErrNotSupported );
+							}
+						}
+					CleanupStack::PopAndDestroy( name );
+					}
+				} // if XML extn
+			} // if (KBoostrapVersion != 4)
+		CleanupStack::PopAndDestroy( extn );
+		}
+
+	packageFiles.ResetAndDestroy();
+	packageFiles.Close();
+
+	if (KBootstrapVersion != 3)
+		{
+		if ( iSisFilename == NULL )
+			{
+			User::Leave( KErrNotSupported );
+			}
+		}
+	if (KBootstrapVersion != 4)
+		{
+		if ( iDepFilename == NULL )
+			{
+			User::Leave( KErrNotSupported );
+			}
+		}
+
+	CleanupStack::PopAndDestroy(&entry);
+	CleanupStack::PopAndDestroy(&registrySession);
+
+	iFileName.Set(KAdmChangesFile);
+
+	// URL is already set
+	DELETE_IF_NONNULL(iUrl);
+	iUrl = iConfigUrl->AllocL();
+
+	LOG2( "Filename is '%S'",&iFileName );
+
+#ifdef FEATURE_BOOTSTRAP_SETIAP
+	SetAndValidateIAPL();
+#endif
+
+	LOG( "- SetFileNameInfo()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::::IsAdmDownloadRequired
+// Enter after EBSStateParseChanges
+//
+// Verify whether ADM sis download is required. Based on this, the next state will be set.
+// ---------------------------------------------------------------------------
+//
+TBool CStateMachine::IsAdmDownloadRequired()
+	{
+	const TBool isAdmDownloadRequired =
+			CompareVersions(iAdmInstalledVersion, iAdmChangesInfo.iVersion)
+				== EGreaterSecondVersion;
+
+	if ( isAdmDownloadRequired )
+		{
+		LOG7( "ADM update required (v%d.%02d.%d -> v%d.%02d.%d)",
+			iAdmInstalledVersion.iMajor, iAdmInstalledVersion.iMinor, iAdmInstalledVersion.iBuild,
+			iAdmChangesInfo.iVersion.iMajor, iAdmChangesInfo.iVersion.iMinor, iAdmChangesInfo.iVersion.iBuild
+			);
+
+		iFileName.Set(*iAdmChangesInfo.iSisName);
+
+		DELETE_IF_NONNULL(iUrl);
+
+		iUrl = iConfigUrl->AllocL();
+		}
+	else
+		{
+		LOG4( "ADM is up-to-date (v%d.%02d.%d)",
+			iAdmInstalledVersion.iMajor, iAdmInstalledVersion.iMinor, iAdmInstalledVersion.iBuild
+			);
+		}
+
+	return isAdmDownloadRequired;
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::::StateDownloadL
+// Enter in case EBSStateDownloadChanges, EBSStateDownloadAdm
+//
+// Download the specified file from the given url.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::StateDownloadL()
+	{
+	LOG( "+ StateDownloadL()" );
+
+	// Create the full URL for download
+	DELETE_IF_NONNULL( iDownloadUrl );
+	// +1 for '/'
+	iDownloadUrl = HBufC8::NewL(iUrl->Length() + iFileName.Length() + 1 );
+	TPtr8 ptr(iDownloadUrl->Des());
+	ptr.Copy(*iUrl);
+
+	// Append forward slash if that's missing
+	if (ptr.Right(1)[0] != '/')
+		{
+		ptr.Append('/');
+		}
+	ptr.Append(iFileName);
+
+	iDownloadError = EDlErrNoError;
+	iConnectionAttempt = 0;
+
+	// Set download file name along with path
+	TChar systemDrive;
+	RFs::DriveToChar(RFs::GetSystemDrive(), systemDrive);
+
+	DELETE_IF_NONNULL( iDownloadFileName );
+	iDownloadFileName = HBufC::NewL(KDownloadFolder().Length() + iFileName.Length());
+	TPtr responseFilenamePtr = iDownloadFileName->Des();
+
+	responseFilenamePtr.Copy(KDownloadFolder);
+	responseFilenamePtr[0] = systemDrive;
+	responseFilenamePtr.Append(iFileName);
+
+	// Create new download
+	LOG2( "Downloading '%S'", iDownloadFileName );
+	LOG8_2( "  from '%S'", iDownloadUrl );
+
+	TBool isNewDl = ETrue, tried = EFalse;
+retry:
+	RHttpDownload& dl = iDownloadManager.CreateDownloadL( *iDownloadUrl, isNewDl );
+
+	ConeUtils::EnsurePathExistsL(*iDownloadFileName);
+
+	if (isNewDl)
+		{
+		LOG2( "Receiving '%S'", iDownloadFileName );
+		dl.SetStringAttribute( EDlAttrDestFilename, *iDownloadFileName );
+		User::LeaveIfError( dl.Start() );
+		}
+	else
+		{
+		LOG( "Dl exists." );
+		dl.Delete();
+		LOG( "Dl deleted." );
+		if (tried)
+			{
+			LOG( "Tried already, leaving" );
+			User::Leave(KErrAlreadyExists);
+			}
+		else
+			{
+			tried = ETrue;
+			goto retry;
+			}
+		}
+
+	LOG( "- Download()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::StateParseChangesL
+// Enter in case EBSStateParseChanges
+//
+// Parse the given changes file.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::StateParseChangesL()
+	{
+	LOG2( "+ ParseFile('%S')", iDownloadFileName );
+	User::LeaveIfNull(iDownloadFileName);
+
+	// Initialize the parser
+	CSenXmlReader* XmlReader = CSenXmlReader::NewLC(EErrorOnUnrecognisedTags);
+	CSenDomFragment* DomFragment = CSenDomFragment::NewL();
+	CleanupStack::PushL(DomFragment);
+
+	XmlReader->SetContentHandler(*DomFragment);
+	DomFragment->SetReader(*XmlReader);
+
+	// Parse the provided changes file
+	XmlReader->ParseL(CEikonEnv::Static()->FsSession(), *iDownloadFileName);
+
+	// Get package version
+	CSenElement* packageElement;
+	packageElement = DomFragment->AsElement().Element(KFieldVersion);
+	if (packageElement == NULL)
+		{
+		User::Leave(EXmlErrorMissingVersion);
+		}
+	else
+		{
+		TPtrC8 versionPtr = packageElement->Content();
+		TVersion ver;
+		if (SetVersion(versionPtr, iAdmChangesInfo.iVersion) == EFalse)
+			{
+			User::Leave(EXmlErrorInvalidVersion);
+			}
+		}
+
+	// Get the ADM sis file name
+	packageElement = DomFragment->AsElement().Element(KFieldSisName);
+	if (packageElement)
+		{
+		iAdmChangesInfo.iSisName = packageElement->ContentUnicodeL();
+		}
+	else
+		{
+		User::Leave(EXmlErrorMissingSisFileName);
+		}
+
+	// URL read from ADM changes file.
+	// ADM.sis will be fetched from this url, if present. Or else default config url will be used.
+#if USE_ADMCHANGES_URL
+	// Get the optional URL
+	packageElement = DomFragment->AsElement().Element(KFieldUrl);
+	if (packageElement)
+		{
+		TPtrC8 urlPtr = packageElement->Content();
+		iAdmChangesInfo.iUrl = urlPtr.AllocL();
+		}
+#endif
+
+	CleanupStack::PopAndDestroy( DomFragment );
+	CleanupStack::PopAndDestroy( XmlReader );
+
+	// Delete no longer required changes file
+	DeleteFile(*iDownloadFileName);
+
+	LOG( "- ParseFile()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::StateInstallAdmL
+// Enter in case EBSStateInstallAdm
+//
+// Silent Install the given sis file. This is asynchronous and the next state transition happens only in the handle function.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::StateInstallAdmL()
+	{
+	LOG( "+ InstallPackage()" );
+	SwiUI::TInstallOptions Options;
+
+	Options.iUpgrade = SwiUI::EPolicyAllowed;
+	Options.iOCSP    = SwiUI::EPolicyNotAllowed;
+	Options.iDrive   = 'c';
+	Options.iUntrusted = SwiUI::EPolicyNotAllowed;
+	Options.iCapabilities = SwiUI::EPolicyNotAllowed;
+	Options.iOverwrite = SwiUI::EPolicyAllowed;
+
+	iOptionsPckg = Options;
+
+	if (iInstallObsrv == NULL)
+		{
+		iInstallObsrv = new (ELeave) CInstallObserver(this);
+		}
+	iInstallObsrv->iStatus = KRequestPending;
+	iInstallObsrv->Start();
+	// Start asynchronous installation
+	iLauncher.SilentInstall(iInstallObsrv->iStatus, *iDownloadFileName, iOptionsPckg);
+
+	LOG( "- InstallPackage()" );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::StateLaunchAdmL
+// Enter in case EBSStateLaunchAdm
+//
+// Launch ADM. A few command line args are passed and this depends on the bootstrap version.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::StateLaunchAdmL()
+	{
+	LOG( "+ LaunchAdm()" );
+
+	TUint32 protocolVer = KBootstrapAdmProtocolVersion;
+	TUint32 launchCtrl = 0;
+
+	// Command line arguments, version 15 specification:
+	//
+	//31               9  8  7  6  5  4  3  2  1  0
+	// +-------------+--+--+--+--+--+--+--+--+--+--+
+	// | reserved    |  |  |  |  |  |  |           |
+	// +-------------+--+--+--+--+--+--+--+--+--+--+
+	//
+	//      value
+	// bits range description
+	//  0-3  0-15 Command line parameter protocol version:
+	//             0 = not supported
+	//             1 = ADM.exe 1 <wrapper_uid> <iap> <depfile> <sisfile>
+	//             2 = ADM.exe 2 <wrapper_uid> <iap> <depfile> <sisfile>
+	//             3 = ADM.exe 3 <wrapper_uid> <iap> <depfile>
+	//             4 = ADM.exe 4 <wrapper_uid> <iap> <sisfile> (this was used in beta1, beta2)
+	//            15 = ADM.exe 15 [parameters as specified by other bits]
+	//
+	//         since
+	//  bit  version type command line parameter present
+	//    4      4     N  Bootstrap version number
+	//    5      4     N  Wrapper UID
+	//    6      4     N  IAP
+	//    7      4     N  ADM launch condition code:
+	//                    KCmdLineCancelAdm: ADM needs to cancel installation
+	//                    KCmdLineLaunchAdm: ADM starts normally
+	//    8      4     S  Full path to dependency XML file
+	//    9      4     S  Full path to application SIS file
+	//
+	// Types:
+	//  N  Natural decimal number (range 0 - 2^32-1, fits to TUint32)
+	//  S  UTF-8 string, must NOT contains spaces or other whitespaces
+	//
+	// Command line parameters appear in the order of the bits set, i.e.
+	// if bits 4, 8, 9 are set the command line parameters are:
+	// ADM.exe 784 <bootstrap_version> <dep_file> <sis_file>
+	//
+	// If command line protocol version is less than 15, it is assumed that
+	// old version command line parameter format is used.
+	//
+
+	// In case of approach 3 , cleanup of only BootStrap
+	// is required.
+	if (KBootstrapVersion == 3)
+		{
+		iWrapperPackageUid = KUidBootstrapApp.iUid;
+		}
+
+	// Set the launchCtrl based on Bootstrap Failure/Success
+	if ( iBootstrapFailed )
+		{
+		if (iSisFilename)
+			{
+			// SisFile exists -> resuming is possible
+			launchCtrl = KCmdLineCancelAdm;
+			}
+		else
+			{
+			launchCtrl = KCmdLineCancelAdmNoResume;
+			}
+		}
+	else
+		{
+		launchCtrl = KCmdLineLaunchAdm;
+		}
+
+	LOG2( "LaunchCtrl: %d", launchCtrl );
+
+	// By default, set the following bits:
+	// 1. BootstrapVersion,
+	// 2. WrapperUid
+	// 3. Launchctrl
+	// 4. IAP (If not set, the value is 0)
+	protocolVer |= (KCmdLineBitBootstrapVersion | KCmdLineBitWrapperUid)
+			| KCmdLineBitADMLaunchControl
+			| KCmdLineBitIAP;
+
+	// Set the mandatory command line parameters
+	//
+	// Size of 32-bit Bootstrap Version Value is 10 characters
+	// Size of 32-bit UID when converted to numeric string is 10 characters (4294967295)
+	// Size of 32-bit iIAP (TUint32) when converted to numeric string is 10 characters
+	// Size of 2 spaces is 2 characters
+	if ( (launchCtrl == KCmdLineCancelAdm) || (launchCtrl == KCmdLineLaunchAdm) )
+		{
+		switch (KBootstrapVersion)
+			{
+			case 1:
+			case 2:
+				{
+				User::LeaveIfNull(iSisFilename);
+				User::LeaveIfNull(iDepFilename);
+
+				protocolVer |= (KCmdLineBitFileSis | KCmdLineBitFileDep);
+				break;
+				}
+			case 3:
+				{
+				User::LeaveIfNull(iDepFilename);
+				protocolVer |= (KCmdLineBitFileDep);
+				break;
+				}
+			case 4:
+				{
+				User::LeaveIfNull(iSisFilename);
+				protocolVer |= (KCmdLineBitFileSis);
+				break;
+				}
+			default:
+				// Unsupported Bootstrap Version
+				User::Leave(KErrNotSupported);
+				break;
+			} // switch (KBootstrapVersion)
+		} // if ( (launchCtrl == KCmdLineCancelAdm) || (launchCtrl == KCmdLineLaunchAdm) )
+
+	// Build the command line parameter string
+	HBufC *processArgs = NULL;
+	TInt processArgsLen = 11; // obligatory protocol version number and ' '
+	TUint32 tmp = (protocolVer & ~KCmdLineBitProtocolVerMask) >> KCmdLineProtocolVerBits;
+	for (TInt i = 0; tmp != 0 || i < sizeof(KCmdLineParamLengths); tmp >>= 1, i++)
+		{
+		if (tmp & 1)
+			{
+			processArgsLen += KCmdLineParamLengths[i];
+			}
+		}
+	if (iDepFilename)
+		processArgsLen += iDepFilename->Length()+1; // +1 comes from the appended ' '
+	if (iSisFilename)
+		processArgsLen += iSisFilename->Length();
+	LOG2( "len %d", processArgsLen );
+	processArgs = HBufC::NewLC(processArgsLen);
+	TPtr ptr = processArgs->Des();
+
+	// append the obligatory protocol version number
+	ptr.AppendNum(protocolVer);
+	ptr.Append(' ');
+
+	if (protocolVer & KCmdLineBitBootstrapVersion)
+		{
+		ptr.AppendNum(KBootstrapVersion);
+		ptr.Append(' ');
+		}
+	if (protocolVer & KCmdLineBitWrapperUid)
+		{
+		ptr.AppendNum(iWrapperPackageUid);
+		ptr.Append(' ');
+		}
+	if (protocolVer & KCmdLineBitIAP)
+		{
+		ptr.AppendNum(iIAP);
+		ptr.Append(' ');
+		}
+	if (protocolVer & KCmdLineBitADMLaunchControl)
+		{
+		ptr.AppendNum(launchCtrl);
+		ptr.Append(' ');
+		}
+	if (protocolVer & KCmdLineBitFileDep)
+		{
+		ptr.Append(*iDepFilename);
+		ptr.Append(' ');
+		}
+	if (protocolVer & KCmdLineBitFileSis)
+		{
+		ptr.Append(*iSisFilename);
+		}
+
+	// Launch ADM
+	LOG3( "Launching %S '%S'", &KAdmExePath, processArgs);
+
+	RProcess process;
+	CleanupClosePushL<RProcess>( process );
+
+	const TInt err = process.Create( KAdmExePath, processArgs->Des() );
+	if (err != KErrNone)
+		{
+		LOG2( "ADM launch failed with error: %d", err );
+		CleanupStack::PopAndDestroy( &process );
+		CleanupStack::PopAndDestroy( processArgs );
+		User::Leave(err);
+		}
+	else
+		{
+		// ADM was launched properly, set it visible in the menu grid
+		LOG( "Revealing ADM menu icon" );
+		CUtils::HideApplicationFromMenuL( KUidAdm.iUid, EFalse );
+		}
+
+// Do not lower the priority: it will cause the "OK" note to be shown
+// on faster, more recent S60 devices
+//	process.SetPriority( EPriorityBackground );
+	process.Resume();
+
+	CleanupStack::PopAndDestroy( &process );
+	CleanupStack::PopAndDestroy( processArgs );
+
+	LOG2( "- LaunchAdmL(): %d", err );
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::HandleDMgrEventL
+// Callback to handle the download manager events
+// Called in EBSStateDownloadChanges, EBSStateDownloadAdm
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent )
+	{
+	TInt32 glErrId = KErrNone;
+	TInt32 errId = ENoError;
+
+	// Get error IDs
+	aDownload.GetIntAttribute( EDlAttrGlobalErrorId, glErrId );
+	aDownload.GetIntAttribute( EDlAttrErrorId, errId );
+
+#ifdef DO_LOG
+	_LIT(KFmt, ", GlErrId=%6d, ErrId=%d");
+	TBuf<64> buf;
+
+	if ( ((glErrId != KErrNone) || (errId != ENoError)) && glErrId != KErrUnknown )
+		{
+		buf.AppendFormat(KFmt, glErrId, errId);
+		}
+
+	if ( ( iDownloadState != aEvent.iDownloadState ) ||
+		 ( iProgressState != aEvent.iProgressState ) )
+		{
+		iDownloadState = aEvent.iDownloadState;
+		iProgressState = aEvent.iProgressState;
+
+		LOG4( "DlSt=%5d, PrSt=%5d%S", iDownloadState, iProgressState, &buf );
+		}
+#endif
+
+	switch ( aEvent.iDownloadState )
+		{
+		case EHttpDlCreated:
+		case EHttpDlInprogress:
+			{
+			//Nothing done.
+			break;
+			}
+		case EHttpDlPaused:
+		case EHttpDlFailed:
+// These two fill fold to EHttpDlFailed. We don't want to process failure events twice.
+//		case EHttpDlNonPausableNetworkLoss:
+//		case EHttpDlMultipleMOFailed:
+			{
+			//Continue download if paused in EHttpContentTypeReceived.
+			//Pause is received even in ProgNone state!
+			if( ( aEvent.iProgressState == EHttpContentTypeReceived ) ||
+				( (aEvent.iProgressState == EHttpProgNone ) && ( errId == ENoError ) ) )
+				{
+				LOG( "Starting download" );
+				aDownload.Start();
+				break;
+				}
+			if ( ProcessDlErrors(glErrId, errId, iDownloadError) )
+				{
+				if ( (iIapArrayIndex+1) < iIapArray.Count() )
+					{
+					// Try the next IAP
+					iIapArrayIndex++;
+					LOG3( "Starting download with next IAP[%d]=%d.", iIapArrayIndex, iIapArray[iIapArrayIndex] );
+					SetIAP( iIapArray[iIapArrayIndex] );
+					aDownload.Start();
+					break;
+					}
+				else if ( (iIapArrayIndex+1) == iIapArray.Count() )
+					{
+					// We've gone through all the IAPs in the SNAP, prompt the user for an access point
+					SetIAP( 0 );
+					// This ensures that this code path is taken only once
+					iIapArrayIndex++;
+					}
+				if (++iConnectionAttempt < KDownloadConnectionRetries)
+					{
+					LOG4( "Restarting download due to network failure (%d: %d, %d)", iConnectionAttempt, glErrId, errId );
+					// TODO: Do we need to do a Reset() before Start()?
+					aDownload.Start();
+					// We don't restart the download timer on purpose
+					//
+					// Clear the error id so it doesn't get caught below
+					// as this is not an error situation.
+					iDownloadError = EDlErrNoError;
+					}
+				else
+					{
+					LOG4( "Too many download retries, cancelling download (%d; %d, %d)", iDownloadError, glErrId, errId );
+					// iDownloadError has been set properly by ProcessDlErrors()
+					}
+				}
+			if ( iDownloadError != EDlErrNoError )
+				{
+				LOG2( "DlErr=%d", iDownloadError );
+
+				if ( iDownloadError == EDlErrCancelled )
+					{
+					HandleFailure(ETrue); // If user pressed cancel, then iIsIapCancelled is 1
+					}
+				else
+					{
+					HandleFailure(EFalse);
+					}
+				}
+			break;
+			}
+		case EHttpDlCompleted:
+			{
+			// TODO: Get the DownloadfileName??
+			iDownloadManager.GetIntAttribute( EDlMgrIap, iIAP );
+			LOG2( "IAP set to %d", iIAP );
+
+			switch (iAppState)
+				{
+				case EBSStateDownloadChanges:
+					RequestState(EBSStateParseChanges);
+					break;
+				case EBSStateDownloadAdm:
+					RequestState(EBSStateInstallAdm);
+					break;
+				default:
+					LOG2( "DlEvent from unknown state %d", iAppState );
+					// TODO: Fix the panic code
+					User::Panic(_L("SmartInst"), 42);
+					break;
+				}
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CStateMachine::ProcessDlErrors(const TInt32 aGlErrId, const TInt32 aErrId, EDownloadError& aDownloadError)
+	{
+	LOG4( "+ ProcessDlErrors(%d, %d, %d)", aGlErrId, aErrId, aDownloadError );
+	TBool requestRestart = EFalse;
+	const TUint count = iIapArray.Count();
+	// Process the error codes
+	switch (aErrId)
+		{
+		case KErrNone:
+			// everything a-OK!
+			break;
+		case EConnectionFailed:
+			// Request restart, if we haven't exhausted all the IAPs on the list.
+			if (count > 0 && iIapArrayIndex < count)
+				{
+				requestRestart = ETrue;
+				goto exit;
+				}
+			else
+				{
+				aDownloadError = EDlErrDownloadFailure;
+				}
+			break;
+		case ETransactionFailed:
+			// We set the download error to network failure as that's the
+			// error propagated to TState::DownloadFailed().
+			// The state machine will try to restart the download, if the
+			// error code is EDlErrDownloadFailure, but NOT for EDlErrNetworkFailure.
+			aDownloadError = EDlErrDownloadFailure;
+			requestRestart = ETrue;
+			break;
+		case EObjectNotFound:
+			aDownloadError = EDlErrFileNotFound;
+			break;
+		default:
+			LOG2( "Unhandled ErrId %d", aErrId );
+			aDownloadError = EDlErrDownloadFailure;
+			break;
+		}
+	// Process the global error code
+	switch (aGlErrId)
+		{
+		case KErrNone:
+			// everything a-OK!
+			break;
+		case KErrCancel:
+		case KErrAbort:
+			// The user has cancelled the download / IAP selection box
+			aDownloadError = EDlErrCancelled;
+			break;
+		case KErrDiskFull:
+			// Disk full
+			aDownloadError = EDlErrNotEnoughSpace;
+			break;
+		case KErrUnknown:
+			{
+			if( aErrId == KErrNone )
+				{
+				aDownloadError = EDlErrDownloadFailure;
+				requestRestart = ETrue;
+				}
+			}
+			break;
+		case KErrNotFound:
+		case KErrBadName:
+		case KErrNotSupported:
+		case KErrCommsLineFail:
+		case KErrTimedOut:
+		case KErrCouldNotConnect:
+		case KErrDisconnected:
+		case KErrGprsServicesNotAllowed:
+		case KErrGsmMMNetworkFailure:
+		case -8268: // KErrGsmOfflineOpNotAllowed:
+		// WLAN network related errors:
+		case KErrWlanNetworkNotFound:
+		case KErrWlanRoamingFailed:
+		case KErrWlanNetworkLost:
+#if 0
+		case KErrBadName:
+		case KErrNotSupported:
+		case KErrWlanOpenAuthFailed:
+		case KErrWlanSharedKeyAuthRequired:
+		case KErrWlanSharedKeyAuthFailed:
+		case KErrWlanWpaAuthRequired:
+		case KErrWlanIllegalEncryptionKeys:
+		case KErrWlanPskModeRequired:
+		case KErrWlanEapModeRequired:
+		case KErrWlanSimNotInstalled:
+		case KErrWlanNotSubscribed:
+		case KErrWlanAccessBarred:
+		case KErrWlanPasswordExpired:
+		case KErrWlanNoDialinPermissions:
+		case KErrWlanAccountDisabled:
+		case KErrWlanRestrictedLogonHours:
+		case KErrWlanServerCertificateExpired:
+		case KErrWlanCerficateVerifyFailed:
+		case KErrWlanNoUserCertificate:
+		case KErrWlanNoCipherSuite:
+		case KErrWlanUserRejected:
+		case KErrWlanUserCertificateExpired:
+		// less fatal, but still needs to fail the download:
+		case KErrWlanWpaAuthFailed:
+		case KErrWlan802dot1xAuthFailed:
+		case KErrWlanIllegalWpaPskKey:
+		case KErrWlanEapSimFailed:
+		case KErrWlanEapTlsFailed:
+		case KErrWlanEapPeapFailed:
+		case KErrWlanEapMsChapv2:
+		case KErrWlanEapAkaFailed:
+		case KErrWlanEapTtlsFailed:
+		case KErrWlanLeapFailed:
+		case KErrWlanEapGtcFailed:
+#endif
+			// A fatal network error has occured, don't retry the download
+			requestRestart = EFalse;
+			aDownloadError = EDlErrNetworkFailure;
+			break;
+		default:
+			if (!requestRestart)
+				{
+				// We assume all the other error codes to be 'hard' network errors
+				LOG2( "Unhandled GlErrId %d", aGlErrId );
+				aDownloadError = EDlErrNetworkFailure;
+				}
+			break;
+		}
+exit:
+	LOG3( "- ProcessDlErrors(): %d, %d", requestRestart, aDownloadError );
+	return requestRestart;
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::HandleInstallCompleteL
+// Callback to handle the Installation events
+// Called in EBSStateInstallAdm
+//
+// If SWI is busy, re attempt installation 6 times
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::HandleInstallCompleteL(const TInt& aStatus)
+	{
+	LOG2("+ HandleInstallCompleteL(%d)", aStatus);
+	TBool retrying = EFalse;
+
+	User::LeaveIfNull(iDownloadFileName);
+
+	// If the install server is busy , try connecting multiple times.
+	if ( (aStatus == SwiUI::KSWInstErrBusy ||
+			aStatus == KErrInUse ||
+			aStatus == KErrServerBusy)
+			&& ((++iInstallAttempt) <= KMaxInstallerConnectionAttempts))
+		{
+		LOG3( "Installer busy (%d), requesting retry (%d)", iInstallAttempt, aStatus );
+		retrying = ETrue;
+		User::After(KIterationTimer * iInstallAttempt);
+		RequestState(EBSStateInstallAdm);
+		}
+
+	if (aStatus == KErrNone)
+		{
+		LOG( "ADM installed OK, deleting SIS." );
+		// Delete no longer required sis file.
+		DeleteFile(*iDownloadFileName);
+		// ADM was installed succesfully, launch it!
+		RequestState(EBSStateLaunchAdm);
+		}
+	else if (!retrying)
+		{
+		LOG3( "Installation unsuccessful (%d) after %d attempts, leaving.", aStatus, iInstallAttempt );
+		// TODO: Better error handling
+		User::Leave(aStatus);
+		}
+
+	LOG("- HandleInstallCompleteL()");
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::IsPackagePresentL
+// Check whether the given Package (uid & version) is already present in the device.
+// Called in EBSStateInit to check for ADM Presence
+// ---------------------------------------------------------------------------
+//
+TBool CStateMachine::IsPackagePresentL(const TUid& aUid, TVersion& aVersion)
+	{
+	LOG( "+ ADMPresent()");
+
+	// Connect to SisRegistry to find if the package is
+	// already installed.
+	Swi::RSisRegistrySession registrySession;
+
+	User::LeaveIfError(registrySession.Connect());
+	CleanupClosePushL(registrySession);
+
+	const TBool isPkgInstalled = registrySession.IsInstalledL(aUid);
+
+	if (isPkgInstalled)
+		{
+		Swi::RSisRegistryEntry entry;
+
+		// Open registry entry
+		User::LeaveIfError(entry.Open(registrySession, aUid));
+		CleanupClosePushL(entry);
+		aVersion = entry.VersionL();
+
+		CleanupStack::PopAndDestroy(&entry);
+		}
+
+	CleanupStack::PopAndDestroy(&registrySession);
+
+	LOG3( "- ADMPresent(): 0x%x = %d", aUid.iUid, isPkgInstalled );
+
+	return isPkgInstalled;
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::DeleteFile
+// Delete the given file
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::DeleteFile(const TDesC& aFileName)
+	{
+	CCoeEnv::Static()->FsSession().Delete(aFileName);
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::HandleWaitNoteCancel
+// Call HandleFailure.
+// ---------------------------------------------------------------------------
+//
+//TODO: Can this be removed and call HandleFailure() directly?
+void CStateMachine::HandleWaitNoteCancel()
+	{
+	HandleFailure(ETrue);
+	}
+
+// ---------------------------------------------------------------------------
+// CStateMachine::HandleFailure
+// Perform the state specific cleanup incase of failure.
+// And then call AppUi Exit.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::HandleFailure(TInt aError)
+	{
+	LOG2( "+ HandleFailure(): %d", aError );
+
+	switch (iAppState)
+		{
+		case EBSStateInit:
+		case EBSStateSetup:
+		case EBSStateLaunchAdm:
+			// No cleanUp required here
+			break;
+		case EBSStateDownloadChanges:
+		case EBSStateDownloadAdm:
+			// Deletion of all downloads is taken care in destructor
+			break;
+		case EBSStateInstallAdm:
+			// Cancel the installation
+			iLauncher.CancelAsyncRequest(SwiUI::ERequestSilentInstall);
+			// fall-through
+		case EBSStateParseChanges:
+			{
+			// Delete the downloaded dep file
+			if (iDownloadFileName)
+				{
+				DeleteFile(*iDownloadFileName);
+				}
+			}
+			break;
+		default:
+			break;
+		}
+
+	// Even in case of any failure, launch ADM, if present in device.
+	// ADM needs to be launched in Cancel mode.
+	if( (iAppState < EBSStateLaunchAdm) && iIsAdmInstalled )
+		{
+		// If it is user press cancel or Filenames are itself not set, then remove the whole wrapper package.
+		// TODO: Should the failure reason be passed to ADM?
+		// TODO: or show the error note in bootstrap, but launch ADM to remove the wrapper?
+		if ( aError || ( iAppState <= EBSStateSetup) )
+			{
+			// No need to delete the files here, as the whole package will get removed.
+			iBootstrapFailed = ETrue;
+			}
+		RequestState(EBSStateLaunchAdm);
+		}
+	else
+		{
+		// Delete the dep file is present
+		if ( (KBootstrapVersion == 3) && iDepFilename )
+			{
+			DeleteFile(*iDepFilename);
+			}
+		else if ( (KBootstrapVersion == 4) && iSisFilename )
+			{
+			DeleteFile(*iSisFilename);
+			}
+
+		// Set the Error ID based on App State and User Cancel.
+		if( aError || ((iAppState != EBSStateDownloadChanges) && (iAppState != EBSStateDownloadAdm)) )
+			{
+			iAppUi.SetErrorId(EInstallationFailed);
+			}
+		else
+			{
+			iAppUi.SetErrorId(EDownloadFailed);
+			}
+
+		// Now call App Exit to display the error note and exit bootstrap.
+		RequestState(EBSStateExitWithError);
+		}
+
+	LOG( "- HandleFailure()" );
+	}
+
+#ifdef FEATURE_BOOTSTRAP_SETIAP
+// ---------------------------------------------------------------------------
+// Sets the used internet access point (IAP) to same that the Browser uses
+// with additional verification that the selected IAP actually exist.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::SetIAP(const TUint aIAP)
+	{
+	LOG2( "+ SetDlMgrIAP(): %d", aIAP );
+	iIAP = aIAP;
+	// Set the download manager to silent mode, if the IAP is valid
+	iDownloadManager.SetBoolAttribute( EDlMgrSilentMode, aIAP != 0 );
+	iDownloadManager.SetIntAttribute( EDlMgrIap, iIAP );
+	}
+
+// ---------------------------------------------------------------------------
+// Sets the used internet access point (IAP) to same that the Browser uses
+// with additional verification that the selected IAP actually exist.
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::SetAndValidateIAPL()
+	{
+	LOG( "+ CBootstrapAppUi::SetAndValidateIAPL()" );
+	// Use the browser default IAP, if available
+	TInt ret;
+	TInt browserIAP, browserIAPmode, browserSNAP;
+	TRequestStatus status;
+	RConnectionMonitor connMon;
+
+	// IsIapActive() requires this
+	CleanupClosePushL(connMon);
+	connMon.ConnectL();
+
+	CRepository *repository = CRepository::NewLC( KCRUidBrowser );
+	User::LeaveIfError( repository->Get(KBrowserAccessPointSelectionMode, browserIAPmode) );
+	User::LeaveIfError( repository->Get(KBrowserDefaultAccessPoint, browserIAP) );
+	ret = repository->Get( KBrowserNGDefaultSnapId, browserSNAP );
+	CleanupStack::PopAndDestroy( repository );
+
+	LOG5( "Browser IAP = %d, mode %d, SNAP %d (%d)", browserIAP, browserIAPmode, browserSNAP, ret );
+
+	if ( OviStoreRunning() && IsIapActive(connMon, browserIAP) )
+		{
+		LOG2( "Using Ovi Store IAP %d", browserIAP );
+		browserIAPmode = EBrowserCenRepApSelModeUserDefined;
+		// browserIAP now contains the IAP ID that OviStore is using
+		}
+
+	// Get the IAP IDs for the browser SNAP, if we got the SNAP ID properly
+	if (ret == KErrNone && browserSNAP > 0)
+		{
+		GetSnapIapsL(browserSNAP);
+		}
+
+	switch (browserIAPmode)
+		{
+		case EBrowserCenRepApSelModeDestination:
+			//LOG( "Destination network ");
+			break;
+		case EBrowserCenRepApSelModeUserDefined:
+			//LOG( "User defined IAP" );
+			if (browserIAP > 0)
+				{
+				SetIAP(browserIAP);
+				break;
+				}
+			// else fall-through
+		case EBrowserCenRepApSelModeAlwaysAsk:
+		default:
+			LOG( "'Always ask'" );
+			// if browser IAP is already active: then we utilise it directly, no prompting
+			if ( IsIapActive(connMon, browserIAP) )
+				{
+				LOG2( "Connection already up (%d)", browserIAP );
+				SetIAP(browserIAP);
+				}
+			else
+				{
+				LOG( "Prompting IAP" );
+				// Set to always ask, we obey it as well
+				}
+			// need to set this, if we ended up here with default:
+			browserIAPmode = EBrowserCenRepApSelModeAlwaysAsk;
+			break;
+		}
+	// Found a proper IAP?
+	if (iIAP != 0 || browserIAPmode == EBrowserCenRepApSelModeAlwaysAsk)
+		{
+#if 0
+		TBuf<64> iapName;
+		connMon.GetStringAttribute( iIAP, 0, KIAPName, iapName, status );
+		User::WaitForRequest( status );
+		if ( status.Int() != KErrNone )
+			{
+			// Try access point name
+			connMon.GetStringAttribute( iIAP, 0, KAccessPointName, iapName, status );
+			User::WaitForRequest( status );
+			if ( status.Int() != KErrNone )
+				{
+				LOG2( "ConnMon.GetStrAttr() ret = %d, ignoring.", status.Int() );
+				}
+			}
+		LOG3( "Using IAP %d ('%S')", iIAP, &iapName );
+#else
+		//LOG2( "Using IAP %d", iIAP );
+#endif
+		}
+	else
+		{
+		// set the IAP from SNAP, if it's valid
+		if (iIapArray.Count() > 0 && iIapArray[0] > 0)
+			{
+			LOG2( "Starting with IAP %d", iIapArray[0] );
+			SetIAP(iIapArray[0]);
+			}
+		}
+
+	CleanupStack::PopAndDestroy( &connMon );
+	LOG3( "- CBootstrapAppUi::SetAndValidateIAPL(): %d, %d", ret, iIAP );
+	}
+
+// ---------------------------------------------------------------------------
+// Get the default IAP for the selected SNAP. SNAP is available since 3.2
+// ---------------------------------------------------------------------------
+//
+void CStateMachine::GetSnapIapsL(const TUint aSNAPId)
+	{
+	// Load the helper library dynamically
+	_LIT(KLibHelper, "smartinstaller.dll");
+	LOG( "Loading helper" );
+	RLibrary lib;
+	const TInt ret = lib.Load( KLibHelper() );
+	if (ret == KErrNone)
+		{
+		CleanupClosePushL(lib);
+		const TInt KHelperNewLC = 2;
+		CHelper* helper = (CHelper*)lib.Lookup(KHelperNewLC)();
+		TRAPD(ret, helper->GetSnapIapsL(aSNAPId, iIapArray) );
+		LOG3( "Got %d IAPs (%d)", iIapArray.Count(), ret );
+#ifdef DO_LOG
+		for (TInt i = 0; i < iIapArray.Count(); i++)
+			{
+			LOG3( "IAP[%d]=%d", i, iIapArray[i] );
+			}
+#endif
+		CleanupStack::PopAndDestroy(2, &lib); // helper, lib
+		}
+	else
+		{
+		LOG2( "Helper load failed %d", ret );
+		}
+	lib.Close();
+	}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool CStateMachine::IsIapActive(RConnectionMonitor &aConnMon, TInt& aIAP)
+	{
+	LOG2( "+ IsIapActive(): %d", aIAP );
+
+	TBool ret = EFalse;
+	// Get the connection info for each connection
+	TUint id, iapId, count, countSubConn;
+	TRequestStatus status = KRequestPending;
+
+	aConnMon.GetConnectionCount( count, status );
+	User::WaitForRequest( status );
+
+	if (status.Int() != KErrNone)
+		{
+		LOG2( "GetConnCount() failed %d.", status.Int() );
+		return ret;
+		}
+
+	LOG2( "Active connections: %d", count );
+
+	TInt oviStoreIap = KErrNotFound;
+	for ( TInt i = 1; i <= count && !ret; i++ )
+		{
+		const TInt err = aConnMon.GetConnectionInfo( i, id, countSubConn );
+		if ( err == KErrNone )
+			{
+			LOG3( "ConnID[%d] = %d" , i, id );
+			// Get the IAP Id of the connection
+			aConnMon.GetUintAttribute( id, 0, KIAPId, iapId, status );
+			User::WaitForRequest( status );
+			if ( status.Int() != KErrNone )
+				{
+				LOG2( "GetIapId failed (%d), trying next", status.Int() );
+				// try next connection
+				continue;
+				}
+			else
+				{
+				LOG2( "Active IAP = %d", iapId );
+				}
+
+			// Find the UIDs using this connection
+			TConnMonClientEnumBuf clientBuf;
+			aConnMon.GetPckgAttribute( id, 0, KClientInfo, clientBuf, status );
+			User::WaitForRequest( status );
+			if ( status.Int() == KErrNone )
+				{
+				//LOG3( "%d clients sharing IAP %d", clientBuf().iCount, iapId );
+				for (TUint client = 0; client < clientBuf().iCount; client++)
+					{
+					//LOG2( "0x%08X", clientBuf().iUid[client].iUid );
+					const TInt KUidSecureWidgetUi = 0x102829A0;
+					if ( clientBuf().iUid[client].iUid == KUidSecureWidgetUi
+							&& OviStoreRunning() )
+						{
+						if (oviStoreIap == KErrNotFound)
+							{
+							//LOG2( "Possible OviStore IAP %d", iapId );
+							oviStoreIap = iapId;
+							}
+						else
+							{
+							// Another secure widget is running, we cannot determine
+							// which one is ovi store, default to browser IAP
+							oviStoreIap = 0;
+							}
+						}
+					}
+				}
+			else
+				{
+				LOG2( "GetClientInfo failed (%d)", status.Int() );
+				}
+			// ignore any errors in KClientInfo query
+
+			// If we found Ovi Store IAP, use that
+			if (oviStoreIap > 0)
+				{
+				LOG2( "Sharing Ovi Store IAP %d", oviStoreIap );
+				iapId = oviStoreIap;
+				}
+
+			if ( iIapArray.Count() > 0 )
+				{
+				// Go through all the SNAP's IAPs
+				for (TInt iap = 0; iap < iIapArray.Count(); iap++)
+					{
+					if ( iapId == iIapArray[iap] )
+						{
+						LOG3( "Using %d (SNAP idx %d)", iapId, iap );
+						// Update the IAP to match the found one
+						aIAP = iapId;
+						ret = ETrue;
+						break;
+						}
+					}
+				}
+			else if ( iapId == aIAP )
+				{
+				LOG2( "Using %d", iapId );
+				ret = ETrue;
+				// we found matching IAP ID, break out of the loop
+				break;
+				}
+			}
+		else
+			{
+			LOG3( "GetConnInfo[%d] failed (%d), trying next", i, err );
+			// try next connection
+			}
+		} // for
+#if 0
+	// If we didn't have any connections up, try to find the last used browser
+	// IAP from the SNAP and use that:
+	if (!ret && count == 0 && iIapArray.Count() > 0 )
+		{
+		// Go through all the SNAP's IAPs
+		for (TInt iap = 0; iap < iIapArray.Count(); iap++)
+			{
+			if ( iapId == iIapArray[iap] )
+				{
+				LOG3( "Using %d (SNAP idx %d)", iapId, iap );
+				// Update the IAP to match the found one
+				aIAP = iapId;
+				ret = ETrue;
+				break;
+				}
+			}
+		}
+#endif
+	LOG3( "- IsIapActive(): %d = %d", aIAP, ret );
+
+	return ret;
+	}
+#endif // FEATURE_BOOTSTRAP_SETIAP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/config.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,334 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Implementation to read from the config file.
+*
+*
+*/
+
+#include "config.h"
+
+// ---------------------------------------------------------------------------
+// WriteIntToConfigFile
+//
+// Write the given TUint32 value and tag into the given file.
+//
+// @return TInt normal Symbian error code or KErrNone if all went OK.
+// ---------------------------------------------------------------------------
+//
+TInt WriteIntToConfigFile( RFile& aFile, const TDesC& aTag, const TUint32 aValue )
+	{
+	const TInt valueLength = 10; //Length of TUint32
+	TBufC<valueLength> value;
+	TPtr valuePtr = value.Des();
+
+	valuePtr.AppendNum(aValue);
+	TInt err = WriteToConfigFile( aFile, aTag, value );
+
+	return err;
+	}
+
+// ---------------------------------------------------------------------------
+// WriteToConfigFile
+//
+// Write the given value-tag pair into the given file.
+//
+// @return TInt normal Symbian error code or KErrNone if all went OK.
+// ---------------------------------------------------------------------------
+//
+TInt WriteToConfigFile( RFile& aFile, const TDesC& aTag, const TDesC& aValue )
+	{
+	TFileText outTextFile;
+	outTextFile.Set(aFile);
+
+	HBufC* content = HBufC::New( aTag.Length() + aValue.Length());
+	if(!content)
+		{
+		return KErrNoMemory;
+		}
+	CleanupStack::PushL(content);
+	TPtr ptr(content->Des());
+
+	ptr.Copy(aTag);
+	ptr.Append(aValue);
+
+	TInt err = outTextFile.Write(ptr);
+	CleanupStack::PopAndDestroy(content);
+
+	if( err != KErrNone)
+		{
+		return err;
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// EnsureNewLineAtEnd
+//
+// Add a newline character as a last character in the file.
+//
+// @return TInt normal Symbian error code or KErrNone if all went OK.
+// ---------------------------------------------------------------------------
+//
+TInt EnsureNewLineAtEnd(RFile& aFile)
+	{
+	// Get last 2-bytes before EOF
+	// to check for new line character
+	TInt pos = -2;
+	TInt err = aFile.Seek(ESeekEnd, pos);
+	if(err != KErrNone)
+		{
+		return err;
+		}
+
+	TBuf8<2> buf;
+	err = aFile.Read(buf);
+	if(err != KErrNone)
+		{
+		return err;
+		}
+
+	// Ascii value of new line character is 10
+	if(buf[0] != 10 )
+		{
+		TFileText outTextFile;
+		outTextFile.Set(aFile);
+
+		// Write will append newline character
+		err = outTextFile.Write(KNullDesC);
+		if( err != KErrNone)
+			{
+			return err;
+			}
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// ReadConfigFile
+//
+// Reads the configuration file to aBuffer, aLineBuffer containing the pointers to lines.
+//
+// @return TInt normal Symbian error code or KErrNone if all went OK.
+// ---------------------------------------------------------------------------
+//
+TInt ReadConfigFile(RFile& aFile, TDes& aBuffer, RArray< TPtrC >& aLineBuffer )
+	{
+	// Read text file into buffers
+	TInt ret( KErrNone );
+	TFileText tf;
+	tf.Set( aFile );
+	aBuffer.SetMax();
+	TPtr ptr( aBuffer.MidTPtr( 0 ) );
+	TInt used( 0 );
+	do
+		{
+		ret = tf.Read( ptr );
+		TInt len( ptr.Length() );
+		if ( ( ret == KErrNone || ret == KErrEof ) && len > 0 )
+			{
+			// Store non-empty text line
+			TInt err( aLineBuffer.Append( ptr ) );
+			if ( err == KErrNone )
+				{
+				ptr.SetMax();
+				ptr.Set( ptr.MidTPtr( len ) );
+				ptr.Zero();
+				used += len;
+				}
+			else
+				{
+				ret = err;
+				}
+			}
+		}
+	while ( ret == KErrNone );
+	if ( ret == KErrEof )
+		{
+		// reached the end of file without any other error => this is OK
+		ret = KErrNone;
+		}
+	aBuffer.SetLength( used );
+
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// ReadConfigFile
+//
+// @return HBufC containg the read config file. aLineBuffer arrays pointing to lines.
+// ---------------------------------------------------------------------------
+//
+HBufC* ReadConfigFile( RFs& aFs, const TDesC& aFullPath, RArray< TPtrC >& aLineBuffer, TInt& aError )
+	{
+	RFile file;
+	aError = file.Open( aFs, aFullPath, EFileRead | EFileStreamText | EFileShareReadersOnly );
+	if ( aError != KErrNone )
+		{
+		return NULL;
+		}
+	TInt size( 0 );
+	aError = file.Size( size );
+	if ( aError != KErrNone )
+		{
+		file.Close();
+		return NULL;
+		}
+	// Get text size, create buffer for text and read text file
+	HBufC* ret = HBufC::New( ( size + sizeof( TText ) - 1 ) / sizeof( TText ) );
+	if ( !ret )
+		{
+		aError = KErrNoMemory;
+		file.Close();
+		return NULL;
+		}
+	TPtr ptr( ret->Des() );
+	aError = ReadConfigFile( file, ptr, aLineBuffer );
+	file.Close();
+	if ( aError != KErrNone )
+		{
+		delete ret;
+		aLineBuffer.Reset();
+		return NULL;
+		}
+	return ret;
+	}
+
+// ---------------------------------------------------------------------------
+// GetConfigValue
+//
+// Gets string specified by tag. For examples:
+// Tag1=Value1  Tag1 = aTag, Value1 will be copied to aTag
+// aError Normal Symbian error code or KErrNone if all went OK.
+// ---------------------------------------------------------------------------
+//
+TPtrC GetConfigValue( const TDesC& aTag, const RArray< TPtrC >& aLineBuffer, TInt& aError )
+	{
+	aError = KErrNotFound;
+	TPtrC ret( KNullDesC );
+	const TInt tagLen( aTag.Length() );
+	const TInt count( aLineBuffer.Count() );
+	for( TInt i( 0 ); i < count; ++i )
+		{
+		TPtrC line( aLineBuffer[ i ] );
+		if ( !line.Left( tagLen ).CompareF( aTag ) )
+			{
+			ret.Set( line.Mid( tagLen ) );
+			aError = KErrNone;
+			break;
+			}
+		}
+
+	return ret;
+	}
+
+TInt CompareVersions(TVersion& version1,TVersion& version2)
+	{
+	// Compare the versions based on major,minor and build number.
+	if((version1.iMajor == version2.iMajor)&&(version1.iMinor == version2.iMinor)&&(version1.iBuild == version2.iBuild))
+		{
+		return EEqualVersion;
+		}
+	else if ((version1.iMajor > version2.iMajor) ||
+			((version1.iMajor == version2.iMajor)&&(version1.iMinor > version2.iMinor)) ||
+			((version1.iMajor == version2.iMajor)&&(version1.iMinor == version2.iMinor)&&(version1.iBuild >= version2.iBuild)))
+		{
+		return EGreaterFirstVersion;
+		}
+	else
+		{
+		return EGreaterSecondVersion;
+		}
+	}
+
+TBool SetVersion(const TDesC8& aVersionPtr, TVersion& aVer)
+	{
+	// Function will return EFalse if aVersionPtr is not a valid
+	// version string
+	TLex8 lex(aVersionPtr);
+	TInt count = 0;
+	lex.SkipSpace();
+
+	// Get Major Version (max length 3)
+	const TInt maxMajorVersionLength = 3;
+	lex.Mark();
+	while ( (count<maxMajorVersionLength) && (lex.Peek() != '.') )
+		{
+		lex.Inc();
+		++count;
+		}
+
+	if (!(lex.Peek() == '.'))
+		{
+		return EFalse;
+		}
+
+	TLex8 lexToken(lex.MarkedToken());
+	if ( lexToken.Val(aVer.iMajor) != KErrNone )
+		{
+		return EFalse;
+		}
+
+	// Get Minor Version(max length 2)
+	const TInt maxMinorVersionLength = 2;
+	count = 0;
+	lex.Inc();
+	lex.Mark();
+	while ( (count<maxMinorVersionLength) && (lex.Peek() != '.') )
+		{
+		lex.Inc();
+		++count;
+		}
+
+	lexToken.Assign(lex.MarkedToken());
+	if ( lexToken.Val(aVer.iMinor) != KErrNone )
+		{
+		return EFalse;
+		}
+
+	// Check if Build Number exists,
+	// otherwise return
+	if (!(lex.Peek() == '.'))
+		 {
+		 lex.Mark();
+		 lex.SkipCharacters();
+		 if (lex.TokenLength() > 0)
+			 {
+			 return EFalse;
+			 }
+		 else
+			 {
+			 aVer.iBuild = 0;
+			 return ETrue;
+			 }
+		 }
+
+	// Get Build Number(max length 5)
+	const TInt maxBuildNoLength = 5;
+	lex.Inc();
+	lex.Mark();
+	lex.SkipCharacters();
+
+	if (lex.TokenLength() > maxBuildNoLength)
+		{
+		return EFalse;
+		}
+
+	lexToken.Assign(lex.MarkedToken());
+	if ( lexToken.Val(aVer.iBuild) != KErrNone )
+		{
+		return EFalse;
+		}
+	return ETrue;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/config.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Functions to read from the config file.
+*
+*
+*/
+
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+
+#include <e32def.h>
+#include <f32file.h>
+
+#include "globals.h"
+
+// Configuration file containing the URL for the server. Stored in private directory.
+_LIT(KConfigFile, "config.ini");
+_LIT(KCfgTagUrl, "Url=");
+
+// Resume file fields
+_LIT(KRFieldWrapperDrive, "WrapperDrive=");
+_LIT(KRFieldBootstrap, "BootstrapVersion=");
+_LIT(KRFieldAppFileName, "AppFile=");
+_LIT(KRFieldDepFileName, "DepFile=");
+_LIT(KRFieldRootUid, "RootUid=");
+_LIT(KRFieldDepPkgs, "DepPkgs=");
+_LIT(KRFieldDepPkgUid, "DepPkgUid=");
+_LIT(KRFieldDepPkgStatus, "DepPkgStatus=");
+_LIT(KRFieldWrapperPkgUid, "WrapperPkgUid=");
+_LIT(KRFieldAppName, "AppName=");
+
+TInt WriteIntToConfigFile( RFile& aFile, const TDesC& aTag, const TUint32 aValue );
+TInt WriteToConfigFile( RFile& aFile, const TDesC& aTag, const TDesC& aValue );
+TInt EnsureNewLineAtEnd( RFile& aFile );
+TInt ReadConfigFile( RFile& aFile, TDes& aBuffer, RArray< TPtrC >& aLineBuffer );
+HBufC* ReadConfigFile( RFs& aFs, const TDesC& aFullPath, RArray< TPtrC >& aLineBuffer, TInt& aError );
+TPtrC GetConfigValue( const TDesC& aTag, const RArray< TPtrC >& aLineBuffer, TInt& aError );
+TInt CompareVersions( TVersion& version1,TVersion& version2 );
+TBool SetVersion( const TDesC8& aVersionPtr, TVersion& aVer );
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/debug.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Debug definitions.
+*
+*
+*/
+
+#ifndef __SI_DEBUG_H__
+#define __SI_DEBUG_H__
+
+#include <e32debug.h>
+#include <flogger.h>
+#include <coeutils.h>
+
+// Add:
+// ConeUtils::EnsurePathExistsL( *buf ); \
+// ..if log dir is required to be always created
+
+#ifdef USE_LOGFILE
+#define INIT_DEBUG_LOG( aLogFile, aLogDir, aLogName ) \
+{ \
+HBufC* buf = aLogFile.AllocLC(); \
+TChar systemDrive; \
+RFs::DriveToChar(RFs::GetSystemDrive(),systemDrive); \
+buf->Des()[0] = systemDrive; \
+CleanupStack::PopAndDestroy(buf); \
+iLog.Connect(); \
+iLog.CreateLog( aLogDir, aLogName, EFileLoggingModeOverwrite); \
+}
+
+#define CLOSE_DEBUG_LOG \
+	iLog.CloseLog();    \
+	iLog.Close();
+
+#define INIT_OBJECT_DEBUG_LOG \
+	RFileLogger iLog;
+#else
+
+#define INIT_DEBUG_LOG( a, b, c )
+#define CLOSE_DEBUG_LOG
+#define INIT_OBJECT_DEBUG_LOG
+
+#endif
+
+#if defined(DEBUG_ADM) || defined(_DEBUG)
+
+#ifdef USE_LOGFILE
+
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); iLog.Write( KMsg ); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define LOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print(_L("RDebug _L8() at line %d"), __LINE__); }
+#else
+
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#define LOG8_2( aMsg, aParam1 ) { _LIT8(KMsg, aMsg); TBuf8<128> t; t.AppendFormat(KMsg, aParam1); RDebug::RawPrint(t); }
+#endif
+
+#define RLOG( aMsg ) { RDebug::Print ( _L(##aMsg) ); }
+#define RLOG2( aMsg, aParam1 ) { RDebug::Print ( _L(##aMsg), aParam1 ); }
+#define RLOG3( aMsg, aParam1, aParam2 ) { RDebug::Print ( _L(##aMsg), aParam1, aParam2 ); }
+#define RLOG4( aMsg, aParam1, aParam2, aParam3 ) { RDebug::Print ( _L(##aMsg), aParam1, aParam2, aParam3 ); }
+#define RLOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { RDebug::Print ( _L(##aMsg), aParam1, aParam2, aParam3, aParam4 ); }
+
+#else
+
+#define LOG( a )
+#define LOG2( a, b )
+#define LOG3( a, b, c )
+#define LOG4( a, b, c, d )
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 )
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 )
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 )
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 )
+#define LOG8_2( a, b )
+#define RLOG( a )
+#define RLOG2( a, b )
+#define RLOG3( a, b, c )
+#define RLOG4( a, b, c, d )
+#define RLOG5( a, b, c, d, e )
+#endif
+
+// Forced Logs - Always printed.
+#define FLOG( aMsg ) { _LIT(KMsg, aMsg); iLog.Write( KMsg ); RDebug::Print( KMsg ); }
+#define FLOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define FLOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iLog.WriteFormat( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/globalqueryobserver.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CGlobalQueryObserver implementation
+*
+*
+*/
+
+//  INCLUDES
+#include <eikenv.h>
+#include <e32base.h>
+
+#include "globalqueryobserver.h"
+
+
+// ================= MEMBER FUNCTIONS =========================================
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::NewL()
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver*
+		CGlobalQueryObserver::NewL(MGlobalQueryClient* aClient, const TBool aIgnoreResponse)
+	{
+	CGlobalQueryObserver* self =
+		new ( ELeave ) CGlobalQueryObserver(aClient, aIgnoreResponse);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::~CGlobalQueryObserver()
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver::~CGlobalQueryObserver()
+	{
+	Cancel();
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::Start()
+// Start the activator.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::Start()
+	{
+	SetActive();
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::CGlobalQueryObserver()
+// C++ default constructor.
+// ----------------------------------------------------------------------------
+//
+CGlobalQueryObserver::CGlobalQueryObserver(MGlobalQueryClient* aClient, const TBool aIgnoreResponse) :
+		CActive( EActivePriorityDefault ),
+		iClient( aClient ),
+		iIgnoreResponse( aIgnoreResponse )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::ConstructL()
+// Symbian default constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::ConstructL()
+	{
+	CActiveScheduler::Add( this );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::RunL()
+// Handle an event.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::RunL()
+	{
+	Cancel();
+	if ( !iIgnoreResponse )
+		{
+		iClient->HandleGlobalQueryResponseL( iStatus.Int() );
+		}
+	}
+
+// ----------------------------------------------------------------------------
+// CGlobalQueryObserver::DoCancel()
+// Implement the Cancel protocol.
+// ----------------------------------------------------------------------------
+//
+void CGlobalQueryObserver::DoCancel()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/globalqueryobserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declares CGlobalQueryObserver class for application.
+*
+*
+*/
+
+#ifndef __GLOBALQUERYOBSERVER_H__
+#define __GLOBALQUERYOBSERVER_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+/**
+* CGlobalQueryObserver class
+*/
+class CGlobalQueryObserver :
+	public CActive
+	{
+public:  // Constructors and destructor
+	class MGlobalQueryClient
+		{
+	public:
+		virtual void HandleGlobalQueryResponseL(TInt aStatus) = 0;
+		};
+	/**
+	* NewL
+	* Two-phased constructor.
+	*/
+	static CGlobalQueryObserver* NewL(MGlobalQueryClient* aClient, const TBool aIgnoreResponse);
+
+	/**
+	* ~CGlobalQueryObserver
+	* Destructor.
+	*/
+	virtual ~CGlobalQueryObserver();
+
+public:     // New function
+	/**
+	* Start
+	* Start the activator.
+	*/
+	void Start();
+
+private:    // New function
+	/**
+	* CGlobalQueryObserver
+	* C++ default constructor.
+	*/
+	CGlobalQueryObserver(MGlobalQueryClient* aClient, const TBool aIgnoreResponse);
+
+	/**
+	* ConstructL
+	* Symbian default constructor.
+	*/
+	void ConstructL();
+
+private:    // From CActive
+	/**
+	* RunL
+	* From CActive, handle an event.
+	*/
+	void RunL();
+
+	/**
+	* DoCancel
+	* From CActive, implement the Cancel protocol.
+	*/
+	void DoCancel();
+
+private: // Data
+	/**
+	 * Callback
+	 */
+	MGlobalQueryClient* iClient;
+
+	/**
+	 * Set to true to ignore query response.
+	 */
+	const TBool iIgnoreResponse;
+};
+
+#endif // __GLOBALQUERYOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/globals.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of the global constants.
+*
+*
+*/
+
+#ifndef GLOBALS_H_
+#define GLOBALS_H_
+
+// Constants
+
+// Bootstrap UID
+const TUid KUidBootstrap = TUid::Uid(0x2002CCCD);
+
+// Minimum supported version of bootstrap.sis
+const TVersion KMinBootstrapSisVersion(0, 9, 00);
+
+// Define the bootstrap version to be used.
+// Currently the versions supported are 1, 2, 3 and 4.
+const TInt KBootstrapVersion = 4;
+
+// Bootstrap-ADM command line protocol version
+const TUint32 KBootstrapAdmProtocolVersion = 15;
+
+// Command line arguments present
+const TUint32 KCmdLineProtocolVerBits = 4;
+const TUint32 KCmdLineBitProtocolVerMask  = (2 << KCmdLineProtocolVerBits  ) - 1; // KBootstrapAdmProtocolVersion must fit into this
+const TUint32 KCmdLineBitBootstrapVersion = 2 << (KCmdLineProtocolVerBits  );
+const TUint32 KCmdLineBitWrapperUid       = 2 << (KCmdLineProtocolVerBits+1);
+const TUint32 KCmdLineBitIAP              = 2 << (KCmdLineProtocolVerBits+2);
+const TUint32 KCmdLineBitADMLaunchControl = 2 << (KCmdLineProtocolVerBits+3);
+const TUint32 KCmdLineBitFileDep          = 2 << (KCmdLineProtocolVerBits+4);
+const TUint32 KCmdLineBitFileSis          = 2 << (KCmdLineProtocolVerBits+5);
+const TInt KCmdLineParamLengths[] = {
+		11, 11, 11, 11, 11, 0, 0 ,0
+};
+
+/**
+ * The maximum amount of real time to be used when trying to get
+ * access to installer is KIterationTimer * KAttemptsToAccessInstaller (in us)
+ *
+ * Default time is 100ms.
+ */
+const TInt KIterationTimer = 100000; // in microseconds
+const TInt KAttemptsToAccessInstaller = 20;
+
+// Number of download retry attempts from the CDownloadHandler::HandleDMgrEventL()
+const TInt KDownloadConnectionRetries = 3;
+
+// Number of download restart attempts from the state machine
+const TInt KDownloadRestartRetries = 3;
+
+// Maximum length of popup dialog message
+const TInt KMaxMsgSize = 128;
+
+// Amount of data to be downloaded before user is prompted when using packet data connection
+// 0 = Prompt always for packet data connections, but not for WLAN (except when Ovi Store is running)
+const TInt KDownloadPromptThreshold = 0; //5 * 1024 * 1024;
+
+// Cmd line values to indicate the starting behaviour of ADM
+const TInt KCmdLineCancelAdm 		= 1;
+const TInt KCmdLineCancelAdmNoResume 	= 2;
+const TInt KCmdLineLaunchAdm 		= 3;
+
+// Value for invalid IAP ID
+const TUint KInvalidIapId = KMaxTUint;
+
+// TODO: make the URL runtime configurable
+_LIT8(KDefaultDepServerUrl, "");
+
+enum VersionResult
+	{
+	EEqualVersion,
+	EGreaterFirstVersion,
+	EGreaterSecondVersion
+	};
+
+enum EDownloadError
+	{
+	EDlErrNoError = 0,
+	EDlErrCancelled,
+	EDlErrNetworkFailure,
+	EDlErrNotEnoughSpace,
+	EDlErrFileNotFound,
+	EDlErrDownloadFailure
+	};
+
+#endif /* GLOBALS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/globalwaitnote.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CGlobalWaitNoteObserver Definition.
+*
+*
+*/
+
+#include <aknglobalnote.h>
+#include <stringloader.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+
+#include "globalwaitnote.h"
+
+CGlobalWaitNote* CGlobalWaitNote::NewLC(MGlobalWaitNoteClient& aOwner, TBool aCancellable)
+	{
+	CGlobalWaitNote* self = new(ELeave) CGlobalWaitNote(aOwner, aCancellable);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CGlobalWaitNote* CGlobalWaitNote::NewL(MGlobalWaitNoteClient& aOwner, TBool aCancellable)
+	{
+	CGlobalWaitNote* self = NewLC(aOwner, aCancellable);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CGlobalWaitNote::CGlobalWaitNote(MGlobalWaitNoteClient& aOwner, TBool aCancellable) :
+	CActive(EPriorityStandard),
+	iOwner(aOwner),
+	iCancellable(aCancellable)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CGlobalWaitNote::ConstructL()
+	{
+	iWaitNote = CAknGlobalNote::NewL();
+	}
+
+CGlobalWaitNote::~CGlobalWaitNote()
+	{
+	if ( IsActive() )
+		{
+		Cancel();
+		}
+	delete iWaitNote;
+	iWaitNote = NULL;
+	}
+
+void CGlobalWaitNote::ShowNoteL(const TDesC& aText)
+	{
+	if ( !IsActive() )
+		{
+		if ( !iCancellable )
+			{
+			iWaitNote->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY );
+			}
+		iWaitNoteId = iWaitNote->ShowNoteL(
+			iStatus,
+			EAknGlobalWaitNote,
+			aText );
+		SetActive();
+		}
+	}
+
+void CGlobalWaitNote::CancelNoteL()
+	{
+	if ( iWaitNote /* && iWaitNoteId >= 0*/ )
+		{
+		iWaitNote->CancelNoteL( iWaitNoteId );
+		delete iWaitNote;
+		iWaitNote = NULL;
+		}
+	}
+
+void CGlobalWaitNote::RunL()
+	{
+	// Always cancel i.e. remove the note
+	CancelNoteL();
+	if ( iCancellable && iStatus.Int() == EAknSoftkeyCancel )
+		{
+		iOwner.WaitNoteCancelled();
+		}
+	}
+
+void CGlobalWaitNote::DoCancel()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/globalwaitnote.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Declaration of CGlobalWaitNoteObserver class.
+*
+*
+*/
+
+#ifndef __GLOBALWAITNOTE_H__
+#define __GLOBALWAITNOTE_H__
+
+#include <e32base.h>
+
+class CGlobalWaitNote : public CActive
+	{
+public:
+	class MGlobalWaitNoteClient
+	{
+	public:
+		virtual void WaitNoteCancelled() = 0;
+	};
+	static CGlobalWaitNote* NewL (MGlobalWaitNoteClient& aOwner, TBool aCancellable = ETrue);
+	static CGlobalWaitNote* NewLC(MGlobalWaitNoteClient& aOwner, TBool aCancellable = ETrue);
+
+public:
+	virtual ~CGlobalWaitNote();
+	void ShowNoteL(const TDesC& aText);
+	void CancelNoteL();
+
+private:
+	void ConstructL();
+	void RunL();
+	void DoCancel();
+
+private:
+   CGlobalWaitNote(MGlobalWaitNoteClient& aOwner, TBool aCancellable);
+
+private:
+	MGlobalWaitNoteClient&  iOwner;
+	CAknGlobalNote*         iWaitNote;
+	TInt                    iWaitNoteId;
+	TBool                   iCancellable;
+	TRequestStatus          iStatus;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/macros.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     Macros used in Bootstrap/ADM
+*
+*
+*/
+
+#ifndef __MACROS_H__
+#define __MACROS_H__
+
+#ifndef DELETE_IF_NONNULL
+#define DELETE_IF_NONNULL(x) \
+/*	if (x) */       \
+		{           \
+		delete x;  \
+		x = NULL;   \
+		}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/networkstatuslistener.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CNetworkStatusListener definition
+*
+*
+*/
+
+#include <e32std.h>
+#include <e32debug.h>
+#include <rconnmon.h>
+
+#undef USE_LOGFILE
+#include "networkstatuslistener.h"
+#include "networkstatusobserver.h"
+
+#ifdef USE_LOGFILE
+#define LOG( aMsg ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg ); RDebug::Print( KMsg ); }
+#define LOG2( aMsg, aParam1 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1 ); RDebug::Print( KMsg, aParam1 ); }
+#define LOG3( aMsg, aParam1, aParam2 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2 ); RDebug::Print( KMsg, aParam1, aParam2 ); }
+#define LOG4( aMsg, aParam1, aParam2, aParam3 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2, aParam3 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3 ); }
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2, aParam3, aParam4 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4 ); }
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5 ); }
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 ); }
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ) { _LIT(KMsg, aMsg); iObserver.Log( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); RDebug::Print( KMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 ); }
+#else
+#define LOG( a )
+#define LOG2( a, b )
+#define LOG3( a, b, c )
+#define LOG4( a, b, c, d )
+#define LOG5( aMsg, aParam1, aParam2, aParam3, aParam4 )
+#define LOG6( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5 )
+#define LOG7( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6 )
+#define LOG8( aMsg, aParam1, aParam2, aParam3, aParam4, aParam5, aParam6, aParam7 )
+#endif
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::NewLC
+//-----------------------------------------------------------------------------
+//
+CNetworkStatusListener* CNetworkStatusListener::NewLC(MNetworkStatusObserver& aObserver, const TUint aIapId)
+	{
+	CNetworkStatusListener* self = new (ELeave) CNetworkStatusListener(aObserver, aIapId);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::NewL
+//-----------------------------------------------------------------------------
+//
+CNetworkStatusListener* CNetworkStatusListener::NewL(MNetworkStatusObserver& aObserver, const TUint aIapId)
+	{
+	CNetworkStatusListener* self = CNetworkStatusListener::NewLC(aObserver, aIapId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::CNetworkStatusListener
+//-----------------------------------------------------------------------------
+//
+CNetworkStatusListener::CNetworkStatusListener(MNetworkStatusObserver& aObserver, const TUint aIapId) :
+		iObserver(aObserver),
+		iIapId(aIapId)
+	{
+	LOG2( "CNetworkStatusListener::CNetworkStatusListener(): id=%d", iIapId );
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::~CNetworkStatusListener()
+//-----------------------------------------------------------------------------
+//
+CNetworkStatusListener::~CNetworkStatusListener()
+	{
+	LOG( "CNetworkStatusListener::~CNetworkStatusListener()" );
+	iAvailableIAPs.Close();
+	iConnMon.CancelNotifications();
+	iConnMon.Close();
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::ConstructL
+//-----------------------------------------------------------------------------
+//
+void CNetworkStatusListener::ConstructL()
+	{
+	User::LeaveIfError( iConnMon.ConnectL() );
+/*
+	// Set KBearerAvailabilityThreshold to 1 so we can get
+	// EConnMonBearerAvailabilityChange events.
+	// If this fails, we cannot get EConnMonBearerAvailabilityChange events
+	iConnMon.SetUintAttribute( EBearerWLAN, 0,
+			KBearerAvailabilityThreshold, 1 );
+*/
+	iConnMon.NotifyEventL( *this );
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::EventL
+//-----------------------------------------------------------------------------
+//
+void CNetworkStatusListener::EventL( const CConnMonEventBase& aEvent )
+	{
+	LOG3( "+ CNetworkStatusListener::EventL(): type=%d, connId=%d", aEvent.EventType(), aEvent.ConnectionId() );
+
+	switch( aEvent.EventType() )
+		{
+		case EConnMonConnectionStatusChange:
+			{
+			// check what WLAN connection available and act accordingly
+			LOG( "CNetworkStatusListener::EventL(): EConnMonConnectionStatusChange" );
+
+			const CConnMonNetworkStatusChange* event =
+					static_cast<const CConnMonNetworkStatusChange*>(&aEvent);
+			const TUint connectionId = event->ConnectionId();
+			TUint iap = 0;
+			const TInt ret = GetIapId(connectionId, iap);
+
+			LOG5( "CNetworkStatusListener::EventL(): IAP=%d (%d), connId=%d, status=%d", iap, ret, connectionId, event->NetworkStatus() );
+			break;
+			}
+		case EConnMonIapAvailabilityChange:
+			{
+			LOG( "CNetworkStatusListener::EventL(): EConnMonIapAvailabilityChange" );
+			const CConnMonIapAvailabilityChange* event =
+				static_cast<const CConnMonIapAvailabilityChange*>(&aEvent);
+
+			UpdateIapArray( event->IapAvailability() );
+			}
+			break;
+#if 0
+		case EConnMonDownlinkDataThreshold:
+		case EConnMonNetworkRegistrationChange: // roaming, not roaming
+		case EConnMonBearerAvailabilityChange:
+		case EConnMonOldWLANNetworkLost:
+			{
+			LOG2( "CNetworkStatusListener::EventL(): Unprocessed event %d", aEvent.EventType() );
+			// not interested
+			break;
+			}
+#endif
+		default:
+			// unrecognized events go here, not interested in those, either
+			break;
+		} // switch
+
+	// Send the event only if we have a valid IAP set here.
+	// If the IAP is invalid, the user IAP selection has not yet been
+	// send to CNetworkStatusListener.
+	if ( iIapId != KInvalidIapId && !IsIapAvailable(iIapId) )
+		{
+		LOG2( "Monitored IAP %d not available", iIapId );
+		iObserver.HandleNetworkStatusChangedL(EConnMonStatusNotAvailable);
+		}
+
+	}
+
+// ---------------------------------------------------------------------------
+// Updates the IAP ID array
+// ---------------------------------------------------------------------------
+//
+void CNetworkStatusListener::UpdateIapArray(TConnMonIapInfo aIaps)
+	{
+	LOG3( "+ UpdateIapArray(): now=%d, new=%d", iAvailableIAPs.Count(), aIaps.iCount );
+
+	iAvailableIAPs.Reset();
+
+	for (TUint count = 0; count < aIaps.iCount; count++)
+		{
+		LOG2( "UpdateIapArray: ID %d", aIaps.iIap[ count ].iIapId );
+		iAvailableIAPs.Append( aIaps.iIap[ count ].iIapId );
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// Updates the list of IAPs and checks, if requested IAP is available.
+// @param aIapId IAP ID which availability is checked.
+// ---------------------------------------------------------------------------
+//
+TBool CNetworkStatusListener::IsIapAvailable(const TUint aIapId)
+	{
+	TRequestStatus status = KRequestPending;
+	TConnMonIapInfoBuf iapsBuf;
+	iConnMon.GetPckgAttribute( EBearerIdAll,
+			0,
+			KIapAvailability,
+			iapsBuf,
+			status );
+	User::WaitForRequest( status );
+	if ( status.Int() == KErrNone )
+		{
+		UpdateIapArray( iapsBuf() );
+		}
+
+	return ( KErrNotFound == iAvailableIAPs.Find( aIapId ) )
+		? EFalse : ETrue;
+	}
+
+//-----------------------------------------------------------------------------
+// CNetworkStatusListener::SetIapIdToMonitor
+//
+// Sets the IAP ID whose connections this object monitors
+//-----------------------------------------------------------------------------
+//
+void CNetworkStatusListener::SetIapIdToMonitor(const TInt aIAP)
+	{
+	LOG2( "CNetworkStatusListener: Monitoring IAP %d", aIAP );
+	iIapId = aIAP;
+	//iConnections.Reset();
+	//GetConnectionsForIap(iConnMon, iIapId, iConnections);
+	// Update the IAP availability list
+	IsIapAvailable(aIAP);
+	}
+
+//-----------------------------------------------------------------------------
+// Gets the IAP ID for specific connection. Synchronized version.
+//
+// @param aConnId Connection ID
+// @param aIapId IAP ID for specified connection (out).
+// @return Standard Symbian error code
+//-----------------------------------------------------------------------------
+//
+TInt CNetworkStatusListener::GetIapId(const TUint aConnId, TUint& aIapId)
+	{
+	TRequestStatus status = KRequestPending;
+	iConnMon.GetUintAttribute( aConnId, 0, KIAPId, aIapId, status );
+	User::WaitForRequest( status );
+	return status.Int();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/networkstatuslistener.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     CNetworkStatusListener definition
+*
+*
+*/
+
+#ifndef __NETWORKSTATUSLISTENER_H__
+#define __NETWORKSTATUSLISTENER_H__
+
+#include <rconnmon.h> // RConnectionMonitor, KConnMonMaxStringAttributeLength
+#include "networkstatusobserver.h"
+#include "globals.h"
+
+class CActive;
+
+class CNetworkStatusListener : public MConnectionMonitorObserver
+	{
+public:
+	static CNetworkStatusListener* NewL(MNetworkStatusObserver& aObserver, const TUint aIAP = KInvalidIapId);
+	static CNetworkStatusListener* NewLC(MNetworkStatusObserver& aObserver, const TUint aIAP = KInvalidIapId);
+	~CNetworkStatusListener();
+
+	void SetIapIdToMonitor(const TInt aIAPId);
+	TBool IsIapAvailable(const TUint aIAPId);
+
+private:
+	// MConnectionMonitorObserver
+	void EventL(const CConnMonEventBase& aEvent);
+
+	CNetworkStatusListener(MNetworkStatusObserver& aObserver, const TUint aIap = KInvalidIapId);
+	void ConstructL();
+
+	void UpdateIapArray(TConnMonIapInfo aIaps);
+	TInt GetIapId(const TUint aConnId, TUint& aIapId);
+
+private:
+
+private:
+	MNetworkStatusObserver& iObserver;
+	TUint              iIapId;  // Monitored IAP
+	RConnectionMonitor iConnMon;
+	RArray<TUint>      iAvailableIAPs;  // IAP Array
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/networkstatusobserver.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     MNetworkStatusObserver definition
+*
+*
+*/
+
+#ifndef __NETWORKSTATUSOBSERVER_H__
+#define __NETWORKSTATUSOBSERVER_H__
+
+#include <rconnmon.h>
+
+class MNetworkStatusObserver
+	{
+public:
+	virtual void HandleNetworkStatusChangedL(const TInt aStatus) = 0;
+#ifdef USE_LOGFILE
+	virtual void Log(TRefByValue<const TDesC16> aFmt, ...) = 0;
+#endif
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/utils.cpp	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*   Static utility methods
+*/
+
+#include <e32std.h>
+#include <e32debug.h>
+#include <centralrepository.h>
+#include "utils.h"
+
+const TInt KCenRepBufferSize = 255;
+const TText KStrComma = ',';
+const TUint32 KMenuHideApplication = 0x00000008;
+
+// Ovi Store launcher UID
+const TInt KUidOviStoreLauncher = 0x0;
+// Ovi Store widget UID
+const TInt KUidOviStoreWidget = 0x0;
+// Ovi Store downloader UID
+const TInt KUidOviStoreDownloader = 0x0;
+// Ovi Store ASServer UID
+const TInt KUidOviStoreASServer = 0x0;
+
+// -----------------------------------------------------------------------------
+// Check if Ovi Store client is running
+// @return ETrue, if the process is running
+// -----------------------------------------------------------------------------
+//
+TBool CUtils::OviStoreRunning()
+	{
+	TBool running = EFalse;
+	RArray<TInt> uids( 4 );
+	uids.Append(KUidOviStoreLauncher);
+	uids.Append(KUidOviStoreWidget);
+	uids.Append(KUidOviStoreDownloader);
+	uids.Append(KUidOviStoreASServer);
+	if ( CUtils::AreProcessesRunning(uids) != KErrNotFound )
+		{
+		running = ETrue;
+		}
+	uids.Close();
+	return running;
+	}
+
+// -----------------------------------------------------------------------------
+// Checks if the process with given UID is running.
+// @param aUid UID of the process
+// @return ETrue, if the process is running
+// -----------------------------------------------------------------------------
+//
+TBool CUtils::IsProcessRunning(const TInt aUid)
+	{
+	RArray<TInt> uids;
+	uids.Append(aUid);
+	const TBool ret = (AreProcessesRunning(uids) != KErrNotFound);
+	uids.Close();
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// @param aUid UID of the process
+// @return The index of the first matching UIDwithin the array.
+//         KErrNotFound, if no matching entry can be found.
+// -----------------------------------------------------------------------------
+//
+TInt CUtils::AreProcessesRunning(const RArray<TInt>& aUids)
+	{
+	TInt ret = KErrNotFound;
+	TFileName res;
+	TFindProcess find;
+	//RDebug::Print(_L("Searching. 0x%08x"), &aUids)
+
+	while (find.Next(res) == KErrNone)
+		{
+		RProcess ph;
+		ph.Open(res);
+		const TInt sid = ph.SecureId();
+		//RDebug::Print(_L("Scanning process: '%S' (0x%08x)"), &res, sid);
+
+		if ( (ret = aUids.Find(sid)) != KErrNotFound )
+			{
+			//RDebug::Print(_L("   Found process: '%S' %d (0x%08x)"), &res, ret, aUids[ret]);
+			ph.Close();
+			break;
+			}
+		ret = KErrNotFound;
+/*
+		if (ph.SecureId() == aUid)
+			{
+			RDebug::Print(_L("   Found process: '%S'"), &res);
+			ph.Close();
+			ret = ETrue;
+			break;
+			}
+*/
+		ph.Close();
+		}
+
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// HideApplicationFromMenu() - Non-leaving version
+//
+// @param aUid UID of the application to hide/reveal from the menu
+// @param aHidden Flag to indicate the application visibility. ETrue = Hide
+// -----------------------------------------------------------------------------
+//
+TInt CUtils::HideApplicationFromMenu(TInt aUid, TBool aHidden)
+	{
+	TRAPD( ret, HideApplicationFromMenuL(aUid, aHidden) );
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// HideApplicationFromMenuL()
+//
+// @param aUid UID of the application to hide/reveal from the menu
+// @param aHidden Flag to indicate the application visibility. ETrue = Hide
+// -----------------------------------------------------------------------------
+//
+void CUtils::HideApplicationFromMenuL(TInt aUid, TBool aHidden)
+	{
+	const TUid KCRUidMenu = { 0x0 };
+
+	TBuf<KCenRepBufferSize> keyContent;
+	TBool updated( EFalse );
+
+	CRepository* aAppShellRepository = CRepository::NewLC( KCRUidMenu );
+	User::LeaveIfError(aAppShellRepository->Get( KMenuHideApplication, keyContent ));
+
+	TBuf<8> MenuUid;
+	UIDText( MenuUid, aUid);
+	TInt offset = keyContent.FindC( MenuUid );
+	if ( offset == KErrNotFound && aHidden )
+		{
+		__ASSERT_ALWAYS( keyContent.Length() + 9 < KCenRepBufferSize,
+						 User::Leave( KErrOverflow ) );
+		if ( keyContent.Length() > 0 )
+			keyContent.Append( KStrComma );
+		keyContent.Append( MenuUid );
+		updated = ETrue;
+		}
+	else if ( offset != KErrNotFound && !aHidden )
+		{
+		if ( offset == 0 )
+			{
+			keyContent.Delete( 0, Min( 9, keyContent.Length() ) );
+			updated = ETrue;
+			}
+		else if ( keyContent[offset - 1] == KStrComma )
+			{
+			keyContent.Delete( offset - 1, 9 );
+			updated = ETrue;
+			}
+		else
+			User::Leave( KErrCorrupt );
+		}
+	if ( updated )
+		User::LeaveIfError(aAppShellRepository->Set( KMenuHideApplication, keyContent ));
+
+	CleanupStack::PopAndDestroy(); // aAppShellRepository
+	}
+
+// -----------------------------------------------------------------------------
+// UIDText - Converts UID specified by aInt to string representation
+//
+// @param aUid Descriptor containing the string
+// @param aInt Int representing the UID
+// -----------------------------------------------------------------------------
+//
+void CUtils::UIDText(TDes& aUid, TInt aInt)
+	{
+	TUidName uidName( TUid::Uid( aInt ).Name() );
+	aUid.Copy( uidName.Mid( 1, KMaxUidName - 2 ) );
+	aUid.UpperCase();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/common/utils.h	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*   Static utility methods declaration
+*/
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+class CUtils : public CBase
+	{
+public:
+	/**
+	 * Returns ETrue if Ovi Store client is running
+	 */
+	static TBool OviStoreRunning();
+
+	/**
+	 * Returns ETrue if process with given UIDs is running
+	 */
+	static TBool IsProcessRunning(const TInt aUid);
+
+	/**
+	 * Returns ETrue if any of the listed processes with given UIDs are running
+	 */
+	static TBool AreProcessesRunning(const RArray<TInt>& aUids);
+
+	/**
+	 * Hides specified application icon from the menu grid. This version
+	 * does not leave.
+	 *
+	 * @returns Error code
+	 */
+	static TInt HideApplicationFromMenu( TInt aUid, TBool aHidden );
+
+	/**
+	 * Hides specified application icon from the menu grid.
+	 */
+	static void HideApplicationFromMenuL( TInt aUid, TBool aHidden );
+
+	/**
+	 * Helper function to create a string presentation of the UID.
+	 * Used by HideApplicationFromMenu()
+	 */
+	static void UIDText( TDes& aUid, TInt aInt );
+	};
+
+#endif
Binary file smartinstaller/doc/Nokia_Smart_Installer_for_Symbian_Developers_Guide_v1_0_en.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/doc.pro	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,42 @@
+defineReplace(targetPath) {
+    return($$replace(1, /, $$QMAKE_DIR_SEP))
+}
+
+QDOC_BIN = $$targetPath($$[QT_INSTALL_BINS]/qdoc3)
+HELPGENERATOR = $$targetPath($$[QT_INSTALL_BINS]/qhelpgenerator)
+
+equals(QMAKE_DIR_SEP, /) {   # unix, mingw+msys
+    QDOC = SRCDIR=$$PWD OUTDIR=$$OUT_PWD/html $$QDOC_BIN
+} else:win32-g++* {   # just mingw
+    # The lack of spaces in front of the && is necessary!
+    QDOC = set SRCDIR=$$PWD&& set OUTDIR=$$OUT_PWD/html&& $$QDOC_BIN
+} else {   # nmake
+    QDOC = set SRCDIR=$$PWD $$escape_expand(\n\t) \
+           set OUTDIR=$$OUT_PWD/html $$escape_expand(\n\t) \
+           $$QDOC_BIN
+}
+
+QHP_FILE = $$OUT_PWD/html/smartinstaller.qhp
+QCH_FILE = $$PWD/smartinstaller.qch
+
+HELP_DEP_FILES +=$$PWD/smartinstaller.qdoc \
+                 $$PWD/smartinstaller.qdocconf \
+                 $$PWD/smartinstaller-online.qdocconf
+
+html_docs.commands = $$QDOC $$PWD/smartinstaller.qdocconf
+html_docs.depends += $$HELP_DEP_FILES
+html_docs.files = $$QHP_FILE
+
+html_docs_online.commands = $$QDOC $$PWD/smartinstaller-online.qdocconf
+html_docs_online.depends += $$HELP_DEP_FILES
+html_docs_online.files = $$QHP_FILE
+
+qch_docs.commands = $$HELPGENERATOR -o \"$$QCH_FILE\" $$QHP_FILE
+qch_docs.depends += html_docs
+qch_docs.files = $$QCH_FILE
+
+docs.depends = qch_docs
+docs_online.depends = html_docs_online
+QMAKE_EXTRA_TARGETS += html_docs qch_docs docs html_docs_online docs_online
+
+OTHER_FILES = $$HELP_DEP_FILES
Binary file smartinstaller/doc/images/smartinstaller-icon.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/qt-defines.qdocconf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,66 @@
+defines                 = Q_QDOC \
+			  QT_.*_SUPPORT \
+			  QT_.*_LIB \
+			  QT_COMPAT \
+			  QT_KEYPAD_NAVIGATION \
+			  QT_NO_EGL \
+			  QT3_SUPPORT \
+			  Q_WS_.* \
+			  Q_OS_.* \
+			  Q_BYTE_ORDER \
+			  QT_DEPRECATED \
+			  Q_NO_USING_KEYWORD \
+			  __cplusplus
+
+versionsym              = QT_VERSION_STR
+
+codeindent              = 1
+
+# Files not referenced in any qdoc file (last four needed by qtdemo)
+# See also qhp.Qt.extraFiles
+extraimages.HTML        = qt-logo \
+			  trolltech-logo \
+			  api_examples.png \
+			  api_lookup.png \
+			  arrow_down.png \
+			  bg_ll.png \
+			  bg_l.png \
+			  bg_lr.png \
+			  bg_r.png \
+			  bg_ul_blank.png \
+			  bg_ll_blank.png \
+			  bg_l_blank.png \
+			  breadcrumb.png \
+			  bullet_dn.png \
+			  bullet_gt.png \
+			  bullet_sq.png \
+			  box_bg.png \
+			  feedbackground.png \
+			  horBar.png \
+			  page_bg.png \
+			  page.png \
+			  sprites-combined.png \
+			  qtcreator-screenshots.png
+
+# This stuff is used by the new doc format.
+scriptdirs              = $SRCDIR/templates/scripts
+styledirs               = $SRCDIR/templates/style
+
+scripts.HTML		= functions.js \
+			  shBrushCpp.js \
+			  shCore.js \
+			  shLegacy.js \
+			  narrow.js \
+			  superfish.js \
+			  jquery.js
+
+styles.HTML		= style.css \
+			  shCore.css \
+			  shThemeDefault.css \
+			  narrow.css \
+			  superfish.css \
+			  superfish_skin.css \
+			  OfflineStyle.css \
+			  style_ie6.css \
+			  style_ie7.css \
+			  style_ie8.css
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/qt-html-templates.qdocconf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,149 @@
+HTML.stylesheets        =  style/style.css \
+                           style/OfflineStyle.css \
+                           style/style_ie7.css \
+                           style/style_ie8.css \
+                           style/style_ie6.css
+
+HTML.postheader         = " <div class=\"header\" id=\"qtdocheader\">\n" \
+			  "    <div class=\"content\"> \n" \
+			  "    <div id=\"nav-logo\">\n" \
+			  "      <a href=\"index.html\">Home</a></div>\n" \
+			  "    <a href=\"index.html\" class=\"qtref\"><span>Nokia Smart Installer for Symbian Manual</span></a>\n" \
+			  "		<div id=\"narrowsearch\"><form onsubmit=\"return false;\" action=\"\" id=\"qtdocsearch\">\n" \
+			  "		<fieldset>\n" \
+              "		<input type=\"text\" value=\"\" id=\"pageType\" name=\"searchstring\">\n" \
+			  "		 </fieldset>\n" \
+			  "		</form></div>\n" \
+			  "    <div id=\"nav-topright\">\n" \
+			  "      <ul>\n" \
+			  "        <li class=\"nav-topright-home\"><a href=\"http://qt.nokia.com/\">Qt HOME</a></li>\n" \
+			  "        <li class=\"nav-topright-dev\"><a href=\"http://qt.nokia.com/developer\">DEV</a></li>\n" \
+			  "        <li class=\"nav-topright-labs\"><a href=\"http://labs.qt.nokia.com/blogs/\">LABS</a></li>\n" \
+			  "        <li class=\"nav-topright-doc nav-topright-doc-active\"><a href=\"http://doc.qt.nokia.com/\">\n" \
+			  "          DOC</a></li>\n" \
+			  "        <li class=\"nav-topright-blog\"><a href=\"http://blog.qt.nokia.com/\">BLOG</a></li>\n" \
+			  "        <li class=\"nav-topright-shop\"><a title=\"SHOP\" href=\"http://shop.qt.nokia.com\">SHOP</a></li>\n" \
+			  "      </ul>\n" \
+			  "    </div>\n" \
+			  "    <div id=\"shortCut\">\n" \
+			  "      <ul>\n" \
+			  "        <li class=\"shortCut-topleft-inactive\"><span><a href=\"index.html\">Nokia Smart Installer for Symbian 1.0 </a></span></li>\n" \
+			  "        <li class=\"shortCut-topleft-active\"><a href=\"http://qt.nokia.com/doc/\">ALL VERSIONS" \
+			  "        </a></li>\n" \
+			  "      </ul>\n" \
+			  "     </div>\n" \
+			  "    </div>\n" \
+			  "  </div>\n" \
+			  "  <div class=\"wrapper\">\n" \
+			  "    <div class=\"hd\">\n" \
+			  "      <span></span>\n" \
+			  "    </div>\n" \
+			  "    <div class=\"bd group\">\n" \
+			  "      <div class=\"sidebar\">\n" \
+			  "        <div class=\"searchlabel\">\n" \
+			  "          Search index:</div>\n" \
+			  "        <div class=\"search\">\n" \
+			  "          <form id=\"qtdocsearch\" action=\"\" onsubmit=\"return false;\">\n" \
+			  "            <fieldset>\n" \
+			  "              <input type=\"text\" name=\"searchstring\" id=\"pageType\" value=\"\" />\n" \
+			  "            </fieldset>\n" \
+			  "          </form>\n" \
+			  "        </div>\n" \
+			  "        <div class=\"box first bottombar\" id=\"lookup\">\n" \
+			  "          <h2 title=\"API Lookup\"><span></span>\n" \
+			  "            API Lookup</h2>\n" \
+			  "          <div  id=\"list001\" class=\"list\">\n" \
+			  "          <ul id=\"ul001\" >\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/classes.html\">Class index</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/functions.html\">Function index</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/modules.html\">Modules</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/namespaces.html\">Namespaces</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qtglobal.html\">Global stuff</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qdeclarativeelements.html\">QML elements</a></li>\n" \
+			  "            </ul> \n" \
+			  "          </div>\n" \
+			  "        </div>\n" \
+			  "        <div class=\"box bottombar\" id=\"topics\">\n" \
+			  "          <h2 title=\"Qt Topics\"><span></span>\n" \
+			  "            Qt Topics</h2>\n" \
+			  "          <div id=\"list002\" class=\"list\">\n" \
+			  "            <ul id=\"ul002\" >\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qt-basic-concepts.html\">Basic Qt architecture</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/declarativeui.html\">Device UI's &amp; Qt Quick</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qt-gui-concepts.html\">Desktop UI components</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/platform-specific.html\">Platform-specific info</a></li>\n" \
+			  "            </ul>  \n" \
+			  "          </div>\n" \
+			  "        </div>\n" \
+			  "        <div class=\"box\" id=\"examples\">\n" \
+			  "          <h2 title=\"Examples\"><span></span>\n" \
+			  "            Examples</h2>\n" \
+			  "          <div id=\"list003\" class=\"list\">\n" \
+			  "        <ul id=\"ul003\">\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/all-examples.html\">Examples</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/tutorials.html\">Tutorials</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/demos.html\">Demos</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qdeclarativeexamples.html\">QML Examples</a></li>\n" \
+			  "              <li class=\"defaultLink\"><a href=\"http://doc.qt.nokia.com/latest/qdeclarativeexamples.html#Demos\">QML Demos</a></li>\n" \
+			  "            </ul> \n" \
+			  "          </div>\n" \
+			  "        </div>\n" \
+			  "      </div>\n" \
+			  "      <div class=\"wrap\">\n" \
+			  "        <div class=\"toolbar\">\n" \
+			  "          <div class=\"breadcrumb toolblock\">\n" \
+			  "            <ul>\n" \
+			  "              <li class=\"first\"><a href=\"index.html\">Home</a></li>\n" \
+			  "              <!--  Bread crumbs goes here -->\n"
+
+HTML.postpostheader     = "            </ul>\n" \
+			  "          </div>\n" \
+			  "          <div class=\"toolbuttons toolblock\">\n" \
+			  "            <ul>\n" \
+			  "              <li id=\"smallA\" class=\"t_button\">A</li>\n" \
+			  "              <li id=\"medA\" class=\"t_button active\">A</li>\n" \
+			  "              <li id=\"bigA\" class=\"t_button\">A</li>\n" \
+			  "              <li id=\"print\" class=\"t_button\"><a href=\"javascript:this.print();\">\n" \
+			  "                <span>Print</span></a></li>\n" \
+			  "            </ul>\n" \
+			  "          </div>\n" \
+			  "        </div>\n" \
+			  "        <div class=\"content\">\n"
+
+HTML.footer             = "        <!-- /div -->\n" \
+			  "        <div class=\"feedback t_button\">\n" \
+			  "          [+] Documentation Feedback</div>\n" \
+			  "      </div>\n" \
+			  "    </div>\n" \
+			  "    <div class=\"ft\">\n" \
+			  "      <span></span>\n" \
+			  "    </div>\n" \
+			  "  </div> \n" \
+			  "  <div class=\"footer\">\n" \
+			  "    <p>\n" \
+			  "      <acronym title=\"Copyright\">&copy;</acronym> 2008-2010 Nokia Corporation and/or its\n" \
+			  "      subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \
+			  "      in Finland and/or other countries worldwide.</p>\n" \
+			  "    <p>\n" \
+			  "      All other trademarks are property of their respective owners. <a title=\"Privacy Policy\"\n" \
+			  "        href=\"http://qt.nokia.com/about/privacy-policy\">Privacy Policy</a></p>\n" \
+			  "  </div>\n" \
+			  "  <div id=\"feedbackBox\">\n" \
+			  "      <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \
+			  "    <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \
+			  "      <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\">Please submit you feedback...</textarea></p>\n" \
+			  "      <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \
+			  "    </form>\n" \
+			  "  </div>\n" \
+			  "  <div id=\"blurpage\">\n" \
+			  "  </div>\n" \
+			  "<script type=\"text/javascript\">\n" \
+			  "  var _gaq = _gaq || [];\n" \
+			  "  _gaq.push([\'_setAccount\', \'UA-4457116-5\']);\n" \
+			  "  _gaq.push([\'_trackPageview\']);\n" \
+			  "  (function() {\n" \
+			  "    var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;\n" \
+			  "    ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';\n" \
+			  "    var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);\n" \
+			  "  })();\n" \
+			  "</script>\n"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/smartinstaller-online.qdocconf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,4 @@
+online                  = true
+# Run qdoc from the directory that contains this file.
+include(smartinstaller.qdocconf)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/smartinstaller.qdoc	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,624 @@
+/*!
+
+\contentspage{index.html}{Nokia Smart Installer for Symbian}
+\page index.html
+
+\title Nokia Smart Installer for Symbian Manual
+
+\section1 Version 1.0.0
+
+This document describes how you can use Nokia Smart Installer for Symbian
+to package Qt based applications for Symbian devices.
+
+\list
+
+    \o \l{Introduction}
+	\list
+	    \o \l{Accessing the Internet}
+	\endlist
+    \o \l{Installing Dependencies and Applications}
+	\list
+	    \o \l{Disk Space Requirements}
+	    \o \l{Installing Applications}
+	    \o \l{Messages}
+	\endlist
+    \o \l{Packaging}
+	\list
+	    \o \l{Wrapper Package File}
+	    \o \l{Signing Wrapper Packages}
+	\endlist
+
+\endlist
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-introduction.html
+
+\title Introduction
+
+Nokia Smart Installer for Symbian
+ensures that the installed 3rd party Qt applications have always access to the
+required versions of their dependent libraries.
+
+Smart Installer is split into two components: smartinstaller and smartinstaller
+ADM (for application dependency manager). Smart Installer is a small component
+that is embedded with the application into a wrapper package. It ensures that
+a recent version of ADM is installed on the device and installs or upgrades ADM, if
+necessary.
+
+A network connection is
+always required during installation. For a detailed description of network usage,
+see \l{Accessing the Internet}.
+
+Smart Installer is invoked during the application installation process on the
+Symbian device. It immediately fetches the latest ADM from the server and runs
+it. ADM checks whether the required components (dependencies) are already
+installed on the device and downloads and installs or upgrades them, if needed.
+Information about the application's dependencies is extracted from the
+application .sis file, where each dependency is defined using the standard
+dependency statements as defined in the pkg file format. For Qt, the
+dependencies are automatically generated during the build process, but
+developers can manually adjust them as well.
+
+After the required dependencies have been successfully installed to the device,
+the application installation process is invoked. This follows the normal UI flow
+of application installation on a Symbian device.
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-connectivity.html
+
+\title Accessing the Internet
+
+Nokia Smart Installer for Symbian tries to automatically select the appropriate
+internet access point. If the access point cannot be determined automatically,
+the user is prompted to select one. By default, Smart Installer uses the browser
+access point settings to access the internet. If the installation is started
+from the Ovi Store client, Smart Installer uses the access point used by the Ovi
+Store. In addition, the size of the download package is displayed to the user.
+Otherwise, no prompt is shown if WLAN is selected as the access point. For
+packet data connections, the user is always informed about the download size.
+
+Smart Installer downloads the required packages from a server provided by Nokia
+at dl.qt.nokia.com. Because a data connection (such as WLAN, general packet
+radio service (GPRS), EDGE, or 3G) is used, transmission fees may apply and
+therefore, some costs may be incurred for the user.
+
+If the required versions of Qt and the necessary components are already
+installed on the device, the amount of data downloaded from the server is some
+kilobytes (the latest ADM, if one is available, and a few dependency definition
+files for the components involved). If all dependencies need to be installed,
+the amount of data to download is currently about 12 MB. For a summary of
+download package sizes, see \l{Disk Space Requirements}.
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-installation.html
+
+\title Installing Dependencies and Applications
+
+The following sections describe in detail, how Nokia Smart Installer for Symbian
+installs the dependencies and the application.
+
+Due to performance reasons, the Qt libraries are always installed to the C:
+drive of the device. Other packages can be installed to other drives. Therefore,
+the minimum free space required on the C: drive is about 10 MB (up to 14 MB, if
+QtWebkit and QtMobility are also needed). The free space requirements are larger
+than the combined package download size, because the S60 application installer
+temporarily requires some additional space. Smart Installer displays an error
+message if there is not enough free space available on the device. For more
+information, see \l{Messages}.
+
+For other packages than Qt, Smart Installer chooses the next available drive if
+drive C: becomes full. The user cannot control where the packages are going to
+be installed. The process of determining the installation drive is automated to
+minimize the need for user interaction.
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-disk-space.html
+
+\title Disk Space Requirements
+
+The following table shows how much space each package consumes after
+installation to the device at the time of publication.
+
+The other packages except QtWebKit and QtMobility are the minimum set required
+for a Qt application to run in a Symbian device. For example, even though the
+Open C libraries are preinstalled in some Symbian devices it still needs to be
+updated to v1.6, so these numbers are a fair estimate of the required space.
+
+The table also describes the dependencies currently installed by Nokia Smart
+Installer for Symbian. For an updated list, see
+\l{http://wiki.forum.nokia.com/index.php/Nokia_Smart_Installer_for_Symbian#Packa
+ges_distributed_by_Smart_Installer}{Packages Distributed by Smart Installer}.
+
+\table
+	\header
+		\o Package Name
+		\o UID
+		\o Versions
+		\o Download Size
+		\o Space Required
+		\o Description
+	\row
+		\o Stdcpp
+		\o 0x2000F866
+		\o 1.6.0
+		\o 0.2 MB
+		\o 0.2 MB
+		\o Standard C++ library Common
+	\row
+		\o Openc_ssl
+		\o 0x200110CB
+		\o 1.6.0
+		\o 0.8 MB
+		\o 0.8 MB
+		\o Open C LIBSSL Common
+	\row
+		\o PIPS
+		\o 0x20013851
+		\o 1.6.0
+		\o 1.2 MB
+		\o 1.4 MB
+		\o PIPS Installer
+	\row
+		\o Sqlite
+		\o 0x2002AF5F
+		\o 0.5.0
+		\o 0.2 MB
+		\o 0.1 MB
+		\o Sqlite library
+	\row
+		\o Qt
+		\o 0x2001E61C
+		\o 4.6.3
+		\o 5.8 MB
+		\o 5.9 MB
+		\o Qt libraries
+	\row
+		\o QtWebKit
+		\o 0x200267C2
+		\o 4.6.3
+		\o 2.9 MB
+		\o 3.0 MB
+		\o QtWebKit library
+	\row
+		\o QtMobility
+		\o 0x2002AC89
+		\o 1.0.0
+		\o 1.0 MB
+		\o 1.0 MB
+		\o QtMobility library
+	\row
+		\o {3,1} \bold{Total for Qt excluding QtWebKit}
+		\o 8.3 MB
+		\o {2,1} 8.5 MB
+	\row
+		\o {3,1} \bold{Total for Qt including QtWebKit}
+		\o 12.1 MB
+		\o {2,1} 12.4 MB
+\endtable
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-app-installation.html
+
+\title Installing Applications
+
+When Nokia Smart Installer for Symbian is invoked from the Ovi Store, the
+application is installed to the drive selected in the Ovi Store as the
+installation target drive. It defaults to the drive with the largest amount of
+available space. Usually, that is the internal flash drive (eMMC) or a memory
+card. Users can change this behavior in the Ovi Store settings.
+
+Otherwise, Smart Installer uses the developer chosen installation drive defined
+in the wrapper package. For more information, see \l{Wrapper Package File}.
+
+\section1 Resuming Interrupted Installation
+
+Nokia Smart Installer for Symbian can resume cancelled or interrupted
+installation. To resume interrupted installation, users choose the Smart
+Installer icon from the application menu grid. Smart Installer icon is visible
+only, when a pending installation is available.
+
+\inlineimage smartinstaller-icon.png
+Smart Installer icon
+
+\note Only the latest interrupted installation can be resumed.
+
+\section1 Integration with Qt Build Tools
+
+The Qt build chain supports Nokia Smart Installer for Symbian from Qt 4.6.2 for
+Symbian onwards.
+
+\note It is recommended that Qt 4.6.3 or newer is used when creating the applications.
+
+\section1 Incompatible Devices
+
+There are known issues with Open C upgradeability on some devices. This makes
+Nokia Smart Installer for Symbian unsuitable for deploying Qt or any other
+package that require an Open C upgrade. If a user tries to install Qt
+applications to these devices, the error note \e {Device not supported} is
+shown, and the installation is cancelled.
+
+The following table lists devices that are known to have problems and are not
+supported by Smart Installer. For an up-to-date list, see
+\l{http://wiki.forum.nokia.com/index.php/Nokia_Smart_Installer_for_Symbian#Suppo
+rted_Devices}{Supported Devices}.
+
+\table
+	\header
+		\o Device
+		\o Incompatible Firmware Versions
+		\o Description
+	\row
+		\o Nokia 6650 AT&T variant
+		\o All
+		\o PIPS cannot be upgraded
+	\row
+		\o Nokia N96
+		\o All
+		\o Not supported by Qt
+\endtable
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-messages.html
+
+\title Messages
+
+Informative messages appear if problems occurr during the installation.
+The following table describes the messages and their causes.
+
+\table
+	\header
+		\o Message
+		\o Description
+	\row
+		\o Verifying components
+		\o Smart Installer is checking to see which components the application requires
+		   to be installed, and which components are on the device.
+
+	\row
+		\o Downloading X of Y
+		\o Required dependency X is being downloaded out of the total number of Y. Time
+		   required depends on network connection speed.
+
+	\row
+		\o Installing X of Y
+		\o Required dependency X is being installed out of the total number of Y. Time
+		   required depends on phone speed.
+
+	\row
+		\o Download XX MB?
+		\o The prompt the user gets when Smart Installer has determined which components
+		   to download. If user denies download, the installation is cancelled.
+
+	\row
+		\o Phone is roaming. Download XX MB anyway?
+		\o User is warned that device is roaming, and additional data charges may apply.
+		   User needs to confirm the download in order to continue the installation.
+
+	\row
+		\o No pending installations
+		\o Smart Installer was opened from the \gui Application menu, but no pending
+		   installations were found.
+
+	\row
+		\o Installation failed!
+		\o Unrecoverable installation failure has occurred. Installation can be resumed
+		   later by selecting the Smart Installer icon from the \gui Application menu.
+
+	\row
+		\o Installation cancelled!
+		\o User has cancelled the installation. Installation can be resumed later.
+
+	\row
+		\o Device is not supported
+		\o Device is known to have problems with Smart Installer and installation is not
+		   allowed to continue. For more information, see \l{Incompatible Devices}.
+
+	\row
+		\o Download failed!
+		\o Unrecoverable error has occurred during downloading. Check network
+		   connectivity and coverage. Installation can be resumed later.
+
+	\row
+		\o Unsupported Smart Installer version
+		\o Incompatible version of Smart Installer is in use. Software distributor must
+		   update the package. Installation cannot continue.
+
+	\row
+		\o Cancelling installation
+		\o Installation was cancelled or interrupted due to an error. Smart Installer is
+		   removing any downloaded files. Installation can be resumed later.
+
+	\row
+		\o Not enough space to install
+		\o Device does not have enough space to download and install the required
+		   components.
+
+		   Free space on the destination drive and resume the installation by
+		   selecting the Smart Installer icon from the \gui Application menu.
+
+		   Space requirements for drive C: are described in \l{Disk Space Requirements}.
+\endtable
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-packaging.html
+
+\title Packaging
+
+Nokia Smart Installer for Symbian is wrapped with the application .sis file to a
+wrapper .sis package. This is needed in order to ensure successful installation
+of the dependencies before the application is installed.
+
+For and example of a wrapper package file, see \l{Wrapper Package File}. For
+signing options for the wrapper package, see \l{Signing Wrapper Packages}. For
+adding the dependency information to the application, see \l{Application
+Dependencies}.
+
+The qmake build tool automatically creates the necessary files to the source
+directory. The make tool can be invoked to automatically create the Smart
+Installer wrapped package. For examples of the command flows, see \l{Building a
+Self-signed Smart Installer Package} and \l{Building a Symbian Signed Smart
+Installer package}.
+
+For more information about the UIDs to be used with Smart Installer, see
+\l{Reserved UIDs for Smart Installer}.
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-wrapper-format.html
+
+\title Wrapper Package File
+
+This section contains an example of a wrapper package file.
+
+To deploy the wrapper package as a self-signed .sis file, you must obtain a free
+UID from the appropriate UID range. The normal restrictions apply about which
+UIDs are available for self-signed packages. Qmake uses a fixed UID (0xA000D7CE)
+when creating a self-signed wrapper package.
+
+Nokia has reserved a UID to be used with the wrapper package (0x2002CCCF) when
+submitting the package to Symbian Signed (see \l{Signing Wrapper Packages} and
+\l{Building a Symbian Signed Smart Installer Package}). The wrapper package is
+used only temporarily to transmit the application with Nokia Smart Installer for
+Symbian to the device, and it is deleted after installation. Therefore, a fixed
+UID can be used for the wrapper package.
+
+Standard rules apply to selecting the  target drive for the installation. If the
+drive is “!”, the user is prompted to select the drive. Otherwise, the specified
+target drive is used automatically without user interaction.
+
+\code
+; The package header
+&EN
+#{"Application Installer"}, (0x2002CCCF), 1, 0, 0, TYPE=SA
+%{"Vendor-EN"}
+:"Vendor"
+
+;Supports S60 v3.1
+[0x102032BE], 0, 0, 0, {"SymbianProductID"}
+;Supports S60 v3.2
+[0x102752AE], 0, 0, 0, {"SymbianProductID"}
+;Supports S60 v5.0
+[0x1028315F], 0, 0, 0, {"SymbianProductID"}
+
+; The actual application.sis file (required)
+"application.sis"-"!:\private\2002CCCE\import\application.sis"
+
+; Embedded Smart Installer (required)
+@"smartinstaller.sis",(0x2002CCCD)
+\endcode
+
+\note This file is created automatically by qmake, and it is overwritten each
+time qmake is run.
+
+\note It is recommended that you do not change the qmake-created package
+file directly. If necessary, you can change the following values:
+
+\list
+
+    \o \c {&EN} to change the supported languages of the installer package.
+    \o \c Application to change the name of the installer package.
+    \o \c Vendor to change the vendor name.
+    \o \c {application.sis} to change the name of the application file
+	  i.e. the application to be installed.
+
+\endlist
+
+*/
+
+
+/*!
+
+\contentspage{index.html}
+\page smartinstaller-wrapper-signing.html
+
+\title Signing Wrapper Packages
+
+The wrapper package can be self-signed. However, during the installation, a
+standard warning note is displayed on the device stating that the source of
+the package is not trusted.
+
+In order to assign trust to the wrapper package, the wrapper can be put through
+the Symbian Signed Express Signed service, which offers a low-cost self-
+certification service. Unfortunately, standard signing fees apply to
+developers wanting to sign the wrapper package, but work is being done to remedy
+this situation.
+
+\note Use the provided fixed UID (0x2002CCCF) when submitting a wrapper package to Symbian Signed.
+
+\section1 Application Dependencies
+
+Qmake automatically generates package files (*.pkg) with correct dependencies
+for the version of Qt the application is built against. Developers can add
+additional dependencies using the deployment keyword in the .pro file (see Qt
+documentation for details).
+
+\note Typically, all Qt for Symbian applications have their dependencies assigned
+automatically by the build tools. Nokia Smart Installer for Symbian takes care of any
+dependencies that Qt libraries might have during installation. There is no need
+to specify any other dependencies unless your application is using the APIs
+provided by the packages in question.
+
+\note Currently Smart Installer can provide only the dependencies described in
+\l{Disk Space Requirements}.
+
+\section1 Building a Self-signed Smart Installer Package
+
+This section explains how you can create a self-signed Nokia Smart Installer for
+Symbian wrapped .sis file. It is assumed that you are already familiar with Qt
+build tools and the build process.
+
+\note Ovi Store does not accept self-signed packages.
+
+In the list below, \c Application is the target application name defined in
+the .pro file.
+
+\list 1
+
+\o To invoke the qmake tool for creating the required files needed for the build
+process, enter the following command:
+
+\code
+C:\Sources\Application> qmake
+\endcode
+
+\o To build the application release version with the GCCE compiler, enter the
+following command:
+
+\code
+C:\Sources\Application> make release-gcce
+\endcode
+
+\o To create the wrapper .sis file, enter the following command:
+
+\code
+C:\Sources\Application> make installer_sis
+\endcode
+
+\endlist
+
+Now the directory contains a self-signed application_installer.sis, which is the
+Smart Installer wrapped version of the application.sis.
+
+\section1 Building a Symbian Signed Smart Installer Package
+
+Building a Symbian Signed Smart Installer package requires passing information
+about the key to sign it to the tools.
+
+In the list below, \c Application is the target application name defined
+in the .pro file.
+
+\note Commands need to be entered on a single line.
+
+\list 1
+
+\o To invoke the qmake tool for creating the required files needed for the build
+process, enter the following command:
+
+\code
+C:\Sources\Application> qmake
+\endcode
+
+\o To build the application release version with the GCCE compiler, enter the
+following command:
+
+\code
+C:\Sources\Application> make release-gcce
+\endcode
+
+\o Create a .sis file and sign it with the appropriate keys. For Symbian
+Signed certification submission, use the keys for your Publisher ID.
+The example assumes that the Publisher ID key and certificate are in the current
+directory.
+
+\code
+C:\Sources\Application> make sis QT_SIS_CERTIFICATE=publisherid.cer QT_SIS_KEY=publisherid.key
+\endcode
+
+
+\note Here, the publisher key and certificate are located in the current folder.
+If they are located in another folder, specify the path as well as the filename.
+
+\o Submit the created .sis file
+(application.sis) to Symbian Signed for certification. Depending on
+application specific needs and properties (that is, Platform Security capabilities
+used) you may use either the Express Signed or the Certified Signed path.
+
+\note Ensure that your application complies with the Symbian Signed
+Test Criteria before submitting the file for certification. Also, if the file is
+intended for Ovi Store publishing, verify that the application complies with Ovi
+Store publishing requirements.
+
+\o After receiving the .sis file from Symbian Signed, copy it over the old
+application.sis.
+
+\o To create the signed wrapper package, enter the following command:
+
+\code
+C:\Sources\Application> make installer_sis QT_SIS_CERTIFICATE=publisherid.cer QT_SIS_KEY=publisherid.key
+\endcode
+
+\o Submit the created wrapped .sis file, application_installer.sis, to
+Symbian Signed. Express Signed is a suitable signing option for the wrapper
+package.
+
+\endlist
+
+\section1 Reserved UIDs for Smart Installer
+
+Nokia has reserved the following UIDs to be used with Nokia Smart Installer for Symbian:
+
+\table
+	\header
+		\o UID
+		\o Description
+	\row
+		\o 0x2002CCCD
+		\o Smart Installer UID. To be used in the wrapper package when including the smartinstaller.sis.
+	\row
+		\o 0x2002CCCF
+		\o Wrapper package UID when providing a package to Symbian Signed.
+	\row
+		\o 0xA000D7CE
+		\o Reserved UID when creating a self-signed wrapper package using Qt tools.
+\endtable
+
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/smartinstaller.qdocconf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,215 @@
+# Run qdoc from the directory that contains this file.
+include(qt-html-templates.qdocconf)
+
+project     = smartinstaller
+description = "Nokia Smart Installer Manual"
+
+headerdirs =
+sourcedirs =
+sourcedirs = $SRCDIR
+imagedirs = $SRCDIR/images $SRCDIR/templates/images
+outputdir = $OUTDIR
+exampledirs = $SRCDIR
+indexes                 = qt.index
+
+include(qt-defines.qdocconf)
+
+sources.fileextensions  = "smartinstaller.qdoc"
+
+
+qhp.projects            = NokiaSmartInstaller
+qhp.NokiaSmartInstaller.file             = smartinstaller.qhp
+qhp.NokiaSmartInstaller.namespace        = com.nokia.smartinstaller.101
+qhp.NokiaSmartInstaller.virtualFolder    = doc
+qhp.NokiaSmartInstaller.indexTitle       = Nokia Smart Installer for Symbian Manual
+qhp.NokiaSmartInstaller.filterAttributes = NokiaSmartInstaller 1.0.1
+qhp.NokiaSmartInstaller.customFilters.NokiaSmartInstaller.name = Nokia Smart Installer for Symbian
+qhp.NokiaSmartInstaller.customFilters.NokiaSmartInstaller.filterAttributes = smartinstaller 1.0.1
+qhp.NokiaSmartInstaller.indexRoot        =
+qhp.NokiaSmartInstaller.extraFiles       = \
+                          style/style.css \
+                          style/style_ie6.css \
+                          style/style_ie7.css \
+                          style/style_ie8.css \
+                          style/OfflineStyle.css \
+                          images/qt-logo.png \
+                          scripts/functions.js \
+                          scripts/jquery.js \
+                          images/api_examples.png \
+                          images/api_lookup.png \
+                          images/arrow_down.png \
+                          images/bg_ll.png \
+                          images/bg_l.png \
+                          images/bg_lr.png \
+                          images/bg_r.png \
+                          images/bg_ul_blank.png \
+                          images/bg_ll_blank.png \
+                          images/bg_l_blank.png \
+                          images/breadcrumb.png \
+                          images/bullet_dn.png \
+                          images/bullet_gt.png \
+                          images/bullet_sq.png \
+                          images/box_bg.png \
+                          images/feedbackground.png \
+                          images/horBar.png \
+                          images/page_bg.png \
+						  images/page.png \
+                          images/qt-logo.png \
+                          images/sprites-combined.png
+
+# macros.qdocconf
+
+macro.aring.HTML        = "&aring;"
+macro.Auml.HTML         = "&Auml;"
+macro.author            = "\\bold{Author:}"
+macro.br.HTML           = "<br />"
+macro.BR.HTML           = "<br />"
+macro.aacute.HTML       = "&aacute;"
+macro.eacute.HTML       = "&eacute;"
+macro.iacute.HTML       = "&iacute;"
+macro.gui               = "\\bold"
+macro.hr.HTML           = "<hr />"
+macro.key               = "\\bold"
+macro.menu              = "\\bold"
+macro.note              = "\\bold{Note:}"
+macro.oslash.HTML       = "&oslash;"
+macro.ouml.HTML         = "&ouml;"
+macro.QA                = "\\e{Qt Assistant}"
+macro.QD                = "\\e{Qt Designer}"
+macro.QL                = "\\e{Qt Linguist}"
+macro.QC		= "\\e{Qt Creator}"
+macro.QMLD		= "\\e{Qt Quick Designer}"
+macro.QQV               = "\\e{Qt QML Viewer}"
+macro.param             = "\\e"
+macro.raisedaster.HTML  = "<sup>*</sup>"
+macro.reg.HTML          = "<sup>&reg;</sup>"
+macro.return            = "Returns"
+macro.starslash         = "\\c{*/}"
+macro.uuml.HTML         = "&uuml;"
+macro.mdash.HTML        = "&mdash;"
+
+# compat.qdocconf
+
+alias.i				= e
+alias.include			= input
+
+macro.0                         = "\\\\0"
+macro.b                         = "\\\\b"
+macro.n                         = "\\\\n"
+macro.r                         = "\\\\r"
+macro.i                         = "\\o"
+macro.i11                       = "\\o{1,1}"
+macro.i12                       = "\\o{1,2}"
+macro.i13                       = "\\o{1,3}"
+macro.i14                       = "\\o{1,4}"
+macro.i15                       = "\\o{1,5}"
+macro.i16                       = "\\o{1,6}"
+macro.i17                       = "\\o{1,7}"
+macro.i18                       = "\\o{1,8}"
+macro.i19                       = "\\o{1,9}"
+macro.i21                       = "\\o{2,1}"
+macro.i31                       = "\\o{3,1}"
+macro.i41                       = "\\o{4,1}"
+macro.i51                       = "\\o{5,1}"
+macro.i61                       = "\\o{6,1}"
+macro.i71                       = "\\o{7,1}"
+macro.i81                       = "\\o{8,1}"
+macro.i91                       = "\\o{9,1}"
+macro.img                       = "\\image"
+macro.endquote                  = "\\endquotation"
+spurious			= "Missing comma in .*" \
+				  "Missing pattern .*"
+
+# Doxygen compatibility commands
+
+macro.see                       = "\\sa"
+macro.function                  = "\\fn"
+
+# qt-cpp-ignore.qdocconf
+
+Cpp.ignoretokens        = QAXFACTORY_EXPORT \
+                          QDESIGNER_COMPONENTS_LIBRARY \
+                          QDESIGNER_EXTENSION_LIBRARY \
+                          QDESIGNER_SDK_LIBRARY \
+                          QDESIGNER_SHARED_LIBRARY \
+                          QDESIGNER_UILIB_LIBRARY \
+                          QM_EXPORT_CANVAS \
+                          QM_EXPORT_DNS \
+                          QM_EXPORT_DOM \
+                          QM_EXPORT_FTP \
+                          QM_EXPORT_HTTP \
+                          QM_EXPORT_ICONVIEW \
+                          QM_EXPORT_NETWORK \
+                          QM_EXPORT_OPENGL \
+                          QM_EXPORT_SQL \
+                          QM_EXPORT_TABLE \
+                          QM_EXPORT_WORKSPACE \
+                          QM_EXPORT_XML \
+                          QT_ASCII_CAST_WARN \
+                          QT_ASCII_CAST_WARN_CONSTRUCTOR \
+                          QT_BEGIN_HEADER \
+                          QT_DESIGNER_STATIC \
+                          QT_END_HEADER \
+                          QT_FASTCALL \
+                          QT_WIDGET_PLUGIN_EXPORT \
+                          Q_COMPAT_EXPORT \
+                          Q_CORE_EXPORT \
+                          Q_EXPLICIT \
+                          Q_EXPORT \
+                          Q_EXPORT_CODECS_CN \
+                          Q_EXPORT_CODECS_JP \
+                          Q_EXPORT_CODECS_KR \
+                          Q_EXPORT_PLUGIN \
+                          Q_GFX_INLINE \
+                          Q_GUI_EXPORT \
+                          Q_GUI_EXPORT_INLINE \
+                          Q_GUI_EXPORT_STYLE_CDE \
+                          Q_GUI_EXPORT_STYLE_COMPACT \
+                          Q_GUI_EXPORT_STYLE_MAC \
+                          Q_GUI_EXPORT_STYLE_MOTIF \
+                          Q_GUI_EXPORT_STYLE_MOTIFPLUS \
+                          Q_GUI_EXPORT_STYLE_PLATINUM \
+                          Q_GUI_EXPORT_STYLE_POCKETPC \
+                          Q_GUI_EXPORT_STYLE_SGI \
+                          Q_GUI_EXPORT_STYLE_WINDOWS \
+                          Q_GUI_EXPORT_STYLE_WINDOWSXP \
+                          QHELP_EXPORT \
+                          Q_INLINE_TEMPLATE \
+                          Q_INTERNAL_WIN_NO_THROW \
+                          Q_NETWORK_EXPORT \
+                          Q_OPENGL_EXPORT \
+                          Q_OUTOFLINE_TEMPLATE \
+                          Q_SQL_EXPORT \
+                          Q_SVG_EXPORT \
+                          Q_SCRIPT_EXPORT \
+                          Q_TESTLIB_EXPORT \
+                          Q_TYPENAME \
+                          Q_XML_EXPORT \
+                          Q_XMLSTREAM_EXPORT \
+                          Q_XMLPATTERNS_EXPORT \
+                          QDBUS_EXPORT \
+                          QT_BEGIN_NAMESPACE \
+                          QT_BEGIN_INCLUDE_NAMESPACE \
+                          QT_END_NAMESPACE \
+                          QT_END_INCLUDE_NAMESPACE \
+                          PHONON_EXPORT \
+                          EXTENSIONSYSTEM_EXPORT
+Cpp.ignoredirectives    = Q_DECLARE_HANDLE \
+                          Q_DECLARE_INTERFACE \
+                          Q_DECLARE_METATYPE \
+                          Q_DECLARE_OPERATORS_FOR_FLAGS \
+                          Q_DECLARE_PRIVATE \
+                          Q_DECLARE_PUBLIC \
+                          Q_DECLARE_SHARED \
+                          Q_DECLARE_TR_FUNCTIONS \
+                          Q_DECLARE_TYPEINFO \
+                          Q_DISABLE_COPY \
+                          QT_FORWARD_DECLARE_CLASS \
+                          Q_DUMMY_COMPARISON_OPERATOR \
+                          Q_ENUMS \
+                          Q_FLAGS \
+                          Q_INTERFACES \
+                          __attribute__ \
+                          K_DECLARE_PRIVATE \
+                          PHONON_OBJECT \
+                          PHONON_HEIR
Binary file smartinstaller/doc/templates/images/api_examples.png has changed
Binary file smartinstaller/doc/templates/images/api_lookup.png has changed
Binary file smartinstaller/doc/templates/images/api_topics.png has changed
Binary file smartinstaller/doc/templates/images/arrow_down.png has changed
Binary file smartinstaller/doc/templates/images/bg_l.png has changed
Binary file smartinstaller/doc/templates/images/bg_l_blank.png has changed
Binary file smartinstaller/doc/templates/images/bg_ll.png has changed
Binary file smartinstaller/doc/templates/images/bg_ll_blank.png has changed
Binary file smartinstaller/doc/templates/images/bg_lr.png has changed
Binary file smartinstaller/doc/templates/images/bg_r.png has changed
Binary file smartinstaller/doc/templates/images/bg_ul.png has changed
Binary file smartinstaller/doc/templates/images/bg_ul_blank.png has changed
Binary file smartinstaller/doc/templates/images/bg_ur.png has changed
Binary file smartinstaller/doc/templates/images/bg_ur_blank.png has changed
Binary file smartinstaller/doc/templates/images/box_bg.png has changed
Binary file smartinstaller/doc/templates/images/breadcrumb.png has changed
Binary file smartinstaller/doc/templates/images/bullet_dn.png has changed
Binary file smartinstaller/doc/templates/images/bullet_gt.png has changed
Binary file smartinstaller/doc/templates/images/bullet_sq.png has changed
Binary file smartinstaller/doc/templates/images/bullet_up.png has changed
Binary file smartinstaller/doc/templates/images/content_bg.png has changed
Binary file smartinstaller/doc/templates/images/feedbackground.png has changed
Binary file smartinstaller/doc/templates/images/form_bg.png has changed
Binary file smartinstaller/doc/templates/images/header.png has changed
Binary file smartinstaller/doc/templates/images/header_bg.png has changed
Binary file smartinstaller/doc/templates/images/horBar.png has changed
Binary file smartinstaller/doc/templates/images/page.png has changed
Binary file smartinstaller/doc/templates/images/page_bg.png has changed
Binary file smartinstaller/doc/templates/images/print.png has changed
Binary file smartinstaller/doc/templates/images/qt_guide.png has changed
Binary file smartinstaller/doc/templates/images/qt_icon.png has changed
Binary file smartinstaller/doc/templates/images/qt_ref_doc.png has changed
Binary file smartinstaller/doc/templates/images/qt_tools.png has changed
Binary file smartinstaller/doc/templates/images/sep.png has changed
Binary file smartinstaller/doc/templates/images/spinner.gif has changed
Binary file smartinstaller/doc/templates/images/sprites-combined.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/scripts/functions.js	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,192 @@
+/* START non link areas where cursor should change to pointing hand */
+$('.t_button').mouseover(function() {
+    $('.t_button').css('cursor','pointer');
+		/*document.getElementById(this.id).style.cursor='pointer';*/
+});
+/* END non link areas  */
+$('#smallA').click(function() {
+		$('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','smaller');
+		$('.t_button').removeClass('active')
+		$(this).addClass('active')
+});
+
+$('#medA').click(function() {
+		$('.content .heading').css('font','600 16px/1 Arial');
+		$('.content h1').css('font','600 18px/1.2 Arial');
+		$('.content h2').css('font','600 16px/1.2 Arial');
+		$('.content h3').css('font','600 14px/1.2 Arial');
+		$('.content p').css('font','13px/20px Verdana');
+		$('.content li').css('font','400 13px/1 Verdana');
+		$('.content li').css('line-height','14px');
+		$('.content .toc li').css('font', 'normal 10px/1.2 Verdana');
+		$('.content table').css('font','13px/1.2 Verdana');
+		$('.content .heading').css('font','600 16px/1 Arial');
+		$('.content .indexboxcont li').css('font','600 13px/1 Verdana');
+		$('.t_button').removeClass('active')
+		$(this).addClass('active')
+});
+
+$('#bigA').click(function() {
+		$('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','large');
+		$('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('line-height','25px');
+		$('.t_button').removeClass('active')
+		$(this).addClass('active')
+});
+
+$('.feedclose').click(function() {
+	$('.bd').show();
+	$('.hd').show();
+	$('.footer').show();
+	$('#feedbackBox').hide();
+	$('#blurpage').hide();
+});
+
+$('.feedback').click(function() {
+	$('.bd').hide();
+	$('.hd').hide();
+	$('.footer').hide();
+	$('#feedbackBox').show();
+	$('#blurpage').show();
+});
+var lookupCount = 0;
+var articleCount = 0;
+var exampleCount = 0;
+var qturl = ""; // change from "http://doc.qt.nokia.com/4.6/" to 0 so we can have relative links
+
+function processNokiaData(response){
+	var propertyTags = response.getElementsByTagName('page');
+	
+ 	for (var i=0; i< propertyTags.length; i++) {
+		var linkStart   = "<li class=\"liveResult\"><a href='"+qturl+"";
+		var linkEnd  = "</a></li>";
+		
+		if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage'){
+			lookupCount++;
+
+			
+			for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
+				full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
+				full_li_element = full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd;
+					
+				$('#ul001').append(full_li_element);
+			$('#ul001 .defaultLink').css('display','none');
+
+		   		}
+			}
+	 
+		if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article'){
+			articleCount++;
+
+				 
+			for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
+			    full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
+				full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
+					
+				$('#ul002').append(full_li_element);
+			$('#ul002 .defaultLink').css('display','none');
+
+	   		}
+		}
+		if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example'){
+			exampleCount++;
+
+
+			for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
+			    full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
+				full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
+					
+				$('#ul003').append(full_li_element);
+			$('#ul003 .defaultLink').css('display','none');
+
+	   		}
+		} 
+		if(i==propertyTags.length){$('#pageType').removeClass('loading');}
+
+	}	
+	 
+	if(lookupCount == 0){$('#ul001').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
+    if(articleCount == 0){$('#ul002').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul002 li').css('display','block');}
+	if(exampleCount == 0){$('#ul003').prepend('<li class=\"liveResult noMatch\">Found no result</li>');$('#ul003 li').css('display','block');}
+	// reset count variables;
+	 lookupCount=0;
+	 articleCount = 0;
+     exampleCount = 0;
+	
+}
+//build regular expression object to find empty string or any number of blank
+var blankRE=/^\s*$/;
+function CheckEmptyAndLoadList()
+{
+	var pageUrl = window.location.href;
+	var pageVal = $('title').html();
+	$('#feedUrl').remove();
+	$('#pageVal').remove();
+	$('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">');
+	$('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">');
+	$('.liveResult').remove();
+    $('.defaultLink').css('display','block');
+	var value = document.getElementById('pageType').value; 
+	if((blankRE.test(value)) || (value.length < 3))
+	{
+	//empty inputbox
+		// load default li elements into the ul if empty
+	//	loadAllList(); // replaced
+	 $('.defaultLink').css('display','block');
+	// $('.liveResult').css('display','none');
+	}else{
+	 $('.defaultLink').css('display','none');
+	}
+}
+/*
+$(window).resize(function(){
+if($(window).width()<400)
+	$('body').addClass('offline');
+else
+	$('body').removeClass('offline');
+	});
+	*/
+// Loads on doc ready
+	$(document).ready(function () {
+	//alert(pageUrl);
+	//$('#pageUrl').attr('foo',pageUrl);
+	var pageTitle = $('title').html();
+          var currentString = $('#pageType').val() ;
+		  if(currentString.length < 1){
+			$('.defaultLink').css('display','block');
+      	   		CheckEmptyAndLoadList();			
+		  }
+
+        $('#pageType').keyup(function () {
+          var searchString = $('#pageType').val() ;
+          if ((searchString == null) || (searchString.length < 3)) {
+				$('#pageType').removeClass('loading');
+				 $('.liveResult').remove(); // replaces removeResults();
+      	   		CheckEmptyAndLoadList();
+				$('.report').remove();
+				// debug$('.content').prepend('<li>too short or blank</li>'); // debug
+				return;
+		   }
+            if (this.timer) clearTimeout(this.timer);
+            this.timer = setTimeout(function () {
+				$('#pageType').addClass('loading');
+				// debug$('.content').prepend('<li>new search started </li>');// debug
+				// debug$('.content').prepend('<p class=\"report\">Search string ' +searchString +'</p>'); // debug
+
+               $.ajax({
+                contentType: "application/x-www-form-urlencoded",
+                url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
+                data: 'searchString='+searchString,
+                dataType:'xml',
+				type: 'post',	 
+                success: function (response, textStatus) {
+
+				$('.liveResult').remove(); // replaces removeResults();
+								$('#pageType').removeClass('loading');
+
+                processNokiaData(response);
+
+ }     
+              });
+            }, 500);
+        });
+      }); 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/scripts/jquery.js	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,152 @@
+/*!
+ * jQuery JavaScript Library v1.4.1
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Jan 25 19:43:33 2010 -0500
+ */
+(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);return a}return j?
+e(a[0],b):null}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function ma(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function na(a){var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);if(!(a.button&&a.type==="click")){for(o in x){j=x[o];if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f,
+a.currentTarget);m=0;for(s=i.length;m<s;m++)for(o in x){j=x[o];n=i[m].elem;f=null;if(i[m].selector===j.selector){if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];if(!f||f!==n)d.push({elem:n,fn:j})}}m=0;for(s=d.length;m<s;m++){i=d[m];a.currentTarget=i.elem;a.data=i.fn.data;if(i.fn.apply(i.elem,e)===false){b=false;break}}return b}}function oa(a,b){return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")}function pa(a){return!a||!a.parentNode||a.parentNode.nodeType===
+11}function qa(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)}}})}function ra(a,b,d){var f,e,i;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){e=true;if(i=c.fragments[a[0]])if(i!==1)f=i}if(!f){b=b&&b[0]?b[0].ownerDocument||b[0]:r;f=b.createDocumentFragment();
+c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=i?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(ta.concat.apply([],ta.slice(0,b)),function(){d[this]=a});return d}function ua(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,
+va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]],
+[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,
+this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this,
+a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};
+c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){j=a[i];n=e[i];if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};a[i]=c.extend(f,j,n)}else if(n!==v)a[i]=n}return a};c.extend({noConflict:function(a){z.$=
+Oa;if(a)z.jQuery=Na;return c},isReady:false,ready:function(){if(!c.isReady){if(!r.body)return setTimeout(c.ready,13);c.isReady=true;if(P){for(var a,b=0;a=P[b++];)a.call(r,c);P=null}c.fn.triggerHandler&&c(r).triggerHandler("ready")}},bindReady:function(){if(!va){va=true;if(r.readyState==="complete")return c.ready();if(r.addEventListener){r.addEventListener("DOMContentLoaded",L,false);z.addEventListener("load",c.ready,false)}else if(r.attachEvent){r.attachEvent("onreadystatechange",L);z.attachEvent("onload",
+c.ready);var a=false;try{a=z.frameElement==null}catch(b){}r.documentElement.doScroll&&a&&la()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;var b;for(b in a);return b===v||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;
+return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Ra.test(a)){var b=r.getElementsByTagName("head")[0]||
+r.documentElement,d=r.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,i=a.length,j=i===v||c.isFunction(a);if(d)if(j)for(f in a){if(b.apply(a[f],d)===false)break}else for(;e<i;){if(b.apply(a[e++],d)===false)break}else if(j)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=
+a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Sa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==
+v;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,i=0,j=a.length;i<j;i++){e=b(a[i],i,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=v}else if(b&&!c.isFunction(b)){d=b;b=v}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},
+uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});O=c.uaMatch(O);if(O.browser){c.browser[O.browser]=true;c.browser.version=O.version}if(c.browser.webkit)c.browser.safari=true;if(wa)c.inArray=function(a,b){return wa.call(b,a)};S=c(r);if(r.addEventListener)L=function(){r.removeEventListener("DOMContentLoaded",
+L,false);c.ready()};else if(r.attachEvent)L=function(){if(r.readyState==="complete"){r.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support=
+{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};
+b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=r.createDocumentFragment();a.appendChild(d.firstChild);
+c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props=
+{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true,
+{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);
+return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||
+a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=
+c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=c(this);m.removeClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),
+d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");e.className=i.substring(1,i.length-1)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var i=c(this);i.toggleClass(a.call(this,e,i.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,i=0,j=c(this),n=b,o=
+a.split(ca);e=o[i++];){n=f?n:!j.hasClass(e);j[n?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||
+{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i<d;i++){var j=e[i];if(j.selected){a=c(j).val();if(b)return a;f.push(a)}}return f}if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Wa,"")}return v}var n=c.isFunction(a);return this.each(function(o){var m=c(this),s=a;if(this.nodeType===1){if(n)s=a.call(this,o,m.val());
+if(typeof s==="number")s+="";if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d);
+f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=
+""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=
+function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a,
+d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+
+s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a,
+"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,
+b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b,
+d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b=
+0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};
+c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b=
+a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,
+"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"||
+d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a=
+a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,
+f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,
+b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+
+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e){var i,j=0;if(c.isFunction(f)){e=f;f=v}for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;b==="live"?c(this.context).bind(oa(i,this.selector),{data:f,selector:this.selector,
+live:i},e):c(this.context).unbind(oa(i,this.selector),e?{guid:e.guid+this.selector+i}:null)}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g){for(var h="",k,l=0;g[l];l++){k=g[l];if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;else if(k.nodeType!==8)h+=a(k.childNodes)}return h}function b(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===k){y=l[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=k;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}l[q]=y}}}function d(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===
+k){y=l[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=k;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(o.filter(h,[t]).length>0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||
+typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u=
+l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&
+y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};o.matches=function(g,h){return o(g,null,null,h)};o.find=function(g,h,k){var l,q;if(!g)return[];for(var p=0,u=m.order.length;p<u;p++){var t=m.order[p];if(q=m.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");l=m.find[t](q,
+h,k);if(l!=null){g=g.replace(m.match[t],"");break}}}}l||(l=h.getElementsByTagName("*"));return{set:l,expr:g}};o.filter=function(g,h,k,l){for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){var M=m.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(u===p)p=[];if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=u[U])!=null;U++)if(D){I=M(D,t,U,u);var Da=
+l^!!I;if(k&&I!=null)if(Da)y=true;else u[U]=false;else if(Da){p.push(D);y=true}}if(I!==v){k||(u=p);g=g.replace(m.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)o.error(g);else break;q=g}return u};o.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var m=o.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,h){var k=typeof h==="string",l=k&&!/\W/.test(h);k=k&&!l;if(l)h=h.toLowerCase();l=0;for(var q=g.length,
+p;l<q;l++)if(p=g[l]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h}k&&o.filter(h,g,true)},">":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l<q;l++){var p=g[l];if(p){k=p.parentNode;g[l]=k.nodeName.toLowerCase()===h?k:false}}}else{l=0;for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)}},"":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=
+h=h.toLowerCase();q=b}q("parentNode",h,l,g,p,k)},"~":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,l,g,p,k)}},find:{ID:function(g,h,k){if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var k=[];h=h.getElementsByName(g[1]);for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);return k.length===0?null:k}},
+TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,k,l,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&
+"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);
+return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===
+g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2===
+0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return h<k[3]-0},gt:function(g,h,k){return h>k[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k<l;k++)if(h[k]===g)return false;return true}else o.error("Syntax error, unrecognized expression: "+
+q)},CHILD:function(g,h){var k=h[1],l=g;switch(k){case "only":case "first":for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;l=g;case "last":for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;case "nth":k=h[2];var q=h[3];if(k===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var u=0;for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h}g=g.nodeIndex-q;return k===0?g===0:g%k===0&&g/k>=
+0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?
+k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};
+try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);return h}}var C;if(r.documentElement.compareDocumentPosition)C=function(g,h){if(!g.compareDocumentPosition||!h.compareDocumentPosition){if(g==h)j=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===
+h?0:1;if(g===0)j=true;return g};else if("sourceIndex"in r.documentElement)C=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)j=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)j=true;return g};else if(r.createRange)C=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)j=true;return g.ownerDocument?-1:1}var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();k.setStart(g,0);k.setEnd(g,0);l.setStart(h,0);l.setEnd(h,0);g=k.compareBoundaryPoints(Range.START_TO_END,
+l);if(g===0)j=true;return g};(function(){var g=r.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");
+return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href",
+2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
+0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[],
+l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)o(g,h[q],k);return o.filter(l,k)};c.find=o;c.expr=o.selectors;c.expr[":"]=c.expr.filters;c.unique=o.uniqueSort;c.getText=a;c.isXMLDoc=w;c.contains=E})();var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;Q=Array.prototype.slice;var Ea=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,i){return!!b.call(e,i,e)===d});else if(b.nodeType)return c.grep(a,
+function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;c.find(a,this[f],b);if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){b.splice(i--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=
+0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ea(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ea(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e<n;e++){j=a[e];i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)}for(;f&&f.ownerDocument&&f!==b;){for(j in i){e=i[j];if(e.jquery?e.index(f)>
+-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),
+a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},
+nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):
+e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==
+b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){return eb.test(d)?a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],
+col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)},
+wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?
+d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,
+false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&
+!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||
+["",""])[1].toLowerCase()]){a=a.replace(Ga,Ia);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var i=c(this),j=i.html();i.empty().append(function(){return a.call(this,e,j)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,
+b,f))});else a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(s){return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s}var e,i,j=a[0],n=[];if(!c.support.checkClone&&arguments.length===3&&typeof j===
+"string"&&sa.test(j))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(j))return this.each(function(s){var x=c(this);a[0]=j.call(this,s,b?x.html():v);x.domManip(a,b,d)});if(this[0]){e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{fragment:a[0].parentNode}:ra(a,this,n);if(i=e.fragment.firstChild){b=b&&c.nodeName(i,"tr");for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)}n&&c.each(n,
+Ma)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);for(var e=0,i=d.length;e<i;e++){var j=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),j);f=f.concat(j)}return this.pushStack(f,a,d.selector)}});c.each({remove:function(a,b){if(!a||c.filter(a,[this]).length){if(!b&&this.nodeType===1){c.cleanData(this.getElementsByTagName("*"));c.cleanData([this])}this.parentNode&&
+this.parentNode.removeChild(this)}},empty:function(){for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)}},function(a,b){c.fn[a]=function(){return this.each(b,arguments)}});c.extend({clean:function(a,b,d,f){b=b||r;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;var e=[];c.each(a,function(i,j){if(typeof j==="number")j+="";if(j){if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);else if(typeof j===
+"string"){j=j.replace(Ga,Ia);var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];i=b.createElement("div");for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;if(!c.support.tbody){m=fb.test(j);n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);
+j=c.makeArray(i.childNodes)}if(j.nodeType)e.push(j);else e=c.merge(e,j)}});if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);else{e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));d.appendChild(e[a])}return e},cleanData:function(a){for(var b=0,d;(d=a[b])!=null;b++){c.event.remove(d);c.removeData(d)}}});var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,
+Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={position:"absolute",visibility:"hidden",display:"block"},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===v)return c.curCSS(d,f);if(typeof e==="number"&&!hb.test(f))e+="px";c.style(d,f,e)})};
+c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return v;if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;var f=a.style||a,e=d!==v;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=Ja.test(a)?a.replace(Ja,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""}if(ga.test(b))b=La;b=b.replace(ha,ia);if(e)f[b]=d;return f[b]},css:function(a,
+b,d,f){if(b==="width"||b==="height"){var e,i=b==="width"?mb:nb;function j(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(i,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0})}a.offsetWidth!==0?j():c.swap(a,lb,j);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&
+a.currentStyle){f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ga.test(b))b=La;if(!d&&e&&e[b])f=e[b];else if(ob){if(ga.test(b))b="float";b=b.replace(ib,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ha,ia);f=a.currentStyle[b]||a.currentStyle[d];if(!jb.test(f)&&kb.test(f)){b=e.left;var i=a.runtimeStyle.left;a.runtimeStyle.left=
+a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=i}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var pb=
+J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;c.fn.extend({_load:c.fn.load,load:function(a,b,d){if(typeof a!=="string")return this._load(a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=
+c.param(b,c.ajaxSettings.traditional);f="POST"}var i=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(j,n){if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);d&&i.each(d,[j.responseText,n,j])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&
+(this.checked||rb.test(this.nodeName)||sb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,
+b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){return new z.XMLHttpRequest}:
+function(){try{return new z.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&e.success.call(o,n,j,w);e.global&&f("ajaxSuccess",[w,e])}function d(){e.complete&&e.complete.call(o,w,j);e.global&&f("ajaxComplete",[w,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}
+function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||
+N.test(e.url))){i=e.jsonpCallback||"jsonp"+pb++;if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");e.url=e.url.replace(N,"="+i+"$1");e.dataType="script";z[i]=z[i]||function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===false&&m==="GET"){var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")}if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&
+c.event.trigger("ajaxStart");s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);if(e.dataType==="script"&&m==="GET"&&s){var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");B.src=e.url;if(e.scriptCharset)B.charset=e.scriptCharset;if(!i){var C=false;B.onload=B.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;b();d();B.onload=B.onreadystatechange=null;A&&B.parentNode&&
+A.removeChild(B)}}}A.insertBefore(B,A.firstChild);return v}var E=false,w=e.xhr();if(w){e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);try{if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])}s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",
+e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(fa){}if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");w.abort();return false}e.global&&f("ajaxSend",[w,e]);var g=w.onreadystatechange=function(q){if(!w||w.readyState===0||q==="abort"){E||d();E=true;if(w)w.onreadystatechange=c.noop}else if(!E&&w&&(w.readyState===4||q==="timeout")){E=true;w.onreadystatechange=c.noop;j=q==="timeout"?"timeout":!c.httpSuccess(w)?
+"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";var p;if(j==="success")try{n=c.httpData(w,e.dataType,e)}catch(u){j="parsererror";p=u}if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);d();q==="timeout"&&w.abort();if(e.async)w=null}};try{var h=w.abort;w.abort=function(){w&&h.call(w);g("abort")}}catch(k){}e.async&&e.timeout>0&&setTimeout(function(){w&&!E&&g("timeout")},e.timeout);try{w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)}catch(l){c.handleError(e,
+w,null,l);d()}e.async||g();return w}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=
+f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(j,n){if(c.isArray(n))c.each(n,
+function(o,m){b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){d(j+"["+o+"]",m)}):f(j,n)}function f(j,n){n=c.isFunction(n)?n():n;e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)}var e=[];if(b===v)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")}});var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,
+W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(ka[d])f=ka[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();
+ka[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&
+c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),
+o=this;for(j in a){var m=j.replace(ha,ia);if(j!==m){a[m]=a[j];delete a[j];j=m}if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);if((j==="height"||j==="width")&&this.style){i.display=c.css(this,"display");i.overflow=this.style.overflow}if(c.isArray(a[j])){(i.specialEasing=i.specialEasing||{})[j]=a[j][1];a[j]=a[j][0]}}if(i.overflow!=null)this.style.overflow="hidden";i.curAnim=c.extend({},a);c.each(a,function(s,x){var A=new c.fx(o,i,s);if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);
+else{var B=xb.exec(x),C=A.cur(true)||0;if(B){x=parseFloat(B[2]);var E=B[3]||"px";if(E!=="px"){o.style[s]=(x||1)+E;C=(x||1)/A.cur(true)*C;o.style[s]=C+E}if(B[1])x=(B[1]==="-="?-1:1)*x+C;A.custom(C,x,E)}else A.custom(C,x,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",
+1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,
+b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==
+null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(i){return e.step(i)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop===
+"width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=
+this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=
+c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=
+null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),
+f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=
+b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;i=e?e.getComputedStyle(b,null):b.currentStyle;o-=b.scrollTop;m-=b.scrollLeft;if(b===d){o+=b.offsetTop;m+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){o+=parseFloat(i.borderTopWidth)||
+0;m+=parseFloat(i.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){o+=parseFloat(i.borderTopWidth)||0;m+=parseFloat(i.borderLeftWidth)||0}f=i}if(f.position==="relative"||f.position==="static"){o+=n.offsetTop;m+=n.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){o+=Math.max(j.scrollTop,n.scrollTop);m+=Math.max(j.scrollLeft,n.scrollLeft)}return{top:o,left:m}};c.offset={initialize:function(){var a=r.body,b=r.createElement("div"),
+d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);
+d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;a.removeChild(b);c.offset.initialize=c.noop},
+bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,d,e);d={top:b.top-e.top+i,left:b.left-
+e.left+j};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=
+this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],i;if(!e)return null;if(f!==v)return this.each(function(){if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]}});
+c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(i){var j=c(this);j[d](f.call(this,i,j[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||
+e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});z.jQuery=z.$=c})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/scripts/narrow.js	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,78 @@
+var narrowInit = function() {
+  /* TODO:
+  Could probably be more efficient, not hardcoding each element to be created
+  */
+  // 1: Create search form
+  var narrowSearch = $('<div id="narrowsearch"></div>');
+  var searchform = $("#qtdocsearch");
+  narrowSearch.append(searchform);
+  $("#qtdocheader .content .qtref").after(narrowSearch);
+
+  // 2: Create dropdowns
+  var narrowmenu = $('<ul id="narrowmenu" class="sf-menu"></ul>');
+
+  // Lookup
+  var lookuptext = $("#lookup h2").attr("title");
+  $("#lookup ul").removeAttr("id");
+  $("#lookup ul li").removeAttr("class");
+  $("#lookup ul li").removeAttr("style");
+  var lookupul = $("#lookup ul");
+  var lookuplist = $('<li></li>');
+  var lookuplink = $('<a href="#"></a>');
+  lookuplink.append(lookuptext);
+  lookuplist.append(lookuplink);
+  lookuplist.append(lookupul);
+  narrowmenu.append(lookuplist);
+
+  // Topics
+  var topicstext = $("#topics h2").attr("title");
+  $("#topics ul").removeAttr("id");
+  $("#topics ul li").removeAttr("class");
+  $("#topics ul li").removeAttr("style");
+  var topicsul = $("#topics ul");
+  var topicslist = $('<li></li>');
+  var topicslink = $('<a href="#"></a>');
+  topicslink.append(topicstext);
+  topicslist.append(topicslink);
+  topicslist.append(topicsul);
+  narrowmenu.append(topicslist);
+
+  // Examples
+  var examplestext = $("#examples h2").attr("title");
+  $("#examples ul").removeAttr("id");
+  $("#examples ul li").removeAttr("class");
+  $("#examples ul li").removeAttr("style");
+  var examplesul = $("#examples ul");
+  var exampleslist = $('<li></li>');
+  var exampleslink = $('<a href="#"></a>');
+  exampleslink.append(examplestext);
+  exampleslist.append(exampleslink);
+  exampleslist.append(examplesul);
+  narrowmenu.append(exampleslist);
+
+  $("#shortCut").after(narrowmenu);
+  $('ul#narrowmenu').superfish({
+    delay: 100,
+    autoArrows: false,
+    disableHI: true
+  });
+}
+
+$(document).ready(function(){
+  if ($('body').hasClass('narrow')) {
+    narrowInit();
+  }
+});
+
+$(window).bind('resize', function () {
+  if($(window).width()<600) {
+    $('body').addClass('narrow');
+
+    if ($("#narrowsearch").length == 0) {
+      narrowInit();
+    }
+  }
+  else {
+    $('body').removeClass('narrow');
+  }
+});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/scripts/superfish.js	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,121 @@
+
+/*
+ * Superfish v1.4.8 - jQuery menu widget
+ * Copyright (c) 2008 Joel Birch
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * 	http://www.opensource.org/licenses/mit-license.php
+ * 	http://www.gnu.org/licenses/gpl.html
+ *
+ * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
+ */
+
+;(function($){
+	$.fn.superfish = function(op){
+
+		var sf = $.fn.superfish,
+			c = sf.c,
+			$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
+			over = function(){
+				var $$ = $(this), menu = getMenu($$);
+				clearTimeout(menu.sfTimer);
+				$$.showSuperfishUl().siblings().hideSuperfishUl();
+			},
+			out = function(){
+				var $$ = $(this), menu = getMenu($$), o = sf.op;
+				clearTimeout(menu.sfTimer);
+				menu.sfTimer=setTimeout(function(){
+					o.retainPath=($.inArray($$[0],o.$path)>-1);
+					$$.hideSuperfishUl();
+					if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
+				},o.delay);	
+			},
+			getMenu = function($menu){
+				var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
+				sf.op = sf.o[menu.serial];
+				return menu;
+			},
+			addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
+			
+		return this.each(function() {
+			var s = this.serial = sf.o.length;
+			var o = $.extend({},sf.defaults,op);
+			o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
+				$(this).addClass([o.hoverClass,c.bcClass].join(' '))
+					.filter('li:has(ul)').removeClass(o.pathClass);
+			});
+			sf.o[s] = sf.op = o;
+			
+			$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
+				if (o.autoArrows) addArrow( $('>a:first-child',this) );
+			})
+			.not('.'+c.bcClass)
+				.hideSuperfishUl();
+			
+			var $a = $('a',this);
+			$a.each(function(i){
+				var $li = $a.eq(i).parents('li');
+				$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
+			});
+			o.onInit.call(this);
+			
+		}).each(function() {
+			var menuClasses = [c.menuClass];
+			if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
+			$(this).addClass(menuClasses.join(' '));
+		});
+	};
+
+	var sf = $.fn.superfish;
+	sf.o = [];
+	sf.op = {};
+	sf.IE7fix = function(){
+		var o = sf.op;
+		if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
+			this.toggleClass(sf.c.shadowClass+'-off');
+		};
+	sf.c = {
+		bcClass     : 'sf-breadcrumb',
+		menuClass   : 'sf-js-enabled',
+		anchorClass : 'sf-with-ul',
+		arrowClass  : 'sf-sub-indicator',
+		shadowClass : 'sf-shadow'
+	};
+	sf.defaults = {
+		hoverClass	: 'sfHover',
+		pathClass	: 'overideThisToUse',
+		pathLevels	: 1,
+		delay		: 800,
+		animation	: {opacity:'show'},
+		speed		: 'normal',
+		autoArrows	: true,
+		dropShadows : true,
+		disableHI	: false,		// true disables hoverIntent detection
+		onInit		: function(){}, // callback functions
+		onBeforeShow: function(){},
+		onShow		: function(){},
+		onHide		: function(){}
+	};
+	$.fn.extend({
+		hideSuperfishUl : function(){
+			var o = sf.op,
+				not = (o.retainPath===true) ? o.$path : '';
+			o.retainPath = false;
+			var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
+					.find('>ul').hide().css('visibility','hidden');
+			o.onHide.call($ul);
+			return this;
+		},
+		showSuperfishUl : function(){
+			var o = sf.op,
+				sh = sf.c.shadowClass+'-off',
+				$ul = this.addClass(o.hoverClass)
+					.find('>ul:hidden').css('visibility','visible');
+			sf.IE7fix.call($ul);
+			o.onBeforeShow.call($ul);
+			$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
+			return this;
+		}
+	});
+
+})(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/OfflineStyle.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,836 @@
+@media screen
+{
+    html
+    {
+        color: #000000;
+        background: #FFFFFF;
+    }
+    body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td
+    {
+        margin: 0;
+        padding: 0;
+    }
+    table
+    {
+        border-collapse: collapse;
+        border-spacing: 0;
+    }
+    fieldset, img
+    {
+        border: 0;
+    }
+    address, caption, cite, code, dfn, em, strong, th, var, optgroup
+    {
+        font-style: inherit;
+        font-weight: inherit;
+    }
+    del, ins
+    {
+        text-decoration: none;
+    }
+    li
+    {
+        list-style: none;
+    }
+    caption, th
+    {
+        text-align: left;
+    }
+    h1, h2, h3, h4, h5, h6
+    {
+        font-size: 100%;
+    }
+    q:before, q:after
+    {
+        content: '';
+    }
+    abbr, acronym
+    {
+        border: 0;
+        font-variant: normal;
+    }
+    sup
+    {
+        vertical-align: baseline;
+    }
+    sub
+    {
+        vertical-align: baseline;
+    }
+	tt, .qmlreadonly span, .qmldefault span
+	{
+		word-spacing:5px;
+	}
+    .heading
+    {
+        font: normal 600 16px/1.0 Arial;
+    }
+    .subtitle
+    {
+        font-size: 13px;
+    }
+    .small-subtitle
+    {
+        font-size: 13px;
+    }
+    legend
+    {
+        color: #000000;
+    }
+    input, button, textarea, select, optgroup, option
+    {
+        font-family: inherit;
+        font-size: inherit;
+        font-style: inherit;
+        font-weight: inherit;
+    }
+    input, button, textarea, select
+    {
+        font-size: 100%;
+    }
+    body
+    {
+        font: normal 13px/1.2 Verdana;
+        color: #363534;
+    }
+    strong
+    {
+        font-weight: bold;
+    }
+    em
+    {
+        font-style: italic;
+    }
+    a
+    {
+        color: #00732f;
+        text-decoration: none;
+    }
+    .header, .footer, .wrapper
+    {
+        /*min-width: 600px;*/
+        max-width: 1500px;
+        margin: 0 5px;
+    }
+    .wrapper
+    {
+	position:relative;
+	top:50px;
+    }
+    .wrapper .bd
+    {
+        position: relative;
+    }
+
+    .header, .footer
+    {
+        display: block;
+        clear: both;
+        overflow: hidden;
+    }
+    .header
+    {
+        height: 115px;
+        position: relative;
+    }
+    
+    
+    .header .qtref
+    {
+        position: absolute;
+        top: 28px;
+        left: 88px;
+        width: 302px;
+        height: 22px;
+    }
+    .header .qtref span
+    {
+        display: block;
+        height: 22px;
+    }
+    .wrap .content h1
+    {
+        font: 600 18px/1.2 Arial;
+    }
+    .wrap .content h2
+    {
+        font: 600 16px/1.2 Arial;
+    }
+    .wrap .content h3
+    {
+        font: 600 14px/1.2 Arial;
+    }
+    .wrap .content h4
+    {
+        font: 600 12px/1.2 Arial;
+    }
+	
+    .wrap .content p
+    {
+        line-height: 20px;
+        padding: 5px;
+    }
+    .wrap .content table p
+    {
+        line-height: 20px;
+        padding: 0px;
+    }	
+    .wrap .content ul
+    {
+        padding-left: 25px;
+        padding-top: 10px;
+    }
+    a:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }
+    .content a:visited
+    {
+        color: #4c0033;
+        text-decoration: none;
+    }
+     .content a:visited:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }   
+
+    pre
+    {
+        border: 1px solid #DDDDDD;
+        margin: 0 20px 10px 10px;
+        padding: 20px 15px 20px 20px;
+        overflow-x: auto;
+    }
+    table, pre
+    {
+        -moz-border-radius: 7px 7px 7px 7px;
+        background-color: #F6F6F6;
+        border: 1px solid #E6E6E6;
+        border-collapse: separate;
+        font-size: 11px;
+        /*min-width: 395px;*/
+        margin-bottom: 25px;
+        display: inline-block;
+    }
+    thead
+    {
+        margin-top: 5px;
+		font:600 12px/1.2 Arial;
+    }
+    th
+    {
+        padding: 5px 15px 5px 15px;
+        background-color: #E1E1E1;
+      /*  border-bottom: 1px solid #E6E6E6;*/
+        border-left: 1px solid #E6E6E6;
+      /*  border-right: 1px solid #E6E6E6;*/
+    }
+    td
+    {
+        padding: 3px 15px 3px 20px;
+  /*      border-left: 1px solid #E6E6E6;
+        border-right: 1px solid #E6E6E6;*/
+    }
+    tr.odd td:hover,  tr.even td:hover
+    {
+    /*    border-right: 1px solid #C3C3C3;
+        border-left: 1px solid #C3C3C3;*/
+    }
+		
+	td.rightAlign
+	{
+        padding: 3px 15px 3px 10px;
+	}
+    table tr.odd
+    {
+        border-left: 1px solid #E6E6E6;
+        background-color: #F6F6F6;
+        color: #66666E;
+    }
+    table tr.even
+    {
+        border-left: 1px solid #E6E6E6;
+        background-color: #ffffff;
+        color: #66666E;
+    }
+    table tr.odd td:hover, table tr.even td:hover
+    {
+        background-color: #E6E6E6;
+    }
+    		
+    span.comment
+    {
+        color: #8B0000;
+        font-style: italic;
+    }
+    span.string, span.char
+    {
+        color: #254117;
+    }
+
+    .qmltype
+    {
+        text-align: center;
+        font-size: 160%;
+    }
+    .qmlreadonly
+    {
+        float: right;
+        color: #254117;
+    }
+
+    .qmldefault
+    {
+        float: right;
+        color: red;
+    }
+
+	.footer
+    {
+		border-top:1px solid #E5E5E5;
+        min-height: 100px;
+        color: #797775;
+        font: normal 9px/1 Verdana;
+        text-align: center;
+        padding-top: 40px;
+        margin: 0;
+    }
+
+    
+     .wrap
+    {
+        margin: 0 5px 0 5px;
+    }
+    .wrap .toolbar
+    {
+     display:block;
+    }
+
+    .wrap .breadcrumb ul li
+    {
+        float: left;
+        background: url(../images/breadcrumb.png) no-repeat 0 5px;
+        padding-left: 15px;
+        margin-left: 15px;
+        font-weight: bold;
+    }
+    .wrap .breadcrumb ul li.last
+    {
+        font-weight: normal;
+    }
+    .wrap .breadcrumb ul li a
+    {
+      /*  color: #363534;*/
+        color: #00732F;
+    }
+    .wrap .breadcrumb ul li.first
+    {
+        background-image: none;
+        padding-left: 0;
+        margin-left: 0;
+    }
+    .wrap .content
+    {
+		word-wrap:break-word;
+    }
+    .wrap .content li
+    {
+        padding-left: 12px;
+        background: url(../images/bullet_sq.png) no-repeat 0 5px; 
+        font: inherit; 
+       /* color: #44a51c;*/ 
+        margin-bottom: 10px;
+    } 
+
+    .wrap .content ol li { 
+        background:none; 
+        font: inherit; 
+        margin-bottom:10px; 
+        padding-left: 0px;
+    } 
+
+    .wrap .content ol li { 
+    	list-style-type:decimal; 
+    }
+
+    .wrap .content .descr ol li {
+	margin-left: 45px;
+
+    }
+
+    .offline .wrap .content
+    {
+        padding-top: 15px;
+    }
+
+    .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after
+    {
+        content: ".";
+        display: block;
+        height: 0;
+        clear: both;
+        visibility: hidden;
+    }
+    
+    hr
+    {
+        background-color: #E6E6E6;
+        border: 1px solid #E6E6E6;
+        height: 1px;
+        width: 100%;
+        text-align: left;
+        margin: 5px 0px 5px 0px;
+    }
+
+    .content .alignedsummary
+    {
+        margin: 5px;
+		width:100%;
+    }
+
+     
+    .toc
+    {
+        float: right;
+        -moz-border-radius: 7px 7px 7px 7px;
+        background-color: #F6F6F6;
+        border: 1px solid #DDDDDD;
+        margin: 0 20px 10px 10px;
+        padding: 20px 15px 20px 20px;
+        height: auto;
+        width: 200px;
+    }
+
+    .toc h3, .generic a
+    {
+        font: 600 12px/1.2 Arial;
+    }
+
+    .wrap .content .toc ul
+    {
+        padding-left: 0px;
+    }
+
+
+    .wrap .content .toc .level2
+    {
+        margin-left: 15px;
+    }
+
+    .wrap .content .toc .level3
+    {
+        margin-left: 30px;
+    }
+
+    .content .toc li
+    {
+        font: normal 10px/1.2 Verdana;
+        background: url(../images/bullet_dn.png) no-repeat 0 5px;
+    }
+	
+	
+	.generic{
+		max-width:75%;
+	}
+	.generic td{
+		padding:0;
+	}
+	
+	.generic .odd .alphaChar{
+        background-color: #F6F6F6;
+	}
+	
+	.generic .even .alphaChar{
+        background-color: #FFFFFF;
+	}
+
+	.highlightedCode
+	{
+	margin:10px;
+	}
+
+	.flowList{
+	vertical-align:top;
+	}	
+	.alphaChar{
+	width:100%;
+	background-color:#F6F6F6;
+	border:1px solid #E6E6E6;
+	font-size:12pt;
+	padding-left:10px;
+	margin-top:10px;
+	margin-bottom:10px;
+	}
+
+	.flowList dl{
+	}
+	.flowList dd{
+	display:inline-block;
+	margin-left:10px;
+	width:250px;
+	}
+	.wrap .content .flowList p{
+	padding:0px;
+	}
+	
+    .relpage
+    {
+        -moz-border-radius: 7px 7px 7px 7px;
+        border: 1px solid #DDDDDD;
+        padding: 25px 25px;
+        clear: both;
+    }
+    .relpage ul
+    {
+        float: none;
+        padding: 15px;
+    }
+    .content .relpage li
+    {
+        font: normal 11px/1.2 Verdana;
+    }
+    h3.fn, span.fn
+    {
+        background-color: #F6F6F6;
+        border-width: 1px;
+        border-style: solid;
+        border-color: #E6E6E6;
+        font-weight: bold;
+		word-spacing:3px;
+    }
+
+	.functionIndex {
+	font-size:12pt;
+	word-spacing:10px;
+	margin-bottom:10px;
+    background-color: #F6F6F6;
+    border-width: 1px;
+    border-style: solid;
+    border-color: #E6E6E6;
+	width:100%;
+	}
+	
+	.centerAlign {	text-align:center;}
+	.rightAlign {text-align:right;}
+	.leftAlign {text-align:left;}
+	.topAlign{vertical-align:top	}
+	.functionIndex a{display:inline-block;}
+
+    /* start index box */
+    .indexbox
+    {
+        width: 100%;
+		display:inline-block;
+    }
+
+    .indexboxcont { display: block; }
+
+    .indexboxbar
+    {
+		border-bottom:1px solid #E5E5E5;
+        margin-bottom: 25px;
+    }
+
+    .indexboxcont .section
+    {
+        display: inline-block;
+        padding:0 2% 0 1%;
+        vertical-align:top;
+	}
+
+	.indexboxcont .section {
+	  float: left;
+	}
+
+    .indexboxcont .section p
+    {
+        padding-top: 20px;
+        padding-bottom: 20px;
+    }
+    .indexboxcont .sectionlist
+    {
+        display: inline-block;
+		vertical-align:top;
+        padding: 0;
+    }
+    .indexboxcont .sectionlist ul
+    {
+        margin-bottom: 20px;
+    }
+
+    .indexboxcont .sectionlist ul li
+    {
+        line-height: 12px;
+    }
+
+    .content .indexboxcont li
+    {
+        font: normal 600 13px/1 Verdana;
+    }
+
+    .indexbox a:hover, .indexbox a:visited:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }
+
+    .indexbox a:visited
+    {
+        color: #00732f;
+        text-decoration: none;
+    }
+	
+	.indexbox .indexIcon {
+	width: 11%;
+	}
+	
+   
+    .indexboxcont:after
+    {
+        content: ".";
+        display: block;
+        height: 0;
+        clear: both;
+        visibility: hidden;
+    }
+	
+    body.offline
+    {
+      background-image: none;
+    }
+
+    .offline .footer {
+      margin: 0;
+    }
+    .offline .header
+    {
+      width: 100%;
+      margin: 0;
+      height: auto;
+      background-color: #ffffff;
+      padding: 10px 0 5px 0;
+      overflow: visible;
+	  border-bottom: solid #E5E5E5 1px;
+	  z-index:1;
+	  position:fixed;
+    }
+
+    .offline .header .content
+    {
+    }
+    .offline .header .qtref
+    {
+      color: #00732F;
+      position: static;
+      float: left;
+      margin-left: 5px;
+      font: bold 18px/1 Arial;
+    }
+
+    .offline .header .qtref:visited
+    {
+      color: #00732F;
+	  }
+    .offline .header .qtref:hover
+    {
+      color: #00732F;
+	  text-decoration:none;
+	  }
+    .offline .header .qtref span
+    {
+      background-image: none;
+      text-indent: 0;
+	  text-decoration:none;
+    }
+
+    .offline .wrap
+    {
+        margin: 0 5px 0 5px;
+    }
+
+    .offline .wrap .toolbar
+    {
+      display:block;
+	  padding-top:5px;
+    }
+
+    .offline .wrap .breadcrumb ul li {
+      font-weight: normal;
+    }
+
+    .offline .wrap .breadcrumb ul li a {
+      /*color: #44a51c;*/
+    }
+
+    .offline .wrap .breadcrumb ul li.last a {
+      /*color: #363534;*/
+    }
+    
+
+    
+    .narrow .indexboxcont .section {
+      width: 64%;
+      padding-left: 0;
+    }
+    
+    .narrow .indexboxcont .sectionlist {
+      width: 32.5%;
+    }
+
+    .header .icon,
+	.sidebar,
+	.feedback,
+	.t_button,
+    .feedback,
+	#feedbackBox,
+	#feedback,
+	#blurpage,
+	.indexbox .indexIcon span,
+	.wrapper .hd,
+	.offline .indexbox .indexIcon,
+	.offline .header #nav-logo,
+	#offlinemenu,
+	#offlinesearch,
+	.offline .header #nav-topright,
+    .offline .header #shortCut ,
+	.offline .wrapper .hd,
+    .offline .wrapper .ft,
+	.offline .sidebar,
+	.offline .wrap .feedback
+    {
+	display:none;
+    }
+
+    /* end offline mode */
+#narrowmenu {
+      display: none;
+      float: right;
+      margin: 15px 40px 0 0;
+      font-size: 11px;
+    }
+
+    .narrow #narrowmenu {
+      display: block;
+    }
+	
+	#narrowsearch{
+		display:none;
+	}
+
+	#narrowmenu ul
+	{
+	  border-bottom:solid 1px #E5E5E5;
+	  border-left:solid 1px #E5E5E5;
+	  border-right:solid 1px #E5E5E5;
+	}
+
+    #narrowmenu a {
+      line-height: 1.1;
+      background: url(../images/arrow_down.png) no-repeat 100% 50%;
+      white-space: nowrap;
+      padding: 0 16px 0 5px;
+    }
+
+    #narrowmenu li {
+      margin-left: 20px;
+    }
+
+    #narrowmenu li li {
+      margin: 0 0 5px 0;
+    }
+
+    #narrowmenu li li a {
+      padding: 0;
+      background-image: none;
+    }
+
+    #narrowmenu li,
+    #narrowmenu li ul {
+      background-color: #fff;
+    }
+
+    #narrowmenu li ul {
+      width: auto;
+      padding: 5px;
+      margin-top:-15px;
+   }
+
+    .sf-menu li:hover ul, .sf-menu li.sfHover ul {
+      top: 1.2em;
+    }
+.sf-menu, .sf-menu * {
+	margin:			0;
+	padding:		0;
+	list-style:		none;
+}
+.sf-menu {
+	line-height:	1.0;
+}
+.sf-menu ul {
+	position:		absolute;
+	top:			-999em;
+	width:			10em; /* left offset of submenus need to match (see below) */
+}
+.sf-menu ul li {
+	width:			100%;
+}
+.sf-menu li:hover {
+	visibility:		inherit; /* fixes IE7 'sticky bug' */
+}
+.sf-menu li {
+	float:			left;
+	position:		relative;
+}
+.sf-menu a {
+	display:		block;
+	position:		relative;
+}
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+	left:			0;
+	top:			2.5em; /* match top ul list item height */
+	z-index:		99;
+}
+ul.sf-menu li:hover li ul,
+ul.sf-menu li.sfHover li ul {
+	top:			-999em;
+}
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+	left:			10em; /* match ul width */
+	top:			0;
+}
+ul.sf-menu li li:hover li ul,
+ul.sf-menu li li.sfHover li ul {
+	top:			-999em;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+	left:			10em; /* match ul width */
+	top:			0;
+}
+
+}
+/* end of screen media */
+
+/* start of print media */
+
+@media print
+{
+     input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft
+    {
+        display: none;
+        background: none;
+    }
+    .content
+    {
+        position: absolute;
+        top: 0px;
+        left: 0px;
+        background: none;
+        display: block;
+    }
+}
+/* end of print media */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/narrow.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,250 @@
+    /* start narrow mode */
+
+    body.narrow
+    {
+      background-image: none;
+    }
+
+    .narrow a {
+      color: #44a51c;
+    }
+
+    .narrow .header, .narrow .header .content, .narrow .footer, .narrow .wrapper {
+      margin: 0 7px;
+      min-width: 300px;
+    }
+
+    .narrow .footer {
+      margin: 0;
+    }
+    .narrow .header
+    {
+      width: 100%;
+      margin: 0;
+      height: auto;
+      background: #fff url(../images/header_bg.png) repeat-x 0 100%;
+      padding: 10px 0 5px 0;
+      overflow: visible;
+    }
+
+    .narrow .header .content
+    {
+    }
+
+    .narrow .header #nav-logo
+    {
+      display: none;
+    }
+
+    .narrow .header .qtref
+    {
+      width: auto;
+      height: auto;
+      color: #363534;
+      position: static;
+      float: left;
+      margin-left: 25px;
+      font: bold 18px/1 Arial;
+    }
+
+    .narrow .header .qtref a
+    {
+      color: #363534;
+    }
+
+    .narrow .header .qtref span
+    {
+      background-image: none;
+      text-indent: 0;
+    }
+
+    .narrow .header #nav-topright
+    {
+      display: none;
+    }
+
+    .narrow .header #shortCut
+    {
+      clear: both;
+      font-weight: normal;
+      position: static;
+      float: left;
+      margin: 15px 0 0 25px;
+      overflow: hidden;
+      padding: 0;
+      height: auto;
+    }
+
+    .narrow .header #shortCut ul
+    {
+      float: none;
+      margin: 0;
+      width: auto;
+      font-size: 11px;
+    }
+
+    .narrow .header #shortCut ul li
+    {
+      background-image: none;
+    }
+
+    .narrow .header #shortCut ul .shortCut-topleft-active,
+    .narrow .header #shortCut ul .shortCut-topleft-inactive
+    {
+      background-image: none;
+      height: auto;
+      padding: 0;
+      width: auto;
+    }
+    .narrow .header #shortCut ul li a
+    {
+      color: #44a51c;
+    }
+
+    .narrow .wrapper .hd
+    {
+        background: url(../images/bg_ul_blank.png) no-repeat 0 0;
+    }
+
+    .narrow .wrapper .bd
+    {
+        background: url(../images/bg_l_blank.png) repeat-y 0 0;
+    }
+
+    .narrow .wrapper .ft
+    {
+        background: url(../images/bg_ll_blank.png) no-repeat 0 0;
+    }
+
+    .narrow .sidebar
+    {
+        display: none;
+    }
+
+    .narrow .wrap
+    {
+        margin: 0 5px 0 5px;
+    }
+
+    .narrow .wrap .toolbar
+    {
+      border-bottom: none;
+    }
+
+    .narrow .wrap .content
+    {
+        padding-top: 15px;
+    }
+
+    .narrow .wrap .feedback
+    {
+        display: none;
+    }
+
+    .narrow .wrap .breadcrumb ul li {
+      font-weight: normal;
+    }
+
+    .narrow .wrap .breadcrumb ul li a {
+      color: #44a51c;
+    }
+
+    .narrow .wrap .breadcrumb ul li.last a {
+      color: #363534;
+    }
+    
+    #narrowsearch {
+      display: none;
+    }
+
+    .narrow #narrowsearch {
+      display: block;
+      float: right;
+      margin-right: 25px;
+      _position: relative;
+    }
+
+    .narrow #narrowsearch fieldset {
+      _position: absolute;
+      _margin-top: -1px;
+    }
+
+    .narrow #narrowsearch {
+      background: url("http://doc.qt.nokia.com/prototype/html/images/sprites-combined.png") no-repeat scroll -6px -348px transparent;
+      height: 21px;
+      padding: 2px 0 0 5px;
+      width: 167px;
+    }
+
+    .narrow #narrowsearch input {
+      border: none;
+      font: 13px/1.2 Verdana;
+      height: 19px;
+      outline: none;
+      padding: 0;
+      width: 158px;
+      *border: 1px solid #fff;
+      *height: 17px;
+      _height: 18px;
+    }
+
+    .narrow .indexbox .indexIcon {
+      display: none;
+    }
+
+    .narrow .indexboxcont .section {
+      width: 64%;
+      padding-left: 0;
+    }
+    
+    .narrow .indexboxcont .sectionlist {
+      width: 32.5%;
+    }
+
+    #narrowmenu {
+      display: none;
+      float: right;
+      margin: 15px 40px 0 0;
+      font-size: 11px;
+    }
+
+    .narrow #narrowmenu {
+      display: block;
+    }
+
+    #narrowmenu a {
+      line-height: 1.1;
+      background: url(../images/arrow_down.png) no-repeat 100% 50%;
+      white-space: nowrap;
+      padding: 0 16px 0 5px;
+    }
+
+    #narrowmenu li {
+      margin-left: 20px;
+    }
+
+    #narrowmenu li li {
+      margin: 0 0 5px 0;
+    }
+
+    #narrowmenu li li a {
+      padding: 0;
+      background-image: none;
+    }
+
+    #narrowmenu li,
+    #narrowmenu li ul {
+      background-color: #fff;
+	  margin-top:-1px;
+    }
+
+    #narrowmenu li ul {
+      width: auto;
+      padding: 5px;
+    }
+
+    .sf-menu li:hover ul, .sf-menu li.sfHover ul {
+      top: 1.2em;
+    }
+
+    /* end narrow mode */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/style.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,1218 @@
+@media screen
+{
+    html
+    {
+        color: #000000;
+        background: #FFFFFF;
+    }
+    body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td
+    {
+        margin: 0;
+        padding: 0;
+    }
+    table
+    {
+        border-collapse: collapse;
+        border-spacing: 0;
+    }
+    fieldset, img
+    {
+        border: 0;
+    }
+    address, caption, cite, code, dfn, em, strong, th, var, optgroup
+    {
+        font-style: inherit;
+        font-weight: inherit;
+    }
+    del, ins
+    {
+        text-decoration: none;
+    }
+    li
+    {
+        list-style: none;
+    }
+    caption, th
+    {
+        text-align: left;
+    }
+    h1, h2, h3, h4, h5, h6
+    {
+        font-size: 100%;
+/*        font-weight: normal; */
+    }
+    q:before, q:after
+    {
+        content: '';
+    }
+    abbr, acronym
+    {
+        border: 0;
+        font-variant: normal;
+    }
+    sup
+    {
+        vertical-align: baseline;
+    }
+    sub
+    {
+        vertical-align: baseline;
+    }
+	tt, .qmlreadonly span, .qmldefault span
+	{
+		word-spacing:5px;
+	}
+    .heading
+    {
+        font: normal 600 16px/1.0 Arial;
+        padding-bottom: 15px;
+    }
+    .subtitle
+    {
+        font-size: 13px;
+    }
+    .small-subtitle
+    {
+        font-size: 13px;
+    }
+    legend
+    {
+        color: #000000;
+    }
+    input, button, textarea, select, optgroup, option
+    {
+        font-family: inherit;
+        font-size: inherit;
+        font-style: inherit;
+        font-weight: inherit;
+    }
+    input, button, textarea, select
+    {
+        font-size: 100%;
+    }
+    html
+    {
+        background-color: #e5e5e5;
+    }
+    body
+    {
+        background: #e6e7e8 url(../images/page_bg.png) repeat-x 0 0;
+        font: normal 13px/1.2 Verdana;
+        color: #363534;
+    }
+    strong
+    {
+        font-weight: bold;
+    }
+    em
+    {
+        font-style: italic;
+    }
+    a
+    {
+        color: #00732f;
+        text-decoration: none;
+    }
+    .header, .footer, .wrapper
+    {
+        min-width: 600px;
+        max-width: 1500px;
+        margin: 0 30px;
+    }
+    .wrapper
+    {
+        background: url(../images/bg_r.png) repeat-y 100% 0;
+    }
+    .wrapper .hd
+    {
+        padding-left: 216px;
+        height: 15px;
+        background: url(../images/page.png) no-repeat 0 0;
+        overflow: hidden;
+    }
+    .offline .wrapper .hd
+    {
+        background: url(../images/page.png) no-repeat 0 -15px;
+    }
+    .wrapper .hd span
+    {
+        height: 15px;
+        display: block;
+        overflow: hidden;
+        background: url(../images/page.png) no-repeat 100% -30px;
+    }
+    .wrapper .bd
+    {
+        background: url(../images/bg_l.png) repeat-y 0 0;
+        position: relative;
+    }
+    .offline .wrapper .bd
+    {
+        background: url(../images/bg_l_blank.png) repeat-y 0 0;
+    }
+    .wrapper .ft
+    {
+        padding-left: 216px;
+        height: 15px;
+        background: url(../images/page.png) no-repeat 0 -75px;
+        overflow: hidden;
+    }
+    .offline .wrapper .ft
+    {
+        background: url(../images/page.png) no-repeat 0 -90px;
+    }
+    .wrapper .ft span
+    {
+        height: 15px;
+        display: block;
+        background: url(../images/page.png) no-repeat 100% -60px;
+        overflow: hidden;
+    }
+    .header, .footer
+    {
+        display: block;
+        clear: both;
+        overflow: hidden;
+    }
+    .header
+    {
+        height: 115px;
+        position: relative;
+    }
+    .header .icon
+    {
+        position: absolute;
+        top: 13px;
+        left: 0;
+    }
+    .header .qtref
+    {
+        position: absolute;
+        top: 28px;
+        left: 88px;
+        width: 302px;
+        height: 22px;
+    }
+    .header .qtref span
+    {
+        display: block;
+        width: 302px;
+        height: 22px;
+        text-indent: -999em;
+        background: url(../images/sprites-combined.png) no-repeat -78px -235px;
+    }
+
+    .sidebar
+    {
+        float: left;
+        margin-left: 5px;
+        width: 200px;
+        font-size: 11px;
+    }
+
+    .offline .sidebar, .offline .feedback, .offline .t_button
+    {
+        display: none;
+    }
+
+    .sidebar .searchlabel
+    {
+        padding: 0 0 2px 17px;
+        font: normal bold 11px/1.2 Verdana;
+    }
+
+    .sidebar .search
+    {
+        padding: 0 15px 0 16px;
+    }
+
+    .sidebar .search form
+    {
+        background: url(../images/sprites-combined.png) no-repeat -6px -348px;
+		height:21px;
+		padding:2px 0 0 5px;
+		width:167px;
+    }
+
+    .sidebar .search form input#pageType
+    {
+        width: 158px;
+        height: 19px;
+        padding: 0;
+        border: none;
+        outline: none;
+        font: 13px/1.2 Verdana;
+    }
+
+    .sidebar .box
+    {
+        padding: 17px 15px 5px 16px;
+    }
+
+    .sidebar .box .first
+    {
+        background-image: none;
+    }
+
+    .sidebar .box h2
+    {
+        font: normal 18px/1.2 Arial;
+        padding: 0;
+        min-height: 32px;
+    }
+    .sidebar .box h2 span
+    {
+        overflow: hidden;
+        display: inline-block;
+    }
+    .sidebar .box#lookup h2
+    {
+        background-image: none;
+    }
+    .sidebar #lookup.box h2 span
+    {
+        background: url(../images/sprites-combined.png) no-repeat -6px -311px;
+        width: 27px;
+        height: 35px;
+        margin-right: 13px;
+    }
+    .sidebar .box#topics h2
+    {
+        background-image: none;
+    }
+    .sidebar #topics.box h2 span
+    {
+        background: url(../images/sprites-combined.png) no-repeat -94px -311px;
+        width: 27px;
+        height: 32px;
+        margin-right: 13px;
+    }
+    .sidebar .box#examples h2
+    {
+        background-image: none;
+    }
+    .sidebar #examples.box h2 span
+    {
+        background: url(../images/sprites-combined.png) no-repeat -48px -311px;
+        width: 30px;
+        height: 31px;
+        margin-right: 9px;
+    }
+
+    .sidebar .box .list
+    {
+        display: block;
+		max-height:200px;
+		overflow-y:auto;
+		overflow-x:none;
+    }
+    .sidebar .box .live
+    {
+        display: none;
+        height: 100px;
+        overflow: auto;
+    }
+    .list li a:hover, .live li a:hover
+    {
+        text-decoration: underline;
+    }
+    .sidebar .box ul
+    {
+	padding:10px;
+    }
+    .sidebar .box ul li
+    {
+        padding-left: 12px;
+        background: url(../images/bullet_gt.png) no-repeat 0 5px;
+        margin-bottom: 5px;
+    }
+    .sidebar .bottombar
+    {
+        background: url(../images/box_bg.png) repeat-x 0 bottom;
+    }
+    .wrap
+    {
+        margin: 0 5px 0 208px;
+        overflow: visible; 
+    }
+    .offline .wrap
+    {
+        margin: 0 5px 0 5px;
+    }
+    .wrap .toolbar
+    {
+        background-color: #fafafa;
+        border-bottom: 1px solid #d1d1d1;
+        height: 20px; 
+        position: relative;
+    }
+    .wrap .toolbar .toolblock
+    {
+        position: absolute;
+    }
+    .wrap .toolbar .breadcrumb
+    {
+        font-size: 11px;
+        line-height: 1;
+        padding: 0 0 10px 21px;
+        height: 10px;
+    }
+    .wrap .toolbar .toolbuttons
+    {
+        padding: 0 0 10px 21px;
+        right: 5px;
+        vertical-align: middle;
+        overflow: hidden;
+    }
+    .wrap .toolbar .toolbuttons .active
+    {
+        color: #00732F;
+    }
+    .wrap .toolbar .toolbuttons ul
+    {
+        float: right;
+    }
+    .wrap .toolbar .toolbuttons li
+    {
+        float: left;
+        text-indent: -10px;
+        margin-top: -5px;
+        margin-right: 15px;
+        font-weight: bold;
+        color: #B0ADAB;
+    }
+
+    .toolbuttons #print
+    {
+        border-left: 1px solid #c5c4c4;
+        margin-top: 0;
+        padding-left: 7px;
+        text-indent: 0;
+    }
+    .toolbuttons #print a
+    {
+        width: 16px;
+        height: 16px;
+    }
+
+    .toolbuttons #print a span
+    {
+        width: 16px;
+        height: 16px;
+        text-indent: -999em;
+        display: block;
+        overflow: hidden;
+        background: url(../images/sprites-combined.png) no-repeat -137px -311px;
+    }
+
+    .toolbuttons #smallA
+    {
+        font-size: 10pt;
+    }
+    .toolbuttons #medA
+    {
+        font-size: 12pt;
+    }
+    .toolbuttons #bigA
+    {
+        font-size: 14pt;
+        margin-right: 7px;
+    }
+
+    #smallA:hover, #medA:hover, #bigA:hover
+    {
+        color: #00732F;
+    }
+
+    .offline .wrap .breadcrumb
+    {
+    }
+
+    .wrap .breadcrumb ul
+    {
+    }
+    .wrap .breadcrumb ul li
+    {
+        float: left;
+        background: url(../images/breadcrumb.png) no-repeat 0 3px;
+        padding-left: 15px;
+        margin-left: 15px;
+        font-weight: bold;
+    }
+    .wrap .breadcrumb ul li.last
+    {
+        font-weight: normal;
+    }
+    .wrap .breadcrumb ul li a
+    {
+        color: #363534;
+    }
+    .wrap .breadcrumb ul li.first
+    {
+        background-image: none;
+        padding-left: 0;
+        margin-left: 0;
+    }
+    .wrap .content
+    {
+        padding: 30px;
+        word-wrap: break-word;
+    }
+
+    .wrap .content li
+    {
+        padding-left: 12px;
+        background: url(../images/bullet_sq.png) no-repeat 0 5px;
+        font: normal 400 10pt/1 Verdana;
+       /* color: #44a51c;*/
+        margin-bottom: 10px; 
+    }
+    .content li:hover
+    {
+      /*  text-decoration: underline;*/
+    }
+
+    .wrap .content ol li {
+        background:none;
+        font: inherit;
+        margin-bottom:10px;
+        padding-left: 0px
+    }
+
+    .wrap .content ol li {
+        list-style-type:decimal;
+    }
+
+    .wrap .content .descr ol li {
+        margin-left: 45px;
+    }
+
+    .wrap .content {
+        padding-top: 15px;
+    }
+
+    .wrap .content ol img {
+        vertical-align: middle;
+    }
+    .wrap .content ul img {
+        vertical-align: middle;
+    }
+
+    .wrap .content h1
+    {
+        font: 600 18px/1.2 Arial;
+    }
+    .wrap .content h2
+    {
+        font: 600 16px/1.2 Arial;
+    }
+    .wrap .content h3
+    {
+        font: 600 14px/1.2 Arial;
+    }
+    .wrap .content p
+    {
+        line-height: 20px;
+        padding: 5px;
+    }
+    .wrap .content table p
+    {
+        line-height: 20px;
+        padding: 0px;
+    }	
+    .wrap .content ul
+    {
+        padding-left: 25px;
+        padding-top: 10px;
+    }
+    a:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }
+    .content a:visited
+    {
+        color: #4c0033;
+        text-decoration: none;
+    }
+     .content a:visited:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }   .footer
+    {
+        min-height: 100px;
+        color: #797775;
+        font: normal 9px/1 Verdana;
+        text-align: center;
+        padding-top: 40px;
+        background-color: #E6E7E8;
+        margin: 0;
+    }
+    .feedback
+    {
+        float: none;
+        position: absolute;
+        right: 15px;
+        bottom: 10px;
+        font: normal 8px/1 Verdana;
+        color: #B0ADAB;
+    }
+    .feedback:hover
+    {
+        float: right;
+        font: normal 8px/1 Verdana;
+        color: #00732F;
+        text-decoration: underline;
+    }
+    .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after
+    {
+        content: ".";
+        display: block;
+        height: 0;
+        clear: both;
+        visibility: hidden;
+    }
+    #nav-topright
+    {
+        height: 70px;
+    }
+
+    #nav-topright ul
+    {
+        list-style-type: none;
+        float: right;
+        width: 370px;
+        margin-top: 11px;
+    }
+
+    #nav-topright li
+    {
+        display: inline-block;
+        margin-right: 20px;
+        float: left;
+    }
+
+    #nav-topright li.nav-topright-last
+    {
+        margin-right: 0;
+    }
+
+    #nav-topright li a
+    {
+        background: transparent url(../images/sprites-combined.png) no-repeat;
+        height: 18px;
+        display: block;
+        overflow: hidden;
+        text-indent: -9999px;
+    }
+
+    #nav-topright li.nav-topright-home a
+    {
+        width: 65px;
+        background-position: -2px -91px;
+    }
+
+    #nav-topright li.nav-topright-home a:hover
+    {
+        background-position: -2px -117px;
+    }
+
+
+    #nav-topright li.nav-topright-dev a
+    {
+        width: 30px;
+        background-position: -76px -91px;
+    }
+
+    #nav-topright li.nav-topright-dev a:hover
+    {
+        background-position: -76px -117px;
+    }
+
+
+    #nav-topright li.nav-topright-labs a
+    {
+        width: 40px;
+        background-position: -114px -91px;
+    }
+
+    #nav-topright li.nav-topright-labs a:hover
+    {
+        background-position: -114px -117px;
+    }
+
+    #nav-topright li.nav-topright-doc a
+    {
+        width: 32px;
+        background-position: -162px -91px;
+    }
+
+    #nav-topright li.nav-topright-doc a:hover, #nav-topright li.nav-topright-doc-active a
+    {
+        background-position: -162px -117px;
+    }
+
+    #nav-topright li.nav-topright-blog a
+    {
+        width: 40px;
+        background-position: -203px -91px;
+    }
+
+    #nav-topright li.nav-topright-blog a:hover, #nav-topright li.nav-topright-blog-active a
+    {
+        background-position: -203px -117px;
+    }
+
+    #nav-topright li.nav-topright-shop a
+    {
+        width: 40px;
+        background-position: -252px -91px;
+    }
+
+    #nav-topright li.nav-topright-shop a:hover, #nav-topright li.nav-topright-shop-active a
+    {
+        background-position: -252px -117px;
+    }
+
+    #nav-logo
+    {
+        background: transparent url(../images/sprites-combined.png ) no-repeat 0 -225px;
+        left: -3px;
+        position: absolute;
+        width: 75px;
+        height: 75px;
+        top: 13px;
+    }
+    #nav-logo a
+    {
+        width: 75px;
+        height: 75px;
+        display: block;
+        text-indent: -9999px;
+        overflow: hidden;
+    }
+
+
+    .shortCut-topleft-inactive
+    {
+        padding-left: 3px;
+        padding-right: 3px;
+        background: transparent url( ../images/sprites-combined.png) no-repeat 0px -58px;
+        height: 20px;
+    }
+    .shortCut-topleft-inactive span
+    {
+        font-variant: normal;
+    }
+	    .shortCut-topleft-inactive span a:hover,     .shortCut-topleft-active a:hover
+	{
+		text-decoration:none;
+	}
+    #shortCut
+    {
+        padding-top: 10px;
+        font-weight: bolder;
+        color: #b0adab;
+    }
+    #shortCut ul
+    {
+        list-style-type: none;
+        float: left;
+        margin-left: 100px;
+    }
+    #shortCut li
+    {
+        display: inline-block;
+        margin-right: 25px;
+        float: left;
+        white-space: nowrap;
+    }
+    #shortCut li a
+    {
+        color: #b0adab;
+    }
+    #shortCut li a:hover
+    {
+        color: #44a51c;
+    }
+
+    hr
+    {
+        background-color: #E6E6E6;
+        border: 1px solid #E6E6E6;
+        height: 1px;
+        width: 100%;
+        text-align: left;
+        margin: 15px 0px 15px 0px;
+    }
+
+    .content .alignedsummary
+    {
+        margin: 15px;
+    }
+    pre
+    {
+        border: 1px solid #DDDDDD;
+        margin: 0 20px 10px 10px;
+        padding: 20px 15px 20px 20px;
+        overflow-x: auto;
+    }
+    table, pre
+    {
+        -moz-border-radius: 7px 7px 7px 7px;
+        background-color: #F6F6F6;
+        border: 1px solid #E6E6E6;
+        border-collapse: separate;
+        font-size: 11px;
+        /*min-width: 395px;*/
+        margin-bottom: 25px;
+        display: inline-block;
+    }
+    thead
+    {
+        margin-top: 5px;
+		font:600 12px/1.2 Arial;
+    }
+    th
+    {
+        padding: 5px 15px 5px 15px;
+        background-color: #E1E1E1;
+      /*  border-bottom: 1px solid #E6E6E6;*/
+        border-left: 1px solid #E6E6E6;
+      /*  border-right: 1px solid #E6E6E6;*/
+    }
+    td
+    {
+        padding: 3px 15px 3px 20px;
+  /*      border-left: 1px solid #E6E6E6;
+        border-right: 1px solid #E6E6E6;*/
+    }
+    tr.odd td:hover,  tr.even td:hover
+    {
+    /*    border-right: 1px solid #C3C3C3;
+        border-left: 1px solid #C3C3C3;*/
+    }
+		
+	td.rightAlign
+	{
+        padding: 3px 15px 3px 10px;
+	}
+    table tr.odd
+    {
+        border-left: 1px solid #E6E6E6;
+        background-color: #F6F6F6;
+        color: #66666E;
+    }
+    table tr.even
+    {
+        border-left: 1px solid #E6E6E6;
+        background-color: #ffffff;
+        color: #66666E;
+    }
+    table tr.odd td:hover, table tr.even td:hover
+    {
+        background-color: #E6E6E6;
+    }
+    		
+    span.comment
+    {
+        color: #8B0000;
+        font-style: italic;
+    }
+    span.string, span.char
+    {
+        color: #254117;
+    }
+
+    .qmltype
+    {
+        text-align: center;
+        font-size: 160%;
+    }
+    .qmlreadonly
+    {
+        float: right;
+        color: #254117;
+    }
+
+    .qmldefault
+    {
+        float: right;
+        color: red;
+    }
+
+    .qmldoc
+    {
+    }
+
+    *.qmlitem p
+    {
+    }
+
+    #feedbackBox
+    {
+        display: none;
+        -moz-border-radius: 7px 7px 7px 7px;
+        border: 1px solid #DDDDDD;
+        position: fixed;
+        top: 100px;
+        left: 33%;
+        height: 190px;
+        width: 400px;
+        padding: 5px;
+        background-color: #e6e7e8;
+        z-index: 4;
+    }
+    #feedcloseX 
+    {
+        display: inline;
+        padding: 5px 5px 0 0;
+        margin-bottom: 3px;
+        color: #363534;
+        font-weight: 600;
+        float: right;
+        text-decoration: none;
+    }
+
+    #feedbox
+    {
+        display: inline;
+        width: 370px;
+        height: 120px;
+        margin: 0px 25px 10px 15px;
+    }
+    #feedsubmit
+    {
+        display: inline;
+        float: right;
+        margin: 4px 32px 0 0;
+    }
+    #blurpage
+    {
+        display: none;
+        position: fixed;
+        float: none;
+        top: 0px;
+        left: 0px;
+        right: 0px;
+        bottom: 0px;
+        background: transparent url(../images/feedbackground.png) 0 0;
+        z-index: 3;
+    }
+    .toc
+    {
+        float: right;
+        -moz-border-radius: 7px 7px 7px 7px;
+        background-color: #F6F6F6;
+        border: 1px solid #DDDDDD;
+        margin: 0 20px 10px 10px;
+        padding: 20px 15px 20px 20px;
+        height: auto;
+        width: 200px;
+    }
+
+    .toc h3, .generic a
+    {
+        font: 600 12px/1.2 Arial;
+    }
+
+	.generic{
+		max-width:75%;
+	}
+	.generic td{
+		padding:0;
+	}
+	
+	.generic .odd .alphaChar{
+        background-color: #F6F6F6;
+	}
+	
+	.generic .even .alphaChar{
+        background-color: #FFFFFF;
+	}
+
+	.alignedsummary{}
+	.propsummary{}
+	.memItemLeft{}
+	.memItemRight{}
+	.bottomAlign{}
+	.highlightedCode
+	{
+	margin:10px;
+	}
+	.LegaleseLeft{}
+	.valuelist{}
+	.annotated{}
+	.obsolete{}
+	.compat{}
+	.flags{}
+	.qmlsummary{}
+	.qmlitem{}
+	.qmlproto{}
+	.qmlname{}
+	.qmlreadonly{}
+	.qmldefault{}
+	.qmldoc{}
+	.qt-style{}
+	.redFont{}
+	code{}
+	
+    .wrap .content .toc ul
+    {
+        padding-left: 0px;
+    }
+
+
+    .wrap .content .toc .level2
+    {
+        margin-left: 15px;
+    }
+
+    .wrap .content .toc .level3
+    {
+        margin-left: 30px;
+    }
+
+    .content .toc li
+    {
+        font: normal 10px/1.2 Verdana;
+        background: url(../images/bullet_dn.png) no-repeat 0 5px;
+    }
+
+    .relpage
+    {
+        -moz-border-radius: 7px 7px 7px 7px;
+        border: 1px solid #DDDDDD;
+        padding: 25px 25px;
+        clear: both;
+    }
+    .relpage ul
+    {
+        float: none;
+        padding: 15px;
+    }
+    .content .relpage li
+    {
+        font: normal 11px/1.2 Verdana;
+    }
+    h3.fn, span.fn
+    {
+        background-color: #F6F6F6;
+        border-width: 1px;
+        border-style: solid;
+        border-color: #E6E6E6;
+        font-weight: bold;
+		word-spacing:3px;
+    }
+
+	.functionIndex {
+	font-size:12pt;
+	word-spacing:10px;
+	margin-bottom:10px;
+    background-color: #F6F6F6;
+    border-width: 1px;
+    border-style: solid;
+    border-color: #E6E6E6;
+	width:100%;
+	}
+	
+	.centerAlign
+	{
+	text-align:center;	
+	}
+	
+	.rightAlign
+	{
+	text-align:right;	
+	}
+
+	
+	.leftAlign
+	{
+	text-align:left;	
+	}
+
+	.topAlign{
+	vertical-align:top
+	}
+	
+	.functionIndex a{
+	display:inline-block;
+	}
+
+    /* start index box */
+    .indexbox
+    {
+        width: 100%;
+		display:inline-block;
+    }
+
+    .indexboxcont
+    {
+        display: block;
+       /* overflow: hidden;*/
+    }
+
+    .indexboxbar
+    {
+        background: transparent url(../images/horBar.png ) repeat-x left bottom;
+        margin-bottom: 25px;
+     /*   background-image: none;
+        border-bottom: 1px solid #e2e2e2;*/
+    }
+
+    .indexboxcont .section
+    {
+        display: inline-block;
+        width: 49%; 
+        *width:42%;
+        _width:42%;
+        padding:0 2% 0 1%;
+        vertical-align:top;
+
+}
+
+    .indexboxcont .indexIcon
+    {
+        width: 11%; 
+        *width:18%;
+        _width:18%;
+        overflow:hidden;
+
+}
+
+.indexboxcont .section {
+  float: left;
+}
+
+    .indexboxcont .section p
+    {
+        padding-top: 20px;
+        padding-bottom: 20px;
+    }
+    .indexboxcont .sectionlist
+    {
+        display: inline-block;
+		vertical-align:top;
+		width: 32.5%;
+        padding: 0;
+    }
+    .indexboxcont .sectionlist ul
+    {
+        margin-bottom: 20px;
+    }
+
+    .indexboxcont .sectionlist ul li
+    {
+        line-height: 12px;
+    }
+
+    .content .indexboxcont li
+    {
+        font: normal 600 13px/1 Verdana;
+    }
+
+    .indexbox a:hover, .indexbox a:visited:hover
+    {
+        color: #4c0033;
+        text-decoration: underline;
+    }
+
+    .indexbox a:visited
+    {
+        color: #00732f;
+        text-decoration: none;
+    }
+	
+	.indexbox .indexIcon {
+	width: 11%;
+	}
+
+	
+    .indexbox .indexIcon span
+    {
+        display: block;
+    }
+    
+    .indexbox.guide .indexIcon span
+    {
+        width: 96px;
+        height: 137px;
+        background: url(../images/sprites-combined.png) no-repeat -5px -376px;
+        padding: 0;
+    }
+    
+    .indexbox.tools .indexIcon span
+    {
+        width: 115px;
+        height: 137px;
+        background: url(../images/sprites-combined.png) no-repeat -111px -376px;
+        padding: 0;
+    }
+    .indexboxcont:after
+    {
+        content: ".";
+        display: block;
+        height: 0;
+        clear: both;
+        visibility: hidden;
+    }
+	
+.sidebar .search form input.loading
+{
+        background:url("../images/spinner.gif") no-repeat scroll right center transparent;
+}
+
+    /* end of screen media */
+
+.flowList{
+vertical-align:top;
+}	
+.alphaChar{
+width:100%;
+background-color:#F6F6F6;
+border:1px solid #E6E6E6;
+font-size:12pt;
+padding-left:10px;
+margin-top:10px;
+margin-bottom:10px;
+}
+
+.flowList dl{
+}
+.flowList dd{
+display:inline-block;
+margin-left:10px;
+width:250px;
+}
+.wrap .content .flowList p{
+padding:0px;
+}
+pre.highlightedCode {
+	display: block;
+	overflow:hidden;
+}
+
+}
+/* end of screen media */
+
+/* start of print media */
+
+@media print
+{
+     input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft
+    {
+        display: none;
+        background: none;
+    }
+    .content
+    {
+        position: absolute;
+        top: 0px;
+        left: 0px;
+        background: none;
+        display: block;
+    }
+}
+/* end of print media */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/style_ie6.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,54 @@
+.indexbox, .indexboxcont, .group {
+  zoom: 1;
+  height: 1%;
+}
+
+.sidebar {
+  margin-left: 3px;
+  width: 199px;
+  overflow: hidden;
+}
+
+.sidebar .search form {
+  position: relative;
+}
+
+.sidebar .search form fieldset {
+  position: absolute;
+  margin-top: -1px;
+}
+
+.sidebar .search form input#searchstring  {
+  border: 1px solid #fff;
+  height: 18px;
+}
+
+.wrap {
+  zoom: 1;
+}
+
+.content,
+.toolbar {
+  zoom: 1;
+  margin-left: -3px;
+  position: relative;
+}
+
+.indexbox {
+  clear: both;
+}
+
+.indexboxcont .section {
+  zoom: 1;
+  float: left;
+}
+
+.indexboxcont .sectionlist {
+  zoom: 1;
+  float: left;
+}
+
+.wrap .toolbar .toolbuttons li {
+  text-indent: 0;
+  margin-right: 8px;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/style_ie7.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,19 @@
+.indexbox, .indexboxcont, .group {
+  min-height: 1px;
+}
+
+.sidebar .search form input#searchstring  {
+  border: 1px solid #fff;
+  height: 17px;
+}
+
+
+.indexboxcont .section {
+  zoom: 1;
+  float: left;
+}
+
+.indexboxcont .sectionlist {
+  zoom: 1;
+  float: left;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/superfish.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,51 @@
+.sf-menu, .sf-menu * {
+	margin:			0;
+	padding:		0;
+	list-style:		none;
+}
+.sf-menu {
+	line-height:	1.0;
+}
+.sf-menu ul {
+	position:		absolute;
+	top:			-999em;
+	width:			10em; /* left offset of submenus need to match (see below) */
+}
+.sf-menu ul li {
+	width:			100%;
+}
+.sf-menu li:hover {
+	visibility:		inherit; /* fixes IE7 'sticky bug' */
+}
+.sf-menu li {
+	float:			left;
+	position:		relative;
+}
+.sf-menu a {
+	display:		block;
+	position:		relative;
+}
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+	left:			0;
+	top:			2.5em; /* match top ul list item height */
+	z-index:		99;
+}
+ul.sf-menu li:hover li ul,
+ul.sf-menu li.sfHover li ul {
+	top:			-999em;
+}
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+	left:			10em; /* match ul width */
+	top:			0;
+}
+ul.sf-menu li li:hover li ul,
+ul.sf-menu li li.sfHover li ul {
+	top:			-999em;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+	left:			10em; /* match ul width */
+	top:			0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/doc/templates/style/superfish_skin.css	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,83 @@
+
+/*** DEMO SKIN ***/
+.sf-menu {
+	float:			left;
+	margin-bottom:	1em;
+}
+.sf-menu a {
+	border-left:	1px solid #fff;
+	border-top:		1px solid #CFDEFF;
+	padding: 		.75em 1em;
+	text-decoration:none;
+}
+.sf-menu a, .sf-menu a:visited  { /* visited pseudo selector so IE6 applies text colour*/
+	color:			#13a;
+}
+.sf-menu li {
+	background:		#BDD2FF;
+}
+.sf-menu li li {
+	background:		#AABDE6;
+}
+.sf-menu li li li {
+	background:		#9AAEDB;
+}
+.sf-menu li:hover, .sf-menu li.sfHover,
+.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
+	background:		#CFDEFF;
+	outline:		0;
+}
+
+/*** arrows **/
+.sf-menu a.sf-with-ul {
+	padding-right: 	2.25em;
+	min-width:		1px; /* trigger IE7 hasLayout so spans position accurately */
+}
+.sf-sub-indicator {
+	position:		absolute;
+	display:		block;
+	right:			.75em;
+	top:			1.05em; /* IE6 only */
+	width:			10px;
+	height:			10px;
+	text-indent: 	-999em;
+	overflow:		hidden;
+	background:		url('../images/arrows-ffffff.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+a > .sf-sub-indicator {  /* give all except IE6 the correct values */
+	top:			.8em;
+	background-position: 0 -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+	background-position: -10px -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+.sf-menu ul .sf-sub-indicator { background-position:  -10px 0; }
+.sf-menu ul a > .sf-sub-indicator { background-position:  0 0; }
+/* apply hovers to modern browsers */
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+	background-position: -10px 0; /* arrow hovers for modern browsers*/
+}
+
+/*** shadows for all but IE6 ***/
+.sf-shadow ul {
+	background:	url('../images/shadow.png') no-repeat bottom right;
+	padding: 0 8px 9px 0;
+	-moz-border-radius-bottomleft: 17px;
+	-moz-border-radius-topright: 17px;
+	-webkit-border-top-right-radius: 17px;
+	-webkit-border-bottom-left-radius: 17px;
+}
+.sf-shadow ul.sf-shadow-off {
+	background: transparent;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smartinstaller/group/bld.inf	Wed Jun 30 11:01:26 2010 +0530
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Build file for smartinstaller
+*
+*
+*/
+
+PRJ_MMPFILES
+../bootstrap/group/smartinstallerdll.mmp
+../bootstrap/group/smartinstaller.mmp
+../adm/group/ADM.mmp