Compare commits

..

1 Commits

Author SHA1 Message Date
rhino b9ea8ae9aa Initial commit 2026-06-20 19:08:33 +02:00
29 changed files with 1 additions and 223345 deletions
-30
View File
@@ -1,30 +0,0 @@
# 29 Dateien in 2 Bundles
sync-bundle-01.txt DRIVE_Start.bat
sync-bundle-01.txt DRIVE_Stop.bat
sync-bundle-01.txt VERSION
sync-bundle-01.txt css/icons/Chevron.png
sync-bundle-01.txt css/icons/Chevron_article_closed.png
sync-bundle-01.txt css/icons/Chevron_article_open.png
sync-bundle-01.txt css/icons/audio.png
sync-bundle-01.txt css/icons/bullet_list.gif
sync-bundle-01.txt css/icons/excel.png
sync-bundle-01.txt css/icons/faq.png
sync-bundle-01.txt css/icons/image.png
sync-bundle-01.txt css/icons/important.png
sync-bundle-01.txt css/icons/numbered_list.png
sync-bundle-01.txt css/icons/pdf.png
sync-bundle-01.txt css/icons/powerpoint.png
sync-bundle-01.txt css/icons/redo.png
sync-bundle-01.txt css/icons/table.png
sync-bundle-01.txt css/icons/undo.png
sync-bundle-01.txt css/icons/video.png
sync-bundle-01.txt css/icons/word.png
sync-bundle-01.txt css/images/drive_logo_day.png
sync-bundle-01.txt css/images/drive_logo_night.png
sync-bundle-01.txt data/config.json
sync-bundle-01.txt data/governance.json
sync-bundle-01.txt data/governance.template.json
sync-bundle-01.txt data/index.js
sync-bundle-01.txt favicon.ico
sync-bundle-02.txt index.html
sync-bundle-02.txt server.ps1
-1
View File
@@ -1 +0,0 @@
3.6.0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-48
View File
@@ -1,48 +0,0 @@
@echo off
setlocal
set "BDIR=%~dp0"
echo.
echo === D.R.I.V.E.: Code aktualisieren ===
echo.
powershell -NoProfile -ExecutionPolicy Bypass -Command "$m='### PS'+'CODE ###';$me=[IO.File]::ReadAllText('%~f0');$p=$me.IndexOf($m);$nl=$me.IndexOf([char]10,$p);Invoke-Expression $me.Substring($nl+1)"
echo.
pause
exit /b
### PSCODE ###
$ErrorActionPreference = 'Stop'
$here = $env:BDIR
$root = Split-Path -Parent ($here.TrimEnd('\'))
if (-not (Test-Path -LiteralPath (Join-Path $root 'index.html'))) {
Write-Host ('FEHLER: ' + $root + ' ist nicht die App-Wurzel.') -ForegroundColor Red; return
}
Write-Host ('Ziel: ' + $root)
$bundles = Get-ChildItem -LiteralPath $here -Filter 'sync-bundle-*.txt' | Sort-Object Name
if (-not $bundles) { Write-Host 'FEHLER: keine sync-bundle-*.txt gefunden.' -ForegroundColor Red; return }
$flush = {
param($d, $rel, $expLen, $b64)
if (-not $rel) { return $null }
$bytes = [Convert]::FromBase64String($b64)
$full = Join-Path $d ($rel -replace '/', '\')
$pd = Split-Path -Parent $full
if (-not (Test-Path -LiteralPath $pd)) { New-Item -ItemType Directory -Path $pd -Force | Out-Null }
[IO.File]::WriteAllBytes($full, $bytes)
return ($bytes.Length -eq $expLen)
}
$ok = 0; $bad = 0; $rel = $null; $expLen = 0; $sb = New-Object System.Text.StringBuilder
foreach ($b in $bundles) {
Write-Host ('-> ' + $b.Name)
foreach ($line in [IO.File]::ReadAllLines($b.FullName)) {
if ($line.StartsWith('### FILE: ')) {
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
$meta = $line.Substring(10); $k = $meta.LastIndexOf(' | ')
$rel = $meta.Substring(0, $k); $expLen = [int]$meta.Substring($k + 3); $sb = New-Object System.Text.StringBuilder
} elseif ($line.StartsWith('###')) { continue }
elseif ($line.Length -gt 0) { [void]$sb.Append($line) }
}
}
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
Write-Host ''
if ($bad -eq 0) { Write-Host ('FERTIG: ' + $ok + ' Dateien.') -ForegroundColor Green }
else { Write-Host ('FERTIG: ' + $ok + ' ok, ' + $bad + ' Fehler.') -ForegroundColor Yellow }
-144
View File
@@ -1,144 +0,0 @@
# 143 Dateien in 7 Bundles
sync-bundle-01.txt FLD_Planung.bat
sync-bundle-01.txt Images/fussball/1._FC_Heidenheim.svg
sync-bundle-01.txt Images/fussball/1._FC_Koeln.svg
sync-bundle-01.txt Images/fussball/1._FC_Union_Berlin.svg
sync-bundle-01.txt Images/fussball/1._FSV_Mainz_05.svg
sync-bundle-01.txt Images/fussball/Bayer_04_Leverkusen.svg
sync-bundle-01.txt Images/fussball/Borussia_Dortmund.svg
sync-bundle-01.txt Images/fussball/Borussia_Moenchengladbach.svg
sync-bundle-01.txt Images/fussball/Eintracht_Frankfurt.png
sync-bundle-01.txt Images/fussball/FC_Augsburg.png
sync-bundle-01.txt Images/fussball/FC_Bayern_Muenchen.svg
sync-bundle-01.txt Images/fussball/FC_St._Pauli.png
sync-bundle-01.txt Images/fussball/Hamburger_SV.svg
sync-bundle-02.txt Images/fussball/RB_Leipzig.png
sync-bundle-03.txt Images/fussball/SC_Freiburg.png
sync-bundle-03.txt Images/fussball/SV_Werder_Bremen.svg
sync-bundle-03.txt Images/fussball/TSG_Hoffenheim.png
sync-bundle-03.txt Images/fussball/VfB_Stuttgart.svg
sync-bundle-03.txt Images/fussball/VfL_Wolfsburg.svg
sync-bundle-03.txt Images/misc/bagger.png
sync-bundle-03.txt Images/misc/fahrrad.png
sync-bundle-03.txt Images/misc/flugzeug.png
sync-bundle-03.txt Images/misc/gluehbirne.png
sync-bundle-03.txt Images/misc/konzept.png
sync-bundle-03.txt Images/misc/notiz.png
sync-bundle-03.txt Images/misc/organigramm.png
sync-bundle-03.txt Images/misc/taschenrechner.png
sync-bundle-03.txt Images/misc/team.png
sync-bundle-03.txt Images/misc/termin-warnung.png
sync-bundle-03.txt Images/misc/triathlon.png
sync-bundle-03.txt Images/misc/urkunde.png
sync-bundle-03.txt Images/misc/vergleich.png
sync-bundle-03.txt Images/office/01_puzzle.png
sync-bundle-03.txt Images/office/02_dashboard-chart.png
sync-bundle-03.txt Images/office/03_document-approved.png
sync-bundle-03.txt Images/office/04_presenter-audience.png
sync-bundle-03.txt Images/office/05_team-hierarchy.png
sync-bundle-03.txt Images/office/06_info-chat.png
sync-bundle-03.txt Images/office/07_presentation-team.png
sync-bundle-03.txt Images/office/08_exchange-dialog.png
sync-bundle-03.txt Images/office/09_document-search.png
sync-bundle-03.txt Images/office/10_globe.png
sync-bundle-03.txt Images/office/11_lightbulb-idea.png
sync-bundle-03.txt Images/office/12_gavel-judgement.png
sync-bundle-03.txt Images/office/13_scales-balance.png
sync-bundle-03.txt Images/office/14_megaphone-announce.png
sync-bundle-03.txt Images/office/15_growth-chart.png
sync-bundle-03.txt Images/office/16_clipboard-checklist.png
sync-bundle-03.txt Images/office/17_mobile-tasks.png
sync-bundle-03.txt Images/office/18_monitor-options.png
sync-bundle-03.txt Images/office/19_newspaper.png
sync-bundle-03.txt Images/office/20_laptop-share.png
sync-bundle-03.txt Images/office/21_location-pin.png
sync-bundle-03.txt Images/office/22_paper-plane.png
sync-bundle-03.txt Images/office/23_social-network.png
sync-bundle-03.txt Images/office/24_meeting-table.png
sync-bundle-03.txt Images/office/25_team-connection.png
sync-bundle-03.txt Images/office/26_hourglass.png
sync-bundle-03.txt Images/office/27_coins-stack.png
sync-bundle-03.txt Images/office/28_charts-up-down.png
sync-bundle-03.txt Images/office/29_gears-cogs.png
sync-bundle-03.txt Images/office/30_line-chart-points.png
sync-bundle-03.txt Images/office/31_document-edit.png
sync-bundle-03.txt Images/office/32_people-chat-bubbles.png
sync-bundle-03.txt Images/office/33_magnifier.png
sync-bundle-03.txt Images/office/34_people-exchange.png
sync-bundle-03.txt Images/office/35_target-crosshair.png
sync-bundle-04.txt Images/polizei/01_laptop-megafon.png
sync-bundle-04.txt Images/polizei/02_person-funkgeraet.png
sync-bundle-04.txt Images/polizei/03_rauchgranate.png
sync-bundle-04.txt Images/polizei/04_demonstrant-flagge.png
sync-bundle-04.txt Images/polizei/05_haende-stopp.png
sync-bundle-04.txt Images/polizei/06_spruehdose-warnung.png
sync-bundle-04.txt Images/polizei/07_helm-sprecher.png
sync-bundle-04.txt Images/polizei/08_demonstrant-schild.png
sync-bundle-04.txt Images/polizei/09_fauste-protest.png
sync-bundle-04.txt Images/polizei/10_schlagstock-gekreuzt.png
sync-bundle-04.txt Images/polizei/11_protestschild-faust.png
sync-bundle-04.txt Images/polizei/12_menschen-tribuene.png
sync-bundle-04.txt Images/polizei/13_megafon-laut.png
sync-bundle-04.txt Images/polizei/14_menschenmenge-schilder.png
sync-bundle-04.txt Images/polizei/15_stoppschild-boden.png
sync-bundle-04.txt Images/polizei/16_banner-stopp.png
sync-bundle-04.txt Images/polizei/17_stopp-pin.png
sync-bundle-04.txt Images/polizei/18_demonstrant-jubel.png
sync-bundle-04.txt Images/polizei/19_lautsprecherboxen.png
sync-bundle-04.txt Images/polizei/20_faust-energie.png
sync-bundle-04.txt Images/polizei/21_auto-blockade.png
sync-bundle-04.txt Images/polizei/22_fahnentraeger.png
sync-bundle-04.txt Images/polizei/23_spruehdose-wirkung.png
sync-bundle-04.txt Images/polizei/24_menschenkette.png
sync-bundle-04.txt Images/polizei/25_kalender-stopp.png
sync-bundle-04.txt Images/polizei/26_hand-stopp.png
sync-bundle-04.txt Images/polizei/27_megafon-gross.png
sync-bundle-04.txt Images/polizei/28_kopf-rufer.png
sync-bundle-04.txt Images/polizei/29_dokument-stopp.png
sync-bundle-04.txt Images/polizei/30_menschen-banner.png
sync-bundle-04.txt Images/polizei/31_demonstrant-podest.png
sync-bundle-04.txt Images/polizei/32_molotow-cocktail.png
sync-bundle-04.txt Images/sport/football.svg
sync-bundle-04.txt Images/sport/handball.svg
sync-bundle-04.txt Images/sport/jersey.svg
sync-bundle-04.txt Images/sport/medic-sport.svg
sync-bundle-04.txt Images/sport/running.svg
sync-bundle-04.txt Images/sport/scoreboard.svg
sync-bundle-04.txt Images/sport/stopwatch.svg
sync-bundle-04.txt Images/sport/trophy.svg
sync-bundle-04.txt Images/sport/whistle.svg
sync-bundle-04.txt VERSION
sync-bundle-04.txt app.js
sync-bundle-04.txt heartbeat-worker.js
sync-bundle-05.txt index.html
sync-bundle-05.txt js/admin/admin.js
sync-bundle-05.txt js/admin/info-rte.js
sync-bundle-05.txt js/admin/listen.js
sync-bundle-05.txt js/admin/medien.js
sync-bundle-05.txt js/admin/personen.js
sync-bundle-05.txt js/admin/rotation-header.js
sync-bundle-05.txt js/core/api.js
sync-bundle-05.txt js/core/datenLaden.js
sync-bundle-05.txt js/core/permissions.js
sync-bundle-05.txt js/core/state.js
sync-bundle-05.txt js/core/util.js
sync-bundle-05.txt js/grid/editor.js
sync-bundle-05.txt js/grid/interaction.js
sync-bundle-05.txt js/grid/render.js
sync-bundle-05.txt js/grid/tagesdaten.js
sync-bundle-05.txt js/import/excel-import.js
sync-bundle-05.txt js/import/text-import.js
sync-bundle-05.txt js/logbuch/logbuch.js
sync-bundle-05.txt js/stats/statistik.js
sync-bundle-05.txt js/sync/cell-lock.js
sync-bundle-05.txt js/sync/sync-client.js
sync-bundle-05.txt js/ui/icons.js
sync-bundle-05.txt js/ui/modal.js
sync-bundle-05.txt js/ui/rte.js
sync-bundle-05.txt js/ui/theme-branding.js
sync-bundle-05.txt js/ui/toast.js
sync-bundle-05.txt js/wochenplan/wochenplan.js
sync-bundle-06.txt server.ps1
sync-bundle-06.txt style.css
sync-bundle-06.txt sync-worker.js
sync-bundle-07.txt xlsx.full.min.js
-1
View File
@@ -1 +0,0 @@
1.0.0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-48
View File
@@ -1,48 +0,0 @@
@echo off
setlocal
set "BDIR=%~dp0"
echo.
echo === FLD-Schichtplanung: Code aktualisieren ===
echo.
powershell -NoProfile -ExecutionPolicy Bypass -Command "$m='### PS'+'CODE ###';$me=[IO.File]::ReadAllText('%~f0');$p=$me.IndexOf($m);$nl=$me.IndexOf([char]10,$p);Invoke-Expression $me.Substring($nl+1)"
echo.
pause
exit /b
### PSCODE ###
$ErrorActionPreference = 'Stop'
$here = $env:BDIR
$root = Split-Path -Parent ($here.TrimEnd('\'))
if (-not (Test-Path -LiteralPath (Join-Path $root 'index.html'))) {
Write-Host ('FEHLER: ' + $root + ' ist nicht die App-Wurzel.') -ForegroundColor Red; return
}
Write-Host ('Ziel: ' + $root)
$bundles = Get-ChildItem -LiteralPath $here -Filter 'sync-bundle-*.txt' | Sort-Object Name
if (-not $bundles) { Write-Host 'FEHLER: keine sync-bundle-*.txt gefunden.' -ForegroundColor Red; return }
$flush = {
param($d, $rel, $expLen, $b64)
if (-not $rel) { return $null }
$bytes = [Convert]::FromBase64String($b64)
$full = Join-Path $d ($rel -replace '/', '\')
$pd = Split-Path -Parent $full
if (-not (Test-Path -LiteralPath $pd)) { New-Item -ItemType Directory -Path $pd -Force | Out-Null }
[IO.File]::WriteAllBytes($full, $bytes)
return ($bytes.Length -eq $expLen)
}
$ok = 0; $bad = 0; $rel = $null; $expLen = 0; $sb = New-Object System.Text.StringBuilder
foreach ($b in $bundles) {
Write-Host ('-> ' + $b.Name)
foreach ($line in [IO.File]::ReadAllLines($b.FullName)) {
if ($line.StartsWith('### FILE: ')) {
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
$meta = $line.Substring(10); $k = $meta.LastIndexOf(' | ')
$rel = $meta.Substring(0, $k); $expLen = [int]$meta.Substring($k + 3); $sb = New-Object System.Text.StringBuilder
} elseif ($line.StartsWith('###')) { continue }
elseif ($line.Length -gt 0) { [void]$sb.Append($line) }
}
}
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
Write-Host ''
if ($bad -eq 0) { Write-Host ('FERTIG: ' + $ok + ' Dateien.') -ForegroundColor Green }
else { Write-Host ('FERTIG: ' + $ok + ' ok, ' + $bad + ' Fehler.') -ForegroundColor Yellow }
-41
View File
@@ -1,41 +0,0 @@
# 40 Dateien in 1 Bundles
sync-bundle-01.txt Synchron_test.html
sync-bundle-01.txt VERSION
sync-bundle-01.txt assets/css/portal.css
sync-bundle-01.txt assets/img/polizeistern.png
sync-bundle-01.txt assets/img/portal-readme.png
sync-bundle-01.txt assets/img/portal.png
sync-bundle-01.txt assets/js/admin/historie.js
sync-bundle-01.txt assets/js/admin/navedit.js
sync-bundle-01.txt assets/js/admin/roles.js
sync-bundle-01.txt assets/js/admin/settings.js
sync-bundle-01.txt assets/js/collab/collab.js
sync-bundle-01.txt assets/js/core/core.js
sync-bundle-01.txt assets/js/core/datapflege.js
sync-bundle-01.txt assets/js/core/main.js
sync-bundle-01.txt assets/js/core/modal.js
sync-bundle-01.txt assets/js/data-bao.js
sync-bundle-01.txt assets/js/features/article.js
sync-bundle-01.txt assets/js/features/arztliste.js
sync-bundle-01.txt assets/js/features/bao.js
sync-bundle-01.txt assets/js/features/breadcrumbs.js
sync-bundle-01.txt assets/js/features/commands.js
sync-bundle-01.txt assets/js/features/feed.js
sync-bundle-01.txt assets/js/features/impressum.js
sync-bundle-01.txt assets/js/features/kennwoerter.js
sync-bundle-01.txt assets/js/features/linkcheck.js
sync-bundle-01.txt assets/js/features/linkcol.js
sync-bundle-01.txt assets/js/features/migrate-ui.js
sync-bundle-01.txt assets/js/features/nav.js
sync-bundle-01.txt assets/js/features/panels-edit.js
sync-bundle-01.txt assets/js/features/panels.js
sync-bundle-01.txt assets/js/features/pruefung.js
sync-bundle-01.txt assets/js/features/roster-edit.js
sync-bundle-01.txt assets/js/features/search.js
sync-bundle-01.txt assets/js/features/toc.js
sync-bundle-01.txt assets/js/features/whatsnew.js
sync-bundle-01.txt helfer/Helfer-beenden.bat
sync-bundle-01.txt helfer/Portal-Pflege-starten.bat
sync-bundle-01.txt helfer/hol_bao_medien.ps1
sync-bundle-01.txt helfer/portal_helfer.ps1
sync-bundle-01.txt index.html
-1
View File
@@ -1 +0,0 @@
1.0.0
File diff suppressed because it is too large Load Diff
-48
View File
@@ -1,48 +0,0 @@
@echo off
setlocal
set "BDIR=%~dp0"
echo.
echo === Portal Union: Code aktualisieren ===
echo.
powershell -NoProfile -ExecutionPolicy Bypass -Command "$m='### PS'+'CODE ###';$me=[IO.File]::ReadAllText('%~f0');$p=$me.IndexOf($m);$nl=$me.IndexOf([char]10,$p);Invoke-Expression $me.Substring($nl+1)"
echo.
pause
exit /b
### PSCODE ###
$ErrorActionPreference = 'Stop'
$here = $env:BDIR
$root = Split-Path -Parent ($here.TrimEnd('\'))
if (-not (Test-Path -LiteralPath (Join-Path $root 'index.html'))) {
Write-Host ('FEHLER: ' + $root + ' ist nicht die Portal-Wurzel.') -ForegroundColor Red; return
}
Write-Host ('Ziel: ' + $root)
$bundles = Get-ChildItem -LiteralPath $here -Filter 'sync-bundle-*.txt' | Sort-Object Name
if (-not $bundles) { Write-Host 'FEHLER: keine sync-bundle-*.txt gefunden.' -ForegroundColor Red; return }
$flush = {
param($d, $rel, $expLen, $b64)
if (-not $rel) { return $null }
$bytes = [Convert]::FromBase64String($b64)
$full = Join-Path $d ($rel -replace '/', '\')
$pd = Split-Path -Parent $full
if (-not (Test-Path -LiteralPath $pd)) { New-Item -ItemType Directory -Path $pd -Force | Out-Null }
[IO.File]::WriteAllBytes($full, $bytes)
return ($bytes.Length -eq $expLen)
}
$ok = 0; $bad = 0; $rel = $null; $expLen = 0; $sb = New-Object System.Text.StringBuilder
foreach ($b in $bundles) {
Write-Host ('-> ' + $b.Name)
foreach ($line in [IO.File]::ReadAllLines($b.FullName)) {
if ($line.StartsWith('### FILE: ')) {
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
$meta = $line.Substring(10); $k = $meta.LastIndexOf(' | ')
$rel = $meta.Substring(0, $k); $expLen = [int]$meta.Substring($k + 3); $sb = New-Object System.Text.StringBuilder
} elseif ($line.StartsWith('###')) { continue }
elseif ($line.Length -gt 0) { [void]$sb.Append($line) }
}
}
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
Write-Host ''
if ($bad -eq 0) { Write-Host ('FERTIG: ' + $ok + ' Dateien.') -ForegroundColor Green }
else { Write-Host ('FERTIG: ' + $ok + ' ok, ' + $bad + ' Fehler.') -ForegroundColor Yellow }
+1 -6
View File
@@ -1,8 +1,3 @@
# StatusQuo_Updates # StatusQuo_Updates
Öffentliches Distributions-Repo für automatische Updates. Public update delivery for StatusQuo portal projects
| Ordner | Projekt |
|--------|---------|
| `VI3DGL/` | VI3-DGL-Planung |
-76
View File
@@ -1,76 +0,0 @@
# 75 Dateien in 5 Bundles
sync-bundle-01.txt VERSION
sync-bundle-01.txt Wochenplan.template.html
sync-bundle-01.txt app.js
sync-bundle-01.txt data/mainframe.html
sync-bundle-01.txt data/sanitizer.html
sync-bundle-01.txt dgl.bat
sync-bundle-01.txt diagnose.html
sync-bundle-01.txt diagnose.js
sync-bundle-01.txt favicon.ico
sync-bundle-01.txt heartbeat-worker.js
sync-bundle-01.txt icons/VI3_Planung_Logo.png
sync-bundle-01.txt icons/VI3_Planung_Logo_alt.png
sync-bundle-01.txt icons/bike_8979898.png
sync-bundle-01.txt icons/calculator_3788148.png
sync-bundle-01.txt icons/comparison_7732609.png
sync-bundle-01.txt icons/deadline_5541978.png
sync-bundle-01.txt icons/eMail_speichern.png
sync-bundle-01.txt icons/email_7732651.png
sync-bundle-01.txt icons/excavator_8383815.png
sync-bundle-01.txt icons/hurdle_6716177.png
sync-bundle-01.txt icons/idea_5541534.png
sync-bundle-01.txt icons/kommentar_kontext.png
sync-bundle-01.txt icons/kontext.png
sync-bundle-01.txt icons/light-bulb_5541476.png
sync-bundle-01.txt icons/list_3837408.png
sync-bundle-01.txt icons/organization_5541954.png
sync-bundle-01.txt icons/plane_2918661.png
sync-bundle-01.txt icons/planung.png
sync-bundle-01.txt icons/server_diagnose.png
sync-bundle-01.txt icons/sync_check_diagnose_im_impressum.png
sync-bundle-01.txt icons/team_2636184.png
sync-bundle-02.txt index.html
sync-bundle-02.txt info.html
sync-bundle-02.txt js/admin.js
sync-bundle-02.txt js/admin_codes.js
sync-bundle-02.txt js/admin_common.js
sync-bundle-02.txt js/admin_erscheinungsbild.js
sync-bundle-02.txt js/admin_kalender.js
sync-bundle-02.txt js/admin_mitteilungen.js
sync-bundle-02.txt js/admin_personal.js
sync-bundle-02.txt js/admin_rollen.js
sync-bundle-02.txt js/admin_standardrechte.js
sync-bundle-02.txt js/admin_statistik.js
sync-bundle-02.txt js/admin_statistik_builder.js
sync-bundle-02.txt js/besetzung.js
sync-bundle-02.txt js/core_api.js
sync-bundle-02.txt js/core_datenLaden.js
sync-bundle-02.txt js/core_permissions.js
sync-bundle-02.txt js/core_state.js
sync-bundle-02.txt js/core_util.js
sync-bundle-02.txt js/email_vorlagen.js
sync-bundle-02.txt js/export_plan.js
sync-bundle-02.txt js/feiertage_de.js
sync-bundle-02.txt js/grid_editor.js
sync-bundle-02.txt js/grid_interaction.js
sync-bundle-02.txt js/grid_render.js
sync-bundle-02.txt js/hinweise.js
sync-bundle-03.txt js/import_excel.js
sync-bundle-03.txt js/logbuch.js
sync-bundle-03.txt js/schichtteam.js
sync-bundle-03.txt js/statistik.js
sync-bundle-03.txt js/statistik_charts.js
sync-bundle-03.txt js/statistik_engine.js
sync-bundle-03.txt js/sync.js
sync-bundle-03.txt js/ui_dialog.js
sync-bundle-03.txt js/ui_rte.js
sync-bundle-03.txt js/wochenplan.js
sync-bundle-03.txt server.ps1
sync-bundle-03.txt stop.bat
sync-bundle-03.txt style.css
sync-bundle-03.txt sync-check.html
sync-bundle-04.txt sync-check.js
sync-bundle-04.txt sync-manifest.json
sync-bundle-04.txt sync-worker.js
sync-bundle-05.txt xlsx.full.min.js
-1
View File
@@ -1 +0,0 @@
1.4.2
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-860
View File
@@ -1,860 +0,0 @@
### SYNC-TRANSFER 4/5 -- mit sync-entpacken.bat entpacken
### Base64 - NICHT von Hand bearbeiten.
### FILE: sync-check.js | 34903
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQovLyBTb2xsLUxpc3RlIGRlciBEYXRlaWVuLCBkaWUgdm9t
IGxhdWZlbmRlbiBTZXJ2ZXIgYWJydWZiYXIgc2VpbiBtdWVzc2VuLgovLwovLyBGZWxkZXI6Ci8v
ICAgcGZhZCAgICAgICAgIOKAlCBVUkwgcmVsYXRpdiB6dW0gU2VydmVyLVJvb3QKLy8gICBieXRl
c01pbiAgICAg4oCUIG9wdGlvbmFsZXIgTWluLVNjaHdlbGx3ZXJ0IChrbGVpbmVyIC0+IEFOS0VS
IEZFSExUIHd1ZXJkZQovLyAgICAgICAgICAgICAgICAgIHZlcm11dGxpY2ggZ3JlaWZlbiwgYWJl
ciB3aXIgd2FybmVuIGZydWVoKQovLyAgIG11c3NbXSAgICAgICDigJQgU3RyaW5ncywgZGllIGlt
IEJvZHkgdm9ya29tbWVuIE1VRVNTRU4KLy8gICBkYXJmX25pY2h0W10g4oCUIFN0cmluZ3MsIGRp
ZSBpbSBCb2R5IE5JQ0hUIHZvcmtvbW1lbiBkdWVyZmVuCi8vICAgbnVyRnVlciAgICAgIOKAlCAn
c3UnIHwgJ2RhcmZTdGF0JyB8ICdkYXJmTG9nJyDigJQgRWludHJhZyB3aXJkIHVlYmVyc3BydW5n
ZW4sCi8vICAgICAgICAgICAgICAgICAgd2VubiBkZXIgZWluZ2Vsb2dndGUgVXNlciBkaWVzZSBC
ZXJlY2h0aWd1bmcgbmljaHQgaGF0LgovLyAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IGplZGVy
IGRhcmYuCi8vICAgaXN0TW9kdWwgICAgIOKAlCBiZWkgSlMtTW9kdWxlbjogenVzYWV0emxpY2gg
cHJ1ZWZlbiwgZGFzcyBrZWluICJmcm9tIi1JbXBvcnQKLy8gICAgICAgICAgICAgICAgICBhdWYg
ZWluZSBEYXRlaSB6ZWlndCwgZGllIHNlbGJzdCA0MDQgbGllZmVydAovLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CnZhciBTT0xMID0gWwogIC8vIFRvcC1MZXZlbAogIHsgcGZhZDogJ2luZGV4Lmh0bWwn
LCAgICAgICAgICAgIG11c3M6IFsnYW5zaWNodC1wbGFudW5nJywgJ21vZGFsLW92ZXJsYXknLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmkzLXBlcnNvbi1wb3Bv
dmVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpMy1rb21t
ZW50YXItcG9wb3ZlcicsICAvLyBLb21tZW50YXItSG92ZXItUG9wb3ZlciAoMjAyNi0wNS0yOCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRvci1rb21tZW50
YXItdmVybGF1ZicsICAvLyBWZXJsYXVmc2xpc3RlIGltIFplbGwtRWRpdG9yIChTdHVmZSAyKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnRuLWtvbW1lbnRhci1o
aW56dScsICAgICAgIC8vIG5ldWVyICJIaW56dWZ1ZWdlbiItQnV0dG9uIChTdHVmZSAyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVpbi1hdmF0YXItYnRuJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkbWluLXRhYi1lcnNj
aGVpbnVuZ3NiaWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2FkbWluLXNla3Rpb24tZGlyZWt0aW9uc2xlaXR1bmcnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnYWRtaW4tc2VrdGlvbi1mdWVocnVuZ3NzdGVsbGUnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaHRlLWNhcmQtc3UnLCAn
cmVjaHRlLWNhcmQtZmEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnaWgtaW1wcmVzc3VtJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ0Fuc3ByZWNoJywgIC8vIFNwYWx0ZW4tSGVhZGVyICJBbnNwcmVjaC3CrXBhcnRuZXIiIGlu
IFBlcnNvbmFsLVRhYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
SW4gUGxhbnVuZyBzaWNodGJhcicsICAvLyBGdW5rdGlvbmVuICsgR3J1cHBlbi1UYWIgU3BhbHRl
bmhlYWRlciAoMjAyNi0wNS0yNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0Fuc3ByZWNocGFydG5lciBtw7ZnbGljaCcsICAvLyBuZXVlIFNwYWx0ZSBpbSBHcnVw
cGVuLVRhYiAoMjAyNi0wNS0yNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZ3J1cHBlLWlucGxhbnVuZy1pbnB1dCAvIGdydXBwZS1kYXJmYXAtaW5wdXQgc2lu
ZCBDU1MtS2xhc3NlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZGllIGFkbWluLmpzIHp1ciBMYXVmemVpdCBpbiA8dGJvZHkgaWQ9ImdydXBwZW4tdGJvZHki
PiByZW5kZXJ0IOKAlAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbSBzdGF0aXNjaGVuIGluZGV4Lmh0bWwga29lbm5lbiBzaWUgbmllIGF1ZnRhdWNoZW4uIERp
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGFsdGVuaGVh
ZGVyIG9iZW4gZGVja2VuIGRhcyBGZWF0dXJlIGluIGluZGV4Lmh0bWwgYWI7IGRpZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBLbGFzc2VuIHNlbGJzdCB3ZXJk
ZW4gd2VpdGVyIHVudGVuIGdlZ2VuIGpzL2FkbWluLmpzIGdlcHJ1ZWZ0LgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnRuLXNjaGljaHR0ZWFtJ10sICAvLyAiVGVh
bSItQnV0dG9uIGltIEhldXRlLUthc3RlbiAoMjAyNi0wNS0yNykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXJmX25pY2h0OiBbJ2lkPSJhbnNpY2h0LXN0YXRpc3RpayInLCAn
aWQ9ImFuc2ljaHQtbG9nYnVjaCInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnaWQ9Im5hdi1zdGF0aXN0aWsiJywgJ2lkPSJuYXYtbG9nYnVjaCInLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnRuLXBlcnNv
bmFsLWJ1bGsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnYWRtaW4tc2VrdGlvbi1zaWNodGJhcmtlaXQnLCAgLy8gJ1JlZ3Vsw6RyZSBBZG1pbnMnLVNl
a3Rpb24gZW50ZmVybnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3NpY2h0YmFya2VpdC1pbmhhbHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnUmVndWzDpHJlIEFkbWlucyddIH0sCiAgeyBwZmFkOiAnYXBw
LmpzJywgICAgICAgICAgICAgICAgbXVzczogWydvcHRpb25hbGVNb2R1bGVMYWRlbicsICcuL2pz
L3N0YXRpc3Rpay5qcycsICcuL2pzL2xvZ2J1Y2guanMnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnL2RhdGEvbWFpbmZyYW1lLmh0bWwnLCAnL2RhdGEvc2FuaXRp
emVyLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVp
bkF2YXRhclRvcGJhckFrdHVhbGlzaWVyZW4nLCAncGVyc29uUG9wb3ZlclplaWdlbicsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb21tZW50YXJQb3BvdmVyWmVp
Z2VuJywgJ2tvbW1lbnRhclBvcG92ZXJWZXJzdGVja2VuJywgIC8vIEtvbW1lbnRhci1Qb3BvdmVy
IHZlcmRyYWh0ZXQgKDIwMjYtMDUtMjgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdrb21tZW50YXJIaW56dWZ1ZWdlbicsICdrb21tZW50YXJMb2VzY2hlbicsICAv
LyBTdHVmZS0yLVZlcmxhdWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2J0bi1rb21tZW50YXItaGluenUnLCAgLy8gbmV1ZXIgRWRpdG9yLUJ1dHRvbiAoU3R1ZmUg
MikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGxlblRhYmVs
bGVSZW5kZXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lt
cHJlc3N1bU1vZGFsT2VmZm5lbicsICdzdXBwb3J0TWFpbEJvZHlCYXVlbicsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbnNwcmVjaHBhcnRuZXJJbmxpbmVUb2dn
bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5QbGFudW5n
SW5saW5lVG9nZ2xlJywgIC8vIFByby1QZXJzb24tQXVzYmxlbmRlbiB2ZXJkcmFodGV0ICgyMDI2
LTA1LTI3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoaWNo
dFRlYW1Nb2RhbE9lZmZuZW4nLCAgLy8gU2NoaWNodC1UZWFtLU1vZGFsIHZlcmRyYWh0ZXQgKDIw
MjYtMDUtMjcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncnVw
cGVFcmxhdWJ0QXAnLCAgLy8gQW5zcHJlY2hwYXJ0bmVyLUZpbHRlciBwcm8gR3J1cHBlIGltIElu
Zm8tTW9kYWwgKDIwMjYtMDUtMjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdpbmZvLWFwLW1haWxidG4nLCAgLy8gTWFpbC1CdXR0b24tS2xhc3NlIGltIEluZm8t
TW9kYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lNUFJFU1NV
TV9ERUZBVUxUJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyZl9uaWNo
dDogWyJmcm9tICcuL2pzL3N0YXRpc3Rpay5qcyciLCAiZnJvbSAnLi9qcy9sb2didWNoLmpzJyIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWxrQmVh
cmJlaXR1bmdEaWFsb2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnc2ljaHRiYXJrZWl0LWNoZWNrYm94JywgIC8vIGFsdGVyIFNpY2h0YmFya2VpdHMt
SGFuZGxlciByYXVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdhZG1pblNpY2h0YmFya2VpdFsnXSB9LCAgLy8gc2NocmVpYmVuZGVyIFp1Z3JpZmYgZW50
ZmVybnQKICB7IHBmYWQ6ICdzdHlsZS5jc3MnLCAgICAgICAgICAgICBtdXNzOiBbJy5sYXlvdXQt
c3RhdGlzdGlrJywgJy5sYXlvdXQtbG9nYnVjaCcsICcuc3RhdHMtJywgJy5sb2ctJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy52aTMtYXZhdGFyJywgJy5wcHYt
dGFnJywgJy52aTMtcGVyc29uLXBvcG92ZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLnZpMy1rb21tZW50YXItcG9wb3ZlcicsICcua3Ata29wZicsICcua3At
Ym9keScsICAvLyBLb21tZW50YXItUG9wb3ZlciAoMjAyNi0wNS0yOCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5rcC1laW50cmFnJywgJy5rcC1ib2R5LXN0YWNr
JywgIC8vIFN0YWNrLVZpZXcgYmVpIG1laHJlcmVuIEtvbW1lbnRhcmVuIChTdHVmZSAyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmVkaXRvci1rb21tZW50YXIt
dmVybGF1ZicsICcuZWt2LWVpbnRyYWcnLCAnLmVrdi1sb2VzY2hlbicsICAvLyBFZGl0b3ItVmVy
bGF1ZiAoU3R1ZmUgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2RhdGEta29tbWVudGFyLWFuemFobCcsICAvLyBDb3VudGVyLUJhZGdlLUF0dHJpYnV0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuZGxnLWVsZGdsLXRvZ2dsZScs
ICcudmkzZGdsLWJ0bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcuZXJzY2hlaW51bmctbGF5b3V0JywgJy5nYi1ncmlkJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJy5yZWNodGUtY2FyZCcsICcucmVjaHRlLWNhcmQtaWNvbics
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaW1wcmVzc3VtLW5v
dGZhbGwnLCAnLmltcHJlc3N1bS1tYWlsLWJ0bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcuYmsta2FuZGlkYXRlbi10ZXh0JywgIC8vIG5ldWUgMi16ZWlsaWdl
IEthbmRpZGF0ZW4tWmVpbGUgKDIwMjYtMDUtMjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICcuYmsta2FuZGlkYXRlbi10b2dnbGUtb2ZmZW4nLCAgLy8gQXVma2xh
cHAtSW5kaWthdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcu
aW5mby1hcC1tYWlsYnRuJywgIC8vIE1haWwtQnV0dG9uIGhpbnRlciBBbnNwcmVjaHBhcnRuZXJu
ICgyMDI2LTA1LTI0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cHVsc0ZlcmllbicsICAvLyBGZXJpZW4tTWFya2llcnVuZyBQdWxzLUtleWZyYW1lICgyMDI2LTA1
LTI3KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1tZmVyLXNw
YWx0ZS1iZyddLCAgLy8gRmVyaWVuLVNwYWx0ZW4tVG9lbnVuZyBWYXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAucHAta29wZiAoYWx0ZSBQb3BvdmVyLUtsYXNzZSwgamV0
enQgLnBwdi1rb3BmKSBpc3QgbmlyZ2VuZHdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbWVociB2b3JoYW5kZW4g4oCUIHdlbm4gZG9jaCwgaXN0IGRlciBBc3NldC1DYWNo
ZSB2ZXJhbHRldC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAucHAtdGFn
IGV4aXN0aWVydCBOT0NIIGltIFBlcnMuLVBsYW47IGRhaGVyIGhpZXIgbmljaHQgcHJ1ZWZlbi4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJmX25pY2h0OiBbJy5jcnlwdG8t
d2Fybi1iYW5uZXInLCAnLmJhLScsICcuYmItJywgJy5idWxrLWRpYWxvZycsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucHAta29wZiddIH0sCiAgeyBw
ZmFkOiAnc3luYy13b3JrZXIuanMnIH0sCiAgeyBwZmFkOiAnaGVhcnRiZWF0LXdvcmtlci5qcycg
fSwKCiAgLy8gT2ZmbGluZS1Xb2NoZW5wbGFuOiBUZW1wbGF0ZSAoUXVlbGxlLCBUb2tlbi1QbGF0
emhhbHRlcikgdW5kIGRlciB2b20KICAvLyBTZXJ2ZXIgYmVpIGplZGVyIFBsYW51bmdzLUFlbmRl
cnVuZyBuZXUgZ2VuZXJpZXJ0ZSBTbmFwc2hvdC4KICB7IHBmYWQ6ICdXb2NoZW5wbGFuLnRlbXBs
YXRlLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3M6IFsnX19E
QVRFTl9KU09OX18nLCAnX19TTkFQU0hPVF9aRUlUX18nLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnd3AtdGFnYmxvY2stdGFiZWxsZScsICdPZmZsaW5lLVNuYXBz
aG90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ07DpGNoc3Rl
IFdvY2hlJywgJ0Zyw7xoZGllbnN0J10gfSwKICB7IHBmYWQ6ICdXb2NoZW5wbGFuLmh0bWwnLCAg
ICAgICBieXRlc01pbjogODAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRGF0ZW4gbXVlc3NlbiBzdWJzdGl0dWllcnQgc2VpbiDigJQgVG9rZW5zIGR1ZXJmZW4gbmlj
aHQgbWVociBkcmluc3RlaGVuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11
c3M6IFsndmFyIERBVEVOJywgJ3dwLXRhZ2Jsb2NrJywgJ3dwLXZvcndvY2hlJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyw7xoZGllbnN0J10sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyZl9uaWNodDogWydfX0RBVEVOX0pTT05fXycs
ICdfX1NOQVBTSE9UX1pFSVRfXyddIH0sCgogIC8vIE1hcmt1cC1GcmFnbWVudGUgdW50ZXIgVGFy
bi1QZmFkZW4gaW4gZGF0YS8gKG51ciBCZXJlY2h0aWd0ZSkKICB7IHBmYWQ6ICdkYXRhL21haW5m
cmFtZS5odG1sJywgbnVyRnVlcjogJ2RhcmZTdGF0JywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdXNzOiBbJzxkaXYgaWQ9ImFuc2ljaHQtc3RhdGlzdGlrIicsICdpZD0ic3Rh
dHMtdGJvZHkiJywgJ2NsYXNzPSJsYXlvdXQtc3RhdGlzdGlrIiddIH0sCiAgeyBwZmFkOiAnZGF0
YS9zYW5pdGl6ZXIuaHRtbCcsIG51ckZ1ZXI6ICdkYXJmTG9nJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdXNzOiBbJzxkaXYgaWQ9ImFuc2ljaHQtbG9nYnVjaCInLCAgICdp
ZD0ibG9nLXRib2R5IicsICAgJ2NsYXNzPSJsYXlvdXQtbG9nYnVjaCInXSB9LAoKICAvLyBDb3Jl
CiAgeyBwZmFkOiAnanMvY29yZV9zdGF0ZS5qcycsICAgICAgaXN0TW9kdWw6IHRydWUsIG11c3M6
IFsnZXhwb3J0IHZhciBaJ10gfSwKICB7IHBmYWQ6ICdqcy9jb3JlX2FwaS5qcycsICAgICAgICBp
c3RNb2R1bDogdHJ1ZSwgbXVzczogWydleHBvcnQgZnVuY3Rpb24gYXBpJ10gfSwKICB7IHBmYWQ6
ICdqcy9jb3JlX3V0aWwuanMnLCAgICAgICBpc3RNb2R1bDogdHJ1ZSwgbXVzczogWydleHBvcnQg
ZnVuY3Rpb24gZXNjYXBlSFRNTCcsICdleHBvcnQgZnVuY3Rpb24gZGF0dW1TdHInLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F2YXRh
cktyZWlzSHRtbCcsICdhdmF0YXJVcmwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuemVpZ2VOYW1lRnVlcktlbm51bmcnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1
bmt0aW9uSW5QbGFudW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdleHBvcnQgZnVuY3Rpb24gcGVyc29uU2NoaWNodEFtJ10gfSwK
ICB7IHBmYWQ6ICdqcy9jb3JlX2RhdGVuTGFkZW4uanMnLCBpc3RNb2R1bDogdHJ1ZSwgbXVzczog
WydkaXJla3Rpb25zbGVpdHVuZycsICdmdWVocnVuZ3NzdGVsbGUnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnN0ZWNrdGVGdW5r
dGlvbmVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd2ZXJzdGVja3RlR3J1cHBlbiddIH0sICAvLyBHcnVwcGVuLVNpY2h0YmFya2Vp
dCAoMjAyNi0wNS0yNCkKICB7IHBmYWQ6ICdqcy9jb3JlX3Blcm1pc3Npb25zLmpzJyxpc3RNb2R1
bDogdHJ1ZSwgbXVzczogWydkYXJmU3RhdGlzdGlrJywgJ2RhcmZMb2didWNoJywgJ3JlY2h0ZUF1
c0luZm8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ21laW5lTWlrcm90ZWFtUGVyc29uSWRzJ10gfSwKCiAgLy8gVUkKICB7IHBmYWQ6
ICdqcy91aV9kaWFsb2cuanMnLCAgICAgICBpc3RNb2R1bDogdHJ1ZSwgbXVzczogWydleHBvcnQg
ZnVuY3Rpb24gdG9hc3QnLCAnZXhwb3J0IGZ1bmN0aW9uIGJlc3RhZXRpZ2VuJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvcnQg
ZnVuY3Rpb24gbW9kYWxaZWlnZW4nLCAnZGlydHlSZWdpc3RyaWVyZSddIH0sCiAgeyBwZmFkOiAn
anMvdWlfcnRlLmpzJywgICAgICAgICAgaXN0TW9kdWw6IHRydWUgfSwKCiAgLy8gR3JpZAogIHsg
cGZhZDogJ2pzL2dyaWRfcmVuZGVyLmpzJywgICAgIGlzdE1vZHVsOiB0cnVlLCBtdXNzOiBbJ2Fu
c2ljaHRXZWNoc2VsbicsICdrb3BmUmVuZGVybicsICdkYXRlbkdyaWRSZW5kZXJuJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFs
dGUtaGV1dGUnLCAnYXZhdGFyS3JlaXNIdG1sJ10gfSwKICB7IHBmYWQ6ICdqcy9ncmlkX2VkaXRv
ci5qcycsICAgICBpc3RNb2R1bDogdHJ1ZSwgbXVzczogWydlZGl0b3JPZWZmbmVuJywgJ2lzdERn
bFF1YWxpZml6aWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnZWRpdG9yS29tbWVudGFyVmVybGF1ZlJlbmRlcm4nXSB9LAogIHsg
cGZhZDogJ2pzL2dyaWRfaW50ZXJhY3Rpb24uanMnLGlzdE1vZHVsOiB0cnVlLCBtdXNzOiBbJ2Z1
ZWxsSW5pdCcsICdmdWVsbEhhbmRsZUFuWmVsbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvbW1lbnRhclBvcG92ZXJaZWlnZW4n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2tvbW1lbnRhclBvcG92ZXJWZXJzdGVja2VuJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb21tZW50YXJQb3BvdmVyRmVzdGhh
bHRlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAna29tbWVudGFyTGlzdGUnLCAgICAgICAgLy8gU3R1ZmUtMi1IZWxwZXI6IExpc3Rl
IHN0YXR0IFNpbmdsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2tvbW1lbnRhckFuemFobCcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29tbWVudGFySGluenVmdWVnZW4n
LCAgLy8gUE9TVCBhbmhhZW5nZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdrb21tZW50YXJMb2VzY2hlbicsICAgICAvLyBERUxFVEUg
cGVyIElECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZGFyZktvbW1lbnRhckxvZXNjaGVuJ10gfSwKCiAgLy8gQWRtaW4KICB7IHBmYWQ6
ICdqcy9hZG1pbi5qcycsICAgICAgICAgICBpc3RNb2R1bDogdHJ1ZSwgbXVzczogWydhZG1pblJl
bmRlcm4nLCAnZmVhdHVyZUlzdEFrdGl2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb2xsZW5UYWJlbGxlUmVuZGVybicsICdlcnNj
aGVpbnVuZ3NiaWxkUmVuZGVybicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZ3J1cHBlLWlucGxhbnVuZy1pbnB1dCcsICAvLyBTaWNo
dGJhcmtlaXRzLUNoZWNrYm94IChkeW5hbWlzY2ggZ2VyZW5kZXJ0LCAyMDI2LTA1LTI0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dy
dXBwZS1kYXJmYXAtaW5wdXQnLCAgICAgLy8gQW5zcHJlY2hwYXJ0bmVyLUNoZWNrYm94IChkeW5h
bWlzY2ggZ2VyZW5kZXJ0LCAyMDI2LTA1LTI0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lNUFJFU1NVTV9ERUZBVUxUJ10gfSwKICB7
IHBmYWQ6ICdqcy9hZG1pbl9jb21tb24uanMnLCAgICBpc3RNb2R1bDogdHJ1ZSB9LAogIHsgcGZh
ZDogJ2pzL2FkbWluX3BlcnNvbmFsLmpzJywgIGlzdE1vZHVsOiB0cnVlLCBtdXNzOiBbJ3BlcnNv
bkJlYXJiZWl0ZW5EaWFsb2cnLCAnZWxkZ2xJbmxpbmVUb2dnbGUnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dlYnVydHN0YWdNb2Rh
bE9lZmZuZW4nLCAncGVyc29uUG9wb3ZlclplaWdlbicsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVpblByb2ZpbE1vZGFsT2VmZm5l
bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYW5zcHJlY2hwYXJ0bmVySW5saW5lVG9nZ2xlJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpblBsYW51bmdJbmxpbmVUb2dn
bGUnXSB9LCAgLy8gUHJvLVBlcnNvbi1BdXNibGVuZGVuICgyMDI2LTA1LTI3KQogIHsgcGZhZDog
J2pzL2FkbWluX3JvbGxlbi5qcycsICAgIGlzdE1vZHVsOiB0cnVlLCBtdXNzOiBbJ2ZhY2hhdWZz
aWNodFJlbmRlcm4nLCAncm9sbGVuVGFiZWxsZVJlbmRlcm4nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JPTExFTl9UWVBFTiddIH0s
CiAgeyBwZmFkOiAnanMvYWRtaW5fY29kZXMuanMnLCAgICAgaXN0TW9kdWw6IHRydWUgfSwKICB7
IHBmYWQ6ICdqcy9hZG1pbl9rYWxlbmRlci5qcycsICBpc3RNb2R1bDogdHJ1ZSB9LAogIHsgcGZh
ZDogJ2pzL2FkbWluX2Vyc2NoZWludW5nc2JpbGQuanMnLCBpc3RNb2R1bDogdHJ1ZSwgbXVzczog
WydlcnNjaGVpbnVuZ3NiaWxkUmVuZGVybicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmtpZXJ1bmdlbkFud2VuZGVu
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnTUFSS0lFUlVOR0VOX0RFRkFVTFRTJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbHRlSGludGVy
Z3J1bmQnXSB9LCAgLy8gRmVyaWVuLU1hcmtpZXJ1bmcgKDIwMjYtMDUtMjcpCgogIC8vIFRoZW1l
bi1Nb2R1bGUKICB7IHBmYWQ6ICdqcy9iZXNldHp1bmcuanMnLCAgICAgICBpc3RNb2R1bDogdHJ1
ZSwgbXVzczogWydiZXNldHp1bmdzS2FuZGlkYXRlbkVybWl0dGVsbicsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kYWwtaW5oYWx0
LWdyb3NzJywgICAgIC8vIFRhZy1EZXRhaWwtTW9kYWwgdmVyZ3JvZXNzZXJ1bmcgKDIwMjYtMDUt
MjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnYmsta2FuZC1wZmVpbCcsICAgICAgICAgIC8vIFRvZ2dsZS1QZmVpbCDilr4v4pa0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Ymsta2FuZGlkYXRlbi10ZXh0J10gfSwgIC8vIDItemVpbGlnZSBLYW5kaWRhdGVuLVplaWxlCiAg
eyBwZmFkOiAnanMvZW1haWxfdm9ybGFnZW4uanMnLCAgaXN0TW9kdWw6IHRydWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9sbGVfdmVyYW50d29ydHVuZy1EZWZhdWx0
IG11c3MgZWNodGUgVW1sYXV0ZSBoYWJlbiAoSXNzdWUgIzQsIDIwMjYtMDUtMjQpLgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3M6IFsnUsO8Y2tmcmFnZW4nLCAnR3LDvMOf
ZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcmZfbmljaHQ6IFsnUnVl
Y2tmcmFnZW4nLCAnR3J1ZXNzZSddIH0sCiAgeyBwZmFkOiAnanMvd29jaGVucGxhbi5qcycsICAg
ICAgaXN0TW9kdWw6IHRydWUgfSwKICB7IHBmYWQ6ICdqcy9pbXBvcnRfZXhjZWwuanMnLCAgICBp
c3RNb2R1bDogdHJ1ZSwgbXVzczogWydpbXBUcm9ja2VubGF1ZkJlcmVjaG5lbicsICAvLyBWb3Jz
Y2hhdS1EaWZmIHZvciBJbXBvcnQgKDIwMjYtMDUtMjgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wLXRyb2NrZW5sYXVmJywgICAg
ICAgICAgLy8gQnV0dG9uIGltIFN0YXR1cy1QYW5lbAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsUGlkU2V0J10gfSwgICAgICAg
ICAgIC8vIFNjaGx1ZXJtYW5uLVNjaHV0ejogbnVyIEV4Y2VsLVBlcnNvbmVuIGJlcmVpbmlnZW4K
ICB7IHBmYWQ6ICdqcy9zeW5jLmpzJywgICAgICAgICAgICBpc3RNb2R1bDogdHJ1ZSwgbXVzczog
WydzeW5jV29ya2VyU3RhcnRlbicsICdsb2NrU3RhdGVBbndlbmRlbicsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW56ZWlnZU5hbWVG
dWVyS2VubnVuZyddIH0sCiAgeyBwZmFkOiAnanMvaGlud2Vpc2UuanMnLCAgICAgICAgaXN0TW9k
dWw6IHRydWUgfSwKICB7IHBmYWQ6ICdqcy9zY2hpY2h0dGVhbS5qcycsICAgICBpc3RNb2R1bDog
dHJ1ZSwgbXVzczogWydzY2hpY2h0VGVhbU1vZGFsT2VmZm5lbicsICdzY2hpY2h0Vm9uJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdw
ZXJzb25TY2hpY2h0QW0nXSB9LAoKICAvLyBPcHRpb25hbC1Nb2R1bGUgKG51ciBCZXJlY2h0aWd0
ZSkKICB7IHBmYWQ6ICdqcy9zdGF0aXN0aWsuanMnLCAgICAgICBpc3RNb2R1bDogdHJ1ZSwgbnVy
RnVlcjogJ2RhcmZTdGF0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXNz
OiBbJ3N0YXRpc3Rpa0xhZGVuJywgJ3N0YXRpc3Rpa1JlbmRlcm4nXSB9LAogIHsgcGZhZDogJ2pz
L2xvZ2J1Y2guanMnLCAgICAgICAgIGlzdE1vZHVsOiB0cnVlLCBudXJGdWVyOiAnZGFyZkxvZycs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzczogWydsb2didWNoTGFkZW4n
LCAnZXhwb3J0IHZhciBsb2didWNoSG9va3MnXSB9Cl07Cgp2YXIgUSA9IGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IuYmluZChkb2N1bWVudCk7CgpmdW5jdGlvbiBzdGF0dXNaZWlsZShlaW50cmFnLCBz
dGF0dXMsIGtvbW1lbnRhciwgZGV0YWlscykgewogIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RyJyk7CiAgdHIuY2xhc3NOYW1lID0gc3RhdHVzID09PSAnT0snID8gJ29rJyA6IChz
dGF0dXMgPT09ICdXQVJOJyA/ICd3YXJuJyA6IChzdGF0dXMgPT09ICdTS0lQJyA/ICdza2lwJyA6
ICdmZWgnKSk7CiAgdHIuaW5uZXJIVE1MID0KICAgICc8dGQgY2xhc3M9InBmYWQiPicgKyBlc2Nh
cGVIdG1sKGVpbnRyYWcucGZhZCkgKyAnPC90ZD4nICsKICAgICc8dGQgY2xhc3M9InN0YXR1cyI+
JyArIHN0YXR1cyArICc8L3RkPicgKwogICAgJzx0ZCBjbGFzcz0iZGV0YWlsIj4nICsgKGtvbW1l
bnRhciA/IGVzY2FwZUh0bWwoa29tbWVudGFyKSA6ICcnKSArCiAgICAgIChkZXRhaWxzID8gJzxk
ZXRhaWxzPjxzdW1tYXJ5Pm1laHI8L3N1bW1hcnk+PHByZSBzdHlsZT0ibWFyZ2luOjRweCAwO3do
aXRlLXNwYWNlOnByZS13cmFwIj4nICsKICAgICAgICAgZXNjYXBlSHRtbChkZXRhaWxzKSArICc8
L3ByZT48L2RldGFpbHM+JyA6ICcnKSArCiAgICAnPC90ZD4nOwogIFEoJyN6ZWlsZW4nKS5hcHBl
bmRDaGlsZCh0cik7Cn0KCmZ1bmN0aW9uIGVzY2FwZUh0bWwocykgewogIGlmIChzID09IG51bGwp
IHJldHVybiAnJzsKICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBs
YWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC8iL2csJyZxdW90
OycpOwp9CgpmdW5jdGlvbiByZWNodGVIb2xlbigpIHsKICByZXR1cm4gZmV0Y2goJy9hcGkvaW5m
bycpLnRoZW4oZnVuY3Rpb24ocikgewogICAgaWYgKCFyLm9rKSB0aHJvdyBuZXcgRXJyb3IoJ0hU
VFAgJyArIHIuc3RhdHVzICsgJyBhdWYgL2FwaS9pbmZvJyk7CiAgICByZXR1cm4gci5qc29uKCk7
CiAgfSk7Cn0KCi8vIEdsb2JhbGUgTWFuaWZlc3QtVGFiZWxsZSAoRGF0ZWlwZmFkIC0+IHNoYTI1
NitieXRlcywgZWlubWFsIGJlaW0gU3RhcnQgZ2VsYWRlbikuCi8vIFdpcmQgZWlubWFsIGJlaW0g
U3RhcnQgZ2VsYWRlbiDigJQgd2VubiBkYTogSGFzaC1WZXJnbGVpY2ggcHJvIERhdGVpCi8vIGFr
dGl2OyB3ZW5uIG5pY2h0OiBudXIgQW5rZXItL2RhcmZfbmljaHQtUHJ1ZWZ1bmcgd2llIGJpc2hl
ci4KdmFyIE1BTklGRVNUID0gbnVsbDsKdmFyIE1BTklGRVNUX01FVEEgPSBudWxsOyAgIC8vIHsg
Z2VuZXJpZXJ0LCBicmFuY2gsIGNvbW1pdCB9CgpmdW5jdGlvbiBtYW5pZmVzdExhZGVuKCkgewog
IHJldHVybiBmZXRjaCgnc3luYy1tYW5pZmVzdC5qc29uJywgeyBjYWNoZTogJ25vLXN0b3JlJyB9
KS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgIGlmICghci5vaykgcmV0dXJuIG51bGw7CiAgICByZXR1
cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihqKSB7CiAgICAgIGlmICghaiB8fCAhai5kYXRlaWVu
KSByZXR1cm4gbnVsbDsKICAgICAgTUFOSUZFU1RfTUVUQSA9IHsgZ2VuZXJpZXJ0OiBqLmdlbmVy
aWVydCwgYnJhbmNoOiBqLmJyYW5jaCwgY29tbWl0OiBqLmNvbW1pdCB9OwogICAgICByZXR1cm4g
ai5kYXRlaWVuOwogICAgfSk7CiAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7IHJldHVybiBudWxsOyB9
KTsKfQoKLy8gSGV4LVN0cmluZyBhdXMgQXJyYXlCdWZmZXIgKFNIQTI1Ni1PdXRwdXQgaXN0IDMy
IEJ5dGUgLT4gNjQgaGV4IGNoYXJzKS4KZnVuY3Rpb24gYnVmVG9IZXgoYnVmKSB7CiAgdmFyIGFy
ciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7CiAgdmFyIG91dCA9ICcnOwogIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgaCA9IGFycltpXS50b1N0cmluZygxNik7
CiAgICBpZiAoaC5sZW5ndGggPT09IDEpIG91dCArPSAnMCc7CiAgICBvdXQgKz0gaDsKICB9CiAg
cmV0dXJuIG91dDsKfQoKZnVuY3Rpb24gZGFyZkZ1ZXIoZWludHJhZywgaW5mbykgewogIGlmICgh
ZWludHJhZy5udXJGdWVyKSByZXR1cm4gdHJ1ZTsKICB2YXIgc2VoZW4gPSAoaW5mbyAmJiBpbmZv
LnNlaGVuKSB8fCB7fTsKICBpZiAoZWludHJhZy5udXJGdWVyID09PSAnc3UnKSAgICAgICByZXR1
cm4gISFpbmZvLmlzdFN1cGVyVXNlcjsKICBpZiAoZWludHJhZy5udXJGdWVyID09PSAnZGFyZlN0
YXQnKSByZXR1cm4gISEoaW5mby5pc3RTdXBlclVzZXIgfHwgc2VoZW4uc3RhdGlzdGlrKTsKICBp
ZiAoZWludHJhZy5udXJGdWVyID09PSAnZGFyZkxvZycpICByZXR1cm4gISEoaW5mby5pc3RTdXBl
clVzZXIgfHwgc2VoZW4ubG9nYnVjaCk7CiAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIHBydWVm
ZUVpbnRyYWcoZWludHJhZywgaW5mbykgewogIC8vIFNraXAgd2VubiBuaWNodCBiZXJlY2h0aWd0
CiAgaWYgKCFkYXJmRnVlcihlaW50cmFnLCBpbmZvKSkgewogICAgc3RhdHVzWmVpbGUoZWludHJh
ZywgJ1NLSVAnLCAnw7xiZXJzcHJ1bmdlbiAoa2VpbmUgJyArIGVpbnRyYWcubnVyRnVlciArICct
QmVyZWNodGlndW5nKScpOwogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN0YXR1czogJ3Nr
aXAnIH0pOwogIH0KICByZXR1cm4gZmV0Y2goZWludHJhZy5wZmFkLCB7IGNhY2hlOiAnbm8tc3Rv
cmUnIH0pLnRoZW4oZnVuY3Rpb24ocikgewogICAgaWYgKCFyLm9rKSB7CiAgICAgIHN0YXR1c1pl
aWxlKGVpbnRyYWcsICdGRUhMVCcsICdIVFRQICcgKyByLnN0YXR1cyArICcgJyArIHIuc3RhdHVz
VGV4dCk7CiAgICAgIHJldHVybiB7IHN0YXR1czogJ2ZlaCcgfTsKICAgIH0KICAgIC8vIGFycmF5
QnVmZmVyICsgRGVjb2RlIHN0YXR0IGRpcmVrdCB0ZXh0KCk6IHdpciBicmF1Y2hlbiBiZWlkZXMK
ICAgIC8vIChIYXNoIHVlYmVyIEJ5dGVzICsgU3RyaW5nIGZ1ZXIgQW5rZXItQ2hlY2spLiBXZW5u
IHdpciBudXIgdGV4dCgpCiAgICAvLyBuZWhtZW4sIGtvZW5udGUgZWluIEJPTSBvZGVyIENSTEYv
TEYtRGlmZiBkZW4gSGFzaCB2ZXJmYWVsc2NoZW4uCiAgICByZXR1cm4gci5hcnJheUJ1ZmZlcigp
LnRoZW4oZnVuY3Rpb24oYWIpIHsKICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYWIp
OwogICAgICB2YXIgYnl0ZUxlbiA9IGJ5dGVzLmxlbmd0aDsKICAgICAgdmFyIHR4dDsKICAgICAg
dHJ5IHsgdHh0ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpLmRlY29kZShieXRlcyk7IH0KICAg
ICAgY2F0Y2ggKGUpIHsgdHh0ID0gJyc7IH0gICAvLyBCaW5hZXItRGF0ZWkgKHouQi4gaWNvKTog
QW5rZXItQ2hlY2sgZW50ZmFlbGx0CiAgICAgIHZhciBwcm9ibGVtZSA9IFtdOwogICAgICBpZiAo
ZWludHJhZy5ieXRlc01pbiAmJiBieXRlTGVuIDwgZWludHJhZy5ieXRlc01pbikgewogICAgICAg
IHByb2JsZW1lLnB1c2goJ0JvZHkgPCAnICsgZWludHJhZy5ieXRlc01pbiArICcgQnl0ZXMgKCcg
KyBieXRlTGVuICsgJyknKTsKICAgICAgfQogICAgICAoZWludHJhZy5tdXNzIHx8IFtdKS5mb3JF
YWNoKGZ1bmN0aW9uKHMpIHsKICAgICAgICBpZiAodHh0LmluZGV4T2YocykgPCAwKSBwcm9ibGVt
ZS5wdXNoKCdBbmtlciBmZWhsdDogIicgKyBzICsgJyInKTsKICAgICAgfSk7CiAgICAgIChlaW50
cmFnLmRhcmZfbmljaHQgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocykgewogICAgICAgIGlmICh0
eHQuaW5kZXhPZihzKSA+PSAwKSBwcm9ibGVtZS5wdXNoKCdkYXJmIG5pY2h0IGVudGhhbHRlbjog
IicgKyBzICsgJyInKTsKICAgICAgfSk7CiAgICAgIC8vIEltcG9ydC1QZmFkZSBwcsO8ZmVuIChu
dXIgTW9kdWwtRGF0ZWllbikuIEJlaSBkeW5hbWljIGltcG9ydCgpCiAgICAgIC8vIGlzdCBkZXIg
UGZhZCBuaWNodCBkaXJla3QgZml4IGluIGVpbmVyICJmcm9tIi1LbGF1c2VsLCBkYWhlcgogICAg
ICAvLyBwcnVlZmVuIHdpciBoaWVyIG51ciBzdGF0aXNjaGUgSW1wb3J0cy4KICAgICAgdmFyIGlt
cG9ydFBmYWRlID0gW107CiAgICAgIGlmIChlaW50cmFnLmlzdE1vZHVsKSB7CiAgICAgICAgdmFy
IHJlID0gL2Zyb21ccytbJyJdKFteJyJdKylbJyJdL2c7CiAgICAgICAgdmFyIG07CiAgICAgICAg
d2hpbGUgKChtID0gcmUuZXhlYyh0eHQpKSAhPT0gbnVsbCkgewogICAgICAgICAgdmFyIHAgPSBt
WzFdOwogICAgICAgICAgaWYgKHAuc3RhcnRzV2l0aCgnLi8nKSB8fCBwLnN0YXJ0c1dpdGgoJy4u
LycpKSBpbXBvcnRQZmFkZS5wdXNoKHApOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBNYW5p
ZmVzdC1IYXNoLVZlcmdsZWljaDogbnVyIHdlbm4gTWFuaWZlc3QgZGEgVU5EIGRpZXNlciBQZmFk
CiAgICAgIC8vIGltIE1hbmlmZXN0IGdlbGlzdGV0IGlzdC4gU28ga29lbm5lbiB3aXIgb2huZSBT
ZXJ2ZXItU2V0dXAKICAgICAgLy8gcHJ1ZWZlbiwgb2IgZGllIGF1c2dlbGllZmVydGUgRGF0ZWkg
Ynl0ZWdlbmF1IGRlbSBSZXBvLVN0YW5kCiAgICAgIC8vIGVudHNwcmljaHQg4oCUIHdpY2h0aWcg
ZnVlciBCZWhvZXJkZW4tUENzLCB3byBwZXIgSGFuZCBzdGF0dAogICAgICAvLyAnZ2l0IHB1bGwn
IGtvcGllcnQgd2lyZC4KICAgICAgdmFyIGhhc2hDaGVjayA9IFByb21pc2UucmVzb2x2ZShudWxs
KTsKICAgICAgaWYgKE1BTklGRVNUICYmIE1BTklGRVNUW2VpbnRyYWcucGZhZF0gJiYgdHlwZW9m
IGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnN1YnRsZSkgewogICAgICAgIGhhc2hD
aGVjayA9IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgYWIpLnRoZW4oZnVuY3Rpb24o
aGJ1ZikgewogICAgICAgICAgcmV0dXJuIGJ1ZlRvSGV4KGhidWYpOwogICAgICAgIH0pLmNhdGNo
KGZ1bmN0aW9uKCkgeyByZXR1cm4gbnVsbDsgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc2hD
aGVjay50aGVuKGZ1bmN0aW9uKGlzdEhhc2gpIHsKICAgICAgICB2YXIgaGFzaEluZm8gPSAnJzsK
ICAgICAgICBpZiAoTUFOSUZFU1QgJiYgTUFOSUZFU1RbZWludHJhZy5wZmFkXSkgewogICAgICAg
ICAgdmFyIHNvbGxIYXNoID0gTUFOSUZFU1RbZWludHJhZy5wZmFkXS5zaGEyNTY7CiAgICAgICAg
ICB2YXIgc29sbEJ5dGVzID0gTUFOSUZFU1RbZWludHJhZy5wZmFkXS5ieXRlczsKICAgICAgICAg
IGlmIChpc3RIYXNoKSB7CiAgICAgICAgICAgIGlmIChpc3RIYXNoICE9PSBzb2xsSGFzaCkgewog
ICAgICAgICAgICAgIHZhciBkZXRhaWwgPSAnRGF0ZWkgd2VpY2h0IHZvbSBSZXBvLVN0YW5kIGFi
IOKAlCBuZXUgYXVzIEdpdGVhIGtvcGllcmVuLlxuJyArCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdlcndhcnRldDogJyArIHNvbGxIYXNoICsgJyAoJyArIHNvbGxCeXRlcyArICcgQilcbicg
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAnYWt0dWVsbDogICcgKyBpc3RIYXNoICArICcg
KCcgKyBieXRlTGVuICAgKyAnIEIpJzsKICAgICAgICAgICAgICBwcm9ibGVtZS5wdXNoKGRldGFp
bCk7CiAgICAgICAgICAgICAgaGFzaEluZm8gPSAnIMK3IOKclyBIYXNoIGFid2VpY2hlbmQnOwog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGhhc2hJbmZvID0gJyDCtyDinJMgSGFz
aCBpZGVudGlzY2gnOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBoYXNoSW5mbyA9ICcgwrcgKEhhc2gtQmVyZWNobnVuZyBpbSBCcm93c2VyIG5pY2h0IG3Dtmds
aWNoKSc7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChNQU5JRkVTVCkgewogICAgICAg
ICAgaGFzaEluZm8gPSAnIMK3IChuaWNodCBpbSBNYW5pZmVzdCknOwogICAgICAgIH0KICAgICAg
ICBpZiAocHJvYmxlbWUubGVuZ3RoKSB7CiAgICAgICAgICBzdGF0dXNaZWlsZShlaW50cmFnLCAn
V0FSTicsIGJ5dGVMZW4gKyAnIEJ5dGVzJyArIGhhc2hJbmZvICsgJyDigJQgJyArIHByb2JsZW1l
Lmxlbmd0aCArICcgUHJvYmxlbShlKScsIHByb2JsZW1lLmpvaW4oJ1xuJykpOwogICAgICAgICAg
cmV0dXJuIHsgc3RhdHVzOiAnd2FybicsIGltcG9ydGU6IGltcG9ydFBmYWRlIH07CiAgICAgICAg
fQogICAgICAgIHN0YXR1c1plaWxlKGVpbnRyYWcsICdPSycsIGJ5dGVMZW4gKyAnIEJ5dGVzJyAr
IGhhc2hJbmZvICsgKGltcG9ydFBmYWRlLmxlbmd0aCA/ICcgwrcgJyArIGltcG9ydFBmYWRlLmxl
bmd0aCArICcgSW1wb3J0ZScgOiAnJykpOwogICAgICAgIHJldHVybiB7IHN0YXR1czogJ29rJywg
aW1wb3J0ZTogaW1wb3J0UGZhZGUgfTsKICAgICAgfSk7CiAgICB9KTsKICB9KS5jYXRjaChmdW5j
dGlvbihlKSB7CiAgICBzdGF0dXNaZWlsZShlaW50cmFnLCAnRkVITFQnLCBlLm1lc3NhZ2UgfHwg
U3RyaW5nKGUpKTsKICAgIHJldHVybiB7IHN0YXR1czogJ2ZlaCcgfTsKICB9KTsKfQoKZnVuY3Rp
b24gcHJ1ZWZlSW1wb3J0ZShlcmdlYm5pc3NlKSB7CiAgLy8gU2FtbWVsdCBhbGxlIHN0YXRpc2No
IGltcG9ydGllcnRlbiByZWxhdGl2ZW4gUGZhZGUgYXVzIGRlbiBNb2R1bC0KICAvLyBQcnVlZnVu
Z2VuIHVuZCBwcnVlZnN0IGRpZSBqZW5pZ2VuLCBkaWUgTklDSFQgc2Nob24gZXhwbGl6aXQgaW4g
U09MTAogIC8vIHN0YW5kZW4g4oCUIHNvbnN0IGRvcHBlbHRlIEFuemVpZ2UgZGVyc2VsYmVuIERh
dGVpIG1pdCB1LlUuIGFid2VpY2hlbmRlbQogIC8vIEVyZ2VibmlzIChQb3dlclNoZWxsLUh0dHBM
aXN0ZW5lciBhbnR3b3J0ZXQgYXVmIEhFQUQgbmljaHQgenV2ZXJsYWVzc2lnKS4KICAvLyBad2Vj
azogUGhhbnRvbS1JbXBvcnRzIGF1ZiBlbnRmZXJudGUvdW1iZW5hbm50ZSBNb2R1bGUgYXVmZGVj
a2VuLgogIHZhciBzb2xsUGZhZGUgPSBuZXcgU2V0KFNPTEwubWFwKGZ1bmN0aW9uKGUpIHsgcmV0
dXJuIGUucGZhZDsgfSkpOwogIHZhciBhbGxlSW1wb3J0ZSA9IG5ldyBTZXQoKTsKICBlcmdlYm5p
c3NlLmZvckVhY2goZnVuY3Rpb24ociwgaSkgewogICAgdmFyIGJhc2lzID0gU09MTFtpXS5wZmFk
OwogICAgKHIuaW1wb3J0ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihwKSB7CiAgICAgIHZhciBi
YXNpc0RpciA9IGJhc2lzLmluZGV4T2YoJy8nKSA+PSAwID8gYmFzaXMuc3Vic3RyaW5nKDAsIGJh
c2lzLmxhc3RJbmRleE9mKCcvJykgKyAxKSA6ICcnOwogICAgICB2YXIgdGVpbGUgPSAoYmFzaXNE
aXIgKyBwKS5zcGxpdCgnLycpOwogICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgdGVpbGUuZm9y
RWFjaChmdW5jdGlvbih0KSB7CiAgICAgICAgaWYgKHQgPT09ICcuLicpIHN0YWNrLnBvcCgpOwog
ICAgICAgIGVsc2UgaWYgKHQgIT09ICcuJyAmJiB0ICE9PSAnJykgc3RhY2sucHVzaCh0KTsKICAg
ICAgfSk7CiAgICAgIHZhciB2b2xsID0gc3RhY2suam9pbignLycpOwogICAgICBpZiAoIXNvbGxQ
ZmFkZS5oYXModm9sbCkpIGFsbGVJbXBvcnRlLmFkZCh2b2xsKTsKICAgIH0pOwogIH0pOwogIGlm
IChhbGxlSW1wb3J0ZS5zaXplID09PSAwKSB7CiAgICBzdGF0dXNaZWlsZSh7IHBmYWQ6ICcoSW1w
b3J0LUtldHRlIGdlcHLDvGZ0KScgfSwgJ09LJywgJ2tlaW5lIHp1c2FldHpsaWNoZW4gUGhhbnRv
bS1JbXBvcnRzJyk7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3RhdHVzOiAnb2snIH0p
OwogIH0KICAvLyBHRVQgc3RhdHQgSEVBRDogUG93ZXJTaGVsbC1IdHRwTGlzdGVuZXIgYW50d29y
dGV0IGF1ZiBIRUFEIG5pY2h0CiAgLy8genV2ZXJsYWVzc2lnIChnbGVpY2hlciBQZmFkIGthbm4g
bWl0IEdFVCAyMDAsIG1pdCBIRUFEIDQwNSBsaWVmZXJuKS4KICAvLyBXaXIgbGVzZW4gZGVuIEJv
ZHkgbmljaHQsIGRlciBTdGF0dXMgcmVpY2h0LgogIHZhciBjaGVja3MgPSBbXTsKICBhbGxlSW1w
b3J0ZS5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKICAgIGNoZWNrcy5wdXNoKGZldGNoKHAsIHsgY2Fj
aGU6ICduby1zdG9yZScgfSkudGhlbihmdW5jdGlvbihyKSB7CiAgICAgIHJldHVybiB7IHBmYWQ6
IHAsIG9rOiByLm9rLCBzdGF0dXM6IHIuc3RhdHVzIH07CiAgICB9KS5jYXRjaChmdW5jdGlvbigp
IHsgcmV0dXJuIHsgcGZhZDogcCwgb2s6IGZhbHNlLCBzdGF0dXM6ICdORVRaJyB9OyB9KSk7CiAg
fSk7CiAgcmV0dXJuIFByb21pc2UuYWxsKGNoZWNrcykudGhlbihmdW5jdGlvbihhcnIpIHsKICAg
IHZhciBwcm9ibGVtZSA9IGFyci5maWx0ZXIoZnVuY3Rpb24oeCkgeyByZXR1cm4gIXgub2s7IH0p
OwogICAgaWYgKHByb2JsZW1lLmxlbmd0aCA9PT0gMCkgewogICAgICBzdGF0dXNaZWlsZSh7IHBm
YWQ6ICcoSW1wb3J0LUtldHRlIGdlcHLDvGZ0LCAnICsgYXJyLmxlbmd0aCArICcgUGZhZGUpJyB9
LCAnT0snLCAnYWxsZSBuaWNodC1TT0xMLUltcG9ydHMgYXVmbG9lc2JhcicpOwogICAgICByZXR1
cm4geyBzdGF0dXM6ICdvaycgfTsKICAgIH0KICAgIHByb2JsZW1lLmZvckVhY2goZnVuY3Rpb24o
cCkgewogICAgICBzdGF0dXNaZWlsZSh7IHBmYWQ6IHAucGZhZCB9LCAnRkVITFQnLCAnUGhhbnRv
bS1JbXBvcnQ6IEhUVFAgJyArIHAuc3RhdHVzKTsKICAgIH0pOwogICAgcmV0dXJuIHsgc3RhdHVz
OiAnZmVoJywgYW56YWhsOiBwcm9ibGVtZS5sZW5ndGggfTsKICB9KTsKfQoKZnVuY3Rpb24gYnl0
ZXNGbXQobikgewogIGlmIChuID09IG51bGwpIHJldHVybiAn4oCUJzsKICBpZiAobiA8IDEwMjQp
IHJldHVybiBuICsgJyBCJzsKICBpZiAobiA8IDEwMjQgKiAxMDI0KSByZXR1cm4gKG4gLyAxMDI0
KS50b0ZpeGVkKDEpICsgJyBLQic7CiAgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQo
MikgKyAnIE1CJzsKfQoKZnVuY3Rpb24gcHJ1ZWZlR3JvZXNzZW4oKSB7CiAgUSgnI2dyb2Vzc2Ut
bWV0YScpLnRleHRDb250ZW50ID0gJ0ZyYWdlIFNlcnZlci1FbmRwb2ludCAvYXBpL3N5bmMtY2hl
Y2svZGF0ZWllbiBhYuKApic7CiAgUSgnI2dyb2Vzc2UtemVpbGVuJykuaW5uZXJIVE1MID0gJyc7
CiAgcmV0dXJuIGZldGNoKCcvYXBpL3N5bmMtY2hlY2svZGF0ZWllbicsIHsgY2FjaGU6ICduby1z
dG9yZScgfSkudGhlbihmdW5jdGlvbihyKSB7CiAgICBpZiAoIXIub2spIHsKICAgICAgUSgnI2dy
b2Vzc2UtbWV0YScpLnRleHRDb250ZW50ID0gJ0hUVFAgJyArIHIuc3RhdHVzICsgJyAnICsgci5z
dGF0dXNUZXh0ICsgJyDigJQgRW5kcG9pbnQgbmljaHQgdmVyZsO8Z2JhciBvZGVyIGtlaW5lIEFk
bWluLVJlY2h0ZS4nOwogICAgICByZXR1cm4geyBzdGF0dXM6ICdmZWgnIH07CiAgICB9CiAgICBy
ZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihqKSB7CiAgICAgIGlmICghai5vaykgewogICAg
ICAgIFEoJyNncm9lc3NlLW1ldGEnKS50ZXh0Q29udGVudCA9IGouZmVobGVyIHx8ICdTZXJ2ZXIg
bWVsZGV0IEZlaGxlci4nOwogICAgICAgIHJldHVybiB7IHN0YXR1czogJ3dhcm4nIH07CiAgICAg
IH0KICAgICAgUSgnI2dyb2Vzc2UtbWV0YScpLmlubmVySFRNTCA9CiAgICAgICAgJ1NvdXJjZTog
PGNvZGU+JyArIGVzY2FwZUh0bWwoai5zb3VyY2VSb290KSArICc8L2NvZGU+PGJyPicgKwogICAg
ICAgICdBc3NldDogIDxjb2RlPicgKyBlc2NhcGVIdG1sKGouYXNzZXRSb290KSAgKyAnPC9jb2Rl
Pjxicj4nICsKICAgICAgICBqLmFuemFobCArICcgRGF0ZWllbiBnZXByw7xmdCDCtyAnICsKICAg
ICAgICAnPHNwYW4gc3R5bGU9ImNvbG9yOiMxZjdhMWYiPicgKyBqLmFuek9rICsgJyBPSzwvc3Bh
bj4gwrcgJyArCiAgICAgICAgJzxzcGFuIHN0eWxlPSJjb2xvcjojYjA2MDAwIj4nICsgai5hbnpE
aWZmICsgJyBHcsO2w59lbi1EaWZmPC9zcGFuPiDCtyAnICsKICAgICAgICAnPHNwYW4gc3R5bGU9
ImNvbG9yOiNiMDIwMjAiPicgKyBqLmFuekZlaGx0QXNzZXQgKyAnIEFzc2V0IGZlaGx0PC9zcGFu
PiDCtyAnICsKICAgICAgICAnPHNwYW4gc3R5bGU9ImNvbG9yOiNiMDIwMjAiPicgKyBqLmFuekZl
aGx0U291cmNlICsgJyBTb3VyY2UgZmVobHQ8L3NwYW4+JzsKICAgICAgdmFyIHRib2R5ID0gUSgn
I2dyb2Vzc2UtemVpbGVuJyk7CiAgICAgIChqLmRhdGVpZW4gfHwgW10pLmZvckVhY2goZnVuY3Rp
b24oZCkgewogICAgICAgIHZhciBjbHMgPSAnb2snLCBzdGF0dXNUeHQgPSAn4pyTIGlkZW50aXNj
aCc7CiAgICAgICAgaWYgKGQuc3RhdHVzID09PSAnZ3JvZXNzZV9kaWZmJykgICB7IGNscyA9ICd3
YXJuJzsgc3RhdHVzVHh0ID0gJ+KaoCBHcsO2w59lIGFid2VpY2hlbmQnOyB9CiAgICAgICAgZWxz
ZSBpZiAoZC5zdGF0dXMgPT09ICdhc3NldF9mZWhsdCcpICB7IGNscyA9ICdmZWgnOyAgc3RhdHVz
VHh0ID0gJ+KclyBBc3NldC1DYWNoZSBsZWVyJzsgfQogICAgICAgIGVsc2UgaWYgKGQuc3RhdHVz
ID09PSAnc291cmNlX2ZlaGx0JykgeyBjbHMgPSAnZmVoJzsgIHN0YXR1c1R4dCA9ICfinJcgU291
cmNlIGZlaGx0JzsgfQogICAgICAgIGVsc2UgaWYgKGQuc3RhdHVzID09PSAnYmVpZGVfZmVobGVu
JykgeyBjbHMgPSAnZmVoJzsgIHN0YXR1c1R4dCA9ICfinJcgYmVpZGUgZmVobGVuJzsgfQogICAg
ICAgIHZhciBkaWZmVHh0ID0gJyc7CiAgICAgICAgaWYgKGQuZGlmZkJ5dGVzICE9IG51bGwpIHsK
ICAgICAgICAgIGlmIChkLmRpZmZCeXRlcyA9PT0gMCkgZGlmZlR4dCA9ICcwJzsKICAgICAgICAg
IGVsc2UgZGlmZlR4dCA9IChkLmRpZmZCeXRlcyA+IDAgPyAnKycgOiAnJykgKyBkLmRpZmZCeXRl
czsKICAgICAgICB9IGVsc2UgeyBkaWZmVHh0ID0gJ+KAlCc7IH0KICAgICAgICB2YXIgdHIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwogICAgICAgIHRyLmNsYXNzTmFtZSA9IGNsczsK
ICAgICAgICB0ci5pbm5lckhUTUwgPQogICAgICAgICAgJzx0ZCBjbGFzcz0icGZhZCI+JyArIGVz
Y2FwZUh0bWwoZC5wZmFkKSArICc8L3RkPicgKwogICAgICAgICAgJzx0ZCBzdHlsZT0idGV4dC1h
bGlnbjpyaWdodCI+JyArIGJ5dGVzRm10KGQuc291cmNlQnl0ZXMpICsgJzwvdGQ+JyArCiAgICAg
ICAgICAnPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij4nICsgYnl0ZXNGbXQoZC5hc3NldEJ5
dGVzKSAgKyAnPC90ZD4nICsKICAgICAgICAgICc8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQi
PicgKyBkaWZmVHh0ICsgJzwvdGQ+JyArCiAgICAgICAgICAnPHRkIGNsYXNzPSJzdGF0dXMiPicg
KyBzdGF0dXNUeHQgKyAnPC90ZD4nOwogICAgICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKICAg
ICAgfSk7CiAgICAgIHJldHVybiB7IHN0YXR1czogJ29rJywgYW56RGlmZjogai5hbnpEaWZmLCBh
bnpGZWhsdEFzc2V0OiBqLmFuekZlaGx0QXNzZXQsIGFuekZlaGx0U291cmNlOiBqLmFuekZlaGx0
U291cmNlIH07CiAgICB9KTsKICB9KS5jYXRjaChmdW5jdGlvbihlKSB7CiAgICBRKCcjZ3JvZXNz
ZS1tZXRhJykudGV4dENvbnRlbnQgPSAnTmV0endlcmstRmVobGVyOiAnICsgKGUubWVzc2FnZSB8
fCBlKTsKICAgIHJldHVybiB7IHN0YXR1czogJ2ZlaCcgfTsKICB9KTsKfQoKLy8gRmVobGVyLU9i
amVrdCAtPiB7IG5hbWUsIHRleHQsIHN0YWNrIH0gZnVlciBkaWUgQW56ZWlnZSBhdWZiZXJlaXRl
bi4KZnVuY3Rpb24gbW9kdWxGZWhsZXJUZXh0KGUpIHsKICB2YXIgbiA9IChlICYmIGUubmFtZSkg
fHwgJ0ZlaGxlcic7CiAgdmFyIG0gPSAoZSAmJiBlLm1lc3NhZ2UpIHx8IFN0cmluZyhlKTsKICB2
YXIgc3RhY2sgPSAoZSAmJiBlLnN0YWNrKSA/IFN0cmluZyhlLnN0YWNrKS5zcGxpdCgnXG4nKS5z
bGljZSgwLCA1KS5qb2luKCdcbicpIDogJyc7CiAgcmV0dXJuIHsgbmFtZTogbiwgdGV4dDogbiAr
ICc6ICcgKyBtLCBzdGFjazogc3RhY2sgfTsKfQoKZnVuY3Rpb24gc3RhcnRaZWlsZShtb2R1bCwg
c3RhdHVzLCBrb21tZW50YXIsIGRldGFpbHMpIHsKICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCd0cicpOwogIHRyLmNsYXNzTmFtZSA9IHN0YXR1cyA9PT0gJ09LJyA/ICdvaycgOiAo
c3RhdHVzID09PSAnSU5GTycgPyAnc2tpcCcgOiAnZmVoJyk7CiAgdHIuaW5uZXJIVE1MID0KICAg
ICc8dGQgY2xhc3M9InBmYWQiPicgKyBlc2NhcGVIdG1sKG1vZHVsKSArICc8L3RkPicgKwogICAg
Jzx0ZCBjbGFzcz0ic3RhdHVzIj4nICsgc3RhdHVzICsgJzwvdGQ+JyArCiAgICAnPHRkIGNsYXNz
PSJkZXRhaWwiPicgKyAoa29tbWVudGFyID8gZXNjYXBlSHRtbChrb21tZW50YXIpIDogJycpICsK
ICAgICAgKGRldGFpbHMgPyAnPGRldGFpbHM+PHN1bW1hcnk+bWVocjwvc3VtbWFyeT48cHJlIHN0
eWxlPSJtYXJnaW46NHB4IDA7d2hpdGUtc3BhY2U6cHJlLXdyYXAiPicgKwogICAgICAgICBlc2Nh
cGVIdG1sKGRldGFpbHMpICsgJzwvcHJlPjwvZGV0YWlscz4nIDogJycpICsKICAgICc8L3RkPic7
CiAgUSgnI3N0YXJ0LXplaWxlbicpLmFwcGVuZENoaWxkKHRyKTsKfQoKLy8gU3RhcnQtRGlhZ25v
c2U6IGxhZWR0IGplZGVzIEVTLU1vZHVsIGVpbnplbG4gcGVyIGR5bmFtaWMgaW1wb3J0KCkuIEZh
ZW5ndAovLyBTeW50YXgtL0xpbmstRmVobGVyIChmZWhsZW5kZXIgRXhwb3J0LCBrYXB1dHRlciBJ
bXBvcnQtUGZhZCkgYWIsIGRpZSBpbQovLyBlY2h0ZW4gaW5kZXguaHRtbCB6dW0gd2Vpc3NlbiBC
aWxkc2NoaXJtIGZ1ZWhyZW4uIGFwcC5qcyB6dWxldHp0OiBkb3J0IGlzdAovLyBlaW4gTGF1Znpl
aXRmZWhsZXIgYXVzIGluaXQoKSBnZWdlbiBkaWUgZnJlbWRlIERPTSBlcndhcnRiYXIgKC0+IElO
Rk8pLCBlaW4KLy8gUGFyc2UtL0xpbmstRmVobGVyIGRhZ2VnZW4gZWluIGVjaHRlciBTdGFydC1L
aWxsZXIgKC0+IEZFSExFUikuCmZ1bmN0aW9uIHBydWVmZVN0YXJ0KGluZm8pIHsKICBRKCcjc3Rh
cnQtbWV0YScpLnRleHRDb250ZW50ID0gJ0zDpGR0IE1vZHVsZSBlaW56ZWxu4oCmJzsKICBRKCcj
c3RhcnQtemVpbGVuJykuaW5uZXJIVE1MID0gJyc7CgogIHZhciBnRXJyID0gW107CiAgZnVuY3Rp
b24gb25FcnIoZXYpIHsKICAgIGdFcnIucHVzaCgoZXYuZXJyb3IgJiYgKGV2LmVycm9yLnN0YWNr
IHx8IGV2LmVycm9yLm1lc3NhZ2UpKSB8fAogICAgICAgICAgICAgICgoZXYubWVzc2FnZSB8fCAn
ZXJyb3InKSArIChldi5maWxlbmFtZSA/ICcgQCAnICsgZXYuZmlsZW5hbWUgKyAnOicgKyBldi5s
aW5lbm8gOiAnJykpKTsKICB9CiAgZnVuY3Rpb24gb25SZWooZXYpIHsKICAgIHZhciByID0gZXYu
cmVhc29uOwogICAgZ0Vyci5wdXNoKCd1bmhhbmRsZWRyZWplY3Rpb246ICcgKyAoKHIgJiYgKHIu
c3RhY2sgfHwgci5tZXNzYWdlKSkgfHwgcikpOwogIH0KICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cignZXJyb3InLCBvbkVyciwgdHJ1ZSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFu
ZGxlZHJlamVjdGlvbicsIG9uUmVqKTsKCiAgLy8gTnVyIE1vZHVsZSwgZnVlciBkaWUgZGVyIFVz
ZXIgYmVyZWNodGlndCBpc3QgKHNvbnN0IDQwNCAtPiBmYWxzY2hlciBGRUhMRVIpLgogIHZhciBw
ZmFkZSA9IFNPTEwuZmlsdGVyKGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGUuaXN0TW9kdWwgJiYgZGFy
ZkZ1ZXIoZSwgaW5mbyk7IH0pCiAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oZSkgeyBy
ZXR1cm4gZS5wZmFkOyB9KTsKCiAgdmFyIHJlcyA9IHsgb2s6IDAsIGZlaDogMCB9OwogIHZhciBj
aGFpbiA9IFByb21pc2UucmVzb2x2ZSgpOwogIHBmYWRlLmZvckVhY2goZnVuY3Rpb24ocCkgewog
ICAgY2hhaW4gPSBjaGFpbi50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaW1wb3J0KCcu
LycgKyBwKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgIHN0YXJ0WmVpbGUocCwgJ09LJywgJ2dl
bGFkZW4nKTsgcmVzLm9rKys7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHsKICAgICAgICB2
YXIgZiA9IG1vZHVsRmVobGVyVGV4dChlKTsKICAgICAgICBzdGFydFplaWxlKHAsICdGRUhMRVIn
LCBmLnRleHQsIGYuc3RhY2spOyByZXMuZmVoKys7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CiAg
Ly8gYXBwLmpzIHp1bGV0enQgdW5kIGdlc29uZGVydCBrbGFzc2lmaXppZXJlbi4KICBjaGFpbiA9
IGNoYWluLnRoZW4oZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gaW1wb3J0KCcuL2FwcC5qcycpLnRo
ZW4oZnVuY3Rpb24oKSB7CiAgICAgIHN0YXJ0WmVpbGUoJ2FwcC5qcycsICdPSycsICdnZWxhZGVu
ICsgaW5pdCgpIGR1cmNobGF1ZmVuJyk7IHJlcy5vaysrOwogICAgfSkuY2F0Y2goZnVuY3Rpb24o
ZSkgewogICAgICB2YXIgZiA9IG1vZHVsRmVobGVyVGV4dChlKTsKICAgICAgaWYgKGYubmFtZSA9
PT0gJ1N5bnRheEVycm9yJykgewogICAgICAgIC8vIFBhcnNlLSBvZGVyIExpbmstRmVobGVyICh6
LkIuIGZlaGxlbmRlciBFeHBvcnQpIC0+IGVjaHRlciBTdGFydC1LaWxsZXIuCiAgICAgICAgc3Rh
cnRaZWlsZSgnYXBwLmpzJywgJ0ZFSExFUicsIGYudGV4dCwgZi5zdGFjayk7IHJlcy5mZWgrKzsK
ICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFydFplaWxlKCdhcHAuanMnLCAnSU5GTycsCiAgICAg
ICAgICAnTW9kdWwgbMOkZHQg4oCUIExhdWZ6ZWl0ZmVobGVyIGF1cyBpbml0KCkgYXVmIGRpZXNl
ciBEaWFnbm9zZS1TZWl0ZSBlcndhcnRiYXIgKGltIGVjaHRlbiBpbmRleC5odG1sIGdnZi4gbmlj
aHQpOiAnICsgZi50ZXh0LAogICAgICAgICAgZi5zdGFjayk7CiAgICAgIH0KICAgIH0pOwogIH0p
OwoKICByZXR1cm4gY2hhaW4udGhlbihmdW5jdGlvbigpIHsKICAgIHdpbmRvdy5yZW1vdmVFdmVu
dExpc3RlbmVyKCdlcnJvcicsIG9uRXJyLCB0cnVlKTsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBvblJlaik7CiAgICBpZiAoZ0Vyci5sZW5ndGgp
IHsKICAgICAgLy8gRG9wcGVsdGUgenVzYW1tZW5mYXNzZW4uCiAgICAgIHZhciBzZWVuID0ge307
CiAgICAgIGdFcnIuZm9yRWFjaChmdW5jdGlvbih0KSB7CiAgICAgICAgaWYgKHNlZW5bdF0pIHJl
dHVybjsgc2Vlblt0XSA9IDE7CiAgICAgICAgc3RhcnRaZWlsZSgnKGdsb2JhbGVyIEZlaGxlciBi
ZWltIE1vZHVsLUxhZGV0ZXN0KScsICdGRUhMRVInLCAnc2llaGUgRGV0YWlscycsIHQpOwogICAg
ICAgIHJlcy5mZWgrKzsKICAgICAgfSk7CiAgICB9CiAgICBRKCcjc3RhcnQtbWV0YScpLmlubmVy
SFRNTCA9IHJlcy5mZWgKICAgICAgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiNiMDIwMjA7Zm9udC13
ZWlnaHQ6NjAwIj7inJcgJyArIHJlcy5mZWggKyAnIE1vZHVsLVByb2JsZW0oZSkg4oCUIERBUyB2
ZXJoaW5kZXJ0IGRlbiBTdGFydC48L3NwYW4+IEJlaGViZSBkaWUgZXJzdGUgRkVITEVSLVplaWxl
LCBkYW5uIGVybmV1dCBwcsO8ZmVuLicKICAgICAgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiMxZjdh
MWY7Zm9udC13ZWlnaHQ6NjAwIj7inJMgQWxsZSAnICsgcmVzLm9rICsgJyBNb2R1bGUgbGFkZW4g
ZmVobGVyZnJlaS48L3NwYW4+IFN0YXJ0ZXQgZGllIFNlaXRlIHRyb3R6ZGVtIG5pY2h0LCBsaWVn
dCBlcyBhbiBkZXIgTGF1ZnplaXQgKERhdGVuL0FQSS9pbml0KSDigJQgQnJvd3Nlci1Lb25zb2xl
IGRpcmVrdCBhdWYgPGNvZGU+aW5kZXguaHRtbDwvY29kZT4gcHLDvGZlbi4nOwogICAgcmV0dXJu
IHJlczsKICB9KTsKfQoKZnVuY3Rpb24gc3RhcnQoKSB7CiAgUSgnI2J0bi1zdGFydCcpLmRpc2Fi
bGVkID0gdHJ1ZTsKICBRKCcjemVpbGVuJykuaW5uZXJIVE1MID0gJyc7CiAgUSgnI3N0YXJ0LXpl
aWxlbicpLmlubmVySFRNTCA9ICcnOwogIFEoJyNzdGFydC1tZXRhJykudGV4dENvbnRlbnQgPSAn
bMOkdWZ04oCmJzsKICBRKCcjZ3JvZXNzZS16ZWlsZW4nKS5pbm5lckhUTUwgPSAnJzsKICBRKCcj
Z3JvZXNzZS1tZXRhJykudGV4dENvbnRlbnQgPSAnJzsKICBRKCcjc3RhdHVzJykudGV4dENvbnRl
bnQgPSAnbMOkdWZ04oCmJzsKICBRKCcjc3RhdHVzJykuY2xhc3NOYW1lID0gJ2xhdWZlbic7CiAg
USgnI3p1c2FtbWVuZmFzc3VuZycpLnRleHRDb250ZW50ID0gJ0xhZGXigKYnOwogIFEoJyN6dXNh
bW1lbmZhc3N1bmcnKS5jbGFzc05hbWUgPSAnenVzYW1tZW5mYXNzdW5nIG5ldXRyYWwnOwoKICAv
LyBFcnN0IE1hbmlmZXN0IGxhZGVuIChGZWhsZXIgdG9sZXJpZXJlbiDigJQgZGFubiBmYWVsbHQg
ZGVyIENoZWNrIGF1ZgogIC8vIHJlaW5lbiBBbmtlci1DaGVjayB6dXJ1ZWNrKSwgZGFubiBSZWNo
dGUgaG9sZW4gKyBQcnVlZnVuZyBzdGFydGVuLgogIFByb21pc2UuYWxsKFttYW5pZmVzdExhZGVu
KCksIHJlY2h0ZUhvbGVuKCldKS50aGVuKGZ1bmN0aW9uKGFycikgewogICAgTUFOSUZFU1QgPSBh
cnJbMF07CiAgICB2YXIgaW5mbyA9IGFyclsxXTsKICAgIHZhciBtYW5pZmVzdFR4dDsKICAgIGlm
IChNQU5JRkVTVCAmJiBNQU5JRkVTVF9NRVRBKSB7CiAgICAgIG1hbmlmZXN0VHh0ID0gJyDCtyBN
YW5pZmVzdDogJyArIChNQU5JRkVTVF9NRVRBLmJyYW5jaCB8fCAnPycpICsKICAgICAgICAgICAg
ICAgICAgICAnQCcgKyAoTUFOSUZFU1RfTUVUQS5jb21taXQgfHwgJz8nKSArCiAgICAgICAgICAg
ICAgICAgICAgJyAoJyArIE9iamVjdC5rZXlzKE1BTklGRVNUKS5sZW5ndGggKyAnIERhdGVpZW4s
IGdlbmVyaWVydCAnICsKICAgICAgICAgICAgICAgICAgICAoTUFOSUZFU1RfTUVUQS5nZW5lcmll
cnQgfHwgJz8nKSArICcpJzsKICAgIH0gZWxzZSB7CiAgICAgIG1hbmlmZXN0VHh0ID0gJyDCtyDi
mqAgTWFuaWZlc3QgbmljaHQgZ2VmdW5kZW4g4oCUIEhhc2gtVmVyZ2xlaWNoIMO8YmVyc3BydW5n
ZW4nICsKICAgICAgICAgICAgICAgICAgICAnICh1cGRhdGUtc3luYy1tYW5pZmVzdC5zaCBhdXNm
w7xocmVuIHVuZCBjb21taXR0ZW4pJzsKICAgIH0KICAgIFEoJyNpbmZvJykuaW5uZXJIVE1MID0K
ICAgICAgJ0VpbmdlbG9nZ3QgYWxzICcgKyBlc2NhcGVIdG1sKGluZm8uYmVudXR6ZXIgfHwgJz8n
KSArICcgwrcgUm9sbGU6ICcgKyBlc2NhcGVIdG1sKGluZm8ucm9sbGUgfHwgJz8nKSArCiAgICAg
IChpbmZvLmlzdFN1cGVyVXNlciA/ICcgwrcgU3VwZXJVc2VyJyA6ICcnKSArCiAgICAgICcgwrcg
c2VoZW46ICcgKyBlc2NhcGVIdG1sKE9iamVjdC5rZXlzKGluZm8uc2VoZW4gfHwge30pLmZpbHRl
cihmdW5jdGlvbihrKXsgcmV0dXJuIGluZm8uc2VoZW5ba107IH0pLmpvaW4oJywgJykpICsKICAg
ICAgbWFuaWZlc3RUeHQ7CiAgICAvLyBIZWFkbGluZSB6dWVyc3Q6IFN0YXJ0LURpYWdub3NlIChN
b2R1bC1MYWRldGVzdCkuIERhbmFjaCBkaWUgYmlzaGVyaWdlbgogICAgLy8gQXVzbGllZmVydW5n
cy0vQW5rZXItL0dyb2Vzc2VuLVBydWVmdW5nZW4uCiAgICByZXR1cm4gcHJ1ZWZlU3RhcnQoaW5m
bykudGhlbihmdW5jdGlvbihzdGFydFJlcykgewogICAgLy8gc2VxdWVuemllbGwgcHJ1ZWZlbiwg
ZGFtaXQgZGllIFJlaWhlbmZvbGdlIGRlciBaZWlsZW4gbWl0IFNPTEwgaWRlbnRpc2NoIGlzdAog
ICAgdmFyIGVyZ2Vibmlzc2UgPSBbXTsKICAgIHZhciBjaGFpbiA9IFByb21pc2UucmVzb2x2ZSgp
OwogICAgU09MTC5mb3JFYWNoKGZ1bmN0aW9uKGUpIHsKICAgICAgY2hhaW4gPSBjaGFpbi50aGVu
KGZ1bmN0aW9uKCkgeyByZXR1cm4gcHJ1ZWZlRWludHJhZyhlLCBpbmZvKTsgfSkudGhlbihmdW5j
dGlvbihyKSB7IGVyZ2Vibmlzc2UucHVzaChyKTsgfSk7CiAgICB9KTsKICAgIHJldHVybiBjaGFp
bi50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcHJ1ZWZlSW1wb3J0ZShlcmdlYm5pc3Nl
KS50aGVuKGZ1bmN0aW9uKGltcENoZWNrKSB7CiAgICAgICAgcmV0dXJuIHBydWVmZUdyb2Vzc2Vu
KCkudGhlbihmdW5jdGlvbihnckNoZWNrKSB7CiAgICAgICAgICB2YXIgb2sgICAgPSBlcmdlYm5p
c3NlLmZpbHRlcihmdW5jdGlvbihyKXsgcmV0dXJuIHIuc3RhdHVzID09PSAnb2snOyB9KS5sZW5n
dGg7CiAgICAgICAgICB2YXIgd2FybiAgPSBlcmdlYm5pc3NlLmZpbHRlcihmdW5jdGlvbihyKXsg
cmV0dXJuIHIuc3RhdHVzID09PSAnd2Fybic7IH0pLmxlbmd0aDsKICAgICAgICAgIHZhciBmZWgg
ICA9IGVyZ2Vibmlzc2UuZmlsdGVyKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5zdGF0dXMgPT09ICdm
ZWgnOyB9KS5sZW5ndGggKwogICAgICAgICAgICAgICAgICAgICAgKGltcENoZWNrLnN0YXR1cyA9
PT0gJ2ZlaCcgPyBpbXBDaGVjay5hbnphaGwgOiAwKTsKICAgICAgICAgIHZhciBza2lwICA9IGVy
Z2Vibmlzc2UuZmlsdGVyKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5zdGF0dXMgPT09ICdza2lwJzsg
fSkubGVuZ3RoOwogICAgICAgICAgLy8gR3JvZXNzZW4tQ2hlY2sgZmxpZXNzdCB6dXNhZXR6bGlj
aCBpbiBkaWUgWnVzYW1tZW5mYXNzdW5nIGVpbi4KICAgICAgICAgIHZhciBncldhcm4gPSAoZ3JD
aGVjay5hbnpEaWZmIHx8IDApOwogICAgICAgICAgdmFyIGdyRmVoICA9IChnckNoZWNrLmFuekZl
aGx0QXNzZXQgfHwgMCkgKyAoZ3JDaGVjay5hbnpGZWhsdFNvdXJjZSB8fCAwKTsKICAgICAgICAg
IHdhcm4gKz0gZ3JXYXJuOwogICAgICAgICAgZmVoICArPSBnckZlaDsKICAgICAgICAgIC8vIFN0
YXJ0LURpYWdub3NlIChNb2R1bC1MYWRlZmVobGVyKSBpc3QgZGVyIGtyaXRpc2Noc3RlIEJsb2Nr
LgogICAgICAgICAgdmFyIHN0YXJ0RmVoID0gKHN0YXJ0UmVzICYmIHN0YXJ0UmVzLmZlaCkgfHwg
MDsKICAgICAgICAgIGZlaCArPSBzdGFydEZlaDsKCiAgICAgICAgICB2YXIgenVzID0gUSgnI3p1
c2FtbWVuZmFzc3VuZycpOwogICAgICAgICAgdmFyIGdyU3VmZml4ID0gKGdyV2FybiB8fCBnckZl
aCkKICAgICAgICAgICAgPyAoJyDCtyBHcsO2w59lbi1DaGVjazogJyArIGdyV2FybiArICcgRGlm
ZiwgJyArIGdyRmVoICsgJyBmZWhsZW4nKQogICAgICAgICAgICA6ICcnOwogICAgICAgICAgdmFy
IHN0YXJ0U3VmZml4ID0gc3RhcnRGZWggPyAoJyDCtyDwn5qAIFN0YXJ0LURpYWdub3NlOiAnICsg
c3RhcnRGZWggKyAnIE1vZHVsLVByb2JsZW0oZSknKSA6ICcnOwogICAgICAgICAgaWYgKGZlaCA9
PT0gMCAmJiB3YXJuID09PSAwKSB7CiAgICAgICAgICAgIHp1cy50ZXh0Q29udGVudCA9ICfinJMg
QWxsZSAnICsgb2sgKyAnIERhdGVpZW4gT0sgwrcgTW9kdWxlIGxhZGVuIMK3IEdyw7bDn2VuIGlk
ZW50aXNjaCcgKyAoc2tpcCA/ICcgKCcgKyBza2lwICsgJyDDvGJlcnNwcnVuZ2VuKScgOiAnJyk7
CiAgICAgICAgICAgIHp1cy5jbGFzc05hbWUgPSAnenVzYW1tZW5mYXNzdW5nIG9rJzsKICAgICAg
ICAgIH0gZWxzZSBpZiAoZmVoID09PSAwKSB7CiAgICAgICAgICAgIHp1cy50ZXh0Q29udGVudCA9
ICfimqAgJyArIG9rICsgJyBPSyDCtyAnICsgd2FybiArICcgV2FybnVuZyhlbiknICsgZ3JTdWZm
aXggKyAoc2tpcCA/ICcgwrcgJyArIHNraXAgKyAnIMO8YmVyc3BydW5nZW4nIDogJycpOwogICAg
ICAgICAgICB6dXMuY2xhc3NOYW1lID0gJ3p1c2FtbWVuZmFzc3VuZyB3YXJuJzsKICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIHp1cy50ZXh0Q29udGVudCA9ICfinJcgJyArIGZlaCArICcg
UHJvYmxlbShlKSDCtyAnICsgb2sgKyAnIE9LIMK3ICcgKyB3YXJuICsgJyBXYXJudW5nKGVuKScg
KyBzdGFydFN1ZmZpeCArIGdyU3VmZml4OwogICAgICAgICAgICB6dXMuY2xhc3NOYW1lID0gJ3p1
c2FtbWVuZmFzc3VuZyBmZWgnOwogICAgICAgICAgfQogICAgICAgICAgUSgnI3N0YXR1cycpLnRl
eHRDb250ZW50ID0gJ2ZlcnRpZyc7CiAgICAgICAgICBRKCcjc3RhdHVzJykuY2xhc3NOYW1lID0g
J25ldXRyYWwnOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0pOwogICAgfSk7CiAgfSkuY2F0
Y2goZnVuY3Rpb24oZSkgewogICAgUSgnI3p1c2FtbWVuZmFzc3VuZycpLnRleHRDb250ZW50ID0g
J+KclyAvYXBpL2luZm8gbmljaHQgZXJyZWljaGJhcjogJyArIChlLm1lc3NhZ2UgfHwgZSk7CiAg
ICBRKCcjenVzYW1tZW5mYXNzdW5nJykuY2xhc3NOYW1lID0gJ3p1c2FtbWVuZmFzc3VuZyBmZWgn
OwogICAgUSgnI3N0YXR1cycpLnRleHRDb250ZW50ID0gJ2FiZ2Vicm9jaGVuJzsKICAgIFEoJyNz
dGF0dXMnKS5jbGFzc05hbWUgPSAnbmV1dHJhbCc7CiAgfSkuZmluYWxseShmdW5jdGlvbigpIHsK
ICAgIFEoJyNidG4tc3RhcnQnKS5kaXNhYmxlZCA9IGZhbHNlOwogIH0pOwp9CgpRKCcjYnRuLXN0
YXJ0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdGFydCk7Ci8vIEF1dG8tU3RhcnQgYmVp
bSBPZWZmbmVuCnN0YXJ0KCk7Cg==
### FILE: sync-manifest.json | 6024
ewogICJnZW5lcmllcnQiOiAgIjIwMjYtMDYtMjBUMDg6MTg6NTlaIiwKICAiYnJhbmNoIjogICAg
ICJtYWluIiwKICAiY29tbWl0IjogICAgICIyOWU1ZTgxIiwKICAiYWxnb3JpdGhtdXMiOiJzaGEy
NTYiLAogICJkYXRlaWVuIjogewogICAgIldvY2hlbnBsYW4uaHRtbCI6IHsgInNoYTI1NiI6ICIz
MDY4NDMxMjU3NDBjOGJmMjgxY2RkN2VlMTZiMmEyNDI1ZWU2NDBkNDdhOGNkYWVkNzE2OWMwOGY4
OWIzOGQwIiwgImJ5dGVzIjogMjE0OTM1IH0sCiAgICAiV29jaGVucGxhbi50ZW1wbGF0ZS5odG1s
IjogeyAic2hhMjU2IjogIjM4NjM0OGFhZjgxN2FmYjA1MmRlZGU5Nzc5YTljOWM0ZTg5ZGFjMWVh
OGRhYjBkMTEyMjdiMjRjNTgyNmIxNDMiLCAiYnl0ZXMiOiAyNjM4MCB9LAogICAgImFwcC5qcyI6
IHsgInNoYTI1NiI6ICI5NjEzM2VhZDkwMDRhYTNmMDA4MzI2YmFkZWE1ZTY1ZmVmNTRkZDY3YTli
ZTVkMjg2MDU1NDFiMDZlM2Y1MzA5IiwgImJ5dGVzIjogMTQzMDk4IH0sCiAgICAiZGlhZ25vc2Uu
aHRtbCI6IHsgInNoYTI1NiI6ICIwYmY1MDdjMmZmZTI3NjNkNTE2ZjFhYmZiZDlkOTRlMjI3NDgw
OTk5ZTNjY2ZkNDJjNGQ1YjQzZWNmZTg5YjI3IiwgImJ5dGVzIjogMjUzOCB9LAogICAgImRpYWdu
b3NlLmpzIjogeyAic2hhMjU2IjogImVjOTBkMDRkZmE2MzZmYjA5MDNlZjE3MTlmOTM4YWQwYmY1
NzM1OWM4MDQxMDFlOGExMzNmNzlkNDI4MWZlZWUiLCAiYnl0ZXMiOiA1Mjg1IH0sCiAgICAiZmF2
aWNvbi5pY28iOiB7ICJzaGEyNTYiOiAiMjU0Y2Y1NWJkNzQ0ZDAxYTE0NjFkMjM4NzVkN2JkYjI1
NDI0MWQ4ZmY4MjZhM2QwY2Y2ZDhkN2MwY2Q1Y2NhYSIsICJieXRlcyI6IDQ0NDMgfSwKICAgICJo
ZWFydGJlYXQtd29ya2VyLmpzIjogeyAic2hhMjU2IjogIjEzMDBiNmJhNGU4OWI2MWViYWFmOGY2
YTk5OGMyMGM5YTFhNzQ2N2E5ZTc5M2RiMDRhM2Y1NmY1NTk2ZWEyNWEiLCAiYnl0ZXMiOiAyNzUx
IH0sCiAgICAiaW5kZXguaHRtbCI6IHsgInNoYTI1NiI6ICJmMjA2M2UxNWVkNjNiZDE3MWE1NmZm
ZGQ1NWViYzk5ODIxYjRjNjg2MzlhNTZkMmJkMTBiNWIyYWE5OGU1YTY1IiwgImJ5dGVzIjogMTI5
MjExIH0sCiAgICAiaW5mby5odG1sIjogeyAic2hhMjU2IjogIjdmMDE2ZjUzZjVjMWQ1YjE3NzUw
MTFlNTlkZTg5MTIzMGU0ZTc3MjAyY2JmOTFiOGVhODRhMTk1OGZlN2M1NzYiLCAiYnl0ZXMiOiAx
Mjc2NSB9LAogICAgImpzL2FkbWluLmpzIjogeyAic2hhMjU2IjogIjkyZjEzM2QzMDE0YmM4Nzdi
NGUyYTA5ZmNmNjcyZWFhNzNkYTE5ZGNhN2MyZTU0ZTRkZWIxNzMyYjMwYTk4NDUiLCAiYnl0ZXMi
OiA3NzM2NSB9LAogICAgImpzL2FkbWluX2NvZGVzLmpzIjogeyAic2hhMjU2IjogIjdiNTRiMTIy
ZmYxOTIzOTNhODZlZjQyNGU4ZTUyY2ZmZmM5MzA2MjIzN2E0ODY2MzZiMTQ0OWFmOWZjOGQ1Mjci
LCAiYnl0ZXMiOiAyNjA1NSB9LAogICAgImpzL2FkbWluX2NvbW1vbi5qcyI6IHsgInNoYTI1NiI6
ICI2NGVlOGU4YjhkMDZjMjAwYjQ5YmM0Y2I2MTkzNGU1NDE3ZjkyZjYyYTdkZjVkOWQzMWQwOTEw
ZjNiYzViZTc0IiwgImJ5dGVzIjogMTUyOCB9LAogICAgImpzL2FkbWluX2Vyc2NoZWludW5nc2Jp
bGQuanMiOiB7ICJzaGEyNTYiOiAiNTE2ODRmYjczOTc4ODM1MDU5YjIwMDlkMDUyNWEwZjkzZDNk
YTNlOWNhNTU3M2Y4OTcwMTUwY2I5NTlhZGE1NCIsICJieXRlcyI6IDMxNzQxIH0sCiAgICAianMv
YWRtaW5fa2FsZW5kZXIuanMiOiB7ICJzaGEyNTYiOiAiYzNhNzBjYzhhN2EyY2JlYmY0ODVhMzhi
OTkwNmY3MTBlNmRjYzUxOWE2YjI2YzM3YmFhOTJkZDEyMGRiMzkzYSIsICJieXRlcyI6IDI2NDg5
IH0sCiAgICAianMvYWRtaW5fbWl0dGVpbHVuZ2VuLmpzIjogeyAic2hhMjU2IjogIjZlZWIzMDNh
MTcwMmMxZTk1YzkxYWM5Mzg5N2FkZjQ4ZDI1ODA1NzZkNWI5NWEzZTVlMzZlZTA3OWQ2ZGIxMDMi
LCAiYnl0ZXMiOiAxOTk1OSB9LAogICAgImpzL2FkbWluX3BlcnNvbmFsLmpzIjogeyAic2hhMjU2
IjogIjdmNjI3NGM5OGIyMmJjNTI4ZTVlMGEwNmIzMThlMmM2MDNkODllZDQ3NmUxZjE4ZjNkNTRi
NDU4NzNiMGMyMWMiLCAiYnl0ZXMiOiAxMDg3NjIgfSwKICAgICJqcy9hZG1pbl9yb2xsZW4uanMi
OiB7ICJzaGEyNTYiOiAiYjI4OTNmYTNhZmMyNGQyYjQ0YzI1OTM0NjU3Nzk2NDlhZjliMjA3YmMy
NzYxODJhMzMxYzVjMTc4MmZjZjRkNCIsICJieXRlcyI6IDQzMjc4IH0sCiAgICAianMvYWRtaW5f
c3RhbmRhcmRyZWNodGUuanMiOiB7ICJzaGEyNTYiOiAiYWU2OTEyMDhmYzk4MmQwMmZlYzhhOGY1
ZTliNDBlMDI2MzhmMzdiZWU0NGY0ZDRmZTAxZjdlMTEwNjUyZDU3NCIsICJieXRlcyI6IDkyMzcg
fSwKICAgICJqcy9hZG1pbl9zdGF0aXN0aWsuanMiOiB7ICJzaGEyNTYiOiAiMDc2NTUxODllMGUx
YmE1YWE4ZjMyYzI5M2IzNGJjN2RiZmNiMTUxY2NiY2QxNDlmM2IwODI0MTVmOTg0MTQ3NiIsICJi
eXRlcyI6IDgyNTkgfSwKICAgICJqcy9hZG1pbl9zdGF0aXN0aWtfYnVpbGRlci5qcyI6IHsgInNo
YTI1NiI6ICI0NGZjYjgyODBiZmQ3MmUwNjUxMDZiNjdkNTBlYzg2NjY2MTZmNWEyOGQ0NTYyZjc1
MzVhYzAxNTU1NjQ2MzU1IiwgImJ5dGVzIjogMzA0OTQgfSwKICAgICJqcy9iZXNldHp1bmcuanMi
OiB7ICJzaGEyNTYiOiAiZjMxY2NmN2E1NzBkNjQ3MjNlOTVkNjIwZWI2ODY5NmVjODE2ZmUwYjJl
MjEwYjI2NmQ1ODUxZDI4MWI5MDM3NyIsICJieXRlcyI6IDU5NTk1IH0sCiAgICAianMvY29yZV9h
cGkuanMiOiB7ICJzaGEyNTYiOiAiNzA4YmQ4MDdjNjVjOWZhMTA1MjkwYTViNzlmNjE1NjExMDg1
OTEzNjM4MDBkY2I0NjBlMWEwZDIwYzc1NjdiMSIsICJieXRlcyI6IDEwODcgfSwKICAgICJqcy9j
b3JlX2RhdGVuTGFkZW4uanMiOiB7ICJzaGEyNTYiOiAiZmQyZDZjNzgwOWE3YWMxNDE3OTFhODFm
YTgwMjcwMTkxYTJjMWJjNmVmMWNiMWY3OGRkMDdkZTRjZDQ0YWIzOSIsICJieXRlcyI6IDcyMDMg
fSwKICAgICJqcy9jb3JlX3Blcm1pc3Npb25zLmpzIjogeyAic2hhMjU2IjogIjQ2YjNhNmQ4NWFj
ZmFkYzUxOWRhNjNlODZlMmYwZGViYzRmOTNlZTI5NmYyNTBlMmRjNDQ5MTgyM2Q1ZWI5YTYiLCAi
Ynl0ZXMiOiAyMTc3MCB9LAogICAgImpzL2NvcmVfc3RhdGUuanMiOiB7ICJzaGEyNTYiOiAiNjVm
ZmM2MGZlZjg1ZjQ5YWFkZTQyYTdlMzRjM2ZkNGYzMjg1OGUwMmE1NmQwMTczZTZiZGEyODFlNDY1
Yjc2MCIsICJieXRlcyI6IDE0MTIgfSwKICAgICJqcy9jb3JlX3V0aWwuanMiOiB7ICJzaGEyNTYi
OiAiYThhOTk2ZGQ5MTkyODY4MzFkNDIxN2E2OWM4Yjk2MjYwYWU3ZDA2MmJlZWRhNzExOGYyZTFh
NWQzNTA4OTFhMSIsICJieXRlcyI6IDEyMDQ2IH0sCiAgICAianMvZW1haWxfdm9ybGFnZW4uanMi
OiB7ICJzaGEyNTYiOiAiZDk2ODJmM2JkN2I2MmEzYTI0ZTQ4YzVmYjY5NDc1NzY3YWM0YzQxMmIw
NzAxYjg0ZTVmZDA5NjljYmMxN2EzOCIsICJieXRlcyI6IDQxNjcxIH0sCiAgICAianMvZXhwb3J0
X3BsYW4uanMiOiB7ICJzaGEyNTYiOiAiNWY4Y2FiYjk5ZTEzYzY0MzNhNmNjYjAxMjM1MTZlYjJk
MjY4ODIxMDg3YzNhNWJhOWVhNjUwMTRkY2ExYTI3MyIsICJieXRlcyI6IDIwNzg0IH0sCiAgICAi
anMvZmVpZXJ0YWdlX2RlLmpzIjogeyAic2hhMjU2IjogIjM0MTk1YjBkOTViZGJhMjhmMDBiYjE2
YzllMjE2MGExOWQ1Yzc1ZGI5MjEwNzRiMGMyMmM3OGQ1YWJmYTEwMWEiLCAiYnl0ZXMiOiAzMjA5
IH0sCiAgICAianMvZ3JpZF9lZGl0b3IuanMiOiB7ICJzaGEyNTYiOiAiY2U3YzllM2FmMGVjYmZj
M2IyODM3NDIwMDBhMDUzZmRhZDkxZjgxMGI4ZWUwYmQxMzAyMWVmNTAxMWUxOTE5YyIsICJieXRl
cyI6IDQwODUxIH0sCiAgICAianMvZ3JpZF9pbnRlcmFjdGlvbi5qcyI6IHsgInNoYTI1NiI6ICI1
OTNkNmQwYjRjMzJlZTM1Zjg1MmI1NGRlZWU2NjIzYmViNjQ3ODhhMzg1MzhkNjFkNzEyNjQyYjFm
NDkwYTA0IiwgImJ5dGVzIjogMzU4OTMgfSwKICAgICJqcy9ncmlkX3JlbmRlci5qcyI6IHsgInNo
YTI1NiI6ICIzMTM5ZjZlMmVmZDVjMTE5ZTExMzQ2OTVmZjQyMmIzYzg0YTE0MGUwMjNmZGZjNWVl
YTUwNjZlZDZlOWM2YzM2IiwgImJ5dGVzIjogMzcwNjQgfSwKICAgICJqcy9oaW53ZWlzZS5qcyI6
IHsgInNoYTI1NiI6ICIyYjlmMzY4ZTc4MjE3MWVmMDhlZTk0ZDY1ODkzZDBhZGMyOWZiZjEyN2M1
ZWY2MzNjYWZjZTczZTBkOTBjY2E4IiwgImJ5dGVzIjogMTkwNjEgfSwKICAgICJqcy9pbXBvcnRf
ZXhjZWwuanMiOiB7ICJzaGEyNTYiOiAiZjJhYTBkNjgyYjY1MWJlMDM4Y2IwY2U4MDc2NDczMDAw
YmQxODA5OWU2MzkxMTljNzE0YmQyNjc3NTdiNTM5MCIsICJieXRlcyI6IDkxMjI1IH0sCiAgICAi
anMvbG9nYnVjaC5qcyI6IHsgInNoYTI1NiI6ICI0Yjc3MjJkZWZhZDQyYjJkZTM0ZjhhYjJhZWNj
OGRhNTUxNDdjZmU3MDkwMDc1YzM1MmViMWRiMDI2YjA2OWZlIiwgImJ5dGVzIjogMzY4NjggfSwK
ICAgICJqcy9zY2hpY2h0dGVhbS5qcyI6IHsgInNoYTI1NiI6ICI2Mjk3YWFhNTQ0ZTlmMDYxODRj
NjZlYzM3MGMwZTE3Y2UxZDE5NTAwZjI3ODMxZjE2YWVhM2QyMGUyMzhjMDc2IiwgImJ5dGVzIjog
NjE2NCB9LAogICAgImpzL3N0YXRpc3Rpay5qcyI6IHsgInNoYTI1NiI6ICJjMzJmMzhjZjQzNzA4
MTkyNjQyOTYxNTAzNDEzNmE5NDMwMzc3NWNiMmQxY2E0ZTRlMjFhNmQ5MzY3M2RhODJmIiwgImJ5
dGVzIjogMTIyMDM1IH0sCiAgICAianMvc3RhdGlzdGlrX2NoYXJ0cy5qcyI6IHsgInNoYTI1NiI6
ICJjOGYzODNjYmIxYTA2YjE0N2JlZmNjNDYyOTdiMmU5YTU3Y2I1YTM0YzRjN2IxYTg0YWU5YWRh
OWZiZmU0NzcwIiwgImJ5dGVzIjogMTg1MTEgfSwKICAgICJqcy9zdGF0aXN0aWtfZW5naW5lLmpz
IjogeyAic2hhMjU2IjogIjIzYTRhYzc5NTViNTBiYjI0NzY3NjNjMjkyYzAyNGM1OGUxNDA1YjZh
NzkzM2E4MTI5MWMwYWY0YTBjNTM3Y2IiLCAiYnl0ZXMiOiAxOTAxMCB9LAogICAgImpzL3N5bmMu
anMiOiB7ICJzaGEyNTYiOiAiNWZiYWEwZDU0OTA0NzQ2MGNkYTQzOTFjMzFmZTY5YzE4YzUxNWNi
YzhjNDViNDE4ZWNmYmI2MDdhMGQ2MzBiZiIsICJieXRlcyI6IDE5NDc0IH0sCiAgICAianMvdWlf
ZGlhbG9nLmpzIjogeyAic2hhMjU2IjogIjk5YTQzM2RkMGJhMDlhNjE5ZDFlZGI5YWMyN2I4YmUw
YmY1ZTIyODlkZDZkZGZhMjJiMTVhYzMzYjhkMTljYzYiLCAiYnl0ZXMiOiAzOTAyMSB9LAogICAg
ImpzL3VpX3J0ZS5qcyI6IHsgInNoYTI1NiI6ICJhMzkzYTY5ZDBlNDI3NWIyMTAwMGEwM2RkZDRi
YzU0ODQzMmE5ZjNkNmJmNzQzNWY4MmQ3N2IzZTQ1YzQ0NTYzIiwgImJ5dGVzIjogNjk1MSB9LAog
ICAgImpzL3dvY2hlbnBsYW4uanMiOiB7ICJzaGEyNTYiOiAiNGY5MTRmYzg1NDNjYTc2OWM1OWNl
OGU3MzdhNDZjMjg2MDdmMDEzYWRkMjY1NzgyZjgzZWMxZDI3NGEzNjgxMiIsICJieXRlcyI6IDE1
MjA0IH0sCiAgICAic3R5bGUuY3NzIjogeyAic2hhMjU2IjogIjYzNjkyOWRjMjM4M2I2YjA0OGRk
NmFmY2M2NDFjYTc4NDc2MWY4MjU3N2U4NDZiODFiMmJhODdiYzFlNzg5ZDMiLCAiYnl0ZXMiOiAy
MzQ1MzIgfSwKICAgICJzeW5jLWNoZWNrLmh0bWwiOiB7ICJzaGEyNTYiOiAiMjRkZjA3OTliODVk
NjEyOTFkNWRkZjAyNGExN2M1MzM3OWQ5MGM3OWM5ZGE3MmJhNjlkODEzZTAxNGQ2ZjkyZiIsICJi
eXRlcyI6IDQyNDkgfSwKICAgICJzeW5jLWNoZWNrLmpzIjogeyAic2hhMjU2IjogImU2YTM5NTQ0
YWFhYjc0NjkxYzA5N2Y5NGYxZDUwMGZhNGU5NWVlNjU4NGI0ZDkwNGViZjk5Nzc3MTc4Njk3NzQi
LCAiYnl0ZXMiOiAzNDkwMyB9LAogICAgInN5bmMtd29ya2VyLmpzIjogeyAic2hhMjU2IjogIjll
MDc1MDFjNDM1NGE4NmI4MmQ1MjFjMGY1NDhkMzM5ZjUyOTE5YzVkNmMwYmMyMmNhZGQ4Yjc2MDgx
NWVmYjciLCAiYnl0ZXMiOiA3NzUyIH0sCiAgICAieGxzeC5mdWxsLm1pbi5qcyI6IHsgInNoYTI1
NiI6ICJjYzAxNTEzMGFhODUyMWU3ZjA4OGY4ODg5OGViYTk0OWNjZGNiZmIzOGRmMGJkMTI5YjQ0
YjcyNzNjM2E2ZjQxIiwgImJ5dGVzIjogOTUxOTA0IH0KICB9Cn0K
### FILE: sync-worker.js | 7752
Ly8gTGl2ZS1TeW5jIFdlYiBXb3JrZXIg4oCUIHBvbGx0IC9hcGkvcGxhbnVuZy9jaGFuZ2VzICsg
L2FwaS9sb2NrL3plbGxlbiB1bmQKLy8gc2NoaWNrdCBkaWUgRGVsdGFzIGFuIGRlbiBIYXVwdHRo
cmVhZC4gTGFldWZ0IGF1Y2ggaW4gSGludGVyZ3J1bmQtVGFicwovLyB1bmdlZHJvc3NlbHQgKGFu
YWxvZyBoZWFydGJlYXQtd29ya2VyLmpzKS4KLy8KLy8gQWRhcHRpdmVzIFBvbGxpbmc6IEJlaSBh
a3RpdmVyIE51dHp1bmcgKG1pbmQuIDEgQ2hhbmdlIG9kZXIgZnJlbWRlciBMb2NrKQovLyBhbGxl
IEJBU0lTX0lOVEVSVkFMTCBtcy4gQmVpIGxhZW5nZXJlciBJbmFrdGl2aXRhZXQgc2Nocml0dHdl
aXNlIGhvY2ggYXVmCi8vIE1BWF9JTlRFUlZBTEwsIGRhbWl0IElkbGUtVGFicyBkZW4gU2VydmVy
IG5pY2h0IG1pdCBrb25zdGFudGVuIFJlcXVlc3RzCi8vIGJlbGFzdGVuLiBCZWkgamVkZXIgQWt0
aXZpdGFldCBvZGVyIGVpbmVtIHJlc3VtZS1Lb21tYW5kbyB2b20gTWFpbnRocmVhZAovLyBzb2Zv
cnQgenVydWVjayBhdWYgQkFTSVNfSU5URVJWQUxMLgovLwovLyBQcm90b2tvbGw6Ci8vICAgTWFp
biDihpIgV29ya2VyOiAgeyBjbWQ6ICdzdGFydCd8J3BhdXNlJ3wncmVzdW1lJywgc2VpdD86ICc8
aXNvLXRzPicsIHNlaXRTZXE/OiA8aW50PiB9Ci8vICAgV29ya2VyIOKGkiBNYWluOiAgeyB0eXBl
OiAnc3luYycsIGNoYW5nZXM6IFsuLi5dLCBsb2NrczogWy4uLl0sIHNlcnZlclRzLCBzZXJ2ZXJT
ZXEgfQovLwovLyBDdXJzb3I6IHByaW1hZXIgZGllIG1vbm90b25lIFNlcXVlbnpudW1tZXIgKHNl
aXRfc2VxKSDigJQgcmFjZS1mcmVpLCB3ZWlsCi8vIGdlZmlsdGVydGUgQ2hhbmdlcyBVTkQgc2Vy
dmVyU2VxIGF1cyBkZW1zZWxiZW4gU2VydmVyLVJlYWQgc3RhbW1lbi4gRGVyCi8vIGFsdGUgV2Fs
bC1DbG9jay1DdXJzb3IgKHNlaXQpIHdpcmQgenVzYWV0emxpY2ggbWl0Z2VzY2hpY2t0LCBkYW1p
dCBlaW4gbm9jaAovLyBuaWNodCBha3R1YWxpc2llcnRlciBTZXJ2ZXIgKG9obmUgc2VydmVyU2Vx
KSB3ZWl0ZXIgZnVua3Rpb25pZXJ0LgoKdmFyIEJBU0lTX0lOVEVSVkFMTCA9IDMwMDA7CnZhciBN
QVhfSU5URVJWQUxMICAgPSAzMDAwMDsKdmFyIExFRVJfVElDS1NfQklTX0JBQ0tPRkYgPSAzOyAg
IC8vIG5hY2ggfjkgcyBvaG5lIEFrdGl2aXRhZXQgYW5mYW5nZW4genUgdmVyZG9wcGVsbgoKdmFy
IGludGVydmFsbCA9IEJBU0lTX0lOVEVSVkFMTDsKdmFyIGxlZXJUaWNrcyA9IDA7CnZhciBzaWNo
dGJhciA9IHRydWU7CnZhciBzZWl0ID0gJyc7ICAgICAgICAvLyBXYWxsLUNsb2NrLUN1cnNvciAo
RmFsbGJhY2sgZnVlciBhbHRlIFNlcnZlcikKdmFyIHNlaXRTZXEgPSAnJzsgICAgIC8vIHNlcS1D
dXJzb3IgKGxlZXIgPSBFcnN0LVN5bmMsIG51ciBDdXJzb3IgaG9sZW4pCnZhciB0aW1lciA9IG51
bGw7Ci8vIEF1ZGl0LVBoYXNlIEEuNCAoMjAyNi0wNS0yMSk6IHdlbm4gZWluIGFuZGVyZXIgU1Ug
ZGVtIEJlbnV0emVyIGRpZSBSb2xsZQovLyBlbnR6aWVodCwgYW50d29ydGVuIGRpZSBFbmRwb2lu
dHMgbWl0IDQwMy4gQmlzaGVyIHd1cmRlIGRhcyBzdGlsbHNjaHdlaWdlbmQKLy8gdmVyc2NobHVj
a3QuIFdpciB6YWVobGVuIGF1ZmVpbmFuZGVyZm9sZ2VuZGUgNDAzIHVuZCBpbmZvcm1pZXJlbiBk
ZW4gTWFpbi0KLy8gdGhyZWFkLCBkYW1pdCBkb3J0IGVpbiBUb2FzdCArIFJlbG9hZC1IaW53ZWlz
IGtvbW10Lgp2YXIgYXVmZWluYW5kZXI0MDMgPSAwOwp2YXIgUEVSTUlTU0lPTl9MT1NUX05BQ0gg
PSAzOwovLyBTcHJpbnQgNSDigJQgV2FydHVuZ3NzY2h1bGQgKDIwMjYtMDUtMjksIEZpbmRpbmcg
MTUpOiB3ZW5uIGRlciBTZXJ2ZXIKLy8gbmV1IHN0YXJ0ZXQsIHNjaGx1ZyBmZXRjaCgpIGJpc2xh
bmcgZWluZmFjaCBmZWhsIChUeXBlRXJyb3IgaW0gV29ya2VyKQovLyB1bmQgZGllIENhdGNoLUhh
bmRsZXIgaGFiZW4gbnVsbCB6dXJ1ZWNrZ2VnZWJlbiDigJQgYWJlciBkYXMgbm9ybWFsZQovLyBC
YWNrb2ZmIGJyYXVjaHRlIDMgTGVlci1UaWNrcyAofjkgcyksIHdhZWhyZW5kZGVzc2VuIHdlaXRl
ciBIVFRQLVN0b3JtLgovLyBCZWkgYXVmZWluYW5kZXJmb2xnZW5kZW4gRmVobGVybiBqZXR6dCBT
T0ZPUlQgYXVmIE1BWF9JTlRFUlZBTEwuCnZhciBhdWZlaW5hbmRlckZlaGxlciA9IDA7CnZhciBG
RUhMRVJfQklTX01BWCA9IDI7Ci8vIEF1ZGl0LVBoYXNlIEIuMiAoMjAyNi0wNS0yMSk6IEhpbndl
aXNlIGFlbmRlcm4gc2ljaCBzZWx0ZW4gKEtyYW5rbWVsZHVuZ3MtCi8vIFJhdGUgbmllZHJpZyks
IGRhaGVyIG5pY2h0IGplZGVuIDMtcy1UaWNrIHBvbGxlbi4gRGVmYXVsdDogamVkZW4gNC4gVGlj
awovLyAofjEyIHMpLiBXZW5uIGVpbiBIaW53ZWlzIGVyc2NoaWVuZW4gaXN0LCBmdWVyIDMwIHMg
d2llZGVyIGplZGVuIFRpY2suCnZhciBoaW53ZWlzVGlja1phZWhsZXIgPSAwOwp2YXIgSElOV0VJ
U19USUNLX1FVT1RFID0gNDsKdmFyIGhpbndlaXNWb2xsUXVvdGVCaXMgPSAwOyAgIC8vIG1zLVRp
bWVzdGFtcDogYmlzIGRhaGluIGplZGVuIFRpY2sgZmV0Y2hlbgoKZnVuY3Rpb24gcGxhblRpbWVy
TmV1KG5ldWVzSW50ZXJ2YWxsKSB7CiAgICBpZiAobmV1ZXNJbnRlcnZhbGwgPT09IGludGVydmFs
bCAmJiB0aW1lcikgcmV0dXJuOwogICAgaW50ZXJ2YWxsID0gbmV1ZXNJbnRlcnZhbGw7CiAgICBp
ZiAodGltZXIpIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgdGltZXIgPSBzZXRJbnRlcnZhbCh0
aWNrLCBpbnRlcnZhbGwpOwp9CgpmdW5jdGlvbiBzb2ZvcnRCYXNpc0ludGVydmFsbCgpIHsKICAg
IGxlZXJUaWNrcyA9IDA7CiAgICBwbGFuVGltZXJOZXUoQkFTSVNfSU5URVJWQUxMKTsKfQoKLy8g
RmV0Y2gtV3JhcHBlciwgZGVyIDQwMyBlcmtlbm5iYXIgbWFjaHQgKHN0YXR0IG51ciBzaWxlbnQg
LmNhdGNoKS4KLy8gU3ByaW50IDU6IHp1c2FldHpsaWNoIFNlcnZlci1Eb3duLzV4eCBhbHMgX2Zl
aGxlciBrZW5uemVpY2huZW4sIGRhbWl0Ci8vIGRlciBUaWNrLUxvb3Agd2Vpc3MsIG9iIGVyIHNv
Zm9ydCBhdWYgTUFYX0lOVEVSVkFMTCBkcm9zc2VsbiBtdXNzLgpmdW5jdGlvbiBmZXRjaEpzb24o
dXJsKSB7CiAgICByZXR1cm4gZmV0Y2godXJsKS50aGVuKGZ1bmN0aW9uKHIpIHsKICAgICAgICBp
ZiAoci5zdGF0dXMgPT09IDQwMykgcmV0dXJuIHsgXzQwMzogdHJ1ZSB9OwogICAgICAgIGlmIChy
LnN0YXR1cyA+PSA1MDApIHJldHVybiB7IF9mZWhsZXI6IHRydWUsIF9zdGF0dXM6IHIuc3RhdHVz
IH07CiAgICAgICAgcmV0dXJuIHIuanNvbigpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7IHJl
dHVybiB7IF9mZWhsZXI6IHRydWUsIF9zdGF0dXM6IDAgfTsgfSk7Cn0KCmZ1bmN0aW9uIHRpY2so
KSB7CiAgICBpZiAoIXNpY2h0YmFyKSByZXR1cm47CiAgICB2YXIgY2hhbmdlc1AgPSBmZXRjaEpz
b24oJy9hcGkvcGxhbnVuZy9jaGFuZ2VzP3NlaXRfc2VxPScgKyBlbmNvZGVVUklDb21wb25lbnQo
c2VpdFNlcSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmc2VpdD0nICsgZW5jb2Rl
VVJJQ29tcG9uZW50KHNlaXQgfHwgJycpKTsKICAgIHZhciBsb2Nrc1AgICA9IGZldGNoSnNvbign
L2FwaS9sb2NrL3plbGxlbicpOwogICAgLy8gSGlud2Vpc2UgbnVyIGJlaSBqZWRlbSBOLXRlbiBU
aWNrIGZldGNoZW4gKEF1ZGl0LVBoYXNlIEIuMikuIEJlaQogICAgLy8gQWt0aXZpdGFldCAoSGlu
d2VpcyBlcnNjaGllbikgd2lyZCB2b2xsUXVvdGUtRmVuc3RlciBnZXNldHp0LCBkYW1pdAogICAg
Ly8gRm9sZ2UtQWt0aW9uZW4gaW5zdGFudCBzaWNodGJhciB3ZXJkZW4uCiAgICBoaW53ZWlzVGlj
a1phZWhsZXIrKzsKICAgIHZhciBqZXR6dE1zID0gRGF0ZS5ub3coKTsKICAgIHZhciBoaW53ZWlz
ZUhvbGVuID0gKGhpbndlaXNUaWNrWmFlaGxlciA+PSBISU5XRUlTX1RJQ0tfUVVPVEUpIHx8IChq
ZXR6dE1zIDwgaGlud2Vpc1ZvbGxRdW90ZUJpcyk7CiAgICBpZiAoaGlud2Vpc2VIb2xlbikgaGlu
d2Vpc1RpY2taYWVobGVyID0gMDsKICAgIHZhciBoaW53ZWlzZVAgPSBoaW53ZWlzZUhvbGVuCiAg
ICAgICAgPyBmZXRjaEpzb24oJy9hcGkvaGlud2Vpc2UnKQogICAgICAgIDogUHJvbWlzZS5yZXNv
bHZlKG51bGwpOwogICAgUHJvbWlzZS5hbGwoW2NoYW5nZXNQLCBsb2Nrc1AsIGhpbndlaXNlUF0p
LnRoZW4oZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgdmFyIGNoID0gYXJyWzBdLCBsayA9IGFyclsx
XSwgaHcgPSBhcnJbMl07CiAgICAgICAgLy8gU2VydmVyLURvd24gLyA1eHgg4oCUIGJlaSBtZWhy
ZXJlbiBpbiBGb2xnZSBzb2ZvcnQgZHJvc3NlbG4sIHN0YXR0CiAgICAgICAgLy8gd2VpdGVyIGRl
biBTZXJ2ZXIgbWl0IFJlcXVlc3RzIHp1IGJvbWJhcmRpZXJlbiAoU3ByaW50IDUgRmluZGluZyAx
NSkuCiAgICAgICAgdmFyIGhhdEZlaGxlciA9IChjaCAmJiBjaC5fZmVobGVyKSB8fCAobGsgJiYg
bGsuX2ZlaGxlcik7CiAgICAgICAgaWYgKGhhdEZlaGxlcikgewogICAgICAgICAgICBhdWZlaW5h
bmRlckZlaGxlcisrOwogICAgICAgICAgICBpZiAoYXVmZWluYW5kZXJGZWhsZXIgPj0gRkVITEVS
X0JJU19NQVggJiYgaW50ZXJ2YWxsIDwgTUFYX0lOVEVSVkFMTCkgewogICAgICAgICAgICAgICAg
cGxhblRpbWVyTmV1KE1BWF9JTlRFUlZBTEwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CiAgICAgICAgYXVmZWluYW5kZXJGZWhsZXIgPSAwOwoKICAgICAgICAv
LyA0MDMtVHJhY2tpbmc6IG51ciB1ZWJlciBDaGFuZ2VzK0xvY2tzLCB3ZWlsIC9hcGkvaGlud2Vp
c2UgaW1tZXIKICAgICAgICAvLyAyMDAgbWl0IGxlZXJlbSBBcnJheSBsaWVmZXJ0IChTZXJ2ZXIt
c2VpdGlnZSBHYXRpbmctTG9naWspLgogICAgICAgIHZhciBoYXQ0MDMgPSAoY2ggJiYgY2guXzQw
MykgfHwgKGxrICYmIGxrLl80MDMpOwogICAgICAgIGlmIChoYXQ0MDMpIHsKICAgICAgICAgICAg
YXVmZWluYW5kZXI0MDMrKzsKICAgICAgICAgICAgaWYgKGF1ZmVpbmFuZGVyNDAzID49IFBFUk1J
U1NJT05fTE9TVF9OQUNIKSB7CiAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHsgdHlw
ZTogJ3Blcm1pc3Npb25fbG9zdCcgfSk7CiAgICAgICAgICAgICAgICBzaWNodGJhciA9IGZhbHNl
OyAgICAgLy8gd2VpdGVyZXMgUG9sbGluZyBzdG9wcGVuCiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBhdWZlaW5hbmRlcjQwMyA9IDA7CgogICAgICAg
IHZhciBtc2cgPSB7IHR5cGU6ICdzeW5jJyB9OwogICAgICAgIHZhciBoYXRBa3Rpdml0YWV0ID0g
ZmFsc2U7CiAgICAgICAgaWYgKGNoICYmIChjaC5zZXJ2ZXJUcyB8fCBjaC5zZXJ2ZXJTZXEgIT0g
bnVsbCkpIHsKICAgICAgICAgICAgLy8gc2VxLUN1cnNvciBiZXZvcnp1Z2VuIChyYWNlLWZyZWkp
LiBzZXJ2ZXJTZXEgZmVobHQgbnVyIGJlaSBlaW5lbQogICAgICAgICAgICAvLyBub2NoIG5pY2h0
IGFrdHVhbGlzaWVydGVuIFNlcnZlciAtPiBkYW5uIGdyZWlmdCBkZXIgdHMtQ3Vyc29yLgogICAg
ICAgICAgICBpZiAoY2guc2VydmVyU2VxICE9IG51bGwpIHsgc2VpdFNlcSA9IFN0cmluZyhjaC5z
ZXJ2ZXJTZXEpOyBtc2cuc2VydmVyU2VxID0gY2guc2VydmVyU2VxOyB9CiAgICAgICAgICAgIGlm
IChjaC5zZXJ2ZXJUcykgeyBzZWl0ID0gY2guc2VydmVyVHM7IG1zZy5zZXJ2ZXJUcyA9IGNoLnNl
cnZlclRzOyB9CiAgICAgICAgICAgIG1zZy5jaGFuZ2VzID0gY2guY2hhbmdlcyB8fCBbXTsKICAg
ICAgICAgICAgaWYgKG1zZy5jaGFuZ2VzLmxlbmd0aCA+IDApIGhhdEFrdGl2aXRhZXQgPSB0cnVl
OwogICAgICAgIH0KICAgICAgICBpZiAobGsgJiYgbGsubG9ja3MpIHsKICAgICAgICAgICAgbXNn
LmxvY2tzID0gbGsubG9ja3M7CiAgICAgICAgICAgIGlmIChsay5sb2Nrcy5sZW5ndGggPiAwKSBo
YXRBa3Rpdml0YWV0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGh3ICYmIGh3Lmhpbndl
aXNlKSB7CiAgICAgICAgICAgIG1zZy5oaW53ZWlzZSA9IGh3LmhpbndlaXNlOwogICAgICAgICAg
ICAvLyBBa3Rpdml0YWV0IGVya2FubnQgLT4gMzBzIGxhbmcgamVkZW4gVGljayB3ZWl0ZXJwb2xs
ZW4uCiAgICAgICAgICAgIGlmIChody5oaW53ZWlzZS5sZW5ndGggPiAwKSBoaW53ZWlzVm9sbFF1
b3RlQmlzID0gRGF0ZS5ub3coKSArIDMwMDAwOwogICAgICAgIH0KICAgICAgICBpZiAobXNnLmNo
YW5nZXMgfHwgbXNnLmxvY2tzIHx8IG1zZy5oaW53ZWlzZSkgc2VsZi5wb3N0TWVzc2FnZShtc2cp
OwoKICAgICAgICBpZiAoaGF0QWt0aXZpdGFldCkgewogICAgICAgICAgICBzb2ZvcnRCYXNpc0lu
dGVydmFsbCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxlZXJUaWNrcysrOwogICAg
ICAgICAgICBpZiAobGVlclRpY2tzID49IExFRVJfVElDS1NfQklTX0JBQ0tPRkYgJiYgaW50ZXJ2
YWxsIDwgTUFYX0lOVEVSVkFMTCkgewogICAgICAgICAgICAgICAgcGxhblRpbWVyTmV1KE1hdGgu
bWluKGludGVydmFsbCAqIDIsIE1BWF9JTlRFUlZBTEwpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0pOwp9CgpmdW5jdGlvbiBzdGFydGVuKCkgewogICAgc29mb3J0QmFzaXNJbnRlcnZh
bGwoKTsKICAgIHRpY2soKTsKICAgIC8vIExlYmVuc3plaWNoZW4gYW4gZGVuIE1haW50aHJlYWQg
4oCUIG1haW4gaG9lcnQgaW4gc3luYy5qcyBkYXJhdWYgdW5kCiAgICAvLyBzZXR6dCBaLnN5bmNX
b3JrZXJMZWJ0LiBXZW5uIGRlciBXb3JrZXIgTklDSFQgYW50d29ydGV0LCBzaWVodCBkZXIKICAg
IC8vIFVzZXIgZG9ydCBlaW5lbiBEaWFnbm9zZS1Ub2FzdC4KICAgIHNlbGYucG9zdE1lc3NhZ2Uo
eyB0eXBlOiAncHVscycsIHRzOiBEYXRlLm5vdygpIH0pOwp9CgpzZWxmLm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGUpIHsKICAgIHZhciBkID0gZS5kYXRhIHx8IHt9OwogICAgaWYgKGQuY21kID09PSAn
c3RhcnQnKSB7CiAgICAgICAgaWYgKGQuc2VpdCkgc2VpdCA9IGQuc2VpdDsKICAgICAgICBpZiAo
ZC5zZWl0U2VxICE9IG51bGwpIHNlaXRTZXEgPSBTdHJpbmcoZC5zZWl0U2VxKTsKICAgICAgICBz
aWNodGJhciA9IHRydWU7CiAgICAgICAgc3RhcnRlbigpOwogICAgfSBlbHNlIGlmIChkLmNtZCA9
PT0gJ3BhdXNlJykgewogICAgICAgIHNpY2h0YmFyID0gZmFsc2U7CiAgICB9IGVsc2UgaWYgKGQu
Y21kID09PSAncmVzdW1lJykgewogICAgICAgIGlmIChkLnNlaXQpIHNlaXQgPSBkLnNlaXQ7CiAg
ICAgICAgaWYgKGQuc2VpdFNlcSAhPSBudWxsKSBzZWl0U2VxID0gU3RyaW5nKGQuc2VpdFNlcSk7
CiAgICAgICAgc2ljaHRiYXIgPSB0cnVlOwogICAgICAgIHNvZm9ydEJhc2lzSW50ZXJ2YWxsKCk7
ICAgLy8gQWt0aXZpdGFldC1TaWduYWwgLT4genVydWVjayBhdWYgQmFzaXMtUG9sbGluZwogICAg
ICAgIHRpY2soKTsKICAgIH0gZWxzZSBpZiAoZC5jbWQgPT09ICdzdG9wJykgewogICAgICAgIGlm
ICh0aW1lcikgY2xlYXJJbnRlcnZhbCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAg
fQp9OwoKLy8gSW5pdGlhbC1QdWxzIGRpcmVrdCBiZWltIFdvcmtlci1Jbml0ICh2b3IgZGVyIGVy
c3RlbiAnc3RhcnQnLU5hY2hyaWNodCkuCi8vIERhbWl0IHNpZWh0IG1haW4gc2Nob24sIGRhc3Mg
ZGFzIE1vZHVsIHVlYmVyaGF1cHQgZ2VwYXJzdCB3dXJkZS4Kc2VsZi5wb3N0TWVzc2FnZSh7IHR5
cGU6ICdwdWxzJywgdHM6IERhdGUubm93KCksIHBoYXNlOiAnaW5pdCcgfSk7CnN0YXJ0ZW4oKTsK
File diff suppressed because it is too large Load Diff
-58
View File
@@ -1,58 +0,0 @@
@echo off
setlocal
set "BDIR=%~dp0"
echo.
echo === VI3 DGL-Planung: Code aktualisieren (Sync-Transfer) ===
echo.
powershell -NoProfile -ExecutionPolicy Bypass -Command "$m='### PS'+'CODE ###';$me=[IO.File]::ReadAllText('%~f0');$p=$me.IndexOf($m);$nl=$me.IndexOf([char]10,$p);Invoke-Expression $me.Substring($nl+1)"
echo.
pause
exit /b
### PSCODE ###
$ErrorActionPreference = 'Stop'
# Diese BAT liegt IM Kit-Ordner SyncJob\. Bundles werden von HIER gelesen,
# der Code wird in die PORTAL-WURZEL (eine Ebene hoeher) geschrieben. Die
# data\*.json (Live-Daten) sind NIE im Bundle und werden NIE angefasst.
$here = $env:BDIR
$root = Split-Path -Parent ($here.TrimEnd('\'))
if (-not (Test-Path -LiteralPath (Join-Path $root 'index.html'))) {
Write-Host ('FEHLER: ' + $root + ' ist nicht die Portal-Wurzel (keine index.html).') -ForegroundColor Red
Write-Host 'Den Ordner SyncJob in die Portal-Wurzel legen (neben index.html) und erneut starten.' -ForegroundColor Red
return
}
Write-Host ('Ziel (Portal-Wurzel): ' + $root)
$bundles = Get-ChildItem -LiteralPath $here -Filter 'sync-bundle-*.txt' | Sort-Object Name
if (-not $bundles) { Write-Host 'FEHLER: keine sync-bundle-*.txt neben der BAT gefunden.' -ForegroundColor Red; return }
Write-Host ('Bundles: ' + $bundles.Count)
$flush = {
param($d, $rel, $expLen, $b64)
if (-not $rel) { return $null }
$bytes = [Convert]::FromBase64String($b64)
$full = Join-Path $d ($rel -replace '/', '\')
$pd = Split-Path -Parent $full
if (-not (Test-Path -LiteralPath $pd)) { New-Item -ItemType Directory -Path $pd -Force | Out-Null }
[IO.File]::WriteAllBytes($full, $bytes)
return ($bytes.Length -eq $expLen)
}
$ok = 0; $bad = 0; $rel = $null; $expLen = 0; $sb = New-Object System.Text.StringBuilder
foreach ($b in $bundles) {
Write-Host ('-> ' + $b.Name)
foreach ($line in [IO.File]::ReadAllLines($b.FullName)) {
if ($line.StartsWith('### FILE: ')) {
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
$meta = $line.Substring(10); $k = $meta.LastIndexOf(' | ')
$rel = $meta.Substring(0, $k); $expLen = [int]$meta.Substring($k + 3); $sb = New-Object System.Text.StringBuilder
} elseif ($line.StartsWith('###')) { continue }
elseif ($line.Length -gt 0) { [void]$sb.Append($line) }
}
}
$r = & $flush $root $rel $expLen $sb.ToString()
if ($r -eq $true) { $ok++ } elseif ($r -eq $false) { $bad++ }
Write-Host ''
if ($bad -eq 0) {
Write-Host ('FERTIG: ' + $ok + ' Dateien aktualisiert.') -ForegroundColor Green
Write-Host 'Jetzt server.ps1 neu starten und zur Kontrolle sync-check.html oeffnen.' -ForegroundColor Green
} else {
Write-Host ('FERTIG mit Warnungen: ' + $ok + ' ok, ' + $bad + ' mit falscher Laenge.') -ForegroundColor Yellow
}
-104
View File
@@ -1,104 +0,0 @@
# StatusQuo_Updates/scripts/update.ps1
# Zentraler Updater - wird von update.bat per Invoke-Expression geladen.
# Erwartet im aufrufenden Scope:
# $proj - Projektname (z.B. 'VI3DGL', 'FLD-Schichtplanung', 'DRIVE', 'Portal_Union')
# $root - Installationspfad (Verzeichnis mit server.ps1, VERSION usw.)
# $stopBat - (optional) Dateiname des Stop-Skripts, z.B. 'DRIVE_Stop.bat'.
# Leerstring '' = kein Stop-Schritt. Nicht gesetzt = Fallback auf 'stop.bat'.
# $startBat - (optional) Dateiname des Start-Skripts, z.B. 'DRIVE_Start.bat'.
# Nicht gesetzt = Fallback auf 'dgl.bat'.
$ErrorActionPreference = 'Stop'
$DistBase = "https://gitea.rhino.nrw/Rhino/StatusQuo_Updates/raw/branch/main/$proj"
# Stop/Start-Namen VOR jeder Ueberschreibung aus dem aufrufenden Scope lesen
$_stopName = if ($null -ne $stopBat) { $stopBat } else { 'stop.bat' }
$_startName = if ($null -ne $startBat) { $startBat } else { 'dgl.bat' }
# Lokale Version lesen
$localVer = '0.0.0'
$verFile = Join-Path $root 'VERSION'
if (Test-Path -LiteralPath $verFile) { $localVer = (Get-Content $verFile -Raw).Trim() }
# Remote-Version abfragen
Write-Host "Prüfe Update für $proj ..."
try {
$remoteVer = (Invoke-WebRequest -Uri "$DistBase/VERSION" -UseBasicParsing -TimeoutSec 15).Content.Trim()
} catch {
Write-Host "FEHLER: Dist-Repo nicht erreichbar. Netzverbindung prüfen." -ForegroundColor Red
return
}
Write-Host "Lokal: v$localVer"
Write-Host "Remote: v$remoteVer"
if ($localVer -eq $remoteVer) {
Write-Host "Bereits auf aktuellem Stand. Kein Update nötig." -ForegroundColor Green
return
}
$yn = Read-Host "Update von v$localVer auf v$remoteVer installieren? [j/N]"
if ($yn -notin 'j','J','y','Y') { Write-Host "Abgebrochen."; return }
# Temp-Ordner
$tmp = Join-Path $root 'TempUpdate'
Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Path $tmp | Out-Null
# Bundles laden
Write-Host "Lade Manifest ..."
$manifest = (Invoke-WebRequest -Uri "$DistBase/MANIFEST.txt" -UseBasicParsing -TimeoutSec 30).Content
$bundles = ($manifest -split "`n" | Where-Object { $_ -match '^sync-bundle-' } |
ForEach-Object { ($_ -split ' ')[0] } | Sort-Object -Unique)
foreach ($b in $bundles) {
Write-Host " $b ..."
Invoke-WebRequest -Uri "$DistBase/$b" -OutFile (Join-Path $tmp $b) -UseBasicParsing -TimeoutSec 120
}
Write-Host " sync-entpacken.bat ..."
Invoke-WebRequest -Uri "$DistBase/sync-entpacken.bat" -OutFile (Join-Path $tmp 'sync-entpacken.bat') -UseBasicParsing -TimeoutSec 30
# Server stoppen
Write-Host "Stoppe Server ..."
if ($_stopName -ne '') {
$_stopPath = Join-Path $root $_stopName
if (Test-Path -LiteralPath $_stopPath) {
& cmd /c "`"$_stopPath`""
Start-Sleep -Seconds 2
} else {
Write-Host " (Stop-Skript '$_stopName' nicht gefunden — übersprungen)" -ForegroundColor DarkYellow
}
} else {
Write-Host " (Kein Stop-Skript konfiguriert — übersprungen)" -ForegroundColor DarkYellow
}
# Backup
$ts = Get-Date -Format 'yyyyMMdd-HHmmss'
$bkDir = Join-Path $root ".backup\$ts"
New-Item -ItemType Directory -Path $bkDir -Force | Out-Null
foreach ($ext in '*.ps1','*.html','*.js','*.css','*.bat') {
Get-ChildItem -LiteralPath $root -File -Filter $ext -ErrorAction SilentlyContinue |
Copy-Item -Destination $bkDir
}
Write-Host "Backup: $bkDir"
# Entpacken (sync-entpacken.bat aus TempUpdate → schreibt in Root eine Ebene hoeher)
Write-Host "Entpacke ..."
& cmd /c "`"$(Join-Path $tmp 'sync-entpacken.bat')`""
# VERSION lokal aktualisieren
[System.IO.File]::WriteAllText($verFile, ($remoteVer + "`r`n"), [System.Text.Encoding]::UTF8)
Write-Host "Version auf v$remoteVer aktualisiert." -ForegroundColor Green
# Aufräumen
Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue
# Server neu starten
$_startPath = Join-Path $root $_startName
if (Test-Path -LiteralPath $_startPath) {
Start-Process -FilePath 'cmd.exe' -ArgumentList "/c `"$_startPath`"" -WindowStyle Hidden
Write-Host "Server gestartet." -ForegroundColor Green
} else {
Write-Host "Start-Skript '$_startName' nicht gefunden — bitte Server manuell starten." -ForegroundColor Yellow
}
Write-Host ""
Write-Host "=== Update abgeschlossen ===" -ForegroundColor Green