Functions/Get-IntuneWinPackage.psm1

function Get-IntuneWinPackage {
  #Parameters
  [cmdletbinding()]
  param (
      [String]$AppId,
      [String]$Path
  )
  if (!$AppId){
      $AppId = Read-Host "-> App ID"
  }
  if (!$Path){
    $Path = Read-Host "-> Download Path"
  }

  Write-Host -NoNewLine -f Magenta "[Pending] -> Check for updates..."

  $version = (Get-Module -ListAvailable IntuneWinPackage) | Sort-Object Version -Descending  | Select-Object Version -First 1
  $psgalleryversion = Find-Module -Name IntuneWinPackage | Sort-Object Version -Descending | Select-Object Version -First 1
  $stringver = $version | Select-Object @{n='ModuleVersion'; e={$_.Version -as [string]}}
  $a = $stringver | Select-Object Moduleversion -ExpandProperty Moduleversion
  $onlinever = $psgalleryversion | Select-Object @{n='OnlineVersion'; e={$_.Version -as [string]}}
  $b = $onlinever | Select-Object OnlineVersion -ExpandProperty OnlineVersion
  if ([version]"$a" -ge [version]"$b") {
    Write-Host -f DarkGreen "`r[Done] -> Check for updates "
  }
  else {
    Write-Host -f Yellow "`r[Warning] -> This PowerShell module is out of date! Please run Update-Module IntuneWinPackage in a PowerShell session with elevated rights."
    break
  }

  Write-Host -NoNewLine -f Magenta "[Pending] -> Checking parameters..."
  try {
      $directoryInfo = Get-ChildItem $Path | Measure-Object
      if (!$directoryInfo.count -eq 0){
        Write-Host -f Yellow "`r[Warning] -> You path must be empty! "
        break
      }
    }
  catch {
    Write-Host -f Red "`r[Failed] -> Please enter a valid path! "
    break
  }
  Write-Host -f DarkGreen "`r[Done] -> Checking parameters "

  # Set Var
  $temp = $env:TEMP
  $LocalAppdata = $env:LOCALAPPDATA

  Write-Host -NoNewLine -f Magenta "[Pending] -> Checking 7-Zip installation..."
  #Checks
  if (!(Test-Path -Path "C:\Program Files\7-Zip\7z.exe")){
    Write-Host -f Red "`r[Failed] -> No 7-Zip installation detected! "
    Break
  }
  Write-Host -f DarkGreen "`r[Done] -> Checking 7-Zip installation "
  Write-Host -NoNewLine -f Magenta "[Pending] -> Checking config file"
  if (!(Test-Path -Path "$LocalAppdata/IntuneWinPackage/config.json")){
    New-Item -ItemType Directory -Force -Path "$LocalAppdat/IntuneWinPackage" | Out-Null
    New-Item -Path "$LocalAppdata/IntuneWinPackage" -Name "config.json" -Value '{"SASToken": ""}' -Force | Out-Null
  }

  #Config
  $configJSON = Get-Content -Path "$LocalAppdata/IntuneWinPackage/config.json" -raw
  $configPS = ConvertFrom-Json $configJSON

  if(!$configPS.SASToken){
    Write-Host -f Yellow "`r[Warning] -> No SAS Token set! "
    $configPS.SASToken = Read-Host "SAS Token: "
    $configJSON = ConvertTo-Json -depth 32 $configPS
    $configJSON | Out-File "$LocalAppdata/IntuneWinPackage/config.json"
  }
  Write-Host -f DarkGreen "`r[Done] -> Checking config file "

  #Set Alias
  set-alias sz "C:\Program Files\7-Zip\7z.exe"

  $TableHeader = @{
      'Accept' = 'application/json;odata=nometadata'
      }
  $TableURL = "https://widstwaas001.table.core.windows.net/IntuneUploadTable(RowKey='"+$AppId+"',PartitionKey='IntuneWin')"+($configPS.SASToken)

  Write-Host -NoNewLine -f Magenta "[Pending] -> Searching database..."

  try {
    $PackagePS = Invoke-RestMethod -Method "GET" -Uri $TableURL -Header $TableHeader
  }
  catch {
    Write-Host -f Red "`r[Failed] -> No entity in database found!"
    break
  }
  Write-Host  -f DarkGreen "`r[Done] -> Searching database "

  $EncryptionKey = $PackagePS.EncryptionKey
  $InitializationVector = $PackagePS.InitializationVector

  $source = ($PackagePS.IntuneWinURI)
  $destination = "$temp/Application.intunewin.bin"

  Write-Host -NoNewLine -f Magenta "[Pending] -> Download IntuneWin..."

  try {
    Start-BitsTransfer -Source $source -Destination $destination | Out-Null
    Write-Host -f DarkGreen "`r[Done] -> Download IntuneWin "
  }
  catch {
    Write-Host -f Red "`r[Failed] -> Download failed! "
    break
  }

  Write-Host -NoNewLine -f Magenta "[Pending] -> Decode IntuneWin..."

  try {
    &"$PSScriptRoot/IntuneWinAppUtilDecoder.exe" "$temp/Application.intunewin.bin" /key:"$EncryptionKey" /iv:"$InitializationVector" | Out-Null
    Write-Host -f DarkGreen "`r[Done] -> Decode IntuneWin "  
  }
  catch {
    Write-Host -f Red "`r[Failed] -> Decoding failed! "
    break
  }

  Write-Host -NoNewLine -f Magenta "[Pending] -> UnZip decoded IntuneWin..."

  try {
    sz x "$temp/Application.intunewin.bin.decoded" -o"$Path" | Out-Null
    Write-Host -f DarkGreen "`r[Done] -> UnZip decoded IntuneWin "
  }
  catch {
    Write-Host -f Red "`r[Failed] -> UnZipping failed! "
    break
  }

  Write-Host -NoNewLine -f Magenta "[Pending] -> CleanUp..."

  try {
    Remove-Item "$temp/Application.intunewin.bin"
    Remove-Item "$temp/Application.intunewin.bin.decoded"
    Write-Host -f DarkGreen "`r[Done] -> CleanUp "
  }
  catch {
    Write-Host -f Red "`r[Failed] -> CleanUp failed! "
    break
  }
}
# SIG # Begin signature block
# MIIt0wYJKoZIhvcNAQcCoIItxDCCLcACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUxz39mV3tMky+X2BAQYtfHFSk
# +g6ggiczMIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0B
# AQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
# IElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQsw
# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
# ZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQw
# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz
# 7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS
# 5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7
# bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfI
# SKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jH
# trHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14
# Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2
# h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt
# 6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPR
# iQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ER
# ElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4K
# Jpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAd
# BgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SS
# y4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAC
# hjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURS
# b290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRV
# HSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyh
# hyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO
# 0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo
# 8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++h
# UD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5x
# aiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMIIFkDCCA3ig
# AwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
# cnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMw
# ODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UE
# ChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYD
# VQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEppz1Y
# q3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lX
# FllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxe
# TsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbu
# yntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I
# 9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmg
# Z92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse
# 5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKy
# Ebe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwh
# HbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/
# Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwID
# AQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4E
# FgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQADggIBALth2X2p
# bL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
# ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdN
# Oj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4
# i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJ
# EVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9NcCOGDErcgdLM
# MpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N0XWs0Mr7QbhD
# parTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb/UdK
# Dd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP
# 0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLS
# oCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9T
# dSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+MIIGrjCCBJagAwIBAgIQBzY3tyRU
# fNhHrP0oZipeWzANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJVUzEVMBMGA1UE
# ChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYD
# VQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMjIwMzIzMDAwMDAwWhcN
# MzcwMzIyMjM1OTU5WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs
# IEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEy
# NTYgVGltZVN0YW1waW5nIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
# AgEAxoY1BkmzwT1ySVFVxyUDxPKRN6mXUaHW0oPRnkyibaCwzIP5WvYRoUQVQl+k
# iPNo+n3znIkLf50fng8zH1ATCyZzlm34V6gCff1DtITaEfFzsbPuK4CEiiIY3+va
# PcQXf6sZKz5C3GeO6lE98NZW1OcoLevTsbV15x8GZY2UKdPZ7Gnf2ZCHRgB720RB
# idx8ald68Dd5n12sy+iEZLRS8nZH92GDGd1ftFQLIWhuNyG7QKxfst5Kfc71ORJn
# 7w6lY2zkpsUdzTYNXNXmG6jBZHRAp8ByxbpOH7G1WE15/tePc5OsLDnipUjW8LAx
# E6lXKZYnLvWHpo9OdhVVJnCYJn+gGkcgQ+NDY4B7dW4nJZCYOjgRs/b2nuY7W+yB
# 3iIU2YIqx5K/oN7jPqJz+ucfWmyU8lKVEStYdEAoq3NDzt9KoRxrOMUp88qqlnNC
# aJ+2RrOdOqPVA+C/8KI8ykLcGEh/FDTP0kyr75s9/g64ZCr6dSgkQe1CvwWcZklS
# UPRR8zZJTYsg0ixXNXkrqPNFYLwjjVj33GHek/45wPmyMKVM1+mYSlg+0wOI/rOP
# 015LdhJRk8mMDDtbiiKowSYI+RQQEgN9XyO7ZONj4KbhPvbCdLI/Hgl27KtdRnXi
# YKNYCQEoAA6EVO7O6V3IXjASvUaetdN2udIOa5kM0jO0zbECAwEAAaOCAV0wggFZ
# MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLoW2W1NhS9zKXaaL3WMaiCP
# nshvMB8GA1UdIwQYMBaAFOzX44LScV1kTN8uZz/nupiuHA9PMA4GA1UdDwEB/wQE
# AwIBhjATBgNVHSUEDDAKBggrBgEFBQcDCDB3BggrBgEFBQcBAQRrMGkwJAYIKwYB
# BQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0
# cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5j
# cnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp
# Z2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJ
# YIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQB9WY7Ak7ZvmKlEIgF+ZtbYIULh
# sBguEE0TzzBTzr8Y+8dQXeJLKftwig2qKWn8acHPHQfpPmDI2AvlXFvXbYf6hCAl
# NDFnzbYSlm/EUExiHQwIgqgWvalWzxVzjQEiJc6VaT9Hd/tydBTX/6tPiix6q4XN
# Q1/tYLaqT5Fmniye4Iqs5f2MvGQmh2ySvZ180HAKfO+ovHVPulr3qRCyXen/KFSJ
# 8NWKcXZl2szwcqMj+sAngkSumScbqyQeJsG33irr9p6xeZmBo1aGqwpFyd/EjaDn
# mPv7pp1yr8THwcFqcdnGE4AJxLafzYeHJLtPo0m5d2aR8XKc6UsCUqc3fpNTrDsd
# CEkPlM05et3/JWOZJyw9P2un8WbDQc1PtkCbISFA0LcTJM3cHXg65J6t5TRxktcm
# a+Q4c6umAU+9Pzt4rUyt+8SVe+0KXzM5h0F4ejjpnOHdI/0dKNPH+ejxmF/7K9h+
# 8kaddSweJywm228Vex4Ziza4k9Tm8heZWcpw8De/mADfIBZPJ/tgZxahZrrdVcA6
# KYawmKAr7ZVBtzrVFZgxtGIJDwq9gdkT/r+k0fNX2bwE+oLeMt8EifAAzV3C+dAj
# fwAL5HYCJtnwZXZCpimHCUcr5n8apIUP/JiW9lVUKx+A+sDyDivl1vupL0QVSucT
# Dh3bNzgaoSv27dZ8/DCCBrAwggSYoAMCAQICEAitQLJg0pxMn17Nqb2TrtkwDQYJ
# KoZIhvcNAQEMBQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IElu
# YzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQg
# VHJ1c3RlZCBSb290IEc0MB4XDTIxMDQyOTAwMDAwMFoXDTM2MDQyODIzNTk1OVow
# aTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQD
# EzhEaWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4
# NCAyMDIxIENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW0L0LQ
# KK14t13VOVkbsYhC9TOM6z2Bl3DFu8SFJjCfpI5o2Fz16zQkB+FLT9N4Q/QX1x7a
# +dLVZxpSTw6hV/yImcGRzIEDPk1wJGSzjeIIfTR9TIBXEmtDmpnyxTsf8u/LR1oT
# pkyzASAl8xDTi7L7CPCK4J0JwGWn+piASTWHPVEZ6JAheEUuoZ8s4RjCGszF7pNJ
# cEIyj/vG6hzzZWiRok1MghFIUmjeEL0UV13oGBNlxX+yT4UsSKRWhDXW+S6cqgAV
# 0Tf+GgaUwnzI6hsy5srC9KejAw50pa85tqtgEuPo1rn3MeHcreQYoNjBI0dHs6EP
# bqOrbZgGgxu3amct0r1EGpIQgY+wOwnXx5syWsL/amBUi0nBk+3htFzgb+sm+YzV
# svk4EObqzpH1vtP7b5NhNFy8k0UogzYqZihfsHPOiyYlBrKD1Fz2FRlM7WLgXjPy
# 6OjsCqewAyuRsjZ5vvetCB51pmXMu+NIUPN3kRr+21CiRshhWJj1fAIWPIMorTmG
# 7NS3DVPQ+EfmdTCN7DCTdhSmW0tddGFNPxKRdt6/WMtyEClB8NXFbSZ2aBFBE1ia
# 3CYrAfSJTVnbeM+BSj5AR1/JgVBzhRAjIVlgimRUwcwhGug4GXxmHM14OEUwmU//
# Y09Mu6oNCFNBfFg9R7P6tuyMMgkCzGw8DFYRAgMBAAGjggFZMIIBVTASBgNVHRMB
# Af8ECDAGAQH/AgEAMB0GA1UdDgQWBBRoN+Drtjv4XxGG+/5hewiIZfROQjAfBgNV
# HSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYD
# VR0lBAwwCgYIKwYBBQUHAwMwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhho
# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNl
# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1Ud
# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRy
# dXN0ZWRSb290RzQuY3JsMBwGA1UdIAQVMBMwBwYFZ4EMAQMwCAYGZ4EMAQQBMA0G
# CSqGSIb3DQEBDAUAA4ICAQA6I0Q9jQh27o+8OpnTVuACGqX4SDTzLLbmdGb3lHKx
# AMqvbDAnExKekESfS/2eo3wm1Te8Ol1IbZXVP0n0J7sWgUVQ/Zy9toXgdn43ccsi
# 91qqkM/1k2rj6yDR1VB5iJqKisG2vaFIGH7c2IAaERkYzWGZgVb2yeN258TkG19D
# +D6U/3Y5PZ7Umc9K3SjrXyahlVhI1Rr+1yc//ZDRdobdHLBgXPMNqO7giaG9OeE4
# Ttpuuzad++UhU1rDyulq8aI+20O4M8hPOBSSmfXdzlRt2V0CFB9AM3wD4pWywiF1
# c1LLRtjENByipUuNzW92NyyFPxrOJukYvpAHsEN/lYgggnDwzMrv/Sk1XB+JOFX3
# N4qLCaHLC+kxGv8uGVw5ceG+nKcKBtYmZ7eS5k5f3nqsSc8upHSSrds8pJyGH+PB
# VhsrI/+PteqIe3Br5qC6/To/RabE6BaRUotBwEiES5ZNq0RA443wFSjO7fEYVgcq
# LxDEDAhkPDOPriiMPMuPiAsNvzv0zh57ju+168u38HcT5ucoP6wSrqUvImxB+YJc
# FWbMbA7KxYbD9iYzDAdLoNMHAmpqQDBISzSoUSC7rRuFCOJZDW3KBVAr6kocnqX9
# oKcfBnTn8tZSkP2vhUgh+Vc7tJwD7YZF9LRhbr9o4iZghurIr6n+lB3nYxs6hlZ4
# TjCCBsAwggSooAMCAQICEAxNaXJLlPo8Kko9KQeAPVowDQYJKoZIhvcNAQELBQAw
# YzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQD
# EzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGlu
# ZyBDQTAeFw0yMjA5MjEwMDAwMDBaFw0zMzExMjEyMzU5NTlaMEYxCzAJBgNVBAYT
# AlVTMREwDwYDVQQKEwhEaWdpQ2VydDEkMCIGA1UEAxMbRGlnaUNlcnQgVGltZXN0
# YW1wIDIwMjIgLSAyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz+yl
# JjrGqfJru43BDZrboegUhXQzGias0BxVHh42bbySVQxh9J0Jdz0Vlggva2Sk/QaD
# FteRkjgcMQKW+3KxlzpVrzPsYYrppijbkGNcvYlT4DotjIdCriak5Lt4eLl6FuFW
# xsC6ZFO7KhbnUEi7iGkMiMbxvuAvfTuxylONQIMe58tySSgeTIAehVbnhe3yYbyq
# Ogd99qtu5Wbd4lz1L+2N1E2VhGjjgMtqedHSEJFGKes+JvK0jM1MuWbIu6pQOA3l
# jJRdGVq/9XtAbm8WqJqclUeGhXk+DF5mjBoKJL6cqtKctvdPbnjEKD+jHA9QBje6
# CNk1prUe2nhYHTno+EyREJZ+TeHdwq2lfvgtGx/sK0YYoxn2Off1wU9xLokDEaJL
# u5i/+k/kezbvBkTkVf826uV8MefzwlLE5hZ7Wn6lJXPbwGqZIS1j5Vn1TS+QHye3
# 0qsU5Thmh1EIa/tTQznQZPpWz+D0CuYUbWR4u5j9lMNzIfMvwi4g14Gs0/EH1OG9
# 2V1LbjGUKYvmQaRllMBY5eUuKZCmt2Fk+tkgbBhRYLqmgQ8JJVPxvzvpqwcOagc5
# YhnJ1oV/E9mNec9ixezhe7nMZxMHmsF47caIyLBuMnnHC1mDjcbu9Sx8e47LZInx
# scS451NeX1XSfRkpWQNO+l3qRXMchH7XzuLUOncCAwEAAaOCAYswggGHMA4GA1Ud
# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI
# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6
# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUYore0GH8jzEU7ZcLzT0qlBTf
# UpwwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp
# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB
# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy
# dDANBgkqhkiG9w0BAQsFAAOCAgEAVaoqGvNG83hXNzD8deNP1oUj8fz5lTmbJeb3
# coqYw3fUZPwV+zbCSVEseIhjVQlGOQD8adTKmyn7oz/AyQCbEx2wmIncePLNfIXN
# U52vYuJhZqMUKkWHSphCK1D8G7WeCDAJ+uQt1wmJefkJ5ojOfRu4aqKbwVNgCeij
# uJ3XrR8cuOyYQfD2DoD75P/fnRCn6wC6X0qPGjpStOq/CUkVNTZZmg9U0rIbf35e
# Ca12VIp0bcrSBWcrduv/mLImlTgZiEQU5QpZomvnIj5EIdI/HMCb7XxIstiSDJFP
# PGaUr10CU+ue4p7k0x+GAWScAMLpWnR1DT3heYi/HAGXyRkjgNc2Wl+WFrFjDMZG
# QDvOXTXUWT5Dmhiuw8nLw/ubE19qtcfg8wXDWd8nYiveQclTuf80EGf2JjKYe/5c
# QpSBlIKdrAqLxksVStOYkEVgM4DgI974A6T2RUflzrgDQkfoQTZxd639ouiXdE4u
# 2h4djFrIHprVwvDGIqhPm73YHJpRxC+a9l+nJ5e6li6FV8Bg53hWf2rvwpWaSxEC
# yIKcyRoFfLpxtU56mWz06J7UWpjIn7+NuxhcQ/XQKujiYu54BNu90ftbCqhwfvCX
# hHjjCANdRyxjqCU4lwHSPzra5eX25pvcfizM/xdMTQCi2NYBDriL7ubgclWJLCcZ
# YfZ3AYwwggfgMIIFyKADAgECAhAEvFAJrWGkMrU95ncQieRtMA0GCSqGSIb3DQEB
# CwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8G
# A1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBT
# SEEzODQgMjAyMSBDQTEwHhcNMjIxMDEzMDAwMDAwWhcNMjMxMDEzMjM1OTU5WjCB
# wDELMAkGA1UEBhMCQ0gxEjAQBgNVBAcTCUtpcmNoYmVyZzEuMCwGA1UEChMlV2Fn
# bmVyIEFHIEluZm9ybWF0aWsgRGllbnN0bGVpc3R1bmdlbjEVMBMGA1UECxMMU21h
# cnRXb3JraW5nMS4wLAYDVQQDEyVXYWduZXIgQUcgSW5mb3JtYXRpayBEaWVuc3Rs
# ZWlzdHVuZ2VuMSYwJAYJKoZIhvcNAQkBFhdzaW1vbi5idWVobGVyQHdhZ25lci5j
# aDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMdC5YMo70Hi3T+D+cuB
# cv/hR8siaO2vzx91NoK/gjUP7XppSxmE6Ouxse5lsvWAXwVgNxYVs3JbMhjPAJqn
# JvvJya9P7lEsWsHiX+R4COSOzdBzlYcxsY3lInP2vKfe7UvFxbc2tLbnrqW2AHWj
# stppoKJ2aGmmXDnbR8Vs0OReM7AYItrAoFFf9wo7g6py44f5/uY2d8VXoljaeFt3
# 6kxkjgcLwj9hiQiO+BZsZG74bhm8sj/uXBmgn5h4H/gOCUfgVQIxeX+JyGLULZvX
# aVCqLKC7JNoHVDSLFZhnaePN87A8u9Gacaw513IyjedBZWFkyE4U/Mz8VOBBYzNB
# X43rcEaoq9wGiVb/HXIGwV/VUCg4pQ7c8FLCHMEykEEAhU2uEeS+dB5J/HrmvZbQ
# rwbEGx166g/ENnXl8psBzmXSrwZHIGDmX3phtvL56Gea+Peh5lWTPVllMqw1mFck
# XqU5JLbNgReal6Uy+ZNoqCrTKcYIRfdwmAdJ1Nh+UGJ0Le3/ZxqJUduQ2iFDbhw7
# oVMRqgVOA5S2k2JRLX0sCRmF9T8lw9npVlQwlRy01yYwq3T34OprOveXs12mUFys
# 8VMudyk8qJ6sfg+w6NxgX1PStOgPnxSwPP1FZ9me1bwHJSImxpC6cff+2gQnafN4
# V9X2QMnkOzyDKJxTSzYFAHntAgMBAAGjggIqMIICJjAfBgNVHSMEGDAWgBRoN+Dr
# tjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQUjA8vk7Wf1eqcSRK45LZdARisCtIw
# IgYDVR0RBBswGYEXc2ltb24uYnVlaGxlckB3YWduZXIuY2gwDgYDVR0PAQH/BAQD
# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0
# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu
# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k
# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT
# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF
# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH
# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB
# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB
# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBAL6Y+r+Pj3oQpcotIF7nDNUagOImzuAR
# +WBLLwvIRG3TQQetHfCMReX1q1ytAkQEdlYYkReREkFMJniS+wxHmq5kDE2/06K/
# ujd+kt0VCBXQmIo2NXgoJEs5uD3nPYH7TLamlmdPvIoziEknzV8FlJqvy2QXCyml
# xv3iDtnQnv8DZsnusktSnuUTl+KEOKmcVAPy96NMZlZ8rOuR+X8jShf4BwFRuz9e
# 8mqtc7moCMZLjyBl5gJCuMSXo22ytDEKwFecbLCvxETA6fh3WJOdufAwZEmcDE79
# BZEcr5q5xnbE1GqnZkT1oJiMoyyhw6DOf3r6o2hKjeYdYSXBhAV7ZAQLz1y90LkT
# 1ABkzN6W+vQL0Mv//NZ6tv7WkgLJQg+D/Widf7f5d6y9eH7QuOTJ1kP6jicXtK/l
# TETOc3odIJqItrEz2YiAawRKiB6y3Ur8AqwOdb/ewwAYPsPFFv0I1p6LndmBNFET
# iyEcrsH587w4xz7DslJ2l84tZocFtfXdO2HI3SpQCWB31CjqCs3iHj3dNTGQZUq0
# eetkK8bKtDLd6bZpvoH1k90rI3XRX/d7Gh4yZyHJcurTVFr37TCWWGbDlnqugpdn
# w5KNIpn1wy6jR0BrzNRPucI9fxxXz1JsR4d0zqVR3Kgocrnf76bp0S0P3i1TcVNe
# r/iwMkHUI17eMYIGCjCCBgYCAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k
# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAEvFAJrWGkMrU95ncQ
# ieRtMAkGBSsOAwIaBQCgQDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAjBgkq
# hkiG9w0BCQQxFgQUlX66Nth2KIGmiQ0uqTu/uq1u2CMwDQYJKoZIhvcNAQEBBQAE
# ggIALQmbnhQNLbLE1RB6HcWnN+bklt7hpE+iytdW8XOH8mWm82AcPDOgUF1BS8fE
# 2Y5sxCRsdukEB9PDHd5IkDhXI3nhExvb6jhkSmWe0RiuG1cDjktYbMD/pGqKnpXH
# OoFgSV6jIZFnYsL9fbF+dwgzPlwJcT11kzHNia+ysgwqH0FsRk65xtPDi1O5MsFT
# zwui3eM7hcuJ5tj13qT6nCqsf0tlYXcB648zinHgoOEvFRdN0iPeUcTtTOcIr0KG
# kdstdCRCwKypS1XbEr4L52S4mgAk0/dORvCEOvbJcet20plE3TN4750e9UuvKi+8
# Bp6Bl3XDJ8TdizySCAjCOH9LQvhOU/I/f+83BdE+Er3JjKP9BjZPO8seybhJ1MNY
# Ogyi7Kbeg7qPQOLrwIdb065smihPsk6PbTvhR6OC8vyaO2vmOJQnhve6rVCXTLLi
# O7eFyypt/vYhq8S/7TXi2GDPTSjcCHPOgPLscNgokM3PSHXQWRwDpKkCHoO3QmGK
# /2o+Lux9fiSZgjPBrG6w2as74kFhVyrSp+MnyHSXdXb9YvDLrQy0+E+xXAEtNGr0
# ykK4K4nhQ8ZWUOm95KA79+HfYLEkfmXoVC8Njf8IO4zr4RxiiaaNLQ5idPkvkWwY
# /0uPGhJonuejxuGICaJ9rmk8fNpgMz+LhJ+Nx+AO4q0nYGShggMgMIIDHAYJKoZI
# hvcNAQkGMYIDDTCCAwkCAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGln
# aUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5
# NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAMTWlyS5T6PCpKPSkHgD1aMA0GCWCG
# SAFlAwQCAQUAoGkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0B
# CQUxDxcNMjIxMDEzMTMwNDUwWjAvBgkqhkiG9w0BCQQxIgQgmvwSPZjj6Dj4N/oS
# krjxD4E5Cpjl7kiyMVYCerIOJ6IwDQYJKoZIhvcNAQEBBQAEggIAkfzp/CaWjNeJ
# Bt7G42z5YWI9ssp9wjv2X+A6qVxEVtc+7FVfIQndNlY6Ir5mywBZ810Xdosw8hTR
# xStvECZvREn+kY2c7ym8r7tAUOKpvxeafQ1m2p6GLcZR8bgThBoJWZwxxK5xiTRL
# mWrm/8h/mq4kjYu5hfw5sDati754nAzgKnI9t8v/I32gdA3dWeUZygmz1/17h7Lr
# 3aG8DV0+MNJxY7mYfAVVzroc1Izf0QPaJoJA7642t5/AxweKDpcCnGs+aB9bsv0A
# cHTmIgnKpNv6Y/2MrOaVFHr4KRVZFB/UajsfMLOzmDtA/NrFNn2UrkaqJoMreuAl
# PsAIO1lxREgLYq1SFjJnI/Uc8FXedijbUY3/gqJ7H+EuRkbxUoBewj/ovYmjbwFU
# aG6IocIpDlUa9M/3k+n9kKqebOSEKmfH3JSim8KL+gHeF4V1MnzIuLuIdhY5k2Ey
# wN82lxWYybgKiyChwFkhAZ1l1qelA74DSvyNtuXIm0YpmHuOp3iV7M948v3CG82z
# 8UogHV0iIXm99jK/MOPz0j+YO1+616UcJumArDBEV+Vmtq3gl48qz8wvrZ9bOGDi
# 3ziDvaJ1qWCz07gFEJi/uIPyG/rXJDCKmCUOvS+c0Nx/m0ND2+wb5uYuzSKtbhOW
# D27w2aFQXfRIy9n0+d242Gpg7faTkBI=
# SIG # End signature block