<?xml version="1.0"?>
<ScriptProject Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa" VSTAMajorVersion="3" VSTAMinorVersion="0" Language="VisualBasic">
  <ProjectItem Name="ScriptMain.vb" Encoding="UTF8">
<![CDATA[' Microsoft SQL Server Integration Services Script Task
'
' Copyright (c) 2008 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.Collections
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.IO
Imports System.Threading
Imports System.Text
Imports System.Text.RegularExpressions

Imports Microsoft.SqlServer.Dts.Runtime
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "Action", "Find", "Replace", "StartIndex", "ResultVariable", _
    "IsSourceVariable", "SourceVariable", "Source", _
    "IsTargetVariable", "TargetVariable", "Target"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
	Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

	Enum ScriptResults
		Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
		Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
	End Enum

    ' The execution engine calls this method when the task executes.
    ' To access the object model, use the Dts object. Connections, variables, events,
    ' and logging features are available as static members of the Dts class.
    ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
    ' 
    ' To open Code and Text Editor Help, press F1.
    ' To open Object Browser, press Ctrl+Alt+J.


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Main()
        Dim result As Integer
        Dim sourceStream As Stream
        Dim targetStream As Stream
        Dim closeTarget As Boolean

        Try
            sourceStream = GetStream_(Me.Source, Me.IsSourceVariable, False)

            Select Case Me.Action
                Case ActionTypes.Find
                    Call ExecuteFind_(sourceStream)

                Case ActionTypes.FindAndReplace
                    targetStream = GetStream_(Me.Target, Me.IsTargetVariable, True, closeTarget)
                    Call ExecuteFindAndReplace_(sourceStream, targetStream)
            End Select

            result = ScriptResults.Success
        Catch ex As Exception
            result = ScriptResults.Failure
            Call Dts.Events.FireError( _
                0, _
                String.Empty, _
                ex.Message, _
                String.Empty, _
                0)
        Finally
            If Not sourceStream Is Nothing Then
                Call sourceStream.Dispose()
            End If

            If Not targetStream Is Nothing AndAlso closeTarget Then
                ' Close target stream only if FileStream.
                Call targetStream.Dispose()
            End If
        End Try

        Dts.TaskResult = result
    End Sub ' Main


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Base properties.
        Call result.Add("Action")
        Call result.Add("Find")
        Call result.Add("IsSourceVariable")
        Call result.Add(IIf(Me.IsSourceVariable, "SourceVariable", "Source"))

        Select Case Me.Action
            Case ActionTypes.Find
                Call result.Add("StartIndex")
                Call result.Add("ResultVariable")

            Case ActionTypes.FindAndReplace
                Call result.Add("Replace")
                Call result.Add("IsTargetVariable")
                Call result.Add(IIf(Me.IsTargetVariable, "TargetVariable", "Target"))
        End Select

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean
        Dim props As Object()

        Try
            If String.IsNullOrEmpty(Me.Find) Then
                Throw New ApplicationException("Please specify Find.")
            ElseIf String.IsNullOrEmpty(Me.Source) Then
                Throw New ApplicationException("Please specify Source.")
            End If

            Select Case Me.Action
                Case ActionTypes.Find
                    If String.IsNullOrEmpty(Me.ResultVariable) Then
                        Throw New ApplicationException("Please specify ResultVariable.")
                    End If

                Case ActionTypes.FindAndReplace
                    If String.IsNullOrEmpty(Me.Target) Then
                        Throw New ApplicationException("Please specify Target.")
                    End If
            End Select

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select task action.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify the string that will be matched.")> _
    Public Property Find() As String
        Get
            Find = m_find
        End Get
        Set(ByVal value As String)
            m_find = value
        End Set
    End Property    ' Find


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify what will be inserted in the place of the matched string.")> _
    Public Property Replace() As String
        Get
            Replace = m_replace
        End Get
        Set(ByVal value As String)
            m_replace = value
        End Set
    End Property    ' Replace


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify offset from where to start the search.")> _
    Public Property StartIndex() As Long
        Get
            StartIndex = m_startIndex
        End Get
        Set(ByVal value As Long)
            m_startIndex = value
        End Set
    End Property    ' StartIndex


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specifies package variable where you would like to store find index.")> _
    <Variable()> _
    Public Property ResultVariable() As String
        Get
            ResultVariable = m_resultVariable
        End Get
        Set(ByVal value As String)
            m_resultVariable = value
        End Set
    End Property    ' ResultVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies if Source property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsSourceVariable() As Boolean
        Get
            IsSourceVariable = m_isSourceVar
        End Get
        Set(ByVal value As Boolean)
            If m_isSourceVar <> value Then
                m_isSourceVar = value
                m_source = String.Empty
            End If
        End Set
    End Property    ' IsSourceVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies variable containing source to search.")> _
    <Variable()> _
    Public Property SourceVariable() As String
        Get
            SourceVariable = m_source
        End Get
        Set(ByVal value As String)
            m_source = value
        End Set
    End Property    ' SourceVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Source")> _
    <Description("Specifies source to search.")> _
    <Connection("FileConnectionType")> _
    Public Property Source() As String
        Get
            Source = m_source
        End Get
        Set(ByVal value As String)
            m_source = value
        End Set
    End Property    ' Source


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies if Target property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsTargetVariable() As Boolean
        Get
            IsTargetVariable = m_isTargetVar
        End Get
        Set(ByVal value As Boolean)
            If m_isTargetVar <> value Then
                m_isTargetVar = value
                m_target = String.Empty
            End If
        End Set
    End Property    ' IsTargetVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies variable containing target to store result.")> _
    <Variable()> _
    Public Property TargetVariable() As String
        Get
            TargetVariable = m_target
        End Get
        Set(ByVal value As String)
            m_target = value
        End Set
    End Property    ' TargetVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Target")> _
    <Description("Specifies target to store result.")> _
    <Connection("FileConnectionType")> _
    Public Property Target() As String
        Get
            Target = m_target
        End Get
        Set(ByVal value As String)
            m_target = value
        End Set
    End Property    ' Target
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Searches stream for match. Returns result in ResultVariable.
    Private Sub ExecuteFind_(ByVal sourceStream As Stream)
        Dim result As Long
        Dim findBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Find))
        Dim findLen As Integer = findBytes.Length
        Dim buf() As Byte = New Byte(findLen - 1) {}
        Dim vars As Variables
        Dim bytesRead As Integer

        ' Advance to start index.
        result = 0
        Do While result < Me.StartIndex
            If sourceStream.Read(buf, 0, 1) = 0 Then
                Exit Do
            End If

            result += 1
        Loop

        ' Search for match.
        result -= findLen

        Do While Not ArrayEquals_(buf, findBytes)
            Call Array.Copy(buf, 1, buf, 0, findLen - 1)
            bytesRead = sourceStream.Read(buf, findLen - 1, 1)
            If bytesRead = 0 Then
                ' Reached end of stream and still no match.
                result = -1
                Exit Do
            End If

            result += 1
        Loop

        ' Store result index in package variable.
        Call Dts.VariableDispenser.LockOneForWrite(Me.ResultVariable, vars)
        Try
            vars(Me.ResultVariable).Value = result
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' ExecuteFind_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Find and replace, storing result in target stream.
    Private Sub ExecuteFindAndReplace_( _
        ByVal sourceStream As Stream, _
        ByVal targetStream As Stream)

        Dim findBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Find))
        Dim findLen As Integer = findBytes.Length
        Dim repBytes() As Byte = Encoding.UTF8.GetBytes(Regex.Unescape(Me.Replace))
        Dim repLen As Integer = repBytes.Length
        Dim buf() As Byte = New Byte(findLen - 1) {}
        Dim bytesRead As Integer

        bytesRead = sourceStream.Read(buf, 0, findLen)

        Do While True
            If ArrayEquals_(buf, findBytes) Then
                ' Found match. Replace with specified combination.
                Call targetStream.Write(repBytes, 0, repLen)
                bytesRead = sourceStream.Read(buf, 0, findLen)
            Else
                Call targetStream.Write(buf, 0, 1)
                Call Array.Copy(buf, 1, buf, 0, findLen - 1)
                bytesRead = findLen - 1 + sourceStream.Read(buf, findLen - 1, 1)
            End If

            If bytesRead <> findLen Then
                ' Reached end of stream.
                Call targetStream.Write(buf, 0, bytesRead)
                Call targetStream.Flush()
                Exit Do
            End If
        Loop
    End Sub ' ExecuteFindAndReplace_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property FileConnectionType() As String()
        Get
            FileConnectionType = New String() {"FILE"}
        End Get
    End Property    ' FileConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get Stream to source.
    Private Function GetStream_( _
        ByVal input As String, _
        ByVal isVar As Boolean, _
        ByVal create As Boolean, _
        Optional ByRef hasToClose As Boolean = False) As Stream

        Dim result As Stream
        Dim vars As Variables
        Dim inputVar As Variable
        Dim fileName As String
        Dim manager As ConnectionManager

        If isVar Then
            ' User selected variable.
            Call Dts.VariableDispenser.LockOneForRead(input, vars)
            Try
                inputVar = vars(Me.Source)

                If inputVar.DataType = TypeCode.String Then
                    ' Variable references file name.
                    fileName = inputVar.Value.ToString()
                Else
                    ' Variable references a stream ?

                    ' Wait until input Stream is setup, polling every second.
                    Do While inputVar.Value.GetType() Is GetType(Object)
                        Call vars.Unlock()
                        Call Thread.Sleep(1000)
                        Call Dts.VariableDispenser.LockOneForRead(input, vars)
                        inputVar = vars(Me.Source)
                    Loop

                    result = CType(inputVar.Value, Stream)
                End If
            Finally
                Call vars.Unlock()
            End Try
        Else
            ' User selected file connection.
            manager = Dts.Connections(input)
            fileName = manager.AcquireConnection(Nothing).ToString()
        End If

        If Not String.IsNullOrEmpty(fileName) Then
            ' Input is file name.
            If create Then
                result = File.Create(fileName)
                hasToClose = True
            ElseIf File.Exists(fileName) Then
                result = File.OpenRead(fileName)
            End If
        End If

        GetStream_ = result
    End Function    ' GetStream_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Compares 2 arrays, returning true if they match.
    Private Function ArrayEquals_(Of T As IEquatable(Of T))(ByVal a As T(), ByVal b As T()) As Boolean
        Dim result As Boolean
        Dim comparer As EqualityComparer(Of T) = EqualityComparer(Of T).Default
        Dim item As Integer

        If a.Length = b.Length Then
            result = True

            For item = 0 To a.Length - 1
                If Not comparer.Equals(a(item), b(item)) Then
                    ' Doesn't match.
                    result = False
                    Exit For
                End If
            Next
        End If

        ArrayEquals_ = result
    End Function    ' ArrayEquals_
#End Region ' Internals


#Region "Attributes"
    Enum ActionTypes
        Find
        FindAndReplace
    End Enum    ' ActionTypes


    Private m_action As ActionTypes
    Private m_find As String
    Private m_replace As String
    Private m_startIndex As Long
    Private m_resultVariable As String
    Private m_isSourceVar As Boolean
    Private m_source As String
    Private m_isTargetVar As Boolean
    Private m_target As String
#End Region ' Attributes
End Class   ' ScriptMain]]></ProjectItem>
  <ProjectItem Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.vbproj" Encoding="UTF16LE">
<![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>{FE5436D3-D277-4103-81BA-0621F6F6AB4D}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</RootNamespace>
    <AssemblyName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.ScriptTask, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <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" />
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="ScriptTask" />
        <ProjectClient>
          <HostIdentifier>SSIS_ST120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></ProjectItem>
  <ProjectItem Name="Project" Encoding="UTF16LE">
<![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</msb:CodeName>
		<msb:DisplayName>ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa</msb:DisplayName>
		<msb:ProjectId>{9F50A2DE-68F1-4FF8-BA1A-C5187EB01374}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
	</msb:ItemGroup>
</c:Project>]]></ProjectItem>
  <BinaryItem Name="ScriptTask_9388f3b5ea514487afe50c1a2dc6b5fa.dll">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
