miniSql

创建
zgc123@gmail.com authored at 11/19/2023 1:40:15 AM
6136600
Tree
0 Parent(s)
Summary: 17 changed files with 2661 additions and 0 deletions.
Added +31 -0
Added +41 -0
Added +18 -0
Added +201 -0
Added +462 -0
Added +170 -0
Added +123 -0
Added +449 -0
Added +155 -0
Added +202 -0
Added +82 -0
Added +127 -0
Added +67 -0
Added +35 -0
Added +152 -0
Added +134 -0
Added +212 -0
Added +31 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs
new file mode 100644
index 0000000..1bb5b26
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs
@@ -0,0 +1,31 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer.Commands
+{
+    /// <summary>The new query by template command.</summary>
+    public class NewQueryByTemplateCommand
+        : CommandBase
+    {
+        /// <summary>Initializes a new instance of the <see cref="NewQueryByTemplateCommand"/> class.</summary>
+        public NewQueryByTemplateCommand()
+            : base("New &Query from Template")
+        {
+            SmallImage = ImageResource.script_code;
+        }
+
+        /// <summary>Execute the command.</summary>
+        public override void Execute()
+        {
+            ICommand newQueryFormCommand = CommandManager.GetCommandInstance("NewQueryFormCommand");
+            newQueryFormCommand.Execute();
+        }
+    }
+}
\ No newline at end of file
Added +41 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs
new file mode 100644
index 0000000..a915a40
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer.Commands
+{
+    /// <summary>The run template command.</summary>
+    public class RunTemplateCommand
+        : CommandBase
+    {
+        /// <summary>Initializes a new instance of the <see cref="RunTemplateCommand"/> class.</summary>
+        public RunTemplateCommand()
+            : base("Run Template")
+        {
+            SmallImage = ImageResource.script_code;
+        }
+
+        /// <summary>Gets a value indicating whether Enabled.</summary>
+        public override bool Enabled
+        {
+            get { return HostWindow.ActiveChildForm is ITemplateEditor; }
+        }
+
+        /// <summary>Execute the command.</summary>
+        public override void Execute()
+        {
+            ITemplateEditor templateEditor = HostWindow.ActiveChildForm as ITemplateEditor;
+
+            if (templateEditor != null)
+            {
+                templateEditor.RunTemplate();
+            }
+        }
+    }
+}
\ No newline at end of file
Added +18 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs
new file mode 100644
index 0000000..2b8439d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs
@@ -0,0 +1,18 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The i template editor.</summary>
+    public interface ITemplateEditor : IPerformTask
+    {
+        /// <summary>The run template.</summary>
+        void RunTemplate();
+    }
+}
\ No newline at end of file
Added +201 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs
new file mode 100644
index 0000000..d93e880
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs
@@ -0,0 +1,201 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template data.</summary>
+    public class TemplateData : IDisposable
+    {
+        /// <summary>The _data tables.</summary>
+        private readonly Dictionary<string, DataTable> _dataTables = new Dictionary<string, DataTable>();
+
+        /// <summary>The _db connection.</summary>
+        private DbConnection _dbConnection;
+
+        /// <summary>Initializes a new instance of the <see cref="TemplateData"/> class.</summary>
+        /// <param name="services">The services.</param>
+        public TemplateData(IApplicationServices services)
+        {
+            Services = services;
+        }
+
+        /// <summary>Gets Services.</summary>
+        public IApplicationServices Services { get; private set; }
+
+        /// <summary>Helper for getting the value of a row - avoids "get_Item()" usage.</summary>
+        /// <param name="row">The row.</param>
+        /// <param name="columnName">Name of the column.</param>
+        /// <returns>The column value.</returns>
+        public object ColumnValue(DataRow row, string columnName)
+        {
+            return row[columnName];
+        }
+
+        /// <summary>The get.</summary>
+        /// <param name="schema">The schema name.</param>
+        /// <param name="viewOrTableName">The view or table name.</param>
+        /// <returns></returns>
+        public DataTable Get(string schema, string viewOrTableName)
+        {
+            return Get(Utility.RenderSafeSchemaObjectName(schema, viewOrTableName));
+        }
+
+        /// <summary>The get.</summary>
+        /// <param name="viewOrTableName">The view or table name.</param>
+        /// <returns></returns>
+        public DataTable Get(string viewOrTableName)
+        {
+            DbDataAdapter adapter = null;
+            DbCommand cmd = null;
+            DataTable dt = null;
+            QueryBatch batch = new QueryBatch();
+            Query query = new Query("SELECT * FROM " + viewOrTableName);
+
+            if (string.IsNullOrEmpty(viewOrTableName))
+            {
+                return null;
+            }
+
+            if (_dataTables.ContainsKey(viewOrTableName))
+            {
+                return _dataTables[viewOrTableName];
+            }
+
+            try
+            {
+                if (_dbConnection == null || _dbConnection.State != ConnectionState.Open)
+                {
+                    _dbConnection = Services.Settings.GetOpenConnection();
+                }
+
+                query.Result = new DataSet(viewOrTableName + " View");
+                batch.Clear();
+                batch.Add(query);
+
+                adapter = Services.Settings.ProviderFactory.CreateDataAdapter();
+                cmd = _dbConnection.CreateCommand();
+                cmd.CommandText = query.Sql;
+                cmd.CommandType = CommandType.Text;
+                adapter.SelectCommand = cmd;
+                adapter.Fill(query.Result);
+            }
+
+            // catch (Exception exp)
+            // {
+            // throw;
+            // }
+            finally
+            {
+                if (adapter != null)
+                {
+                    adapter.Dispose();
+                }
+
+                if (cmd != null)
+                {
+                    cmd.Dispose();
+                }
+            }
+
+            if (query.Result.Tables.Count > 0)
+            {
+                dt = query.Result.Tables[0];
+                _dataTables[viewOrTableName] = dt;
+            }
+
+            return dt;
+        }
+
+        /// <summary>The query.</summary>
+        /// <param name="sql">The sql.</param>
+        /// <returns></returns>
+        public DataTable Query(string sql)
+        {
+            DbDataAdapter adapter = null;
+            DbCommand cmd = null;
+            DataTable dt = null;
+            QueryBatch batch = new QueryBatch();
+            Query query = new Query(sql);
+
+            if (string.IsNullOrEmpty(sql))
+            {
+                return null;
+            }
+
+            if (_dataTables.ContainsKey(sql))
+            {
+                return _dataTables[sql];
+            }
+
+            try
+            {
+                if (_dbConnection == null || _dbConnection.State != ConnectionState.Open)
+                {
+                    _dbConnection = Services.Settings.GetOpenConnection();
+                }
+
+                string dataSetName = sql;
+                query.Result = new DataSet(dataSetName);
+                batch.Clear();
+                batch.Add(query);
+
+                adapter = Services.Settings.ProviderFactory.CreateDataAdapter();
+                cmd = _dbConnection.CreateCommand();
+                cmd.CommandText = query.Sql;
+                cmd.CommandType = CommandType.Text;
+                adapter.SelectCommand = cmd;
+                adapter.Fill(query.Result);
+            }
+
+            // catch (Exception exp)
+            // {
+            // throw;
+            // }
+            finally
+            {
+                if (adapter != null)
+                {
+                    adapter.Dispose();
+                }
+
+                if (cmd != null)
+                {
+                    cmd.Dispose();
+                }
+            }
+
+            if (query.Result.Tables.Count > 0)
+            {
+                dt = query.Result.Tables[0];
+                _dataTables[sql] = dt;
+            }
+
+            return dt;
+        }
+
+        /// <summary>The dispose.</summary>
+        public void Dispose()
+        {
+            if (_dbConnection != null)
+            {
+                _dbConnection.Dispose();
+                _dbConnection = null;
+            }
+
+            foreach (var dataTable in _dataTables)
+            {
+                dataTable.Value.Dispose();
+            }
+        }
+    }
+}
\ No newline at end of file
Added +462 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs
new file mode 100644
index 0000000..405680d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs
@@ -0,0 +1,462 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Windows.Forms;
+using ICSharpCode.TextEditor.Document;
+using Microsoft.VisualBasic;
+using MiniSqlQuery.Commands;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+using MiniSqlQuery.Core.Template;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template editor form.</summary>
+    public partial class TemplateEditorForm : DockContent, IEditor, IFindReplaceProvider, INavigatableDocument, ITemplateEditor
+    {
+        /// <summary>The _host window.</summary>
+        private readonly IHostWindow _hostWindow;
+
+        /// <summary>The _services.</summary>
+        private readonly IApplicationServices _services;
+
+        /// <summary>The _file name.</summary>
+        private string _fileName;
+
+        /// <summary>The _highlighting provider loaded.</summary>
+        private bool _highlightingProviderLoaded;
+
+        /// <summary>The _is dirty.</summary>
+        private bool _isDirty;
+
+        /// <summary>The _text find service.</summary>
+        private ITextFindService _textFindService;
+
+        /// <summary>Initializes a new instance of the <see cref="TemplateEditorForm"/> class.</summary>
+        /// <param name="services">The services.</param>
+        /// <param name="hostWindow">The host window.</param>
+        public TemplateEditorForm(IApplicationServices services, IHostWindow hostWindow)
+        {
+            InitializeComponent();
+            txtEdit.Document.DocumentChanged += DocumentDocumentChanged;
+            _services = services;
+            _hostWindow = hostWindow;
+
+            formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileCommand>());
+            formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+            formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseActiveWindowCommand>());
+            formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseAllWindowsCommand>());
+            formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CopyQueryEditorFileNameCommand>());
+
+            CommandControlBuilder.MonitorMenuItemsOpeningForEnabling(formContextMenuStrip);
+        }
+
+        /// <summary>Gets or sets AllText.</summary>
+        public string AllText
+        {
+            get { return txtEdit.Text; }
+            set { txtEdit.Text = value; }
+        }
+
+        /// <summary>Gets a value indicating whether CanReplaceText.</summary>
+        public bool CanReplaceText
+        {
+            get { return true; }
+        }
+
+        /// <summary>Gets or sets CursorColumn.</summary>
+        public int CursorColumn
+        {
+            get { return txtEdit.ActiveTextAreaControl.Caret.Column; }
+            set { txtEdit.ActiveTextAreaControl.Caret.Column = value; }
+        }
+
+        /// <summary>Gets or sets CursorLine.</summary>
+        public int CursorLine
+        {
+            get { return txtEdit.ActiveTextAreaControl.Caret.Line; }
+            set { txtEdit.ActiveTextAreaControl.Caret.Line = value; }
+        }
+
+        /// <summary>Gets CursorOffset.</summary>
+        public int CursorOffset
+        {
+            get { return txtEdit.ActiveTextAreaControl.Caret.Offset; }
+        }
+
+        /// <summary>Gets FileFilter.</summary>
+        public string FileFilter
+        {
+            get { return "Mini SQL Template Files (*.mt)|*.mt|All Files (*.*)|*.*"; }
+        }
+
+        /// <summary>Gets or sets FileName.</summary>
+        public string FileName
+        {
+            get { return _fileName; }
+            set
+            {
+                _fileName = value;
+                Text = FileName;
+                SetTabTextByFilename();
+            }
+        }
+
+        /// <summary>Gets a value indicating whether IsBusy.</summary>
+        public bool IsBusy
+        {
+            get { return false; }
+        }
+
+        /// <summary>Gets or sets a value indicating whether IsDirty.</summary>
+        public bool IsDirty
+        {
+            get { return _isDirty; }
+            set
+            {
+                if (_isDirty != value)
+                {
+                    _isDirty = value;
+                    SetTabTextByFilename();
+                }
+            }
+        }
+
+        /// <summary>Gets SelectedText.</summary>
+        public string SelectedText
+        {
+            get { return txtEdit.ActiveTextAreaControl.SelectionManager.SelectedText; }
+        }
+
+        /// <summary>Gets TextFindService.</summary>
+        public ITextFindService TextFindService
+        {
+            get
+            {
+                if (_textFindService == null)
+                {
+                    _textFindService = _services.Resolve<ITextFindService>();
+                }
+
+                return _textFindService;
+            }
+        }
+
+        /// <summary>Gets TotalLines.</summary>
+        public int TotalLines
+        {
+            get { return txtEdit.Document.TotalNumberOfLines; }
+        }
+
+        /// <summary>The load highlighting provider.</summary>
+        public void LoadHighlightingProvider()
+        {
+            if (_highlightingProviderLoaded)
+            {
+                return;
+            }
+
+            // see: http://wiki.sharpdevelop.net/Syntax%20highlighting.ashx
+            string dir = Path.GetDirectoryName(GetType().Assembly.Location);
+            FileSyntaxModeProvider fsmProvider = new FileSyntaxModeProvider(dir);
+            HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider); // Attach to the text editor.
+            txtEdit.SetHighlighting("NVelocity");
+            _highlightingProviderLoaded = true;
+        }
+
+        /// <summary>The clear selection.</summary>
+        public void ClearSelection()
+        {
+            txtEdit.ActiveTextAreaControl.SelectionManager.ClearSelection();
+        }
+
+        /// <summary>The highlight string.</summary>
+        /// <param name="offset">The offset.</param>
+        /// <param name="length">The length.</param>
+        public void HighlightString(int offset, int length)
+        {
+            if (offset < 0 || length < 1)
+            {
+                return;
+            }
+
+            int endPos = offset + length;
+            txtEdit.ActiveTextAreaControl.SelectionManager.SetSelection(
+                txtEdit.Document.OffsetToPosition(offset),
+                txtEdit.Document.OffsetToPosition(endPos));
+            SetCursorByOffset(endPos);
+        }
+
+        /// <summary>The insert text.</summary>
+        /// <param name="text">The text.</param>
+        public void InsertText(string text)
+        {
+            if (string.IsNullOrEmpty(text))
+            {
+                return;
+            }
+
+            int offset = txtEdit.ActiveTextAreaControl.Caret.Offset;
+
+            // if some text is selected we want to replace it
+            if (txtEdit.ActiveTextAreaControl.SelectionManager.IsSelected(offset))
+            {
+                offset = txtEdit.ActiveTextAreaControl.SelectionManager.SelectionCollection[0].Offset;
+                txtEdit.ActiveTextAreaControl.SelectionManager.RemoveSelectedText();
+            }
+
+            txtEdit.Document.Insert(offset, text);
+            int newOffset = offset + text.Length; // new offset at end of inserted text
+
+            // now reposition the caret if required to be after the inserted text
+            if (CursorOffset != newOffset)
+            {
+                SetCursorByOffset(newOffset);
+            }
+
+            txtEdit.Focus();
+        }
+
+
+        /// <summary>The load file.</summary>
+        public void LoadFile()
+        {
+            txtEdit.LoadFile(FileName);
+            IsDirty = false;
+        }
+
+        /// <summary>The save file.</summary>
+        public void SaveFile()
+        {
+            txtEdit.SaveFile(FileName);
+            IsDirty = false;
+        }
+
+        /// <summary>The set syntax.</summary>
+        /// <param name="name">The name.</param>
+        public void SetSyntax(string name)
+        {
+            LoadHighlightingProvider();
+            txtEdit.SetHighlighting(name);
+        }
+
+        /// <summary>The find string.</summary>
+        /// <param name="value">The value.</param>
+        /// <param name="startIndex">The start index.</param>
+        /// <param name="comparisonType">The comparison type.</param>
+        /// <returns>The find string.</returns>
+        public int FindString(string value, int startIndex, StringComparison comparisonType)
+        {
+            if (string.IsNullOrEmpty(value) || startIndex < 0)
+            {
+                return -1;
+            }
+
+            string text = AllText;
+            int pos = text.IndexOf(value, startIndex, comparisonType);
+            if (pos > -1)
+            {
+                ClearSelection();
+                HighlightString(pos, value.Length);
+            }
+
+            return pos;
+        }
+
+        /// <summary>The replace string.</summary>
+        /// <param name="value">The value.</param>
+        /// <param name="startIndex">The start index.</param>
+        /// <param name="length">The length.</param>
+        /// <returns>The replace string.</returns>
+        public bool ReplaceString(string value, int startIndex, int length)
+        {
+            if (value == null || startIndex < 0 || length < 0)
+            {
+                return false;
+            }
+
+            if ((startIndex + length) > AllText.Length)
+            {
+                return false;
+            }
+
+            txtEdit.Document.Replace(startIndex, length, value);
+
+            return true;
+        }
+
+        /// <summary>The set text find service.</summary>
+        /// <param name="textFindService">The text find service.</param>
+        public void SetTextFindService(ITextFindService textFindService)
+        {
+            // accept nulls infering a reset
+            _textFindService = textFindService;
+        }
+
+        /// <summary>The set cursor by location.</summary>
+        /// <param name="line">The line.</param>
+        /// <param name="column">The column.</param>
+        /// <returns>The set cursor by location.</returns>
+        public bool SetCursorByLocation(int line, int column)
+        {
+            if (line > TotalLines)
+            {
+                return false;
+            }
+
+            txtEdit.ActiveTextAreaControl.Caret.Line = line;
+            txtEdit.ActiveTextAreaControl.Caret.Column = column;
+
+            return true;
+        }
+
+        /// <summary>The set cursor by offset.</summary>
+        /// <param name="offset">The offset.</param>
+        /// <returns>The set cursor by offset.</returns>
+        public bool SetCursorByOffset(int offset)
+        {
+            if (offset >= 0)
+            {
+                txtEdit.ActiveTextAreaControl.Caret.Position = txtEdit.Document.OffsetToPosition(offset);
+                return true;
+            }
+
+            return false;
+        }
+
+        /// <summary>The cancel task.</summary>
+        public void CancelTask()
+        {
+            // N/A
+        }
+
+        /// <summary>The execute task.</summary>
+        public void ExecuteTask()
+        {
+            RunTemplate();
+        }
+
+        /// <summary>The run template.</summary>
+        public void RunTemplate()
+        {
+            TemplateModel templateModel = _services.Resolve<TemplateModel>();
+            TemplateResult templateResult = null;
+            txtErrors.Clear();
+
+            try
+            {
+                string[] lines = AllText.Replace("\r", string.Empty).Split('\n');
+                string text;
+                Dictionary<string, object> items = new Dictionary<string, object>();
+                items[TemplateModel.Extension] = templateModel.InferExtensionFromFilename(FileName, items);
+                text = templateModel.PreProcessTemplate(lines, GetValue, items);
+                templateResult = templateModel.ProcessTemplate(text, items);
+            }
+            catch (TemplateException exp)
+            {
+                _hostWindow.DisplaySimpleMessageBox(this, exp.Message, "Template Error");
+
+                // todo - try to get the line number and move cursor?...
+                txtErrors.Text = exp.Message;
+            }
+
+            if (templateResult != null)
+            {
+                // display in new window
+                IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+                IEditor editor = _services.Resolve<IEditor>(resolver.ResolveEditorNameByExtension(templateResult.Extension));
+                editor.AllText = templateResult.Text;
+                editor.SetSyntax(templateResult.SyntaxName);
+                _hostWindow.DisplayDockedForm(editor as DockContent);
+            }
+        }
+
+        /// <summary>The document document changed.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void DocumentDocumentChanged(object sender, DocumentEventArgs e)
+        {
+            IsDirty = true;
+        }
+
+        /// <summary>The get value.</summary>
+        /// <param name="name">The name.</param>
+        /// <returns>The get value.</returns>
+        private string GetValue(string name)
+        {
+            string val = Interaction.InputBox(string.Format("Value for '{0}'", name), "Supply a Value", name, -1, -1);
+            return val;
+        }
+
+        /// <summary>The set tab text by filename.</summary>
+        private void SetTabTextByFilename()
+        {
+            string dirty = string.Empty;
+            string text = "Untitled";
+            string tabtext;
+
+            if (_isDirty)
+            {
+                dirty = " *";
+            }
+
+            if (txtEdit.FileName != null)
+            {
+                text = FileName;
+                tabtext = Path.GetFileName(FileName);
+            }
+            else
+            {
+                text += _services.Settings.GetUntitledDocumentCounter();
+                tabtext = text;
+            }
+
+            TabText = tabtext + dirty;
+            ToolTipText = text + dirty;
+        }
+
+        /// <summary>The template editor form_ form closing.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void TemplateEditorForm_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            if (_isDirty)
+            {
+                DialogResult saveFile = _hostWindow.DisplayMessageBox(
+                    this,
+                    "Contents changed, do you want to save the file?\r\n" + TabText, "Save Changes?",
+                    MessageBoxButtons.YesNoCancel,
+                    MessageBoxIcon.Question,
+                    MessageBoxDefaultButton.Button1,
+                    0,
+                    null,
+                    null);
+
+                if (saveFile == DialogResult.Cancel)
+                {
+                    e.Cancel = true;
+                }
+                else if (saveFile == DialogResult.Yes)
+                {
+                    CommandManager.GetCommandInstance<SaveFileCommand>().Execute();
+                }
+            }
+        }
+
+        /// <summary>The template editor form_ load.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void TemplateEditorForm_Load(object sender, EventArgs e)
+        {
+            rtfHelp.Rtf = TemplateResources.TemplateHelp;
+        }
+    }
+}
\ No newline at end of file
Added +170 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs
new file mode 100644
index 0000000..51fb08c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs
@@ -0,0 +1,170 @@
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+	partial class TemplateEditorForm : ITemplateEditor
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.IContainer components = null;
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+		protected override void Dispose(bool disposing)
+		{
+			if (disposing && (components != null))
+			{
+				components.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+
+		#region Windows Form Designer generated code
+
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.components = new System.ComponentModel.Container();
+			this.txtEdit = new ICSharpCode.TextEditor.TextEditorControl();
+			this.tabControl1 = new System.Windows.Forms.TabControl();
+			this.tabPageTemplateSource = new System.Windows.Forms.TabPage();
+			this.tabPageHelp = new System.Windows.Forms.TabPage();
+			this.rtfHelp = new System.Windows.Forms.RichTextBox();
+			this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+			this.txtErrors = new System.Windows.Forms.TextBox();
+			this.formContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+			this.tabControl1.SuspendLayout();
+			this.tabPageTemplateSource.SuspendLayout();
+			this.tabPageHelp.SuspendLayout();
+			this.splitContainer1.Panel1.SuspendLayout();
+			this.splitContainer1.Panel2.SuspendLayout();
+			this.splitContainer1.SuspendLayout();
+			this.SuspendLayout();
+			// 
+			// txtEdit
+			// 
+			this.txtEdit.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.txtEdit.IsReadOnly = false;
+			this.txtEdit.Location = new System.Drawing.Point(3, 3);
+			this.txtEdit.Name = "txtEdit";
+			this.txtEdit.Size = new System.Drawing.Size(533, 314);
+			this.txtEdit.TabIndex = 0;
+			// 
+			// tabControl1
+			// 
+			this.tabControl1.Controls.Add(this.tabPageTemplateSource);
+			this.tabControl1.Controls.Add(this.tabPageHelp);
+			this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.tabControl1.Location = new System.Drawing.Point(0, 0);
+			this.tabControl1.Name = "tabControl1";
+			this.tabControl1.SelectedIndex = 0;
+			this.tabControl1.Size = new System.Drawing.Size(547, 346);
+			this.tabControl1.TabIndex = 1;
+			// 
+			// tabPageTemplateSource
+			// 
+			this.tabPageTemplateSource.Controls.Add(this.txtEdit);
+			this.tabPageTemplateSource.Location = new System.Drawing.Point(4, 22);
+			this.tabPageTemplateSource.Name = "tabPageTemplateSource";
+			this.tabPageTemplateSource.Padding = new System.Windows.Forms.Padding(3);
+			this.tabPageTemplateSource.Size = new System.Drawing.Size(539, 320);
+			this.tabPageTemplateSource.TabIndex = 0;
+			this.tabPageTemplateSource.Text = "Template Source";
+			this.tabPageTemplateSource.UseVisualStyleBackColor = true;
+			// 
+			// tabPageHelp
+			// 
+			this.tabPageHelp.Controls.Add(this.rtfHelp);
+			this.tabPageHelp.Location = new System.Drawing.Point(4, 22);
+			this.tabPageHelp.Name = "tabPageHelp";
+			this.tabPageHelp.Padding = new System.Windows.Forms.Padding(3);
+			this.tabPageHelp.Size = new System.Drawing.Size(539, 321);
+			this.tabPageHelp.TabIndex = 1;
+			this.tabPageHelp.Text = "Quick Help";
+			this.tabPageHelp.UseVisualStyleBackColor = true;
+			// 
+			// rtfHelp
+			// 
+			this.rtfHelp.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.rtfHelp.Location = new System.Drawing.Point(3, 3);
+			this.rtfHelp.Name = "rtfHelp";
+			this.rtfHelp.ReadOnly = true;
+			this.rtfHelp.ShowSelectionMargin = true;
+			this.rtfHelp.Size = new System.Drawing.Size(533, 315);
+			this.rtfHelp.TabIndex = 0;
+			this.rtfHelp.Text = "";
+			// 
+			// splitContainer1
+			// 
+			this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.splitContainer1.Location = new System.Drawing.Point(4, 4);
+			this.splitContainer1.Name = "splitContainer1";
+			this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+			// 
+			// splitContainer1.Panel1
+			// 
+			this.splitContainer1.Panel1.Controls.Add(this.tabControl1);
+			// 
+			// splitContainer1.Panel2
+			// 
+			this.splitContainer1.Panel2.Controls.Add(this.txtErrors);
+			this.splitContainer1.Size = new System.Drawing.Size(547, 437);
+			this.splitContainer1.SplitterDistance = 346;
+			this.splitContainer1.TabIndex = 2;
+			// 
+			// txtErrors
+			// 
+			this.txtErrors.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.txtErrors.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+			this.txtErrors.Location = new System.Drawing.Point(0, 0);
+			this.txtErrors.Multiline = true;
+			this.txtErrors.Name = "txtErrors";
+			this.txtErrors.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+			this.txtErrors.Size = new System.Drawing.Size(547, 87);
+			this.txtErrors.TabIndex = 0;
+			// 
+			// formContextMenuStrip
+			// 
+			this.formContextMenuStrip.Name = "formContextMenuStrip";
+			this.formContextMenuStrip.Size = new System.Drawing.Size(153, 26);
+			// 
+			// TemplateEditorForm
+			// 
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.ClientSize = new System.Drawing.Size(555, 445);
+			this.Controls.Add(this.splitContainer1);
+			this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+			this.Name = "TemplateEditorForm";
+			this.Padding = new System.Windows.Forms.Padding(4);
+			this.TabPageContextMenuStrip = this.formContextMenuStrip;
+			this.Text = "TemplateEditorForm";
+			this.Load += new System.EventHandler(this.TemplateEditorForm_Load);
+			this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TemplateEditorForm_FormClosing);
+			this.tabControl1.ResumeLayout(false);
+			this.tabPageTemplateSource.ResumeLayout(false);
+			this.tabPageHelp.ResumeLayout(false);
+			this.splitContainer1.Panel1.ResumeLayout(false);
+			this.splitContainer1.Panel2.ResumeLayout(false);
+			this.splitContainer1.Panel2.PerformLayout();
+			this.splitContainer1.ResumeLayout(false);
+			this.ResumeLayout(false);
+
+		}
+
+		#endregion
+
+		private ICSharpCode.TextEditor.TextEditorControl txtEdit;
+		private System.Windows.Forms.TabControl tabControl1;
+		private System.Windows.Forms.TabPage tabPageTemplateSource;
+		private System.Windows.Forms.TabPage tabPageHelp;
+		private System.Windows.Forms.RichTextBox rtfHelp;
+		private System.Windows.Forms.SplitContainer splitContainer1;
+		private System.Windows.Forms.TextBox txtErrors;
+		private System.Windows.Forms.ContextMenuStrip formContextMenuStrip;
+	}
+}
Added +123 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx
new file mode 100644
index 0000000..a4d9552
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="formContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
Added +449 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf
new file mode 100644
index 0000000..f8fea0d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf
@@ -0,0 +1,449 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang3081\deflangfe3081\themelang3081\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
+{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\f288\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\f289\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\f291\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\f292\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\f293\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\f294\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\f295\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\f296\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\f298\fbidi \fswiss\fcharset238\fprq2 Arial CE{\*\falt Arial};}
+{\f299\fbidi \fswiss\fcharset204\fprq2 Arial Cyr{\*\falt Arial};}{\f301\fbidi \fswiss\fcharset161\fprq2 Arial Greek{\*\falt Arial};}{\f302\fbidi \fswiss\fcharset162\fprq2 Arial Tur{\*\falt Arial};}
+{\f303\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew){\*\falt Arial};}{\f304\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic){\*\falt Arial};}{\f305\fbidi \fswiss\fcharset186\fprq2 Arial Baltic{\*\falt Arial};}
+{\f306\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese){\*\falt Arial};}{\f308\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f309\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f311\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}
+{\f312\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f313\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f314\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f315\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}
+{\f316\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f628\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f629\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f631\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}
+{\f632\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f635\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f658\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f659\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
+{\f661\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f662\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f665\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
+{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}
+{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}
+{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
+{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
+{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
+{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}}{\colortbl;\red0\green0\blue0;
+\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
+\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green100\blue0;\red139\green69\blue19;}{\*\defchp \f37\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 
+\f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\listtable
+{\list\listtemplateid1994920380\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 
+\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
+\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
+\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid586115817}{\list\listtemplateid1513266810\listhybrid{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace3240\levelindent0{\leveltext\leveltemplateid474885214\'01\u-3913 ?;}{\levelnumbers;}\loch\af3\hich\af3\dbch\af0\fbias0\hres0\chhres0 \fi-360\li1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li-1080\lin-1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li-360\lin-360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
+\levelspace3240\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\lin3960 }{\listname ;}\listid877427267}{\list\listtemplateid1704463912\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid474885214\'01\u-3913 ?;}{\levelnumbers;}\loch\af3\hich\af3\dbch\af0\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0
+{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li7200\lin7200 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li7920\lin7920 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers
+;}\f2\fbias0\hres0\chhres0 \fi-360\li8640\lin8640 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0\hres0\chhres0 \fi-360\li9360\lin9360 }{\listname ;}\listid1344089321}{\list\listtemplateid748702832\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1431273083}{\list\listtemplateid1223347500\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1611547526}{\list\listtemplateid1417693332\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1768498529}}{\*\listoverridetable{\listoverride\listid1344089321\listoverridecount0\ls1}{\listoverride\listid877427267\listoverridecount0\ls2}
+{\listoverride\listid586115817\listoverridecount0\ls3}{\listoverride\listid1611547526\listoverridecount0\ls4}{\listoverride\listid1431273083\listoverridecount0\ls5}{\listoverride\listid1768498529\listoverridecount0\ls6}}{\*\rsidtbl \rsid939189\rsid3482954
+\rsid4084760\rsid4728322\rsid5655077\rsid9175728\rsid9329129\rsid9330872\rsid9527813\rsid11020037\rsid11871217\rsid11956202\rsid12725751\rsid13640472\rsid13906272\rsid15340299}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0
+\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Paul}{\creatim\yr2009\mo9\dy16\hr16\min42}{\revtim\yr2009\mo10\dy6\hr6\min37}{\version15}{\edmins1569}{\nofpages3}{\nofwords675}{\nofchars4049}{\nofcharsws4715}{\vern32771}}
+{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}{\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect 
+\widowctrl\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\noxlattoyen
+\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\viewnobound1\rsidroot5655077 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar 
+\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 
+\af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 {\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Template Help
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par Mini SQL Query takes advantage of the }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813\charrsid11020037 NVelocity}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  template engine to transform simple scripts into SQL scripts, C#}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872 /VB}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+ code, HTML mark-up or any other type of text output. The scripts have access to the database model making it a simple yet powerful tool}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872 
+. It is also possible to get user input for variables or import references to plug}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid12725751 -}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872 ins}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\f1\fs20\insrsid12725751  for execution}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 . The following examples use the }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \i\f1\fs20\insrsid9527813\charrsid11020037 Northwind SQL Compact Edition}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  sample database.
+\par 
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Pre-Processor Directives
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par A Pre-processor directive is Mini SQL Query specific and start with \'93#@\'94. They are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls6\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 #@get <}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 variable}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 >}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  (used to prompt the user for a value, currently just text)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls6\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 #@set <}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 property}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 > <}{
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 value}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 >}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  (currently just \'93extension
+\'94)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid4728322\charrsid4728322 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4728322\charrsid4728322 #@import-plugin}{\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322  <plugin-type-name>
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Directives
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par Template directives are signalled with a hash (#) and are pure NVelocity syntax. Some directives are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 foreach}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 end}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 set
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 if / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\insrsid9527813\charrsid15340299 ifelse}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 else}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+ / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 end}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par Other more advanced directives include:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 macro
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid15340299 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 include
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Built in Variables
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par Variables are de-referenced with the format $\{}{\rtlch\fcs1 \ai\af1\afs20 \ltrch\fcs0 \i\f1\fs20\insrsid9527813 varable-name}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 \}
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 The following variables are built in}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 .
+\par 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129 $\{}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129\charrsid9329129 Host}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129 \}}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \b\i\f1\fs20\insrsid9329129\charrsid9329129 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 The host variable allows access to several helper functions and data, most notably the \'93Model\'94. The model is t
+he database schema of the current connection. The model contains collections of tables and views with their respective columns. }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 Each column has the}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\f1\fs20\insrsid13640472  primary/unique key and}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217  type information}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 . I}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 
+f supported by the schema service of that database }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 the column }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 will contain foreign key information.}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid9329129 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 The \'93Model\'94 hierarchy is below:
+\par }\pard \ltrpar\ql \fi-360\li1440\ri0\nowidctlpar\tx1440\wrapdefault\faauto\rin0\lin1440\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813 o\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Model
+\par }\pard \ltrpar\ql \fi-360\li2160\ri0\nowidctlpar\tx2160\wrapdefault\faauto\rin0\lin2160\itap0 {\rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\insrsid9527813 \'a7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Tables (list)
+\par }\pard \ltrpar\ql \fi-360\li2880\ri0\nowidctlpar\tx2880\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Schema (e.g. "dbo")
+\par }\pard \ltrpar\ql \fi-360\li2880\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Name (e.g. "User")
+\par }{\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 FullName  (e.g. "dbo.User")
+\par }{\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Columns (list)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\rin0\lin3600\itap0\pararsid5655077 {\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Name (e.g. "int")
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077\charrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077\charrsid5655077 Nullable}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid5655077 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9175728\charrsid9175728 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 DbType}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid9175728 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid9329129 {\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 Name
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Summary (renders the type with respect to Length)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Length
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129\charrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129 Precision}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid9329129 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Scale
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}SystemType (the .Net type, e.g. System.String)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\rin0\lin3600\itap0\pararsid5655077 {\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077 IsKey
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsUnique
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsRowVersion (e.g. a Timestamp column)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsIdentity
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsAutoIncrement
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsReadOnly (e.g. a auto increment or timestamp column)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsWritable
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}HasFK (true if the column references another table)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077\charrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077\charrsid5655077 ForeignKeyReference}{\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728  (applicable if HasFK is true)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar
+\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid5655077 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ConstraintName}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ReferenceTable}{\rtlch\fcs1 \af1\afs20 
+\ltrch\fcs0 \f1\fs20\insrsid9175728 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f10\fs20\insrsid9175728 \loch\af10\dbch\af0\hich\f10 \'a7\tab}}\pard \ltrpar\ql \fi-360\li5040\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl2\rin0\lin5040\itap0\pararsid9175728 {
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 FullName etc (as Table)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar
+\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid9175728 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ReferenceColumn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f10\fs20\insrsid9175728 \loch\af10\dbch\af0\hich\f10 \'a7\tab}}\pard \ltrpar\ql \fi-360\li5040\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl2\rin0\lin5040\itap0\pararsid9329129 {
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 Name etc (as Column)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954 
+\par There is also a \'93Views\'94 list with the same objects available for scripting.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 Other \'93Host\'94 functions are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx709\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid13640472\charrsid15340299 MachineName
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}UserName
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx709\wrapdefault\faauto\ls3\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid13640472\charrsid15340299 Date(format)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813  \endash  where format is something like \'93d MMM yyyy\'94 or \'93dd/MM/yy\'94 etc}{\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid939189\charrsid15340299 ToPascalCase(text)}{\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189  \endash  converts \'93user_name\'94 to \'93UserName\'94 for example}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954 
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid939189\charrsid15340299 ToCamelCase(text)}{\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189  \endash  converts \'93FirstName\'94 to \'93firstName\'94 for example
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189 \loch\af3\dbch\af0\hich\f3 \'b7\tab}(if you want more email me or better yet send a patch for the \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\f1\fs20\insrsid939189\charrsid939189 TemplateHost}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189 \'94 class!)
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 
+\par }\pard \ltrpar\ql \li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin3600\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129 
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid939189 Sample - All Table Names}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid9527813 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid9527813 ($table in }{\rtlch\fcs1 
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid9527813 $\{Host.Model.Tables\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid9527813 )
+\par Table: }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid9527813 $\{table.Name\}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid9527813 #end
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par Sample Output:
+\par 
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813 Table: Categories
+\par Table: Customers
+\par Table: Employees
+\par Table: Order Details
+\par Table: Orders
+\par Table: Products
+\par Table: Shippers
+\par Table: Suppliers
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 
+\par 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid13906272\charrsid13906272 Sample - CSharp Model.cs}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813\charrsid13906272 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272 
+\par A simple script to produce a C# class for each table:
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272\charrsid13906272 
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid13906272 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 
+($table in $Host.Model.Tables)
+\par public class }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid13906272 $\{table.Name\}
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \{
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 ($c in $table.Columns)
+\par \tab public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid13906272 $\{c.DbType.SystemType\} $\{Host.ToPascalCase($c.Name)\} }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \{ get; set; \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #end
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #end
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272 
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13906272 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272 Sample Output:
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272 
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4084760 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf6\insrsid4084760 class }{\rtlch\fcs1 
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Categories
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Int32 CategoryID }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CategoryName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Description }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Byte}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 [] }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Picture }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ 
+}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; \}
+\par \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf6\insrsid4084760 class }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Customers
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CustomerID }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CompanyName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String ContactName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String ContactTitle }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Address }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 {\*\xmlopen\xmlns2{\factoidname PlaceName}}{\*\xmlopen\xmlns2{\factoidname place}}System}{\rtlch\fcs1 
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String{\*\xmlclose} {\*\xmlopen\xmlns2{\factoidname PlaceType}}City{\*\xmlclose}{\*\xmlclose} }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Region }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String PostalCode }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Country }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Phone }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Fax }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 
+; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \}
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4084760 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4084760 ...
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4084760 
+\par 
+\par 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid11956202\charrsid4728322 Sample - Plugin Access.txt
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 You can import a plug-in to the script using it\rquote s fully qualified type name and access the properties and methods for that plug-in. Note that the name of the plug-in variable 
+in the template has the dots replaced with underscores (i.e. \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322\charrsid4728322 MiniSqlQuery.PlugIns.CoreApplicationPlugIn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 \'94
+ has a variable name of \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322\charrsid4728322 MiniSqlQuery_PlugIns_CoreApplicationPlugIn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 \'94)
+\par 
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid11956202 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 #@import-plugin MiniSqlQuery.PlugIns.CoreApplicationPlugIn
+\par 
+\par \\}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 :
+\par   "}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 "
+\par \\}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}
+\par   }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 "}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 
+\f2\fs20\cf1\insrsid11956202 "
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202 
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4728322 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 Sample Output:
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202 
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4728322 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4728322\charrsid4728322 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}:
+\par   "Mini SQL Query Core"
+\par $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}
+\par   "Plugin to setup the core features of Mini SQL Query."}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid11956202\charrsid4728322 
+\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
+72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
+2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
+44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
+065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
+00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
+84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
+52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
+bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
+656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
+070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
+29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65
+312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8
+a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04
+98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c
+94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471
+7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671
+9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1
+e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5
+193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1
+17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2
+8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6
+6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a
+668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847
+bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e
+16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b
+5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0
+8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2
+c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966
+0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b
+7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb
+9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0
+088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf
+8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26
+ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0
+28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6
+345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93
+b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30
+254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74
+68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24
+51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198
+720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528
+a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000
+000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000
+002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468
+656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000
+00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000
+00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}
+{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
+617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
+6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
+656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
+{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Normal;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 heading 1;\lsdqformat1 \lsdpriority0 heading 2;\lsdqformat1 \lsdpriority0 heading 3;\lsdqformat1 \lsdpriority0 heading 4;\lsdqformat1 \lsdpriority0 heading 5;\lsdqformat1 \lsdpriority0 heading 6;
+\lsdqformat1 \lsdpriority0 heading 7;\lsdqformat1 \lsdpriority0 heading 8;\lsdqformat1 \lsdpriority0 heading 9;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 7;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 8;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 9;\lsdqformat1 \lsdpriority0 caption;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Title;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 Default Paragraph Font;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Subtitle;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
+\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;
+\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000003053
+7f9ffb45ca01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000105000000000000}}
\ No newline at end of file
Added +155 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs
new file mode 100644
index 0000000..f699214
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs
@@ -0,0 +1,155 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Globalization;
+using System.Text;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template host.</summary>
+    public class TemplateHost : IDisposable
+    {
+        /// <summary>The _database inspector.</summary>
+        private readonly IDatabaseInspector _databaseInspector;
+
+        private TemplateData _data;
+
+        /// <summary>Initializes a new instance of the <see cref="TemplateHost"/> class.</summary>
+        /// <param name="applicationServices">The application services.</param>
+        /// <param name="databaseInspector">The database inspector.</param>
+        public TemplateHost(IApplicationServices applicationServices, IDatabaseInspector databaseInspector)
+        {
+            Services = applicationServices;
+            _databaseInspector = databaseInspector;
+        }
+
+        /// <summary>Gets or sets Data.</summary>
+        public TemplateData Data
+        {
+            get
+            {
+                if (_data == null)
+                {
+                    _data = Services.Resolve<TemplateData>();
+                }
+                return _data;
+            }
+            set { _data = value; }
+        }
+
+        /// <summary>Gets MachineName.</summary>
+        public string MachineName
+        {
+            get { return Environment.MachineName; }
+        }
+
+        /// <summary>Gets Model.</summary>
+        public DbModelInstance Model
+        {
+            get
+            {
+                if (_databaseInspector.DbSchema == null)
+                {
+                    _databaseInspector.LoadDatabaseDetails();
+                }
+
+                return _databaseInspector.DbSchema;
+            }
+        }
+
+        /// <summary>Gets Services.</summary>
+        public IApplicationServices Services { get; private set; }
+
+        /// <summary>Gets UserName.</summary>
+        public string UserName
+        {
+            get { return Environment.UserName; }
+        }
+
+        // to do - helper functions for changing names too code friendly etc
+
+        /// <summary>The date.</summary>
+        /// <param name="format">The format.</param>
+        /// <returns>The date.</returns>
+        public string Date(string format)
+        {
+            return DateTime.Now.ToString(format);
+        }
+
+        /// <summary>The to camel case.</summary>
+        /// <param name="text">The text.</param>
+        /// <returns>The to camel case.</returns>
+        public string ToCamelCase(string text)
+        {
+            if (text == null)
+            {
+                return string.Empty;
+            }
+
+            StringBuilder sb = new StringBuilder();
+            text = ToPascalCase(text);
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                if (Char.IsUpper(text, i))
+                {
+                    sb.Append(Char.ToLower(text[i]));
+                }
+                else
+                {
+                    // allows for names that start with an acronym, e.g. "ABCCode" -> "abcCode"
+                    if (i > 1)
+                    {
+                        i--; // reverse one
+                        sb.Remove(i, 1); // drop last lower cased char
+                    }
+
+                    sb.Append(text.Substring(i));
+                    break;
+                }
+            }
+
+            return sb.ToString();
+        }
+
+        /// <summary>The to pascal case.</summary>
+        /// <param name="text">The text.</param>
+        /// <returns>The to pascal case.</returns>
+        public string ToPascalCase(string text)
+        {
+            if (text == null)
+            {
+                return string.Empty;
+            }
+
+            if (text.Contains(" ") || text.Contains("_"))
+            {
+                text = text.Replace("_", " ");
+                text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text);
+                text = text.Replace(" ", string.Empty);
+            }
+            else if (text.Length > 1)
+            {
+                text = char.ToUpper(text[0]) + text.Substring(1);
+            }
+
+            return text;
+        }
+
+        /// <summary>The dispose.</summary>
+        public void Dispose()
+        {
+            if (Data != null)
+            {
+                Data.Dispose();
+            }
+        }
+    }
+}
\ No newline at end of file
Added +202 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs
new file mode 100644
index 0000000..b1a1324
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs
@@ -0,0 +1,202 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Template;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template model.</summary>
+    public class TemplateModel
+    {
+        /// <summary>The extension.</summary>
+        public const string Extension = "extension";
+
+        /// <summary>The _formatter.</summary>
+        private readonly ITextFormatter _formatter;
+
+        /// <summary>The _services.</summary>
+        private readonly IApplicationServices _services;
+
+        /// <summary>Initializes a new instance of the <see cref="TemplateModel"/> class.</summary>
+        /// <param name="services">The services.</param>
+        /// <param name="formatter">The formatter.</param>
+        public TemplateModel(IApplicationServices services, ITextFormatter formatter)
+        {
+            _services = services;
+            _formatter = formatter;
+        }
+
+        /// <summary>The get value for parameter.</summary>
+        /// <param name="parameter">The parameter.</param>
+        public delegate string GetValueForParameter(string parameter);
+
+        /// <summary>The create nodes.</summary>
+        /// <returns></returns>
+        public TreeNode[] CreateNodes()
+        {
+            string path = GetTemplatePath();
+            return CreateNodes(path, GetFilesForFolder(path));
+        }
+
+        /// <summary>The create nodes.</summary>
+        /// <param name="rootPath">The root path.</param>
+        /// <param name="files">The files.</param>
+        /// <returns></returns>
+        public TreeNode[] CreateNodes(string rootPath, string[] files)
+        {
+            List<TreeNode> nodes = new List<TreeNode>();
+
+            foreach (string file in files)
+            {
+                if (file.StartsWith(rootPath))
+                {
+                    FileInfo fi = new FileInfo(file);
+
+                    TreeNode node = new TreeNode(Path.GetFileNameWithoutExtension(fi.FullName));
+                    node.ImageKey = "script_code";
+                    node.SelectedImageKey = "script_code";
+                    node.Tag = fi; // store file info on tag
+                    node.ToolTipText = fi.FullName;
+
+                    nodes.Add(node);
+                }
+            }
+
+            return nodes.ToArray();
+        }
+
+        /// <summary>The get files for folder.</summary>
+        /// <param name="path">The path.</param>
+        /// <returns></returns>
+        public string[] GetFilesForFolder(string path)
+        {
+            return Directory.GetFiles(path, "*.mt", SearchOption.TopDirectoryOnly);
+        }
+
+        /// <summary>The get template path.</summary>
+        /// <returns>The get template path.</returns>
+        public string GetTemplatePath()
+        {
+            string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+            path = Path.Combine(path, TemplateResources.TemplatesDirectoryName);
+
+            return path;
+        }
+
+        /// <summary>The infer extension from filename.</summary>
+        /// <param name="filename">The filename.</param>
+        /// <param name="items">The items.</param>
+        /// <returns>The infer extension from filename.</returns>
+        public string InferExtensionFromFilename(string filename, Dictionary<string, object> items)
+        {
+            string ext = Path.GetExtension(filename);
+            string templateFilename = Path.GetFileNameWithoutExtension(filename);
+            if (ext.ToLower() == ".mt" && templateFilename.Contains("."))
+            {
+                return Path.GetExtension(templateFilename).Substring(1);
+            }
+
+            // default
+            return "sql";
+        }
+
+        /// <summary>The pre process template.</summary>
+        /// <param name="lines">The lines.</param>
+        /// <param name="getValueForParameter">The get value for parameter.</param>
+        /// <param name="items">The items.</param>
+        /// <returns>The pre process template.</returns>
+        public string PreProcessTemplate(
+            string[] lines,
+            GetValueForParameter getValueForParameter,
+            Dictionary<string, object> items)
+        {
+            int i = 0;
+            for (; i < lines.Length; i++)
+            {
+                string line = lines[i];
+                if (line.StartsWith("#@"))
+                {
+                    // process cmd
+                    if (line.StartsWith("#@get ", StringComparison.CurrentCultureIgnoreCase))
+                    {
+                        string name = line.Substring("#@get ".Length);
+                        string val = getValueForParameter(name);
+                        items.Add(name, val);
+                    }
+                    else if (line.StartsWith("#@set extension ", StringComparison.CurrentCultureIgnoreCase))
+                    {
+                        items[Extension] = line.Substring("#@set extension ".Length);
+                    }
+                    else if (line.StartsWith("#@import-plugin ", StringComparison.CurrentCultureIgnoreCase))
+                    {
+                        string pluginKeyName = line.Substring("#@import-plugin ".Length);
+                        items[pluginKeyName.Replace(".", "_")] = _services.Resolve<IPlugIn>(pluginKeyName);
+                    }
+                }
+                else
+                {
+                    break;
+                }
+            }
+
+            string text = string.Join(Environment.NewLine, lines, i, lines.Length - i);
+
+            return text;
+        }
+
+        /// <summary>The process template.</summary>
+        /// <param name="text">The text.</param>
+        /// <param name="items">The items.</param>
+        /// <returns></returns>
+        public TemplateResult ProcessTemplate(string text, Dictionary<string, object> items)
+        {
+            if (items == null)
+            {
+                items = new Dictionary<string, object>();
+            }
+
+            TemplateResult result;
+
+            using (TemplateHost host = _services.Resolve<TemplateHost>())
+            {
+                items.Add("Host", host);
+                items.Add("Data", host.Data);
+
+                result = new TemplateResult();
+                result.Text = _formatter.Format(text, items);
+                result.Extension = "sql";
+                if (items.ContainsKey(Extension))
+                {
+                    result.Extension = (string)items[Extension];
+                }
+            }
+
+            return result;
+        }
+
+        /// <summary>The process template file.</summary>
+        /// <param name="filename">The filename.</param>
+        /// <param name="getValueForParameter">The get value for parameter.</param>
+        /// <returns></returns>
+        public TemplateResult ProcessTemplateFile(string filename, GetValueForParameter getValueForParameter)
+        {
+            Dictionary<string, object> items = new Dictionary<string, object>();
+            string[] lines = File.ReadAllLines(filename);
+
+            items[Extension] = InferExtensionFromFilename(filename, items);
+
+            string text = PreProcessTemplate(lines, getValueForParameter, items);
+            return ProcessTemplate(text, items);
+        }
+    }
+}
\ No newline at end of file
Added +82 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs
new file mode 100644
index 0000000..8f33b18
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs
@@ -0,0 +1,82 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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", "16.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class TemplateResources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal TemplateResources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [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("MiniSqlQuery.PlugIns.TemplateViewer.TemplateResources", typeof(TemplateResources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang3081\deflangfe3081\themelang3081\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+        ///{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 0505010201070602 [rest of string was truncated]&quot;;.
+        /// </summary>
+        internal static string TemplateHelp {
+            get {
+                return ResourceManager.GetString("TemplateHelp", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Templates.
+        /// </summary>
+        internal static string TemplatesDirectoryName {
+            get {
+                return ResourceManager.GetString("TemplatesDirectoryName", resourceCulture);
+            }
+        }
+    }
+}
Added +127 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx
new file mode 100644
index 0000000..55c706a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="TemplateHelp" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>templatehelp.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="TemplatesDirectoryName" xml:space="preserve">
+    <value>Templates</value>
+  </data>
+</root>
\ No newline at end of file
Added +67 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs
new file mode 100644
index 0000000..bd525b6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs
@@ -0,0 +1,67 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template result.</summary>
+    public class TemplateResult
+    {
+        /// <summary>Gets or sets Extension.</summary>
+        public string Extension { get; set; }
+
+        /// <summary>
+        /// Converts the <see cref="Extension"/> to an Editor "Syntax Name" such as "C#".
+        /// </summary>
+        public string SyntaxName
+        {
+            get
+            {
+                string ext = Extension ?? string.Empty;
+                switch (ext.ToLower())
+                {
+                    case "bat":
+                    case "boo":
+                    case "coco":
+                    case "java":
+                    case "patch":
+                    case "php":
+                    case "tex":
+                    case "xml":
+                    case "sql":
+                    case "txt":
+                        return Extension;
+
+                    case "asp":
+                    case "aspx":
+                    case "htm":
+                    case "html":
+                        return "ASP/XHTML";
+
+                    case "vb":
+                        return "VBNET";
+
+                    case "js":
+                        return "JavaScript";
+
+                    case "cpp":
+                    case "cxx":
+                        return "C++.NET";
+
+                    case "cs":
+                        return "C#";
+
+                    default:
+                        return string.Empty;
+                }
+            }
+        }
+
+        /// <summary>Gets or sets Text.</summary>
+        public string Text { get; set; }
+    }
+}
\ No newline at end of file
Added +35 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs
new file mode 100644
index 0000000..8d56921
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs
@@ -0,0 +1,35 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.TemplateViewer.Commands;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template viewer loader.</summary>
+    public class TemplateViewerLoader : PluginLoaderBase
+    {
+        /// <summary>Initializes a new instance of the <see cref="TemplateViewerLoader"/> class.</summary>
+        public TemplateViewerLoader()
+            : base("Template Viewer", "A Mini SQL Query Plugin for displaying template SQL items.", 50)
+        {
+        }
+
+        /// <summary>Iinitialize the plug in.</summary>
+        public override void InitializePlugIn()
+        {
+            Services.RegisterEditor<TemplateEditorForm>(new FileEditorDescriptor("Template Editor", "mt-editor", "mt"));
+            Services.RegisterComponent<TemplateHost>("TemplateHost");
+            Services.RegisterComponent<TemplateData>("TemplateData");
+
+            Services.RegisterComponent<TemplateViewForm>("TemplateViewForm");
+            Services.HostWindow.AddPluginCommand<RunTemplateCommand>();
+            Services.HostWindow.ShowToolWindow(Services.Resolve<TemplateViewForm>(), DockState.DockLeft);
+        }
+    }
+}
\ No newline at end of file
Added +152 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs
new file mode 100644
index 0000000..a2f45a8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs
@@ -0,0 +1,152 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.IO;
+using System.Windows.Forms;
+using Microsoft.VisualBasic;
+using MiniSqlQuery.Core;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+    /// <summary>The template view form.</summary>
+    public partial class TemplateViewForm : DockContent
+    {
+        /// <summary>The _model.</summary>
+        private readonly TemplateModel _model;
+
+        /// <summary>The _services.</summary>
+        private readonly IApplicationServices _services;
+
+        /// <summary>The _selected file.</summary>
+        private FileInfo _selectedFile;
+
+        /// <summary>Initializes a new instance of the <see cref="TemplateViewForm"/> class.</summary>
+        /// <param name="services">The services.</param>
+        /// <param name="model">The model.</param>
+        public TemplateViewForm(IApplicationServices services, TemplateModel model)
+        {
+            InitializeComponent();
+            _services = services;
+            _model = model;
+        }
+
+        /// <summary>The get value.</summary>
+        /// <param name="name">The name.</param>
+        /// <returns>The get value.</returns>
+        private string GetValue(string name)
+        {
+            string val = Interaction.InputBox(string.Format("Value for '{0}'", name), "Supply a Value", name, -1, -1);
+            return val;
+        }
+
+        /// <summary>The populate tree.</summary>
+        private void PopulateTree()
+        {
+            tvTemplates.Nodes[0].Nodes.Clear();
+            tvTemplates.Nodes[0].Nodes.AddRange(_model.CreateNodes());
+            tvTemplates.Nodes[0].Expand();
+        }
+
+        /// <summary>The run template.</summary>
+        /// <param name="fi">The fi.</param>
+        private void RunTemplate(FileInfo fi)
+        {
+            TemplateResult templateResult = _model.ProcessTemplateFile(fi.FullName, GetValue);
+
+            // display in new window
+            IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+            IEditor editor = _services.Resolve<IEditor>(resolver.ResolveEditorNameByExtension(templateResult.Extension));
+            editor.AllText = templateResult.Text;
+            editor.SetSyntax(templateResult.SyntaxName);
+            _services.HostWindow.DisplayDockedForm(editor as DockContent);
+        }
+
+        /// <summary>The template view form_ load.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void TemplateViewForm_Load(object sender, EventArgs e)
+        {
+            PopulateTree();
+            templateFileWatcher.Path = _model.GetTemplatePath();
+        }
+
+        /// <summary>The template file watcher_ changed.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void templateFileWatcher_Changed(object sender, FileSystemEventArgs e)
+        {
+            PopulateTree();
+        }
+
+        /// <summary>The template file watcher_ renamed.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void templateFileWatcher_Renamed(object sender, RenamedEventArgs e)
+        {
+            // todo - scan and modify tree
+            PopulateTree();
+        }
+
+        /// <summary>The tool strip menu item edit_ click.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void toolStripMenuItemEdit_Click(object sender, EventArgs e)
+        {
+            if (_selectedFile != null)
+            {
+                IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+                var editor = resolver.ResolveEditorInstance(_selectedFile.FullName);
+                editor.FileName = _selectedFile.FullName;
+                editor.LoadFile();
+                _services.HostWindow.DisplayDockedForm(editor as DockContent);
+            }
+        }
+
+        /// <summary>The tool strip menu item run_ click.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void toolStripMenuItemRun_Click(object sender, EventArgs e)
+        {
+            if (_selectedFile != null)
+            {
+                RunTemplate(_selectedFile);
+            }
+        }
+
+        /// <summary>The tv templates_ node mouse click.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void tvTemplates_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
+        {
+            FileInfo fi = null;
+            if (e.Button == MouseButtons.Right && e.Node != null && e.Node.Tag is FileInfo)
+            {
+                fi = e.Node.Tag as FileInfo;
+            }
+
+            _selectedFile = fi;
+            treeMenuStrip.Enabled = _selectedFile != null;
+        }
+
+        /// <summary>The tv templates_ node mouse double click.</summary>
+        /// <param name="sender">The sender.</param>
+        /// <param name="e">The e.</param>
+        private void tvTemplates_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
+        {
+            if (e != null && e.Node != null)
+            {
+                FileInfo fi = e.Node.Tag as FileInfo;
+                if (fi != null)
+                {
+                    RunTemplate(fi);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
Added +134 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs
new file mode 100644
index 0000000..98015de
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs
@@ -0,0 +1,134 @@
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+	partial class TemplateViewForm
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.IContainer components = null;
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+		protected override void Dispose(bool disposing)
+		{
+			if (disposing && (components != null))
+			{
+				components.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+
+		#region Windows Form Designer generated code
+
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.components = new System.ComponentModel.Container();
+			System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Templates");
+			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TemplateViewForm));
+			this.tvTemplates = new System.Windows.Forms.TreeView();
+			this.treeMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+			this.toolStripMenuItemRun = new System.Windows.Forms.ToolStripMenuItem();
+			this.toolStripMenuItemEdit = new System.Windows.Forms.ToolStripMenuItem();
+			this.imageList = new System.Windows.Forms.ImageList(this.components);
+			this.templateFileWatcher = new System.IO.FileSystemWatcher();
+			this.treeMenuStrip.SuspendLayout();
+			((System.ComponentModel.ISupportInitialize)(this.templateFileWatcher)).BeginInit();
+			this.SuspendLayout();
+			// 
+			// tvTemplates
+			// 
+			this.tvTemplates.ContextMenuStrip = this.treeMenuStrip;
+			this.tvTemplates.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.tvTemplates.HideSelection = false;
+			this.tvTemplates.ImageKey = "folder_page";
+			this.tvTemplates.ImageList = this.imageList;
+			this.tvTemplates.Indent = 15;
+			this.tvTemplates.Location = new System.Drawing.Point(0, 0);
+			this.tvTemplates.Name = "tvTemplates";
+			treeNode1.Name = "templates";
+			treeNode1.Text = "Templates";
+			this.tvTemplates.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+            treeNode1});
+			this.tvTemplates.SelectedImageIndex = 0;
+			this.tvTemplates.ShowRootLines = false;
+			this.tvTemplates.Size = new System.Drawing.Size(292, 266);
+			this.tvTemplates.TabIndex = 0;
+			this.tvTemplates.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvTemplates_NodeMouseDoubleClick);
+			this.tvTemplates.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvTemplates_NodeMouseClick);
+			// 
+			// treeMenuStrip
+			// 
+			this.treeMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripMenuItemRun,
+            this.toolStripMenuItemEdit});
+			this.treeMenuStrip.Name = "treeMenuStrip";
+			this.treeMenuStrip.Size = new System.Drawing.Size(148, 48);
+			// 
+			// toolStripMenuItemRun
+			// 
+			this.toolStripMenuItemRun.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
+			this.toolStripMenuItemRun.Name = "toolStripMenuItemRun";
+			this.toolStripMenuItemRun.Size = new System.Drawing.Size(147, 22);
+			this.toolStripMenuItemRun.Text = "Run";
+			this.toolStripMenuItemRun.Click += new System.EventHandler(this.toolStripMenuItemRun_Click);
+			// 
+			// toolStripMenuItemEdit
+			// 
+			this.toolStripMenuItemEdit.Name = "toolStripMenuItemEdit";
+			this.toolStripMenuItemEdit.Size = new System.Drawing.Size(147, 22);
+			this.toolStripMenuItemEdit.Text = "Edit Template";
+			this.toolStripMenuItemEdit.Click += new System.EventHandler(this.toolStripMenuItemEdit_Click);
+			// 
+			// imageList
+			// 
+			this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+			this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+			this.imageList.Images.SetKeyName(0, "folder_page");
+			this.imageList.Images.SetKeyName(1, "script");
+			this.imageList.Images.SetKeyName(2, "script_code");
+			// 
+			// templateFileWatcher
+			// 
+			this.templateFileWatcher.EnableRaisingEvents = true;
+			this.templateFileWatcher.Filter = "*.mt";
+			this.templateFileWatcher.NotifyFilter = ((System.IO.NotifyFilters)((System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.LastWrite)));
+			this.templateFileWatcher.SynchronizingObject = this;
+			this.templateFileWatcher.Renamed += new System.IO.RenamedEventHandler(this.templateFileWatcher_Renamed);
+			this.templateFileWatcher.Deleted += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+			this.templateFileWatcher.Created += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+			this.templateFileWatcher.Changed += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+			// 
+			// TemplateViewForm
+			// 
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.ClientSize = new System.Drawing.Size(292, 266);
+			this.Controls.Add(this.tvTemplates);
+			this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+			this.Name = "TemplateViewForm";
+			this.TabText = "Templates";
+			this.Text = "Templates";
+			this.Load += new System.EventHandler(this.TemplateViewForm_Load);
+			this.treeMenuStrip.ResumeLayout(false);
+			((System.ComponentModel.ISupportInitialize)(this.templateFileWatcher)).EndInit();
+			this.ResumeLayout(false);
+
+		}
+
+		#endregion
+
+		private System.Windows.Forms.TreeView tvTemplates;
+		private System.Windows.Forms.ImageList imageList;
+		private System.Windows.Forms.ContextMenuStrip treeMenuStrip;
+		private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemRun;
+		private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEdit;
+		private System.IO.FileSystemWatcher templateFileWatcher;
+	}
+}
\ No newline at end of file
Added +212 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx
new file mode 100644
index 0000000..2e7b765
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="treeMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>120, 17</value>
+  </metadata>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD8
+        CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAUwMUgFMAgABoQGn
+        BIYFiwGRAYYBoQIAAaEBpwSGBYsBkQGGAaESAAFSAcMHmgN6AcMBUgIAAccBtAG7AQkB8AHxAfMB9AL/
+        ARkB9AG1AccCAAHHAbQBuwEJAfAB8QHzAfQC/wEZAfQBtQHHEgABUgH2BJoEegJZAcMBUgIAAacBtQj/
+        AbUBGQG1AacCAAGnAbUI/wG1ARkBtQGnEgABUgH2BZoEegFZAcMBUgIAAccBiwm0ARkBCQGnAgABxwGL
+        CbQBGQEJAacSAAFSAfYFmgWZAfABUgKtAaEBpwG1AfQDCQQZAfQBCQGnAgABoQGnAbUB9AMJBBkB9AEJ
+        AacSAAFSAv8D9gaaAcMBUgH0Ac8BAAGhAbQB/wgZAfEBrQMAAaEDtAEZArQBCQMZAfEBrRIAAVIB9gF5
+        AXQBUgGaAfQG/wFSAfQBtAEAAaEBtAH/CBkB8wGtAwABoQGzArQBGQO0AQkCGQHzAa0SAAFSAfYCmgF6
+        CVIB9AG0AQABoQGzAf8IGQH/AbMBoQEAAccBtAHVAbQBCQEZAQkBtAHVAbQB3AEZAf8BswGhEQABUgH2
+        A5oBGgG0Af8GGQH/AbQCAAGzAf8IGQH/AbQBoQEAAbQB2wG0BBkBCQG0AdsBtAEZAf8BtAGhEQABUgX/
+        AQkB/wYZAfQBtAIAAa0B8wgZAf8BtAGhAQABxwHVAdsBtAIZAQkB1QHbAdUB3AEZAf8BtAGhEQABdAV5
+        AQkB/wYZAfQBtAIAAa0BGQH0BxkB/wG0AbMBxwEAAaEBswHbAdUBGQLbAdUDGQH/AbQBswHHFgABCQH/
+        BBkB3QEJAfQBtAIAAa0BCQH/BxkB/wG0ARkBswIAAa0BtAHVARkC2wQZAf8BtAEZAbMWAAEJAf8EGQHz
+        AfQB/wG0AgABrQEJAf8EGQP0Af8BtAH/AbsCAAGtAQkB/wQZA/QB/wG0Af8BuxYAAQkB9AMZAQkB/wEZ
+        AQkBpwIAAa0BCQH/BPQF/wEZAbQCAAGtAQkB/wT0Bf8BGQG0FgABCQH/BfQB3AGtAaECAAGnAdwF/wH0
+        AxkBCQG0AacCAAGnAdwF/wH0AxkBCQG0AacWAAQJA7QBpwGhAwABxwGzAdwB2wK6ArQCswKtAacBoQIA
+        AccBswHcAdsCugK0ArMCrQGnAaEQAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/
+        AgABAwEAAQMBAAEDAwABAwEAAQMBAAEDAwABAwEAAQMBAAEDAwABAwEAAQMBAAEDBQABAwEAAQMEAAGA
+        AQMBgAEDBAABgAEDAYABAwQAAYABAQEAAQEEAAHAAQEBAAEBBAABwAEBAQABAQQAAcABAAGAAwAB/AEA
+        AcABAAHAAwAB/AEAAcABAAHAAwAB/AEAAcABAAHAAwAB/AEAAcABAAHAAwAB/AEBAcABAAHAAwAL
+</value>
+  </data>
+  <metadata name="templateFileWatcher.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>250, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA////ACyG2ADFdEQAguH3AOzBkwDJ2NYAQNHyANCebQCGwcYA/+LLAFWq4gDM8vsArOH2ADS0
+        2QDz0a8AcLznAF7Z9ADv8ugAkcnrAMyHWAA2mtoA6Pb7AJDO1wCY4fYAXsLhAHDT8gD/6tsA/vbwAMyW
+        XwD32bwAT9XzAJPX4wDa8/gAwur4AOq7iADz/P4AN6baAHHe9gBkvOkA+u/kAOS6kQB61/MAjMjPADOO
+        2QCO5PgA6sOdAPXp3QDKf1MATaXgAPnexABn2/UAidz1AP3m1ACf5fQAet/3AJHe9QCT2+kA/fPpAJPS
+        3ADmv5YAgNn0AJTm+AA1lNoA9dO0APrgygCa5vcAzoFWADWr2gD4/f8AbNz2AMqEUgA2odoA/vz7APrz
+        7wCJ4/gAn+D1APv48wD85NAAdNXzAIXa9ADv+v4A+uLEANzw+gA1r9oA+vLnAP/n1wD68+sA/OLNAJrk
+        9ADLhVUAd972AIbi9wD++fMA/vXtAPv27wBb2PQA/N7FAJHl+ACV4PYA/f79AP/l0gD74McA+tzCAH/h
+        9wCO3vUAk9z0ADaz2gDRoGwA//fyAPb8/gDy+v0AYMPiAPvjywD217sAlN71AMyDVQAtiNgATdTzAOS7
+        kwD98ucA/+nZAP3n1gD85dIAneX1AP3+/wD/59UAyvL7AIvj+ADMhlYA//38AP307gD638gAkt/2AMqA
+        VADKg1MANqraAPb9/wD1/P8A//fwAP738QD+8+gA5b6WAPzy6AD95dEA++LMAJPl+ACb5vYALYfYAMyH
+        VwD///4A/v//AP7+/wD+/v0AX8PiAP3+/gD+/fwA5LuRAPf8/gDku5IA//fxAPH6/QD98+oA+u/jAP7n
+        1QD8480A/OTRAPncwgD53cQAj+T4AJDl+ACS5fgAlOX4AJ7l9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAnWUdXV1dXV1dXWUdQIAACxTGGOFaTRQPSpPGiI/AAA/UZKpSwQ3JjNgdgd/PwAAFW8+q6qA
+        XGhbRhEfDD8AAEhurJKSYjkgOxcrCQY/AzAll0WJiiRZQpN8rTYhP4OGRBYQCzETSmSCgpxJmT8SQ4ih
+        c2onPz8/Pz8/Pz8/X3RUni04TA1HoHkbeVZlCqBaa5uXmH2XKYt+ejVOcWeNgQ4ZcHBwmp1tpKSQQTIe
+        eJUAAAAAAACfjHumkahyDygUAAAAAAAAnxxYpYQeL1dNhwAAAAAAAHdeYWanQF1SBQAAAAAAAACOljqi
+        j6NVIwAAAAAAAAAALjyfn2wIHQAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA/AAAAPwAAAD8AQAA/AMAAPwHAAA=
+</value>
+  </data>
+</root>
\ No newline at end of file