diff --git a/2017/Case.ApplySysOrient/API/clsAPI.cs b/2017/Case.ApplySysOrient/API/clsAPI.cs new file mode 100644 index 00000000..b886aded --- /dev/null +++ b/2017/Case.ApplySysOrient/API/clsAPI.cs @@ -0,0 +1,155 @@ +using Microsoft.VisualBasic.ApplicationServices; +using System; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; + +namespace Case.ApplySysOrient.API +{ + class clsApi + { + + #region "Private Members" + + /// + /// Full Qualifying Domain Name + /// + /// + /// + private static string GetFullDomainName() + { + + try + { + // Domain + string m_domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName; + + // Host + string m_hostName = Dns.GetHostName(); + + if (!m_hostName.Contains(m_domainName)) + { + // add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName + Convert.ToString(".")) + m_domainName; + } + + return m_hostName; + + } + catch + { + } + + // Failure + return ""; + + } + + /// + /// Credential + /// + /// + /// + private static NetworkCredential GetCred() + { + return new NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32"); + } + + /// + /// API Header + /// + /// + /// + private static string GetHeader() + { + return "http://api.addins.case-apps.com/"; + } + + /// + /// Public IP Address + /// + /// + /// + private static string GetPublicIp() + { + + try + { + const string c_url = "http://checkip.dyndns.org"; + WebRequest req = WebRequest.Create(c_url); + using (WebResponse resp = req.GetResponse()) + { + StreamReader sr = new StreamReader(resp.GetResponseStream()); + string response = sr.ReadToEnd().Trim(); + string[] a = response.Split(':'); + string a2 = a[1].Substring(1); + string[] a3 = a2.Split('<'); + string a4 = a3[0]; + return a4; + } + + } + catch { } + + // Failure + return "UNKNOWN"; + + } + + #endregion + + #region "Public Members" + + /// + /// Record + /// + /// + /// + public static void RecordUsage(bool useProxy = false) + { + + // Ignore My Calls + if (Environment.MachineName.ToLower() == "case-platinum" & Environment.UserName.ToLower() == "d.rudder") return; + if (Environment.MachineName.ToLower() == "masterdonpc" & Environment.UserName.ToLower() == "masterdon") return; + + try + { + + // Assembly Data for Tracking + AssemblyInfo m_a = new AssemblyInfo(Assembly.GetExecutingAssembly()); + + string m_url = GetHeader() + "logusage?ip=" + GetPublicIp(); + m_url += "&mac=" + GetFullDomainName(); + m_url += "&netb=" + Environment.MachineName; + m_url += "&appn=" + m_a.Title; + m_url += "&appv=" + m_a.Version.ToString(); + m_url += "&appf=" + "report"; + m_url += "&user=" + Environment.UserName; + m_url += "&mn=" + ""; + + // The Request Call + HttpWebRequest m_req = (HttpWebRequest)HttpWebRequest.Create(m_url); + m_req.Credentials = GetCred(); + m_req.Method = "POST"; + if (useProxy == false) m_req.Proxy = null; + + // Response String + m_req.GetResponse(); + + } + catch + { + try + { + if (useProxy == false) RecordUsage(true); + } + catch { } + } + + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Case.ApplySysOrient.addin b/2017/Case.ApplySysOrient/Case.ApplySysOrient.addin new file mode 100644 index 00000000..3c480a65 --- /dev/null +++ b/2017/Case.ApplySysOrient/Case.ApplySysOrient.addin @@ -0,0 +1,19 @@ + + + + Command Case.ApplySysOrient - Orient + Case.ApplySysOrient.dll + F09DC30A-0DB2-4C5A-81E5-22a38361F6C1 + Case.ApplySysOrient.Entry.CmdMain + CASE + Case Design Inc. http://www.case-inc.com + + + Command Case.ApplySysOrient - Branches + Case.ApplySysOrient.dll + F09DC30A-0DB2-4C5A-81E5-22a38361F6C2 + Case.ApplySysOrient.Entry.CmdTrunkOrBranch + CASE + Case Design Inc. http://www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Case.ApplySysOrient.csproj b/2017/Case.ApplySysOrient/Case.ApplySysOrient.csproj new file mode 100644 index 00000000..e0b57055 --- /dev/null +++ b/2017/Case.ApplySysOrient/Case.ApplySysOrient.csproj @@ -0,0 +1,108 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {C22FB38E-F3CF-4DDA-A3A9-2C3636E388AC} + Library + Properties + Case.ApplySysOrient + Case.ApplySysOrient + v4.5.2 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + Form + + + form_MaxSize.cs + + + Form + + + form_Orient.cs + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + form_MaxSize.cs + + + form_Orient.cs + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + + \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Case.ApplySysOrient.sln b/2017/Case.ApplySysOrient/Case.ApplySysOrient.sln new file mode 100644 index 00000000..d62a2f02 --- /dev/null +++ b/2017/Case.ApplySysOrient/Case.ApplySysOrient.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.30110.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Case.ApplySysOrient", "Case.ApplySysOrient.csproj", "{C99D99BA-1AD3-4408-82D7-FF3F5E24821D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C99D99BA-1AD3-4408-82D7-FF3F5E24821D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C99D99BA-1AD3-4408-82D7-FF3F5E24821D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C99D99BA-1AD3-4408-82D7-FF3F5E24821D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C99D99BA-1AD3-4408-82D7-FF3F5E24821D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/2017/Case.ApplySysOrient/Data/clsDuct.cs b/2017/Case.ApplySysOrient/Data/clsDuct.cs new file mode 100644 index 00000000..77ac21f7 --- /dev/null +++ b/2017/Case.ApplySysOrient/Data/clsDuct.cs @@ -0,0 +1,36 @@ +using Autodesk.Revit.DB; + +namespace Case.ApplySysOrient.Data +{ + public class clsDuct + { + + private Element _e; + + #region Public Properties + + public string Kind { get; set; } + public double SizeWidth { get; set; } + public double SizeHeight { get; set; } + + #endregion + + public clsDuct(Element e) + { + + // Widen Scope + _e = e; + + } + + /// + /// Get the Element + /// + /// + public Element GetElement() + { + return _e; + } + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Data/clsPipe.cs b/2017/Case.ApplySysOrient/Data/clsPipe.cs new file mode 100644 index 00000000..5aacd522 --- /dev/null +++ b/2017/Case.ApplySysOrient/Data/clsPipe.cs @@ -0,0 +1,35 @@ +using Autodesk.Revit.DB; + +namespace Case.ApplySysOrient.Data +{ + public class clsPipe + { + + private Element _e; + + #region Public Properties + + public string Kind { get; set; } + public double Size { get; set; } + + #endregion + + public clsPipe(Element e) + { + + // Widen Scope + _e = e; + + } + + /// + /// Get the Element + /// + /// + internal Element GetElement() + { + return _e; + } + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Data/clsSettings.cs b/2017/Case.ApplySysOrient/Data/clsSettings.cs new file mode 100644 index 00000000..6394ff8d --- /dev/null +++ b/2017/Case.ApplySysOrient/Data/clsSettings.cs @@ -0,0 +1,375 @@ +using System.Collections.Generic; +using System.Linq; +using Autodesk.Revit.DB; +using Autodesk.Revit.DB.Mechanical; +using Autodesk.Revit.DB.Plumbing; +using Autodesk.Revit.UI; +using Autodesk.Revit.DB.Electrical; + +namespace Case.ApplySysOrient.Data +{ + public class clsSettings + { + + ExternalCommandData _cmd; + List _levels; + + #region Public Properties + + public Autodesk.Revit.ApplicationServices.Application App + { + get + { + try + { + return _cmd.Application.Application; + } + catch { } + return null; + } + } + + public UIApplication UiApplication + { + get + { + try + { + return _cmd.Application; + } + catch { } + return null; + } + } + + public UIDocument UiDoc + { + get + { + try + { + return _cmd.Application.ActiveUIDocument; + } + catch { } + return null; + } + } + public Document Document + { + get + { + try + { + return _cmd.Application.ActiveUIDocument.Document; + } + catch { } + return null; + } + } + + /// + /// Get all Levels + /// + public List Levels + { + get + { + try + { + if (_levels != null) + if (_levels.Count > 0) return _levels; + + // Query + _levels = new List(); + IEnumerable m_l = from e in new FilteredElementCollector(Document) + .OfClass(typeof(Level)) + let l = e as Level + select l; + + // Valid Results? + _levels = m_l.ToList(); + + } + catch { } + + // New List of Levels + return _levels; + + } + } + + #endregion + + /// + /// Constructor + /// + /// + public clsSettings(ExternalCommandData cmd) + { + + // Widen Scope + _cmd = cmd; + + } + + #region Internal Members + + /// + /// Get all Duct and Fittings + /// + internal void ProcessDuct() + { + + try + { + + int m_iCnt = 0; + + // Query + IEnumerable m_c = from e in new FilteredElementCollector(Document) + .OfClass(typeof(Duct)) + let c = e as Duct + select c; + + // Start a New Transaction + using (Transaction t = new Transaction(Document)) + { + if (t.Start("CASE Ductwork Orientation") != TransactionStatus.Started) return; + try + { + + foreach (Duct x in m_c.ToList()) + { + + // These are the values we are testing for + double m_eOff = x.LookupParameter("End Offset").AsDouble(); + double m_sOff = x.LookupParameter("Start Offset").AsDouble(); + double m_length = x.LookupParameter("Length").AsDouble(); + + // Choose which Paramter we will write to + Parameter p = Util.GetElementOrientationParameter(x); + if (p == null) continue; + + // Get the Value + p.Set(Util.GetDirection(m_length, m_eOff, m_sOff)); + + // Add Counter + m_iCnt += 1; + + } + } + catch { } + + // Commit + t.Commit(); + + // Summary + using (TaskDialog td = new TaskDialog("Duct Orientation")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Success!"; + td.MainContent = "Updated " + m_iCnt + " Ducts"; + td.Show(); + } + } + + } + catch { } + + } + + /// + /// Get all Piping and Fittings + /// + internal void ProcessPipe() + { + + try + { + + int m_iCnt = 0; + + // Query + IEnumerable m_c = from e in new FilteredElementCollector(Document) + .OfClass(typeof(Pipe)) + let c = e as Pipe + select c; + + // Start a New Transaction + using (Transaction t = new Transaction(Document)) + { + if (t.Start("CASE Piping Orientation") != TransactionStatus.Started) return; + try + { + foreach (Pipe x in m_c.ToList()) + { + + // These are the values we are testing for + double m_eOff = x.LookupParameter("End Offset").AsDouble(); + double m_sOff = x.LookupParameter("Start Offset").AsDouble(); + double m_length = x.LookupParameter("Length").AsDouble(); + + // Choose which Paramter we will write to + Parameter p = Util.GetElementOrientationParameter(x); + if (p == null) continue; + + // Get the Value + p.Set(Util.GetDirection(m_length, m_eOff, m_sOff)); + + // Add Counter + m_iCnt += 1; + + } + + // Commit + t.Commit(); + + // Summary + using (TaskDialog td = new TaskDialog("Pipe Orientation")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Success"; + td.MainContent = "Updated " + m_iCnt + " Pipes"; + td.Show(); + } + + } + catch { } + } + } + catch { } + + } + + /// + /// Process Cable Tray + /// + internal void ProcessTray() + { + + try + { + + int m_iCnt = 0; + + // Query + IEnumerable m_c = from e in new FilteredElementCollector(Document) + .OfClass(typeof(CableTray)) + let c = e as CableTray + select c; + + // Start a New Transaction + using (Transaction t = new Transaction(Document)) + { + if (t.Start("CASE Cable Tray Orientation") != TransactionStatus.Started) return; + try + { + foreach (CableTray x in m_c.ToList()) + { + + // These are the values we are testing for + double m_eOff = x.LookupParameter("End Offset").AsDouble(); + double m_sOff = x.LookupParameter("Start Offset").AsDouble(); + double m_length = x.LookupParameter("Length").AsDouble(); + + // Choose which Paramter we will write to + Parameter p = Util.GetElementOrientationParameter(x); + if (p == null) continue; + + // Get the Value + p.Set(Util.GetDirection(m_length, m_eOff, m_sOff)); + + // Add Counter + m_iCnt += 1; + + } + } + catch { } + + // Commit + t.Commit(); + + // Summary + using (TaskDialog td = new TaskDialog("Cable Tray Orientation")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Success!"; + td.MainContent = "Updated " + m_iCnt + " Cable Trays"; + td.Show(); + } + } + } + catch { } + } + + /// + /// Process Conduits + /// + internal void ProcessConduit() + { + + try + { + + + + int m_iCnt = 0; + + // Query + IEnumerable m_c = from e in new FilteredElementCollector(Document) + .OfClass(typeof(Conduit)) + let c = e as Conduit + select c; + + // Start a New Transaction + using (Transaction t = new Transaction(Document)) + { + if (t.Start("CASE Conduit Orientation") != TransactionStatus.Started) return; + try + { + + foreach (Conduit x in m_c.ToList()) + { + + // These are the values we are testing for + double m_eOff = x.LookupParameter("End Offset").AsDouble(); + double m_sOff = x.LookupParameter("Start Offset").AsDouble(); + double m_length = x.LookupParameter("Length").AsDouble(); + + // Choose which Paramter we will write to + Parameter p = Util.GetElementOrientationParameter(x); + if (p == null) continue; + + // Get the Value + p.Set(Util.GetDirection(m_length, m_eOff, m_sOff)); + + // Add Counter + m_iCnt += 1; + + } + + } + catch { } + + // Commit + t.Commit(); + + // Summary + using (TaskDialog td = new TaskDialog("Conduit Orientation")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Success!"; + td.MainContent = "Updated " + m_iCnt + " Conduits"; + td.Show(); + } + } + + } + catch { } + + } + + #endregion + + } +} diff --git a/2017/Case.ApplySysOrient/Data/clsUtil.cs b/2017/Case.ApplySysOrient/Data/clsUtil.cs new file mode 100644 index 00000000..d4e49e4a --- /dev/null +++ b/2017/Case.ApplySysOrient/Data/clsUtil.cs @@ -0,0 +1,86 @@ +using System; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; + +namespace Case.ApplySysOrient.Data +{ + class Util + { + + /// + /// Orientation Parameter + /// + /// + /// + internal static Parameter GetElementOrientationParameter(Element e) + { + Parameter p = e.LookupParameter("CurveOrientation"); + return p; + } + + /// + /// Ask User + /// + /// + internal static bool ShowMessage() + { + using (TaskDialog td = new TaskDialog("Explanation")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Update 'CurveOrientation' Parameters"; + td.MainContent += "This command requires that an instance text parameter named 'CurveOrientation' exist on all elements of the target category.\n\n"; + td.MainContent += "A text string of HORIZONTAL, VERTICAL, or SLOPED will then get placed into each element's 'CurveOrientation' parameter for the primary purpose of clash detection filtering in an external program."; + td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Update 'CurveOrientation' Parameters"); + td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Cancel and Do Nothing"); + if (td.Show() == TaskDialogResult.CommandLink1) + return true; + else + return false; + + } + } + + + + /// + /// Find the Direction Based on Points and Length + /// + /// + /// + /// + /// + internal static string GetDirection(double length, double pt1, double pt2) + { + try + { + + // Slope Test + double m_pt1Rounded = Math.Round(pt1, 1); + double m_pt2Rounded = Math.Round(pt2, 1); + double m_length = Math.Round(length, 1); + + // Horizontal? + if (m_pt1Rounded == m_pt2Rounded) return "HORIZONTAL"; + + // Vertical? + if (pt1 > pt2) + { + double m_resA = m_pt1Rounded - m_pt2Rounded; + if (m_resA > m_length * 0.999 && m_resA < m_length * 1.001) return "VERTICAL"; + } + else + { + double m_resB = m_pt2Rounded - m_pt1Rounded; + if (m_resB > m_length * 0.999 && m_resB < m_length * 1.001) return "VERTICAL"; + } + + } + catch { } + + // Not Vertical Nor Horizontal + return "SLOPED"; + + } + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Entry/CmdMain.cs b/2017/Case.ApplySysOrient/Entry/CmdMain.cs new file mode 100644 index 00000000..711e1fea --- /dev/null +++ b/2017/Case.ApplySysOrient/Entry/CmdMain.cs @@ -0,0 +1,78 @@ +using Autodesk.Revit.Attributes; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Case.ApplySysOrient.Data; +using Case.ApplySysOrient.UI; +using System; + +namespace Case.ApplySysOrient.Entry +{ + + [Transaction(TransactionMode.Manual)] + public class CmdMain : IExternalCommand + { + + /// + /// Duct Command + /// + /// + /// + /// + /// + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + + try + { + + // Version + if (!commandData.Application.Application.VersionName.Contains("2016")) + { + + // Failure + using (TaskDialog td = new TaskDialog("Cannot Continue")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Incompatible Revit Version"; + td.MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance..."; + td.Show(); + } + return Result.Failed; + + } + + // Settings + clsSettings m_s = new clsSettings(commandData); + + // Main Category Selection Form + using (form_Orient dlg = new form_Orient()) + { + dlg.ShowDialog(); + + if (!dlg.DoConduit && !dlg.DoDuct && !dlg.DoPipe & !dlg.DoTray) return Result.Cancelled; + + // Process Data + if (dlg.DoConduit) m_s.ProcessConduit(); + if (dlg.DoDuct) m_s.ProcessDuct(); + if (dlg.DoPipe) m_s.ProcessPipe(); + if (dlg.DoTray) m_s.ProcessTray(); + + } + + // Success + return Result.Succeeded; + + } + catch (Exception ex) + { + + // Failure + message = ex.Message; + return Result.Failed; + + } + + } + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Entry/cmdTrunkOrBranch.cs b/2017/Case.ApplySysOrient/Entry/cmdTrunkOrBranch.cs new file mode 100644 index 00000000..72cb0bd3 --- /dev/null +++ b/2017/Case.ApplySysOrient/Entry/cmdTrunkOrBranch.cs @@ -0,0 +1,67 @@ +using System; +using Autodesk.Revit.Attributes; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Case.ApplySysOrient.Data; +using Case.ApplySysOrient.UI; + +namespace Case.ApplySysOrient.Entry +{ + + [Transaction(TransactionMode.Manual)] + public class CmdTrunkOrBranch : IExternalCommand + { + + /// + /// Duct Command + /// + /// + /// + /// + /// + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + + try + { + + // Version + if (!commandData.Application.Application.VersionName.Contains("2016")) + { + + // Failure + message = "This Add-In was built for Revit 2016, please contact CASE for assistance..."; + return Result.Failed; + + } + + // Settings + clsSettings m_s = new clsSettings(commandData); + + // User Form + using (form_MaxSize dlg = new form_MaxSize(m_s)) + { + dlg.ShowDialog(); + if (!string.IsNullOrEmpty(dlg.ErrorMsg)) + { + message = dlg.ErrorMsg; + return Result.Failed; + } + } + + // Success + return Result.Succeeded; + + } + catch (Exception ex) + { + + // Failure + message = ex.Message; + return Result.Failed; + + } + + } + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Properties/AssemblyInfo.cs b/2017/Case.ApplySysOrient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2b07e41f --- /dev/null +++ b/2017/Case.ApplySysOrient/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Free MEP Systems Element Orientations for Revit 2016")] +[assembly: AssemblyDescription("Free MEP Systems Element Orientations for Revit 2016")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Case Design, Inc.")] +[assembly: AssemblyProduct("Free MEP Systems Element Orientations for Revit 2016")] +[assembly: AssemblyCopyright("Copyright © Case Design, Inc. 2014")] +[assembly: AssemblyTrademark("Copyright © Case Design, Inc. 2014")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9f702f8c-adf2-4308-afec-606f58c94394")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2014.6.2.0")] +[assembly: AssemblyFileVersion("2014.6.2.0")] diff --git a/2017/Case.ApplySysOrient/Properties/Resources.Designer.cs b/2017/Case.ApplySysOrient/Properties/Resources.Designer.cs new file mode 100644 index 00000000..69f2a162 --- /dev/null +++ b/2017/Case.ApplySysOrient/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Case.ApplySysOrient.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Case.ApplySysOrient.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cond_32 { + get { + object obj = ResourceManager.GetObject("cond_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap duct_32 { + get { + object obj = ResourceManager.GetObject("duct_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pipe_32 { + get { + object obj = ResourceManager.GetObject("pipe_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tray_32 { + get { + object obj = ResourceManager.GetObject("tray_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/2017/Case.ApplySysOrient/Properties/Resources.resx b/2017/Case.ApplySysOrient/Properties/Resources.resx new file mode 100644 index 00000000..9631a04d --- /dev/null +++ b/2017/Case.ApplySysOrient/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\cond_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\duct_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pipe_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tray_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/Resources/cond_32.png b/2017/Case.ApplySysOrient/Resources/cond_32.png new file mode 100644 index 00000000..ef6955d2 Binary files /dev/null and b/2017/Case.ApplySysOrient/Resources/cond_32.png differ diff --git a/2017/Case.ApplySysOrient/Resources/duct_32.png b/2017/Case.ApplySysOrient/Resources/duct_32.png new file mode 100644 index 00000000..74242cb3 Binary files /dev/null and b/2017/Case.ApplySysOrient/Resources/duct_32.png differ diff --git a/2017/Case.ApplySysOrient/Resources/pipe_32.png b/2017/Case.ApplySysOrient/Resources/pipe_32.png new file mode 100644 index 00000000..51cce3ae Binary files /dev/null and b/2017/Case.ApplySysOrient/Resources/pipe_32.png differ diff --git a/2017/Case.ApplySysOrient/Resources/tray_32.png b/2017/Case.ApplySysOrient/Resources/tray_32.png new file mode 100644 index 00000000..8ab94476 Binary files /dev/null and b/2017/Case.ApplySysOrient/Resources/tray_32.png differ diff --git a/2017/Case.ApplySysOrient/UI/form_MaxSize.Designer.cs b/2017/Case.ApplySysOrient/UI/form_MaxSize.Designer.cs new file mode 100644 index 00000000..7faa38a8 --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_MaxSize.Designer.cs @@ -0,0 +1,352 @@ +namespace Case.ApplySysOrient.UI +{ + partial class form_MaxSize + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_MaxSize)); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.groupBoxDuct = new System.Windows.Forms.GroupBox(); + this.checkBoxDuct = new System.Windows.Forms.CheckBox(); + this.comboBoxDuctParameter = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxMaxHeight = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxMaxDuctWidth = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.groupBoxPipe = new System.Windows.Forms.GroupBox(); + this.checkBoxPipe = new System.Windows.Forms.CheckBox(); + this.comboBoxPipeParameter = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.textBoxMaxPipeSize = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.groupBoxTerms = new System.Windows.Forms.GroupBox(); + this.textBoxBranch = new System.Windows.Forms.TextBox(); + this.textBoxTrunk = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.groupBoxDuct.SuspendLayout(); + this.groupBoxPipe.SuspendLayout(); + this.groupBoxTerms.SuspendLayout(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Location = new System.Drawing.Point(356, 495); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 40); + this.buttonCancel.TabIndex = 0; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(275, 495); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 40); + this.buttonOk.TabIndex = 1; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // groupBoxDuct + // + this.groupBoxDuct.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxDuct.Controls.Add(this.checkBoxDuct); + this.groupBoxDuct.Controls.Add(this.comboBoxDuctParameter); + this.groupBoxDuct.Controls.Add(this.label3); + this.groupBoxDuct.Controls.Add(this.textBoxMaxHeight); + this.groupBoxDuct.Controls.Add(this.label2); + this.groupBoxDuct.Controls.Add(this.textBoxMaxDuctWidth); + this.groupBoxDuct.Controls.Add(this.label1); + this.groupBoxDuct.Location = new System.Drawing.Point(12, 118); + this.groupBoxDuct.Name = "groupBoxDuct"; + this.groupBoxDuct.Size = new System.Drawing.Size(419, 197); + this.groupBoxDuct.TabIndex = 2; + this.groupBoxDuct.TabStop = false; + this.groupBoxDuct.Text = "Select the Maximums for Duct Trunk Calssifications"; + // + // checkBoxDuct + // + this.checkBoxDuct.AutoSize = true; + this.checkBoxDuct.Checked = true; + this.checkBoxDuct.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxDuct.Location = new System.Drawing.Point(32, 33); + this.checkBoxDuct.Name = "checkBoxDuct"; + this.checkBoxDuct.Size = new System.Drawing.Size(247, 17); + this.checkBoxDuct.TabIndex = 6; + this.checkBoxDuct.Text = "Assign Classifications for Ductwork and Fittings"; + this.checkBoxDuct.UseVisualStyleBackColor = true; + this.checkBoxDuct.CheckedChanged += new System.EventHandler(this.checkBoxDuct_CheckedChanged); + // + // comboBoxDuctParameter + // + this.comboBoxDuctParameter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxDuctParameter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxDuctParameter.FormattingEnabled = true; + this.comboBoxDuctParameter.Location = new System.Drawing.Point(178, 152); + this.comboBoxDuctParameter.Name = "comboBoxDuctParameter"; + this.comboBoxDuctParameter.Size = new System.Drawing.Size(219, 21); + this.comboBoxDuctParameter.TabIndex = 5; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(29, 155); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(122, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Classification Parameter:"; + // + // textBoxMaxHeight + // + this.textBoxMaxHeight.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxMaxHeight.Location = new System.Drawing.Point(178, 112); + this.textBoxMaxHeight.Name = "textBoxMaxHeight"; + this.textBoxMaxHeight.Size = new System.Drawing.Size(219, 20); + this.textBoxMaxHeight.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(29, 115); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(62, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Max Depth:"; + // + // textBoxMaxDuctWidth + // + this.textBoxMaxDuctWidth.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxMaxDuctWidth.Location = new System.Drawing.Point(178, 76); + this.textBoxMaxDuctWidth.Name = "textBoxMaxDuctWidth"; + this.textBoxMaxDuctWidth.Size = new System.Drawing.Size(219, 20); + this.textBoxMaxDuctWidth.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(29, 79); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(61, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Max Width:"; + // + // progressBar1 + // + this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar1.Location = new System.Drawing.Point(12, 495); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(419, 40); + this.progressBar1.TabIndex = 3; + // + // groupBoxPipe + // + this.groupBoxPipe.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxPipe.Controls.Add(this.checkBoxPipe); + this.groupBoxPipe.Controls.Add(this.comboBoxPipeParameter); + this.groupBoxPipe.Controls.Add(this.label4); + this.groupBoxPipe.Controls.Add(this.textBoxMaxPipeSize); + this.groupBoxPipe.Controls.Add(this.label6); + this.groupBoxPipe.Location = new System.Drawing.Point(12, 321); + this.groupBoxPipe.Name = "groupBoxPipe"; + this.groupBoxPipe.Size = new System.Drawing.Size(419, 162); + this.groupBoxPipe.TabIndex = 7; + this.groupBoxPipe.TabStop = false; + this.groupBoxPipe.Text = "Select the Maximums for Pipe Trunk Calssifications"; + // + // checkBoxPipe + // + this.checkBoxPipe.AutoSize = true; + this.checkBoxPipe.Checked = true; + this.checkBoxPipe.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxPipe.Location = new System.Drawing.Point(32, 33); + this.checkBoxPipe.Name = "checkBoxPipe"; + this.checkBoxPipe.Size = new System.Drawing.Size(230, 17); + this.checkBoxPipe.TabIndex = 6; + this.checkBoxPipe.Text = "Assign Classifications for Piping and Fittings"; + this.checkBoxPipe.UseVisualStyleBackColor = true; + this.checkBoxPipe.CheckedChanged += new System.EventHandler(this.checkBoxPipe_CheckedChanged); + // + // comboBoxPipeParameter + // + this.comboBoxPipeParameter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxPipeParameter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxPipeParameter.FormattingEnabled = true; + this.comboBoxPipeParameter.Location = new System.Drawing.Point(178, 115); + this.comboBoxPipeParameter.Name = "comboBoxPipeParameter"; + this.comboBoxPipeParameter.Size = new System.Drawing.Size(219, 21); + this.comboBoxPipeParameter.TabIndex = 5; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(29, 118); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(122, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Classification Parameter:"; + // + // textBoxMaxPipeSize + // + this.textBoxMaxPipeSize.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxMaxPipeSize.Location = new System.Drawing.Point(178, 76); + this.textBoxMaxPipeSize.Name = "textBoxMaxPipeSize"; + this.textBoxMaxPipeSize.Size = new System.Drawing.Size(219, 20); + this.textBoxMaxPipeSize.TabIndex = 1; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(29, 79); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(84, 13); + this.label6.TabIndex = 0; + this.label6.Text = "Max Trunk Size:"; + // + // groupBoxTerms + // + this.groupBoxTerms.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxTerms.Controls.Add(this.textBoxBranch); + this.groupBoxTerms.Controls.Add(this.textBoxTrunk); + this.groupBoxTerms.Controls.Add(this.label5); + this.groupBoxTerms.Controls.Add(this.label7); + this.groupBoxTerms.Location = new System.Drawing.Point(12, 12); + this.groupBoxTerms.Name = "groupBoxTerms"; + this.groupBoxTerms.Size = new System.Drawing.Size(419, 100); + this.groupBoxTerms.TabIndex = 8; + this.groupBoxTerms.TabStop = false; + this.groupBoxTerms.Text = "Classification Terms to Use:"; + // + // textBoxBranch + // + this.textBoxBranch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxBranch.Location = new System.Drawing.Point(178, 67); + this.textBoxBranch.Name = "textBoxBranch"; + this.textBoxBranch.Size = new System.Drawing.Size(219, 20); + this.textBoxBranch.TabIndex = 6; + this.textBoxBranch.Text = "BRANCH"; + // + // textBoxTrunk + // + this.textBoxTrunk.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxTrunk.Location = new System.Drawing.Point(178, 31); + this.textBoxTrunk.Name = "textBoxTrunk"; + this.textBoxTrunk.Size = new System.Drawing.Size(219, 20); + this.textBoxTrunk.TabIndex = 5; + this.textBoxTrunk.Text = "TRUNK"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(29, 67); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(113, 13); + this.label5.TabIndex = 4; + this.label5.Text = "Branch Classifications:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(29, 31); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(126, 13); + this.label7.TabIndex = 3; + this.label7.Text = "Trunks (Max and Larger):"; + // + // form_MaxSize + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(443, 547); + this.Controls.Add(this.groupBoxTerms); + this.Controls.Add(this.groupBoxPipe); + this.Controls.Add(this.groupBoxDuct); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.progressBar1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(459, 585); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(459, 585); + this.Name = "form_MaxSize"; + this.Text = "X"; + this.Load += new System.EventHandler(this.form_MaxSize_Load); + this.groupBoxDuct.ResumeLayout(false); + this.groupBoxDuct.PerformLayout(); + this.groupBoxPipe.ResumeLayout(false); + this.groupBoxPipe.PerformLayout(); + this.groupBoxTerms.ResumeLayout(false); + this.groupBoxTerms.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.GroupBox groupBoxDuct; + private System.Windows.Forms.ComboBox comboBoxDuctParameter; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxMaxHeight; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxMaxDuctWidth; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.CheckBox checkBoxDuct; + private System.Windows.Forms.GroupBox groupBoxPipe; + private System.Windows.Forms.CheckBox checkBoxPipe; + private System.Windows.Forms.ComboBox comboBoxPipeParameter; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox textBoxMaxPipeSize; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.GroupBox groupBoxTerms; + private System.Windows.Forms.TextBox textBoxBranch; + private System.Windows.Forms.TextBox textBoxTrunk; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label7; + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/UI/form_MaxSize.cs b/2017/Case.ApplySysOrient/UI/form_MaxSize.cs new file mode 100644 index 00000000..89020ed2 --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_MaxSize.cs @@ -0,0 +1,96 @@ +using System; +using System.Windows.Forms; +using Case.ApplySysOrient.API; +using Case.ApplySysOrient.Data; + +namespace Case.ApplySysOrient.UI +{ + public partial class form_MaxSize : Form + { + + private clsSettings _s; + + public string ErrorMsg = string.Empty; + + /// + /// Constructor + /// + /// + public form_MaxSize(clsSettings s) + { + InitializeComponent(); + + // Widen Scope + _s = s; + + } + + #region Form Controls & Events + + /// + /// Setup + /// + /// + /// + private void form_MaxSize_Load(object sender, EventArgs e) + { + + // Title + this.Text = " v" + ""; + this.progressBar1.Hide(); + + // Parameters + + } + + /// + /// OK + /// + /// + /// + private void buttonOk_Click(object sender, EventArgs e) + { + try + { + clsApi.RecordUsage(); + } + catch { } + } + + /// + /// Cancel + /// + /// + /// + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + /// + /// Duct + /// + /// + /// + private void checkBoxDuct_CheckedChanged(object sender, EventArgs e) + { + this.textBoxMaxDuctWidth.Enabled = this.checkBoxDuct.Checked; + this.textBoxMaxHeight.Enabled = this.checkBoxDuct.Checked; + this.comboBoxDuctParameter.Enabled = this.checkBoxDuct.Checked; + } + + /// + /// Pipe + /// + /// + /// + private void checkBoxPipe_CheckedChanged(object sender, EventArgs e) + { + this.textBoxMaxPipeSize.Enabled = this.checkBoxPipe.Checked; + this.comboBoxPipeParameter.Enabled = this.checkBoxPipe.Checked; + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/UI/form_MaxSize.resx b/2017/Case.ApplySysOrient/UI/form_MaxSize.resx new file mode 100644 index 00000000..70d5bce5 --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_MaxSize.resx @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAUAAAAAAAEAIACAIgAAVgAAADAwAAABACAAaCYAANYiAAAgIAAAAQAgACgRAAA+SQAAGBgAAAEA + IAC4CQAAZloAABAQAAABACAAaAQAAB5kAACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYA + AApBaUNDUElDQyBQcm9maWxlAABIDZ2Wd1RT2RaHz703vdASIiAl9Bp6CSDSO0gVBFGJSYBQAoaEJnZE + BUYUESlWZFTAAUeHImNFFAuDgmLXCfIQUMbBUURF5d2MawnvrTXz3pr9x1nf2ee319ln733XugBQ/IIE + wnRYAYA0oVgU7uvBXBITy8T3AhgQAQ5YAcDhZmYER/hEAtT8vT2ZmahIxrP27i6AZLvbLL9QJnPW/3+R + IjdDJAYACkXVNjx+JhflApRTs8UZMv8EyvSVKTKGMTIWoQmirCLjxK9s9qfmK7vJmJcm5KEaWc4ZvDSe + jLtQ3pol4aOMBKFcmCXgZ6N8B2W9VEmaAOX3KNPT+JxMADAUmV/M5yahbIkyRRQZ7onyAgAIlMQ5vHIO + i/k5aJ4AeKZn5IoEiUliphHXmGnl6Mhm+vGzU/liMSuUw03hiHhMz/S0DI4wF4Cvb5ZFASVZbZloke2t + HO3tWdbmaPm/2d8eflP9Pch6+1XxJuzPnkGMnlnfbOysL70WAPYkWpsds76VVQC0bQZA5eGsT+8gAPIF + ALTenPMehmxeksTiDCcLi+zsbHMBn2suK+g3+5+Cb8q/hjn3mcvu+1Y7phc/gSNJFTNlReWmp6ZLRMzM + DA6Xz2T99xD/48A5ac3Jwyycn8AX8YXoVVHolAmEiWi7hTyBWJAuZAqEf9Xhfxg2JwcZfp1rFGh1XwB9 + hTlQuEkHyG89AEMjAyRuP3oCfetbEDEKyL68aK2Rr3OPMnr+5/ofC1yKbuFMQSJT5vYMj2RyJaIsGaPf + hGzBAhKQB3SgCjSBLjACLGANHIAzcAPeIACEgEgQA5YDLkgCaUAEskE+2AAKQTHYAXaDanAA1IF60ARO + gjZwBlwEV8ANcAsMgEdACobBSzAB3oFpCILwEBWiQaqQFqQPmULWEBtaCHlDQVA4FAPFQ4mQEJJA+dAm + qBgqg6qhQ1A99CN0GroIXYP6oAfQIDQG/QF9hBGYAtNhDdgAtoDZsDscCEfCy+BEeBWcBxfA2+FKuBY+ + DrfCF+Eb8AAshV/CkwhAyAgD0UZYCBvxREKQWCQBESFrkSKkAqlFmpAOpBu5jUiRceQDBoehYZgYFsYZ + 44dZjOFiVmHWYkow1ZhjmFZMF+Y2ZhAzgfmCpWLVsaZYJ6w/dgk2EZuNLcRWYI9gW7CXsQPYYew7HA7H + wBniHHB+uBhcMm41rgS3D9eMu4Drww3hJvF4vCreFO+CD8Fz8GJ8Ib4Kfxx/Ht+PH8a/J5AJWgRrgg8h + liAkbCRUEBoI5wj9hBHCNFGBqE90IoYQecRcYimxjthBvEkcJk6TFEmGJBdSJCmZtIFUSWoiXSY9Jr0h + k8k6ZEdyGFlAXk+uJJ8gXyUPkj9QlCgmFE9KHEVC2U45SrlAeUB5Q6VSDahu1FiqmLqdWk+9RH1KfS9H + kzOX85fjya2Tq5FrleuXeyVPlNeXd5dfLp8nXyF/Sv6m/LgCUcFAwVOBo7BWoUbhtMI9hUlFmqKVYohi + mmKJYoPiNcVRJbySgZK3Ek+pQOmw0iWlIRpC06V50ri0TbQ62mXaMB1HN6T705PpxfQf6L30CWUlZVvl + KOUc5Rrls8pSBsIwYPgzUhmljJOMu4yP8zTmuc/jz9s2r2le/7wplfkqbip8lSKVZpUBlY+qTFVv1RTV + naptqk/UMGomamFq2Wr71S6rjc+nz3eez51fNP/k/IfqsLqJerj6avXD6j3qkxqaGr4aGRpVGpc0xjUZ + mm6ayZrlmuc0x7RoWgu1BFrlWue1XjCVme7MVGYls4s5oa2u7act0T6k3as9rWOos1hno06zzhNdki5b + N0G3XLdTd0JPSy9YL1+vUe+hPlGfrZ+kv0e/W3/KwNAg2mCLQZvBqKGKob9hnmGj4WMjqpGr0SqjWqM7 + xjhjtnGK8T7jWyawiZ1JkkmNyU1T2NTeVGC6z7TPDGvmaCY0qzW7x6Kw3FlZrEbWoDnDPMh8o3mb+SsL + PYtYi50W3RZfLO0sUy3rLB9ZKVkFWG206rD6w9rEmmtdY33HhmrjY7POpt3mta2pLd92v+19O5pdsN0W + u067z/YO9iL7JvsxBz2HeIe9DvfYdHYou4R91RHr6OG4zvGM4wcneyex00mn351ZzinODc6jCwwX8BfU + LRhy0XHhuBxykS5kLoxfeHCh1FXbleNa6/rMTdeN53bEbcTd2D3Z/bj7Kw9LD5FHi8eUp5PnGs8LXoiX + r1eRV6+3kvdi72rvpz46Pok+jT4Tvna+q30v+GH9Av12+t3z1/Dn+tf7TwQ4BKwJ6AqkBEYEVgc+CzIJ + EgV1BMPBAcG7gh8v0l8kXNQWAkL8Q3aFPAk1DF0V+nMYLiw0rCbsebhVeH54dwQtYkVEQ8S7SI/I0shH + i40WSxZ3RslHxUXVR01Fe0WXRUuXWCxZs+RGjFqMIKY9Fh8bFXskdnKp99LdS4fj7OIK4+4uM1yWs+za + crXlqcvPrpBfwVlxKh4bHx3fEP+JE8Kp5Uyu9F+5d+UE15O7h/uS58Yr543xXfhl/JEEl4SyhNFEl8Rd + iWNJrkkVSeMCT0G14HWyX/KB5KmUkJSjKTOp0anNaYS0+LTTQiVhirArXTM9J70vwzSjMEO6ymnV7lUT + okDRkUwoc1lmu5iO/kz1SIwkmyWDWQuzarLeZ0dln8pRzBHm9OSa5G7LHcnzyft+NWY1d3Vnvnb+hvzB + Ne5rDq2F1q5c27lOd13BuuH1vuuPbSBtSNnwy0bLjWUb326K3tRRoFGwvmBos+/mxkK5QlHhvS3OWw5s + xWwVbO3dZrOtatuXIl7R9WLL4oriTyXckuvfWX1X+d3M9oTtvaX2pft34HYId9zd6brzWJliWV7Z0K7g + Xa3lzPKi8re7V+y+VmFbcWAPaY9kj7QyqLK9Sq9qR9Wn6qTqgRqPmua96nu37Z3ax9vXv99tf9MBjQPF + Bz4eFBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/RO1I8ZHPR4VHpcfCj3XVO9TXN6g3lDbCjZLGseNx + x2/94PVDexOr6VAzo7n4BDghOfHix/gf754MPNl5in2q6Sf9n/a20FqKWqHW3NaJtqQ2aXtMe9/pgNOd + Hc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5n3d+8kLGhfGLiReHOld0Prq05NKdrrCu3suBl69e8blyqdu9 + +/xVl6tnrjldO32dfb3thv2N1h67npZf7H5p6bXvbb3pcLP9luOtjr4Ffef6Xfsv3va6feWO/50bA4sG + +u4uvnv/Xtw96X3e/dEHqQ9eP8x6OP1o/WPs46InCk8qnqo/rf3V+Ndmqb307KDXYM+ziGePhrhDL/+V + +a9PwwXPqc8rRrRG6ketR8+M+YzderH0xfDLjJfT44W/Kf6295XRq59+d/u9Z2LJxPBr0euZP0reqL45 + +tb2bedk6OTTd2nvpqeK3qu+P/aB/aH7Y/THkensT/hPlZ+NP3d8CfzyeCZtZubf94Tz+zI6WX4AABf6 + SURBVHgB7Z1tbBxHGcfXtCDV9oeixhcJEPFZCjSxzZugSSVaOQkS5AWnqFFpUEsVGtQUNbiiRW1TsFCq + pI0ITU0imqpRQwHRFxFRhzQpqI6t9EMLQiDwSysh+ex+yzkIkOJUAiSY/8WbbM5777s38zzzH+l86929 + nZnfM/Pf2ZlnZluCMmHthi23mMObzafPfDrNh4EESEAGgRmTzDHzGT598levmO/Y0BK311T8PrP/qPl0 + mg8DCZCAbAIzJvnbjBCMFWfjfcU7TOU/YPaNmk9n8TH+TwIkIJJAp0n16ELdviIDV0X/Myfgrr8juo/b + JEACagiszi5f2Zn729RwmKNLArCgDqz8IRl+k4BOAp8yInCtEYHfInuFPgBT+fvMNpr9DCRAAn4QWIM+ + gbAPAE1/BhIgAX8IFOp8i7n7Y6jv1/7kmzklARJYIPAVtAAwzs9AAiTgH4HNEIA+//LNHJMACRgCfRCA + TqIgARLwkkAnBICBBEjAUwIUAE8Nz2yTAAhQAFgOSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4zDoJUABY + BkjAYwIUAI+Nz6yTAAWAZYAEPCZAAfDY+Mw6CVAAWAZIwGMCFACPjc+skwAFgGWABDwmQAHw2PjMOglQ + AFgGSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4zDoJUABYBkjAYwIUAI+Nz6yTAAWAZYAEPCZAAfDY+Mw6 + CVAAWAZIwGMCFACPjc+skwAFgGWABDwmQAHw2PjMOglQAFgGSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4 + zDoJUABYBkjAYwIUAI+Nz6yTwNVEQAK1Elia6QiWLumI/Vlbe2uQzS4rHMvlZoP58xdizzt7bi44m5+L + PcadzSNAAWgea+djam+7Juhalg3CStzWav7PZgvpznYuC9raWlPLw8Tk24VrT+dywfyF94JQPP46NZVa + nLxwELSs3bDlfwThH4FPrFwZZLuWBZmO6wqVPO0K3gjh+fkLQW5mNhifnCoIw7TZZuuhEaKXf0sBuMxC + 7Raa7L3d1weo5L093YVv6ZnNm8eHcdNqmJicNN/vUBDqNCgFoE5wLv8MTfnVN3w26OnuNhV/RZAxAqA9 + FFoIE5PByOgbAVoIDNURoABUx8n5s3CXR6Vft+ZmFXf4RoCjdTAydsaIwRm2DCqApABUAOTyYVb6ytZ5 + 6w9/DH7zm9cCdibGs6IAxHNxdm/YvO/ftMH7O30tRsIow8joWPC6eURguEyAAnCZhdNbXaYDr3/T+kIz + P83hOKchJJA4CMELLx5ji2CBJQUggUKV5iW+sOYm81zfZzr0VqQZjXfXxqPBkaM/976PgALgYNEPm/lb + b9viRQ++LRPAv+CFl48FwydO2UqC9XgpANZNcDkBqPh4tu/fuD5Vr7vLMXILBPBYsGff/uD8/HveAaEA + OGByVnz7RkBrYNfgY975EFAALJc9PONv33aX2Ds+xtzzc+cWUcx0LBH5+DJ06GmvRgo4GWhR0W3ODvji + D+y8R1QlQVMZk3UmFlxvK3ncoWXTa7wRVy04KDWHbGOxDNx3b+ECvgwXsgXQWHmp+ddw3rn/vh0ievXR + LEZv+e/N503zaSRgGPP+nTvE+C740hKgADRSqmv4bficv/W2W2v4lZ1TUfGPv3oqOH7iZKIdY2Cwd/cg + RcCOWWNjpQDEYkl2p6TmPvznjxx9PtGKH6UJERja/4SYR5+9+55suPUTzb9r21dll6/8gWuJ0pIeFPa7 + 7rg9+NaOu00nX5vT2UJn3t4nDgTD5s7/7//8N7W04tozuXeDdWtvTi2OJC/8mU9/MvjTn/8S/OOf/0ry + ss5ci2sCpmQK3PVxp8O4vusBz/kDDz7cNPdYTMyB4EgIcLtG34XWwBZACpb92ldvNT38O5y/6yPr8IT7 + yTPPpXrXj0O8NLMk+PjHlscdcm7fB6+9NmhpCQoLkDiXuAYTxBZAgwCjP0eT//Hd3w8kdPQh3ejp/uVL + x6JZaNo2hhIlBdgUIxnaAgUgIYuicBx5+qCI4T1k2fYwV6nVghMyRyqX+eY3vp7KdW1elAKQAH148w39 + 6HEx3ny2K38CyK1cAjMy0bejKVAAGrQmnHpC77EGL9WUn7PyN4Z56+3u+3HUkkMKQC20Iufief/Rh75T + WIMvstvpTXT4+eLimpYh0ArQ1BdAAaijpKDyw6MNi3BKCXDwsdXhJ4VRtenEykxaAgWgRkuGlR9r7EsJ + WDIb3n0uhZ5euSscSRL+SjanAFQiFDkusfLDr/+pg4dTc+2N4KlpM9Mh910FcA66UVDrr5xhKADl6ESO + Saz8SD6e+ytN241ks2mbeGGJ5NBj3rSkIVAAqrCi1MqP+fsurneHKdHS31aEV6xpCBSAClaUWvkLTf9D + hyvkzs5hDc/QkvqAylmZAlCGjtTKjyxhPr+rb9DVssS5BqcgCkAZAYCDj0Slx0w7V4f8wteZlcEu5hBe + ry49UABKWBAeflKbqkMHnymRK/u7pTKNI6fhDU0UgBjLbjaOHnjLrsSAjj+XX4TZv/FLErHGplnyUGaY + IQpASGLhG+O727fdWbRXzr/PPvczZxOLSVPSe/+jcPE4Iz1QACIWhI/3gGn6Sw1w93VxzD/kiXccMrhF + gAKwYA/0+GPpJ8nPdXD6cTXgbqml999VxvWkiwKwQA1v55HY4x8aHXd/V4f9kEZNnX8hcw3fFABjxYuv + 4JbZ6RcWwuOOv+FWaqdqyFfrt/cCgKYp7v6SQ+GVXWbGn6sBjCW3rlzlmkS6vBcALOoh+bkfheCFF919 + 9kf6epVMnEFetAWvBQDLd0u/M8Hrz+Vxf1SYHvOCUI1hfHJKfLa8FQAM+UlZvrtcKTv+6mvlDjtxrCsr + 32XWCZApJMJbAdDytpeR0bEUikWyl5TeyipFY2L87VKHxOz3UgDg6quhUGLo7/z8e04XNk0LaBaDPntO + xuvNitMd/d87AUCPtIamP4z4e/NOP9dDe2ub60msK31Yb8Flv4tqM+WdAKDyS+/1h3FRAN8UIACSF/8s + V4k0dAAif14JABZw0OKQIuHZv1wFkn4MvhcaglcCoOmtLiOjb2gof2LzMD4hfwgQ8L0RALj7apmMgrF/ + l2f9ia3VVSYcj19a+HsjAFtv21Kled0/bVxJ89N90vEpfEtA30t8yhfv9UIAtC1EIaH3f3FR07NHE38v + BEDT3R/VSELvf1jd8/l8uKniG49fkvhXgq5eALTd/aX1Po9PvlOpDIo6PjJ2RlR6KyVWvQD0b9pQiYGo + 49KeP+Esg7umhoDOv+MnTmrIyqU8qBYAjPtrcPm9ZC2zIXH4ScKEpSjjUtt42Yrrrtel0l5qv2oB+PKX + 9SxBDQNKHX6C0xLSLjmgFaPt7g97qBUA+PxrW4cu5/CqP+UqN+6aLi9YWi7t4TG8bEXb3R95UysA/Ru/ + GNpOzbdk/3O8pVhaB2ZYcHDnd33RlTCttX6rFYDVN3yuVhbOny99/vmeffvFPQpAtJ49+gvny0a9CVQp + AHi7j6Y30ITGnZ7NhZsiv9GE3jX4mBgRwCMXREtzUCkAq4wAaAvohNLwDAofegkigMq/a3C3Cubl6oI6 + AcAbfrRM+Y0aTsvkE+TJdRHwpfLDFuoEQFvPP4yEIHUE4GLqF/8NRcA1JyGfKj+sok4AVins/IOhcrlZ + fKkKEIGBBx8OXPFuRG//tx94RH2zP1qIro7+I30bzX+tLQAN68/FlS/0a+zZ92QAr82BnfdY6byFk9LQ + ocOqJvnEsY7bp0oAepW+gAKG09QHEFcQMc5+970DC+9p7GvK4i0F337j3os7v4YO1jiulfapEgCNvf8w + oLbn/3KF8nWz1Bk+8OSEM1dvT3fi8znAE0uqw0XZ14of2kCVAPR2rwjzpepbuh99PcbAI0/ogINHu65l + 2QArDGNyV3tbW5DpWFLxcQEVHewKMxLn5gI4UsGXwvdKH7WHGgHACyg0Ov/AWJJdgKOFrd5tVFg8Imh1 + x62XSxK/UzMK0NuzMgkevAYJeEVAjQBoWfE3rvRJnwMQlyfuc4OAGgHo7WYLwI0ixVRIIqBCANBjrOF1 + X6UKjvRJQKXyxf32CagQgN7u6+2TTDEF7LVOEa7nl1YhANrW/fO8TDL7TSSgQgC6stkmImtuVFJX0Wku + JcZWLwEVAqB5BKBew/J3JFANAfECgA5ABhIggfoIyBeAJboF4Pz8fH2W5a9IoAoC4gUA/uGag08TgTTb + 0dW8iReAttZrXGXLdJGA8wTEC4DmEQDnSw8TKJ6AeAHQ7AEovnQxA84TEC8AdAJyvowxgQ4TEC8ADrNl + 0kjAeQKiBQALSWoP+XxeexaZP4sERAuARW5Nizp/9u9Ni4sR+UeAAuCfzZljErhEQLQAaHcCumQlbpBA + SgREC0BKTHhZEvCGAAXAcVNnll7neAqZPMkEKACOWy+TyTieQiZPMgEKgGTrMe0k0CABCkCDAPlzEpBM + gAIg2XpMOwk0SIAC0CBA/pwEJBOgADhuPU52ctxAwpNHAXDcgHgTLgMJpEWAApAWWV6XBAQQoAA4biQ+ + AjhuIOHJowA4bkCueOS4gYQnjwIgwIB894EAIwlNomgByOVmhWKvLdlLlb/7oDYaPDtJAqIFYP78hSRZ + OHstTghy1jTiEyZaAMTTrzIDnBBUJSieVjMB0QIwPZurOcMSf9DbrX/tQ4l20ZBm0QJwfv49DTaomIdM + x5KK5/AEEqiHgGgBQIZ9eHdexrwBub2Nr0Crp4DzN+UJiBeA+Xk/OgK7lmXLW5JHSaAOAuIFYHxyqo5s + y/sJF0CVZzMJKRYvAL68OIMdgRKqk7w0iheA6dy78qjXkeKe7hV1/Io/IYHyBK4uf9j9o9MzfngDwhJ4 + Fdpfp/x45GlWyevqXBa0t16ccn323FxwNj/XrKidiEe8AIDixOTbgQ93yFWrPkMBSKDaYESlf9OGoH/j + +qB4shVGlY6fOBm8PvpGAjG5fwnxjwBAPJ3zwyFo9Q2fc79EOZ5C3PGH9j8RbL3t1kWVH0nH9OuB++4N + fvyjx70YelUhABOT7zhe7JJJHvwBUIAZ6iMAdnt3fz8Ax0oBQrB392Cl08QfVyEA45OT4g1RbQbWrbmp + 2lN5XoQAmv2PPvSd2Lt+5LQrNiECX/vqrVfs0/aPCgGAS7APHoEofOvW9Gkrg6nnB5Ufd/Nq7vzFiUE/ + gWYvTBUCAKONjJ4ptp3K/9Fp9QW2Amqy7fZtdxWe7Wv60cLJ4L36hs/W81MRv1EjAOMT/gyPsRVQfd26 + /74dptV0c/U/iDlT83RsNQIAf4C8J2O4GPKETwBDeQJJVH7EoNkLU40AwFAjY348BiCvW2/X3TmFPDYS + 0HnX6J0/jF+zc5AuAfCkHwAFk62AsHou/kYfCcb5kwqaO5hVCQCUGl6BvoTtd9/pS1arziea/XDkSTK8 + 9Yc/Jnk5p66lSgBAdmR0zCnAaSYG49SbN61PMwpR107qmT+aaYwu8REgSsTxbfhw+9IZCFOgqcv3BgRB + GpUfi80cOfq84yW+seSpawEAh0+dgRinhoebrwFOOvDbT6rDL8px7xNPBtrXnVQpAJjN5ctSYSiweBT4 + 5rY7omXXi+2Lvv2DdTv5lIN05OjPvZh5eVV2+coflAMh8di///Pf4AMfeL/q8dtiu3z8Y8uDubl8MD3z + bvEhlf/faLzzHn3ogbrceysBwXP/8794sdJpKo6rbAHAMr61ApBn9H77MFsQrZ1dNU7sAZ9qAob8njp0 + uJpTVZyjVgDw7PbCy8dUGKmWTGC6q1YRQL7wvI/FPNIIqPy7BnencWlnr6lWAEB8+MQpr0YEkGd0CkIE + 0ETWFODZN2QqP/o70gjoM3rq4GH1nX7F7FT2AUQzOWMWDV23trHJINHrSdhG/8dNn79RRZ8A5jzs3f29 + VGfkofLvGnzM9J/MSjBvomlULwBn5+aCruyy4CMf/lCi4CRcDEuIwUdgwiyYgo5RSQEV//6dO4Kt5s7f + 1nZx0c600v/dRwa9rPzg2bJ2w5b/pQXWletirPjI0wdrWg3GlbQnkQ44Rg0dfEbEsBYeXfqNd2OzFnkd + OvS0NwuAxpUlLwQAGUfBQs+xzwHzJNDD7ZprK1opcORZ13dzKsN6pWzue+UHF28EAJnF8FFaPci4vpSA + ce7Tp89YbRGg0mOlHVT8tDr2ytmDlf8iHa8EIFwbzkaBK1cYbR3Do8HxV18LsJpS2h1gGMLryn7UNO27 + jYPWiqbe6aN80eEHF1++YMVDAUCWcecZ2v+4t/0B0coQ3YYYjJtHBIyF56Zng+nZXM1DYhBYvMW4rb01 + yJqO10xHR4F3s57no/mJ2/a5tz+OB/Z51QIIIaCHec9j3wv/5XcZAqg05RbEyHQssXY3L5PsRYcgcHv2 + PZl6S2dRxI7v8FIAYBOsGpP0whGO29rb5IUeftpn9tVjYPV+AKWgYNJMS4vuBR9L5d2n/ejw/OGBH9f8 + OOMLIxUvB63XWL986VjhOTWNueT1pom/S44A5oLAxgylCXgtAMASzvyiCJQuJNKOoN9iyPg7vKl4Lb+k + bOK9AAAkRSCp4mT/OnjeR2efa85O9snEp8DbPoBiHFj5FQtq8BXcxWTk/I81IPbsO+DValCNWoctgAhB + LCiKwNGBCBQBm5LmOriGU/V6APXAhggMPPAI7yL1wLPwG7TcBh58mJ59dbL31g+gEi+6DVciZPc47vpY + uJMdfY3ZgX0AJfhh/vyp343QV6AEH5u78az/wwMHjVffuzaToSJutgCqMCNchwd23iPC5bWK7Ig9BdOZ + n33uZ3TnTdCCFIAqYeKRAG/h4XTiKoEleBrG9fGGnrCTNsFLe38pCkCNRQCtAbyUk1OKawRXx+mo+Mdf + PVVY4p1+/HUArOInFIAqIMWdgslE27fdxWnFcXAS2Acfftz1WfETgFnmEhSAMnAqHcJjAR4J+jeupxBU + glXlcVR8+PDTk69KYA2eRgFoECB+TiFoDGLY1EflZ8VvjGWtv6YA1EqszPkQgnVr+kyL4EscMSjDKTyE + sXwsSTYyOsamfgilyd8UgJSAYxXitWbBSyx8yXAlAXjvnTZ3ezrxXMnFxn8UgJSp2179NuXsVX15zNJD + E593+6qRNeVECkBTMF+MxDcxCCs97vh8tm9iQashKgpADbCSPBX9BXg8sL1MdpJ5wrVQ2eGxx0qfNNl0 + rkcBSIdrzVdF6wBr5/d0X2/Wz8827dVYNSc08gP03uMuPz45FUyMv80ZeRE2UjYpAA5bCoIAYcAa+/A8 + bDcvycQ3XgHe7IAe+/zcuUJlz+XMewNMxWezvtlWSD4+CkDyTJtyRYhDe2tbkFl6nRlyzBTibGs1L+Yw + rYfiAMGIc11GU7044G6OkM/ng/zZvwfnL8xz8k0xJEX/c0Ugoca89Cqvi/VVaC6YbNsEuCKQbQswfhKw + SIACYBE+oyYB2wQoALYtwPhJwCIBCoBF+IyaBGwToADYtgDjJwGLBCgAFuEzahKwTYACYNsCjJ8ELBKg + AFiEz6hJwDYBCoBtCzB+ErBIgAJgET6jJgHbBCgAti3A+EnAIgEKgEX4jJoEbBOgANi2AOMnAYsEKAAW + 4TNqErBNgAJg2wKMnwQsEqAAWITPqEnANgEKgG0LMH4SsEiAAmARPqMmAdsEKAC2LcD4ScAiAQqARfiM + mgRsE6AA2LYA4ycBiwQoABbhM2oSsE2AAmDbAoyfBCwSoABYhM+oScA2AQqAbQswfhKwSIACYBE+oyYB + 2wQoALYtwPhJwCIBCoBF+IyaBGwToADYtgDjJwGLBCgAFuEzahKwTYACYNsCjJ8ELBKgAFiEz6hJwDYB + CoBtCzB+ErBIgAJgET6jJgHbBCgAti3A+EnAIgEIwIzF+Bk1CZCAPQIzEIAxe/EzZhIgAYsExiAAwxYT + wKhJgATsERhuQdxrN2zJma9ObDOQAAl4QWDm9MlfZcNOwG1eZJmZJAESCAkU6vxV+C/3t6mZ7PKV15rN + 1eFRfpMACagl8JS5+z+D3BUEABtGBH5rRKDTbH4K/zOQAAmoJPBTU/nvDXN2SQCww4jAMFsCIRp+k4A6 + ArjzX6r8yF2hE7A4m6ZTsM/sO2o+nebDQAIkIJvAjEn+NlP5x4qzESsA4UlGCG4x25vNp898Os2HgQRI + QAaBGZPMMfMZNhX/FfMdG/4PEJt7UOKaA7YAAAAASUVORK5CYIIoAAAAMAAAAGAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAGxgVNVRLQvZUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/UI/form_Orient.Designer.cs b/2017/Case.ApplySysOrient/UI/form_Orient.Designer.cs new file mode 100644 index 00000000..c5f352db --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_Orient.Designer.cs @@ -0,0 +1,221 @@ +namespace Case.ApplySysOrient.UI +{ + partial class form_Orient + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_Orient)); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.checkBoxConduit = new System.Windows.Forms.CheckBox(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.checkBoxTray = new System.Windows.Forms.CheckBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.checkBoxPipe = new System.Windows.Forms.CheckBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.checkBoxDuct = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(138, 313); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 40); + this.buttonCancel.TabIndex = 0; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(57, 313); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 40); + this.buttonOk.TabIndex = 1; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // groupBox1 + // + this.groupBox1.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.groupBox1.Controls.Add(this.pictureBox4); + this.groupBox1.Controls.Add(this.checkBoxConduit); + this.groupBox1.Controls.Add(this.pictureBox3); + this.groupBox1.Controls.Add(this.checkBoxTray); + this.groupBox1.Controls.Add(this.pictureBox2); + this.groupBox1.Controls.Add(this.checkBoxPipe); + this.groupBox1.Controls.Add(this.pictureBox1); + this.groupBox1.Controls.Add(this.checkBoxDuct); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(201, 295); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "MEP Categories"; + // + // pictureBox4 + // + this.pictureBox4.BackColor = System.Drawing.Color.White; + this.pictureBox4.Image = global::Case.ApplySysOrient.Properties.Resources.cond_32; + this.pictureBox4.Location = new System.Drawing.Point(26, 197); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(50, 50); + this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox4.TabIndex = 7; + this.pictureBox4.TabStop = false; + // + // checkBoxConduit + // + this.checkBoxConduit.AutoSize = true; + this.checkBoxConduit.Checked = true; + this.checkBoxConduit.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxConduit.Location = new System.Drawing.Point(95, 212); + this.checkBoxConduit.Name = "checkBoxConduit"; + this.checkBoxConduit.Size = new System.Drawing.Size(62, 17); + this.checkBoxConduit.TabIndex = 6; + this.checkBoxConduit.Text = "Conduit"; + this.checkBoxConduit.UseVisualStyleBackColor = true; + // + // pictureBox3 + // + this.pictureBox3.BackColor = System.Drawing.Color.White; + this.pictureBox3.Image = global::Case.ApplySysOrient.Properties.Resources.tray_32; + this.pictureBox3.Location = new System.Drawing.Point(26, 141); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(50, 50); + this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox3.TabIndex = 5; + this.pictureBox3.TabStop = false; + // + // checkBoxTray + // + this.checkBoxTray.AutoSize = true; + this.checkBoxTray.Checked = true; + this.checkBoxTray.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxTray.Location = new System.Drawing.Point(95, 156); + this.checkBoxTray.Name = "checkBoxTray"; + this.checkBoxTray.Size = new System.Drawing.Size(77, 17); + this.checkBoxTray.TabIndex = 4; + this.checkBoxTray.Text = "Cable Tray"; + this.checkBoxTray.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + this.pictureBox2.BackColor = System.Drawing.Color.White; + this.pictureBox2.Image = global::Case.ApplySysOrient.Properties.Resources.pipe_32; + this.pictureBox2.Location = new System.Drawing.Point(26, 85); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(50, 50); + this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox2.TabIndex = 3; + this.pictureBox2.TabStop = false; + // + // checkBoxPipe + // + this.checkBoxPipe.AutoSize = true; + this.checkBoxPipe.Checked = true; + this.checkBoxPipe.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxPipe.Location = new System.Drawing.Point(95, 100); + this.checkBoxPipe.Name = "checkBoxPipe"; + this.checkBoxPipe.Size = new System.Drawing.Size(79, 17); + this.checkBoxPipe.TabIndex = 2; + this.checkBoxPipe.Text = "HVAC Pipe"; + this.checkBoxPipe.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.BackColor = System.Drawing.Color.White; + this.pictureBox1.Image = global::Case.ApplySysOrient.Properties.Resources.duct_32; + this.pictureBox1.Location = new System.Drawing.Point(26, 29); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(50, 50); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // checkBoxDuct + // + this.checkBoxDuct.AutoSize = true; + this.checkBoxDuct.Checked = true; + this.checkBoxDuct.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxDuct.Location = new System.Drawing.Point(95, 44); + this.checkBoxDuct.Name = "checkBoxDuct"; + this.checkBoxDuct.Size = new System.Drawing.Size(81, 17); + this.checkBoxDuct.TabIndex = 0; + this.checkBoxDuct.Text = "HVAC Duct"; + this.checkBoxDuct.UseVisualStyleBackColor = true; + // + // form_Orient + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(225, 365); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "form_Orient"; + this.Text = "Select Categories"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.CheckBox checkBoxDuct; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.CheckBox checkBoxConduit; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.CheckBox checkBoxTray; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.CheckBox checkBoxPipe; + } +} \ No newline at end of file diff --git a/2017/Case.ApplySysOrient/UI/form_Orient.cs b/2017/Case.ApplySysOrient/UI/form_Orient.cs new file mode 100644 index 00000000..cde3e38e --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_Orient.cs @@ -0,0 +1,58 @@ +using System; +using System.Windows.Forms; +using Case.ApplySysOrient.API; + +namespace Case.ApplySysOrient.UI +{ + public partial class form_Orient : Form + { + + internal bool DoDuct; + internal bool DoPipe; + internal bool DoTray; + internal bool DoConduit; + + /// + /// Constructor + /// + public form_Orient() + { + InitializeComponent(); + } + + /// + /// Process + /// + /// + /// + private void buttonOk_Click(object sender, EventArgs e) + { + try + { + clsApi.RecordUsage(); + } + catch { } + + DoDuct = checkBoxDuct.Checked; + DoPipe = checkBoxPipe.Checked; + DoTray = checkBoxTray.Checked; + DoConduit = checkBoxConduit.Checked; + Close(); + } + + /// + /// Cancel + /// + /// + /// + private void buttonCancel_Click(object sender, EventArgs e) + { + DoDuct = false; + DoPipe = false; + DoTray = false; + DoConduit = false; + Close(); + } + + } +} diff --git a/2017/Case.ApplySysOrient/UI/form_Orient.resx b/2017/Case.ApplySysOrient/UI/form_Orient.resx new file mode 100644 index 00000000..70d5bce5 --- /dev/null +++ b/2017/Case.ApplySysOrient/UI/form_Orient.resx @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/API/clsUsage.vb b/2017/Case.BasicReporting/Case.BasicReporting/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.addin b/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.addin new file mode 100644 index 00000000..f0999096 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.addin @@ -0,0 +1,11 @@ + + + + Command Case.BasicReporting + Case.BasicReporting.dll + 48401C1A-333C-4154-B972-ACa72655D58B + Case.BasicReporting.Entry.CmdMain + CASE + Case Design, Inc., www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.vbproj b/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.vbproj new file mode 100644 index 00000000..072d5014 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Case.BasicReporting.vbproj @@ -0,0 +1,129 @@ + + + + Debug + AnyCPU + + + + + {3308EFC3-F631-4A05-B02C-BDACF383CA27} + Library + Case.BasicReporting + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + + + + + form_Main.vb + + + Form + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + form_Main.vb + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Data/clsFormulas.vb b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsFormulas.vb new file mode 100644 index 00000000..38671dfe --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsFormulas.vb @@ -0,0 +1,55 @@ +Imports Autodesk.Revit.DB + +Namespace Data + + Public Class clsFormulas + + Private _fs As FamilySymbol + + Public Property ParamName As String + Public Property IsTypeParameter As String + Public Property ParamFormula As String + + Public ReadOnly Property FamilyName As String + Get + Try + Return _fs.Family.Name + Catch + Return "{error}" + End Try + End Get + End Property + + Public ReadOnly Property FamilyCategory As String + Get + Try + Return _fs.Category.Name + Catch + Return "{error}" + End Try + End Get + End Property + + ''' + ''' Basic Constructor + ''' + ''' + Public Sub New(fs As FamilySymbol, + pName As String, + pFormula As String, + isType As Boolean) + + ' Widen Scope + _fs = fs + ParamName = pName + ParamFormula = pFormula + If isType = True Then + isTypeParameter = "True" + Else + isTypeParameter = "False" + End If + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Data/clsHosts.vb b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsHosts.vb new file mode 100644 index 00000000..c7b5282f --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsHosts.vb @@ -0,0 +1,114 @@ +Imports Autodesk.Revit.DB + +Namespace Data + + Public Class clsHosts + + Public Enum hostType + isNormal + isFace + End Enum + + Public Property ElementHostType As String = "" + Public Property ElementID As String = "" + Public Property HostElementID As String = "" + Public Property ElementName As String = "" + Public Property HostElementName As String = "" + Public Property ElementFamilyName As String = "" + Public Property ElementCategory As String = "" + Public Property HostElementCategory As String = "" + + ''' + ''' Constructor for Host + ''' + ''' + ''' + ''' + ''' + Public Sub New(e As FamilyInstance, hostId As ElementId, hType As hostType) + + ' Widen Scope + If hType = hostType.isFace Then + ElementHostType = "Face Based" + Else + ElementHostType = "Normal Host" + End If + ElementID = e.Id.ToString + HostElementID = hostId.ToString + ElementName = e.Name + Try + ElementCategory = e.Category.Name + Catch + End Try + Try + Dim m_fs As FamilySymbol = TryCast(e.Document.GetElement(e.GetTypeId), FamilySymbol) + If Not m_fs Is Nothing Then + ElementFamilyName = m_fs.Family.Name + End If + Catch + End Try + + Try + + ' Host Element Data + Dim m_host As Element = e.Document.GetElement(hostId) + HostElementName = m_host.Name + Try + HostElementCategory = m_host.Category.Name + Catch + End Try + Catch + End Try + + End Sub + + ''' + ''' From basic Elements + ''' + ''' + ''' + ''' + Public Sub New(e As Element, host As Element) + + ' Kind + ElementHostType = "Level Inheritance" + + ' Names + ElementName = e.Name + HostElementName = host.Name + + ' Category + If Not e.Category Is Nothing Then + ElementCategory = e.Category.Name + Else + ElementCategory = "" + End If + If Not host.Category Is Nothing Then + HostElementCategory = host.Category.Name + Else + HostElementCategory = "" + End If + + ' ElementIDs + ElementID = e.Id.ToString + HostElementID = host.Id.ToString + + ' Family Name + ElementFamilyName = "" + Dim m_fs As FamilyInstance = Nothing + Try + m_fs = TryCast(e, FamilyInstance) + If Not m_fs Is Nothing Then + Dim m_symb As FamilySymbol = TryCast(e.Document.GetElement(m_fs.GetTypeId), FamilySymbol) + If Not m_symb Is Nothing Then + ElementFamilyName = m_symb.Family.Name + End If + End If + Catch + ElementFamilyName = "" + End Try + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Data/clsSettings.vb b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsSettings.vb new file mode 100644 index 00000000..ffe4f928 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Data/clsSettings.vb @@ -0,0 +1,83 @@ +Imports System.Reflection +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsSettings + +#Region "Public Properties" + + Private _cmd As ExternalCommandData + Private _eSet As ElementSet + + ''' + ''' The Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Path to Active Doc + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return Doc.PathName + End If + Else + Return Doc.PathName + End If + Catch + End Try + Return "{error}" + End Get + End Property + + ''' + ''' App Version + ''' + ''' + ''' + ''' + Public ReadOnly Property AppVersion As String + Get + Return Assembly.GetExecutingAssembly.GetName.Version.ToString + End Get + End Property + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + ''' + Public Sub New(c As ExternalCommandData, e As ElementSet) + + ' Widen Scope + _cmd = c + _eSet = e + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Entry/CmdMain.vb b/2017/Case.BasicReporting/Case.BasicReporting/Entry/CmdMain.vb new file mode 100644 index 00000000..3bc6c579 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Entry/CmdMain.vb @@ -0,0 +1,61 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].BasicReporting.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Command Entry Point + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display the Form + Using d As New form_Main(New clsSettings(commandData, elements)) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.Designer.vb b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.Designer.vb new file mode 100644 index 00000000..9fb1a791 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.Designer.vb @@ -0,0 +1,162 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.ButtonOk = New System.Windows.Forms.Button() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.CheckBoxFormulas = New System.Windows.Forms.CheckBox() + Me.CheckBoxHost = New System.Windows.Forms.CheckBox() + Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog() + Me.ButtonHelp = New System.Windows.Forms.Button() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox1.SuspendLayout() + Me.SuspendLayout() + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.Location = New System.Drawing.Point(322, 105) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(75, 40) + Me.ButtonCancel.TabIndex = 0 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'ButtonOk + ' + Me.ButtonOk.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonOk.Location = New System.Drawing.Point(241, 105) + Me.ButtonOk.Name = "ButtonOk" + Me.ButtonOk.Size = New System.Drawing.Size(75, 40) + Me.ButtonOk.TabIndex = 1 + Me.ButtonOk.Text = "OK" + Me.ButtonOk.UseVisualStyleBackColor = True + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = Global.[Case].BasicReporting.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(12, 105) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(166, 40) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 8 + Me.PictureBox1.TabStop = False + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(184, 105) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(213, 40) + Me.ProgressBar1.TabIndex = 9 + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.CheckBoxFormulas) + Me.GroupBox1.Controls.Add(Me.CheckBoxHost) + Me.GroupBox1.Location = New System.Drawing.Point(12, 12) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(385, 87) + Me.GroupBox1.TabIndex = 10 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Reporting Options" + ' + 'CheckBoxFormulas + ' + Me.CheckBoxFormulas.AutoSize = True + Me.CheckBoxFormulas.Location = New System.Drawing.Point(218, 38) + Me.CheckBoxFormulas.Name = "CheckBoxFormulas" + Me.CheckBoxFormulas.Size = New System.Drawing.Size(137, 17) + Me.CheckBoxFormulas.TabIndex = 2 + Me.CheckBoxFormulas.Text = "Family Symbol Formulas" + Me.CheckBoxFormulas.UseVisualStyleBackColor = True + ' + 'CheckBoxHost + ' + Me.CheckBoxHost.AutoSize = True + Me.CheckBoxHost.Location = New System.Drawing.Point(39, 38) + Me.CheckBoxHost.Name = "CheckBoxHost" + Me.CheckBoxHost.Size = New System.Drawing.Size(94, 17) + Me.CheckBoxHost.TabIndex = 0 + Me.CheckBoxHost.Text = "Host Elements" + Me.CheckBoxHost.UseVisualStyleBackColor = True + ' + 'SaveFileDialog1 + ' + Me.SaveFileDialog1.DefaultExt = "*.csv" + Me.SaveFileDialog1.Filter = "CSV Files | *.csv" + Me.SaveFileDialog1.Title = "Select Save Location for your CSV Report" + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.Location = New System.Drawing.Point(184, 105) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(51, 40) + Me.ButtonHelp.TabIndex = 12 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(409, 157) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.ButtonOk) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(425, 195) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(425, 195) + Me.Name = "form_Main" + Me.Text = "Main" + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents ButtonOk As System.Windows.Forms.Button + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents CheckBoxFormulas As System.Windows.Forms.CheckBox + Friend WithEvents CheckBoxHost As System.Windows.Forms.CheckBox + Friend WithEvents SaveFileDialog1 As System.Windows.Forms.SaveFileDialog + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.resx b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.resx new file mode 100644 index 00000000..c4efef6f --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.resx @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAUAAAAAAAEAIACAIgAAVgAAADAwAAABACAAaCYAANYiAAAgIAAAAQAgACgRAAA+SQAAGBgAAAEA + IAC4CQAAZloAABAQAAABACAAaAQAAB5kAACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYA + AApBaUNDUElDQyBQcm9maWxlAABIDZ2Wd1RT2RaHz703vdASIiAl9Bp6CSDSO0gVBFGJSYBQAoaEJnZE + BUYUESlWZFTAAUeHImNFFAuDgmLXCfIQUMbBUURF5d2MawnvrTXz3pr9x1nf2ee319ln733XugBQ/IIE + wnRYAYA0oVgU7uvBXBITy8T3AhgQAQ5YAcDhZmYER/hEAtT8vT2ZmahIxrP27i6AZLvbLL9QJnPW/3+R + IjdDJAYACkXVNjx+JhflApRTs8UZMv8EyvSVKTKGMTIWoQmirCLjxK9s9qfmK7vJmJcm5KEaWc4ZvDSe + jLtQ3pol4aOMBKFcmCXgZ6N8B2W9VEmaAOX3KNPT+JxMADAUmV/M5yahbIkyRRQZ7onyAgAIlMQ5vHIO + i/k5aJ4AeKZn5IoEiUliphHXmGnl6Mhm+vGzU/liMSuUw03hiHhMz/S0DI4wF4Cvb5ZFASVZbZloke2t + HO3tWdbmaPm/2d8eflP9Pch6+1XxJuzPnkGMnlnfbOysL70WAPYkWpsds76VVQC0bQZA5eGsT+8gAPIF + ALTenPMehmxeksTiDCcLi+zsbHMBn2suK+g3+5+Cb8q/hjn3mcvu+1Y7phc/gSNJFTNlReWmp6ZLRMzM + DA6Xz2T99xD/48A5ac3Jwyycn8AX8YXoVVHolAmEiWi7hTyBWJAuZAqEf9Xhfxg2JwcZfp1rFGh1XwB9 + hTlQuEkHyG89AEMjAyRuP3oCfetbEDEKyL68aK2Rr3OPMnr+5/ofC1yKbuFMQSJT5vYMj2RyJaIsGaPf + hGzBAhKQB3SgCjSBLjACLGANHIAzcAPeIACEgEgQA5YDLkgCaUAEskE+2AAKQTHYAXaDanAA1IF60ARO + gjZwBlwEV8ANcAsMgEdACobBSzAB3oFpCILwEBWiQaqQFqQPmULWEBtaCHlDQVA4FAPFQ4mQEJJA+dAm + qBgqg6qhQ1A99CN0GroIXYP6oAfQIDQG/QF9hBGYAtNhDdgAtoDZsDscCEfCy+BEeBWcBxfA2+FKuBY+ + DrfCF+Eb8AAshV/CkwhAyAgD0UZYCBvxREKQWCQBESFrkSKkAqlFmpAOpBu5jUiRceQDBoehYZgYFsYZ + 44dZjOFiVmHWYkow1ZhjmFZMF+Y2ZhAzgfmCpWLVsaZYJ6w/dgk2EZuNLcRWYI9gW7CXsQPYYew7HA7H + wBniHHB+uBhcMm41rgS3D9eMu4Drww3hJvF4vCreFO+CD8Fz8GJ8Ib4Kfxx/Ht+PH8a/J5AJWgRrgg8h + liAkbCRUEBoI5wj9hBHCNFGBqE90IoYQecRcYimxjthBvEkcJk6TFEmGJBdSJCmZtIFUSWoiXSY9Jr0h + k8k6ZEdyGFlAXk+uJJ8gXyUPkj9QlCgmFE9KHEVC2U45SrlAeUB5Q6VSDahu1FiqmLqdWk+9RH1KfS9H + kzOX85fjya2Tq5FrleuXeyVPlNeXd5dfLp8nXyF/Sv6m/LgCUcFAwVOBo7BWoUbhtMI9hUlFmqKVYohi + mmKJYoPiNcVRJbySgZK3Ek+pQOmw0iWlIRpC06V50ri0TbQ62mXaMB1HN6T705PpxfQf6L30CWUlZVvl + KOUc5Rrls8pSBsIwYPgzUhmljJOMu4yP8zTmuc/jz9s2r2le/7wplfkqbip8lSKVZpUBlY+qTFVv1RTV + naptqk/UMGomamFq2Wr71S6rjc+nz3eez51fNP/k/IfqsLqJerj6avXD6j3qkxqaGr4aGRpVGpc0xjUZ + mm6ayZrlmuc0x7RoWgu1BFrlWue1XjCVme7MVGYls4s5oa2u7act0T6k3as9rWOos1hno06zzhNdki5b + N0G3XLdTd0JPSy9YL1+vUe+hPlGfrZ+kv0e/W3/KwNAg2mCLQZvBqKGKob9hnmGj4WMjqpGr0SqjWqM7 + xjhjtnGK8T7jWyawiZ1JkkmNyU1T2NTeVGC6z7TPDGvmaCY0qzW7x6Kw3FlZrEbWoDnDPMh8o3mb+SsL + PYtYi50W3RZfLO0sUy3rLB9ZKVkFWG206rD6w9rEmmtdY33HhmrjY7POpt3mta2pLd92v+19O5pdsN0W + u067z/YO9iL7JvsxBz2HeIe9DvfYdHYou4R91RHr6OG4zvGM4wcneyex00mn351ZzinODc6jCwwX8BfU + LRhy0XHhuBxykS5kLoxfeHCh1FXbleNa6/rMTdeN53bEbcTd2D3Z/bj7Kw9LD5FHi8eUp5PnGs8LXoiX + r1eRV6+3kvdi72rvpz46Pok+jT4Tvna+q30v+GH9Av12+t3z1/Dn+tf7TwQ4BKwJ6AqkBEYEVgc+CzIJ + EgV1BMPBAcG7gh8v0l8kXNQWAkL8Q3aFPAk1DF0V+nMYLiw0rCbsebhVeH54dwQtYkVEQ8S7SI/I0shH + i40WSxZ3RslHxUXVR01Fe0WXRUuXWCxZs+RGjFqMIKY9Fh8bFXskdnKp99LdS4fj7OIK4+4uM1yWs+za + crXlqcvPrpBfwVlxKh4bHx3fEP+JE8Kp5Uyu9F+5d+UE15O7h/uS58Yr543xXfhl/JEEl4SyhNFEl8Rd + iWNJrkkVSeMCT0G14HWyX/KB5KmUkJSjKTOp0anNaYS0+LTTQiVhirArXTM9J70vwzSjMEO6ymnV7lUT + okDRkUwoc1lmu5iO/kz1SIwkmyWDWQuzarLeZ0dln8pRzBHm9OSa5G7LHcnzyft+NWY1d3Vnvnb+hvzB + Ne5rDq2F1q5c27lOd13BuuH1vuuPbSBtSNnwy0bLjWUb326K3tRRoFGwvmBos+/mxkK5QlHhvS3OWw5s + xWwVbO3dZrOtatuXIl7R9WLL4oriTyXckuvfWX1X+d3M9oTtvaX2pft34HYId9zd6brzWJliWV7Z0K7g + Xa3lzPKi8re7V+y+VmFbcWAPaY9kj7QyqLK9Sq9qR9Wn6qTqgRqPmua96nu37Z3ax9vXv99tf9MBjQPF + Bz4eFBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/RO1I8ZHPR4VHpcfCj3XVO9TXN6g3lDbCjZLGseNx + x2/94PVDexOr6VAzo7n4BDghOfHix/gf754MPNl5in2q6Sf9n/a20FqKWqHW3NaJtqQ2aXtMe9/pgNOd + Hc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5n3d+8kLGhfGLiReHOld0Prq05NKdrrCu3suBl69e8blyqdu9 + +/xVl6tnrjldO32dfb3thv2N1h67npZf7H5p6bXvbb3pcLP9luOtjr4Ffef6Xfsv3va6feWO/50bA4sG + +u4uvnv/Xtw96X3e/dEHqQ9eP8x6OP1o/WPs46InCk8qnqo/rf3V+Ndmqb307KDXYM+ziGePhrhDL/+V + +a9PwwXPqc8rRrRG6ketR8+M+YzderH0xfDLjJfT44W/Kf6295XRq59+d/u9Z2LJxPBr0euZP0reqL45 + +tb2bedk6OTTd2nvpqeK3qu+P/aB/aH7Y/THkensT/hPlZ+NP3d8CfzyeCZtZubf94Tz+zI6WX4AABf6 + SURBVHgB7Z1tbBxHGcfXtCDV9oeixhcJEPFZCjSxzZugSSVaOQkS5AWnqFFpUEsVGtQUNbiiRW1TsFCq + pI0ITU0imqpRQwHRFxFRhzQpqI6t9EMLQiDwSysh+ex+yzkIkOJUAiSY/8WbbM5777s38zzzH+l86929 + nZnfM/Pf2ZlnZluCMmHthi23mMObzafPfDrNh4EESEAGgRmTzDHzGT598levmO/Y0BK311T8PrP/qPl0 + mg8DCZCAbAIzJvnbjBCMFWfjfcU7TOU/YPaNmk9n8TH+TwIkIJJAp0n16ELdviIDV0X/Myfgrr8juo/b + JEACagiszi5f2Zn729RwmKNLArCgDqz8IRl+k4BOAp8yInCtEYHfInuFPgBT+fvMNpr9DCRAAn4QWIM+ + gbAPAE1/BhIgAX8IFOp8i7n7Y6jv1/7kmzklARJYIPAVtAAwzs9AAiTgH4HNEIA+//LNHJMACRgCfRCA + TqIgARLwkkAnBICBBEjAUwIUAE8Nz2yTAAhQAFgOSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4zDoJUABY + BkjAYwIUAI+Nz6yTAAWAZYAEPCZAAfDY+Mw6CVAAWAZIwGMCFACPjc+skwAFgGWABDwmQAHw2PjMOglQ + AFgGSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4zDoJUABYBkjAYwIUAI+Nz6yTAAWAZYAEPCZAAfDY+Mw6 + CVAAWAZIwGMCFACPjc+skwAFgGWABDwmQAHw2PjMOglQAFgGSMBjAhQAj43PrJMABYBlgAQ8JkAB8Nj4 + zDoJUABYBkjAYwIUAI+Nz6yTwNVEQAK1Elia6QiWLumI/Vlbe2uQzS4rHMvlZoP58xdizzt7bi44m5+L + PcadzSNAAWgea+djam+7Juhalg3CStzWav7PZgvpznYuC9raWlPLw8Tk24VrT+dywfyF94JQPP46NZVa + nLxwELSs3bDlfwThH4FPrFwZZLuWBZmO6wqVPO0K3gjh+fkLQW5mNhifnCoIw7TZZuuhEaKXf0sBuMxC + 7Raa7L3d1weo5L093YVv6ZnNm8eHcdNqmJicNN/vUBDqNCgFoE5wLv8MTfnVN3w26OnuNhV/RZAxAqA9 + FFoIE5PByOgbAVoIDNURoABUx8n5s3CXR6Vft+ZmFXf4RoCjdTAydsaIwRm2DCqApABUAOTyYVb6ytZ5 + 6w9/DH7zm9cCdibGs6IAxHNxdm/YvO/ftMH7O30tRsIow8joWPC6eURguEyAAnCZhdNbXaYDr3/T+kIz + P83hOKchJJA4CMELLx5ji2CBJQUggUKV5iW+sOYm81zfZzr0VqQZjXfXxqPBkaM/976PgALgYNEPm/lb + b9viRQ++LRPAv+CFl48FwydO2UqC9XgpANZNcDkBqPh4tu/fuD5Vr7vLMXILBPBYsGff/uD8/HveAaEA + OGByVnz7RkBrYNfgY975EFAALJc9PONv33aX2Ds+xtzzc+cWUcx0LBH5+DJ06GmvRgo4GWhR0W3ODvji + D+y8R1QlQVMZk3UmFlxvK3ncoWXTa7wRVy04KDWHbGOxDNx3b+ECvgwXsgXQWHmp+ddw3rn/vh0ievXR + LEZv+e/N503zaSRgGPP+nTvE+C740hKgADRSqmv4bficv/W2W2v4lZ1TUfGPv3oqOH7iZKIdY2Cwd/cg + RcCOWWNjpQDEYkl2p6TmPvznjxx9PtGKH6UJERja/4SYR5+9+55suPUTzb9r21dll6/8gWuJ0pIeFPa7 + 7rg9+NaOu00nX5vT2UJn3t4nDgTD5s7/7//8N7W04tozuXeDdWtvTi2OJC/8mU9/MvjTn/8S/OOf/0ry + ss5ci2sCpmQK3PVxp8O4vusBz/kDDz7cNPdYTMyB4EgIcLtG34XWwBZACpb92ldvNT38O5y/6yPr8IT7 + yTPPpXrXj0O8NLMk+PjHlscdcm7fB6+9NmhpCQoLkDiXuAYTxBZAgwCjP0eT//Hd3w8kdPQh3ejp/uVL + x6JZaNo2hhIlBdgUIxnaAgUgIYuicBx5+qCI4T1k2fYwV6nVghMyRyqX+eY3vp7KdW1elAKQAH148w39 + 6HEx3ny2K38CyK1cAjMy0bejKVAAGrQmnHpC77EGL9WUn7PyN4Z56+3u+3HUkkMKQC20Iufief/Rh75T + WIMvstvpTXT4+eLimpYh0ArQ1BdAAaijpKDyw6MNi3BKCXDwsdXhJ4VRtenEykxaAgWgRkuGlR9r7EsJ + WDIb3n0uhZ5euSscSRL+SjanAFQiFDkusfLDr/+pg4dTc+2N4KlpM9Mh910FcA66UVDrr5xhKADl6ESO + Saz8SD6e+ytN241ks2mbeGGJ5NBj3rSkIVAAqrCi1MqP+fsurneHKdHS31aEV6xpCBSAClaUWvkLTf9D + hyvkzs5hDc/QkvqAylmZAlCGjtTKjyxhPr+rb9DVssS5BqcgCkAZAYCDj0Slx0w7V4f8wteZlcEu5hBe + ry49UABKWBAeflKbqkMHnymRK/u7pTKNI6fhDU0UgBjLbjaOHnjLrsSAjj+XX4TZv/FLErHGplnyUGaY + IQpASGLhG+O727fdWbRXzr/PPvczZxOLSVPSe/+jcPE4Iz1QACIWhI/3gGn6Sw1w93VxzD/kiXccMrhF + gAKwYA/0+GPpJ8nPdXD6cTXgbqml999VxvWkiwKwQA1v55HY4x8aHXd/V4f9kEZNnX8hcw3fFABjxYuv + 4JbZ6RcWwuOOv+FWaqdqyFfrt/cCgKYp7v6SQ+GVXWbGn6sBjCW3rlzlmkS6vBcALOoh+bkfheCFF919 + 9kf6epVMnEFetAWvBQDLd0u/M8Hrz+Vxf1SYHvOCUI1hfHJKfLa8FQAM+UlZvrtcKTv+6mvlDjtxrCsr + 32XWCZApJMJbAdDytpeR0bEUikWyl5TeyipFY2L87VKHxOz3UgDg6quhUGLo7/z8e04XNk0LaBaDPntO + xuvNitMd/d87AUCPtIamP4z4e/NOP9dDe2ub60msK31Yb8Flv4tqM+WdAKDyS+/1h3FRAN8UIACSF/8s + V4k0dAAif14JABZw0OKQIuHZv1wFkn4MvhcaglcCoOmtLiOjb2gof2LzMD4hfwgQ8L0RALj7apmMgrF/ + l2f9ia3VVSYcj19a+HsjAFtv21Kled0/bVxJ89N90vEpfEtA30t8yhfv9UIAtC1EIaH3f3FR07NHE38v + BEDT3R/VSELvf1jd8/l8uKniG49fkvhXgq5eALTd/aX1Po9PvlOpDIo6PjJ2RlR6KyVWvQD0b9pQiYGo + 49KeP+Esg7umhoDOv+MnTmrIyqU8qBYAjPtrcPm9ZC2zIXH4ScKEpSjjUtt42Yrrrtel0l5qv2oB+PKX + 9SxBDQNKHX6C0xLSLjmgFaPt7g97qBUA+PxrW4cu5/CqP+UqN+6aLi9YWi7t4TG8bEXb3R95UysA/Ru/ + GNpOzbdk/3O8pVhaB2ZYcHDnd33RlTCttX6rFYDVN3yuVhbOny99/vmeffvFPQpAtJ49+gvny0a9CVQp + AHi7j6Y30ITGnZ7NhZsiv9GE3jX4mBgRwCMXREtzUCkAq4wAaAvohNLwDAofegkigMq/a3C3Cubl6oI6 + AcAbfrRM+Y0aTsvkE+TJdRHwpfLDFuoEQFvPP4yEIHUE4GLqF/8NRcA1JyGfKj+sok4AVins/IOhcrlZ + fKkKEIGBBx8OXPFuRG//tx94RH2zP1qIro7+I30bzX+tLQAN68/FlS/0a+zZ92QAr82BnfdY6byFk9LQ + ocOqJvnEsY7bp0oAepW+gAKG09QHEFcQMc5+970DC+9p7GvK4i0F337j3os7v4YO1jiulfapEgCNvf8w + oLbn/3KF8nWz1Bk+8OSEM1dvT3fi8znAE0uqw0XZ14of2kCVAPR2rwjzpepbuh99PcbAI0/ogINHu65l + 2QArDGNyV3tbW5DpWFLxcQEVHewKMxLn5gI4UsGXwvdKH7WHGgHACyg0Ov/AWJJdgKOFrd5tVFg8Imh1 + x62XSxK/UzMK0NuzMgkevAYJeEVAjQBoWfE3rvRJnwMQlyfuc4OAGgHo7WYLwI0ixVRIIqBCANBjrOF1 + X6UKjvRJQKXyxf32CagQgN7u6+2TTDEF7LVOEa7nl1YhANrW/fO8TDL7TSSgQgC6stkmImtuVFJX0Wku + JcZWLwEVAqB5BKBew/J3JFANAfECgA5ABhIggfoIyBeAJboF4Pz8fH2W5a9IoAoC4gUA/uGag08TgTTb + 0dW8iReAttZrXGXLdJGA8wTEC4DmEQDnSw8TKJ6AeAHQ7AEovnQxA84TEC8AdAJyvowxgQ4TEC8ADrNl + 0kjAeQKiBQALSWoP+XxeexaZP4sERAuARW5Nizp/9u9Ni4sR+UeAAuCfzZljErhEQLQAaHcCumQlbpBA + SgREC0BKTHhZEvCGAAXAcVNnll7neAqZPMkEKACOWy+TyTieQiZPMgEKgGTrMe0k0CABCkCDAPlzEpBM + gAIg2XpMOwk0SIAC0CBA/pwEJBOgADhuPU52ctxAwpNHAXDcgHgTLgMJpEWAApAWWV6XBAQQoAA4biQ+ + AjhuIOHJowA4bkCueOS4gYQnjwIgwIB894EAIwlNomgByOVmhWKvLdlLlb/7oDYaPDtJAqIFYP78hSRZ + OHstTghy1jTiEyZaAMTTrzIDnBBUJSieVjMB0QIwPZurOcMSf9DbrX/tQ4l20ZBm0QJwfv49DTaomIdM + x5KK5/AEEqiHgGgBQIZ9eHdexrwBub2Nr0Crp4DzN+UJiBeA+Xk/OgK7lmXLW5JHSaAOAuIFYHxyqo5s + y/sJF0CVZzMJKRYvAL68OIMdgRKqk7w0iheA6dy78qjXkeKe7hV1/Io/IYHyBK4uf9j9o9MzfngDwhJ4 + Fdpfp/x45GlWyevqXBa0t16ccn323FxwNj/XrKidiEe8AIDixOTbgQ93yFWrPkMBSKDaYESlf9OGoH/j + +qB4shVGlY6fOBm8PvpGAjG5fwnxjwBAPJ3zwyFo9Q2fc79EOZ5C3PGH9j8RbL3t1kWVH0nH9OuB++4N + fvyjx70YelUhABOT7zhe7JJJHvwBUIAZ6iMAdnt3fz8Ax0oBQrB392Cl08QfVyEA45OT4g1RbQbWrbmp + 2lN5XoQAmv2PPvSd2Lt+5LQrNiECX/vqrVfs0/aPCgGAS7APHoEofOvW9Gkrg6nnB5Ufd/Nq7vzFiUE/ + gWYvTBUCAKONjJ4ptp3K/9Fp9QW2Amqy7fZtdxWe7Wv60cLJ4L36hs/W81MRv1EjAOMT/gyPsRVQfd26 + /74dptV0c/U/iDlT83RsNQIAf4C8J2O4GPKETwBDeQJJVH7EoNkLU40AwFAjY348BiCvW2/X3TmFPDYS + 0HnX6J0/jF+zc5AuAfCkHwAFk62AsHou/kYfCcb5kwqaO5hVCQCUGl6BvoTtd9/pS1arziea/XDkSTK8 + 9Yc/Jnk5p66lSgBAdmR0zCnAaSYG49SbN61PMwpR107qmT+aaYwu8REgSsTxbfhw+9IZCFOgqcv3BgRB + GpUfi80cOfq84yW+seSpawEAh0+dgRinhoebrwFOOvDbT6rDL8px7xNPBtrXnVQpAJjN5ctSYSiweBT4 + 5rY7omXXi+2Lvv2DdTv5lIN05OjPvZh5eVV2+coflAMh8di///Pf4AMfeL/q8dtiu3z8Y8uDubl8MD3z + bvEhlf/faLzzHn3ogbrceysBwXP/8794sdJpKo6rbAHAMr61ApBn9H77MFsQrZ1dNU7sAZ9qAob8njp0 + uJpTVZyjVgDw7PbCy8dUGKmWTGC6q1YRQL7wvI/FPNIIqPy7BnencWlnr6lWAEB8+MQpr0YEkGd0CkIE + 0ETWFODZN2QqP/o70gjoM3rq4GH1nX7F7FT2AUQzOWMWDV23trHJINHrSdhG/8dNn79RRZ8A5jzs3f29 + VGfkofLvGnzM9J/MSjBvomlULwBn5+aCruyy4CMf/lCi4CRcDEuIwUdgwiyYgo5RSQEV//6dO4Kt5s7f + 1nZx0c600v/dRwa9rPzg2bJ2w5b/pQXWletirPjI0wdrWg3GlbQnkQ44Rg0dfEbEsBYeXfqNd2OzFnkd + OvS0NwuAxpUlLwQAGUfBQs+xzwHzJNDD7ZprK1opcORZ13dzKsN6pWzue+UHF28EAJnF8FFaPci4vpSA + ce7Tp89YbRGg0mOlHVT8tDr2ytmDlf8iHa8EIFwbzkaBK1cYbR3Do8HxV18LsJpS2h1gGMLryn7UNO27 + jYPWiqbe6aN80eEHF1++YMVDAUCWcecZ2v+4t/0B0coQ3YYYjJtHBIyF56Zng+nZXM1DYhBYvMW4rb01 + yJqO10xHR4F3s57no/mJ2/a5tz+OB/Z51QIIIaCHec9j3wv/5XcZAqg05RbEyHQssXY3L5PsRYcgcHv2 + PZl6S2dRxI7v8FIAYBOsGpP0whGO29rb5IUeftpn9tVjYPV+AKWgYNJMS4vuBR9L5d2n/ejw/OGBH9f8 + OOMLIxUvB63XWL986VjhOTWNueT1pom/S44A5oLAxgylCXgtAMASzvyiCJQuJNKOoN9iyPg7vKl4Lb+k + bOK9AAAkRSCp4mT/OnjeR2efa85O9snEp8DbPoBiHFj5FQtq8BXcxWTk/I81IPbsO+DValCNWoctgAhB + LCiKwNGBCBQBm5LmOriGU/V6APXAhggMPPAI7yL1wLPwG7TcBh58mJ59dbL31g+gEi+6DVciZPc47vpY + uJMdfY3ZgX0AJfhh/vyp343QV6AEH5u78az/wwMHjVffuzaToSJutgCqMCNchwd23iPC5bWK7Ig9BdOZ + n33uZ3TnTdCCFIAqYeKRAG/h4XTiKoEleBrG9fGGnrCTNsFLe38pCkCNRQCtAbyUk1OKawRXx+mo+Mdf + PVVY4p1+/HUArOInFIAqIMWdgslE27fdxWnFcXAS2Acfftz1WfETgFnmEhSAMnAqHcJjAR4J+jeupxBU + glXlcVR8+PDTk69KYA2eRgFoECB+TiFoDGLY1EflZ8VvjGWtv6YA1EqszPkQgnVr+kyL4EscMSjDKTyE + sXwsSTYyOsamfgilyd8UgJSAYxXitWbBSyx8yXAlAXjvnTZ3ezrxXMnFxn8UgJSp2179NuXsVX15zNJD + E593+6qRNeVECkBTMF+MxDcxCCs97vh8tm9iQashKgpADbCSPBX9BXg8sL1MdpJ5wrVQ2eGxx0qfNNl0 + rkcBSIdrzVdF6wBr5/d0X2/Wz8827dVYNSc08gP03uMuPz45FUyMv80ZeRE2UjYpAA5bCoIAYcAa+/A8 + bDcvycQ3XgHe7IAe+/zcuUJlz+XMewNMxWezvtlWSD4+CkDyTJtyRYhDe2tbkFl6nRlyzBTibGs1L+Yw + rYfiAMGIc11GU7044G6OkM/ng/zZvwfnL8xz8k0xJEX/c0Ugoca89Cqvi/VVaC6YbNsEuCKQbQswfhKw + SIACYBE+oyYB2wQoALYtwPhJwCIBCoBF+IyaBGwToADYtgDjJwGLBCgAFuEzahKwTYACYNsCjJ8ELBKg + AFiEz6hJwDYBCoBtCzB+ErBIgAJgET6jJgHbBCgAti3A+EnAIgEKgEX4jJoEbBOgANi2AOMnAYsEKAAW + 4TNqErBNgAJg2wKMnwQsEqAAWITPqEnANgEKgG0LMH4SsEiAAmARPqMmAdsEKAC2LcD4ScAiAQqARfiM + mgRsE6AA2LYA4ycBiwQoABbhM2oSsE2AAmDbAoyfBCwSoABYhM+oScA2AQqAbQswfhKwSIACYBE+oyYB + 2wQoALYtwPhJwCIBCoBF+IyaBGwToADYtgDjJwGLBCgAFuEzahKwTYACYNsCjJ8ELBKgAFiEz6hJwDYB + CoBtCzB+ErBIgAJgET6jJgHbBCgAti3A+EnAIgEIwIzF+Bk1CZCAPQIzEIAxe/EzZhIgAYsExiAAwxYT + wKhJgATsERhuQdxrN2zJma9ObDOQAAl4QWDm9MlfZcNOwG1eZJmZJAESCAkU6vxV+C/3t6mZ7PKV15rN + 1eFRfpMACagl8JS5+z+D3BUEABtGBH5rRKDTbH4K/zOQAAmoJPBTU/nvDXN2SQCww4jAMFsCIRp+k4A6 + ArjzX6r8yF2hE7A4m6ZTsM/sO2o+nebDQAIkIJvAjEn+NlP5x4qzESsA4UlGCG4x25vNp898Os2HgQRI + QAaBGZPMMfMZNhX/FfMdG/4PEJt7UOKaA7YAAAAASUVORK5CYIIoAAAAMAAAAGAAAAABACAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAGxgVNVRLQvZUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.vb b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.vb new file mode 100644 index 00000000..6412803b --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/Forms/form_Main.vb @@ -0,0 +1,511 @@ +Imports Autodesk.Revit.DB +Imports System.IO +Imports System.Windows.Forms +Imports [Case].BasicReporting.API +Imports [Case].BasicReporting.Data + +Public Class form_Main + + Private _s As clsSettings + + ''' + ''' All Hosted Elements + ''' + ''' + ''' + ''' + Public Property AllHostedElements As List(Of clsHosts) + + ''' + ''' All Formulas + ''' + ''' + ''' + ''' + Public Property AllFormulas As List(Of clsFormulas) + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + AllHostedElements = New List(Of clsHosts) + AllFormulas = New List(Of clsFormulas) + + ' Form Viz + AllowOk() + SetFormViz(FormViz.StandBy) + Text = "Basic Reporting v" & _s.AppVersion + + End Sub + +#Region "Form Visibility" + + Private Enum FormViz + Processing + StandBy + End Enum + + ''' + ''' Set the Form Visibility Basedon State + ''' + ''' + ''' + Private Sub SetFormViz(p_v As FormViz) + Select Case p_v + Case FormViz.Processing + ProgressBar1.Show() + ButtonCancel.Hide() + ButtonOk.Hide() + ButtonHelp.Hide() + Case FormViz.StandBy + ProgressBar1.Hide() + ButtonCancel.Show() + ButtonOk.Show() + End Select + End Sub + +#End Region + +#Region "Private Members" + + ''' + ''' Perform the reporting + ''' + ''' + Private Sub Report() + + ' Perform Queries + If Me.CheckBoxHost.Checked = True Then GetAllFamilyInstanceHosts() + If Me.CheckBoxFormulas.Checked = True Then GetAllFamilyFormulas() + + ' Save Location & Write File + Dim m_path As String = "" + + Try + + ' Show the Save Dialog + If Me.SaveFileDialog1.ShowDialog = DialogResult.OK Then + + ' Did we get a file name? + If Not String.IsNullOrEmpty(SaveFileDialog1.FileName) Then + m_path = Me.SaveFileDialog1.FileName + End If + + End If + + Catch + End Try + + If String.IsNullOrEmpty(m_path) Then + MsgBox("No File Path to Save Report...", MsgBoxStyle.Critical, "Sad Times... :(") + Else + + ' Write the Results + WriteResultsToFile(m_path) + + End If + + End Sub + + ''' + ''' Return a List of Formulas + ''' + ''' + Private Sub GetAllFamilyFormulas() + + ' All Symbols + Using col As New FilteredElementCollector(_s.Doc) + col.OfClass(GetType(FamilySymbol)) + + ' temporary + col.OfCategory(BuiltInCategory.OST_Furniture) + + ' Iterate over each + For Each x In col.ToElements + + Try + + ' Get the Family + Dim m_fs As FamilySymbol = TryCast(x, FamilySymbol) + If Not m_fs Is Nothing Then + + ' Family Doc + Dim m_famDoc As Document = _s.Doc.EditFamily(m_fs.Family) + + Dim m_mgr As FamilyManager = m_famDoc.FamilyManager + + ' Iterate the Parameters + For Each fp As FamilyParameter In m_mgr.Parameters + + Try + + ' Is ther a Formula? + If Not String.IsNullOrEmpty(fp.Formula) Then + + ' Get the Formula Object + Dim m_form As New clsFormulas(m_fs, fp.Definition.Name, fp.Formula, Not fp.IsInstance) + AllFormulas.Add(m_form) + + End If + + Catch + End Try + + Next + + End If + + Catch + End Try + + Next + + End Using + + End Sub + + ''' + ''' Get All Hosted Elements + ''' + ''' + Private Sub GetAllFamilyInstanceHosts() + + ' All Instance Elements + Using col As New FilteredElementCollector(_s.Doc) + col.OfClass(GetType(FamilyInstance)) + + ' List of Elements + Dim m_e As New List(Of FamilyInstance) + For Each x In col.ToElements + Try + m_e.Add(x) + Catch + End Try + Next + + Dim iCnt As Integer = m_e.Count + + ' Progressbar + With Me.ProgressBar1 + .Minimum = 0 + .Value = 0 + .Maximum = iCnt + End With + + ' Process Each Element + For Each e In m_e + + ' Step the Progress + Try + ProgressBar1.Increment(1) + Catch + End Try + + Try + + ' Test for Face + If Not e.HostFace Is Nothing Then + + Try + Dim h As New clsHosts(e, e.HostFace.ElementId, clsHosts.hostType.isFace) + AllHostedElements.Add(h) + Continue For + Catch + End Try + + End If + + ' Normal Host + If Not e.Host Is Nothing Then + + Try + Dim h As New clsHosts(e, e.Host.Id, clsHosts.hostType.isNormal) + AllHostedElements.Add(h) + Catch + End Try + + End If + + Catch + End Try + + Next + + ' Levels + LevelHosting() + + End Using + + End Sub + + ''' + ''' Get all Level Inheritances + ''' + ''' + Private Sub LevelHosting() + + ' Levels + Dim m_levels As New List(Of Level) + Using col As New FilteredElementCollector(_s.Doc) + col.OfClass(GetType(Level)) + For Each x In col.ToElements + Try + m_levels.Add(x) + Catch + End Try + Next + End Using + + Try + + ' Delete Levels One by One + For Each x As Level In m_levels + + ' Resulting Hosted Items if Deleted + Dim m_ids As IList(Of ElementId) = Nothing + + ' Start a New Transaction + Using t As New Transaction(_s.Doc, "Levels") + If t.Start Then + + Try + + ' Delete the Level + m_ids = _s.Doc.Delete(x.Id) + + ' Hosted Elements + t.RollBack() + + Catch + End Try + + End If + + End Using + + Try + + ' Test List + For Each eid As ElementId In m_ids + + ' Avoid Self + If eid.IntegerValue = x.Id.IntegerValue Then Continue For + + ' Get the Element + Dim m_e As Element = _s.Doc.GetElement(eid) + + If Not m_e Is Nothing Then + + Try + + ' Add it + AllHostedElements.Add(New clsHosts(m_e, x)) + + Catch + End Try + + End If + + Next + + Catch + End Try + + Next + + Catch + End Try + + End Sub + + ''' + ''' Write Hosted Data to File + ''' + ''' File Path + ''' + ''' + Private Function WriteResultsToFile(fPath As String) As String + + Try + + ' Writer + Using sw As New StreamWriter(fPath, False) + + ' Model Name + sw.WriteLine(_s.DocName) + sw.WriteLine(Now.ToString) + + ' Formulas + If Me.CheckBoxFormulas.Checked = True Then + + sw.WriteLine("") + sw.WriteLine("") + sw.WriteLine("Parametric Formula Report:") + + ' Header - Formulas + Dim m_line As String = "Family," + m_line += "Category," + m_line += "Parameter," + m_line += "isType," + m_line += "Formula" + sw.WriteLine(m_line) + + ' Write Each Item + For Each x In AllFormulas + + Dim m_l As String = x.FamilyName & "," + m_l += x.FamilyCategory & ", " + m_l += x.ParamName & ", " + m_l += x.IsTypeParameter & ", " + m_l += x.ParamFormula + + sw.WriteLine(m_l) + + Next + + End If + + ' Hosted Stuff + If Me.CheckBoxHost.Checked = True Then + + sw.WriteLine("") + sw.WriteLine("") + sw.WriteLine("Hosting Report:") + + ' Header - Hosting + Dim m_line As String = "ElementID," + m_line += "ElementName," + m_line += "ElementFamilyName," + m_line += "ElementCategory," + m_line += "ElementHostType," + m_line += "HostElementID," + m_line += "HostElementName," + m_line += "HostElementCategory" + sw.WriteLine(m_line) + + ' Write Each Item + For Each x In AllHostedElements + + Dim m_l As String = x.ElementID & "," + m_l += x.ElementName & "," + m_l += x.ElementFamilyName & "," + m_l += x.ElementCategory & "," + m_l += x.ElementHostType & "," + m_l += x.HostElementID & "," + m_l += x.HostElementName & "," + m_l += x.HostElementCategory & "," + + sw.WriteLine(m_l) + + Next + + End If + + End Using + Catch ex As Exception + + Return ex.Message + + End Try + + Return "" + + End Function + + ''' + ''' 1 selection required minimum + ''' + ''' + Private Sub AllowOk() + + If Me.CheckBoxFormulas.Checked = True Or Me.CheckBoxHost.Checked = True Then + + ButtonOk.Enabled = True + + Else + + ButtonOk.Enabled = False + + End If + + End Sub + +#End Region + +#Region "Form Controls & Events" + + ''' + ''' Help Button + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-basic-reporting-hosting-and-formulas") + End Sub + + ''' + ''' Launch Case Site on Logo Click + ''' + ''' + ''' + ''' + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Process.Start("http://www.case-inc.com") + End Sub + + ''' + ''' Cancel + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCancel.Click + + ' Close + Close() + + End Sub + + ''' + ''' Commit + ''' + ''' + ''' + ''' + Private Sub ButtonOk_Click(sender As System.Object, e As System.EventArgs) Handles ButtonOk.Click + + ' Form Viz + SetFormViz(FormViz.Processing) + + Try + ' Record use + RecordUsage() + Catch + End Try + + ' Run Report + Report() + + ' Close + Close() + + End Sub + + Private Sub CheckBoxFormulas_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxFormulas.CheckedChanged + AllowOk() + End Sub + + Private Sub CheckBoxHost_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxHost.CheckedChanged + AllowOk() + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/My Project/AssemblyInfo.vb b/2017/Case.BasicReporting/Case.BasicReporting/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..0fbd50b6 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.Designer.vb b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.Designer.vb new file mode 100644 index 00000000..8faa5835 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.BasicReporting.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.resx b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.Designer.vb b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.Designer.vb new file mode 100644 index 00000000..48afdfa9 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].BasicReporting.My.MySettings + Get + Return Global.[Case].BasicReporting.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.settings b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.settings new file mode 100644 index 00000000..f7f176ac --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/2017/Case.BasicReporting/Case.BasicReporting/Resources/Case_Clearly.png b/2017/Case.BasicReporting/Case.BasicReporting/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.BasicReporting/Case.BasicReporting/Resources/Case_Clearly.png differ diff --git a/2017/Case.BasicReporting/Case.BasicReporting/app.config b/2017/Case.BasicReporting/Case.BasicReporting/app.config new file mode 100644 index 00000000..f0025c19 --- /dev/null +++ b/2017/Case.BasicReporting/Case.BasicReporting/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/API/clsUsage.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.addin b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.addin new file mode 100644 index 00000000..912e7118 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.addin @@ -0,0 +1,11 @@ + + + + Command Case.ChangeReplaceFamTypeNames + Case.ChangeReplaceFamTypeNames.dll + Case.ChangeReplaceFamTypeNames.Entry.CmdMain + fc3ed2c7-243e-448a-9dff-a88545492948 + CASE + Case Design, Inc., www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.vbproj b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.vbproj new file mode 100644 index 00000000..186ad27a --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + + + + + {15957C16-D16D-4F96-982C-DA2DB3018AE7} + Library + Case.ChangeReplaceFamTypeNames + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + Case.ChangeReplaceFamTypeNames + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + True + True + Resources.resx + + + form_Main.vb + + + Form + + + + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + form_Main.vb + + + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Data/clsSettings.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Data/clsSettings.vb new file mode 100644 index 00000000..e3783571 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Data/clsSettings.vb @@ -0,0 +1,110 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsSettings + + Private _cmd As ExternalCommandData + Private _eSet As ElementSet + + Friend FamilyElements As List(Of FamilySymbol) + +#Region "Public Properties" + + ''' + ''' Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Document Path + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return "Detached Model" + End If + Else + Return Doc.PathName + End If + Catch + Return "" + End Try + End Get + End Property + + ''' + ''' App Version + ''' + ''' + ''' + ''' + Public ReadOnly Property Version As String + Get + Return My.Application.Info.Version.ToString + End Get + End Property + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + ''' + Public Sub New(cmd As ExternalCommandData, eSet As ElementSet) + + ' Widen Scope + _cmd = cmd + _eSet = eSet + + End Sub + + ''' + ''' Get All Families + ''' + ''' + Friend Sub GetFams() + + ' Fresh List + FamilyElements = New List(Of FamilySymbol) + + ' Get the Families + Using col As New FilteredElementCollector(Doc) + col.OfClass(GetType(FamilySymbol)) + + For Each x In col.ToElements + + Try + FamilyElements.Add(x) + Catch + End Try + + Next + + End Using + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Entry/CmdMain.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Entry/CmdMain.vb new file mode 100644 index 00000000..5980f31a --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Entry/CmdMain.vb @@ -0,0 +1,62 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].ChangeReplaceFamTypeNames.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Command Entry Point + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display the Form + Using m_d As New form_Main(New clsSettings(commandData, elements)) + m_d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/AssemblyInfo.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..31d1b962 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.Designer.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.Designer.vb new file mode 100644 index 00000000..5dd00086 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.ChangeReplaceFamTypeNames.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.resx b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Resources/Case_Clearly.png b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/Resources/Case_Clearly.png differ diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.Designer.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.Designer.vb new file mode 100644 index 00000000..a6ee2f2b --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.Designer.vb @@ -0,0 +1,206 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.ButtonOk = New System.Windows.Forms.Button() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.CheckBoxTypes = New System.Windows.Forms.CheckBox() + Me.TextBoxReplace = New System.Windows.Forms.TextBox() + Me.LabelReplace = New System.Windows.Forms.Label() + Me.TextBoxFind = New System.Windows.Forms.TextBox() + Me.CheckBoxFamilies = New System.Windows.Forms.CheckBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ButtonHelp = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.Location = New System.Drawing.Point(362, 175) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(75, 40) + Me.ButtonCancel.TabIndex = 0 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'ButtonOk + ' + Me.ButtonOk.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonOk.Location = New System.Drawing.Point(281, 175) + Me.ButtonOk.Name = "ButtonOk" + Me.ButtonOk.Size = New System.Drawing.Size(75, 40) + Me.ButtonOk.TabIndex = 1 + Me.ButtonOk.Text = "OK" + Me.ButtonOk.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.CheckBoxTypes) + Me.GroupBox1.Controls.Add(Me.TextBoxReplace) + Me.GroupBox1.Controls.Add(Me.LabelReplace) + Me.GroupBox1.Controls.Add(Me.TextBoxFind) + Me.GroupBox1.Controls.Add(Me.CheckBoxFamilies) + Me.GroupBox1.Controls.Add(Me.Label1) + Me.GroupBox1.Location = New System.Drawing.Point(12, 12) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(425, 157) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Find and Replace (Do Not Use Wildcards)" + ' + 'CheckBoxTypes + ' + Me.CheckBoxTypes.AutoSize = True + Me.CheckBoxTypes.Checked = True + Me.CheckBoxTypes.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxTypes.Location = New System.Drawing.Point(269, 113) + Me.CheckBoxTypes.Name = "CheckBoxTypes" + Me.CheckBoxTypes.Size = New System.Drawing.Size(126, 17) + Me.CheckBoxTypes.TabIndex = 5 + Me.CheckBoxTypes.Text = "Change Type Names" + Me.CheckBoxTypes.UseVisualStyleBackColor = True + ' + 'TextBoxReplace + ' + Me.TextBoxReplace.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TextBoxReplace.Location = New System.Drawing.Point(84, 70) + Me.TextBoxReplace.Name = "TextBoxReplace" + Me.TextBoxReplace.Size = New System.Drawing.Size(335, 20) + Me.TextBoxReplace.TabIndex = 4 + ' + 'LabelReplace + ' + Me.LabelReplace.AutoSize = True + Me.LabelReplace.Location = New System.Drawing.Point(22, 73) + Me.LabelReplace.Name = "LabelReplace" + Me.LabelReplace.Size = New System.Drawing.Size(50, 13) + Me.LabelReplace.TabIndex = 3 + Me.LabelReplace.Text = "Replace:" + ' + 'TextBoxFind + ' + Me.TextBoxFind.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TextBoxFind.Location = New System.Drawing.Point(84, 32) + Me.TextBoxFind.Name = "TextBoxFind" + Me.TextBoxFind.Size = New System.Drawing.Size(335, 20) + Me.TextBoxFind.TabIndex = 2 + ' + 'CheckBoxFamilies + ' + Me.CheckBoxFamilies.AutoSize = True + Me.CheckBoxFamilies.Checked = True + Me.CheckBoxFamilies.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxFamilies.Location = New System.Drawing.Point(84, 113) + Me.CheckBoxFamilies.Name = "CheckBoxFamilies" + Me.CheckBoxFamilies.Size = New System.Drawing.Size(131, 17) + Me.CheckBoxFamilies.TabIndex = 1 + Me.CheckBoxFamilies.Text = "Change Family Names" + Me.CheckBoxFamilies.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(22, 35) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(30, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Find:" + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(177, 175) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(260, 40) + Me.ProgressBar1.TabIndex = 6 + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = Global.[Case].ChangeReplaceFamTypeNames.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(12, 175) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(159, 40) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 6 + Me.PictureBox1.TabStop = False + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.Location = New System.Drawing.Point(225, 175) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(50, 40) + Me.ButtonHelp.TabIndex = 8 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(449, 227) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.ButtonOk) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(465, 265) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(465, 265) + Me.Name = "form_Main" + Me.Text = "Change and Replace Family and Type Names" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents ButtonOk As System.Windows.Forms.Button + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents TextBoxFind As System.Windows.Forms.TextBox + Friend WithEvents CheckBoxFamilies As System.Windows.Forms.CheckBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents TextBoxReplace As System.Windows.Forms.TextBox + Friend WithEvents LabelReplace As System.Windows.Forms.Label + Friend WithEvents CheckBoxTypes As System.Windows.Forms.CheckBox + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.resx b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.resx new file mode 100644 index 00000000..70d5bce5 --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.resx @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.vb b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.vb new file mode 100644 index 00000000..f48eea7b --- /dev/null +++ b/2017/Case.ChangeReplaceFamTypeNames/Case.ChangeReplaceFamTypeNames/UI/form_Main.vb @@ -0,0 +1,221 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports System.Diagnostics +Imports [Case].ChangeReplaceFamTypeNames.API +Imports [Case].ChangeReplaceFamTypeNames.Data + +Public Class form_Main + + Private _s As clsSettings + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + AllowOK() + ProgressBar1.Hide() + Text = "Change & Replace Family/Type Names v" & _s.Version + + End Sub + + ''' + ''' Minimum Text Requirements + ''' + ''' + Private Sub AllowOk() + + If Not (String.IsNullOrEmpty(TextBoxFind.Text) And String.IsNullOrEmpty(TextBoxReplace.Text)) Then + If Not (CheckBoxFamilies.Checked = False And Me.CheckBoxTypes.Checked = False) Then + ButtonOk.Enabled = True + Else + ButtonOk.Enabled = False + End If + Else + ButtonOk.Enabled = False + End If + + End Sub + + ''' + ''' Rename the Items + ''' + ''' + Private Sub RenameStuff() + + ' Get the Families + _s.GetFams() + + ' Only Rename Families Once + Dim m_famFixed As New SortedDictionary(Of Integer, Integer) + + ' Progress Bar + With Me.ProgressBar1 + .Value = 0 + .Minimum = 0 + .Maximum = _s.FamilyElements.Count + .Show() + End With + + ButtonOk.Hide() + ButtonCancel.Hide() + + ' User Reporting + Dim iFail As Integer = 0 + Dim iSuc As Integer = 0 + + ' Process each Item + For Each x In _s.FamilyElements + + ' Step the Progress Bar + Try + ProgressBar1.Increment(1) + Catch + End Try + + ' Renamed + Dim m_renamed As Integer = 0 + + ' Start a New Transaction + Using t As New Transaction(_s.Doc, "CASE Renamer") + If t.Start Then + + Try + + ' Check for Family Names + If Me.CheckBoxFamilies.Checked = True Then + + ' Have we Processed the Family? + If Not m_famFixed.ContainsKey(x.Family.Id.IntegerValue) Then + + ' Add it + m_famFixed.Add(x.Family.Id.IntegerValue, x.Family.Id.IntegerValue) + + ' Check It + If Not String.IsNullOrEmpty(TextBoxFind.Text) Then + If x.Family.Name.Contains(TextBoxFind.Text) Then + ' Rename This Part + Dim m_newName As String = Replace(x.Family.Name, Me.TextBoxFind.Text, Me.TextBoxReplace.Text, , , CompareMethod.Text) + x.Family.Name = m_newName + m_renamed += 1 + End If + End If + + End If + + End If + + ' Check for Type Names + If Me.CheckBoxFamilies.Checked = True Then + If Not String.IsNullOrEmpty(TextBoxFind.Text) Then + If x.Name.Contains(TextBoxFind.Text) Then + ' Rename This Part + Dim m_newName As String = Replace(x.Name, Me.TextBoxFind.Text, Me.TextBoxReplace.Text, , , CompareMethod.Text) + x.Name = m_newName + m_renamed += 1 + End If + End If + End If + + ' Commit + t.Commit() + + ' Count only if changes + If m_renamed > 0 Then iSuc += m_renamed + + Catch + iFail += 1 + End Try + + End If + End Using + + Next + + ' Report to user + Using td As New TaskDialog("Here's What Heppened:") + td.MainInstruction = "Family and/or Type Renaming" + td.MainContent = iSuc.ToString & " Updated Succesfully" & vbCr + td.MainContent += iFail.ToString & " Items Failed to Rename" + td.Show() + End Using + + End Sub + +#Region "Form Controls & Events" + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-change-replace-family-andor-type-names") + End Sub + + ''' + ''' Commit + ''' + ''' + ''' + ''' + Private Sub ButtonOk_Click(sender As System.Object, e As System.EventArgs) Handles ButtonOk.Click + + Try + RecordUsage() + Catch + End Try + + ' Commit + RenameStuff() + + ' Close + Close() + + End Sub + + ''' + ''' Close + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCancel.Click + + ' Close + Close() + + End Sub + + Private Sub TextBoxFind_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxFind.TextChanged + AllowOK() + End Sub + + Private Sub TextBoxReplace_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxReplace.TextChanged + AllowOK() + End Sub + + Private Sub CheckBoxFamilies_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxFamilies.CheckedChanged + AllowOK() + End Sub + + Private Sub CheckBoxTypes_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxTypes.CheckedChanged + AllowOK() + End Sub + + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Try + Process.Start("http://apps.case-inc.com/") + Catch + End Try + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/API/clsUsage.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.addin b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.addin new file mode 100644 index 00000000..85170f7d --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.addin @@ -0,0 +1,11 @@ + + + + Command Case.DeleteViewsAndPurge + Case.DeleteViewsAndPurge.dll + 2ad481a2-b333-45b6-1acb-910e65a29b9c + Case.DeleteViewsAndPurge.Entry.CmdMain + CASE + Case Design, Inc. http://www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.vbproj b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.vbproj new file mode 100644 index 00000000..9f939746 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge.vbproj @@ -0,0 +1,126 @@ + + + + Debug + AnyCPU + + + + + {2D5B259E-F08F-4470-9087-D21D5F3670B6} + Library + Case.DeleteViewsAndPurge + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + Case.DeleteViewsAndPurge + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + form_Main.vb + + + Form + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + form_Main.vb + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Data/clsSettings.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Data/clsSettings.vb new file mode 100644 index 00000000..2e3f28cb --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Data/clsSettings.vb @@ -0,0 +1,262 @@ +Imports System.Linq +Imports System.Windows.Forms +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsSettings + + Private _cmd As ExternalCommandData + Private _eSet As ElementSet + +#Region "Public Properties" + + ''' + ''' Sheet Views + ''' + ''' + ''' + ''' + Public Property Sheets As List(Of ElementId) + + ''' + ''' All Other Views (not Sheets) + ''' + ''' + ''' + ''' + Public Property Views As List(Of Autodesk.Revit.DB.View) + + ''' + ''' Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + End Try + Return Nothing + End Get + End Property + + ''' + ''' The Active View in the Session + ''' + ''' + ''' + ''' + Public ReadOnly Property ActiveView As Autodesk.Revit.DB.View + Get + Try + Return _cmd.Application.ActiveUIDocument.ActiveView + Catch + End Try + Return Nothing + End Get + End Property + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + ''' + Public Sub New(c As ExternalCommandData, e As ElementSet) + + ' Widen Scope + _cmd = c + _eSet = e + + ' Fresh Lists + Views = New List(Of Autodesk.Revit.DB.View) + Sheets = New List(Of ElementId) + + End Sub + +#Region "Public Members" + + ''' + ''' Delete Links + ''' + ''' + ''' + Public Function DeleteLinks() As Integer + + ' Deleted Items + Dim iCntLinks As Integer = 0 + + ' New Transaction + Using t As New Transaction(Doc, "Delete Links") + If t.Start = TransactionStatus.Started Then + Try + + ' Get all Links + Using col As New FilteredElementCollector(Doc) + col.OfCategory(BuiltInCategory.OST_RvtLinks) + + ' Delete them + For Each x In col.ToElements + If TypeOf x Is RevitLinkType Then + Dim m_link As RevitLinkType = TryCast(x, RevitLinkType) + End If + Try + Doc.Delete(x.Id) + iCntLinks += 1 + Catch + End Try + Next + + End Using + + ' Success + t.Commit() + + Catch + + ' Fialure + t.RollBack() + + End Try + End If + End Using + + ' Succesfull Deletions + Return iCntLinks + + End Function + + ''' + ''' Delete Views + ''' + ''' Progress Bar + ''' Number of succesfully deleted views + ''' + Public Function DeleteViews(p As ProgressBar) As Integer + + ' Return + Dim m_Deleted As Integer = 0 + + Try + + ' Fresh List of Views + GetViews() + + ' Delete as Many as Possible + For Each x As Autodesk.Revit.DB.View In Views + + Try + ' Progress + p.Increment(1) + Catch + End Try + + ' Current View? + If ActiveView.Id.IntegerValue = x.Id.IntegerValue Then + Continue For + End If + + ' Skip Sheets + If TypeOf x Is ViewSheet Then Continue For + + ' No Browser Views + If x.ViewType = ViewType.Internal Then Continue For + If x.ViewType = ViewType.Undefined Then Continue For + If x.ViewType = ViewType.ProjectBrowser Then Continue For + If x.ViewType = ViewType.SystemBrowser Then Continue For + + ' New Transaction + Using t As New Transaction(Doc, "Delete Views") + If t.Start() Then + Try + + ' Delete the View + Doc.Delete(x.Id) + + t.Commit() + + ' Add as Deleted + m_Deleted += 1 + + Catch + + t.RollBack() + + End Try + End If + End Using + + Next + + Catch + End Try + + ' Deleted Items + Return m_Deleted + + End Function + + ''' + ''' Return a List of Views + ''' + ''' + Public Sub GetViews() + + ' Fresh List + Views = New List(Of Autodesk.Revit.DB.View) + + Try + + ' Linq Query + Dim m_linqViews = From v In New FilteredElementCollector(Doc).OfClass(GetType(Autodesk.Revit.DB.View)) + Let vv = TryCast(v, Autodesk.Revit.DB.View) + Where TypeOf v Is ViewSheet = False And + vv.ViewType <> ViewType.Internal And + vv.ViewType <> ViewType.ProjectBrowser And + vv.ViewType <> ViewType.SystemBrowser + Select vv + + ' To List + Views = m_linqViews.ToList + + Catch + End Try + + End Sub + + ''' + ''' Return a List of Sheets + ''' + ''' + Public Sub GetSheets() + + ' Fresh List + Sheets = New List(Of ElementId) + + Try + + ' Collector + Using c As New FilteredElementCollector(Doc) + c.OfClass(GetType(ViewSheet)) + c.WhereElementIsNotElementType() + + ' List of ElementID's + Sheets = c.ToElementIds + + End Using + + Catch + End Try + + End Sub + +#End Region + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Entry/CmdMain.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Entry/CmdMain.vb new file mode 100644 index 00000000..7bae02a9 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Entry/CmdMain.vb @@ -0,0 +1,61 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].DeleteViewsAndPurge.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Command Entry Point + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display the Form + Using d As New form_Main(New clsSettings(commandData, elements)) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.Designer.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.Designer.vb new file mode 100644 index 00000000..842e5d86 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.Designer.vb @@ -0,0 +1,155 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.ButtonOk = New System.Windows.Forms.Button() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.CheckBoxSheets = New System.Windows.Forms.CheckBox() + Me.CheckBoxViews = New System.Windows.Forms.CheckBox() + Me.CheckBoxLinks = New System.Windows.Forms.CheckBox() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ButtonHelp = New System.Windows.Forms.Button() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.Location = New System.Drawing.Point(353, 115) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(75, 40) + Me.ButtonCancel.TabIndex = 0 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'ButtonOk + ' + Me.ButtonOk.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonOk.Location = New System.Drawing.Point(272, 115) + Me.ButtonOk.Name = "ButtonOk" + Me.ButtonOk.Size = New System.Drawing.Size(75, 40) + Me.ButtonOk.TabIndex = 1 + Me.ButtonOk.Text = "OK" + Me.ButtonOk.UseVisualStyleBackColor = True + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(12, 115) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(416, 40) + Me.ProgressBar1.TabIndex = 3 + ' + 'CheckBoxSheets + ' + Me.CheckBoxSheets.AutoSize = True + Me.CheckBoxSheets.Checked = True + Me.CheckBoxSheets.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxSheets.Location = New System.Drawing.Point(273, 12) + Me.CheckBoxSheets.Name = "CheckBoxSheets" + Me.CheckBoxSheets.Size = New System.Drawing.Size(93, 17) + Me.CheckBoxSheets.TabIndex = 4 + Me.CheckBoxSheets.Text = "Delete Sheets" + Me.CheckBoxSheets.UseVisualStyleBackColor = True + ' + 'CheckBoxViews + ' + Me.CheckBoxViews.AutoSize = True + Me.CheckBoxViews.Checked = True + Me.CheckBoxViews.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxViews.Location = New System.Drawing.Point(273, 46) + Me.CheckBoxViews.Name = "CheckBoxViews" + Me.CheckBoxViews.Size = New System.Drawing.Size(88, 17) + Me.CheckBoxViews.TabIndex = 5 + Me.CheckBoxViews.Text = "Delete Views" + Me.CheckBoxViews.UseVisualStyleBackColor = True + ' + 'CheckBoxLinks + ' + Me.CheckBoxLinks.AutoSize = True + Me.CheckBoxLinks.Checked = True + Me.CheckBoxLinks.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxLinks.Location = New System.Drawing.Point(273, 84) + Me.CheckBoxLinks.Name = "CheckBoxLinks" + Me.CheckBoxLinks.Size = New System.Drawing.Size(122, 17) + Me.CheckBoxLinks.TabIndex = 6 + Me.CheckBoxLinks.Text = "Remove Revit Links" + Me.CheckBoxLinks.UseVisualStyleBackColor = True + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = Global.[Case].DeleteViewsAndPurge.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(26, 28) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(208, 61) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 7 + Me.PictureBox1.TabStop = False + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.Location = New System.Drawing.Point(216, 115) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(50, 40) + Me.ButtonHelp.TabIndex = 9 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(440, 167) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.CheckBoxLinks) + Me.Controls.Add(Me.CheckBoxViews) + Me.Controls.Add(Me.CheckBoxSheets) + Me.Controls.Add(Me.ButtonOk) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MaximumSize = New System.Drawing.Size(456, 205) + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(456, 205) + Me.Name = "form_Main" + Me.Text = "Delete Sheets, Views and Revit Links" + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents ButtonOk As System.Windows.Forms.Button + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents CheckBoxSheets As System.Windows.Forms.CheckBox + Friend WithEvents CheckBoxViews As System.Windows.Forms.CheckBox + Friend WithEvents CheckBoxLinks As System.Windows.Forms.CheckBox + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.resx b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.resx new file mode 100644 index 00000000..70d5bce5 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.resx @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.vb new file mode 100644 index 00000000..9b8a3045 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Forms/form_Main.vb @@ -0,0 +1,293 @@ +Imports Autodesk.Revit.DB +Imports System.Windows.Forms +Imports System.Reflection +Imports System.Linq +Imports [Case].DeleteViewsAndPurge.API +Imports [Case].DeleteViewsAndPurge.Data + +Public Class form_Main + + Private _s As clsSettings + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + + End Sub + + ''' + ''' Remove all Views + ''' + ''' + Private Sub DeleteItems() + + Dim iCntshts As Integer = 0 + Dim iCntview As Integer = 0 + Dim iCntLinks As Integer = 0 + + ' Delete Links? + If Me.CheckBoxLinks.Checked = True Then + Try + iCntLinks = _s.DeleteLinks + Catch + End Try + End If + + ' Delete Sheets? + If Me.CheckBoxSheets.Checked = True Then + + ' New Transaction + Using t As New Transaction(_s.Doc, "Delete Sheets") + If t.Start = TransactionStatus.Started Then + Try + + Try + ProgressBar1.Increment(_s.Sheets.Count) + Application.DoEvents() + Catch + End Try + + ' Delete the Sheets + _s.Doc.Delete(_s.Sheets) + + ' How many got deleted + iCntshts = _s.Sheets.Count + + ' Success + t.Commit() + + Catch + End Try + End If + End Using + + End If + + ' Delete Views? + If Me.CheckBoxViews.Checked = True Then + + ' Delete Views + Dim m_iDeletedItems As Integer = -1 + Do Until m_iDeletedItems = 0 + + ' Delete + m_iDeletedItems = _s.DeleteViews(ProgressBar1) + iCntview += m_iDeletedItems + + Loop + + End If + + ' Tell User + Using td As New Autodesk.Revit.UI.TaskDialog("Here's What Just Happened!:") + td.MainInstruction = iCntshts.ToString & " Sheets were removed..." & vbCr & + iCntview.ToString & " Views were removed..." & vbCr & vbCr & + iCntLinks.ToString & " Revit Links succesfully removed..." & vbCr & vbCr & + "Please use the Purge command (repeatedly) if you need to remove unused items from the model" + td.MainContent = "If this makes you sad, do not save the model!" + td.Show() + End Using + + End Sub + + '' '' ''' + '' '' ''' Delete the Unused Types + '' '' ''' + '' '' ''' + '' ''Private Sub DeleteUnusedTypes() + + '' '' ' Get Unused types + '' '' For Each x As Category In _s.Doc.Settings.Categories + + '' '' ' Step the Progress + '' '' Try + '' '' ProgressBar1.Increment(1) + '' '' Application.DoEvents() + '' '' Catch ex As Exception + '' '' End Try + + '' '' ' Get the Elements + '' '' Dim m_ebc As New clsElementsByCategory(x, _s.Doc) + '' '' If m_ebc.TypeElements.Count < 1 Then Continue For + '' '' If m_ebc.PurgeItems.Values.Count < 1 Then Continue For + + '' '' ' Transaction + '' '' Using t As New Transaction(_s.Doc, "Purging Unused Types - " & x.Name) + '' '' If t.Start Then + '' '' Dim m_attempt As Integer = 0 + + '' '' Try + + '' '' ' Delete the Unused Types + '' '' Dim m_purge As New List(Of ElementId) + '' '' For Each e As ElementId In m_ebc.PurgeItems.Values + '' '' m_purge.Add(e) + '' '' m_attempt += 1 + '' '' Next + + '' '' If m_attempt = 0 Then + '' '' t.RollBack() + '' '' Continue For + '' '' End If + + '' '' ' Delete from Model + '' '' _s.Doc.Delete(m_purge) + + '' '' ' Purge Success + '' '' _purgeSuccess += m_attempt + + '' '' ' Commit + '' '' t.Commit() + + '' '' Catch + + '' '' ' Purge Failure + '' '' _purgeFailure += m_attempt + + '' '' ' Rollback Failures + '' '' t.RollBack() + + '' '' End Try + '' '' End If + '' '' End Using + + '' '' Next + + '' ''End Sub + +#Region "Form Visibility" + + Private Enum FormViz + Processing + StandBy + End Enum + + ''' + ''' Set the Form Visibility Basedon State + ''' + ''' + ''' + Private Sub SetFormViz(v As FormViz) + Select Case v + Case FormViz.Processing + ProgressBar1.Show() + ButtonCancel.Hide() + ButtonOk.Hide() + ButtonHelp.Hide() + Case FormViz.StandBy + ProgressBar1.Hide() + ButtonCancel.Show() + ButtonOk.Show() + ButtonHelp.Show() + End Select + End Sub + +#End Region + +#Region "Form Controls & Events" + + ''' + ''' Form Shown + ''' + ''' + ''' + ''' + Private Sub form_Main_Shown(sender As Object, e As EventArgs) Handles Me.Shown + + ' Form Setup + SetFormViz(FormViz.StandBy) + Text = "Delete Sheets, Views and Links v" & Assembly.GetExecutingAssembly.GetName.Version.ToString + + End Sub + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-delete-sheets-views-and-revit-links") + End Sub + + ''' + ''' Commit + ''' + ''' + ''' + ''' + Private Sub ButtonOk_Click(sender As System.Object, e As System.EventArgs) Handles ButtonOk.Click + + ' Set for Visibility + SetFormViz(FormViz.Processing) + + ' Are they sure? + If MsgBox("It is recommended that you only run this utility on detached models!!" & vbCr & vbCr & + "Are You Sure You Want to Continue??" & vbCr & "Removing Links Cannot be Undone!", + MsgBoxStyle.YesNoCancel, + "Are You SURE?!") = MsgBoxResult.Yes Then + + ' Record use + RecordUsage() + + If Me.CheckBoxSheets.Checked = True Then + + ' Get Sheets + _s.GetSheets() + + End If + + If Me.CheckBoxViews.Checked = True Then + + ' Get Views + _s.GetViews() + + End If + + ' Prep Progress Bar + With Me.ProgressBar1 + .Minimum = 0 + .Maximum = _s.Sheets.Count + _s.Views.Count + .Value = 0 + End With + + ' Delete Views + DeleteItems() + + End If + + ' Close + Close() + + End Sub + + ''' + ''' Close + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCancel.Click + Close() + End Sub + + ''' + ''' Launch Case Site + ''' + ''' + ''' + ''' + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Process.Start("http://www.case-inc.com") + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/AssemblyInfo.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..1db47383 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.Designer.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.Designer.vb new file mode 100644 index 00000000..33ef2886 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.DeleteViewsAndPurge.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.resx b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.Designer.vb b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.Designer.vb new file mode 100644 index 00000000..bc55cb81 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].DeleteViewsAndPurge.My.MySettings + Get + Return Global.[Case].DeleteViewsAndPurge.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.settings b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.settings new file mode 100644 index 00000000..f7f176ac --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Resources/Case_Clearly.png b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/Resources/Case_Clearly.png differ diff --git a/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/app.config b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/app.config new file mode 100644 index 00000000..f0025c19 --- /dev/null +++ b/2017/Case.DeleteViewsAndPurge/Case.DeleteViewsAndPurge/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.DeleteViewsAndPurge/img/Preview_SheetsViewsLinks.png b/2017/Case.DeleteViewsAndPurge/img/Preview_SheetsViewsLinks.png new file mode 100644 index 00000000..3544c307 Binary files /dev/null and b/2017/Case.DeleteViewsAndPurge/img/Preview_SheetsViewsLinks.png differ diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/API/clsAPI.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/API/clsAPI.cs new file mode 100644 index 00000000..ca5d8c86 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/API/clsAPI.cs @@ -0,0 +1,155 @@ +using System; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; +using Microsoft.VisualBasic.ApplicationServices; + +namespace Case.DimensionOverrides.API +{ + class clsApi + { + + #region "Private Members" + + /// + /// Full Qualifying Domain Name + /// + /// + /// + private static string GetFullDomainName() + { + + try + { + // Domain + string m_domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName; + + // Host + string m_hostName = Dns.GetHostName(); + + if (!m_hostName.Contains(m_domainName)) + { + // add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName + Convert.ToString(".")) + m_domainName; + } + + return m_hostName; + + } + catch + { + } + + // Failure + return ""; + + } + + /// + /// Credential + /// + /// + /// + private static NetworkCredential GetCred() + { + return new NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32"); + } + + /// + /// API Header + /// + /// + /// + private static string GetHeader() + { + return "http://api.addins.case-apps.com/"; + } + + /// + /// Public IP Address + /// + /// + /// + private static string GetPublicIp() + { + + try + { + const string c_url = "http://checkip.dyndns.org"; + WebRequest req = WebRequest.Create(c_url); + using (WebResponse resp = req.GetResponse()) + { + StreamReader sr = new StreamReader(resp.GetResponseStream()); + string response = sr.ReadToEnd().Trim(); + string[] a = response.Split(':'); + string a2 = a[1].Substring(1); + string[] a3 = a2.Split('<'); + string a4 = a3[0]; + return a4; + } + + } + catch { } + + // Failure + return "UNKNOWN"; + + } + + #endregion + + #region "Public Members" + + /// + /// Record + /// + /// + /// + public static void RecordUsage(bool useProxy = false) + { + + // Ignore My Calls + if (Environment.MachineName.ToLower() == "case-platinum" & Environment.UserName.ToLower() == "d.rudder") return; + if (Environment.MachineName.ToLower() == "masterdonpc" & Environment.UserName.ToLower() == "masterdon") return; + + try + { + + // Assembly Data for Tracking + AssemblyInfo m_a = new AssemblyInfo(Assembly.GetExecutingAssembly()); + + string m_url = GetHeader() + "logusage?ip=" + GetPublicIp(); + m_url += "&mac=" + GetFullDomainName(); + m_url += "&netb=" + Environment.MachineName; + m_url += "&appn=" + m_a.Title; + m_url += "&appv=" + m_a.Version.ToString(); + m_url += "&appf=" + "report"; + m_url += "&user=" + Environment.UserName; + m_url += "&mn=" + ""; + + // The Request Call + HttpWebRequest m_req = (HttpWebRequest)HttpWebRequest.Create(m_url); + m_req.Credentials = GetCred(); + m_req.Method = "POST"; + if (useProxy == false) m_req.Proxy = null; + + // Response String + m_req.GetResponse(); + + } + catch + { + try + { + if (useProxy == false) RecordUsage(true); + } + catch { } + } + + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.addin b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.addin new file mode 100644 index 00000000..4416e177 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.addin @@ -0,0 +1,10 @@ + + + + Command - Case.DimensionOverrides + Case.DimensionOverrides.dll + Case.DimensionOverrides.Entry.CmdMain + f0b1a893-be2d-4648-b9d5-00b755393267 + Case + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.csproj b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.csproj new file mode 100644 index 00000000..5fbba153 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.csproj @@ -0,0 +1,106 @@ + + + + + Debug + AnyCPU + {3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4} + Library + Properties + Case.DimensionOverrides + Case.DimensionOverrides + v4.5.2 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + Form + + + form_Main.cs + + + + + form_Main.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.sln b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.sln new file mode 100644 index 00000000..4d7c81de --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Case.DimensionOverrides.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Case.DimensionOverrides", "Case.DimensionOverrides.csproj", "{3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3BCE7EDA-8BAD-4659-B5A9-7DADD0B2C5B4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Data/clsSettings.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Data/clsSettings.cs new file mode 100644 index 00000000..dc2af3fb --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Data/clsSettings.cs @@ -0,0 +1,114 @@ +// Case.DimensionOverrides +// clsSettings.cs +// mnelson-CASE +// 2016/05/18/11:17 PM + +using System; +using System.Collections.Generic; +using System.Linq; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Autodesk.Revit.UI.Selection; +using Settings = Case.DimensionOverrides.Properties.Settings; + +namespace Case.DimensionOverrides.Data +{ + public class clsSettings + { + private readonly ExternalCommandData _cmd; + public IList Dimensions { get; private set; } + public int SegmentCount { get; private set; } + + #region Public Properties + + /// + /// Active UIDocument + /// + public UIDocument ActiveUiDoc + { + get { return _cmd.Application.ActiveUIDocument; } + } + + /// + /// Active Document + /// + public Document ActiveDoc + { + get { return ActiveUiDoc.Document; } + } + + private IEnumerable _selCollection + { + get { return ActiveUiDoc.Selection.GetElementIds(); } + } + + private IList _dimensions { get; set; } + + #endregion + + /// + /// Constructor + /// + /// + public clsSettings(ExternalCommandData cmd) + { + _cmd = cmd; + _dimensions = new List(); + + try + { + if (_selCollection.Any()) + { + _dimensions = (from m_x in _selCollection + let m_y = ActiveDoc.GetElement(m_x) + where new DimensionFilter().AllowElement(m_y) + select m_y as Dimension) + .ToList(); + } + else + { + IList m_selection = ActiveUiDoc.Selection.PickObjects( + ObjectType.Element, + new DimensionFilter(), + Settings.Default.Prompt_String); + + _dimensions = (from m_x in m_selection + let m_y = ActiveDoc.GetElement(m_x) + let m_z = m_y as Dimension + select m_z) + .ToList(); + } + + Dimensions = _dimensions; + SegmentCounter(); + } + catch + { + throw new Exception(Settings.Default.Error_String); + } + } + + private void SegmentCounter() + { + SegmentCount = 0; + foreach (Dimension m_dimension + in _dimensions.Where(m_dimension => !m_dimension.Segments.IsEmpty)) + { + SegmentCount += m_dimension.Segments.Size; + } + } + } + + public class DimensionFilter : ISelectionFilter + { + public bool AllowElement(Element elem) + { + return elem.Category.Id.IntegerValue == (int) BuiltInCategory.OST_Dimensions; + } + + public bool AllowReference(Reference reference, XYZ position) + { + return false; + } + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Entry/CmdMain.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Entry/CmdMain.cs new file mode 100644 index 00000000..0a0c4526 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Entry/CmdMain.cs @@ -0,0 +1,64 @@ +// Case.DimensionOverrides +// CmdMain.cs +// mnelson-CASE +// 2016/05/18/9:27 PM + +using System; +using Autodesk.Revit.Attributes; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Case.DimensionOverrides.Data; +using Case.DimensionOverrides.UI; + +namespace Case.DimensionOverrides.Entry +{ + [Transaction(TransactionMode.Manual)] + public class CmdMain : IExternalCommand + { + /// + /// Override Dimensions + /// + /// + /// + /// + /// + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + try + { + // Version + if (!commandData.Application.Application.VersionName.Contains("2016")) + { + // Failure + using (TaskDialog td = new TaskDialog("Cannot Continue")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Incompatible Version of Revit"; + td.MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance."; + td.Show(); + } + return Result.Cancelled; + } + + // Settings + clsSettings m_s = new clsSettings(commandData); + + + // Form + using (form_Main d = new form_Main(m_s)) + { + d.ShowDialog(); + } + + // Success + return Result.Succeeded; + } + catch (Exception ex) + { + // Failure + message = ex.Message; + return Result.Failed; + } + } + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/AssemblyInfo.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0162f5ca --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Case Dimension Overrides for Revit 2016")] +[assembly: AssemblyDescription("Case Dimension Overrides for Revit 2016")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Case Design, Inc.")] +[assembly: AssemblyProduct("Case Dimension Overrides for Revit 2016")] +[assembly: AssemblyCopyright("Copyright © Case Design, Inc. 2016")] +[assembly: AssemblyTrademark("Case Design, Inc.")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f0b1a893-be2d-4648-b9d5-00b755393267")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("15.3.23.0")] +[assembly: AssemblyFileVersion("15.3.23.0")] diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.Designer.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ff47c15b --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Case.DimensionOverrides.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Case.DimensionOverrides.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.resx b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.resx new file mode 100644 index 00000000..4fdb1b6a --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.Designer.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.Designer.cs new file mode 100644 index 00000000..bd59a654 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.Designer.cs @@ -0,0 +1,46 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Case.DimensionOverrides.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("\"Select Dimensions to Override\"")] + public string Prompt_String { + get { + return ((string)(this["Prompt_String"])); + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("\"Unable to Process Selection. Dimension Overrides requires at least one Dimension" + + " to function properly. Please ensure your selection is correct. If you are still" + + " experiencing issues, Please contact CASE Inc.\"")] + public string Error_String { + get { + return ((string)(this["Error_String"])); + } + } + } +} diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.settings b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.settings new file mode 100644 index 00000000..b000b8c2 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/Properties/Settings.settings @@ -0,0 +1,12 @@ + + + + + + "Select Dimensions to Override" + + + "Unable to Process Selection. Dimension Overrides requires at least one Dimension to function properly. Please ensure your selection is correct. If you are still experiencing issues, Please contact CASE Inc." + + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.cs new file mode 100644 index 00000000..35692428 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +//using System.Windows.Forms; + +//using Autodesk.Revit.UI; +//using Autodesk.Revit.DB; +//using Autodesk.Revit.DB.Architecture; + +namespace Case.TemplateLocal { + + public partial class ProgressBarForm : System.Windows.Forms.Form { + + public bool Cancel = false; + + public ProgressBarForm(string title, int maximum) { + InitializeComponent(); + this.Text = title; + progressBar1.Maximum = maximum; + } + + public void SetLabel(string text) { + labelProgressBar.Text = text; + labelProgressBar.Refresh(); + } + + public void Increment() { + progressBar1.Increment(1); + } + + public void Reset() { + progressBar1.Value = 0; + progressBar1.Refresh(); + } + + private void buttonCancel_Click(object sender, EventArgs e) { + Cancel = true; + } + } + +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.designer.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.designer.cs new file mode 100644 index 00000000..428404b2 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.designer.cs @@ -0,0 +1,99 @@ +namespace Case.TemplateLocal { + partial class ProgressBarForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label6 = new System.Windows.Forms.Label(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelProgressBar = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(8, 9); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(774, 22); + this.progressBar1.TabIndex = 0; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 88); + this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(10, 13); + this.label6.TabIndex = 5; + this.label6.Text = "."; + // + // buttonCancel + // + this.buttonCancel.Cursor = System.Windows.Forms.Cursors.Default; + this.buttonCancel.Location = new System.Drawing.Point(687, 63); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(95, 30); + this.buttonCancel.TabIndex = 6; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // labelProgressBar + // + this.labelProgressBar.AutoSize = true; + this.labelProgressBar.Location = new System.Drawing.Point(12, 43); + this.labelProgressBar.Name = "labelProgressBar"; + this.labelProgressBar.Size = new System.Drawing.Size(68, 13); + this.labelProgressBar.TabIndex = 7; + this.labelProgressBar.Text = "default value"; + // + // ProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(788, 105); + this.ControlBox = false; + this.Controls.Add(this.labelProgressBar); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.label6); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ProgressBarForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Processing"; + this.TopMost = true; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelProgressBar; + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.resx b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/ProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.Designer.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.Designer.cs new file mode 100644 index 00000000..94fc7788 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.Designer.cs @@ -0,0 +1,299 @@ +namespace Case.DimensionOverrides.UI +{ + partial class form_Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_Main)); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.btn_ClearOverrides = new System.Windows.Forms.CheckBox(); + this.ResetGroup = new System.Windows.Forms.GroupBox(); + this.btn_ResetPosition = new System.Windows.Forms.CheckBox(); + this.grp_Overrides = new System.Windows.Forms.GroupBox(); + this.lbl_LeftOverride = new System.Windows.Forms.Label(); + this.lbl_RightOverride = new System.Windows.Forms.Label(); + this.lbl_TopOverride = new System.Windows.Forms.Label(); + this.lbl_DimOverride = new System.Windows.Forms.Label(); + this.lbl_BottomOverride = new System.Windows.Forms.Label(); + this.txt_BottomOverride = new System.Windows.Forms.TextBox(); + this.txt_TopOverride = new System.Windows.Forms.TextBox(); + this.txt_RightOverride = new System.Windows.Forms.TextBox(); + this.txt_DimOverride = new System.Windows.Forms.TextBox(); + this.txt_LeftOverride = new System.Windows.Forms.TextBox(); + this.lbl_IntroLabel = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.ResetGroup.SuspendLayout(); + this.grp_Overrides.SuspendLayout(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(447, 280); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 40); + this.buttonCancel.TabIndex = 7; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Location = new System.Drawing.Point(366, 280); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 40); + this.buttonOk.TabIndex = 6; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // progressBar1 + // + this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar1.Location = new System.Drawing.Point(195, 280); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(327, 40); + this.progressBar1.TabIndex = 0; + // + // pictureBox1 + // + this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(12, 280); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(177, 40); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); + // + // btn_ClearOverrides + // + this.btn_ClearOverrides.Appearance = System.Windows.Forms.Appearance.Button; + this.btn_ClearOverrides.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.btn_ClearOverrides.Location = new System.Drawing.Point(6, 21); + this.btn_ClearOverrides.Name = "btn_ClearOverrides"; + this.btn_ClearOverrides.Size = new System.Drawing.Size(243, 30); + this.btn_ClearOverrides.TabIndex = 5; + this.btn_ClearOverrides.Text = "Clear All Overrides"; + this.btn_ClearOverrides.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.btn_ClearOverrides.UseVisualStyleBackColor = true; + // + // ResetGroup + // + this.ResetGroup.Controls.Add(this.btn_ResetPosition); + this.ResetGroup.Controls.Add(this.btn_ClearOverrides); + this.ResetGroup.Location = new System.Drawing.Point(12, 205); + this.ResetGroup.Name = "ResetGroup"; + this.ResetGroup.Size = new System.Drawing.Size(510, 63); + this.ResetGroup.TabIndex = 0; + this.ResetGroup.TabStop = false; + this.ResetGroup.Text = "Reset Overrides"; + // + // btn_ResetPosition + // + this.btn_ResetPosition.Appearance = System.Windows.Forms.Appearance.Button; + this.btn_ResetPosition.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.btn_ResetPosition.Location = new System.Drawing.Point(261, 21); + this.btn_ResetPosition.Name = "btn_ResetPosition"; + this.btn_ResetPosition.Size = new System.Drawing.Size(243, 30); + this.btn_ResetPosition.TabIndex = 6; + this.btn_ResetPosition.Text = "Reset Text Position"; + this.btn_ResetPosition.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.btn_ResetPosition.UseVisualStyleBackColor = true; + // + // grp_Overrides + // + this.grp_Overrides.Controls.Add(this.lbl_LeftOverride); + this.grp_Overrides.Controls.Add(this.lbl_RightOverride); + this.grp_Overrides.Controls.Add(this.lbl_TopOverride); + this.grp_Overrides.Controls.Add(this.lbl_DimOverride); + this.grp_Overrides.Controls.Add(this.lbl_BottomOverride); + this.grp_Overrides.Controls.Add(this.txt_BottomOverride); + this.grp_Overrides.Controls.Add(this.txt_TopOverride); + this.grp_Overrides.Controls.Add(this.txt_RightOverride); + this.grp_Overrides.Controls.Add(this.txt_DimOverride); + this.grp_Overrides.Controls.Add(this.txt_LeftOverride); + this.grp_Overrides.Location = new System.Drawing.Point(12, 37); + this.grp_Overrides.Name = "grp_Overrides"; + this.grp_Overrides.Size = new System.Drawing.Size(510, 161); + this.grp_Overrides.TabIndex = 0; + this.grp_Overrides.TabStop = false; + this.grp_Overrides.Text = "Overrides"; + // + // lbl_LeftOverride + // + this.lbl_LeftOverride.AutoSize = true; + this.lbl_LeftOverride.Location = new System.Drawing.Point(6, 62); + this.lbl_LeftOverride.Name = "lbl_LeftOverride"; + this.lbl_LeftOverride.Size = new System.Drawing.Size(33, 13); + this.lbl_LeftOverride.TabIndex = 9; + this.lbl_LeftOverride.Text = "Prefix"; + // + // lbl_RightOverride + // + this.lbl_RightOverride.AutoSize = true; + this.lbl_RightOverride.Location = new System.Drawing.Point(341, 62); + this.lbl_RightOverride.Name = "lbl_RightOverride"; + this.lbl_RightOverride.Size = new System.Drawing.Size(33, 13); + this.lbl_RightOverride.TabIndex = 8; + this.lbl_RightOverride.Text = "Suffix"; + // + // lbl_TopOverride + // + this.lbl_TopOverride.AutoSize = true; + this.lbl_TopOverride.Location = new System.Drawing.Point(172, 14); + this.lbl_TopOverride.Name = "lbl_TopOverride"; + this.lbl_TopOverride.Size = new System.Drawing.Size(38, 13); + this.lbl_TopOverride.TabIndex = 7; + this.lbl_TopOverride.Text = "Above"; + // + // lbl_DimOverride + // + this.lbl_DimOverride.AutoSize = true; + this.lbl_DimOverride.Location = new System.Drawing.Point(172, 62); + this.lbl_DimOverride.Name = "lbl_DimOverride"; + this.lbl_DimOverride.Size = new System.Drawing.Size(56, 13); + this.lbl_DimOverride.TabIndex = 6; + this.lbl_DimOverride.Text = "Dimension"; + // + // lbl_BottomOverride + // + this.lbl_BottomOverride.AutoSize = true; + this.lbl_BottomOverride.Location = new System.Drawing.Point(172, 111); + this.lbl_BottomOverride.Name = "lbl_BottomOverride"; + this.lbl_BottomOverride.Size = new System.Drawing.Size(36, 13); + this.lbl_BottomOverride.TabIndex = 5; + this.lbl_BottomOverride.Text = "Below"; + // + // txt_BottomOverride + // + this.txt_BottomOverride.Location = new System.Drawing.Point(175, 131); + this.txt_BottomOverride.Name = "txt_BottomOverride"; + this.txt_BottomOverride.Size = new System.Drawing.Size(160, 20); + this.txt_BottomOverride.TabIndex = 1; + this.txt_BottomOverride.WordWrap = false; + // + // txt_TopOverride + // + this.txt_TopOverride.Location = new System.Drawing.Point(175, 34); + this.txt_TopOverride.Name = "txt_TopOverride"; + this.txt_TopOverride.Size = new System.Drawing.Size(160, 20); + this.txt_TopOverride.TabIndex = 0; + this.txt_TopOverride.WordWrap = false; + // + // txt_RightOverride + // + this.txt_RightOverride.Location = new System.Drawing.Point(344, 83); + this.txt_RightOverride.Name = "txt_RightOverride"; + this.txt_RightOverride.Size = new System.Drawing.Size(160, 20); + this.txt_RightOverride.TabIndex = 4; + this.txt_RightOverride.WordWrap = false; + // + // txt_DimOverride + // + this.txt_DimOverride.Location = new System.Drawing.Point(175, 83); + this.txt_DimOverride.Name = "txt_DimOverride"; + this.txt_DimOverride.Size = new System.Drawing.Size(160, 20); + this.txt_DimOverride.TabIndex = 3; + this.txt_DimOverride.WordWrap = false; + // + // txt_LeftOverride + // + this.txt_LeftOverride.Location = new System.Drawing.Point(6, 83); + this.txt_LeftOverride.Name = "txt_LeftOverride"; + this.txt_LeftOverride.Size = new System.Drawing.Size(160, 20); + this.txt_LeftOverride.TabIndex = 2; + this.txt_LeftOverride.WordWrap = false; + // + // lbl_IntroLabel + // + this.lbl_IntroLabel.AutoSize = true; + this.lbl_IntroLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lbl_IntroLabel.Location = new System.Drawing.Point(18, 13); + this.lbl_IntroLabel.Name = "lbl_IntroLabel"; + this.lbl_IntroLabel.Size = new System.Drawing.Size(83, 13); + this.lbl_IntroLabel.TabIndex = 0; + this.lbl_IntroLabel.Text = "##null_value##"; + // + // form_Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(534, 332); + this.Controls.Add(this.lbl_IntroLabel); + this.Controls.Add(this.grp_Overrides); + this.Controls.Add(this.ResetGroup); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.progressBar1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(550, 370); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(550, 370); + this.Name = "form_Main"; + this.Text = "Dimension Overrides"; + this.Load += new System.EventHandler(this.form_Main_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResetGroup.ResumeLayout(false); + this.grp_Overrides.ResumeLayout(false); + this.grp_Overrides.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.CheckBox btn_ClearOverrides; + private System.Windows.Forms.GroupBox ResetGroup; + private System.Windows.Forms.GroupBox grp_Overrides; + private System.Windows.Forms.Label lbl_BottomOverride; + private System.Windows.Forms.TextBox txt_BottomOverride; + private System.Windows.Forms.TextBox txt_TopOverride; + private System.Windows.Forms.TextBox txt_RightOverride; + private System.Windows.Forms.TextBox txt_DimOverride; + private System.Windows.Forms.TextBox txt_LeftOverride; + private System.Windows.Forms.Label lbl_TopOverride; + private System.Windows.Forms.Label lbl_DimOverride; + private System.Windows.Forms.Label lbl_LeftOverride; + private System.Windows.Forms.Label lbl_RightOverride; + private System.Windows.Forms.Label lbl_IntroLabel; + private System.Windows.Forms.CheckBox btn_ResetPosition; + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.cs b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.cs new file mode 100644 index 00000000..e9466956 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.cs @@ -0,0 +1,204 @@ +// Case.DimensionOverrides +// form_Main.cs +// mnelson-CASE +// 2016/05/18/11:15 PM + +using System; +using System.Diagnostics; +using System.Reflection; +using Autodesk.Revit.DB; +using Microsoft.VisualBasic.ApplicationServices; +using clsSettings = Case.DimensionOverrides.Data.clsSettings; +using Form = System.Windows.Forms.Form; + +namespace Case.DimensionOverrides.UI +{ +// ReSharper disable once InconsistentNaming + public partial class form_Main : Form + { + private readonly clsSettings _s; + + /// + /// Constructor + /// + /// + public form_Main(clsSettings s) + { + InitializeComponent(); + progressBar1.Hide(); + _s = s; + + lbl_IntroLabel.Text = string.Format( + "Selection contains {0} Dimensions and {1} Dimension Segments.", + _s.Dimensions.Count, + _s.SegmentCount); + } + + #region Form Controls & Events + + /// + /// Startup + /// + /// + /// + private void form_Main_Load(object sender, EventArgs e) + { + Text = string.Format( + "Dimension Overrides v{0}", + Assembly.GetExecutingAssembly().GetName().Version); + } + + /// + /// Logo + /// + /// + /// + private void pictureBox1_Click(object sender, EventArgs e) + { + Process.Start("http://apps.case-inc.com/"); + } + + /// + /// OK + /// + /// + /// + private void buttonOk_Click(object sender, EventArgs e) + { + try + { + // Usage Tracking + AssemblyInfo m_a = new AssemblyInfo(Assembly.GetExecutingAssembly()); + } + catch + { + } + + int m_total = _s.Dimensions.Count; + + // Progress Bar + buttonOk.Hide(); + buttonCancel.Hide(); + progressBar1.Show(); + progressBar1.Minimum = 0; + progressBar1.Maximum = m_total; + progressBar1.Value = 0; + + using (Transaction m_t = new Transaction(_s.ActiveDoc, "Adjust Dimensions")) + { + m_t.Start(); + try + { + if (!btn_ClearOverrides.Checked) + { + foreach (Dimension m_dimension in _s.Dimensions) + { + if (!m_dimension.Segments.IsEmpty) + { + foreach (DimensionSegment m_dim in m_dimension.Segments) + { + if (!string.IsNullOrEmpty(txt_TopOverride.Text)) + { + m_dim.Above = txt_TopOverride.Text; + } + if (!string.IsNullOrEmpty(txt_BottomOverride.Text)) + { + m_dim.Below = txt_BottomOverride.Text; + } + if (!string.IsNullOrEmpty(txt_LeftOverride.Text)) + { + m_dim.Prefix = txt_LeftOverride.Text; + } + if (!string.IsNullOrEmpty(txt_RightOverride.Text)) + { + m_dim.Suffix = txt_RightOverride.Text; + } + if (!string.IsNullOrEmpty(txt_DimOverride.Text)) + { + m_dim.ValueOverride = txt_DimOverride.Text; + } + if (btn_ResetPosition.Checked) + { + m_dim.ResetTextPosition(); + } + } + } + else + { + if (btn_ResetPosition.Checked) + { + m_dimension.ResetTextPosition(); + } + if (!string.IsNullOrEmpty(txt_TopOverride.Text)) + { + m_dimension.Above = txt_TopOverride.Text; + } + if (!string.IsNullOrEmpty(txt_BottomOverride.Text)) + { + m_dimension.Below = txt_BottomOverride.Text; + } + if (!string.IsNullOrEmpty(txt_LeftOverride.Text)) + { + m_dimension.Prefix = txt_LeftOverride.Text; + } + if (!string.IsNullOrEmpty(txt_RightOverride.Text)) + { + m_dimension.Suffix = txt_RightOverride.Text; + } + if (!string.IsNullOrEmpty(txt_DimOverride.Text)) + { + m_dimension.ValueOverride = txt_DimOverride.Text; + } + } + } + } + else + { + foreach (Dimension m_dimension in _s.Dimensions) + { + if (!m_dimension.Segments.IsEmpty) + { + foreach (DimensionSegment m_segment in m_dimension.Segments) + { + m_segment.Above = null; + m_segment.Below = null; + m_segment.Prefix = null; + m_segment.Suffix = null; + m_segment.ValueOverride = null; + } + } + else + { + m_dimension.Above = null; + m_dimension.Below = null; + m_dimension.Prefix = null; + m_dimension.Suffix = null; + m_dimension.ValueOverride = null; + } + } + } + progressBar1.Increment(1); + } + catch (Exception) + { + m_t.RollBack(); + throw; + } + m_t.Commit(); + } + Close(); + } + + /// + /// Close + /// + /// + /// + private void buttonCancel_Click(object sender, EventArgs e) + { + Close(); + } + + #endregion + } +} \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.resx b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.resx new file mode 100644 index 00000000..3248e2b6 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/UI/form_Main.resx @@ -0,0 +1,705 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAALEAAAAwCAYAAABexZu4AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAX + EQAAFxEByibzPwAAAAd0SU1FB9sIEwUsB2dvyRoAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNj + cmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAAl0RVh0U29mdHdhcmUAXXD/OgAAAAd0 + RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAHVJJREFU + eF7tXQlYjWn7/1BpJaREkkRksqQoxESEiWTJvi9jGQzDDDOWZIbB8A2yztiyjGns24SoSIm0mpQtJVJp + J9ny/91dc7pOp/uc931PMf/vumau65fm9D73+yz38ruf7fzn/fv3/+Jf/E+D/bAq8O7dO+3CwsK6qamp + zW7dutU+NDS0/+nTp8cfOHBgFjBbhmPHjk0OCgoaFhcXZ5+SkmJFZUpKSjQ5mVUNek9RUVHtR48eWf71 + 11/tL1++POTs2bNjf/vtt5kHDx6cSb8HBwd7xcbG2j98+LB5fn6+EcpocLKkAH2j9ebNG13ub1IBWRrP + nz+vk5aWZpGYmPhJZGRkd/Tn8HPnzo329/efvn///tnUlj///HNMYGDgyPDw8F4Yj3bJycktnj17Zvr2 + 7VuqRzVFuVWF169f69F7Hjx4YB0TE2OPPh4UEBAw+vfff59GdUMdp1Fd0c8Db9682enu3bs2mZmZjV69 + eqXHyePAfqgmqqHCWjk5OeaXLl0a5O3tvd3DwyOkXbt2iY0bN86qVavWKw0NjffVq1cvhxo1arzX1dV9 + 26hRo+w2bdok9e/fP+Snn35aExUV1QMKRgpdpR1M8iC3Dgay67Zt25Z5eXkF2tnZJZibm2caGBi80dTU + LKsb/a6np/e2QYMGuba2tnc/++yzy6jbahhcN1J+obrR36EkNV6+fKmdm5vbmN4Jw525cOHCXT/++OPP + +FyyIpNMDLAWBroFBt/Lx8fHF/18yd7e/lazZs0e169fvxD9+U5LS6u0b+Xboq2tXWJoaFhM49G6det7 + 3bt3vz5nzhz/Q4cOzYQhtyG5le1vGFX1Fy9e1E1KSnLct2/frM8///wYvcfGxuYB9aO+vn5pH8vqRv9S + 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 + /wGzKmJ5332wygAAAABJRU5ErkJggg== + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.DimensionOverrides/Case.DimensionOverrides/app.config b/2017/Case.DimensionOverrides/Case.DimensionOverrides/app.config new file mode 100644 index 00000000..954d9700 --- /dev/null +++ b/2017/Case.DimensionOverrides/Case.DimensionOverrides/app.config @@ -0,0 +1,18 @@ + + + + +
+ + + + + + "Select Dimensions to Override" + + + "Unable to Process Selection. Dimension Overrides requires at least one Dimension to function properly. Please ensure your selection is correct. If you are still experiencing issues, Please contact CASE Inc." + + + + diff --git a/2017/Case.Directionality/Case.Directionality/API/clsUsage.vb b/2017/Case.Directionality/Case.Directionality/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Case.Directionality.addin b/2017/Case.Directionality/Case.Directionality/Case.Directionality.addin new file mode 100644 index 00000000..48355411 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Case.Directionality.addin @@ -0,0 +1,11 @@ + + + + Command Case.Directionality + Case.Directionality.dll + 4ea76ff3-bb47-4969-9371-c7f3eb8ac068 + Case.Directionality.Entry.CmdMain + CSDR + Case Design, Inc., http://apps.case-inc.com/ + + \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Case.Directionality.vbproj b/2017/Case.Directionality/Case.Directionality/Case.Directionality.vbproj new file mode 100644 index 00000000..ad71bde2 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Case.Directionality.vbproj @@ -0,0 +1,127 @@ + + + + Debug + AnyCPU + + + + + {A4C115D6-11FD-4C1C-9682-93D118A34090} + Library + Case.Directionality + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + form_Main.vb + + + Form + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + form_Main.vb + + + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Data/clsExternalWalls.vb b/2017/Case.Directionality/Case.Directionality/Data/clsExternalWalls.vb new file mode 100644 index 00000000..4e28797a --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Data/clsExternalWalls.vb @@ -0,0 +1,347 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsExternalWalls + + Public Property WallObject As Wall + Public Property WallFamilyType As String + Public Property WallFacing As String + Public Property WallAngle As String + Public Property WallLength As String + Public Property WallLevel As String + + Private _wallDirection As XYZ + Private _testParam As String = "" + Private _northDirectionAngle As Double = 0 + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(e As Wall) + + ' Widen Scope + WallObject = e + + Try + Dim m_para As New clsPara(WallObject.LookupParameter("Comments")) + _TestParam = m_para.Value + Catch + End Try + + ' Family and Type + Try + Dim m_fam As String = WallObject.Name + Dim m_type As WallType = WallObject.Document.GetElement(WallObject.GetTypeId) + Dim m_typeName As String = m_type.Name + Catch + End Try + + ' Facing and Angle + Try + GetWallDirection() + GetFacingDirection() + Catch + End Try + + ' Length + Try + Dim m_p As New clsPara(WallObject.LookupParameter("Length")) + If Not m_p Is Nothing Then + WallLength = m_p.Value + Else + WallLength = "n/a" + End If + Catch + WallLength = "n/a" + End Try + + ' Level + Try + WallLevel = WallObject.Document.GetElement(WallObject.LevelId).Name + Catch + WallLevel = "n/a" + End Try + + End Sub + + Private Enum angleDir + isNorth + isSouth + isEast + isWest + End Enum + + ''' + ''' Calculate Angle Value + ''' + ''' + ''' + ''' + ''' + Private Sub GetAngleValue(p_a As angleDir, p_dir As Decimal, isToLeft As Boolean) + + ' Clockwise from North as 0 + WallAngle = 0 + + ' Angle as Degrees + Dim m_degrees As Double = p_dir * Math.PI + + Select Case p_a + Case angleDir.isNorth + If isToLeft = True Then + WallAngle = 360 - m_degrees + Else + WallAngle = 0 + m_degrees + End If + Case angleDir.isSouth + If isToLeft = True Then + WallAngle = 180 - m_degrees + Else + WallAngle = 180 + m_degrees + End If + Case angleDir.isEast + If isToLeft = True Then + WallAngle = 90 - m_degrees + Else + WallAngle = 90 + m_degrees + End If + Case angleDir.isWest + If isToLeft = True Then + WallAngle = 270 - m_degrees + Else + WallAngle = 270 + m_degrees + End If + End Select + + End Sub + +#Region "Wall Angle and Direction" + + ''' + ''' Get the Wall Direction + ''' + ''' + Private Sub GetWallDirection() + + ' Analyze the Location Curve + Dim m_locCurve As LocationCurve = TryCast(WallObject.Location, LocationCurve) + Dim m_ExtDirection As XYZ = XYZ.BasisZ + + ' Validate the Curve + If m_locCurve IsNot Nothing Then + + ' Get the Curve + Dim m_curve As Curve = m_locCurve.Curve + + ' Write("Wall line endpoints: ", curve) + Dim m_dir As XYZ = XYZ.BasisX + + If TypeOf m_curve Is Line Then + + ' Obtains the tangent vector of the wall. + m_dir = m_curve.ComputeDerivatives(0, True).BasisX.Normalize + + Else + + ' An assumption for non-linear walls: "tangent vector" is the direction from the start of the wall to the end. + m_dir = (m_curve.GetEndPoint(1) - m_curve.GetEndPoint(0)).Normalize + + End If + + ' Calculate the normal vector via cross product. + m_ExtDirection = XYZ.BasisZ.CrossProduct(m_dir) + + ' Flipped walls need to reverse the calculated direction + If WallObject.Flipped Then + m_ExtDirection = -m_ExtDirection + End If + + End If + + ' Return the Value + _WallDirection = m_ExtDirection + + End Sub + + ''' + ''' Get Facing + ''' + ''' + Private Sub GetFacingDirection() + + ' Corner Angles for Basis + Dim m_angleToNorth As Double = _WallDirection.AngleTo(XYZ.BasisY) + Dim m_angleToSouth As Double = _WallDirection.AngleTo(-XYZ.BasisY) + Dim m_angleToEast As Double = _WallDirection.AngleTo(XYZ.BasisX) + Dim m_angleToWest As Double = _WallDirection.AngleTo(-XYZ.BasisX) + + ' Is To Left? + Dim m_isToLeft As Boolean = True + + If Math.Abs(m_angleToNorth) < Math.PI / 4 Then + + ' North + WallFacing = "N" + + ' North East + If Math.Abs(m_angleToEast) < Math.PI / 3 Then + ' East + WallFacing = "NE" + m_isToLeft = False + End If + + ' North West + If Math.Abs(m_angleToWest) < Math.PI / 3 Then + ' West + WallFacing = "NW" + End If + + ' Angle Only + If Math.Abs(m_angleToWest) < Math.PI / 2 Then + ' Angle is West + Dim m_todo As String = "" + End If + If Math.Abs(m_angleToEast) < Math.PI / 2 Then + ' Angle is East + Dim m_todo As String = "" + m_isToLeft = False + End If + + ' Angle + GetAngleValue(angleDir.isNorth, m_angleToNorth, m_isToLeft) + + End If + + ' South + If Math.Abs(m_angleToSouth) < Math.PI / 4 Then + + ' South + WallFacing = "S" + + ' East + If Math.Abs(m_angleToEast) < Math.PI / 3 Then + ' East + WallFacing = "SE" + Dim m_todo As String = "" + End If + + ' West + If Math.Abs(m_angleToWest) < Math.PI / 3 Then + ' West + WallFacing = "SW" + Dim m_todo As String = "" + m_isToLeft = False + End If + + ' Angle Only + If Math.Abs(m_angleToWest) < Math.PI / 2 Then + ' Angle is West + Dim m_todo As String = "" + m_isToLeft = False + End If + If Math.Abs(m_angleToEast) < Math.PI / 2 Then + ' Angle is East + Dim m_todo As String = "" + End If + + ' Angle + GetAngleValue(angleDir.isSouth, m_angleToSouth, m_isToLeft) + + End If + + ' East + If Math.Abs(m_angleToEast) < Math.PI / 4 Then + + ' East + WallFacing = "E" + + If Math.Abs(m_angleToNorth) < Math.PI / 3 Then + ' North + WallFacing = "NE" + End If + + If Math.Abs(m_angleToSouth) < Math.PI / 3 Then + ' South + WallFacing = "SE" + m_isToLeft = False + End If + + ' Angle Only + If Math.Abs(m_angleToNorth) < Math.PI / 2 Then + ' Angle is North + Dim m_todo As String = "" + End If + If Math.Abs(m_angleToSouth) < Math.PI / 2 Then + ' Angle is South + Dim m_todo As String = "" + m_isToLeft = False + End If + + ' Angle + GetAngleValue(angleDir.isEast, m_angleToEast, m_isToLeft) + + End If + + ' West + If Math.Abs(m_angleToWest) < Math.PI / 4 Then + + ' West + WallFacing = "W" + + If Math.Abs(m_angleToNorth) < Math.PI / 3 Then + ' North + WallFacing = "NW" + m_isToLeft = False + End If + + If Math.Abs(m_angleToSouth) < Math.PI / 3 Then + ' South + WallFacing = "SW" + End If + + ' Angle Only + If Math.Abs(m_angleToNorth) < Math.PI / 2 Then + ' Angle is North + Dim m_todo As String = "" + m_isToLeft = False + End If + If Math.Abs(m_angleToSouth) < Math.PI / 2 Then + ' Angle is South + Dim m_todo As String = "" + End If + + ' Angle + GetAngleValue(angleDir.isWest, m_angleToWest, m_isToLeft) + + End If + + End Sub + + '' '' ''' + '' '' ''' South Facing + '' '' ''' + '' '' ''' + '' ''Private Sub GetDirectionAngleEast() + '' '' Dim m_angleToEast As Double = m_WallDirection.AngleTo(XYZ.BasisX) + '' '' WallFacing = Math.Abs(m_angleToEast) + '' '' ' Return Math.Abs(m_angleToEast) ' < Math.PI / 4 + '' ''End Sub + + '' '' ''' + '' '' ''' South Facing + '' '' ''' + '' '' ''' + '' '' ''' + '' ''Private Function IsSouthFacing() As Boolean + '' '' Dim angleToSouth As Double = m_WallDirection.AngleTo(-XYZ.BasisY) + '' '' Return Math.Abs(angleToSouth) < Math.PI / 4 + '' ''End Function + +#End Region + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Data/clsPara.vb b/2017/Case.Directionality/Case.Directionality/Data/clsPara.vb new file mode 100644 index 00000000..1a183de4 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Data/clsPara.vb @@ -0,0 +1,214 @@ +Imports Autodesk.Revit.DB + +Namespace Data + + ''' + ''' A simple class used to work with parameters + ''' + ''' + Public Class clsPara + + Private _p As Parameter + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(ByVal parameter As Parameter) + _p = parameter + End Sub + + ''' + ''' The display unit type + ''' + ''' + ''' + ''' + Public ReadOnly Property DisplayUnitType() As String + Get + Try + Return _p.DisplayUnitType.ToString + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' The parameter reference. + ''' The element the parameter belongs to is accessible from this object + ''' + ''' + ''' DB.Parameter of para, to gain access to its parent element + ''' + Public ReadOnly Property ParameterObject() As Parameter + Get + Return _p + End Get + End Property + + ''' + ''' Is it a read only parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property ParameterIsReadOnly() As Boolean + Get + Try + Return _p.IsReadOnly + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Is this a shared parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property ParameterIsShared() As Boolean + Get + Try + Return _p.IsShared + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' The type of parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property Type() As String + Get + Try + Return _p.GetType.Name + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' The name of the parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property Name() As String + Get + Try + Return _p.Definition.Name + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Gets the parameter format + ''' + ''' + ''' + ''' + Public ReadOnly Property Format() As String + Get + Try + Return _p.StorageType.ToString + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Returns value of the parameter + ''' + ''' + ''' + ''' + Public Property Value() As String + Get + Try + Return GetParameterValueString(_p) + Catch + Return Nothing + End Try + End Get + Set(ByVal value As String) + Try + SetParameterValue(_p, value) + Catch + End Try + End Set + End Property + + ''' + ''' Get the value of a parameter + ''' + ''' DB.Parameter + ''' String representing the value + ''' + Public Shared Function GetParameterValueString(ByVal parameter As Parameter) As String + 'public static Object GetParameterValue(Parameter parameter) + Select Case parameter.StorageType + Case StorageType.Double + Return parameter.AsValueString + Case StorageType.ElementId + ' Get the Element's Name + Dim m_eid As New ElementId(parameter.AsElementId.IntegerValue) + Dim m_obj As Element = parameter.Element.Document.GetElement(m_eid) + Return m_obj.Name + Case StorageType.Integer + Return parameter.AsInteger + Case StorageType.None + Return parameter.AsValueString + Case StorageType.String + Return parameter.AsString + Case Else + Return "" + End Select + End Function + + ''' + ''' Set a value to a parameter + ''' + ''' DB.Parameter + ''' Value does not have to be a string, Object + ''' + Public Shared Sub SetParameterValue(ByVal parameter As Parameter, ByVal value As Object) + 'first,check whether this parameter is read only + If parameter.IsReadOnly Then + Exit Sub + End If + Select Case parameter.StorageType + Case StorageType.Double + parameter.SetValueString(TryCast(value, String)) + Exit Select + Case StorageType.ElementId + Dim myElementId As ElementId = DirectCast(value, ElementId) + parameter.Set(myElementId) + Exit Select + Case StorageType.Integer + parameter.SetValueString(TryCast(value, String)) + Exit Select + Case StorageType.None + parameter.SetValueString(TryCast(value, String)) + Exit Select + Case StorageType.String + parameter.Set(TryCast(value, String)) + Exit Select + Case Else + Exit Select + End Select + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Data/clsParamItem.vb b/2017/Case.Directionality/Case.Directionality/Data/clsParamItem.vb new file mode 100644 index 00000000..8e16bf4f --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Data/clsParamItem.vb @@ -0,0 +1,82 @@ +Namespace Data + + ''' + ''' A very generic class for capturing the name, format and sharing scope of a parameter + ''' without capturing and storing an actual parameter object + ''' + ''' + Public Class clsParamItem + + Public Property Name As String + Public Property Format As String + Public Property isShared As Boolean + Public Property SharedGUID As String + Public Property ConstantCustomValue As String + Public Property CreatedFromParameter As Boolean + Public Property isReadOnly As Boolean + Public Property DisplayUnitType As String + + ''' + ''' Class constructor using a para class + ''' + ''' + ''' + Public Sub New(ByVal para As clsPara) + Name = para.Name + + ' Switched to be text for Doubles + If para.Format.ToLower = "double" Then + Format = "String" + Else + Format = para.Format + End If + + isShared = para.ParameterIsShared + DisplayUnitType = para.DisplayUnitType + ConstantCustomValue = "" + CreatedFromParameter = True + isReadOnly = para.ParameterIsReadOnly + If isShared = True Then + SharedGUID = para.ParameterObject.GUID.ToString + Else + SharedGUID = "" + End If + End Sub + + ''' + ''' Class constructor using a parameter name and format + ''' + ''' + ''' + ''' + Public Sub New(ByVal p_Name As String, ByVal p_Format As String) + Name = p_Name + Format = p_Format + isShared = False + ConstantCustomValue = "" + SharedGUID = "" + CreatedFromParameter = False + isReadOnly = False + DisplayUnitType = "" + End Sub + + ''' + ''' Class constructor using a parameter name, format and value + ''' + ''' + ''' + ''' + ''' + Public Sub New(ByVal p_Name As String, ByVal p_Format As String, ByVal p_Value As String) + Name = p_Name + Format = p_Format + isShared = False + ConstantCustomValue = p_Value + SharedGUID = "" + CreatedFromParameter = False + isReadOnly = False + DisplayUnitType = "" + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Data/clsSettings.vb b/2017/Case.Directionality/Case.Directionality/Data/clsSettings.vb new file mode 100644 index 00000000..1bec7373 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Data/clsSettings.vb @@ -0,0 +1,170 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsSettings + + Private _cmd As ExternalCommandData + +#Region "Public Properties" + + ''' + ''' Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch ex As Exception + Return Nothing + End Try + End Get + End Property + + ''' + ''' Path to Active Doc + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return Doc.PathName + End If + Else + Return Doc.PathName + End If + Catch + End Try + Return "{error}" + End Get + End Property + + Public Property ExternalWalls As List(Of clsExternalWalls) + Public Property AllWalls As List(Of Wall) + Public Property WallParametersString As List(Of String) + Public Property WallParametersNumber As List(Of String) + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(ECommandData As ExternalCommandData) + + ' Widen Scope + _cmd = ECommandData + + ' Process Data + GetWalls() + + End Sub + + ''' + ''' Get External Walls + ''' + ''' + Private Sub GetWalls() + + ' Counter + Dim iCnt As Integer = 0 + + ' Fresh Lists + WallParametersString = New List(Of String) + WallParametersNumber = New List(Of String) + AllWalls = New List(Of Wall) + ExternalWalls = New List(Of clsExternalWalls) + + ' Collect the Walls + Using col As New FilteredElementCollector(Doc) + col.OfClass(GetType(Wall)) + col.WhereElementIsNotElementType() + For Each x As Element In col.ToElements + + ' '' '' Group Ignore + '' ''If x.GroupId.IntegerValue > 0 Then Continue For + + ' Parameters + If iCnt = 0 Then + Try + For Each p As Parameter In x.Parameters + + ' Type + Dim m_ptype As ParameterType = p.Definition.ParameterType + + ' Definition Format + If m_ptype = ParameterType.Text Then + + Try + + ' Not Readonly + If p.IsReadOnly = False Then WallParametersString.Add(p.Definition.Name) + + Catch + End Try + + End If + + ' Definition Format + If m_ptype = ParameterType.Text Or m_ptype = ParameterType.Number Then + + Try + + ' Not Readonly + If p.IsReadOnly = False Then WallParametersNumber.Add(p.Definition.Name) + + Catch + End Try + + End If + + Next + + ' Sort the List + WallParametersString.Sort() + WallParametersNumber.Sort() + + Catch + End Try + + End If + + ' Wall Process Count + iCnt += 1 + + Try + AllWalls.Add(TryCast(x, Wall)) + Catch ex As Exception + + End Try + Try + Dim m_w As Wall = TryCast(x, Wall) + Dim m_symb As WallType = Me.Doc.GetElement(x.GetTypeId) + Dim m_p As Parameter = m_symb.Parameter(BuiltInParameter.FUNCTION_PARAM) + Dim m_val As WallFunction = DirectCast(m_p.AsInteger, WallFunction) + If m_val = WallFunction.Exterior Then + ExternalWalls.Add(New clsExternalWalls(m_w)) + End If + + Catch + End Try + + Next + + End Using + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Entry/CmdMain.vb b/2017/Case.Directionality/Case.Directionality/Entry/CmdMain.vb new file mode 100644 index 00000000..b8bfe087 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/Entry/CmdMain.vb @@ -0,0 +1,61 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].Directionality.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Main entry point for every external command + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display the Form + Using d As New form_Main(New clsSettings(commandData)) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/My Project/AssemblyInfo.vb b/2017/Case.Directionality/Case.Directionality/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..75f26faa --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.Directionality/Case.Directionality/My Project/Resources.Designer.vb b/2017/Case.Directionality/Case.Directionality/My Project/Resources.Designer.vb new file mode 100644 index 00000000..f98d9ee2 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.Directionality.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.Directionality/Case.Directionality/My Project/Resources.resx b/2017/Case.Directionality/Case.Directionality/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/My Project/Settings.Designer.vb b/2017/Case.Directionality/Case.Directionality/My Project/Settings.Designer.vb new file mode 100644 index 00000000..3eee8f75 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].Directionality.My.MySettings + Get + Return Global.[Case].Directionality.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.Directionality/Case.Directionality/My Project/Settings.settings b/2017/Case.Directionality/Case.Directionality/My Project/Settings.settings new file mode 100644 index 00000000..f7f176ac --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/Resources/Case_Clearly.png b/2017/Case.Directionality/Case.Directionality/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.Directionality/Case.Directionality/Resources/Case_Clearly.png differ diff --git a/2017/Case.Directionality/Case.Directionality/UI/form_Main.Designer.vb b/2017/Case.Directionality/Case.Directionality/UI/form_Main.Designer.vb new file mode 100644 index 00000000..31dc88df --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/UI/form_Main.Designer.vb @@ -0,0 +1,270 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.GroupBoxWalls = New System.Windows.Forms.GroupBox() + Me.DataGridView1 = New System.Windows.Forms.DataGridView() + Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.Column2 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.Column3 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.Column4 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.Column5 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.LabelParameter = New System.Windows.Forms.Label() + Me.ComboBoxParameter = New System.Windows.Forms.ComboBox() + Me.RadioButtonAngle = New System.Windows.Forms.RadioButton() + Me.RadioButtonText = New System.Windows.Forms.RadioButton() + Me.GroupBoxWrite = New System.Windows.Forms.GroupBox() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.ButtonHelp = New System.Windows.Forms.Button() + Me.ButtonOk = New System.Windows.Forms.Button() + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.GroupBoxWalls.SuspendLayout() + CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBoxWrite.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'GroupBoxWalls + ' + Me.GroupBoxWalls.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBoxWalls.Controls.Add(Me.DataGridView1) + Me.GroupBoxWalls.Location = New System.Drawing.Point(12, 12) + Me.GroupBoxWalls.Name = "GroupBoxWalls" + Me.GroupBoxWalls.Size = New System.Drawing.Size(516, 388) + Me.GroupBoxWalls.TabIndex = 2 + Me.GroupBoxWalls.TabStop = False + Me.GroupBoxWalls.Text = "External Walls Found in Model" + ' + 'DataGridView1 + ' + Me.DataGridView1.AllowUserToAddRows = False + Me.DataGridView1.AllowUserToDeleteRows = False + Me.DataGridView1.AllowUserToResizeRows = False + Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.Column4, Me.Column5}) + Me.DataGridView1.Dock = System.Windows.Forms.DockStyle.Fill + Me.DataGridView1.Location = New System.Drawing.Point(3, 16) + Me.DataGridView1.Name = "DataGridView1" + Me.DataGridView1.ReadOnly = True + Me.DataGridView1.RowHeadersVisible = False + Me.DataGridView1.Size = New System.Drawing.Size(510, 369) + Me.DataGridView1.TabIndex = 0 + ' + 'Column1 + ' + Me.Column1.HeaderText = "ElementID" + Me.Column1.Name = "Column1" + Me.Column1.ReadOnly = True + ' + 'Column2 + ' + Me.Column2.HeaderText = "Type" + Me.Column2.Name = "Column2" + Me.Column2.ReadOnly = True + ' + 'Column3 + ' + Me.Column3.HeaderText = "Facing" + Me.Column3.Name = "Column3" + Me.Column3.ReadOnly = True + ' + 'Column4 + ' + Me.Column4.HeaderText = "Length" + Me.Column4.Name = "Column4" + Me.Column4.ReadOnly = True + ' + 'Column5 + ' + Me.Column5.HeaderText = "Level" + Me.Column5.Name = "Column5" + Me.Column5.ReadOnly = True + ' + 'LabelParameter + ' + Me.LabelParameter.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelParameter.AutoSize = True + Me.LabelParameter.Location = New System.Drawing.Point(534, 22) + Me.LabelParameter.Name = "LabelParameter" + Me.LabelParameter.Size = New System.Drawing.Size(120, 13) + Me.LabelParameter.TabIndex = 3 + Me.LabelParameter.Text = "Write Facing Results to:" + ' + 'ComboBoxParameter + ' + Me.ComboBoxParameter.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ComboBoxParameter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ComboBoxParameter.FormattingEnabled = True + Me.ComboBoxParameter.Location = New System.Drawing.Point(537, 41) + Me.ComboBoxParameter.Name = "ComboBoxParameter" + Me.ComboBoxParameter.Size = New System.Drawing.Size(209, 21) + Me.ComboBoxParameter.TabIndex = 4 + ' + 'RadioButtonAngle + ' + Me.RadioButtonAngle.AutoSize = True + Me.RadioButtonAngle.Location = New System.Drawing.Point(39, 30) + Me.RadioButtonAngle.Name = "RadioButtonAngle" + Me.RadioButtonAngle.Size = New System.Drawing.Size(94, 17) + Me.RadioButtonAngle.TabIndex = 5 + Me.RadioButtonAngle.Text = "Write as Angle" + Me.RadioButtonAngle.UseVisualStyleBackColor = True + ' + 'RadioButtonText + ' + Me.RadioButtonText.AutoSize = True + Me.RadioButtonText.Checked = True + Me.RadioButtonText.Location = New System.Drawing.Point(39, 63) + Me.RadioButtonText.Name = "RadioButtonText" + Me.RadioButtonText.Size = New System.Drawing.Size(88, 17) + Me.RadioButtonText.TabIndex = 6 + Me.RadioButtonText.TabStop = True + Me.RadioButtonText.Text = "Write as Text" + Me.RadioButtonText.UseVisualStyleBackColor = True + ' + 'GroupBoxWrite + ' + Me.GroupBoxWrite.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBoxWrite.Controls.Add(Me.RadioButtonAngle) + Me.GroupBoxWrite.Controls.Add(Me.RadioButtonText) + Me.GroupBoxWrite.Location = New System.Drawing.Point(537, 80) + Me.GroupBoxWrite.Name = "GroupBoxWrite" + Me.GroupBoxWrite.Size = New System.Drawing.Size(209, 106) + Me.GroupBoxWrite.TabIndex = 7 + Me.GroupBoxWrite.TabStop = False + Me.GroupBoxWrite.Text = "Record Direction as:" + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = Global.[Case].Directionality.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(541, 287) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(205, 67) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 9 + Me.PictureBox1.TabStop = False + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label1.Location = New System.Drawing.Point(541, 189) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(205, 54) + Me.Label1.TabIndex = 10 + Me.Label1.Text = "All wall instances of wall types with their 'Function' parameter set to 'External" & _ + "' are recognized by this utility." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(541, 360) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(206, 40) + Me.ProgressBar1.TabIndex = 11 + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.Location = New System.Drawing.Point(537, 360) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(60, 40) + Me.ButtonHelp.TabIndex = 15 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'ButtonOk + ' + Me.ButtonOk.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonOk.Location = New System.Drawing.Point(620, 360) + Me.ButtonOk.Name = "ButtonOk" + Me.ButtonOk.Size = New System.Drawing.Size(60, 40) + Me.ButtonOk.TabIndex = 14 + Me.ButtonOk.Text = "OK" + Me.ButtonOk.UseVisualStyleBackColor = True + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.Location = New System.Drawing.Point(686, 360) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(60, 40) + Me.ButtonCancel.TabIndex = 13 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(759, 412) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.ButtonOk) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.GroupBoxWrite) + Me.Controls.Add(Me.ComboBoxParameter) + Me.Controls.Add(Me.LabelParameter) + Me.Controls.Add(Me.GroupBoxWalls) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(775, 450) + Me.Name = "form_Main" + Me.Text = "External Wall Facings" + Me.GroupBoxWalls.ResumeLayout(False) + CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBoxWrite.ResumeLayout(False) + Me.GroupBoxWrite.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents GroupBoxWalls As System.Windows.Forms.GroupBox + Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView + Friend WithEvents Column1 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents Column2 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents Column3 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents Column4 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents Column5 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents LabelParameter As System.Windows.Forms.Label + Friend WithEvents ComboBoxParameter As System.Windows.Forms.ComboBox + Friend WithEvents RadioButtonAngle As System.Windows.Forms.RadioButton + Friend WithEvents RadioButtonText As System.Windows.Forms.RadioButton + Friend WithEvents GroupBoxWrite As System.Windows.Forms.GroupBox + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents ButtonHelp As System.Windows.Forms.Button + Friend WithEvents ButtonOk As System.Windows.Forms.Button + Friend WithEvents ButtonCancel As System.Windows.Forms.Button +End Class diff --git a/2017/Case.Directionality/Case.Directionality/UI/form_Main.resx b/2017/Case.Directionality/Case.Directionality/UI/form_Main.resx new file mode 100644 index 00000000..41017316 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/UI/form_Main.resx @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/UI/form_Main.vb b/2017/Case.Directionality/Case.Directionality/UI/form_Main.vb new file mode 100644 index 00000000..fe02f9b9 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/UI/form_Main.vb @@ -0,0 +1,301 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports System.Windows.Forms +Imports System.Reflection +Imports System.Diagnostics +Imports [Case].Directionality.API +Imports [Case].Directionality.Data + +Public Class form_Main + + Private _s As clsSettings + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + + ' Load Combobox + UpdateParameterList() + + ' Load the Results + UpdateDatagrid() + + ' Form Setup + ProgressBar1.Hide() + Text = "External Wall Facings v" & Assembly.GetExecutingAssembly.GetName.Version.ToString + + End Sub + + ''' + ''' List the Parameters + ''' + ''' + Private Sub UpdateParameterList() + + Try + ' Clean List + ComboBoxParameter.Items.Clear() + + If Me.RadioButtonText.Checked = True Then + For Each x As String In _s.WallParametersString + ComboBoxParameter.Items.Add(x) + Next + Else + For Each x As String In _s.WallParametersNumber + ComboBoxParameter.Items.Add(x) + Next + End If + + ' Set Default + ComboBoxParameter.SelectedIndex = 0 + + Catch ex As Exception + + End Try + + End Sub + + ''' + ''' Update the Datagrid + ''' + ''' + Private Sub UpdateDatagrid() + + ' Clean List of Rows + DataGridView1.Rows.Clear() + + ' Load DataGrid + Try + For Each x As clsExternalWalls In _s.ExternalWalls + + ' Fresh Row + Dim m_row As New DataGridViewRow + + ' ElementID + Dim m_txt As New DataGridViewTextBoxCell + m_txt.Value = x.WallObject.Id.IntegerValue + m_row.Cells.Add(m_txt) + + ' Type + m_txt = New DataGridViewTextBoxCell + m_txt.Value = x.WallFamilyType + m_row.Cells.Add(m_txt) + + If Me.RadioButtonAngle.Checked = True Then + ' Facing + m_txt = New DataGridViewTextBoxCell + m_txt.Value = x.WallAngle + m_row.Cells.Add(m_txt) + Else + ' Facing + m_txt = New DataGridViewTextBoxCell + m_txt.Value = x.WallFacing + m_row.Cells.Add(m_txt) + End If + + ' Length + m_txt = New DataGridViewTextBoxCell + m_txt.Value = x.WallLength + m_row.Cells.Add(m_txt) + + ' Level + m_txt = New DataGridViewTextBoxCell + m_txt.Value = x.WallLevel + m_row.Cells.Add(m_txt) + + ' Add the Row + DataGridView1.Rows.Add(m_row) + + Next + + Catch ex As Exception + ' Quiet Fail + End Try + + End Sub + + ''' + ''' Write the Directionality Data + ''' + ''' + Private Sub SaveDirectionData() + + ' Failure Count + Dim iFail As Integer = 0 + ' Success Count + Dim iSuc As Integer = 0 + + ' Progress Bar + With Me.ProgressBar1 + .Show() + .Minimum = 0 + .Maximum = Me.DataGridView1.Rows.Count + .Value = 0 + End With + ButtonCancel.Hide() + ButtonOk.Hide() + Application.DoEvents() + + ' Transaction + Dim m_t As New Transaction(_s.Doc, "CASE - External Wall Directionality") + m_t.Start() + + ' Iterate Each Row + For Each x As DataGridViewRow In Me.DataGridView1.Rows + + ' Step the Progressbar + ProgressBar1.Increment(1) + + Dim m_e As Element = Nothing + Try + + ' Get the Element + Dim m_i As Integer = x.Cells(0).Value + m_e = _s.Doc.GetElement(New ElementId(m_i)) + + Catch ex As Exception + + ' Record Failure? + iFail += 1 + + Continue For + + End Try + + ' Do we have an element to twork with + If Not m_e Is Nothing Then + + Try + + ' Get the Parameter + Dim m_p As New clsPara(m_e.LookupParameter(ComboBoxParameter.SelectedItem.ToString)) + If Not m_p Is Nothing Then + + ' Set the Parameter + m_p.Value = x.Cells(2).Value + + iSuc += 1 + + Else + + ' Record Failure? + iFail += 1 + + End If + + Catch ex As Exception + + ' Record Failure? + iFail += 1 + + Continue For + + End Try + + End If + + Next + + ' Commit + m_t.Commit() + + ' Report to User + Dim m_dlg As New TaskDialog("Here's What Happened:") + If iFail > 0 Then + m_dlg.MainInstruction = iFail.ToString & " values failed to record!" + m_dlg.MainContent = iSuc.ToString & " values recorded successfully!" + Else + m_dlg.MainInstruction = iSuc.ToString & " values recorded successfully!" + End If + m_dlg.Show() + + End Sub + +#Region "Form Controls & Events" + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-external-wall-directions") + End Sub + + ''' + ''' CASE Site + ''' + ''' + ''' + ''' + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Process.Start("http://www.case-inc.com") + End Sub + + ''' + ''' Text Mode + ''' + ''' + ''' + ''' + Private Sub RadioButtonText_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButtonText.CheckedChanged + UpdateParameterList() + UpdateDatagrid() + End Sub + + ''' + ''' Angle Mode + ''' + ''' + ''' + ''' + Private Sub RadioButtonAngle_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButtonAngle.CheckedChanged + UpdateParameterList() + UpdateDatagrid() + End Sub + + ''' + ''' Commit + ''' + ''' + ''' + ''' + Private Sub ButtonOk_Click(sender As System.Object, e As System.EventArgs) Handles ButtonOk.Click + + Try + RecordUsage() + Catch + End Try + + ' Process Items + SaveDirectionData() + + ' Close + Close() + + End Sub + + ''' + ''' Cancel + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCancel.Click + + ' Close + Close() + + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.Directionality/Case.Directionality/app.config b/2017/Case.Directionality/Case.Directionality/app.config new file mode 100644 index 00000000..f0025c19 --- /dev/null +++ b/2017/Case.Directionality/Case.Directionality/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/API/clsUsage.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.addin b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.addin new file mode 100644 index 00000000..c1ccb1f4 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.addin @@ -0,0 +1,11 @@ + + + + Command Case.DoorMarkRenumber + Case.DoorMarkRenumber.dll + 88a0a36d-d7ff-417a-8716-b02e76cbeac9 + Case.DoorMarkRenumber.Entry.CmdMain + CASE + http://www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.vbproj b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.vbproj new file mode 100644 index 00000000..027eb4f5 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Case.DoorMarkRenumber.vbproj @@ -0,0 +1,135 @@ + + + + Debug + AnyCPU + + + + + {F16ACEAB-3D41-411C-BF3B-B25953BA5C89} + Library + Case.DoorMarkRenumber + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + + + + + + + + + + + form_Main.vb + + + Form + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + form_Main.vb + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsDoors.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsDoors.vb new file mode 100644 index 00000000..1b1adb5b --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsDoors.vb @@ -0,0 +1,257 @@ +Imports Autodesk.Revit.DB.Architecture +Imports Autodesk.Revit.DB + +Namespace Data + + ''' + ''' A Class for handling Door data + ''' + ''' + Public Class clsDoors + + Private ReadOnly Property Doc As Document + Get + Return _door.Document + End Get + End Property + Private _door As FamilyInstance + Private _modelPhases As SortedDictionary(Of Integer, Phase) + +#Region "Public Properties" + + ''' + ''' Door Family Instance + ''' + ''' + ''' + ''' + Friend ReadOnly Property DoorInstance As FamilyInstance + Get + Return _door + End Get + End Property + + ''' + ''' Current Mark + ''' + ''' + ''' + ''' + Public Property MarkNow As String + + ''' + ''' Suggested Mark + ''' + ''' + ''' + ''' + Public Property MarkSuggestion As String + + ''' + ''' To Room + ''' + ''' + ''' + ''' + Public Property toRoom As String + + ''' + ''' From Room + ''' + ''' + ''' + ''' + Public Property fromRoom As String + + ''' + ''' Type Name + ''' + ''' + ''' + ''' + Public ReadOnly Property FamilyType As String + Get + Return _door.Name + End Get + End Property + + ''' + ''' Family Name + ''' + ''' + ''' + ''' + Public ReadOnly Property Family As String + Get + Return _door.Symbol.Family.Name + End Get + End Property + + ''' + ''' Creation Phase + ''' + ''' + ''' + ''' + Public Property Phase As String + + ''' + ''' Generation Level + ''' + ''' + ''' + ''' + Public Property Level As String + + ''' + ''' Can Edit + ''' + ''' + ''' + ''' + Public Property AllowEdits As Boolean + +#End Region + + ''' + ''' General Class Constructor + ''' + ''' + ''' + Public Sub New( + ByVal d As FamilyInstance, + modelPhases As SortedDictionary(Of Integer, Phase)) + + ' Widen Scope + _door = d + _modelPhases = modelPhases + + ' Setup + AllowEdits = True + MarkSuggestion = "" + GetData() + GetRoomData() + + End Sub + +#Region "Private Members" + + ''' + ''' Setup + ''' + ''' + Private Sub GetData() + + Try + Level = "" + Dim m_level As Level = _door.Document.GetElement(_door.LevelId) + If Not m_level Is Nothing Then Level = m_level.Name + Catch + End Try + + Try + Dim m_phase As Element = Doc.GetElement(_door.CreatedPhaseId) + Phase = m_phase.Name + Catch + Phase = "" + End Try + + Try + Dim m_p As Parameter = _door.Parameter(BuiltInParameter.ALL_MODEL_MARK) + MarkNow = m_p.AsString() + If String.IsNullOrEmpty(MarkNow) Then MarkNow = "" + Catch + MarkNow = "" + End Try + + End Sub + + ''' + ''' Get To and From Room + ''' + ''' + ''' + ''' + Private Function GetValidRoom(isToRoom As Boolean) As Room + + ' Default + Dim m_rm As Room = Nothing + + Try + + Dim m_testNumber As Integer = 0 + For Each x In _modelPhases.Values + If x.Id.IntegerValue > m_testNumber And x.Id.IntegerValue <= _door.CreatedPhaseId.IntegerValue Then + + Try + Dim m_roomTest As Room = Nothing + If isToRoom = True Then + m_roomTest = _door.ToRoom(x) + Else + m_roomTest = _door.FromRoom(x) + End If + If m_roomTest IsNot Nothing Then m_rm = m_roomTest + Catch + End Try + + m_testNumber = x.Id.IntegerValue + + End If + Next + + Catch + End Try + + ' Result + Return m_rm + + End Function + + ''' + ''' To and From Room - with correct phase + ''' + ''' + Private Sub GetRoomData() + + Try + + ' To Room + Dim m_toRoom As Room = GetValidRoom(True) + If m_toRoom IsNot Nothing Then + toRoom = m_toRoom.Number + Else + toRoom = "" + End If + + ' From Room + Dim m_fromRoom As Room = GetValidRoom(False) + If m_fromRoom IsNot Nothing Then + fromRoom = m_fromRoom.Number + Else + fromRoom = "" + End If + + Catch + End Try + + End Sub + +#End Region + +#Region "Public Members" + + ''' + ''' Apply Mark Value to Door + ''' + ''' + Public Sub SetDoorMark() + Try + DoorInstance.Parameter(BuiltInParameter.ALL_MODEL_MARK).Set(MarkSuggestion) + Catch + End Try + End Sub + +#End Region + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsPropertyComparer.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsPropertyComparer.vb new file mode 100644 index 00000000..a9fdd8cf --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsPropertyComparer.vb @@ -0,0 +1,41 @@ +Imports System.Collections +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Reflection + +Namespace Data + + ''' + ''' From http://www.timvw.be/presenting-the-sortablebindinglistt-take-two + ''' + Public Class PropertyComparer(Of T) + Implements IComparer(Of T) + Private ReadOnly comparer As IComparer + Private propertyDescriptor As PropertyDescriptor + Private reverse As Integer + + Public Sub New(ByVal [property] As PropertyDescriptor, ByVal direction As ListSortDirection) + propertyDescriptor = [property] + Dim comparerForPropertyType As Type = GetType(Comparer(Of )).MakeGenericType([property].PropertyType) + comparer = DirectCast(comparerForPropertyType.InvokeMember("Default", BindingFlags.[Static] Or BindingFlags.GetProperty Or BindingFlags.[Public], Nothing, Nothing, Nothing), IComparer) + SetListSortDirection(direction) + End Sub + + Public Function Compare(ByVal x As T, ByVal y As T) As Integer Implements IComparer(Of T).Compare + Return Me.reverse * Me.comparer.Compare(propertyDescriptor.GetValue(x), Me.propertyDescriptor.GetValue(y)) + End Function + + Private Sub SetPropertyDescriptor(ByVal descriptor As PropertyDescriptor) + propertyDescriptor = descriptor + End Sub + + Private Sub SetListSortDirection(ByVal direction As ListSortDirection) + reverse = If(direction = ListSortDirection.Ascending, 1, -1) + End Sub + + Public Sub SetPropertyAndDirection(ByVal descriptor As PropertyDescriptor, ByVal direction As ListSortDirection) + SetPropertyDescriptor(descriptor) + SetListSortDirection(direction) + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSettings.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSettings.vb new file mode 100644 index 00000000..605cf65d --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSettings.vb @@ -0,0 +1,80 @@ +Imports System.Reflection +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + ''' + ''' A class to manage general application settings + ''' + ''' + Public Class clsSettings + + Private _cmd As ExternalCommandData + +#Region "Public Properties" + + ''' + ''' Path to Active Doc + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return Doc.PathName + End If + Else + Return Doc.PathName + End If + Catch + End Try + Return "{error}" + End Get + End Property + + Public ReadOnly Property AppVersion As String + Get + Return "v" & Assembly.GetExecutingAssembly.GetName.Version.ToString + End Get + End Property + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + Return Nothing + End Try + End Get + End Property + Public ReadOnly Property ActiveUIdoc As UIDocument + Get + Try + Return _cmd.Application.ActiveUIDocument + Catch + Return Nothing + End Try + End Get + End Property + +#End Region + + ''' + ''' Class Constructor + ''' + ''' Revit ExternalCommandData Reference + ''' + Public Sub New(ByVal cmdData As ExternalCommandData) + + ' Widen Scope + _cmd = cmdData + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSortableBindingList.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSortableBindingList.vb new file mode 100644 index 00000000..3142c71c --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Data/clsSortableBindingList.vb @@ -0,0 +1,96 @@ +Imports System.Collections.Generic +Imports System.ComponentModel + +Namespace Data + + ''' + ''' From http://www.timvw.be/presenting-the-sortablebindinglistt-take-two + ''' + Public Class SortableBindingList(Of T) + Inherits BindingList(Of T) + Private ReadOnly comparers As Dictionary(Of Type, PropertyComparer(Of T)) + Private isSorted As Boolean + Private listSortDirection As ListSortDirection + Private propertyDescriptor As PropertyDescriptor + + Public Sub New() + MyBase.New(New List(Of T)) + comparers = New Dictionary(Of Type, PropertyComparer(Of T)) + End Sub + + Public Sub New(ByVal enumeration As IEnumerable(Of T)) + MyBase.New(New List(Of T)(enumeration)) + comparers = New Dictionary(Of Type, PropertyComparer(Of T)) + End Sub + + Protected Overrides ReadOnly Property SupportsSortingCore() As Boolean + Get + Return True + End Get + End Property + + Protected Overrides ReadOnly Property IsSortedCore() As Boolean + Get + Return isSorted + End Get + End Property + + Protected Overrides ReadOnly Property SortPropertyCore() As PropertyDescriptor + Get + Return propertyDescriptor + End Get + End Property + + Protected Overrides ReadOnly Property SortDirectionCore() As ListSortDirection + Get + Return listSortDirection + End Get + End Property + + Protected Overrides ReadOnly Property SupportsSearchingCore() As Boolean + Get + Return True + End Get + End Property + + Protected Overrides Sub ApplySortCore(ByVal [property] As PropertyDescriptor, ByVal direction As ListSortDirection) + Dim itemsList As List(Of T) = DirectCast(Items, List(Of T)) + + Dim propertyType As Type = [property].PropertyType + Dim comparer As PropertyComparer(Of T) + If Not Me.comparers.TryGetValue(propertyType, comparer) Then + comparer = New PropertyComparer(Of T)([property], direction) + comparers.Add(propertyType, comparer) + End If + + comparer.SetPropertyAndDirection([property], direction) + itemsList.Sort(comparer) + + propertyDescriptor = [property] + listSortDirection = direction + isSorted = True + + OnListChanged(New ListChangedEventArgs(ListChangedType.Reset, -1)) + End Sub + + Protected Overrides Sub RemoveSortCore() + isSorted = False + propertyDescriptor = MyBase.SortPropertyCore + listSortDirection = MyBase.SortDirectionCore + + OnListChanged(New ListChangedEventArgs(ListChangedType.Reset, -1)) + End Sub + + Protected Overrides Function FindCore(ByVal [property] As PropertyDescriptor, ByVal key As Object) As Integer + Dim count As Integer = Me.Count + For i As Integer = 0 To count - 1 + Dim element As T = Me(i) + If [property].GetValue(element).Equals(key) Then + Return i + End If + Next + + Return -1 + End Function + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Entry/CmdMain.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Entry/CmdMain.vb new file mode 100644 index 00000000..21700a04 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Entry/CmdMain.vb @@ -0,0 +1,80 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].DoorMarkRenumber.Data + +Namespace Entry + + ''' + ''' Renumber doors based on Door-To room number (A, B, C, D, etc.) + ''' + ''' + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Main entry point for every external command + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Settings + Dim m_s As New clsSettings(commandData) + + ' Generation Level + If m_s.Doc.ActiveView.GenLevel Is Nothing Then + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "View not Supported" + .MainContent = "Please open a Floor Plan, Ceiling Plan, or Area Plan and try again." + .Show() + End With + End Using + Return Result.Cancelled + End If + + ' Main Dialog + Using d As New form_Main(m_s) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch + + ' Fail + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.Designer.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.Designer.vb new file mode 100644 index 00000000..1c289e9d --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.Designer.vb @@ -0,0 +1,271 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.CheckBoxShowChecked = New System.Windows.Forms.CheckBox() + Me.LabelPhase = New System.Windows.Forms.Label() + Me.RadioButtonSelected = New System.Windows.Forms.RadioButton() + Me.LabelInstructions = New System.Windows.Forms.Label() + Me.ContextMenuDatagridView = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.ZoomToElementsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RadioButtonCurrentLevel = New System.Windows.Forms.RadioButton() + Me.GroupBoxScope = New System.Windows.Forms.GroupBox() + Me.LabelPhaseName = New System.Windows.Forms.Label() + Me.LabelInstances = New System.Windows.Forms.Label() + Me.DataGridViewDoors = New System.Windows.Forms.DataGridView() + Me.ButtonOK = New System.Windows.Forms.Button() + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ButtonHelp = New System.Windows.Forms.Button() + Me.ContextMenuDatagridView.SuspendLayout() + Me.GroupBoxScope.SuspendLayout() + CType(Me.DataGridViewDoors, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'CheckBoxShowChecked + ' + Me.CheckBoxShowChecked.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CheckBoxShowChecked.AutoSize = True + Me.CheckBoxShowChecked.Checked = True + Me.CheckBoxShowChecked.CheckState = System.Windows.Forms.CheckState.Checked + Me.CheckBoxShowChecked.Location = New System.Drawing.Point(28, 149) + Me.CheckBoxShowChecked.Name = "CheckBoxShowChecked" + Me.CheckBoxShowChecked.Size = New System.Drawing.Size(117, 17) + Me.CheckBoxShowChecked.TabIndex = 19 + Me.CheckBoxShowChecked.Text = "Filter by 'AllowEdits'" + Me.CheckBoxShowChecked.UseVisualStyleBackColor = True + ' + 'LabelPhase + ' + Me.LabelPhase.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelPhase.AutoSize = True + Me.LabelPhase.Location = New System.Drawing.Point(6, 118) + Me.LabelPhase.Name = "LabelPhase" + Me.LabelPhase.Size = New System.Drawing.Size(66, 13) + Me.LabelPhase.TabIndex = 17 + Me.LabelPhase.Text = "View Phase:" + ' + 'RadioButtonSelected + ' + Me.RadioButtonSelected.AutoSize = True + Me.RadioButtonSelected.Enabled = False + Me.RadioButtonSelected.Location = New System.Drawing.Point(28, 77) + Me.RadioButtonSelected.Name = "RadioButtonSelected" + Me.RadioButtonSelected.Size = New System.Drawing.Size(148, 17) + Me.RadioButtonSelected.TabIndex = 0 + Me.RadioButtonSelected.Text = "Doors in Current Selection" + Me.RadioButtonSelected.UseVisualStyleBackColor = True + ' + 'LabelInstructions + ' + Me.LabelInstructions.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelInstructions.Location = New System.Drawing.Point(602, 198) + Me.LabelInstructions.Name = "LabelInstructions" + Me.LabelInstructions.Size = New System.Drawing.Size(270, 62) + Me.LabelInstructions.TabIndex = 18 + Me.LabelInstructions.Text = "Right-Clicking in the data viewer displays an option to ""Zoom to Elements""... mul" & _ + "tiple selections will zoom to show all elements in the row selection" + ' + 'ContextMenuDatagridView + ' + Me.ContextMenuDatagridView.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ZoomToElementsToolStripMenuItem}) + Me.ContextMenuDatagridView.Name = "ContextMenuDatagridView" + Me.ContextMenuDatagridView.Size = New System.Drawing.Size(172, 26) + ' + 'ZoomToElementsToolStripMenuItem + ' + Me.ZoomToElementsToolStripMenuItem.Name = "ZoomToElementsToolStripMenuItem" + Me.ZoomToElementsToolStripMenuItem.Size = New System.Drawing.Size(171, 22) + Me.ZoomToElementsToolStripMenuItem.Text = "Zoom to Elements" + ' + 'RadioButtonCurrentLevel + ' + Me.RadioButtonCurrentLevel.AutoSize = True + Me.RadioButtonCurrentLevel.Checked = True + Me.RadioButtonCurrentLevel.Location = New System.Drawing.Point(28, 54) + Me.RadioButtonCurrentLevel.Name = "RadioButtonCurrentLevel" + Me.RadioButtonCurrentLevel.Size = New System.Drawing.Size(123, 17) + Me.RadioButtonCurrentLevel.TabIndex = 1 + Me.RadioButtonCurrentLevel.TabStop = True + Me.RadioButtonCurrentLevel.Text = "Doors Visible in View" + Me.RadioButtonCurrentLevel.UseVisualStyleBackColor = True + ' + 'GroupBoxScope + ' + Me.GroupBoxScope.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBoxScope.Controls.Add(Me.LabelPhaseName) + Me.GroupBoxScope.Controls.Add(Me.RadioButtonCurrentLevel) + Me.GroupBoxScope.Controls.Add(Me.CheckBoxShowChecked) + Me.GroupBoxScope.Controls.Add(Me.RadioButtonSelected) + Me.GroupBoxScope.Controls.Add(Me.LabelPhase) + Me.GroupBoxScope.Controls.Add(Me.LabelInstances) + Me.GroupBoxScope.Location = New System.Drawing.Point(601, 12) + Me.GroupBoxScope.Name = "GroupBoxScope" + Me.GroupBoxScope.Size = New System.Drawing.Size(271, 183) + Me.GroupBoxScope.TabIndex = 15 + Me.GroupBoxScope.TabStop = False + Me.GroupBoxScope.Text = "Renumber Door Mark Scope Filter" + ' + 'LabelPhaseName + ' + Me.LabelPhaseName.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelPhaseName.AutoSize = True + Me.LabelPhaseName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LabelPhaseName.ForeColor = System.Drawing.Color.RoyalBlue + Me.LabelPhaseName.Location = New System.Drawing.Point(89, 118) + Me.LabelPhaseName.Name = "LabelPhaseName" + Me.LabelPhaseName.Size = New System.Drawing.Size(78, 13) + Me.LabelPhaseName.TabIndex = 20 + Me.LabelPhaseName.Text = "Phase Name" + ' + 'LabelInstances + ' + Me.LabelInstances.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelInstances.AutoSize = True + Me.LabelInstances.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LabelInstances.ForeColor = System.Drawing.Color.RoyalBlue + Me.LabelInstances.Location = New System.Drawing.Point(25, 25) + Me.LabelInstances.Name = "LabelInstances" + Me.LabelInstances.Size = New System.Drawing.Size(66, 13) + Me.LabelInstances.TabIndex = 14 + Me.LabelInstances.Text = "Instances:" + ' + 'DataGridViewDoors + ' + Me.DataGridViewDoors.AllowUserToAddRows = False + Me.DataGridViewDoors.AllowUserToDeleteRows = False + Me.DataGridViewDoors.AllowUserToOrderColumns = True + Me.DataGridViewDoors.AllowUserToResizeRows = False + Me.DataGridViewDoors.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.DataGridViewDoors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.DataGridViewDoors.ContextMenuStrip = Me.ContextMenuDatagridView + Me.DataGridViewDoors.Cursor = System.Windows.Forms.Cursors.Default + Me.DataGridViewDoors.Location = New System.Drawing.Point(-1, -1) + Me.DataGridViewDoors.Name = "DataGridViewDoors" + Me.DataGridViewDoors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.DataGridViewDoors.Size = New System.Drawing.Size(596, 480) + Me.DataGridViewDoors.TabIndex = 13 + ' + 'ButtonOK + ' + Me.ButtonOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonOK.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonOK.Location = New System.Drawing.Point(740, 425) + Me.ButtonOK.Name = "ButtonOK" + Me.ButtonOK.Size = New System.Drawing.Size(132, 40) + Me.ButtonOK.TabIndex = 11 + Me.ButtonOK.Text = "Renumber Doors" + Me.ButtonOK.UseVisualStyleBackColor = True + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.ButtonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonCancel.Location = New System.Drawing.Point(657, 425) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(76, 40) + Me.ButtonCancel.TabIndex = 12 + Me.ButtonCancel.Text = "Close" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(601, 425) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(271, 40) + Me.ProgressBar1.TabIndex = 19 + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = Global.[Case].DoorMarkRenumber.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(740, 365) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(132, 54) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 20 + Me.PictureBox1.TabStop = False + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonHelp.Location = New System.Drawing.Point(601, 425) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(50, 40) + Me.ButtonHelp.TabIndex = 22 + Me.ButtonHelp.Text = "Help" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(884, 477) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.GroupBoxScope) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.DataGridViewDoors) + Me.Controls.Add(Me.LabelInstructions) + Me.Controls.Add(Me.ButtonOK) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(900, 515) + Me.Name = "form_Main" + Me.Text = "Door Mark Update by Room Number" + Me.ContextMenuDatagridView.ResumeLayout(False) + Me.GroupBoxScope.ResumeLayout(False) + Me.GroupBoxScope.PerformLayout() + CType(Me.DataGridViewDoors, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents CheckBoxShowChecked As System.Windows.Forms.CheckBox + Friend WithEvents LabelPhase As System.Windows.Forms.Label + Friend WithEvents RadioButtonSelected As System.Windows.Forms.RadioButton + Friend WithEvents LabelInstructions As System.Windows.Forms.Label + Friend WithEvents ContextMenuDatagridView As System.Windows.Forms.ContextMenuStrip + Friend WithEvents ZoomToElementsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents RadioButtonCurrentLevel As System.Windows.Forms.RadioButton + Friend WithEvents GroupBoxScope As System.Windows.Forms.GroupBox + Friend WithEvents DataGridViewDoors As System.Windows.Forms.DataGridView + Friend WithEvents LabelInstances As System.Windows.Forms.Label + Friend WithEvents ButtonOK As System.Windows.Forms.Button + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents LabelPhaseName As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.resx b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.resx new file mode 100644 index 00000000..b7c2d42e --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.resx @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.vb new file mode 100644 index 00000000..ee466064 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Form/form_Main.vb @@ -0,0 +1,561 @@ +Imports Autodesk.Revit.UI +Imports Autodesk.Revit.DB +Imports System.Windows.Forms +Imports System.Linq +Imports [Case].DoorMarkRenumber.API +Imports [Case].DoorMarkRenumber.Data + +Public Class form_Main + + ' Safety First + Private Event DataError As DataGridViewDataErrorEventHandler + + ' Private Members + Private _doEvents As Boolean = False + Private _s As clsSettings + Private _allDoors As New List(Of FamilyInstance) + Private _allDoorsHelpers As New SortableBindingList(Of clsDoors) + Private _lstDoorsFilteredClass As New SortableBindingList(Of clsDoors) + Private _dicDoorsNewMark As New SortedDictionary(Of String, clsDoors) + Private _firstLoad As Boolean = False + + Private _phaseOrder As SortedDictionary(Of Integer, Phase) + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(ByVal s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + + End Sub + +#Region "Form Visibility Settings" + + ''' + ''' Toggle Controls Based on State + ''' + ''' + ''' + Private Sub SetFormVisibility(isProcessing As Boolean) + If isProcessing = True Then + ButtonHelp.Hide() + ButtonOK.Hide() + ButtonCancel.Hide() + ProgressBar1.Show() + Else + ButtonHelp.Show() + ButtonOK.Show() + ButtonCancel.Show() + ProgressBar1.Hide() + End If + End Sub + +#End Region + +#Region "Private Members" + + ''' + ''' Calculate the new door mark id's + ''' + ''' + Private Sub RenumberDoors() + + ' Clear the collections and dictionaries + _lstDoorsFilteredClass = New SortableBindingList(Of clsDoors) + _dicDoorsNewMark = New SortedDictionary(Of String, clsDoors) + + Try + + ' Element Processing + For Each d As clsDoors In _allDoorsHelpers + + ' Phase must match selection + If d.Phase.ToLower = LabelPhaseName.Text.ToLower Then + + ' Scope + If RadioButtonCurrentLevel.Checked = True Then + + ' Belong on current view level? + If d.Level.ToUpper <> _s.Doc.ActiveView.GenLevel.Name.ToUpper Then Continue For + + Else + + ' Selected Filter + If _s.ActiveUIdoc.Selection.GetElementIds().Count > 0 Then + + ' Selected elements + Dim addE As Boolean = False + For Each e As ElementId In _s.ActiveUIdoc.Selection.GetElementIds() + If d.DoorInstance.Id.IntegerValue = e.IntegerValue Then + d.AllowEdits = True + End If + Next + If addE = False Then + d.AllowEdits = False + End If + + End If + + End If + + ' Ignore NULL rooms + If String.IsNullOrEmpty(d.toRoom) And String.IsNullOrEmpty(d.fromRoom) Then Continue For + + ' Room Number + Dim rmNumber As String = "" + If String.IsNullOrEmpty(d.toRoom) Then + rmNumber = d.fromRoom + Else + rmNumber = d.toRoom + End If + + ' Rumber to Check? + If Not String.IsNullOrEmpty(rmNumber) Then + + ' Alpha Iteration starting from A + Dim cntAscii As Integer = 65 + Do While _dicDoorsNewMark.ContainsKey(rmNumber & (Chr(cntAscii).ToString)) = True + cntAscii = cntAscii + 1 + Loop + + ' Set the prospective Mark value + rmNumber = rmNumber & (Chr(cntAscii)) + d.MarkSuggestion = rmNumber + + ' Uncheck if suggestion is same as the mark + If d.MarkNow.ToLower = d.MarkSuggestion.ToLower Then d.AllowEdits = False + + ' Add the unique NewMark to the dictionary... + If Not _dicDoorsNewMark.ContainsKey(rmNumber) Then + _dicDoorsNewMark.Add(rmNumber, d) + End If + + Else + + ' Empty + Dim m_todo As String = "" + + End If + + ' Filter by Editable? + 'If d.AllowEdits = False And Me.CheckBoxShowChecked.Checked = True Then Continue For + + ' Post to Datagrid if criteria valid + _lstDoorsFilteredClass.Add(d) + + End If + Next + + Catch + End Try + + ' Cycle through the collection and fix singletons (no A)... fix and then apply to datagrid + Dim lastDoor As clsDoors = Nothing + For Each d As clsDoors In _dicDoorsNewMark.Values + + ' If no B after an A, set to remove A + If lastDoor IsNot Nothing Then + If Strings.Right(d.MarkSuggestion, 1) = "A" And Strings.Right(lastDoor.MarkSuggestion, 1) = "A" Then + lastDoor.MarkSuggestion = Strings.Replace(lastDoor.MarkSuggestion, "A", "", , , CompareMethod.Text) + End If + + End If + + ' Last One + lastDoor = d + + Next + + DisplayDoorItems() + + ' Set the Form to Standby + SetFormVisibility(False) + + Dim m_failCnt As Integer = 0 + + ' Analyze Room Data + For Each x As DataGridViewRow In DataGridViewDoors.Rows + + ' Do we have a value for the Suggested Mark? + If String.IsNullOrEmpty(x.Cells("MarkSuggestion").Value) Then + + ' Count as Failure - Missing Room in Last Phase + m_failCnt += 1 + + End If + + Next + + ' Did we get any failures? + If m_failCnt > 0 Then + + ' Report to User + MsgBox(m_failCnt.ToString & " out of a possible " & DataGridViewDoors.Rows.Count.ToString & " elements have missing room data!" & vbCr & + "This condition is due to the room elements either being placed in an earlier phase or missing alltogether." & vbCr & vbCr & + "'To' and 'From' Room data only exists for rooms placed in the last and newest phase of the model!" & vbCr & vbCr & + "As a result, this tool will only analyze rooms placed in the newset phase of the model.", + MsgBoxStyle.Information + MsgBoxStyle.OkOnly, + "Room Elements") + + End If + + End Sub + + ''' + ''' This function will actually renumber the door marks + ''' + ''' + Private Sub UpdateDoors() + + ' The Stats + Dim m_CntModified As Integer = 0 + Dim m_CntSkipped As Integer = 0 + + ' New Transaction + Using t As New Transaction(_s.Doc, "Case Renumber Door Marks") + If t.Start() = TransactionStatus.Started Then + + Try + + ' Write all updates to objects + For Each itemFix As clsDoors In _lstDoorsFilteredClass + ' Only edit items checked as "Allow" and avoid blank NewMarks + If itemFix.AllowEdits = True Then + + ' NULL Suggestion? + If itemFix.MarkSuggestion = "" Then + m_CntSkipped += 1 + Continue For + End If + + ' This is new, test it first + itemFix.SetDoorMark() + m_CntModified += 1 + + End If + Next + + ' Commit + t.Commit() + + Catch + End Try + + End If + End Using + + Dim m_StatusString As String = m_CntModified & " Doors were succesfully renumbered!" + If m_CntSkipped > 0 Then + m_StatusString = m_StatusString & vbCr & m_CntSkipped & " Doors were skipped possibly due to the lack of a room on either side of the swing." + End If + + ' Report what we did... + Using td As TaskDialog = New Autodesk.Revit.UI.TaskDialog("Door Renumbering Statistics") + With td + .MainInstruction = "Door Mark Renumbering Statistics" + .MainContent = m_StatusString + .Show() + End With + End Using + + ' Close + Close() + + End Sub + + ''' + ''' Displays the filtered doors in the data grid view + ''' + ''' + Private Sub DisplayDoorItems() + + ' Anything + If _allDoorsHelpers.Count = 0 Then Return + + ' Clear Main List + _lstDoorsFilteredClass = New SortableBindingList(Of clsDoors) + + ' Filter Kind + If Me.RadioButtonCurrentLevel.Checked = True Then + + ' Level + For Each d As clsDoors In _allDoorsHelpers + If d.MarkNow = d.MarkSuggestion Then d.AllowEdits = False + If Me.CheckBoxShowChecked.Checked = True Then + If d.AllowEdits = True And _ + d.Phase = Me.LabelPhaseName.Text And _ + d.Level = _s.Doc.ActiveView.GenLevel.Name Then _lstDoorsFilteredClass.Add(d) + Else + If d.Phase = Me.LabelPhaseName.Text And _ + d.Level = _s.Doc.ActiveView.GenLevel.Name Then _lstDoorsFilteredClass.Add(d) + End If + Next + + Else + + ' Selection + For Each d As clsDoors In _allDoorsHelpers + If d.MarkNow = d.MarkSuggestion Then d.AllowEdits = False + + ' All non selected doors will remain unchecked + If _s.ActiveUIdoc.Selection.GetElementIds().Count > 0 Then + If d.Phase = Me.LabelPhaseName.Text Then + If Me.CheckBoxShowChecked.Checked = True Then + ' Only allow edits for the selected elements + Dim addE As Boolean = False + For Each myDr As ElementId In _s.ActiveUIdoc.Selection.GetElementIds() + If d.DoorInstance.Id.ToString.ToUpper = myDr.ToString.ToUpper And d.AllowEdits = True Then + addE = True + End If + Next + If addE = False Then + d.AllowEdits = False + Else + _lstDoorsFilteredClass.Add(d) + End If + Else + ' Only allow edits for the selected elements + Dim addE As Boolean = False + For Each myDr As ElementId In _s.ActiveUIdoc.Selection.GetElementIds() + If d.DoorInstance.Id.ToString.ToUpper = myDr.ToString.ToUpper Then + addE = True + End If + Next + If addE = False Then + d.AllowEdits = False + Else + _lstDoorsFilteredClass.Add(d) + End If + End If + End If + End If + Next + + End If + + Try + + If _lstDoorsFilteredClass.Count = 0 Then + MsgBox("No more Mark values need changing...", + MsgBoxStyle.Information, + "All Markse are OK") + Close() + + Else + + ' Quantity + LabelInstances.Text = _lstDoorsFilteredClass.Count.ToString & " Doors in Scope" + + ' Populate Datagridview with the doors list + 'Me.DataGridViewDoors.DataSource = Nothing + DataGridViewDoors.DataSource = _lstDoorsFilteredClass + + End If + + Catch + End Try + + End Sub + + ''' + ''' Zoom to all selected doors in Data Grid View ; Event run + ''' + ''' + ''' + ''' + Private Sub ZoomToElementsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZoomToElementsToolStripMenuItem.Click + + ' Get the elementID's from the selected rows as an element selection + Dim eSet As New ElementSet + Dim selectedRowCount As Int32 = DataGridViewDoors.Rows.GetRowCount(DataGridViewElementStates.Selected) + If selectedRowCount = 0 Then + Exit Sub + Else + For i As Integer = 0 To selectedRowCount - 1 + If DataGridViewDoors.SelectedRows(i).Visible Then + Dim myE As Element = _s.Doc.GetElement(DataGridViewDoors.SelectedRows(i).Cells(9).Value) + eSet.Insert(myE) + End If + Next + End If + + Try + + ' Zoom to the selected objects + _s.ActiveUIdoc.ShowElements(eSet) + + Catch + End Try + + End Sub + + Private Sub ToggleViewCategory(catId As ElementId, isVisible As Boolean) + If _s.Doc.IsModifiable = False Then + Dim m_todo As String = "" + End If + End Sub + +#End Region + +#Region "Form Controls & Events" + + ''' + ''' Starts the primary scan after form loads + ''' + ''' + ''' + ''' + Private Sub form_Doors_Shown(sender As Object, e As EventArgs) Handles Me.Shown + + ' Processing Visibility + SetFormVisibility(True) + + Try + + ' Form Setup + Text = "Door Mark Renumber by Room Number " & _s.AppVersion + + ' Get Current View Phase + Dim m_currentPhaseId As ElementId = _s.Doc.ActiveView.Parameter(BuiltInParameter.VIEW_PHASE).AsElementId + + ' List all Phases in Model + _phaseOrder = New SortedDictionary(Of Integer, Phase) + For Each x As Phase In _s.Doc.Phases + _phaseOrder.Add(x.Id.IntegerValue, x) + + ' Set the Phase Name + If x.Id.IntegerValue = m_currentPhaseId.IntegerValue Then + LabelPhaseName.Text = x.Name + End If + + Next + + ' LINQ Door Instances from current view + Dim m_fiList = From ele In New FilteredElementCollector(_s.Doc, _s.Doc.ActiveView.Id) _ + .OfCategory(BuiltInCategory.OST_Doors) _ + .OfClass(GetType(FamilyInstance)) + Let fi = TryCast(ele, FamilyInstance) + Where fi.CreatedPhaseId.IntegerValue = m_currentPhaseId.IntegerValue + Select fi + + ' Keep Doors Generated in Current Phase of View Only + If Not m_fiList Is Nothing Then _allDoors = m_fiList.ToList() + + ' Progress Setup + With ProgressBar1 + .Minimum = 0 + .Maximum = _allDoors.Count + .Value = 0 + End With + + ' Enable current selection only if there is one + If Not _s.ActiveUIdoc.Selection.GetElementIds.Count < 1 Then + RadioButtonSelected.Enabled = True + RadioButtonSelected.Checked = True + End If + + ' Collection of Door Objects + For Each d As FamilyInstance In _allDoors + + Try + ' Step the Progress + ProgressBar1.Increment(1) + Catch + End Try + + Try + + ' Door Helper + Dim m_clsDoor As New clsDoors(d, _phaseOrder) + + ' Buildup the Dictionary + Dim m_roomNumber As String = "" + If m_clsDoor.toRoom = "" Then + m_roomNumber = m_clsDoor.fromRoom + Else + m_roomNumber = m_clsDoor.toRoom + End If + + ' Add the object to the dictionary + _allDoorsHelpers.Add(m_clsDoor) + + Catch + End Try + + Next + + _firstLoad = True + + ' Logically update numerals for New Mark Value + RenumberDoors() + + Catch + End Try + + _doEvents = True + + End Sub + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-door-mark-updater") + End Sub + + ''' + ''' Renumber Doors + ''' + ''' + ''' + ''' + Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click + + Try + RecordUsage() + Catch + End Try + + ' Changes + UpdateDoors() + + ' Close + Close() + + End Sub + + Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCancel.Click + Close() + End Sub + + Private Sub CheckBoxShowChecked_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxShowChecked.CheckedChanged + DisplayDoorItems() + End Sub + + Private Sub RadioButtonCurrentLevel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonCurrentLevel.CheckedChanged + If _firstLoad = True Then DisplayDoorItems() + End Sub + + Private Sub RadioButtonSelected_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButtonSelected.CheckedChanged + If _firstLoad = True Then DisplayDoorItems() + End Sub + + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Process.Start("http://www.case-inc.com") + End Sub + + Private Sub DataGridViewDoors_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridViewDoors.DataError + ' Leave empty... to prevent lockups + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/AssemblyInfo.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..771ab0d4 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/DataSources/System.Data.DataTable.datasource b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/DataSources/System.Data.DataTable.datasource new file mode 100644 index 00000000..a23fb0d1 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/DataSources/System.Data.DataTable.datasource @@ -0,0 +1,10 @@ + + + + System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.Designer.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e512fd0b --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.DoorMarkRenumber.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.resx b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.Designer.vb b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.Designer.vb new file mode 100644 index 00000000..1505608e --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.Designer.vb @@ -0,0 +1,82 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property fmsandboxConnectionString() As String + Get + Return CType(Me("fmsandboxConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].DoorMarkRenumber.My.MySettings + Get + Return Global.[Case].DoorMarkRenumber.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.settings b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.settings new file mode 100644 index 00000000..fc4b88b1 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString /> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + + + + \ No newline at end of file diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Resources/Case_Clearly.png b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/Resources/Case_Clearly.png differ diff --git a/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/app.config b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/app.config new file mode 100644 index 00000000..f0025c19 --- /dev/null +++ b/2017/Case.DoorMarkRenumber/Case.DoorMarkRenumber/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.Export.Families/Case.Export.Families/API/clsUsage.vb b/2017/Case.Export.Families/Case.Export.Families/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Application.vb b/2017/Case.Export.Families/Case.Export.Families/Application.vb new file mode 100644 index 00000000..86b3aaec --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Application.vb @@ -0,0 +1,32 @@ +Imports Autodesk.Revit.ApplicationServices +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports Autodesk.Revit.UI.Selection + + _ +Class Application + Implements IExternalApplication + ''' + ''' Implement the external application + ''' + ''' An object that is passed to the external application which contains the controlled application. + ''' Return the status of the external application. A result of Succeeded means that the external application successfully started. Cancelled can be used to signify that the user cancelled the external operation at some point. If false is returned then Revit should inform the user that the external application failed to load and the release the internal reference. + Public Function OnStartup(ByVal application As UIControlledApplication) As Result Implements IExternalApplication.OnStartup + ' Add your code here + + + ' Return Success + Return Result.Succeeded + End Function + + ''' + ''' Implement the external application + ''' + ''' An object that is passed to the external application which contains the controlled application. + ''' Return the status of the external application. A result of Succeeded means that the external application successfully shutdown. Cancelled can be used to signify that the user cancelled the external operation at some point. If false is returned then the Revit user should be warned of the failure of the external application to shut down correctly. + Public Function OnShutdown(ByVal application As UIControlledApplication) As Result Implements IExternalApplication.OnShutdown + ' Return Success + Return Result.Succeeded + End Function +End Class \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.addin b/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.addin new file mode 100644 index 00000000..b7570bfa --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.addin @@ -0,0 +1,11 @@ + + + + Command Case.Export.Families + Case.Export.Families.dll + 92ea0b1a-e1bd-4645-9473-f3baf14abf27 + Case.Export.Families.Entry.CmdMain + CASE + http://www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.vbproj b/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.vbproj new file mode 100644 index 00000000..780a5a9a --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Case.Export.Families.vbproj @@ -0,0 +1,122 @@ + + + + Debug + AnyCPU + + + + + {8BC5E3B5-9D5C-4373-A8D9-019C2D9F8D78} + Library + Case.Export.Families + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + Case.Export.Families + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + form_Familes.vb + + + Form + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + form_Familes.vb + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Data/clsSettings.vb b/2017/Case.Export.Families/Case.Export.Families/Data/clsSettings.vb new file mode 100644 index 00000000..b4a82254 --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Data/clsSettings.vb @@ -0,0 +1,129 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + ''' + ''' A class to hold general settings in memory + ''' + ''' + Public Class clsSettings + + Private _cmd As ExternalCommandData + + ''' + ''' Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Path to Active Doc + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return Doc.PathName + End If + Else + Return Doc.PathName + End If + Catch + End Try + Return "{error}" + End Get + End Property + + Public ReadOnly Property AppVersion As String + Get + Return "v" & My.Application.Info.Version.ToString + End Get + End Property + Public Property Categories As SortedDictionary(Of String, Category) + Public Property SymbolElements As List(Of FamilySymbol) + + ''' + ''' General Class Constructor + ''' + ''' + ''' + Public Sub New(ByVal c As ExternalCommandData) + + ' Widen Scope + _cmd = c + + ' Fresh List + SymbolElements = New List(Of FamilySymbol) + + ' Scan + ScanData() + + End Sub + + ''' + ''' Get a Sorted List of Categories in Use + ''' + ''' + Private Sub ScanData() + + ' Category Data + Categories = New SortedDictionary(Of String, Category) + + ' Filter for FamilySymbol + Using col As New FilteredElementCollector(Doc) + col.OfClass(GetType(FamilySymbol)) + + ' Process Each Element + For Each e In col.ToElements + + Try + Dim m_fs As FamilySymbol = TryCast(e, FamilySymbol) + If m_fs Is Nothing Then Continue For + + ' Add the Symbol + SymbolElements.Add(m_fs) + + ' Category Present + If Not e.Category Is Nothing Then + + ' Avoid Tags and Weird Categories + If e.Category.Name.StartsWith("<") Then Continue For + + ' Category Name + If Not Categories.ContainsKey(e.Category.Name) Then + + ' Add to the List + Categories.Add(e.Category.Name, e.Category) + + End If + + End If + + Catch + End Try + + Next + + End Using + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Entry/CmdMain.vb b/2017/Case.Export.Families/Case.Export.Families/Entry/CmdMain.vb new file mode 100644 index 00000000..4ba31ebf --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Entry/CmdMain.vb @@ -0,0 +1,61 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].Export.Families.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand + + ''' + ''' Main entry point for every external command + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display + Using d As New form_Families(New clsSettings(commandData)) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.Designer.vb b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.Designer.vb new file mode 100644 index 00000000..8a67593e --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.Designer.vb @@ -0,0 +1,224 @@ + _ +Partial Class form_Families + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Families)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.CheckedListBoxCategories = New System.Windows.Forms.CheckedListBox() + Me.ButtonSelectNone = New System.Windows.Forms.Button() + Me.ButtonSelectAll = New System.Windows.Forms.Button() + Me.LabelFileName = New System.Windows.Forms.Label() + Me.ButtonBrowse = New System.Windows.Forms.Button() + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() + Me.LabelExportPath = New System.Windows.Forms.Label() + Me.LabelExport = New System.Windows.Forms.Label() + Me.ButtonExport = New System.Windows.Forms.Button() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ButtonHelp = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.CheckedListBoxCategories) + Me.GroupBox1.Controls.Add(Me.ButtonSelectNone) + Me.GroupBox1.Controls.Add(Me.ButtonSelectAll) + Me.GroupBox1.Controls.Add(Me.LabelFileName) + Me.GroupBox1.Location = New System.Drawing.Point(7, 82) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(423, 352) + Me.GroupBox1.TabIndex = 40 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Categories to Export" + ' + 'CheckedListBoxCategories + ' + Me.CheckedListBoxCategories.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CheckedListBoxCategories.FormattingEnabled = True + Me.CheckedListBoxCategories.Location = New System.Drawing.Point(6, 19) + Me.CheckedListBoxCategories.Name = "CheckedListBoxCategories" + Me.CheckedListBoxCategories.Size = New System.Drawing.Size(306, 319) + Me.CheckedListBoxCategories.TabIndex = 32 + ' + 'ButtonSelectNone + ' + Me.ButtonSelectNone.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.ButtonSelectNone.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonSelectNone.Location = New System.Drawing.Point(318, 65) + Me.ButtonSelectNone.Name = "ButtonSelectNone" + Me.ButtonSelectNone.Size = New System.Drawing.Size(97, 40) + Me.ButtonSelectNone.TabIndex = 39 + Me.ButtonSelectNone.Text = "Check None" + Me.ButtonSelectNone.UseVisualStyleBackColor = True + ' + 'ButtonSelectAll + ' + Me.ButtonSelectAll.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.ButtonSelectAll.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonSelectAll.Location = New System.Drawing.Point(318, 19) + Me.ButtonSelectAll.Name = "ButtonSelectAll" + Me.ButtonSelectAll.Size = New System.Drawing.Size(97, 40) + Me.ButtonSelectAll.TabIndex = 38 + Me.ButtonSelectAll.Text = "Check All" + Me.ButtonSelectAll.UseVisualStyleBackColor = True + ' + 'LabelFileName + ' + Me.LabelFileName.Location = New System.Drawing.Point(6, 267) + Me.LabelFileName.Name = "LabelFileName" + Me.LabelFileName.Size = New System.Drawing.Size(406, 17) + Me.LabelFileName.TabIndex = 25 + Me.LabelFileName.Text = "FILENAME" + ' + 'ButtonBrowse + ' + Me.ButtonBrowse.Location = New System.Drawing.Point(7, 4) + Me.ButtonBrowse.Name = "ButtonBrowse" + Me.ButtonBrowse.Size = New System.Drawing.Size(25, 23) + Me.ButtonBrowse.TabIndex = 37 + Me.ButtonBrowse.Text = "..." + Me.ButtonBrowse.UseVisualStyleBackColor = True + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.ButtonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonCancel.Location = New System.Drawing.Point(325, 440) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(97, 40) + Me.ButtonCancel.TabIndex = 35 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'LabelExportPath + ' + Me.LabelExportPath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.LabelExportPath.ForeColor = System.Drawing.Color.Blue + Me.LabelExportPath.Location = New System.Drawing.Point(7, 36) + Me.LabelExportPath.Name = "LabelExportPath" + Me.LabelExportPath.Size = New System.Drawing.Size(404, 43) + Me.LabelExportPath.TabIndex = 34 + Me.LabelExportPath.Text = "EXPORTPATH" + Me.LabelExportPath.TextAlign = System.Drawing.ContentAlignment.BottomRight + ' + 'LabelExport + ' + Me.LabelExport.AutoSize = True + Me.LabelExport.Location = New System.Drawing.Point(38, 9) + Me.LabelExport.Name = "LabelExport" + Me.LabelExport.Size = New System.Drawing.Size(172, 13) + Me.LabelExport.TabIndex = 33 + Me.LabelExport.Text = "Your RFA Files Will be Exported to:" + ' + 'ButtonExport + ' + Me.ButtonExport.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonExport.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonExport.Location = New System.Drawing.Point(232, 440) + Me.ButtonExport.Name = "ButtonExport" + Me.ButtonExport.Size = New System.Drawing.Size(87, 40) + Me.ButtonExport.TabIndex = 32 + Me.ButtonExport.Text = "Export" + Me.ButtonExport.UseVisualStyleBackColor = True + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(176, 440) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(246, 40) + Me.ProgressBar1.TabIndex = 36 + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = Global.[Case].Export.Families.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(13, 440) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(157, 40) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 40 + Me.PictureBox1.TabStop = False + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ButtonHelp.Location = New System.Drawing.Point(176, 440) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(50, 40) + Me.ButtonHelp.TabIndex = 42 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_Families + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(434, 492) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.ButtonBrowse) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.LabelExportPath) + Me.Controls.Add(Me.LabelExport) + Me.Controls.Add(Me.ButtonExport) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(450, 530) + Me.Name = "form_Families" + Me.Text = "Export Family RFA Files" + Me.GroupBox1.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents CheckedListBoxCategories As System.Windows.Forms.CheckedListBox + Friend WithEvents LabelFileName As System.Windows.Forms.Label + Friend WithEvents ButtonSelectAll As System.Windows.Forms.Button + Friend WithEvents ButtonSelectNone As System.Windows.Forms.Button + Friend WithEvents ButtonBrowse As System.Windows.Forms.Button + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents FolderBrowserDialog1 As System.Windows.Forms.FolderBrowserDialog + Friend WithEvents LabelExportPath As System.Windows.Forms.Label + Friend WithEvents LabelExport As System.Windows.Forms.Label + Friend WithEvents ButtonExport As System.Windows.Forms.Button + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.resx b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.resx new file mode 100644 index 00000000..b98b62cb --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.resx @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.vb b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.vb new file mode 100644 index 00000000..c640d021 --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/Forms/form_Familes.vb @@ -0,0 +1,366 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports System.Windows.Forms +Imports System.IO +Imports System.Diagnostics +Imports [Case].Export.Families.API +Imports [Case].Export.Families.Data + +Public Class form_Families + + Private _s As clsSettings + + ''' + ''' Form class constructor + ''' + ''' The Settings object + ''' + Public Sub New(s As clsSettings) + InitializeComponent() + + ' Widen Scope + _s = s + + End Sub + + ''' + ''' Make sure the path does not contain any invalid file naming characters + ''' + ''' The Filename to check + ''' A string + ''' + Private Function CheckValidFileName(ByVal fileName As String) As String + + ' Check Characters + For Each c In Path.GetInvalidFileNameChars() + If fileName.Contains(c) Then + Return "" + End If + Next + + ' Result + Return fileName + + End Function + + ''' + ''' This routine performs the exports + ''' + ''' + Private Sub doExport() + + ' Only export families that belong to our selected categories! + Dim m_SelectedCategories = CheckedListBoxCategories.CheckedItems + Dim m_CatHash As New Hashtable + If m_SelectedCategories.Count = 0 Then + MsgBox("You did not select any categories..." & vbCr & "Nothing to do...", _ + MsgBoxStyle.Information, "No Categories Selected! You're Boring :(") + Exit Sub + End If + + ' A hashtable comes in handy when verifying multiple situations... or 1 + For Each x In m_SelectedCategories + m_CatHash.Add(x.ToString, "Category") + Next + + Try ' If the parent export directory is missing, create it + Directory.CreateDirectory(Replace(LabelExportPath.Text, "/", "\", , , CompareMethod.Text)) + Catch ex As Exception + ' Message to show any errors + MsgBox(Err.Description, MsgBoxStyle.Information, Err.Source) + Exit Sub + End Try + + ' Start the progressbar + Dim m_iCnt As Integer = 0 + With ProgressBar1 + .Minimum = 0 + .Maximum = _s.SymbolElements.Count + .Value = m_iCnt + End With + + ' Dictionary of Exported Family Names + Dim m_ExportedFams As New Dictionary(Of String, String) + + ' Failures + Dim m_failedfams As New Dictionary(Of String, String) + Dim m_fl As New List(Of String) + + ' Iterate and Export Selections + For Each m_FamSymb As FamilySymbol In _s.SymbolElements + m_iCnt += 1 + + ' The Family Object + Dim m_FamInst As Family = m_FamSymb.Family + Dim m_FamName As String = m_FamInst.Name + + ' Get the category and build subdirectory + If Not (m_FamSymb.Category Is Nothing) Then + + ' Is it a selected category? + If m_CatHash.Contains(m_FamSymb.Category.Name) Then + + ' Target Directroy Path + Dim m_ExportPath As String = Replace(LabelExportPath.Text & "\" & m_FamSymb.Category.Name & "\", "/", "\", , , CompareMethod.Text) + m_ExportPath = Replace(m_ExportPath, "\\", "\", , , CompareMethod.Text) + + ' Does it Exist? + If Not Directory.Exists(m_ExportPath) Then + Try ' Create the subdirectory + Directory.CreateDirectory(m_ExportPath) + Catch ex As Exception + ' User Permissions + End Try + End If + + Dim m_finalPath As String = m_ExportPath & m_FamName & ".rfa" + + ' Did we already export this family? + If m_ExportedFams.ContainsKey(m_finalPath.ToLower) Then + GoTo StepProgress + Else + m_ExportedFams.Add(m_finalPath.ToLower, m_finalPath.ToLower) + End If + + ' Is the Family Path and Name Valid + If CheckValidFileName(m_FamName) <> "" Then + + ' Update the File Action Text + LabelFileName.Text = "...\" & m_FamSymb.Category.Name & "\" & m_FamInst.Name & ".rfa" + + ' Family Save Options to Overwrite + Dim m_opt As New SaveAsOptions + m_opt.OverwriteExistingFile = True + + '' ''If m_FamSymb.Category.Name.ToLower = "mass" Then + '' '' Dim m_t As String = "" + '' ''End If + '' ''If m_FamSymb.Category.Name.ToLower = "curtain wall mullions" Then + '' '' Dim m_t As String = "" + '' ''End If + '' ''If m_FamSymb.Category.Name.ToLower = "curtain panels" Then + '' '' Dim m_t As String = "" + '' ''End If + + Try + + ' Get the Family Document + Dim famDoc As Document = _s.Doc.EditFamily(m_FamInst) + + ' Save the Family Out + famDoc.SaveAs(m_finalPath, m_opt) + + ' Always Close Without Saving + famDoc.Close(False) + + Catch ex As Exception + + If Not m_failedfams.ContainsKey(m_FamName) Then + m_failedfams.Add(m_FamName, "<" & m_FamSymb.Category.Name & "> Failed Because: " & ex.Message) + m_fl.Add(m_FamName & " <" & m_FamSymb.Category.Name & "> Failed Because: " & ex.Message & vbCr) + End If + + End Try + End If + End If + End If +StepProgress: + Try + ' Step the progress bar + ProgressBar1.Value = m_iCnt + Application.DoEvents() + Catch ex As Exception + ' Quiet Fail + End Try + Next + + ' Report Mishaps + If m_fl.Count < 1 Then Exit Sub + + Dim m_td As New TaskDialog("Families That Couldn't Export") + Dim m_Message As String = "" + For Each x As String In m_fl + m_Message += x + Next + m_td.MainInstruction = "In Place Masses or Related Components Cannot Export to RFA:" + m_td.MainContent = m_Message + m_td.ExpandedContent = "We're Sorry :(" + m_td.Show() + + End Sub + +#Region "Form Visibility" + + Public Enum FormVis + StandBy + Processing + End Enum + + ''' + ''' Set the Form Control Visibilities + ''' + ''' + ''' + Private Sub SetFormVis(p_vis As FormVis) + Select Case p_vis + Case FormVis.Processing + ButtonCancel.Hide() + ButtonExport.Hide() + ButtonSelectAll.Hide() + ButtonSelectNone.Hide() + ProgressBar1.Show() + Case FormVis.StandBy + ButtonCancel.Show() + ButtonExport.Show() + ButtonSelectAll.Show() + ButtonSelectNone.Show() + ProgressBar1.Hide() + End Select + End Sub + +#End Region + +#Region "Form Controls & Events" + + ''' + ''' Setup + ''' + ''' + ''' + ''' + Private Sub form_Families_Shown(sender As Object, e As EventArgs) Handles Me.Shown + + ' Form configurations + Text = "Batch Export Family RFA's " & _s.AppVersion + + SetFormVis(FormVis.StandBy) + Try + LabelExportPath.Text = Path.GetDirectoryName(_s.DocName) & "\Exported Families\" + Catch + End Try + + ' Setup the list + CheckedListBoxCategories.Items.Clear() + CheckedListBoxCategories.CheckOnClick = True + LabelFileName.Text = "" + + ' Categories + For Each x As Category In _s.Categories.Values + + ' Add the category + CheckedListBoxCategories.Items.Add(x.Name) + + Next + + End Sub + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Process.Start("http://apps.case-inc.com/content/free-export-families-rfa-files-category") + End Sub + + ''' + ''' Case Site + ''' + ''' + ''' + ''' + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Process.Start("http://www.case-inc.com") + End Sub + + ''' + ''' Export the families and then quietly close + ''' + ''' + ''' + ''' + Private Sub ButtonExport_Click(ByVal sender As System.Object, + ByVal e As System.EventArgs) Handles ButtonExport.Click + + Try + ' Log usage + RecordUsage() + Catch + End Try + + ' Start Processing + SetFormVis(FormVis.Processing) + + ' Export + doExport() + + ' Close Form + Close() + + End Sub + + ''' + ''' Cancel and do nothing + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(ByVal sender As System.Object, + ByVal e As System.EventArgs) Handles ButtonCancel.Click + Close() + End Sub + + ''' + ''' Brose to an export directory + ''' + ''' + ''' + ''' + Private Sub ButtonBrowse_Click(ByVal sender As System.Object, + ByVal e As EventArgs) Handles ButtonBrowse.Click + ' Browse to select the parent export path + ButtonExport.Enabled = False + If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then + If Not String.IsNullOrEmpty(FolderBrowserDialog1.SelectedPath.ToString) Then + LabelExportPath.Text = FolderBrowserDialog1.SelectedPath.ToString + End If + Try + ' Enable the Export Button + If Directory.Exists(LabelExportPath.Text) = True Then + ButtonExport.Enabled = True + End If + Catch + End Try + End If + End Sub + + ''' + ''' Uncheck all items in the listbox + ''' + ''' + ''' + ''' + Private Sub ButtonSelectNone_Click(ByVal sender As System.Object, + ByVal e As System.EventArgs) Handles ButtonSelectNone.Click + For i As Integer = 0 To CheckedListBoxCategories.Items.Count - 1 + CheckedListBoxCategories.SetItemChecked(i, False) + Next + End Sub + + ''' + ''' Check all items in listbox + ''' + ''' + ''' + ''' + Private Sub ButtonSelectAll_Click(ByVal sender As System.Object, + ByVal e As System.EventArgs) Handles ButtonSelectAll.Click + For i As Integer = 0 To CheckedListBoxCategories.Items.Count - 1 + CheckedListBoxCategories.SetItemChecked(i, True) + Next + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/AssemblyInfo.vb b/2017/Case.Export.Families/Case.Export.Families/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..fb55cb3a --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/DataSources/System.Data.DataTable.datasource b/2017/Case.Export.Families/Case.Export.Families/My Project/DataSources/System.Data.DataTable.datasource new file mode 100644 index 00000000..a23fb0d1 --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/DataSources/System.Data.DataTable.datasource @@ -0,0 +1,10 @@ + + + + System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.Designer.vb b/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.Designer.vb new file mode 100644 index 00000000..2113847d --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.Designer.vb @@ -0,0 +1,83 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.Export.Families.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly_90() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly_90", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.resx b/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.resx new file mode 100644 index 00000000..71737b20 --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Case_Clearly_90.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.Designer.vb b/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.Designer.vb new file mode 100644 index 00000000..8606f19c --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].Export.Families.My.MySettings + Get + Return Global.[Case].Export.Families.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.settings b/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.settings new file mode 100644 index 00000000..f7f176ac --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly.png b/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly.png differ diff --git a/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly_90.png b/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly_90.png new file mode 100644 index 00000000..19dc1438 Binary files /dev/null and b/2017/Case.Export.Families/Case.Export.Families/Resources/Case_Clearly_90.png differ diff --git a/2017/Case.Export.Families/Case.Export.Families/app.config b/2017/Case.Export.Families/Case.Export.Families/app.config new file mode 100644 index 00000000..f0025c19 --- /dev/null +++ b/2017/Case.Export.Families/Case.Export.Families/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.addin b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.addin new file mode 100644 index 00000000..0102c0ac --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.addin @@ -0,0 +1,11 @@ + + + + Command - Export Shared Parameters + Case.ExportSharedParameters.dll + f33FFE72-25F2-4842-94C7-f984a4DDAC4E + Case.ExportSharedParameters.Entry.cmd + CSDR + CASE Design Inc., www.case-inc.com + + \ No newline at end of file diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.csproj b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.csproj new file mode 100644 index 00000000..30c7a546 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Case.ExportSharedParameters.csproj @@ -0,0 +1,80 @@ + + + + + Debug + AnyCPU + {A9309DBB-BEEE-48C1-9EA4-3504647248E0} + Library + Properties + Case.ExportSharedParameters + Case.ExportSharedParameters + v4.5.2 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + + + + + + + + + + Form + + + form_Main.cs + + + + + form_Main.cs + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + + \ No newline at end of file diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Classes/Entry/cmd.cs b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Classes/Entry/cmd.cs new file mode 100644 index 00000000..c5f6f765 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Classes/Entry/cmd.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Autodesk.Revit.DB; +using Autodesk.Revit.Attributes; +using Autodesk.Revit.UI; +using Case.ExportSharedParameters.UI; + +namespace Case.ExportSharedParameters.Entry +{ + + /// + /// Shared Parameter Export + /// + [Transaction(TransactionMode.Manual)] + public class cmd : IExternalCommand + { + + private Dictionary _sharedParams = new Dictionary(); + + /// + /// Command Entry Point + /// + /// + /// + /// + /// + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + + try + { + + // Document + Document m_doc = commandData.Application.ActiveUIDocument.Document; + + // Session Guid + string m_guid = Guid.NewGuid().ToString(); + + //// New Schedules + //List m_schedules = new List(); + + //// Project Information + //// Wires + //// Roads + //// Rebar Shape + //// Areas + //// Materials + //// Shaft Openings + //// Views + //// Sheets + + //// Start a New Transaction + //using (Transaction t = new Transaction(m_doc)) + //{ + // if (t.Start("Not Saved") == TransactionStatus.Started) + // { + + // try + // { + + // // Find Categories that Support Custom Parameter Bindings + // foreach (Category x in m_doc.Settings.Categories) + // { + // if (x.AllowsBoundParameters) + // { + + // try + // { + // // New Schedule + // ViewSchedule m_vs = ViewSchedule.CreateSchedule(m_doc, x.Id); + // m_vs.Name = x.Name; + // m_schedules.Add(m_vs); + + // if (x.Id.IntegerValue == (int)BuiltInCategory.OST_Rooms) + // { + + // foreach (SchedulableField sf in m_vs.Definition.GetSchedulableFields()) + // { + + + + // m_vs.Definition.AddField(sf); + + // //// Shared Parameters will have a Positive ID + // //if (sf.ParameterId.IntegerValue > 0) + // //{ + // // Element m_elem = m_doc.GetElement(sf.ParameterId); + // //} + + // } + + // } + + // } + // catch { } + + // } + + // } + + // // Commit + // t.Commit(); + + // } + // catch { } + // } + //} + + + + // Show the Progressbar Form + form_Main m_dlg = new form_Main(m_doc.ParameterBindings.Size + 1); + m_dlg.Show(); + + BindingMap m_map = m_doc.ParameterBindings; + + try + { + + // Iterate + DefinitionBindingMapIterator m_iter = m_map.ForwardIterator(); + while (m_iter.MoveNext()) + { + + ElementBinding m_eb = m_iter.Current as ElementBinding; + Definition m_def = m_iter.Key; + + try + { + + ExternalDefinition m_extDev = m_def as ExternalDefinition; + if (m_extDev != null) + { + string m_todo = string.Empty; + } + + } + catch { } + + + //if (m_eb != null) + //{ + // CategorySet m_set = m_eb.Categories; + //} + + } + + } + catch { } + + // Success + return Result.Succeeded; + + } + catch (Exception ex) + { + + // Failure + message = ex.Message; + return Result.Failed; + + } + + } + + } +} \ No newline at end of file diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Properties/AssemblyInfo.cs b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..adfd5f10 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Case.ExportSharedParameters")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Case.ExportSharedParameters")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("97a31c0d-c96c-4a41-b30e-f8d8b056e1bd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.Designer.cs b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.Designer.cs new file mode 100644 index 00000000..e3fa8bc9 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.Designer.cs @@ -0,0 +1,64 @@ +namespace Case.ExportSharedParameters.UI +{ + partial class form_Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_Main)); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Dock = System.Windows.Forms.DockStyle.Fill; + this.progressBar1.Location = new System.Drawing.Point(0, 0); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(434, 47); + this.progressBar1.TabIndex = 0; + // + // form_Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(434, 47); + this.Controls.Add(this.progressBar1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(450, 85); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(450, 85); + this.Name = "form_Main"; + this.Text = "X"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ProgressBar progressBar1; + } +} \ No newline at end of file diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.cs b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.cs new file mode 100644 index 00000000..76d325d3 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.cs @@ -0,0 +1,37 @@ +using System.Windows.Forms; + +namespace Case.ExportSharedParameters.UI +{ + public partial class form_Main : Form + { + + /// + /// Progress Bar + /// + /// + public form_Main(int maxNumber) + { + InitializeComponent(); + + // Setup Progress + this.progressBar1.Maximum = maxNumber; + this.progressBar1.Minimum = 0; + this.progressBar1.Value = 0; + + } + + /// + /// Increment the Progress + /// + public void IncrementProgress() + { + try + { + this.progressBar1.Increment(1); + Application.DoEvents(); + } + catch { } + } + + } +} \ No newline at end of file diff --git a/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.resx b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.resx new file mode 100644 index 00000000..d5099864 --- /dev/null +++ b/2017/Case.ExportSharedParameters/Case.ExportSharedParameters/UI/form_Main.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAABIXAAASFwAAAAAAAAAA + AAD//////////////////////////////////////////////////f////3////////////////////+ + /////P7//fr8//z6+////v7///////////////////////////////////////v8/f////7////+//// + /f///fv//fv5//z6+P/9+/r////9/////////v3///79///////////////////////////////+///+ + /f///v////7//////////////////////////////////////////////////////////////v////7/ + ///+/////v////////////////////////////////////////////////////////////////z9///6 + /f//+/3///3+///+///////////////+/////////Pr6//37/f///v////////7+///8/P3//Pv8//z8 + /f/9/v////79/////////////////////v///v7///7+/////////v3////////////7+vn/9/X0//j2 + 9f/9+vn///38///+/P///v3///7////+//////////////////////////////////////////////// + //////////////7////+/////v////7///////////////////////////////////////////////// + ///////////////+/v///f7///v+///7/v///P7///3+//78/v/8+/z/+vj7//39/f///v///Pz9//r6 + +//8/P3//f7+//3+/v/9/v7//v////v7+//6+vr/+Pj5//j4+f/6+vr//Pz8//7///////////7+//r6 + +v///////v7+//38/P/8/Pv//Pv6//v6+v////7///////////////////////////////////////// + ///////////////////////////////////+/////v////7////+//////////////////////////// + /////////////////////////////////////v////3////9/////f////7////+/////f7//fz9//z7 + /P/9/f7//fz9//r6/P/6+vz//f3+//////////////////////////////////////////////////// + /////////Pz8//r6+v/8/Pz/+/v7//f39//5+fn//v7+/////v/+/v7//v7+//r6+/////////////// + /////////////////////////////////////////////////////////v////7////+/////v////// + //////////////////////////////////////////////////////////7////9/////v///v7///38 + /v/8/P3//Pz9//7//////////f7////////////////////////+////+Pr7//X4+f/z9ff/7/Dx//Dy + 8//y8/T/8fL0//Dx8//z9PX/+Pn7//3////////////////////4+vn/+Pj4//r7/f/5+/3/+fr8//n6 + /P/3+Pv///////////////////////////////////////////////////////////////////////7/ + ///+/////v////7///////////////////////////////////////////////////////////////// + /////v////3///78/v/8+v3/+vr8//z7/P/////////////////8/Pz/7e7v/9/g4P/N0NH/trm7/6Gk + pv+SlZf/iY2Q/3+Chf9+gYX/foCE/3x+gv97foH/g4eK/5qdoP+1ubz/yczR/9zg4P/q7e7/+f3+//// + ////////9vr9//X4+v/3+vz/+/7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/P7//fv+//77/////v//////////////////+Pn8//Hw9P/X19r/tra4/4iK + jf9fYWT/REdJ/zI1N/8gIyX/CAsO/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8PEhb/Jiks/zk7 + P/9gY2f/goWJ/7C0uf/b3uL/8fP0//v//////////f////r+///+/////v////7////+//////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+fj7//f2+f/8+v3//////////////v//7Ozw/7/B + xP+en6P/TU5R/yYoK/8LDhL/AAAA/wAAAv8ECQz/DBIV/wgOEf8BBgn/AwgN/wYMEf8LERb/DxUb/w8U + Gv8JEBT/AwgO/wABBv8AAAH/AAAE/wIIDf8eIyj/UFRa/42TmP/FzNH/6O/z//X6/v/3/P///P////z/ + ///8/////P////3////9/////f////3////9/////v////7///////////////////////////////// + /////////////////////////////////////////////////////////////////////v////3////+ + ///39/r/19bb/5OTl/87PUD/AQEE/wAAAP8CBAf/CQwQ/w8TFv8MEBP/BwsO/wYLDv8LEBT/ERYZ/xEX + HP8MEhf/BQsQ/wIIDf8FCxD/ChAV/wwRF/8LERb/CQ4U/wULEP8ABw3/AAEG/wAAAf8ICxH/Mjg9/3yB + hv/K0NT/+f7+//z////8/////P////z////9/////f////3////9/////f////7////+//////////// + //////////////////////////////////////////////n5+f/4+Pj///////z8/P/x8fH///////// + ///8/P//+/z////////29/j/pqit/zg7P/8LDhL/Cg4T/wEFCf8ECQ3/EBUZ/wYNEf8GDBD/ERcc/wkO + Ev8AAgX/BxAU/wwUGP8HDxT/CREW/wgQFf8HDxT/DRQZ/wwTGP8CCg//AQcM/wcQFP8JERb/ChIX/wQL + EP8ABgr/AAYL/wEBBv8OEBT/NT1C/4OKjv/v9vP/+/////b9/P/0/fr/+v/+//j9/f/4/fz//f////3/ + ///+////+v38//7//////////Pv7//r4+P/9/Pz//////////////////f39//39/f/+/v7//Pz8//z8 + /P/+/v7//Pz8//r6+v/7+/v//Pz8///////g4eP/eHp+/y0vNP8ZHCD/CgsQ/wAABf8OERb/BQoO/xAV + Gf8JDxP/AwoO/w0TGP8LExb/DBIV/xIZHf8EDBD/Bw8T/wwTGP8FDhL/AAUK/wYLEP8OFhv/Dhcc/wsU + Gf8LExf/AQcM/woSF/8KExj/Bw8U/w0UGf8NEhj/AgkN/wIKEP8XHyP/SFBP/6Cpp//3//7///////n+ + /v/3/vz/+//+//b5+f/s8PD/+/79//j6+v/9/v7////////////+/v7///7+//v8/P////////////v7 + +//8/Pz///////v7+//19fX///////7////t7e3/+/r6///////Y2t7/dnp//xkbIP8AAAL/CQ4T/w0R + Fv8ECA3/Cg8V/wUMEP8NExj/ChEW/wUNEv8HDxP/BQ4S/wwVGf8SGx//AAgM/wEIC/8PFRj/ERkd/wsR + Ff8ECg3/AAYJ/wECBf8ABAf/AAgL/wAFB/8IDxH/Bw4R/wEHC/8HDhL/DRUZ/wcPE/8ABQn/AAYI/wgS + Ef8kLy3/eoSC/9Ha2P/7////+/////r////6/f3/9fn5//3////8/f3//v////z8/P/8/Pz///////// + ///9/Pz////////////9/f3//Pz8//7+/v/8/Pz/+Pj4///////8/f3/7e3t///////n6Ov/cnV7/xcY + Gv8NDhP/ExUa/wACCP8GCg//Exge/wMIDf8JEBX/ChEW/wgPFP8MFBn/CBEW/wAHC/8ECxD/DRYb/wYP + FP8MFBb/Bg0Q/wMFCP8BBgn/DBMW/xccH/8SFhr/DxQX/xIaHP8MFBb/DBMV/wcOEf8DCQz/AAYJ/wAE + B/8BBAb/Bg0R/xQcHv8HEhD/AQwK/xEXFf9DTUv/sLm5//3////8////9Pn5//7////6/Pz///////// + ///5+vn/+fn4//37/P///v////////////////////////39/f/9/f3///////z8/P/6+vr//f39//r6 + +v/4+Pf/jZGW/x0hJ/8AAAD/EBMZ/xkdJP8AAgj/BQkO/xUcIf8CCA3/CRAV/wYNEv8HDxT/Dhcc/woU + Gf8CCxD/BAwR/wgTGP8HExf/CAwN/wUKDP8WGRr/Nzs9/2hvcP+Rl5n/mZ+h/5abnf+YnZ7/kZeY/4OJ + i/9sc3T/U1pb/zE4Of8SFhb/AAED/wAFCP8SFhf/CxgV/wYPDf8GDAr/AAMC/zY6Ov+cpKP/6e/u//v/ + ///3+/v/9vn5//z+/v/7/Pz/+/z7//z8+//9/P3//fv8//38/P/////////////////+/v7//f39//// + ///9/f3/9vb2////////////vL27/y0vNP8DCA7/CxAX/wcLEf8ECA7/AggO/wkPFf8KExf/BQ0T/wQM + Ev8FDhP/ChMY/wgSF/8FDhP/CBUa/wsWG/8DCxH/AAUK/wYHB/8/Q0P/h42N/7e7u//d4+P//f////// + ///////////////////9////5+3s/8zQ0P+nraz/eH59/0RLS/8RFRX/AAAA/wYSEP8ABgT/FiIg/wsY + Fv8AAAD/HCUk/4mSkf/i5+f//f////r9/f/7/v7/+vv6//v8/P////////////z6+v/79/f///////// + ///////////////////+/v7//v7+//v7+///////4+Pj/1tbWv8EBAj/BQkP/xEWHP8IDBL/AwYM/wcN + E/8KERf/Bg4T/wYNFP8DDBL/ChMY/wwXHf8DCg//AAYL/wkVG/8LFBn/AAEH/wcKD/9NU1L/r7Wz//v/ + ////////+v/+//r+/v/7////+v////X7+v/y9/j/9/z8//7///////////////P39//Eycn/c3h4/yQq + KP8ACAb/AAUC/w0YFf8IFhP/AwsJ/wAFBP8RGRj/eX9+/+bo6P/4/Pz///////7//v/4+Pj//fz8//// + ///8+vr//Pn5//////////////////7+/v/+/v7/////////////////+vr6/6Ojo/8ZGBj/AAUK/wMJ + Ef8FChD/DRUb/w4VG/8IDxX/Bw4V/wgQF/8DCxL/Bg8V/wkSGP8JFBr/BAsQ/wMMEf8GERf/AAUL/wMJ + D/9DUFb/xszK//f8+f/9////9/v5//D18v/2+Pf///////z//v/5/vv//f////z+/v/7//7/+f36//v9 + /f/+/////v////P29P+xt7T/MkE//wMMCf8ACQb/AQ8M/woXFf8HEhH/AAMC/xQaGf9sc3P/zNDQ//r8 + /P//////9vf3//z7+////////vz8//78/P/////////////////39/f/+Pj4/////////////////9/f + 3/9mZmb/BgYG/wQIDv8NEhr/CQ8V/wYMFP8FDBL/CA8V/woQF/8IEBb/Bw8V/wkSGP8CCxH/AQsR/wgS + GP8PGyH/DRUZ/wAAAv8dKjD/prK3//j9+///////+f37//r+/P/8//7//f////z//v/6/vz//P/+//f8 + +v/x9fP/+v38///////4/Pr/9vv4//v+/f/9/v7/9fv5/8HRz/9EU1H/CBYT/wALCP8HEQ//DBgW/wMJ + CP8FCAb/JSwr/2NmZv/Hy8v//v7+//39/f/9+/v///////79/f/+/Pz//////////////////f39//3+ + /v/9/////f////n+/v+2u73/ChMV/wkREv8NExn/CA0T/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQR + E/8ACQ3/DRkc/wcQEf8ACAv/Exod/woNDv8LCwz/gIKD//n7/P///////f39//////////////////// + ///////////////////+/////v7+//////////////////7///////////////3+/v/z9PT/6erq/3B0 + dP8JCgn/AAQC/wwWFf8FDgz/Aw4M/wYQDv8IDAr/ZG9t//X8/P/0+/r/9vr6///////6+/v//Pr6//// + ///////////////////+////+/39//v+///t8/X/kpia/wAEBv8BCgv/CxIX/wkOFP8IDxX/Bw8V/wYP + Ff8FEBT/BRAU/wQRE/8EERP/Aw0P/wgUFv8DDQ//Bg4Q/w8WF/8EBwj/LTAx/7i5uv////////////7/ + //////////////////////////////////////////////////////////////////////////////// + //////////////f19f/l5+f/g4eG/xEXFf8AAAD/BQ0N/wALCP8BCQf/Aw8M/yYzMf+vt7f/8/n5//r+ + /v/y9fT/+Pn5//7+/v////////////////////////////n7/P/6/f//3ePl/2Rpav8BAwX/AAUH/wgP + FP8KDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/wgUFf8DDhD/AAoL/w4WGP8IDQ7/CwwN/21y + c//v8PL//v/////+/v////////////////////////////////////////////////////////////// + /////////////////////////f39//Pz8//7+vr//////+bq6f+Fi4r/HyQj/wEKCP8KFRP/BhAO/wYQ + D/8ECQf/UFdW/+rx8P//////7fHw//n6+v///////////////////v///v7+///////5+/z//P7//83T + 1f81Oj3/AgkL/wMKDf8IDhT/CQ8V/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8MFxn/Aw0P/wAJ + Cv8QGBr/AQQF/xkaGv+ipqj///////v9/f/+/v7///////////////////////////////////////// + //////////////////////////////////////////////39/f/19fX////////////+////6ezs/46W + lf8gKSf/AAIC/wUNC/8OGhf/CxMR/xsjIv+9xcT/+/7+//n6+f/5+/v/+/v7/////////////fz9//79 + /f//////+vv8//7///+/xcb/DxYY/wcRE/8JExX/CA8U/wkPFf8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQR + E/8EERP/CRUY/wYSFf8DCg3/CRQW/wABA/8rLS7/wsbH///////4+vz//v7+//////////////////// + /////////////////////////////////////////////////////////////////////////v7+//z8 + /P//////+vz8///////r7+//gYmI/x4iIf8ABQT/BQ8M/woTEv8DCgn/eoF//+3w8P//////8/X1//Py + 8v////////////37/P/+/f7///////v8/f/9////sba4/wACA/8LExX/CRMV/wcOE/8JDxb/CA8V/wcP + Ff8GDxX/BRAU/wUQFP8EERP/BBET/wQQE/8KFhn/Bg4Q/wMPD/8CBgj/REhK/9bb3P/9/f3/+/z9//7/ + //////////////////////////////////////////////////////////////////////////////// + //////////////z9/f/6+/v/+fv6//r7+//5/Pz//////+Xp6P+QmJf/NT08/wcMC/8AAgH/CQ8O/11j + Yv/e4eD///////Hz8v/08vL//////////////f7///7///7////9/v7//P///6arrf8AAAD/CxMV/wQO + Dv8GDRL/ChAW/wcPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8DDxH/CRQX/wcQEf8CCgv/CA8Q/2Jn + aP/m6uv/+vv7//////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/4+fn/+fr6//P19f/8/f3/+fz8//f7+///////9Pr5/6+1 + tf9WXVz/MDc2/1VbWv+SmJf/4+fm///////5+/v/+/v7//////////////7////////+//////////v+ + /v+fpKb/AAAA/w0WF/8CDAz/BgwR/woQF/8HDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/BhIU/wQP + Ef8HEBL/AQkK/wsREv90eHn/9fj5//z+/v/9/v7///////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//L08//8/f3///////f6 + +f/5/Pz/9/r6//b6+v/8////19vb/7S4uP/Mz8//5urp//r9/P///////f7+//z+/v////////////// + /////v7//v7+///////6/f3/naOk/wAAAP8RGRv/BQ4P/wYMEf8KEBf/Bw8V/wcPFf8GDxX/BRAU/wUQ + FP8EERP/BBET/wsXGf8CCw3/Bw8Q/wMKC/8MERL/e4CB//z////8/f3/9/n6//7///////////////// + /////////////////////////////////////////////////////////////////////////v7+//r7 + +//9/v7/+fv7//3+/v/8//7/9Pj4//j7+//6/f3/9Pj2//v//v/5/f3//P////7////9/////v////// + ///9/v7//////////////////fz9//z8/f//////9vn5/5adn/8BBwn/Bg4Q/wUOEP8HDhP/ChAW/wgP + Ff8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8CDQ//CBMW/wwWGP8ABAX/Fxob/46Sk///////+/z8//7/ + ///////////////////////////////////////////////////+/v7//Pz8//7+/v////////////7+ + /v/7+/v//f39//7////5/Pz/+/79//3////9/////f7+//3+/v/+/v7///////////////////////7/ + ///+/////f////3////9/////P////////////////////38/P/5+vz//f7///j6+v+Zn6H/AAEC/wQN + D/8IDxL/CQ4T/wkPFv8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/Aw4Q/wcTFf8KFBb/AAME/xcb + HP+QlJX///////v8/f/+//////////////////////////////////////////////////////////39 + /f/6+vr//Pz8//39/f/7+/v/+vr6//z8/P///////f////3////+/////f////7////+/////P39//v6 + +v/7+/v////////////+/////v////3////9/////f////z///////////////7+/f/9+/z/+fr8//v9 + /v/6/v7/oaao/wAAAP8FDhD/CxQV/wkPFP8JDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/wQP + EP8EEBL/BxAS/wACBP8XGxz/kJWW///////8/f3/+vz9//////////////////////////////////// + ///////////////////8/Pz/+Pj4//v7+//+/v7//v7+//7+/v/+/v7//v////r+/f/4/Pz/+fv7//r8 + /P/9/v7///////7//v/+/v7//v3+///////////////////////9/////f////3////8//////////// + ///+/f7//v3+//3+/v/6+/3//v///62ztf8AAAD/BQ0P/w4WGP8JEBX/CQ8V/wgPFf8HDxX/Bg8V/wUQ + FP8FEBT/BBET/wQRE/8GERP/Aw4Q/wUOEP8AAwX/Fxsc/4+Ulf///////Pz8//f5+v/+//////////// + ///////////////////////////////////+/v7//v7+//39/f/+/v7///////////////////////7/ + ///8////+/7+//z9/f/8/f3///////////////////7+///+/v///////////////////////f////3/ + ///9/////P///////////////v3+///+///+////+vv9//////+7wsP/CA0O/wIJC/8MFBb/CRAV/wkP + Ff8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/CBMW/wMOEP8FDxD/AAUH/xQZGv+Lj5D///////z8 + /P/3+Pn//v///////////////////////////////////////////////v7+//////////////////// + ///9/f3//Pz8//38/P/7+/z/+Pr7//r9/P/9/v7//P7+//38/P/8+/v//fv8///8/P///f3///////// + //////////////3////9/////f////v///////////////79/f///v7//v////j6+///////y9HS/yQq + LP8ABAT/Bg4P/wkQFf8JDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/woVF/8DDhD/BxES/wEI + Cf8QFhf/gYWG//v9/f/8/v3/+fr7//////////////////////////////////////////////////39 + /f/////////////////9/f3/+/v7//v7+//8/Pz//Pz8//b5+f/4/Pz//P7+//z+/v/8/Pz/+/r6//36 + +v///P3///7////+/////v/////////////9/////f////z////6///////////////+/f7///7///3/ + ///3+fv//v///9vi5P9NUlP/AQEC/wIKC/8JEBX/CQ8V/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQR + E/8KFRj/AQ4Q/wgSFP8ECgv/CxAR/3J2eP/x9fX//f7+//v9/v////////////////////////////// + ///////////////////7+/v//v7+//7+/v/+/v7//Pz8//7+/v////////////////////////////// + //////////////////////////3+///+/v///v////7//////////////f////3////8////+v////// + //////////3+///9///+/v//+vz+///////q8fP/dXp8/wEDBP8ECw3/ChEX/wkOFP8IDxX/Bw8V/wYP + Ff8FEBT/BRAU/wQRE/8EERP/CBQX/wAMDv8JExX/BgsM/wUICf9kaGr/5+rs//r9/v/8/v////////// + ////////////////////////////////////////+/v7//39/f/9/f3//f39//////////////////v5 + +v/u7u7/6/Hv/+ju7P/q7Oz/7/Hx//v7/P/////////////8/f//+vv///7////+/////v////7///7/ + ///+/////f////r///////////////////////////////3/////////8vf4/5OZm/8DCAn/Bw8Q/wwT + Gf8IDRX/CA8V/wcPFf8GDxX/BRAU/wUQFP8FERP/BBET/wcTFf8BCw3/CRMV/wcLDP8CBAX/Wl9f/97i + 4//5+/z//f////////////////////////////////////////////////////////////////////// + ////////+fr6/+Xl5v/MzMz/ra6u/3V7ev92e3v/hIaG/5yenv/Avr7/5ODh//n5+f/////////////+ + ///+/f7///7////+///+/////v////3////6///////////////+/v7///////39/f/9/Pz//v7+//j4 + +P/AwMH/ISEh/wkICP8KEhj/CBIa/wcPF/8HEBf/Bg4W/wAHDf8CCg//DhUZ/wkQFf8HDA//DBET/xIW + F/8OERL/AAID/0FEQ//Nz87///////j6+f/6/v7/+v////v////8/////f/+//7//v/+//7////9//7/ + /f/5+/r///////n8/f//////3eLm/4SMkf8xOT//CxQc/w4WHv8QGBz/AwYK/w0VF/8PGBv/BgYJ/ysw + Mv+boqT/8PT2//7////7/f3/7O/w//7+/v/6+/v//f39/////////////f39/////////////Pz8//7+ + /v/+/v7//f39///////+/v7/3Nzc/0pKSv8IBwf/AgkQ/wINFv8BChH/BA0U/wkRGf8HDhT/BAwR/wkQ + FP8JDxT/DxQX/w0RFP8MEBL/DxIT/wAAAP8xMzP/xMfG///////+/v7/+v////r////8/////P////3/ + /v/+//7//v/+/////f////3//v7+//v8+v/9////y87Q/15laP8QFxz/BAoR/wEMFP8ABQz/BhAT/wQM + Ef8BCw7/BxAT/woRE/8CBgn/HyMm/4CFh//i5eb///////n9/f///////f7+///////+/f3//v7+//7+ + /v////////////39/f/+/v7///////39/f/8/Pz///////b29v+Ghob/EA4P/wAFC/8DDRX/AQgP/wIL + Ev8LExn/DRQa/wYNE/8ECg7/ChEV/xQaHf8MEBP/BgsN/xAUFv8AAQH/ICEh/6uurf/9//7///////r/ + ///6/////P////z////9//7//v/+//7//v////3////9//////////7/7O/x/2twcv8LDA//AAAF/wAI + Dv8IERj/CRIY/wMMEP8SGx//AwoO/wIHCv8SGh3/CAsO/wAAAP8fIiT/iY6Q/+/y8v/+/////v7+//// + /////////fv7//38/P/////////////////+/v7//f39///////9/f3/+vr6////////////v8DA/y4u + Lf8ABwz/Aw0W/wgPF/8GDxb/CA8W/w0UGv8IDRP/AggN/w4VGv8SFhr/Cg8R/wYKDP8UFxr/CAkL/wwN + Df99gID/9/r5//z+/v/6/v7/+v////v////8/////f/+//7//v/+//7////9//7+/P/6+/r/+vv6/7K1 + tv8mKCr/AAAA/xIZHv8LERf/AggP/w0WHf8EDRD/CBEV/wIKDv8ABgn/CREU/w8VGP8OEhT/AAIE/y4x + Mv++wcL//v////z9/f/+/v7//f39//v6+v/+/f3///////////////////////39/f/+/v7//v7+//39 + /f/+/v7//////+zt7f9ra2r/CA0S/wEFDP8MFRz/ChIZ/wILEf8JEBX/CRAV/wIJDv8RFxz/Cw4S/wwR + E/8JDQ//ERQX/xIUFv8BAQH/SEtM/+3x8f/7/f7/+v7+//r////7/////P////3//v/+//7//v/+//// + /f////3/+/z7/+/w7/94fH3/EBIT/wADB/8NFRr/CxIY/wQLE/8JEhr/ChMW/wACB/8EDRD/EBkd/wYO + Ef8HDA//Exsd/wUICv8FBQf/d3t8//L19v/+/v7//v7+//r6+f/7+/v///////7+/v////////////// + ///8/Pz//Pz8/////////////v7+//z8/P//////tbS0/yImLP8AAAL/CBAV/wgRFv8BCA3/Bw0S/w0T + GP8ECg7/DhQY/wYKDv8PFBj/DBET/wgNDv8TGBr/AAEB/yMlJ//W2tv//P////r////6////+/////z/ + ///9//7//v/+//7//v////3////9///////z9PP/Y2do/wwQEv8CBwv/AgcM/wYOFP8IEhr/BQ4W/woT + F/8BBAf/CBAT/xYhI/8KEhX/AAQH/wYND/8LDxH/AgMF/zk9Pf/X2tv////////////7+vr//f39//// + ///9/f3/////////////////+/v7//z8/P////////////7+/v/6+vr//////+3s7P9iaW7/DBEY/wIH + Df8EDBH/AwoP/wkOEv8PFRr/BAoO/woQFP8GCw//EBUa/w4TFv8DCAn/DhMW/wMGCP8SEhT/oKSl//f7 + +//7////+f////z////8/////f/+//7//v/+//7////9//7+/P/4+vj//////2ZrbP8GCQv/CA0R/w4U + G/8HDRP/BAoS/wMMFP8DDRH/CBMW/wkSFv8HDhL/CRAT/wkQFP8GCw7/CxAS/wMHCf8XGRv/tri6//7+ + /v///////v7+///+/v///////v39//////////////////39/f/9/f3//////////////////f39//7+ + /v//////wsbI/0RLUP8ABQr/AwkO/wgOEv8KEBT/DxUZ/wEHC/8JDxP/BgwP/wwQFP8PFBf/BQoM/wgO + Ef8KDRD/BAYJ/1FWWf/j6Or/+/////n+/v/8/////P////3//v/+//7//v/9/////v/+/vz/7/Dv//v8 + /P9xdXb/CAkL/wsOE/8THCL/BQkO/wIDC/8CCxP/AgsP/xAZHf8IERX/AQQI/wcNEP8SGh3/DxQX/w0S + FP8CBwn/CgwN/5SXmP/4+fn///////7//////v7//v39///+/f////////////7+/v////////////39 + /f/9/f3///////7+/v/7+/v//Pz8//////+IjpH/DhQZ/wIIDP8JDxP/CxEV/wsRFf8ABwv/DBIV/wgO + Ef8FCg7/DhMW/woPEv8IDQ//ERYZ/wEGCf8VGh7/wMXI//r////7////+v7///z////9//7//v/+//7/ + /v////3//v78///////t7e3/j5KT/xseH/8ABQn/Bw8U/wEID/8LExz/DBYd/wcQE/8EDRH/Bg8S/woU + GP8KEhX/Bg4Q/wQJDP8LERP/BQoM/wgJC/95e3z/7O3t//v9/f/+/v7//fz8//n49//8+/r///////// + ///////////////////////////////////////////////////9////7PHy/291eP8DBQj/CQsN/xQZ + HP8AAwb/CA8S/xAWGf8RFxv/Bw4S/wADB/8GCg7/Ehke/wwRFf8AAgb/EBYb/1FXW//y9vb///////P2 + 9//3+/v//f/+/////////////f37//Lz8P///////////7zAwv8mJyj/AAAC/xYdJP8KERj/AAkR/wYO + Fv8ABQn/CBEV/wwVGf8KExb/DRUY/w4VGP8IDhD/BwwP/wQICf8EBQb/X2Jj//f5+f/29/f/+Pj4//// + ///8/Pv//fz7////////////////////////////////////////////////////////////8fX3//z/ + ///X293/UlZZ/wAAAP8OExf/HCAj/wAAA/8QFRj/AwkN/w0SFv8RFhr/BAoO/wMIDf8GDBH/CQ4S/wMJ + Df8TGR7/yM3O/+zw8v/2+Pn//P////f6+f/+/v7/+/v7//Hy7//+/v7////////////m6ur/YGVm/wYH + C/8HCg//CBAW/wIMFf8PGCD/DRYZ/wYPE/8CCg7/AQkM/wUOEP8LEhX/CxIU/xAXGP8JDQ//BQYH/3By + dP/6+vr//Pz9//r6+////////fz8//37+/////////////////////////////////////////////// + //////////////v8/f/t8PH/9fj5/83S0v9ISkv/AAAA/w0PEf8aHiH/BwwP/wMJDf8PFBf/DhQZ/wUM + Ef8HDhP/DxYc/w0UGv8CCg//AgkP/1FVWP/f5ef///////P19f/3+fn///////f5+P/x8u7/9/j2//n7 + +f/7/Pr/8/f4/6GmqP8hIib/AAAE/xAZH/8CCxL/BQ0U/xAaHf8EDRH/AQkM/wQMEP8FDRD/Bw8S/woQ + Ev8NFBb/AgUH/woICf+MjpD/+fr7///////9/f////////79/f/+/Pv///////////////////////// + ////////////////////////////////////////9fj5//n9/P//////tbm6/zg6O/8AAAH/Cw8S/wMH + Cv8LERX/CxAU/wMJDv8CCg7/ChEW/w0UG/8HDhT/AwsR/wUNE/8IDQ//mZ2g//X3+P/19/f/8/b1//// + ///9/fz/+vv4//z8+//7/fz//f39//v+/v/i5ef/Uldb/wAAAf8HCxH/AAgQ/wEJEf8HEBT/Aw0Q/wkS + Fv8NFhn/Bw8S/wUMD/8LEBP/DBIU/wAAAf8SFBX/qaut//f5+f///////fz9//7+/v///v7///39//// + ////////////////////////////////////////////////////////+vz7//3////+////+vz8/+/y + 8/+5vb7/TlJU/wAAAv8AAAD/CA4S/woQFf8IDxX/Bg4T/wYME/8HDhX/Bw8V/wYOFf8DCxL/BgsM/zQ4 + Ov+vs7T/+Pv6//v8+//5+/n/+/v6/////v/9/fv////////////09/j//f///5ifo/8aICX/AAMJ/wcQ + Gf8CDBT/AgsP/wcRFP8OFxv/CxMX/wMKDf8GDQ//DxYY/wwRE/8DBgj/Oj0+/8rNzv/4+fj///////r6 + +f/9/Pz///////////////////////////////////////////////////////////////////////r8 + +//5+vr/+/z8//b5+f/6/f3//////8LGyf9WW17/Fhkb/wIIDP8ECAz/CQ0T/woRF/8IDxb/Bw8W/woT + Gv8KExz/BQwV/w4TFf8CBgj/RkpL/7/Dwv///////v/+//n6+f//////9/j1////////////8PT1//3/ + ///b4OT/W2Jn/wkRF/8PFyD/AQcP/wQNEf8KFBj/CRIW/wIKD/8DCg3/CRAS/wwUFv8DBQb/DBIU/4GE + hf/q7e7/+/z8///////6+fr//Pz8//////////////////////////////////////////////////// + ///////////////////+/v7/+vv7//T29v/5+/v//v////X5+v/y9vj/3eHj/3l/gf8oLjT/BgkO/wAA + A/8EChD/DRQb/wcOFf8ECRD/Bw8Z/w0VHf8LERP/BQkM/wQICf9JTU3/t7m5//T09P/9/v3//Pz6//// + /v/5+vn/////////////////5Ort/211ev8NExn/ChEZ/wEFDf8EDRH/ChQY/wQNEP8BCQ3/CxIW/woR + FP8ECw3/BQYG/zU7Pf/Kzc7//P7///7//////////fz8//3+/f////////79//////////////////// + ////////////////////////////////////////+vv7//39/f/09fX/9Pb2//39/f/09/j/8fT0//v/ + ///n7O3/lZqe/0pQVf8UGiL/AgoQ/wEJEP8AAgn/AQIJ/wMLFf8HERn/DRMV/wcLDv8FCQr/AAAA/y4w + MP+UlJP/ycvJ/9XW0//y8vH/7e/u//Lz8//u7u7/0dXV/4uPlP8uNTv/AAQJ/wMJEf8GDxf/AQsP/wwV + Gf8EDRD/AwwP/w8XGv8DCw3/AQcJ/zU8Pf+ZnZ//9fj5//3////8/f7//v7+//7+/f/+//7///7+//79 + /P/////////////////////////////////////////////////////////////////y9PP/+Pr5//39 + /f/y9vb/+/7+//z+/v/r8PL//P/////////Kz9L/eH6E/zM7Qf8LDxT/AwQL/wkTG/8NFR7/AAML/wMI + Cv8LEBL/EhYX/xUYGv8FCAj/AAAA/zM1M/9zdHL/hISD/76/vv+UlZT/cnV2/zo/Qv8FBwv/AQQK/woS + Gf8FDhb/BxAW/wcPE/8OFhr/AgoN/wAHCv8JEBP/BQsO/x8kJ/+Umpz///////3//v/9////+Pn5//n6 + +v/+/v7///////7+/f/+/fz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v7+//Pz8//gYGB/zw8 + PP8SExP/AgID/wAAAP8GDQ//BQ4Q/wQND/8HEBL/CxMU/woTFP8FDQ7/AQUG/wECA/8CAwX/AQID/wEE + Bf8EDA7/DBYY/w8YGv8LExT/AgwN/wIKC/8REBD/Dg0N/wICAv8AAAD/FRUV/1tbW/+1tbX/8fHx//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9fX1//z8 + /P///////v79//Lx8f/T09P/oKCg/2ZmZf83Nzf/Bg0P/wADBf8AAAD/AAAA/wAAAP8AAwX/AAkL/wEK + DP8EDA7/DRUX/wgREv8DDA7/AgoM/wIKDP8BBwj/AAQF/wAICv8BCAr/AAAA/wYGBv8hISH/T09P/5GR + kf/Y2Nj/+/v7//r6+v/09PT///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////39/f/+/v7///////////////////////T09P/b29v/ubm6/4qRk/9yeXv/WF1e/zg8 + Pv8dISP/CQ4Q/wAEBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wULDf8WHR//Ki8x/1JS + Uv96enr/rq6u/9ra2v/y8vL////////////+/v7//Pz8//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3////////////7+/v/+Pj4//v7+/////////////v7 + /P/r8fH/4ujp/8zT1P+xuLn/m6Kk/4yTlf+CiIr/fYOF/3l+f/9obG7/a29x/3F1d/93e37/eoCC/4CH + if+PlZf/oqmq/7W7vf/T0tL/5ubm//r6+v////////////39/f/5+fn//f39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////Pz8//7+/v///////f39//r6 + +v/7+/v////////////7+/v////////////+////+Pv8//T3+P/x9PX/7/Lz/+7y8//r7/H/4OXn/+Lm + 6P/o7O3/7O/w/+3w8f/v8vP/8vb3//r9/v/////////////////6+vr//Pz8///////9/f3/+/v7//r6 + +v/7+/v///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v///////v7+//39/f/9/f3////////////+/v7/+Pj4//z9/v/9/v////////////////////////// + ///////////////////////////////////////////////////////////////////7+/v/9/f3//z8 + /P///////v7+//z8/P/7+/v/+vr6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////9/f3//f39//39/f/7+/v/+vr6//z8/P/+/v7////////////7/f7//P7///7/ + ///+/////v7///7+/v/+/v7//v7+//7+/v/9/v//+fv8//j6+//7/f3//v////7+///9/f7//f7+//7/ + ///+/v7///////7+/v/7+/v/+/v7//r6+v/5+fn//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+fn5//r6+v/+/v7///////7+/v/7+/v/+/v7//// + ///+/v7///7+///+///////////////9/v/++/z//fv8//37/P/9/P3///7+//////////////////// + /////v///vz9//79/f///////v7+//7+/v/5+fn/9PT0//X19f/7+/v////////////+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39//7+ + /v/////////////////+/v7//Pz8//z7/P/+/P3///7////+/////v////7////+//////////////37 + /P/9/P3///////////////////7///78/v///f///v/+//v7+/////////////////////////////// + ///9/f3/+/v7//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////7////+/////v////7////+//// + /v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/API/clsUsage.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.addin b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.addin new file mode 100644 index 00000000..27898cf0 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.addin @@ -0,0 +1,11 @@ + + + + Command Case.ExtrudeRoomsToMass + Case.ExtrudeRoomsToMass.dll + 1ea393bb-ddba-449e-bc43-fd4120330241 + Case.ExtrudeRoomsToMass.Entry.CmdMain + CSDR + Case Design, Inc. www.case-inc.com + + diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.vbproj b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.vbproj new file mode 100644 index 00000000..3659b453 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass.vbproj @@ -0,0 +1,125 @@ + + + + Debug + AnyCPU + + + + + {BD99B215-1868-429A-83A7-124A0DED8F7B} + Library + Case.ExtrudeRoomsToMass + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + form_RoomMasses.vb + + + Form + + + + + + + Always + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + form_RoomMasses.vb + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Entry/CmdMain.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Entry/CmdMain.vb new file mode 100644 index 00000000..f19d3ffb --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Entry/CmdMain.vb @@ -0,0 +1,61 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Entry + + + Public Class CmdMain + Implements IExternalCommand + + ''' + ''' Main entry point for every external command + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Construct and Display the Form + Using d As New form_RoomMasses(commandData) + + d.ShowDialog() + + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Mass.rft b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Mass.rft new file mode 100644 index 00000000..2e21e646 Binary files /dev/null and b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Mass.rft differ diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/AssemblyInfo.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..53795876 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/DataSources/System.Data.DataTable.datasource b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/DataSources/System.Data.DataTable.datasource new file mode 100644 index 00000000..a23fb0d1 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/DataSources/System.Data.DataTable.datasource @@ -0,0 +1,10 @@ + + + + System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.Designer.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.Designer.vb new file mode 100644 index 00000000..baddd001 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Case.ExtrudeRoomsToMass.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Case_Clearly() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Case_Clearly", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.resx b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.resx new file mode 100644 index 00000000..9eb33c83 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Case_Clearly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.Designer.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f4b8b547 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.Designer.vb @@ -0,0 +1,84 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property fmsandboxConnectionString() As String + Get + Return CType(Me("fmsandboxConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.[Case].ExtrudeRoomsToMass.My.MySettings + Get + Return Global.[Case].ExtrudeRoomsToMass.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.settings b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.settings new file mode 100644 index 00000000..ea18b1a6 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=fmsandbox.db.8301136.hostedresource.com;Initial Catalog=fmsandbox;Persist Security Info=True;User ID=fmsandbox;Password=j%Beer4Us</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=fmsandbox.db.8301136.hostedresource.com;Initial Catalog=fmsandbox;Persist Security Info=True;User ID=fmsandbox;Password=j%Beer4Us + + + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Resources/Case_Clearly.png b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Resources/Case_Clearly.png new file mode 100644 index 00000000..5148f13d Binary files /dev/null and b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/Resources/Case_Clearly.png differ diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.Designer.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.Designer.vb new file mode 100644 index 00000000..bf87a307 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.Designer.vb @@ -0,0 +1,216 @@ + _ +Partial Class form_RoomMasses + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_RoomMasses)) + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.DataGridViewRooms = New System.Windows.Forms.DataGridView() + Me.colRevElementID = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.colNumber = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.colName = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.colDept = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.colLevel = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.ButtonGenerateMasses = New System.Windows.Forms.Button() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.ButtonCancel = New System.Windows.Forms.Button() + Me.FolderBrowserDialog = New System.Windows.Forms.FolderBrowserDialog() + Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ButtonHelp = New System.Windows.Forms.Button() + Me.GroupBox2.SuspendLayout() + CType(Me.DataGridViewRooms, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'GroupBox2 + ' + Me.GroupBox2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox2.Controls.Add(Me.DataGridViewRooms) + Me.GroupBox2.Location = New System.Drawing.Point(12, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(487, 316) + Me.GroupBox2.TabIndex = 25 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Rooms to Generate Masses From" + ' + 'DataGridViewRooms + ' + Me.DataGridViewRooms.AllowUserToAddRows = False + Me.DataGridViewRooms.AllowUserToDeleteRows = False + Me.DataGridViewRooms.AllowUserToResizeRows = False + Me.DataGridViewRooms.BackgroundColor = System.Drawing.SystemColors.ControlLightLight + Me.DataGridViewRooms.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.DataGridViewRooms.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.DataGridViewRooms.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.colRevElementID, Me.colNumber, Me.colName, Me.colDept, Me.colLevel}) + DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft + DataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window + DataGridViewCellStyle1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + DataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText + DataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.ControlLight + DataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText + DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[False] + Me.DataGridViewRooms.DefaultCellStyle = DataGridViewCellStyle1 + Me.DataGridViewRooms.Dock = System.Windows.Forms.DockStyle.Fill + Me.DataGridViewRooms.GridColor = System.Drawing.Color.LightGray + Me.DataGridViewRooms.Location = New System.Drawing.Point(3, 16) + Me.DataGridViewRooms.Name = "DataGridViewRooms" + Me.DataGridViewRooms.ReadOnly = True + Me.DataGridViewRooms.RowHeadersVisible = False + Me.DataGridViewRooms.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.DataGridViewRooms.Size = New System.Drawing.Size(481, 297) + Me.DataGridViewRooms.TabIndex = 2 + ' + 'colRevElementID + ' + Me.colRevElementID.HeaderText = "UniqueID" + Me.colRevElementID.Name = "colRevElementID" + Me.colRevElementID.ReadOnly = True + Me.colRevElementID.Visible = False + ' + 'colNumber + ' + Me.colNumber.HeaderText = "Number" + Me.colNumber.Name = "colNumber" + Me.colNumber.ReadOnly = True + Me.colNumber.Width = 75 + ' + 'colName + ' + Me.colName.HeaderText = "Name" + Me.colName.Name = "colName" + Me.colName.ReadOnly = True + Me.colName.Width = 150 + ' + 'colDept + ' + Me.colDept.HeaderText = "Department" + Me.colDept.Name = "colDept" + Me.colDept.ReadOnly = True + Me.colDept.Width = 150 + ' + 'colLevel + ' + Me.colLevel.HeaderText = "Level" + Me.colLevel.Name = "colLevel" + Me.colLevel.ReadOnly = True + ' + 'ButtonGenerateMasses + ' + Me.ButtonGenerateMasses.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonGenerateMasses.Location = New System.Drawing.Point(266, 334) + Me.ButtonGenerateMasses.Name = "ButtonGenerateMasses" + Me.ButtonGenerateMasses.Size = New System.Drawing.Size(132, 40) + Me.ButtonGenerateMasses.TabIndex = 18 + Me.ButtonGenerateMasses.Text = "Generate Masses" + Me.ButtonGenerateMasses.UseVisualStyleBackColor = True + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(184, 334) + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(315, 40) + Me.ProgressBar1.TabIndex = 23 + ' + 'ButtonCancel + ' + Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonCancel.Location = New System.Drawing.Point(404, 334) + Me.ButtonCancel.Name = "ButtonCancel" + Me.ButtonCancel.Size = New System.Drawing.Size(95, 40) + Me.ButtonCancel.TabIndex = 19 + Me.ButtonCancel.Text = "Cancel" + Me.ButtonCancel.UseVisualStyleBackColor = True + ' + 'FolderBrowserDialog + ' + Me.FolderBrowserDialog.Description = "Location to Save Mass Families" + Me.FolderBrowserDialog.RootFolder = System.Environment.SpecialFolder.MyComputer + ' + 'FolderBrowserDialog1 + ' + Me.FolderBrowserDialog1.Description = "Mass Family Save Location" + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = Global.[Case].ExtrudeRoomsToMass.My.Resources.Resources.Case_Clearly + Me.PictureBox1.Location = New System.Drawing.Point(12, 334) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(166, 40) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.PictureBox1.TabIndex = 3 + Me.PictureBox1.TabStop = False + ' + 'ButtonHelp + ' + Me.ButtonHelp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ButtonHelp.Location = New System.Drawing.Point(210, 334) + Me.ButtonHelp.Name = "ButtonHelp" + Me.ButtonHelp.Size = New System.Drawing.Size(50, 40) + Me.ButtonHelp.TabIndex = 27 + Me.ButtonHelp.Text = "?" + Me.ButtonHelp.UseVisualStyleBackColor = True + ' + 'form_RoomMasses + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(514, 382) + Me.Controls.Add(Me.ButtonHelp) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.GroupBox2) + Me.Controls.Add(Me.ButtonGenerateMasses) + Me.Controls.Add(Me.ButtonCancel) + Me.Controls.Add(Me.ProgressBar1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(530, 420) + Me.Name = "form_RoomMasses" + Me.Text = "Extrude Rooms as Masses" + Me.GroupBox2.ResumeLayout(False) + CType(Me.DataGridViewRooms, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents DataGridViewRooms As System.Windows.Forms.DataGridView + Friend WithEvents ButtonGenerateMasses As System.Windows.Forms.Button + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents ButtonCancel As System.Windows.Forms.Button + Friend WithEvents FolderBrowserDialog As System.Windows.Forms.FolderBrowserDialog + Friend WithEvents colRevElementID As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents colNumber As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents colName As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents colDept As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents colLevel As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents FolderBrowserDialog1 As System.Windows.Forms.FolderBrowserDialog + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ButtonHelp As System.Windows.Forms.Button +End Class diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.resx b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.resx new file mode 100644 index 00000000..aca0861c --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.resx @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + 182, 17 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.vb b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.vb new file mode 100644 index 00000000..f6e793ce --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/UI/form_RoomMasses.vb @@ -0,0 +1,565 @@ +Imports System.Collections.Generic +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports Autodesk.Revit +Imports System.Diagnostics +Imports System.Windows.Forms +Imports System +Imports System.Linq +Imports System.Reflection +Imports [Case].ExtrudeRoomsToMass.API + +Public Class form_RoomMasses + + Private _cmd As ExternalCommandData + + Private _doc As Document + Private _famDoc As Document + Private _app As ApplicationServices.Application + Private _appCreate As Creation.Application + Private _sw As New List(Of Stopwatch) + Private _SECategory As Category + Private _famFactory As Creation.FamilyItemFactory + Private _rooms As New List(Of Architecture.Room) + Private _uiApp As UIApplication + Private _path As String = "" + Private _genericModelPath As String = "" + + ''' + ''' General Constructor + ''' + ''' + ''' + Public Sub New(c As ExternalCommandData) + InitializeComponent() + + ' Widen Scope + _cmd = c + + End Sub + +#Region "Private Members" + + ''' + ''' Load Matching Room Data into Data View + ''' + ''' + Private Sub UpdateRoomsList() + + ' Clean Grid + DataGridViewRooms.Rows.Clear() + + ' Fresh List + _rooms = New List(Of Architecture.Room) + + Try + + ' Query + Dim m_rooms As IEnumerable(Of Architecture.Room) = From e In New FilteredElementCollector(_doc) _ + .OfCategory(BuiltInCategory.OST_Rooms) + Let r = TryCast(e, Architecture.Room) + Where r.Area > 1 + Select r + + ' Process Results + If Not m_rooms Is Nothing Then + For Each x As Architecture.Room In m_rooms + + ' Add to the List + _rooms.Add(x) + + ' Build and Add the Row + Dim m_row As New DataGridViewRow + Dim m_cell As New DataGridViewTextBoxCell + + ' UniqueID + m_cell.Value = x.UniqueId.ToString + m_row.Cells.Add(m_cell) + + ' Number + m_cell = New DataGridViewTextBoxCell + m_cell.Value = x.Parameter(BuiltInParameter.ROOM_NUMBER).AsString + m_row.Cells.Add(m_cell) + + ' Name + m_cell = New DataGridViewTextBoxCell + m_cell.Value = x.Parameter(BuiltInParameter.ROOM_NAME).AsString + m_row.Cells.Add(m_cell) + + ' Department + m_cell = New DataGridViewTextBoxCell + m_cell.Value = x.Parameter(BuiltInParameter.ROOM_DEPARTMENT).AsString + m_row.Cells.Add(m_cell) + + ' Level + m_cell = New DataGridViewTextBoxCell + m_cell.Value = x.Document.GetElement(x.LevelId).Name + m_row.Cells.Add(m_cell) + + ' Add the row + DataGridViewRooms.Rows.Add(m_row) + + Next + End If + + Catch + End Try + + End Sub + + ''' + ''' Create line element + ''' + ''' revit application + ''' + Private Function MakeLine(app As UIApplication, pLine As Line) As ModelCurve + + Try + + ' End Points + Dim ptA As XYZ = pLine.GetEndPoint(0) + Dim ptB As XYZ = pLine.GetEndPoint(1) + + ' Boundaries + Dim m_line As Line = Line.CreateBound(ptA, ptB) + Dim m_norm As XYZ = ptA.CrossProduct(ptB) + If m_norm.GetLength() = 0 Then + m_norm = XYZ.BasisZ + End If + + ' Plane & Sketch Plane + Dim m_plane As Plane = app.Application.Create.NewPlane(m_norm, ptB) + Dim m_skplane As SketchPlane = SketchPlane.Create(_doc, m_plane) + + ' Create line here + Dim m_modelcurve As ModelCurve = _doc.FamilyCreate.NewModelCurve(m_line, m_skplane) + + ' Result + Return m_modelcurve + + Catch + End Try + + ' Failure + Return Nothing + + End Function + + ''' + ''' Create arc element by three points + ''' + ''' revit application + ''' + Private Function MakeArc(app As UIApplication, pArc As Arc) As ModelCurve + + Try + + ' Points + Dim ptA As XYZ = pArc.GetEndPoint(0) + Dim ptB As XYZ = pArc.GetEndPoint(1) + Dim ptC As XYZ = pArc.Center + + ' Create three lines and a plane by the points + Dim line1 As Line = Line.CreateBound(ptA, ptB) + Dim line2 As Line = Line.CreateBound(ptB, ptC) + Dim line3 As Line = Line.CreateBound(ptC, ptA) + Dim ca As New CurveArray() + ca.Append(line1) + ca.Append(line2) + ca.Append(line3) + + ' Plane and Sketch Plane + Dim m_plane As Plane = app.Application.Create.NewPlane(ca) + Dim m_skplane As SketchPlane = SketchPlane.Create(_doc, m_plane) + + ' Create arc here + Dim m_mc As ModelCurve = _doc.FamilyCreate.NewModelCurve(pArc, m_skplane) + + ' Result + Return m_mc + + Catch + End Try + + ' Failure + Return Nothing + + End Function + + ''' + ''' Generate masses for rooms + ''' + ''' + Private Sub GenerateMasses() + + Dim iCnt As Integer = 0 + Dim iCntFail As Integer = 0 + + ' Prime the Progressbar + With ProgressBar1 + .Minimum = 0 + .Maximum = _rooms.Count + .Value = 0 + .Show() + End With + + ' Random Object + Dim m_r As New Random + + ' Iterate the Rooms + For Each x As Architecture.Room In _rooms + + Try + ProgressBar1.Increment(1) + Catch + End Try + + Try + + ' Create a new Family + _famDoc = _app.NewFamilyDocument(_genericModelPath) + + ' Start a new Family Transaction + Using t As New Transaction(_famDoc, "Transaction in Family Document") + If t.Start() = TransactionStatus.Started Then + + Try + + ' Get the department name + Dim m_SubCatName As String = "Mass_Rooms" + If Not String.IsNullOrEmpty(x.Parameter(BuiltInParameter.ROOM_DEPARTMENT).AsString) Then + m_SubCatName = "Mass_Rooms_" & x.Parameter(BuiltInParameter.ROOM_DEPARTMENT).AsString + End If + + ' Subcategory named by Department + Dim m_Subcategory As Category = Nothing + + Try + + ' Create the subcategory if it does not exist + m_Subcategory = _famDoc.Settings.Categories.NewSubcategory(_SECategory, m_SubCatName) + + Catch + + ' Get the subcategory object since it exists already + Dim m_NameMap As CategoryNameMap = _SECategory.SubCategories + For Each x1 As Category In m_NameMap + If x1.Name = m_SubCatName Then + m_Subcategory = x1 + Exit For + End If + Next + + End Try + + ' Material named by Department + Dim m_Material As Material = Nothing + Dim m_colMat As New FilteredElementCollector(_famDoc) + m_colMat.OfCategory(BuiltInCategory.OST_Materials) + + ' Find the Material by Name + For Each m As Material In m_colMat.ToElements + If m.Name = m_SubCatName Then + m_Material = m + Exit For + End If + Next + + ' Create the Material if Not Found + If m_Material Is Nothing Then + + Try + + ' Name as Subcategory + Dim m_matid As ElementId = Material.Create(_famDoc, m_SubCatName) + m_Material = TryCast(_famDoc.GetElement(m_matid), Material) + + ' Random Color + Dim m_color As New Color(m_r.Next(1, 255), m_r.Next(1, 255), m_r.Next(1, 255)) + + ' Apply the Color to the Material + m_Material.Color = m_color + + ' Set 50% Transparency + m_Material.Transparency = 50 + + ' Assign the Material to the Subcategory + m_Subcategory.Material = m_Material + + Catch + + End Try + + End If + + ' Apply the material to the subcategory + m_Subcategory.Material = m_Material + + ' What are the upp bounds or height of the room? + Dim m_RmHeight As Double = x.UnboundedHeight + Dim m_RmElev As Double = x.Level.Elevation + 'Dim m_ent_i As Integer = m_RmElev + If m_RmHeight < 1 Then m_RmHeight = 8 + Dim m_RmUpLevel As Level = x.UpperLimit + + ' Get the room boundary data + Dim m_Boundary As IList(Of IList(Of BoundarySegment)) = x.GetBoundarySegments(New SpatialElementBoundaryOptions) + + ' Make Sure we Have Something + If m_Boundary Is Nothing Then Continue For + + ' Flat Sketchplane + Dim m_plane As Plane = _uiApp.Application.Create.NewPlane(New XYZ(0, 0, 1), New XYZ(0, 0, m_RmElev)) + Dim m_skplane As SketchPlane = SketchPlane.Create(_famDoc, m_plane) + + ' The Reference Array + Dim m_refArray As New ReferenceArray + + ' Iterate to gather the reference array objects + For i = 0 To m_Boundary.Count - 1 + Dim il As IList(Of BoundarySegment) = m_Boundary(i) + ' Segments Array + For ii = 0 To il.Count - 1 + + Dim m_Seg As BoundarySegment = il.Item(ii) + + Dim m_mc As ModelCurve = Nothing + + ' Curve is Line + If TypeOf m_Seg.GetCurve() Is Line Then + Dim m_cLine As Line = TryCast(m_Seg.GetCurve(), Line) + m_mc = _famDoc.FamilyCreate.NewModelCurve(m_cLine, m_skplane) + End If + + ' Curve is Arc + If TypeOf m_Seg.GetCurve() Is Arc Then + Dim m_cLine As Arc = TryCast(m_Seg.GetCurve(), Arc) + m_mc = _famDoc.FamilyCreate.NewModelCurve(m_cLine, m_skplane) + End If + + ' Curve is NurbSpline + If TypeOf m_Seg.GetCurve() Is NurbSpline Then + Dim m_cLine As NurbSpline = TryCast(m_Seg.GetCurve(), NurbSpline) + m_mc = _famDoc.FamilyCreate.NewModelCurve(m_cLine, m_skplane) + End If + + Try + + m_refArray.Append(m_mc.GeometryCurve.Reference) + Catch + End Try + + Next + Next + + ' The extrusion form direction + Dim m_dir As New XYZ(0, 0, m_RmHeight) + ' Extrude the form + Dim m_form As Autodesk.Revit.DB.Form = _famDoc.FamilyCreate.NewExtrusionForm(True, m_refArray, m_dir) + Try + m_form.Subcategory = m_Subcategory + Catch + End Try + + ' Commit the Family Transaction + t.Commit() + + Catch + + ' Cannot Continue to Place Mass Family + Continue For + + End Try + + End If + End Using + + ' Save the Family + Dim m_opt As New SaveAsOptions + m_opt.OverwriteExistingFile = True + _famDoc.SaveAs(_path & x.UniqueId.ToString & ".rfa", m_opt) + _famDoc.Close() + + ' Has it Been Loaded? + Dim m_family As Family = Nothing + Dim m_famCol As New FilteredElementCollector(_doc) + + ' Start a new Model Transaction + Using t As New Transaction(_doc, "Extrude Rooms to Masses") + If t.Start() = TransactionStatus.Started Then + + Try + + ' Load the Family + _doc.LoadFamily(_path & x.UniqueId.ToString & ".rfa", m_family) + + ' Get the Default Symbol from the Family + For Each fs As ElementId In m_family.GetFamilySymbolIds() + + ' The Symbol + Dim m_famSymbol As FamilySymbol = TryCast(_doc.GetElement(fs), FamilySymbol) + + ' Place the Family at 0,0,0 + _doc.Create.NewFamilyInstance(New XYZ(0, 0, 0), m_famSymbol, [Structure].StructuralType.NonStructural) + + Next + + ' Commit the Model Transaction + iCnt += 1 + t.Commit() + + Catch + End Try + + End If + End Using + + Catch + End Try + + Next + + ' Results + Using td As New TaskDialog("Here's What Happened") + With td + .TitleAutoPrefix = False + .MainInstruction = "Masses from Rooms" + .MainContent = "Make sure that the 3D view that you are trying to view the results in has the mass category enabled in the view settings." & vbCr & vbCr + .MainContent += "Create " & iCnt.ToString & " Masses from " & _rooms.Count.ToString & " Rooms" + .Show() + End With + End Using + + + End Sub + +#End Region + +#Region "Form Controls & Events" + + ''' + ''' Form Setup + ''' + ''' + ''' + ''' + Private Sub form_RoomMasses_Shown(sender As Object, e As EventArgs) Handles Me.Shown + + Try + + ' Title + Text = "Extrude Rooms as Masses v" & Assembly.GetExecutingAssembly.GetName.Version.ToString + + ' Hide the progressbar + ProgressBar1.Hide() + + ' Find the Generic Model + _genericModelPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly.Location) & "\Mass.rft" + If Not System.IO.File.Exists(_genericModelPath) Then + + ' Failure Message + MsgBox("Mass.rft was not Found!", MsgBoxStyle.Critical, "Cannot Continue") + + Else + + ' Application and Document References + _uiApp = _cmd.Application + _app = _uiApp.Application + _doc = _uiApp.ActiveUIDocument.Document + + ' Model Category + _SECategory = _doc.Settings.Categories.Item(BuiltInCategory.OST_Mass) + + ' App creator + _appCreate = _app.Create + + ' Rooms + UpdateRoomsList() + + End If + + Catch + End Try + + End Sub + + ''' + ''' Help Documentation + ''' + ''' + ''' + ''' + Private Sub ButtonHelp_Click(sender As System.Object, e As System.EventArgs) Handles ButtonHelp.Click + Try + Process.Start("http://apps.case-inc.com/content/free-extrude-rooms-3d-mass") + Catch + End Try + End Sub + + ''' + ''' Start building the mass families + ''' + ''' + ''' + ''' + Private Sub ButtonGenerateMasses_Click(ByVal sender As System.Object, + ByVal e As EventArgs) Handles ButtonGenerateMasses.Click + + ' Hide Buttons + ButtonCancel.Hide() + ButtonGenerateMasses.Hide() + ButtonHelp.Hide() + + Try + ' Logging + RecordUsage() + Catch + End Try + + ' Save Location + If FolderBrowserDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then + + ' Was a Path Returned + If Not String.IsNullOrEmpty(FolderBrowserDialog1.SelectedPath) Then + + ' Save the Path + _path = FolderBrowserDialog1.SelectedPath & "\" + + ' Generate the Extrusions + GenerateMasses() + + End If + End If + + ' Close the Form when Done + Close() + + End Sub + + ''' + ''' Close and Cancel + ''' + ''' + ''' + ''' + Private Sub ButtonCancel_Click(ByVal sender As System.Object, + ByVal e As System.EventArgs) Handles ButtonCancel.Click + Close() + End Sub + + ''' + ''' Logo + ''' + ''' + ''' + ''' + Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click + Try + Process.Start("http://apps.case-inc.com/content/free-extrude-rooms-3d-mass") + Catch + End Try + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/app.config b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/app.config new file mode 100644 index 00000000..7a35e124 --- /dev/null +++ b/2017/Case.ExtrudeRoomsToMass/Case.ExtrudeRoomsToMass/app.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2017/Case.ExtrudeRoomsToMass/img/MassImage.png b/2017/Case.ExtrudeRoomsToMass/img/MassImage.png new file mode 100644 index 00000000..808dab2b Binary files /dev/null and b/2017/Case.ExtrudeRoomsToMass/img/MassImage.png differ diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/API/clsAPI.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/API/clsAPI.cs new file mode 100644 index 00000000..9237dd5f --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/API/clsAPI.cs @@ -0,0 +1,156 @@ +using Microsoft.VisualBasic.ApplicationServices; +using System; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Reflection; + +namespace Case.FamilySubcategories.API +{ + class clsApi + { + + #region Private Members + + /// + /// Full Qualifying Domain Name + /// + /// + /// + private static string GetFullDomainName() + { + + try + { + // Domain + string m_domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName; + + // Host + string m_hostName = Dns.GetHostName(); + + if (!m_hostName.Contains(m_domainName)) + { + // add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName + Convert.ToString(".")) + m_domainName; + } + + return m_hostName; + + } + catch + { + } + + // Failure + return ""; + + } + + /// + /// Credential + /// + /// + /// + private static NetworkCredential GetCred() + { + return new NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32"); + } + + /// + /// API Header + /// + /// + /// + private static string GetHeader() + { + return "http://api.addins.case-apps.com/"; + } + + /// + /// Public IP Address + /// + /// + /// + private static string GetPublicIp() + { + + try + { + const string c_url = "http://checkip.dyndns.org"; + WebRequest req = WebRequest.Create(c_url); + using (WebResponse resp = req.GetResponse()) + { + StreamReader sr = new StreamReader(resp.GetResponseStream()); + string response = sr.ReadToEnd().Trim(); + string[] a = response.Split(':'); + string a2 = a[1].Substring(1); + string[] a3 = a2.Split('<'); + string a4 = a3[0]; + return a4; + } + + } + catch { } + + // Failure + return "UNKNOWN"; + + } + + #endregion + + #region Public Members + + /// + /// Record + /// + /// + /// + public static void RecordUsage(bool useProxy = false) + { + + // Ignore My Calls + if (Environment.MachineName.ToLower() == "case-platinum" & Environment.UserName.ToLower() == "d.rudder") return; + if (Environment.MachineName.ToLower() == "masterdonpc" & Environment.UserName.ToLower() == "masterdon") return; + + try + { + + // Assembly Data for Tracking + AssemblyInfo m_a = new AssemblyInfo(Assembly.GetExecutingAssembly()); + + string m_url = GetHeader() + "logusage?ip=" + GetPublicIp(); + m_url += "&mac=" + GetFullDomainName(); + m_url += "&netb=" + Environment.MachineName; + m_url += "&appn=" + m_a.Title; + m_url += "&appv=" + m_a.Version.ToString(); + m_url += "&appf=" + "report"; + m_url += "&user=" + Environment.UserName; + m_url += "&mn=" + ""; + + // The Request Call + HttpWebRequest m_req = (HttpWebRequest)HttpWebRequest.Create(m_url); + m_req.Credentials = GetCred(); + m_req.Method = "POST"; + if (useProxy == false) m_req.Proxy = null; + + // Response String + m_req.GetResponse(); + + } + catch + { + + try + { + if (useProxy == false) RecordUsage(true); + } + catch { } + } + + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.addin b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.addin new file mode 100644 index 00000000..526ce628 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.addin @@ -0,0 +1,10 @@ + + + + Command - Case.FamilySubcategories + Case.FamilySubcategories.dll + Case.FamilySubcategories.Entry.CmdMain + 76D68975-5D6D-4CA6-BF6F-32F6A6612C36 + Case + + \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.csproj b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.csproj new file mode 100644 index 00000000..6e3d03ec --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Case.FamilySubcategories.csproj @@ -0,0 +1,100 @@ + + + + + Debug + AnyCPU + {E03DAB9A-0ECD-4916-A06D-58C0215601B2} + Library + Properties + Case.FamilySubcategories + Case.FamilySubcategories + v4.5.2 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\..\Case.Lic.Com.dll + + + + + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + + + + + + + + + True + True + Resources.resx + + + Form + + + form_Main.cs + + + + + form_Main.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + + \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnFamData.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnFamData.cs new file mode 100644 index 00000000..c3911703 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnFamData.cs @@ -0,0 +1,171 @@ +using System; +using System.Diagnostics; +using System.Linq; +using Autodesk.Revit.DB; + +namespace Case.FamilySubcategories.Data +{ + public class clsFamData + { + + #region Private Properties + + private readonly Document _fd; // Passed in Family Document + + /// + /// Get the Family Document Cateory based on the family Category Name + /// + private Category _c + { + get { return _fd.OwnerFamily.FamilyCategory; } + } + + #endregion + + #region Public Properties + + /// + /// Get the Family Category Name + /// + /// + /// Get the Family Name + /// + public string FamName + { + get { return _fd.Title; } + } + + /// + /// Get the Family Path if possible + /// + public string FamSource + { + get { return !string.IsNullOrEmpty(_fd.PathName) ? _fd.PathName : "Off Network"; } + } + + /// + /// Get the Projection Lineweight + /// + public string FamPrjWeight + { + get + { + int? lineWeight = _c + .GetLineWeight(GraphicsStyleType.Projection); + + if (lineWeight != null) + return lineWeight + .Value + .ToString(); + + return "-"; + } + } + + /// + /// Get the Cut Lineweight + /// Error Checking due to null value issue. + /// + public string FamCutWeight + { + get + { + if (_c.IsCuttable) + { + int? lineWeight = _c.GetLineWeight(GraphicsStyleType.Cut); + + if (lineWeight != null) + return lineWeight + .Value + .ToString(); + + return "-"; + } + return "-"; + } + } + + /// + /// Get the Category Line Color + /// + public string FamLineColor + { + get + { + string clr = "Invalid Color"; + if (!_c.LineColor.IsValid) return clr; + + try + { + clr = _c.LineColor.Red + ","; + clr += _c.LineColor.Green + ","; + clr += _c.LineColor.Blue; + } + catch (Exception exception) + { + Debug.WriteLine(exception.Message); + } + return clr; + } + } + + /// + /// Get Material If Available + /// + public string FamMaterial + { + get { return _c.Material == null ? "-" : _c.Material.Name; } + } + + /// + /// Tab Separated Report Line + /// + public string ReportTabs + { + get + { + string v = null; + + v += _c.Name + "\t" + + FamName + "\t" + + FamSource + "\t" + + FamPrjWeight + "\t" + + FamCutWeight + "\t" + + FamLineColor + "\t" + + FamMaterial + "\t"; + + try + { + CategoryNameMap subCatList = _c.SubCategories; + + if (subCatList == null || subCatList.Size <= 0) return v; + v = subCatList.Cast() + .Aggregate(v, (current, c) => current + (c.Name + "\t")); + } + catch (Exception exception) + { + Debug.WriteLine(exception.Message); + } + + return v; + } + } + + #endregion + + #region Constructor + + /// + /// Constructor + /// + /// Family Document + public clsFamData(Document fd) + { + // Widen Scope + _fd = fd; + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnSettings.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnSettings.cs new file mode 100644 index 00000000..5aca27d8 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Data/mnSettings.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using Autodesk.Revit.ApplicationServices; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; + +namespace Case.FamilySubcategories.Data +{ + public class clsSettings + { + #region Private Properties + + private readonly ExternalCommandData _cmd; + + #endregion + + #region Public Properties + + /// + /// The Active Application from the UI + /// + public Application ActiveApp + { + get + { + try + { + return _cmd.Application.Application; + } + catch (Exception exception) + { + Debug.WriteLine(exception.Message); + } + return null; + } + } + + #endregion + + #region Public Members + + /// + /// Just a List of FamilyPaths + /// + public List FamilyPathList = new List(); + + /// + /// Get a List of the Family Paths to Process + /// + /// + /// + /// + public List FamiliesToProcess(String path, bool subdir) + { + string[] pathList = Directory.GetFiles(path); + + foreach (string fn in pathList) + { + if (!fn.EndsWith(".rfa")) continue; + FamilyPathList.Add(fn); + } + if (!subdir) return FamilyPathList; + + string[] subDirPathList = Directory.GetDirectories(path); + + foreach (string sd in subDirPathList) + { + FamiliesToProcess(sd, true); + } + return FamilyPathList; + } + + + /// + /// Process Family from Path + /// + /// Family Path + /// String of Report Row + public string ProcessFamily(string fp) + { + Document fd = ActiveApp.OpenDocumentFile(fp); + + string rt = null; + + if (fd != null) + { + var famData = new clsFamData(fd); + if (famData.ReportTabs == null) rt = famData.ReportTabs; + fd.Close(false); + } + + return rt ?? "error"; + } + + #endregion + + #region Constructor + + /// + /// Constructor + /// + /// + public clsSettings(ExternalCommandData cmd) + { + // Widen Scope + _cmd = cmd; + } + + #endregion + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Entry/CmdMain.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Entry/CmdMain.cs new file mode 100644 index 00000000..a8413143 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Entry/CmdMain.cs @@ -0,0 +1,58 @@ +using System; +using Autodesk.Revit.Attributes; +using Autodesk.Revit.DB; +using Autodesk.Revit.UI; +using Case.FamilySubcategories.Data; +using Case.FamilySubcategories.UI; + +namespace Case.FamilySubcategories.Entry +{ + [Transaction(TransactionMode.Manual)] + public class CmdMain : IExternalCommand + { + /// + /// Report Groups by View + /// + /// + /// + /// + /// + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + try + { + // Version + if (!commandData.Application.Application.VersionName.Contains("2016")) + { + // Failure + using (var td = new TaskDialog("Cannot Continue")) + { + td.TitleAutoPrefix = false; + td.MainInstruction = "Incompatible Version of Revit"; + td.MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance."; + td.Show(); + } + return Result.Cancelled; + } + + // Settings + var m_s = new clsSettings(commandData); + + // Form + using (var d = new form_Main(m_s)) + { + d.ShowDialog(); + } + + // Success + return Result.Succeeded; + } + catch (Exception ex) + { + // Failure + message = ex.Message; + return Result.Failed; + } + } + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/AssemblyInfo.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..dd81ce7e --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Case Free Family Subcategories for Revit 2016")] +[assembly: AssemblyDescription("Case Free Family Subcategories for Revit 2016")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Case Design, Inc.")] +[assembly: AssemblyProduct("Case Free Family Subcategories for Revit 2016")] +[assembly: AssemblyCopyright("Copyright © Case Design, Inc. 2014")] +[assembly: AssemblyTrademark("Case Design, Inc.")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("51E7822A-D9D5-41B5-9CE2-6271EC8463BC")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2014.7.16.0")] +[assembly: AssemblyFileVersion("2014.7.16.0")] diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.Designer.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.Designer.cs new file mode 100644 index 00000000..8fa3668f --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Case.FamilySubcategories.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Case.FamilySubcategories.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.resx b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.resx new file mode 100644 index 00000000..4fdb1b6a --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.cs new file mode 100644 index 00000000..35692428 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +//using System.Windows.Forms; + +//using Autodesk.Revit.UI; +//using Autodesk.Revit.DB; +//using Autodesk.Revit.DB.Architecture; + +namespace Case.TemplateLocal { + + public partial class ProgressBarForm : System.Windows.Forms.Form { + + public bool Cancel = false; + + public ProgressBarForm(string title, int maximum) { + InitializeComponent(); + this.Text = title; + progressBar1.Maximum = maximum; + } + + public void SetLabel(string text) { + labelProgressBar.Text = text; + labelProgressBar.Refresh(); + } + + public void Increment() { + progressBar1.Increment(1); + } + + public void Reset() { + progressBar1.Value = 0; + progressBar1.Refresh(); + } + + private void buttonCancel_Click(object sender, EventArgs e) { + Cancel = true; + } + } + +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.designer.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.designer.cs new file mode 100644 index 00000000..428404b2 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.designer.cs @@ -0,0 +1,99 @@ +namespace Case.TemplateLocal { + partial class ProgressBarForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label6 = new System.Windows.Forms.Label(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelProgressBar = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(8, 9); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(774, 22); + this.progressBar1.TabIndex = 0; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 88); + this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(10, 13); + this.label6.TabIndex = 5; + this.label6.Text = "."; + // + // buttonCancel + // + this.buttonCancel.Cursor = System.Windows.Forms.Cursors.Default; + this.buttonCancel.Location = new System.Drawing.Point(687, 63); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(95, 30); + this.buttonCancel.TabIndex = 6; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // labelProgressBar + // + this.labelProgressBar.AutoSize = true; + this.labelProgressBar.Location = new System.Drawing.Point(12, 43); + this.labelProgressBar.Name = "labelProgressBar"; + this.labelProgressBar.Size = new System.Drawing.Size(68, 13); + this.labelProgressBar.TabIndex = 7; + this.labelProgressBar.Text = "default value"; + // + // ProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(788, 105); + this.ControlBox = false; + this.Controls.Add(this.labelProgressBar); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.label6); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ProgressBarForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Processing"; + this.TopMost = true; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelProgressBar; + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.resx b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.resx new file mode 100644 index 00000000..d58980a3 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/ProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.Designer.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.Designer.cs new file mode 100644 index 00000000..e30f33ce --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.Designer.cs @@ -0,0 +1,203 @@ +namespace Case.FamilySubcategories.UI +{ + partial class form_Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(form_Main)); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.FolderBrowser1 = new System.Windows.Forms.FolderBrowserDialog(); + this.ButtonHelp = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.CheckSubFolders = new System.Windows.Forms.CheckBox(); + this.TextboxFamilyPath = new System.Windows.Forms.TextBox(); + this.ButtonFolderBrowse = new System.Windows.Forms.Button(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(296, 111); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 40); + this.buttonCancel.TabIndex = 5; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.Enabled = false; + this.buttonOk.Location = new System.Drawing.Point(215, 111); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 40); + this.buttonOk.TabIndex = 3; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // progressBar1 + // + this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar1.Location = new System.Drawing.Point(12, 111); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(359, 40); + this.progressBar1.TabIndex = 51; + // + // FolderBrowser1 + // + this.FolderBrowser1.ShowNewFolderButton = false; + // + // ButtonHelp + // + this.ButtonHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ButtonHelp.Location = new System.Drawing.Point(168, 111); + this.ButtonHelp.Name = "ButtonHelp"; + this.ButtonHelp.Size = new System.Drawing.Size(41, 40); + this.ButtonHelp.TabIndex = 4; + this.ButtonHelp.Text = "?"; + this.ButtonHelp.UseVisualStyleBackColor = true; + this.ButtonHelp.Click += new System.EventHandler(this.HelpButton_Click); + // + // groupBox2 + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.CheckSubFolders); + this.groupBox2.Controls.Add(this.TextboxFamilyPath); + this.groupBox2.Controls.Add(this.ButtonFolderBrowse); + this.groupBox2.Location = new System.Drawing.Point(12, 12); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(359, 91); + this.groupBox2.TabIndex = 50; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Family Folder"; + // + // CheckSubFolders + // + this.CheckSubFolders.AutoSize = true; + this.CheckSubFolders.Enabled = false; + this.CheckSubFolders.Location = new System.Drawing.Point(9, 57); + this.CheckSubFolders.Name = "CheckSubFolders"; + this.CheckSubFolders.Size = new System.Drawing.Size(120, 17); + this.CheckSubFolders.TabIndex = 1; + this.CheckSubFolders.Text = "Include Sub-Folders"; + this.CheckSubFolders.UseVisualStyleBackColor = true; + // + // TextboxFamilyPath + // + this.TextboxFamilyPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TextboxFamilyPath.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TextboxFamilyPath.Location = new System.Drawing.Point(9, 29); + this.TextboxFamilyPath.MaximumSize = new System.Drawing.Size(460, 22); + this.TextboxFamilyPath.MinimumSize = new System.Drawing.Size(260, 22); + this.TextboxFamilyPath.Name = "TextboxFamilyPath"; + this.TextboxFamilyPath.Size = new System.Drawing.Size(260, 22); + this.TextboxFamilyPath.TabIndex = 2; + this.TextboxFamilyPath.Leave += new System.EventHandler(this.TextboxFamilyPath_TextChanged); + // + // ButtonFolderBrowse + // + this.ButtonFolderBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ButtonFolderBrowse.Location = new System.Drawing.Point(275, 29); + this.ButtonFolderBrowse.Name = "ButtonFolderBrowse"; + this.ButtonFolderBrowse.Size = new System.Drawing.Size(75, 22); + this.ButtonFolderBrowse.TabIndex = 0; + this.ButtonFolderBrowse.Text = "Browse"; + this.ButtonFolderBrowse.UseVisualStyleBackColor = true; + this.ButtonFolderBrowse.Click += new System.EventHandler(this.ButtonFolderBrowse_Click); + // + // saveFileDialog1 + // + this.saveFileDialog1.DefaultExt = "txt"; + this.saveFileDialog1.FileName = "CASE-FamilySubCategories"; + this.saveFileDialog1.Filter = "Text Files |*.txt"; + this.saveFileDialog1.Title = "Family Subcategory Report Save-As"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoEllipsis = true; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(14, 91); + this.label1.MaximumSize = new System.Drawing.Size(355, 13); + this.label1.MinimumSize = new System.Drawing.Size(355, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(355, 13); + this.label1.TabIndex = 5; + this.label1.Text = "Processing: "; + // + // form_Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(384, 161); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.ButtonHelp); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.progressBar1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 200); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(400, 200); + this.Name = "form_Main"; + this.Text = "Get Family Subcategories"; + this.Load += new System.EventHandler(this.form_Main_Load); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.FolderBrowserDialog FolderBrowser1; + private System.Windows.Forms.Button ButtonHelp; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox CheckSubFolders; + private System.Windows.Forms.TextBox TextboxFamilyPath; + private System.Windows.Forms.Button ButtonFolderBrowse; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.cs b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.cs new file mode 100644 index 00000000..7ff6ca1a --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.cs @@ -0,0 +1,295 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Windows.Forms; +using Autodesk.Revit.UI; +using Microsoft.VisualBasic.ApplicationServices; +using clsSettings = Case.FamilySubcategories.Data.clsSettings; + +namespace Case.FamilySubcategories.UI +{ + public partial class form_Main : Form + { + private readonly clsSettings _s; + + /// + /// Constructor + /// + /// + public form_Main(clsSettings s) + { + InitializeComponent(); + + // Widen Scope + _s = s; + } + + #region Private Members + + private List _fList = new List(); //Family Path List + private string FolderPath { get; set; } //The folder + + /// + /// Just the Text Headers + /// + private string HeaderTabs + { + get + { + return "Category\tFamily\tSource\tProjection Lineweight\tCut Lineweight\tLine Color\tMaterial\tSub-Categories"; + } + } + + /// + /// Get the Data + /// + private void ProcessData() + { + try + { + if (_fList == null) return; + if (saveFileDialog1.ShowDialog() != DialogResult.OK) return; + if (saveFileDialog1.FileName == null) return; + + using (var sw = new StreamWriter(saveFileDialog1.FileName, false)) + { + bool isFirstRow = true; + + for (int i = 0; i < _fList.Count; i++) + { + if (isFirstRow) + { + sw.WriteLine(HeaderTabs); + isFirstRow = false; + } + string f = _fList[i]; + label1.Text = string.Format("Processing: {0}", Path.GetFileName(f)); + label1.Update(); + sw.WriteLine(_s.ProcessFamily(f)); + progressBar1.Increment(1); + } + + sw.Close(); + } + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + using (var x = new TaskDialog("Error")) + { + x.TitleAutoPrefix = false; + x.MainContent = "This blew up badly. Im not even sure what happened. Contact CASE."; + x.MainInstruction = "I died, Jim."; + x.Show(); + } + } + Close(); + } + + /// + /// Checks if there are any SubFolders + /// + /// The parent folder + /// bool if folders are present + private bool HasSubfolder(string path) + { + var directory = new DirectoryInfo(path); + DirectoryInfo[] subdirs = directory.GetDirectories(); + return (subdirs.Length != 0); + } + + /// + /// Just a method for error processing + /// + /// + private void PathDoesNotExist(string path) + { + buttonOk.Enabled = false; + + if (string.IsNullOrEmpty(path)) path = "Empty Value"; + + using (var x = new TaskDialog("Error")) + { + x.TitleAutoPrefix = false; + x.MainContent = "Please browse to a valid path. \nInvalid Path: " + path; + x.MainInstruction = "Invalid"; + x.Show(); + } + } + + /// + /// Checks that the Directory is a Valid Path + /// + /// The Path + /// bool for Valid + private bool TestPathInput(string p) + { + try + { + if (!Directory.Exists(p)) + { + PathDoesNotExist(p); + return false; + } + FolderPath = Path.GetFullPath(p); + + CheckSubFolders.Enabled = HasSubfolder(p); + + buttonOk.Enabled = true; + + return true; + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + PathDoesNotExist(p); + return false; + } + } + + /// + /// Give the user one last chance to get of it + /// + /// Go Forth? + private bool LastChanceExit() + { + using (var x = new TaskDialog("Warning")) + { + x.TitleAutoPrefix = false; + x.MainIcon = TaskDialogIcon.TaskDialogIconWarning; + + if (_fList.Any()) + { + x.MainContent = "You are procesing " + _fList.Count + + " Families.\nThis will take approx. " + + Math.Round(TimeSpan.FromSeconds(_fList.Count*.5).TotalMinutes) + + " Minutes.\n" + + "This is your last chance to cancel this process."; + x.MainInstruction = "Long wait time ahead."; + x.CommonButtons = TaskDialogCommonButtons.Ok | TaskDialogCommonButtons.Cancel; + } + else + { + x.MainContent = "No Families Found in the selected directory"; + x.MainInstruction = "No Families Found"; + x.CommonButtons = TaskDialogCommonButtons.Cancel; + } + TaskDialogResult tdr = x.Show(); + return tdr == TaskDialogResult.Ok; + } + } + + #endregion + + #region Form Controls & Events + + /// + /// OK + /// + /// + /// + private void buttonOk_Click(object sender, EventArgs e) + { + try + { + // Assembly Data for Tracking + var m_a = new AssemblyInfo(Assembly.GetExecutingAssembly()); + + // Usage Tracking +//// var m_usage = new clsUsageFree("spicey", m_a); + } + catch (Exception exception) + { + Debug.WriteLine(exception.Message); + } + + // Progress Bar Shuffle + buttonOk.Hide(); + buttonCancel.Hide(); + ButtonHelp.Hide(); + + _fList = _s.FamiliesToProcess(FolderPath, CheckSubFolders.Checked); + + progressBar1.Show(); + progressBar1.Minimum = 0; + progressBar1.Value = 0; + progressBar1.Maximum = _fList.Count; + groupBox2.Hide(); + label1.Show(); + FormBorderStyle = FormBorderStyle.None; + SizeGripStyle = SizeGripStyle.Hide; + MinimumSize = new Size(400, 80); + Size = new Size(400, 80); + + if (LastChanceExit()) + { + ProcessData(); + } + + Close(); + } + + /// + /// Close + /// + /// + /// + private void buttonCancel_Click(object sender, EventArgs e) + { + Close(); + } + + /// + /// Goto the CaseApps page when someone needs help + /// + /// + /// + private void HelpButton_Click(object sender, EventArgs e) + { + Process.Start("http://apps.case-inc.com/content/free-family-subcategories"); + } + + /// + /// The Event when someone Clicks Browse + /// + /// + /// + private void ButtonFolderBrowse_Click(object sender, EventArgs e) + { + if (FolderBrowser1.ShowDialog() != DialogResult.OK) return; + TestPathInput(FolderBrowser1.SelectedPath); + TextboxFamilyPath.Text = FolderPath; + } + + /// + /// The Evenet when someone changes the Text box + /// + /// + /// + private void TextboxFamilyPath_TextChanged(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(TextboxFamilyPath.Text)) return; + if (TestPathInput(TextboxFamilyPath.Text)) return; + TextboxFamilyPath.Focus(); + } + + /// + /// What happens when the form loads + /// + /// + /// + private void form_Main_Load(object sender, EventArgs e) + { + progressBar1.Hide(); + label1.Hide(); + buttonOk.Enabled = false; + } + + #endregion + + } +} \ No newline at end of file diff --git a/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.resx b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.resx new file mode 100644 index 00000000..dd0c9049 --- /dev/null +++ b/2017/Case.FamilySubcategories/Case.FamilySubcategories/UI/form_Main.resx @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 153, 17 + + + + + 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 + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/VVLQ/9ORT3eVkxD5VVKQv9USkL9VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JKQv1VS0P/UkhB/FRKQv1USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL8VEpC/VRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpD/1VLQ/9VS0P/VUtD/1VLQ/9USkL/VUtD/1VLQ/9VS0P/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BGP/9QRj//UUY//1FHQP9RR0D/UUdA/1FH + QP9QRj//UEY//1JIQf9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UkhB/1BGP/9SSEH/V01G/1pQSf9aUUr/WVBJ/1hO + SP9YTkf/WE5I/1lPSf9aUUr/WlBJ/1dNRv9RR0D/UEY//1RKQv9VS0P/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//VUtD/1pRSv9WTET/TEA4/0Q5 + Mf9CODD/Rjoy/0k+Nv9LQDj/Sz83/0Y7Mv9CODD/RDkx/05DO/9YTkf/WlBJ/1RKQv9QRj//VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1FHQP9aUEn/UEY//0I4 + Lv9RR0D/dW1n/5qTj/+2sa3/x8O//9HNyv/Y1NH/1dHN/8rFwv+3sa3/lpCL/21lX/9LQDj/RDkx/1RK + Qv9aUEn/UUdA/1JIQf9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1hO + R/9EOTH/YFdQ/6mjn//g3Nr//Pn3/////////////////////////v3////+//////////////////n2 + 9f/W0c//mJKN/1ZLQ/9FOTH/WE9I/1VLQ/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JI + Qf9USkL/VUtD/0g+Nv+dlpL/8O3r///////+/fz/+fb1//Xy8f/18vD/9fLx//Xy8f/59vT/+PXy//Tx + 7//y7+3/8/Du//n29f///v3//////+jl4v+SjIf/SD41/1BGP/9YTkf/UEY//1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UEY//8jDv///////+vj2//by8f/39PP/+/j2//36+P/9+vj//fr4//36 + +f/39PL/+vb1///9/P////7////9//36+f/18vH/8e7s//r49v//////0czK/2FYUf9JPzf/WE9I/1BG + P/9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZNRv9NQzr/zMjF///////08O7/+vf1//36+P/8+ff/+vf1//n2 + 9f/59vX/+vf1//f08v////7//Pn4/+nl4//f29n/4t7c/+3p6P/8+fj///////37+v/y7u3///79/+/t + 6/95cGv/Rz01/1lPSP9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf+wq6j///////Lv7f/++/n/+vf1//n2 + 9f/69/X/+vf1//r39f/7+Pb/+fb0//79/P/Fv7z/eG9r/1pQSv9RR0D/VEpC/11UTf9za2b/npiT/97a + 1///////9fLx//n39v/6+fj/gnp1/0c7M/9aUEn/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTkf/S0A4/3hwa//8+vn/9/Ty//36 + +P/59vX/+vf1//r39f/69/X/+vf1//v59//49fL///38/5+Yk/8/NCv/TUM7/1JHQf9WTET/VkxE/1JH + Qf9MQDj/RDkx/0xBOv+Zko7/9/X1//n39f/39fP/+/n5/3hwav9JPzb/WE5H/1FHQP9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FGP/9ZUEn/Rjox/8XB + v///////9/Px//z59//59vX/+vf1//r39f/59vX//Pn4//by8f//////urWy/z4xKf9dVU7/VkxE/1VL + Q/9SSEH/UkhB/1VLQ/9XTUb/WU9J/1hOR/9BNy7/cmpk//Hu7f/59vX/+fb0/+fk4v9cU0z/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZM + RP9PRT3/ZVtW//Lw7v/8+ff/+fb1//r39f/69/X/+vf1//r39f/7+Pb/+fb1//z59//y7+3/YllS/1JI + Qf9USkL/UEY//1RKQv9USkL/VEpC/1RKQv9RR0D/UUdA/1BGP/9cU0z/Rz01/21lXv/y8O///v39//// + //98dXD/ST42/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUY//1lQSf9GOjL/joeC///////28/H//Pn3//n29f/69/X/+vf1//n29f/9+vj/9fLx//// + ///Bvbn/RToy/1lPSP9RR0D/VkxE/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1VLQ/9ORDz/WlBK/0k/ + N/91bWf/39vZ/7Svq/9RRz//VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/raik///////18fD//fr4//n29f/69/X/+vf1//n2 + 9f/9+vj/9fLx//////+XkYz/RDgw/1pQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9WTET/UUY//1dNRv9OQzv/SD42/0s/N/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9FOTH/wb25///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/7+Pb/+PXz//36+f95cWz/ST83/1hOR/9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/WE9I/1hOR/9VS0L/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lPSP9GOzP/yMO///// + ///28vH//fr4//n29f/69/X/+vf1//r39f/69/X/+/j2//Xy8P9pYFn/TkQ8/1ZMRP9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/UUdA/1FHQP9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUc//1lP + SP9GOzP/yMO////////28vH//fr4//n29f/69/X/+vf1//v49v/59vX//fr4/+/s6f9hV1H/UEY//1VL + Q/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1lQSf9FOjL/xcC9///////18vH//fr4//n29f/69/X/+vf1//v49v/59vT//fr5/+3p + 5/9dVE3/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VEpC/1RK + Qv9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/tbCs///////18vD//fr4//n29f/69/X/+vf1//v4 + 9v/59vX//fr4/+/s6f9hWFH/UEY//1VLQ/9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1BG + P/9RR0D/UUdA/1FHQP9QRj//UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EODD/npeS///////18vH//fr4//n2 + 9f/69/X/+vf1//r39f/69/X/+/j2//Tx7/9nXlf/T0U9/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/UkhB/1pQSf9ZT0n/WE5H/1hOR/9aUEn/WU9J/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/fHVv//78 + +//49fP/+/j3//r39f/69/X/+vf1//r39f/7+Pb/+fb0//r39f9yamT/TEE6/1dNRv9SR0D/VEpC/1RK + Qv9USkL/VEpC/1JIQf9VS0P/VkxE/0Q5Mf9GOzP/TEA4/0xAOP9FOjH/Rzsz/1hOR/9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/WlBJ/+rn5f/++/n/+fb0//v49v/69/X/+vf1//n29f/8+ff/9/Ty///+/f+Gfnn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/UkhB/1ZMRP9QRj//UkdA/5yVkf/KxcL/2tbT/9jU0f/JxcH/j4iD/0g+ + Nv9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1BGP/9aUEn/RTkx/8C8uP//////9fLx//36+P/59vX/+vf1//n29f/9+vj/9fLw//// + //+hm5f/Qjgw/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1FHQP9aUEr/2NPQ///////9/f3////+//// + /v/9/f3//////7WwrP9JPzf/V01G/1FHQP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9YT0j/SD01/4J7dv///fz/+PXz//z59//69/X/+vf1//n2 + 9f/9+vj/9fLx///////Dvrv/RTox/1pQSf9QRj//VUtD/1VLQ/9RR0D/WU9I/0g9Nf/FwL7///////Hu + 7P/49fP/9vPx//bz8f/39PL/8/Du//////+dlpH/RToy/1lQSf9QRj//VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/WE5H/0xBOv/V0c/////+//f0 + 8v/8+ff/+vb1//r39f/7+Pb/+fXz///8+v/n4+H/V01G/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/19W + T//u7Or/+vf1//z59//9+vj//Pn3//v49v/9+/n/+fb1//36+f/m5OL/VkxE/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/WE5H/0g+ + Nv+AeHP//vz7//f08v/9+vj/+fb1//r39f/59vX//Pn3//j08v///fz/gnp1/0g9Nf9ZT0j/UUdA/1RK + Qv9VS0P/UkhB/11UTf/s6eb///z6//j18//69/X/+fb1//n29f/59vX/+/j2//n29f/9+vn/enNu/0k/ + N/9YTkf/UUdA/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9FOTD/uLSw///////18e///fv5//n29P/59vX//fr4//Xy8f//////wb25/0U5 + Mf9ZUEn/UUdA/1VLQ/9RR0D/V01H/01DO//Y1dP///79//f08v/8+ff/+fb1//r39f/59vX//Pn4//Xy + 8f//////k42I/0U6Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RJQf9VS0X/UUc//9za1/////7/9fLw//77+f/59vT/+vf1//r3 + 9f/69vX/+PX0/2xkXv9ORDz/VUtD/1RKQv9SSEH/WlBK/0Q4MP+noJ3///////Xy8P/9+vj/+fb1//r3 + 9f/59vX//fr4//Xy8f//////l5GM/0U5Mf9aUEn/UEY//1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQf9VS0P/UEY//2NZUv/p5uT///39//Xx + 8P/9+vn/+vf1//v49v/28vH//////8bCv/9EODD/XFRN/09FPf9QRj//VUtD/0xBOv9oYFn/9vPx//r3 + 9f/69/X/+vf1//r39f/59vX/+/j2//j18////fz/hX55/0c9Nf9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9RR0D/V01G/01D + O/9lXFb/5uTh///////18vD/+fb1//z59//9+vj/9vPx///+/f+Zk4//PjEp/19VTv9XTUb/VktD/1lP + SP9VS0P/3tnX///+/f/39PL/+/j2//n29P/7+Pb/+/j2//v49v/t6+n/X1VO/1FHQP9VS0P/UkhB/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9PRDz/WlBJ/87Jxv//////+/n4//by8f/49fP//fr4//v49v/8+/n/l5GM/0A1 + Lf9IPjX/TEE4/05EPP9GOzP/39vZ///9+//49fP//fr4//z59//8+fj/8e7s//////+ppKD/RDkx/1pQ + Sf9QRj//VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9WTET/UkhB/0g+Nv+ak4//7eno///////9+/n/9/Px//Xy + 8P/29PL//v38/8XAvf+Ffnj/cWlj/2ZdVv+ppJ////37//n29f/7+Pb/9/Ty//bz8f/49fP//////8jE + wf9ORDz/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VEpC/1hOR/9EOTD/XVRN/6qk + oP/p5eP///79///////+/fz/+PXz///+/f/9+vn/8e7s//Hu7f/9+vn/9vPx//f08v/79/X///38//// + ///59/X/s62p/09EPP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1FH + QP9aUEn/UkhA/0I4Lv9XTUf/i4N+/765tv/i3tv/9/Ty//v49v///fz//////////////v3////+///9 + /P/28/H/39vY/7Ktqf9uZl//RDkx/1ZMRP9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//VUtC/1pRSv9USkL/Rjsy/0Q5Mf9SSEH/aWBa/4F6dP+SjIf/mZOO/52W + kf+clJD/kouH/4B5dP9qYVv/UUY//0I4Lv9NQzv/WlBJ/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VElC/1BGP/9USkL/WU9J/1pQSf9VS0P/TkQ8/0c9 + Nf9EOTH/RDkx/0Q5MP9CODD/RTkx/0g+Nf9ORDz/VkxE/1pRSv9XTUb/UEY//1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UUdA/1BG + P/9SSEH/VkxE/1hOR/9aUEn/WlBJ/1pQSf9aUEn/WlBJ/1hOR/9WTET/UkhB/1BGP/9SSEH/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9USkL/UkhB/1FHQP9QRj//UEY//1BGP/9QRj//UEY//1FHQP9SSEH/VEpC/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UUhB/FVKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL9WE1G9lJIQfxUSkL9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv1USkL8KyQfV1hNRv9SSEH8VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lVLQv9USkLxAAAAACskIVdYTUb9UUhB/lVL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL+UkhB/1ZLQ+wdGBU3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAD83MZxXTUT/UkhB+1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1WTET/V01G/lJIQfxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1VLQ/9VS0P/VUtD/1VLQ/9VS0P/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1JIQvxSSEH5VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VUtD/1RKQv9RR0D/UEY//1BGP/9QRj//UEY//1BGP/9QRj//UkhB/1VLQ/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9QRj//VEpC/1lPSP9aUUr/WlBJ/1pQSf9aUEn/WlFK/1pRSv9XTUb/UUdA/1FH + QP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/lRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9SSEH/UkhB/1pRSv9SSEH/Rzsz/0I4Lv9EOTD/RToy/0U5Mf9CNy7/Qjcu/0tA + OP9YTkf/WU9I/1BGP/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UkhB/1ZMRP9VS0P/Qjgu/1pQSf+Gf3r/qaSg/765tf/Iw8D/ysXC/7y3 + tP+fmZX/c2tm/0xAOP9HPTP/WU9I/1RKQv9SSEH/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9WTUb/TkQ8/1RKQv+sp6P/7Ojm///9/f////////////// + /////fz///39///9/P/18vD/z8rH/4Z+ef9GOzP/UkhB/1ZMRP9RR0D/VUtD/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9SSEH/VkxE/05DO/9nXlf/4t7b///////9+vn/9/Ty//Xy + 8f/08e//9fLw///+/f///fz///79/////////////Pr5/8G8uP9YTkf/TUM7/1dNRv9SSED/VUtD/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1VLQv9SSEH/XFJK/+bk4v//////9PDu//n2 + 9f/8+ff//Pn3//37+f/59/b/xL+7/6KcmP+jnZn/sq2p/9XRzf/59/b//////+Dd2v9nXlj/TkQ8/1ZM + RP9SSEH/VEtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0U5Mf++ubf///////Pv + 7f///Pr/+/j1//n29f/7+Pb/8e7t/3lxa/9ANCz/RDkw/0E1Lf9CODD/TkM7/4N8d//g3dr//////9/b + 2P9cU0z/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amJb//Xz + 8f/69/X//Pn3//n29P/8+ff/9vLx//////+Ujor/PjEo/2BXUf9XTkf/W1NM/1lQSf9YTkf/RTox/2JY + Uf/Y1NH//////7i0sf9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RKQv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5 + MP+Yko7///////bz8f/8+ff/+/j2//n28//+/Pr/6OXi/1dNRv9XTUb/UEY//1BGP/9QRj//UUdA/1BG + P/9bUkz/TUM7/2BXUP/NycX/iYF8/0tAOP9YTkf/UUdA/1RLQ/9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUUr/Qjgw/7axrv//////9fHw//z59//8+ff/9fLx///////Iw8D/Rjsz/1hOR/9RR0D/VkxE/1VL + Q/9VS0P/VUtD/1BGP/9WTET/UUdA/0Q5MP9MQTj/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UEY//1pQSf9EOTH/wLy4///////18vH//Pn3//z59//18vD//////7Ouqv9CNy7/W1FK/1BG + P/9VS0P/VEpC/1RKQv9USkL/VkxE/1RKQv9VS0P/W1FK/1dOR/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9QRj//WlBJ/0Q5Mf/Au7f///////Xy8f/8+ff//Pn3//Xy8P//////qaSg/0I4 + Lv9aUUr/UEY//1VLQ/9USkL/VUtD/1JIQf9QRj//UUdA/1BFPf9OQzv/UkhB/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VUtD/1BGP/9aUUr/Qjgu/7Svq///////9fLw//z59//8+ff/9fLw//// + //+spqL/Qjgu/1pRSv9QRj//VUtD/1RKQv9SSEH/VUtD/1tRSv9ZT0n/WlBK/1pQSf9SSEH/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UEY//1pQSf9EOTD/mZOP///////18vH//Pn3//z5 + 9//18vD//////7awrP9COC7/WlFK/1BGP/9VS0P/UkhB/1dNRv9QRT3/QTct/0c9M/9EOTD/Rjsz/1dN + Rv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9RR0D/V01G/0xBOP9ya2X/+vj2//n2 + 9f/69/X//fr4//Xy8f//////x8O//0U6Mv9ZUEn/UUdA/1RKQv9WTUb/TEA4/2deV/+1r6v/ycXB/8jE + wP+Ujon/S0A3/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SR0D/V01G/01D + O//Z1tP///79//f08v/9+vj/9/Ty///9/P/f3Nr/UEY//1ZNRv9RR0D/VkxE/09FPf9qYVv/7uvp//// + /////////f39//////+spqL/Rz01/1lPSP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1BG + P/9aUEn/RTkx/5WPi///////9fLx//36+f/59vT/+vf1//j18/9tZV//TkM7/1RKQv9aUEn/Qjcu/6un + o///////7+vp//n29P/08e//+PTy//n39v9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JHQP9XTUf/TUE6/9bT0f////3/9fLw///9/P/08O7//////6Kdmf9FOjH/VkxE/1dN + R/9GOjL/o52Z///////49fP//vv5//77+f/38/H//////5OOif9FOTH/WlBJ/1BGP/9VS0P/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9ORDz/amFb//Px8f/7+ff/+PXy//z59////Pv/5OHf/1JI + Qf9WTET/VkxE/0c7M/9za2b/+/n3//j18//59vX/+vf2//bz8f//////nJaR/0Q5MP9aUEn/UEY//1VL + Q/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/e3Nt//f19P/9+/r/9/Ty//Xy + 8P//////r6qn/z4xKf9bUUr/XVRN/1FHQP/Y1NH///////j18////fz/9PDu///+/f+FfXn/Rz0z/1lP + SP9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hOR/9JPjb/cmpk/+Tg + 3////////fr5//Tx7//69/b/nZaR/0Q4MP9IPjb/PTEo/9XQzf///fz/9PHv//Xx7///////2tbV/1BF + Pf9WTEb/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/UUdA/1hO + R/9MQTr/VEpC/6ulof/v6+n///////7+/f///v3/29bU/7Crp//Ev7z/+vj2//77+f/+/v3//////+Dc + 2v9mXVf/T0Q8/1ZMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9VS0P/UUdA/1dNRv9VS0P/Qjgu/11VTv+Yko3/yMTA/+Hd2v/69/X///////79/f/28/H/6+fk/9HN + yv+dlZH/UkhB/09EPP9WTET/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9VS0P/UUdA/1RKQf9aUUr/UUdA/0Q5MP9GOzL/VkxE/2BWT/9mXVf/aGBZ/2hg + Wf9aUEn/SD42/0Q4MP9WTET/VkxE/1JIQf9USkP/VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VS0P/VEpC/1BGP/9VS0P/WlBJ/1lQSf9USkL/UkhB/1BG + P/9PRT3/TkQ8/1JIQf9ZT0j/WlBK/1JIQf9SSEH/VEpD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB+lRK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1JIQf9QRj//UEY//1JI + Qf9VS0P/VkxE/1ZMRP9WTET/VEpC/1FHQP9QRj//VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9XTET9UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VEpC/1JIQf9SSEH/UkhB/1JIQf9USkH/VUtD/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/UkhB+0Y+N7VXTUT/UkhB+1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1JIQf1XTUT/AgICAkY+N7dWTET/UkhB+lVKQv9USkL+VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/lVLQ/9RSEH5WE1G/z42MJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABgAAAAwAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExDO89WTEP/UkhB/FRKQv9USkL/VEpC/1RKQv9USkL/VUtD/1RK + Qv9SSEH/UkhA/1JIQP9SSEH/VEpC/1VLQ/9USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9SSEH9VkxD/1VL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1VLQ/9USkL/UEY//1JIQf9VTET/V01G/1dNRv9VTET/UUdA/1BG + P/9USkL/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/VRKQvtUSkL/VEpC/1RKQv9USkL/VUtD/1FH + QP9USkL/W1FK/1ZMRP9QRT3/TEA4/0tAOP9PRT3/Vk1G/1pQSf9USkL/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9USkL/VEpC/1RKQv9VS0P/UkdA/1dNRv9SSEH/QTcu/09FPf9kWlP/cmpk/3Vt + Z/9mXVb/T0U9/0Y6Mv9VS0P/WE5H/1FHQP9VS0P/VEpC/1RKQv9USkL/VEpC/1RKQv5USkL/VEpC/1VL + Q/9SR0D/V01G/0xBOP9aUUr/q6ai/93Y1v/08O7/+fb0//bz8f/x7ez/19PQ/56Xk/9WTET/S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9XTUb/S0A4/3VtZ//t6ej////////+ + /f/79/X/+/n4/////v///Pr//v7+///////t6ej/gXlz/0s/N/9ZT0j/UUdA/1VLQ/9USkL/VEpC/1RK + Qv9USkL/UkhB/1VLQ/9QRj//Y1lS/+7s6////fz/9fHv//bz8f/9+/n/6OXj/5KMh/93b2r/fXVw/6CZ + lf/q5+X//////5CKhf9FOjL/WE5I/1FHQP9VS0P/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/uLSw//// + ///08O7///z7//z59//z8e//aWFa/z8zK/9NQzv/SD41/0c9M/9YTkf/z8vI//////99dG//S0A4/1hO + R/9RR0D/VUtD/1RKQv9USkL/VEpC/1RKQv9XTUb/5eLg//77+f/8+ff/9fHw//////+3sa7/QTct/2JY + Uf9USkL/WE5H/1tRSv9SSEH/VUtD/7y3s/92bmj/S0A4/1hOR/9RR0D/VEpC/1RKQv9SSEH/VkxE/09F + PP9oYFn/9fLx//v49v/8+ff/9vPx//////+TjYj/RToy/1dNRv9PRDz/UkhB/1BGP/9USkL/VEpC/0I4 + Lv9NQzv/VUtD/1JIQf9USkL/VEpC/1RKQv9SSEH/VkxE/05DO/9sZF3/+PXz//n29f/8+ff/9/Ty///+ + /f+EfHf/Rzsz/1pQSf9SSEH/VUtD/1JIQf9VS0P/Vk1G/1pRSv9WTET/VEpC/1RKQv9USkL/VEpC/1RK + Qv9SSEH/VUtD/1BGP/9kWlT/8u/t//z59//7+Pb/9/Ty///+/f+EfHf/Rz01/1lPSP9RR0D/VUtD/1dO + R/9ORDz/Sz83/1BGP/9VS0P/UkhB/1RKQv9USkL/VEpC/1RKQv9USkL/UkhB/1ZMRP9RR0D/39va///9 + /P/59vX/9/Ty//////+PiIP/RToy/1lQSf9RR0D/VEpC/0tAN/9qYlv/dm5p/1dNRv9NQzv/VkxE/1JI + Qf9USkL/VEpC/1RKQv9VS0P/UEY//1pRSv9COC7/trGu///////59vT/9/Ty//////+ooZ3/Qjcu/1pQ + Sf9SSEH/UUdA/724tP/7+Pb/+/f2/+bi3/9rY1z/TkQ8/1ZMRP9SSEH/VEpC/1RKQv9USkL/UkhA/1dN + Rv9MQTr/cWlj//n39f/59vX/+fXz///////MyMX/Rjoy/1xTTP9FOjL/gHhz///////59/X/9fLw//// + ///LyMX/Rzsz/1lPSf9RRj//VUtD/1RKQv9USkL/VUtD/1BGP/9aUEn/RDkw/7Cqp///////8u7t//36 + +f/39fP/Zl5X/1VLQ/9NQzv/cGhh//n29P/59vT/+/j2//36+f/m4+H/WU9I/1JIQf9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/VkxE/01DO//LxsT///////Ht7P///v3/vbi1/z0wKP9hV1D/UEY//9rW + 0///////8/Dt///8+v/k4d//UkhB/1VMRP9SSEH/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9PRT3/u7Wx///+/f/8/Pv///79/6KdmP9NQTr/PjMr/8XBvv///v3/9fHw//////+noJ3/RToy/1lQ + Sf9QRj//VUtD/1RKQv5USkL/VEpC/1RKQv9USkL/VEpC/1RKQv9VTET/RTox/4B4cv/Oysb/8/Du//// + ///w7ev/5+Ph///////+/f3/9fHv/6ymov9NQzv/VkxE/1JIQf9USkL/VEpC/1RKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1RKQv9SSEH/WVBJ/0g+Nv9HOzP/aGBZ/4V9eP+ln5v/raik/5+YlP+Lg3//YllS/0U6 + Mv9WS0X/VEpC/1RKQv9USkL/VEpC/1RKQvxUSkL/VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/UEY//1hO + R/9ZT0j/T0Q8/0k+Nv9ANCz/PjMp/0Q5MP9GOzL/UUY//1lPSf9SSEH/VEpC/1RKQv9USkL/VEpC/1RL + Q/1SSEH9VEpC/1RKQv9USkL/VEpC/1RKQv9USkL/VUtD/1FHQP9RR0D/VkxE/1lPSP9cU0z/XFRN/1pQ + Sv9ZT0j/VUtD/1BGP/9USkL/VEpC/1RKQv9USkL/UkhB/E9GP9xWTEP/UkhC/VRKQv9USkL/VEpC/1RK + Qv9USkL/VEpC/1VLQ/9VS0P/UkhB/1FHQP9QRj3/T0U9/1BGP/9QRj//UkhB/1VLQ/9USkL/VEpC/1RK + Qv9SSEL9VkxD/wgGBRhPRj/gVUtD/1RKQvxUSkL/VEpC/lRKQv9USkL/VEpC/1RKQv9USkL/VEpC/1VL + Q/9VS0P/VUtD/1VLQ/9VS0P/VEpC/1RKQv9USkL+VEpC/1JKQvtVS0P/TEM70wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUSULyVUtD/1RK + Qv5VS0P/UUdA/1VLQ/9aUUr/WlBJ/1pRSv9bU0z/V01G/1BGP/9USkL/VEpC/1RKQv5VS0P/VEpC/VRK + Qv5VS0P/UkhB/1hOR/9SR0D/Qjgu/0U5Mf9EOTD/QDQs/05EPP9cU0z/UUdA/1JIQf9USkL/VEpC/lRK + Qv5VS0P/UkhB/1dNRv9JPzb/X1VO/5yVkP+zrqr/urWx/6qkoP9tZV7/QDQs/1hPSP9VS0P/VEpC/1RK + Qv9VS0P/UUdA/1hOR/9JPzb/hHx4//Lv7f///v7///////79/P/39PL//vv5/7+5tv9IPTX/UUdA/1RK + Qv9USkL/UkhB/1ZMRP9PRT3/Zl1W//Xz8v/8+fj/+/f1/9XRzv9fVk//WE9I/25lX//g3dv/2NTR/09E + PP9XTkf/UkdA/1BGP/9bUUr/Qjcu/6Oemv//////8O3q//////99dnD/Qjgw/11UTf9EODD/SD41/66o + pP9hV1D/UEY//1ZMRP9QRj//WlBK/0I4MP+3sa7///////j18//z8O3/YllS/1RKQv9USkH/W1NM/2FX + Uf9GOzL/UEY//1VLQ/9USkL/UEY//1pRSv9CNy7/sKun///////39PH/8u/t/19VT/9PRDz/V01G/0c9 + Nf8/Myv/T0U9/1ZMRP9USkL/VEpC/1BGP/9aUEn/RTox/5CJhf////7/9/Px//v49v9pYFr/T0U9/05E + PP9/d3L/w767/5WPi/9PRT3/VkxE/1JIQf9USkL/VEpC/1RKQv9XTUb/6ujn//n29f///Pr/kImE/0k/ + N/9mXlf/8O/t////////////iIB7/0c9Nf9YT0j/VUtD/1FHQP9YTkj/Rz01/4qDff/9+/r//////8jE + wP87MCb/ST83/9XRzv/x7uz//vz7/6einv9BNS3/W1FK/1RKQv9VS0P/UUdA/1hOR/9HPTX/jYaB//Dt + 6///////urWy/11UTP/Rz83///////Xz8f92bWj/TEE6/1dNRv9USkL+VEpC/1VLQ/9SSED/WE5H/0c9 + Nf9fVU7/o52Y/9LOy//W0c//19PQ/8G8uP92bmj/TEE4/1ZMRv9SSEH/UkhB/FRKQv5USkL/VUtD/1FH + QP9YT0j/UUdA/0I4Lv9CNy7/TUM7/0tAOP9CODD/TEE6/1dNRv9SSEH/VEpC/lVLQ/hVSkL/VEpC/1RK + Qv9VS0P/UUdA/1VLQ/9bUUr/W1FK/1dNRv9YTkf/WlFK/1dNRv9SSEH/VEpC/1RKQv8bFxVCVUtD/lJI + Qf5USkL/VEpC/1VLQ/9SSEH/UEY//1BGP/9SSEH/UUdA/1BGP/9RR0D/VUtD/1RKQv9USkL3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Case.FreeBenchmarking.vbproj b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Case.FreeBenchmarking.vbproj new file mode 100644 index 00000000..5944cc59 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Case.FreeBenchmarking.vbproj @@ -0,0 +1,122 @@ + + + + Debug + AnyCPU + + + + + {4A831FE7-CF65-4910-8672-AA3312879083} + Library + Case.FreeBenchmarking + 512 + Windows + v4.0 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + + + Case.FreeBenchmarking + + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + + + 4.0 + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + form_Main.vb + + + Form + + + + + + form_Main.vb + + + + + {7AC4A9CB-0628-4E27-89DB-8B0D8C0D2E35} + Case.Lic + + + + + + + + \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/app.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/app.vb new file mode 100644 index 00000000..b10d1362 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/app.vb @@ -0,0 +1,203 @@ +Imports Autodesk.Revit.ApplicationServices +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.UI +Imports System.Windows.Media.Imaging +Imports System.IO +Imports System.Reflection + +Imports Autodesk.Revit.UI.Events +Imports Autodesk.Revit.DB.Events + + +Class app + + Implements IExternalApplication + + Private _s As clsSettings + Private _eventSWC As clsSWC + Private _eventDocs As clsDocs + Private _iCnt As Integer = 0 + Private _RevitUserName As String = "" + Private _RevitBuild As String = "" + Private _RevitName As String = "" + Private _RevitNumber As String = "" + + Private _path As String = Path.GetDirectoryName(Assembly.GetExecutingAssembly.Location) + +#Region "Event Handler - SWC" + + ''' + ''' Sync Start + ''' + ''' + ''' + ''' + Private Sub SwcStart(ByVal sender As Object, + ByVal e As DocumentSynchronizingWithCentralEventArgs) + + ' The SWC Class + _eventSWC = Nothing + Try + + ' Settings + _s = New clsSettings(e.Document) + If Not String.IsNullOrEmpty(_s.Doc.Application.Username) Then + _RevitUserName = _s.Doc.Application.Username + Else + _RevitUserName = "" + End If + If Not String.IsNullOrEmpty(_s.DocumentName) Then + _eventSWC = New clsSWC(_s, e.Comments) + End If + + ' Model ID Attempt Count + _iCnt = 0 + + Catch ex As Exception + + ' Model ID Attempt Count + _iCnt = 5 + + End Try + + End Sub + + ''' + ''' Sync To Central End Event + ''' + ''' + ''' + ''' + Sub SwcEnd(ByVal sender As Object, + ByVal e As DocumentSynchronizedWithCentralEventArgs) + + ' Close the Session + If Not _eventSWC Is Nothing Then + + ' Finalize + _eventSWC.EndSwc() + + Try + + ' Write STC end record + AppendLog("Sync With Central", + _eventSWC.SWCstart, + Now().ToString, + "Model: " & _s.DocumentName & "; Revit Build: " & _RevitBuild) + + Catch ex As Exception + ' This should NEVER happen + End Try + + End If + + End Sub + +#End Region + +#Region "Event Handler - Document Opening" + + ''' + ''' Opening a Doc + ''' + ''' + ''' + ''' + Private Sub DocStart(ByVal sender As Object, + ByVal e As DocumentOpeningEventArgs) + + ' Fresh Docs + _eventDocs = New clsDocs(e.PathName) + + End Sub + + ''' + ''' Opened a Doc + ''' + ''' + ''' + ''' + Private Sub DocDone(ByVal sender As Object, + ByVal e As DocumentOpenedEventArgs) + + ' Record Data + If Not _eventDocs Is Nothing Then + + ' Log + AppendLog("Document Open", + _eventDocs.TimeStart, + Now().ToString, + "Path: " & _eventDocs.FilePath & "; File Size: " & _eventDocs.FileSizeMb) + + End If + + End Sub + +#End Region + + ''' + ''' Implement the external application + ''' + ''' + ''' + ''' + Public Function OnStartup(ByVal a As UIControlledApplication) As Result Implements IExternalApplication.OnStartup + + Try + + ' Add Events + AddHandler a.ControlledApplication.DocumentSynchronizingWithCentral, + New EventHandler(Of DocumentSynchronizingWithCentralEventArgs)(AddressOf SwcStart) + AddHandler a.ControlledApplication.DocumentSynchronizedWithCentral, + New EventHandler(Of DocumentSynchronizedWithCentralEventArgs)(AddressOf SwcEnd) + AddHandler a.ControlledApplication.DocumentOpening, + New EventHandler(Of DocumentOpeningEventArgs)(AddressOf DocStart) + AddHandler a.ControlledApplication.DocumentOpened, + New EventHandler(Of DocumentOpenedEventArgs)(AddressOf DocDone) + + ' Defaults + _RevitBuild = a.ControlledApplication.VersionBuild + _RevitName = a.ControlledApplication.VersionName + _RevitNumber = a.ControlledApplication.VersionNumber + + ' Return Success + Return Result.Succeeded + + Catch + + ' Fail + Return Result.Failed + + End Try + + End Function + + ''' + ''' Implement the external application + ''' + ''' + ''' + ''' + Public Function OnShutdown(ByVal a As UIControlledApplication) As Result Implements IExternalApplication.OnShutdown + + Try + + ' Unsubscribe from Events + RemoveHandler a.ControlledApplication.DocumentSynchronizingWithCentral, + New EventHandler(Of DocumentSynchronizingWithCentralEventArgs)(AddressOf SwcStart) + RemoveHandler a.ControlledApplication.DocumentSynchronizedWithCentral, + New EventHandler(Of DocumentSynchronizedWithCentralEventArgs)(AddressOf SwcEnd) + RemoveHandler a.ControlledApplication.DocumentOpening, + New EventHandler(Of DocumentOpeningEventArgs)(AddressOf DocStart) + RemoveHandler a.ControlledApplication.DocumentOpened, + New EventHandler(Of DocumentOpenedEventArgs)(AddressOf DocDone) + + Catch + End Try + + ' Return Success + Return Result.Succeeded + + End Function + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/cmd.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/cmd.vb new file mode 100644 index 00000000..8794a4b2 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Entry/cmd.vb @@ -0,0 +1,51 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + + +Public Class cmd + + Implements IExternalCommand + + ''' + ''' Command Entry Point + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2014") Then + + ' Failure + message = "This Add-In was built for Revit 2014, please contact CASE for assistance..." + Return Result.Failed + + End If + + ' Construct and Display the Form + Using m_d As New form_Main(New clsSettings(commandData, elements)) + m_d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsDocs.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsDocs.vb new file mode 100644 index 00000000..d3abe011 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsDocs.vb @@ -0,0 +1,34 @@ +Imports System.IO + +Public Class clsDocs + +#Region "Public Properties" + + Public Property FilePath As String + Public Property TimeStart As Date + Public Property FileSizeMb As Double + +#End Region + + ''' + ''' Sync With Central Data Tracker + ''' + ''' + ''' + Public Sub New(fPath As String) + + ' Widen Scope + FilePath = fPath + TimeStart = Now() + + ' Starting File Size + Try + Dim MyFile As New FileInfo(FilePath) + FileSizeMb = MyFile.Length / 1024 + Catch ex As Exception + FileSizeMb = -1 + End Try + + End Sub + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsSWC.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsSWC.vb new file mode 100644 index 00000000..f7143638 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/Events/clsSWC.vb @@ -0,0 +1,59 @@ +Imports System.IO + +Public Class clsSWC + + Private _s As clsSettings + +#Region "Public Properties" + + Public Property Comment As String + Public Property SWCstart As Date + Public Property FileSizeMbStart As Double + Public Property FileSizeMbEnd As Double + +#End Region + + ''' + ''' Sync With Central Data Tracker + ''' + ''' + ''' + ''' + Public Sub New(s As clsSettings, cmt As String) + + ' Widen Scope + _s = s + SWCstart = Now() + If Not String.IsNullOrEmpty(cmt) Then + Comment = cmt + Else + Comment = "" + End If + + ' Starting File Size + Try + Dim MyFile As New FileInfo(_s.DocumentName) + FileSizeMbStart = MyFile.Length / 1024 + Catch ex As Exception + FileSizeMbStart = -1 + End Try + + End Sub + + ''' + ''' End Data + ''' + ''' + Public Sub EndSwc() + + ' Ending File Size + Try + Dim MyFile As New FileInfo(_s.DocumentName) + FileSizeMbEnd = MyFile.Length / 1024 + Catch ex As Exception + FileSizeMbEnd = -1 + End Try + + End Sub + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsAutomationTest.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsAutomationTest.vb new file mode 100644 index 00000000..4e0cf11a --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsAutomationTest.vb @@ -0,0 +1,317 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Public Class clsAutomationTest + + Private _s As clsSettings + + ''' + ''' Automation Constructor + ''' + ''' + ''' + Public Sub New(s As clsSettings) + + ' Widen Scope + _s = s + + End Sub + +#Region "Sequence 1 Members" + + Public Function Test1() As Boolean + + ' Fail Test + Dim FailCaught As Boolean = False + + ' Basic1 Elements for Initial Copy + Dim m_elements1 As New List(Of ElementId) + + Try + + ' Levels + Using t As New Transaction(_s.Doc, "Benchmarking - Level Creation") + If t.Start Then + Try + + ' Step the levels + For i = 20 To 2520 Step 10 + + Try + + Dim m_level As Level = _s.Doc.Create.NewLevel(i) + m_level.Name = Environment.UserName & " Level " & i.ToString + _s.GetLevels() + + Catch ex As Exception + + End Try + + Next + + ' Success + t.Commit() + _s.Doc.Regenerate() + + Catch ex As Exception + + ' Failure + FailCaught = True + + End Try + End If + End Using + + ' Rooms + Using t As New Transaction(_s.Doc, "Benchmarking - Room Creation") + If t.Start Then + Try + + ' Wall Curve + Dim pt1 As New XYZ(0, 0, 0) + Dim pt2 As New XYZ(0, 9, 0) + Dim pt3 As New XYZ(9, 9, 0) + Dim pt4 As New XYZ(9, 0, 0) + Dim m_line1 As Line = _s.CommandData.Application.Application.Create.NewLine(pt1, pt2, True) + Dim m_line2 As Line = _s.CommandData.Application.Application.Create.NewLine(pt2, pt3, True) + Dim m_line3 As Line = _s.CommandData.Application.Application.Create.NewLine(pt3, pt4, True) + Dim m_line4 As Line = _s.CommandData.Application.Application.Create.NewLine(pt4, pt1, True) + + ' First Wall type + Dim m_wt As WallType = _s.FirstWallType + + ' Lowest level + Dim m_level As Level = Nothing + For Each l As Level In _s.Levels.Values + m_level = l + Exit For + Next + + If Not m_wt Is Nothing And Not m_level Is Nothing Then + + ' Create the Walls and Room + Dim w As Wall = _s.Doc.Create.NewWall(m_line1, m_wt, m_level, 10, m_level.Elevation, False, False) + m_elements1.Add(w.Id) + w = _s.Doc.Create.NewWall(m_line2, m_wt, m_level, 10, m_level.Elevation, False, False) + m_elements1.Add(w.Id) + w = _s.Doc.Create.NewWall(m_line3, m_wt, m_level, 10, m_level.Elevation, False, False) + m_elements1.Add(w.Id) + w = _s.Doc.Create.NewWall(m_line4, m_wt, m_level, 10, m_level.Elevation, False, False) + m_elements1.Add(w.Id) + + ' Place Room + Dim m_room As Architecture.Room = _s.Doc.Create.NewRoom(m_level, New UV(5, 5)) + m_room.Name = Environment.UserName & " HDR Room" + m_elements1.Add(m_room.Id) + + ' Succes + t.Commit() + + End If + + Catch ex As Exception + + ' Failure + FailCaught = True + + End Try + End If + End Using + + ' Array + Using t As New Transaction(_s.Doc, "Benchmarking - Room Array") + If t.Start Then + + ' Ilist + Dim m_i As IList(Of ElementId) + m_i = m_elements1.ToList + + Try + + ' Array + For i = 10 To 500 Step 10 + Dim m_eids As New List(Of ElementId) + m_eids = ElementTransformUtils.CopyElements(_s.Doc, m_i, New XYZ(0, i, 0)) + m_elements1.AddRange(m_eids) + Next + + ' Commit + t.Commit() + + Catch ex As Exception + + ' Failure + FailCaught = True + + End Try + + End If + End Using + + ' Group This Row of Rooms and Walls + Dim m_g As Group = Nothing + Using t As New Transaction(_s.Doc, "Benchmarking - Grouping Stuff") + If t.Start Then + + Try + + ' Group the Collection + Dim m_eset As New ElementSet + For Each x In m_elements1 + m_eset.Insert(_s.Doc.Element(x)) + Next + + ' Group It + m_g = _s.Doc.Create.NewGroup(m_eset) + + ' Commit + t.Commit() + + Catch ex As Exception + + End Try + + End If + End Using + + ' Copy Group + Using t As New Transaction(_s.Doc, "Benchmarking - Copying Group") + If t.Start Then + + ' Copy the group several times + For i = 10 To 500 Step 10 + + Try + + Dim m_eids As New List(Of ElementId) + ElementTransformUtils.CopyElement(_s.Doc, m_g.Id, New XYZ(i, 0, 0)) + m_elements1.AddRange(m_eids) + + Catch ex As Exception + + End Try + + Next + + ' Commit + t.Commit() + + End If + End Using + + ' Copy to Each Level + Using t As New Transaction(_s.Doc, "Benchmarking - Copying All to Each Level") + If t.Start Then + + Try + + ' Iterate Each level + For Each l As Level In _s.Levels.Values + + Next + + + ' Commit + t.Commit() + + Catch ex As Exception + + End Try + End If + End Using + + ' Success + Return True + + Catch ex As Exception + + ' Failure + Return False + + End Try + + End Function + +#End Region + +#Region "Sequence 2 Members" + + Public Function Test2() As Boolean + + Try + + ' Success + Return True + + Catch ex As Exception + + ' Failure + Return False + + End Try + + End Function + +#End Region + +#Region "Sequence 3 Members" + + Public Function Test3() As Boolean + + Try + + ' Success + Return True + + Catch ex As Exception + + ' Failure + Return False + + End Try + + End Function + +#End Region + +#Region "Sequence 4 Members" + + Public Function Test4() As Boolean + + Try + + ' Success + Return True + + Catch ex As Exception + + ' Failure + Return False + + End Try + + End Function + +#End Region + +#Region "Sequence 5 Members" + + Public Function Test5() As Boolean + + Try + + ' Success + Return True + + Catch ex As Exception + + ' Failure + Return False + + End Try + + End Function + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsSettings.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsSettings.vb new file mode 100644 index 00000000..e6e21a33 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Classes/clsSettings.vb @@ -0,0 +1,129 @@ +Public Class clsSettings + + Private _doc As Document + +#Region "Public Properties" + + Public Property CommandData As ExternalCommandData + Public Property ElementSet As ElementSet + Public Property Levels As SortedDictionary(Of Double, Level) + + ''' + ''' The Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return CommandData.Application.ActiveUIDocument.Document + Catch ex As Exception + Return _doc + End Try + End Get + End Property + + ''' + ''' Document Name And Path + ''' + ''' + ''' + ''' + Public ReadOnly Property DocumentName As String + Get + Try + If Doc.IsWorkshared Then + ' Test for a valid file name + If Not String.IsNullOrEmpty(ModelPathUtils.ConvertModelPathToUserVisiblePath(doc.GetWorksharingCentralModelPath())) Then + ' Only use central file name if the model has been saved + Return ModelPathUtils.ConvertModelPathToUserVisiblePath(doc.GetWorksharingCentralModelPath()) + Else + Return "" + End If + Else + ' Use the document title + Return Doc.PathName + End If + Catch ex As Exception + Return "" + End Try + End Get + End Property + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + ''' + Public Sub New(cmdData As ExternalCommandData, eset As ElementSet) + + ' Widen Scope + CommandData = cmdData + ElementSet = eset + + End Sub + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(d As Document) + + ' Widen Scope + _doc = d + + End Sub + + '' '' ''' + '' '' ''' Generate Levels + '' '' ''' + '' '' ''' How many levels to create + '' '' ''' Spacing between Levels + '' '' ''' + '' '' ''' + '' ''Public Function BenchLevelCreator(cnt As Integer, sp As Integer) + + '' ''End Function + + ''' + ''' Get All Levels in the Model + ''' + ''' + Public Sub GetLevels() + ' Fresh List + Levels = New SortedDictionary(Of Double, Level) + ' Collector + Using col As New FilteredElementCollector(Doc) + col.OfClass(GetType(Level)) + For Each x In col.ToElements + Try + Dim l As Level = TryCast(x, Level) + Levels.Add(l.Elevation, l) + Catch ex As Exception + End Try + Next + End Using + End Sub + + ''' + ''' Return the First Wall type + ''' + ''' + ''' + Public Function FirstWallType() As WallType + ' Collect Types + Using col As New FilteredElementCollector(Doc) + col.OfClass(GetType(WallType)) + For Each x In col.ToElements + Return x + Next + End Using + Return Nothing + End Function + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.Designer.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.Designer.vb new file mode 100644 index 00000000..56169aaf --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.Designer.vb @@ -0,0 +1,118 @@ + _ +Partial Class form_Main + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(form_Main)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Button5 = New System.Windows.Forms.Button() + Me.Button4 = New System.Windows.Forms.Button() + Me.Button3 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Button1 = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.Button5) + Me.GroupBox1.Controls.Add(Me.Button4) + Me.GroupBox1.Controls.Add(Me.Button3) + Me.GroupBox1.Controls.Add(Me.Button2) + Me.GroupBox1.Controls.Add(Me.Button1) + Me.GroupBox1.Location = New System.Drawing.Point(12, 12) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(480, 275) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Automation Commands" + ' + 'Button5 + ' + Me.Button5.Location = New System.Drawing.Point(18, 219) + Me.Button5.Name = "Button5" + Me.Button5.Size = New System.Drawing.Size(137, 40) + Me.Button5.TabIndex = 4 + Me.Button5.Text = "Command 5" + Me.Button5.UseVisualStyleBackColor = True + ' + 'Button4 + ' + Me.Button4.Location = New System.Drawing.Point(18, 173) + Me.Button4.Name = "Button4" + Me.Button4.Size = New System.Drawing.Size(137, 40) + Me.Button4.TabIndex = 3 + Me.Button4.Text = "Command 4" + Me.Button4.UseVisualStyleBackColor = True + ' + 'Button3 + ' + Me.Button3.Location = New System.Drawing.Point(18, 127) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(137, 40) + Me.Button3.TabIndex = 2 + Me.Button3.Text = "Command 3" + Me.Button3.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Location = New System.Drawing.Point(18, 81) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(137, 40) + Me.Button2.TabIndex = 1 + Me.Button2.Text = "Command 2" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Button1 + ' + Me.Button1.Location = New System.Drawing.Point(18, 35) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(137, 40) + Me.Button1.TabIndex = 0 + Me.Button1.Text = "Command 1" + Me.Button1.UseVisualStyleBackColor = True + ' + 'form_Main + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(504, 299) + Me.Controls.Add(Me.GroupBox1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "form_Main" + Me.Text = "Benchmarking" + Me.GroupBox1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Button5 As System.Windows.Forms.Button + Friend WithEvents Button4 As System.Windows.Forms.Button + Friend WithEvents Button3 As System.Windows.Forms.Button + Friend WithEvents Button2 As System.Windows.Forms.Button + Friend WithEvents Button1 As System.Windows.Forms.Button +End Class diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.resx b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.resx new file mode 100644 index 00000000..d5099864 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAABIXAAASFwAAAAAAAAAA + AAD//////////////////////////////////////////////////f////3////////////////////+ + /////P7//fr8//z6+////v7///////////////////////////////////////v8/f////7////+//// + /f///fv//fv5//z6+P/9+/r////9/////////v3///79///////////////////////////////+///+ + /f///v////7//////////////////////////////////////////////////////////////v////7/ + ///+/////v////////////////////////////////////////////////////////////////z9///6 + /f//+/3///3+///+///////////////+/////////Pr6//37/f///v////////7+///8/P3//Pv8//z8 + /f/9/v////79/////////////////////v///v7///7+/////////v3////////////7+vn/9/X0//j2 + 9f/9+vn///38///+/P///v3///7////+//////////////////////////////////////////////// + //////////////7////+/////v////7///////////////////////////////////////////////// + ///////////////+/v///f7///v+///7/v///P7///3+//78/v/8+/z/+vj7//39/f///v///Pz9//r6 + +//8/P3//f7+//3+/v/9/v7//v////v7+//6+vr/+Pj5//j4+f/6+vr//Pz8//7///////////7+//r6 + +v///////v7+//38/P/8/Pv//Pv6//v6+v////7///////////////////////////////////////// + ///////////////////////////////////+/////v////7////+//////////////////////////// + /////////////////////////////////////v////3////9/////f////7////+/////f7//fz9//z7 + /P/9/f7//fz9//r6/P/6+vz//f3+//////////////////////////////////////////////////// + /////////Pz8//r6+v/8/Pz/+/v7//f39//5+fn//v7+/////v/+/v7//v7+//r6+/////////////// + /////////////////////////////////////////////////////////v////7////+/////v////// + //////////////////////////////////////////////////////////7////9/////v///v7///38 + /v/8/P3//Pz9//7//////////f7////////////////////////+////+Pr7//X4+f/z9ff/7/Dx//Dy + 8//y8/T/8fL0//Dx8//z9PX/+Pn7//3////////////////////4+vn/+Pj4//r7/f/5+/3/+fr8//n6 + /P/3+Pv///////////////////////////////////////////////////////////////////////7/ + ///+/////v////7///////////////////////////////////////////////////////////////// + /////v////3///78/v/8+v3/+vr8//z7/P/////////////////8/Pz/7e7v/9/g4P/N0NH/trm7/6Gk + pv+SlZf/iY2Q/3+Chf9+gYX/foCE/3x+gv97foH/g4eK/5qdoP+1ubz/yczR/9zg4P/q7e7/+f3+//// + ////////9vr9//X4+v/3+vz/+/7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/P7//fv+//77/////v//////////////////+Pn8//Hw9P/X19r/tra4/4iK + jf9fYWT/REdJ/zI1N/8gIyX/CAsO/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8PEhb/Jiks/zk7 + P/9gY2f/goWJ/7C0uf/b3uL/8fP0//v//////////f////r+///+/////v////7////+//////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+fj7//f2+f/8+v3//////////////v//7Ozw/7/B + xP+en6P/TU5R/yYoK/8LDhL/AAAA/wAAAv8ECQz/DBIV/wgOEf8BBgn/AwgN/wYMEf8LERb/DxUb/w8U + Gv8JEBT/AwgO/wABBv8AAAH/AAAE/wIIDf8eIyj/UFRa/42TmP/FzNH/6O/z//X6/v/3/P///P////z/ + ///8/////P////3////9/////f////3////9/////v////7///////////////////////////////// + /////////////////////////////////////////////////////////////////////v////3////+ + ///39/r/19bb/5OTl/87PUD/AQEE/wAAAP8CBAf/CQwQ/w8TFv8MEBP/BwsO/wYLDv8LEBT/ERYZ/xEX + HP8MEhf/BQsQ/wIIDf8FCxD/ChAV/wwRF/8LERb/CQ4U/wULEP8ABw3/AAEG/wAAAf8ICxH/Mjg9/3yB + hv/K0NT/+f7+//z////8/////P////z////9/////f////3////9/////f////7////+//////////// + //////////////////////////////////////////////n5+f/4+Pj///////z8/P/x8fH///////// + ///8/P//+/z////////29/j/pqit/zg7P/8LDhL/Cg4T/wEFCf8ECQ3/EBUZ/wYNEf8GDBD/ERcc/wkO + Ev8AAgX/BxAU/wwUGP8HDxT/CREW/wgQFf8HDxT/DRQZ/wwTGP8CCg//AQcM/wcQFP8JERb/ChIX/wQL + EP8ABgr/AAYL/wEBBv8OEBT/NT1C/4OKjv/v9vP/+/////b9/P/0/fr/+v/+//j9/f/4/fz//f////3/ + ///+////+v38//7//////////Pv7//r4+P/9/Pz//////////////////f39//39/f/+/v7//Pz8//z8 + /P/+/v7//Pz8//r6+v/7+/v//Pz8///////g4eP/eHp+/y0vNP8ZHCD/CgsQ/wAABf8OERb/BQoO/xAV + Gf8JDxP/AwoO/w0TGP8LExb/DBIV/xIZHf8EDBD/Bw8T/wwTGP8FDhL/AAUK/wYLEP8OFhv/Dhcc/wsU + Gf8LExf/AQcM/woSF/8KExj/Bw8U/w0UGf8NEhj/AgkN/wIKEP8XHyP/SFBP/6Cpp//3//7///////n+ + /v/3/vz/+//+//b5+f/s8PD/+/79//j6+v/9/v7////////////+/v7///7+//v8/P////////////v7 + +//8/Pz///////v7+//19fX///////7////t7e3/+/r6///////Y2t7/dnp//xkbIP8AAAL/CQ4T/w0R + Fv8ECA3/Cg8V/wUMEP8NExj/ChEW/wUNEv8HDxP/BQ4S/wwVGf8SGx//AAgM/wEIC/8PFRj/ERkd/wsR + Ff8ECg3/AAYJ/wECBf8ABAf/AAgL/wAFB/8IDxH/Bw4R/wEHC/8HDhL/DRUZ/wcPE/8ABQn/AAYI/wgS + Ef8kLy3/eoSC/9Ha2P/7////+/////r////6/f3/9fn5//3////8/f3//v////z8/P/8/Pz///////// + ///9/Pz////////////9/f3//Pz8//7+/v/8/Pz/+Pj4///////8/f3/7e3t///////n6Ov/cnV7/xcY + Gv8NDhP/ExUa/wACCP8GCg//Exge/wMIDf8JEBX/ChEW/wgPFP8MFBn/CBEW/wAHC/8ECxD/DRYb/wYP + FP8MFBb/Bg0Q/wMFCP8BBgn/DBMW/xccH/8SFhr/DxQX/xIaHP8MFBb/DBMV/wcOEf8DCQz/AAYJ/wAE + B/8BBAb/Bg0R/xQcHv8HEhD/AQwK/xEXFf9DTUv/sLm5//3////8////9Pn5//7////6/Pz///////// + ///5+vn/+fn4//37/P///v////////////////////////39/f/9/f3///////z8/P/6+vr//f39//r6 + +v/4+Pf/jZGW/x0hJ/8AAAD/EBMZ/xkdJP8AAgj/BQkO/xUcIf8CCA3/CRAV/wYNEv8HDxT/Dhcc/woU + Gf8CCxD/BAwR/wgTGP8HExf/CAwN/wUKDP8WGRr/Nzs9/2hvcP+Rl5n/mZ+h/5abnf+YnZ7/kZeY/4OJ + i/9sc3T/U1pb/zE4Of8SFhb/AAED/wAFCP8SFhf/CxgV/wYPDf8GDAr/AAMC/zY6Ov+cpKP/6e/u//v/ + ///3+/v/9vn5//z+/v/7/Pz/+/z7//z8+//9/P3//fv8//38/P/////////////////+/v7//f39//// + ///9/f3/9vb2////////////vL27/y0vNP8DCA7/CxAX/wcLEf8ECA7/AggO/wkPFf8KExf/BQ0T/wQM + Ev8FDhP/ChMY/wgSF/8FDhP/CBUa/wsWG/8DCxH/AAUK/wYHB/8/Q0P/h42N/7e7u//d4+P//f////// + ///////////////////9////5+3s/8zQ0P+nraz/eH59/0RLS/8RFRX/AAAA/wYSEP8ABgT/FiIg/wsY + Fv8AAAD/HCUk/4mSkf/i5+f//f////r9/f/7/v7/+vv6//v8/P////////////z6+v/79/f///////// + ///////////////////+/v7//v7+//v7+///////4+Pj/1tbWv8EBAj/BQkP/xEWHP8IDBL/AwYM/wcN + E/8KERf/Bg4T/wYNFP8DDBL/ChMY/wwXHf8DCg//AAYL/wkVG/8LFBn/AAEH/wcKD/9NU1L/r7Wz//v/ + ////////+v/+//r+/v/7////+v////X7+v/y9/j/9/z8//7///////////////P39//Eycn/c3h4/yQq + KP8ACAb/AAUC/w0YFf8IFhP/AwsJ/wAFBP8RGRj/eX9+/+bo6P/4/Pz///////7//v/4+Pj//fz8//// + ///8+vr//Pn5//////////////////7+/v/+/v7/////////////////+vr6/6Ojo/8ZGBj/AAUK/wMJ + Ef8FChD/DRUb/w4VG/8IDxX/Bw4V/wgQF/8DCxL/Bg8V/wkSGP8JFBr/BAsQ/wMMEf8GERf/AAUL/wMJ + D/9DUFb/xszK//f8+f/9////9/v5//D18v/2+Pf///////z//v/5/vv//f////z+/v/7//7/+f36//v9 + /f/+/////v////P29P+xt7T/MkE//wMMCf8ACQb/AQ8M/woXFf8HEhH/AAMC/xQaGf9sc3P/zNDQ//r8 + /P//////9vf3//z7+////////vz8//78/P/////////////////39/f/+Pj4/////////////////9/f + 3/9mZmb/BgYG/wQIDv8NEhr/CQ8V/wYMFP8FDBL/CA8V/woQF/8IEBb/Bw8V/wkSGP8CCxH/AQsR/wgS + GP8PGyH/DRUZ/wAAAv8dKjD/prK3//j9+///////+f37//r+/P/8//7//f////z//v/6/vz//P/+//f8 + +v/x9fP/+v38///////4/Pr/9vv4//v+/f/9/v7/9fv5/8HRz/9EU1H/CBYT/wALCP8HEQ//DBgW/wMJ + CP8FCAb/JSwr/2NmZv/Hy8v//v7+//39/f/9+/v///////79/f/+/Pz//////////////////f39//3+ + /v/9/////f////n+/v+2u73/ChMV/wkREv8NExn/CA0T/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQR + E/8ACQ3/DRkc/wcQEf8ACAv/Exod/woNDv8LCwz/gIKD//n7/P///////f39//////////////////// + ///////////////////+/////v7+//////////////////7///////////////3+/v/z9PT/6erq/3B0 + dP8JCgn/AAQC/wwWFf8FDgz/Aw4M/wYQDv8IDAr/ZG9t//X8/P/0+/r/9vr6///////6+/v//Pr6//// + ///////////////////+////+/39//v+///t8/X/kpia/wAEBv8BCgv/CxIX/wkOFP8IDxX/Bw8V/wYP + Ff8FEBT/BRAU/wQRE/8EERP/Aw0P/wgUFv8DDQ//Bg4Q/w8WF/8EBwj/LTAx/7i5uv////////////7/ + //////////////////////////////////////////////////////////////////////////////// + //////////////f19f/l5+f/g4eG/xEXFf8AAAD/BQ0N/wALCP8BCQf/Aw8M/yYzMf+vt7f/8/n5//r+ + /v/y9fT/+Pn5//7+/v////////////////////////////n7/P/6/f//3ePl/2Rpav8BAwX/AAUH/wgP + FP8KDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/wgUFf8DDhD/AAoL/w4WGP8IDQ7/CwwN/21y + c//v8PL//v/////+/v////////////////////////////////////////////////////////////// + /////////////////////////f39//Pz8//7+vr//////+bq6f+Fi4r/HyQj/wEKCP8KFRP/BhAO/wYQ + D/8ECQf/UFdW/+rx8P//////7fHw//n6+v///////////////////v///v7+///////5+/z//P7//83T + 1f81Oj3/AgkL/wMKDf8IDhT/CQ8V/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8MFxn/Aw0P/wAJ + Cv8QGBr/AQQF/xkaGv+ipqj///////v9/f/+/v7///////////////////////////////////////// + //////////////////////////////////////////////39/f/19fX////////////+////6ezs/46W + lf8gKSf/AAIC/wUNC/8OGhf/CxMR/xsjIv+9xcT/+/7+//n6+f/5+/v/+/v7/////////////fz9//79 + /f//////+vv8//7///+/xcb/DxYY/wcRE/8JExX/CA8U/wkPFf8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQR + E/8EERP/CRUY/wYSFf8DCg3/CRQW/wABA/8rLS7/wsbH///////4+vz//v7+//////////////////// + /////////////////////////////////////////////////////////////////////////v7+//z8 + /P//////+vz8///////r7+//gYmI/x4iIf8ABQT/BQ8M/woTEv8DCgn/eoF//+3w8P//////8/X1//Py + 8v////////////37/P/+/f7///////v8/f/9////sba4/wACA/8LExX/CRMV/wcOE/8JDxb/CA8V/wcP + Ff8GDxX/BRAU/wUQFP8EERP/BBET/wQQE/8KFhn/Bg4Q/wMPD/8CBgj/REhK/9bb3P/9/f3/+/z9//7/ + //////////////////////////////////////////////////////////////////////////////// + //////////////z9/f/6+/v/+fv6//r7+//5/Pz//////+Xp6P+QmJf/NT08/wcMC/8AAgH/CQ8O/11j + Yv/e4eD///////Hz8v/08vL//////////////f7///7///7////9/v7//P///6arrf8AAAD/CxMV/wQO + Dv8GDRL/ChAW/wcPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8DDxH/CRQX/wcQEf8CCgv/CA8Q/2Jn + aP/m6uv/+vv7//////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/4+fn/+fr6//P19f/8/f3/+fz8//f7+///////9Pr5/6+1 + tf9WXVz/MDc2/1VbWv+SmJf/4+fm///////5+/v/+/v7//////////////7////////+//////////v+ + /v+fpKb/AAAA/w0WF/8CDAz/BgwR/woQF/8HDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/BhIU/wQP + Ef8HEBL/AQkK/wsREv90eHn/9fj5//z+/v/9/v7///////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//L08//8/f3///////f6 + +f/5/Pz/9/r6//b6+v/8////19vb/7S4uP/Mz8//5urp//r9/P///////f7+//z+/v////////////// + /////v7//v7+///////6/f3/naOk/wAAAP8RGRv/BQ4P/wYMEf8KEBf/Bw8V/wcPFf8GDxX/BRAU/wUQ + FP8EERP/BBET/wsXGf8CCw3/Bw8Q/wMKC/8MERL/e4CB//z////8/f3/9/n6//7///////////////// + /////////////////////////////////////////////////////////////////////////v7+//r7 + +//9/v7/+fv7//3+/v/8//7/9Pj4//j7+//6/f3/9Pj2//v//v/5/f3//P////7////9/////v////// + ///9/v7//////////////////fz9//z8/f//////9vn5/5adn/8BBwn/Bg4Q/wUOEP8HDhP/ChAW/wgP + Ff8HDxX/Bg8V/wUQFP8FEBT/BBET/wQRE/8CDQ//CBMW/wwWGP8ABAX/Fxob/46Sk///////+/z8//7/ + ///////////////////////////////////////////////////+/v7//Pz8//7+/v////////////7+ + /v/7+/v//f39//7////5/Pz/+/79//3////9/////f7+//3+/v/+/v7///////////////////////7/ + ///+/////f////3////9/////P////////////////////38/P/5+vz//f7///j6+v+Zn6H/AAEC/wQN + D/8IDxL/CQ4T/wkPFv8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/Aw4Q/wcTFf8KFBb/AAME/xcb + HP+QlJX///////v8/f/+//////////////////////////////////////////////////////////39 + /f/6+vr//Pz8//39/f/7+/v/+vr6//z8/P///////f////3////+/////f////7////+/////P39//v6 + +v/7+/v////////////+/////v////3////9/////f////z///////////////7+/f/9+/z/+fr8//v9 + /v/6/v7/oaao/wAAAP8FDhD/CxQV/wkPFP8JDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/wQP + EP8EEBL/BxAS/wACBP8XGxz/kJWW///////8/f3/+vz9//////////////////////////////////// + ///////////////////8/Pz/+Pj4//v7+//+/v7//v7+//7+/v/+/v7//v////r+/f/4/Pz/+fv7//r8 + /P/9/v7///////7//v/+/v7//v3+///////////////////////9/////f////3////8//////////// + ///+/f7//v3+//3+/v/6+/3//v///62ztf8AAAD/BQ0P/w4WGP8JEBX/CQ8V/wgPFf8HDxX/Bg8V/wUQ + FP8FEBT/BBET/wQRE/8GERP/Aw4Q/wUOEP8AAwX/Fxsc/4+Ulf///////Pz8//f5+v/+//////////// + ///////////////////////////////////+/v7//v7+//39/f/+/v7///////////////////////7/ + ///8////+/7+//z9/f/8/f3///////////////////7+///+/v///////////////////////f////3/ + ///9/////P///////////////v3+///+///+////+vv9//////+7wsP/CA0O/wIJC/8MFBb/CRAV/wkP + Ff8IDxX/Bw8V/wYPFf8FEBT/BRAU/wQRE/8EERP/CBMW/wMOEP8FDxD/AAUH/xQZGv+Lj5D///////z8 + /P/3+Pn//v///////////////////////////////////////////////v7+//////////////////// + ///9/f3//Pz8//38/P/7+/z/+Pr7//r9/P/9/v7//P7+//38/P/8+/v//fv8///8/P///f3///////// + //////////////3////9/////f////v///////////////79/f///v7//v////j6+///////y9HS/yQq + LP8ABAT/Bg4P/wkQFf8JDxX/CA8V/wcPFf8GDxX/BRAU/wUQFP8EERP/BBET/woVF/8DDhD/BxES/wEI + Cf8QFhf/gYWG//v9/f/8/v3/+fr7//////////////////////////////////////////////////39 + /f/////////////////9/f3/+/v7//v7+//8/Pz//Pz8//b5+f/4/Pz//P7+//z+/v/8/Pz/+/r6//36 + +v///P3///7////+/////v/////////////9/////f////z////6///////////////+/f7///7///3/ + ///3+fv//v///9vi5P9NUlP/AQEC/wIKC/8JEBX/CQ8V/wgPFf8HDxX/Bg8V/wUQFP8FEBT/BBET/wQR + E/8KFRj/AQ4Q/wgSFP8ECgv/CxAR/3J2eP/x9fX//f7+//v9/v////////////////////////////// + ///////////////////7+/v//v7+//7+/v/+/v7//Pz8//7+/v////////////////////////////// + //////////////////////////3+///+/v///v////7//////////////f////3////8////+v////// + //////////3+///9///+/v//+vz+///////q8fP/dXp8/wEDBP8ECw3/ChEX/wkOFP8IDxX/Bw8V/wYP + Ff8FEBT/BRAU/wQRE/8EERP/CBQX/wAMDv8JExX/BgsM/wUICf9kaGr/5+rs//r9/v/8/v////////// + ////////////////////////////////////////+/v7//39/f/9/f3//f39//////////////////v5 + +v/u7u7/6/Hv/+ju7P/q7Oz/7/Hx//v7/P/////////////8/f//+vv///7////+/////v////7///7/ + ///+/////f////r///////////////////////////////3/////////8vf4/5OZm/8DCAn/Bw8Q/wwT + Gf8IDRX/CA8V/wcPFf8GDxX/BRAU/wUQFP8FERP/BBET/wcTFf8BCw3/CRMV/wcLDP8CBAX/Wl9f/97i + 4//5+/z//f////////////////////////////////////////////////////////////////////// + ////////+fr6/+Xl5v/MzMz/ra6u/3V7ev92e3v/hIaG/5yenv/Avr7/5ODh//n5+f/////////////+ + ///+/f7///7////+///+/////v////3////6///////////////+/v7///////39/f/9/Pz//v7+//j4 + +P/AwMH/ISEh/wkICP8KEhj/CBIa/wcPF/8HEBf/Bg4W/wAHDf8CCg//DhUZ/wkQFf8HDA//DBET/xIW + F/8OERL/AAID/0FEQ//Nz87///////j6+f/6/v7/+v////v////8/////f/+//7//v/+//7////9//7/ + /f/5+/r///////n8/f//////3eLm/4SMkf8xOT//CxQc/w4WHv8QGBz/AwYK/w0VF/8PGBv/BgYJ/ysw + Mv+boqT/8PT2//7////7/f3/7O/w//7+/v/6+/v//f39/////////////f39/////////////Pz8//7+ + /v/+/v7//f39///////+/v7/3Nzc/0pKSv8IBwf/AgkQ/wINFv8BChH/BA0U/wkRGf8HDhT/BAwR/wkQ + FP8JDxT/DxQX/w0RFP8MEBL/DxIT/wAAAP8xMzP/xMfG///////+/v7/+v////r////8/////P////3/ + /v/+//7//v/+/////f////3//v7+//v8+v/9////y87Q/15laP8QFxz/BAoR/wEMFP8ABQz/BhAT/wQM + Ef8BCw7/BxAT/woRE/8CBgn/HyMm/4CFh//i5eb///////n9/f///////f7+///////+/f3//v7+//7+ + /v////////////39/f/+/v7///////39/f/8/Pz///////b29v+Ghob/EA4P/wAFC/8DDRX/AQgP/wIL + Ev8LExn/DRQa/wYNE/8ECg7/ChEV/xQaHf8MEBP/BgsN/xAUFv8AAQH/ICEh/6uurf/9//7///////r/ + ///6/////P////z////9//7//v/+//7//v////3////9//////////7/7O/x/2twcv8LDA//AAAF/wAI + Dv8IERj/CRIY/wMMEP8SGx//AwoO/wIHCv8SGh3/CAsO/wAAAP8fIiT/iY6Q/+/y8v/+/////v7+//// + /////////fv7//38/P/////////////////+/v7//f39///////9/f3/+vr6////////////v8DA/y4u + Lf8ABwz/Aw0W/wgPF/8GDxb/CA8W/w0UGv8IDRP/AggN/w4VGv8SFhr/Cg8R/wYKDP8UFxr/CAkL/wwN + Df99gID/9/r5//z+/v/6/v7/+v////v////8/////f/+//7//v/+//7////9//7+/P/6+/r/+vv6/7K1 + tv8mKCr/AAAA/xIZHv8LERf/AggP/w0WHf8EDRD/CBEV/wIKDv8ABgn/CREU/w8VGP8OEhT/AAIE/y4x + Mv++wcL//v////z9/f/+/v7//f39//v6+v/+/f3///////////////////////39/f/+/v7//v7+//39 + /f/+/v7//////+zt7f9ra2r/CA0S/wEFDP8MFRz/ChIZ/wILEf8JEBX/CRAV/wIJDv8RFxz/Cw4S/wwR + E/8JDQ//ERQX/xIUFv8BAQH/SEtM/+3x8f/7/f7/+v7+//r////7/////P////3//v/+//7//v/+//// + /f////3/+/z7/+/w7/94fH3/EBIT/wADB/8NFRr/CxIY/wQLE/8JEhr/ChMW/wACB/8EDRD/EBkd/wYO + Ef8HDA//Exsd/wUICv8FBQf/d3t8//L19v/+/v7//v7+//r6+f/7+/v///////7+/v////////////// + ///8/Pz//Pz8/////////////v7+//z8/P//////tbS0/yImLP8AAAL/CBAV/wgRFv8BCA3/Bw0S/w0T + GP8ECg7/DhQY/wYKDv8PFBj/DBET/wgNDv8TGBr/AAEB/yMlJ//W2tv//P////r////6////+/////z/ + ///9//7//v/+//7//v////3////9///////z9PP/Y2do/wwQEv8CBwv/AgcM/wYOFP8IEhr/BQ4W/woT + F/8BBAf/CBAT/xYhI/8KEhX/AAQH/wYND/8LDxH/AgMF/zk9Pf/X2tv////////////7+vr//f39//// + ///9/f3/////////////////+/v7//z8/P////////////7+/v/6+vr//////+3s7P9iaW7/DBEY/wIH + Df8EDBH/AwoP/wkOEv8PFRr/BAoO/woQFP8GCw//EBUa/w4TFv8DCAn/DhMW/wMGCP8SEhT/oKSl//f7 + +//7////+f////z////8/////f/+//7//v/+//7////9//7+/P/4+vj//////2ZrbP8GCQv/CA0R/w4U + G/8HDRP/BAoS/wMMFP8DDRH/CBMW/wkSFv8HDhL/CRAT/wkQFP8GCw7/CxAS/wMHCf8XGRv/tri6//7+ + /v///////v7+///+/v///////v39//////////////////39/f/9/f3//////////////////f39//7+ + /v//////wsbI/0RLUP8ABQr/AwkO/wgOEv8KEBT/DxUZ/wEHC/8JDxP/BgwP/wwQFP8PFBf/BQoM/wgO + Ef8KDRD/BAYJ/1FWWf/j6Or/+/////n+/v/8/////P////3//v/+//7//v/9/////v/+/vz/7/Dv//v8 + /P9xdXb/CAkL/wsOE/8THCL/BQkO/wIDC/8CCxP/AgsP/xAZHf8IERX/AQQI/wcNEP8SGh3/DxQX/w0S + FP8CBwn/CgwN/5SXmP/4+fn///////7//////v7//v39///+/f////////////7+/v////////////39 + /f/9/f3///////7+/v/7+/v//Pz8//////+IjpH/DhQZ/wIIDP8JDxP/CxEV/wsRFf8ABwv/DBIV/wgO + Ef8FCg7/DhMW/woPEv8IDQ//ERYZ/wEGCf8VGh7/wMXI//r////7////+v7///z////9//7//v/+//7/ + /v////3//v78///////t7e3/j5KT/xseH/8ABQn/Bw8U/wEID/8LExz/DBYd/wcQE/8EDRH/Bg8S/woU + GP8KEhX/Bg4Q/wQJDP8LERP/BQoM/wgJC/95e3z/7O3t//v9/f/+/v7//fz8//n49//8+/r///////// + ///////////////////////////////////////////////////9////7PHy/291eP8DBQj/CQsN/xQZ + HP8AAwb/CA8S/xAWGf8RFxv/Bw4S/wADB/8GCg7/Ehke/wwRFf8AAgb/EBYb/1FXW//y9vb///////P2 + 9//3+/v//f/+/////////////f37//Lz8P///////////7zAwv8mJyj/AAAC/xYdJP8KERj/AAkR/wYO + Fv8ABQn/CBEV/wwVGf8KExb/DRUY/w4VGP8IDhD/BwwP/wQICf8EBQb/X2Jj//f5+f/29/f/+Pj4//// + ///8/Pv//fz7////////////////////////////////////////////////////////////8fX3//z/ + ///X293/UlZZ/wAAAP8OExf/HCAj/wAAA/8QFRj/AwkN/w0SFv8RFhr/BAoO/wMIDf8GDBH/CQ4S/wMJ + Df8TGR7/yM3O/+zw8v/2+Pn//P////f6+f/+/v7/+/v7//Hy7//+/v7////////////m6ur/YGVm/wYH + C/8HCg//CBAW/wIMFf8PGCD/DRYZ/wYPE/8CCg7/AQkM/wUOEP8LEhX/CxIU/xAXGP8JDQ//BQYH/3By + dP/6+vr//Pz9//r6+////////fz8//37+/////////////////////////////////////////////// + //////////////v8/f/t8PH/9fj5/83S0v9ISkv/AAAA/w0PEf8aHiH/BwwP/wMJDf8PFBf/DhQZ/wUM + Ef8HDhP/DxYc/w0UGv8CCg//AgkP/1FVWP/f5ef///////P19f/3+fn///////f5+P/x8u7/9/j2//n7 + +f/7/Pr/8/f4/6GmqP8hIib/AAAE/xAZH/8CCxL/BQ0U/xAaHf8EDRH/AQkM/wQMEP8FDRD/Bw8S/woQ + Ev8NFBb/AgUH/woICf+MjpD/+fr7///////9/f////////79/f/+/Pv///////////////////////// + ////////////////////////////////////////9fj5//n9/P//////tbm6/zg6O/8AAAH/Cw8S/wMH + Cv8LERX/CxAU/wMJDv8CCg7/ChEW/w0UG/8HDhT/AwsR/wUNE/8IDQ//mZ2g//X3+P/19/f/8/b1//// + ///9/fz/+vv4//z8+//7/fz//f39//v+/v/i5ef/Uldb/wAAAf8HCxH/AAgQ/wEJEf8HEBT/Aw0Q/wkS + Fv8NFhn/Bw8S/wUMD/8LEBP/DBIU/wAAAf8SFBX/qaut//f5+f///////fz9//7+/v///v7///39//// + ////////////////////////////////////////////////////////+vz7//3////+////+vz8/+/y + 8/+5vb7/TlJU/wAAAv8AAAD/CA4S/woQFf8IDxX/Bg4T/wYME/8HDhX/Bw8V/wYOFf8DCxL/BgsM/zQ4 + Ov+vs7T/+Pv6//v8+//5+/n/+/v6/////v/9/fv////////////09/j//f///5ifo/8aICX/AAMJ/wcQ + Gf8CDBT/AgsP/wcRFP8OFxv/CxMX/wMKDf8GDQ//DxYY/wwRE/8DBgj/Oj0+/8rNzv/4+fj///////r6 + +f/9/Pz///////////////////////////////////////////////////////////////////////r8 + +//5+vr/+/z8//b5+f/6/f3//////8LGyf9WW17/Fhkb/wIIDP8ECAz/CQ0T/woRF/8IDxb/Bw8W/woT + Gv8KExz/BQwV/w4TFf8CBgj/RkpL/7/Dwv///////v/+//n6+f//////9/j1////////////8PT1//3/ + ///b4OT/W2Jn/wkRF/8PFyD/AQcP/wQNEf8KFBj/CRIW/wIKD/8DCg3/CRAS/wwUFv8DBQb/DBIU/4GE + hf/q7e7/+/z8///////6+fr//Pz8//////////////////////////////////////////////////// + ///////////////////+/v7/+vv7//T29v/5+/v//v////X5+v/y9vj/3eHj/3l/gf8oLjT/BgkO/wAA + A/8EChD/DRQb/wcOFf8ECRD/Bw8Z/w0VHf8LERP/BQkM/wQICf9JTU3/t7m5//T09P/9/v3//Pz6//// + /v/5+vn/////////////////5Ort/211ev8NExn/ChEZ/wEFDf8EDRH/ChQY/wQNEP8BCQ3/CxIW/woR + FP8ECw3/BQYG/zU7Pf/Kzc7//P7///7//////////fz8//3+/f////////79//////////////////// + ////////////////////////////////////////+vv7//39/f/09fX/9Pb2//39/f/09/j/8fT0//v/ + ///n7O3/lZqe/0pQVf8UGiL/AgoQ/wEJEP8AAgn/AQIJ/wMLFf8HERn/DRMV/wcLDv8FCQr/AAAA/y4w + MP+UlJP/ycvJ/9XW0//y8vH/7e/u//Lz8//u7u7/0dXV/4uPlP8uNTv/AAQJ/wMJEf8GDxf/AQsP/wwV + Gf8EDRD/AwwP/w8XGv8DCw3/AQcJ/zU8Pf+ZnZ//9fj5//3////8/f7//v7+//7+/f/+//7///7+//79 + /P/////////////////////////////////////////////////////////////////y9PP/+Pr5//39 + /f/y9vb/+/7+//z+/v/r8PL//P/////////Kz9L/eH6E/zM7Qf8LDxT/AwQL/wkTG/8NFR7/AAML/wMI + Cv8LEBL/EhYX/xUYGv8FCAj/AAAA/zM1M/9zdHL/hISD/76/vv+UlZT/cnV2/zo/Qv8FBwv/AQQK/woS + Gf8FDhb/BxAW/wcPE/8OFhr/AgoN/wAHCv8JEBP/BQsO/x8kJ/+Umpz///////3//v/9////+Pn5//n6 + +v/+/v7///////7+/f/+/fz///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v7+//Pz8//gYGB/zw8 + PP8SExP/AgID/wAAAP8GDQ//BQ4Q/wQND/8HEBL/CxMU/woTFP8FDQ7/AQUG/wECA/8CAwX/AQID/wEE + Bf8EDA7/DBYY/w8YGv8LExT/AgwN/wIKC/8REBD/Dg0N/wICAv8AAAD/FRUV/1tbW/+1tbX/8fHx//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9fX1//z8 + /P///////v79//Lx8f/T09P/oKCg/2ZmZf83Nzf/Bg0P/wADBf8AAAD/AAAA/wAAAP8AAwX/AAkL/wEK + DP8EDA7/DRUX/wgREv8DDA7/AgoM/wIKDP8BBwj/AAQF/wAICv8BCAr/AAAA/wYGBv8hISH/T09P/5GR + kf/Y2Nj/+/v7//r6+v/09PT///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////39/f/+/v7///////////////////////T09P/b29v/ubm6/4qRk/9yeXv/WF1e/zg8 + Pv8dISP/CQ4Q/wAEBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wULDf8WHR//Ki8x/1JS + Uv96enr/rq6u/9ra2v/y8vL////////////+/v7//Pz8//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3////////////7+/v/+Pj4//v7+/////////////v7 + /P/r8fH/4ujp/8zT1P+xuLn/m6Kk/4yTlf+CiIr/fYOF/3l+f/9obG7/a29x/3F1d/93e37/eoCC/4CH + if+PlZf/oqmq/7W7vf/T0tL/5ubm//r6+v////////////39/f/5+fn//f39//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////Pz8//7+/v///////f39//r6 + +v/7+/v////////////7+/v////////////+////+Pv8//T3+P/x9PX/7/Lz/+7y8//r7/H/4OXn/+Lm + 6P/o7O3/7O/w/+3w8f/v8vP/8vb3//r9/v/////////////////6+vr//Pz8///////9/f3/+/v7//r6 + +v/7+/v///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v///////v7+//39/f/9/f3////////////+/v7/+Pj4//z9/v/9/v////////////////////////// + ///////////////////////////////////////////////////////////////////7+/v/9/f3//z8 + /P///////v7+//z8/P/7+/v/+vr6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////9/f3//f39//39/f/7+/v/+vr6//z8/P/+/v7////////////7/f7//P7///7/ + ///+/////v7///7+/v/+/v7//v7+//7+/v/9/v//+fv8//j6+//7/f3//v////7+///9/f7//f7+//7/ + ///+/v7///////7+/v/7+/v/+/v7//r6+v/5+fn//v7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////+fn5//r6+v/+/v7///////7+/v/7+/v/+/v7//// + ///+/v7///7+///+///////////////9/v/++/z//fv8//37/P/9/P3///7+//////////////////// + /////v///vz9//79/f///////v7+//7+/v/5+fn/9PT0//X19f/7+/v////////////+/v7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39//7+ + /v/////////////////+/v7//Pz8//z7/P/+/P3///7////+/////v////7////+//////////////37 + /P/9/P3///////////////////7///78/v///f///v/+//v7+/////////////////////////////// + ///9/f3/+/v7//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////7////+/////v////7////+//// + /v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.vb new file mode 100644 index 00000000..da0a78d2 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Forms/form_Main.vb @@ -0,0 +1,130 @@ +Public Class form_Main + + Private _s As clsSettings + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(p_s As clsSettings) + InitializeComponent() + ' Widen Scope + _s = p_s + End Sub + +#Region "Form Controls & Events" + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + + ' Start Time + Dim m_time As String = Now().ToString + + ' Run Test + Dim t As New clsAutomationTest(_s) + + If t.Test1 = True Then + + ' Success + AppendLog("Command 1", m_time, Now().ToString, "") + + Else + + ' Failure + AppendLog("Command 1 - Failed", m_time, Now().ToString, "X") + + End If + + End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + + ' Start Time + Dim m_time As String = Now().ToString + + ' Run Test + Dim t As New clsAutomationTest(_s) + + If t.Test2 = True Then + + ' Success + AppendLog("Command 2", m_time, Now().ToString, "") + + Else + + ' Failure + AppendLog("Command 2 - Failed", m_time, Now().ToString, "X") + + End If + + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + + ' Start Time + Dim m_time As String = Now().ToString + + ' Run Test + Dim t As New clsAutomationTest(_s) + + If t.Test3 = True Then + + ' Success + AppendLog("Command 3", m_time, Now().ToString, "") + + Else + + ' Failure + AppendLog("Command 3 - Failed", m_time, Now().ToString, "X") + + End If + + End Sub + + Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click + + ' Start Time + Dim m_time As String = Now().ToString + + ' Run Test + Dim t As New clsAutomationTest(_s) + + If t.Test4 = True Then + + ' Success + AppendLog("Command 4", m_time, Now().ToString, "") + + Else + + ' Failure + AppendLog("Command 4 - Failed", m_time, Now().ToString, "X") + + End If + + End Sub + + Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click + + ' Start Time + Dim m_time As String = Now().ToString + + ' Run Test + Dim t As New clsAutomationTest(_s) + + If t.Test5 = True Then + + ' Success + AppendLog("Command 5", m_time, Now().ToString, "") + + Else + + ' Failure + AppendLog("Command 5 - Failed", m_time, Now().ToString, "X") + + End If + + End Sub + +#End Region + +End Class \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Modules/LogData.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Modules/LogData.vb new file mode 100644 index 00000000..73e739fa --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/Modules/LogData.vb @@ -0,0 +1,64 @@ +Imports System.IO + +Module LogData + + ' time Machine User EventName TimeStart TimeEnd Comments + + ''' + ''' Append a Line to the Log + ''' + ''' + ''' + ''' + ''' + ''' + Public Sub AppendLog(eName As String, + eStart As String, + eEnd As String, + eComments As String) + + Try + + Dim _path As String + _path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + _path += "\Revit2012Benchmarking" + + ' Verify Path Exists + If Not Directory.Exists(_path) Then + + Try + + ' Create it + Directory.CreateDirectory(_path) + + Catch ex As Exception + + MsgBox("Error Creating Revit2012Benchmarking Directory!" & vbCr & ex.Message, MsgBoxStyle.Critical, "Cannot Create Directory!") + + End Try + + End If + + _path += "\MyBenchmarkData.csv" + + ' Writer + Using sw As New StreamWriter(_path, True) + + ' Write the Line + sw.WriteLine(Environment.MachineName & vbTab & + Environment.UserName & vbTab & + eName & vbTab & + eStart & vbTab & + eEnd & vbTab & + eComments) + End Using + + Catch ex As Exception + + MsgBox("Error Writing to Log file!" & vbCr & ex.Message, MsgBoxStyle.Critical, "Cannot Write to Log!") + + End Try + + End Sub + +End Module \ No newline at end of file diff --git a/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/My Project/AssemblyInfo.vb b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..37878c68 --- /dev/null +++ b/2017/Case.FreeBenchmarking/Case.FreeBenchmarking/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/API/clsUsage.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/API/clsUsage.vb new file mode 100644 index 00000000..2d01f05d --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/API/clsUsage.vb @@ -0,0 +1,136 @@ +Imports System.Net + +Namespace API + + Module clsUsage + +#Region "Private Members" + + ''' + ''' Full Qualifying Domain Name + ''' + ''' + ''' + Private Function GetFullDomainName() As String + Try + + ' Domain + Dim m_domainName As String = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName + + ' Host + Dim m_hostName As String = Dns.GetHostName() + + If Not m_hostName.Contains(m_domainName) Then + ' add the domain name part, if the hostname does not already include the domain name + m_hostName = Convert.ToString(m_hostName & Convert.ToString(".")) & m_domainName + End If + + Return m_hostName + + Catch + End Try + + ' Failure + Return "" + + End Function + + ''' + ''' Credential + ''' + ''' + ''' + Private Function GetCred() As NetworkCredential + Return New NetworkCredential("somclient", "f9d4269b718121954503fa58dcb3c18e4dc59c32") + End Function + + ''' + ''' API Header + ''' + ''' + ''' + Private Function GetHeader() As String + Return "http://api.addins.case-apps.com/" + End Function + + ''' + ''' Public IP Address + ''' + ''' + ''' + Private Function GetPublicIp() As String + Try + + Const c_url As String = "http://checkip.dyndns.org" + Dim req As WebRequest = WebRequest.Create(c_url) + Using resp As WebResponse = req.GetResponse() + Dim sr As New IO.StreamReader(resp.GetResponseStream()) + Dim response As String = sr.ReadToEnd().Trim() + Dim a As String() = response.Split(":") + Dim a2 As String = a(1).Substring(1) + Dim a3 As String() = a2.Split("<") + Dim a4 As String = a3(0) + If Len(a4) > 30 Then + Return "blocked!" + End If + Return a4 + End Using + + Catch + End Try + + ' Failure + Return "UNKNOWN" + + End Function + +#End Region + +#Region "Public Members" + + ''' + ''' Perform the Setup + ''' + ''' + ''' + Public Sub RecordUsage(Optional useProxy As Boolean = False) + + ' Ignore My Calls + If Environment.MachineName.ToLower = "case-platinum" And Environment.UserName.ToLower = "d.rudder" Then Exit Sub + If Environment.MachineName.ToLower = "masterdonpc" And Environment.UserName.ToLower = "masterdon" Then Exit Sub + + Try + + Dim m_url As String = GetHeader() & "logusage?ip=" & GetPublicIp() + m_url += "&mac=" & GetFullDomainName() + m_url += "&netb=" & Environment.MachineName + m_url += "&appn=" & My.Application.Info.Title.ToString + m_url += "&appv=" & My.Application.Info.Version.ToString + m_url += "&appf=" & "report" + m_url += "&user=" & Environment.UserName + m_url += "&mn=" & "" + + ' The Request Call + Dim m_req As HttpWebRequest = DirectCast(HttpWebRequest.Create(m_url), HttpWebRequest) + With m_req + .Credentials = GetCred() + .Method = "POST" + End With + If useProxy = False Then m_req.Proxy = Nothing + + ' Response String + m_req.GetResponse() + + Catch + Try + If useProxy = False Then RecordUsage(True) + Catch + End Try + End Try + + End Sub + +#End Region + + End Module +End Namespace \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.addin b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.addin new file mode 100644 index 00000000..8509fe0a --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.addin @@ -0,0 +1,11 @@ + + + + Command Case.HiddenParameterToParameter + Case.HiddenParameterToParameter.dll + 6c47992e-7ba5-4f86-9238-8df5d2a2777b + Case.HiddenParameterToParameter.Entry.CmdMain + CSDR + Case Design, Inc., www.case-inc.com + + diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.vbproj b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.vbproj new file mode 100644 index 00000000..0eb34e45 --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter.vbproj @@ -0,0 +1,116 @@ + + + + Debug + AnyCPU + + + + + {CBDD3FA2-8EA1-4194-8105-BB0B3B33AD4A} + Library + Case.HiddenParameterToParameter + 512 + Windows + v4.5.2 + On + Binary + Off + On + + + + true + full + true + true + bin\Debug\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + pdbonly + false + true + true + bin\Release\ + TemplateRevitVB.xml + 42017,41999,42017,42018,42019,42032,42036,42020,42021,42022 + Program + C:\Program Files\Autodesk\Revit 2017\Revit.exe + false + + + Case.HiddenParameterToParameter + + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPI.dll + False + + + False + C:\Program Files\Autodesk\Revit 2017\RevitAPIUI.dll + False + + + + + + + 4.0 + + + 4.0 + + + + + + + + + + + + + + + + True + True + Resources.resx + + + form_Main.vb + + + Form + + + + + + My.Resources + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + + + form_Main.vb + + + + + + + + + + + copy "$(TargetDir)\*" "$(SolutionDir)\deploy\2017\" /Y + + \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsCategory.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsCategory.vb new file mode 100644 index 00000000..46525392 --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsCategory.vb @@ -0,0 +1,124 @@ +Imports Autodesk.Revit.DB + +Namespace Data + + Public Class clsCategory + + Private _doc As Document + +#Region "Public Properties" + + Public ReadOnly Property DisplayName As String + Get + Try + Return Cat.Name + Catch + End Try + Return "{error}" + End Get + End Property + Public Property Cat As Category + Public Property CatParamsElement As List(Of String) + Public Property CatParamsText As List(Of String) + Public Property CatInstances As List(Of Element) + +#End Region + + ''' + ''' Category Helper + ''' + ''' + ''' + ''' + Public Sub New(c As Category, + d As Document) + + ' Widen Scope + Cat = c + _doc = d + + ' Fresh Lists + CatParamsElement = New List(Of String) + CatParamsText = New List(Of String) + CatInstances = New List(Of Element) + + End Sub + + ''' + ''' Get the Element and Text Parameters + ''' + ''' + Private Sub GetParameters() + + Try + CatParamsElement.Add("ElementId") + + ' Get the First Element + For Each x In CatInstances + ' Get all Instance Parameters + For Each p As Parameter In x.Parameters + Try + ' Helper + Dim m_para As New clsParameter(p) + If Not m_para Is Nothing Then + ' Text and Not Readonly - Text + If m_para.ParameterIsReadOnly = False Then + If m_para.Format = StorageType.String Then + CatParamsText.Add(m_para.Name) + End If + End If + ' Everything Can be Source + CatParamsElement.Add(m_para.Name) + End If + Catch + End Try + Next + ' Only First Element + Exit For + Next + Catch + End Try + + CatParamsElement.Sort() + CatParamsText.Sort() + + End Sub + + ''' + ''' Get All Instance Elements + ''' + ''' + Public Sub GetInstances() + + ' Fresh Lists + CatParamsElement = New List(Of String) + CatParamsText = New List(Of String) + CatInstances = New List(Of Element) + + Try + + ' Get all Instance Elements + Using c As New FilteredElementCollector(_doc) + c.WhereElementIsNotElementType() + c.OfCategoryId(Cat.Id) + For Each x In c.ToElements + Try + ' Ignore Grouped Elements + If x.GroupId.IntegerValue < 1 Then + CatInstances.Add(x) + End If + Catch + End Try + Next + End Using + + Catch + End Try + + ' Get Parameters + GetParameters() + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsParameter.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsParameter.vb new file mode 100644 index 00000000..f3a84b69 --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsParameter.vb @@ -0,0 +1,234 @@ +Imports Autodesk.Revit.DB + +Namespace Data + + ''' + ''' Helper class used to work with parameters + ''' + ''' + Public Class clsParameter + + Private _p As Parameter + + ''' + ''' Constructor + ''' + ''' + ''' + Public Sub New(ByVal p As Parameter) + + ' Widen Scope + _p = p + + End Sub + + ''' + ''' The parameter reference + ''' + ''' + ''' Parameter Object + ''' + Public ReadOnly Property ParameterObject() As Parameter + Get + Return _p + End Get + End Property + + ''' + ''' Is it a read only parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property ParameterIsReadOnly() As Boolean + Get + Try + Return _p.IsReadOnly + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' The name of the parameter + ''' + ''' + ''' + ''' + Public ReadOnly Property Name() As String + Get + Try + Return _p.Definition.Name + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Gets the parameter format + ''' + ''' + ''' + ''' + Public ReadOnly Property Format() As StorageType + Get + Try + Return _p.StorageType + Catch + Return Nothing + End Try + End Get + End Property + + ''' + ''' Returns value of the parameter + ''' + ''' + ''' + ''' + Public Property Value() As String + Get + Try + Dim v As String = GetValue(False) + If Not String.IsNullOrEmpty(v) Then + Return v + Else + Return "" + End If + Catch + Return Nothing + End Try + End Get + Set(ByVal v As String) + Try + SetValue(v, False) + Catch + End Try + End Set + End Property + + ''' + ''' Returns value of the parameter + ''' as a string + ''' + ''' + ''' + ''' + Public Property ValueString As String + Get + Try + Dim v As String = GetValue(True) + If Not String.IsNullOrEmpty(v) Then + Return v + Else + Return "" + End If + Catch + Return Nothing + End Try + End Get + Set(ByVal v As String) + Try + SetValue(v, True) + Catch + End Try + End Set + End Property + + ''' + ''' Set a value to a parameter + ''' + ''' + ''' Value does not have to be a string + ''' + ''' As string? + ''' + Private Sub SetValue(ByVal value As Object, + asString As Boolean) + + ' Cannot edit readonly + If _p.IsReadOnly Then Exit Sub + + Try + ' Storage Type + Select Case _p.StorageType + Case StorageType.Double + If asString = True Then + _p.SetValueString _ + (TryCast(value, String)) + Else + _p.Set(value) + End If + + Case StorageType.ElementId + Dim m_eid As ElementId + m_eid = DirectCast((value), ElementId) + _p.Set(m_eid) + + Case StorageType.Integer + _p.SetValueString _ + (TryCast(value, String)) + + Case StorageType.None + _p.SetValueString _ + (TryCast(value, String)) + + Case StorageType.String + _p.Set(TryCast(value, String)) + Exit Select + + End Select + Catch + + End Try + + End Sub + + ''' + ''' Get the value of a parameter + ''' + ''' Return as String? + ''' String representing the value + ''' + Private Function GetValue(asString As Boolean) As String + + ' Return the Value + Select Case _p.StorageType + Case StorageType.Double + If asString = True Then + Return _p.AsValueString + Else + Return _p.AsDouble.ToString + End If + + Case StorageType.ElementId + If asString = True Then + ' Get the Element's Name + Dim m_eid As New ElementId(_p.AsElementId.IntegerValue) + Dim m_obj As Element + m_obj = _p.Element.Document.GetElement(m_eid) + Return m_obj.Name + Else + Return _p.AsElementId.ToString + End If + + Case StorageType.Integer + Return _p.AsInteger.ToString + + Case StorageType.None + Return _p.AsValueString + + Case StorageType.String + Return _p.AsString + + Case Else + Return "" + + End Select + + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsSettings.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsSettings.vb new file mode 100644 index 00000000..1c83f247 --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Data/clsSettings.vb @@ -0,0 +1,116 @@ +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI + +Namespace Data + + Public Class clsSettings + + Private _cmd As ExternalCommandData + Private _eSet As ElementSet + +#Region "Public Properties" + + ''' + ''' Active Document + ''' + ''' + ''' + ''' + Public ReadOnly Property Doc As Document + Get + Try + Return _cmd.Application.ActiveUIDocument.Document + Catch + End Try + Return Nothing + End Get + End Property + + ''' + ''' Document Path + ''' + ''' + ''' + ''' + Public ReadOnly Property DocName As String + Get + Try + If Doc.IsWorkshared = True Then + If Not String.IsNullOrEmpty(Doc.GetWorksharingCentralModelPath.CentralServerPath) Then + Return Doc.GetWorksharingCentralModelPath.CentralServerPath + Else + Return "Detached Model" + End If + Else + Return Doc.PathName + End If + Catch + End Try + Return "" + End Get + End Property + + ''' + ''' App Version + ''' + ''' + ''' + ''' + Public ReadOnly Property Version As String + Get + Return My.Application.Info.Version.ToString + End Get + End Property + + ''' + ''' Categories + ''' + ''' + ''' + ''' + Public Property Cats As List(Of clsCategory) + +#End Region + + ''' + ''' Constructor + ''' + ''' + ''' + ''' + Public Sub New(cmd As ExternalCommandData, eSet As ElementSet) + + ' Widen Scope + _cmd = cmd + _eSet = eSet + + ' Get Categories + GetCategories() + + End Sub + + ''' + ''' Get All Categories + ''' + ''' + Private Sub GetCategories() + + ' Sorted + Dim m_c As New SortedDictionary(Of String, Category) + For Each x As Category In Doc.Settings.Categories + Try + m_c.Add(x.Name, x) + Catch + End Try + Next + + ' To List + Cats = New List(Of clsCategory) + For Each x In m_c.Values + Cats.Add(New clsCategory(x, Doc)) + Next + + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Entry/CmdMain.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Entry/CmdMain.vb new file mode 100644 index 00000000..eb6015af --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/Entry/CmdMain.vb @@ -0,0 +1,78 @@ +Imports Autodesk.Revit.Attributes +Imports Autodesk.Revit.DB +Imports Autodesk.Revit.UI +Imports [Case].HiddenParameterToParameter.Data + +Namespace Entry + + + Public Class CmdMain + + Implements IExternalCommand, IExternalCommandAvailability + + ''' + ''' Command Entry Point + ''' + ''' + ''' + ''' + ''' + ''' + Public Function Execute(ByVal commandData As ExternalCommandData, + ByRef message As String, + ByVal elements As ElementSet) As Result Implements IExternalCommand.Execute + + Try + + ' Version + If Not commandData.Application.Application.VersionName.Contains("2016") Then + + ' Failure + Using td As New TaskDialog("Cannot Continue") + With td + .TitleAutoPrefix = False + .MainInstruction = "Incompatible Version of Revit" + .MainContent = "This Add-In was built for Revit 2016, please contact CASE for assistance." + .Show() + End With + End Using + Return Result.Cancelled + + End If + + ' Settings + Dim m_s As New clsSettings(commandData, elements) + + ' Family Document? + If m_s.Doc.IsFamilyDocument Then + message = "Run this tool in a project document..." + Return Result.Failed + End If + + ' Construct and Display the Form + Using d As New form_Main(m_s) + d.ShowDialog() + End Using + + ' Success + Return Result.Succeeded + + Catch ex As Exception + + ' Failure + message = ex.Message + Return Result.Failed + + End Try + + End Function + + Public Function IsCommandAvailable(applicationData As UIApplication, selectedCategories As CategorySet) As Boolean Implements IExternalCommandAvailability.IsCommandAvailable + If applicationData.ActiveUIDocument Is Nothing Then Return False + If applicationData.ActiveUIDocument.Document Is Nothing Then Return False + If applicationData.ActiveUIDocument.Document.IsFamilyDocument Then Return False + Return True + End Function + + End Class +End Namespace \ No newline at end of file diff --git a/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/My Project/AssemblyInfo.vb b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..4aeb066b --- /dev/null +++ b/2017/Case.HiddenParameterToParameter/Case.HiddenParameterToParameter/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +