<component id="36" name="Geocode" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script." localeId="1033" version="7" 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="37" 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-2009 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.

' Following resources were used as reference:
' http://code.google.com/apis/maps/documentation/geocoding/index.html
' http://code.google.com/apis/maps/articles/phpsqlgeocode.html

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Net
Imports System.Web
Imports System.IO
Imports System.Threading

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


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


    Private Const Query_2P As String = "http://maps.google.com/maps/geo?output=csv&oe=utf8&sensor=false&key={0}&q={1}"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim address As String = CStr(Row.Buffer(m_addressIndex))

        ' Geocode address.
        Dim geo() As Object = GeoCode_(address)
        Row.Accuracy = CInt(geo(0))
        Row.Latitude = CDbl(geo(1))
        Row.Longitude = CDbl(geo(2))
    End Sub ' Input_ProcessInputRow


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

        ' Setup address index.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        m_addressIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.AddressColumn).LineageID)

        ' Setup API key.
        Dim vars As IDTSVariables100 = Nothing
        Call Me.VariableDispenser.LockOneForRead(Me.ApiKeyVariable, vars)
        Try
            m_apiKey = CStr(vars(Me.ApiKeyVariable).Value)
        Finally
            Call vars.Unlock()
        End Try

        ' Setup cache.
        m_cache = LoadCache_()
        m_cacheModified = False
    End Sub ' PreExecute


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

        If m_cacheModified Then
            ' Cache has been modified. Store it.
            Call StoreCache_(m_cache)
        End If
    End Sub ' PostExecute


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

        ' Setup address column.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
        Call input.InputColumnCollection.RemoveAll()
        Call virtInput.SetUsageType( _
            virtInput.VirtualInputColumnCollection(Me.AddressColumn).LineageID, _
            DTSUsageType.UT_READONLY)

        ' Setup cache file connection manager.
        Me.ComponentMetaData.RuntimeConnectionCollection("CacheFile").ConnectionManagerID = Me.CacheFile
    End Sub ' ReinitializeMetaData


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

        Try
            If String.IsNullOrEmpty(Me.AddressColumn) Then
                Throw New ApplicationException("Select address column.")
            End If

            If String.IsNullOrEmpty(Me.ApiKeyVariable) Then
                Throw New ApplicationException("Select API key variable.")
            End If

            If String.IsNullOrEmpty(Me.CacheFile) Then
                Throw New ArgumentException("Select cache file connection manager.")
            End If

            Call ReinitializeMetaData()

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

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select address column.")> _
    <InputVirtualColumn()> _
    Public Property AddressColumn() As String
        Get
            AddressColumn = m_addressColumn
        End Get
        Set(ByVal value As String)
            m_addressColumn = value
        End Set
    End Property    ' AddressColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select file containing geocoding cache.")> _
    <Connection("FileConnectionType")> _
    Public Property CacheFile() As String
        Get
            CacheFile = m_cacheFile
        End Get
        Set(ByVal value As String)
            m_cacheFile = value
        End Set
    End Property    ' CacheFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable containing Google Maps API key.")> _
    <Variable()> _
    Public Property ApiKeyVariable() As String
        Get
            ApiKeyVariable = m_apiKeyVariable
        End Get
        Set(ByVal value As String)
            m_apiKeyVariable = value
        End Set
    End Property    ' ApiKeyVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property FileConnectionType() As String()
        Get
            FileConnectionType = New String() {"FILE"}
        End Get
    End Property    ' FileConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Loads current geocode cache file.
    Private Function LoadCache_() As Hashtable
        Dim result As Hashtable = New Hashtable()
        Dim fileName As String

        fileName = Me.Connections.CacheFile.ConnectionString
        If File.Exists(fileName) Then
            ' Cache file exists. Load it.
            Using reader As StreamReader = New StreamReader(fileName)
                While Not reader.EndOfStream
                    Dim line() As String = reader.ReadLine().Split(Chr(124))
                    result.Add(line(0), New Object() {CInt(line(1)), CDbl(line(2)), CDbl(line(3))})
                End While
            End Using

            Dim fireAgain As Boolean
            Me.ComponentMetaData.FireInformation( _
                0, _
                "Geocode", _
                String.Format("Loaded {0} cached addresses.", result.Count), _
                String.Empty, _
                0, _
                fireAgain)
        End If

        LoadCache_ = result
    End Function    ' LoadCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Stores current geocode cache.
    Private Sub StoreCache_(ByVal cache As Hashtable)
        Dim fileName As String = Me.Connections.CacheFile.ConnectionString

        Using writer As StreamWriter = File.CreateText(fileName)
            For Each pair As DictionaryEntry In cache
                Dim line As String = CStr(pair.Key)
                For Each item As Object In CType(pair.Value, Object())
                    line += Chr(124) + item.ToString()
                Next

                Call writer.WriteLine(line)
            Next
        End Using
    End Sub ' StoreCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' If not yet cached, geocode specified address.
    Private Function GeoCode_(ByVal address As String) As Object()
        Dim result() As Object = Nothing

        If Not m_cache.Contains(address) Then
            ' Address not cached yet. Load it.
            While result Is Nothing
                Dim ra() As String
                Dim response As WebResponse = HttpWebRequest.Create(String.Format( _
                    Query_2P, _
                    m_apiKey, _
                    address)).GetResponse()
                Using reader As StreamReader = New StreamReader(response.GetResponseStream())
                    ra = reader.ReadLine().Split(Chr(44))
                End Using

                If ra(0) = "200" Then
                    result = New Object() {CInt(ra(1)), CDbl(ra(2)), CDbl(ra(3))}
                ElseIf ra(0) = "620" Then
                    ' Too many queries. Increase delay between calls.
                    m_delay += 100
                    Me.ComponentMetaData.FireWarning( _
                        0, _
                        "Geocode", _
                        "Geocode service has too many queries. Delay between calls is incremented.", _
                        String.Empty, _
                        0)
                Else
                    ' Failed to geocode.
                    Throw New ApplicationException(String.Format( _
                        "Failed to geocode '{0}'. Received code: {1}", _
                        address, _
                        ra(0)))
                End If

                Call Thread.Sleep(m_delay)
            End While

            ' Address was successfully geocoded. Cache it.
            m_cacheModified = True
            m_cache.Add(address, result)
        End If

        GeoCode_ = CType(m_cache(address), Object())
    End Function    ' GeoCode_