gZoACAAAAAATMAQAQgAAAB4AABEoRQAACgsDjrcEjrczMBcNFgOOtxfaEwQMKx4HAwijBAAAGwQI
owQAABtvRgAACi0EFg0rCQgX1gwIEQQx3QkKBioAAEJTSkIBAAEAAAAAAAwAAAB2NC4wLjMwMzE5
AAAAAAUAbAAAAPgLAAAjfgAAZAwAAHANAAAjU3RyaW5ncwAAAADUGQAAyAEAACNVUwCcGwAAEAAA
ACNHVUlEAAAArBsAAHQHAAAjQmxvYgAAAAAAAAACAAABVx2iCQkeAAAA+iUzABYAAAEAAAA7AAAA
CQAAABQAAAAvAAAAGAAAAFMAAAAFAAAASgAAAB4AAAADAAAAEQAAABwAAAANAAAAAQAAAAYAAAAE
AAAABAAAAAMAAAABAAAAAAA9DQEAAAAAAAoAHwH1AAoAUwE1AQYAYwFcAQoAuwH1AAYAOQJcAQoA
uwKRAg4AKAP/AgYAywTBBAYAXQVcAQYAYwZcARIApQaPBhIAvgaPBhIA6wbTBgYAFQcCBwoAVAct
BwoAbAcTABIAoQeEBwYA1ge2BwYA9AdcAQYAGAhcAQoAMQgTAAYAfwhgCAYAkwhcAQoAnQgtBw4A
uQj/Ag4A0wj/AgYA8ghcAQYAUQk+CQoAXwkTAAYAbwlcAQYAiwlcARYA3wm/CQYA9QnpCRIAJgoH
CgYAPgpcARYATQq/CRYAhQq/CQYAlwpcARYAsAq/CQYA0QpcAQYA+ArnChYABQu/CQYAMwvBBAYA
OAvBBAYAdQtaCwYAlAtcAQ4Aqgv/AhoABAziCxoAIAziCxoAOgziCxoAUgziCxIAZAyPBhIAeQyP
BhoAiwziCxIAnwyPBhIAugyPBgYAzAy2BwYA7Ay2BwYAJA0KDQAAAAABAAAAAAABAAEAAAAAACkA
NwAFAAEAAQAAAAAAZgA3AAkAAQACAAABEABxADcADQABAAMABQEAAHsAAAANAAUACAAFAQAAiQAA
AA0ABQAPAAEAAACkAK8AHQAGABEAAgEAANsAAAApAA8AMAACAQAA6QAAACkAEgAwADEAfgEgADEA
pwEtADEAyQE6ADEA7gFHACEAygKQAAEAbgX/AAEAdwUDAQEAfgUDAQEAiAUGAQEAlQUDAQEApgUJ
AQEAtAUDAQEAvQUJAQEAywUDAQYGaAYiAVaAcAYlAVaAeAYlAQYGaAYiAVaA2wX/AFaAgAb/AFAg
AAAAAAYYLwETAAEAWCAAAAAABhgvARMAAQBgIAAAAAARGGoBFwABAIwgAAAAABMIcQEbAAEApCAA
AAAAEwiXASgAAQC8IAAAAAATCMABNQABANQgAAAAABMI3gFCAAEA7CAAAAAARgIkAmMAAQAIIQAA
AABGAi0CaAACABwhAAAAAIMAPgJsAAIANCEAAAAARgJGAnEAAgBIIQAAAAARAE8CeAACAGQhAAAA
AAEAbQKAAAMAgCEAAAAABhgvARMABACIIQAAAAADCIECiwAEALwhAAAAAAYYLwETAAQA0CEAAAAA
BhgvARMABADYIQAAAAAGAEQDEwAEALQiAAAAAAYASQOmAAQAjCMAAAAABgBXA6sABABAJAAAAAAG
CGsDsQAFAFgkAAAAAAYIdgO2AAUAZCQAAAAABgiHA3EABgB8JAAAAAAGCJADvAAGAIgkAAAAAAYI
mQNxAAcAoCQAAAAABgilA7wABwCsJAAAAAAGCLEDwQAIAMQkAAAAAAYIwAPFAAgA0CQAAAAABgjP
A3EACQDoJAAAAAAGCOIDvAAJAPQkAAAAAAYI9QPKAAoADCUAAAAABggKBM4ACgAsJQAAAAAGCB8E
cQALAEQlAAAAAAYIMgS8AAsAUCUAAAAABghFBHEADABoJQAAAAAGCFAEvAAMAHQlAAAAAAYIWwTK
AA0AjCUAAAAABghwBM4ADQCsJQAAAAAGCIUEcQAOAMQlAAAAAAYImAS8AA4A0CUAAAAABgirBHEA
DwDoJQAAAAAGCLYEvAAPAPQlAAAAAAEA0gTTABAA0CYAAAAAAQDsBNkAEQCIJwAAAAABCBAFpgAT
AKgnAAAAAAEAJwXhABMAuCgAAAAAAQBQBe0AFwAAAAEAKwIAAAEAZAIAAAEAZAIAAAEAYAMAAAEA
gQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMAAAEAgQMA
AAEAgQMAAAEA3wQAAAEA3wQAAAIAAwUAAAEAMgUAAAIAOAUAAAMAPgUQEAQARQUAAAEAagUAAAIA
bAUJAC8BEwBZAC8BMwFpAC8BQgERAC8BEwBxAC8BEwA0AC8BEwA8AC8BEwBEAC8BEwBMAC8BEwA0
AIECiwA8AIECiwBEAIECiwBMAIECiwB5AC8BEwCBAC8BEwCJAC8BvACRAOUH1wEZACQCYwAZAC0C
aAApAAYI5AEZAEYCcQChACII9AEZAC8BEwCpAC8BBAJUAMoCkABcAEwIiwBcAFYIgQJcAC8BEwCx
AC8BzgA5AC8BEwDBAKkIlgI5AMsInALJAOcIoQLZAPkIAwG5AP8IcQDRAAsJpgLBABUJFwBBACcJ
EwDJAC8JrwLhAC8BEwDhAFsJwgLpAGsJxwLhAHUJzgLZAH0J4QL5AC8BvAAJAf4J+gIRASwKAAMJ
ATUKBQNBAEMKCwPxAEgKEwPJAF8KIgMhAXUKKAMBAY4KMQMpAVYIOAMBAZ0KEwBBAKQKSgNBAKoK
EwAhAcIKKAMpAdoKZQMpAUwIawNJAf8KbwMZAD4CbADJABELdANRAY4KegM5ASELgQNZAUMLhgNZ
AUoL4QJZAVELhgNsAIgLpgNsACQCsANxAS8BzgB5AS8BEwCBAS8BvACJAS8BvACRAS8B8AOZAS8B
EwChAS8BvACpAS8BvACxAS8BvAC5AS8B2wXJAS8BrwLRAS8BEwDZAS8BvAAIAEAAKQEIAEQALgEI
AEwAKQEIAFAALgECAFkA6wApAIMAkQEuAIsCAwcuAJMCDAcuAJsCKwdAACsALgFAABMAOQFDABsA
SAFDABMAOQFJAIMArwFjABMAOQFjABsASAFpAIMAogGAACsALgGDABsASAGDAHsALgGDAHMALgGJ
AIMAwwGgACsALgGjAMMADAKjABMAOQHAACsALgHDAOsAkALDABMAOQHJAIMCOQHJAHMCxgTJAGsC
4gXgACsALgHjADsCkALjAFMC3QPjAEMCLgHjAEsCzwPjAFsC9gPpAGsClgbpAHMCxgQAARMAOQEA
ASsALgEJAWsCHwUJAXMCxgQgARMAOQEgASsALgEpAXMCxgQpAWsCZgVAASsALgFAARMAOQFJAXMC
xgRJAWsCfARJAWMCLgFgARMAOQFgASsALgFpAWsCVwZpAXMCzwVpAYMCOQGAASsALgGJAXMCzwWJ
AWsCmgWJAWMCLgGgASsALgGpAXsC1ASpAWsCNgapAXMCzwXAASsALgHAARMAOQHJAYMCOQHJAXMC
EwXJAWsCxAbgASsALgHpAWMCLgHpAWsC+wXpAXMCEwUAAisALgEAAhMAOQEJAnMCEwUJAnsC1AQJ
AmsC7AR9AYIBhwGMAdwB4AHrAfAB/wH/AYcCtALYAuYC8QLwAfAB9gLwAdwB8AHwAdwB8AHwAT0D
UgNeA40DuAMEAAEABgAFAAcABgAAAFMBTwAAAAwCVAAAALsBWQAAABgCXgAAANQCmAAAANQFDAEA
ANsFEQEAAOAFEQEAAOgFFQEAAPMFEQEAAAIGGQEAABMGEQEAACIGEQEAACkGGQEAADoGEQEAAEkG
EQEAAFAGHQECAAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwABABYADQACABUADQACABcADwAB
ABgADwACABkAEQABABoAEQACABsAEwABABwAEwACAB0AFQABAB4AFQABACAAFwACAB8AFwACACEA
GQABACIAGQABACQAGwACACMAGwACACUAHQABACYAHQACACcAHwABACgAHwACACkAIQABACoAIQAC
AC0AIwB1AHUAiAB1APgAYQFoAW8BdgFuAnUC1QKeAwSAAAAAAAAAAAAAAAAAAAAAAK8AAAAEAAAA
AAAAAAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAADAAAAAAAAAAAAAAAnQDgAgAAAAAE
AAAAAAAAAAAAAAABAFwBAAAAAAwAAAAAAAAAAAAAAJ0AoAkAAAAAAQAAAAAAAAAAAAAAxgPMCwAA
AAAFAAQABgAEAAgABwAJAAcAAAAQAAwAYgIAABAAGQBiAgAAAAAbAGICAAAAAF8AYgItAPoBLQB8
Al4AHgMEABYAAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZpc3VhbEJhc2ljAE15QXBw
bGljYXRpb24AU2NyaXB0VGFza185Mzg4ZjNiNWVhNTE0NDg3YWZlNTBjMWEyZGM2YjVmYS5NeQBN
eUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRl
cmAxAFNjcmlwdE1haW4AU2NyaXB0VGFza185Mzg4ZjNiNWVhNTE0NDg3YWZlNTBjMWEyZGM2YjVm
YQBTY3JpcHRSZXN1bHRzAEFjdGlvblR5cGVzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNh
dGlvblNlcnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
RGV2aWNlcwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9Db21w
dXRlck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVz
ZXIAZ2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlXZWJT
ZXJ2aWNlc09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBvAEdl
dEhhc2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABpbnN0
YW5jZQBEaXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlzdWFs
QmFzaWMuTXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0SW5z
dGFuY2UATWljcm9zb2Z0LlNxbFNlcnZlci5TY3JpcHRUYXNrAE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RHRzLlRhc2tzLlNjcmlwdFRhc2sAVlNUQVJUU2NyaXB0T2JqZWN0TW9kZWxCYXNlAE1haW4AR2V0
UHJvcGVydGllcwBWYWxpZGF0ZQBlcnJNZXNzYWdlAGdldF9BY3Rpb24Ac2V0X0FjdGlvbgB2YWx1
ZQBnZXRfRmluZABzZXRfRmluZABnZXRfUmVwbGFjZQBzZXRfUmVwbGFjZQBnZXRfU3RhcnRJbmRl
eABzZXRfU3RhcnRJbmRleABnZXRfUmVzdWx0VmFyaWFibGUAc2V0X1Jlc3VsdFZhcmlhYmxlAGdl
dF9Jc1NvdXJjZVZhcmlhYmxlAHNldF9Jc1NvdXJjZVZhcmlhYmxlAGdldF9Tb3VyY2VWYXJpYWJs
ZQBzZXRfU291cmNlVmFyaWFibGUAZ2V0X1NvdXJjZQBzZXRfU291cmNlAGdldF9Jc1RhcmdldFZh
cmlhYmxlAHNldF9Jc1RhcmdldFZhcmlhYmxlAGdldF9UYXJnZXRWYXJpYWJsZQBzZXRfVGFyZ2V0
VmFyaWFibGUAZ2V0X1RhcmdldABzZXRfVGFyZ2V0AFN5c3RlbS5JTwBTdHJlYW0ARXhlY3V0ZUZp
bmRfAHNvdXJjZVN0cmVhbQBFeGVjdXRlRmluZEFuZFJlcGxhY2VfAHRhcmdldFN0cmVhbQBnZXRf
RmlsZUNvbm5lY3Rpb25UeXBlAEdldFN0cmVhbV8AaW5wdXQAaXNWYXIAY3JlYXRlAGhhc1RvQ2xv
c2UAQXJyYXlFcXVhbHNfAElFcXVhdGFibGVgMQBhAGIAbV9hY3Rpb24AbV9maW5kAG1fcmVwbGFj
ZQBtX3N0YXJ0SW5kZXgAbV9yZXN1bHRWYXJpYWJsZQBtX2lzU291cmNlVmFyAG1fc291cmNlAG1f
aXNUYXJnZXRWYXIAbV90YXJnZXQAQWN0aW9uAEZpbmQAUmVwbGFjZQBTdGFydEluZGV4AFJlc3Vs
dFZhcmlhYmxlAElzU291cmNlVmFyaWFibGUAU291cmNlVmFyaWFibGUAU291cmNlAElzVGFyZ2V0
VmFyaWFibGUAVGFyZ2V0VmFyaWFibGUAVGFyZ2V0AEZpbGVDb25uZWN0aW9uVHlwZQBFbnVtAHZh
bHVlX18AU3VjY2VzcwBGYWlsdXJlAEZpbmRBbmRSZXBsYWNlAFN5c3RlbS5Db21wb25lbnRNb2Rl
bABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNv
ZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MA
RGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2Vy
dmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lz
dGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVu
dGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRp
bWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBN
eUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50
aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAEV4Y2VwdGlvbgBQcm9qZWN0
RGF0YQBTZXRQcm9qZWN0RXJyb3IAU2NyaXB0T2JqZWN0TW9kZWwAZ2V0X0R0cwBFdmVudHNPYmpl
Y3RXcmFwcGVyAGdldF9FdmVudHMAU3RyaW5nAEVtcHR5AGdldF9NZXNzYWdlAEZpcmVFcnJvcgBD
bGVhclByb2plY3RFcnJvcgBEaXNwb3NlAHNldF9UYXNrUmVzdWx0AFN5c3RlbS5Db2xsZWN0aW9u
cwBBcnJheUxpc3QAQWRkAEludGVyYWN0aW9uAElJZgBBcnJheQBUb0FycmF5AElzTnVsbE9yRW1w
dHkAQXBwbGljYXRpb25FeGNlcHRpb24ATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAVmFyaWFibGVzAFN5c3RlbS5UZXh0AEVuY29k
aW5nAGdldF9VVEY4AFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucwBSZWdleABVbmVzY2Fw
ZQBHZXRCeXRlcwBCeXRlAFJlYWQAQ29weQBWYXJpYWJsZURpc3BlbnNlcgBnZXRfVmFyaWFibGVE
aXNwZW5zZXIATG9ja09uZUZvcldyaXRlAFZhcmlhYmxlAGdldF9JdGVtAEludDY0AFVubG9jawBX
cml0ZQBGbHVzaABDb25uZWN0aW9uTWFuYWdlcgBMb2NrT25lRm9yUmVhZABUeXBlQ29kZQBnZXRf
RGF0YVR5cGUAU3lzdGVtLlRocmVhZGluZwBUaHJlYWQAU2xlZXAAQ29ubmVjdGlvbnMAZ2V0X0Nv
bm5lY3Rpb25zAEFjcXVpcmVDb25uZWN0aW9uAEZpbGUARmlsZVN0cmVhbQBDcmVhdGUARXhpc3Rz
AE9wZW5SZWFkAFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljAEVxdWFsaXR5Q29tcGFyZXJgMQBn
ZXRfRGVmYXVsdABDTFNDb21wbGlhbnRBdHRyaWJ1dGUAU1NJU1NjcmlwdFRhc2tFbnRyeVBvaW50
QXR0cmlidXRlAENvenlSb2MuU1NJU1BsdXMuMjAxNABDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0
dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAEZpbHRlclByb3BlcnRpZXNBdHRy
aWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUAVmFyaWFibGVBdHRyaWJ1dGUARGVzY3JpcHRp
b25BdHRyaWJ1dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUAQ29ubmVjdGlvbkF0dHJpYnV0ZQBSZWZyZXNo
UHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBDb21waWxhdGlvblJlbGF4YXRp
b25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1l
LlZlcnNpb25pbmcAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAFNjcmlwdFRhc2tfOTM4OGYzYjVl
YTUxNDQ4N2FmZTUwYzFhMmRjNmI1ZmEuZGxsAAAAAAANQQBjAHQAaQBvAG4AAAlGAGkAbgBkAAAh
SQBzAFMAbwB1AHIAYwBlAFYAYQByAGkAYQBiAGwAZQAAHVMAbwB1AHIAYwBlAFYAYQByAGkAYQBi
AGwAZQAADVMAbwB1AHIAYwBlAAAVUwB0AGEAcgB0AEkAbgBkAGUAeAAAHVIAZQBzAHUAbAB0AFYA
YQByAGkAYQBiAGwAZQAAD1IAZQBwAGwAYQBjAGUAACFJAHMAVABhAHIAZwBlAHQAVgBhAHIAaQBh
AGIAbABlAAAdVABhAHIAZwBlAHQAVgBhAHIAaQBhAGIAbABlAAANVABhAHIAZwBlAHQAAClQAGwA
ZQBhAHMAZQAgAHMAcABlAGMAaQBmAHkAIABGAGkAbgBkAC4AAC1QAGwAZQBhAHMAZQAgAHMAcABl
AGMAaQBmAHkAIABTAG8AdQByAGMAZQAuAAA9UABsAGUAYQBzAGUAIABzAHAAZQBjAGkAZgB5ACAA
UgBlAHMAdQBsAHQAVgBhAHIAaQBhAGIAbABlAC4AAC1QAGwAZQBhAHMAZQAgAHMAcABlAGMAaQBm
AHkAIABUAGEAcgBnAGUAdAAuAAAJRgBJAEwARQAAAA6DbzHjIPhJkBlefQmn2EUACLd6XFYZNOCJ
CLA/X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEE
AAASFAcGFRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEB
HgAeAAcwAQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACImEXc2AgMyRBCAAHQ4FIAECEA4EIAAR
JAUgAQERJAQgAQEOAyAACgQgAQEKAyAAAgQgAQECBSABARIhByACARIhEiEJIAQSIQ4CAhACAQAK
MAECAh0eAB0eAAYVEiUBHgADBhEkAgYOAgYKAgYCBCgAESQDKAAOAygACgMoAAIEKAAdDgIGCAMG
ESAEAAAAAAQBAAAABSABARExCAEAAQAAAAAABSACAQ4OGAEACk15VGVtcGxhdGUIMTAuMC4wLjAA
AAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBABAAtNeS5D
b21wdXRlcgAADAEAB015LlVzZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAAEwEADk15LldlYlNlcnZp
Y2VzAAAEAAEcHAMHAQIDBwEIBgABEhURTQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4O
DmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29s
EkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAE
CgETAAUgAQETAAgHAxMAEwATAAUBAAAAAAUAAQESXQQgABJlBCAAEmkIIAUCCA4ODggEIAEBCA0H
BwIIEiESIRJdAhEkBCABCBwGAAMcAhwcBiABEnkSFQIdDggHAx0OEnERJAQAAQIOCgcFHRwCAhJd
ESQEBwERJAMHAQoFAAASgIUEAAEODgUgAR0FDgcgAwgdBQgICgAFARJ5CBJ5CAgDCgEFBSAAEoCR
CCACAQ4QEoCBBiABEoCVHAQgAQEcDAcGHQUIHQUIChKAgQcgAwEdBQgICwcGHQUIHQUIHQUIBgcC
HQ4dDgUgABGAoQMgABwEAAEBCAUgABKAqQYgARKAnRwEIAEcHAYAARKAsQ4QBwYOEiESgJUSgJ0S
IRKAgQcVEoC1AR4ACQAAFRKAtQETAAcgAgITABMADQcFAhUSgLUBHgAIAggIFs9JC7gMNOoNAQAI
VmFsaWRhdGUAABIBAA1HZXRQcm9wZXJ0aWVzAAAFIAEBHQ6AhAEACwAAAAZBY3Rpb24ERmluZAdS
ZXBsYWNlClN0YXJ0SW5kZXgOUmVzdWx0VmFyaWFibGUQSXNTb3VyY2VWYXJpYWJsZQ5Tb3VyY2VW
YXJpYWJsZQZTb3VyY2UQSXNUYXJnZXRWYXJpYWJsZQ5UYXJnZXRWYXJpYWJsZQZUYXJnZXQAAEkB
AERTcGVjaWZpZXMgcGFja2FnZSB2YXJpYWJsZSB3aGVyZSB5b3Ugd291bGQgbGlrZSB0byBzdG9y
ZSBmaW5kIGluZGV4LgAADQEACFNldHRpbmdzAAAXAQASRmlsZUNvbm5lY3Rpb25UeXBlAAAmAQAh
U3BlY2lmaWVzIHRhcmdldCB0byBzdG9yZSByZXN1bHQuAAALAQAGVGFyZ2V0AABGAQBBU3BlY2lm
eSB3aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIHBsYWNlIG9mIHRoZSBtYXRjaGVkIHN0cmlu
Zy4AADMBAC5TcGVjaWZ5IG9mZnNldCBmcm9tIHdoZXJlIHRvIHN0YXJ0IHRoZSBzZWFyY2guAAA0
AQAvU3BlY2lmaWVzIHZhcmlhYmxlIGNvbnRhaW5pbmcgc291cmNlIHRvIHNlYXJjaC4AAAsBAAZT
b3VyY2UAAAYgAQERgOEYAQATU2VsZWN0IHRhc2sgYWN0aW9uLgAAOgEANVNwZWNpZmllcyB2YXJp
YWJsZSBjb250YWluaW5nIHRhcmdldCB0byBzdG9yZSByZXN1bHQuAAAgAQAbU3BlY2lmaWVzIHNv
dXJjZSB0byBzZWFyY2guAAA+AQA5U3BlY2lmaWVzIGlmIFNvdXJjZSBwcm9wZXJ0eSByZWZlcmVu
Y2VzIHBhY2thZ2UgdmFyaWFibGUuAAAtAQAoU3BlY2lmeSB0aGUgc3RyaW5nIHRoYXQgd2lsbCBi
ZSBtYXRjaGVkLgAAPgEAOVNwZWNpZmllcyBpZiBUYXJnZXQgcHJvcGVydHkgcmVmZXJlbmNlcyBw
YWNrYWdlIHZhcmlhYmxlLgAACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dz
AUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUQ
Lk5FVCBGcmFtZXdvcmsgNABQTAAAAAAAAAAAAABuTAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
YEwAAAAAAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACAAEAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACA
AAAAAAAAAAAAAAAAAAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWGAAANQCAAAA
AAAAAAAAANQCNAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAA
AAAAAAAAAAAAAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBp
AGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsAQ0AgAA
AQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAAAQAgAAAQAwADAAMAAwADAANABiADAAAAAs
AAIAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAIAAAADAACAABAEYAaQBsAGUA
VgBlAHIAcwBpAG8AbgAAAAAAMAAuADAALgAwAC4AMAAAAIAAMAABAEkAbgB0AGUAcgBuAGEAbABO
AGEAbQBlAAAAUwBjAHIAaQBwAHQAVABhAHMAawBfADkAMwA4ADgAZgAzAGIANQBlAGEANQAxADQA
NAA4ADcAYQBmAGUANQAwAGMAMQBhADIAZABjADYAYgA1AGYAYQAuAGQAbABsAAAAKAACAAEATABl
AGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAIAAAAIgAMAABAE8AcgBpAGcAaQBuAGEAbABGAGkA
bABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABUAGEAcwBrAF8AOQAzADgAOABmADMAYgA1AGUAYQA1
ADEANAA0ADgANwBhAGYAZQA1ADAAYwAxAGEAMgBkAGMANgBiADUAZgBhAC4AZABsAGwAAAA0AAgA
AQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAwAC4AMAAuADAALgAwAAAAOAAIAAEAQQBz
AHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAuADAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAMAAAAgDwAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</BinaryItem>
</ScriptProject>