﻿<component id="2" name="Dynamics CRM Lookup" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="9" 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="3" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="15"><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2012 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.Collections
Imports System.Xml
Imports System.Web.Services.Protocols
Imports System.Security

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"CrmConnection", "Entity", "KeyAttribute", "ValueAttribute", "UseCache"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Public Const FetchTemplate_3P As String = "<fetch mapping='logical' count='1'><entity name='{0}'>{1}<filter type='and'>{2}</filter></entity></fetch>"
    Public Const AttrTemplate_1P As String = "<attribute name='{0}' />"
    Public Const CondTemlate_2P As String = "<condition attribute='{0}' operator='eq' value='{1}' />"
    Public Const ListDelimiter As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim valueList() As String

        If m_cache Is Nothing Then
            valueList = GetLookupRow_(Row)
        Else
            ' Cache is enabled.
            Dim cacheKey As String = GetCacheKey_(Row)

            If m_cache.Contains(cacheKey) Then
                valueList = CType(m_cache(cacheKey), String())
            Else
                valueList = GetLookupRow_(Row)
                m_cache(cacheKey) = valueList
            End If
        End If

        If Not valueList Is Nothing Then
            ' Lookup row found.
            Dim colsCount As Integer = m_valueIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim value As String = valueList(colIndex)
                Dim valueIndex As Integer = m_valueIdx(colIndex)

                If value Is Nothing Then
                    Call Row.Buffer.SetNull(valueIndex)
                Else
                    Select Case m_valueType(colIndex)
                        Case DataType.DT_GUID
                            Row.Buffer(valueIndex) = New Guid(value)

                        Case DataType.DT_DBTIMESTAMP
                        Case DataType.DT_DATE
                        Case DataType.DT_FILETIME
                        Case DataType.DT_DBDATE
                            Row.Buffer(valueIndex) = Convert.ToDateTime(value)

                        Case DataType.DT_IMAGE
                            Row.Buffer(valueIndex) = Convert.FromBase64String(value)

                        Case Else
                            Row.Buffer(valueIndex) = value
                    End Select
                End If
            Next
        End If
    End Sub ' Input_ProcessInputRow


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

        ' Setup connection.
        m_connection = CType( _
            Me.Connections.CrmConnection.AcquireConnection(Nothing), _
            ICrmConnection)
        Call m_connection.Connect()

        If Me.UseCache Then
            m_cache = New Hashtable()
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup key index and condition list.
        m_keyIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            ' Set key index.
            m_keyIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Set condition list.
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)
            m_condTemplate_P += String.Format( _
                CondTemlate_2P, _
                extCol.Name, _
                "{" + colIndex.ToString() + "}")
        Next

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        colsCount = output.OutputColumnCollection.Count

        ' Setup value index and attribute list.
        m_attrToIdx = New Hashtable()
        m_valueIdx = New Integer(colsCount - 1) {}
        m_valueType = New DataType(colsCount - 1) {}
        Dim attrList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim outputCol As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            m_attrToIdx(outputCol.Name) = colIndex

            ' Set value index and type.
            m_valueIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                outputCol.LineageID)
            m_valueType(colIndex) = outputCol.DataType

            ' Set attribute list.
            attrList += String.Format(AttrTemplate_1P, outputCol.Name)
        Next

        ' Setup fetch template.
        m_fetchTemplate_1P = String.Format( _
            FetchTemplate_3P, _
            Me.Entity, _
            attrList, _
            "{0}")
    End Sub ' PreExecute


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

        Call m_connection.Close()
    End Sub ' PostExecute


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

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

            If String.IsNullOrEmpty(Me.Entity) Then
                Throw New ApplicationException("Select entity.")
            End If

            If String.IsNullOrEmpty(Me.KeyAttribute) Then
                Throw New ApplicationException("Specify key attribute(s).")
            End If

            If String.IsNullOrEmpty(Me.ValueAttribute) Then
                Throw New ApplicationException("Select value attribute.")
            End If

            Dim keyList() As String = Me.KeyAttribute.Split( _
                New String() {ListDelimiter}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count < keyList.Length Then
                Throw New Exception("Map input columns.")
            End If

            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup collection output columns.
                Call SetupOutputColumns_()
            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("CrmConnection").ConnectionManagerID = Me.CrmConnection

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

        Validate = result
    End Function    'Validate


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

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.KeyAttribute) Then
            Throw New Exception("Key attribute(s) not selected.")
        End If

        ' Get entity attributes.
        Dim attrList() As ICrmAttribute = GetAttributes_()

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup attribute metadata.
        Dim keyList() As String = Me.KeyAttribute.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)
        For Each key As String In keyList
            ' Find CRM attribute.
            Dim attr As ICrmAttribute = FindAttribute_(attrList, key)

            ' Setup external column.
            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
            column.Name = attr.Name
            column.DataType = CType(attr.AttributeType, DataType)
            column.Length = attr.Length
            column.Precision = attr.Precision
            column.Scale = attr.Scale
            column.CodePage = 0
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of entities in the currently selected Dynamics CRM connection.
    Public Function GetEntityList() As String()
        Dim result() As String

        Dim connection As ICrmConnection = CType( _
            Me.DesignConnections(Me.CrmConnection).AcquireConnection(Nothing), _
            ICrmConnection)
        Call connection.Connect()

        Try
            result = connection.GetEntityList(2)  ' 2 - Read
            Call Array.Sort(result)
        Finally
            Call connection.Close()
        End Try

        GetEntityList = result
    End Function    ' GetEntityList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of attributes in the currently selected entity.
    Public Function GetAttributeList() As String()
        Dim result As ArrayList = New ArrayList()

        Dim attrList() As ICrmAttribute = GetAttributes_()
        For Each attr As ICrmAttribute In attrList
            Call result.Add(attr.Name)
        Next

        Call result.Sort()

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


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select Dynamics CRM Connection Manager.")> _
    <Connection("CrmConnectionType")> _
    Public Property CrmConnection() As String
        Get
            CrmConnection = m_crmConnection
        End Get
        Set(ByVal value As String)
            m_crmConnection = value
        End Set
    End Property    ' CrmConnection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select lookup entity.")> _
    <List("GetEntityList")> _
    Public Property Entity() As String
        Get
            Entity = m_entity
        End Get
        Set(ByVal value As String)
            If m_entity <> value Then
                m_entity = value

                m_attributes = Nothing
                Me.KeyAttribute = String.Empty
                Me.ValueAttribute = String.Empty
            End If
        End Set
    End Property    ' Entity


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more key attributes.")> _
    <List("GetAttributeList", True, False)> _
    Public Property KeyAttribute() As String
        Get
            KeyAttribute = m_keyAttribute
        End Get
        Set(ByVal value As String)
            If m_keyAttribute <> value Then
                If Not String.IsNullOrEmpty(m_keyAttribute) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_keyAttribute = value
            End If
        End Set
    End Property    ' KeyAttribute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more lookup attributes.")> _
    <List("GetAttributeList", True, False)> _
    Public Property ValueAttribute() As String
        Get
            ValueAttribute = m_valueAttribute
        End Get
        Set(ByVal value As String)
            If m_valueAttribute <> value Then
                If Not String.IsNullOrEmpty(m_valueAttribute) Then
                    ' Force output columns to be reloaded.
                    If Me.ComponentMetaData.OutputCollection.Count > 0 Then
                        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
                        Call output.OutputColumnCollection.RemoveAll()
                    End If
                End If

                m_valueAttribute = value
            End If
        End Set
    End Property    ' ValueAttribute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select whether memory cache is used.")> _
    <DefaultValue(True)> _
    Public Property UseCache() As Boolean
        Get
            UseCache = m_useCache
        End Get
        Set(ByVal value As Boolean)
            m_useCache = value
        End Set
    End Property    ' UseCache
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property CrmConnectionType() As String()
        Get
            CrmConnectionType = New String() {"DYNAMICS-CRM"}
        End Get
    End Property    ' CrmConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Dynamics CRM Lookup", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function FindAttribute_( _
        ByVal attrList() As ICrmAttribute, _
        ByVal name As String) As ICrmAttribute

        Dim result As ICrmAttribute = Nothing

        For Each attr As ICrmAttribute In attrList
            If attr.Name.Equals(name, StringComparison.OrdinalIgnoreCase) Then
                ' Found.
                result = attr
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception(String.Format("'{0}' attribute not found.", name))
        End If

        FindAttribute_ = result
    End Function    ' FindAttribute_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setups cache key based on specified key attributes.
    Private Function GetCacheKey_(ByVal row As InputBuffer) As String
        Dim result As String = String.Empty

        For Each idx As Integer In m_keyIdx
            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(idx) Then
                key = row.Buffer(idx).ToString() + "_"
            End If

            result += key
        Next

        GetCacheKey_ = result
    End Function    ' GetCacheKey_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Uses CRM Fetch to retrieve required lookup row.
    Private Function GetLookupRow_(ByVal row As InputBuffer) As String()
        Dim result() As String = Nothing

        ' Setup fetch conditions.
        Dim colsCount As Integer = m_keyIdx.Length
        Dim condList() As Object = New Object(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim keyIndex As Integer = m_keyIdx(colIndex)

            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(keyIndex) Then
                key = row.Buffer(keyIndex).ToString()
            End If

            condList(colIndex) = SecurityElement.Escape(key)
        Next

        ' Fetch data.
        Dim fetchStmt As String = String.Format( _
            m_fetchTemplate_1P, _
            String.Format(m_condTemplate_P, condList))

        Dim doc As XmlDocument = New XmlDocument()
        Try
            Call doc.LoadXml(m_connection.Fetch(fetchStmt))
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        Dim recsList As XmlNodeList = doc.DocumentElement.ChildNodes
        If recsList.Count > 0 Then
            result = New String(m_valueIdx.Length - 1) {}

            For Each element As XmlElement In recsList(0).ChildNodes
                Dim colIndex As Object = m_attrToIdx(element.Name)
                If colIndex Is Nothing Then
                    Continue For
                End If

                result(CInt(colIndex)) = element.InnerText
            Next
        End If

        GetLookupRow_ = result
    End Function    ' GetLookupRow_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetAttributes_() As ICrmAttribute()
        Dim result() As ICrmAttribute = m_attributes

        If result Is Nothing Then
            Dim connection As ICrmConnection = CType( _
                Me.DesignConnections(Me.CrmConnection).AcquireConnection(Nothing), _
                ICrmConnection)
            Call connection.Connect()

            Try
                result = connection.GetEntityAttributes(Me.Entity)
            Finally
                Call connection.Close()
            End Try

            m_attributes = result
        End If

        GetAttributes_ = result
    End Function    ' GetAttributes_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Get entity attributes.
        Dim attrList() As ICrmAttribute = GetAttributes_()

        Dim valueList() As String = Me.ValueAttribute.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)

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

        For Each value As String In valueList
            ' Find CRM attribute.
            Dim attr As ICrmAttribute = FindAttribute_(attrList, value)

            ' Setup output column.
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
            column.Name = attr.Name
            Call column.SetDataTypeProperties( _
                CType(attr.AttributeType, DataType), _
                attr.Length, _
                attr.Precision, _
                attr.Scale, _
                0)
        Next
    End Sub ' SetupOutputColumns_
