Block Windows error reporting hosts
- Single actionThis page belongs to a script, containing basic changes to achieve a task.
- Windows onlyThis script improves your privacy on Windows
- Impact: MinimumSystem Functionality Loss Risk: Low
This action improves privacy with minimal 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 improves your privacy by preventing "Windows Error Reporting (WER)" from sending data about hardware and software issues back to Microsoft.
WER is designed to collect diagnostic information 1 and report it back to Microsoft 1 6, aiming to improve user experience by offering solutions to encountered problems 1. However, this feature can inadvertently expose sensitive system information.
By default, error reporting information is sent to Microsoft 6, which may include details that users prefer to keep private.
This script may prevent receiving automatic solutions or feedback for reported errors 1.
Blocked Hosts
The blocked hosts are:
watson.telemetry.microsoft.com
2 3 4 5 7umwatsonc.events.data.microsoft.com
2ceuswatcab01.blob.core.windows.net
2ceuswatcab02.blob.core.windows.net
2eaus2watcab01.blob.core.windows.net
2eaus2watcab02.blob.core.windows.net
2weus2watcab01.blob.core.windows.net
2weus2watcab02.blob.core.windows.net
2co4.telecommand.telemetry.microsoft.com
5 6cs11.wpc.v0cdn.net
5 6cs1137.wpc.gammacdn.net
5 6modern.watson.data.microsoft.com
5 6
Sources
- About WER - Win32 apps. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/win32/wer/about-wer
Archived: https://web.archive.org/web/20240217185900/https://learn.microsoft.com/en-us/windows/win32/wer/about-wer - Configure Windows diagnostic data in your organization (Windows 10 and Windows 11) - Windows Privacy. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/privacy/configure-windows-diagnostic-data-in-your-organization
Archived: https://web.archive.org/web/20240217185108/https://learn.microsoft.com/en-us/windows/privacy/configure-windows-diagnostic-data-in-your-organization - Connection endpoints for Windows 11 Enterprise - Windows Privacy. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/privacy/manage-windows-11-endpoints
Archived: https://web.archive.org/web/20240217185904/https://learn.microsoft.com/en-us/windows/privacy/manage-windows-11-endpoints - Windows 11 connection endpoints for non-Enterprise editions - Windows Privacy. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/privacy/windows-11-endpoints-non-enterprise-editions
Archived: https://web.archive.org/web/20240217185950/https://learn.microsoft.com/en-us/windows/privacy/windows-11-endpoints-non-enterprise-editions - Manage connection endpoints for HoloLens. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/hololens/hololens-offline
Archived: https://web.archive.org/web/20240217190247/https://learn.microsoft.com/en-us/hololens/hololens-offline - Connection endpoints for Windows 10 Enterprise, version 1903 - Windows Privacy. Microsoft Learn. learn.microsoft.com. (2024).
Original: https://learn.microsoft.com/en-us/windows/privacy/manage-windows-1903-endpoints
Archived: https://web.archive.org/web/20240217204237/https://learn.microsoft.com/en-us/windows/privacy/manage-windows-1903-endpoints - Windows 10 spies on your use of System Settings. www.michaelhorowitz.com. (2024).
Original: https://www.michaelhorowitz.com/Windows10.spying.onsettings.php
Archived: https://web.archive.org/web/20240217204251/https://www.michaelhorowitz.com/Windows10.spying.onsettings.php
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 "Block Windows error reporting hosts" 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 "Block Windows error reporting hosts" using privacy.sexy
- ≈ 3 min to complete
- Tools: privacy.sexy
- Difficulty: Simple
- ≈ 4 instructions
- 2
Choose script
- Search for the script name: Block Windows error reporting hosts
- 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
:: Add hosts entries for watson.telemetry.microsoft.com
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='watson.telemetry.microsoft.com'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for umwatsonc.events.data.microsoft.com
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='umwatsonc.events.data.microsoft.com'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for ceuswatcab01.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='ceuswatcab01.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for ceuswatcab02.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='ceuswatcab02.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for eaus2watcab01.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='eaus2watcab01.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for eaus2watcab02.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='eaus2watcab02.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for weus2watcab01.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='weus2watcab01.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for weus2watcab02.blob.core.windows.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='weus2watcab02.blob.core.windows.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for co4.telecommand.telemetry.microsoft.com
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='co4.telecommand.telemetry.microsoft.com'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for cs11.wpc.v0cdn.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='cs11.wpc.v0cdn.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for cs1137.wpc.gammacdn.net
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='cs1137.wpc.gammacdn.net'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
:: Add hosts entries for modern.watson.data.microsoft.com
PowerShell -ExecutionPolicy Unrestricted -Command "$domain ='modern.watson.data.microsoft.com'; $hostsFilePath = "^""$env:SYSTEMROOT\System32\drivers\etc\hosts"^""; $comment = "^""managed by privacy.sexy"^""; $hostsFileEncoding = [Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::Utf8; $blockingHostsEntries = @(; @{ AddressType = "^""IPv4"^""; IPAddress = '0.0.0.0'; }; @{ AddressType = "^""IPv6"^""; IPAddress = '::1'; }; ); try { $isHostsFilePresent = Test-Path -Path $hostsFilePath -PathType Leaf -ErrorAction Stop; } catch { Write-Error "^""Failed to check hosts file existence. Error: $_"^""; exit 1; }; if (-Not $isHostsFilePresent) { Write-Output "^""Creating a new hosts file at $hostsFilePath."^""; try { New-Item -Path $hostsFilePath -ItemType File -Force -ErrorAction Stop | Out-Null; Write-Output "^""Successfully created the hosts file."^""; } catch { Write-Error "^""Failed to create the hosts file. Error: $_"^""; exit 1; }; }; foreach ($blockingEntry in $blockingHostsEntries) { Write-Output "^""Processing addition for $($blockingEntry.AddressType) entry."^""; try { $hostsFileContents = Get-Content -Path "^""$hostsFilePath"^"" -Raw -Encoding $hostsFileEncoding -ErrorAction Stop; } catch { Write-Error "^""Failed to read the hosts file. Error: $_"^""; continue; }; $hostsEntryLine = "^""$($blockingEntry.IPAddress)`t$domain $([char]35) $comment"^""; if ((-Not [String]::IsNullOrWhiteSpace($hostsFileContents)) -And ($hostsFileContents.Contains($hostsEntryLine))) { Write-Output 'Skipping, entry already exists.'; continue; }; try { Add-Content -Path $hostsFilePath -Value $hostsEntryLine -Encoding $hostsFileEncoding -ErrorAction Stop; Write-Output 'Successfully added the entry.'; } catch { Write-Error "^""Failed to add the entry. Error: $_"^""; continue; }; }"
Ijo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciB3YXRzb24udGVsZW1ldHJ5Lm1pY3Jvc29mdC5jb21cblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCIkZG9tYWluID0nd2F0c29uLnRlbGVtZXRyeS5taWNyb3NvZnQuY29tJzsgJGhvc3RzRmlsZVBhdGggPSBcIl5cIlwiJGVudjpTWVNURU1ST09UXFxTeXN0ZW0zMlxcZHJpdmVyc1xcZXRjXFxob3N0c1wiXlwiXCI7ICRjb21tZW50ID0gXCJeXCJcIm1hbmFnZWQgYnkgcHJpdmFjeS5zZXh5XCJeXCJcIjsgJGhvc3RzRmlsZUVuY29kaW5nID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGODsgJGJsb2NraW5nSG9zdHNFbnRyaWVzID0gQCg7IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjRcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzAuMC4wLjAnOyB9OyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY2XCJeXCJcIjsgIElQQWRkcmVzcyA9ICc6OjEnOyB9OyApOyB0cnkgeyAkaXNIb3N0c0ZpbGVQcmVzZW50ID0gVGVzdC1QYXRoIC1QYXRoICRob3N0c0ZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmIC1FcnJvckFjdGlvbiBTdG9wOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byBjaGVjayBob3N0cyBmaWxlIGV4aXN0ZW5jZS4gRXJyb3I6ICRfXCJeXCJcIjsgZXhpdCAxOyB9OyBpZiAoLU5vdCAkaXNIb3N0c0ZpbGVQcmVzZW50KSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIHRoZSBob3N0cyBmaWxlIGRvZXMgbm90IGV4aXN0Lic7IGV4aXQgMDsgfTsgZm9yZWFjaCAoJGJsb2NraW5nRW50cnkgaW4gJGJsb2NraW5nSG9zdHNFbnRyaWVzKSB7IFdyaXRlLU91dHB1dCBcIl5cIlwiUHJvY2Vzc2luZyByZW1vdmFsIGZvciAkKCRibG9ja2luZ0VudHJ5LkFkZHJlc3NUeXBlKSBlbnRyeS5cIl5cIlwiOyB0cnkgeyAkaG9zdHNGaWxlQ29udGVudHMgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVhZCB0aGUgaG9zdHMgZmlsZSBmb3IgcmVtb3ZhbC4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07ICRob3N0c0VudHJ5TGluZSA9IFwiXlwiXCIkKCRibG9ja2luZ0VudHJ5LklQQWRkcmVzcylgdCRkb21haW4gJChbY2hhcl0zNSkgJGNvbW1lbnRcIl5cIlwiOyBpZiAoW1N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkaG9zdHNGaWxlQ29udGVudHMpIC1PciAoLU5vdCAkaG9zdHNGaWxlQ29udGVudHMuQ29udGFpbnMoJGhvc3RzRW50cnlMaW5lKSkpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgZW50cnkgbm90IGZvdW5kLic7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuID0gW3JlZ2V4XTo6RXNjYXBlKCRob3N0c0VudHJ5TGluZSkgKyBcIl5cIlwiKFxccj9cXG4pP1wiXlwiXCI7ICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsID0gJGhvc3RzRmlsZUNvbnRlbnRzIC1SZXBsYWNlICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4sIFwiXlwiXCJcIl5cIlwiOyB0cnkgeyBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyBXcml0ZS1PdXRwdXQgJ1N1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBlbnRyeS4nOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZW1vdmUgdGhlIGVudHJ5LiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgfVwiXG46OiBSZW1vdmUgaG9zdHMgZW50cmllcyBmb3IgdW13YXRzb25jLmV2ZW50cy5kYXRhLm1pY3Jvc29mdC5jb21cblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCIkZG9tYWluID0ndW13YXRzb25jLmV2ZW50cy5kYXRhLm1pY3Jvc29mdC5jb20nOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciBjZXVzd2F0Y2FiMDEuYmxvYi5jb3JlLndpbmRvd3MubmV0XG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiJGRvbWFpbiA9J2NldXN3YXRjYWIwMS5ibG9iLmNvcmUud2luZG93cy5uZXQnOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciBjZXVzd2F0Y2FiMDIuYmxvYi5jb3JlLndpbmRvd3MubmV0XG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiJGRvbWFpbiA9J2NldXN3YXRjYWIwMi5ibG9iLmNvcmUud2luZG93cy5uZXQnOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciBlYXVzMndhdGNhYjAxLmJsb2IuY29yZS53aW5kb3dzLm5ldFxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcIiRkb21haW4gPSdlYXVzMndhdGNhYjAxLmJsb2IuY29yZS53aW5kb3dzLm5ldCc7ICRob3N0c0ZpbGVQYXRoID0gXCJeXCJcIiRlbnY6U1lTVEVNUk9PVFxcU3lzdGVtMzJcXGRyaXZlcnNcXGV0Y1xcaG9zdHNcIl5cIlwiOyAkY29tbWVudCA9IFwiXlwiXCJtYW5hZ2VkIGJ5IHByaXZhY3kuc2V4eVwiXlwiXCI7ICRob3N0c0ZpbGVFbmNvZGluZyA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjg7ICRibG9ja2luZ0hvc3RzRW50cmllcyA9IEAoOyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY0XCJeXCJcIjsgIElQQWRkcmVzcyA9ICcwLjAuMC4wJzsgfTsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NlwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnOjoxJzsgfTsgKTsgdHJ5IHsgJGlzSG9zdHNGaWxlUHJlc2VudCA9IFRlc3QtUGF0aCAtUGF0aCAkaG9zdHNGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZiAtRXJyb3JBY3Rpb24gU3RvcDsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gY2hlY2sgaG9zdHMgZmlsZSBleGlzdGVuY2UuIEVycm9yOiAkX1wiXlwiXCI7IGV4aXQgMTsgfTsgaWYgKC1Ob3QgJGlzSG9zdHNGaWxlUHJlc2VudCkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCB0aGUgaG9zdHMgZmlsZSBkb2VzIG5vdCBleGlzdC4nOyBleGl0IDA7IH07IGZvcmVhY2ggKCRibG9ja2luZ0VudHJ5IGluICRibG9ja2luZ0hvc3RzRW50cmllcykgeyBXcml0ZS1PdXRwdXQgXCJeXCJcIlByb2Nlc3NpbmcgcmVtb3ZhbCBmb3IgJCgkYmxvY2tpbmdFbnRyeS5BZGRyZXNzVHlwZSkgZW50cnkuXCJeXCJcIjsgdHJ5IHsgJGhvc3RzRmlsZUNvbnRlbnRzID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVFbmNvZGluZyk7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlYWQgdGhlIGhvc3RzIGZpbGUgZm9yIHJlbW92YWwuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeUxpbmUgPSBcIl5cIlwiJCgkYmxvY2tpbmdFbnRyeS5JUEFkZHJlc3MpYHQkZG9tYWluICQoW2NoYXJdMzUpICRjb21tZW50XCJeXCJcIjsgaWYgKFtTdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGhvc3RzRmlsZUNvbnRlbnRzKSAtT3IgKC1Ob3QgJGhvc3RzRmlsZUNvbnRlbnRzLkNvbnRhaW5zKCRob3N0c0VudHJ5TGluZSkpKSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIGVudHJ5IG5vdCBmb3VuZC4nOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiA9IFtyZWdleF06OkVzY2FwZSgkaG9zdHNFbnRyeUxpbmUpICsgXCJeXCJcIihcXHI/XFxuKT9cIl5cIlwiOyAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCA9ICRob3N0c0ZpbGVDb250ZW50cyAtUmVwbGFjZSAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuLCBcIl5cIlwiXCJeXCJcIjsgdHJ5IHsgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgV3JpdGUtT3V0cHV0ICdTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZW50cnkuJzsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBlbnRyeS4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07IH1cIlxuOjogUmVtb3ZlIGhvc3RzIGVudHJpZXMgZm9yIGVhdXMyd2F0Y2FiMDIuYmxvYi5jb3JlLndpbmRvd3MubmV0XG5Qb3dlclNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgVW5yZXN0cmljdGVkIC1Db21tYW5kIFwiJGRvbWFpbiA9J2VhdXMyd2F0Y2FiMDIuYmxvYi5jb3JlLndpbmRvd3MubmV0JzsgJGhvc3RzRmlsZVBhdGggPSBcIl5cIlwiJGVudjpTWVNURU1ST09UXFxTeXN0ZW0zMlxcZHJpdmVyc1xcZXRjXFxob3N0c1wiXlwiXCI7ICRjb21tZW50ID0gXCJeXCJcIm1hbmFnZWQgYnkgcHJpdmFjeS5zZXh5XCJeXCJcIjsgJGhvc3RzRmlsZUVuY29kaW5nID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGODsgJGJsb2NraW5nSG9zdHNFbnRyaWVzID0gQCg7IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjRcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzAuMC4wLjAnOyB9OyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY2XCJeXCJcIjsgIElQQWRkcmVzcyA9ICc6OjEnOyB9OyApOyB0cnkgeyAkaXNIb3N0c0ZpbGVQcmVzZW50ID0gVGVzdC1QYXRoIC1QYXRoICRob3N0c0ZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmIC1FcnJvckFjdGlvbiBTdG9wOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byBjaGVjayBob3N0cyBmaWxlIGV4aXN0ZW5jZS4gRXJyb3I6ICRfXCJeXCJcIjsgZXhpdCAxOyB9OyBpZiAoLU5vdCAkaXNIb3N0c0ZpbGVQcmVzZW50KSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIHRoZSBob3N0cyBmaWxlIGRvZXMgbm90IGV4aXN0Lic7IGV4aXQgMDsgfTsgZm9yZWFjaCAoJGJsb2NraW5nRW50cnkgaW4gJGJsb2NraW5nSG9zdHNFbnRyaWVzKSB7IFdyaXRlLU91dHB1dCBcIl5cIlwiUHJvY2Vzc2luZyByZW1vdmFsIGZvciAkKCRibG9ja2luZ0VudHJ5LkFkZHJlc3NUeXBlKSBlbnRyeS5cIl5cIlwiOyB0cnkgeyAkaG9zdHNGaWxlQ29udGVudHMgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVhZCB0aGUgaG9zdHMgZmlsZSBmb3IgcmVtb3ZhbC4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07ICRob3N0c0VudHJ5TGluZSA9IFwiXlwiXCIkKCRibG9ja2luZ0VudHJ5LklQQWRkcmVzcylgdCRkb21haW4gJChbY2hhcl0zNSkgJGNvbW1lbnRcIl5cIlwiOyBpZiAoW1N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkaG9zdHNGaWxlQ29udGVudHMpIC1PciAoLU5vdCAkaG9zdHNGaWxlQ29udGVudHMuQ29udGFpbnMoJGhvc3RzRW50cnlMaW5lKSkpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgZW50cnkgbm90IGZvdW5kLic7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuID0gW3JlZ2V4XTo6RXNjYXBlKCRob3N0c0VudHJ5TGluZSkgKyBcIl5cIlwiKFxccj9cXG4pP1wiXlwiXCI7ICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsID0gJGhvc3RzRmlsZUNvbnRlbnRzIC1SZXBsYWNlICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4sIFwiXlwiXCJcIl5cIlwiOyB0cnkgeyBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyBXcml0ZS1PdXRwdXQgJ1N1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBlbnRyeS4nOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZW1vdmUgdGhlIGVudHJ5LiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgfVwiXG46OiBSZW1vdmUgaG9zdHMgZW50cmllcyBmb3Igd2V1czJ3YXRjYWIwMS5ibG9iLmNvcmUud2luZG93cy5uZXRcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCIkZG9tYWluID0nd2V1czJ3YXRjYWIwMS5ibG9iLmNvcmUud2luZG93cy5uZXQnOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciB3ZXVzMndhdGNhYjAyLmJsb2IuY29yZS53aW5kb3dzLm5ldFxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcIiRkb21haW4gPSd3ZXVzMndhdGNhYjAyLmJsb2IuY29yZS53aW5kb3dzLm5ldCc7ICRob3N0c0ZpbGVQYXRoID0gXCJeXCJcIiRlbnY6U1lTVEVNUk9PVFxcU3lzdGVtMzJcXGRyaXZlcnNcXGV0Y1xcaG9zdHNcIl5cIlwiOyAkY29tbWVudCA9IFwiXlwiXCJtYW5hZ2VkIGJ5IHByaXZhY3kuc2V4eVwiXlwiXCI7ICRob3N0c0ZpbGVFbmNvZGluZyA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjg7ICRibG9ja2luZ0hvc3RzRW50cmllcyA9IEAoOyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY0XCJeXCJcIjsgIElQQWRkcmVzcyA9ICcwLjAuMC4wJzsgfTsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NlwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnOjoxJzsgfTsgKTsgdHJ5IHsgJGlzSG9zdHNGaWxlUHJlc2VudCA9IFRlc3QtUGF0aCAtUGF0aCAkaG9zdHNGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZiAtRXJyb3JBY3Rpb24gU3RvcDsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gY2hlY2sgaG9zdHMgZmlsZSBleGlzdGVuY2UuIEVycm9yOiAkX1wiXlwiXCI7IGV4aXQgMTsgfTsgaWYgKC1Ob3QgJGlzSG9zdHNGaWxlUHJlc2VudCkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCB0aGUgaG9zdHMgZmlsZSBkb2VzIG5vdCBleGlzdC4nOyBleGl0IDA7IH07IGZvcmVhY2ggKCRibG9ja2luZ0VudHJ5IGluICRibG9ja2luZ0hvc3RzRW50cmllcykgeyBXcml0ZS1PdXRwdXQgXCJeXCJcIlByb2Nlc3NpbmcgcmVtb3ZhbCBmb3IgJCgkYmxvY2tpbmdFbnRyeS5BZGRyZXNzVHlwZSkgZW50cnkuXCJeXCJcIjsgdHJ5IHsgJGhvc3RzRmlsZUNvbnRlbnRzID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVFbmNvZGluZyk7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlYWQgdGhlIGhvc3RzIGZpbGUgZm9yIHJlbW92YWwuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeUxpbmUgPSBcIl5cIlwiJCgkYmxvY2tpbmdFbnRyeS5JUEFkZHJlc3MpYHQkZG9tYWluICQoW2NoYXJdMzUpICRjb21tZW50XCJeXCJcIjsgaWYgKFtTdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGhvc3RzRmlsZUNvbnRlbnRzKSAtT3IgKC1Ob3QgJGhvc3RzRmlsZUNvbnRlbnRzLkNvbnRhaW5zKCRob3N0c0VudHJ5TGluZSkpKSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIGVudHJ5IG5vdCBmb3VuZC4nOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiA9IFtyZWdleF06OkVzY2FwZSgkaG9zdHNFbnRyeUxpbmUpICsgXCJeXCJcIihcXHI/XFxuKT9cIl5cIlwiOyAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCA9ICRob3N0c0ZpbGVDb250ZW50cyAtUmVwbGFjZSAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuLCBcIl5cIlwiXCJeXCJcIjsgdHJ5IHsgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgV3JpdGUtT3V0cHV0ICdTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZW50cnkuJzsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBlbnRyeS4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07IH1cIlxuOjogUmVtb3ZlIGhvc3RzIGVudHJpZXMgZm9yIGNvNC50ZWxlY29tbWFuZC50ZWxlbWV0cnkubWljcm9zb2Z0LmNvbVxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcIiRkb21haW4gPSdjbzQudGVsZWNvbW1hbmQudGVsZW1ldHJ5Lm1pY3Jvc29mdC5jb20nOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciBjczExLndwYy52MGNkbi5uZXRcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCIkZG9tYWluID0nY3MxMS53cGMudjBjZG4ubmV0JzsgJGhvc3RzRmlsZVBhdGggPSBcIl5cIlwiJGVudjpTWVNURU1ST09UXFxTeXN0ZW0zMlxcZHJpdmVyc1xcZXRjXFxob3N0c1wiXlwiXCI7ICRjb21tZW50ID0gXCJeXCJcIm1hbmFnZWQgYnkgcHJpdmFjeS5zZXh5XCJeXCJcIjsgJGhvc3RzRmlsZUVuY29kaW5nID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGODsgJGJsb2NraW5nSG9zdHNFbnRyaWVzID0gQCg7IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjRcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzAuMC4wLjAnOyB9OyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY2XCJeXCJcIjsgIElQQWRkcmVzcyA9ICc6OjEnOyB9OyApOyB0cnkgeyAkaXNIb3N0c0ZpbGVQcmVzZW50ID0gVGVzdC1QYXRoIC1QYXRoICRob3N0c0ZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmIC1FcnJvckFjdGlvbiBTdG9wOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byBjaGVjayBob3N0cyBmaWxlIGV4aXN0ZW5jZS4gRXJyb3I6ICRfXCJeXCJcIjsgZXhpdCAxOyB9OyBpZiAoLU5vdCAkaXNIb3N0c0ZpbGVQcmVzZW50KSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIHRoZSBob3N0cyBmaWxlIGRvZXMgbm90IGV4aXN0Lic7IGV4aXQgMDsgfTsgZm9yZWFjaCAoJGJsb2NraW5nRW50cnkgaW4gJGJsb2NraW5nSG9zdHNFbnRyaWVzKSB7IFdyaXRlLU91dHB1dCBcIl5cIlwiUHJvY2Vzc2luZyByZW1vdmFsIGZvciAkKCRibG9ja2luZ0VudHJ5LkFkZHJlc3NUeXBlKSBlbnRyeS5cIl5cIlwiOyB0cnkgeyAkaG9zdHNGaWxlQ29udGVudHMgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVhZCB0aGUgaG9zdHMgZmlsZSBmb3IgcmVtb3ZhbC4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07ICRob3N0c0VudHJ5TGluZSA9IFwiXlwiXCIkKCRibG9ja2luZ0VudHJ5LklQQWRkcmVzcylgdCRkb21haW4gJChbY2hhcl0zNSkgJGNvbW1lbnRcIl5cIlwiOyBpZiAoW1N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkaG9zdHNGaWxlQ29udGVudHMpIC1PciAoLU5vdCAkaG9zdHNGaWxlQ29udGVudHMuQ29udGFpbnMoJGhvc3RzRW50cnlMaW5lKSkpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgZW50cnkgbm90IGZvdW5kLic7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuID0gW3JlZ2V4XTo6RXNjYXBlKCRob3N0c0VudHJ5TGluZSkgKyBcIl5cIlwiKFxccj9cXG4pP1wiXlwiXCI7ICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsID0gJGhvc3RzRmlsZUNvbnRlbnRzIC1SZXBsYWNlICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4sIFwiXlwiXCJcIl5cIlwiOyB0cnkgeyBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVDb250ZW50QWZ0ZXJSZW1vdmFsLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyBXcml0ZS1PdXRwdXQgJ1N1Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBlbnRyeS4nOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZW1vdmUgdGhlIGVudHJ5LiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgfVwiXG46OiBSZW1vdmUgaG9zdHMgZW50cmllcyBmb3IgY3MxMTM3LndwYy5nYW1tYWNkbi5uZXRcblBvd2VyU2hlbGwgLUV4ZWN1dGlvblBvbGljeSBVbnJlc3RyaWN0ZWQgLUNvbW1hbmQgXCIkZG9tYWluID0nY3MxMTM3LndwYy5nYW1tYWNkbi5uZXQnOyAkaG9zdHNGaWxlUGF0aCA9IFwiXlwiXCIkZW52OlNZU1RFTVJPT1RcXFN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXGhvc3RzXCJeXCJcIjsgJGNvbW1lbnQgPSBcIl5cIlwibWFuYWdlZCBieSBwcml2YWN5LnNleHlcIl5cIlwiOyAkaG9zdHNGaWxlRW5jb2RpbmcgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4OyAkYmxvY2tpbmdIb3N0c0VudHJpZXMgPSBAKDsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NFwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnMC4wLjAuMCc7IH07IEB7IEFkZHJlc3NUeXBlID0gXCJeXCJcIklQdjZcIl5cIlwiOyAgSVBBZGRyZXNzID0gJzo6MSc7IH07ICk7IHRyeSB7ICRpc0hvc3RzRmlsZVByZXNlbnQgPSBUZXN0LVBhdGggLVBhdGggJGhvc3RzRmlsZVBhdGggLVBhdGhUeXBlIExlYWYgLUVycm9yQWN0aW9uIFN0b3A7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIGNoZWNrIGhvc3RzIGZpbGUgZXhpc3RlbmNlLiBFcnJvcjogJF9cIl5cIlwiOyBleGl0IDE7IH07IGlmICgtTm90ICRpc0hvc3RzRmlsZVByZXNlbnQpIHsgV3JpdGUtT3V0cHV0ICdTa2lwcGluZywgdGhlIGhvc3RzIGZpbGUgZG9lcyBub3QgZXhpc3QuJzsgZXhpdCAwOyB9OyBmb3JlYWNoICgkYmxvY2tpbmdFbnRyeSBpbiAkYmxvY2tpbmdIb3N0c0VudHJpZXMpIHsgV3JpdGUtT3V0cHV0IFwiXlwiXCJQcm9jZXNzaW5nIHJlbW92YWwgZm9yICQoJGJsb2NraW5nRW50cnkuQWRkcmVzc1R5cGUpIGVudHJ5LlwiXlwiXCI7IHRyeSB7ICRob3N0c0ZpbGVDb250ZW50cyA9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlRW5jb2RpbmcpOyB9IGNhdGNoIHsgV3JpdGUtRXJyb3IgXCJeXCJcIkZhaWxlZCB0byByZWFkIHRoZSBob3N0cyBmaWxlIGZvciByZW1vdmFsLiBFcnJvcjogJF9cIl5cIlwiOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlMaW5lID0gXCJeXCJcIiQoJGJsb2NraW5nRW50cnkuSVBBZGRyZXNzKWB0JGRvbWFpbiAkKFtjaGFyXTM1KSAkY29tbWVudFwiXlwiXCI7IGlmIChbU3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRob3N0c0ZpbGVDb250ZW50cykgLU9yICgtTm90ICRob3N0c0ZpbGVDb250ZW50cy5Db250YWlucygkaG9zdHNFbnRyeUxpbmUpKSkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCBlbnRyeSBub3QgZm91bmQuJzsgY29udGludWU7IH07ICRob3N0c0VudHJ5UmVtb3ZhbFBhdHRlcm4gPSBbcmVnZXhdOjpFc2NhcGUoJGhvc3RzRW50cnlMaW5lKSArIFwiXlwiXCIoXFxyP1xcbik/XCJeXCJcIjsgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwgPSAkaG9zdHNGaWxlQ29udGVudHMgLVJlcGxhY2UgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiwgXCJeXCJcIlwiXlwiXCI7IHRyeSB7IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgkaG9zdHNGaWxlUGF0aCwgJGhvc3RzRmlsZUNvbnRlbnRBZnRlclJlbW92YWwsICRob3N0c0ZpbGVFbmNvZGluZyk7IFdyaXRlLU91dHB1dCAnU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIGVudHJ5Lic7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlbW92ZSB0aGUgZW50cnkuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyB9XCJcbjo6IFJlbW92ZSBob3N0cyBlbnRyaWVzIGZvciBtb2Rlcm4ud2F0c29uLmRhdGEubWljcm9zb2Z0LmNvbVxuUG93ZXJTaGVsbCAtRXhlY3V0aW9uUG9saWN5IFVucmVzdHJpY3RlZCAtQ29tbWFuZCBcIiRkb21haW4gPSdtb2Rlcm4ud2F0c29uLmRhdGEubWljcm9zb2Z0LmNvbSc7ICRob3N0c0ZpbGVQYXRoID0gXCJeXCJcIiRlbnY6U1lTVEVNUk9PVFxcU3lzdGVtMzJcXGRyaXZlcnNcXGV0Y1xcaG9zdHNcIl5cIlwiOyAkY29tbWVudCA9IFwiXlwiXCJtYW5hZ2VkIGJ5IHByaXZhY3kuc2V4eVwiXlwiXCI7ICRob3N0c0ZpbGVFbmNvZGluZyA9IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjg7ICRibG9ja2luZ0hvc3RzRW50cmllcyA9IEAoOyBAeyBBZGRyZXNzVHlwZSA9IFwiXlwiXCJJUHY0XCJeXCJcIjsgIElQQWRkcmVzcyA9ICcwLjAuMC4wJzsgfTsgQHsgQWRkcmVzc1R5cGUgPSBcIl5cIlwiSVB2NlwiXlwiXCI7ICBJUEFkZHJlc3MgPSAnOjoxJzsgfTsgKTsgdHJ5IHsgJGlzSG9zdHNGaWxlUHJlc2VudCA9IFRlc3QtUGF0aCAtUGF0aCAkaG9zdHNGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZiAtRXJyb3JBY3Rpb24gU3RvcDsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gY2hlY2sgaG9zdHMgZmlsZSBleGlzdGVuY2UuIEVycm9yOiAkX1wiXlwiXCI7IGV4aXQgMTsgfTsgaWYgKC1Ob3QgJGlzSG9zdHNGaWxlUHJlc2VudCkgeyBXcml0ZS1PdXRwdXQgJ1NraXBwaW5nLCB0aGUgaG9zdHMgZmlsZSBkb2VzIG5vdCBleGlzdC4nOyBleGl0IDA7IH07IGZvcmVhY2ggKCRibG9ja2luZ0VudHJ5IGluICRibG9ja2luZ0hvc3RzRW50cmllcykgeyBXcml0ZS1PdXRwdXQgXCJeXCJcIlByb2Nlc3NpbmcgcmVtb3ZhbCBmb3IgJCgkYmxvY2tpbmdFbnRyeS5BZGRyZXNzVHlwZSkgZW50cnkuXCJeXCJcIjsgdHJ5IHsgJGhvc3RzRmlsZUNvbnRlbnRzID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGhvc3RzRmlsZVBhdGgsICRob3N0c0ZpbGVFbmNvZGluZyk7IH0gY2F0Y2ggeyBXcml0ZS1FcnJvciBcIl5cIlwiRmFpbGVkIHRvIHJlYWQgdGhlIGhvc3RzIGZpbGUgZm9yIHJlbW92YWwuIEVycm9yOiAkX1wiXlwiXCI7IGNvbnRpbnVlOyB9OyAkaG9zdHNFbnRyeUxpbmUgPSBcIl5cIlwiJCgkYmxvY2tpbmdFbnRyeS5JUEFkZHJlc3MpYHQkZG9tYWluICQoW2NoYXJdMzUpICRjb21tZW50XCJeXCJcIjsgaWYgKFtTdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGhvc3RzRmlsZUNvbnRlbnRzKSAtT3IgKC1Ob3QgJGhvc3RzRmlsZUNvbnRlbnRzLkNvbnRhaW5zKCRob3N0c0VudHJ5TGluZSkpKSB7IFdyaXRlLU91dHB1dCAnU2tpcHBpbmcsIGVudHJ5IG5vdCBmb3VuZC4nOyBjb250aW51ZTsgfTsgJGhvc3RzRW50cnlSZW1vdmFsUGF0dGVybiA9IFtyZWdleF06OkVzY2FwZSgkaG9zdHNFbnRyeUxpbmUpICsgXCJeXCJcIihcXHI/XFxuKT9cIl5cIlwiOyAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCA9ICRob3N0c0ZpbGVDb250ZW50cyAtUmVwbGFjZSAkaG9zdHNFbnRyeVJlbW92YWxQYXR0ZXJuLCBcIl5cIlwiXCJeXCJcIjsgdHJ5IHsgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCRob3N0c0ZpbGVQYXRoLCAkaG9zdHNGaWxlQ29udGVudEFmdGVyUmVtb3ZhbCwgJGhvc3RzRmlsZUVuY29kaW5nKTsgV3JpdGUtT3V0cHV0ICdTdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUgZW50cnkuJzsgfSBjYXRjaCB7IFdyaXRlLUVycm9yIFwiXlwiXCJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBlbnRyeS4gRXJyb3I6ICRfXCJeXCJcIjsgY29udGludWU7IH07IH1cIiI=