Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion BlazorApp1/Components/App.razor
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!DOCTYPE html>
@inject ThemeService ThemeService
<!DOCTYPE html>
<html lang="en">

<head>
Expand All @@ -18,6 +19,19 @@
<Routes />
<ReconnectModal />
<script src="@Assets["_framework/blazor.web.js"]"></script>
<script>
window.getTheme = () => localStorage.getItem('app-theme') || 'light';
</script>
</body>

</html>

@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await ThemeService.InitializeAsync();
}
}
}
1 change: 1 addition & 0 deletions BlazorApp1/Components/Layout/NavMenu.razor
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">BlazorApp1</a>
<ThemeToggle />
</div>
</div>

Expand Down
48 changes: 48 additions & 0 deletions BlazorApp1/Components/ThemeToggle.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
@implements IDisposable
@inject Services.ThemeService ThemeService
@rendermode InteractiveServer

<button class="btn btn-link nav-link" @onclick="ToggleTheme" title="Toggle theme" aria-label="Toggle dark mode">
@if (ThemeService.IsDarkMode)
{
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
}
else
{
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
}
</button>

@code {
private async Task ToggleTheme()
{
await ThemeService.ToggleThemeAsync();
}

protected override void OnInitialized()
{
ThemeService.OnThemeChanged += OnThemeChanged;
}

private void OnThemeChanged()
{
StateHasChanged();
}

public void Dispose()
{
ThemeService.OnThemeChanged -= OnThemeChanged;
}
}
1 change: 1 addition & 0 deletions BlazorApp1/Components/_Imports.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
@using BlazorApp1
@using BlazorApp1.Components
@using BlazorApp1.Components.Layout
@using BlazorApp1.Services
2 changes: 2 additions & 0 deletions BlazorApp1/Program.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
using BlazorApp1.Components;
using BlazorApp1.Services;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddScoped<ThemeService>();

var app = builder.Build();

Expand Down
51 changes: 51 additions & 0 deletions BlazorApp1/Services/ThemeService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using Microsoft.JSInterop;

namespace BlazorApp1.Services;

