<component id="22" name="Levenshtein" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script." localeId="1033" usesDispositions="false" validateExternalMetadata="True" version="4" pipelineVersion="0" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0">
<properties>
<property id="26" name="SourceCode" dataType="System.String" state="cdata" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[\my project\settings.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\assemblyinfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2010")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("0171458d-04a9-4184-89e7-1ef87e976a0e")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [DistanceColumn]() As Int32
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [DistanceColumn_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"DistanceColumn"}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?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.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="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </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" 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>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{A860303F-1F3F-4691-B57E-529FC101A107};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{A2B34E1D-EF8B-42DA-AD65-C15AE215345A}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2010 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

' The following resources were used as a reference:
' http://www.merriampark.com/ld.htm

Imports System
Imports System.ComponentModel
Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() {"FirstColumn", "SecondColumn", "DistanceOutputColumn"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Row.Buffer(m_distanceIndex) = GetLevenshteinDistance_( _
            Row.Buffer(m_firstIndex).ToString(), _
            Row.Buffer(m_secondIndex).ToString())
    End Sub ' Input_ProcessInputRow


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PreExecute()
        Call MyBase.PreExecute()

        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

        ' Find first column index.
        m_firstIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.FirstColumn).LineageID)

        ' Find second column index.
        m_secondIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.SecondColumn).LineageID)

        ' Find distance column index.
        m_distanceIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            output.OutputColumnCollection(Me.DistanceOutputColumn).LineageID)
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PostExecute()
        Call MyBase.PostExecute()

        m_firstIndex = -1
        m_secondIndex = -1
        m_distanceIndex = -1
    End Sub ' PostExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean = True

        Try
            If String.IsNullOrEmpty(Me.FirstColumn) Then
                Throw New Exception("Select first string column.")
            End If

            If String.IsNullOrEmpty(Me.SecondColumn) Then
                Throw New Exception("Select second string column.")
            End If

            If String.IsNullOrEmpty(Me.DistanceOutputColumn) Then
                Throw New Exception("Specify distance output column.")
            End If

            Dim managedComponent As CManagedComponentWrapper = Me.ComponentMetaData.Instantiate()
            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            ' Setup selected first column.
            Dim firstColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                input.ID, _
                virtInput, _
                virtInput.VirtualInputColumnCollection(Me.FirstColumn).LineageID, _
                DTSUsageType.UT_READONLY)

            ' Setup selected second column.
            Dim secondColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                input.ID, _
                virtInput, _
                virtInput.VirtualInputColumnCollection(Me.SecondColumn).LineageID, _
                DTSUsageType.UT_READONLY)

            ' Setup distance output column.
            Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

            Try
                Dim column As IDTSOutputColumn100 = output.OutputColumnCollection(Me.DistanceOutputColumn)
            Catch ex As Exception
                ' Doesn't exist. Create it.
                Call output.OutputColumnCollection.RemoveAll()

                Dim distanceColumn As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
                distanceColumn.Name = Me.DistanceOutputColumn
                distanceColumn.SetDataTypeProperties(DataType.DT_I4, 0, 0, 0, 0)
            End Try
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select first string column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property FirstColumn() As String
        Get
            FirstColumn = m_firstColumn
        End Get
        Set(ByVal value As String)
            m_firstColumn = value
        End Set
    End Property    ' FirstColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select second string column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property SecondColumn() As String
        Get
            SecondColumn = m_secondColumn
        End Get
        Set(ByVal value As String)
            m_secondColumn = value
        End Set
    End Property    ' SecondColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify distance output column name.")> _
    <DefaultValue("DistanceColumn")> _
    Public Property DistanceOutputColumn() As String
        Get
            DistanceOutputColumn = m_distanceColumn
        End Get
        Set(ByVal value As String)
            m_distanceColumn = value
        End Set
    End Property    ' DistanceOutputColumn
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Compute the distance between two strings.
    ' Returns Levenshtein cost.
    Private Shared Function GetLevenshteinDistance_(ByVal s As String, ByVal t As String) As Integer
        Dim n As Integer = s.Length
        Dim m As Integer = t.Length
        Dim d(,) As Integer = New Integer(n, m) {}

        ' Step 1.
        If n = 0 Then
            Return m
        End If

        If m = 0 Then
            Return n
        End If

        ' Step 2.
        For i As Integer = 0 To n
            d(i, 0) = i
        Next

        For j As Integer = 0 To m
            d(0, j) = j
        Next

        ' Step 3.
        For i As Integer = 1 To n
            ' Step 4.
            For j As Integer = 1 To m
                ' Step 5.
                Dim cost As Integer = CInt(IIf(t(j - 1) = s(i - 1), 0, 1))

                ' Step 6.
                d(i, j) = Min(Min(d(i - 1, j) + 1, d(i, j - 1) + 1), d(i - 1, j - 1) + cost)
            Next
        Next

        ' Step 7.
        GetLevenshteinDistance_ = d(n, m)
    End Function    ' GetLevenshteinDistance_
