Click here to Skip to main content
15,893,487 members
Articles / Programming Languages / C#

SPGen - Stored Procedure Generator

Rate me:
Please Sign up or sign in to vote.
4.89/5 (49 votes)
12 Dec 2002MIT9 min read 395.3K   13.9K   162  
A simple app which generates INSERT and UPDATE SQL Stored Procedure code
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
            Microsoft ResX Schema 
        
            Version 1.3
                
            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">1.3</resheader>
                <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
                <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
                <data name="Name1">this is my long string</data>
                <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
                <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
                    [base64 mime encoded serialized .NET Framework object]
                </data>
                <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
                    [base64 mime encoded string representing a byte array form of the .NET Framework object]
                </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.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:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <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" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </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>1.3</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="imglstMain.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </data>
  <data name="imglstMain.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuMzMw
        MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT
        eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA
        AACeCwAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQC
        AAEoAwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB
        3AHAAQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IB
        AAM5AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8B
        MwMAAWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYC
        AAFmAZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMC
        AAHMAWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQAB
        ZgEAATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8B
        AAEzAWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQAB
        MwGZAWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQAB
        MwLMAQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQAB
        MwEAAWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMB
        mQEAAWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQAB
        ZgGZAWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYB
        zAH/AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMB
        mQEAAZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgAB
        mQFmATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwB
        AAKZAf8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB
        /wEzAQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQAB
        mQEAAcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYC
        AAHMAWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYB
        AAHMApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8C
        AAHMAf8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQAB
        mQEAAcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMB
        AAHMAmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB
        /wGZAcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC
        /wEzAQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC
        /wFmAQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gB
        AAHwAfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEABf8C9ALzAfQB
        9QT/Ad0B/wHzBP8B9Ar/AfME8QHyBfEB8gP/EAAB9QH/AfMC8QESARABDwEOASIB+ALxAfQB/wEJAfMB
        DgQAAQ4CAAEOBQAB8wH/AfgBEwgUAREB7AP/EAAB/wHzAfgBDgEiAQcB8wEIAVEBWAEDASIBDgHtAfEB
        CQH/AewB+AHsAfgE7AH4BOwBDwH0Af8B7QH0AfEB8AHzAfEB/wHwAfMB/wGSAfgD/xAAAf8B9wFRAQMB
        MAEaAZkBeAGZAVgBNwFYAVEBEAH4AQkB/wHsAQcK/wGSAQ4B8wH/Ae0B9AK8AfIBvAH0AQcB8gH/AfcB
        +AP/EAAB/wEcAVEBMAE3AcMBGwGZAXMBWAE3ATABAwEiAfgB3QH/AewBBwL/AfQH/wH3AQ4B8wH0AZIB
        8wHvAbwB8AHzAfEB7wH0AbwBkgHsA/8QAAH2AfcBUQEwATYBGgGZAXkBmQFYAjcBAwEiAfgB3QH/AewB
        vAHyA+wB7wEHAewB+AHsAfEB7QEOAfMB/wHtAfQB8QLzAfQB8wHyAfQB8gGSAewB/wH0Af8QAAH2AfcB
        UQEwATcCGgGZAXkBWAE3ATABAwEiAfgB3QH/AewBvAH/AvQF/wH0Af8BkgEOAfQB9QHsAfcBEQHqAfAD
        /wHsAREBDwEOARABEQHxEAAB/wEcAVEBMAE3AhoBmQF5AVgCNwEDASIB+AHdAf8B7AG8AfID7AHvAQcD
        7AHxAZIBDgHzAf8B7QH/ARsB7wEVAe8C/wHtAfMB+AEUAewBEAHxEAAB9gH3AVEBMAFXARsBGgJ5AVgC
        NwEDASIB+AHdAf8B7AG8AvYB/wH2Bv8B9wEOAfMB9gGSAfMBmQHvAZ8BSgEHAfQB7AHvAQcB/wHvARAB
        8RAAAfYB9wJRAVgBwwEaAZkBeQFYATcBMAEDASIB+AHdAf8B7AG8AfIC7AH4Ae8BBwPsAfEB7QEOAfQB
        9gP3AW0B+AF+ASkBbQH3AQcB/wH1Ae8BEAHyEAAB/wEcAVEBAwEwARoBmQF5AZkBWAJ5AQMBIgH4AQkB
        9gH4AQgB/wH1AfYB/wH2AvUD9gH3AQ4B9AH2Av8B9gEHAW0B7AHlASkB7wH1Af8B9gHvARAB8RAAAfYB
        7wFzAVEBGgHlAaABmQFeAZkC5QG8ARUB+AEJAfYB7AEHAfgC7AL4AuwE+AEOAfQE/wEHAe8BbQHrAZkB
        RAGTAgcBkgEQAfEQAAH/AfcB7wGfAV4BoALlAcMB5QGgAcMB5QEiAfgB3QH1ArUBogKFAqEBhQG1AeoB
        HAEUAesBDwH0AfYB/wH2Af8BBwHvAc8BBAESAUUBJAFuAY0BrgEQAfEQAAH2AfQB7gHvAfYB5QKgAV4B
        wwGgAVgBcwEHAfIB3QH2AewBvAHvAe4BvAPuAQcBvALuAewBDwH0BP8BBwH3ArUB7QElAUUBtgEHAewB
        EQHxEAAB/wL1AfAB7AJzAe0B7AHtAewBHAHDAfYB/wHdAfQD7AX4BewB6wH0A/YB/wEHAu0B7AHtAW4B
        +APsAesB8xAAAf8B9gL/AvYC9Qf/Ad0B/wH2Af8C9gH/AfYF/wH2BP8B9AX/AfUC/wH1Af8C9gH1Af8Q
        AAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/lwAL