public class ThemeService(IJSRuntime jsRuntime)
{
private const string ThemeKey = "app-theme";
private readonly IJSRuntime _jsRuntime = jsRuntime;
public bool IsDarkMode { get; private set; }

public event Action? OnThemeChanged;

public async Task InitializeAsync()
{
try
{
var theme = await _jsRuntime.InvokeAsync<string>("localStorage.getItem", ThemeKey);
IsDarkMode = theme == "dark";
}
catch
{
IsDarkMode = false;
}
await ApplyThemeAsync();
}

public async Task ToggleThemeAsync()
{
IsDarkMode = !IsDarkMode;
await SaveThemeAsync();
OnThemeChanged?.Invoke();
}

public async Task SetThemeAsync(bool isDark)
{
IsDarkMode = isDark;
await SaveThemeAsync();
OnThemeChanged?.Invoke();
}

private async Task SaveThemeAsync()
{
await _jsRuntime.InvokeVoidAsync("localStorage.setItem", ThemeKey, IsDarkMode ? "dark" : "light");
await ApplyThemeAsync();
}

private async Task ApplyThemeAsync()
{
await _jsRuntime.InvokeVoidAsync("document.documentElement.setAttribute", "data-bs-theme", IsDarkMode ? "dark" : "light");
}
}
Binary file modified BlazorApp1/bin/Debug/net10.0/BlazorApp1.dll
Binary file not shown.
Binary file modified BlazorApp1/bin/Debug/net10.0/BlazorApp1.pdb
Binary file not shown.
2 changes: 1 addition & 1 deletion BlazorApp1/obj/Debug/net10.0/BlazorApp1.AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
[assembly: System.Reflection.AssemblyCompanyAttribute("BlazorApp1")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+de0eb16ab35078617c5ceeeee351122881c623a9")]
[assembly: System.Reflection.AssemblyProductAttribute("BlazorApp1")]
[assembly: System.Reflection.AssemblyTitleAttribute("BlazorApp1")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
94d84b1d275062b82ea7027f0d7c6ef657c4beae4c6c0d4dbf8c85cef904d98c
93219edcc2ed5efcf62c13b4e26c32572dd063cd5dc7973f444f639c18e12460
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ build_metadata.AdditionalFiles.CssScope =
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9Sb3V0ZXMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =

[/home/pedro/Git/BlazorApp1/BlazorApp1/Components/ThemeToggle.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9UaGVtZVRvZ2dsZS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =

[/home/pedro/Git/BlazorApp1/BlazorApp1/Components/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9fSW1wb3J0cy5yYXpvcg==
build_metadata.AdditionalFiles.CssScope =
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6a5aa1f15137ea1f909f85ec2c8e9b47ebc150f50155ec6908a56e5d384a8559
9742d74fa86e7b1f89ca38099b41ea258a46bd4799be982cde87afb04d8c1be6
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,4 @@
/home/pedro/Git/BlazorApp1/BlazorApp1/obj/Debug/net10.0/BlazorApp1.pdb
/home/pedro/Git/BlazorApp1/BlazorApp1/obj/Debug/net10.0/BlazorApp1.genruntimeconfig.cache
/home/pedro/Git/BlazorApp1/BlazorApp1/obj/Debug/net10.0/ref/BlazorApp1.dll
/home/pedro/Git/BlazorApp1/BlazorApp1/obj/Debug/net10.0/BlazorApp1.sourcelink.json
Binary file modified BlazorApp1/obj/Debug/net10.0/BlazorApp1.dll
Binary file not shown.
Binary file modified BlazorApp1/obj/Debug/net10.0/BlazorApp1.pdb
Binary file not shown.
1 change: 1 addition & 0 deletions BlazorApp1/obj/Debug/net10.0/BlazorApp1.sourcelink.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"documents":{"/home/pedro/Git/BlazorApp1/*":"https://raw.githubusercontent.com/phsbrown/BlazorApp1/de0eb16ab35078617c5ceeeee351122881c623a9/*"}}
Binary file modified BlazorApp1/obj/Debug/net10.0/ref/BlazorApp1.dll
Binary file not shown.
Binary file modified BlazorApp1/obj/Debug/net10.0/refint/BlazorApp1.dll
Binary file not shown.
2 changes: 1 addition & 1 deletion BlazorApp1/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"GlobalPropertiesHash":"i/kb/pNcYV7QPEz+jhvaP7fjDCs8YZj/5VBLP9OLLS4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["IjPCFyEoFF6VEijDaAR4TQJIJfgQOzBIvGgz1vtu6ag=","44AIwYzdBSQlJWreZS/1Y1UcoNbub0wyFmn2MDEeu/I=","t3hqjr2LFPu3iLkwpDM7yv9D4a39WznWX1x8mCP4X1E=","IweBzLsFOkYCG/1ho\u002BGHXpdj3sUqoGh6Y1VYObtTcFA=","05ACrIaRNmmSbc\u002Bkab2t9\u002BZ7W2wnUedOUtfmoNsNIg8=","/i/W\u002Bb48n2q4iWCf/LIHNKhoUFFyjGPWdrgqoiLYGF8=","lMf8pvcHsNA2cB1keNdRiIOJJL6wY/az4nsZJpUhZZo=","wTOxlTOITKANFKiJ3JciRW0Tnv12TbIrXRY\u002BzJrXJOg=","6btFChjFWWBndtVaPA\u002BMVy2nqxChp3PquKT79BR9DXQ=","UDPgtMmUWOC1bZmC4tDOL8jj1Ag2PH\u002BdOEWmFpN4cF8=","g1Tkp19pSNBPlYX\u002BHarfEjD7Bvhb6WbsaGdrSCCjeYI=","sVuUEaUWUhXKi0nwqbBUi7kw5XhBmF46tnee/RImuQI=","IHbFCt9fxho0INHTHVPfg\u002BVw1Og0wwqN9V/xZvV\u002BVYM=","GAd9DbgIfB4y2fhh5PkzX0k8wAigV2dQIAFEkAIzxOg=","fQJ6hBQ6ZEKDipLPFPVslOUNbakmByefhTZJ9jgK\u002BlI=","\u002BeH3Fh0Yz50CRApJVLGIx4GzxMFHwgx4aoZ7sAahdnc=","zk7FOzAPFVE35KLq0JQJ429dPz26fjMz13fXan1s86I=","bXC/4ztPLgqIH7gHckz9XdxHHdX1AWAHw/laR2m9//M=","9hV/JIB0cZ94/zaw3ZfbD1\u002BuB/A/ZdOEj6ytTAMHbeY=","YbpTIpu6IQsTHc8XwVE\u002BMBHef7fz9O8xgKrRohKeGbs=","vpgXckITWjYz\u002BSciBJ68W\u002BuH\u002BSGBwD4qlejEPVNRKnQ=","FgaRZhKDI2qBpcOQhfOgWrrx4gx\u002B8ZyiJ316EK7U4hM=","7Lo3sryiQtpyBQNhNWDGAgJnkV673CkE5yz2WWPx1lE=","0pP1oYydaOJFIGTq7WMwsCBXUEMaR\u002BsH56oADbekzSI=","ZDzXX0btar42XGkkEZHICKPV32I4Gh8jhBd512TwpQs=","xUd36\u002BFQPg3JQ1TClaZGl5732WM0iwnbiqKhY3Ba/NQ=","CVprcywJMURVwaNly\u002B/3zRDEB6plCu6K0Lb7HEx5ieo=","nF1wA4sMCs1EEy0Z2X6Fg93UVFRanWfxpDWzIPDcR0w=","kPpp\u002BpplqQhAsWUZdMPX1y/5caMSFQHSrtxV5y095KA=","0nVnVmyGnmitGQBCPaKE7rizo2p\u002BHmSFFuy/EY8zoI4=","65BXB1MH\u002BqZc3WS3/pbATgRD2q2g7aDl54LeWN2vMQc=","St3qxkI7O6ENv9DwaRMj91CjRElTCGrXhV7OxxGWnNU=","No59K42jvgGF\u002BHoVgVRf2v932HMVENTbEHiUh6V6lhg=","obqcjl8SSzKuxEUmGXC9S7\u002BWy4cL6O742WU/2ihHCPc=","WITDcYUlVQVt2PF94Z5eEtrx1AwbJPHhi1vZ\u002BSjyZ/c=","sfG7KqUdiZeqx3vGvmGm4WZ\u002ByQG9gD\u002Bvv0IQMds38jM=","XX/XHYdS8PpJVBsQECbITarNmxpBjdXolU/34xBmUFM=","O8D3nPueDDe1PzHZai8QQt189P5szg\u002BnHZuBvUPMic4=","MbddhuP3qw4nTgBQpnStp7TFBw7w2ridtZaGXCuODI8=","biY1KZhYmKLLaVFq5/uWrv8AQFLPdQM3wfz6KVp3KgI=","hMl00\u002BGgJkFu3UnzllREQ2xd12RbEezbqSqrrrK3DFI=","X15z/imQV7S9uFoIxx9K966LaDejqLClXe6JLtU2vvI=","aOhrAPjKDV5ggGkqIXeSXEkVi4ywop1EFrtj4RWWk6Y=","ui52DTh8aSoH0Mq2vPK43\u002BLsgdLQHsh1icJBJSNE5as=","WIka\u002ByNGiOKewU1dl1jSSLq/eIqm3dxnkywMJdfp9gU=","L19J\u002Bi12Nw30f8klQpM22DVapw78S1mmRbKRILJvUQ4=","U8sMH9hb9VSsETq7/dEOZz5De64j9PhKGkqPswfXzOQ=","axBICR\u002BtvHgmhb\u002BG\u002BbacoBWsoHmkbNtbEROgVo3xXDc=","BU5NZpHFLWyTPipZGFRa2xK80jp9tzfxvy0/rlt4uzc=","Y/PGrn77JFu\u002BjEV/FlQhj6F8UA/xcvlwCTnvYMcSibM=","RqXhelMZShltWi\u002BVGJRxKS\u002BQHNIVvzBE8/tV0YfnqBg=","kBaC5doYAvUpZd2aL707f67/pRtTf\u002BcFNkoEx6fwql8=","EKm6cNl0QID8MHbiMQP5VKxmf0WMXFYn4OL7FplkSMk=","Ov/p8iNQO41nxmLGyM\u002BIvX4Dd22i7gjxtXBVaXH8xSs=","/YbSth3z9wOJMoZFNqGqs07YTp1RMwvNS6SET5NZ9Xg=","UvSd4otg\u002BADXRCuKyVgkjySBRClcI7k\u002B2s7q1PC2L70=","NhXzx4MTDE3wCAGT15tcYJlGyp\u002BKsBF\u002BgJty7znpUY0=","QakSNvd/1kXETorsBpgQxkP9gZhfyYsu6V8w2LlTC7M=","wmKw6J2bN1HpgA97rVCuU6Qd27sS9jFbTVY1IA5wNQ0=","QvMwQJjwNKO2U2gQ/Yn6hnJeUcFJKNVo0J\u002BcqQhOj54=","izwnT46S1e8hhebruSO0W4QAh2E39Iqfi7kFBYVhHDY=","Qi5V88eCgZNEhtkDICEQlag1R63mHfYpvQBIQeNRa/w=","KMH0Rn2quJVJEdxwZQGk5r0BG47tSJJVt2ColaKEJvA=","bJXQL3qLYfAMWCS2hdeZpquiO78N70gor0pfOvpGnyA=","TrYO1Yb9ewTvlfekPyU2qVU4WH84I0Id0IYqTppnJ60="],"CachedAssets":{},"CachedCopyCandidates":{}}
{"GlobalPropertiesHash":"i/kb/pNcYV7QPEz+jhvaP7fjDCs8YZj/5VBLP9OLLS4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["IjPCFyEoFF6VEijDaAR4TQJIJfgQOzBIvGgz1vtu6ag=","44AIwYzdBSQlJWreZS/1Y1UcoNbub0wyFmn2MDEeu/I=","t3hqjr2LFPu3iLkwpDM7yv9D4a39WznWX1x8mCP4X1E=","IweBzLsFOkYCG/1ho\u002BGHXpdj3sUqoGh6Y1VYObtTcFA=","05ACrIaRNmmSbc\u002Bkab2t9\u002BZ7W2wnUedOUtfmoNsNIg8=","/i/W\u002Bb48n2q4iWCf/LIHNKhoUFFyjGPWdrgqoiLYGF8=","lMf8pvcHsNA2cB1keNdRiIOJJL6wY/az4nsZJpUhZZo=","wTOxlTOITKANFKiJ3JciRW0Tnv12TbIrXRY\u002BzJrXJOg=","6btFChjFWWBndtVaPA\u002BMVy2nqxChp3PquKT79BR9DXQ=","UDPgtMmUWOC1bZmC4tDOL8jj1Ag2PH\u002BdOEWmFpN4cF8=","g1Tkp19pSNBPlYX\u002BHarfEjD7Bvhb6WbsaGdrSCCjeYI=","sVuUEaUWUhXKi0nwqbBUi7kw5XhBmF46tnee/RImuQI=","IHbFCt9fxho0INHTHVPfg\u002BVw1Og0wwqN9V/xZvV\u002BVYM=","GAd9DbgIfB4y2fhh5PkzX0k8wAigV2dQIAFEkAIzxOg=","fQJ6hBQ6ZEKDipLPFPVslOUNbakmByefhTZJ9jgK\u002BlI=","\u002BeH3Fh0Yz50CRApJVLGIx4GzxMFHwgx4aoZ7sAahdnc=","zk7FOzAPFVE35KLq0JQJ429dPz26fjMz13fXan1s86I=","bXC/4ztPLgqIH7gHckz9XdxHHdX1AWAHw/laR2m9//M=","9hV/JIB0cZ94/zaw3ZfbD1\u002BuB/A/ZdOEj6ytTAMHbeY=","YbpTIpu6IQsTHc8XwVE\u002BMBHef7fz9O8xgKrRohKeGbs=","vpgXckITWjYz\u002BSciBJ68W\u002BuH\u002BSGBwD4qlejEPVNRKnQ=","FgaRZhKDI2qBpcOQhfOgWrrx4gx\u002B8ZyiJ316EK7U4hM=","7Lo3sryiQtpyBQNhNWDGAgJnkV673CkE5yz2WWPx1lE=","0pP1oYydaOJFIGTq7WMwsCBXUEMaR\u002BsH56oADbekzSI=","ZDzXX0btar42XGkkEZHICKPV32I4Gh8jhBd512TwpQs=","xUd36\u002BFQPg3JQ1TClaZGl5732WM0iwnbiqKhY3Ba/NQ=","CVprcywJMURVwaNly\u002B/3zRDEB6plCu6K0Lb7HEx5ieo=","nF1wA4sMCs1EEy0Z2X6Fg93UVFRanWfxpDWzIPDcR0w=","kPpp\u002BpplqQhAsWUZdMPX1y/5caMSFQHSrtxV5y095KA=","0nVnVmyGnmitGQBCPaKE7rizo2p\u002BHmSFFuy/EY8zoI4=","65BXB1MH\u002BqZc3WS3/pbATgRD2q2g7aDl54LeWN2vMQc=","St3qxkI7O6ENv9DwaRMj91CjRElTCGrXhV7OxxGWnNU=","No59K42jvgGF\u002BHoVgVRf2v932HMVENTbEHiUh6V6lhg=","obqcjl8SSzKuxEUmGXC9S7\u002BWy4cL6O742WU/2ihHCPc=","WITDcYUlVQVt2PF94Z5eEtrx1AwbJPHhi1vZ\u002BSjyZ/c=","sfG7KqUdiZeqx3vGvmGm4WZ\u002ByQG9gD\u002Bvv0IQMds38jM=","XX/XHYdS8PpJVBsQECbITarNmxpBjdXolU/34xBmUFM=","O8D3nPueDDe1PzHZai8QQt189P5szg\u002BnHZuBvUPMic4=","MbddhuP3qw4nTgBQpnStp7TFBw7w2ridtZaGXCuODI8=","biY1KZhYmKLLaVFq5/uWrv8AQFLPdQM3wfz6KVp3KgI=","hMl00\u002BGgJkFu3UnzllREQ2xd12RbEezbqSqrrrK3DFI=","X15z/imQV7S9uFoIxx9K966LaDejqLClXe6JLtU2vvI=","aOhrAPjKDV5ggGkqIXeSXEkVi4ywop1EFrtj4RWWk6Y=","ui52DTh8aSoH0Mq2vPK43\u002BLsgdLQHsh1icJBJSNE5as=","WIka\u002ByNGiOKewU1dl1jSSLq/eIqm3dxnkywMJdfp9gU=","L19J\u002Bi12Nw30f8klQpM22DVapw78S1mmRbKRILJvUQ4=","U8sMH9hb9VSsETq7/dEOZz5De64j9PhKGkqPswfXzOQ=","axBICR\u002BtvHgmhb\u002BG\u002BbacoBWsoHmkbNtbEROgVo3xXDc=","m574Wu7X8K1XMKCxwMAI4FnRabxANl5JIAUlLPysFog=","Y/PGrn77JFu\u002BjEV/FlQhj6F8UA/xcvlwCTnvYMcSibM=","fh3OZC7ugglSrzzsthXHYtUIvZt/URMQ\u002BP14c1\u002BHms0=","kBaC5doYAvUpZd2aL707f67/pRtTf\u002BcFNkoEx6fwql8=","EKm6cNl0QID8MHbiMQP5VKxmf0WMXFYn4OL7FplkSMk=","Ov/p8iNQO41nxmLGyM\u002BIvX4Dd22i7gjxtXBVaXH8xSs=","/YbSth3z9wOJMoZFNqGqs07YTp1RMwvNS6SET5NZ9Xg=","UvSd4otg\u002BADXRCuKyVgkjySBRClcI7k\u002B2s7q1PC2L70=","NhXzx4MTDE3wCAGT15tcYJlGyp\u002BKsBF\u002BgJty7znpUY0=","QakSNvd/1kXETorsBpgQxkP9gZhfyYsu6V8w2LlTC7M=","wHOQS6m7p8Mxj16CSHpUCyHZy5uLK/tcSr8M9L87DqM=","9sV5kdztZJgV/rHqzRk3KDbXuJP4Hd9jXsT5PgbMFpo=","QvMwQJjwNKO2U2gQ/Yn6hnJeUcFJKNVo0J\u002BcqQhOj54=","izwnT46S1e8hhebruSO0W4QAh2E39Iqfi7kFBYVhHDY=","Qi5V88eCgZNEhtkDICEQlag1R63mHfYpvQBIQeNRa/w=","KMH0Rn2quJVJEdxwZQGk5r0BG47tSJJVt2ColaKEJvA=","bJXQL3qLYfAMWCS2hdeZpquiO78N70gor0pfOvpGnyA=","KYWSAW0Lus8JueiM2C5smGbOJxglRwI\u002BXV2Ujr1UWPc="],"CachedAssets":{},"CachedCopyCandidates":{}}
Loading