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

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

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

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

' Review the values of the assembly attributes

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

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("219aec5c-8954-407a-b049-1709baf10abf")> 

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

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_9ee5dd1f734f45a69a198485d819583e.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

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

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

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

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property 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[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-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.Data
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Reflection
Imports System.Diagnostics
Imports System.Web.Services.Protocols

Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports CRM2011 = CozyRoc.Dynamics.Crm2011.OrganizationService
Imports CRM4 = CozyRoc.Dynamics.Crm.Service


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            If Not m_service2011 Is Nothing Then
                ' CRM 2011
                Dim req As New CRM2011.OrganizationRequest
                req.RequestName = m_requestName

                ' Setup relationship parameters.
                Dim entity1 As New CRM2011.EntityReference
                entity1.LogicalName = CStr(Row.Buffer(m_fenIndex))
                entity1.Id = New Guid(Row.Buffer(m_feiIndex).ToString())
                Dim entity2 As New CRM2011.EntityReference
                entity2.LogicalName = CStr(Row.Buffer(m_senIndex))
                entity2.Id = New Guid(Row.Buffer(m_seiIndex).ToString())

                req("Target") = New CRM2011.EntityReference() {entity1, entity2}

                ' Execute action.
                Call m_service2011.Execute(req)
            Else
                ' CRM 4.0

                ' Setup relationship parameters.
                Dim target As New CRM4.TargetRelatedDynamic
                target.Entity1Name = CStr(Row.Buffer(m_fenIndex))
                target.Entity1Id = New Guid(Row.Buffer(m_feiIndex).ToString())
                target.Entity2Name = CStr(Row.Buffer(m_senIndex))
                target.Entity2Id = New Guid(Row.Buffer(m_seiIndex).ToString())

                ' Execute action.
                Select Case Me.Action
                    Case ActionTypes.SetRelated
                        Dim addReq As New CRM4.SetRelatedRequest()
                        addReq.Target = target
                        Call m_service4.Execute(addReq)

                    Case ActionTypes.RemoveRelated
                        Dim removeReq As New CRM4.RemoveRelatedRequest()
                        removeReq.Target = target
                        Call m_service4.Execute(removeReq)

                    Case Else
                        Throw New ApplicationException("Unhandled action type.")
                End Select
            End If
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


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

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

        Dim service As Object = m_connection.GetService(0)
        m_service2011 = TryCast(service, CRM2011.OrganizationServiceClient)
        If m_service2011 Is Nothing Then
            m_service4 = TryCast(m_connection.GetService(0), CRM4.CrmService)   ' 0 - CRM Service
            If m_service4 Is Nothing Then
                Throw New Exception("Unhandled service object.")
            End If
        End If

        ' Setup request name for CRM 2011.
        Select Case Me.Action
            Case ActionTypes.SetRelated
                m_requestName = "SetRelated"

            Case ActionTypes.RemoveRelated
                m_requestName = "RemoveRelated"

            Case Else
                Throw New ApplicationException("Unhandled action type.")
        End Select

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

        ' Get input column indexes.
        inputCol = GetInputColumn_("FirstEntityName")
        m_fenIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            inputCol.LineageID)

        inputCol = GetInputColumn_("FirstEntityId")
        m_feiIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            inputCol.LineageID)

        inputCol = GetInputColumn_("SecondEntityName")
        m_senIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            inputCol.LineageID)

        inputCol = GetInputColumn_("SecondEntityId")
        m_seiIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            inputCol.LineageID)
    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

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso _
                (input.InputColumnCollection.Count = 0 OrElse _
                input.InputColumnCollection.Count < 4) Then
                Throw New Exception("Map input columns.")
            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

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

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

        Dim column As IDTSExternalMetadataColumn100

        ' Setup first entity.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "FirstEntityName"
        column.DataType = DataType.DT_WSTR
        column.Length = 100

        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "FirstEntityId"
        column.DataType = DataType.DT_GUID

        ' Setup second entity.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "SecondEntityName"
        column.DataType = DataType.DT_WSTR
        column.Length = 100

        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "SecondEntityId"
        column.DataType = DataType.DT_GUID
    End Sub ' ReinitializeMetaData


#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 action to perform.")> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            m_action = value
        End Set
    End Property    ' Action
#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 Relationships", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetInputColumn_(ByVal externalName As String) As IDTSInputColumn100
        Dim result As IDTSInputColumn100 = Nothing
        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim extColumn As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection(externalName)

        ' Find input column for specified external column.
        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            If inputCol.ExternalMetadataColumnID = extColumn.ID Then
                ' Found input column.
                result = inputCol
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception("Input column not found.")
        End If

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