#End Region ' Internals


#Region "Attributes"
    Private m_addressColumn As String
    Private m_cacheFile As String
    Private m_apiKeyVariable As String

    Private m_addressIndex As Integer
    Private m_apiKey As String
    Private m_cache As Hashtable
    Private m_cacheModified As Boolean

    ' Milliseconds to wait between geocode calls.
    ' It will gradually increase if service responds too many queries (620).
    Private m_delay As Integer = 200
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [Accuracy]() As Int32
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [Accuracy_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Latitude]() As Double
        Set
            Me(1) = Value
        End Set
    End Property
    Public WriteOnly Property [Latitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(1)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Longitude]() As Double
        Set
            Me(2) = Value
        End Set
    End Property
    Public WriteOnly Property [Longitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(2)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"Accuracy", "Latitude", "Longitude"}
        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_2e714c6deb8346b79a3cd31154cf303a.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>{585BB770-A7BC-4490-A39F-1E3F16A78D93}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</RootNamespace>
    <AssemblyName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</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.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.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=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Web" />
  </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="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebug32462748-f88b-4db9-8678-0212b7a8f7d5/795c5987-8447-4069-aaa4-a8ab031c6aaf&quot;" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</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 CacheFile() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CacheFile").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{30DFA050-A18C-461C-9A83-64DA7F1BD4A6}</msb:ProjectId>
		<msb:DisplayName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</msb:DisplayName>
		<msb:CodeName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:Project Include="ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="38" 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_2e714c6deb8346b79a3cd31154cf303a.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAKUSYk8AAAAAAAAAAOAAAiELAQgAADIAAAAGAAAAAAAA3lEA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAIxRAABPAAAAAGAAAEgDAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA5DEAAAAgAAAAMgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAEgDAAAAYAAAAAQAAAA0AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAOAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADA
