[mapguide-commits] r5211 - in sandbox/maestro-3.0: Maestro.Base Maestro.Base/Commands Maestro.Base/Properties Maestro.Base/UI Maestro.Base/UI/Packaging Maestro.Login Maestro.Packaging Maestro.Packaging/Properties OSGeo.MapGuide.MaestroAPI

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Sep 29 06:46:47 EDT 2010


Author: jng
Date: 2010-09-29 10:46:47 +0000 (Wed, 29 Sep 2010)
New Revision: 5211

Added:
   sandbox/maestro-3.0/Maestro.Base/UI/Packaging/
   sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs
   sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.cs
   sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.resx
Modified:
   sandbox/maestro-3.0/Maestro.Base/Commands/CreatePackageCommand.cs
   sandbox/maestro-3.0/Maestro.Base/Commands/LoadPackageCommand.cs
   sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
   sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
   sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs
   sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx
   sandbox/maestro-3.0/Maestro.Base/UI/SiteExplorer.cs
   sandbox/maestro-3.0/Maestro.Login/LoginDialog.designer.cs
   sandbox/maestro-3.0/Maestro.Login/LoginDialog.resx
   sandbox/maestro-3.0/Maestro.Packaging/
   sandbox/maestro-3.0/Maestro.Packaging/PackageBuilder.cs
   sandbox/maestro-3.0/Maestro.Packaging/PackageProgress.cs
   sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.Designer.cs
   sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.resx
   sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Enums.cs
Log:
More sandbox changes
 - Forward-port more packaging functionality from 2.x stream. 
 - Add missing Maestro icon for Login dialog
 - Remove some un-implemented context menu commands which make so sense given the context.
 - Add a "Package" menu for our packaging commands.

Modified: sandbox/maestro-3.0/Maestro.Base/Commands/CreatePackageCommand.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Commands/CreatePackageCommand.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Commands/CreatePackageCommand.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -2,6 +2,9 @@
 using System.Collections.Generic;
 using System.Text;
 using ICSharpCode.Core;
+using Maestro.Base.UI.Packaging;
+using Maestro.Base.Services;
+using Maestro.Packaging;
 
 namespace Maestro.Base.Commands
 {
@@ -9,7 +12,34 @@
     {
         public override void Run()
         {
-            throw new NotImplementedException();
+            var wb = Workbench.Instance;
+            var exp = wb.ActiveSiteExplorer;
+            var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+
+            if (exp.SelectedItems.Length <= 1)
+            {
+                //TODO: Will need to look at this again, when we decide to support
+                //multiple connections to different sites from the same session. Right
+                //now this is fine as we can only connect to one site at any time.
+                var conn = connMgr.GetConnection(exp.ConnectionName);
+                var dlg = new CreatePackageDialog(conn);
+
+                if (exp.SelectedItems.Length == 1)
+                    dlg.FolderToPackage = exp.SelectedItems[0].ResourceId;
+
+                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    //Begin!
+                    PackageProgress.CreatePackage(
+                        wb,
+                        conn,
+                        dlg.FolderToPackage,
+                        dlg.OutputFileName,
+                        dlg.SelectedTypes,
+                        dlg.RemoveTargetFolderOnRestore,
+                        dlg.RestorePath);
+                }
+            }
         }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Base/Commands/LoadPackageCommand.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Commands/LoadPackageCommand.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Commands/LoadPackageCommand.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -2,6 +2,9 @@
 using System.Collections.Generic;
 using System.Text;
 using ICSharpCode.Core;
+using Maestro.Base.Services;
+using Maestro.Shared.UI;
+using Maestro.Packaging;
 
 namespace Maestro.Base.Commands
 {
@@ -9,7 +12,27 @@
     {
         public override void Run()
         {
-            throw new NotImplementedException();
+            var wb = Workbench.Instance;
+            var exp = wb.ActiveSiteExplorer;
+            var connMgr = ServiceRegistry.GetService<ServerConnectionManager>();
+            var conn = connMgr.GetConnection(exp.ConnectionName);
+
+            using (var open = DialogFactory.OpenFile())
+            {
+                open.Filter = Properties.Resources.Filter_Mgp_Files;
+                if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    var res = PackageProgress.UploadPackage(
+                        wb,
+                        conn,
+                        open.FileName);
+
+                    if (res == System.Windows.Forms.DialogResult.OK)
+                    {
+                        exp.RefreshModel();
+                    }
+                }
+            }
         }
     }
 }

Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin	2010-09-29 10:46:47 UTC (rev 5211)
@@ -119,6 +119,16 @@
                       icon="application_task"
                       class="Maestro.Base.Commands.NotImplementedCommand"/>
         </MenuItem>
+        <MenuItem id="Menu_Package"
+                  type="Menu"
+                  label="${res:Menu_Package}">
+            <MenuItem id="CreatePackage"
+                      label="${res:SiteExplorer_SelectedFolder_CreatePackage}"
+                      class="Maestro.Base.Commands.CreatePackageCommand" />
+            <MenuItem id="LoadPackage"
+                      label="${res:Menu_Package_LoadPackage}"
+                      class="Maestro.Base.Commands.LoadPackageCommand" />
+        </MenuItem>
         <MenuItem id="Menu_Help"
                   type="Menu"
                   label="${res:Menu_Help}">
@@ -274,9 +284,6 @@
             <MenuItem id="CreatePackage"
                       label="${res:SiteExplorer_SelectedFolder_CreatePackage}"
                       class="Maestro.Base.Commands.CreatePackageCommand" />
-            <MenuItem id="LoadPackage"
-                      label="${res:SiteExplorer_SelectedFolder_LoadPackage}"
-                      class="Maestro.Base.Commands.LoadPackageCommand" />
             <MenuItem type="Separator" />
             <Condition action="Disable" name="IsNotRoot">
                 <MenuItem id="Copy"
@@ -304,13 +311,6 @@
     <!-- Site Explorer Context Menu -->
     <Path name="/Maestro/Shell/SiteExplorer/SelectedFolders">
         <Condition action="Disable" name="MultipleSelected">
-            <MenuItem id="CreatePackage"
-                      label="${res:SiteExplorer_SelectedFolder_CreatePackage}"
-                      class="Maestro.Base.Commands.CreatePackageCommand" />
-            <MenuItem id="Delete"
-                      label="${res:SiteExplorer_SelectedItem_Delete}"
-                      class="Maestro.Base.Commands.SiteExplorer.DeleteSelectedItemsCommand" />
-            <MenuItem type="Separator" />
             <MenuItem id="Copy"
                       label="${res:SiteExplorer_SelectedItem_Copy}"
                       class="Maestro.Base.Commands.NotImplementedCommand" />
@@ -320,6 +320,10 @@
             <MenuItem id="Validate"
                       label="${res:SiteExplorer_ValidateResources}"
                       class="Maestro.Base.Commands.SiteExplorer.ValidateCommand" />
+            <MenuItem type="Separator" />
+            <MenuItem id="Delete"
+                     label="${res:SiteExplorer_SelectedItem_Delete}"
+                     class="Maestro.Base.Commands.SiteExplorer.DeleteSelectedItemsCommand" />
         </Condition>
     </Path>
 
@@ -390,10 +394,6 @@
                       label="${res:SiteExplorer_SelectedItem_Delete}"
                       class="Maestro.Base.Commands.NotImplementedCommand" />
             <MenuItem type="Separator" />
-            <MenuItem id="CreatePackage"
-                     label="${res:SiteExplorer_SelectedFolder_CreatePackage}"
-                     class="Maestro.Base.Commands.CreatePackageCommand" />
-            <MenuItem type="Separator" />
             <MenuItem id="Copy"
                       label="${res:SiteExplorer_SelectedItem_Copy}"
                       class="Maestro.Base.Commands.NotImplementedCommand" />

Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj	2010-09-29 10:46:47 UTC (rev 5211)
@@ -207,6 +207,12 @@
     <Compile Include="UI\OutboundRequestViewer.Designer.cs">
       <DependentUpon>OutboundRequestViewer.cs</DependentUpon>
     </Compile>
+    <Compile Include="UI\Packaging\CreatePackageDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\Packaging\CreatePackageDialog.Designer.cs">
+      <DependentUpon>CreatePackageDialog.cs</DependentUpon>
+    </Compile>
     <Compile Include="UI\RenameItemDialog.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -367,6 +373,9 @@
     <EmbeddedResource Include="UI\OutboundRequestViewer.resx">
       <DependentUpon>OutboundRequestViewer.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="UI\Packaging\CreatePackageDialog.resx">
+      <DependentUpon>CreatePackageDialog.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="UI\RenameItemDialog.resx">
       <DependentUpon>RenameItemDialog.cs</DependentUpon>
     </EmbeddedResource>
@@ -403,6 +412,10 @@
       <Project>{07588440-5F9F-4C30-AA06-9CF30BA6DDE6}</Project>
       <Name>Maestro.Login</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Maestro.Packaging\Maestro.Packaging.csproj">
+      <Project>{0EA33E36-9C33-4D60-B378-B87FADAA0F40}</Project>
+      <Name>Maestro.Packaging</Name>
+    </ProjectReference>
     <ProjectReference Include="..\Maestro.Shared.UI\Maestro.Shared.UI.csproj">
       <Project>{CFD19053-2172-41D3-8460-0FD2123A1E88}</Project>
       <Name>Maestro.Shared.UI</Name>