</value>
  </data>
  <data name="$this.Name">
    <value>frmMain</value>
  </data>
  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAABAAYAEBAQAAEABAAoAQAAZgAAABAQAAABAAgAaAUAAI4BAAAQEAAAAQAgAGgEAAD2BgAAICAQAAEA
        BADoAgAAXgsAACAgAAABAAgAqAgAAEYOAAAgIAAAAQAgAKgQAADuFgAAKAAAABAAAAAgAAAAAQAEAAAA
        AAAAAAAAAAAAAAAAAAAQAAAAAAAAAP///0gAAIC7AIAAaQCAgHeAAABkgACAb4CAAADAwMABgICAAAAA
        /2gA/wBOAP//Z/8AAHL/AP8A//8AZAAAAG7/////+PER////////+O93//////7073f//////v//////
        /////+/u///////v7+j///////9PT/////////9P//8f////////8XD////////4AA////////dwB///
        ////+Hd/////////+P////////////////////////////4AEUj+AP4A4gD+AOIA4gD/AOIA/wD/AP+A
        /wDwwP+A4KDwwMA/4KDAfcA/wH3AfcB9wH3A/8B9Af/A/z//Af8oAAAAEAAAACAAAAABAAgAAAAAAAAA
        AAAAAAAAAAAAAAABAAAAAAAA/////8z//wCZ//8AZv//ADP//4AA//+A/8z/gMzM/8CZzP+AZsz/ADPM
        /wAAzP8A/5n//8yZ//+Zmf//Zpn/ADOZ//8Amf/4/2b//8xm//+ZZv//Zmb//jNm//8AZv/+/zP//8wz
        //+ZM///ZjP//zMz//8AM////wD//8wA//+ZAP//ZgD//zMA//8AAP/////M/8z/zP+Z/8z/Zv/M/zP/
        zP8A/8z//8zM/8zMzP+ZzMz/ZszM/zPMzP8AzMz//5nM/syZzP6ZmcziZpnM4jOZzP8Amcz//2bM/8xm
        zPCZZszgZmbMwDNmzMAAZszA/zPMwMwzzMCZM8wBZjPMPzMzzAAAM8wA/wDMEcwAzBGZAMwAZgDMADMA
        zBEAAMzr//+ZAMz/mQCZ/5kAZv+ZADP/mQAA/5kA/8yZAMzMmQCZzJkAZsyZADPMmREAzJnr/5mZAMyZ
        mQCZmZlAZpmZQDOZmcwAmZkA/2aZAMxmmQCZZpnAZmaZADNmmQAAZpkA/zOZAMwzmQCZM5kAZjOZADMz
        mQAAM5kA/wCZAMwAmQCZAJkAZgCZADMAmQAAAJkA//9mAMz/ZgCZ/2YAZv9mADP/ZgAA/2YA/8xmAMzM
        ZgCZzGYAZsxmADPMZgAAzGYA/5lmAMyZZgCZmWYRZplm6zOZZgAAmWYA/2ZmCsxmZgCZZmYAZmZmAjNm
        Zv8AZmYA/zNmAMwzZgCZM2YAZjNmADMzZgAAM2YA/wBmScwAZgCZAGYAZgBmRzMAZmgAAGYA//8zAMz/
        MwCZ/zMAZv8zADP/MwAA/zMA/8wzAMzMMwCZzDMAZswzADPMMwAAzDMA/5kzAMyZMwCZmTMAZpkzADOZ
        MwAAmTP//2YzAMxmM/+ZZjMAZmYz/zNmMwAAZjP//zMzAMwzM/+ZMzMAZjMz/zMzMwAAMzPM/wAzAMwA
        M8yZADMAZgAzzDMAMwAAADPM//8AAMz/AMyZ/wAAZv8AzDP/AAAA/wCZ/8wAAMzMAJmZzAAAZswAmTPM
        AAAAzACZ/5kAAMyZAJmZmQAAZpkAmTOZAAAAmQBm/2YAAMxmAGaZZgAAZmYAZjNmAAAAZgBm/zMAAMwz
        AGaZMwAAZjMAZjMzAAAAMwAz/wAAAMwAADOZAAAAZgAAMzMAAAAAAO4zAADdAAAAuzMAAKoAAACIMwAA
        dwAAAFUAAABEAAAAIgAAABEAAO4AAADdAAAAuwAAAKoAAACIAAAAdwAAAFUAAABEAAAAIgD/ABEAAO4A
        AP/dAAAAuwAA/6oAAACIAAD/dwAAAFUAAP9EAAAAIgAA/xEAAADu7u7M3d3dALu7u8yqqqoAiIiIzHd3
        dwBVVVXMREREACIiIswREREAAAAAzP/////////+pYCr/f39rPz//////////v2rq3pUq1Uq/////v7+
        //6knaSkeKxVVf////7+/v/+z6Ol/f3+q6z///////////7Qz9B5rHl4///////////+z8fQndB5ef//
        //////////7Pz6TPpKT//////v7+/v///v7Qz6TQ/////v37/v7//v/+/v7Q/v///v32AKz+/v7/////
        //////5WAAD1/v7///////7////+K/b19ff+///////+/////voqKiv7/v///////v////7++4H+/v//
        /////////v7+/v7+/v////////////7+///////////////////+ABFI/gD+AOIA/gDiAOIA/wDiAP8A
        /wD/gP8A8MD/gOCg8MDAP+CgwH3AP8B9wH3AfcB9wP/AfQH/wP8//wH/KAAAABAAAAAgAAAAAQAgAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AC0oOwC5s/8Ap6j5AJCf2AARERFQdlQ9/6t9
        Xv9gSz3/LCYj/ywmI/8rJiT/OzMx/0lBP/////8A////AP///wA4NFMAoJv/AJKb7wBHTXAAERERgCkg
        GP9cQS7/UDst/62BZf/kro7/U0Q9/9Csmf/vzbz/////AP///wD///8AERERvxEREYARERGAgoDmABER
        EWCAUi3/14pN/4FYOv+RaEv/4KJ7/0U2Lf/LoYj/z6qV/////wD///8A////ABERERARERFAERERMIOD
        +gARERFAZUEe/8d6N/9/VDD/KiEb/yoiHP8dGBf/Uj8z/0U3MP////8A////AP///wAUEBYAdnD1AHV1
        9QB0dPQAdHT0AB0YEu81JRX/ZUEe/0IuH//YjFL/QzIj/96cb//gpH7/////AP///wD///8AExAUAE1H
        pQBtbPwAa2vxAGlp8gARERGAZDwQ/892G/81JRX/04I+/0IuHv/akVv/z5Bl/////wD///8A////ABER
        EgAfGjcAXFbsAGFh+wBdXfAAXFzvABEREZ9wQwr/ZDwO/5VbI/9lQh//pGo6/45fO/////8A////AP//
        /wD///8AERERIBEREXAREREQERERz////wBUVP8AERERjxwXEP9MMRL/ZD4W/6FjK/82Jhn/////AP//
        /wD///8AERERMCEhIe9cXFz/ERER3xEREUD///8AERERIAoQbQAREREgERERjxEREb81JRX/HRgU////
        /wD///8AERERICEgIO/R0dH//////z4+Pv8RERFQERERgBEREc//3z8Auey/AEla9ABpaf8AaWn/AGlp
        /wD///8A////ABEREY+flpr/9+zw//jy9P/s6On/IB8f/xEREZ8ZEBAAiZc5ABAk/wAeIP8AICD/ABER
        EZ8gIP8A////AP///wARERG/3cXO/+zY3//v3OX/8eLo/7uxtf8RERGvKA4OAJvACwABAaYAERH/ABER
        /wARERHPERH/AP///wD///8AERERcI13e//qxs//5MnT/9vCzP9VT1H/ERERYCQPDwBLWgkADw8jAAQE
        hQAAAOgAERERvwAA+AD///8A////ABEREWARERHvbVdX/3lgYf8fHR3vERERYP///wD///8A////AP//
        /wD///8A////AP///wD///8AERERUBEREa8RERHPEREREBEREUARERFAEREREP///wD///8A////AP//
        /wD///8A////AP///wD///8A////ABEREZ8RERFg////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD+AP///gD//uIAq/3iAKz8/wD///8A//7/gKt68MBVKuCg
        //7AP//+wH2kpMB9VVXAff/+wP///gH/pf0//6usKAAAACAAAABAAAAAAQAEAAAAAAAAAAAAAAAAAAAA
        AAAQAAAAAAAAAP////8AAID/AIAA/wCAgC2AAAC5gACAp4CAAJDAwMARgICAdgAA/6sA/wBgAP//LP8A
        ACz/AP8r//8AOwAAAEn/////////////////////////////////////////////////////////////
        //////////////////8f///////////////////xcP//////////////////+AAP////////////////
        //dwB//////////////////4d3////////////////////j/////////////////////////////////
        ////////////////////////////////////////////Hx/////////////////38PD3////////////
        /////weAhw//////////////h4Hx+P/x/////////////3f3AXeHDw/////////////n938Ahw8P////
        ////////jxEf8RgPD/////////////+O93f48Xj////////////vTvd38H//////////////7///8Rj3
        D//////////////+/u+P93/////////////+/v6P748f//////////////T0/494////////////////
        9P74////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////gf/D/wB
        /gv8+PwD/fz8B/38fAf8/nwH/H48D/5/AB/+P4P//x////+AH///AA//4wAH//IAAx/+AAI//AAD//wA
        Af/8AAH/xAAD/8QAA//+AAIf/gACH/8AB//+gAf/+MAX//n/8///+/n///v9///7////////KAAAACAA
        AABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAP/////M//8Amf//AGb//wAz//+AAP//gP/M
        /4DMzP/Amcz/gGbM/wAzzP8AAMz/AP+Z///Mmf//mZn//2aZ/wAzmf//AJn///9m///MZv//mWb//2Zm
        //8zZv//AGb///8z///MM///mTP//2Yz//8zM///ADP///8A///MAP8fmQD//2YA//8zAP//AAD/cP//
        zP/M/8z/mf/M/2b/zAAz/8z/AP/M///MzP/MzMxwmczM/2bMzP8zzMz/AMzMd/+ZzP/Mmcz/mZnM/2aZ
        zPgzmcz/AJnM//9mzP/MZsz/mWbM/2ZmzP8zZsz/AGbM//8zzP/MM8z/mTPM/2YzzP8zM8z/ADPM//8A
        zB/MAMz/mQDM/2YAzP8zAMz3AADM////mf/M/5n/mf+Zh2b/mf8z/5n/AP+Zh//Mmf/MzJn/mcyZ/2bM
        mXczzJmHAMyZ//+Zmf/MmZnnmZmZh2aZmf8zmZn/AJmZj/9mmRjMZpn/mWaZ/2Zmmf8zZpn4AGaZ//8z
        mf/MM5nvmTOZ8GYzmf8zM5n/ADOZ7/8AmRjMAJn/mQCZ/2YAmf8zAJmPAACZ////Zv/M/2b+mf9m72b/
        Zv8z/2b/AP9m///MZo/MzGb/mcxm/2bMZv8zzGb4AMxm//+ZZv/MmWb/mZlm/2aZZv8zmWb/AJlm//9m
        Zv/MZmb/mWZm/2ZmZv8zZmb/AGZm//8zZv/MM2b/mTNm/2YzZv8zM2b/ADNm//8AZv/MAGb/mQBm/2YA
        Zv8zAGb/AABm////M//M/zP/mf8z/mb/M/wz/zP8AP8z/f/MM/3MzDP8mcwz/GbMM/4zzDP+AMwz//+Z
        M//MmTP/mZkz42aZM/IzmTP+AJkz/P9mM/zMZjP8mWYzxGZmM8QzZjP+AGYz/v8zM//MMzP+mTMz+GYz
        M/kzMzP/ADMz//8AM//MADP/mQAzAGYAMwAzADMRAAAzEf//AOzM/wDvmf8A8Wb/ALsz/wARAP8AKP/M
        AJvMzAABmcwAEWbMABEzzAARAMwAEf+ZAP/MmQD/mZkAEWaZAI0zmQDqAJkA5P9mANvMZgBVmWYAEWZm
        ACQzZgBLAGYAD/8zAATMMwAAmTMAEWYzAAAzMwD/ADMA//8AABHMAAARmQAAbWYAAHkzAAAfAADuEQAA
        3f8AALv/AACq/wAAiP8AAHf/AABV/wAARP8AACL/AAAREQDuABEA3QARALsAEQCqABEAiAARAHcAEQBV
        AP8ARAD/ACIA/wARAP/uAAD/3QAA/7sAAP+qAAD/iAAA/3cAABFVAAARRAAA/yIAAP8RAAD/7u7u/93d
        3f+7u7v/qqqq/4iIiP93d3f/VVVV/0RERP8iIiL/ERER/wAAAP//////////////////////////////
        //////////////////////////////////////////////////////////////////7+/v7+/v//////
        /////////v7+/v/////////////+/v7+/v7+/v7///////////79+/7+//7///////////7+///////+
        /v7////////+/fYArP7+/v///////////v/////////+/v////////5WAAD1/v7////////////+////
        //////7+/v///////iv29fX3/v////////////7+//////////7+///////++ioqK/v+////////////
        /v7+/////////v7+//////7++4H+/v///////////////v7//////////v7+/v7+/v7+/v7/////////
        ///////+/v7//////////v7+/v7////////////////////////+/v7/////////////////////////
        ///////////////+/v7+/P2s/f7+/////////////////////////////v77+PwArAD8K/z+////////
        /////////////v7+///+rPys9feBAPorAP7+/////////////////////v7//oEqev2s/fv5/Pys/fz+
        ///+/v7////////////////+VU789yT9KyuB+AD89f7//v7+/////////////////qtUVawqVfv1APkr
        AKwArP/////////////////////+pYCr/f39rPz9/fkA/AD8/v////////////////////79q6t6VKtV
        Kir7gaz99vr+///////////////+/v7//qSdpKR4rFVVKqwk+Pv7/v////////////////7+/v/+z6Ol
        /f3+q6z9/fn79wCs///////////////////////+0M/Qeax5eKuA+/5V9/7//v7+/v//////////////
        //7Px9Cd0Hl5/VSrgKz9/v/+/v7+//////////////////7Pz6TPpKSkgKxOgP7/////////////////
        ///////+//7+0M+k0J39gKv+/v/////////////////////+/v7///7+/tD+0P7+/v/+////////////
        //////////7+//////////////////7+///////////////////////////////+//////////7+////
        //////////////////////////7///////////7//////////////////////////////v//////////
        ///////////////////////////////////////////////////////////////////+B/8P/AH+C/z4
        /AP9/PwH/fx8B/z+fAf8fjwP/n8AH/4/g///H////4Af//8AD//jAAf/8gADH/4AAj/8AAP//AAB//wA
        Af/EAAP/xAAD//4AAh/+AAIf/wAH//6AB//4wBf/+f/z///7+f//+/3///v///////8oAAAAIAAAAEAA
        AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//4RAP/+
        DwD//hAA//4RAP/+EQAREREQERERgBEREb8RERG/ERERnxEREUD///0A//+aAP/+JgD//hEAXv8RAEAK
        UABjYmMAGlkaABEREQBbCVsACGASABERESARERFwEREREBEREc8OKysADisrAP///wD///8A////AP//
        /wD//hEA//4RAP/+EQD//hQAEREREBEREc8RERGfERERMBERERARERFgERERzxEREb8REREQ///QAP/+
        TgBZ/xEAXwZwAJeNlwAeih4AERERAMoAywAREREwISEh71xcXP8RERHfERERQA4rKwAREREg////AP//
        /wD///8A////AP/+EQD//hEA//4SAPz/QgARERGvERERcP///wD///8A////AP7+/wD///8AERERcBER
        Ec8REREQ////AFn/TwBlB2cAlZGVAB6FHgAREREAERERICEgIO/R0dH//////z4+Pv8RERFQERERgBER
        Ec////8A////AP///wD///8A//4RAP/+EQD5/xQAsMVDABEREd++sbAAzLfMAP///wD///8A////AP//
        /wD4//8AERERjxEREYDm/+oAOMc8AFkVWwBxenEAU2dTAEVRRQARERGPn5aa//fs8P/48vT/7Ojp/yAf
        H/8RERGfDisrAP///wD///8A////AP///wD//hEA//4RAOb7AAARERMAERER7xUjFgBOCk4A////AJim
        mACbop0AzJ/RAP///wAREREQERER3xERESA/DD8AqXCqANS01wD82fwA////ABEREb/dxc7/7Njf/+/c
        5f/x4uj/u7G1/xEREa8OKysA////AP///wD///8A////AP/+EQD5/xEAmK4AABUPIgARERGvERERYEgL
        SADT/9MAERIRAA4oDgB3BncA////AP///wARERGAERERr4oDjQD72P8A9vf6AO7z9ADu7fMAERERcI13
        e//qxs//5MnT/9vCzP9VT1H/ERERYA4rKwD///8A////AP///wD///8A//4RAPr/EQCmvQAAFw4mABER
        EUARERHfEREREOL/4gBnT2cAZrNmAGcHZwD///8A////ABERERARERHPERERYPLo+QDk5OoA5OTqAOTk
        6gARERFgERER721XV/95YGH/Hx0d7xEREWAOKysADisrAP///wD///8A////AP///wD//hEA//4RAOr/
        CwAYDi0A//3/ABEREY8RERGf3f/dAH5HfgCV85UAYAhgAP///wD///8A////ABERETARERHfERERgBER
        EUARERFQERERrxEREc8REREQERERQBEREUAREREQDg4rAA4rKwAOKysA////AP///wD///8A////AP/+
        EQD//hEA6/8RABUOKQD+5f4AEREREBEREc8RERFwhkeGALP/swBmF2YA////AP///wCw/7AAO2s8ABER
        ERARERFwERERrxEREZ8RERFg0dHcANHR3ADV0N8AldicAASjBAAODisADisrAA4rKwD///8A////AP//
        /wD///8A+v8RAFdfCQBqcBoAJyYtAFtZWwA0RDQAEREREBEREc8RERFg1P/UADBUMACuTa4A////AHf/
        dwArDS8AtF+9AM/J3ADKytUAysrVAMrK1QDKytUAysrVAMvK1gC6zccAAccBAA4OKwAOKysADisrAP//
        /wD///8A////AP///wD4/xEAEBAZALGhuQDi3eEA19nXANPS0wDA078AEREREBEREd8RERG/ERER/01N
        Tf8gICD/Pj4+/yEhIe8RERGfERERQMHBzQDBwc0AwcHNAMHBzQDBwc0AwcHNAMfA1AAB1AEADg4rAA4r
        KwAOKysA////AP///wD///8A////APj/EQAQEBoA18TWAP///wD///8A////ABERERARERGvW1pa/6Wl
        pf9NTU3//////z4+Pv//////TU1N/8PDw/9NTU3/ERERn7a2uwC2trsAtra7ALa2uwC2trsAvbbBAB7H
        HgAOLioADisrAA4rKwD///8A////AP///wD///8A+P80ABEREYARERGvERERIPz8/wD7+/8AERERvzs2
        NP9MSUj/PT09/+Hh4f+0tLT/a2tr//////96enr/w8PD//////8RERH/ERERn6yspwCsrKcArKynAKys
        pwCxq6wALLorAAw7KAAOKysADisrAP///wD///8A////AP///wD5/5QAERERABEREUARERGfREZLABER
        EWBxYFj/8NHC/5CCe/8tLCv/PTw8/y8vL/9cXFz/iIiI/01NTf9NTU3/Pj4+/yAgIP9NTU3/ERERUKOj
        lACjo5QAERERYBEREc8REREQDDopAA4rKwAOKysA////AP///wD///8A////ABEREQAlHi0AnZHEALy3
        6wDX0/8AERER39uvlf/sw67/SEE8/9a/tP/25dv/Li0t/8LAwP/Dw8P/a2tr/6Wlpf//////TU1N/+Hh
        4f8RERGvmZl/ABEREY8RERGAEREREASlBAAODisADisrAA4rKwD///8A////AP///wD///8AFxIYAKKZ
        2gDDwf8Aubr8ABERESBSPzP/46uL/8uhiP9HPTf/7sq3/8avo/9nX13/+uvm//z39v+IiIj/w8PD////
        //8+Pj7//////z4+Pv+SkmsAkpJrAJOSbACDk2EAB4cGACEOKwAfKSkAHykpAP///wD///8A////AP//
        /wAtKDsAubP/AKeo+QCQn9gAERERUHZUPf+rfV7/YEs9/ywmI/8sJiP/KyYk/zszMf9JQT//Li0t/y4u
        Lv+IiIj/8PDw/01NTf//////TU1N/xERESCKilcAjYlZAFGONQALVwoA1AAbANYVFQDWFRUA////AP//
        /wD///8A////ADg0UwCgm/8AkpvvAEdNcAARERGAKSAY/1xBLv9QOy3/rYFl/+Sujv9TRD3/0KyZ/+/N
        vP/y2cv/WFJP/2diYP89PDz/Ly8v/9LS0v96enr/ERERQIaDQgB+hj8ACH0KAEQLFwBAQyUAQCUlAEAl
        JQD///8A////AP///wD///8AERERvxEREYARERGAgoDmABEREWCAUi3/14pN/4FYOv+RaEv/4KJ7/0U2
        Lf/LoYj/z6qV/+7Ktv86NDP/9eDW/7Cmov9bWVn/W1tb/xEREf91fCgAbXQnABFpEQBSEwoA/1IwABH/
        KAAOKysADisrAP///wD///8A////AP///wAREREQERERQBERETCDg/oAERERQGVBHv/Hejf/f1Qw/yoh
        G/8qIhz/HRgX/1I/M/9FNzD/LCYi/ywoJv+cioH/V1BM/82/uf/79PD/MTEx7ztBEwANOBAAWgkJAP9f
        CgD//hEAEf8oAA4rKwAOKysA////AP///wD///8A////ABQQFgB2cPUAdXX1AHR09AB0dPQAHRgS7zUl
        Ff9lQR7/Qi4f/9iMUv9DMiP/3pxv/+Ckfv9gSj7/lnhn/29dUv8RERH/u6ie/8u7s/8RERGvDx8QABER
        EYARERFgERERQBERERAR/ygADisrAA4rKwD///8A////AP///wD///8AExAUAE1HpQBtbPwAa2vxAGlp
        8gARERGAZDwQ/892G/81JRX/04I+/0IuHv/akVv/z5Bl/zgtJP/iqon/U0M6/5h9bf9HPTf/LSkn/xER
        EUAFgRUAERERMBEREYARERGAERERIAKWHgAOKysADisrAP///wD///8A////AP///wARERIAHxo3AFxW
        7ABhYfsAXV3wAFxc7wARERGfcEMK/2Q8Dv+VWyP/ZUIf/6RqOv+OXzv/g1xB/6x6W/9FNi3/5bGS/5h6
        a/8RERGvoP+gAAWHFgCoAAAAmrcAABmUAwAPHg8ADg4rAA4rKwAOKysA////AP///wD///8A////ABER
        EQAREBQAKiViAEVBygBQTf0AERERYFRU/wARERGPHBcQ/0wxEv9kPhb/oWMr/zYmGf/LhE7/Nioh/51w
        Uf9fSTv/ERERrxERERANrjsAlAMFAP+rCgD//hEAaP8RAApnBwAODisADisrAA4rKwD///8A////AP//
        /wD///8AqKYAAM/YAAARERIAEREREBEREb8RERGPJiuGAAoQbQAREREgERERjxEREb81JRX/HRgU/zcn
        Gv8RERH/ERERrxEREWA8wRMAERERQJ0CBgD/uAkA//4RAP/+EQCY/xEABpwCAA4OKwAOKysADisrAP//
        /wD///8A////AP///wBAPAwAvsMAABMPHgARERFgERERYKPapwAvEA0A/98/ALnsvwBJWvQAaWn/AGlp
        /wBpaf8AaWn/AE9f0wDDZSUA/+MRAOb/EQARERGAERERn//+EQD//hEA//4RAOH/EQAF6QAAEBAVABH/
        FQAR/xUA////AP///wD///8A////ABEREQAfIA8AJQ4mAP///wD///8Azv/QABkQEACJlzkAECT/AB4g
        /wAgIP8AERERnyAg/wAgIP8ADA++ACofJgAnMg0Aji4DAP+yAwARERGfERERYP/+EQD//hEAzv8RAB3W
        AAAOKCsAEf8oABH/KAD///8A////AP///wD///8AERERABEREQAgDyAA5s7mAP///wCe16MAKA4OAJvA
        CwABAaYAERH/ABER/wARERHPERH/ABER/wAGBnYAERERABEREQAXEBAAGRsQAGgdBwAREREQ4/8RAD/k
        AAAdPwwAEh4PAAADsAAR/54AEf+eAP///wD///8A////AP///wAREREAERERABIREgAsJSwAS1FLABAW
        EAAkDw8AS1oJAA8PIwAEBIUAAADoABEREb8AAPgABQWCABAQHAAREREAERERABEREQAREREAxAAAAP/e
        EAD//hEAxP8QAAnGAAAREREAAACxAAD+pQAA/qUA////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///////////gf/D/wB
        /gv8+PwD/fz8B/38fAf8/nwH/H48D/5/AB/+P4P//x////+AH///AA//4wAH//IAAx/+AAI//AAD//wA
        Af/8AAH/xAAD/8QAA//+AAIf/gACH/8AB//+gAf/+MAX//n/8///+/n///v9///7////////
</value>
  </data>
</root>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Web Developer Caliber AI
South Africa South Africa
My name is Paul Watson and I have been a professional web-developer since 1997. I live and work remotely from Cape Town, South Africa.

I have many years of experience with HTML, CSS, JavaScript, PostgreSQL, and Ruby on Rails. I am capable in Python and Machine Learning too.

Currently I am the CTO of CaliberAI. Formerly I worked with Kinzen (CTO & co-founder), Storyful (CTO, acquired by News Corp), FeedHenry (co-founder, acquired by Red Hat), and ChangeX.

Now that you know a bit about me why not say hello.

Comments and Discussions