UQAAAAAAAEgAAAACAAUAiCkAAAQoAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CKAEAAAoqHgIoBAAACiqmcwYAAAqAAQAABHMHAAAKgAIA
AARzCAAACoADAAAEcwkAAAqABAAABCoAABMwAQALAAAAAQAAEX4BAAAEbwoAAAoqABMwAQALAAAA
AgAAEX4CAAAEbwsAAAoqABMwAQALAAAAAwAAEX4DAAAEbwwAAAoqABMwAQALAAAABAAAEX4EAAAE
bw0AAAoqABMwAgANAAAABQAAEQIDKBEAAAooEgAACioAAAATMAEABwAAAAYAABECKBMAAAoqABMw
AQALAAAABwAAEdAFAAACKBQAAAoqABMwAQAHAAAACAAAEQIoFQAACioAEzABABAAAAAJAAARAowB
AAAbLQYoAQAAKyoCKhMwAgAQAAAACgAAEQMSAP4VAgAAGwaBAgAAGyoeAigXAAAKKhMwAgAoAAAA
CwAAEQJ7GQAACm8aAAAKCweMAwAAGy0SKAIAACsLAnsZAAAKB28bAAAKBypKAigXAAAKAnMcAAAK
fRkAAAoqADoCAwQFDgQOBSgeAAAKKgATMAEABwAAAAwAABEWjRoAAAEqADoCFgOMGwAAAW8fAAAK
KgBiAywJAhZvIAAACisLcgEAAHBzIQAACnoqAAAAOgIXA4wdAAABbx8AAAoqAGIDLAkCF28gAAAK
KwtyAQAAcHMhAAAKeioAAAA6AhgDjB0AAAFvHwAACioAYgMsCQIYbyAAAAorC3IBAABwcyEAAAp6
KgAAABMwAwAhAAAADQAAERmNGgAAAQsHFnKeAABwogcXcrAAAHCiBxhywgAAcKIHKgAAABMwAQAJ
AAAADgAAEQIoIgAACgoGKgAAABMwAQAJAAAADwAAEQIoIwAACgoGKgAAAH4CKCUAAAoCAnMgAAAG
fQYAAAQCAnMiAAAGfQcAAAQqvgMCKCYAAApvJwAACnLWAABwbygAAApvKQAACjMRAgIDFwUOBHMR
AAAGbx4AAAYqSisHAgNvHwAABgNvGgAABi3xKgAGKgAAOgIoFwAACgIDfQgAAAQqABMwAgAgAAAA
EAAAEQJ7CAAABG8mAAAKbyoAAApy4gAAcG8rAAAKbywAAAoqOgIoFwAACgIDfQkAAAQqAEoCKBwA
AAYCIMgAAAB9EgAABCoAEzADAEoAAAARAAARA28tAAAKAnsOAAAEby4AAAooLwAACgoCBm8yAAAG
CwMHFpooMAAACm8TAAAGAwcXmigxAAAKbxUAAAYDBxiaKDEAAApvFwAABioAABswBQCdAAAAEgAA
EQIoMgAACgJvJgAACm8nAAAKFowbAAABbygAAAoKAgJvMwAACm80AAAKBm81AAAKBm82AAAKAm8p
AAAGbzcAAApvOAAACm85AAAKfQ4AAAQUCwJvOgAACgJvLQAABhIBbzsAAAoCBwJvLQAABm88AAAK
bz0AAAooLwAACn0PAAAE3gcHbz4AAArcAgJvMAAABn0QAAAEAhZ9EQAABCoAAAABEAAAAgBkAB6C
AAcAAAABbgIoPwAACgJ7EQAABCwMAgJ7EAAABG8xAAAGKhMwAwBuAAAAEwAAEQIoQAAACgJvJgAA
Cm8nAAAKFowbAAABbygAAAoKBm9BAAAKCwZvNgAACm9CAAAKBwdvQwAACgJvKQAABm9EAAAKb0UA
AAoWb0YAAAomAm8mAAAKbyoAAApy4gAAcG8rAAAKAm8rAAAGb0cAAAoqAAAbMAIAbgAAABQAABEC
bykAAAYoSAAACiwLcvYAAHBzSQAACnoCby0AAAYoSAAACiwLciQBAHBzSQAACnoCbysAAAYoSAAA
CiwLclYBAHBzSgAACnoCbycAAAYXCt4YJShLAAAKDBYKAwhvTAAAClEoTQAACt4ABgsHKgAAARAA
AAAAAABSUgAYMQAAARMwAQAJAAAAFQAAEQJ7CwAABAoGKgAAACICA30LAAAEKgAAABMwAQAJAAAA
FgAAEQJ7DAAABAoGKgAAACICA30MAAAEKgAAABMwAQAJAAAAFwAAEQJ7DQAABAoGKgAAACICA30N
AAAEKgAAABMwAwATAAAAGAAAEReNGgAAAQsHFnKiAQBwogcKBioAGzAHAN0AAAAZAAARc04AAAoM
AnsGAAAEbyEAAAZvTwAACgoGKFAAAAo5twAAAAZzUQAAChMEK2gRBG9SAAAKF403AAABEwYRBhYf
fJ0RBm9TAAAKEwUIEQUWmhmNAwAAARMHEQcWEQUXmihUAAAKjBsAAAGiEQcXEQUYmihVAAAKjB0A
AAGiEQcYEQUZmihVAAAKjB0AAAGiEQdvVgAAChEEb1cAAAosj94MEQQsBxEEb1gAAArcAm8mAAAK
FnKsAQBwcrwBAHAIb1kAAAqMGwAAAShaAAAKflsAAAoWEgNvXAAACggLByoAAAABEAAAAgAqAHWf
AAwAAAABGzADAKYAAAAaAAARAnsGAAAEbyEAAAZvTwAACgoGKF0AAAoLA29eAAAKEwUrbhEFb18A
AAolLQUmEQYrCnk6AAABcToAAAENEgMoYAAACigvAAAKDBIDKGEAAAp0CgAAGxMIFhMHKyURCBEH
migRAAAKEwQIcvYBAHARBG8VAAAKKGIAAAoMEQcX1hMHEQcRCI63MtMHCG9jAAAKEQVvZAAACi2J
3goHLAYHb1gAAArcKgAAARAAAAIAGACDmwAKAAAAARswBgBIAQAAGwAAERQLAnsQAAAEA29lAAAK
OiEBAAA4AgEAAHL6AQBwAnsPAAAEAyhmAAAKKGcAAApvaAAACg0Jb2kAAApzagAAChMEEQRvUgAA
CheNNwAAARMFEQUWHyydEQVvUwAACgzeDBEELAcRBG9YAAAK3AgWmnKXAgBwFihrAAAKFjNAGY0D
AAABEwYRBhYIF5ooVAAACowbAAABohEGFwgYmihVAAAKjB0AAAGiEQYYCBmaKFUAAAqMHQAAAaIR
BgsrUggWmnKfAgBwFihrAAAKFjMtAgJ7EgAABB9k1n0SAAAEAm8mAAAKFnKsAQBwcqcCAHB+WwAA
ChZvbAAACisUcjwDAHADCBaaKGYAAApzSQAACnoCexIAAAQobQAACgc5+P7//wIXfREAAAQCexAA
AAQDB29WAAAKAnsQAAAEA29uAAAKdAoAABsKBioBEAAAAgBBAB9gAAwAAAABQlNKQgEAAQAAAAAA
DAAAAHY0LjAuMzAzMTkAAAAABQBsAAAA5AwAACN+AABQDQAAABEAACNTdHJpbmdzAAAAAFAeAACU
AwAAI1VTAOQhAAAQAAAAI0dVSUQAAAD0IQAAEAYAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ4AAAD6
JTMAFgAAAQAAAEwAAAALAAAAEgAAADIAAAAdAAAAeAAAAAEAAAA1AAAAGwAAAAUAAAASAAAAFQAA
AAoAAAABAAAACAAAAAIAAAADAAAAAgAAAAAAyRABAAAAAAAKAD8BFQEKAHMBVQEGAIMBfAEKANsB
FQEGAFkCfAEKANsCsQIOAC0DFgMSAHwDWwMWAK0DWwMSALwDWwMOABgFFgMaANMFqwUGANUGwgYe
ALgHogceANEHogceAP4H5gcGACgIFQgKAGcIQAgKAH8IEwAeALQIlwgGAOkIyQgGAAcJfAEGACsJ
fAEKAEQJEwAGAJIJcwkGAKYJfAEGAK0JfAEGAMQJfAEGAN4JfAESAOUJWwMGAPIJfAEiAFUKLAoi
AIQKLAoiAK8KLAoiAMwKLAoiAA8LLAoKAEkLQAgaAGgLqwUWAHkLWwMiAJ0LLAoiAMQLLAoiAPsL
LAoaADIMqwUaAHAMqwUiAIcMLAoiALUMLAoiAPoMLAoiABQNLAoGAEYNfAEGAF4NfAEGAHMNfAEK
AIUNQAgGAMkNvw0GAOsNvw0GAAAOfAEGAB8OfAEGAFoOvw0GAGcOwgYGAHcOwgYGAKYOwgYGAM0O
vw0eAPYO6w4eAAsP6w4GACkPvw0KAEIPQAgGAHcPZg8SAIQPWwMOAM0Pqw8OAOkPqw8OAAEQqw8e
ABUQogcOACoQqw8OAEYQqw8GAFgQyQgGAHgQyQgGALAQlhAAAAAAAQAAAAAAAQABAAAAAAApADcA
BQABAAEAAAAAAGsANwAJAAEAAgAAARAAdgA3AA0AAQADAAUBAACAAAAADQAFAAgABQEAAI4AAAAN
AAUADwABAAAAqQC1AB0ABgARAAEAAADmALUALQAGABwAAQAAAPQAtQANAAgAIAABAAAAAAG1AA0A
CQAiAAEAAAAKAbUAIAAKACMAMQCeASAAMQDHAS0AMQDpAToAMQAOAkcAIQDqApAABgD0AOQABgAA
AegAAQB4BfwAAQB4BfwAUYAEBhABAQANBxABAQAdBxABAQApBxABAQA6B8sBAQBJBxABAQBSB84B
AQBaB9IBAQBqB8sBUCAAAAAABhhPARMAAQBYIAAAAAAGGE8BEwABAGAgAAAAABEYigEXAAEAjCAA
AAAAEwiRARsAAQCkIAAAAAATCLcBKAABALwgAAAAABMI4AE1AAEA1CAAAAAAEwj+AUIAAQDsIAAA
AABGAkQCYwABAAghAAAAAEYCTQJoAAIAHCEAAAAAgwBeAmwAAgA0IQAAAABGAmYCcQACAEghAAAA
ABEAbwJ4AAIAZCEAAAAAAQCNAoAAAwCAIQAAAAAGGE8BEwAEAIghAAAAAAMIoQKLAAQAvCEAAAAA
BhhPARMABADQIQAAAAAGGE8BrwAEAOAhAAAAAEYK9gO7AAkA9CEAAAAABggNBMAACQAEIgAAAAAG
CCAExQAKACAiAAAAAAYINATKAAsAMCIAAAAABghBBMUADABMIgAAAAAGCFUEygANAFwiAAAAAAYI
YwTFAA4AeCIAAAAARgp4BLsADwCoIgAAAACGAJAEzwAPAMAiAAAAAIYAmATPAA8A2CIAAAAABhhP
ARMADwD4IgAAAABGAiwF7AAPACgjAAAAAEYDSwX2ABMAPCMAAAAARgNeBfYAFABAIwAAAAAGGE8B
AAEVAFAjAAAAAAYI7AUGARYAfCMAAAAABhhPAQABFgCMIwAAAAAGGE8BEwAXAKAjAAAAAEYCXgX2
ABcA+CMAAAAARgINBhMAGAC0JAAAAABGAhgGEwAYANAkAAAAAEYCJAYTABgATCUAAAAABgA5Bq8B
GADYJQAAAAAGCE0GcQAZAPAlAAAAAAYIXwa1ARkA/CUAAAAABgjsBXEAGgAUJgAAAAAGCHcGtQEa
ACAmAAAAAAYIhQZxABsAOCYAAAAABgiYBrUBGwBEJgAAAAABCKsGuwAcAGQmAAAAAAEA3wa6ARwA
YCcAAAAAAQDqBr8BHAAkKAAAAAABAPwGxQEdAAAAAQBLAgAAAQCEAgAAAQCEAgAAAQDKAwAAAgDU
AwAAAwDdAwAABADlAwAABQDsAwAAAQAaBAAAAQAaBAAAAQAaBAAAAQAaBAAAAQAaBAAAAQAaBAAA
AQA5BQAAAgBBBQAAAwDlAwAABADsAwAAAQDlAwAAAQB0BQAAAQDKAwAAAQDKAwAAAQB0BQAAAQBC
BgAAAQBxBgAAAQBxBgAAAQBxBgAAAQD2BgAAAQAFBwkATwETAHEATwHZAYEATwHoAREATwETAIkA
TwETACQATwETACwATwETADQATwETADwATwETACQAoQKLACwAoQKLADQAoQKLADwAoQKLAJEATwET
AJkATwETAKEATwG1AakA+AiCAhkARAJjABkATQJoACkAGQmPAhkAZgJxALkANQmfAhkATwETAMEA
TwGvAkQA6gKQAEwAXwmLAEwAaQksA0wATwETAMkATwHFADkATwGvADkAswlGAzkAvAnAAOEATwG1
AfEAkATPAPEAmATPAPkATwHFAFkATwETAEEAbgpTAwEBmwpZAwkBvApfAxEBxQpoAAEB7wpmAxkB
vApsAyEBKAsGATkAPgt4A0kAvAp9AykBZgKCAykBVQuHAykBXwuMA0EADQYTAFkAiwuXAzkBsgud
AxEBPgtoABEB4QujA0kBvAqpA1EBDgxoAEEBHAywA0EASwy2A1kBYQy8AzEBvArFA2EBXwnMAzEB
gAwTAEEAGAYTAFkAJAYTABEBmwzZA0kBqwwTAGkB2QzfA3EBvArlA3kBDgxoAGkBIQ3sAyEBLg21
AdEAUA39A5EBTwG1AZkBTwG1AaEBkQ0CBIkBoQ1xAKEBrQ0XAGkATwETAGEA1g1xALEB8A39A6kB
TwG1AakB9w1xANEABQ4RBCkBVQsYBCkBXwsdBGkACw4iBKkBDw7PAMEBKw4TAGkAMw5oANEAPQ4o
BNEARA4QAQEBSg4uBLEBjQ5LBGkAmA5SBOEBsg7MA9EBvg7MA9EBXwnMA9EAxg5bBOkB2A61AeEB
4g7PAGkAAg9jANEAPQ53BPkBFg9+BPkBHQ+FBPEBMA+LBKkBTwGRBAkCTA+YBAEBWg+fBBECfg+o
BGkAvAqtBBkCTwETACECTwG1ASkCTwHTBDECTwG1ATkCTwG1AUECTwETAEkCTwETAFECTwHAAFkC
TwETAGECTwG1AQ4AKAATASkAgwBQAi4AswOfBS4AuwOoBS4AwwPHBUAAEwDfAUAAKwAHAkMAGwDu
AUMAEwDfAUkAgwBhAmMAEwDfAWMAGwDuAWkAgwB1AoAAKwAHAoMAewAHAoMAGwDuAYMAcwAHAokA
gwA8AqAAKwAHAqMAwwC3AqMAEwDfAcAAKwAHAsMA6wA7A8MAEwDfAeAAKwAHAuMAIwE7AwABEwDf
AQABKwAHAgMBIwE7AyABKwAHAiABEwDfAUABKwAHAkABEwDfAWABEwDfAWABKwAHAmMBIwE7A2MB
gwPFBGMBewMHAmMBiwPZBIABKwAHAqABKwAHAsABEwDfAcABKwAHAuABKwAHAukBowMHAukBmwNO
BQACKwAHAgACEwDfAQkCmwMhBQkCkwMJBSkCqwMHAikCmwNqBQAEIwE7A0AEIwE7AygCLQIyAjcC
hwKLApYCmwKqAqoCMgNBA0wDhwKHAnMDkQPQA/QDCQSbApsCmwJMAzkEYgSyBAQAAQAGAAUABwAG
AAkADgALAA8AAABzAU8AAAAsAlQAAADbAVkAAAA4Al4AAAD0ApgAAACkBNMAAAC3BNgAAADABNwA
AADQBOAAAADZBNwAAADpBOAAAADzBNwAAAAEBdMAAAD6BQsBAAByB9UBAAD6BdUBAACAB9UBAACP
B9MAAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAQATAA8AAQAUABEAAQAVABMA
AQAWABUAAQAXABcAAQAYABkAAgAZABsAAgAhAB0AAQAqAB8AAgApAB8AAQAsACEAAgArACEAAgAt
ACMAAQAuACMAAgAvACUAdQB1AIgADAITAhoCIQIZAyADWAQEgAAAAAAAAAAAAAAAAAAAAAC1AAAA
BAAAAAAAAAAAAAAAAQAKAAAAAAAKAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AAAMA
AAAACwAAAAAAAAAAAAAApgA+AwAAAAALAAAAAAAAAAAAAACmAIwDAAAAAAsAAAAAAAAAAAAAAKYA
iAUAAAAABAAAAAAAAAAAAAAAAQB8AQAAAAALAAAAAAAAAAAAAACmAAgKAAAAAAUABAAGAAQAAAAQ
AAwAggIAABAAGQCCAgAAAAAbAIICLQClAi0AJwMAAAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jv
c29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF8yZTcxNGM2ZGVi
ODM0NmI3OWEzY2QzMTE1NGNmMzAzYS5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZp
Y2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVu
dF8yZTcxNGM2ZGViODM0NmI3OWEzY2QzMTE1NGNmMzAzYQBVc2VyQ29tcG9uZW50AENvbm5lY3Rp
b25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNhdGlv
blNlcnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2
aWNlcwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9Db21wdXRl
ck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVzZXIA
Z2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlXZWJTZXJ2
aWNlc09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBvAEdldEhh
c2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABpbnN0YW5j
ZQBEaXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlzdWFsQmFz
aWMuTXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0SW5zdGFu
Y2UAQ296eVJvYy5TU0lTUGx1cy4yMDEyAENvenlSb2MuU3FsU2VydmVyLlNTSVMAU2NyaXB0QnVm
ZmVyUGx1cwBNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RHRzLlBpcGVsaW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLlBpcGVsaW5l
SG9zdABQaXBlbGluZUJ1ZmZlcgBPdXRwdXROYW1lTWFwAENvbXBvbmVudABPYmplY3RJRABJc0lu
cHV0AEJ1ZmZlcgBPdXRwdXRNYXAAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBzZXRfQWNjdXJhY3kA
VmFsdWUAc2V0X0FjY3VyYWN5X0lzTnVsbABzZXRfTGF0aXR1ZGUAc2V0X0xhdGl0dWRlX0lzTnVs
bABzZXRfTG9uZ2l0dWRlAHNldF9Mb25naXR1ZGVfSXNOdWxsAGdldF9TdGF0aWNPdXRwdXRDb2x1
bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRDb2x1bW5zAEFjY3VyYWN5AEFjY3Vy
YWN5X0lzTnVsbABMYXRpdHVkZQBMYXRpdHVkZV9Jc051bGwATG9uZ2l0dWRlAExvbmdpdHVkZV9J
c051bGwAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1
dABJbnB1dElEAElucHV0TmFtZQBJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0
Um93AFJvdwBQYXJlbnRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3Jh
cABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5lY3Rpb25N
YW5hZ2VyMTAwAGdldF9DYWNoZUZpbGUAQ2FjaGVGaWxlAFF1ZXJ5XzJQAFByZUV4ZWN1dGUAUG9z
dEV4ZWN1dGUAUmVpbml0aWFsaXplTWV0YURhdGEAVmFsaWRhdGUAZXJyTWVzc2FnZQBnZXRfQWRk
cmVzc0NvbHVtbgBzZXRfQWRkcmVzc0NvbHVtbgB2YWx1ZQBzZXRfQ2FjaGVGaWxlAGdldF9BcGlL
ZXlWYXJpYWJsZQBzZXRfQXBpS2V5VmFyaWFibGUAZ2V0X0ZpbGVDb25uZWN0aW9uVHlwZQBTeXN0
ZW0uQ29sbGVjdGlvbnMASGFzaHRhYmxlAExvYWRDYWNoZV8AU3RvcmVDYWNoZV8AY2FjaGUAR2Vv
Q29kZV8AYWRkcmVzcwBtX2FkZHJlc3NDb2x1bW4AbV9jYWNoZUZpbGUAbV9hcGlLZXlWYXJpYWJs
ZQBtX2FkZHJlc3NJbmRleABtX2FwaUtleQBtX2NhY2hlAG1fY2FjaGVNb2RpZmllZABtX2RlbGF5
AEFkZHJlc3NDb2x1bW4AQXBpS2V5VmFyaWFibGUARmlsZUNvbm5lY3Rpb25UeXBlAFN5c3RlbS5D
b21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3Rh
dGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0u
RGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2lj
LkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVB
dHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0
ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVj
dFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVh
dGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVl
AFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmlu
ZwBJbnQzMgBzZXRfSXRlbQBTZXROdWxsAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24ARG91Ymxl
AFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5E
VFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJ
RFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENv
bGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0
X0lEAElEVFNSdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24xMDAAZ2V0X1J1bnRpbWVDb25uZWN0
aW9uQ29sbGVjdGlvbgBJRFRTUnVudGltZUNvbm5lY3Rpb24xMDAAZ2V0X0Nvbm5lY3Rpb25NYW5h
Z2VyAGdldF9CdWZmZXIAQ29udmVyc2lvbnMAVG9JbnRlZ2VyAFRvRG91YmxlAElEVFNWYXJpYWJs
ZXMxMDAAUGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFn
ZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABnZXRf
SW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNJbnB1dENvbHVtbjEwMABnZXRfTGluZWFnZUlEAEZp
bmRDb2x1bW5CeUxpbmVhZ2VJRABJRFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0X1ZhcmlhYmxl
RGlzcGVuc2VyAExvY2tPbmVGb3JSZWFkAElEVFNWYXJpYWJsZTEwMABVbmxvY2sASURUU1ZpcnR1
YWxJbnB1dDEwMABHZXRWaXJ0dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1
bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNWaXJ0
dWFsSW5wdXRDb2x1bW4xMDAARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlwZQBzZXRfQ29ubmVjdGlv
bk1hbmFnZXJJRABFeGNlcHRpb24ASXNOdWxsT3JFbXB0eQBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBB
cmd1bWVudEV4Y2VwdGlvbgBQcm9qZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IAZ2V0X01lc3NhZ2UA
Q2xlYXJQcm9qZWN0RXJyb3IAU3lzdGVtLklPAFN0cmVhbVJlYWRlcgBnZXRfQ29ubmVjdGlvblN0
cmluZwBGaWxlAEV4aXN0cwBSZWFkTGluZQBDaGFyAFNwbGl0AEFkZABnZXRfRW5kT2ZTdHJlYW0A
SURpc3Bvc2FibGUARGlzcG9zZQBnZXRfQ291bnQARm9ybWF0AEVtcHR5AEZpcmVJbmZvcm1hdGlv
bgBTdHJlYW1Xcml0ZXIARGljdGlvbmFyeUVudHJ5AElEaWN0aW9uYXJ5RW51bWVyYXRvcgBDcmVh
dGVUZXh0AEdldEVudW1lcmF0b3IASUVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAZ2V0X0tleQBDb25j
YXQAVGV4dFdyaXRlcgBXcml0ZUxpbmUATW92ZU5leHQAU3lzdGVtLk5ldABXZWJSZXNwb25zZQBD
b250YWlucwBXZWJSZXF1ZXN0AENyZWF0ZQBHZXRSZXNwb25zZQBTdHJlYW0AR2V0UmVzcG9uc2VT
dHJlYW0AT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcARmlyZVdhcm5pbmcAU3lzdGVtLlRocmVhZGlu
ZwBUaHJlYWQAU2xlZXAAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1dGUAQ296
eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAFZhbGlkYXRlUHJvcGVydGllc0F0dHJpYnV0
ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBDb25uZWN0aW9uQXR0cmlidXRlAERlc2NyaXB0aW9u
QXR0cmlidXRlAElucHV0VmlydHVhbENvbHVtbkF0dHJpYnV0ZQBWYXJpYWJsZUF0dHJpYnV0ZQBD
b21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmli
dXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAFNj
cmlwdENvbXBvbmVudF8yZTcxNGM2ZGViODM0NmI3OWEzY2QzMTE1NGNmMzAzYS5kbGwAAAAAgJtJ
AHMATgB1AGwAbAAgAHAAcgBvAHAAZQByAHQAeQAgAGMAYQBuAG4AbwB0ACAAYgBlACAAcwBlAHQA
IAB0AG8AIABGAGEAbABzAGUALgAgAEEAcwBzAGkAZwBuACAAYQAgAHYAYQBsAHUAZQAgAHQAbwAg
AHQAaABlACAAYwBvAGwAdQBtAG4AIABpAG4AcwB0AGUAYQBkAC4AABFBAGMAYwB1AHIAYQBjAHkA
ABFMAGEAdABpAHQAdQBkAGUAABNMAG8AbgBnAGkAdAB1AGQAZQAAC0kAbgBwAHUAdAAAE0MAYQBj
AGgAZQBGAGkAbABlAAAtUwBlAGwAZQBjAHQAIABhAGQAZAByAGUAcwBzACAAYwBvAGwAdQBtAG4A
LgAAMVMAZQBsAGUAYwB0ACAAQQBQAEkAIABrAGUAeQAgAHYAYQByAGkAYQBiAGwAZQAuAABLUwBl
AGwAZQBjAHQAIABjAGEAYwBoAGUAIABmAGkAbABlACAAYwBvAG4AbgBlAGMAdABpAG8AbgAgAG0A
YQBuAGEAZwBlAHIALgAACUYASQBMAEUAAA9HAGUAbwBjAG8AZABlAAA5TABvAGEAZABlAGQAIAB7
ADAAfQAgAGMAYQBjAGgAZQBkACAAYQBkAGQAcgBlAHMAcwBlAHMALgAAA3wAAICbaAB0AHQAcAA6
AC8ALwBtAGEAcABzAC4AZwBvAG8AZwBsAGUALgBjAG8AbQAvAG0AYQBwAHMALwBnAGUAbwA/AG8A
dQB0AHAAdQB0AD0AYwBzAHYAJgBvAGUAPQB1AHQAZgA4ACYAcwBlAG4AcwBvAHIAPQBmAGEAbABz
AGUAJgBrAGUAeQA9AHsAMAB9ACYAcQA9AHsAMQB9AAAHMgAwADAAAAc2ADIAMAAAgJNHAGUAbwBj
AG8AZABlACAAcwBlAHIAdgBpAGMAZQAgAGgAYQBzACAAdABvAG8AIABtAGEAbgB5ACAAcQB1AGUA
cgBpAGUAcwAuACAARABlAGwAYQB5ACAAYgBlAHQAdwBlAGUAbgAgAGMAYQBsAGwAcwAgAGkAcwAg
AGkAbgBjAHIAZQBtAGUAbgB0AGUAZAAuAABXRgBhAGkAbABlAGQAIAB0AG8AIABnAGUAbwBjAG8A
ZABlACAAJwB7ADAAfQAnAC4AIABSAGUAYwBlAGkAdgBlAGQAIABjAG8AZABlADoAIAB7ADEAfQAB
w6yYHaAfnk+zyZ4fP2gHFwAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwE
AAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAAS
FAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgA
EwAIFs9JC7gMNOoIiYRdzYCAzJELIAUBEiEIAhIlEikEIAAdDgQgAQEIBCABAQIEIAEBDQMgAAIE
KAAdDgMoAAgDKAACAygADQMGEiQDBhIoCSAEAQgOEiUSKQUgAQESHAMGEiEFIAEBEiEEIAASMQQo
ABIxAgYOgJpoAHQAdABwADoALwAvAG0AYQBwAHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbQBh
AHAAcwAvAGcAZQBvAD8AbwB1AHQAcAB1AHQAPQBjAHMAdgAmAG8AZQA9AHUAdABmADgAJgBzAGUA
bgBzAG8AcgA9AGYAYQBsAHMAZQAmAGsAZQB5AD0AewAwAH0AJgBxAD0AewAxAH0ABSABAhAOBCAB
AQ4EIAASNQUgAQESNQUgAR0cDgIGCAMGEjUCBgIDKAAOBSABARE9CAEAAQAAAAAABSACAQ4OGAEA
Ck15VGVtcGxhdGUIMTAuMC4wLjAAAAQBAAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQH
ARIMBAcBEggEBwESEQQHARIUEwEADk15LldlYlNlcnZpY2VzAAAQAQALTXkuQ29tcHV0ZXIAABMB
AA5NeS5BcHBsaWNhdGlvbgAADAEAB015LlVzZXIAAAQAARwcAwcBAgMHAQgGAAESFRFZBAcBEhUD
BwEOBRABAB4ABAoBHgAEBwEeAAcgBAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9j
b2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0lu
c3RhbmNlX18AAAAGFRIYARMABhUSGQETAAQKARMABSABARMACAcDEwATABMABQEAAAAABAcBHQ4F
IAIBCBwGBwIdDh0OBSAAEoCBBSAAEoCFBiABEoCJHAUgABKAjQYgARKAkRwEBwESMQQgABIlBCAB
HAgEAAEOHAQAAQgcBAABDRwFBwIOHRwFIAASgJ0FIAASgKEFIAASgKUGIAESgKkcBSACCAgIBSAA
EoCtCCACAQ4QEoCZBiABEoCxHAMgABwIBwISgIkSgJkFIAASgLUFIAASgLkGIAESgL0cByACCAgR
gMEIBwISgIkSgLUEAAECDgYAAQESgMUHBwMCAhKAxQYgAR0OHQMEAAEIDgQAAQ0OBSACARwcBQAC
Dg4cCiAGAQgODg4IEAIRBwgOEjUSNQISgNUdDh0DHRwGAAESgOUOBSAAEoDtAh0cBgADDg4ODhQH
CQ4SgOUOEYDpHBKA7RGA6QgdHAYAAw4OHBwGAAESgP0OBSAAEoD5BSAAEoEBBiABARKBAQYAAwgO
DgIIIAUBCA4ODggEAAEBCAQgARwcEgcHHRwdHB0OEoD5EoDVHQMdHA0BAAhWYWxpZGF0ZQAABSAB
AR0OLwEAAwAAAA1BZGRyZXNzQ29sdW1uDkFwaUtleVZhcmlhYmxlCUNhY2hlRmlsZQAAFwEAEkZp
bGVDb25uZWN0aW9uVHlwZQAALAEAJ1NlbGVjdCBmaWxlIGNvbnRhaW5pbmcgZ2VvY29kaW5nIGNh
Y2hlLgAAGwEAFlNlbGVjdCBhZGRyZXNzIGNvbHVtbi4AADQBAC9TZWxlY3QgdmFyaWFibGUgY29u
dGFpbmluZyBHb29nbGUgTWFwcyBBUEkga2V5LgAACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhj
ZXB0aW9uVGhyb3dzAUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3Jr
RGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAC0UQAAAAAAAAAAAADOUQAAACAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAwFEAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUA
IEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAAGAAAgAAA
AAAAAAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAAAFhgAADsAgAAAAAA
AAAAAADsAjQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAAvQTv/gAAAQAAAAAA
AAAAAAAAAAAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAABAFYAYQByAEYAaQBs
AGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAAALAETAIAAAEA
UwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAKAIAAAEAMAAwADAAMAAwADQAYgAwAAAALAAC
AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAACAAAAAwAAgAAQBGAGkAbABlAFYA
ZQByAHMAaQBvAG4AAAAAADAALgAwAC4AMAAuADAAAACMADUAAQBJAG4AdABlAHIAbgBhAGwATgBh
AG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADcAMQA0AGMANgBkAGUA
YgA4ADMANAA2AGIANwA5AGEAMwBjAGQAMwAxADEANQA0AGMAZgAzADAAMwBhAC4AZABsAGwAAAAA
ACgAAgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAACAAAACUADUAAQBPAHIAaQBnAGkA
bgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAy
AGUANwAxADQAYwA2AGQAZQBiADgAMwA0ADYAYgA3ADkAYQAzAGMAZAAzADEAMQA1ADQAYwBmADMA
MAAzAGEALgBkAGwAbAAAAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMAAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAwAC4A
MAAuADAALgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAAOAxAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property><property id="43" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="45" 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_2e714c6deb8346b79a3cd31154cf303a</property><property id="46" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="48" name="CacheFile" connectionManagerID="{67A3033E-01AA-4535-9800-AA29A857B770}" /></connections><inputs><input id="49" name="Input" hasSideEffects="true"></input></inputs><outputs><output id="51" name="Output" synchronousInputId="49"><outputColumns><outputColumn id="52" name="Accuracy" lineageId="52" dataType="i4" /><outputColumn id="53" name="Latitude" lineageId="53" dataType="r8" /><outputColumn id="54" name="Longitude" lineageId="54" dataType="r8" /></outputColumns><externalMetadataColumns /></output></outputs></component>