Modified: sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -441,6 +441,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to MapGuide Package File (*.mgp)|*.mgp.
+        /// </summary>
+        internal static string Filter_Mgp_Files {
+            get {
+                return ResourceManager.GetString("Filter_Mgp_Files", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Autodesk SDF (*.sdf)|*.sdf.
         /// </summary>
         internal static string Filter_Sdf_Files {
@@ -697,6 +706,24 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Package.
+        /// </summary>
+        internal static string Menu_Package {
+            get {
+                return ResourceManager.GetString("Menu_Package", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Load Package.
+        /// </summary>
+        internal static string Menu_Package_LoadPackage {
+            get {
+                return ResourceManager.GetString("Menu_Package_LoadPackage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Tools.
         /// </summary>
         internal static string Menu_Tools {
@@ -1057,15 +1084,6 @@
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Load Package into this folder.
-        /// </summary>
-        internal static string SiteExplorer_SelectedFolder_LoadPackage {
-            get {
-                return ResourceManager.GetString("SiteExplorer_SelectedFolder_LoadPackage", resourceCulture);
-            }
-        }
-        
-        /// <summary>
         ///   Looks up a localized string similar to Paste into this folder.
         /// </summary>
         internal static string SiteExplorer_SelectedFolder_Paste {

Modified: sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx	2010-09-29 10:46:47 UTC (rev 5211)
@@ -346,8 +346,8 @@
   <data name="SiteExplorer_SelectedFolder_CreatePackage" xml:space="preserve">
     <value>Package folder</value>
   </data>
-  <data name="SiteExplorer_SelectedFolder_LoadPackage" xml:space="preserve">
-    <value>Load Package into this folder</value>
+  <data name="Menu_Package_LoadPackage" xml:space="preserve">
+    <value>Load Package</value>
   </data>
   <data name="SiteExplorer_SelectedFolder_Paste" xml:space="preserve">
     <value>Paste into this folder</value>
@@ -646,4 +646,10 @@
   <data name="Content_OutboundRequests" xml:space="preserve">
     <value>Outbound Requests</value>
   </data>
+  <data name="Filter_Mgp_Files" xml:space="preserve">
+    <value>MapGuide Package File (*.mgp)|*.mgp</value>
+  </data>
+  <data name="Menu_Package" xml:space="preserve">
+    <value>Package</value>
+  </data>
 </root>
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -0,0 +1,287 @@
+namespace Maestro.Base.UI.Packaging
+{
+    partial class CreatePackageDialog
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.BrowseTargetFilename = new System.Windows.Forms.Button();
+            this.txtPackageFilename = new System.Windows.Forms.TextBox();
+            this.label3 = new System.Windows.Forms.Label();
+            this.chkAllowedTypes = new System.Windows.Forms.CheckedListBox();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtRestorePath = new System.Windows.Forms.TextBox();
+            this.chkRestorePath = new System.Windows.Forms.CheckBox();
+            this.chkRemoveTargetFolderOnRestore = new System.Windows.Forms.CheckBox();
+            this.BrowseResourcePath = new System.Windows.Forms.Button();
+            this.txtResourcePath = new System.Windows.Forms.TextBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.btnOK = new System.Windows.Forms.Button();
+            this.lnkAll = new System.Windows.Forms.LinkLabel();
+            this.btnBrowseRestorePath = new System.Windows.Forms.Button();
+            this.panel1.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.btnBrowseRestorePath);
+            this.panel1.Controls.Add(this.lnkAll);
+            this.panel1.Controls.Add(this.BrowseTargetFilename);
+            this.panel1.Controls.Add(this.txtPackageFilename);
+            this.panel1.Controls.Add(this.label3);
+            this.panel1.Controls.Add(this.chkAllowedTypes);
+            this.panel1.Controls.Add(this.label2);
+            this.panel1.Controls.Add(this.txtRestorePath);
+            this.panel1.Controls.Add(this.chkRestorePath);
+            this.panel1.Controls.Add(this.chkRemoveTargetFolderOnRestore);
+            this.panel1.Controls.Add(this.BrowseResourcePath);
+            this.panel1.Controls.Add(this.txtResourcePath);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(487, 250);
+            this.panel1.TabIndex = 0;
+            // 
+            // BrowseTargetFilename
+            // 
+            this.BrowseTargetFilename.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.BrowseTargetFilename.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.BrowseTargetFilename.Location = new System.Drawing.Point(451, 36);
+            this.BrowseTargetFilename.Name = "BrowseTargetFilename";
+            this.BrowseTargetFilename.Size = new System.Drawing.Size(24, 20);
+            this.BrowseTargetFilename.TabIndex = 35;
+            this.BrowseTargetFilename.Text = "...";
+            this.BrowseTargetFilename.UseVisualStyleBackColor = true;
+            this.BrowseTargetFilename.Click += new System.EventHandler(this.BrowseTargetFilename_Click);
+            // 
+            // txtPackageFilename
+            // 
+            this.txtPackageFilename.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtPackageFilename.Location = new System.Drawing.Point(123, 36);
+            this.txtPackageFilename.Name = "txtPackageFilename";
+            this.txtPackageFilename.Size = new System.Drawing.Size(322, 20);
+            this.txtPackageFilename.TabIndex = 34;
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label3.Location = new System.Drawing.Point(11, 43);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(89, 13);
+            this.label3.TabIndex = 33;
+            this.label3.Text = "Output File Name";
+            // 
+            // chkAllowedTypes
+            // 
+            this.chkAllowedTypes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                        | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.chkAllowedTypes.CheckOnClick = true;
+            this.chkAllowedTypes.FormattingEnabled = true;
+            this.chkAllowedTypes.Location = new System.Drawing.Point(11, 140);
+            this.chkAllowedTypes.Name = "chkAllowedTypes";
+            this.chkAllowedTypes.Size = new System.Drawing.Size(464, 94);
+            this.chkAllowedTypes.TabIndex = 32;
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label2.Location = new System.Drawing.Point(11, 124);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(173, 13);
+            this.label2.TabIndex = 31;
+            this.label2.Text = "Include these types in the package";
+            // 
+            // txtRestorePath
+            // 
+            this.txtRestorePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtRestorePath.Enabled = false;
+            this.txtRestorePath.Location = new System.Drawing.Point(123, 66);
+            this.txtRestorePath.Name = "txtRestorePath";
+            this.txtRestorePath.Size = new System.Drawing.Size(322, 20);
+            this.txtRestorePath.TabIndex = 30;
+            // 
+            // chkRestorePath
+            // 
+            this.chkRestorePath.AutoSize = true;
+            this.chkRestorePath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.chkRestorePath.Location = new System.Drawing.Point(11, 68);
+            this.chkRestorePath.Name = "chkRestorePath";
+            this.chkRestorePath.Size = new System.Drawing.Size(87, 17);
+            this.chkRestorePath.TabIndex = 29;
+            this.chkRestorePath.Text = "Restore path";
+            this.chkRestorePath.UseVisualStyleBackColor = true;
+            this.chkRestorePath.CheckedChanged += new System.EventHandler(this.chkRestorePath_CheckedChanged);
+            // 
+            // chkRemoveTargetFolderOnRestore
+            // 
+            this.chkRemoveTargetFolderOnRestore.AutoSize = true;
+            this.chkRemoveTargetFolderOnRestore.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.chkRemoveTargetFolderOnRestore.Location = new System.Drawing.Point(11, 92);
+            this.chkRemoveTargetFolderOnRestore.Name = "chkRemoveTargetFolderOnRestore";
+            this.chkRemoveTargetFolderOnRestore.Size = new System.Drawing.Size(197, 17);
+            this.chkRemoveTargetFolderOnRestore.TabIndex = 28;
+            this.chkRemoveTargetFolderOnRestore.Text = "Remove target folder when restoring";
+            this.chkRemoveTargetFolderOnRestore.UseVisualStyleBackColor = true;
+            // 
+            // BrowseResourcePath
+            // 
+            this.BrowseResourcePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.BrowseResourcePath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.BrowseResourcePath.Location = new System.Drawing.Point(451, 12);
+            this.BrowseResourcePath.Name = "BrowseResourcePath";
+            this.BrowseResourcePath.Size = new System.Drawing.Size(24, 20);
+            this.BrowseResourcePath.TabIndex = 27;
+            this.BrowseResourcePath.Text = "...";
+            this.BrowseResourcePath.UseVisualStyleBackColor = true;
+            this.BrowseResourcePath.Click += new System.EventHandler(this.BrowseResourcePath_Click);
+            // 
+            // txtResourcePath
+            // 
+            this.txtResourcePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtResourcePath.Location = new System.Drawing.Point(123, 12);
+            this.txtResourcePath.Name = "txtResourcePath";
+            this.txtResourcePath.ReadOnly = true;
+            this.txtResourcePath.Size = new System.Drawing.Size(322, 20);
+            this.txtResourcePath.TabIndex = 26;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.label1.Location = new System.Drawing.Point(11, 16);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(93, 13);
+            this.label1.TabIndex = 25;
+            this.label1.Text = "Folder to package";
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.btnCancel);
+            this.panel2.Controls.Add(this.btnOK);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.panel2.Location = new System.Drawing.Point(0, 250);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(487, 47);
+            this.panel2.TabIndex = 1;
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(400, 12);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(75, 23);
+            this.btnCancel.TabIndex = 1;
+            this.btnCancel.Text = "Cancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // btnOK
+            // 
+            this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnOK.Location = new System.Drawing.Point(319, 12);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(75, 23);
+            this.btnOK.TabIndex = 0;
+            this.btnOK.Text = "OK";
+            this.btnOK.UseVisualStyleBackColor = true;
+            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+            // 
+            // lnkAll
+            // 
+            this.lnkAll.AutoSize = true;
+            this.lnkAll.Location = new System.Drawing.Point(190, 124);
+            this.lnkAll.Name = "lnkAll";
+            this.lnkAll.Size = new System.Drawing.Size(51, 13);
+            this.lnkAll.TabIndex = 37;
+            this.lnkAll.TabStop = true;
+            this.lnkAll.Text = "Select All";
+            this.lnkAll.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkAll_LinkClicked);
+            // 
+            // btnBrowseRestorePath
+            // 
+            this.btnBrowseRestorePath.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnBrowseRestorePath.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.btnBrowseRestorePath.Location = new System.Drawing.Point(451, 66);
+            this.btnBrowseRestorePath.Name = "btnBrowseRestorePath";
+            this.btnBrowseRestorePath.Size = new System.Drawing.Size(24, 20);
+            this.btnBrowseRestorePath.TabIndex = 38;
+            this.btnBrowseRestorePath.Text = "...";
+            this.btnBrowseRestorePath.UseVisualStyleBackColor = true;
+            this.btnBrowseRestorePath.Click += new System.EventHandler(this.btnBrowseRestorePath_Click);
+            // 
+            // CreatePackageDialog
+            // 
+            this.AcceptButton = this.btnOK;
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.CancelButton = this.btnCancel;
+            this.ClientSize = new System.Drawing.Size(487, 297);
+            this.ControlBox = false;
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.panel2);
+            this.Name = "CreatePackageDialog";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "Create Package";
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.panel2.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.Button btnCancel;
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.Button BrowseTargetFilename;
+        private System.Windows.Forms.TextBox txtPackageFilename;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.CheckedListBox chkAllowedTypes;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtRestorePath;
+        private System.Windows.Forms.CheckBox chkRestorePath;
+        private System.Windows.Forms.CheckBox chkRemoveTargetFolderOnRestore;
+        private System.Windows.Forms.Button BrowseResourcePath;
+        private System.Windows.Forms.TextBox txtResourcePath;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.LinkLabel lnkAll;
+        private System.Windows.Forms.Button btnBrowseRestorePath;
+    }
+}
\ No newline at end of file

Added: sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.cs	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -0,0 +1,208 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+// 
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+// 
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Editors.Generic;
+using Maestro.Shared.UI;
+
+namespace Maestro.Base.UI.Packaging
+{
+    public partial class CreatePackageDialog : Form
+    {
+        public CreatePackageDialog()
+        {
+            InitializeComponent();
+        }
+
+        private IServerConnection _conn;
+
+        public CreatePackageDialog(IServerConnection conn)
+            : this()
+        {
+            _conn = conn;
+        }
+
+        protected override void OnLoad(EventArgs e)
+        {
+            var caps = _conn.Capabilities;
+            foreach (var rt in SiteResourceType.All())
+            {
+                if (caps.IsSupportedResourceType(rt))
+                {
+                    chkAllowedTypes.Items.Add(rt, true);
+                }
+            }
+            CheckAll(true);
+            chkRestorePath_CheckedChanged(this, EventArgs.Empty);
+            CheckSubmitState();
+        }
+
+        public string FolderToPackage
+        {
+            get { return txtResourcePath.Text; }
+            set 
+            { 
+                txtResourcePath.Text = value;
+                CheckSubmitState();
+            }
+        }
+
+        public string OutputFileName
+        {
+            get { return txtPackageFilename.Text; }
+            set 
+            { 
+                txtPackageFilename.Text = value; 
+                CheckSubmitState(); 
+            }
+        }
+
+        public string RestorePath
+        {
+            get { return chkRestorePath.Checked ? GetRestorePath() : string.Empty; }
+            set
+            {
+                if (chkRestorePath.Checked)
+                {
+                    txtRestorePath.Text = value; 
+                    CheckSubmitState();
+                }
+            }
+        }
+
+        private string GetRestorePath()
+        {
+            var path = txtRestorePath.Text.Trim();
+            return path;
+        }
+
+        public bool RemoveTargetFolderOnRestore
+        {
+            get { return chkRemoveTargetFolderOnRestore.Checked; }
+            set 
+            { 
+                chkRemoveTargetFolderOnRestore.Checked = value;
+                CheckSubmitState();
+            }
+        }
+
+        public ResourceTypes[] SelectedTypes
+        {
+            get
+            {
+                List<ResourceTypes> rts = new List<ResourceTypes>();
+                foreach (var obj in chkAllowedTypes.CheckedItems)
+                {
+                    rts.Add((ResourceTypes)obj);
+                }
+                return rts.ToArray();
+            }
+            set
+            {
+                CheckAll(false);
+                foreach (var rt in value)
+                {
+                    var idx = chkAllowedTypes.Items.IndexOf(rt);
+                    if (idx >= 0)
+                        chkAllowedTypes.SetItemChecked(0, true);
+                }
+                CheckSubmitState();
+            }
+        }
+
+        private void BrowseResourcePath_Click(object sender, EventArgs e)
+        {
+            using (var picker = new ResourcePicker(_conn.ResourceService))
+            {
+                picker.SelectFoldersOnly = true;
+                if (picker.ShowDialog() == DialogResult.OK)
+                {
+                    this.FolderToPackage = picker.ResourceID;
+                }
+            }
+        }
+
+        private void BrowseTargetFilename_Click(object sender, EventArgs e)
+        {
+            using (var dlg = DialogFactory.SaveFile())
+            {
+                dlg.Filter = Properties.Resources.Filter_Mgp_Files;
+                if (dlg.ShowDialog() == DialogResult.OK)
+                {
+                    this.OutputFileName = dlg.FileName;
+                }
+            }
+        }
+
+        private void lnkAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            CheckAll(true);
+        }
+
+        private void CheckAll(bool chk)
+        {
+            for (int i = 0; i < chkAllowedTypes.Items.Count; i++)
+            {
+                chkAllowedTypes.SetItemChecked(i, chk);
+            }
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.Cancel;
+        }
+
+        private void btnOK_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.OK;
+        }
+
+        private void chkRestorePath_CheckedChanged(object sender, EventArgs e)
+        {
+            txtRestorePath.Enabled = btnBrowseRestorePath.Enabled = chkRestorePath.Checked;
+        }
+
+        void CheckSubmitState()
+        {
+            btnOK.Enabled =
+                txtResourcePath.Text.Length > 0 &&
+                txtPackageFilename.Text.Length > 0 &&
+                SelectedTypes.Length > 0;
+        }
+
+        private void btnBrowseRestorePath_Click(object sender, EventArgs e)
+        {
+            using (var picker = new ResourcePicker(_conn.ResourceService))
+            {
+                picker.SelectFoldersOnly = true;
+                if (picker.ShowDialog() == DialogResult.OK)
+                {
+                    this.FolderToPackage = picker.ResourceID;
+                }
+            }
+        }
+    }
+}

Added: sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.resx	                        (rev 0)
+++ sandbox/maestro-3.0/Maestro.Base/UI/Packaging/CreatePackageDialog.resx	2010-09-29 10:46:47 UTC (rev 5211)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Modified: sandbox/maestro-3.0/Maestro.Base/UI/SiteExplorer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/UI/SiteExplorer.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Base/UI/SiteExplorer.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -123,6 +123,7 @@
                 trvResources.SelectedNode = node;
             }
             _model.Refresh();
+            trvResources.Root.Children[0].Expand();
         }
 
         private void trvResources_MouseDoubleClick(object sender, MouseEventArgs e)

Modified: sandbox/maestro-3.0/Maestro.Login/LoginDialog.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Login/LoginDialog.designer.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Login/LoginDialog.designer.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -28,6 +28,7 @@
         /// </summary>
         private void InitializeComponent()
         {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginDialog));
             this.chkSavePassword = new System.Windows.Forms.CheckBox();
             this.btnCancel = new System.Windows.Forms.Button();
             this.btnOK = new System.Windows.Forms.Button();
@@ -101,7 +102,7 @@
             this.loginPanel.Size = new System.Drawing.Size(374, 160);
             this.loginPanel.TabIndex = 18;
             // 
-            // FormLogin
+            // LoginDialog
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
@@ -113,9 +114,10 @@
             this.Controls.Add(this.btnCancel);
             this.Controls.Add(this.btnOK);
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
             this.MaximizeBox = false;
             this.MinimizeBox = false;
-            this.Name = "FormLogin";
+            this.Name = "LoginDialog";
             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
             this.Text = "Log on to a MapGuide Server";
             this.ResumeLayout(false);

Modified: sandbox/maestro-3.0/Maestro.Login/LoginDialog.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Login/LoginDialog.resx	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Login/LoginDialog.resx	2010-09-29 10:46:47 UTC (rev 5211)
@@ -117,4 +117,508 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        AAD8PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAATDwgACxsFABgS
+        BwAADhMAARYdACUOCgA2FQ4AKhUUADwQEAAMIwsAGD8GABkkEQARMhUANigIAD8wDgAnIxQANioXAAAd
+        JwAMJy0AAiw6ADYvIQAuOCwANTMvACAwMQBFHhUAQT42ABpQGgAkWQIAI0sQACx0DAA1dwYAK3kYAD5+
+        HwATUC4AJF8kADhcLAAebDsAJX44AGxTGwBCfA4AUkQjAFpXOQABOUgAAkFPAAFDVgASSlYAGndJABdy
+        WQA2Zl4AKn1VAAFVcAA9WGwAEm5hABBzZQAEYXkAGmF5AAlzfQA/YHcAUk1OAHxRUwBRcEMAemZWAExV
+        YwBlYmEAnCwqAJ8wKwCMLzEAnjAwAKQ3KwCjOjYArEEsALJKLAC3US8ArEY3ALJMNQC4VTcAiG83AKtK
+        RQCrUUkAtVdHAK9UUwCyW1kAkXxAAK1kTQC7ZVQAn312ALhmYwC/cGUAu3l3AMVyVwDEeGkAwnx5ADeI
+        BgA3jRMAOJIXADWNKQA4myYAKogzADWYPgA5ozcAQ4sLAEmOEgBViRgATZIYAFaUGQBnmR8AW5ooAFeL
+        OQBmmyUAcZ8qAGiaNwB0oS0AZ6A1AHmmOgAbg18AIYZMADWeQQAkjVQAKptbADmsRwAuoFgAG4ZmAC6D
+        awAklWUAd5NTAHalSgBWgn8AfZ9hAHaZdwCIqTkA/LkeAMyfOADcoygA26k6AOerJgDssS0A/rwnAOKs
+        MwDvuj0A/78wAP7BNwCZnksAmZpWAK+OQgCzkkkAvJ9eAImsRACXsEgAiKhcALi3RQCtrV8AoLlcALK7
+        WQCtmnsAt5pzAIKlZgCapW0AmbhhAJuwfACjoWoAqLFpAKugdwDJoEEA3KxEAN+xTADEt1kA2rFWAOm5
+        TgDnulcAyoVrAMqIdQDQjnoAw5J2ANCQfQDBtmgA1L1tAOi/ZAC6wmgAvMVzAMvDXgD+xkYA/MpXAP/Q
+        XgDHxGcA2sVpANnNdgDpxWkA+8xjAP3QaQDnyXsA8ct3AOzRcwD91HYAAmiIAAd2iAAAbpMAB3GRABp5
+        kwAle4gARWyCAGR6iAAvgpMAR4aBAG6VigB5o5YAup2FAI6nhACYqYUAjKyaALihhwCttYUAurCFAKq4
+        lwC/v58AyImGAMqUiQDUmYgAzZSSANOckwDLo4YAz6yfANillwDfsqMA47+zAKnGgQC9xJ8AxMeMAN3H
+        jADFyZUA2suTAM3UlgDc15MA59OFAPzYhgDv3JsA+9uTAP3hnADLwqQA1sOkANnYpQDWzrQA7d6sAOfG
+        uADs1roA+N+yANfgtQD946cA/ui5ANrSyQDu08MA89zGAPvpxQD56dMA/vHVAP///wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAA2tfX2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxOQkJC
+        QkJERERBRE5ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdOQkJCSlJc19ra11tSREFEQUbX
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXR0ZQW976/vz39+3t7ff8/vTXT0RERNcAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAE5HT62VaOfsu6mlpIaGpKSoscHt/PNXREFGAAAAAAAAAAAAAAAAAAAAAAAAAADX
+        R0JY02VeXiiOp6SKiIiIiIeFhYWkqer481FBRNcAAAAAAAAAAAAAAAAAAAAAAFhHRdv+nl1jY2Afgry1
+        jY2MjIyJiYiHhYWp6vzXREFXAAAAAAAAAAAAAAAAAAAAVUVL8/jqlx5jeHhkXZS3tY2NjY2MjImDiYeH
+        irz34EZEUQAAAAAAAAAAAAAAAABYR07797+nsF1keHh4ZGWZt7W1jY2NjIyJiYODh4eo9/FXRFcAAAAA
+        AAAAAAAAANdHS/v3u6m2wW5eeHh4eGRdlMG1tY2NjY2MiYmDg4OHu2aVUkFcAAAAAAAAAAAAAEdK8/i7
+        sba2vbpdeHh4eHhkXW7AtrW1jY2MjImJg4ODqGddnU9EAAAAAAAAAAAAUEfe+L+xtry8vexlZHh4eHh4
+        eF5wwbW1jY2NjYyJiYODtmVeXZpGRgAAAAAAAABWBwYXFRERERERERUCCg0jeHh4eHhduLe1oycPDg4O
+        Dg4OEQICAgwICVkAAAAAAAAZAAAAAAAAAAAAAAAAAAAADXh4eHhhasGjAwAAAAAAAAAAAAAAAAAAAEMA
+        AAAAANgZEhISEhISEhISEhISEgUACnV4eHh4XbqQAAQFEhISEhISEhISEhISBUPXAAAAAEvExMTExMTE
+        xMTExMTExMTCMHh4eGRfXbKxMcTExMTExMTExMTExMTExDRGAAAAAEjExMTExMTExMTExMTExMTExXhk
+        ZWWUsuqwxcTFxMTExMTExMTExMTExDpEAAAAq0jExMTExMTExMTExMTExMTFfGQfoeS+u7G7gcXExMTE
+        xMTExMTExMTExMhEWQAAUEj54p/FxMTExMTCMnR3d3l4dQsAAQAAAQGRvLGvnyZ2NsXExMTExMN8YpxO
+        RgAASEz+7b7FxMTExMQ4IWF4eGRkHAAEBAQEBAQQp7e9gl94JcLExMTExMN4ZHFXRAAASFv+7L7FxMTE
+        xMQ3Hl1dXV0fAS3ExMTExMQrKbbqXmR4JcLExMTExMN4ZF3XRAAASK786r7FxMTExMQ3bOPw8PQaK8TE
+        xMTExMTEFE3pXWR4JcTFxMTExMN4eF2tRADZSN746unFxMTExMQ31vj49T4UxMTExMTExMTEwhOSgl94
+        JcLExMTExMN4eF3SRNeuSN/46unFxMTExMTC7vj4mhPCxMTExMTExMTExDcWr2VfJcLExMTExMNfX13S
+        RlyuSN/495XFxMTExMTCleXuGDfExMTExMTExMTExMQzKrlqI8LExMTExMeWgnDdQlzZSN78k17ExMTE
+        xMU3Hm87M8TExMTExMrKxMTExMTEM1OyG8LExMTExMe2wfjeQtcASN7hXV3ExMTExMQ3IB0zxMTExMTE
+        yubjxsXExMTExC6OIzfExMTExMpqamveQgAASdldXV3ExMTExMQ3JSvExMTExMTG5ezq08bExMTExMQi
+        G8LExMTExDldX12tRAAASatlYXXExMTExMQ3K8TExMTExMXV7Orq6s/ExMTExMTCK8LExMTExDlkYWtY
+        RAAATFpvYXjExMTExMTExMTExMTExNHs7Orqwb/MxMTExMTEwsTExMTExMN4X5VPSgAAqlCPXXnFxMTE
+        xMTExMTExMTEe/L37OrqwcG8y8TExMTExMTExMTExMN4XaJKWAAAAEytXWTExMTExMTExMTExMQ2XWVy
+        6+rBwcG9ucfExMTExMTExMTExDlfaK1CAAAAAExUJCLFxMTExMTExMTExDl1ZGFds+rBwby8t6bCxcTE
+        xMTExMTExDkbPU9GAAAAAK04xMTExMTExMTExMTExXl4ZF2T7MHBvby3traPwsTExMTExMTExMTExD9Z
+        AAAAAADExMTExMTExMTExMTEdnh4X3LswcHBwby2trW1fcTExMTExMTExMTExDQAAAAAAADGxMTExMTE
+        xMTExMQlZF1dXenBwemTmcG3tbW1izHExMTExMTExMTExMwAAAAAAAAAPkB/L3p6ejLNgdBoXWVllOrB
+        6WhfXbC3t7W1jYZ9fYB9gICBzck7PAAAAAAAAAAAAElbcl54ZGbqweqZZmVdaerqlF54YWWUu7e1jIyM
+        iYmDibXq+kpHAAAAAAAAAAAAAKtJqm9deF1xuOxyXWFfXXHqaV94eGRfZYK5toyDiYOMter7T0dcAAAA
+        AAAAAAAAAABaTKtvXWRdXWqyXWRhZYLqgl14eHh4ZF9dpo2JjIy16vtVR1UAAAAAAAAAAAAAAAAAWkyq
+        cl1dXV3pal1dmb3Ba2F4eHh4eHhfcLWMjbf3+lBFUAAAAAAAAAAAAAAAAAAAAFpMW9T2aF3pcG24vbe5
+        XXh4eHh4eHhkZbS3wfjfS0dVAAAAAAAAAAAAAAAAAAAAAACqSUzZcl3o7cHBwcFuX3h4eHh4eHh4X4L4
+        +6pHR1sAAAAAAAAAAAAAAAAAAAAAAAAAAExMWtz9+PiYZWhdeHh4eHh4ZGFlZZXeS0dKAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAACsSUlMqvOTXV1dXV9dX2VdZnKdrVVLR1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAKpMSUxarZuboaCgoZubq1pMS0urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtMSUlM
+        TExMTExJSEtYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADerKurrNkAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///w///8AAP//gAH//wAA//wAAD//AAD/8AAAD/8AAP/gAAAH/wAA/4AAAAH/
+        AAD/AAAAAP8AAP4AAAAAfwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAPAADgAAAAAAcAAOAA
+        AAAABwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB
+        AACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAACAAAAAAAEAAIAA
+        AAAAAQAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAH
+        AADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/g
+        AAAH/wAA//AAAA//AAD//AAAP/8AAP//gAH//wAA///4H///AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAoIBAAcCwkACRcGABIXBQAAExkAJBsJACQcEwAkIR0AAiYtABkv
+        LgAeMjYAXyIkABxJCwApYw0ANW0SABpPIQANTj4AIGQkACp9NABYRBcARUgxAGpGPwB6YiwAB05VAB9X
+        XgAee0cADWNZAANXawAAV3QALF52ABZmYAADYXgAHm97AAhxegAmbnEASU5FAHlFRQBWe18Af3RLAJws
+        LACfMzIAojUtAKc7LgCpPi8Aozk3AKxCLQCySS4ArEQzAKZBPgCqRDkAr0s7ALJMNAC6VzcAh0hIAINb
+        TgCnRkUAqUZDAKtJQwC4XUkAr1ZWALJbWQCUdE0AvWRNALdhVwC2Yl8AuGVeAKFwXACwdV8AhH9uALZk
+        YgC6amUAumxrAL9wZQC/f2MAtXdrAL5xawCyf2wAvXJwAMFpTADBbFUAw3NYAMBxZADGemQAxHpsAMl+
+        aADCenYAwXt5ADeGAAA3iQYAPIgFADSECAA7gw8AN4oMADuLCwA2jhIAPI4SADiTGAA4miYAKIY0AC+R
+        NQA2mDAANZY/ADabOAA5oC8AOqc+AEWMDABEjBMASIkWAEaRFQBUkxoAV44iAFiXIgBCjDYAYJAiAGad
+        KAB/misAZZ02AHGWOQB5pDUAJIRAADKFQQAql1UAMJ9RADqrRwAuoFkAMaRUACaWYABimkQAfpNAAHSd
+        QQB6mEcAZ4VqAIalNQD7uB4A3KUuAN+sOwDtriMA4KcqAOOqLADxsSEA/rskAP6+LADjqzEA7LQyAP/A
+        MwD/wToAiJlHAImWVwCZnFwApp9HALGQRwCrjF4ArZtWAIyvVQCKtFwAnLZUAKaiTwCmtEkAsrdKAKW3
+        VAC4u1IAs7xZALq6XACaj2EAt4diAJa2ZwCup2YAuK5jAKayYAC/tm4A3K1CAMi7RgDes1UA6rpMAOm9
+        WQDKgGgAy4d0AMOxYADlvGYAxsFZAP7EQgD/x0gA/chLAOzIVwD8ylcAycNhANzGaADJyHMA1sd1AO3A
+        YAD+zmIA/dFrAO3MegD2z3YA6NF4APzUeQACZ4cABXOJABZ2jQAAbpMABHCSAC1rhgA8eYUAPHeQADKB
+        igBSj4wARY2WAGWalQB3oJAAioiKAImpkwClsoQAtreDAMuOigDOkIQA0paFANSZhQDUnI4Ay5GSANKc
+        kwDIqY8A1qGRANmmlgDfsJkA2rymAMnPkQDlyoIA8c+CAOvSgwDz1IIA/taDAPXVigD+2owA69mWAPTX
+        kwD62pIA+dyZANvLpQDnwawA6MSpAOzJqwDk3KkA6siwAPLXtwD23bMA9t67AO/hpwD74qYA/eSsAP7m
+        sgD75roA/ei4AOHbxAD+68EA////AAAAAAAAAAAAAAAAAAAAV0hIVwAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAEwqKjpCTExBOSgoSAAAAAAAAAAAAAAAAAAAAAAAAEAyRN32+evk5Oj49d89KDwAAAAAAAAAAAAA
+        AAAAANwrTINgb7Krj4+Li4eIr+zwPSjbAAAAAAAAAAAAAABULN77XGZna6G1kpGRjo2Jiq7t2ihIAAAA
+        AAAAAAAAVDDv7LNyfHx8bru1kpKRjo6NjI/C4ThIAAAAAAAAANww7+ivuaJhfHxpbbS5kpKRjo2NhpCF
+        lDHbAAAAAAAALt/svr+/5mF8fHx8YaG5tZKRjo2NjXRdpCkAAAAAABYCCAcGBwYHAwMQfHx8bcCrFAYG
+        BgYGBAMDAjYAAAAABwUFBQUFBQUFBQFjfHxonxcBBQUFBQUFBQUFDAAAAFPIyMjIyMjIyMjIxXtpYmGf
+        p8XIyMjIyMjIyMgeRgAAL8jIyMjIyMjIyMjGe2yp48Oqx8jIyMjIyMjIyMopAAAv/dXJyMjIIWN9fnwN
+        AAEAAZe+vXF6IMjIyMl+gDgA2j/+5MnIyMgbYWFhDgkcHB0cCq26YXwcyMjIxnxtRtaxsPrkycjIyB/i
+        8u4LxcjIyMjFFaNiaSDIyMjJfGFLTlOx+eTJyMjIy/v1JCDIyMjIyMggJ3BlHMjIycZiYU1GU7H7m8jI
+        yMgjpkUdyMjIyMjIyMgcmXIcyMjJx6ycV0exsaZeycjIyBsPHMjIyMjT0cjIyMgZkxzIyMnHhZxXTN6w
+        XmHJyMjIHBjIyMjI0OzozsjIyMgRHMjIycZhbUTbAE9ufMjIyMjFycjIyM/r7ObBzcjIyMXFyMjJxnx1
+        MwAANYFnyMjIyMjIyMgipurpxMS7x8jIyMjIyMnGYpQsAABTPhLIyMjIyMjIyWRhcOnEwL+oyMjIyMjI
+        yckOQ0IAAADFyMjIyMnJych6fGG8xMS/ubmUyMjIyMjJyMgeAAAAAMnIyMjIycnIGmhhnMTkosK5t7Um
+        yMjIyMnJyMwAAAAAADeEeH951NVwXlrD53NhhcC3kpCdnZad1NIlAAAAAAAA2U92aGGg6HdhYYW9YXxi
+        bZ64kY2NjsDxNNcAAAAAAAAAsFF2YV1tnGFhnsNefHx8aG23jpHA8TNEAAAAAAAAAAAAsE+Vm168bp+/
+        n2J8fHx8Yp+57OA0UwAAAAAAAAAAAAAA2TWld/fpu7RufHx8fHxoc/VULtcAAAAAAAAAAAAAAAAAAE81
+        sfF1WV1iYmFhcJOYND8AAAAAAAAAAAAAAAAAAAAAAABTNU+lpZmYpaVPNVIAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAANmwUVGw2gAAAAAAAAAAAAAAAAD//D///8AD//8AAP/8AAA/+AAAH/AAAA/gAAAH4AAAB8AA
+        AAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAGAAAABwAAAA8AA
+        AAPgAAAH4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP///gf/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
+        AAAAAAAAAAEAAAABAAAAAAAABg8DAAQMDAAXCAYAGQkJAAkQBAAHFggAGxQEABASCAAaFQoAGxgUADs1
+        HgANNT0ACD07ABpNIAAiQCUAVEEWAHRpPAAARV0ACVJWABBeUgATZ08AD2BSABJhXwAaZF8AHnFdAB16
+        WwAicEwALmVdAC92WgAIVW0AF1poAANYcgAAXXoAD2liAAxqbAAHbXkAD3x8AHBMVgB3WlcAWVpgAKM9
+        PQCvSjwAsE08AI5OUgCZV1MAp0VFAKlIRwCsTksAs1hPALleSwCvVFMAr1ZWALJaVwCyW1kAs11ZALVf
+        XACYYV4AlWpbAJF7UAC9YEIAs3hPAK5mVQC3YFUAu2VTALBrVwC2YFgAtWBdALR1VQC6bGkAoHNkALxx
+        bwC+c3AAwGlKAMJuVADDcFcAwnBYAMZ6ZgDJfGQAyH9rADSGCAA5kRUAOZQaADWMJQAzjysAN5cnADqX
+        IAA4mSMANpgsADmfLgAxjD4ALpI7ADSaNgA3nj0AOaEyADegOAA5pTsAOqg/AECLCgBBhxAATpMWAEaX
+        HwBLlh4ATJUfAFSWHQBEmCIASpkiAFGbJABcmiMAZ54pAGWbNQBumD0AdZI5AHKRPQB4kT0AZqAsAH2k
+        LwBmoDUAKpFGAC+YRQAxmkEAOqtEADOjTgA5rEgAfotFAHiTRABshFsAU4t/AICpPAC8pz8A1a45AO+x
+        JADxsiIA/rshAPu6KAD+vigA/78tAOauMgDirDQA4a04APi+OAD+wDEA/sE1AP/COgD+wjwAjodCAI+I
+        RgCMhk8Ajo5MAJKATgCUjUsAjJNKAIyTUgCwgVUAgKNCAIGtTgCSrkQAmK9DAI+wVQCNsFgAoqZKALyn
+        QACrtkoAtbZCAKK2UgC3vFUAiYJsAJeZYACSnm4Ao6NnAKSzYgCnu2UAuLlkALy0aAC3t3oAtbl8ANWx
+        SADhsEQA5rZMAMqAagDKiXwAzIx+AMu3YADEvWgA1rxpALvAYADNwFAA18RZAP7FRADyx04A/slOAOLF
+        VADkx1kA78RbAPfKVwD/zFIA9MVbAM7FZQDXy3UA7sNgAOvDZADpx28A/s5jAPXPaAD6z20A8813APDK
+        eADyzn4A/tRyAPrUewAAY4MAD22FAAFtjwALe4UAA3KMAA10jQASdY4AAG6TAARwkwAMdJMALHmAACJ7
+        jAB9n4MAaJKQAJ6OhwCPrJcApLOMALm6gwCyu5MAiK67AMuQjgDRmoUA1JqJANafkQDYoI0A26aPANyp
+        jwDfrI0Aw7aJAN2rkADkuJQA5ryWAOO3nADlu58A6L6YAM7KhwDPxo0A7NOBAPLThAD91oEA89SIAPvZ
+        jgDsyqwA/uOhAP3kuAD///8AAAAAAAAAAAAAAEhDOEcAAAAAAAAAAAAAAAAAAAAAADFDte/w8O+1MC8A
+        AAAAAAAAAAAAAAA/QXFuuLGLiouyz/A4MwAAAAAAAAAAACvq9VNdZ7+PjoiIg4rN5ykAAAAAAAAAK/LP
+        yGV7YWzAvI+IiIWEx6cuAAAAAABA6s/Hypxhe3tpu7yPjYiFjWOTMwAAAAADCgkHCQgGDnthc8cQBwcH
+        BwEFBAAAACcSEhISEhISDXt7UrYMEhISEhISEiwAACjZ2dnZ2dnZ1Viat8nd2dnZ2dnZ2SYA6ef22dnZ
+        GXd6VAYCAgvBrFsj2dnZd5XmT/P42dnZG5ufD9LZ2SERnWEi2dnWYXxFTPz429nZ3/6mIdnZ2dkglFYi
+        2dnWXn04S/ye2dnZHage2dnb29nZH6AW2dnYuu41s6lQ2dnZFRPZ2dvk4tnZ2RwU2dnXZJhF6pFf2dnZ
+        IdnZ2eH7+d7Z2dkh2dnWXpXmAD1V2dnZ2dnZGqv70cx/2dnZ2dnWUj8AADoX2dnZ2dklYGf30MrH3NnZ
+        2dnZGC0AAOXZ2dnZ2SRfUcbRxcq+sNPZ2dnZ2QAAAABGfnZa46piaPmAVqLCj4Khoa3gOQAAAAAASXFX
+        baRSUbloYV5ro4iIw/QrAAAAAAAAAEmXdZxsostpe3t7ar3Q7ysAAAAAAAAAAABLma79pXRhe3thUq5N
+        MgAAAAAAAAAAAAAAADxOlnFvb3KSRDIAAAAAAAAAAAAAAAAAAAAA6E5LS03oAAAAAAAAAAAA/8P/AP4A
+        fwD4AB8A8AAPAOAABwDAAAMAwAADAIAAAQCAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABAIAA
+        AQCAAAMAwAADAOAABwDwAA8A+AAfAP4AfwD/gf8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
+        AAAAAQAAAAEAAAAAAAAEFQ8ABRQQAA0WEAASFxAAERgVABEZGAAuHx4AAis4AAQsOABEIiQAH10nACFe
+        IQBsViIAHX1UACN5RQA8eE0AP31QAARdbwAEX3MAB1p0ABFdcAAZfWAANWxsACNldwB+e0AAp2pPAKx6
+        SwC4ZV4Au35dALVuZgC6amcAu29qAL1wbwC/dHAAvnV0AMh8ZgDIfmkAwHh0AD2VIgA4miUAP5okADSa
+        NgAykzkAOqAxADmjNABRlR0ARZkoAFqCOgBDnT0AYoA6AHSXOgBAoDIAS6EwAFShMABfpDIAWKA3AGKh
+        LwB2pDQAfqo+ACCHVgA4okEAOqlBADqsRgA6rUgAGoZrAECTTQBvgkwAdJZBAHeQZABgjnoAgYw/AIyq
+        MgCDrD4Akaw/ALurLgDTrjcA8rQmAP67IgD+vi0A/8E2APbAPgD/wjsAg45JAKePSgCKrkAAhalKAJ60
+        SwCerlQAobJDAKS0SQC5t0QArrZXALGRewCWtmEAqqxwALy9eADStEkA7r1OAOu+WgDrv14AyoFqAMqC
+        bgDKh3QAzIt0AMmHfADPjHgAz5V2ANeefwDcp3cA3qV5AO3FTwD2xUkA/spSAM/IcwDpymUA6ctoAPLH
+        aQDrxHEA7dJ7AP7TdAACb44AFWqKABtsigADcY4AAG6SAARukAAAb5QAAnGRAAxzkAARdpQAHnuSACN+
+        kwCGpYwAxYOEAMyMggDTloIA2qKCAMC1kQDNwoQA1MmSAOTHggDqw5UA9tuZAOLUogAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wAAAAAAAAAiHx8hAAAAAAAAAAAAABpTjWRkdm0cAAAAAAAAh2xYPTlwUE9NYmuG
+        AAAAAIl1cyw/N29ST05LGQAAAAcGBQUBC0BVDQQEAwIKAAB9fX19fUE3XEZ9fX19egBmkH19DyoMCAhU
+        VhZ9gDEiJY+Af4WKFH19FTMOfYAoHmZefX0RGH2Eg30XEX2BWiBqJ319FICCjIuBfRR9gC8mADB9gH+A
+        QnJ4X319fX0yAAB9fX9/PDZ3dHFFfX19ewAAAEMrYC46VzVbUUxhXQAAAACIRy47WUlAP0hxbmkAAAAA
+        AAAbjkooLDREJQAAAAAAAAAAAABqHR1nAAAAAAAA/D8AAPAPAADAAwAAwAMAAIABAACAAQAAAAAAAAAA
+        AAAAAAAAAAAAAIABAACAAQAAwAMAAMADAADwDwAA/D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChMSsCoDErHKAwK0ifLytqny8rgZ4uK4yeLiuMnS0qgZ0t
+        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
+        K/83jg//O61I/zuuSf87rkn/Oq1I/zmgMP84iAT/mLBG//zUcv//ylD//8VC///DPv//wjr//8E2///A
+        Mv//vy7//74p//+9Jf//vCH//7sf//e2H//mqyf/6cJr/0uOEf+HpFv/slxb/5wsLP+bKiqWAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq0ArVatAK/2tRDH/6Me5/v7mrv7ux3L/6Lta/vnI
+        Wv/+zFv+/tBm/t7Pev43hwL/OqtE/jqtSP47rkn/Oq1I/jqtSP46pTr/N4oI/mydKP7s0XP//spR/v7G
+        RP7/xED//sI7/v7BN/7/wDL//r8u/v++Kf/+vCX+/rsh/v+7Hf/8uR7+67tN/lWJGP83hgH+mqVt/qtN
+        TP+bKir9mysrVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACINCIVrEEs56xBLP/Xo5b//+u9//PO
+        fP/rvl///Mtf///OYf//zmP//9Bn//zbjv8+iQb/OqY6/zuuSf87rkn/O65J/zuuSf87rkn/OqpD/zeP
+        Ef9zoS3//tR0///IS///x0X//8RB///CPP//wTf//8Ay//+/Lf//vSj//7wk//+7IP//ux7/+8xW/0GB
+        CP82jR3/PYoI/6+be/+jPDz/mikp54YkJBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeJBiXNhUO/iUO
+        Cv41My//Ni8h/jIpFv40KhT/NiwV/jYsFf82LBb+Ni0Z/jMuH/4MHQD/DCML/hEyFf4gXyj/NqFD/jqt
+        SP47rkn/Oq1I/jqpQf43iQX/xcNl/v7OXv7+x0v/zJ84/mxTG/4/MA7/NikL/jYoCv82KAn+NigI/jYo
+        B/82KAb+NisS/g4dAf8LHwr+Cx0C/hkkEf8qFRT+PBAQ/ockJJcAAAAAAAAAAAAAAAAAAAAAAAAAAIEz
+        IyJBGRD5AAAA/gAAAP4AAAD/AAAA/gAAAP4AAAD/AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD/AAAA/gAA
+        AP4AAAD/ETMV/jinRv47rkn/Oq1I/jqtSP45miX/Ypoi/v3We/7JoEH/GBIH/gAAAP4AAAD/AAAA/gAA
+        AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/pEnJ/mQKCgiAAAAAAAA
+        AAAAAAAAAAAAAKFDLpU/IRv/ABoi/gAeKP4AHij/AB4o/gAeKP4AHij/AB4o/gAeKP8AHij+AB4o/gAe
+        KP4AHij/AB0n/gAWHf4ABQb/CBkK/jejRP47rkn/Oq1I/jqtSP46qkH/N4cC/tXLcv6vjkL/BgUC/gAH
+        Cv4AGCD/AB0n/gAeKP8AHij+AB4o/gAeKP8AHij+AB4o/gAeKP8AHij+AB4o/gAeKP8AHSf+ABYd/owv
+        Mf+YLCyVAAAAAAAAAAAAAAAArEYuD69GLfAFa47/AG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG6T/wBtkv8AZIT/F3JZ/zmrSf87rkn/OqxG/zmiNP84lBn/N4cC/77C
+        Zv/pw2P/MGFe/wBniv8AbpL/AG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8AbpP/AG2S/z1WbP+bKyrwmysqEAAAAAAAAAAAsEYsXLBGLP4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/B3eJ/jepTf44mSL/N4kF/kWN
+        Df6Mrkn/vcNs/vvYhv7RvWz/DnSQ/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/j9gd/+cLCv+nCsqXAAAAAAAAAAAsEcsqrBHLP4Eb5L/AG+U/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBvk/4Ec47/IZNp/jij
+        P/4yeQD/qLFp/t3HjP7kxH7/5MBv/ui/ZP7wyGb/c5l8/glykf4Ab5P/AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/kVsgv+hNjT+nCwqqgAAAACxSC0FsUgt6bFH
+        Lf/a0sn/vcSf/5+ug/8GcZL/AG+U/wBvlP8Ab5T/AG+U/wBvlP8HaYj/K3tT/yGGTP8nmGL/KZtf/y6g
+        WP82qU7/OKE2/xg/Bv8DBgD/CQgG/wkIBf8JCAT/CQgE/xMPCP+zkkn//c1i/+fDYP/Btmn/m7B8/yV+
+        OP8ijFj/Em5h/wBpi/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZ2i/8omF//Kogz/4KlZv+oRUL/nCwq6Zws
+        KgWxSC0osUgs/rlZQP7+9N///N2X/ubKfP4JcpH/AG6T/gBuk/4Ab5T/AG6T/gBvlP8JY33+Pn4f/jiX
+        H/46rUf/OqtD/jqnPv44mSX/JFkC/gIJBf4ADxP/AA8U/gAPFP4ADxT/AA8U/gAOE/4nIxT/27JW/v7N
+        Xf7/03H/h6o8/jiQE/86rUj+H24//gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rEn+OJsp/mOg
+        N/+2Y2D+nSwq/pwsKiiySS1Wskks/sd6Zv7+8ND/+9qP/ufLfP4JcpH/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8DYHb+LHQM/jeJBv43iAP/N4cB/jaGAP47dg7/ChQJ/gBEWv4AbJD/AGyQ/gBskP4AbJD/AGyQ/gBr
+        jv4AOUz/UkQj/vLEXf721oH/QosI/jmjNf86rUj+H24//gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5
+        h/86rUn+OaM3/j6KCP/Fh4P+ni8s/p0tKlazSi15s0ot/9KUgv/+7MT//NmK/+jMff8JcpL/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8DYHb/V4s5/8DMjP/W16L/3dqo/+vatv9BPjb/ADdJ/wBskP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Aao3/Ay47/4hvN//u04D/OYcC/zqkOP86rUj/H24//wBlhv8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wl5iP86rUn/OqpD/zeGAf/Alof/oDEv/50tKnmzSi2Qs0os/tmkk/7+6r3//dmJ/ujM
+        fv4JcpL/AG6T/gBuk/4Ab5T/AG6T/gBvlP8IYnz+v7+f/v3kt/7+5Lb/+N+y/ndrVf4CKzn/AGqO/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5P/AGWH/g8qLv68n17/i6tA/jiQE/86rUj+H24//gBl
+        hv8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rUn+Oq1H/jeIA/+6nYX+oDQx/p4tKpCzSy2cs0ss/t2t
+        nf7+6bn//dqL/ujRjv4JcpP/AG6T/gBuk/4Ab5T/AG6T/gBvlP8NZYD+y8Kk/v3mvP7947f/q5l7/gol
+        Lf4AZYf/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBggP4uOCz/wrZn/kOM
+        Cv84lRv+H208/gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/ghzff83jA3+OJUd/jeHAv+4oYf+oTUx/p4u
+        K5u0TC2dtEst/92unf/+6rz/+uGh/4yvXP8EcI//AG+U/wBvlP8Ab5T/AG+U/wBvlP8NZYH/fZ9h/8TP
+        lP/Ww6T/IDAx/wBffv8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8AVXH/Wlc5/9rHb/9ZlRr/HV4i/wBlhv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/yB7if+4t0X/iak2/2uh
+        M//PrJ//oDMu/54uK520TC2StEwt/tqmlf787sv/ha1K/jKEDP4Cb43/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8FYXn+LXUN/meaN/5HTkn/AFZz/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG+T/jiHk/4rgJL/AG6T/gBu
+        k/4Ab5T/AG6T/gBuk/4AbpP/A01k/pF8QP/CwV/+H1oa/gBlhv8AbpP+AG6T/gBvlP8AbpP+AG6T/ih9
+        h//3y1X++9Vy/v7ptv/UoJv+nzAr/p4vKpK1TS18tU0u/tiikv6pxoH/N4YA/jKEDP4Cb43/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8DYHf+K3kY/iNLEP4CTGT/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5P/LIGU/trL
+        k/7Jw43/HHqS/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG2R/hJKVv+cmlD+KV8h/gBlhv8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/id+jf9nmR/+Ypoh/luZI//Snpr+oDIs/p8vKn21TS1btk8w/9Scif84hgH/N4gE/zKF
+        D/8Cb47/AG+U/wBvlP8Ab5T/AG+U/wBvlP8DYnr/HWIz/wFDU/8AbpL/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8YeZT/xsSW//7akf/92Ir/r7aI/w50kv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBrj/8LRz7/GE4c/wBl
+        hv8Ab5T/AG+U/wBvlP8Ab5T/AG+U/w10f/82hwT/OJAS/zmHA//JjYj/oTIs/6AwK1u1Ti4utk8v/s+J
+        dP48iQb/OZwp/jWjRv4CcJD/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AXHn+AkFP/gBskP4Ab5T/AG6T/gBu
+        k/4Ab5T/AG6T/gtzk/6quJf//NqU/v3Zjv7+14f//NWA/o6nhP4EcJL/AG6T/gBuk/4Ab5T/AG6T/gBv
+        lP8AZ4r+AztD/gBlh/8AbpP+AG6T/gBvlP8AbpP+AG6T/ghzfv85ozf+OZ4s/lycLv+7bGf+oTIr/qAx
+        Ky62Ti4Itk8u7cNuU/5snDv/OJkj/jWoT/4CcJD/AG6T/gBuk/4Ab5T/AG6T/gBvlP8Aa4/+AGyQ/gBu
+        k/4Ab5T/AG6T/gBuk/4Ab5T/BXGU/oysmv772pb//dqQ/v3Yiv7+14T//dV9/vfQdv5rloH/AW6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AGqN/gBtkf8AbpP+AG6T/gBvlP8AbpP+AG6T/gl5h/86rUn+OJMX/oSp
+        W/+uTkf+oTIr7aEyKwgAAAAAtk8us71fQf+Wm1n/N4wM/zWoTv8CcJD/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8AbpL/LoNr/+3erP/94af//tuR//7Xhv/+1oD//tR5//7S
+        cv/vy23/R4aB/wBuk/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wl5
+        h/86q0X/N4cD/6ugd/+nPjb/ojMrswAAAAAAAAAAtk8uZrhTM/7BkXD/OogE/jWfP/4CcJD/AG6T/gBu
+        k/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/AG6T/gBuk/4Qc2X/NYUK/j6JB/5zpDj/79yb/v3X
+        hf7+1Hv//dN1/v3Rbv7+z2f/3cBl/iZ3g/4AbpP/AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBv
+        lP8AbpP+AG6T/ghzff83jA7+S5IZ/sOEe/+jNi3+ojQrZgAAAAAAAAAAtlAvFrZQLvWtZE3/OFws/xNN
+        LP8AbY//AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wp1gP8znUD/OZwp/zmf
+        Lf83hgH/vMVz//7XhP/+03b//tJw//7Qav//zmP//81c/8KwXv8Pbof/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZpgv8YSRr/UXBD/6tRSf+iNCv1ojUrFgAAAAAAAAAAAAAAAKtS
+        NKUaYXn/AGyQ/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBuk/4Ab5T/BG+H/i+e
+        Vf46rUn/Oqg//jeIBf6HrUf/99yW/v3UeP7+0nD//tBr/v7PZf7/zV7//stY/v7KUv6bm1r/BWyM/gBv
+        lP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AGqN/kxVY/+dOC+lAAAAAAAA
+        AAAAAAAAAAAAAGZcWTAAb5T/AG6T/gBuk/4Ab5T/AG6T/gBuk/4Ab5T/AG6T/gBvlP8AbpP+AG6T/gBu
+        k/4Baof/J45R/jqsRv46rEX/N48R/n+oP/793ZT//dR5/v3UeP7+1n7//tR1/v7OYv7/zFn//spT/v7J
+        Tf76xUf/a4FZ/gFsj/8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/gBvlP8AbpP+AG6T/j1Z
+        bP1yR0owAAAAAAAAAAAAAAAAAAAAAAAAAAABbpLxAG6T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wFskP8cbjj/OaM3/zeKCP83iAT/O4gE/+PUiv/+1Hf//tV6/+fUhv+KrEP/sLxe//7V
+        eP//y1X//8lO///ISf//xUP/77o9/z1rX/8AbZL/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG6T/yhgebUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ZHMsdllO8GViYf5Wgn//GndJ/huD
+        YP4cimz/G4Nf/ip/WP95oI7+eZuA/pKlh/5Njxf/N4oI/keODv45hwL/kLBM/v3aiP7+0nD/6NSE/k6R
+        FP44kRT/OIcD/s/IbP7/0Gb//spS/v7GRP7/wz7//sI5/tqqNP9+j1f+eZFc/nmRWv95kFj+eZBZ/nmS
+        X/95mXP+eaae/mR6iP9dTFT+dEdJ8EhWZSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApVM3abhT
+        MP7Hel//eZ1F/jeMC/46qkL/OaI0/keNDf/12Yz+/tN0/v7Xgf6zwGj/R40O/j2JBf43jg//VpQa/v3b
+        jv7/1n3/k7BJ/jiPEv46rUj/OJgh/kaNDP6cskj/4sxs/v7NWv7/xkT//sE2/v+/MP/+viv+/r0m/v+8
+        Iv/+vCH+/r4p/v/IRf/+3In+7tK//qtENv+mOSv+mT0zaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAt1EvArhRLq26VjT/x4Vp/2aZNP83jQ3/OqlA/zeOD/9pnSn/x8Zt//vckP9woC//N4gF/zme
+        LP84lRz/O4gD/2ecJ//83ZH/WJUb/ziUGv86rEb/Oq1I/zmfLf84kBP/Q4sJ/4+rPP/Vxl7//8tS//+/
+        Lf//vSf//7wj//+8I///vyv//8hG///agv/14Mj/slNF/6g7LP+nOiytpjksAgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAALhSLw+4US7Nu1k4/smLb/5omjb/N4wL/jmgMP83jQz+N4cC/mCZ
+        If68w2n/OIcD/jmiNP45mST/QosJ/oysQP7+2of/g6g6/jeHAv46qUH/Oq1I/jqtSP46rUj/OaI0/jiS
+        Fv45iAP/x79U/v/DOP/+vSX+/r0n/v/BMf/+y07+/tyJ/vbhyP+3XE7+qDwr/qg7LM2nOisPAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4UjAYuFEu1rtZN/7KhWv/eZ5G/jeG
+        AP87iAX+N4YA/j+KB/7o1IP/YJkh/jeNDf43iAT/srxZ/v7Sa/7+1Xb/X5gf/jmcKf47rkn/Oq1I/jqt
+        SP47rkn/Oq1I/jqtSP44mCH/eqIr/v/LT//+vy7+/sU8/v/QXv/+4pz+79TA/rVWRv+pPSv+qT0r1qg8
+        LBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuFIwGLhR
+        Ls66VjT/x3le/7qwhf/X4LX/UZMZ/zeGAP/j1IT/daMy/2mdJ//EwmH//NNv///LVf/XyWn/OIcC/zqp
+        Qf87rkn/O65J/zuuSf87rkn/O65J/zuuSf86pDb/OogE/8vEXf//z13//9h6///rvP/fsqP/r0k2/6s/
+        LP+qPizOqT0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAALhSLw+4US6tuFIv/rtZOf/NmoD+dJ9D/jqIBP7c15P//t6S/v7Zgf7+1nn/+dR2/v3V
+        dv5xnyr/OJQb/jqtSP47rkn/Oq1I/jqtSP47rkn/Oq1I/jqtSP46rUf/OJMY/n6pP//+6rn+89zG/sZ8
+        bP+sQSv+q0Ar/qs/LK2qPisPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4US4Ct1EubbdQLvO6WDf+xnRa/sujhv7149L//u3E/v7m
+        rP6guVz/RYwM/lGRFP43igj/OqpC/jqtSP47rkn/Oq1I/jqtSP46qkL/OaM1/jiZIv43jAv/P4oK/oqr
+        Xv/VnZD+sUo1/q1CLP+sQSzzrEArbatALAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLyS4US6vt1Au/bhT
+        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
+        u/87gw//NZY//zeZOP9EjBP/ubtQ///FQ///wTj//8A0//+/L//+viv/+Lgm/+2uI//gpyr/6rpM//re
+        mv/Smo7/nC0t/5spKq2bKSoHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKo+LAKqPiyvrEQ0/+fB
+        rP/42JH/5bxm/2CQIv86qkT/O65J/zqrQ/9Qkxb/3cdg///HSP//wz3//8E4///AMv//vy3//70n//67
+        Iv/xsSH/5Kww//bPdv/avKb/p0ZF/5sqKq+bKSoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq0AshKxC
+        L//nwq3/9tWL/+i7Wf/6yVv/tbxY/ziXH/87rkn/O65J/zqnPf9FkhX/xMBZ///LVf//xEH//8I7///A
+        NP//vy7//70n//+8If/7uB7/6rEw/4ShN/+Fl1L/pT8//5sqKoQAAAAAAAAAAAAAAAAAAAAAAAAAAJs7
+        JzqsQSz82qeV//nbmP/twGD//cxf///OYf/41n//O5AT/zuuSf87rkn/O65J/zqrRP84khb/uLxV///K
+        UP//xUP//8I8///ANP//vy3//70m//+7IP/+vij/f5or/zeJDf+aj2H/nzIy/JEnJzsAAAAAAAAAAAAA
+        AACDMyEBRxsSzhoKB/8kIR3/IhwQ/yMcDf8kHQ7/JB0P/yIfE/8IFAH/Ch8N/xpPIf84pkX/O65J/zqs
+        Rf9Kkxf/99Ft/96vQv9YRBf/KB4J/yQbB/8kGwX/JBoF/yQbBf8SFwX/BxQF/w4WB/8eDAz/ax0dzpAn
+        JwEAAAAAAAAAAJ9CLVAqGRb/ABQa/wAUGv8AFBr/ABQa/wAUGv8AFBr/ABQa/wAUGv8AEBX/AAMD/yp9
+        NP87rkn/O65J/zmbKP+tuVP/emIs/wADBP8AERf/ABQa/wAUGv8AFBr/ABQa/wAUGv8AFBr/ABQa/wAS
+        Gf9fIiT/mCsrUAAAAAAAAAAArkYuugJtkf8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBu
+        k/8BZYH/MJ9S/zqoP/85myf/PY8S/6i4Vv+up2b/AWWG/wBuk/8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG6T/ylfev+bKyq6AAAAALBHLROwRy37Am+T/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+T/wd2iv8wn1D/SIkW/6ayYP/lyoL/7shx/7+2bv8Udo//AG+T/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5P/LWuG/54wL/ucKyoTsUgtU7JJLv/h28T/vbyG/wVwkv8Ab5T/AG+U/wBv
+        lP8eb3v/KIY0/y6gWf8xpFT/OKVA/xxJC/8DBAH/BgUD/wYFA/8KCAT/sZBH//PJX//RwXP/Qow2/yiS
+        VP8DYXj/AG+U/wBvlP8Ab5T/BHSN/y6dUv9imkT/pkE+/5wsKlOySS2HvmVN//7rwf/tz3//BnGS/wBv
+        lP8Ab5T/AG+U/w5iWP83jAz/OJMZ/zeQEv8vZgv/AiYt/wBSbf8AU27/AFNu/wBRbP8ZLy7/3rNV/8nD
+        Yf84lh7/N6NF/wRdbv8Ab5T/AG+U/wBvlP8GdYz/OqxJ/0GRGP+2ZGH/nSwqh7NKLanJfmj//uay/+/P
+        fv8GcZL/AG+U/wBvlP8Ab5T/FmZg/8nPkf/k3Kn/28ul/x4yNv8AZon/AG+U/wBvlP8Ab5T/AG+U/wBj
+        hP9FSDH/urpc/ziXH/83o0X/BF1u/wBvlP8Ab5T/AG+U/wZ1jP86rUn/OJIW/7V3a/+dLSqqs0stu86L
+        dv/+5az/79KH/wZxk/8Ab5T/AG+U/wBvlP88eYX//eW6//fesv9JTkX/AGCA/wBvlP8Ab5T/AG+U/wBv
+        lP8Ab5T/AG+U/wBZd/9/dEv/Xpkh/zaYMP8EXW7/AG+U/wBvlP8Ab5T/BnOH/ziZJP83jxH/sn9s/54u
+        K7u0TC28z4x3//3ouP+Mr1X/Am+Q/wBvlP8Ab5T/AG+U/yZucf+TtWL/hH9u/wBWcv8AbpP/AG+U/wBv
+        lP8CcJP/AW+T/wBvlP8Ab5T/AG+U/wdSaf+tm1b/XJEf/wRba/8Ab5T/AG+U/wBvlP8Xd4z/yLtG/6C4
+        Vv/Bgnr/ni8rvLRNLavNhnD/nb1v/zSECP8Bb4//AG+U/wBvlP8Ab5T/DWRb/zVtEv8IUGf/AG6T/wBv
+        lP8Ab5T/AW+U/4mpk/93oJD/AG+T/wBvlP8Ab5T/AG6T/x9XXv+MmkL/BFlo/wBvlP8Ab5T/AG+U/xp5
+        jv+NqDL/mrZU/8J6dv+fLyustU0uisqAaf83iQb/NI0X/wFvkP8Ab5T/AG+U/wBvlP8JXmP/B05V/wBu
+        k/8Ab5T/AG+U/wBvk/9lmpX/+tmS//fViP9Sj4z/AG+U/wBvlP8Ab5T/AG2R/w1OPv8DWGr/AG+U/wBv
+        lP8Ab5T/B3KF/ziTGf8+jA3/umpl/6AxK4q2Ti5YwWhN/1GTIf83qUv/AXCR/wBvlP8Ab5T/AG+U/wBi
+        g/8AbZH/AG+U/wBvlP8AbpP/RY2W//TXlv/+2Y3//taD/+3Nev8ygYr/AG6T/wBvlP8Ab5T/AGuO/wBk
+        hf8Ab5T/AG+U/wBvlP8GdIr/OqpD/2OcNv+rSUL/oTIrWLZPLhi6Vzj9fpNA/zaeOP8BcJH/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/whxev+Ssmb/69mW//7Yif/+1X3//tJz/9rBbf8WdYz/AG+U/wBv
+        lP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wZ0if84mib/i5VV/6Q5Mf2hMysYAAAAALZQL8GUdE3/IGQk/wBu
+        kf8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBvlP8EcYv/L5E1/ziWHv9Xlh7//tuP//7Tdv/+0Wz//s5i/7iu
+        Y/8Hbo7/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/BG2H/yRgD/+hcFz/ozUrwQAAAAAAAAAAn1M6Wwto
+        hv8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AW2O/ymXW/86rEb/PpEU/8bHdP/+1Xz//tFv//7P
+        Zf//zFz//spS/4uWXv8AbZH/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG6T/y9dc/+YOTJbAAAAAAAA
+        AABGYmsDAG6T+QBvlP8Ab5T/AG+U/wBvlP8Ab5T/AG+U/wBukv8ee0f/OZsn/ziQE/+etlX//tV6//TV
+        gf+yvFv/9NFz///LVP//yEv/+8NC/1Z7X/8AbpP/AG+U/wBvlP8Ab5T/AG+U/wBvlP8Ab5T/H2N/3WZL
+        UgMAAAAAAAAAAAAAAABYXmBMg1tO/meFav8khED/JpZg/zKFQf+lsof/sLOB/1eWIP9Ciwr/PYkG/+fS
+        gP/+1n3/Zp0o/ziWHv+Cpzb//dJt///ITP//wjz/7rc0/6ifSf+mn0j/pp9G/6aiT/+msoL/ioiK/3lF
+        Rf5gTlZKAAAAAAAAAAAAAAAAAAAAAAAAAAC3US+UwmtN/3CVOP85nCj/OJQb/6i4Vf/114T/daM0/zqT
+        GP84kBP/fqY3/9vNd/83jxH/Oq1H/zmbJ/9DkBL/pbNE/+zIV///wTP//70n//+8I///vy3//9Fj/+zJ
+        q/+rQjP/pjoslAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLge4Ui+6wnFS/3OXO/84lBr/N4kG/0mO
+        D/+gtVH/OJYe/zqQE/+jtEz/6NF4/zmLCv86rEX/O65J/zqsRv85nSv/TJIV//rIS///vSf//8I2///U
+        bv/syqv/r0s7/6g8LLqnOiwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhRLgu4Ui+7wWpM/5mc
+        XP+KtFz/PIgE/8zJcv9Ukxf/qrZN///PYP+xuE7/OZwo/zuuSf87rkn/O65J/zuuSf84mCL/s7dG///M
+        VP//35P/37CZ/65GNP+qPiy7qTwsCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALhR
+        Lge4US6UuVUz/rqLZf90nUH/7+Gn///cjP/dy23/ycJa/1GUGP86q0T/O65J/zuuSf87rkn/Oq1H/zmg
+        L/9fmib/8te3/8Z6aP+sQSz+q0AslKo+LAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAC3US5KuFEv271dPv/OiHD/6siw/2ifN/83hgD/N48Q/ziZI/84mSP/OJYe/ziQ
+        E/9Ulyb/hZhM/7OGY/+zTjj/rUMs26xBLEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3UC4Et08uXrZPLsi4UjL+wmtQ/7+BYf+0iWH/q41e/6yM
+        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
+        lP8Mc5D/pLRJ/7BWUdm9YUS4PZUi/wBvkv8Ab5T/BF9z/wBuk/8RdpT/1MmS/83ChP8Mc5H/AG6T/wRd
+        b/8Ab5T/A3GO/0WZKP+pRT+4tlEwdVqCOv8Ab5L/AG+U/wBvlP8Bb5H/QJNN/8/Ic//+03T/qqxw/wFu
+        kv8Ab5T/AG+U/wJvjv9igDr/ojUsdWhCNRcDbZD9AG+U/wBvlP8AbpP/IIdW/1ShMP/t0nv/6cto//7K
+        U/93kGT/AG6T/wBvlP8Ab5T/E2eG9nQyLhcAAAAAj1dEd2+CTP8ykzn/vL14/1KWHf92pDT/nrRL/0uh
+        MP+5t0T/9sA+/9OuN//StEn/sZF7/4dCPXcAAAAAAAAAAGYtGQG6WTiggYw//1GVHf9+qj7/obJD/4Os
+        Pv86rUj/OqlB/4yqMv//y1H/3qV5/6pAL6BnJBsBAAAAAAAAAAAAAAAAaC4aAbhSL3epdkX26sOV/5Gs
+        P/8/miT/OaM0/0CgMv90lkH/xnhh9qxALHdpJhsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkT8kGLdQ
+        L3m7YkO8smxG3rFrRt64XUO8sUkveZA4JRgAAAAAAAAAAAAAAAAAAAAA8A8AAOAHAADAAwAAgAEAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA8A8AAA==
+</value>
+  </data>
 </root>
\ No newline at end of file


Property changes on: sandbox/maestro-3.0/Maestro.Packaging
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Modified: sandbox/maestro-3.0/Maestro.Packaging/PackageBuilder.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Packaging/PackageBuilder.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Packaging/PackageBuilder.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -154,13 +154,14 @@
         /// <param name="allowedExtensions">A list of allowed extensions without leading dot, or null to include all file types. The special item &quot;*&quot; matches all unknown types.</param>
         /// <param name="removeExistingFiles">A value indicating if a delete operation is included in the package to remove existing files before restoring the package</param>
         /// <param name="alternateTargetResourceId">An optional target folder resourceId, use null or an empty string to restore the files at the original locations</param>
-        public void CreatePackage(string folderResourceId, string zipfilename, IList<string> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
+        public void CreatePackage(string folderResourceId, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
         {
             if (Progress != null)
                 Progress(ProgressType.ReadingFileList, folderResourceId, 100, 0);
 
             ResourceList items = m_connection.ResourceService.GetRepositoryResources(folderResourceId);
 
+            var allowed = new List<ResourceTypes>(allowedExtensions);
             List<ResourceListResourceDocument> files = new List<ResourceListResourceDocument>();
             List<ResourceListResourceFolder> folders = new List<ResourceListResourceFolder>();
             Dictionary<string, List<ResourceDataListResourceData>> resourceData = new Dictionary<string, List<ResourceDataListResourceData>>();
@@ -171,21 +172,21 @@
             //System.Collections.Hashtable knownTypes = ((ServerConnectionBase)m_connection).ResourceTypeLookup;
 
             foreach (object o in items.Items)
+            {
                 if (o as ResourceListResourceDocument != null)
                 {
                     ResourceListResourceDocument doc = o as ResourceListResourceDocument;
                     var extension = ResourceIdentifier.GetResourceType(doc.ResourceId);
-                    if (allowedExtensions == null || allowedExtensions.Count == 0)
+                    if (allowedExtensions == null || allowed.Count == 0)
                         files.Add(doc);
-                    else if (m_connection.Capabilities.IsSupportedResourceType(extension) && allowedExtensions.Contains(extension.ToString()))
+                    else if (m_connection.Capabilities.IsSupportedResourceType(extension) && allowed.Contains(extension))
                         files.Add(doc);
-                    else if (!m_connection.Capabilities.IsSupportedResourceType(extension) && allowedExtensions.Contains("*"))
-                        files.Add(doc);
                 }
                 else if (o as ResourceListResourceFolder != null)
                 {
                     folders.Add(o as ResourceListResourceFolder);
                 }
+            }
 
             if (Progress != null)
             {

Modified: sandbox/maestro-3.0/Maestro.Packaging/PackageProgress.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Packaging/PackageProgress.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Packaging/PackageProgress.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -112,6 +112,7 @@
         public static DialogResult UploadPackage(Form owner, IServerConnection connection, string packageFile)
         {
             PackageProgress pkgp = new PackageProgress();
+            pkgp.Text = Properties.Resources.TitleUploading;
             pkgp.m_invokeArgs = new object[] { packageFile };
             pkgp.m_invokeObj = new PackageBuilder(connection);
             pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("UploadPackage");
@@ -150,7 +151,7 @@
         /// <param name="removeExistingFiles">A flag indicating if the package should contain a delete instruction to delete the target area before restore</param>
         /// <param name="alternateTargetResourceId">The folder path where the package should be restore, set to null or empty string to use the source path</param>
         /// <returns></returns>
-        public static DialogResult CreatePackage(Form owner, IServerConnection connection, string folderResourceId, string zipfilename, List<string> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
+        public static DialogResult CreatePackage(Form owner, IServerConnection connection, string folderResourceId, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
         {
             PackageProgress pkgp = new PackageProgress();
             pkgp.m_invokeArgs = new object[] {folderResourceId, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId };

Modified: sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.Designer.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.Designer.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -205,6 +205,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Uploading Package.
+        /// </summary>
+        internal static string TitleUploading {
+            get {
+                return ResourceManager.GetString("TitleUploading", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to MapGuide Packages (*.mgp)|*.mgp|Zip files (*.zip)|*.zip|All files (*.*)|*.*.
         /// </summary>
         internal static string UploadPackageDialogFilter {

Modified: sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.resx	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/Maestro.Packaging/Properties/Resources.resx	2010-09-29 10:46:47 UTC (rev 5211)
@@ -181,6 +181,9 @@
     <value>Awating server processing ...</value>
     <comment>A message that is displayed after the file is uploaded, and the server restores the file</comment>
   </data>
+  <data name="TitleUploading" xml:space="preserve">
+    <value>Uploading Package</value>
+  </data>
   <data name="UploadPackageDialogFilter" xml:space="preserve">
     <value>MapGuide Packages (*.mgp)|*.mgp|Zip files (*.zip)|*.zip|All files (*.*)|*.*</value>
     <comment>A filename filter for selecting a MapGuide package</comment>

Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Enums.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Enums.cs	2010-09-29 09:02:03 UTC (rev 5210)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Enums.cs	2010-09-29 10:46:47 UTC (rev 5211)
@@ -37,6 +37,33 @@
         SymbolLibrary
 	}
 
+    public static class SiteResourceType
+    {
+        private static ResourceTypes[] _resTypes;
+
+        static SiteResourceType()
+        {
+            _resTypes = new ResourceTypes[]
+            {
+                ResourceTypes.ApplicationDefinition,
+                ResourceTypes.DrawingSource,
+                ResourceTypes.FeatureSource,
+                ResourceTypes.LayerDefinition,
+                ResourceTypes.LoadProcedure,
+                ResourceTypes.MapDefinition,
+                ResourceTypes.PrintLayout,
+                ResourceTypes.SymbolDefinition,
+                ResourceTypes.SymbolLibrary,
+                ResourceTypes.WebLayout
+            };
+        }
+
+        public static ResourceTypes[] All()
+        {
+            return _resTypes;
+        }
+    }
+
 	public enum Operations
 	{
 		CreateSession,



More information about the mapguide-commits mailing list