#End Region ' Internals


#Region "Attributes"
    Private m_crmConnection As String
    Private m_entity As String
    Private m_keyAttribute As String
    Private m_valueAttribute As String
    Private m_useCache As Boolean

    Private m_connection As ICrmConnection
    Private m_cache As Hashtable
    Private m_fetchTemplate_1P As String
    Private m_keyIdx() As Integer
    Private m_condTemplate_P As String
    Private m_valueIdx() As Integer
    Private m_attributes() As ICrmAttribute
    Private m_attrToIdx As Hashtable
    Private m_valueType() As DataType
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [telephone1]() As String
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [telephone1_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 WriteOnly Property [name]() As String
        Set
            Me(1) = Value
        End Set
    End Property
    Public WriteOnly Property [name_IsNull] As Boolean
        Set
            If (value)
                SetNull(1)
            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() {"telephone1", "name"}
        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[ScriptComponent_a8db124b16d04c44952f3e9b4633e605.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{1BC34149-F108-4746-B621-4362A98FDAE5}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</RootNamespace>
    <AssemblyName>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Xml">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Web.Services">
      <Private>False</Private>
    </Reference>
  </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>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_SC120" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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 InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        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 CrmConnection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").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[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</msb:CodeName>
		<msb:DisplayName>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</msb:DisplayName>
		<msb:ProjectId>{1E8B9B1A-1B5D-492D-AEF1-7313E60E8ADC}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_a8db124b16d04c44952f3e9b4633e605.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="4" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_a8db124b16d04c44952f3e9b4633e605.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
I1VTAMQnAAAQAAAAI0dVSUQAAADUJwAAbAgAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ4AAAD6JTMA
FgAAAQAAAFIAAAALAAAAGwAAADkAAAAgAAAAowAAAAQAAAA/AAAAJAAAAAUAAAASAAAAFwAAAAoA
AAABAAAACwAAAAIAAAADAAAAAwAAAAAAlxMBAAAAAAAKAD8BFQEKAHMBVQEGAIMBfAEKANsBFQEG
AFkCfAEKANsCsQIOAC0DFgMSAHwDWwMWAK0DWwMSALwDWwMOANIEFgMaAI0FZQUOABwHFgMOAMgH
FgMGAPcH5AcaAFoIZQUeAMMIrQgeANwIrQgeAAkJ8QgGADMJIAkKAHIJSwkKAIoJEwAeAL8JogkG
APQJ1AkGABIKfAEGADYKfAEKAE8KEwAGAJ0KfgoGALEKfAEGAMkKfAESAOMKWwMGAPAKfAEiAFML
KgsiAIILKgsiAK0LKgsiAMoLKgsiAA0MKgsGADwMfAEGAFUMfAEGAF0MfAEiAIIMKgsiAJAMKgsi
AK4MKgsiAMEMKgsGAO8MfAEiAPUMKgsWADYNWwMiAFoNKgsiAKUNKgsiADQOKgsiAGEOKgsGALMO
fAEGAMsOfAEGAOAOfAEKACAPSwkmAPQADRAmAEMQDRAGAFUQfAEGAGAQ5AcKAHYQSwkGAJgQfAEq
ALsQsBAqAMcQsBAuAAUR5xAqABMRsBAGAB4R5AcGADoRKhEqAF8RsBAKAMcRSwkGAPQRfAESADIS
WwMOAHsSWRIOAJcSWRIOAK8SWRIOAMcSWRIeANUSrQgeAOoSrQgOAPwSWRIeABATrQgGACYT1AkG
AEYT1AkGAH4TZBMAAAAAAQAAAAAAAQABAAAAAAApADcABQABAAEAAAAAAGsANwAJAAEAAgAAARAA
dgA3AA0AAQADAAUBAACAAAAADQAFAAgABQEAAI4AAAANAAUADwABAAAAqQC1AB0ABgARAAEAAADm
ALUALQAGABoAAQAAAPQAtQANAAgAHgABAAAAAAG1AA0ACQAgAAEAAAAKAbUAIAAKACEAMQCeASAA
MQDHAS0AMQDpAToAMQAOAkcAIQDqApAABgD0ANsABgAAAd8AAQAyBfMAAQAyBfMAVoDGBQcBVoDX
BQcBVoDnBQcBVoD2BQcBAQCEBwcBAQCUBwcBAQCdBwcBAQCsBwcBAQC9B6UCAQDXB6gCAQABCKwC
AQAJCAcBAQAcCLACAQAlCAcBAQA2CLACAQBBCLQCAQBOCKwCAQBjCLkCUCAAAAAABhhPARMAAQBY
IAAAAAAGGE8BEwABAGAgAAAAABEYigEXAAEAjCAAAAAAEwiRARsAAQCkIAAAAAATCLcBKAABALwg
AAAAABMI4AE1AAEA1CAAAAAAEwj+AUIAAQDsIAAAAABGAkQCYwABAAghAAAAAEYCTQJoAAIAHCEA
AAAAgwBeAmwAAgA0IQAAAABGAmYCcQACAEghAAAAABEAbwJ4AAIAZCEAAAAAAQCNAoAAAwCAIQAA
AAAGGE8BEwAEAIghAAAAAAMIoQKLAAQAvCEAAAAABhhPARMABADQIQAAAAAGGE8BrwAEAOAhAAAA
AEYK9gO7AAkA9CEAAAAABggNBMAACQAAIgAAAAAGCCIExQAKABwiAAAAAAYIOATAAAsAKCIAAAAA
BghBBMUADABEIgAAAABGClEEuwANAGwiAAAAAIYAaQTKAA0AhCIAAAAAhgBxBMoADQCcIgAAAAAG
GE8BEwANALwiAAAAAEYC5gTjAA0A7CIAAAAARgMFBe0AEQAAIwAAAABGAxgF7QASAAQjAAAAAAYY
TwH3ABMAFCMAAAAABgimBf0AFABAIwAAAAAGGE8B9wAUAFAjAAAAAAYYTwETABUAWCMAAAAARgIY
Be0AFQCYJAAAAABGAgQGEwAWAMQmAAAAAEYCDwYTABYA2CYAAAAABgAbBoMCFgAsKAAAAABGAi8G
EwAXAFQpAAAAAAYARAa7ABcAsCkAAAAABgBSBrsAFwAQKgAAAAAGCKYFcQAXACgqAAAAAAYIYwbA
ABcANCoAAAAABgh7BnEAGABMKgAAAAAGCIYGwAAYAIQqAAAAAAYIkQZxABkAnCoAAAAABgiiBsAA
GQAEKwAAAAAGCLMGcQAaABwrAAAAAAYIxgbAABoAhCsAAAAABgjZBsoAGwCcKwAAAAAGCOYGxQAb
AKgrAAAAAAEI8wa7ABwAyCsAAAAAAQAJB8AAHAD0KwAAAAABACoHiQIdAEQsAAAAAAEAQgeSAh8A
tCwAAAAAAQBTB5gCIABwLgAAAAABAGEHnwIhANwuAAAAAAEAcAcTACEAAAABAEsCAAABAIQCAAAB
AIQCAAABAMoDAAACANQDAAADAN0DAAAEAOUDAAAFAOwDAAABABwEAAABABwEAAABABwEAAABABwE
AAABAPMEAAACAPsEAAADAOUDAAAEAOwDAAABAOUDAAABAC4FAAABAMoDAAABAMoDAAABAC4FAAAB
ACQGAAABAHUGAAABAHUGAAABAHUGAAABAHUGAAABAHUGAAABABQHAAABADkHAAACAK0EAAABAE8H
AAABAE8HCQBPARMAiQBPAb4CmQBPAc0CEQBPARMAoQBPARMAJABPARMALABPARMANABPARMAPABP
ARMAJAChAosALAChAosANAChAosAPAChAosAqQBPARMAsQBPARMAuQBPAcAAwQADCmcDGQBEAmMA
GQBNAmgAKQAkCnQDGQBmAnEA0QBACoQDGQBPARMA2QBPAZQDRADqApAATABqCosATAB0ChEETABP
ARMA4QBPAcUAOQBPAa8AOQC4CisEOQDBCjEE8QBPAcAA+QBpBMoA+QBxBMoAAQFPAcUAWQBPARMA
QQBsCz0ECQGZC0MEEQG6C0kEGQHDC2gACQHtC1AEIQG6C1YEKQEmDP0AeQBBDGMAeQC6C2IEeQC4
CmoEOQBKDHAESQDBCjEEMQFPAcAASQC4CisEOQFmDHUEOQFxDHwEQQAEBhMAYQDVDGIEcQDnDBMA
eQBPARMAGQESDZIEcQEsDWgAcQG6C5gEWQBIDZ8EeQFvDaUEGQFKDGgAWQGBDWgAgQGPDasEGQHN
DbEEWQHyDWgAiQEPDrcEUQEdDnEAaQFmAnEA6QAmDr4E6QAtDsUE6QAmDswECQFMDtIEkQG6C9gE
SQF/Dt8EmQEsDWgA6QCaDgcBmQG6C+UEYQEdDnEAYQGBDWgAYQGgDuwE6QAtDvEE6QAtDvcEQQAP
BhMAcQCtDhMA6QC9DhcFqQFPAcAA6QDzDhwFGQH5DsoAoQFPAcAAKQEID8AAuQEsDyYFoQE8D3EA
uQFIDxcAWQAvBhMAEQEsDWgAiQFaD8UAcQFlDxMAiQFlDxMAiQFvDz8FaQAdDnEAUQFzD8AAaQB8
D2gAUQGOD0UFaQCbD2gAUQGmDzEEaQCxD2gAUQG/DzEEaQDND2gAUQHXDzEEUQHhDzEEWQAtEGEF
wQG6C2cFyQHVDGIEcQBEBm4F0QFbEHQF2QFPARMA2QFqEIkF2QFbEBMA2QFuEI4F4QGAEKcFkQEs
DWgAmQFlDxMACQGOELoF6QBEAsUFSQCpENoFSQC6C98FGQJKEe4F6QAtDvMF8QFPARMAcQBREfoF
8QFXEcAAAQJnEf8FIQJyEXEA8QF/EQUGIQKTEQsG+QEsDWgA+QGiEREG+QGtERgGEQK7ER4GCQId
DnEAKQLTESIGCQLdEXEAEQLrEcoAMQIAEhMAcQAIEkkGmQFvD1sGYQFzD8AAYQEcEmEGOQJPARMA
QQJPAcAASQJPAY8GUQJPARMAWQJPAdgGYQJPAcAAaQJPAcAAcQJPAcAAeQJPAcUAWQJPAcAAgQJP
ATEEiQJPARMAkQJPAcAADgAoAAoBDgAsAN4BDgAwAA8CDgA0AH4CKQCDAEkDLgALBfwHLgAbBSQI
LgATBQUIQAArAOwCQAATAMQCQwATAMQCQwAbANMCSQCDACEDYwAbANMCYwATAMQCaQCDAFoDgAAr
AOwCgwAbANMCgwB7AOwCgwBzAOwCiQCDADUDoAArAOwCowDDAJwDowATAMQCwAArAOwCwwDrACAE
wwATAMQC4AArAOwC4wAjASAEAAETAMQCAAErAOwCAwEjASAEIAErAOwCIAETAMQCQAETAMQCQAEr
AOwCYAErAOwCYAETAMQCYwHDBIEGYwHTBOwCYwEjASAEYwG7BOwCYwHLBJUGgAErAOwCoAErAOwC
qQHrBCAHqQHjBHEHqQHzBFoHwAETAMQCwAErAOwCyQHrBCAHyQEDBc4HyQHjBOEH4AErAOwC6QHj
BPcG6QHrBCAH6QHbBN8GAAITAMQCAAIrAOwCCQLbBN8GCQLjBC4HCQLrBCAHKQLjBKQHKQLrBCAH
KQL7BJ4HwAMjASAEAAQjASAEDQMSAxcDHANsA3ADewOAA48DjwMXBCYENgRsA2wDXQSCBP8ELQVL
BYAFlgWAA4ADgAOuBYADtAVsAzYEbAPNBeQFJwZQBmsGBAABAAYABQAHAAYACQAMAAsADQAAAHMB
TwAAACwCVAAAANsBWQAAADgCXgAAAPQCmAAAAH0EzgAAAJAE0wAAAJsE1wAAAK0E0wAAALIE1wAA
AL4EzgAAALgFAgEAALgF0wAAAG8I0wAAAHYI0wAAAIMI0wAAAJII1wAAAJsIzgACAAQAAwACAAUA
BQACAAYABwACAAcACQACAA8ACwACABIADQABABMADwABABQAEQABABUAEwABABYAFQACABcAFwAC
AB8AGQACACkAGwABACoAGwACACsAHQABACwAHQABAC4AHwACAC0AHwABADAAIQACAC8AIQACADEA
IwABADIAIwACADMAJQB1AHUAiADxAvgC/wIGA/4DBQRnBASAAAAAAAAAAAAAAAAAAAAAALUAAAAE
AAAAAAAAAAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQAAAwAA
AAAMAAAAAAAAAAAAAACmAD4DAAAAAAwAAAAAAAAAAAAAAKYAjAMAAAAADAAAAAAAAAAAAAAApgBC
BQAAAAAEAAAAAAAAAAAAAAABAHwBAAAAAAwAAAAAAAAAAAAAAKYABgsAAAAADAAAAAAAAAAAAAAA
pgDuDwAAAAAEAAAAAAAAAAAAAAABALAQAAAAAAQAAAAAAAAAAAAAAAoA0xAAAAAABQAEAAYABAAA
ABAADACCAgAAEAAZAIICAAAAABsAggItAIoDLQAMBOsAfAUAAAAAADxNb2R1bGU+AG1zY29ybGli
AE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF9hOGRi
MTI0YjE2ZDA0YzQ0OTUyZjNlOWI0NjMzZTYwNS5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdl
YlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENv
bXBvbmVudF9hOGRiMTI0YjE2ZDA0YzQ0OTUyZjNlOWI0NjMzZTYwNQBVc2VyQ29tcG9uZW50AENv
bm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBs
aWNhdGlvblNlcnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFz
aWMuRGV2aWNlcwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9D
b21wdXRlck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVy
AFVzZXIAZ2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlX
ZWJTZXJ2aWNlc09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBv
AEdldEhhc2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABp
bnN0YW5jZQBEaXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMuTXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0
SW5zdGFuY2UAQ296eVJvYy5TU0lTUGx1cy4yMDE0AENvenlSb2MuU3FsU2VydmVyLlNTSVMAU2Ny
aXB0QnVmZmVyUGx1cwBNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29mdC5TcWxT
ZXJ2ZXIuRHRzLlBpcGVsaW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLlBp
cGVsaW5lSG9zdABQaXBlbGluZUJ1ZmZlcgBPdXRwdXROYW1lTWFwAENvbXBvbmVudABPYmplY3RJ
RABJc0lucHV0AEJ1ZmZlcgBPdXRwdXRNYXAAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBzZXRfdGVs
ZXBob25lMQBWYWx1ZQBzZXRfdGVsZXBob25lMV9Jc051bGwAc2V0X25hbWUAc2V0X25hbWVfSXNO
dWxsAGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5w
dXRDb2x1bW5zAHRlbGVwaG9uZTEAdGVsZXBob25lMV9Jc051bGwAbmFtZQBuYW1lX0lzTnVsbABT
dGF0aWNPdXRwdXRDb2x1bW5zAFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0
SUQASW5wdXROYW1lAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93
AFBhcmVudENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1pY3Jv
c29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBJRFRTQ29ubmVjdGlvbk1hbmFnZXIx
MDAAZ2V0X0NybUNvbm5lY3Rpb24AQ3JtQ29ubmVjdGlvbgBGZXRjaFRlbXBsYXRlXzNQAEF0dHJU
ZW1wbGF0ZV8xUABDb25kVGVtbGF0ZV8yUABMaXN0RGVsaW1pdGVyAFByZUV4ZWN1dGUAUG9zdEV4
ZWN1dGUAVmFsaWRhdGUAZXJyTWVzc2FnZQBSZWluaXRpYWxpemVNZXRhRGF0YQBHZXRFbnRpdHlM
aXN0AEdldEF0dHJpYnV0ZUxpc3QAc2V0X0NybUNvbm5lY3Rpb24AdmFsdWUAZ2V0X0VudGl0eQBz
ZXRfRW50aXR5AGdldF9LZXlBdHRyaWJ1dGUAc2V0X0tleUF0dHJpYnV0ZQBnZXRfVmFsdWVBdHRy
aWJ1dGUAc2V0X1ZhbHVlQXR0cmlidXRlAGdldF9Vc2VDYWNoZQBzZXRfVXNlQ2FjaGUAZ2V0X0Ny
bUNvbm5lY3Rpb25UeXBlAEZpcmVFcnJvcl8AbWVzc2FnZQBJQ3JtQXR0cmlidXRlAEZpbmRBdHRy
aWJ1dGVfAGF0dHJMaXN0AEdldENhY2hlS2V5XwByb3cAR2V0TG9va3VwUm93XwBHZXRBdHRyaWJ1
dGVzXwBTZXR1cE91dHB1dENvbHVtbnNfAG1fY3JtQ29ubmVjdGlvbgBtX2VudGl0eQBtX2tleUF0
dHJpYnV0ZQBtX3ZhbHVlQXR0cmlidXRlAG1fdXNlQ2FjaGUASUNybUNvbm5lY3Rpb24AbV9jb25u
ZWN0aW9uAFN5c3RlbS5Db2xsZWN0aW9ucwBIYXNodGFibGUAbV9jYWNoZQBtX2ZldGNoVGVtcGxh
dGVfMVAAbV9rZXlJZHgAbV9jb25kVGVtcGxhdGVfUABtX3ZhbHVlSWR4AG1fYXR0cmlidXRlcwBt
X2F0dHJUb0lkeABEYXRhVHlwZQBtX3ZhbHVlVHlwZQBFbnRpdHkAS2V5QXR0cmlidXRlAFZhbHVl
QXR0cmlidXRlAFVzZUNhY2hlAENybUNvbm5lY3Rpb25UeXBlAFN5c3RlbS5Db21wb25lbnRNb2Rl
bABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNv
ZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MA
RGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2Vy
dmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lz
dGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVu
dGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRp
bWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBN
eUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50
aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBzZXRfSXRlbQBT
ZXROdWxsAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFu
dEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABn
ZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xs
ZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQASURUU1J1bnRpbWVDb25uZWN0aW9u
Q29sbGVjdGlvbjEwMABnZXRfUnVudGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElEVFNSdW50aW1l
Q29ubmVjdGlvbjEwMABnZXRfQ29ubmVjdGlvbk1hbmFnZXIAR3VpZABDb250YWlucwBnZXRfQnVm
ZmVyAENvbnZlcnQARGF0ZVRpbWUAVG9EYXRlVGltZQBGcm9tQmFzZTY0U3RyaW5nAElEVFNPdXRw
dXQxMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURUU0lucHV0Q29sdW1uMTAwAElE
VFNPdXRwdXRDb2x1bW4xMDAAQWNxdWlyZUNvbm5lY3Rpb24AQ29ubmVjdABJbnQzMgBJRFRTSW5w
dXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24AZ2V0X0NvdW50
AFBpcGVsaW5lQ29tcG9uZW50AGdldF9Ib3N0Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2VyMTAw
AGdldF9CdWZmZXJNYW5hZ2VyAGdldF9MaW5lYWdlSUQARmluZENvbHVtbkJ5TGluZWFnZUlEAElE
VFNFeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbjEwMABnZXRfRXh0ZXJuYWxNZXRhZGF0
YUNvbHVtbkNvbGxlY3Rpb24AZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5JRABHZXRPYmplY3RC
eUlEAGdldF9OYW1lAENvbmNhdABGb3JtYXQASURUU091dHB1dENvbGxlY3Rpb24xMDAAZ2V0X091
dHB1dENvbGxlY3Rpb24ASURUU091dHB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X091dHB1dENv
bHVtbkNvbGxlY3Rpb24ARW1wdHkAZ2V0X0RhdGFUeXBlAENsb3NlAEV4Y2VwdGlvbgBJc051bGxP
ckVtcHR5AEFwcGxpY2F0aW9uRXhjZXB0aW9uAFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABnZXRf
SXNBdHRhY2hlZABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABQcm9qZWN0RGF0YQBTZXRQcm9qZWN0
RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQcm9qZWN0RXJyb3IAc2V0X0lzVXNlZABSZW1vdmVBbGwA
TmV3AHNldF9OYW1lAGdldF9BdHRyaWJ1dGVUeXBlAHNldF9EYXRhVHlwZQBnZXRfTGVuZ3RoAHNl
dF9MZW5ndGgAZ2V0X1ByZWNpc2lvbgBzZXRfUHJlY2lzaW9uAGdldF9TY2FsZQBzZXRfU2NhbGUA
c2V0X0NvZGVQYWdlAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERUUwBNaWNyb3NvZnQuU3Fs
U2VydmVyLkR0cy5SdW50aW1lAGdldF9EZXNpZ25Db25uZWN0aW9ucwBDb25uZWN0aW9uTWFuYWdl
cgBBcnJheQBTb3J0AEFycmF5TGlzdABBZGQAVG9BcnJheQBPcGVyYXRvcnMAQ29tcGFyZVN0cmlu
ZwBGaXJlRXJyb3IAU3RyaW5nQ29tcGFyaXNvbgBJc051bGwAU3lzdGVtLlhtbABYbWxEb2N1bWVu
dABYbWxOb2RlTGlzdABTeXN0ZW0uV2ViLlNlcnZpY2VzAFN5c3RlbS5XZWIuU2VydmljZXMuUHJv
dG9jb2xzAFNvYXBFeGNlcHRpb24AWG1sRWxlbWVudABJRW51bWVyYXRvcgBTeXN0ZW0uU2VjdXJp
dHkAU2VjdXJpdHlFbGVtZW50AEVzY2FwZQBGZXRjaABMb2FkWG1sAFhtbE5vZGUAZ2V0X0RldGFp
bABnZXRfSW5uZXJYbWwAZ2V0X0RvY3VtZW50RWxlbWVudABnZXRfQ2hpbGROb2RlcwBnZXRfSXRl
bU9mAEdldEVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAQ29udmVyc2lvbnMAVG9JbnRlZ2VyAGdldF9J
bm5lclRleHQATW92ZU5leHQASURpc3Bvc2FibGUARGlzcG9zZQBHZXRFbnRpdHlBdHRyaWJ1dGVz
AFNldERhdGFUeXBlUHJvcGVydGllcwBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJp
YnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVz
QXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmlidXRl
AExpc3RBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUAQ29u
bmVjdGlvbkF0dHJpYnV0ZQBEZWZhdWx0VmFsdWVBdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0
aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBTeXN0ZW0uUnVudGlt
ZS5WZXJzaW9uaW5nAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfYThk
YjEyNGIxNmQwNGM0NDk1MmYzZTliNDYzM2U2MDUuZGxsAACAm0kAcwBOAHUAbABsACAAcAByAG8A
cABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUAIABzAGUAdAAgAHQAbwAgAEYAYQBsAHMAZQAu
ACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBlACAAdABvACAAdABoAGUAIABjAG8AbAB1AG0A
bgAgAGkAbgBzAHQAZQBhAGQALgAAFXQAZQBsAGUAcABoAG8AbgBlADEAAAluAGEAbQBlAAALSQBu
AHAAdQB0AAAbQwByAG0AQwBvAG4AbgBlAGMAdABpAG8AbgAAbzwAYwBvAG4AZABpAHQAaQBvAG4A
IABhAHQAdAByAGkAYgB1AHQAZQA9ACcAewAwAH0AJwAgAG8AcABlAHIAYQB0AG8AcgA9ACcAZQBx
ACcAIAB2AGEAbAB1AGUAPQAnAHsAMQB9ACcAIAAvAD4AAQN7AAADfQAAMTwAYQB0AHQAcgBpAGIA
dQB0AGUAIABuAGEAbQBlAD0AJwB7ADAAfQAnACAALwA+AAGA0zwAZgBlAHQAYwBoACAAbQBhAHAA
cABpAG4AZwA9ACcAbABvAGcAaQBjAGEAbAAnACAAYwBvAHUAbgB0AD0AJwAxACcAPgA8AGUAbgB0
AGkAdAB5ACAAbgBhAG0AZQA9ACcAewAwAH0AJwA+AHsAMQB9ADwAZgBpAGwAdABlAHIAIAB0AHkA
cABlAD0AJwBhAG4AZAAnAD4AewAyAH0APAAvAGYAaQBsAHQAZQByAD4APAAvAGUAbgB0AGkAdAB5
AD4APAAvAGYAZQB0AGMAaAA+AAEHewAwAH0AAD9TAGUAbABlAGMAdAAgAEQAeQBuAGEAbQBpAGMA
cwAgAEMAUgBNACAAYwBvAG4AbgBlAGMAdABpAG8AbgAuAAAdUwBlAGwAZQBjAHQAIABlAG4AdABp
AHQAeQAuAAAzUwBwAGUAYwBpAGYAeQAgAGsAZQB5ACAAYQB0AHQAcgBpAGIAdQB0AGUAKABzACkA
LgAAL1MAZQBsAGUAYwB0ACAAdgBhAGwAdQBlACAAYQB0AHQAcgBpAGIAdQB0AGUALgAABSwACgAA
JU0AYQBwACAAaQBuAHAAdQB0ACAAYwBvAGwAdQBtAG4AcwAuAAAVTgBvACAAaQBuAHAAdQB0AHMA
LgAAPUsAZQB5ACAAYQB0AHQAcgBpAGIAdQB0AGUAKABzACkAIABuAG8AdAAgAHMAZQBsAGUAYwB0
AGUAZAAuAAAZRABZAE4AQQBNAEkAQwBTAC0AQwBSAE0AASdEAHkAbgBhAG0AaQBjAHMAIABDAFIA
TQAgAEwAbwBvAGsAdQBwAAA1JwB7ADAAfQAnACAAYQB0AHQAcgBpAGIAdQB0AGUAIABuAG8AdAAg
AGYAbwB1AG4AZAAuAAEDXwAAANe8BQQ8iJpFinJnDn7VdXcACLd6XFYZNOCJCLA/X38R1Qo6AyAA
AQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEEAAASFAcGFRIYARIU
BAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEBHgAeAAcwAQEBEB4A
AhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyRCyAFARIhCAISJRIpBCAAHQ4E
IAEBDgQgAQECAyAAAgQoAB0OAygADgMoAAIDBhIkAwYSKAkgBAEIDhIlEikFIAEBEhwDBhIhBSAB
ARIhBCAAEjEEKAASMQIGDoDSPABmAGUAdABjAGgAIABtAGEAcABwAGkAbgBnAD0AJwBsAG8AZwBp
AGMAYQBsACcAIABjAG8AdQBuAHQAPQAnADEAJwA+ADwAZQBuAHQAaQB0AHkAIABuAGEAbQBlAD0A
JwB7ADAAfQAnAD4AewAxAH0APABmAGkAbAB0AGUAcgAgAHQAeQBwAGUAPQAnAGEAbgBkACcAPgB7
ADIAfQA8AC8AZgBpAGwAdABlAHIAPgA8AC8AZQBuAHQAaQB0AHkAPgA8AC8AZgBlAHQAYwBoAD4A
MDwAYQB0AHQAcgBpAGIAdQB0AGUAIABuAGEAbQBlAD0AJwB7ADAAfQAnACAALwA+AG48AGMAbwBu
AGQAaQB0AGkAbwBuACAAYQB0AHQAcgBpAGIAdQB0AGUAPQAnAHsAMAB9ACcAIABvAHAAZQByAGEA
dABvAHIAPQAnAGUAcQAnACAAdgBhAGwAdQBlAD0AJwB7ADEAfQAnACAALwA+AAQsAAoABSABAhAO
CCACEjUdEjUOBSABDhIcBiABHQ4SHAUgAB0SNQIGAgMGEjkDBhI9AwYdCAQGHRI1BAYdEUEFIAEB
EUkIAQABAAAAAAAFIAIBDg4YAQAKTXlUZW1wbGF0ZQgxMC4wLjAuMAAABAEAAAAGFRIYARIMBhUS
GAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQTAQAOTXkuQXBwbGljYXRpb24A
ABMBAA5NeS5XZWJTZXJ2aWNlcwAAEAEAC015LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAABAABHBwD
BwECAwcBCAYAARIVEWUEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVt
LldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVfX0lu
c3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEBEwAI
BwMTABMAEwAFAQAAAAAEBwEdDgUgAgEIHAQgAQEIBgcCHQ4dDgUgABKAhQUgABKAiQYgARKAjRwF
IAASgJEGIAESgJUcBAcBEjEEIAEcHAIdDgUgAgEcHAQgABIlBgABEYChDgUAAR0FDg8HCR0ODggI
DggIEUERgJkFIAASgLkGIAESgK0cBSAAEoC9BSAAEoDBBSACCAgIBSAAEoDFBiABEoCpCAYAAw4O
Dg4GAAMODhwcBQACDg4OBSAAEoDJBiABEoClHAUgABKAzQYgARKAsRwEIAARQQUAAg4OHAcABA4O
HBwcFwcLDggSgI0SgKUIEoCpEoCtCBKAsQgIBAABAg4JIAIdDh0OEYDZBgABARKA0REHBwICEoCN
HQ4SgKUSgNEdDgUgABKAqQUgAQERQRUHCR0SNRKAjR0OEjUSgKkOHQ4IHQ4FIAASgOEGIAESgOUc
BSABHQ4IBxABAQEdHgADCgEOCAcDEjkdDh0OBCABCBwHIAESgOkSFRAHBh0SNR0OEoDtEjUIHRI1
BgADCA4OAgUHARKAjQUHARKApQogBgEIDg4OCBACByACAg4RgPUMBwUSNRI1EjUIHRI1BCABAggE
IAEcCAkHBg4OCA4IHQgEAAEODgYAAg4OHRwEIAEODgUgABKBEQUgABKBBQUgABKA/QYgARKBEQgF
IAASgQkDIAAcBAABCBwhBxAIHRwSgPkOHQ4SgP0dDggOCBKBARKA0RwSgQUIEoEJBiABHRI1DgoH
Ax0SNR0SNRI5BSAAEoCxCSAFARFBCAgICBUHCR0SNRKApR0OEjUSgLEOHQ4IHQ4NAQAIVmFsaWRh
dGUAAAUgAQEdDkIBAAUAAAANQ3JtQ29ubmVjdGlvbgZFbnRpdHkMS2V5QXR0cmlidXRlDlZhbHVl
QXR0cmlidXRlCFVzZUNhY2hlAAAGIAMBDgICFwEAEEdldEF0dHJpYnV0ZUxpc3QBAAAAKAEAI1Nw
ZWNpZnkgb25lIG9yIG1vcmUga2V5IGF0dHJpYnV0ZXMuAAANAQAIU2V0dGluZ3MAACsBACZTcGVj
aWZ5IG9uZSBvciBtb3JlIGxvb2t1cCBhdHRyaWJ1dGVzLgAAFgEAEUNybUNvbm5lY3Rpb25UeXBl
AAAsAQAnU2VsZWN0IER5bmFtaWNzIENSTSBDb25uZWN0aW9uIE1hbmFnZXIuAAAFAQABAAApAQAk
U2VsZWN0IHdoZXRoZXIgbWVtb3J5IGNhY2hlIGlzIHVzZWQuAAASAQANR2V0RW50aXR5TGlzdAAA
GgEAFVNlbGVjdCBsb29rdXAgZW50aXR5LgAACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0
aW9uVGhyb3dzAUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3JrRGlz
cGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNPBfAAAAAAAAAAAAAA5gAAAAIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUA
IAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAAAAAA
AAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYgAAA7AIAAAAAAAAAAAAA7AI0
AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAAAAAA
AAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBm
AG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdAByAGkA
bgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYAaQBs
AGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkA
bwBuAAAAAAAwAC4AMAAuADAALgAwAAAAjAA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABT
AGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGEAOABkAGIAMQAyADQAYgAxADYAZAAwADQA
YwA0ADQAOQA1ADIAZgAzAGUAOQBiADQANgAzADMAZQA2ADAANQAuAGQAbABsAAAAAAAoAAIAAQBM
AGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAlAA1AAEATwByAGkAZwBpAG4AYQBsAEYA
aQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AYQA4AGQAYgAx
ADIANABiADEANgBkADAANABjADQANAA5ADUAMgBmADMAZQA5AGIANAA2ADMAMwBlADYAMAA1AC4A
ZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAu
ADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAwAC4A
MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAwAAAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_a8db124b16d04c44952f3e9b4633e605</property><property id="12" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="14" name="CrmConnection" connectionManagerID="{8100503D-F653-44C5-8EFD-392EC423F8E1}" /></connections><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True"></externalMetadataColumns></input></inputs><outputs><output id="18" name="Output" synchronousInputId="15"><outputColumns></outputColumns><externalMetadataColumns /></output></outputs></component>