#Region "Attributes"
    Enum ActionTypes
        SetRelated
        RemoveRelated
    End Enum    ' ActionTypes

    Private m_crmConnection As String
    Private m_action As ActionTypes

    Private m_connection As ICrmConnection
    Private m_service2011 As CRM2011.OrganizationServiceClient
    Private m_service4 As CRM4.CrmService
    Private m_requestName As String
    Private m_fenIndex As Integer
    Private m_feiIndex As Integer
    Private m_senIndex As Integer
    Private m_seiIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="30" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_9ee5dd1f734f45a69a198485d819583e.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAAFc2k8AAAAAAAAAAOAAAiELAQgAADYAAAAMAAAAAAAA7lQA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAJRUAABXAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA9DQAAAAgAAAANgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAAA4AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAQgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADQ
VAAAAAAAAEgAAAACAAUAZCsAADApAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0gAAABKgAT
MAEABwAAAA0AABEWjSAAAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMcAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqABMwAgAgAAAAEAAAEQJ7CAAABG8jAAAKbycAAApyDQAAcG8oAAAKbykA
AAoqOgIoFwAACgIDfQkAAAQqAB4CKBYAAAYqGzAFAAICAAARAAARAnsNAAAEOdEAAABzKgAACgwI
AnsPAAAEbysAAApzLAAACgoGA28tAAAKAnsQAAAEby4AAAooLwAACm8wAAAKBhIIA28tAAAKAnsR
AAAEby4AAApvFQAACigxAAAKEQhvMgAACnMsAAAKCwcDby0AAAoCexIAAARvLgAACigvAAAKbzAA
AAoHEggDby0AAAoCexMAAARvLgAACm8VAAAKKDEAAAoRCG8yAAAKCHIpAABwGI0oAAABEwkRCRYG
ohEJFweiEQlvMwAACgJ7DQAABAhvNAAACibdJQEAAHM1AAAKDQkDby0AAAoCexAAAARvLgAACigv
AAAKbzYAAAoJEggDby0AAAoCexEAAARvLgAACm8VAAAKKDEAAAoRCG83AAAKCQNvLQAACgJ7EgAA
BG8uAAAKKC8AAApvOAAACgkSCANvLQAACgJ7EwAABG8uAAAKbxUAAAooMQAAChEIbzkAAAoCbyUA
AAZFAgAAAAIAAAAhAAAAKz5zOgAAChMEEQQJbzsAAAoCew4AAAQRBG88AAAKJisqcz0AAAoTBREF
CW8+AAAKAnsOAAAEEQVvPAAACiYrC3I3AABwcz8AAAp63j0lKEAAAAoTBgIRBm9BAAAKb0IAAApv
KAAABihDAAAK3hwlKEAAAAoTBwIRB29EAAAKbygAAAYoQwAACt4AKgAAQTAAAAAAAAAAAAAAxAEA
AMQBAAAhAAAALQAAAQAAAAAAAAAAxAEAAOUBAAAcAAAALgAAARMwBACHAQAAEgAAEQIoRQAACgIC
ewYAAARvGwAABhRvRgAACnQNAAABfQwAAAQCewwAAARvRwAACgJ7DAAABBZvSAAACigRAAAKDAII
dQ4AAAF9DQAABAJ7DQAABC0qAgJ7DAAABBZvSAAACnUPAAABfQ4AAAQCew4AAAQtC3JlAABwc0kA
AAp6Am8lAAAGRQIAAAACAAAADwAAACsaAnKZAABwfQ8AAAQrGAJyrwAAcH0PAAAEKwtyNwAAcHM/
AAAKegIoIwAACm8kAAAKFow4AAABbyUAAAoKAnLLAABwbykAAAYLAgJvSgAACm9LAAAKBm9MAAAK
B29NAAAKb04AAAp9EAAABAJy6wAAcG8pAAAGCwICb0oAAApvSwAACgZvTAAACgdvTQAACm9OAAAK
fREAAAQCcgcBAHBvKQAABgsCAm9KAAAKb0sAAAoGb0wAAAoHb00AAApvTgAACn0SAAAEAnIpAQBw
bykAAAYLAgJvSgAACm9LAAAKBm9MAAAKB29NAAAKb04AAAp9EwAABCoASgIoTwAACgJ7DAAABG9Q
AAAKKgAbMAIAngAAABMAABECbyMAAAYoUQAACiwLckcBAHBzPwAACnoCbyMAAApvJAAAChaMOAAA
AW8lAAAKDAhvUgAACiwnCG9TAAAKb1QAAAoWLg4Ib1MAAApvVAAAChovC3KHAQBwc0kAAAp6Am8j
AAAKbycAAApyDQAAcG8oAAAKAm8jAAAGb1UAAAoXCt4YJShAAAAKDRYKAwlvRAAAClEoQwAACt4A
BgsHKgAAAQwAAAAAAACCggAYLgAAARMwAgDwAAAAFAAAEQIoVgAACgIoIwAACm8kAAAKb1cAAAoW
MwtyrQEAcHNJAAAKegIoIwAACm8kAAAKFow4AAABbyUAAAoLB29YAAAKF29ZAAAKB29TAAAKb1oA
AAoHb1gAAApvWwAACgdvWAAACm9cAAAKCgZyywAAcG9dAAAKBiCCAAAAb14AAAoGH2RvXwAACgdv
WAAACm9cAAAKCgZy6wAAcG9dAAAKBh9Ib14AAAoHb1gAAApvXAAACgoGcgcBAHBvXQAACgYgggAA
AG9eAAAKBh9kb18AAAoHb1gAAApvXAAACgoGcikBAHBvXQAACgYfSG9eAAAKKhMwAQAJAAAAFQAA
EQJ7CgAABAoGKgAAACICA30KAAAEKgAAABMwAQAJAAAAFgAAEQJ7CwAABAoGKgAAACICA30LAAAE
KgAAABMwAwATAAAAFwAAEReNIAAAAQsHFnLDAQBwogcKBioAEzAHAB0AAAAYAAARFgoCKCMAAAoW
ct0BAHADfmAAAAoWEgBvYQAACioAAAAbMAIAigAAABkAABEUDQIoIwAACm8kAAAKFow4AAABbyUA
AAoMCG9YAAAKA29iAAAKCghvUwAACm9jAAAKEwUrIhEFb2QAAAp0DAAAARMEEQRvZQAACgZvZgAA
CjMFEQQN3iERBW9nAAAKLdXeFhEFdUAAAAEsDBEFdUAAAAFvaAAACtwJLQtyEwIAcHNJAAAKegkL
ByoAAAEMAAACACYAPGIAFgAAAAEeAigXAAAKKhMwAgAtAAAAGgAAEX4XAAAELSByQwIAcNANAAAC
KBQAAApvcAAACnNxAAAKCweAFwAABH4XAAAEKgAAABMwAQAGAAAAGwAAEX4YAAAEKgAAHgKAGAAA
BCpCcxcAAAooEQAACoAaAAAEKgAAAB4CKHIAAAoqGzABAD8AAAAcAAARfhkAAAQtMn4aAAAEKBEA
AAoocwAACn4ZAAAELRxzLwAABoAZAAAE3hB+GgAABCgRAAAKKHQAAArcfhkAAAQqAAEMAAACAB0A
DCkAEAAAAAFCU0pCAQABAAAAAAAMAAAAdjIuMC41MDcyNwAAAAAFAGwAAAC8DQAAI34AACgOAADs
EgAAI1N0cmluZ3MAAAAAFCEAAHgCAAAjVVMAjCMAABAAAAAjR1VJRAAAAJwjAACUBQAAI0Jsb2IA
AAAAAAAAAgAAAVcdogkJDwAAAPoBMwAWAAABAAAAVAAAAA4AAAAaAAAAMAAAABQAAAB/AAAAAgAA
AEEAAAAcAAAABwAAAA4AAAARAAAACQAAAAEAAAALAAAAAQAAAAMAAAADAAAAAgAAAAAAsBIBAAAA
AAAKALUBiwEKAOkBywEGAPkB8gEKAFECiwEGAM8C8gEKAFEDJwMOAKMDjAMSAPID0QMWACME0QMO
AL4EjAMaAG8FRwUeAIwGYwYOANUGjAMiAC8HAgciAHQHVwcGAN0H8gEGABQIAwgGAEEILAgmAKgI
kwgmAPUI3wgmAA4J3wgmADsJIwkGAGUJUgkKAKQJfQkKALwJEwAmAPEJ1AkGACYKBgoGAEQK8gEG
AGgK8gEKAIEKEwAGAMUKpgoGANkK8gESAOAK0QMGAO0K8gEeAAMLYwYeADILYwYeAF0LYwYeAHoL
YwYeAL0LYwYiAOwLAgciAPwLAgciABAMVwciACUMVwciADcMVwcqAH4MYAwGAIwM8gEGAJYM8gEK
ALYMfQkiAOIMAgciADsNVwciAFQNVwciAF0NVwcGAGUN8gEKAHoNfQkuAKENlg0GAAQO8gEWAAoO
0QMeAC4OYwYeAJwOYwYeAPUOYwYeABMPYwYaAIIPRwUGAMYPsw8GABIQ8gESACYQ0QMOAG8QTRAO
AIsQTRAOAKMQTRAmALsQ3wgmANAQ3wgOAOIQTRAGAAgR9hAGAC8RHhEGAEIRUgkGAKsRBgoGAMsR
BgoGAOkR9hAGAAYSpgoGABQS9hAGAC8S9hAGAEoS9hAGAGMS9hAGAHwS9hAGAJkS9hAAAAAAAQAA
AAAAAQABAAAAAAApADcABQABAAEAAAAAAHIANwAJAAEAAgAAARAAfQA3AA0AAQADAAUBAACHAAAA
DQAFAAgABQEAAJUAAAANAAUADwABAAAAsAC8AB0ABgARAAEAAAD0ALwAKQAGABYAAQAAAAIBvAAN
AAgAGgABAAAADgG8AA0ACQAcAAEAAAAYAbwAIAAKAB0AAgEAACMBAABBABQAKgAAAAAALwE7AQ0A
FwAqAAABEACAAbwATQAZAC4AMQAUAiAAMQA9Ai0AMQBfAjoAMQCEAkcAIQBgA5AABgACAccABgAO
AcsAAQAUBdwAAQAUBdwAAQC8BgwBAQDMBg8BAQDkBhMBAQBJBxcBAQB/BxsBAQCKBwwBAQCYBx8B
AQCjBx8BAQCuBx8BAQC5Bx8BBgbiBx8BVoDqBw8BVoD1Bw8BEQAkCDUBEQBNCDkBEQDACFcBEQDI
CFsBCCEAAAAABhjFARMAAQAQIQAAAAAGGMUBEwABABghAAAAABEYAAIXAAEARCEAAAAAEwgHAhsA
AQBcIQAAAAATCC0CKAABAHQhAAAAABMIVgI1AAEAjCEAAAAAEwh0AkIAAQCkIQAAAABGAroCYwAB
AMAhAAAAAEYCwwJoAAIA1CEAAAAAgwDUAmwAAgDsIQAAAABGAtwCcQACAAAiAAAAABEA5QJ4AAIA
HCIAAAAAAQADA4AAAwA4IgAAAAAGGMUBEwAEAEAiAAAAAAMIFwOLAAQAdCIAAAAABhjFARMABACI
IgAAAAAGGMUBrwAEAJgiAAAAAEYKVAS5AAgArCIAAAAARgprBLkACADAIgAAAACGAIMEvgAIANgi
AAAAAIYAiwS+AAgA8CIAAAAABhjFARMACAAQIwAAAABGAtIEzwAIAEAjAAAAAEYD5wTWAAoAVCMA
AAAARgP6BNYACwBYIwAAAAAGGMUB4AAMAGgjAAAAAAYIiAXmAA0AlCMAAAAABhjFAeAADQCkIwAA
AAAGGMUBEwAOAKwjAAAAAEYC+gTWAA4A8CUAAAAARgKoBRMADwCEJwAAAABGArMFEwAPAJgnAAAA
AAYAvwXwAA8AVCgAAAAARgLTBRMAEABQKQAAAAAGCIgFcQAQAGgpAAAAAAYI6AX2ABAAdCkAAAAA
BggABvsAEQCMKQAAAAAGCAsGAAERAJgpAAAAAAEIFga5ABIAuCkAAAAAAQAsBvYAEgDkKQAAAAAB
AJ8GBgETAIwqAAAAAAMYxQETABQAlCoAAAAAFghZCD0BFADQKgAAAAAWCG0IQgEUAOQqAAAAABYI
eQhHARQA7CoAAAAAERgAAhcAFQAAKwAAAAAGGMUBEwAVAAgrAAAAABYI1QheARUAAAABAMECAAAB
APoCAAABAPoCAAABADIEAAACADwEAAADAEUEAAAEAE0EAAABAN8EAAACAE0EAAABAE0EAAABABAF
AAABADIEAAABADIEAAABABAFAAABAMgFAAABAPoFAAABAPoFAAABADcGAAABAK8GAAABAIUICQDF
ARMAoQDFAWgBsQDFAXcBEQDFARMAuQDFARMAJADFARMALADFARMANADFARMAPADFARMAJAAXA4sA
LAAXA4sANAAXA4sAPAAXA4sAwQDFARMAyQDFARMA0QDFAfYA2QA1CgsCGQC6AmMAGQDDAmgAKQBW
ChgCGQDcAnEA6QByCigCGQDFARMA8QDFATgCRABgA5AATADVCIsATACcCrUCTADFARMA+QDFAcIC
OQDFAa8ACQGDBL4ACQGLBL4AEQHFAcICUQDFARMAQQAcC9ICGQFJC9gCIQFqC94CKQFzC2gAGQGd
C+UCMQFqC+sCOQHWC+YASQHFARMASQGbDPYAQQHFARMAOQCrDPcCSQBqC/wCgQHcAgEDQQHCDPYA
eQHFAfYAQQHSDAYDSQHZDA0DcQD3DBMDUQHFARMAUQH/DPYAUQEPDQYDUQEdDfYAUQEtDQYDWQHF
ARMAWQFJDRwDeQD3DCMDYQHFARMAYQFJDRwDqQHFAfYAsQGGDSwDaQGpDTMDuQG0DXEAsQHBDRcA
cQHTDXEAQQCoBRMAWQDfDV0DaQDxDRMAaQD5DfwCcQHFAfYAUQAcDmIDyQFDDmgDKQGrDGgAYQBV
DmgA0QFjDm4DQQCzBRMAaQB5DhMAAQF/Dn8DKQGNDr4AKQG5DoQD2QHTDmgAOQHdDvYAUQDTBRMA
IQHTDmgAKQE7D5UD6QFgD8IC2QFrDxMA6QFrDxMA6QF1D5sD4QF5D/YA4QGLD6ED4QGYD6gDAQGj
DwwBGQGpD8ID6QFqC80D2QHSD9QD+QHgD9oDYQDsD2gA4QFzC2gA+QEJEL4AAQIeEBMACQLFARMA
EQLFAfYAGQLFAf4DIQLFARMAKQLFAfYAMQLFAfYAOQLFAfYAKQAREZMEiQDFAZkEmQDFARMASQI3
EbYESQI9EbYEUQLFARMAWQLFAagDYQLFARMAaQLFAfYAcQLFAfYAeQLFAfYAgQLFAfYAiQLFAfYA
kQLFAfYAmQLFAfYAoQLFAfYACABUACsBCABYADABKQCDAO0BLgDrA4IFLgDDA+gELgDjA0UFLgD7
A0UFLgDzA8cCLgCzA8AELgC7A8kELgDLA/UELgDrAMcCLgALAR8FLgDTA8cCLgDbAyUFQAATAG4B
QAArADABQwATAG4BQwAbAH0BSQCDAMUBYwATAG4BYwAbAH0BaQCDAP4BgAArADABgwB7ADABgwBz
ADABgwAbAH0BiQCDANkBoAArADABowATAG4BowDDAEACwAArADABwwATAG4BwwDrAMcC4AArADAB
4wALAccCAAETAG4BAAErADABAwELAccCIAETAG4BIAErADABKQF7A08EKQFrA2YEKQFzA0EEQAEr
ADABQAETAG4BSQFzA0EESQFrAyIEYAErADABYAETAG4BYwFTA/ADYwFbAwQEYwELAccCYwFLAzAB
YwFjAzABgAErADABiQETAK0EoAErADABqQETAK0EwAETAG4BwAErADAByQGrAzAB4AErADABAAIT
AG4BAAIrADABQAMLAccCgAMLAccCsQG2AbsBwAEQAhQCHwIkAjMCMwK7As0CzQIQAhAC8gI5A3QD
igOtAyQCtgO7AxAC3gOhBKgEuwQEAAEABgAFAAcABgAJAAgACwAJAA0ADAAOAA4AAADpAU8AAACi
AlQAAABRAlkAAACuAl4AAABqA5gAAACXBMIAAACqBMIAAACaBesAAACaBSIBAADEByYBAADLB8IA
AAAUCE0BAACLCFIBAACFCGMBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgAT
AA8AAgAbABEAAgAjABMAAQAkABMAAgAlABUAAQAmABUAAgAnABcAAgArABkAAgAsABsAAQAtABsA
AgAwAB0AdQB1AIgAlQGcAaMBqgGiAqkCBIAAAAEAAAAAAAAAAAAAAAAAvAAAAAIAAAAAAAAAAAAA
AAEACgAAAAAACAAAAAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAHYDAAAAAAoAAAAAAAAA
AAAAAKYAtAMAAAAACgAAAAAAAAAAAAAApgACBAAAAAAKAAAAAAAAAAAAAACmACQFAAAAAAoAAAAA
AAAAAAAAAKYAPwYAAAAAAQAAAAAAAAAAAAAAnQDxBgAAAAACAAAAAAAAAAAAAAABAPIBAAAAAAIA
AAAAAAAAAAAAAAoATAwAAAAAAgAAAAAAAAAAAAAAAQCWDQAAAAAAAAAAAQAAAF8RAAAFAAQABgAE
AAwACwAAABAADAD4AgAAEAAZAPgCAAAAABsA+AItAC4CLQCwAgAAAAAAPE1vZHVsZT4AbXNjb3Js
aWIATWljcm9zb2Z0LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50Xzll
ZTVkZDFmNzM0ZjQ1YTY5YTE5ODQ4NWQ4MTk1ODNlLnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJv
amVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVy
AFNjcmlwdENvbXBvbmVudF85ZWU1ZGQxZjczNGY0NWE2OWExOTg0ODVkODE5NTgzZS52YnByb2oA
VXNlckNvbXBvbmVudABDb25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBBY3Rpb25UeXBl
cwBNeVJlc291cmNlcwBTY3JpcHRDb21wb25lbnRfOWVlNWRkMWY3MzRmNDVhNjlhMTk4NDg1ZDgx
OTU4M2UudmJwcm9qLk15LlJlc291cmNlcwBNeVNldHRpbmdzAE1pY3Jvc29mdC5WaXN1YWxCYXNp
Yy5BcHBsaWNhdGlvblNlcnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMuRGV2aWNlcwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0
ZXIAbV9Db21wdXRlck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFBy
b3ZpZGVyAFVzZXIAZ2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2Vz
AG1fTXlXZWJTZXJ2aWNlc09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVx
dWFscwBvAEdldEhhc2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNl
X18AVABpbnN0YW5jZQBEaXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMuTXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRl
eHQAR2V0SW5zdGFuY2UAQ296eVJvYy5TU0lTUGx1cy4yMDA4AENvenlSb2MuU3FsU2VydmVyLlNT
SVMAU2NyaXB0QnVmZmVyUGx1cwBNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2Vy
dmVyLlBpcGVsaW5lSG9zdABQaXBlbGluZUJ1ZmZlcgBDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1
dABCdWZmZXIAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRfU3RhdGljT3V0cHV0Q29sdW1ucwBO
ZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lucHV0Q29sdW1ucwBTdGF0aWNPdXRwdXRDb2x1bW5z
AFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0SUQASW5wdXRfUHJvY2Vzc0lu
cHV0AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBSb3cAUGFyZW50Q29tcG9uZW50AE1pY3Jvc29mdC5T
cWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5X
cmFwcGVyAElEVFNDb25uZWN0aW9uTWFuYWdlcjEwMABnZXRfQ3JtQ29ubmVjdGlvbgBDcm1Db25u
ZWN0aW9uAFByZUV4ZWN1dGUAUG9zdEV4ZWN1dGUAVmFsaWRhdGUAZXJyTWVzc2FnZQBSZWluaXRp
YWxpemVNZXRhRGF0YQBzZXRfQ3JtQ29ubmVjdGlvbgB2YWx1ZQBnZXRfQWN0aW9uAHNldF9BY3Rp
b24AZ2V0X0NybUNvbm5lY3Rpb25UeXBlAEZpcmVFcnJvcl8AbWVzc2FnZQBNaWNyb3NvZnQuU3Fs
U2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5X
cmFwcGVyAElEVFNJbnB1dENvbHVtbjEwMABHZXRJbnB1dENvbHVtbl8AZXh0ZXJuYWxOYW1lAG1f
Y3JtQ29ubmVjdGlvbgBtX2FjdGlvbgBJQ3JtQ29ubmVjdGlvbgBtX2Nvbm5lY3Rpb24AQ296eVJv
Yy5EeW5hbWljcwBDb3p5Um9jLkR5bmFtaWNzLkNybTIwMTEuT3JnYW5pemF0aW9uU2VydmljZQBP
cmdhbml6YXRpb25TZXJ2aWNlQ2xpZW50AG1fc2VydmljZTIwMTEAQ296eVJvYy5EeW5hbWljcy5D
cm0uU2VydmljZQBDcm1TZXJ2aWNlAG1fc2VydmljZTQAbV9yZXF1ZXN0TmFtZQBtX2ZlbkluZGV4
AG1fZmVpSW5kZXgAbV9zZW5JbmRleABtX3NlaUluZGV4AEFjdGlvbgBDcm1Db25uZWN0aW9uVHlw
ZQBFbnVtAHZhbHVlX18AU2V0UmVsYXRlZABSZW1vdmVSZWxhdGVkAFN5c3RlbS5SZXNvdXJjZXMA
UmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUluZm8A
X3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBW
YWx1ZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNl
AG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwARWRp
dG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAFN5c3RlbS5Db2RlRG9t
LkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVtLkRpYWdub3N0aWNzAERlYnVn
Z2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2Vz
AFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5D
b21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUu
Q29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmplY3RWYWx1ZQBSdW50aW1lVHlw
ZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlHcm91
cENvbGxlY3Rpb25BdHRyaWJ1dGUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2
aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBTY3JpcHRCdWZmZXIAQ0xTQ29tcGxpYW50
QXR0cmlidXRlAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEA
SURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABn
ZXRfSXRlbQBnZXRfSUQASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVu
dGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElEVFNSdW50aW1lQ29ubmVjdGlvbjEwMABnZXRfQ29u
bmVjdGlvbk1hbmFnZXIARW50aXR5UmVmZXJlbmNlAE9yZ2FuaXphdGlvblJlcXVlc3QAVGFyZ2V0
UmVsYXRlZER5bmFtaWMAU2V0UmVsYXRlZFJlcXVlc3QAUmVtb3ZlUmVsYXRlZFJlcXVlc3QAU3lz
dGVtLldlYi5TZXJ2aWNlcwBTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scwBTb2FwRXhjZXB0
aW9uAEV4Y2VwdGlvbgBHdWlkAHNldF9SZXF1ZXN0TmFtZQBnZXRfQnVmZmVyAENvbnZlcnNpb25z
AHNldF9Mb2dpY2FsTmFtZQBzZXRfSWQAc2V0X0l0ZW0AT3JnYW5pemF0aW9uUmVzcG9uc2UARXhl
Y3V0ZQBzZXRfRW50aXR5MU5hbWUAc2V0X0VudGl0eTFJZABzZXRfRW50aXR5Mk5hbWUAc2V0X0Vu
dGl0eTJJZABUYXJnZXRSZWxhdGVkAHNldF9UYXJnZXQAUmVzcG9uc2UAUmVxdWVzdABBcHBsaWNh
dGlvbkV4Y2VwdGlvbgBQcm9qZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IAU3lzdGVtLlhtbABYbWxO
b2RlAGdldF9EZXRhaWwAZ2V0X0lubmVyWG1sAENsZWFyUHJvamVjdEVycm9yAGdldF9NZXNzYWdl
AEFjcXVpcmVDb25uZWN0aW9uAENvbm5lY3QAR2V0U2VydmljZQBJbnQzMgBQaXBlbGluZUNvbXBv
bmVudABnZXRfSG9zdENvbXBvbmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFu
YWdlcgBnZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABDbG9zZQBJc051bGxPckVt
cHR5AGdldF9Jc0F0dGFjaGVkAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0
Q29sdW1uQ29sbGVjdGlvbgBnZXRfQ291bnQAc2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQASURUU0V4
dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW5Db2xsZWN0
aW9uMTAwAGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBzZXRfSXNVc2VkAFJl
bW92ZUFsbABOZXcAc2V0X05hbWUARGF0YVR5cGUAc2V0X0RhdGFUeXBlAHNldF9MZW5ndGgARW1w
dHkARmlyZUVycm9yAFN5c3RlbS5Db2xsZWN0aW9ucwBJRW51bWVyYXRvcgBHZXRFbnVtZXJhdG9y
AGdldF9DdXJyZW50AGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uSUQATW92ZU5leHQASURpc3Bv
c2FibGUARGlzcG9zZQBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5
Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRl
AFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmlidXRlAERlc2NyaXB0
aW9uQXR0cmlidXRlAENhdGVnb3J5QXR0cmlidXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUAU3lzdGVt
LlJlZmxlY3Rpb24AQXNzZW1ibHkAZ2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRpbmcATW9uaXRv
cgBFbnRlcgBFeGl0AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50
XzllZTVkZDFmNzM0ZjQ1YTY5YTE5ODQ4NWQ4MTk1ODNlLnZicHJvai5SZXNvdXJjZXMucmVzb3Vy
Y2VzAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlB
dHRyaWJ1dGUAQXNzZW1ibHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAEFzc2Vt
Ymx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5
UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlw
dGlvbkF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF85ZWU1
ZGQxZjczNGY0NWE2OWExOTg0ODVkODE5NTgzZS52YnByb2ouZGxsAAALSQBuAHAAdQB0AAAbQwBy
AG0AQwBvAG4AbgBlAGMAdABpAG8AbgAADVQAYQByAGcAZQB0AAAtVQBuAGgAYQBuAGQAbABlAGQA
IABhAGMAdABpAG8AbgAgAHQAeQBwAGUALgAAM1UAbgBoAGEAbgBkAGwAZQBkACAAcwBlAHIAdgBp
AGMAZQAgAG8AYgBqAGUAYwB0AC4AABVTAGUAdABSAGUAbABhAHQAZQBkAAAbUgBlAG0AbwB2AGUA
UgBlAGwAYQB0AGUAZAAAH0YAaQByAHMAdABFAG4AdABpAHQAeQBOAGEAbQBlAAAbRgBpAHIAcwB0
AEUAbgB0AGkAdAB5AEkAZAAAIVMAZQBjAG8AbgBkAEUAbgB0AGkAdAB5AE4AYQBtAGUAAB1TAGUA
YwBvAG4AZABFAG4AdABpAHQAeQBJAGQAAD9TAGUAbABlAGMAdAAgAEQAeQBuAGEAbQBpAGMAcwAg
AEMAUgBNACAAYwBvAG4AbgBlAGMAdABpAG8AbgAuAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8A
bAB1AG0AbgBzAC4AABVOAG8AIABpAG4AcAB1AHQAcwAuAAAZRABZAE4AQQBNAEkAQwBTAC0AQwBS
AE0AATVEAHkAbgBhAG0AaQBjAHMAIABDAFIATQAgAFIAZQBsAGEAdABpAG8AbgBzAGgAaQBwAHMA
AC9JAG4AcAB1AHQAIABjAG8AbAB1AG0AbgAgAG4AbwB0ACAAZgBvAHUAbgBkAC4AADFNAHkALgBS
AGUAcwBvAHUAcgBjAGUAcwAuAE0AeQBSAGUAcwBvAHUAcgBjAGUAcwAAAAAAMGEHkONTUECGH041
iq4p8gAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARII
BAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQg
ABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIFs9JC7gMNOoI
iYRdzYCAzJEJIAQBEiEIAhIlBCAAHQ4DIAACBCgAHQ4DBhIkAwYSKAYgAgEIEiUFIAEBEhwDBhIh
BSABARIhBCAAEi0EKAASLQUgAQIQDgQgAQEOBCAAETAFIAEBETAFIAESMQ4CBg4DBhEwAwYSNQMG
EjkDBhI9AgYIAygADgQoABEwBAAAAAAEAQAAAAMGEkUDBhJJBAAAEkUEAAASSQUAAQESSQQIABJF
BAgAEkkDBhI4AgYcBAAAEjgECAASOAUgAQERVQgBAAEAAAAAAAUgAgEODhcBAApNeVRlbXBsYXRl
BzguMC4wLjAAAAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwES
FBMBAA5NeS5BcHBsaWNhdGlvbgAAEwEADk15LldlYlNlcnZpY2VzAAAQAQALTXkuQ29tcHV0ZXIA
AAwBAAdNeS5Vc2VyAAAEAAEcHAMHAQIDBwEIBgABEhURcQQHARIVAwcBDgUQAQAeAAQKAR4ABAcB
HgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVu
dFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAET
AAYVEhkBEwAECgETAAUgAQETAAYHAhMAEwAEIAEBAgUBAAAAAAQHAR0OBSAAEoCNBSAAEoCRBiAB
EoCVHAUgABKAmQYgARKAnRwEBwESLQQgABIlBCABHAgEAAEOHAYgAQERgL0FIAIBDhwIIAESgMUS
gKUGIAEBEoDJCCABEoDNEoDRBgABARKAuQUgABKA3SMHCxKAoRKAoRKApRKAqRKArRKAsRKAtRKA
uRGAvR0SgKERMAQgARwcBSAAEoDlBSAAEoDpBSACCAgICgcEEoCVEjEcETAEAAECDgUgABKA7QoH
BAICEoCVEoC5BSAAEoD1BSAAEoDxBiABARGA+QQgAQEICAcCEoDxEoCVBAcBETAGBwIdDh0OCiAG
AQgODg4IEAIGIAESgPEcBSAAEoD9AyAAHBEHBhKA8RIxEoCVEjESMRKA/Q0BAAhWYWxpZGF0ZQAA
BSABAR0OHQEAAgAAAA1Dcm1Db25uZWN0aW9uBkFjdGlvbgAAHgEAGVNlbGVjdCBhY3Rpb24gdG8g
cGVyZm9ybS4AAA0BAAhTZXR0aW5ncwAAFgEAEUNybUNvbm5lY3Rpb25UeXBlAAAsAQAnU2VsZWN0
IER5bmFtaWNzIENSTSBDb25uZWN0aW9uIE1hbmFnZXIuAAAFIAASgSEHIAIBDhKBIQYHAhJFEkUE
BwESSQgBAAIAAAAAAAQAAQEcBAcBEjgIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25U
aHJvd3MBDAEABzEuMC4wLjAAACkBACQyMTlhZWM1Yy04OTU0LTQwN2EtYjA0OS0xNzA5YmFmMTBh
YmYAAAUBAAEAAB8BABpDb3B5cmlnaHQgQCBNaWNyb3NvZnQgMjAxMgAAPAEAN1NjcmlwdENvbXBv
bmVudF85ZWU1ZGQxZjczNGY0NWE2OWExOTg0ODVkODE5NTgzZS52YnByb2oAAA4BAAlNaWNyb3Nv
ZnQAAAAAALxUAAAAAAAAAAAAAN5UAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQVAAAAAAAAAAA
AAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACBAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAOAAAA
SAAAgBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAAAAAA
AAEAAH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAANgA
AAAAAAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAAAAAA
AAAAAAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAiAAAA
AAAAAAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBG
AE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAA
AABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABp
AG8AbgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAABADAA
MAAwADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBv
AHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIA
aQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA5AGUAZQA1AGQAZAAxAGYANwAzADQAZgA0ADUAYQA2
ADkAYQAxADkAOAA0ADgANQBkADgAMQA5ADUAOAAzAGUALgB2AGIAcAByAG8AagAAADAACAABAEYA
aQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBu
AGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA5AGUAZQA1AGQA
ZAAxAGYANwAzADQAZgA0ADUAYQA2ADkAYQAxADkAOAA0ADgANQBkADgAMQA5ADUAOAAzAGUALgB2
AGIAcAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAA
QwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAyAAAAAACg
ADwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0A
cABvAG4AZQBuAHQAXwA5AGUAZQA1AGQAZAAxAGYANwAzADQAZgA0ADUAYQA2ADkAYQAxADkAOAA0
ADgANQBkADgAMQA5ADUAOAAzAGUALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8A
ZAB1AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADkAZQBl
ADUAZABkADEAZgA3ADMANABmADQANQBhADYAOQBhADEAOQA4ADQAOAA1AGQAOAAxADkANQA4ADMA
ZQAuAHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4A
MAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiI
iIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERE
RERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPA
AAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8A
AP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP////
///4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERE
RETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEA
AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAADwNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="37" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="401" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_9ee5dd1f734f45a69a198485d819583e</property>
<property id="402" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<connections>
<connection id="87" name="CrmConnection" description="" connectionManagerID="{B7AC7DEF-08AC-4F40-86FF-DF27C9B310BE}" /></connections>
<inputs>
<input id="27" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="True">
<externalMetadataColumn id="101" name="FirstEntityName" description="" precision="0" scale="0" length="100" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="102" name="FirstEntityId" description="" precision="0" scale="0" length="0" dataType="guid" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="103" name="SecondEntityName" description="" precision="0" scale="0" length="100" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="104" name="SecondEntityId" description="" precision="0" scale="0" length="0" dataType="guid" codePage="0" mappedColumnId="0" /></externalMetadataColumns></input>
</inputs>
</component>