Disable outdated "Windows Defender Security Center" interface
- Single actionThis page belongs to a script, containing basic changes to achieve a task.
- Windows onlyThis script improves your privacy on Windows
- Impact: HighSystem Functionality Loss Risk: High
This action improves privacy with high impact when you run the recommended script. - Batch (batchfile)These changes use Windows system commands to update your settings.
- Fully reversible
You can fully restore this action (revert back to the original behavior) using this website.
The restore/revert methods provided here can help you fix issues.
Overview
This script disables outdated Defender Antivirus user interface components.
The Windows Defender User Experience Host managed communication between Windows components and apps, including the discontinued Windows Defender Security Center 1. This interface is not present in modern Windows versions, so this script will not affect recent Windows systems.
Disabling this component may enhance privacy on older systems by reducing monitoring and data collection from the Defender components. It helps maintain control over privacy preferences and reduces the risk of unintended changes. This action may also improve system performance by stopping processes that use system resources. Removing obsolete software reduces the potential attack surface, aligning with security best practices.
However, this action may reduce system security if you are using older versions of Windows. Carefully weigh the privacy benefits against potential security risks before applying this script.
This script limits the Defender user interface on older Windows versions.
Technical Details
This script removes several components related to the Windows Defender User Experience (MpUx
), including:
- MP UX Host (AppID:
FDA74D11-C4A6-4577-9F73-D7CA8586E10D
) 2 - MP UX Host 3 4 (CLSID:
FDA74D11-C4A6-4577-9F73-D7CA8586E10D
) 2 3 4 5 - WD modern host server 1 4 (File:
%PROGRAMFILES%\Windows Defender\MpUXSrv.exe
4) - Defender MpUxAgent 6 (File:
%PROGRAMDATA%\Microsoft\Windows Defender\Platform\*\MPUXAGENT.DLL
5 7) - Defender MpUxAgent (CLSID:
4DB116D1-9B24-4DFC-946B-BFE03E852002
5 7) - Defender MpUxAgent (CLSID:
2DCD7FDB-8809-48E4-8E4F-3157C57CF987}
5 7) - Defender Data Loss Prevention UI (Application User Model ID:
Windows.Defender.MpUxDlp
5) - MpUx Agent Host 5 8 (AppID:
1111a26d-ef95-4a45-9f55-21e52adf9887
5 8) - COM Proxy for mpuxhost (MP Modern shell host) 9 (file:
%PROGRAMFILES%\Windows Defender\mpuxhostproxy.dll
3 7) - PSFactoryBuffer 3 (CLSID:
13F6A0B6-57AF-4BA7-ACAA-614BC89CA9D8
2 3 7) - PSFactoryBuffer 3 (CLSID:
94F35585-C5D7-4D95-BA71-A745AE76E2E2
2 3)
Tests confirm that these components are not present in Windows versions from Windows 10 19H1 and Windows 11 21H2 onwards.
- Not Advised
This script should only be used by advanced users.
This script is not recommended for daily use as it breaks important functionality.
Consider creating a system restore point before doing any changes.
- Security Trade-off
This action prioritizes privacy over certain security features. It's not recommended and should only be used by advanced users after understanding its implications.
Increased Privacy
Enhanced privacy through reduced data collection and trackingDecreased Security
Some security features will be disabled or limitedThis script can be reversed, this allows you to restore the default system security.
Sources
- What is MpUXSrv.exe (WD modern host server)? 4 reasons to/NOT trust it. www.spyshelter.com. (2024).
Original: https://www.spyshelter.com/exe/microsoft-windows-mpuxsrv-exe
Archived: https://web.archive.org/web/20240830202122/https://www.spyshelter.com/exe/microsoft-windows-mpuxsrv-exe/ - 10_0_19045_2251/C/Windows/WinSxS/amd64_windows-defender-service_31bf3856ad364e35_10.0.19041.1_none_7b973051f62a1a6d/MpCmdRun.exe.strings at 0960c766a4fc8eb5a95d47ac4df6c1d35b9324bf · privacysexy-forks/10_0_19045_2251. raw.githubusercontent.com. (2024).
Original: https://raw.githubusercontent.com/privacysexy-forks/10_0_19045_2251/0960c766a4fc8eb5a95d47ac4df6c1d35b9324bf/C/Windows/WinSxS/amd64_windows-defender-service_31bf3856ad364e35_10.0.19041.1_none_7b973051f62a1a6d/MpCmdRun.exe.strings
Archived: https://archive.ph/2024.10.28-095446/https://raw.githubusercontent.com/privacysexy-forks/10_0_19045_2251/0960c766a4fc8eb5a95d47ac4df6c1d35b9324bf/C/Windows/WinSxS/amd64_windows-defender-service_31bf3856ad364e35_10.0.19041.1_none_7b973051f62a1a6d/MpCmdRun.exe.strings - CLSIDs Windows 8.1 Enterprise x64 with Office 2013. wikileaks.org. (2024).
Original: https://wikileaks.org/ciav7p1/cms/page_13762818.html
Archived: https://web.archive.org/web/20240830202035/https://wikileaks.org/ciav7p1/cms/page_13762818.html - r2com/clsids.json at master · privacysexy-forks/r2com. raw.githubusercontent.com. (2024).
Original: https://raw.githubusercontent.com/privacysexy-forks/r2com/refs/heads/master/clsids.json
Archived: https://archive.ph/2024.10.29-193115/https://raw.githubusercontent.com/privacysexy-forks/r2com/refs/heads/master/clsids.json - hypedisenio: Diseño: Hola a todos los interesados en sitios de divulgac.... hypedisenio.blogspot.com. (2024).
Original: https://hypedisenio.blogspot.com/2011/07/diseno-hola-todos-los-interesados-en.html
Archived: https://web.archive.org/web/20240831105355/https://hypedisenio.blogspot.com/2011/07/diseno-hola-todos-los-interesados-en.html - Manalyzer :: 705f5d24ef8780386e98d6d0b50b0a70. manalyzer.org. (2024).
Original: https://manalyzer.org/report/705f5d24ef8780386e98d6d0b50b0a70
Archived: https://web.archive.org/web/20240831105406/https://manalyzer.org/report/705f5d24ef8780386e98d6d0b50b0a70 - Trawler/trawler.ps1 at main · privacysexy-forks/Trawler. github.com. (2025).
Original: https://github.com/privacysexy-forks/Trawler/blob/main/trawler.ps1 - windows-com-objects/Data/CASE_Windows10_20H2/comx86/comAppId.csv at ff00b455604546b70c8bb7c200823332af96e641 · privacysexy-forks/windows-com-objects. github.com. (2024).
Original: https://github.com/privacysexy-forks/windows-com-objects/blob/ff00b455604546b70c8bb7c200823332af96e641/Data/CASE_Windows10_20H2/comx86/comAppId.csv
Archived: https://web.archive.org/web/20240923153453/https://github.com/privacysexy-forks/windows-com-objects/blob/ff00b455604546b70c8bb7c200823332af96e641/Data/CASE_Windows10_20H2/comx86/comAppId.csv - mpuxhostproxy.dll : Free .DLL download.. www.dllme.com. (2024).
Original: https://www.dllme.com/dll/files/mpuxhostproxy
Archived: https://archive.ph/2024.08.31-105522/https://www.dllme.com/dll/files/mpuxhostproxy - Malware scan of MpUxSrv.exe (WD modern host server) 8bc4fa864c753f26969a98a6ba42553e16982c51 - herdProtect. www.herdprotect.com. (2024).
Original: https://www.herdprotect.com/mpuxsrv.exe-8bc4fa864c753f26969a98a6ba42553e16982c51.aspx
Archived: https://web.archive.org/web/20240830202110/https://www.herdprotect.com/mpuxsrv.exe-8bc4fa864c753f26969a98a6ba42553e16982c51.aspx
Apply Now
Choose one of three ways to apply:
Download script
Download and run the script directly- No app needed
- Offline usage
- Easy-to-apply
- Free
- Open-source
Help
How to apply or restore "Disable outdated "Windows Defender Security Center" interface" using script
- ≈ 2 min to complete
- Tools: Web Browser
- Difficulty: Simple
- ≈ 5 instructions
- 1
Download
Download the script file by clicking on thebutton above.
Use button above to restore changes. - 2
Keep the file
If warned by your browser, keep the file. - 3
Open
Open the downloaded file. - 4
Exit
Once it's done, press any key to exit the window. - 5
Restart
Restart your computer for all changes to take effect.
Apply with privacy.sexy
Guided, automated application with safety checks- Recommended for most users
- Includes safety checks
- Free
- Open-source
- Popular
- Offline/Online usage
Help
How to apply or restore "Disable outdated "Windows Defender Security Center" interface" using privacy.sexy
- ≈ 3 min to complete
- Tools: privacy.sexy
- Difficulty: Simple
- ≈ 4 instructions
- 2
Choose script
- Search for the script name: Disable outdated "Windows Defender Security Center" interface
- Check the script by clicking on the checkbox.
- 3
Run
Click on ▶️ Run button at the bottom of the page.This button only appears on desktop version (recommended). On browser, use 💾 Save button.
- Apply
- Revert
:: Soft delete files matching pattern: "%PROGRAMFILES%\Windows Defender\MpUXSrv.exe" as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = '$pathGlobPattern = "^""%PROGRAMFILES%\Windows Defender\MpUXSrv.exe"^""'+"^""`r`n"^""+'$expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern)'+"^""`r`n"^""+'Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""'+"^""`r`n"^""+''+"^""`r`n"^""+'$renamedCount = 0'+"^""`r`n"^""+'$skippedCount = 0'+"^""`r`n"^""+'$failedCount = 0'+"^""`r`n"^""+''+"^""`r`n"^""+'$foundAbsolutePaths = @()'+"^""`r`n"^""+''+"^""`r`n"^""+'try {'+"^""`r`n"^""+' $foundAbsolutePaths += @('+"^""`r`n"^""+' Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName'+"^""`r`n"^""+' )'+"^""`r`n"^""+'} catch [System.Management.Automation.ItemNotFoundException] {'+"^""`r`n"^""+' <# Swallow, do not run `Test-Path` before, it''s unreliable for globs requiring extra permissions #>'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$foundAbsolutePaths = $foundAbsolutePaths `'+"^""`r`n"^""+' | Select-Object -Unique `'+"^""`r`n"^""+' | Sort-Object -Property { $_.Length } -Descending'+"^""`r`n"^""+'if (!$foundAbsolutePaths) {'+"^""`r`n"^""+' Write-Host ''Skipping, no items available.'''+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""'+"^""`r`n"^""+'foreach ($path in $foundAbsolutePaths) {'+"^""`r`n"^""+' if (Test-Path -Path $path -PathType Container) {'+"^""`r`n"^""+' Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if($revert -eq $true) {'+"^""`r`n"^""+' if (-not $path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' if ($path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$originalFilePath = $path'+"^""`r`n"^""+'Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+'if (-Not (Test-Path $originalFilePath)) {'+"^""`r`n"^""+' Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+''+"^""`r`n"^""+'if ($revert -eq $true) {'+"^""`r`n"^""+' $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4)'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' $newFilePath = "^""$($originalFilePath).OLD"^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'try {'+"^""`r`n"^""+' Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop'+"^""`r`n"^""+' Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+' $renamedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'} catch {'+"^""`r`n"^""+' Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""'+"^""`r`n"^""+' $failedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'}'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if ($failedCount -gt 0) {'+"^""`r`n"^""+' Write-Warning "^""Failed to process $($failedCount) items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+''; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\Software\Classes\AppID\{FDA74D11-C4A6-4577-9F73-D7CA8586E10D} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\Software\Classes\AppID\{FDA74D11-C4A6-4577-9F73-D7CA8586E10D}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\Software\Classes\CLSID\{FDA74D11-C4A6-4577-9F73-D7CA8586E10D} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\Software\Classes\CLSID\{FDA74D11-C4A6-4577-9F73-D7CA8586E10D}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft delete files matching pattern: "%PROGRAMDATA%\Microsoft\Windows Defender\Platform\*\MPUXAGENT.DLL" as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = '$pathGlobPattern = "^""%PROGRAMDATA%\Microsoft\Windows Defender\Platform\*\MPUXAGENT.DLL"^""'+"^""`r`n"^""+'$expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern)'+"^""`r`n"^""+'Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""'+"^""`r`n"^""+''+"^""`r`n"^""+'$renamedCount = 0'+"^""`r`n"^""+'$skippedCount = 0'+"^""`r`n"^""+'$failedCount = 0'+"^""`r`n"^""+''+"^""`r`n"^""+'$foundAbsolutePaths = @()'+"^""`r`n"^""+''+"^""`r`n"^""+'try {'+"^""`r`n"^""+' $foundAbsolutePaths += @('+"^""`r`n"^""+' Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName'+"^""`r`n"^""+' )'+"^""`r`n"^""+'} catch [System.Management.Automation.ItemNotFoundException] {'+"^""`r`n"^""+' <# Swallow, do not run `Test-Path` before, it''s unreliable for globs requiring extra permissions #>'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$foundAbsolutePaths = $foundAbsolutePaths `'+"^""`r`n"^""+' | Select-Object -Unique `'+"^""`r`n"^""+' | Sort-Object -Property { $_.Length } -Descending'+"^""`r`n"^""+'if (!$foundAbsolutePaths) {'+"^""`r`n"^""+' Write-Host ''Skipping, no items available.'''+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""'+"^""`r`n"^""+'foreach ($path in $foundAbsolutePaths) {'+"^""`r`n"^""+' if (Test-Path -Path $path -PathType Container) {'+"^""`r`n"^""+' Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if($revert -eq $true) {'+"^""`r`n"^""+' if (-not $path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' if ($path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$originalFilePath = $path'+"^""`r`n"^""+'Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+'if (-Not (Test-Path $originalFilePath)) {'+"^""`r`n"^""+' Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+''+"^""`r`n"^""+'if ($revert -eq $true) {'+"^""`r`n"^""+' $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4)'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' $newFilePath = "^""$($originalFilePath).OLD"^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'try {'+"^""`r`n"^""+' Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop'+"^""`r`n"^""+' Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+' $renamedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'} catch {'+"^""`r`n"^""+' Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""'+"^""`r`n"^""+' $failedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'}'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if ($failedCount -gt 0) {'+"^""`r`n"^""+' Write-Warning "^""Failed to process $($failedCount) items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+''; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\CLSID\{4DB116D1-9B24-4DFC-946B-BFE03E852002} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\CLSID\{4DB116D1-9B24-4DFC-946B-BFE03E852002}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\CLSID\{2DCD7FDB-8809-48E4-8E4F-3157C57CF987} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\CLSID\{2DCD7FDB-8809-48E4-8E4F-3157C57CF987}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\AppUserModelId\Windows.Defender.MpUxDlp
PowerShell -ExecutionPolicy Unrestricted -Command "function Copy-Acl($Src, $Dst) { $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue); foreach ($key in $srcKeys) { $dstKey = Join-Path $Dst $key.PSChildName; Copy-Acl -Src $key.PSPath -Dst $dstKey; }; $acl = Get-Acl -Path $Src -ErrorAction Stop; $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner); $sddl = $acl.GetSecurityDescriptorSddlForm($sections); $acl.SetSecurityDescriptorSddlForm($sddl, $sections); Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop; }; function Rename-KeyWithAcl($Old, $New) { try { Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop; } catch { throw "^""Failed to copy: $_"^""; }; try { Copy-Acl -Src $Old -Dst $New; } catch { Write-Warning "^""Failed to copy ACL: $_"^""; }; try { Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null; } catch { try { Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null; } catch { Write-Warning "^""Failed to clean up: $_"^""; }; throw "^""Failed to remove: $_"^""; }; }; $rawPath='HKLM\SOFTWARE\Classes\AppUserModelId\Windows.Defender.MpUxDlp'; $suffix='.OLD'; $global:ok = 0; $global:skip = 0; $global:fail = 0; function Rename-KeyTree($Path) { Write-Host "^""Processing key: $Path"^""; if (-Not (Test-Path -LiteralPath $Path)) { Write-Host 'Skipping: Key does not exist.'; $global:skip++; return; }; $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property); foreach ($value in $values) { Write-Host "^""Renaming '$value'"^""; if ($value.EndsWith($suffix)) { Write-Host 'Skipping: Has suffix.'; $global:skip++; continue; }; $backupName = $value + $suffix; Write-Host "^""Renaming to '$backupName'."^""; try { Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop; Write-Host 'Successfully renamed.'; $global:ok++; } catch { Write-Warning "^""Failed to rename value: $_"^""; $global:fail++; }; }; $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue); foreach ($key in $subkeys) { Rename-KeyTree $key.PSPath; }; Write-Host "^""Renaming key '$Path'."^""; if ($Path.EndsWith($suffix)) { Write-Host 'Skipping: Has suffix.'; $global:skip++; } else { $backupPath = $Path + $suffix; while (Test-Path -LiteralPath $backupPath) { $backupPath += $suffix; }; Write-Host "^""Renaming to '$backupPath'."^""; try { Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop; Write-Host 'Successfully renamed.'; $global:ok++; } catch { Write-Warning "^""Failed to rename: $_"^""; $global:fail++; }; }; }; Write-Host "^""Soft deleting registry key '$rawPath' recursively."^""; $hive = $rawPath.Split('\')[0]; $path = $hive + ':' + $rawPath.Substring($hive.Length); Rename-KeyTree $path; $totalItems = $global:ok + $global:skip + $global:fail; Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""; if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) { Write-Host 'No items were processed. The operation had no effect.'; } elseif ($global:fail -eq $totalItems) { throw "^""Operation failed. All $global:fail items could not be processed."^""; } elseif ($global:ok) { Write-Host "^""Successfully processed $global:ok item(s)."^""; }"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\AppID\{1111a26d-ef95-4a45-9f55-21e52adf9887} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\AppID\{1111a26d-ef95-4a45-9f55-21e52adf9887}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft delete files matching pattern: "%PROGRAMFILES%\Windows Defender\mpuxhostproxy.dll" as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = '$pathGlobPattern = "^""%PROGRAMFILES%\Windows Defender\mpuxhostproxy.dll"^""'+"^""`r`n"^""+'$expandedPath = [System.Environment]::ExpandEnvironmentVariables($pathGlobPattern)'+"^""`r`n"^""+'Write-Host "^""Searching for items matching pattern: `"^""$($expandedPath)`"^""."^""'+"^""`r`n"^""+''+"^""`r`n"^""+'$renamedCount = 0'+"^""`r`n"^""+'$skippedCount = 0'+"^""`r`n"^""+'$failedCount = 0'+"^""`r`n"^""+''+"^""`r`n"^""+'$foundAbsolutePaths = @()'+"^""`r`n"^""+''+"^""`r`n"^""+'try {'+"^""`r`n"^""+' $foundAbsolutePaths += @('+"^""`r`n"^""+' Get-Item -Path $expandedPath -ErrorAction Stop | Select-Object -ExpandProperty FullName'+"^""`r`n"^""+' )'+"^""`r`n"^""+'} catch [System.Management.Automation.ItemNotFoundException] {'+"^""`r`n"^""+' <# Swallow, do not run `Test-Path` before, it''s unreliable for globs requiring extra permissions #>'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$foundAbsolutePaths = $foundAbsolutePaths `'+"^""`r`n"^""+' | Select-Object -Unique `'+"^""`r`n"^""+' | Sort-Object -Property { $_.Length } -Descending'+"^""`r`n"^""+'if (!$foundAbsolutePaths) {'+"^""`r`n"^""+' Write-Host ''Skipping, no items available.'''+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Initiating processing of $($foundAbsolutePaths.Count) items from `"^""$expandedPath`"^""."^""'+"^""`r`n"^""+'foreach ($path in $foundAbsolutePaths) {'+"^""`r`n"^""+' if (Test-Path -Path $path -PathType Container) {'+"^""`r`n"^""+' Write-Host "^""Skipping folder (not its contents): `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if($revert -eq $true) {'+"^""`r`n"^""+' if (-not $path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping non-backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' if ($path.EndsWith(''.OLD'')) {'+"^""`r`n"^""+' Write-Host "^""Skipping backup file: `"^""$path`"^""."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$originalFilePath = $path'+"^""`r`n"^""+'Write-Host "^""Processing file: `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+'if (-Not (Test-Path $originalFilePath)) {'+"^""`r`n"^""+' Write-Host "^""Skipping, file `"^""$originalFilePath`"^"" not found."^""'+"^""`r`n"^""+' $skippedCount++'+"^""`r`n"^""+' exit 0'+"^""`r`n"^""+'}'+"^""`r`n"^""+''+"^""`r`n"^""+'if ($revert -eq $true) {'+"^""`r`n"^""+' $newFilePath = $originalFilePath.Substring(0, $originalFilePath.Length - 4)'+"^""`r`n"^""+'} else {'+"^""`r`n"^""+' $newFilePath = "^""$($originalFilePath).OLD"^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'try {'+"^""`r`n"^""+' Move-Item -LiteralPath "^""$($originalFilePath)"^"" -Destination "^""$newFilePath"^"" -Force -ErrorAction Stop'+"^""`r`n"^""+' Write-Host "^""Successfully processed `"^""$originalFilePath`"^""."^""'+"^""`r`n"^""+' $renamedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'} catch {'+"^""`r`n"^""+' Write-Error "^""Failed to rename `"^""$originalFilePath`"^"" to `"^""$newFilePath`"^"": $($_.Exception.Message)"^""'+"^""`r`n"^""+' $failedCount++'+"^""`r`n"^""+' '+"^""`r`n"^""+'}'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if (($renamedCount -gt 0) -or ($skippedCount -gt 0)) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $renamedCount items and skipped $skippedCount items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+'if ($failedCount -gt 0) {'+"^""`r`n"^""+' Write-Warning "^""Failed to process $($failedCount) items."^""'+"^""`r`n"^""+'}'+"^""`r`n"^""+''; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\CLSID\{13F6A0B6-57AF-4BA7-ACAA-614BC89CA9D8} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\CLSID\{13F6A0B6-57AF-4BA7-ACAA-614BC89CA9D8}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
:: Soft-delete the registry key: HKLM\SOFTWARE\Classes\CLSID\{94F35585-C5D7-4D95-BA71-A745AE76E2E2} as TrustedInstaller
PowerShell -ExecutionPolicy Unrestricted -Command "function Invoke-AsTrustedInstaller($Script) { $principalSid = [System.Security.Principal.SecurityIdentifier]::new('S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464'); $principalName = $principalSid.Translate([System.Security.Principal.NTAccount]); $streamFile = New-TemporaryFile; $scriptFile = New-TemporaryFile; try { $scriptFile = Rename-Item -LiteralPath $scriptFile -NewName ($scriptFile.BaseName + '.ps1') -Force -PassThru; $Script | Out-File $scriptFile -Encoding UTF8; $taskName = "^""privacy$([char]0x002E)sexy invoke"^""; schtasks.exe /delete /tn $taskName /f 2>&1 | Out-Null; $executionCommand = "^""powershell.exe -ExecutionPolicy Bypass -File '$scriptFile' *>&1 | Out-File -FilePath '$streamFile' -Encoding UTF8"^""; $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "^""-ExecutionPolicy Bypass -Command `"^""$executionCommand`"^"""^""; $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries; Register-ScheduledTask -TaskName $taskName -Action $action -Settings $settings -Force -ErrorAction Stop | Out-Null; try { ($scheduleService = New-Object -ComObject Schedule.Service).Connect(); $scheduleService.GetFolder('\').GetTask($taskName).RunEx($null, 0, 0, $principalName) | Out-Null; $timeout = (Get-Date).AddMinutes(5); Write-Host "^""Running as $principalName"^""; while ((Get-ScheduledTaskInfo $taskName).LastTaskResult -eq 267009) { Start-Sleep -Milliseconds 200; if ((Get-Date) -gt $timeout) { Write-Warning 'Skipping: Timeout'; break; }; }; if (($result = (Get-ScheduledTaskInfo $taskName).LastTaskResult) -ne 0) { Write-Error "^""Failed, due to exit code: $result."^""; } } finally { schtasks.exe /delete /tn $taskName /f | Out-Null; }; Get-Content $streamFile } finally { Remove-Item $streamFile, $scriptFile; }; }; $cmd = 'function Copy-Acl($Src, $Dst) {'+"^""`r`n"^""+' $srcKeys = @(Get-ChildItem -LiteralPath $Src -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $srcKeys) {'+"^""`r`n"^""+' $dstKey = Join-Path $Dst $key.PSChildName'+"^""`r`n"^""+' Copy-Acl -Src $key.PSPath -Dst $dstKey'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $acl = Get-Acl -Path $Src -ErrorAction Stop'+"^""`r`n"^""+' $sections = [System.Security.AccessControl.AccessControlSections]::All -band (-bnot [System.Security.AccessControl.AccessControlSections]::Owner)'+"^""`r`n"^""+' $sddl = $acl.GetSecurityDescriptorSddlForm($sections)'+"^""`r`n"^""+' $acl.SetSecurityDescriptorSddlForm($sddl, $sections)'+"^""`r`n"^""+' Set-Acl -Path $Dst -AclObject $acl -ErrorAction Stop'+"^""`r`n"^""+'}'+"^""`r`n"^""+'function Rename-KeyWithAcl($Old, $New) {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Item -LiteralPath $Old -Destination $New -Recurse -Force -ErrorAction Stop'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' throw "^""Failed to copy: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Copy-Acl -Src $Old -Dst $New'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to copy ACL: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $Old -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Remove-Item -LiteralPath $New -Force -Recurse -ErrorAction Stop | Out-Null'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to clean up: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+' throw "^""Failed to remove: $_"^""'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'$rawPath=''HKLM\SOFTWARE\Classes\CLSID\{94F35585-C5D7-4D95-BA71-A745AE76E2E2}'''+"^""`r`n"^""+'$suffix=''.OLD'''+"^""`r`n"^""+'$global:ok = 0'+"^""`r`n"^""+'$global:skip = 0'+"^""`r`n"^""+'$global:fail = 0'+"^""`r`n"^""+'function Rename-KeyTree($Path) {'+"^""`r`n"^""+' Write-Host "^""Processing key: $Path"^""'+"^""`r`n"^""+' if (-Not (Test-Path -LiteralPath $Path)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Key does not exist.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' return'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $values = (Get-Item -LiteralPath $Path -ErrorAction Stop | Select-Object -ExpandProperty Property)'+"^""`r`n"^""+' foreach ($value in $values) {'+"^""`r`n"^""+' Write-Host "^""Renaming ''$value''"^""'+"^""`r`n"^""+' if ($value.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' continue'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $backupName = $value + $suffix'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupName''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-ItemProperty -LiteralPath $Path -Name $value -NewName $backupName -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename value: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+' $subkeys = @(Get-ChildItem -LiteralPath $Path -ErrorAction SilentlyContinue)'+"^""`r`n"^""+' foreach ($key in $subkeys) {'+"^""`r`n"^""+' Rename-KeyTree $key.PSPath'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming key ''$Path''."^""'+"^""`r`n"^""+' if ($Path.EndsWith($suffix)) {'+"^""`r`n"^""+' Write-Host ''Skipping: Has suffix.'''+"^""`r`n"^""+' $global:skip++'+"^""`r`n"^""+' } else {'+"^""`r`n"^""+' $backupPath = $Path + $suffix'+"^""`r`n"^""+' while (Test-Path -LiteralPath $backupPath) {'+"^""`r`n"^""+' $backupPath += $suffix'+"^""`r`n"^""+' }'+"^""`r`n"^""+' Write-Host "^""Renaming to ''$backupPath''."^""'+"^""`r`n"^""+' try {'+"^""`r`n"^""+' Rename-KeyWithAcl -Old $Path -New $backupPath -ErrorAction Stop'+"^""`r`n"^""+' Write-Host ''Successfully renamed.'''+"^""`r`n"^""+' $global:ok++'+"^""`r`n"^""+' } catch {'+"^""`r`n"^""+' Write-Warning "^""Failed to rename: $_"^""'+"^""`r`n"^""+' $global:fail++'+"^""`r`n"^""+' }'+"^""`r`n"^""+' }'+"^""`r`n"^""+'}'+"^""`r`n"^""+'Write-Host "^""Soft deleting registry key ''$rawPath'' recursively."^""'+"^""`r`n"^""+'$hive = $rawPath.Split(''\'')[0]'+"^""`r`n"^""+'$path = $hive + '':'' + $rawPath.Substring($hive.Length)'+"^""`r`n"^""+'Rename-KeyTree $path'+"^""`r`n"^""+'$totalItems = $global:ok + $global:skip + $global:fail'+"^""`r`n"^""+'Write-Host "^""Total items: $totalItems, Renamed: $global:ok, Skipped: $global:skip, Failed: $global:fail"^""'+"^""`r`n"^""+'if (($totalItems -eq 0) -or ($totalItems -eq $global:skip)) {'+"^""`r`n"^""+' Write-Host ''No items were processed. The operation had no effect.'''+"^""`r`n"^""+'} elseif ($global:fail -eq $totalItems) {'+"^""`r`n"^""+' throw "^""Operation failed. All $global:fail items could not be processed."^""'+"^""`r`n"^""+'} elseif ($global:ok) {'+"^""`r`n"^""+' Write-Host "^""Successfully processed $global:ok item(s)."^""'+"^""`r`n"^""+'}'; Invoke-AsTrustedInstaller $cmd"
Ijo6IFJlc3RvcmUgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybjogXCIlUFJPR1JBTUZJTEVTJVxcV2luZG93cyBEZWZlbmRlclxcTXBVWFNydi5leGVcIiAgYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICckcmV2ZXJ0ID0gJHRydWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRwYXRoR2xvYlBhdHRlcm4gPSBcIl5cIlwiJVBST0dSQU1GSUxFUyVcXFdpbmRvd3MgRGVmZW5kZXJcXE1wVVhTcnYuZXhlLk9MRFwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRleHBhbmRlZFBhdGggPSBbU3lzdGVtLkVudmlyb25tZW50XTo6RXhwYW5kRW52aXJvbm1lbnRWYXJpYWJsZXMoJHBhdGhHbG9iUGF0dGVybiknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNlYXJjaGluZyBmb3IgaXRlbXMgbWF0Y2hpbmcgcGF0dGVybjogYFwiXlwiXCIkKCRleHBhbmRlZFBhdGgpYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJyRyZW5hbWVkQ291bnQgICA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHNraXBwZWRDb3VudCAgID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZmFpbGVkQ291bnQgICAgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGZvdW5kQWJzb2x1dGVQYXRocyA9IEAoKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRmb3VuZEFic29sdXRlUGF0aHMgKz0gQCgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgR2V0LUl0ZW0gLVBhdGggJGV4cGFuZGVkUGF0aCAtRXJyb3JBY3Rpb24gU3RvcCB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IEZ1bGxOYW1lJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5JdGVtTm90Rm91bmRFeGNlcHRpb25dIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICA8IyBTd2FsbG93LCBkbyBub3QgcnVuIGBUZXN0LVBhdGhgIGJlZm9yZSwgaXQnJ3MgdW5yZWxpYWJsZSBmb3IgZ2xvYnMgcmVxdWlyaW5nIGV4dHJhIHBlcm1pc3Npb25zICM+JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZm91bmRBYnNvbHV0ZVBhdGhzID0gJGZvdW5kQWJzb2x1dGVQYXRocyAgIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB8IFNlbGVjdC1PYmplY3QgLVVuaXF1ZSAgICAgICAgICAgICAgICAgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IHsgJF8uTGVuZ3RoIH0gLURlc2NlbmRpbmcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICghJGZvdW5kQWJzb2x1dGVQYXRocykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZywgbm8gaXRlbXMgYXZhaWxhYmxlLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgZXhpdCAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJJbml0aWF0aW5nIHByb2Nlc3Npbmcgb2YgJCgkZm91bmRBYnNvbHV0ZVBhdGhzLkNvdW50KSBpdGVtcyBmcm9tIGBcIl5cIlwiJGV4cGFuZGVkUGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRwYXRoIGluICRmb3VuZEFic29sdXRlUGF0aHMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoVGVzdC1QYXRoIC1QYXRoICRwYXRoIC1QYXRoVHlwZSBDb250YWluZXIpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIGZvbGRlciAobm90IGl0cyBjb250ZW50cyk6IGBcIl5cIlwiJHBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYoJHJldmVydCAtZXEgJHRydWUpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtbm90ICRwYXRoLkVuZHNXaXRoKCcnLk9MRCcnKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIG5vbi1iYWNrdXAgZmlsZTogYFwiXlwiXCIkcGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKCRwYXRoLkVuZHNXaXRoKCcnLk9MRCcnKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIGJhY2t1cCBmaWxlOiBgXCJeXCJcIiRwYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJG9yaWdpbmFsRmlsZVBhdGggPSAkcGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJQcm9jZXNzaW5nIGZpbGU6IGBcIl5cIlwiJG9yaWdpbmFsRmlsZVBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgtTm90IChUZXN0LVBhdGggJG9yaWdpbmFsRmlsZVBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTa2lwcGluZywgZmlsZSBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIgbm90IGZvdW5kLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZXhpdCAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkcmV2ZXJ0IC1lcSAkdHJ1ZSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJG5ld0ZpbGVQYXRoID0gJG9yaWdpbmFsRmlsZVBhdGguU3Vic3RyaW5nKDAsICRvcmlnaW5hbEZpbGVQYXRoLkxlbmd0aCAtIDQpJytcIl5cIlwiYHJgblwiXlwiXCIrJ30gZWxzZSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkbmV3RmlsZVBhdGggPSBcIl5cIlwiJCgkb3JpZ2luYWxGaWxlUGF0aCkuT0xEXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ3RyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBNb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoIFwiXlwiXCIkKCRvcmlnaW5hbEZpbGVQYXRoKVwiXlwiXCIgLURlc3RpbmF0aW9uIFwiXlwiXCIkbmV3RmlsZVBhdGhcIl5cIlwiIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHJlbmFtZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbmFtZSBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIgdG8gYFwiXlwiXCIkbmV3RmlsZVBhdGhgXCJeXCJcIjogJCgkXy5FeGNlcHRpb24uTWVzc2FnZSlcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZmFpbGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgoJHJlbmFtZWRDb3VudCAtZ3QgMCkgLW9yICgkc2tpcHBlZENvdW50IC1ndCAwKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCAkcmVuYW1lZENvdW50IGl0ZW1zIGFuZCBza2lwcGVkICRza2lwcGVkQ291bnQgaXRlbXMuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZmFpbGVkQ291bnQgLWd0IDApIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBwcm9jZXNzICQoJGZhaWxlZENvdW50KSBpdGVtcy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJzsgSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlciAkY21kXCJcbjo6IFJlc3RvcmUgcmVnaXN0cnkga2V5OiBIS0xNXFxTb2Z0d2FyZVxcQ2xhc3Nlc1xcQXBwSURcXHtGREE3NEQxMS1DNEE2LTQ1NzctOUY3My1EN0NBODU4NkUxMER9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTb2Z0d2FyZVxcQ2xhc3Nlc1xcQXBwSURcXHtGREE3NEQxMS1DNEE2LTQ1NzctOUY3My1EN0NBODU4NkUxMER9JycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHN1ZmZpeCA9JycuT0xEJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpmYWlsID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOm9rID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBHZXQtUmVhbCgkcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgd2hpbGUgKCRzLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICByZXR1cm4gJHMnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUtleVRyZWUoJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRkZXN0ID0gR2V0LVJlYWwgJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmMgPSAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIGtleTogJyckZGVzdCcnIGZyb20gJyckc3JjJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNyYyArPSAkc3VmZml4JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBkYXRhLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGRlc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcgdG8gYXZvaWQgZGF0YSBsb3NzLiBLZXkgYWxyZWFkeSBleGlzdHMuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyckc3JjJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtS2V5V2l0aEFjbCAtT2xkICRzcmMgLU5ldyAkZGVzdCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWVzIGluICcnJFBhdGgnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkdmFsdWVzID0gKCBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWUgJyckdmFsdWUnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAkdmFsdWUuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRyZWFsID0gR2V0LVJlYWwgJHZhbHVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyckcmVhbCcnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAka2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRrZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHJlZ2lzdHJ5IGtleSAnJyRyYXdQYXRoJycgcmVjdXJzaXZlbHkuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyckaGl2ZSA9ICRyYXdQYXRoLlNwbGl0KCcnXFwnJylbMF0nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHBhdGggPSAkaGl2ZSArICcnOicnICsgJHJhd1BhdGguU3Vic3RyaW5nKCRoaXZlLkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnUmVzdG9yZS1LZXlUcmVlICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZ2xvYmFsOmZhaWwpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yICcnRmFpbGVkIHRvIHJlc3RvcmUnJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgRXhpdCAxJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSByZWdpc3RyeSBrZXk6IEhLTE1cXFNvZnR3YXJlXFxDbGFzc2VzXFxDTFNJRFxce0ZEQTc0RDExLUM0QTYtNDU3Ny05RjczLUQ3Q0E4NTg2RTEwRH0gYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICdmdW5jdGlvbiBDb3B5LUFjbCgkU3JjLCAkRHN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZHN0S2V5ID0gSm9pbi1QYXRoICREc3QgJGtleS5QU0NoaWxkTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlbmFtZS1LZXlXaXRoQWNsKCRPbGQsICROZXcpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1EZXN0aW5hdGlvbiAkTmV3IC1SZWN1cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAkT2xkIC1Ec3QgJE5ldycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNvcHkgQUNMOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkTmV3IC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckcmF3UGF0aD0nJ0hLTE1cXFNvZnR3YXJlXFxDbGFzc2VzXFxDTFNJRFxce0ZEQTc0RDExLUM0QTYtNDU3Ny05RjczLUQ3Q0E4NTg2RTEwRH0nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm46IFwiJVBST0dSQU1EQVRBJVxcTWljcm9zb2Z0XFxXaW5kb3dzIERlZmVuZGVyXFxQbGF0Zm9ybVxcKlxcTVBVWEFHRU5ULkRMTFwiICBhcyBUcnVzdGVkSW5zdGFsbGVyXG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiZnVuY3Rpb24gSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlcigkU2NyaXB0KSB7ICRwcmluY2lwYWxTaWQgPSBbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5TZWN1cml0eUlkZW50aWZpZXJdOjpuZXcoJ1MtMS01LTgwLTk1NjAwODg4NS0zNDE4NTIyNjQ5LTE4MzEwMzgwNDQtMTg1MzI5MjYzMS0yMjcxNDc4NDY0Jyk7ICRwcmluY2lwYWxOYW1lID0gJHByaW5jaXBhbFNpZC5UcmFuc2xhdGUoW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuTlRBY2NvdW50XSk7ICRzdHJlYW1GaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7ICRzY3JpcHRGaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7IHRyeSB7ICRzY3JpcHRGaWxlID0gUmVuYW1lLUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHRGaWxlIC1OZXdOYW1lICgkc2NyaXB0RmlsZS5CYXNlTmFtZSArICcucHMxJykgLUZvcmNlIC1QYXNzVGhydTsgJFNjcmlwdCB8IE91dC1GaWxlICRzY3JpcHRGaWxlIC1FbmNvZGluZyBVVEY4OyAkdGFza05hbWUgPSBcIl5cIlwicHJpdmFjeSQoW2NoYXJdMHgwMDJFKXNleHkgaW52b2tlXCJeXCJcIjsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiAyPiYxIHwgT3V0LU51bGw7ICRleGVjdXRpb25Db21tYW5kID0gXCJeXCJcInBvd2Vyc2hlbGwuZXhlIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1GaWxlICckc2NyaXB0RmlsZScgKj4mMSB8IE91dC1GaWxlIC1GaWxlUGF0aCAnJHN0cmVhbUZpbGUnIC1FbmNvZGluZyBVVEY4XCJeXCJcIjsgJGFjdGlvbiA9IE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9uIC1FeGVjdXRlICdwb3dlcnNoZWxsLmV4ZScgLUFyZ3VtZW50IFwiXlwiXCItRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtQ29tbWFuZCBgXCJeXCJcIiRleGVjdXRpb25Db21tYW5kYFwiXlwiXCJcIl5cIlwiOyAkc2V0dGluZ3MgPSBOZXctU2NoZWR1bGVkVGFza1NldHRpbmdzU2V0IC1BbGxvd1N0YXJ0SWZPbkJhdHRlcmllcyAtRG9udFN0b3BJZkdvaW5nT25CYXR0ZXJpZXM7IFJlZ2lzdGVyLVNjaGVkdWxlZFRhc2sgLVRhc2tOYW1lICR0YXNrTmFtZSAtQWN0aW9uICRhY3Rpb24gLVNldHRpbmdzICRzZXR0aW5ncyAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbDsgdHJ5IHsgKCRzY2hlZHVsZVNlcnZpY2UgPSBOZXctT2JqZWN0IC1Db21PYmplY3QgU2NoZWR1bGUuU2VydmljZSkuQ29ubmVjdCgpOyAkc2NoZWR1bGVTZXJ2aWNlLkdldEZvbGRlcignXFwnKS5HZXRUYXNrKCR0YXNrTmFtZSkuUnVuRXgoJG51bGwsIDAsIDAsICRwcmluY2lwYWxOYW1lKSB8IE91dC1OdWxsOyAkdGltZW91dCA9IChHZXQtRGF0ZSkuQWRkTWludXRlcyg1KTsgV3JpdGUtSG9zdCBcIl5cIlwiUnVubmluZyBhcyAkcHJpbmNpcGFsTmFtZVwiXlwiXCI7IHdoaWxlICgoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQgLWVxIDI2NzAwOSkgeyBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDIwMDsgaWYgKChHZXQtRGF0ZSkgLWd0ICR0aW1lb3V0KSB7IFdyaXRlLVdhcm5pbmcgJ1NraXBwaW5nOiBUaW1lb3V0JzsgYnJlYWs7IH07IH07IGlmICgoJHJlc3VsdCA9IChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCkgLW5lIDApIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCwgZHVlIHRvIGV4aXQgY29kZTogJHJlc3VsdC5cIl5cIlwiOyB9IH0gZmluYWxseSB7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgfCBPdXQtTnVsbDsgfTsgR2V0LUNvbnRlbnQgJHN0cmVhbUZpbGUgfSBmaW5hbGx5IHsgUmVtb3ZlLUl0ZW0gJHN0cmVhbUZpbGUsICRzY3JpcHRGaWxlOyB9OyB9OyAkY21kID0gJyRyZXZlcnQgPSAkdHJ1ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHBhdGhHbG9iUGF0dGVybiA9IFwiXlwiXCIlUFJPR1JBTURBVEElXFxNaWNyb3NvZnRcXFdpbmRvd3MgRGVmZW5kZXJcXFBsYXRmb3JtXFwqXFxNUFVYQUdFTlQuRExMLk9MRFwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRleHBhbmRlZFBhdGggPSBbU3lzdGVtLkVudmlyb25tZW50XTo6RXhwYW5kRW52aXJvbm1lbnRWYXJpYWJsZXMoJHBhdGhHbG9iUGF0dGVybiknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNlYXJjaGluZyBmb3IgaXRlbXMgbWF0Y2hpbmcgcGF0dGVybjogYFwiXlwiXCIkKCRleHBhbmRlZFBhdGgpYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJyRyZW5hbWVkQ291bnQgICA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHNraXBwZWRDb3VudCAgID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZmFpbGVkQ291bnQgICAgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGZvdW5kQWJzb2x1dGVQYXRocyA9IEAoKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRmb3VuZEFic29sdXRlUGF0aHMgKz0gQCgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgR2V0LUl0ZW0gLVBhdGggJGV4cGFuZGVkUGF0aCAtRXJyb3JBY3Rpb24gU3RvcCB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IEZ1bGxOYW1lJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5JdGVtTm90Rm91bmRFeGNlcHRpb25dIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICA8IyBTd2FsbG93LCBkbyBub3QgcnVuIGBUZXN0LVBhdGhgIGJlZm9yZSwgaXQnJ3MgdW5yZWxpYWJsZSBmb3IgZ2xvYnMgcmVxdWlyaW5nIGV4dHJhIHBlcm1pc3Npb25zICM+JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZm91bmRBYnNvbHV0ZVBhdGhzID0gJGZvdW5kQWJzb2x1dGVQYXRocyAgIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB8IFNlbGVjdC1PYmplY3QgLVVuaXF1ZSAgICAgICAgICAgICAgICAgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IHsgJF8uTGVuZ3RoIH0gLURlc2NlbmRpbmcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICghJGZvdW5kQWJzb2x1dGVQYXRocykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZywgbm8gaXRlbXMgYXZhaWxhYmxlLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgZXhpdCAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJJbml0aWF0aW5nIHByb2Nlc3Npbmcgb2YgJCgkZm91bmRBYnNvbHV0ZVBhdGhzLkNvdW50KSBpdGVtcyBmcm9tIGBcIl5cIlwiJGV4cGFuZGVkUGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRwYXRoIGluICRmb3VuZEFic29sdXRlUGF0aHMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoVGVzdC1QYXRoIC1QYXRoICRwYXRoIC1QYXRoVHlwZSBDb250YWluZXIpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIGZvbGRlciAobm90IGl0cyBjb250ZW50cyk6IGBcIl5cIlwiJHBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYoJHJldmVydCAtZXEgJHRydWUpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtbm90ICRwYXRoLkVuZHNXaXRoKCcnLk9MRCcnKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIG5vbi1iYWNrdXAgZmlsZTogYFwiXlwiXCIkcGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc2tpcHBlZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKCRwYXRoLkVuZHNXaXRoKCcnLk9MRCcnKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nIGJhY2t1cCBmaWxlOiBgXCJeXCJcIiRwYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJG9yaWdpbmFsRmlsZVBhdGggPSAkcGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJQcm9jZXNzaW5nIGZpbGU6IGBcIl5cIlwiJG9yaWdpbmFsRmlsZVBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgtTm90IChUZXN0LVBhdGggJG9yaWdpbmFsRmlsZVBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTa2lwcGluZywgZmlsZSBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIgbm90IGZvdW5kLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZXhpdCAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkcmV2ZXJ0IC1lcSAkdHJ1ZSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJG5ld0ZpbGVQYXRoID0gJG9yaWdpbmFsRmlsZVBhdGguU3Vic3RyaW5nKDAsICRvcmlnaW5hbEZpbGVQYXRoLkxlbmd0aCAtIDQpJytcIl5cIlwiYHJgblwiXlwiXCIrJ30gZWxzZSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkbmV3RmlsZVBhdGggPSBcIl5cIlwiJCgkb3JpZ2luYWxGaWxlUGF0aCkuT0xEXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ3RyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBNb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoIFwiXlwiXCIkKCRvcmlnaW5hbEZpbGVQYXRoKVwiXlwiXCIgLURlc3RpbmF0aW9uIFwiXlwiXCIkbmV3RmlsZVBhdGhcIl5cIlwiIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHJlbmFtZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbmFtZSBgXCJeXCJcIiRvcmlnaW5hbEZpbGVQYXRoYFwiXlwiXCIgdG8gYFwiXlwiXCIkbmV3RmlsZVBhdGhgXCJeXCJcIjogJCgkXy5FeGNlcHRpb24uTWVzc2FnZSlcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZmFpbGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgoJHJlbmFtZWRDb3VudCAtZ3QgMCkgLW9yICgkc2tpcHBlZENvdW50IC1ndCAwKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCAkcmVuYW1lZENvdW50IGl0ZW1zIGFuZCBza2lwcGVkICRza2lwcGVkQ291bnQgaXRlbXMuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZmFpbGVkQ291bnQgLWd0IDApIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBwcm9jZXNzICQoJGZhaWxlZENvdW50KSBpdGVtcy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJzsgSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlciAkY21kXCJcbjo6IFJlc3RvcmUgcmVnaXN0cnkga2V5OiBIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcQ0xTSURcXHs0REIxMTZEMS05QjI0LTRERkMtOTQ2Qi1CRkUwM0U4NTIwMDJ9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcQ0xTSURcXHs0REIxMTZEMS05QjI0LTRERkMtOTQ2Qi1CRkUwM0U4NTIwMDJ9JycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHN1ZmZpeCA9JycuT0xEJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpmYWlsID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOm9rID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBHZXQtUmVhbCgkcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgd2hpbGUgKCRzLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICByZXR1cm4gJHMnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUtleVRyZWUoJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRkZXN0ID0gR2V0LVJlYWwgJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmMgPSAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIGtleTogJyckZGVzdCcnIGZyb20gJyckc3JjJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNyYyArPSAkc3VmZml4JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBkYXRhLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGRlc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcgdG8gYXZvaWQgZGF0YSBsb3NzLiBLZXkgYWxyZWFkeSBleGlzdHMuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyckc3JjJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtS2V5V2l0aEFjbCAtT2xkICRzcmMgLU5ldyAkZGVzdCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWVzIGluICcnJFBhdGgnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkdmFsdWVzID0gKCBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWUgJyckdmFsdWUnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAkdmFsdWUuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRyZWFsID0gR2V0LVJlYWwgJHZhbHVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyckcmVhbCcnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAka2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRrZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHJlZ2lzdHJ5IGtleSAnJyRyYXdQYXRoJycgcmVjdXJzaXZlbHkuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyckaGl2ZSA9ICRyYXdQYXRoLlNwbGl0KCcnXFwnJylbMF0nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHBhdGggPSAkaGl2ZSArICcnOicnICsgJHJhd1BhdGguU3Vic3RyaW5nKCRoaXZlLkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnUmVzdG9yZS1LZXlUcmVlICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZ2xvYmFsOmZhaWwpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yICcnRmFpbGVkIHRvIHJlc3RvcmUnJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgRXhpdCAxJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSByZWdpc3RyeSBrZXk6IEhLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxDTFNJRFxcezJEQ0Q3RkRCLTg4MDktNDhFNC04RTRGLTMxNTdDNTdDRjk4N30gYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICdmdW5jdGlvbiBDb3B5LUFjbCgkU3JjLCAkRHN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZHN0S2V5ID0gSm9pbi1QYXRoICREc3QgJGtleS5QU0NoaWxkTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlbmFtZS1LZXlXaXRoQWNsKCRPbGQsICROZXcpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1EZXN0aW5hdGlvbiAkTmV3IC1SZWN1cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAkT2xkIC1Ec3QgJE5ldycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNvcHkgQUNMOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkTmV3IC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckcmF3UGF0aD0nJ0hLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxDTFNJRFxcezJEQ0Q3RkRCLTg4MDktNDhFNC04RTRGLTMxNTdDNTdDRjk4N30nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIHJlZ2lzdHJ5IGtleTogSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXEFwcFVzZXJNb2RlbElkXFxXaW5kb3dzLkRlZmVuZGVyLk1wVXhEbHAgXG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeyAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSk7IGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWU7IENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5OyB9OyAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wOyAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpOyAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKTsgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKTsgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcDsgfTsgZnVuY3Rpb24gUmVuYW1lLUtleVdpdGhBY2woJE9sZCwgJE5ldykgeyB0cnkgeyBDb3B5LUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLURlc3RpbmF0aW9uICROZXcgLVJlY3Vyc2UgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wOyB9IGNhdGNoIHsgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCI7IH07IHRyeSB7IENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXc7IH0gY2F0Y2ggeyBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY29weSBBQ0w6ICRfXCJeXCJcIjsgfTsgdHJ5IHsgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IH0gY2F0Y2ggeyB0cnkgeyBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbDsgfSBjYXRjaCB7IFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiOyB9OyB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiOyB9OyB9OyAkcmF3UGF0aD0nSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXEFwcFVzZXJNb2RlbElkXFxXaW5kb3dzLkRlZmVuZGVyLk1wVXhEbHAnOyAkc3VmZml4ID0nLk9MRCc7ICRnbG9iYWw6ZmFpbCA9IDA7ICRnbG9iYWw6b2sgPSAwOyBmdW5jdGlvbiBHZXQtUmVhbCgkcykgeyB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpOyB9OyByZXR1cm4gJHM7IH07IGZ1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeyAkZGVzdCA9IEdldC1SZWFsICRQYXRoOyAkc3JjID0gJFBhdGg7IFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyBrZXk6ICckZGVzdCcgZnJvbSAnJHNyYydcIl5cIlwiOyBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7ICRzcmMgKz0gJHN1ZmZpeDsgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsgV3JpdGUtSG9zdCAnU2tpcHBpbmc6IE5vIGRhdGEuJzsgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdDsgcmV0dXJuOyB9OyB9OyBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeyBXcml0ZS1Ib3N0ICdTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nOyBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyRzcmMnLlwiXlwiXCI7IH0gZWxzZSB7IHRyeSB7IFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wOyBXcml0ZS1Ib3N0ICdTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJzsgJGdsb2JhbDpvaysrOyB9IGNhdGNoIHsgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCI7ICRnbG9iYWw6ZmFpbCsrOyB9OyB9OyBSZXN0b3JlLUNoaWxkcmVuICRkZXN0OyB9OyBmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7IFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyRQYXRoJ1wiXlwiXCI7IGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeyBXcml0ZS1Ib3N0ICdTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLic7IHJldHVybjsgfTsgJHZhbHVlcyA9ICggR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgKTsgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHZhbHVlICckdmFsdWUnXCJeXCJcIjsgaWYgKC1Ob3QgJHZhbHVlLkVuZHNXaXRoKCRzdWZmaXgpKSB7IFdyaXRlLUhvc3QgJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLic7IGNvbnRpbnVlOyB9OyAkcmVhbCA9IEdldC1SZWFsICR2YWx1ZTsgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyRyZWFsJy5cIl5cIlwiOyB0cnkgeyBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3A7IFdyaXRlLUhvc3QgJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nOyAkZ2xvYmFsOm9rKys7IH0gY2F0Y2ggeyBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIjsgJGdsb2JhbDpmYWlsKys7IH07IH07ICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSk7IGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoOyB9OyB9OyBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICckcmF3UGF0aCcgcmVjdXJzaXZlbHkuXCJeXCJcIjsgJGhpdmUgPSAkcmF3UGF0aC5TcGxpdCgnXFwnKVswXTsgJHBhdGggPSAkaGl2ZSArICc6JyArICRyYXdQYXRoLlN1YnN0cmluZygkaGl2ZS5MZW5ndGgpOyBSZXN0b3JlLUtleVRyZWUgJHBhdGg7IGlmICgkZ2xvYmFsOmZhaWwpIHsgV3JpdGUtRXJyb3IgJ0ZhaWxlZCB0byByZXN0b3JlJzsgRXhpdCAxOyB9XCJcbjo6IFJlc3RvcmUgcmVnaXN0cnkga2V5OiBIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcQXBwSURcXHsxMTExYTI2ZC1lZjk1LTRhNDUtOWY1NS0yMWU1MmFkZjk4ODd9IGFzIFRydXN0ZWRJbnN0YWxsZXJcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCJmdW5jdGlvbiBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyKCRTY3JpcHQpIHsgJHByaW5jaXBhbFNpZCA9IFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLlNlY3VyaXR5SWRlbnRpZmllcl06Om5ldygnUy0xLTUtODAtOTU2MDA4ODg1LTM0MTg1MjI2NDktMTgzMTAzODA0NC0xODUzMjkyNjMxLTIyNzE0Nzg0NjQnKTsgJHByaW5jaXBhbE5hbWUgPSAkcHJpbmNpcGFsU2lkLlRyYW5zbGF0ZShbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5OVEFjY291bnRdKTsgJHN0cmVhbUZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgJHNjcmlwdEZpbGUgPSBOZXctVGVtcG9yYXJ5RmlsZTsgdHJ5IHsgJHNjcmlwdEZpbGUgPSBSZW5hbWUtSXRlbSAtTGl0ZXJhbFBhdGggJHNjcmlwdEZpbGUgLU5ld05hbWUgKCRzY3JpcHRGaWxlLkJhc2VOYW1lICsgJy5wczEnKSAtRm9yY2UgLVBhc3NUaHJ1OyAkU2NyaXB0IHwgT3V0LUZpbGUgJHNjcmlwdEZpbGUgLUVuY29kaW5nIFVURjg7ICR0YXNrTmFtZSA9IFwiXlwiXCJwcml2YWN5JChbY2hhcl0weDAwMkUpc2V4eSBpbnZva2VcIl5cIlwiOyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIDI+JjEgfCBPdXQtTnVsbDsgJGV4ZWN1dGlvbkNvbW1hbmQgPSBcIl5cIlwicG93ZXJzaGVsbC5leGUgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgJyRzY3JpcHRGaWxlJyAqPiYxIHwgT3V0LUZpbGUgLUZpbGVQYXRoICckc3RyZWFtRmlsZScgLUVuY29kaW5nIFVURjhcIl5cIlwiOyAkYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgJ3Bvd2Vyc2hlbGwuZXhlJyAtQXJndW1lbnQgXCJeXCJcIi1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1Db21tYW5kIGBcIl5cIlwiJGV4ZWN1dGlvbkNvbW1hbmRgXCJeXCJcIlwiXlwiXCI7ICRzZXR0aW5ncyA9IE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXQgLUFsbG93U3RhcnRJZk9uQmF0dGVyaWVzIC1Eb250U3RvcElmR29pbmdPbkJhdHRlcmllczsgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtVGFza05hbWUgJHRhc2tOYW1lIC1BY3Rpb24gJGFjdGlvbiAtU2V0dGluZ3MgJHNldHRpbmdzIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsOyB0cnkgeyAoJHNjaGVkdWxlU2VydmljZSA9IE5ldy1PYmplY3QgLUNvbU9iamVjdCBTY2hlZHVsZS5TZXJ2aWNlKS5Db25uZWN0KCk7ICRzY2hlZHVsZVNlcnZpY2UuR2V0Rm9sZGVyKCdcXCcpLkdldFRhc2soJHRhc2tOYW1lKS5SdW5FeCgkbnVsbCwgMCwgMCwgJHByaW5jaXBhbE5hbWUpIHwgT3V0LU51bGw7ICR0aW1lb3V0ID0gKEdldC1EYXRlKS5BZGRNaW51dGVzKDUpOyBXcml0ZS1Ib3N0IFwiXlwiXCJSdW5uaW5nIGFzICRwcmluY2lwYWxOYW1lXCJeXCJcIjsgd2hpbGUgKChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCAtZXEgMjY3MDA5KSB7IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMjAwOyBpZiAoKEdldC1EYXRlKSAtZ3QgJHRpbWVvdXQpIHsgV3JpdGUtV2FybmluZyAnU2tpcHBpbmc6IFRpbWVvdXQnOyBicmVhazsgfTsgfTsgaWYgKCgkcmVzdWx0ID0gKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0KSAtbmUgMCkgeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkLCBkdWUgdG8gZXhpdCBjb2RlOiAkcmVzdWx0LlwiXlwiXCI7IH0gfSBmaW5hbGx5IHsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiB8IE91dC1OdWxsOyB9OyBHZXQtQ29udGVudCAkc3RyZWFtRmlsZSB9IGZpbmFsbHkgeyBSZW1vdmUtSXRlbSAkc3RyZWFtRmlsZSwgJHNjcmlwdEZpbGU7IH07IH07ICRjbWQgPSAnZnVuY3Rpb24gQ29weS1BY2woJFNyYywgJERzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyY0tleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRTcmMgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRzcmNLZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGRzdEtleSA9IEpvaW4tUGF0aCAkRHN0ICRrZXkuUFNDaGlsZE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRrZXkuUFNQYXRoIC1Ec3QgJGRzdEtleScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbCA9IEdldC1BY2wgLVBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNlY3Rpb25zID0gW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106OkFsbCAtYmFuZCAoLWJub3QgW1N5c3RlbS5TZWN1cml0eS5BY2Nlc3NDb250cm9sLkFjY2Vzc0NvbnRyb2xTZWN0aW9uc106Ok93bmVyKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNkZGwgPSAkYWNsLkdldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wuU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNkZGwsICRzZWN0aW9ucyknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFNldC1BY2wgLVBhdGggJERzdCAtQWNsT2JqZWN0ICRhY2wgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZW5hbWUtS2V5V2l0aEFjbCgkT2xkLCAkTmV3KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRGVzdGluYXRpb24gJE5ldyAtUmVjdXJzZSAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gY29weTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJE9sZCAtRHN0ICROZXcnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjb3B5IEFDTDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE5ldyAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY2xlYW4gdXA6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZTogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJhd1BhdGg9JydIS0xNXFxTT0ZUV0FSRVxcQ2xhc3Nlc1xcQXBwSURcXHsxMTExYTI2ZC1lZjk1LTRhNDUtOWY1NS0yMWU1MmFkZjk4ODd9JycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHN1ZmZpeCA9JycuT0xEJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpmYWlsID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOm9rID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBHZXQtUmVhbCgkcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgd2hpbGUgKCRzLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHMgPSAkcy5TdWJzdHJpbmcoMCwgJHMuTGVuZ3RoIC0gJHN1ZmZpeC5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICByZXR1cm4gJHMnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUtleVRyZWUoJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRkZXN0ID0gR2V0LVJlYWwgJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmMgPSAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIGtleTogJyckZGVzdCcnIGZyb20gJyckc3JjJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAkc3JjLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNyYyArPSAkc3VmZml4JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyYykpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBkYXRhLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGRlc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmcgdG8gYXZvaWQgZGF0YSBsb3NzLiBLZXkgYWxyZWFkeSBleGlzdHMuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJNYW51YWwgaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZCB0byBmdWxseSByZXN0b3JlIGZyb20gJyckc3JjJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtS2V5V2l0aEFjbCAtT2xkICRzcmMgLU5ldyAkZGVzdCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFJlc3RvcmUtQ2hpbGRyZW4gJGRlc3QnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydmdW5jdGlvbiBSZXN0b3JlLUNoaWxkcmVuKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWVzIGluICcnJFBhdGgnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRQYXRoKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogS2V5IGRvZXMgbm90IGV4aXN0LiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgcmV0dXJuJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkdmFsdWVzID0gKCBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgUHJvcGVydHkgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHZhbHVlIGluICR2YWx1ZXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgdmFsdWUgJyckdmFsdWUnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAkdmFsdWUuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBObyBhY3Rpb24gbmVlZGVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRyZWFsID0gR2V0LVJlYWwgJHZhbHVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVuYW1pbmcgdG8gJyckcmVhbCcnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0cnkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZW5hbWUtSXRlbVByb3BlcnR5IC1MaXRlcmFsUGF0aCAkUGF0aCAtTmFtZSAkdmFsdWUgLU5ld05hbWUgJHJlYWwgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAka2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgka2V5IGluICRrZXlzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVzdG9yZS1LZXlUcmVlICRrZXkuUFNQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHJlZ2lzdHJ5IGtleSAnJyRyYXdQYXRoJycgcmVjdXJzaXZlbHkuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKyckaGl2ZSA9ICRyYXdQYXRoLlNwbGl0KCcnXFwnJylbMF0nK1wiXlwiXCJgcmBuXCJeXCJcIisnJHBhdGggPSAkaGl2ZSArICcnOicnICsgJHJhd1BhdGguU3Vic3RyaW5nKCRoaXZlLkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnUmVzdG9yZS1LZXlUcmVlICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ2lmICgkZ2xvYmFsOmZhaWwpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yICcnRmFpbGVkIHRvIHJlc3RvcmUnJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgRXhpdCAxJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuOiBcIiVQUk9HUkFNRklMRVMlXFxXaW5kb3dzIERlZmVuZGVyXFxtcHV4aG9zdHByb3h5LmRsbFwiICBhcyBUcnVzdGVkSW5zdGFsbGVyXG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiZnVuY3Rpb24gSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlcigkU2NyaXB0KSB7ICRwcmluY2lwYWxTaWQgPSBbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5TZWN1cml0eUlkZW50aWZpZXJdOjpuZXcoJ1MtMS01LTgwLTk1NjAwODg4NS0zNDE4NTIyNjQ5LTE4MzEwMzgwNDQtMTg1MzI5MjYzMS0yMjcxNDc4NDY0Jyk7ICRwcmluY2lwYWxOYW1lID0gJHByaW5jaXBhbFNpZC5UcmFuc2xhdGUoW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuTlRBY2NvdW50XSk7ICRzdHJlYW1GaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7ICRzY3JpcHRGaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7IHRyeSB7ICRzY3JpcHRGaWxlID0gUmVuYW1lLUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHRGaWxlIC1OZXdOYW1lICgkc2NyaXB0RmlsZS5CYXNlTmFtZSArICcucHMxJykgLUZvcmNlIC1QYXNzVGhydTsgJFNjcmlwdCB8IE91dC1GaWxlICRzY3JpcHRGaWxlIC1FbmNvZGluZyBVVEY4OyAkdGFza05hbWUgPSBcIl5cIlwicHJpdmFjeSQoW2NoYXJdMHgwMDJFKXNleHkgaW52b2tlXCJeXCJcIjsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiAyPiYxIHwgT3V0LU51bGw7ICRleGVjdXRpb25Db21tYW5kID0gXCJeXCJcInBvd2Vyc2hlbGwuZXhlIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1GaWxlICckc2NyaXB0RmlsZScgKj4mMSB8IE91dC1GaWxlIC1GaWxlUGF0aCAnJHN0cmVhbUZpbGUnIC1FbmNvZGluZyBVVEY4XCJeXCJcIjsgJGFjdGlvbiA9IE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9uIC1FeGVjdXRlICdwb3dlcnNoZWxsLmV4ZScgLUFyZ3VtZW50IFwiXlwiXCItRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtQ29tbWFuZCBgXCJeXCJcIiRleGVjdXRpb25Db21tYW5kYFwiXlwiXCJcIl5cIlwiOyAkc2V0dGluZ3MgPSBOZXctU2NoZWR1bGVkVGFza1NldHRpbmdzU2V0IC1BbGxvd1N0YXJ0SWZPbkJhdHRlcmllcyAtRG9udFN0b3BJZkdvaW5nT25CYXR0ZXJpZXM7IFJlZ2lzdGVyLVNjaGVkdWxlZFRhc2sgLVRhc2tOYW1lICR0YXNrTmFtZSAtQWN0aW9uICRhY3Rpb24gLVNldHRpbmdzICRzZXR0aW5ncyAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbDsgdHJ5IHsgKCRzY2hlZHVsZVNlcnZpY2UgPSBOZXctT2JqZWN0IC1Db21PYmplY3QgU2NoZWR1bGUuU2VydmljZSkuQ29ubmVjdCgpOyAkc2NoZWR1bGVTZXJ2aWNlLkdldEZvbGRlcignXFwnKS5HZXRUYXNrKCR0YXNrTmFtZSkuUnVuRXgoJG51bGwsIDAsIDAsICRwcmluY2lwYWxOYW1lKSB8IE91dC1OdWxsOyAkdGltZW91dCA9IChHZXQtRGF0ZSkuQWRkTWludXRlcyg1KTsgV3JpdGUtSG9zdCBcIl5cIlwiUnVubmluZyBhcyAkcHJpbmNpcGFsTmFtZVwiXlwiXCI7IHdoaWxlICgoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQgLWVxIDI2NzAwOSkgeyBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDIwMDsgaWYgKChHZXQtRGF0ZSkgLWd0ICR0aW1lb3V0KSB7IFdyaXRlLVdhcm5pbmcgJ1NraXBwaW5nOiBUaW1lb3V0JzsgYnJlYWs7IH07IH07IGlmICgoJHJlc3VsdCA9IChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCkgLW5lIDApIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCwgZHVlIHRvIGV4aXQgY29kZTogJHJlc3VsdC5cIl5cIlwiOyB9IH0gZmluYWxseSB7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgfCBPdXQtTnVsbDsgfTsgR2V0LUNvbnRlbnQgJHN0cmVhbUZpbGUgfSBmaW5hbGx5IHsgUmVtb3ZlLUl0ZW0gJHN0cmVhbUZpbGUsICRzY3JpcHRGaWxlOyB9OyB9OyAkY21kID0gJyRyZXZlcnQgPSAkdHJ1ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHBhdGhHbG9iUGF0dGVybiA9IFwiXlwiXCIlUFJPR1JBTUZJTEVTJVxcV2luZG93cyBEZWZlbmRlclxcbXB1eGhvc3Rwcm94eS5kbGwuT0xEXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGV4cGFuZGVkUGF0aCA9IFtTeXN0ZW0uRW52aXJvbm1lbnRdOjpFeHBhbmRFbnZpcm9ubWVudFZhcmlhYmxlcygkcGF0aEdsb2JQYXR0ZXJuKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU2VhcmNoaW5nIGZvciBpdGVtcyBtYXRjaGluZyBwYXR0ZXJuOiBgXCJeXCJcIiQoJGV4cGFuZGVkUGF0aClgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJHJlbmFtZWRDb3VudCAgID0gMCcrXCJeXCJcImByYG5cIl5cIlwiKyckc2tpcHBlZENvdW50ICAgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRmYWlsZWRDb3VudCAgICA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZm91bmRBYnNvbHV0ZVBhdGhzID0gQCgpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJGZvdW5kQWJzb2x1dGVQYXRocyArPSBAKCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBHZXQtSXRlbSAtUGF0aCAkZXhwYW5kZWRQYXRoIC1FcnJvckFjdGlvbiBTdG9wIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgRnVsbE5hbWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkl0ZW1Ob3RGb3VuZEV4Y2VwdGlvbl0geycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIDwjIFN3YWxsb3csIGRvIG5vdCBydW4gYFRlc3QtUGF0aGAgYmVmb3JlLCBpdCcncyB1bnJlbGlhYmxlIGZvciBnbG9icyByZXF1aXJpbmcgZXh0cmEgcGVybWlzc2lvbnMgIz4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRmb3VuZEFic29sdXRlUGF0aHMgPSAkZm91bmRBYnNvbHV0ZVBhdGhzICAgYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHwgU2VsZWN0LU9iamVjdCAtVW5pcXVlICAgICAgICAgICAgICAgICBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgeyAkXy5MZW5ndGggfSAtRGVzY2VuZGluZycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKCEkZm91bmRBYnNvbHV0ZVBhdGhzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nLCBubyBpdGVtcyBhdmFpbGFibGUuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBleGl0IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIkluaXRpYXRpbmcgcHJvY2Vzc2luZyBvZiAkKCRmb3VuZEFic29sdXRlUGF0aHMuQ291bnQpIGl0ZW1zIGZyb20gYFwiXlwiXCIkZXhwYW5kZWRQYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJHBhdGggaW4gJGZvdW5kQWJzb2x1dGVQYXRocykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmIChUZXN0LVBhdGggLVBhdGggJHBhdGggLVBhdGhUeXBlIENvbnRhaW5lcikgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiU2tpcHBpbmcgZm9sZGVyIChub3QgaXRzIGNvbnRlbnRzKTogYFwiXlwiXCIkcGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydpZigkcmV2ZXJ0IC1lcSAkdHJ1ZSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1ub3QgJHBhdGguRW5kc1dpdGgoJycuT0xEJycpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiU2tpcHBpbmcgbm9uLWJhY2t1cCBmaWxlOiBgXCJeXCJcIiRwYXRoYFwiXlwiXCIuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRza2lwcGVkQ291bnQrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGNvbnRpbnVlJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJ30gZWxzZSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoJHBhdGguRW5kc1dpdGgoJycuT0xEJycpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiU2tpcHBpbmcgYmFja3VwIGZpbGU6IGBcIl5cIlwiJHBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHNraXBwZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckb3JpZ2luYWxGaWxlUGF0aCA9ICRwYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJ1dyaXRlLUhvc3QgXCJeXCJcIlByb2Nlc3NpbmcgZmlsZTogYFwiXlwiXCIkb3JpZ2luYWxGaWxlUGF0aGBcIl5cIlwiLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKC1Ob3QgKFRlc3QtUGF0aCAkb3JpZ2luYWxGaWxlUGF0aCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlNraXBwaW5nLCBmaWxlIGBcIl5cIlwiJG9yaWdpbmFsRmlsZVBhdGhgXCJeXCJcIiBub3QgZm91bmQuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNraXBwZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBleGl0IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKycnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRyZXZlcnQgLWVxICR0cnVlKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkbmV3RmlsZVBhdGggPSAkb3JpZ2luYWxGaWxlUGF0aC5TdWJzdHJpbmcoMCwgJG9yaWdpbmFsRmlsZVBhdGguTGVuZ3RoIC0gNCknK1wiXlwiXCJgcmBuXCJeXCJcIisnfSBlbHNlIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRuZXdGaWxlUGF0aCA9IFwiXlwiXCIkKCRvcmlnaW5hbEZpbGVQYXRoKS5PTERcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisndHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIE1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggXCJeXCJcIiQoJG9yaWdpbmFsRmlsZVBhdGgpXCJeXCJcIiAtRGVzdGluYXRpb24gXCJeXCJcIiRuZXdGaWxlUGF0aFwiXlwiXCIgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGBcIl5cIlwiJG9yaWdpbmFsRmlsZVBhdGhgXCJeXCJcIi5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkcmVuYW1lZENvdW50KysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICcrXCJeXCJcImByYG5cIl5cIlwiKyd9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVuYW1lIGBcIl5cIlwiJG9yaWdpbmFsRmlsZVBhdGhgXCJeXCJcIiB0byBgXCJeXCJcIiRuZXdGaWxlUGF0aGBcIl5cIlwiOiAkKCRfLkV4Y2VwdGlvbi5NZXNzYWdlKVwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRmYWlsZWRDb3VudCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAnK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKCgkcmVuYW1lZENvdW50IC1ndCAwKSAtb3IgKCRza2lwcGVkQ291bnQgLWd0IDApKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkICRyZW5hbWVkQ291bnQgaXRlbXMgYW5kIHNraXBwZWQgJHNraXBwZWRDb3VudCBpdGVtcy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRmYWlsZWRDb3VudCAtZ3QgMCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIHByb2Nlc3MgJCgkZmFpbGVkQ291bnQpIGl0ZW1zLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKycnOyBJbnZva2UtQXNUcnVzdGVkSW5zdGFsbGVyICRjbWRcIlxuOjogUmVzdG9yZSByZWdpc3RyeSBrZXk6IEhLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxDTFNJRFxcezEzRjZBMEI2LTU3QUYtNEJBNy1BQ0FBLTYxNEJDODlDQTlEOH0gYXMgVHJ1c3RlZEluc3RhbGxlclxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcImZ1bmN0aW9uIEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIoJFNjcmlwdCkgeyAkcHJpbmNpcGFsU2lkID0gW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuU2VjdXJpdHlJZGVudGlmaWVyXTo6bmV3KCdTLTEtNS04MC05NTYwMDg4ODUtMzQxODUyMjY0OS0xODMxMDM4MDQ0LTE4NTMyOTI2MzEtMjI3MTQ3ODQ2NCcpOyAkcHJpbmNpcGFsTmFtZSA9ICRwcmluY2lwYWxTaWQuVHJhbnNsYXRlKFtTeXN0ZW0uU2VjdXJpdHkuUHJpbmNpcGFsLk5UQWNjb3VudF0pOyAkc3RyZWFtRmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyAkc2NyaXB0RmlsZSA9IE5ldy1UZW1wb3JhcnlGaWxlOyB0cnkgeyAkc2NyaXB0RmlsZSA9IFJlbmFtZS1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0RmlsZSAtTmV3TmFtZSAoJHNjcmlwdEZpbGUuQmFzZU5hbWUgKyAnLnBzMScpIC1Gb3JjZSAtUGFzc1RocnU7ICRTY3JpcHQgfCBPdXQtRmlsZSAkc2NyaXB0RmlsZSAtRW5jb2RpbmcgVVRGODsgJHRhc2tOYW1lID0gXCJeXCJcInByaXZhY3kkKFtjaGFyXTB4MDAyRSlzZXh5IGludm9rZVwiXlwiXCI7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgMj4mMSB8IE91dC1OdWxsOyAkZXhlY3V0aW9uQ29tbWFuZCA9IFwiXlwiXCJwb3dlcnNoZWxsLmV4ZSAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAnJHNjcmlwdEZpbGUnICo+JjEgfCBPdXQtRmlsZSAtRmlsZVBhdGggJyRzdHJlYW1GaWxlJyAtRW5jb2RpbmcgVVRGOFwiXlwiXCI7ICRhY3Rpb24gPSBOZXctU2NoZWR1bGVkVGFza0FjdGlvbiAtRXhlY3V0ZSAncG93ZXJzaGVsbC5leGUnIC1Bcmd1bWVudCBcIl5cIlwiLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUNvbW1hbmQgYFwiXlwiXCIkZXhlY3V0aW9uQ29tbWFuZGBcIl5cIlwiXCJeXCJcIjsgJHNldHRpbmdzID0gTmV3LVNjaGVkdWxlZFRhc2tTZXR0aW5nc1NldCAtQWxsb3dTdGFydElmT25CYXR0ZXJpZXMgLURvbnRTdG9wSWZHb2luZ09uQmF0dGVyaWVzOyBSZWdpc3Rlci1TY2hlZHVsZWRUYXNrIC1UYXNrTmFtZSAkdGFza05hbWUgLUFjdGlvbiAkYWN0aW9uIC1TZXR0aW5ncyAkc2V0dGluZ3MgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGw7IHRyeSB7ICgkc2NoZWR1bGVTZXJ2aWNlID0gTmV3LU9iamVjdCAtQ29tT2JqZWN0IFNjaGVkdWxlLlNlcnZpY2UpLkNvbm5lY3QoKTsgJHNjaGVkdWxlU2VydmljZS5HZXRGb2xkZXIoJ1xcJykuR2V0VGFzaygkdGFza05hbWUpLlJ1bkV4KCRudWxsLCAwLCAwLCAkcHJpbmNpcGFsTmFtZSkgfCBPdXQtTnVsbDsgJHRpbWVvdXQgPSAoR2V0LURhdGUpLkFkZE1pbnV0ZXMoNSk7IFdyaXRlLUhvc3QgXCJeXCJcIlJ1bm5pbmcgYXMgJHByaW5jaXBhbE5hbWVcIl5cIlwiOyB3aGlsZSAoKEdldC1TY2hlZHVsZWRUYXNrSW5mbyAkdGFza05hbWUpLkxhc3RUYXNrUmVzdWx0IC1lcSAyNjcwMDkpIHsgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAyMDA7IGlmICgoR2V0LURhdGUpIC1ndCAkdGltZW91dCkgeyBXcml0ZS1XYXJuaW5nICdTa2lwcGluZzogVGltZW91dCc7IGJyZWFrOyB9OyB9OyBpZiAoKCRyZXN1bHQgPSAoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQpIC1uZSAwKSB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQsIGR1ZSB0byBleGl0IGNvZGU6ICRyZXN1bHQuXCJeXCJcIjsgfSB9IGZpbmFsbHkgeyBzY2h0YXNrcy5leGUgL2RlbGV0ZSAvdG4gJHRhc2tOYW1lIC9mIHwgT3V0LU51bGw7IH07IEdldC1Db250ZW50ICRzdHJlYW1GaWxlIH0gZmluYWxseSB7IFJlbW92ZS1JdGVtICRzdHJlYW1GaWxlLCAkc2NyaXB0RmlsZTsgfTsgfTsgJGNtZCA9ICdmdW5jdGlvbiBDb3B5LUFjbCgkU3JjLCAkRHN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjS2V5cyA9IEAoR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJFNyYyAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJHNyY0tleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkZHN0S2V5ID0gSm9pbi1QYXRoICREc3QgJGtleS5QU0NoaWxkTmFtZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIENvcHktQWNsIC1TcmMgJGtleS5QU1BhdGggLURzdCAkZHN0S2V5JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsID0gR2V0LUFjbCAtUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2VjdGlvbnMgPSBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6QWxsIC1iYW5kICgtYm5vdCBbU3lzdGVtLlNlY3VyaXR5LkFjY2Vzc0NvbnRyb2wuQWNjZXNzQ29udHJvbFNlY3Rpb25zXTo6T3duZXIpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc2RkbCA9ICRhY2wuR2V0U2VjdXJpdHlEZXNjcmlwdG9yU2RkbEZvcm0oJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGFjbC5TZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2RkbCwgJHNlY3Rpb25zKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgU2V0LUFjbCAtUGF0aCAkRHN0IC1BY2xPYmplY3QgJGFjbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlbmFtZS1LZXlXaXRoQWNsKCRPbGQsICROZXcpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1JdGVtIC1MaXRlcmFsUGF0aCAkT2xkIC1EZXN0aW5hdGlvbiAkTmV3IC1SZWN1cnNlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byBjb3B5OiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAkT2xkIC1Ec3QgJE5ldycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNvcHkgQUNMOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkTmV3IC1Gb3JjZSAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gU3RvcCB8IE91dC1OdWxsJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZCB0byBjbGVhbiB1cDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRocm93IFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKyckcmF3UGF0aD0nJ0hLTE1cXFNPRlRXQVJFXFxDbGFzc2VzXFxDTFNJRFxcezEzRjZBMEI2LTU3QUYtNEJBNy1BQ0FBLTYxNEJDODlDQTlEOH0nJycrXCJeXCJcImByYG5cIl5cIlwiKyckc3VmZml4ID0nJy5PTEQnJycrXCJeXCJcImByYG5cIl5cIlwiKyckZ2xvYmFsOmZhaWwgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6b2sgPSAwJytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIEdldC1SZWFsKCRzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB3aGlsZSAoJHMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcyA9ICRzLlN1YnN0cmluZygwLCAkcy5MZW5ndGggLSAkc3VmZml4Lkxlbmd0aCknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHJldHVybiAkcycrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtS2V5VHJlZSgkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGRlc3QgPSBHZXQtUmVhbCAkUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHNyYyA9ICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3Jpbmcga2V5OiAnJyRkZXN0JycgZnJvbSAnJyRzcmMnJ1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmICgtTm90ICRzcmMuRW5kc1dpdGgoJHN1ZmZpeCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkc3JjICs9ICRzdWZmaXgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc3JjKSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGRhdGEuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkZGVzdCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZyB0byBhdm9pZCBkYXRhIGxvc3MuIEtleSBhbHJlYWR5IGV4aXN0cy4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIk1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHJlc3RvcmUgZnJvbSAnJyRzcmMnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGVsc2UgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1LZXlXaXRoQWNsIC1PbGQgJHNyYyAtTmV3ICRkZXN0IC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgUmVzdG9yZS1DaGlsZHJlbiAkZGVzdCcrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ2Z1bmN0aW9uIFJlc3RvcmUtQ2hpbGRyZW4oJFBhdGgpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZXMgaW4gJyckUGF0aCcnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFBhdGgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nOiBLZXkgZG9lcyBub3QgZXhpc3QuIE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICByZXR1cm4nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICR2YWx1ZXMgPSAoIGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJFBhdGggLUVycm9yQWN0aW9uIFN0b3AgfCBTZWxlY3QtT2JqZWN0IC1FeHBhbmRQcm9wZXJ0eSBQcm9wZXJ0eSBgJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICApJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBmb3JlYWNoICgkdmFsdWUgaW4gJHZhbHVlcykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyB2YWx1ZSAnJyR2YWx1ZScnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90ICR2YWx1ZS5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IE5vIGFjdGlvbiBuZWVkZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgY29udGludWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgJHJlYWwgPSBHZXQtUmVhbCAkdmFsdWUnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0IFwiXlwiXCJSZW5hbWluZyB0byAnJyRyZWFsJycuXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHRyeSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFJlbmFtZS1JdGVtUHJvcGVydHkgLUxpdGVyYWxQYXRoICRQYXRoIC1OYW1lICR2YWx1ZSAtTmV3TmFtZSAkcmVhbCAtRXJyb3JBY3Rpb24gU3RvcCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnU3VjY2Vzc2Z1bGx5IHJlc3RvcmVkLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6b2srKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0gY2F0Y2ggeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQ6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOmZhaWwrKycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRrZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCRrZXkgaW4gJGtleXMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZXN0b3JlLUtleVRyZWUgJGtleS5QU1BhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnfScrXCJeXCJcImByYG5cIl5cIlwiKydXcml0ZS1Ib3N0IFwiXlwiXCJSZXN0b3JpbmcgcmVnaXN0cnkga2V5ICcnJHJhd1BhdGgnJyByZWN1cnNpdmVseS5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyRoaXZlID0gJHJhd1BhdGguU3BsaXQoJydcXCcnKVswXScrXCJeXCJcImByYG5cIl5cIlwiKyckcGF0aCA9ICRoaXZlICsgJyc6JycgKyAkcmF3UGF0aC5TdWJzdHJpbmcoJGhpdmUuTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKydSZXN0b3JlLUtleVRyZWUgJHBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnaWYgKCRnbG9iYWw6ZmFpbCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtRXJyb3IgJydGYWlsZWQgdG8gcmVzdG9yZScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBFeGl0IDEnK1wiXlwiXCJgcmBuXCJeXCJcIisnfSc7IEludm9rZS1Bc1RydXN0ZWRJbnN0YWxsZXIgJGNtZFwiXG46OiBSZXN0b3JlIHJlZ2lzdHJ5IGtleTogSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXENMU0lEXFx7OTRGMzU1ODUtQzVENy00RDk1LUJBNzEtQTc0NUFFNzZFMkUyfSBhcyBUcnVzdGVkSW5zdGFsbGVyXG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiZnVuY3Rpb24gSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlcigkU2NyaXB0KSB7ICRwcmluY2lwYWxTaWQgPSBbU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbC5TZWN1cml0eUlkZW50aWZpZXJdOjpuZXcoJ1MtMS01LTgwLTk1NjAwODg4NS0zNDE4NTIyNjQ5LTE4MzEwMzgwNDQtMTg1MzI5MjYzMS0yMjcxNDc4NDY0Jyk7ICRwcmluY2lwYWxOYW1lID0gJHByaW5jaXBhbFNpZC5UcmFuc2xhdGUoW1N5c3RlbS5TZWN1cml0eS5QcmluY2lwYWwuTlRBY2NvdW50XSk7ICRzdHJlYW1GaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7ICRzY3JpcHRGaWxlID0gTmV3LVRlbXBvcmFyeUZpbGU7IHRyeSB7ICRzY3JpcHRGaWxlID0gUmVuYW1lLUl0ZW0gLUxpdGVyYWxQYXRoICRzY3JpcHRGaWxlIC1OZXdOYW1lICgkc2NyaXB0RmlsZS5CYXNlTmFtZSArICcucHMxJykgLUZvcmNlIC1QYXNzVGhydTsgJFNjcmlwdCB8IE91dC1GaWxlICRzY3JpcHRGaWxlIC1FbmNvZGluZyBVVEY4OyAkdGFza05hbWUgPSBcIl5cIlwicHJpdmFjeSQoW2NoYXJdMHgwMDJFKXNleHkgaW52b2tlXCJeXCJcIjsgc2NodGFza3MuZXhlIC9kZWxldGUgL3RuICR0YXNrTmFtZSAvZiAyPiYxIHwgT3V0LU51bGw7ICRleGVjdXRpb25Db21tYW5kID0gXCJeXCJcInBvd2Vyc2hlbGwuZXhlIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1GaWxlICckc2NyaXB0RmlsZScgKj4mMSB8IE91dC1GaWxlIC1GaWxlUGF0aCAnJHN0cmVhbUZpbGUnIC1FbmNvZGluZyBVVEY4XCJeXCJcIjsgJGFjdGlvbiA9IE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9uIC1FeGVjdXRlICdwb3dlcnNoZWxsLmV4ZScgLUFyZ3VtZW50IFwiXlwiXCItRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtQ29tbWFuZCBgXCJeXCJcIiRleGVjdXRpb25Db21tYW5kYFwiXlwiXCJcIl5cIlwiOyAkc2V0dGluZ3MgPSBOZXctU2NoZWR1bGVkVGFza1NldHRpbmdzU2V0IC1BbGxvd1N0YXJ0SWZPbkJhdHRlcmllcyAtRG9udFN0b3BJZkdvaW5nT25CYXR0ZXJpZXM7IFJlZ2lzdGVyLVNjaGVkdWxlZFRhc2sgLVRhc2tOYW1lICR0YXNrTmFtZSAtQWN0aW9uICRhY3Rpb24gLVNldHRpbmdzICRzZXR0aW5ncyAtRm9yY2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbDsgdHJ5IHsgKCRzY2hlZHVsZVNlcnZpY2UgPSBOZXctT2JqZWN0IC1Db21PYmplY3QgU2NoZWR1bGUuU2VydmljZSkuQ29ubmVjdCgpOyAkc2NoZWR1bGVTZXJ2aWNlLkdldEZvbGRlcignXFwnKS5HZXRUYXNrKCR0YXNrTmFtZSkuUnVuRXgoJG51bGwsIDAsIDAsICRwcmluY2lwYWxOYW1lKSB8IE91dC1OdWxsOyAkdGltZW91dCA9IChHZXQtRGF0ZSkuQWRkTWludXRlcyg1KTsgV3JpdGUtSG9zdCBcIl5cIlwiUnVubmluZyBhcyAkcHJpbmNpcGFsTmFtZVwiXlwiXCI7IHdoaWxlICgoR2V0LVNjaGVkdWxlZFRhc2tJbmZvICR0YXNrTmFtZSkuTGFzdFRhc2tSZXN1bHQgLWVxIDI2NzAwOSkgeyBTdGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDIwMDsgaWYgKChHZXQtRGF0ZSkgLWd0ICR0aW1lb3V0KSB7IFdyaXRlLVdhcm5pbmcgJ1NraXBwaW5nOiBUaW1lb3V0JzsgYnJlYWs7IH07IH07IGlmICgoJHJlc3VsdCA9IChHZXQtU2NoZWR1bGVkVGFza0luZm8gJHRhc2tOYW1lKS5MYXN0VGFza1Jlc3VsdCkgLW5lIDApIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCwgZHVlIHRvIGV4aXQgY29kZTogJHJlc3VsdC5cIl5cIlwiOyB9IH0gZmluYWxseSB7IHNjaHRhc2tzLmV4ZSAvZGVsZXRlIC90biAkdGFza05hbWUgL2YgfCBPdXQtTnVsbDsgfTsgR2V0LUNvbnRlbnQgJHN0cmVhbUZpbGUgfSBmaW5hbGx5IHsgUmVtb3ZlLUl0ZW0gJHN0cmVhbUZpbGUsICRzY3JpcHRGaWxlOyB9OyB9OyAkY21kID0gJ2Z1bmN0aW9uIENvcHktQWNsKCRTcmMsICREc3QpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzcmNLZXlzID0gQChHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkU3JjIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJGtleSBpbiAkc3JjS2V5cykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRkc3RLZXkgPSBKb2luLVBhdGggJERzdCAka2V5LlBTQ2hpbGROYW1lJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgQ29weS1BY2wgLVNyYyAka2V5LlBTUGF0aCAtRHN0ICRkc3RLZXknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRhY2wgPSBHZXQtQWNsIC1QYXRoICRTcmMgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzZWN0aW9ucyA9IFtTeXN0ZW0uU2VjdXJpdHkuQWNjZXNzQ29udHJvbC5BY2Nlc3NDb250cm9sU2VjdGlvbnNdOjpBbGwgLWJhbmQgKC1ibm90IFtTeXN0ZW0uU2VjdXJpdHkuQWNjZXNzQ29udHJvbC5BY2Nlc3NDb250cm9sU2VjdGlvbnNdOjpPd25lciknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICRzZGRsID0gJGFjbC5HZXRTZWN1cml0eURlc2NyaXB0b3JTZGRsRm9ybSgkc2VjdGlvbnMpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkYWNsLlNldFNlY3VyaXR5RGVzY3JpcHRvclNkZGxGb3JtKCRzZGRsLCAkc2VjdGlvbnMpJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBTZXQtQWNsIC1QYXRoICREc3QgLUFjbE9iamVjdCAkYWNsIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVuYW1lLUtleVdpdGhBY2woJE9sZCwgJE5ldykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUl0ZW0gLUxpdGVyYWxQYXRoICRPbGQgLURlc3RpbmF0aW9uICROZXcgLVJlY3Vyc2UgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB0aHJvdyBcIl5cIlwiRmFpbGVkIHRvIGNvcHk6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBDb3B5LUFjbCAtU3JjICRPbGQgLURzdCAkTmV3JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1XYXJuaW5nIFwiXlwiXCJGYWlsZWQgdG8gY29weSBBQ0w6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJE9sZCAtRm9yY2UgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIFN0b3AgfCBPdXQtTnVsbCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICROZXcgLUZvcmNlIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBTdG9wIHwgT3V0LU51bGwnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkIHRvIGNsZWFuIHVwOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdGhyb3cgXCJeXCJcIkZhaWxlZCB0byByZW1vdmU6ICRfXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJyRyYXdQYXRoPScnSEtMTVxcU09GVFdBUkVcXENsYXNzZXNcXENMU0lEXFx7OTRGMzU1ODUtQzVENy00RDk1LUJBNzEtQTc0NUFFNzZFMkUyfScnJytcIl5cIlwiYHJgblwiXlwiXCIrJyRzdWZmaXggPScnLk9MRCcnJytcIl5cIlwiYHJgblwiXlwiXCIrJyRnbG9iYWw6ZmFpbCA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnJGdsb2JhbDpvayA9IDAnK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gR2V0LVJlYWwoJHMpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIHdoaWxlICgkcy5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRzID0gJHMuU3Vic3RyaW5nKDAsICRzLkxlbmd0aCAtICRzdWZmaXguTGVuZ3RoKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgcmV0dXJuICRzJytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVzdG9yZS1LZXlUcmVlKCRQYXRoKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkZGVzdCA9IEdldC1SZWFsICRQYXRoJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAkc3JjID0gJFBhdGgnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyBrZXk6ICcnJGRlc3QnJyBmcm9tICcnJHNyYycnXCJeXCJcIicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgaWYgKC1Ob3QgJHNyYy5FbmRzV2l0aCgkc3VmZml4KSkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICRzcmMgKz0gJHN1ZmZpeCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIGlmICgtTm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRzcmMpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogTm8gZGF0YS4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBSZXN0b3JlLUNoaWxkcmVuICRkZXN0JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIHJldHVybicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRkZXN0KSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCAnJ1NraXBwaW5nIHRvIGF2b2lkIGRhdGEgbG9zcy4gS2V5IGFscmVhZHkgZXhpc3RzLicnJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiTWFudWFsIGludGVydmVudGlvbiBtYXkgYmUgcmVxdWlyZWQgdG8gZnVsbHkgcmVzdG9yZSBmcm9tICcnJHNyYycnLlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIH0gZWxzZSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVuYW1lLUtleVdpdGhBY2wgLU9sZCAkc3JjIC1OZXcgJGRlc3QgLUVycm9yQWN0aW9uIFN0b3AnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtSG9zdCAnJ1N1Y2Nlc3NmdWxseSByZXN0b3JlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICAkZ2xvYmFsOm9rKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9IGNhdGNoIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgV3JpdGUtV2FybmluZyBcIl5cIlwiRmFpbGVkOiAkX1wiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpmYWlsKysnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICB9JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBSZXN0b3JlLUNoaWxkcmVuICRkZXN0JytcIl5cIlwiYHJgblwiXlwiXCIrJ30nK1wiXlwiXCJgcmBuXCJeXCJcIisnZnVuY3Rpb24gUmVzdG9yZS1DaGlsZHJlbigkUGF0aCkgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHZhbHVlcyBpbiAnJyRQYXRoJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBpZiAoLU5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkUGF0aCkpIHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICBXcml0ZS1Ib3N0ICcnU2tpcHBpbmc6IEtleSBkb2VzIG5vdCBleGlzdC4gTm8gYWN0aW9uIG5lZWRlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIHJldHVybicrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJHZhbHVlcyA9ICggYCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkUGF0aCAtRXJyb3JBY3Rpb24gU3RvcCB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IFByb3BlcnR5IGAnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICknK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIGZvcmVhY2ggKCR2YWx1ZSBpbiAkdmFsdWVzKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgV3JpdGUtSG9zdCBcIl5cIlwiUmVzdG9yaW5nIHZhbHVlICcnJHZhbHVlJydcIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgaWYgKC1Ob3QgJHZhbHVlLkVuZHNXaXRoKCRzdWZmaXgpKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTa2lwcGluZzogTm8gYWN0aW9uIG5lZWRlZC4nJycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgICAgICBjb250aW51ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIH0nK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAkcmVhbCA9IEdldC1SZWFsICR2YWx1ZScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFdyaXRlLUhvc3QgXCJeXCJcIlJlbmFtaW5nIHRvICcnJHJlYWwnJy5cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgdHJ5IHsnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgUmVuYW1lLUl0ZW1Qcm9wZXJ0eSAtTGl0ZXJhbFBhdGggJFBhdGggLU5hbWUgJHZhbHVlIC1OZXdOYW1lICRyZWFsIC1FcnJvckFjdGlvbiBTdG9wJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLUhvc3QgJydTdWNjZXNzZnVsbHkgcmVzdG9yZWQuJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgICAgICAgICAgJGdsb2JhbDpvaysrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfSBjYXRjaCB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgIFdyaXRlLVdhcm5pbmcgXCJeXCJcIkZhaWxlZDogJF9cIl5cIlwiJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgICAgICRnbG9iYWw6ZmFpbCsrJytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICAgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgJGtleXMgPSBAKEdldC1DaGlsZEl0ZW0gLUxpdGVyYWxQYXRoICRQYXRoIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlKScrXCJeXCJcImByYG5cIl5cIlwiKycgICAgZm9yZWFjaCAoJGtleSBpbiAka2V5cykgeycrXCJeXCJcImByYG5cIl5cIlwiKycgICAgICAgIFJlc3RvcmUtS2V5VHJlZSAka2V5LlBTUGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKycgICAgfScrXCJeXCJcImByYG5cIl5cIlwiKyd9JytcIl5cIlwiYHJgblwiXlwiXCIrJ1dyaXRlLUhvc3QgXCJeXCJcIlJlc3RvcmluZyByZWdpc3RyeSBrZXkgJyckcmF3UGF0aCcnIHJlY3Vyc2l2ZWx5LlwiXlwiXCInK1wiXlwiXCJgcmBuXCJeXCJcIisnJGhpdmUgPSAkcmF3UGF0aC5TcGxpdCgnJ1xcJycpWzBdJytcIl5cIlwiYHJgblwiXlwiXCIrJyRwYXRoID0gJGhpdmUgKyAnJzonJyArICRyYXdQYXRoLlN1YnN0cmluZygkaGl2ZS5MZW5ndGgpJytcIl5cIlwiYHJgblwiXlwiXCIrJ1Jlc3RvcmUtS2V5VHJlZSAkcGF0aCcrXCJeXCJcImByYG5cIl5cIlwiKydpZiAoJGdsb2JhbDpmYWlsKSB7JytcIl5cIlwiYHJgblwiXlwiXCIrJyAgICBXcml0ZS1FcnJvciAnJ0ZhaWxlZCB0byByZXN0b3JlJycnK1wiXlwiXCJgcmBuXCJeXCJcIisnICAgIEV4aXQgMScrXCJeXCJcImByYG5cIl5cIlwiKyd9JzsgSW52b2tlLUFzVHJ1c3RlZEluc3RhbGxlciAkY21kXCIi
Help
How to apply or restore "Disable outdated "Windows Defender Security Center" interface" using commands
- ≈ 2 min to complete
- Tools: Command Prompt
- Difficulty: Medium
- ≈ 3 instructions
- 1
Open Command Prompt
Open Command Prompt as Administrator. - 2
Copy code
Copy the code: - 3
Paste & run
Paste the commands into Command Prompt and press Enter to run.Some changes require a system restart to take effect
Similar Guides
Wider Goal
Guides below includes this guide to achieve a wider goal.See other more general settings that includes this one as one of its actions.These plans combine multiple privacy settings, including this one, for stronger protection.
- Disable Windows Security interface
- Disable Defender
- Privacy over security
This category offers scripts to disable or modify different aspects of the Windows Security user interface, formerly known as Windows Defender Security C...
This category offers scripts to disable Windows security components related to Defender. Defender is also referred to as Microsoft Defender or Windows De...
Same Goal
Other guides in Disable Windows Security interface See settings that are in the same category as this guide.Using other actions in the same category may help you achieve your goal better.
See all 12 guides
About the Creators
These people have authored this documentation and written its scripts:
Reviewed By
This guide has undergone comprehensive auditing and peer review:Expert review by undergroundwires
- Verified technical accuracy and editorial standards
- Assessed system impact and user privacy risks
- Audited and verified using automated security tests
Public review by large community
- Privacy enthusiasts and professionals peer-reviewed
- Millions of end-users tested across different environments
- Audited and verified using third-party security software
History
We continually monitor our guides, their impact and other potential privacy options. We update our guides when new information becomes available. On every update, we publicly store who made the change, what has been changed, why the change was made and when the change was made.