#End Region ' Internals


#Region "Attributes"
    Private m_firstColumn As String
    Private m_secondColumn As String
    Private m_distanceColumn As String

    Private m_firstIndex As Integer
    Private m_secondIndex As Integer
    Private m_distanceIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="27" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_1a0573864a3f4d7b80a17ef67ec70461.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAP48rkwAAAAAAAAAAOAAAiELAQgAADAAAAAMAAAAAAAAbk4A
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAABROAABXAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAdC4AAAAgAAAAMAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAAAyAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAPAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABQ
TgAAAAAAAEgAAAACAAUAACkAABQlAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0aAAABKgA6
AhYDjBsAAAFvHwAACioAYgMsCQIWbyAAAAorC3IBAABwcyEAAAp6KgAAABMwAwARAAAADQAAEReN
GgAAAQsHFnKeAABwogcqAAAAEzABAAkAAAAOAAARAigiAAAKCgYqAAAAEzABAAkAAAAPAAARAigj
AAAKCgYqAAAAfgIoJQAACgICcxwAAAZ9BgAABAICcx0AAAZ9BwAABCq2AwIoJgAACm8nAAAKcrwA
AHBvKAAACm8pAAAKMw8CAgMXBHMRAAAGbxoAAAYqAABKKwcCA28bAAAGA28WAAAGLfEqAAYqAAA6
AigXAAAKAgN9CAAABCoAOgIoFwAACgIDfQkAAAQqAB4CKBgAAAYqEzAFAEgAAAAAAAAAA28qAAAK
AnsPAAAEA28qAAAKAnsNAAAEbysAAApvFQAACgNvKgAACgJ7DgAABG8rAAAKbxUAAAooKQAABowb
AAABbywAAAoqEzAFAMsAAAAQAAARAigtAAAKAm8mAAAKbycAAAoWjBsAAAFvKAAACgoCbyYAAApv
LgAAChaMGwAAAW8vAAAKCwICbzAAAApvMQAACgZvMgAACgZvMwAACgJvIwAABm80AAAKbzUAAApv
NgAACn0NAAAEAgJvMAAACm8xAAAKBm8yAAAKBm8zAAAKAm8lAAAGbzQAAApvNQAACm82AAAKfQ4A
AAQCAm8wAAAKbzEAAAoGbzIAAAoHbzcAAAoCbycAAAZvOAAACm85AAAKbzYAAAp9DwAABCoAcgIo
OgAACgIVfQ0AAAQCFX0OAAAEAhV9DwAABCoAAAAbMAYAYAEAABEAABEXCgJvIwAABig7AAAKLAty
yAAAcHM8AAAKegJvJQAABig7AAAKLAtyAAEAcHM8AAAKegJvJwAABig7AAAKLAtyOgEAcHM8AAAK
egJvJgAACm89AAAKEwQCbyYAAApvJwAAChaMGwAAAW8oAAAKDQlvPgAAChMHCW8zAAAKbz8AAAoR
BAlvKQAAChEHEQdvQAAACgJvIwAABm9BAAAKb0IAAAoWb0MAAAoMEQQJbykAAAoRBxEHb0AAAAoC
byUAAAZvQQAACm9CAAAKFm9DAAAKEwYCbyYAAApvLgAAChaMGwAAAW8vAAAKEwURBW83AAAKAm8n
AAAGbzgAAAoTCN5cJShEAAAKEwoRBW83AAAKb0UAAAoRBW83AAAKb0YAAAoTCREJAm8nAAAGb0cA
AAoRCRkWFhYWb0gAAAooSQAACt4aJShEAAAKEwsWCgMRC29KAAAKUShJAAAK3gAGCwcqQTAAAAAA
AADqAAAAFgAAAAABAABCAAAALAAAAQAAAAACAAAAQAEAAEIBAAAaAAAALAAAARMwAQAJAAAAEgAA
EQJ7CgAABAoGKgAAACICA30KAAAEKgAAABMwAQAJAAAAEwAAEQJ7CwAABAoGKgAAACICA30LAAAE
KgAAABMwAQAJAAAAFAAAEQJ7DAAABAoGKgAAACICA30MAAAEKgAAABMwCAAMAQAAFQAAEQJvSwAA
Cg0Db0sAAAoMCRfWCBfWc0wAAAoKCRYzAggqCBYzAgkqFgkTCRMEKxEGEQQWEQRvTQAAChEEF9YT
BBEEEQkx6RYIEwoTBSsRBhYRBREFb00AAAoRBRfWEwURBREKMekXCRMLEwY4iQAAABcIEwwTCCt1
AxEIF9pvTgAACgIRBhfab04AAAr+ARaMGwAAAReMGwAAAShPAAAKKFAAAAoTBwYRBhEIBhEGF9oR
CG9RAAAKF9YGEQYRCBfab1EAAAoX1ihSAAAKBhEGF9oRCBfab1EAAAoRB9YoUgAACm9NAAAKEQgX
1hMIEQgRDDGFEQYX1hMGEQYRCz5u////BgkIb1EAAAoLByoeAigXAAAKKhMwAgAtAAAAFgAAEX4Q
AAAELSByegEAcNAMAAACKBQAAApvWgAACnNbAAAKCweAEAAABH4QAAAEKgAAABMwAQAGAAAAFwAA
EX4RAAAEKgAAHgKAEQAABCpCcxcAAAooEQAACoATAAAEKgAAAB4CKFwAAAoqGzABAD8AAAAYAAAR
fhIAAAQtMn4TAAAEKBEAAAooXQAACn4SAAAELRxzLwAABoASAAAE3hB+EwAABCgRAAAKKF4AAArc
fhIAAAQqAAEMAAACAB0ADCkAEAAAAAFCU0pCAQABAAAAAAAMAAAAdjIuMC41MDcyNwAAAAAFAGwA
AACUDAAAI34AAAANAAC8EAAAI1N0cmluZ3MAAAAAvB0AAKwBAAAjVVMAaB8AABAAAAAjR1VJRAAA
AHgfAACcBQAAI0Jsb2IAAAAAAAAAAgAAAVcVogkJDwAAAPoBMwAWAAABAAAASQAAAA0AAAATAAAA
MAAAABcAAABpAAAAQwAAABgAAAAGAAAADwAAABMAAAAKAAAAAQAAAAgAAAABAAAAAgAAAAMAAAAC
AAAAAAB/EAEAAAAAAAoAqQF/AQoA3QG/AQYA7QHmAQoARQJ/AQYAwwLmAQoARQMbAw4AlwOAAxIA
5gPFAxYAFwTFAw4ACgWAAwYAyQa4BgYA9gbhBhoAVwdCBxoApAeOBxoAvQeOBxoA6gfSBwYAFAgB
CAoAUwgsCAoAawgTABoAoAiDCAYA1Qi1CAYA8wjmAQYAFwnmAQoAMAkTAAYAdAlVCQYAiAnmAQYA
jwnmAQYApgnmARIAwAnFAwYAzQnmAR4AMAoHCh4AXwoHCh4AigoHCh4AsgoHCh4AwAoHChYA7QrF
Ax4AEQsHCh4AOAsHCh4AbwsHCh4ApgsHCh4A3wsHCh4A8wsHCh4ADAwHCgYAIAzmAR4AXgwHCh4A
owwHCh4AvQwHCh4A2AwHCgoA8gwsCCIAZg0+DQoAvA0TAAoAzA0sCAYA5g3mARIA7w3FAw4AOA4W
Dg4AVA4WDg4AbA4WDhoAiA6OBxoAmg6OBxoArw6OBwYA1w7FDgYA/g7tDgYAEQ8BCAYAeg+1CAYA
mg+1CAYAuA/FDgYA1Q9VCQYA4w/FDgYA/g/FDgYAGRDFDgYAMhDFDgYASxDFDgYAaBDFDgAAAAAB
AAAAAAABAAEAAAAAACkANwAFAAEAAQAAAAAAcgA3AAkAAQACAAABEAB9ADcADQABAAMABQEAAIcA
AAANAAUACAAFAQAAlQAAAA0ABQAPAAEAAACwALwAHQAGABEAAQAAAPQAvAApAAYAGAABAAAAAgG8
AA0ACAAcAAEAAAAOAbwADQAJAB0AAQAAABgBvAAgAAoAHgAAAAAAIwEvAQ0AEAAqAAABEAB0AbwA
NQASAC4AMQAIAiAAMQAxAi0AMQBTAjoAMQB4AkcAIQBUA5AABgACAdkABgAOAd0AAQBgBe4AAQBg
Be4AAQAxBgkBAQA/BgkBAQBOBgkBAQBfBgwBAQBsBgwBAQB6BgwBEQDZBhMBEQACBxcBEQBvBzUB
EQB3BzkBCCEAAAAABhi5ARMAAQAQIQAAAAAGGLkBEwABABghAAAAABEY9AEXAAEARCEAAAAAEwj7
ARsAAQBcIQAAAAATCCECKAABAHQhAAAAABMISgI1AAEAjCEAAAAAEwhoAkIAAQCkIQAAAABGAq4C
YwABAMAhAAAAAEYCtwJoAAIA1CEAAAAAgwDIAmwAAgDsIQAAAABGAtACcQACAAAiAAAAABEA2QJ4
AAIAHCIAAAAAAQD3AoAAAwA4IgAAAAAGGLkBEwAEAEAiAAAAAAMICwOLAAQAdCIAAAAABhi5ARMA
BACIIgAAAAAGGLkBrwAEAJgiAAAAAEYKSAS5AAgArCIAAAAABghfBL4ACAC8IgAAAAAGCHgEwwAJ
ANgiAAAAAEYKkgS5AAoA+CIAAAAAhgCqBMgACgAQIwAAAACGALIEyAAKACgjAAAAAAYYuQETAAoA
SCMAAAAARgIeBeEACgB4IwAAAABGAzMF6AAMAIwjAAAAAEYDRgXoAA0AkCMAAAAABhi5AfIADgCg
IwAAAAAGGLkB8gAPALAjAAAAAAYYuQETABAAuCMAAAAARgJGBegAEAAMJAAAAABGAnAFEwARAOQk
AAAAAEYCewUTABEABCUAAAAABgCHBfgAEQCkJgAAAAAGCJsFcQASALwmAAAAAAYIqwX+ABIAyCYA
AAAABgjBBXEAEwDgJgAAAAAGCNIF/gATAOwmAAAAAAYI4wVxABQABCcAAAAABgj8Bf4AFAAQJwAA
AAARABUGAwEVACgoAAAAAAMYuQETABcAMCgAAAAAFggOBxsBFwBsKAAAAAAWCCIHIAEXAIAoAAAA
ABYILgclARcAiCgAAAAAERj0ARcAGACcKAAAAAAGGLkBEwAYAKQoAAAAABYIhAc8ARgAAAABALUC
AAABAO4CAAABAO4CAAABACYEAAACADAEAAADADkEAAAEAEEEAAABAHIEAAABAHIEAAABACsFAAAC
AEEEAAABAEEEAAABAFwFAAABACYEAAABACYEAAABAFwFAAABAJAFAAABALsFAAABALsFAAABALsF
AAABAC0GAAACAC8GAAABAHIECQC5ARMAcQC5AUYBgQC5AVUBEQC5ARMAiQC5ARMAJAC5ARMALAC5
ARMANAC5ARMAPAC5ARMAJAALA4sALAALA4sANAALA4sAPAALA4sAkQC5ARMAmQC5ARMAoQC5Af4A
qQDkCO4BGQCuAmMAGQC3AmgAKQAFCfsBGQDQAnEAuQAhCQsCGQC5ARMAwQC5ARsCRABUA5AATACE
B4sATABLCZgCTAC5ARMAyQC5AcMAOQC5Aa8AOQCVCbACOQCeCb4A4QC5Af4A6QCqBMgA6QCyBMgA
8QC5AcMAUQC5ARMAQQBJCr0C+QB2CsICAQGXCsgCCQGgCmgAOQCnCs8CSQCXCtQCSQCVCbACQQBw
BRMA+QDYCtkCGQGXCt8CUQD/CuYCIQEmC+wCCQGnCmgACQFVC/ICMQGXCvgCOQGCC2gAKQGQC/8C
EQHECwUDQQGXCgsDSQGCC2gAQQB7BRMA0QAqDBsDYQG5Af4A+QA4DCADCQFEDCYDMQFUDBMAWQGC
DCwDaQGXCjIDcQGCC2gAeQHlDDkDiQH+DEcDQQFUDBMAQQEODU4DSQESDf4ASQFvDVQDiQGFDRcA
YQGXDXEA0QCjDWgAVAC5AYoDVACuDZAD0QCyDZcDmQHIDZwDoQHYDaMDVADiDf8CqQHrDagDsQG5
ARMAuQG5Af4AwQG5AdIDyQG5ARMA0QG5Af4A2QG5Af4A4QG5Af4AKQDgDpsEWQC5AaEEaQC5ARMA
8QEGD74E8QEMD74E+QG5ARMAAQK5Ab4ACQK5ARMAEQK5Af4AGQK5Af4AIQK5Af4AKQK5Af4AMQK5
Af4AOQK5Af4AQQK5Af4ASQK5Af4AKQCDALwBLgA7A4oFLgAzA00FLgBLA00FLgArAy0FLgALA9EE
LgBDA6UCLgATA/AELgADA8gELgAbA/0ELgDrAKUCLgAjA6UCLgAjAScFQAArAHMBQAATAEwBQwAT
AEwBQwAbAFsBSQCDAKgBYwATAEwBYwAbAFsBaQCDAM0BgAArAHMBgwAbAFsBgwB7AHMBgwBzAHMB
iQCDANoBoAArAHMBowATAEwBowDDACMCwAArAHMBwwDrAKUCwwATAEwB4AArAHMB4wAjAaUCAAEr
AHMBAAETAEwBAwEjAaUCIAErAHMBIAETAEwBQAErAHMBQAETAEwBSQGzAnMBSQG7Ag8ESQHDAhoE
YAErAHMBYAETAEwBYwGbAnMBYwGrAtgDYwEjAaUCYwGjAsQDaQHDAjsEaQGzAnMBaQG7Ag8EgAEr
AHMBiQHLAl0EiQHDAnEEoAErAHMBqQETALUEwAETAEwBwAErAHMByQETALUE4AErAHMB6QH7AnMB
AAITAEwBAAIrAHMBgAMjAaUCoAMjAaUClAGZAZ4BowHzAfcBAgIHAhYCFgKeAqsCtgLzAfMBEgNf
AwcCBwIHAq4DqQSwBMMEBAABAAYABQAHAAYACwAKAAwADQANAA8AAADdAU8AAACWAlQAAABFAlkA
AACiAl4AAABeA5gAAAC+BMwAAADRBNEAAADgBNUAAAD2BMwAAACKBg8BAACWBg8BAACjBg8BAADJ
BisBAAA6BzABAAByBEEBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAQATAA8A
AQAUABEAAgAVABMAAgAjABUAAQAkABUAAgAlABcAAQAmABcAAQAoABkAAgAnABkAAgArABsAAgAs
AB0AAQAtAB0AAgAwAB8AdQB1AIgAeAF/AYYBjQGFAowCggMEgAAAAQAAAAAAAAAAAAAAAAC8AAAA
AgAAAAAAAAAAAAAAAQAKAAAAAAAIAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMA
AAAACgAAAAAAAAAAAAAApgCoAwAAAAAKAAAAAAAAAAAAAACmAPYDAAAAAAIAAAAAAAAAAAAAAAEA
5gEAAAAACgAAAAAAAAAAAAAApgDjCQAAAAAKAAAAAAAAAAAAAACmABsNAAAAAAAAAAABAAAALg8A
AAUABAAGAAQAAAAQAAwA7AIAABAAGQDsAgAAAAAbAOwCLQARAi0AkwIAAAAAADxNb2R1bGU+AG1z
Y29ybGliAE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVu
dF8xYTA1NzM4NjRhM2Y0ZDdiODBhMTdlZjY3ZWM3MDQ2MS52YnByb2ouTXkATXlDb21wdXRlcgBN
eVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1
ZmZlcgBTY3JpcHRDb21wb25lbnRfMWEwNTczODY0YTNmNGQ3YjgwYTE3ZWY2N2VjNzA0NjEudmJw
cm9qAFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMAVmFyaWFibGVzAFNjcmlwdE1haW4ATXlSZXNv
dXJjZXMAU2NyaXB0Q29tcG9uZW50XzFhMDU3Mzg2NGEzZjRkN2I4MGExN2VmNjdlYzcwNDYxLnZi
cHJvai5NeS5SZXNvdXJjZXMATXlTZXR0aW5ncwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGlj
YXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2lj
LkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29t
cHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBV
c2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2Vi
U2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBH
ZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5z
dGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3Vh
bEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldElu
c3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAwOABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlw
dEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2Vy
dmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBl
bGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVy
AGdldF9TdGF0aWNJbnB1dENvbHVtbnMAc2V0X0Rpc3RhbmNlQ29sdW1uAFZhbHVlAHNldF9EaXN0
YW5jZUNvbHVtbl9Jc051bGwAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJv
d3NldABTdGF0aWNJbnB1dENvbHVtbnMARGlzdGFuY2VDb2x1bW4ARGlzdGFuY2VDb2x1bW5fSXNO
dWxsAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQcm9jZXNzSW5wdXQA
SW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJl
bnRDb21wb25lbnQAUHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAGdl
dF9GaXJzdENvbHVtbgBzZXRfRmlyc3RDb2x1bW4AdmFsdWUAZ2V0X1NlY29uZENvbHVtbgBzZXRf
U2Vjb25kQ29sdW1uAGdldF9EaXN0YW5jZU91dHB1dENvbHVtbgBzZXRfRGlzdGFuY2VPdXRwdXRD
b2x1bW4AR2V0TGV2ZW5zaHRlaW5EaXN0YW5jZV8AcwB0AG1fZmlyc3RDb2x1bW4AbV9zZWNvbmRD
b2x1bW4AbV9kaXN0YW5jZUNvbHVtbgBtX2ZpcnN0SW5kZXgAbV9zZWNvbmRJbmRleABtX2Rpc3Rh
bmNlSW5kZXgARmlyc3RDb2x1bW4AU2Vjb25kQ29sdW1uAERpc3RhbmNlT3V0cHV0Q29sdW1uAFN5
c3RlbS5SZXNvdXJjZXMAUmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRp
b24AQ3VsdHVyZUluZm8AX3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ3VsdHVy
ZQBzZXRfQ3VsdHVyZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0
dGluZ3NCYXNlAG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBTeXN0ZW0uQ29tcG9uZW50
TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAFN5c3Rl
bS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVtLkRpYWdub3N0
aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxl
clNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRl
AFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1dGUAU3lzdGVt
LlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmplY3RWYWx1ZQBS
dW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3JlYXRlSW5zdGFu
Y2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLklu
dGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBJbnQzMgBzZXRfSXRlbQBT
ZXROdWxsAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFu
dEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABn
ZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xs
ZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQAZ2V0X0J1ZmZlcgBJRFRTT3V0cHV0
MTAwAElEVFNPdXRwdXRDb2xsZWN0aW9uMTAwAGdldF9PdXRwdXRDb2xsZWN0aW9uAFBpcGVsaW5l
Q29tcG9uZW50AGdldF9Ib3N0Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2VyMTAwAGdldF9CdWZm
ZXJNYW5hZ2VyAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sdW1uQ29s
bGVjdGlvbgBJRFRTSW5wdXRDb2x1bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5l
YWdlSUQASURUU091dHB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X091dHB1dENvbHVtbkNvbGxl
Y3Rpb24ASURUU091dHB1dENvbHVtbjEwMABDTWFuYWdlZENvbXBvbmVudFdyYXBwZXIASURUU1Zp
cnR1YWxJbnB1dDEwMABFeGNlcHRpb24ASXNOdWxsT3JFbXB0eQBJbnN0YW50aWF0ZQBHZXRWaXJ0
dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdl
dF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAA
SURUU0Rlc2lnbnRpbWVDb21wb25lbnQxMDAARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlwZQBQcm9q
ZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IATmV3AHNldF9OYW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAERh
dGFUeXBlAFNldERhdGFUeXBlUHJvcGVydGllcwBDbGVhclByb2plY3RFcnJvcgBnZXRfTWVzc2Fn
ZQBnZXRfTGVuZ3RoAFNldABnZXRfQ2hhcnMASW50ZXJhY3Rpb24ASUlmAENvbnZlcnNpb25zAFRv
SW50ZWdlcgBHZXQATWF0aABNaW4AU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1
dGUAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAFZhbGlkYXRlUHJvcGVydGllc0F0
dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBJbnB1dFZpcnR1YWxDb2x1bW5BdHRyaWJ1
dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUARGVmYXVsdFZhbHVlQXR0
cmlidXRlAFN5c3RlbS5SZWZsZWN0aW9uAEFzc2VtYmx5AGdldF9Bc3NlbWJseQBTeXN0ZW0uVGhy
ZWFkaW5nAE1vbml0b3IARW50ZXIARXhpdABEZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlAFNj
cmlwdENvbXBvbmVudF8xYTA1NzM4NjRhM2Y0ZDdiODBhMTdlZjY3ZWM3MDQ2MS52YnByb2ouUmVz
b3VyY2VzLnJlc291cmNlcwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVD
b21wYXRpYmlsaXR5QXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0
dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJp
YnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFz
c2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBTY3JpcHRD
b21wb25lbnRfMWEwNTczODY0YTNmNGQ3YjgwYTE3ZWY2N2VjNzA0NjEudmJwcm9qLmRsbAAAAICb
SQBzAE4AdQBsAGwAIABwAHIAbwBwAGUAcgB0AHkAIABjAGEAbgBuAG8AdAAgAGIAZQAgAHMAZQB0
ACAAdABvACAARgBhAGwAcwBlAC4AIABBAHMAcwBpAGcAbgAgAGEAIAB2AGEAbAB1AGUAIAB0AG8A
IAB0AGgAZQAgAGMAbwBsAHUAbQBuACAAaQBuAHMAdABlAGEAZAAuAAAdRABpAHMAdABhAG4AYwBl
AEMAbwBsAHUAbQBuAAALSQBuAHAAdQB0AAA3UwBlAGwAZQBjAHQAIABmAGkAcgBzAHQAIABzAHQA
cgBpAG4AZwAgAGMAbwBsAHUAbQBuAC4AADlTAGUAbABlAGMAdAAgAHMAZQBjAG8AbgBkACAAcwB0
AHIAaQBuAGcAIABjAG8AbAB1AG0AbgAuAAA/UwBwAGUAYwBpAGYAeQAgAGQAaQBzAHQAYQBuAGMA
ZQAgAG8AdQB0AHAAdQB0ACAAYwBvAGwAdQBtAG4ALgAAMU0AeQAuAFIAZQBzAG8AdQByAGMAZQBz
AC4ATQB5AFIAZQBzAG8AdQByAGMAZQBzAACujob6+caTQIHzwJA+rAL2AAi3elxWGTTgiQiwP19/
EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQH
BhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAH
MAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQkgBAESIQgCEiUE
IAAdDgQgAQEIBCABAQIDIAACBCgAHQ4DKAAIAygAAgMGEiQDBhIoBiACAQgSJQUgAQESHAMGEiEF
IAEBEiEFIAECEA4EIAEBDgUAAggODgIGDgIGCAMoAA4DBhItAwYSMQQAABItBAAAEjEFAAEBEjEE
CAASLQQIABIxAwYSNAIGHAQAABI0BAgAEjQFIAEBET0IAQABAAAAAAAFIAIBDg4XAQAKTXlUZW1w
bGF0ZQc4LjAuMC4wAAAEAQAAAAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARII
BAcBEhEEBwESFBMBAA5NeS5BcHBsaWNhdGlvbgAAEAEAC015LkNvbXB1dGVyAAAMAQAHTXkuVXNl
cgAAEwEADk15LldlYlNlcnZpY2VzAAAEAAEcHAMHAQIDBwEIBgABEhURWQQHARIVAwcBDgUQAQAe
AAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2Fw
SHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9f
AAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAYHAhMAEwAFAQAAAAAEBwEdDgUgAgEIHAYHAh0O
HQ4EIAASfQUgABKAgQYgARKAhRwEIAASJQQgARwIBSAAEoCNBiABEoCJHAUgABKAkQUgABKAlQUg
ABKAmQYgARKAnRwFIAIICAgFIAASgKEGIAESgKUcCAcCEoCFEoCJBAABAg4FIAASgKkFIAASgK0F
IAASgLUGIAESgLkcDSAEEoCdCBKArQgRgMEGAAEBEoCxBSAAEoClCiAFARGAyQgICAgiBwwCAhKA
nRKAhRKAqRKAiRKAnRKArRKApRKApRKAsRKAsQcUCAIAAgAABSACAQgIBiADAQgICAQgAQMIBgAD
HAIcHAQAAQgcBQACCAgIFQcNFAgCAAIAAAgICAgICAgICAgICA0BAAhWYWxpZGF0ZQAABSABAR0O
NgEAAwAAAAtGaXJzdENvbHVtbgxTZWNvbmRDb2x1bW4URGlzdGFuY2VPdXRwdXRDb2x1bW4AAAoB
AAVJbnB1dAAAIAEAG1NlbGVjdCBmaXJzdCBzdHJpbmcgY29sdW1uLgAAIQEAHFNlbGVjdCBzZWNv
bmQgc3RyaW5nIGNvbHVtbi4AABMBAA5EaXN0YW5jZUNvbHVtbgAAKQEAJFNwZWNpZnkgZGlzdGFu
Y2Ugb3V0cHV0IGNvbHVtbiBuYW1lLgAABSAAEoD1ByACAQ4SgPUGBwISLRItBAcBEjEIAQACAAAA
AAAEAAEBHAQHARI0CAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAQwBAAcx
LjAuMC4wAAApAQAkMDE3MTQ1OGQtMDRhOS00MTg0LTg5ZTctMWVmODdlOTc2YTBlAAAFAQABAAAf
AQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIwMTAAADwBADdTY3JpcHRDb21wb25lbnRfMWEwNTcz
ODY0YTNmNGQ3YjgwYTE3ZWY2N2VjNzA0NjEudmJwcm9qAAAOAQAJTWljcm9zb2Z0AAAAAAA8TgAA
AAAAAAAAAABeTgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUE4AAAAAAAAAAAAAAAAAAAAAAAAA
AF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAO
AAAASAAAgBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAA
AAAAAAEAAH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAA
ANgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAA
AAAAAAAAAAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAi
AAAAAAAAAAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkA
TgBGAE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAA
AAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEA
dABpAG8AbgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAAB
ADAAMAAwADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMA
cgBvAHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBj
AHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAxAGEAMAA1ADcAMwA4ADYANABhADMAZgA0AGQA
NwBiADgAMABhADEANwBlAGYANgA3AGUAYwA3ADAANAA2ADEALgB2AGIAcAByAG8AagAAADAACAAB
AEYAaQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUA
cgBuAGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAxAGEAMAA1
ADcAMwA4ADYANABhADMAZgA0AGQANwBiADgAMABhADEANwBlAGYANgA3AGUAYwA3ADAANAA2ADEA
LgB2AGIAcAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0
AAAAQwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAwAAAA
AACgADwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBv
AG0AcABvAG4AZQBuAHQAXwAxAGEAMAA1ADcAMwA4ADYANABhADMAZgA0AGQANwBiADgAMABhADEA
NwBlAGYANgA3AGUAYwA3ADAANAA2ADEALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUABy
AG8AZAB1AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADEA
YQAwADUANwAzADgANgA0AGEAMwBmADQAZAA3AGIAOAAwAGEAMQA3AGUAZgA2ADcAZQBjADcAMAA0
ADYAMQAuAHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAA
MQAuADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAx
AC4AMAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8A
AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE////////////////
//RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////
///////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0
cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////
////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE
//////////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiI
iIiIiIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERE
RERERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAPAAAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A
//8AAP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP
///////4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RE
RERERETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQA
KAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAABwPgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="34" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="186" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_1a0573864a3f4d7b80a17ef67ec70461</property>
<property id="187" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<inputs>
<input id="24" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="25" name="Output" description="" exclusionGroup="0" synchronousInputId="24" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><outputColumns>
<outputColumn id="181" name="DistanceColumn" description="" lineageId="181" precision="0" scale="0" length="0" dataType="i4" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" /></outputColumns><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>