Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
18bcc71
Optimize (#31429)
MartyIX Sep 9, 2025
7c1beb3
[Android] Sort gradient stops by offset (#31318)
kubaflo Sep 9, 2025
9545273
Fix for exception thrown when disconnecting page handlers in the Unlo…
KarthikRajaKalaimani Sep 10, 2025
9c00bfe
[Testing] Feature Matrix UITest Cases for RefreshView Control (#30614)
TamilarasanSF4853 Sep 11, 2025
dc39852
[Testing] Feature matrix UITest Cases for TwoPaneView Control (#30610)
HarishKumarSF4517 Sep 11, 2025
2bae892
[Testing] Feature matrix UITest Cases for WebView Control (#30517)
NafeelaNazhir Sep 11, 2025
f915311
[Testing] Feature matrix UITest Cases for SwipeView Control (#30968)
LogishaSelvarajSF4525 Sep 11, 2025
77d618c
[Testing] Feature matrix UITest Cases for Border Control (#29746)
HarishKumarSF4517 Sep 11, 2025
d404956
[Testing] Feature matrix UITest Cases for FlyoutPage (#31426)
NafeelaNazhir Sep 11, 2025
f3c0771
[Testing] Feature matrix UITest Cases for ContentPage (#31144)
HarishKumarSF4517 Sep 11, 2025
19c78cc
[Windows] Test inclusion for the PointerGestureRecognizer issue in Mu…
Ahamed-Ali Sep 11, 2025
278baea
[Windows] Fix RefreshView Command executes multiple times when IsRefr…
devanathan-vaithiyanathan Sep 11, 2025
e75c708
[Testing] Feature matrix UITest Cases for Shapes Control (#30389)
HarishKumarSF4517 Sep 11, 2025
3c97810
Fixed exception when setting FlyoutLayoutBehavior dynamically (#31491)
Dhivya-SF4094 Sep 11, 2025
c39b8c4
Fix Customised CollectionView inherited from does not ScrollTo and di…
SuthiYuvaraj Sep 11, 2025
bd2e55f
[Testing] Feature matrix UITest Cases for ContentView Control (#31499)
LogishaSelvarajSF4525 Sep 11, 2025
cdacfcf
[Testing] Feature matrix UITest Cases for AbsoluteLayout (#31517)
NafeelaNazhir Sep 11, 2025
cf2bd9a
[create-pull-request] automated change (#31576)
github-actions[bot] Sep 12, 2025
ead0f68
[Testing] Feature matrix UITest Cases for NavigationPage (#31468)
HarishKumarSF4517 Sep 12, 2025
5b6040c
[Testing] Feature matrix UITest Cases for Horizontal and Vertical Sta…
HarishKumarSF4517 Sep 12, 2025
446a059
[create-pull-request] automated change (#31599)
github-actions[bot] Sep 14, 2025
559ad68
Radio Button Null Selection Fix (#31175)
asi-evin Sep 17, 2025
073c3a6
Compilation issue resolved on inflight/current branch (#31675)
sheiksyedm Sep 18, 2025
ddafd27
[iOS] Fix Navigation Page BackButtonTitle Not Updating (#31583)
devanathan-vaithiyanathan Sep 18, 2025
d682bba
Revert "Revert "Replace UseStaticFiles() with MapStaticAssets() in Bl…
mattleibow Sep 18, 2025
5e9f56b
[Android] Shell BackButtonBehavior binding Command to valid ICommand …
kubaflo Sep 18, 2025
1926e1a
Misc nativeAOT Windows stability adjustments (#31274)
morning4coffe-dev Sep 18, 2025
3990526
[Android,Windows] Fix NavigatingFrom event order inconsistency with P…
Vignesh-SF3580 Sep 18, 2025
261b5db
[Windows] Revert cleanup of `AccessibilityExtensions` (#31608)
MartyIX Sep 18, 2025
2088140
[iOS] CurrentItem does not work when PeekAreaInsets is set - fix (#29…
kubaflo Sep 18, 2025
1c3b20b
Candidate Branch September 22nd - CurrentItemShouldWork test fix (#31…
kubaflo Sep 19, 2025
8504272
Added base images (#31696)
NafeelaNazhir Sep 19, 2025
eedcef3
Added images (#31712)
NafeelaNazhir Sep 22, 2025
bc88973
[iOS] Shell/navigation page title view - respect the margin property …
kubaflo Sep 23, 2025
793f2e8
crop the images (#31723)
NafeelaNazhir Sep 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>

<Grid.ColumnDefinitions>
Expand All @@ -28,15 +29,16 @@
<Label Grid.ColumnSpan="2" Text="The RadioButtons in this Grid have a GroupName and Selection bound to a ViewModel."></Label>

<Label Text="{Binding GroupName, StringFormat='The GroupName is {0}'}" Grid.Row="1" />
<Label Text="{Binding Selection, StringFormat='The Selection is {0}'}" Grid.Row="1" Grid.Column="1" />
<Label Text="{Binding Selection, StringFormat='The Selection is {0}', TargetNullValue='The Selection is (null)'}" Grid.Row="1" Grid.Column="1" />

<RadioButton Content="Option A" Value="A" Grid.Row="2"></RadioButton>
<RadioButton Content="Option B" Value="B" Grid.Row="2" Grid.Column="1"></RadioButton>
<RadioButton Content="Option C" Value="C" Grid.Row="3"></RadioButton>
<RadioButton Content="Option D" Value="D" Grid.Row="3" Grid.Column="1"></RadioButton>

<Button Margin="5" Grid.ColumnSpan="2" Grid.Row="4" Text="Set selection in view model to 'B'" Clicked="Button_Clicked"></Button>
</Grid>
<Button Margin="5" Grid.ColumnSpan="2" Grid.Row="4" Text="Set selection in view model to 'B'" Clicked="Set_Button_Clicked"></Button>
<Button Margin="5" Grid.ColumnSpan="2" Grid.Row="5" Text="Clear selection in view model to 'null'" Clicked="Clear_Button_Clicked"></Button>
</Grid>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@ public RadioButtonGroupBindingGallery()
BindingContext = _viewModel;
}

private void Button_Clicked(object sender, System.EventArgs e)
private void Set_Button_Clicked(object sender, System.EventArgs e)
{
_viewModel.Selection = "B";
}

private void Clear_Button_Clicked(object sender, System.EventArgs e)
{
_viewModel.Selection = null;
}
}

public class RadioButtonGroupBindingModel : INotifyPropertyChanged
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,4 +270,14 @@
</ItemGroup>
</Target>

<Target Name="_MauiSetWinUIDefaultsForPublishAot" BeforeTargets="PrepareForBuild" Condition="'$(PublishAot)' == 'true' and '$(_MauiTargetPlatformIsWindows)' == 'True'">
<PropertyGroup>
<DebugSymbols Condition="'$(DebugSymbols)' == ''">false</DebugSymbols>
<DebugType Condition="'$(DebugType)' == ''">None</DebugType>
<EmbedXbfInPri Condition="'$(EmbedXbfInPri)' == ''">false</EmbedXbfInPri>
<SelfContained Condition="'$(SelfContained)' == ''">true</SelfContained>
<WindowsPackageType Condition="'$(WindowsPackageType)' == ''">None</WindowsPackageType>
</PropertyGroup>
</Target>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -1423,6 +1423,8 @@ void HandleChildPropertyChanged(object sender, PropertyChangedEventArgs e)
else if (e.PropertyName == NavigationPage.TitleIconImageSourceProperty.PropertyName ||
e.PropertyName == NavigationPage.TitleViewProperty.PropertyName)
UpdateTitleArea(Child);
else if (e.PropertyName == NavigationPage.BackButtonTitleProperty.PropertyName)
UpdateBackButtonTitle(Child);
else if (e.PropertyName == NavigationPage.IconColorProperty.PropertyName)
UpdateIconColor();
}
Expand Down Expand Up @@ -1944,31 +1946,20 @@ public Container(View view, UINavigationBar bar) : base(bar.Bounds)
ClipsToBounds = true;
}

UIEdgeInsets CalculateUIEdgeInsets()
public override UIEdgeInsets AlignmentRectInsets
{
var type = UIBarButtonSystemItem.FixedSpace;
var spacer = new UIBarButtonItem(type, (_, _) => { });
spacer.Width = SystemMargin + (OperatingSystem.IsIOSVersionAtLeast(11) ? 8 : -16);

nfloat screenWidth = UIScreen.MainScreen.Bounds.Size.Width;

if (!OperatingSystem.IsIOSVersionAtLeast(11) && screenWidth < 375)
{
// 3.5 and 4 inch
spacer.Width += 8;
}
else if (screenWidth >= 414)
get
{
// 5.5 inch
spacer.Width -= 4;
if (_child?.VirtualView is IView view)
{
var margin = view.Margin;
return new UIEdgeInsets(-(nfloat)margin.Top, -(nfloat)margin.Left, -(nfloat)margin.Bottom, -(nfloat)margin.Right);
}
else
{
return base.AlignmentRectInsets;
}
}

return new UIEdgeInsets(0, spacer.Width, 0, spacer.Width);
}

public override UIEdgeInsets AlignmentRectInsets
{
get => CalculateUIEdgeInsets();
}

void OnTitleViewParentSet(object sender, EventArgs e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ protected virtual async void UpdateLeftBarButtonItem(Context context, AToolbar t
var backButtonHandler = Shell.GetBackButtonBehavior(page);
var text = backButtonHandler.GetPropertyIfSet(BackButtonBehavior.TextOverrideProperty, String.Empty);
var command = backButtonHandler.GetPropertyIfSet<ICommand>(BackButtonBehavior.CommandProperty, null);
var backButtonVisibleFromBehavior = backButtonHandler.GetPropertyIfSet(BackButtonBehavior.IsVisibleProperty, true);
bool isEnabled = _shell.Toolbar.BackButtonEnabled;
//Add the FlyoutIcon only if the FlyoutBehavior is Flyout
var image = _flyoutBehavior == FlyoutBehavior.Flyout ? GetFlyoutIcon(backButtonHandler, page) : null;
Expand Down Expand Up @@ -480,7 +481,7 @@ protected virtual async void UpdateLeftBarButtonItem(Context context, AToolbar t
{
_drawerToggle.DrawerIndicatorEnabled = false;

if (backButtonVisible)
if (backButtonVisibleFromBehavior && (backButtonVisible || !defaultDrawerArrowDrawable))
toolbar.NavigationIcon = icon;
}
else if (_flyoutBehavior == FlyoutBehavior.Flyout || !defaultDrawerArrowDrawable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ object FindBoundItem(ScrollToRequestEventArgs args)
{
if (CollectionViewSource.View[n] is ItemTemplateContext pair)
{
if (pair.Item == args.Item)
if (Equals(pair.Item, args.Item))
{
return CollectionViewSource.View[n];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ public static UICollectionViewLayout CreateCarouselLayout(
return;
}

var page = (offset.X + sectionMargin) / env.Container.ContentSize.Width;
var page = (offset.X + sectionMargin) / (env.Container.ContentSize.Width - sectionMargin * 2);

if (Math.Abs(page % 1) > (double.Epsilon * 100) || cv2Controller.ItemsSource.ItemCount <= 0)
{
Expand Down
4 changes: 3 additions & 1 deletion src/Controls/src/Core/NavigationPage/NavigationPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -869,11 +869,13 @@ protected override Task OnPushAsync(Page root, bool animated)
return Owner.SendHandlerUpdateAsync(animated,
() =>
{
// Move the SendNavigating here so that it's fired prior to the stack being modified
// This ensures consistent event ordering across all platforms (iOS, Catalyst, Android, Windows)
Owner.SendNavigating(previousPage);
Owner.PushPage(root);
},
() =>
{
Owner.SendNavigating(previousPage);
Owner.FireDisappearing(previousPage);
Owner.FireAppearing(root);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ public static void SetAutomationPropertiesAutomationId(this FrameworkElement Con
_defaultAutomationPropertiesName = currentValue = (string)Control.GetValue(NativeAutomationProperties.NameProperty);
}

var elemValue = (string)Element.GetValue(SemanticProperties.DescriptionProperty);
#pragma warning disable CS0618 // Type or member is obsolete
var elemValue = (string)Element.GetValue(AutomationProperties.NameProperty);
#pragma warning restore CS0618 // Type or member is obsolete

string newValue = !string.IsNullOrWhiteSpace(elemValue) ? elemValue : _defaultAutomationPropertiesName;

if (currentValue is null || currentValue != newValue)
Expand Down Expand Up @@ -85,7 +88,10 @@ public static void SetAutomationPropertiesAutomationId(this FrameworkElement Con
_defaultAutomationPropertiesHelpText = currentValue = (string)Control.GetValue(NativeAutomationProperties.HelpTextProperty);
}

var elemValue = (string)Element.GetValue(SemanticProperties.HintProperty);
#pragma warning disable CS0618 // Type or member is obsolete
var elemValue = (string)Element.GetValue(AutomationProperties.HelpTextProperty);
#pragma warning restore CS0618 // Type or member is obsolete

string newValue = !string.IsNullOrWhiteSpace(elemValue) ? elemValue : _defaultAutomationPropertiesHelpText;

if (currentValue is null || newValue != currentValue)
Expand Down Expand Up @@ -117,8 +123,9 @@ public static void SetAutomationPropertiesAutomationId(this FrameworkElement Con
{
_defaultAutomationPropertiesLabeledBy = currentValue = (UIElement)Control.GetValue(NativeAutomationProperties.LabeledByProperty);
}

var elemValue = (VisualElement)Element.GetValue(SemanticProperties.DescriptionProperty);
#pragma warning disable CS0618 // Type or member is obsolete
var elemValue = (VisualElement)Element.GetValue(AutomationProperties.LabeledByProperty);
#pragma warning restore CS0618 // Type or member is obsolete
FrameworkElement? nativeElement = null;

if (mauiContext != null)
Expand All @@ -130,7 +137,9 @@ public static void SetAutomationPropertiesAutomationId(this FrameworkElement Con

if (currentValue is null || newValue != currentValue)
{
Control.SetValue(SemanticProperties.DescriptionProperty, newValue);
#pragma warning disable CS0618 // Type or member is obsolete
Control.SetValue(AutomationProperties.LabeledByProperty, newValue);
#pragma warning restore CS0618 // Type or member is obsolete
}

return _defaultAutomationPropertiesLabeledBy;
Expand All @@ -152,8 +161,11 @@ public static void SetBackButtonTitle(this PageControl Control, Element? Element

static string ConcatenateNameAndHint(Element Element)
{
var name = (string)Element.GetValue(SemanticProperties.DescriptionProperty);
var hint = (string)Element.GetValue(SemanticProperties.HintProperty);
#pragma warning disable CS0618 // Type or member is obsolete
var name = (string)Element.GetValue(AutomationProperties.NameProperty);

var hint = (string)Element.GetValue(AutomationProperties.HelpTextProperty);
#pragma warning restore CS0618 // Type or member is obsolete

string separator = string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(hint) ? "" : ". ";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,16 @@ public static void UpdateText(this TextBlock platformControl, Label label)

default:
if (label.FormattedText != null)
{
platformControl.UpdateInlines(label);
}
else
{
if (platformControl.TextHighlighters.Count > 0)
if (!label.IsConnectingHandler() && platformControl.TextHighlighters.Count > 0)
{
platformControl.TextHighlighters.Clear();
}

platformControl.Text = text;
}
break;
Expand Down Expand Up @@ -69,15 +72,21 @@ public static void UpdateMaxLines(this TextBlock platformControl, Label label)
public static void UpdateDetectReadingOrderFromContent(this TextBlock platformControl, Label label)
{
if (label.IsSet(Specifics.DetectReadingOrderFromContentProperty))
{
platformControl.SetTextReadingOrder(label.OnThisPlatform().GetDetectReadingOrderFromContent());
}
}

internal static void SetLineBreakMode(this TextBlock textBlock, LineBreakMode lineBreakMode, int? maxLines = null)
{
if (maxLines.HasValue && maxLines >= 0)
{
textBlock.MaxLines = maxLines.Value;
}
else
{
textBlock.MaxLines = 0;
}

switch (lineBreakMode)
{
Expand Down
15 changes: 12 additions & 3 deletions src/Controls/src/Core/RadioButton/RadioButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ public partial class RadioButton : TemplatedView, IElementConfiguration<RadioBut
/// <summary>Bindable property for <see cref="Value"/>.</summary>
public static readonly BindableProperty ValueProperty =
BindableProperty.Create(nameof(Value), typeof(object), typeof(RadioButton), null,
propertyChanged: (b, o, n) => ((RadioButton)b).OnValuePropertyChanged());
propertyChanged: (b, o, n) => ((RadioButton)b).OnValuePropertyChanged(),
coerceValue: (b, o) => o ?? b);

/// <summary>Bindable property for <see cref="IsChecked"/>.</summary>
public static readonly BindableProperty IsCheckedProperty = BindableProperty.Create(
Expand Down Expand Up @@ -212,6 +213,9 @@ public RadioButton()
{
_platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<RadioButton>>(() =>
new PlatformConfigurationRegistry<RadioButton>(this));

//initialize Value to prevent null value
Value = this;
}

/// <inheritdoc/>
Expand Down Expand Up @@ -433,12 +437,17 @@ void HandleRadioButtonGroupSelectionChanged(RadioButton selected, RadioButtonGro

void HandleRadioButtonGroupValueChanged(Element layout, RadioButtonGroupValueChanged args)
{
if (IsChecked || string.IsNullOrEmpty(GroupName) || GroupName != args.GroupName || !object.Equals(Value, args.Value) || !MatchesScope(args))
if (string.IsNullOrEmpty(GroupName) || GroupName != args.GroupName || !MatchesScope(args))
{
return;
}

SetValue(IsCheckedProperty, true, specificity: SetterSpecificity.FromHandler);
var isValueMatching = object.Equals(Value, args.Value);

if (IsChecked != isValueMatching)
{
SetValue(IsCheckedProperty, isValueMatching, specificity: SetterSpecificity.FromHandler);
}
}

static View BuildDefaultTemplate()
Expand Down
11 changes: 7 additions & 4 deletions src/Controls/src/Core/RadioButton/RadioButtonGroupController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ void HandleRadioButtonValueChanged(RadioButton radioButton, RadioButtonValueChan

void ChildAdded(object sender, ElementEventArgs e)
{
if (string.IsNullOrEmpty(_groupName))
if (string.IsNullOrEmpty(_groupName) || _layout == null)
{
return;
}
Expand Down Expand Up @@ -135,15 +135,18 @@ void UpdateGroupNames(Element element, string name, string oldName = null)

void SetSelectedValue(object radioButtonValue)
{
if(object.Equals(_selectedValue, radioButtonValue))
{
return;
}

_selectedValue = radioButtonValue;

if (radioButtonValue != null)
{
#pragma warning disable CS0618 // TODO: Remove when we internalize/replace MessagingCenter
MessagingCenter.Send<Element, RadioButtonGroupValueChanged>(_layout, RadioButtonGroup.GroupValueChangedMessage,
new RadioButtonGroupValueChanged(_groupName, RadioButtonGroup.GetVisualRoot(_layout), radioButtonValue));
#pragma warning restore CS0618 // Type or member is obsolete
}

}

void SetGroupName(string groupName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ partial void HandlePlatformUnloadedLoaded()
// If SendUnloaded caused the unloaded tokens to wire up
_loadedUnloadedToken?.Dispose();
_loadedUnloadedToken = null;
_loadedUnloadedToken = this.OnLoaded(SendLoaded);
if (Handler is not null)
{
_loadedUnloadedToken = this.OnLoaded(SendLoaded);
}
}
}
else
Expand Down
2 changes: 2 additions & 0 deletions src/Controls/src/Xaml/Controls.Xaml.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
<PropertyGroup Condition="$(TargetFramework.Contains('-windows')) == true ">
<NoWarn>$(NoWarn);CA1416</NoWarn>
<DefineConstants>$(DefineConstants);WINDOWS</DefineConstants>
<!-- Disable PRI generation to avoid conflicts with Core project's PRI file -->
<AppxGeneratePriEnabled>false</AppxGeneratePriEnabled>
</PropertyGroup>

<PropertyGroup>
Expand Down
33 changes: 33 additions & 0 deletions src/Controls/tests/Core.UnitTests/RadioButtonTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -236,5 +236,38 @@ public void GroupSelectedValueUpdatesWhenSelectedButtonValueUpdates()

Assert.Equal("updated", layout.GetValue(RadioButtonGroup.SelectedValueProperty));
}

[Fact]
public void GroupNullSelectionClearsAnySelection()
{
var layout = new Grid();
layout.SetValue(RadioButtonGroup.GroupNameProperty, "foo");

var radioButton1 = new RadioButton() { Value = 1, IsChecked = true };
var radioButton2 = new RadioButton() { Value = 2 };
var radioButton3 = new RadioButton() { Value = 3 };

layout.Children.Add(radioButton1);
layout.Children.Add(radioButton2);
layout.Children.Add(radioButton3);

Assert.Equal(1, layout.GetValue(RadioButtonGroup.SelectedValueProperty));

layout.SetValue(RadioButtonGroup.SelectedValueProperty, null);

Assert.False(radioButton1.IsChecked);
}

[Fact]
public void ValuePropertyCoercedToItselfIfSetToNull()
{
var radioButton = new RadioButton();

Assert.Equal(radioButton, radioButton.Value);

radioButton.Value = null;

Assert.Equal(radioButton, radioButton.Value);
}
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading