<component id="2" name="Dynamics CRM Lookup" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="10" 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 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[ScriptComponent_b792924a89b64c848ebc45d92841bd4d.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>{0D6C5CD5-DB75-44D0-A579-9FF071A5A171}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</RootNamespace>
    <AssemblyName>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </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.2016, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\130\SDK\Assemblies\CozyRoc.SSISPlus.2016.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=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=13.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Web.Services" />
  </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_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC130</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>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</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:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{EB1881EB-F55C-4C92-BB12-17EB6E08242F}</msb:ProjectId>
		<msb:CodeName>ScriptComponent_b792924a89b64c848ebc45d92841bd4d</msb:CodeName>
		<msb:Language>msBuild</msb:Language>
		<msb:DisplayName>ScriptComponent_b792924a89b64c848ebc45d92841bd4d</msb:DisplayName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:Project Include="ScriptComponent_b792924a89b64c848ebc45d92841bd4d.vbproj"/>
	</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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
GgAAABQAAAETMAUABwEAAAQAABECKFAAAAoCKCUAAApvJgAACm9RAAAKLQtykgIAcHNJAAAKegIo
DQAABihFAAAKLAtyqAIAcHNJAAAKegIoGAAABgoCKCUAAApvJgAAChaMOgAAAW8nAAAKCwdvMAAA
ChdvUgAACgdvKAAACm9TAAAKB28wAAAKb1QAAAoCKA0AAAYXjT8AAAElFnJKAgBwohZvRwAACgwW
DStmCAmaEwQCBhEEKBUAAAYTBQdvMAAACm9VAAAKJREFb1YAAApvVwAACiURBW9YAAAKb1kAAAol
EQVvWgAACm9bAAAKJREFb1wAAApvXQAACiURBW9eAAAKb18AAAoWb2AAAAoJF9YNCQiOaTKUKgAb
MAIAPgAAAAUAABECKGEAAAoCKAkAAAZvYgAAChRvYwAACnQLAAABDAhvIwAACggYb2QAAAoLBygB
AAAr3gcIb0QAAArcBwoGKgAAARAAAAIAIwAQMwAHAAAAABMwAgBMAAAABgAAEXNmAAAKCwIoGAAA
BgwWDSsXCAmaEwQHEQRvVgAACm9nAAAKJgkX1g0JCI5pMuMHb2gAAAoH0D8AAAEoaQAACm9qAAAK
dAEAABsKBioTMAEACQAAAAcAABECewUAAAQKBioiAgN9BQAABCoAABMwAQAJAAAABwAAEQJ7BgAA
BAoGKtICewYAAAQDFihrAAAKLCQCA30GAAAEAhR9EAAABAJ+PAAACigOAAAGAn48AAAKKBAAAAYq
AAATMAEACQAAAAcAABECewcAAAQKBioAAAATMAMAVwAAAAAAAAACewcAAAQDFihrAAAKLEcCewcA
AAQoRQAACi0zAiglAAAKbyYAAApvUQAAChYxIAIoJQAACm8mAAAKFow6AAABbycAAApvMAAACm9U
AAAKAgN9BwAABCoAEzABAAkAAAAHAAARAnsIAAAECgYqAAAAEzADAFcAAAAAAAAAAnsIAAAEAxYo
awAACixHAnsIAAAEKEUAAAotMwIoJQAACm84AAAKb2wAAAoWMSACKCUAAApvOAAAChaMOgAAAW85
AAAKbzoAAApvbQAACgIDfQgAAAQqABMwAQAJAAAACAAAEQJ7CQAABAoGKiICA30JAAAEKgAAEzAE
ABEAAAAJAAARF40/AAABJRZy5gIAcKIKBioAAAATMAcAHQAAAAgAABEWCgIoJQAAChZyAAMAcAN+
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
+AfJDiIApQY6CQoAyg/JAg4AkxAoBSYASQwoBQ4AfwsoBQoA2w/JAhIALQG7DCIA9wWjDCIAzQU6
CSIAIgY6CSoApgX7DSoAMg2rDQYA8waYDSoATwZEDioAZwbAAyoAEA37DSoACwfAAwYAoQXbCQYA
OwYlDioAdgEQCSIA4gXiCQYA9APbCQYA6BDbCQYA/wTbCRYAAQDjDBYA5QDjDAYAoAHbCRYAhwDj
DCYAYxAoBRYARgHjDBYAXwDjDAYA7QjbCRYA/ADjDBYApADjDAYASQvbCQYAng/bCRYAwgDjDBYA
FAHjDCoAqwNEDi4Akg8IBS4AdQwIBQYADBLbCQYAuATbCSoAwA9EDgYAbAvbCQYARxASEhoALQSp
CQYAsQ9rDioAaQ9EDgYAogTbCQ4AWAwoBQYAgQ3bCQAAAADtAQAAAAABAAEAAQAAAP8JpgEQAAEA
AQABAAAAZQymAYUAEwAaAAEAAAB1EKYBlQATAB8AAQAAAJIPpgFZABUAIwABAAAAvw6mAVkAFgAl
AAAAAAA2CtYRqQAXACYAAAAAADAN1hGtABcAJwAAARAABBDWEVkAFwAoAAUBAADtDQAAWQAbAC0A
BQEAAIUBAABZABsANABWgKcC8wBWgIgC8wBWgJgC8wBWgBUN8wABACwL8wABADgS8wABACgI8wAB
ALsG8wABAHsEiQQBADwLjAQBAIYEkAQBAHUC8wABAM0RlAQBALgC8wABALYRlAQBAP8OmAQBAMER
kAQBAHwFnQQGAJIPogQGAL8OpgQBAIMQqgQBAIMQqgQxAAcMrwQxAN4LtwQxAPILvwQxACAMyAQh
AIYRzQJQIAAAAAAGGIsNBgABAFggAAAAAMYClBHQBAEAoCEAAAAAxgJnCAYAAgDKIwAAAADGAnII
BgACAOAjAAAAAAYAxAXWBAIAKCUAAAAAxgKAAwYAAwA8JgAAAAAGACUR3AQDAJgmAAAAAAYAARHc
BAMA8CYAAAAABggIC8kAAwAFJwAAAAAGCBoLEAADABAnAAAAAAYIIhLJAAQAJScAAAAABggtEhAA
BABcJwAAAAAGCAYIyQAFAHQnAAAAAAYIFwgQAAUA2CcAAAAABgh/BskABgDwJwAAAAAGCJIGEAAG
AFQoAAAAAAYIYQQpAQcAaSgAAAAABghuBBsABwB0KAAAAAABCIgF3AQIAJQoAAAAAAEANwMQAAgA
wCgAAAAAAQAoA+EECQAQKQAAAAABAHMD6gQLAIApAAAAAAEAZQPwBAwAOCsAAAAAAQBCA/cEDQCk
KwAAAAABAFEDBgANAEIsAAAAAAYYiw13Ag0AUSwAAAAAxgo6D9wEEgBRLAAAAADGClEP3AQSAFws
AAAAAIYAqhEpARIAdCwAAAAAhgAWECkBEgCJLAAAAAAGGIsNBgASAKksAAAAAMYCYhH9BBIA2SwA
AAAARgNcEdAEFgDsLAAAAABGA5QR0AQXAO4sAAAAAAYYiw0JBRgA/SwAAAAABggIC4YCGQAeLQAA
AAAGGIsNCQUZAC0tAAAAAAYYiw0GABoANS0AAAAABhiLDQYAGgA9LQAAAAATCCMNEAUaAEktAAAA
ABMIJgoVBRoAVS0AAAAAEwgMDRoFGgBhLQAAAAATCN0NIAUaAG0tAAAAABEYkQ1AARoAly0AAAAA
xgIMD0gAGgClLQAAAADGAiEEoQAbAK0tAAAAAIMAngUlBRsAuS0AAAAAxgLrCMkAGwDELQAAAAAR
ABUDKwUbAOQtAAAAAAEAAQMzBRwA7S0AAAAABhiLDQYAHQD4LQAAAAADCAgEkwIdACwuAAAAAAYY
iw0GAB0AAAABAK4RAAABAE4EAAABAKEIAAABAKEIAAABAKEIAAABAKEIAAABAKEIAAABAFkEAAAB
ABIRAAACAPgEAAABALIRAAABALIRAAABAKsQAAACAFYCAAADAFQRAAAEAGoMAAAFAI0LAAABAF8C
AAACAO4EAAADAGoMAAAEAI0LAAABAGoMAAABAK4RAAABAKsQAAABAKsQAAABAH0LAAABABgEAAAB
ABgECQCLDQEAEQCLDQYAGQCLDQoAKQCLDRAAMQCLDQYAOQCLDRUAQQCLDRAASQCLDQYAUQCLDRsA
4QCLDRAA6QCLDRAA8QCLDRAA+QCLDRAA+QCLDSAAAQGLDRsAOQGLDScASQGLDS0AYQGLDQYAaQGL
DQYAcQGLDQYAgQGLDTQAkQGLDRsAoQGLDRAAYQAxD0gAYQDJCU0AYQDSCVUACQE+DFsAGQGhCQEA
qQGLDRAAGQHSCWEAsQH9BGcAsQHMCG4AEQFnCAYAMQHnCk0AWQAOEAYAYQCLDQYAEQGVA4kAwQG+
Co8AyQHJCZUAeQBpCpsA2QHBEKEA2QHJCaUAKQGjEKsA4QGHDLEAeQA+DKEAiQD9AaEA6QELArcA
eQBECr0AiQAhAqEA8QFnAsMAkQDcBMkA0QHrCMkA+QHvD80A+QH2D9QA+QHvD9sAwQHSCuEAAQLJ
CecAgQCDCu0ACQLBEKEA+QFJEvMACQLJCfYAmQDcBMkAmQD9AaEAmQBQBfwA+QH2DwEB+QH2DwcB
EQFyCAYAWQC2BQYA+QFBEhoBEQKLDRAA+QEiEB8BeQDaAykBoQCLDRAAwQGeCi0BIQLJCTMBKQI+
AhAAMQJXDToBoQBCBMkAMQJFDUABKQGAAwYAyQHBEKEA8QHpAxsA2QFbCQYA8QFbCQYA8QGQEVIB
aQDcBMkAkQDlBBAAaQBqBaEAkQBdBVcBaQD6CKEAkQAFCQEAaQAKCqEAkQAYCgEAaQCOBKEAkQCY
BAEAkQA1BAEAKQGID2YBOQLJCWwBQQLnCk0AWQAlEXMBSQLwEHkBqQCLDQYAqQDWA5IBqQDwEAYA
iQHKBJcBqQAKEqABWQLdCK0BAQLBEKEACQJbCQYAwQE7Db0B+QEMD9UBGQGaCecBGQHJCewBsQDr
CMkAaQJJBQ0C+QH2DxICuQCLDQYAWQD0CBkCuQC0CRAAyQBQCR4CcQK8CckAuQAzECQCcQKaDikC
wQDBEKEAwQCnCC4CwQBzDTUC0QC1EDoC2QDcBMkAeQKSCD4CgQKZDEMC2QB4EckA0QBvESkBiQK8
BQYAWQDrDlMCCQKQEWgCmQDlBBAAmQCpDm0CCQGLDXcCkQKqESkBkQIWECkBKQGLDQYAeQD2AaEA
sQCLDQYAKQJxDIYCUQGLDQYAWQGLDQYAFAAIBJMCHAAIBJMCJAAIBJMCLAAIBJMCFACLDQYAHACL
DQYAJACLDQYALACLDQYAsQAMD0gAsQAhBKEAmQL5A7YCPACGEc0CRAB+CJMCRACICOYCRACLDQYA
DgAEABADDgAIAOQDDgAMABUEDgAQAIQEKQBTAMEGKQBbAM8GKQBjAPwGLgALAGgFLgATAHEFLgAb
AJAFLgAjAJkFQwArAOcFQwAzAPUFQwA7ADgGQwBDAOcFQwBLAOEFSQBTAMEGSQBbABMHSQBrAC4H
YwBLAOEFaQBTAMEGaQBbAEEHaQBzAGoHgwBLAOEFiQBTAMEGiQBbAIIHiQBzAGoHqQBTAMEGqQBb
AK4HqQB7ANgH4wCDAEYG4wCLAOwFAwGDAEYGAwGLAOwFIwGbAOcFIwGjAOcFIwGDAEYGQwGLAOwF
QwGrAF8GSQG7AN4HYwGLAOwFYwGzAOEFaQG7AO8HiQG7AAMIqQG7ABAIYARLAOEFoARLAOEF4AST
AOcF4ASLAOwFAAWTAOcFIAWTAOcFQAWTAOcFYAWTAOcFoAWLAOwFoAWTAOcFwAWLAOwFwAWTAOcF
4AWLAOwF4AWTAOcFAAaLAOwFAAaTAOcFIAaTAOcFQAaTAOcFYAaTAOcFYAaLAOwFgAaTAOcFoAaT
AOcFoAaLAOwFPAB0AA8BRAFdAYUBqQG0AbgByAHdAfEBSAJaAq4CwQICAAEAAwAHAAUACQAJAAoA
CwAOAAAAHgs7BQAAMRI7BQAAGwg7BQAArAY7BQAAcgQ/BQAAjAVDBQAAPg9DBQAAVQ9DBQAAHgtI
BQAAMg1OBQAAOApTBQAAEA1YBQAA7w1eBQAADARjBQIACQADAAEACgADAAIACwAFAAEADAAFAAIA
DQAHAAEADgAHAAIADwAJAAEAEAAJAAIAEQALAAEAEgALAAIAEwANAAIAGwAPAAIAHAARAAIAJAAT
AAIAKAAVAAIAKQAXAAIAKgAZAAIAKwAbAAIANAAdAFIAjAKYAp8CpwKzAsYC1gLeAgSAAAAAAAAA
AAAAAAAAAAAAAKYBAAAEAAAAAAAAAAAAAADsArcDAAAAAAEAAAAAAAAAAAAAAPUC1wEAAAAADQAA
AAAAAAAAAAAA/gLLEAAAAAANAAAAAAAAAAAAAAD+ApcLAAAAAA0AAAAAAAAAAAAAAP4CugsAAAAA
BAAAAAAAAAAAAAAA7AKpCQAAAAAEAAAAAAAAAAAAAAAHA8kNAAAAAAQAAAAAAAAAAAAAAOwC2wkA
AAAADQAAAAAAAAAAAAAA/gIzEQAAAAAKAAAAAAAAAAAAAAAHA8ADAAAAAA0AAAAAAAAAAAAAAP4C
4AIAAAAACgAJAAsACQAAABAAFgD/AgAAEABjAP8CAAAAAGUA/wLLAIEBOwG8AjsB4QIAAABJRFRT
Q29tcG9uZW50TWV0YURhdGExMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURUU0lu
cHV0Q29sdW1uMTAwAElEVFNPdXRwdXRDb2x1bW4xMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1
bW5Db2xsZWN0aW9uMTAwAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU091dHB1dENv
bHVtbkNvbGxlY3Rpb24xMDAASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABJRFRT
SW5wdXRDb2xsZWN0aW9uMTAwAElEVFNPdXRwdXRDb2xsZWN0aW9uMTAwAElEVFNSdW50aW1lQ29u
bmVjdGlvbjEwMABJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAASURUU0J1ZmZlck1hbmFnZXIxMDAA
SURUU0lucHV0MTAwAElEVFNPdXRwdXQxMDAAQ29udGV4dFZhbHVlYDEAVGhyZWFkU2FmZU9iamVj
dFByb3ZpZGVyYDEASW50MzIAU2NyaXB0Q29tcG9uZW50X2E4ZGIxMjRiMTZkMDRjNDQ5NTJmM2U5
YjQ2MzNlNjA1AENvenlSb2MuU1NJU1BsdXMuMjAxNgA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xpbmVh
Z2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5JRABz
ZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABPYmplY3RJRABJbnB1dElEAEdldE9iamVjdEJ5SUQAbV9m
ZXRjaFRlbXBsYXRlXzFQAEF0dHJUZW1wbGF0ZV8xUABDb25kVGVtbGF0ZV8yUABGZXRjaFRlbXBs
YXRlXzNQAG1fY29uZFRlbXBsYXRlX1AAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBNaWNyb3NvZnQu
U3FsU2VydmVyLk1hbmFnZWREVFMAVABEaXNwb3NlX19JbnN0YW5jZV9fAENyZWF0ZV9fSW5zdGFu
Y2VfXwBGaW5kQXR0cmlidXRlXwBGaXJlRXJyb3JfAEdldEF0dHJpYnV0ZXNfAFNldHVwT3V0cHV0
Q29sdW1uc18AR2V0TG9va3VwUm93XwBHZXRDYWNoZUtleV8AUmVpbml0aWFsaXplTWV0YURhdGEA
Z2V0X0NvbXBvbmVudE1ldGFEYXRhAFByb2plY3REYXRhAG1zY29ybGliAE1pY3Jvc29mdC5WaXN1
YWxCYXNpYwBBZGQAZ2V0X0lzQXR0YWNoZWQAc2V0X0lzVXNlZABHdWlkAENyZWF0ZUluc3RhbmNl
AGdldF9HZXRJbnN0YW5jZQBpbnN0YW5jZQBHZXRIYXNoQ29kZQBYbWxOb2RlAHNldF9Db2RlUGFn
ZQBnZXRfTWVzc2FnZQBlcnJNZXNzYWdlAG1lc3NhZ2UAZ2V0X1VzZUNhY2hlAHNldF9Vc2VDYWNo
ZQBtX3VzZUNhY2hlAG1fY2FjaGUAZ2V0X1NjYWxlAHNldF9TY2FsZQBJRGlzcG9zYWJsZQBIYXNo
dGFibGUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAZ2V0X05hbWUAc2V0X05h
bWUASW5wdXROYW1lAG5hbWUAVG9EYXRlVGltZQBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50
aW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lAEVzY2FwZQBnZXRfRGF0YVR5cGUA
c2V0X0RhdGFUeXBlAGdldF9BdHRyaWJ1dGVUeXBlAG1fdmFsdWVUeXBlAGdldF9Dcm1Db25uZWN0
aW9uVHlwZQBHZXRUeXBlAEFwcGxpY2F0aW9uQmFzZQBDbG9zZQBEaXNwb3NlAFZhbGlkYXRlAEVk
aXRvckJyb3dzYWJsZVN0YXRlAEhlbHBLZXl3b3JkQXR0cmlidXRlAEdlbmVyYXRlZENvZGVBdHRy
aWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUAQ29tVmlz
aWJsZUF0dHJpYnV0ZQBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJp
YnV0ZQBnZXRfVmFsdWVBdHRyaWJ1dGUAc2V0X1ZhbHVlQXR0cmlidXRlAERlZmF1bHRWYWx1ZUF0
dHJpYnV0ZQBtX3ZhbHVlQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBJQ3JtQXR0
cmlidXRlAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRl
AENvbm5lY3Rpb25BdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAVmFsaWRhdGVQcm9wZXJ0
aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmli
dXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQ0xTQ29tcGxpYW50QXR0cmlidXRl
AFNTSVNTY3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAExpc3RBdHRyaWJ1dGUAZ2V0
X0tleUF0dHJpYnV0ZQBzZXRfS2V5QXR0cmlidXRlAG1fa2V5QXR0cmlidXRlAENhdGVnb3J5QXR0
cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFByZUV4ZWN1dGUAUG9zdEV4ZWN1
dGUAZ2V0X1ZhbHVlAHNldF9WYWx1ZQBHZXRPYmplY3RWYWx1ZQB2YWx1ZQBnZXRfSXRlbU9mAFN5
c3RlbS5SdW50aW1lLlZlcnNpb25pbmcARnJvbUJhc2U2NFN0cmluZwBDb21wYXJlU3RyaW5nAFRv
U3RyaW5nAEZldGNoAGdldF9MZW5ndGgAc2V0X0xlbmd0aABNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
TXlTZXJ2aWNlcy5JbnRlcm5hbABTeXN0ZW0uQ29tcG9uZW50TW9kZWwAZ2V0X0RldGFpbABSZW1v
dmVBbGwAU2NyaXB0Q29tcG9uZW50X2E4ZGIxMjRiMTZkMDRjNDQ5NTJmM2U5YjQ2MzNlNjA1LmRs
bABJc051bGwAU2V0TnVsbABTeXN0ZW0uWG1sAExvYWRYbWwAZ2V0X0lubmVyWG1sAGdldF9JdGVt
AHNldF9JdGVtAFN5c3RlbQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAFNjcmlwdE1haW4A
Z2V0X1ByZWNpc2lvbgBzZXRfUHJlY2lzaW9uAGdldF9BcHBsaWNhdGlvbgBNeUFwcGxpY2F0aW9u
AGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfSW5wdXRDb2x1bW5Db2xs
ZWN0aW9uAGdldF9PdXRwdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9SdW50aW1lQ29ubmVjdGlvbkNv
bGxlY3Rpb24AZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfT3V0cHV0Q29sbGVjdGlvbgBBY3F1aXJl
Q29ubmVjdGlvbgBJQ3JtQ29ubmVjdGlvbgBnZXRfQ3JtQ29ubmVjdGlvbgBzZXRfQ3JtQ29ubmVj
dGlvbgBtX2NybUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAEFwcGxpY2F0aW9uRXhjZXB0aW9uAFNv
YXBFeGNlcHRpb24AU3RyaW5nQ29tcGFyaXNvbgBvAE91dHB1dE5hbWVNYXAAT3V0cHV0TWFwAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQ
aXBlbGluZVdyYXAAbV9BcHBPYmplY3RQcm92aWRlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBtX0Nv
bXB1dGVyT2JqZWN0UHJvdmlkZXIAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAZ2V0X0J1
ZmZlcgBQaXBlbGluZUJ1ZmZlcgBTY3JpcHRCdWZmZXIASW5wdXRCdWZmZXIAZ2V0X0Nvbm5lY3Rp
b25NYW5hZ2VyAGdldF9CdWZmZXJNYW5hZ2VyAFRvSW50ZWdlcgBTeXN0ZW0uQ29kZURvbS5Db21w
aWxlcgBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIATWljcm9zb2Z0LlNx
bFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBnZXRfVXNlcgBMaXN0RGVsaW1pdGVyAGdldF9D
b21wdXRlcgBNeUNvbXB1dGVyAEZpcmVFcnJvcgBDbGVhclByb2plY3RFcnJvcgBTZXRQcm9qZWN0
RXJyb3IASUVudW1lcmF0b3IAR2V0RW51bWVyYXRvcgBBY3RpdmF0b3IALmN0b3IALmNjdG9yAFN5
c3RlbS5EaWFnbm9zdGljcwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBTeXN0ZW0uV2Vi
LlNlcnZpY2VzAGdldF9XZWJTZXJ2aWNlcwBNeVdlYlNlcnZpY2VzAE1pY3Jvc29mdC5WaXN1YWxC
YXNpYy5BcHBsaWNhdGlvblNlcnZpY2VzAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5Db21w
aWxlclNlcnZpY2VzAERlYnVnZ2luZ01vZGVzAGdldF9DaGlsZE5vZGVzAFNldERhdGFUeXBlUHJv
cGVydGllcwBWYXJpYWJsZXMAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAEdldEVu
dGl0eUF0dHJpYnV0ZXMAbV9hdHRyaWJ1dGVzAEVxdWFscwBTeXN0ZW0uV2ViLlNlcnZpY2VzLlBy
b3RvY29scwBDb250YWlucwBnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRD
b2x1bW5zAENvbnZlcnNpb25zAFN5c3RlbS5Db2xsZWN0aW9ucwBnZXRfRGVzaWduQ29ubmVjdGlv
bnMAU3RyaW5nU3BsaXRPcHRpb25zAFJ1bnRpbWVIZWxwZXJzAE9wZXJhdG9ycwBTY3JpcHRCdWZm
ZXJQbHVzAFNjcmlwdENvbXBvbmVudFBsdXMAQ29uY2F0AEZvcm1hdABPYmplY3QATXlQcm9qZWN0
AENvbm5lY3QARW5kT2ZSb3dzZXQAU3BsaXQAWG1sRWxlbWVudABnZXRfRG9jdW1lbnRFbGVtZW50
AFNlY3VyaXR5RWxlbWVudABYbWxEb2N1bWVudABQaXBlbGluZUNvbXBvbmVudABVc2VyQ29tcG9u
ZW50AFBhcmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQAZ2V0
X0N1cnJlbnQAZ2V0X0NvdW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQAQ29udmVydABT
b3J0AFhtbE5vZGVMaXN0AEdldEF0dHJpYnV0ZUxpc3QAYXR0ckxpc3QAQXJyYXlMaXN0AEdldEVu
dGl0eUxpc3QATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QASXNJbnB1dABJbnB1dF9Q
cm9jZXNzSW5wdXQATW92ZU5leHQAZ2V0X0lubmVyVGV4dABtX0NvbnRleHQATmV3AElucHV0X1By
b2Nlc3NJbnB1dFJvdwBOZXh0Um93AHJvdwBtX3ZhbHVlSWR4AG1fYXR0clRvSWR4AG1fa2V5SWR4
AFNjcmlwdENvbXBvbmVudF9hOGRiMTI0YjE2ZDA0YzQ0OTUyZjNlOWI0NjMzZTYwNS5NeQBUb0Fy
cmF5AFN5c3RlbS5TZWN1cml0eQBnZXRfRW50aXR5AHNldF9FbnRpdHkAbV9lbnRpdHkASXNOdWxs
T3JFbXB0eQAAAG88AGMAbwBuAGQAaQB0AGkAbwBuACAAYQB0AHQAcgBpAGIAdQB0AGUAPQAnAHsA
MAB9ACcAIABvAHAAZQByAGEAdABvAHIAPQAnAGUAcQAnACAAdgBhAGwAdQBlAD0AJwB7ADEAfQAn
ACAALwA+AAEDewAAA30AADE8AGEAdAB0AHIAaQBiAHUAdABlACAAbgBhAG0AZQA9ACcAewAwAH0A
JwAgAC8APgABgNM8AGYAZQB0AGMAaAAgAG0AYQBwAHAAaQBuAGcAPQAnAGwAbwBnAGkAYwBhAGwA
JwAgAGMAbwB1AG4AdAA9ACcAMQAnAD4APABlAG4AdABpAHQAeQAgAG4AYQBtAGUAPQAnAHsAMAB9
ACcAPgB7ADEAfQA8AGYAaQBsAHQAZQByACAAdAB5AHAAZQA9ACcAYQBuAGQAJwA+AHsAMgB9ADwA
LwBmAGkAbAB0AGUAcgA+ADwALwBlAG4AdABpAHQAeQA+ADwALwBmAGUAdABjAGgAPgABB3sAMAB9
AAA/UwBlAGwAZQBjAHQAIABEAHkAbgBhAG0AaQBjAHMAIABDAFIATQAgAGMAbwBuAG4AZQBjAHQA
aQBvAG4ALgAAHVMAZQBsAGUAYwB0ACAAZQBuAHQAaQB0AHkALgAAM1MAcABlAGMAaQBmAHkAIABr
AGUAeQAgAGEAdAB0AHIAaQBiAHUAdABlACgAcwApAC4AAC9TAGUAbABlAGMAdAAgAHYAYQBsAHUA
ZQAgAGEAdAB0AHIAaQBiAHUAdABlAC4AAAUsAAoAACVNAGEAcAAgAGkAbgBwAHUAdAAgAGMAbwBs
AHUAbQBuAHMALgAAG0MAcgBtAEMAbwBuAG4AZQBjAHQAaQBvAG4AABVOAG8AIABpAG4AcAB1AHQA
cwAuAAA9SwBlAHkAIABhAHQAdAByAGkAYgB1AHQAZQAoAHMAKQAgAG4AbwB0ACAAcwBlAGwAZQBj
AHQAZQBkAC4AABlEAFkATgBBAE0ASQBDAFMALQBDAFIATQABJ0QAeQBuAGEAbQBpAGMAcwAgAEMA
UgBNACAATABvAG8AawB1AHAAADUnAHsAMAB9ACcAIABhAHQAdAByAGkAYgB1AHQAZQAgAG4AbwB0
ACAAZgBvAHUAbgBkAC4AAQNfAAALSQBuAHAAdQB0AAAAAMoaPC0hgQxNibYhZvUMbQsABCABAQgD
IAABBSABARERBCABAQ4FIAEBHQ4EIAEBAgYgAwEOAgIFIAIBDg4GIAEBEYChByAEAQ4ODg4LBwcd
Dg4ICA4IETkEIAECHAQgARwcAh0OBSACARwcBSAAEoCNBSACAQgcBgABEYDdDgUAAR0FDhQHDBI9
CBJBDggIEkUSSRAOCAgSTQUgABKA4QUgABKA5QUgARI9HAUgABKA7QMgAAgFIAESRRwFIAASgPEF
IAASgPUFIAIICAgFIAASgPkFIAESSQgDIAAOBgADDg4ODgYAAw4OHBwFAAIODg4FIAASgQEFIAES
QRwFIAASgQUCBg4FIAESTRwEIAAROQUAAg4OHAcABA4OHBwcCgcFAgIdDhI9ElEEAAECDgkgAh0O
HQ4RgQ0DIAACBSAAEoERBiABEoEVHAUAAQESUQMAAAENBwYdEjUSPR0OCA4SNQQgABJJBSABARE5
CAcDHQ4dDhItBSAAEoEdBiABEoEhHAUgAR0OCAcQAQEBHR4AAwoBDgwHBR0OElUdEjUIEjUEIAEI
HAgAARKAxRGBKQggARKBJRKAxQMHAQ4GAAMIDg4CAwcBAgQHAR0OCiAGAQgODg4IEAIMBwUSNRI1
HRI1CBI1ByACAg4RgTEJBwYODh0ICAgOBCABAggEIAEcCBsHEB0OHQ4IHRwOEl0SYQgICA4SZRJR
EmkSbRwEAAEODgYAAg4OHRwEIAEODgUgABKBOQQgABJtBCAAEmEGIAESgTkIBCAAEmkDIAAcBAAB
HBwEAAEIHAoHAx0SNR0SNRItBiABHRI1Dg0HBh0SNRJBHQ4IDhI1BCAAEk0JIAUBETkICAgIDiAF
ARKAiQgCEoCNEoCRBSAAEoCZBhUSLAESIAQgABMABhUSLAESHAcVEiwBEoC9BhUSLAESKAQHAR4A
Ah4ABRABAB4ABAoBHgAEBwETAAYVEiwBEwAIBhUSgM0BEwAHFRKAzQETAAITAAQKARMABSABARMA
CLd6XFYZNOCJCBbPSQu4DDTqCImEXc2AgMyRCLA/X38R1Qo6gNI8AGYAZQB0AGMAaAAgAG0AYQBw
AHAAaQBuAGcAPQAnAGwAbwBnAGkAYwBhAGwAJwAgAGMAbwB1AG4AdAA9ACcAMQAnAD4APABlAG4A
dABpAHQAeQAgAG4AYQBtAGUAPQAnAHsAMAB9ACcAPgB7ADEAfQA8AGYAaQBsAHQAZQByACAAdAB5
AHAAZQA9ACcAYQBuAGQAJwA+AHsAMgB9ADwALwBmAGkAbAB0AGUAcgA+ADwALwBlAG4AdABpAHQA
eQA+ADwALwBmAGUAdABjAGgAPgAwPABhAHQAdAByAGkAYgB1AHQAZQAgAG4AYQBtAGUAPQAnAHsA
MAB9ACcAIAAvAD4AbjwAYwBvAG4AZABpAHQAaQBvAG4AIABhAHQAdAByAGkAYgB1AHQAZQA9ACcA
ewAwAH0AJwAgAG8AcABlAHIAYQB0AG8AcgA9ACcAZQBxACcAIAB2AGEAbAB1AGUAPQAnAHsAMQB9
ACcAIAAvAD4ABCwACgACBgIDBhItAwYSMQMGHQgEBh0SNQQGHRE5AwYSFAMGEhgEBhKAiQcGFRIs
ARIgBwYVEiwBEhwIBhUSLAESgL0HBhUSLAESKAUgAQESDAUgAQIQDgQgAB0OCCACEjUdEjUOBSAB
DhIMBiABHQ4SDAUgAB0SNQsgBAEIDhKAjRKAkQYgAQESgIkEAAASIAQAABIcBQAAEoC9BAAAEigF
IAASgMUHEAEBHgAeAAcwAQEBEB4AAygADgMoAAIEKAAdDgUoABKAmQQIABIgBAgAEhwFCAASgL0E
CAASKAQoABMACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAQgBAAIAAAAA
AEcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUQ
Lk5FVCBGcmFtZXdvcmsgNAUBAAAAAAQBAAAACAEAAQAAAAAAQgEABQAAAA1Dcm1Db25uZWN0aW9u
BkVudGl0eQxLZXlBdHRyaWJ1dGUOVmFsdWVBdHRyaWJ1dGUIVXNlQ2FjaGUAAA0BAAhWYWxpZGF0
ZQAAGAEACk15VGVtcGxhdGUIMTEuMC4wLjAAAGEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3Rv
Y29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19J
bnN0YW5jZV9fAAAADQEACFNldHRpbmdzAAAsAQAnU2VsZWN0IER5bmFtaWNzIENSTSBDb25uZWN0
aW9uIE1hbmFnZXIuAAAWAQARQ3JtQ29ubmVjdGlvblR5cGUAABoBABVTZWxlY3QgbG9va3VwIGVu
dGl0eS4AABIBAA1HZXRFbnRpdHlMaXN0AAAoAQAjU3BlY2lmeSBvbmUgb3IgbW9yZSBrZXkgYXR0
cmlidXRlcy4AABcBABBHZXRBdHRyaWJ1dGVMaXN0AQAAACsBACZTcGVjaWZ5IG9uZSBvciBtb3Jl
IGxvb2t1cCBhdHRyaWJ1dGVzLgAAKQEAJFNlbGVjdCB3aGV0aGVyIG1lbW9yeSBjYWNoZSBpcyB1
c2VkLgAABQEAAQAAEAEAC015LkNvbXB1dGVyAAATAQAOTXkuQXBwbGljYXRpb24AAAwBAAdNeS5V
c2VyAAATAQAOTXkuV2ViU2VydmljZXMAAHxbAAAAAAAAAAAAAJZbAAAAIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACIWwAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgABAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAigA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGEAOABkAGIAMQAyADQAYgAxADYAZAAw
ADQAYwA0ADQAOQA1ADIAZgAzAGUAOQBiADQANgAzADMAZQA2ADAANQAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAkgA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AYQA4AGQA
YgAxADIANABiADEANgBkADAANABjADQANAA5ADUAMgBmADMAZQA5AGIANAA2ADMAMwBlADYAMAA1
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAACoOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</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_b792924a89b64c848ebc45d92841bd4d</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="15" name="CrmConnection" connectionManagerID="{EB1EB761-DB8F-4F1C-96A3-1EF8BB8AE919}" /></connections><inputs><input id="16" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True"><externalMetadataColumn id="49" name="accountid" dataType="guid" /></externalMetadataColumns></input></inputs><outputs><output id="19" name="Output" synchronousInputId="16"><externalMetadataColumns /></output></outputs></component>