<component id="107" name="Merge Process" 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="132" 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_deb7430b070141d599c158b313c0b965.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_deb7430b070141d599c158b313c0b965.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2011")> 
<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("c18fff32-7115-41da-8b75-9d2761f85b3f")> 

' 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 Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        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

    Public ReadOnly Property Connection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManager
        End Get
    End Property

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[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2011 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.

Imports System
Imports System.ComponentModel
Imports System.Data
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Reflection
Imports System.Diagnostics

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "Connection", _
    "IsTableVariable", "Table", "TableVariable", _
    "PrimaryKeys", "StageVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Class Consts
        Public Const ColumnSeparator As String = "," + vbLf
        Public Const DElement_1P As String = "D.[{0}]"
        Public Const SElement_1P As String = "S.[{0}]"
        Public Const CreateStageSql_2P As String = "SELECT * INTO {0} FROM {1} WHERE 1=0"
        Public Const MergeSql_7P As String = _
            "MERGE {0} AS D USING {1} AS S ON ({2}) " & _
            "WHEN NOT MATCHED THEN INSERT ({3}) VALUES ({4}) " & _
            "WHEN MATCHED AND ({5}) THEN UPDATE SET {6};"
        Public Const DropTableSql_1P As String = "DROP TABLE {0}"
    End Class   ' Consts


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        ' Nothing to do here.
    End Sub ' Input_ProcessInputRow


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

        Try
            Dim tblCols As DataTable = GetColumns_(False)
            Dim primaryKeys As ArrayList = New ArrayList(Me.PrimaryKeys.Split( _
                New String() {Consts.ColumnSeparator}, _
                StringSplitOptions.None))

            ' Create MERGE statement elements.
            Dim onList As ArrayList = New ArrayList()
            Dim insertDList As ArrayList = New ArrayList()
            Dim insertSList As ArrayList = New ArrayList()
            Dim matchCompare As ArrayList = New ArrayList()
            Dim matchSet As ArrayList = New ArrayList()
            For Each columnRow As DataRow In tblCols.Rows
                Dim columnName As String = CStr(columnRow("ColumnName"))

                Call insertDList.Add(String.Format("[{0}]", columnName))
                Call insertSList.Add(String.Format(Consts.SElement_1P, columnName))

                If primaryKeys.Contains(columnName) Then
                    ' Primary key.
                    Call onList.Add(String.Format( _
                        "{0} = {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                Else
                    Call matchCompare.Add(String.Format( _
                        "{0} <> {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                    Call matchSet.Add(String.Format( _
                        "{0} = {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                End If
            Next

            ' Initialize command.
            Dim conn As DbConnection = GetConnection_(False)
            m_command = conn.CreateCommand()

            Dim table As String = GetTable_()

            ' Create stage table.
            Dim stage As String = GetTemporaryTable_()
            m_command.CommandText = String.Format(Consts.CreateStageSql_2P, stage, table)
            Call m_command.ExecuteNonQuery()

            If Not String.IsNullOrEmpty(Me.StageVariable) Then
                ' Store stage table name in variable.
                Call SetVariable_(Me.StageVariable, stage)
            End If

            ' Setup MERGE statement.
            m_mergeSql = String.Format( _
                Consts.MergeSql_7P, _
                table, _
                stage, _
                String.Join(" AND ", CType(onList.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(insertDList.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(insertSList.ToArray(GetType(String)), String())), _
                String.Join(" OR ", CType(matchCompare.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(matchSet.ToArray(GetType(String)), String())))
            Call FireInformation_(String.Format("Setup statement: {0}", m_mergeSql))

            ' Setup drop stage table.
            m_dropStageSql = String.Format(Consts.DropTableSql_1P, stage)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' PreExecute


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

        If Not m_command Is Nothing Then
            Try
                ' Execute merge statement.
                m_command.CommandText = m_mergeSql
                Call m_command.ExecuteNonQuery()

                ' Drop stage table.
                m_command.CommandText = m_dropStageSql
                Call m_command.ExecuteNonQuery()
            Catch ex As Exception
                Call FireError_(ex.Message)
            End Try

            Dim conn As DbConnection = m_command.Connection
            Call m_command.Dispose()
            m_command = Nothing
            Call conn.Dispose()
        End If
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New ApplicationException("Select connection.")
            End If

            If String.IsNullOrEmpty(Me.Table) Then
                Throw New ApplicationException("Select destination table.")
            End If

            If String.IsNullOrEmpty(Me.PrimaryKeys) Then
                Throw New ApplicationException("Specify table primary keys.")
            End If

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManagerID = Me.Connection

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        Call result.Add("Connection")
        Call result.Add("IsTableVariable")
        Call result.Add(IIf(Me.IsTableVariable, "TableVariable", "Table"))
        Call result.Add("PrimaryKeys")
        Call result.Add("StageVariable")

        GetProperties = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables.
    Public Function GetTables() As Object()
        Dim result As ArrayList = New ArrayList()

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New Exception("Select connection.")
            End If

            ' Get tables.
            Using conn As DbConnection = GetConnection_(True)
                Dim tableType As String = "TABLE"
                If TypeOf conn Is SqlConnection Then
                    ' SQL uses different table type identifier.
                    tableType = "BASE TABLE"
                End If

                Dim tblTables As DataTable = conn.GetSchema( _
                    "Tables", _
                    New String() {Nothing, Nothing, Nothing, tableType})

                ' Get table schema column name.
                Dim schemaCol As String = tblTables.Columns(1).ColumnName

                For Each tableRow As DataRow In tblTables.Rows
                    Dim tableSchema As String = CStr(tableRow(schemaCol))
                    Dim tableName As String = CStr(tableRow("table_name"))

                    Call result.Add(String.Format("[{0}].[{1}]", tableSchema, tableName))
                Next

                Call result.Sort()
            End Using
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetTables = result.ToArray()
    End Function    ' GetTables


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table columns.
    Public Function GetColumns() As Object()
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_(True)
            For Each columnRow As DataRow In tblCols.Rows
                Call result.Add(columnRow("ColumnName"))
            Next

            Call result.Sort()
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetColumns = result.ToArray()
    End Function    ' GetColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select ADO.NET Connection Manager.")> _
    <Connection("AdoNetConnectionType")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            If m_connection <> value Then
                m_connection = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select if destination table is stored in variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsTableVariable() As Boolean
        Get
            IsTableVariable = m_isTableVar
        End Get
        Set(ByVal value As Boolean)
            If m_isTableVar <> value Then
                m_isTableVar = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' IsTableVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table.")> _
    <List("GetTables", False, True)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Table() As String
        Get
            Table = m_table
        End Get
        Set(ByVal value As String)
            If m_table <> value Then
                m_table = value

                Me.PrimaryKeys = GetPrimaryKeys_()
            End If
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable containing destination table.")> _
    <Variable()> _
    Public Property TableVariable() As String
        Get
            TableVariable = Me.Table
        End Get
        Set(ByVal value As String)
            Me.Table = value
        End Set
    End Property    ' TableVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify table primary keys.")> _
    <List("GetColumns", True, False)> _
    Public Property PrimaryKeys() As String
        Get
            PrimaryKeys = m_primaryKeys
        End Get
        Set(ByVal value As String)
            m_primaryKeys = value
        End Set
    End Property    ' PrimaryKeys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store stage table (optional).")> _
    <Variable()> _
    Public Property StageVariable() As String
        Get
            StageVariable = m_stageVar
        End Get
        Set(ByVal value As String)
            m_stageVar = value
        End Set
    End Property    ' StageVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property AdoNetConnectionType() As String()
        Get
            AdoNetConnectionType = New String() {"ADO.NET"}
        End Get
    End Property    ' AdoNetConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table primary keys.
    Private Function GetPrimaryKeys_() As String
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_(True)
            For Each columnRow As DataRow In tblCols.Rows
                If CBool(columnRow("IsKey")) Then
                    ' Key column.
                    Call result.Add(columnRow("ColumnName"))
                End If
            Next
        Catch ex As Exception
            ' Silently catch the error.
        End Try

        GetPrimaryKeys_ = String.Join( _
            Consts.ColumnSeparator, _
            CType(result.ToArray(GetType(String)), String()))
    End Function    ' GetPrimaryKeys_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumns_(ByVal design As Boolean) As DataTable
        Dim result As DataTable

        Using conn As DbConnection = GetConnection_(design)
            Using cmd As DbCommand = conn.CreateCommand()
                cmd.CommandText = String.Format("SELECT * FROM {0}", GetTable_())
                Dim reader As DbDataReader = cmd.ExecuteReader( _
                    CommandBehavior.SchemaOnly Or CommandBehavior.KeyInfo)
                result = reader.GetSchemaTable()
            End Using
        End Using

        GetColumns_ = result
    End Function    ' GetColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Merge Process", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireInformation_(ByVal message As String)
        Dim fireAgain As Boolean
        Call MyBase.ComponentMetaData.FireInformation( _
            0, _
            "Merge Process", _
            message, _
            String.Empty, _
            0, _
            fireAgain)
    End Sub ' FireInformation_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get connection object.
    Private Function GetConnection_(ByVal design As Boolean) As DbConnection
        Dim result As DbConnection

        If design Then
            result = CType( _
                    MyBase.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                    DbConnection)
        Else
            result = CType( _
                    MyBase.Connections.Connection.AcquireConnection(Nothing), _
                    DbConnection)
        End If

        GetConnection_ = result
    End Function    ' GetConnection_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object

        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Function
        End If

        Dim vars As IDTSVariables100
        Call MyBase.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetVariable_(ByVal varName As String, ByVal value As Object)
        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Sub
        End If

        Dim vars As IDTSVariables100
        Call MyBase.VariableDispenser.LockOneForWrite(varName, vars)
        Try
            vars(varName).Value = value
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' SetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns temporary table name.
    Private Function GetTemporaryTable_() As String
        Const TempTable As String = "MPT"

        Dim table As String = GetTable_()

        GetTemporaryTable_ = String.Format( _
            "[{0}].[{1}]", _
            ExtractSchema_(table), _
            TempTable & "_" & ExtractTable_(table) & New Random().Next(0, 1000))
    End Function    ' GetTemporaryTable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function ExtractSchema_(ByVal combo As String) As String
        Const EndS As String = "].["
        ExtractSchema_ = combo.Substring(1, combo.IndexOf(EndS) - 1)
    End Function    ' ExtractSchema_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function ExtractTable_(ByVal combo As String) As String
        Const Start As String = "].["
        Dim indexStart As Integer = combo.IndexOf(Start) + Start.Length
        ExtractTable_ = combo.Substring(indexStart, combo.Length - indexStart - 1)
    End Function    ' ExtractTable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetTable_() As String
        Dim result As String

        If Me.IsTableVariable Then
            result = GetVariable_(Me.TableVariable).ToString()
        Else
            result = Me.Table
        End If

        GetTable_ = result
    End Function    ' GetTable_
#End Region ' Internals


#Region "Attributes"
    Private m_connection As String
    Private m_isTableVar As Boolean
    Private m_table As String
    Private m_primaryKeys As String
    Private m_stageVar As String

    Private m_command As DbCommand
    Private m_mergeSql As String
    Private m_dropStageSql As String
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_deb7430b070141d599c158b313c0b965.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_deb7430b070141d599c158b313c0b965.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_deb7430b070141d599c158b313c0b965.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{DCA77E73-AEEF-4FD5-9EFA-C57C15A1A4BD}</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></arrayElements></property>
<property id="133" 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_deb7430b070141d599c158b313c0b965.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAEXnf00AAAAAAAAAAOAAAiELAQgAAEQAAAAMAAAAAAAAHmIA
AAAgAAAAgAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAADAAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAMhhAABTAAAAAIAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAKAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAJEIAAAAgAAAARAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAgAAAAAoAAABGAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAKAAAAACAAAAUAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAAA
YgAAAAAAAEgAAAACAAUASDAAAIAxAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0eAAABKgAT
MAEABwAAAA0AABEWjR4AAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMcAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqABMwAgAgAAAAEAAAEQJ7CAAABG8jAAAKbycAAApyDQAAcG8oAAAKbykA
AAoqOgIoFwAACgIDfQkAAAQqAB4CKBYAAAYqBioAABswBwDfAgAAEQAAEQIoKgAACgIWbzMAAAYT
CQJvLQAABheNHgAAARMNEQ0WciMAAHCiEQ0WbysAAApzLAAAChMGcy0AAAoTBXMtAAAKC3MtAAAK
DHMtAAAKDXMtAAAKEwQRCW8uAAAKby8AAAoTDjjRAAAAEQ5vMAAACnQnAAABEwsRC3IpAABwbzEA
AAooMgAAChMKB3I/AABwEQooMwAACm80AAAKJghySwAAcBEKKDMAAApvNAAACiYRBhEKbzUAAAos
LBEFclsAAHBybwAAcBEKKDMAAApySwAAcBEKKDMAAAooNgAACm80AAAKJitTCXJ/AABwcm8AAHAR
CigzAAAKcksAAHARCigzAAAKKDYAAApvNAAACiYRBHJbAABwcm8AAHARCigzAAAKcksAAHARCigz
AAAKKDYAAApvNAAACiYRDm83AAAKOiP////eFhEOdS4AAAEsDBEOdS4AAAFvOAAACtwCFm82AAAG
CgIGbzkAAAp9DwAABAJvPAAABhMIAm85AAAGEwcCew8AAARylQAAcBEHEQgoNgAACm86AAAKAnsP
AAAEbzsAAAomAm8vAAAGKDwAAAotDgICby8AAAYRB284AAAGAnLfAABwHY0DAAABEw8RDxYRCKIR
DxcRB6IRDxhy5gEAcBEF0B4AAAEoFAAACm89AAAKdAoAABsoPgAACqIRDxly8gEAcAfQHgAAASgU
AAAKbz0AAAp0CgAAGyg+AAAKohEPGnLyAQBwCNAeAAABKBQAAApvPQAACnQKAAAbKD4AAAqiEQ8b
cvgBAHAJ0B4AAAEoFAAACm89AAAKdAoAABsoPgAACqIRDxxy8gEAcBEE0B4AAAEoFAAACm89AAAK
dAoAABsoPgAACqIRDyg/AAAKfRAAAAQCcgICAHACexAAAAQoMwAACm81AAAGAnIsAgBwEQcoMwAA
Cn0RAAAE3hwlKEAAAAoTDAIRDG9BAAAKbzQAAAYoQgAACt4AKgBBMAAAAgAAAFUAAADyAAAARwEA
ABYAAAAAAAABAAAAAAYAAAC8AgAAwgIAABwAAAAoAAABGzACAIkAAAASAAARAihDAAAKAnsPAAAE
LHoCew8AAAQCexAAAARvOgAACgJ7DwAABG87AAAKJgJ7DwAABAJ7EQAABG86AAAKAnsPAAAEbzsA
AAom3holKEAAAAoLAgdvQQAACm80AAAGKEIAAAreAAJ7DwAABG9EAAAKCgJ7DwAABG9FAAAKAhR9
DwAABAZvRQAACioAAAABDAAAAAAOADxKABooAAABGzACAIgAAAATAAARAm8lAAAGKDwAAAosC3JK
AgBwc0YAAAp6Am8pAAAGKDwAAAosC3JwAgBwc0YAAAp6Am8tAAAGKDwAAAosC3KkAgBwc0YAAAp6
Am8jAAAKbycAAApyDQAAcG8oAAAKAm8lAAAGb0cAAAoXCt4YJShAAAAKDBYKAwhvQQAAClEoQgAA
Ct4ABgsHKgEMAAAAAAAAbGwAGCgAAAETMAQAbwAAABQAABFzLQAACgsHcg0AAHBvNAAACiYHctwC
AHBvNAAACiYHAm8nAAAGcvwCAHByGAMAcChIAAAKKBEAAApvNAAACiYHciQDAHBvNAAACiYHcjwD
AHBvNAAACiYH0B4AAAEoFAAACm89AAAKdAoAABsKBioAGzAFAC0BAAAVAAARcy0AAAoLAm8lAAAG
KDwAAAosC3JKAgBwc0kAAAp6AhdvNgAABgxyWAMAcBMECHU0AAABLAdyZAMAcBMECHJ6AwBwGo0e
AAABEwoRChYUohEKFxSiEQoYFKIRChkRBKIRCm9KAAAKEwURBW9LAAAKF29MAAAKb00AAAoNEQVv
LgAACm8vAAAKEwsrRRELbzAAAAp0JwAAARMHEQcJbzEAAAooMgAAChMIEQdyiAMAcG8xAAAKKDIA
AAoTBgdyngMAcBEIEQYoNgAACm80AAAKJhELbzcAAAotst4WEQt1LgAAASwMEQt1LgAAAW84AAAK
3AdvTgAACt4rCCwGCG84AAAK3N4fJShAAAAKEwkRCW9BAAAKHzAUKE8AAAomKEIAAAreAAdvUAAA
CgoGKgAAAAEkAAACAHsAYNsAFgAAAAECACYA0/kACgAAAAEAAAYA/wUBHygAAAEbMAMAkgAAABYA
ABFzLQAACgsCF28zAAAGDAhvLgAACm8vAAAKEwUrJBEFbzAAAAp0JwAAAQ0HCXIpAABwbzEAAAoo
EQAACm80AAAKJhEFbzcAAAot094WEQV1LgAAASwMEQV1LgAAAW84AAAK3AdvTgAACt4fJShAAAAK
EwQRBG9BAAAKHzAUKE8AAAomKEIAAAreAAdvUAAACgoGKgAAARgAAAIADgA+TAAWAAAAAQAABgBk
agAfKAAAARMwAQAJAAAAFwAAEQJ7CgAABAoGKgAAAI4CewoAAAQDFihRAAAKFi4SAgN9CgAABAJ+
UgAACm8qAAAGKhMwAQAJAAAAGAAAEQJ7CwAABAoGKgAAAHICewsAAAQDLhICA30LAAAEAn5SAAAK
byoAAAYqAAAAEzABAAkAAAAZAAARAnsMAAAECgYqAAAAkgJ7DAAABAMWKFEAAAoWLhMCA30MAAAE
AgJvMgAABm8uAAAGKgAAABMwAQAJAAAAGgAAEQJvKQAABgoGKgAAACICA28qAAAGKgAAABMwAQAJ
AAAAGwAAEQJ7DQAABAoGKgAAACICA30NAAAEKgAAABMwAQAJAAAAHAAAEQJ7DgAABAoGKgAAACIC
A30OAAAEKgAAABMwAwATAAAAHQAAEReNHgAAAQsHFnK2AwBwogcKBioAGzADAKcAAAAeAAARcy0A
AAoLAhdvMwAABgwIby4AAApvLwAAChMFKzYRBW8wAAAKdCcAAAENCXLGAwBwbzEAAAooUwAACiwX
BwlyKQAAcG8xAAAKKBEAAApvNAAACiYRBW83AAAKLcHeJxEFdS4AAAEsDBEFdS4AAAFvOAAACtze
DyUoQAAAChMEKEIAAAreAHIjAABwB9AeAAABKBQAAApvPQAACnQKAAAbKD4AAAoKBioAARgAAAIA
DgBQXgAWAAAAAQAABgBwdgAPKAAAARswAwBSAAAAHwAAEQIDbzYAAAYMCG85AAAKDQly0gMAcAJv
PAAABigzAAAKbzoAAAoJHG9UAAAKEwQRBG9VAAAKC94WCSwGCW84AAAK3N4KCCwGCG84AAAK3AcK
BioAAAEYAAACAA8AKTgACgAAAAECAAgAPEQACgAAAAETMAcAGwAAACAAABECKCMAAAoWcvYDAHAD
flIAAAoWEgBvVgAACioAEzAHABsAAAAhAAARAigjAAAKFnL2AwBwA35SAAAKFhIAb1cAAAoqABMw
AgA9AAAAIgAAEQMsHwIoWAAACgJvJQAABm9ZAAAKFG9aAAAKdA0AAAELKxcCewYAAARvGwAABhRv
WwAACnQNAAABCwcKBioAAAAbMAMAPAAAACMAABEDKDwAAAosAiswAihcAAAKAxICb10AAAoIA29e
AAAKb18AAAooEQAACgveBwhvYAAACtwHKBEAAAoKBioBDAAAAgAYABQsAAcAAAABGzADADMAAAAk
AAARAyg8AAAKLAEqAihcAAAKAxIAb2EAAAoGA29eAAAKBCgRAAAKb2IAAAreBwZvYAAACtwqAAEM
AAACABcAFCsABwAAAAETMAcAQQAAACYAABECbzwAAAYLcp4DAHACB286AAAGchIEAHACB287AAAG
c2MAAAoWIOgDAABvZAAACihlAAAKKGYAAAooNgAACgoGKgAAABMwBAAXAAAAKAAAEQMXA3IcBABw
b2cAAAoX2m9oAAAKCgYqABMwBAArAAAAKgAAEQNyHAQAcG9nAAAKchwEAHBvaQAACtYLAwcDb2kA
AAoH2hfab2gAAAoKBioAEzACACcAAAArAAARAm8nAAAGLBQCAm8rAAAGbzcAAAZvFQAACgsrBwJv
KQAABgsHCgYqAB4CKBcAAAoqHgIoFwAACioTMAIALQAAACwAABF+GAAABC0gciQEAHDQDQAAAigU
AAAKb3MAAApzdAAACgsHgBgAAAR+GAAABCoAAAATMAEABgAAAC0AABF+GQAABCoAAB4CgBkAAAQq
QnMXAAAKKBEAAAqAGwAABCoAAAAeAih1AAAKKhswAQA/AAAALgAAEX4aAAAELTJ+GwAABCgRAAAK
KHYAAAp+GgAABC0cc0MAAAaAGgAABN4QfhsAAAQoEQAACih3AAAK3H4aAAAEKgABDAAAAgAdAAwp
ABAAAAABQlNKQgEAAQAAAAAADAAAAHYyLjAuNTA3MjcAAAAABQBsAAAA7A8AACN+AABYEAAAuBMA
ACNTdHJpbmdzAAAAABAkAABYBAAAI1VTAGgoAAAQAAAAI0dVSUQAAAB4KAAACAkAACNCbG9iAAAA
AAAAAAIAAAFXHaIJCQ8AAAD6ATMAFgAAAQAAAFgAAAAOAAAAGwAAAEQAAAAfAAAAggAAAAYAAABK
AAAALgAAAAcAAAASAAAAGQAAAAoAAAABAAAACgAAAAEAAAADAAAAAwAAAAIAAAAAAHsTAQAAAAAA
CgCwAYYBCgDkAcYBBgD0Ae0BCgBMAoYBBgDKAu0BCgBMAyIDDgCeA4cDEgDtA8wDFgAeBMwDDgC5
BIcDGgBqBUIFHgDZBs0GHgAtBxoHHgDmBxoHBgDOCL0IBgD7COYIIgBiCU0JIgCvCZkJIgDICZkJ
IgD1Cd0JBgAfCgwKCgBeCjcKCgB2ChMAIgCrCo4KBgDgCsAKBgD+Cu0BBgAiC+0BCgA7CxMABgB/
C2ALBgCTC+0BEgCaC8wDBgCnC+0BJgAKDOELJgA5DOELJgBkDOELJgCBDOELJgDEDOELBgAGDfMM
HgAQDc0GBgAYDe0BBgAiDfMMBgAuDe0BBgBHDfMMHgBTDc0GCgCIDTcKBgCxDe0BBgABDu0BCgAU
DjcKIgAtBJkJBgBODu0BCgB7DhMAHgChDosOHgC5Ds0GHgDaDs0GCgD5DhMACgAGDxMACgAZDzcK
HgBBDxoHHgBOD80GKgACAbQPKgDqD7QPGgAOEEIFGgAfEEIFGgBdEEIFBgCEEO0BEgC0EMwDDgD9
ENsQDgAXEdsQDgAzEdsQIgBLEZkJIgBmEZkJDgB4EdsQIgCMEZkJDgChEdsQDgCzEdsQBgDTEcER
BgD6EekRBgANEgwKBgB2EsAKBgCWEsAKBgC0EsERBgDREmALBgDfEsERBgD6EsERBgAVE8ERBgAu
E8ERBgBHE8ERBgBkE8ERAAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIA
AAEQAH0ANwANAAEAAwAFAQAAhwAAAA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQAB
AAAA9AC8ACkABgAWAAEAAAACAbwADQAIABoAAQAAAA4BvAANAAkAHAABAAAAGAG8ACAACgAdAAMA
AAAjAQAADQASAD0AAAAAACoBNgENABgAPgAAARAAewG8AEUAGgBCADEADwIgADEAOAItADEAWgI6
ADEAfwJHACEAWwOQAAYAAgHHAAYADgHLAAEADwXcAAEADwXcAAEAqwchAQEAuAckAQEAxQchAQEA
zQchAQEA2wchAQEA8AcnAQEA+gchAQEABQghAVaAZwghAVaAdwghAVaAgwghAVaAjwghAVaAoQgh
AVaArQghAREA3gjCAhEABwnGAhEAegnkAhEAggnoAgghAAAAAAYYwAETAAEAECEAAAAABhjAARMA
AQAYIQAAAAARGPsBFwABAEQhAAAAABMIAgIbAAEAXCEAAAAAEwgoAigAAQB0IQAAAAATCFECNQAB
AIwhAAAAABMIbwJCAAEApCEAAAAARgK1AmMAAQDAIQAAAABGAr4CaAACANQhAAAAAIMAzwJsAAIA
7CEAAAAARgLXAnEAAgAAIgAAAAARAOACeAACABwiAAAAAAEA/gKAAAMAOCIAAAAABhjAARMABABA
IgAAAAADCBIDiwAEAHQiAAAAAAYYwAETAAQAiCIAAAAABhjAAa8ABACYIgAAAABGCk8EuQAIAKwi
AAAAAEYKZgS5AAgAwCIAAAAAhgB+BL4ACADYIgAAAACGAIYEvgAIAPAiAAAAAAYYwAETAAgAECMA
AAAARgLNBM8ACABAIwAAAABGA+IE1gAKAFQjAAAAAEYD9QTWAAsAWCMAAAAABhjAAeAADABoIwAA
AAAGCIMF5gANAJQjAAAAAAYYwAHgAA0ApCMAAAAABhjAARMADgCsIwAAAABGAvUE1gAOALAjAAAA
AEYCnQUTAA8A0CYAAAAARgKoBRMADwB4JwAAAAAGALQF8AAPABwoAAAAAAYAyAW5ABAAmCgAAAAA
BgDWBfYAEAD8KQAAAAAGAOAF9gAQALgqAAAAAAYIgwVxABAA0CoAAAAABgjrBfsAEAD0KgAAAAAG
CAAGvgARAAwrAAAAAAYIFAYAAREALCsAAAAABggoBnEAEgBEKwAAAAAGCDIG+wASAGwrAAAAAAYI
PAZxABMAhCsAAAAABghOBvsAEwCQKwAAAAAGCGAGcQAUAKgrAAAAAAYIcAb7ABQAtCsAAAAABgiA
BnEAFQDMKwAAAAAGCJIG+wAVANgrAAAAAAEIpAa5ABYA+CsAAAAAAQC9BnEAFgDILAAAAAABAOMG
BQEWAEQtAAAAAAEA9gb7ABcAbC0AAAAAAQAJB/sAGACULQAAAAABADoHCwEZAOAtAAAAAAEASQcR
ARoAOC4AAAAAAQBeBxYBGwCILgAAAAABAGsHcQAdANguAAAAAAEAfgccAR0A/C4AAAAAAQCTBxwB
HgA0LwAAAAABAKEHcQAfAGgvAAAAAAYYwAETAB8AcC8AAAAAAxjAARMAHwB4LwAAAAAWCBMJygIf
ALQvAAAAABYIJwnPAh8AyC8AAAAAFggzCdQCHwDQLwAAAAARGPsBFwAgAOQvAAAAAAYYwAETACAA
7C8AAAAAFgiPCesCIAAAAAEAvAIAAAEA9QIAAAEA9QIAAAEALQQAAAIANwQAAAMAQAQAAAQASAQA
AAEA2gQAAAIASAQAAAEASAQAAAEACwUAAAEALQQAAAEALQQAAAEACwUAAAEAvQUAAAEA+gUAAAEA
+gUAAAEA+gUAAAEA+gUAAAEA+gUAAAEA+gUAAAEA7wYAAAEAAQcAAAEAAQcAAAEA7wYAAAEAVgcA
AAEAVgcAAAIA+gUAAAEAjQcAAAEAjQcAAAEAPwkJAMABEwCRAMAB9QKhAMABBAMRAMABEwCpAMAB
EwAkAMABEwAsAMABEwA0AMABEwA8AMABEwAkABIDiwAsABIDiwA0ABIDiwA8ABIDiwCxAMABEwC5
AMABEwDBAMAB+wDJAO8KnQMZALUCYwAZAL4CaAApABALqgMZANcCcQDZACwLugMZAMABEwDhAMAB
ygNEAFsDkABMAI8JiwBMAFYLRwRMAMABEwDpAMABAAE5AMABrwD5AH4EvgD5AIYEvgABAcABAAFR
AMABEwBBACMMXwQJAVAMZQQRAXEMawQZAXoMaAAJAaQMcgQhAXEMeAQpAd0M5gBBAJ0FEwDxAEEN
hAQxAcABjgQxAcABEwBhAGUNlQRhAW4NmwRJAXwNoQQ5AXEMEQFpAdcCpQTxAJQNqgQxAZsNsAQx
AZ8NYwDxAJQNtQRJAagNvgBxAb0NEwBpAMUNvARxANMN+wBxAOMNaADxAPMNwQQxAQcOxgTxAA8O
0QTxAJQN2ASBASAO3wRBATAOcQCBATwOFwBBAKgFEwBxAIMFDwWJAb0NEwCRAcAB+wApAWMO+wCZ
AYcOJAVBAcAB+wBpAK8OMwVhAM4OOwWpAXEMQQWxAeUOcQAxAfQOEwCZARIPSAUxAQcO9gDJASMP
gQXxADEPIQFpATcPjwVxAF4PpgXRAWwPrwUJAXsPwgUJAYUPwgVRANQPzQXhAXEM0wXpAfwP2gVZ
APwP2gVBADgQ5gX5AU4Q7AXxAXEM9QUBAo8JoQTxAW0QEwD5AXQQ7AUBAlYLBAYJAsABEwAJAosQ
DwZpAdcCFQbxAJAQGgbxAJcQJgbxAJ8QKwbxAKkQaAARAsABEwAZAsAB+wAhAsAB+wApAsABVwYx
AsABrwZBAsAB+wBJAsAB+wBRAsABEwBZAsABZgcpANwRAwh5AMABCQiJAMABEwBpAgISJghpAggS
JghxAsABEwB5AsABMAiBAsABEwCJAsAB+wCRAsAB+wCZAsAB+wChAsAB+wCpAsAB+wCxAsAB+wC5
AsAB+wDBAsAB+wAOAEgAMwEOAEwAOAEOAFAARwEOAFQAVgEOAFgAnwEOAFwApQIpAIMAawMuAPMD
mgguAMsDNQguAOsDVAQuAAME9wguAAsEVAQuABMEugguAPsDugguANMDPgguANsDXQguAOMDaggu
AOsAVAQuAAsBlAhAABMA+wJAACsAIgNDABMA+wJDABsACgNJAIMAiQNjABsACgNjABMA+wJpAIMA
fAOAACsAIgODAHMAIgODABsACgODAHsAIgOJAIMAVwOgACsAIgOjABMA+wKjAMMA0gPAACsAIgPD
AOsAVATDABMA+wLgACsAIgPjAAsBVAQAARMA+wIAASsAIgMDAQsBVAQgASsAIgMgARMA+wIpAYMD
0AYpAXsDtgYpAXMD+wJAASsAIgNAARMA+wJJAYMDLgdJAXMD+wJgARMA+wJgASsAIgNjAWMDSQZj
AWsDXQZjAVMDIgNjAVsDNgZjAQsBVARpAYMDsQdpAZMDoAdpAXMD+wKAASsAIgOJAYMD0AeJAYsD
IgOgASsAIgOpAYMDfwepAZMDbQfAASsAIgPAARMA+wLJAYMD+AbJAYsDIgPgASsAIgMAAhMA+wIA
AisAIgMJAhMAHQgpAhMAHQhJAsMDIgNAAwsBVASAAwsBVARDA0gDTQNSA6IDpgOxA7YDxQPFA00E
WgRaBKIDogN/BOYEFAUcBSsFUwVuBbYDogO2A7YDtgO2A4gFlAW0BaIDogPfBfwFCQYhASEGIQG2
AyEBMQYhBhEIGAgrCAQAAQAGAAUABwAGAAkACAALAAkADQAQAA4AEgAAAOQBTwAAAJ0CVAAAAEwC
WQAAAKkCXgAAAGUDmAAAAJIEwgAAAKUEwgAAAJIF6wAAAJIFKwEAABQILwEAACQIKwEAACoIKwEA
ADgIKwEAAEQIKwEAAFIIwgAAAM4I2gIAAEUJ3wIAAD8J8AICAAQAAwACAAUABQACAAYABwACAAcA
CQACAA8ACwACABIADQACABMADwACABsAEQACACUAEwABACYAEwACACcAFQABACgAFQACACkAFwAB
ACoAFwABACwAGQACACsAGQACAC0AGwABAC4AGwACAC8AHQABADAAHQACADEAHwACAD8AIQACAEAA
IwABAEEAIwACAEQAJQB1AHUAiAAnAy4DNQM8AzQEOwTOBASAAAABAAAAAAAAAAAAAAAAALwAAAAC
AAAAAAAAAAAAAAABAAoAAAAAAAgAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQBxAwAA
AAAKAAAAAAAAAAAAAACmAK8DAAAAAAoAAAAAAAAAAAAAAKYA/QMAAAAACgAAAAAAAAAAAAAApgAf
BQAAAAACAAAAAAAAAAAAAAABAM0GAAAAAAIAAAAAAAAAAAAAAAEA7QEAAAAACgAAAAAAAAAAAAAA
pgC9CwAAAAAKAAAAAAAAAAAAAACmAJUPAAAAAAAAAAABAAAAKhIAAAUABAAGAAQADAALAAAAEAAM
APMCAAAQABkA8wIAAAAAGwDzAi0AwAMtAEIEAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0
LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50X2RlYjc0MzBiMDcwMTQx
ZDU5OWMxNThiMzEzYzBiOTY1LnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNl
cnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBv
bmVudF9kZWI3NDMwYjA3MDE0MWQ1OTljMTU4YjMxM2MwYjk2NS52YnByb2oAVXNlckNvbXBvbmVu
dABDb25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBDb25zdHMATXlSZXNvdXJjZXMAU2Ny
aXB0Q29tcG9uZW50X2RlYjc0MzBiMDcwMTQxZDU5OWMxNThiMzEzYzBiOTY1LnZicHJvai5NeS5S
ZXNvdXJjZXMATXlTZXR0aW5ncwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2
aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMA
Q29tcHV0ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmpl
Y3RQcm92aWRlcgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9V
c2VyAG1fVXNlck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNP
YmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29k
ZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlz
cG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15
U2VydmljZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENv
enlSb2MuU1NJU1BsdXMuMjAwOABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBs
dXMATWljcm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5Q
aXBlbGluZQBTY3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QA
UGlwZWxpbmVCdWZmZXIAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAGdldF9TdGF0
aWNJbnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3Nl
dABTdGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQ
bHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNz
SW5wdXRSb3cAUm93AFBhcmVudENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRp
bWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBJRFRTQ29ubmVj
dGlvbk1hbmFnZXIxMDAAZ2V0X0Nvbm5lY3Rpb24AQ29ubmVjdGlvbgBQcmVFeGVjdXRlAFBvc3RF
eGVjdXRlAFZhbGlkYXRlAGVyck1lc3NhZ2UAR2V0UHJvcGVydGllcwBHZXRUYWJsZXMAR2V0Q29s
dW1ucwBzZXRfQ29ubmVjdGlvbgB2YWx1ZQBnZXRfSXNUYWJsZVZhcmlhYmxlAHNldF9Jc1RhYmxl
VmFyaWFibGUAZ2V0X1RhYmxlAHNldF9UYWJsZQBnZXRfVGFibGVWYXJpYWJsZQBzZXRfVGFibGVW
YXJpYWJsZQBnZXRfUHJpbWFyeUtleXMAc2V0X1ByaW1hcnlLZXlzAGdldF9TdGFnZVZhcmlhYmxl
AHNldF9TdGFnZVZhcmlhYmxlAGdldF9BZG9OZXRDb25uZWN0aW9uVHlwZQBHZXRQcmltYXJ5S2V5
c18AU3lzdGVtLkRhdGEARGF0YVRhYmxlAEdldENvbHVtbnNfAGRlc2lnbgBGaXJlRXJyb3JfAG1l
c3NhZ2UARmlyZUluZm9ybWF0aW9uXwBTeXN0ZW0uRGF0YS5Db21tb24ARGJDb25uZWN0aW9uAEdl
dENvbm5lY3Rpb25fAEdldFZhcmlhYmxlXwB2YXJOYW1lAFNldFZhcmlhYmxlXwBHZXRUZW1wb3Jh
cnlUYWJsZV8ARXh0cmFjdFNjaGVtYV8AY29tYm8ARXh0cmFjdFRhYmxlXwBHZXRUYWJsZV8AbV9j
b25uZWN0aW9uAG1faXNUYWJsZVZhcgBtX3RhYmxlAG1fcHJpbWFyeUtleXMAbV9zdGFnZVZhcgBE
YkNvbW1hbmQAbV9jb21tYW5kAG1fbWVyZ2VTcWwAbV9kcm9wU3RhZ2VTcWwASXNUYWJsZVZhcmlh
YmxlAFRhYmxlAFRhYmxlVmFyaWFibGUAUHJpbWFyeUtleXMAU3RhZ2VWYXJpYWJsZQBBZG9OZXRD
b25uZWN0aW9uVHlwZQBDb2x1bW5TZXBhcmF0b3IAREVsZW1lbnRfMVAAU0VsZW1lbnRfMVAAQ3Jl
YXRlU3RhZ2VTcWxfMlAATWVyZ2VTcWxfN1AARHJvcFRhYmxlU3FsXzFQAFN5c3RlbS5SZXNvdXJj
ZXMAUmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUlu
Zm8AX3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVy
ZQBWYWx1ZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NC
YXNlAG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwA
RWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAFN5c3RlbS5Db2Rl
RG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVtLkRpYWdub3N0aWNzAERl
YnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZp
Y2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3Rl
bS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRp
bWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmplY3RWYWx1ZQBSdW50aW1l
VHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlH
cm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BT
ZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBTY3JpcHRCdWZmZXIAQ0xTQ29tcGxp
YW50QXR0cmlidXRlAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lLldyYXBwZXIASURUU0NvbXBvbmVudE1ldGFEYXRhMTAw
AGdldF9Db21wb25lbnRNZXRhRGF0YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENv
bGxlY3Rpb24ASURUU0lucHV0MTAwAGdldF9JdGVtAGdldF9JRABJRFRTUnVudGltZUNvbm5lY3Rp
b25Db2xsZWN0aW9uMTAwAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24ASURUU1J1bnRp
bWVDb25uZWN0aW9uMTAwAGdldF9Db25uZWN0aW9uTWFuYWdlcgBTeXN0ZW0uQ29sbGVjdGlvbnMA
QXJyYXlMaXN0AERhdGFSb3cARXhjZXB0aW9uAElFbnVtZXJhdG9yAFN0cmluZ1NwbGl0T3B0aW9u
cwBTcGxpdABJQ29sbGVjdGlvbgBEYXRhUm93Q29sbGVjdGlvbgBnZXRfUm93cwBHZXRFbnVtZXJh
dG9yAGdldF9DdXJyZW50AENvbnZlcnNpb25zAEZvcm1hdABBZGQAQ29udGFpbnMATW92ZU5leHQA
SURpc3Bvc2FibGUARGlzcG9zZQBDcmVhdGVDb21tYW5kAHNldF9Db21tYW5kVGV4dABFeGVjdXRl
Tm9uUXVlcnkASXNOdWxsT3JFbXB0eQBBcnJheQBUb0FycmF5AEpvaW4AUHJvamVjdERhdGEAU2V0
UHJvamVjdEVycm9yAGdldF9NZXNzYWdlAENsZWFyUHJvamVjdEVycm9yAEFwcGxpY2F0aW9uRXhj
ZXB0aW9uAHNldF9Db25uZWN0aW9uTWFuYWdlcklEAEludGVyYWN0aW9uAElJZgBTeXN0ZW0uRGF0
YS5TcWxDbGllbnQAU3FsQ29ubmVjdGlvbgBHZXRTY2hlbWEARGF0YUNvbHVtbkNvbGxlY3Rpb24A
Z2V0X0NvbHVtbnMARGF0YUNvbHVtbgBnZXRfQ29sdW1uTmFtZQBTb3J0AE1zZ0JveFJlc3VsdABN
c2dCb3hTdHlsZQBNc2dCb3gAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcARW1wdHkAVG9Cb29sZWFu
AERiRGF0YVJlYWRlcgBDb21tYW5kQmVoYXZpb3IARXhlY3V0ZVJlYWRlcgBHZXRTY2hlbWFUYWJs
ZQBGaXJlRXJyb3IARmlyZUluZm9ybWF0aW9uAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERU
UwBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lAGdldF9EZXNpZ25Db25uZWN0aW9ucwBD
b25uZWN0aW9uTWFuYWdlcgBBY3F1aXJlQ29ubmVjdGlvbgBJRFRTVmFyaWFibGVzMTAwAElEVFNW
YXJpYWJsZURpc3BlbnNlcjEwMABnZXRfVmFyaWFibGVEaXNwZW5zZXIATG9ja09uZUZvclJlYWQA
SURUU1ZhcmlhYmxlMTAwAFVubG9jawBMb2NrT25lRm9yV3JpdGUAUmFuZG9tAE5leHQAQ29uY2F0
AEluZGV4T2YAU3Vic3RyaW5nAGdldF9MZW5ndGgAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9p
bnRBdHRyaWJ1dGUAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAEZpbHRlclByb3Bl
cnRpZXNBdHRyaWJ1dGUAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVz
QXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzQXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzAENv
bm5lY3Rpb25BdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAVmFyaWFibGVBdHRyaWJ1dGUA
TGlzdEF0dHJpYnV0ZQBTeXN0ZW0uUmVmbGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1ibHkAU3lz
dGVtLlRocmVhZGluZwBNb25pdG9yAEVudGVyAEV4aXQARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJp
YnV0ZQBTY3JpcHRDb21wb25lbnRfZGViNzQzMGIwNzAxNDFkNTk5YzE1OGIzMTNjMGI5NjUudmJw
cm9qLlJlc291cmNlcy5yZXNvdXJjZXMAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBS
dW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRl
AEd1aWRBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmln
aHRBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJp
YnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUA
U2NyaXB0Q29tcG9uZW50X2RlYjc0MzBiMDcwMTQxZDU5OWMxNThiMzEzYzBiOTY1LnZicHJvai5k
bGwAAAALSQBuAHAAdQB0AAAVQwBvAG4AbgBlAGMAdABpAG8AbgAABSwACgAAFUMAbwBsAHUAbQBu
AE4AYQBtAGUAAAtbAHsAMAB9AF0AAA9TAC4AWwB7ADAAfQBdAAATewAwAH0AIAA9ACAAewAxAH0A
AA9EAC4AWwB7ADAAfQBdAAAVewAwAH0AIAA8AD4AIAB7ADEAfQAASVMARQBMAEUAQwBUACAAKgAg
AEkATgBUAE8AIAB7ADAAfQAgAEYAUgBPAE0AIAB7ADEAfQAgAFcASABFAFIARQAgADEAPQAwAACB
BU0ARQBSAEcARQAgAHsAMAB9ACAAQQBTACAARAAgAFUAUwBJAE4ARwAgAHsAMQB9ACAAQQBTACAA
UwAgAE8ATgAgACgAewAyAH0AKQAgAFcASABFAE4AIABOAE8AVAAgAE0AQQBUAEMASABFAEQAIABU
AEgARQBOACAASQBOAFMARQBSAFQAIAAoAHsAMwB9ACkAIABWAEEATABVAEUAUwAgACgAewA0AH0A
KQAgAFcASABFAE4AIABNAEEAVABDAEgARQBEACAAQQBOAEQAIAAoAHsANQB9ACkAIABUAEgARQBO
ACAAVQBQAEQAQQBUAEUAIABTAEUAVAAgAHsANgB9ADsAAAsgAEEATgBEACAAAAUsACAAAAkgAE8A
UgAgAAApUwBlAHQAdQBwACAAcwB0AGEAdABlAG0AZQBuAHQAOgAgAHsAMAB9AAAdRABSAE8AUAAg
AFQAQQBCAEwARQAgAHsAMAB9AAAlUwBlAGwAZQBjAHQAIABjAG8AbgBuAGUAYwB0AGkAbwBuAC4A
ADNTAGUAbABlAGMAdAAgAGQAZQBzAHQAaQBuAGEAdABpAG8AbgAgAHQAYQBiAGwAZQAuAAA3UwBw
AGUAYwBpAGYAeQAgAHQAYQBiAGwAZQAgAHAAcgBpAG0AYQByAHkAIABrAGUAeQBzAC4AAB9JAHMA
VABhAGIAbABlAFYAYQByAGkAYQBiAGwAZQAAG1QAYQBiAGwAZQBWAGEAcgBpAGEAYgBsAGUAAAtU
AGEAYgBsAGUAABdQAHIAaQBtAGEAcgB5AEsAZQB5AHMAABtTAHQAYQBnAGUAVgBhAHIAaQBhAGIA
bABlAAALVABBAEIATABFAAAVQgBBAFMARQAgAFQAQQBCAEwARQAADVQAYQBiAGwAZQBzAAAVdABh
AGIAbABlAF8AbgBhAG0AZQAAF1sAewAwAH0AXQAuAFsAewAxAH0AXQAAD0EARABPAC4ATgBFAFQA
AAtJAHMASwBlAHkAACNTAEUATABFAEMAVAAgACoAIABGAFIATwBNACAAewAwAH0AABtNAGUAcgBn
AGUAIABQAHIAbwBjAGUAcwBzAAAJTQBQAFQAXwAAB10ALgBbAAAxTQB5AC4AUgBlAHMAbwB1AHIA
YwBlAHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAAAAAoFnhM5Z0bU67wP7FEh+7QwAIt3pcVhk0
4IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAES
EQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQ
AQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIFs9JC7gMNOoIiYRdzYCAzJEJIAQB
EiEIAhIlBCAAHQ4DIAACBCgAHQ4DBhIkAwYSKAYgAgEIEiUFIAEBEhwDBhIhBSABARIhBCAAEi0E
KAASLQUgAQIQDgQgAB0cBCABAQ4EIAEBAgUgARIxAgUgARI1AgQgARwOBSACAQ4cBCABDg4CBg4C
BgIDBhI5AygADgMoAAIELAAKAA5EAC4AWwB7ADAAfQBdAA5TAC4AWwB7ADAAfQBdAEhTAEUATABF
AEMAVAAgACoAIABJAE4AVABPACAAewAwAH0AIABGAFIATwBNACAAewAxAH0AIABXAEgARQBSAEUA
IAAxAD0AMACBBE0ARQBSAEcARQAgAHsAMAB9ACAAQQBTACAARAAgAFUAUwBJAE4ARwAgAHsAMQB9
ACAAQQBTACAAUwAgAE8ATgAgACgAewAyAH0AKQAgAFcASABFAE4AIABOAE8AVAAgAE0AQQBUAEMA
SABFAEQAIABUAEgARQBOACAASQBOAFMARQBSAFQAIAAoAHsAMwB9ACkAIABWAEEATABVAEUAUwAg
ACgAewA0AH0AKQAgAFcASABFAE4AIABNAEEAVABDAEgARQBEACAAQQBOAEQAIAAoAHsANQB9ACkA
IABUAEgARQBOACAAVQBQAEQAQQBUAEUAIABTAEUAVAAgAHsANgB9ADsAHEQAUgBPAFAAIABUAEEA
QgBMAEUAIAB7ADAAfQADBhI9AwYSQQQAABI9BAAAEkEFAAEBEkEECAASPQQIABJBAwYSOAIGHAQA
ABI4BAgAEjgFIAEBEU0IAQABAAAAAAAFIAIBDg4XAQAKTXlUZW1wbGF0ZQc4LjAuMC4wAAAEAQAA
AAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBMBAA5NeS5X
ZWJTZXJ2aWNlcwAAEAEAC015LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LkFwcGxpY2F0
aW9uAAAEAAEcHAMHAQIDBwEIBgABEhURaQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4O
DmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29s
EkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAE
CgETAAUgAQETAAYHAhMAEwAFAQAAAAAEBwEdDgUgABKAhQUgABKAiQYgARKAjRwFIAASgJEGIAES
gJUcBAcBEi0JIAIdDh0OEYCpBiABARKArQUgABKAsQUgABKApQMgABwEAAEOHAUAAg4OHAQgAQgc
BgADDg4cHAQgABI5BAABAg4HIAESgL0SFQIdDgYAAg4OHQ4GAAIODh0cBgABARKAoSgHEBI1EoCZ
EoCZEoCZEoCZEoCZEoCZDg4SMQ4SgJ0SgKEdDhKApR0cBCAAEjUHBwISNRKAoQcHAwICEoChBgAD
HAIcHAcHAh0OEoCZByACEjEOHQ4FIAASgNUGIAESgNkICgADEYDdHBGA4RwaBwwdHBKAmRI1Dg4S
MQ4SgJ0OEoChHQ4SgKUSBwYdHBKAmRIxEoCdEoChEoClBgADCA4OAgYHAh0OHQ4EAAECHBEHBg4S
gJkSMRKAnRKAoRKApQggARKA6RGA7QQgABIxDQcFEjESMRI1EjkSgOkKIAYBCA4ODggQAgUgABKA
8QYgARKA9RwEIAEcHAYHAhI1EjUFIAASgP0IIAIBDhASgPkGIAESgQEcBwcDHBwSgPkEIAEBHAUH
ARKA+QUgAggICAQAAQ4IBgADDg4ODgQHAg4OBCABCA4FIAIOCAgEBwIOCBIBAA1HZXRQcm9wZXJ0
aWVzAAANAQAIVmFsaWRhdGUAAAUgAQEdDlEBAAYAAAAKQ29ubmVjdGlvbg9Jc1RhYmxlVmFyaWFi
bGUFVGFibGUNVGFibGVWYXJpYWJsZQtQcmltYXJ5S2V5cw1TdGFnZVZhcmlhYmxlAAAGIAEBEYEd
GQEAFEFkb05ldENvbm5lY3Rpb25UeXBlAAAnAQAiU2VsZWN0IEFETy5ORVQgQ29ubmVjdGlvbiBN
YW5hZ2VyLgAANQEAMFNlbGVjdCB2YXJpYWJsZSB0byBzdG9yZSBzdGFnZSB0YWJsZSAob3B0aW9u
YWwpLgAANwEAMlNlbGVjdCBpZiBkZXN0aW5hdGlvbiB0YWJsZSBpcyBzdG9yZWQgaW4gdmFyaWFi
bGUuAAAGIAMBDgICEQEACkdldENvbHVtbnMBAAAAIAEAG1NwZWNpZnkgdGFibGUgcHJpbWFyeSBr
ZXlzLgAAEAEACUdldFRhYmxlcwABAAAeAQAZU2VsZWN0IGRlc3RpbmF0aW9uIHRhYmxlLgAAMgEA
LVNlbGVjdCB2YXJpYWJsZSBjb250YWluaW5nIGRlc3RpbmF0aW9uIHRhYmxlLgAABSAAEoExByAC
AQ4SgTEGBwISPRI9BAcBEkEIAQACAAAAAAAEAAEBHAQHARI4BCABAQgIAQAIAAAAAAAeAQABAFQC
FldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAAACkBACRjMThmZmYzMi03MTE1LTQx
ZGEtOGI3NS05ZDI3NjFmODViM2YAAAUBAAEAAB8BABpDb3B5cmlnaHQgQCBNaWNyb3NvZnQgMjAx
MQAAPAEAN1NjcmlwdENvbXBvbmVudF9kZWI3NDMwYjA3MDE0MWQ1OTljMTU4YjMxM2MwYjk2NS52
YnByb2oAAA4BAAlNaWNyb3NvZnQAAAAA8GEAAAAAAAAAAAAADmIAAAAgAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAABiAAAAAAAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAg
QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAKAAAgA4AAABIAACAEAAA
AGAAAIAAAAAAAAAAAAAAAAAAAAIAAgAAAHgAAIADAAAAkAAAgAAAAAAAAAAAAAAAAAAAAQAAfwAA
qAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAwAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAA2AAAAAAAAAAA
AAAAAAAAAAAAAQAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA+AAAAAAAAAAAAAAAAAAAAAAA
AQAAAAAACAEAAICFAADoAgAAAAAAAAAAAABoiAAAKAEAAAAAAAAAAAAAkIkAACIAAAAAAAAAAAAA
ABiBAABoBAAAAAAAAAAAAABoBDQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAA
vQTv/gAAAQAAAAEAAAAAAAAAAQAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAAB
AFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAA
AAAAALAEyAMAAAEAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAApAMAAAEAMAAwADAAMAAw
ADQAYgAwAAAANAAKAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAABNAGkAYwByAG8AcwBvAGYA
dAAAAJgAOAABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABTAGMAcgBpAHAAdABD
AG8AbQBwAG8AbgBlAG4AdABfAGQAZQBiADcANAAzADAAYgAwADcAMAAxADQAMQBkADUAOQA5AGMA
MQA1ADgAYgAzADEAMwBjADAAYgA5ADYANQAuAHYAYgBwAHIAbwBqAAAAMAAIAAEARgBpAGwAZQBW
AGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAuADAALgAwAAAAmAA8AAEASQBuAHQAZQByAG4AYQBsAE4A
YQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGQAZQBiADcANAAzADAAYgAw
ADcAMAAxADQAMQBkADUAOQA5AGMAMQA1ADgAYgAzADEAMwBjADAAYgA5ADYANQAuAHYAYgBwAHIA
bwBqAC4AZABsAGwAAABcABsAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAABDAG8AcAB5
AHIAaQBnAGgAdAAgAEAAIABNAGkAYwByAG8AcwBvAGYAdAAgADIAMAAxADEAAAAAAKAAPAABAE8A
cgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBl
AG4AdABfAGQAZQBiADcANAAzADAAYgAwADcAMAAxADQAMQBkADUAOQA5AGMAMQA1ADgAYgAzADEA
MwBjADAAYgA5ADYANQAuAHYAYgBwAHIAbwBqAC4AZABsAGwAAACQADgAAQBQAHIAbwBkAHUAYwB0
AE4AYQBtAGUAAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AZABlAGIANwA0ADMA
MABiADAANwAwADEANAAxAGQANQA5ADkAYwAxADUAOABiADMAMQAzAGMAMABiADkANgA1AC4AdgBi
AHAAcgBvAGoAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAA
LgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAu
ADAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAA
AICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAd3d3d3d3d3d3d3d3d3dwBEREREREREREREREREREcAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cASIiIiIiIiIiIiIiIiIhHAERERE
RERERERERERERERwBExMTExMTExMTE7Ozkl0cATMzMzMzMzMzMzMzMzMxAAARERERERERERERERE
REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
/////////////8AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
AYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAA8AAAAf/////
//////////8oAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA
gAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
AAAAAAAAB3d3d3d3d3dERERERERER0////////hHT///////+EdP///////4R0////////hHT///
////+EdP///////4R0////////hHT///////+EdIiIiIiIiIR0zMzMzMzMxHxERERERERMAAAAAA
AAAAAAAAAAAAAAAA//8AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAABAAD//wAA//8AAAAAAQACACAgEAABAAQA6AIAAAIAEBAQAAEABAAoAQAAAwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAYAAADAAAACAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property>
<property id="136" 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="853" 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_deb7430b070141d599c158b313c0b965</property>
<property id="854" 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>
<connections>
<connection id="137" name="Connection" description="" connectionManagerID="{562df823-bed8-4bbf-a358-9dd7fec61d92}" /></connections>
<inputs>
<input id="138" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="185" name="Output" description="" exclusionGroup="0" synchronousInputId="138" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>