From f3bf87a004744e05bf17146c1c39e68348ebc1b7 Mon Sep 17 00:00:00 2001 From: Matthew Frederes Date: Tue, 10 Feb 2026 20:45:52 -0800 Subject: [PATCH] fix bounds and justification calculations to prevent clipping #20449 --- .../Media/TextFormatting/TextLayout.cs | 22 ++- .../Media/TextFormatting/TextLineImpl.cs | 49 ++++-- .../Presenters/TextPresenter.cs | 156 ++++++++++++++++-- src/Avalonia.Controls/TextBlock.cs | 69 +++++++- src/Skia/Avalonia.Skia/GlyphRunImpl.cs | 15 +- .../Media/TextFormatting/TextLayoutTests.cs | 4 +- .../TextFormatting/TextFormatterTests.cs | 3 +- ...estrictedHeight_VerticalAlign.expected.png | Bin 529 -> 517 bytes ...Overhang_Leading_And_Trailing.expected.png | Bin 12595 -> 12368 bytes ...t_WithOverHandLeadingTrailing.expected.png | Bin 19468 -> 19257 bytes ...hould_Keep_TrailingWhiteSpace.expected.png | Bin 3517 -> 3501 bytes ...e_Arrange_TextBlock_44_NoWrap.expected.png | Bin 1077 -> 2381 bytes ...ure_Arrange_TextBlock_44_Wrap.expected.png | Bin 2880 -> 3718 bytes ...ceholder_With_Blue_Foreground.expected.png | Bin 1645 -> 966 bytes ...older_With_Default_Foreground.expected.png | Bin 2059 -> 1144 bytes ...aceholder_With_Red_Foreground.expected.png | Bin 1587 -> 946 bytes 16 files changed, 285 insertions(+), 33 deletions(-) diff --git a/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs b/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs index 24e9019084..d567ca3f14 100644 --- a/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs +++ b/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs @@ -294,7 +294,27 @@ namespace Avalonia.Media.TextFormatting var endX = textLine.GetDistanceFromCharacterHit(nextCharacterHit); - return new Rect(startX, currentY, endX - startX, textLine.Height); + var width = endX - startX; + var adjustedX = startX; + + var lineContentLength = textLine.Length - textLine.NewLineLength; + + if (lineContentLength > 0) + { + if (textPosition == textLine.FirstTextSourceIndex && textLine.OverhangLeading < 0 && startX > 0) + { + adjustedX += textLine.OverhangLeading; + width -= textLine.OverhangLeading; + } + + var lastCharacterPosition = textLine.FirstTextSourceIndex + lineContentLength - 1; + if (textPosition >= lastCharacterPosition && textLine.OverhangTrailing < 0) + { + width -= textLine.OverhangTrailing; + } + } + + return new Rect(adjustedX, currentY, width, textLine.Height); } return new Rect(); diff --git a/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs b/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs index 12ae974c26..02f7252450 100644 --- a/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs +++ b/src/Avalonia.Base/Media/TextFormatting/TextLineImpl.cs @@ -1328,7 +1328,7 @@ namespace Avalonia.Media.TextFormatting } } - var inkBounds = new Rect(); + Rect? inkBounds = null; for (var index = 0; index < _textRuns.Length; index++) { @@ -1342,7 +1342,14 @@ namespace Avalonia.Media.TextFormatting var runBounds = glyphRun.InkBounds.Translate(new Vector(widthIncludingWhitespace, offsetY)); - inkBounds = inkBounds.Union(runBounds); + if (inkBounds == null) + { + inkBounds = runBounds; + } + else + { + inkBounds = inkBounds.Value.Union(runBounds); + } widthIncludingWhitespace += textRun.Size.Width; @@ -1354,7 +1361,16 @@ namespace Avalonia.Media.TextFormatting //Align the bounds at the common baseline var offsetY = -ascent - drawableTextRun.Baseline; - inkBounds = inkBounds.Union(new Rect(new Point(widthIncludingWhitespace, offsetY), drawableTextRun.Size)); + var drawableBounds = new Rect(new Point(widthIncludingWhitespace, offsetY), drawableTextRun.Size); + + if (inkBounds == null) + { + inkBounds = drawableBounds; + } + else + { + inkBounds = inkBounds.Value.Union(drawableBounds); + } widthIncludingWhitespace += drawableTextRun.Size.Width; @@ -1362,6 +1378,8 @@ namespace Avalonia.Media.TextFormatting } } } + + var finalInkBounds = inkBounds ?? new Rect(); var halfLineGap = lineGap * 0.5; var naturalHeight = descent - ascent + lineGap; @@ -1416,18 +1434,18 @@ namespace Avalonia.Media.TextFormatting } } - var extent = inkBounds.Height; + var extent = finalInkBounds.Height; //The height of overhanging pixels at the bottom - var overhangAfter = inkBounds.Bottom - height + halfLineGap; + var overhangAfter = finalInkBounds.Bottom - height + halfLineGap; //The width of overhanging pixels at the natural alignment point. Positive value means we are inside. - var overhangLeading = inkBounds.Left; + var overhangLeading = finalInkBounds.Left; //The width of overhanging pixels at the end of the natural bounds. Positive value means we are inside. - var overhangTrailing = widthIncludingWhitespace - inkBounds.Right; - var hasOverflowed = MathUtilities.GreaterThan(width, _paragraphWidth); + var overhangTrailing = widthIncludingWhitespace - finalInkBounds.Right; + var hasOverflowed = width > _paragraphWidth; - var start = GetParagraphOffsetX(width, widthIncludingWhitespace); + var start = GetParagraphOffsetX(width, widthIncludingWhitespace, overhangLeading, overhangTrailing); - _inkBounds = inkBounds.Translate(new Vector(start, 0)); + _inkBounds = finalInkBounds.Translate(new Vector(start, 0)); _bounds = new Rect(start, 0, widthIncludingWhitespace, height); @@ -1453,9 +1471,11 @@ namespace Avalonia.Media.TextFormatting /// /// The line width. /// The paragraph width including whitespace. + /// The leading overhang. + /// The trailing overhang. /// The paragraph offset. - private double GetParagraphOffsetX(double width, double widthIncludingTrailingWhitespace) + private double GetParagraphOffsetX(double width, double widthIncludingTrailingWhitespace, double overhangLeading, double overhangTrailing) { if (double.IsPositiveInfinity(_paragraphWidth)) { @@ -1492,6 +1512,7 @@ namespace Avalonia.Media.TextFormatting switch (textAlignment) { case TextAlignment.Center: + { var start = (_paragraphWidth - width) / 2; if (paragraphFlowDirection == FlowDirection.RightToLeft) @@ -1500,8 +1521,12 @@ namespace Avalonia.Media.TextFormatting } return Math.Max(0, start); + } case TextAlignment.Right: - return Math.Max(0, _paragraphWidth - widthIncludingTrailingWhitespace); + { + var overhangAdjustment = Math.Min(0, overhangTrailing); + return Math.Max(0, _paragraphWidth - widthIncludingTrailingWhitespace + overhangAdjustment); + } default: return 0; } diff --git a/src/Avalonia.Controls/Presenters/TextPresenter.cs b/src/Avalonia.Controls/Presenters/TextPresenter.cs index 05c74b39e5..7d1a21e020 100644 --- a/src/Avalonia.Controls/Presenters/TextPresenter.cs +++ b/src/Avalonia.Controls/Presenters/TextPresenter.cs @@ -370,6 +370,41 @@ namespace Avalonia.Controls.Presenters return textLayout; } + private double GetLineOffsetX(TextLine line, double controlWidth, TextAlignment textAlignment) + { + var lineInkStartOffset = line.OverhangLeading; + var lineTrailingOverhang = -Math.Min(0, line.OverhangTrailing); + var lineLeadingOverhang = -Math.Min(0, line.OverhangLeading); + var lineInkWidth = line.WidthIncludingTrailingWhitespace + lineLeadingOverhang + lineTrailingOverhang; + + switch (textAlignment) + { + case TextAlignment.Center: + return (controlWidth - lineInkWidth) / 2 - lineInkStartOffset - line.Start; + + case TextAlignment.Right: + return controlWidth - line.WidthIncludingTrailingWhitespace - lineTrailingOverhang - line.Start; + + default: // Left, Justify + return -lineInkStartOffset - line.Start; + } + } + + private TextAlignment GetResolvedTextAlignment() + { + var textAlignment = TextAlignment; + var flowDirection = FlowDirection; + + if (textAlignment == TextAlignment.Start) + return flowDirection == FlowDirection.LeftToRight ? TextAlignment.Left : TextAlignment.Right; + else if (textAlignment == TextAlignment.End) + return flowDirection == FlowDirection.RightToLeft ? TextAlignment.Left : TextAlignment.Right; + else if (textAlignment == TextAlignment.DetectFromContent) + return TextAlignment.Left; + + return textAlignment; + } + /// /// Renders the to a drawing context. /// @@ -383,8 +418,12 @@ namespace Avalonia.Controls.Presenters context.FillRectangle(background, new Rect(Bounds.Size)); } + if (TextLayout.TextLines.Count == 0) + { + return; + } + var top = 0d; - var left = 0.0; var textHeight = TextLayout.Height; @@ -402,7 +441,17 @@ namespace Avalonia.Controls.Presenters } } - TextLayout.Draw(context, new Point(left, top)); + var controlWidth = Bounds.Width; + var textAlignment = GetResolvedTextAlignment(); + + var currentY = top; + + foreach (var line in TextLayout.TextLines) + { + var offsetX = GetLineOffsetX(line, controlWidth, textAlignment); + line.Draw(context, new Point(offsetX, currentY)); + currentY += line.Height; + } } public sealed override void Render(DrawingContext context) @@ -417,10 +466,35 @@ namespace Avalonia.Controls.Presenters var length = Math.Max(selectionStart, selectionEnd) - start; var rects = TextLayout.HitTestTextRange(start, length); + + var controlWidth = Bounds.Width; + var textAlignment = GetResolvedTextAlignment(); foreach (var rect in rects) { - context.FillRectangle(selectionBrush, PixelRect.FromRect(rect, 1).ToRect(1)); + var currentY = 0d; + TextLine? targetLine = null; + + foreach (var line in TextLayout.TextLines) + { + if (currentY + line.Height > rect.Y) + { + targetLine = line; + break; + } + currentY += line.Height; + } + + if (targetLine != null) + { + var offsetX = GetLineOffsetX(targetLine, controlWidth, textAlignment); + var transformedRect = rect.WithX(rect.X + offsetX); + context.FillRectangle(selectionBrush, PixelRect.FromRect(transformedRect, 1).ToRect(1)); + } + else + { + context.FillRectangle(selectionBrush, PixelRect.FromRect(rect, 1).ToRect(1)); + } } } @@ -472,11 +546,18 @@ namespace Avalonia.Controls.Presenters var lineIndex = TextLayout.GetLineIndexFromCharacterIndex(caretIndex, _lastCharacterHit.TrailingLength > 0); var textLine = TextLayout.TextLines[lineIndex]; - var x = Math.Floor(_caretBounds.X) + 0.5; + var caretX = Math.Max(0, _caretBounds.X); + + var x = Math.Floor(caretX) + 0.5; var y = Math.Floor(_caretBounds.Y) + 0.5; var b = Math.Ceiling(_caretBounds.Bottom) - 0.5; - if (_caretBounds.X > 0 && _caretBounds.X >= textLine.WidthIncludingTrailingWhitespace) + var controlWidth = Bounds.Width; + var textAlignment = GetResolvedTextAlignment(); + var offsetX = GetLineOffsetX(textLine, controlWidth, textAlignment); + var lineEndX = textLine.WidthIncludingTrailingWhitespace + offsetX + textLine.Start; + + if (caretX > 0 && caretX >= lineEndX) { x -= 1; } @@ -646,8 +727,17 @@ namespace Avalonia.Controls.Presenters InvalidateArrange(); - // The textWidth used here is matching that TextBlock uses to measure the text. - var textWidth = TextLayout.OverhangLeading + TextLayout.WidthIncludingTrailingWhitespace + TextLayout.OverhangTrailing; + var maxLeadingOverhang = 0.0; + var maxTrailingOverhang = 0.0; + + foreach (var line in TextLayout.TextLines) + { + maxLeadingOverhang = Math.Max(maxLeadingOverhang, -Math.Min(0, line.OverhangLeading)); + maxTrailingOverhang = Math.Max(maxTrailingOverhang, -Math.Min(0, line.OverhangTrailing)); + } + + var textWidth = TextLayout.WidthIncludingTrailingWhitespace + maxLeadingOverhang + maxTrailingOverhang; + return new Size(textWidth, TextLayout.Height); } @@ -655,8 +745,16 @@ namespace Avalonia.Controls.Presenters { var finalWidth = finalSize.Width; - var textWidth = TextLayout.OverhangLeading + TextLayout.WidthIncludingTrailingWhitespace + TextLayout.OverhangTrailing; - textWidth = Math.Ceiling(textWidth); + var maxLeadingOverhang = 0.0; + var maxTrailingOverhang = 0.0; + + foreach (var line in TextLayout.TextLines) + { + maxLeadingOverhang = Math.Max(maxLeadingOverhang, -Math.Min(0, line.OverhangLeading)); + maxTrailingOverhang = Math.Max(maxTrailingOverhang, -Math.Min(0, line.OverhangTrailing)); + } + + var textWidth = Math.Ceiling(TextLayout.WidthIncludingTrailingWhitespace + maxLeadingOverhang + maxTrailingOverhang); if (finalSize.Width < textWidth) { @@ -715,7 +813,9 @@ namespace Avalonia.Controls.Presenters public void MoveCaretToPoint(Point point) { - var hit = TextLayout.HitTestPoint(point); + var transformedPoint = TransformPointToTextLayout(point); + + var hit = TextLayout.HitTestPoint(transformedPoint); UpdateCaret(hit.CharacterHit); @@ -723,6 +823,36 @@ namespace Avalonia.Controls.Presenters CaretChanged(); } + + private Point TransformPointToTextLayout(Point point) + { + if (TextLayout.TextLines.Count == 0) + { + return point; + } + + var controlWidth = Bounds.Width; + var textAlignment = GetResolvedTextAlignment(); + + var currentY = 0d; + TextLine? targetLine = null; + + foreach (var line in TextLayout.TextLines) + { + if (currentY + line.Height > point.Y) + { + targetLine = line; + break; + } + currentY += line.Height; + } + + targetLine ??= TextLayout.TextLines[TextLayout.TextLines.Count - 1]; + + var offsetX = GetLineOffsetX(targetLine, controlWidth, textAlignment); + + return new Point(point.X - offsetX, point.Y); + } public void MoveCaretVertical(LogicalDirection direction = LogicalDirection.Forward) { @@ -917,7 +1047,11 @@ namespace Avalonia.Controls.Presenters distanceY += currentLine.Height; } - var caretBounds = new Rect(distanceX, distanceY, 0, textLine.Height); + var controlWidth = Bounds.Width; + var textAlignment = GetResolvedTextAlignment(); + var offsetX = GetLineOffsetX(textLine, controlWidth, textAlignment); + + var caretBounds = new Rect(distanceX + offsetX, distanceY, 0, textLine.Height); if (caretBounds != _caretBounds) { diff --git a/src/Avalonia.Controls/TextBlock.cs b/src/Avalonia.Controls/TextBlock.cs index c70d06ae7f..faa7243535 100644 --- a/src/Avalonia.Controls/TextBlock.cs +++ b/src/Avalonia.Controls/TextBlock.cs @@ -628,9 +628,62 @@ namespace Avalonia.Controls RenderTextLayout(context, new Point(padding.Left, top)); } + private double GetLineOffsetX(TextLine line, double controlWidth, TextAlignment textAlignment) + { + var lineInkStartOffset = line.OverhangLeading; + var lineTrailingOverhang = -Math.Min(0, line.OverhangTrailing); + var lineLeadingOverhang = -Math.Min(0, line.OverhangLeading); + var lineInkWidth = line.WidthIncludingTrailingWhitespace + lineLeadingOverhang + lineTrailingOverhang; + + switch (textAlignment) + { + case TextAlignment.Center: + return (controlWidth - lineInkWidth) / 2 - lineInkStartOffset - line.Start; + + case TextAlignment.Right: + return controlWidth - line.WidthIncludingTrailingWhitespace - lineTrailingOverhang - line.Start; + + default: // Left, Justify + return -lineInkStartOffset - line.Start; + } + } + + private TextAlignment GetResolvedTextAlignment() + { + var textAlignment = TextAlignment; + var flowDirection = FlowDirection; + + if (textAlignment == TextAlignment.Start) + return flowDirection == FlowDirection.LeftToRight ? TextAlignment.Left : TextAlignment.Right; + else if (textAlignment == TextAlignment.End) + return flowDirection == FlowDirection.RightToLeft ? TextAlignment.Left : TextAlignment.Right; + else if (textAlignment == TextAlignment.DetectFromContent) + return TextAlignment.Left; + + return textAlignment; + } + protected virtual void RenderTextLayout(DrawingContext context, Point origin) { - TextLayout.Draw(context, origin); + var textLayout = TextLayout; + + if (textLayout.TextLines.Count == 0) + { + return; + } + + var padding = Padding; + var controlWidth = Bounds.Width - padding.Left - padding.Right; + var textAlignment = GetResolvedTextAlignment(); + + var currentY = origin.Y; + + foreach (var line in textLayout.TextLines) + { + var offsetX = GetLineOffsetX(line, controlWidth, textAlignment); + line.Draw(context, new Point(origin.X + offsetX, currentY)); + currentY += line.Height; + } } private bool _clearTextInternal; @@ -748,8 +801,18 @@ namespace Avalonia.Controls //This implicitly recreated the TextLayout with a new constraint if we previously reset it. var textLayout = TextLayout; - // The textWidth used here is matching that TextPresenter uses to measure the text. - return new Size(textLayout.WidthIncludingTrailingWhitespace, textLayout.Height).Inflate(padding); + var maxLeadingOverhang = 0.0; + var maxTrailingOverhang = 0.0; + + foreach (var line in textLayout.TextLines) + { + maxLeadingOverhang = Math.Max(maxLeadingOverhang, -Math.Min(0, line.OverhangLeading)); + maxTrailingOverhang = Math.Max(maxTrailingOverhang, -Math.Min(0, line.OverhangTrailing)); + } + + var totalWidth = textLayout.WidthIncludingTrailingWhitespace + maxLeadingOverhang + maxTrailingOverhang; + + return new Size(totalWidth, textLayout.Height).Inflate(padding); } protected override Size ArrangeOverride(Size finalSize) diff --git a/src/Skia/Avalonia.Skia/GlyphRunImpl.cs b/src/Skia/Avalonia.Skia/GlyphRunImpl.cs index e7f772190d..fefa0d5872 100644 --- a/src/Skia/Avalonia.Skia/GlyphRunImpl.cs +++ b/src/Skia/Avalonia.Skia/GlyphRunImpl.cs @@ -67,7 +67,7 @@ namespace Avalonia.Skia using var font = CreateFont(defaultTextOptions); - var runBounds = new Rect(); + Rect? runBounds = null; var glyphBounds = ArrayPool.Shared.Rent(count); font.GetGlyphWidths(_glyphIndices, null, glyphBounds.AsSpan(0, count)); @@ -79,14 +79,23 @@ namespace Avalonia.Skia var gBounds = glyphBounds[i]; var advance = glyphInfos[i].GlyphAdvance; - runBounds = runBounds.Union(new Rect(currentX + gBounds.Left, gBounds.Top, gBounds.Width, gBounds.Height)); + var glyphRect = new Rect(currentX + gBounds.Left, gBounds.Top, gBounds.Width, gBounds.Height); + + if (runBounds == null) + { + runBounds = glyphRect; + } + else + { + runBounds = runBounds.Value.Union(glyphRect); + } currentX += advance; } ArrayPool.Shared.Return(glyphBounds); BaselineOrigin = baselineOrigin; - Bounds = runBounds.Translate(new Vector(baselineOrigin.X, baselineOrigin.Y)); + Bounds = (runBounds ?? new Rect()).Translate(new Vector(baselineOrigin.X, baselineOrigin.Y)); } public double FontRenderingEmSize { get; } diff --git a/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs b/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs index d5406c5593..b2e0936dad 100644 --- a/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs +++ b/tests/Avalonia.RenderTests/Media/TextFormatting/TextLayoutTests.cs @@ -178,7 +178,7 @@ namespace Avalonia.Skia.RenderTests [Theory] [InlineData("x", 0, 200, 200 - 7.20, 0, 7.20, FontSizeHeight)] - [InlineData(stringword, 0, 200, 171.20, 0, 7.20, FontSizeHeight)] + [InlineData(stringword, 0, 200, 170.20, 0, 8.20, FontSizeHeight)] [InlineData(stringword, 3, 200, 200 - 7.20, 0, 7.20, FontSizeHeight)] public void Should_HitTestPosition_RightAlign_Correctly( string input, int index, double widthConstraint, @@ -197,7 +197,7 @@ namespace Avalonia.Skia.RenderTests [Theory] [InlineData("x", 0, 200, 100 - 7.20 / 2, 0, 7.20, FontSizeHeight)] - [InlineData(stringword, 0, 200, 85.6, 0, 7.20, FontSizeHeight)] + [InlineData(stringword, 0, 200, 84.6, 0, 8.20, FontSizeHeight)] [InlineData(stringword, 3, 200, 100 + 7.20, 0, 7.20, FontSizeHeight)] public void Should_HitTestPosition_CenterAlign_Correctly( string input, int index, double widthConstraint, diff --git a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs index 182c633418..9f60d19c20 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/TextFormatting/TextFormatterTests.cs @@ -696,7 +696,8 @@ namespace Avalonia.Skia.UnitTests.Media.TextFormatting expectedOffset = 50 - textLine.Width / 2; break; case TextAlignment.Right: - expectedOffset = 100 - textLine.WidthIncludingTrailingWhitespace; + var overhangAdjustment = Math.Min(0, textLine.OverhangTrailing); + expectedOffset = 100 - textLine.WidthIncludingTrailingWhitespace + overhangAdjustment; break; } diff --git a/tests/TestFiles/Skia/Controls/TextBlock/RestrictedHeight_VerticalAlign.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/RestrictedHeight_VerticalAlign.expected.png index 30e2ca86621188f40d0080454681b72b4fcf83c7..6115fd566f82027a269eef8b42d9538a4b90623f 100644 GIT binary patch delta 475 zcmbQp(#kTyq<)X5i(^Q|oVRzZgAN-AFkEO|xS(ZHUvdGr1>f<7i=T?csHS>Z1*;gd zv^C_cSJtk|SM#-7U9q_W#}4VO`uX|N#>r<-htGU;^lh2Fciry0{gQ^3Vf;_D;|o_87aK4iKX*bk z`K!aePnL5$r;FId2K~_fAS9T-^}dU<(Wk3559c3VR4pth&wb2ZCEoh%`~#a_$hq$; ztDp7%Si7c}=ASe3LjPO$)l7|Ca`mRmk*{3Ib1#`G<<;N$etqT9>q`osuJ-wC`!DLQ z$(8r(4zB#X^!RdbuK9YR+pT8WMy&n!J$1i#ZB*o%|0lxtdD;ifULE%T_NztF`#xos zzL<2V{c&63jaYfJm*4(g+7!9)h*$4d3zt3em1lqd`xqj%@mWstOs?s2K{uy7J+$$> yp7AwL%f_qo&m4+&74%;Sx98t~A&k&wi0Jj7`*Jf^fB51HAW2VGKbLh*2~7a{JKL-P delta 487 zcmZo=naDE1r2d4bi(^Q|oVRxjgC08wFdTUJis{hq2|ej|^dDG$mq}gn=TLm1N5xD% z1Ch2v8R2r3sk!A-g(BrVgExO$lVZulfDRf~mj!RTX`%LJRYClQJ@c1J_bp9+!fig$ zAWz|9|21|7U6J}nhgqj=Vbj#zd??+wzOVb&X9bVB%4QmW&U9{yxZV3zLa<)>(fQk5 zoqw;!+Gy@uRs8SCx4$aYJzM)bc5D3A+kdY3OpmF3eCjH-?fQihn(?~dO&cdAe|6Yb z6uQ-F|D#%#Ydt5Hg84h=cup6wiw*jrZRm2O_;vFRCFeQQ*ZYe66H~kUyW_|9gg?pk zpSDhvj!?T>`XpO<{*Qp{jfdow)~BECx!SDwB>Pm-+H-bFdEpYTC&ei}`o6sM{@u75 zuUqSDd~dt-?+-ivSO2o!OnqCB4J9jAT|N2cVAR+B&NBOgIH?0g=v?BL?| zH4dc=XAwc62+yX%x4Z%IQOVEZ08r+>gaCZv? zcX*4v_qp$!``*3h-1ENg@ds9|TD59b%{gn#F$W=PD)M+ZlsG6TD0qqrG8!l-s2nIL zAQ%<~&@#a^{S5eZ&q+#A6ASq9#4>r0g7OGOQRca(Tk5Y_Zcoa|o7??|jh!D#a&XGn zin(5bi+i*Twa$tjkZN;kb-xrSR?>T2h@)ko9j`@Sq#0kNrllRIwOZ7trL5WctNJ|T z1+z4$Pcn$n-0j)r!ajM|6Cc;b>$6lob9~lu7d;sn+~2pf7br3^*&6VW_dFyp2BWY& zpkXCiS-eT&XE7VJu!V@wm<1`*MvlWl$P)xomI=#h`q!FbJWPy-O)|uEH0Bz`NJVk! zE{58$a5!q1#jRG(5z;}Un~rUKC^xOFPp?9W@KS>%6x>%dk{NW&KA65s5+wCri^Huu zvW!J*%9cVvxvq~RMAm)ryckSzv|yDcURzgvtVosMgooNFBCn1nz{`!59aCsDc^{vX zCiJ-$;Pe_wM$?_6O)R59l%Qin{=q12mG=RHW-D2n#Y4BmI7A1?ZVv5#`B7OcBvbd!sRisvBl z{+4|rj1|dfmeXY7iNg_+2y{0?58_`Tff2EzC$#n9Xu?EhV;)y%z!gh&n#fOW+T+_^ zAix!s8<)NA0$5-(;Gt-Ln!<8^w1hSY0?b2cc-~u7&gc!atN+F^)E9>lJp~4`@Ko>z zDKF(W#Y_m}o~>}&#f+%BD((QUNm<~4Q7&`!W;Vrq6oz?w<*^4;QUgzils)J<0H(&2 zkT08%2ZbxXC_`h4fe}KtJ+Q`)KYyy^2ktau^)?10r4|v9 zaxu!le8@4pJBl-b$L?-E&-hk#-TQ+DST~F>-wnW?iaHKp<=m#2r<6m77vcf$i|VxDxXwZ@lxeHiHP*W4zfdk z#t_U4tcsMTrBloObPRneBZnpmuVftd8hOCltUoOfQ&GVlf1hc-f49>(97&v{hH2HC z#H`RlMHYq*wL6b&@Yq0$l2_^HbC=OH{L4de(G%X2OC!L4b-8oeKbw}3Cf_dW1>}tz z7z5b;r{4On`SgF)YXvbmAxz-)zz7SlhD_C1A`y*T7Dr#weJ?y5u|;f=lZr&ou$X(m zQXYHM@#<}GKYLqP*}7+3e%LNVeBrEGL;Gq)nK-`E#_=I-MWiEdKRFrMG( zaXU$C`s38T%}5l87MZjV>j>dYlqO1dS2Uk0vr(9!m-k^tDKxKo)Hps@4c_fnX+4zN z@oFI+w0*<(MsEBvD!s8D5-tU2XBhdU$a232T66p=LhLs)N)ClT>4o$6JQpkav_pn* zO+&@7%GU<#DRYcpHr%rEx0Kd$nqtUJ(Z(+>pveJb;u44=b{${9@#64bZ`Y+(szeH+ zc#LZ4b*BQhopUs?aPLjahD#_J9fH#;ZufYC5gTYPrk=hz_+@*FN+W?PPi>W1$RP=M zr4pv!#u}s_pL5G(!g!vl4$MmjthQA+2Zi1F$b^ejsGwbSt_mb)%Jezl4LY_)$1A`` ziOOq^lE(#FE)=$LJRM{Cg5W2!(ML0<-l)x-L9lUzOukx3STEM+2*wcjW~rw6x;w3~ zCFbL*E&n+Nzq@qAA$HZl`#yQV*L3eYe~Kg@I?2x*Uh#B%o9v)zc0bMG=$i!V4W48W zu3B?8VIEJRYIcAcT|%2}e}>5#kp=YSV0@blF!#C!m1=oqnqNeZfk>(tB)(N^pk|Z@ z1O*Y?&Dbo6^y8^Nf=#?^JPxMwC`lYx4X$WSy`|}kAuv0`p`7IaBf6g=3KosqwDc|H z2nQ)MIMh#Dk15PsZRzYl4JDIyC(1Y8w?QCM*o#923K7hJ)y+efnlegf%_KuWf|p19 zHenoTa<#qIpYTatg=su^TA705J{_`yC5FPx&-^4ph@=qU&v|mr6L9mENF}jVPQ9X) z<*CHK-9V8$63%V*rGI0>TA>=R1ZPNsZN#$BlfZbVK|;^CUu4K&XQ{mX`!mvFp|CIC z8~m@i?n;l>9A7m{IJT~P(Z6-v{^6P?ta4vIK_AKY+$I`lFy&ys(RH3IkQp-&QVtZA z-oX@hb*~4^>oYy4d9x@&1Gq}vV?E&NEwA;HpWgg9CDX0%!XNi4g@1L4j z>&=*_8eBuP(*f%Wkxk((uf7+tp+>)cTPhjO)v2F{?*3!+lYI|(yFOR8-9Sh_kk; zPkW^RdmhO|_k9(u=hWUa1~`psa!}JmKwVj_Z|vMtG%_=k8B;;ZyM@ZLy06S1Gx}0r z=yPJE#C3CBZ!qeRz#N&;re4461q(`z(f&A1Y#k@7QAB{>K51D}wR2CD+PG+L!YS^M zv4z6BX<$wmL%yeTKSU?7r72|0MhHIjP+MC!nfV5`z9-YWwL_cY-{^NcWkCuOkE=j4 zDYGy@UBaf1V#rIBDBbVR)`c5LikHrN&{A2^^zSHAPdu9n77R|rM zzg?=SI?;WFpnvcfKduhkOx_W zCg@wmzrV`n1A~LCW-|1c(XnxewhqxRzLZnGciXfEQqCzgRRb zqQ>w%NNByRlgS5G6V$<;|C>FanLg*wk&|?hMpKLrd4ucxNdbsrnK2UxQeGn~`PkA~ z9odl_SyaBl1-NH{J9|F-Q2iy=s_mawOnUTjXDmn)m1R;W3?H_>d>L z^uqG~yYz8&z$d=;BZWGYd0@R2kjR>XUwNQ0@yK%}W!)W6|Z)K}&|HNiSGX`pGDEZx4e+jAt(P?T^mz@?dxo(m4!G^>@zoY_`emt(+11d?s#{9q?PsfL9*FJQ)ap9p zy~urfcJ9^Mvdf_?)=0@B*^u>{$U%ciqeS`wlgS(i-w+A4+JgKIx$e_eE_4<5LE1eF zjfhL~W56-3h&~i3r4Z}?=KnqQAcfNWsIvtJ?$5QpQ$gzXiztP|{OW5Mk_c7PusdG! zcSty1Np!^M?FxKZM*kB3FN2TyfE`O}#H0TfB~bMpB9Q9(0xZ7+m{%qm33>2o zwpO}h7-W;o+SEQzGItWEt7X#2xluNVS*mwSP*}J`>IOxC?!#FQ~gxa-itiJp*;_O8@2w%Kmoq5l0 zuflg{^mOXTZSUE1&I?NW4fVWMY%jJIB+GBKLDcHpNOW)HtYBt;-ff8zPr_#s;!iCx zRPXpJM3#I(C~sCK@vdf*)r}{Q&ij47?FK8Sh{`5w*28)#2n#Fb21}+ej?PAWzCi-R z0|%620F)zSGMT9u{-2-j!hXB-{Ik z$%aNYkqIb8e@nuX8Ok-wm(Cb}9kYmjSS!Y z2eC=Vs!$8VE7%h%r+~o}MIUer*;%<-s57_HUOFA~nNA)h+686G#?HHU@Q?~%v==nR zD2#Pov_6ms7g*q!s$Yx|{VHOYq(k+F1S2I$JlT^`I_>%?Z53lEfSP(BCF#`3qpJSoqKCa%&wr`J4<*mPzZ&~xtGe_9A`mYtb-hvi#_t|xHfbHD55M87#g#}UHvpW~bFN<)+22yho(}^6~eedSNbca5~ z?!!1WpktSzLI$o4WrfQJU0ej`6m{DdSw%rTaGU~1k*07a@$`mMumq`9>d;H58iPh4 zI19k0_3p$=lys)*c`uR%KvhRwTR=PCI(S7$?NtA8uQx3p z*~u>TVJ_>*u{}w(vMH!w?vkn6muhSIO|NwDy*{kCwGgNO76;>BO-?nUhxSW+7s(H= z*oa#8unW~;FB zOCd8apC0Z}1t*0R%Gv55?hRm>NMOZm0@%XmsssKHSn&AAev}fS6#)r<>nK) zkYFRvx7c?Jde;;ENp>ea9tN(?W91O9qPMAWZVJJoco$(^F$FCWq)HC+LnW%elr-R_ zMd-HP-kL|B^c1(8AO1a41Wb_a7&Qd(ucWOnj4rNyBI7%9DWpmNi`@4AlJ5Serm>#N z3X4kBbPm=%gLE94AObIoip`OHrRHaiBqAr4yze&9V$oTV+8U9R?%oSg^e(m3`?$Wh z_C5Hw*)nMBSp*08)Iplv`*z+KMV@N`xG1-)LN|#%YMG(OL&29Cp$>D;qDpuYP&2CB4O$-!;EI9^4(CIA6SJ882=O;n6fKjRW|E zH4<2XbZF{rA~ol`op&x+O_Xm4oa5das^|65H3>40vYh#_sx5~l-W-NSuUBnplxlxXlAtHfylzLYp=f-mlP)dv23f6qca;zHXCEi8*^Q3(j;%a2iXsTsLS zP^Ly}?md!rF*;^hgThM#B=q)rUr06fk=bxZ@lmU3-fBt#OXvG11BQ-vnco6Cs;~A_ z%FNM=kwbh11s&Dr;pR2PH?NQbkof)z-4VoyZ2FUW5_dy)-6uG_#f%vHY+JnWhI454?s*HeVyt~7rzr0)q zCtWjwY?u8nU3PUX=4!a5B3)+1(|gcaFJHRjfF|0a^a zbK%yl`59Uj1}X`27&-ee_0v`Y#I%jRqu@!E(}3{u3%vFfw~e+q5e|F4-|GtTqy3#p zmqf28oDF`PN*y~dHsEPK;a;!iIS+jsdkl@3{fxbR)vtV-aq~@eCUnRqy?R=momC6g z0j1N<4hQi)BV{;QJoU=i94Q z7XK%}mhxOpZ)vNFX~9DNU>T(v2gok3`oPmiA|GqaGN3*pN~EJX9qcy?;0)HmLO+fm z#2Kqhb+Z{s^;%LJ&lRrlJT*H_REgTgCC&IPA@Ll;y7^2Z8MV@+;IUDFG8M%oO^J`c;S$J z(88J}BQ!QcHZ={wFrA_b9!;TUxDWR}X{ccN8Sz9mwdkk*_uh}-PSKPB z;|SBG0Dpk{)ix5DK$PDeA(0k`Q*U7L3}M=Ijl*u*T25MesMZ=GqpP>2<{ZTP$!iuR z-NiWU=YZu4;9Rlwm0T3b_v%g=KmJnWuyHBWQZl&n&}rlHIk~=GxX@m9iH|_qVO7WG z4pTW}Ac(!f4^p+sM~-XZW^mC@;g45_hxYwNUQ)%6oL}5_G8>UN+P1@H@#NupXj<@6 z5HKqp!iIt7Pv+S#dWl~92<4u;iLdsGZem@lFGJe`g!ZUQB-ef1Y*-XCo0JOSPL@tq zm?v)GMEVBDXj&sX`uXk{ny&@u%GcvqNaMNnqFllywP0zqYBv;*k`k zW!@vd-!UXk_SdV!AyVG57h6^L8ntYPlkUbPob9EiZzi*&fDY^j#jHlK9mWkqOxei`H5`eE{sIe2MLgOaR{rA)9760M0aeryp*~=bS`3h5K+};DKkCv7*P5!IP^pr*HX7V)0Cb^F)mcJh-0%+acdrFdLzw&FPvlN216}TH)*1%yW;y@ z6xfepK+g5Jq>ZHr`GQyQ$7~127z5;)H4`RPuygL_)vgRM1`F~9(dHO+Qc44Ahgz)K zU$r)icNDROn+)tK{}deY<8N1t{1QHuU!I{A*ZPmbz<)wY|2D+>ZyzibqoQK&_=Q(t zG&3bY6*{c(jcV__mzNbul=ZiIzylFpN)iC&I_?Vk8&&iF&eB6&T4JmB?Atx>!T7xEPFX$j(?`^ z_hYJ3_ahQ_&`&OGl+SAhvRWmcAzPWp&H^8%{zeerMC#qR8}~1ja?X#R_vY*mg|O0_ zX<|RLuCZV7?r_n&aUJX^3LB*V`9r_0XrtJpgYO~lE)(-^Vn}BNjeBEr=X|{jfFNy7 zKQ=OzIIT4tRn`4U=eWFD9fk&)mi$ANBIBp5&B(gY?WCyI2jX$34d@axhwJ7@4sXS~ zN;EGykLc}UL9KMB9>R=Gdr8-&n{tl?+p(9Y4mSrAEXc5UQ-3CbF;F=P>@-7%uQomS z=xWu*iUg!vV|E8P#d4HAtYR$#+B1NHCi)M;2q0=_h?qvc9j$LlGLh^wn5!m)^*-}) z_xz&(CA<1*<{hUzZT%T}e>H5rV4JfPnj_|rMs}I%*p2NaXht0@J8uy2!)J9Ur;mNi zUD3Fwp}fj-lhZD?j*zWa!pA)fh<8eY4>(6sWXNdtl*LPH$%ht1=zt71K5BPk5e5%* z(VM1LTa3XyuGrcT#0)*1b7V3qaC^PZ9U0G7BGZl0Fm}xfVF;zofXlh?EJYch7OLX` z?9==-rFA7w1@qRc45mhhZqd#-DauG`j2lN&xz9W->4%A($^fXyMWeSDF-=PsLOMlW zv~6X}`=3e%C1zzgYL$8tYoi0<0>{@M>$zdSR*hcB^3^I26b@E;#{nI~MBb`lxPCl))n;*;60)86bAW8c!QE z%>EL~Y-L_}-x@*)A3l^qSK_OiYAmJuisQK9_Pkm}MC$5Z6}9QL-L5OJX@H+F(VQ{N z)qfh#l1;+}f2s9GK_R%j(*k(xsD26(<*(0!91vo#;DTDwaQHw2`JGgDHRSYIHbLHl z6N2pu(%`b0UstOYz|{LFb$I6v3M#fu0NiV@m^KxMg4{TNT$J6WWq&=JM5=5*1LbN- z2sVB$JXk96R>a5s3JBVwRtPV9=Ri$4I+6dJ=V09Bg5Oin>q8v9Jyl;n z{@YMN5jNsrTYR&b1^SEmEL zv2Slv6)T}Qg7c+yZVb1LO$Nrcnb<`ymuF`q`P6lE6ZkKhc`qFX-obm~!|K|TJepsgvOnB4 z*RR%HFsru-R~St`{*EmZBZT7T3wS95$w#8ugWkapcezW*mhHX&6F8Awd zuJzrD#<|+dn8um%)H>$5dp?6_J2&5R0RvUNO`)x;LF;vShAG7?-Qm?dPdM+v>m)Z^ zP=CDMN=Z<%uxtj?>(@GV=fJg-5S&f)JRZZt7&}|0$e1nfy$fzfjhhv^kC1-x8bP0< zKCGp zS6WEfG-&k7jzWEnt{(H`OwtLVs}^*$!2=JcM*jdUA3e4lF_%feQzFE06Ajz=(cVI@ zieR83u4}g85Oqc>LUT#pL656}@#X{MRT0M%oYXL{6Y?Lgo1e$r&uDDGj!Z8jVv1;u zlAxI4*M3sseAAuZq(mOdMvA{tvhguT>)CBCV7Kq3({P49im1MGEWJ1{2hAqOJ`i+K za%LIP?M96$_P!~WLYQK8*7ci&AC=}uv`dg;#BB!k#oCr>J@cu_W?IZy|NGKk)Us!?1iE<6`BK3--18IC}7uYETMRH%H8L)B+kM)q8y4_qbiM_)q>E!ww zNwRoHlBB)ydwMvte7>FXdxI58TSwCLo;H}D{E1082l(WZM$((Bs_xy*t7C}U5eY1E z7W8=5^!eRD|A`F2h>&pIdP%td&k5)bLvZ-6czr&Pbx01*|3GZ>Z}HRrsO3qD4G%v= zxpbkm9z1Yk0f>?eCa`0!g8B*y`_kp#&TVd_L5jp>oI*5%ayM_=kGoZh5B(>a0#6=SRinValy_8e4nUrOSqT zYkoK4p}-pwG!NQ=ozBY5dncYUS`J@-kigg<_hLY-O3?LLk-N`6o89YtqPA)c&3Q1P z6enI~QAy~gI&dFyHD!B|UcPLVVzuB^`C*jtHHAA{m40tD=FL4gzj2pjMp@Mt70z6z zn|y(TINSOJn(g4)sl!|>>Y>xb$ijXL;T|isz^^|l5ydtmDFI|O+@ovdW%<8^$i>G- z5jbd~b1_Bi&kCwW3OhCQyrvIbQ1n!+!@TeJ;Ck#7*Al70OKXoN1gaDve1FOks@`Sqep`ogCx{yk zirdY+OiM1q{UDF{y5xw+pZpJ%LWjg_zUuYqQ!IRo-ytp$g%+8GXU_5V?da@jDHV%D z*$rQqbda}wH5Kc$oHvZEm?y?>0+fgfTV6T5G3j>e&FBzqPM zOmy;Svs4_XvGnkLd>Mwvh(jiempVQbtziTjiJsRKY*!|wR% zdsCx(rFBoM*KvO3og^vV(dzbT_K{=XgF33j%_o-C0JVe?0-TQPF>3tX;K@b0?x=u_ zCIc`Hv0!>H-Y=FjP8PyPn}>eid(G6Oyus?+r zL~N;cvHN+8&u9;e7Xueo3!NVtGV7|0hBk!HJ~bIYg@N%86{};9u`#0`XLscg`Qq z{m6YcAO5#~tiFWe_?A!LU6eXXJJ38wg3ph_EF2Y5P#=%6xOs4i^1kdPARQ+CVSKZ|4%8_znXEqh5v&@ za<6`s3#brY|1#@_7WmVQRD_1y72jzE4z8Mjb#WG1qCmM_jH9`c4Z#=yO@G}~XB@n> z@4|4Au)o&?zFj1Jy28o>v*?XMDJvmcas$e@3wK4`7N2WBJs~H7$2+;24ilPs&$A0R&jh0^=H>ykSnR+UHV=Xmt_1PpoHx@s^|sW7)=n3gIey(#)S{nQ2wIOa)TlipnP{U zqx{3sV7SQdyC-&)xE4dz$LSy~oGjghpP6@7@|Tk1X-iI*eOnh@@)Nx@j`Fpc1Cbmg z0{`M(IWGEGQ3${NC~XR{At3T}hg98(JX37(0VRimJoV3;(w2*S>G<`zg!zL&M|iJv zkZ`VDgjI%2#zK4+Q`QSW|LKQ^cKzZ{`Da=Vv3K|p>@4gQ9&RTxkVPCrvgMrk;IZ6| zBmElw>2{fCd#nsl0()>L33b36a~b~*QqBg%R#@z6n5#y(C4>p{*A1nFz(NAjMHm8y z{h=`pKcEm+BoelGiVtfiCAe=D6I^k>AH9!yMw}`+90iqfo%(#NcfMx~0->o|r=5m6mCHPP={{1ISIGBDf$IHLi|~vC0HNy>P}9ka9j{qYKjjtYXyv51k50vv+=V z`2&2A?ii_5hzjt?22Pfk1R$m~(z$-oTRg)EaIw7YE^t#LnjcTR39^FtyTpK&XvloI z|A&ebKD+?or%Npx}vp@#TBoLlPtEMG34UgLqOHuMm2|3~%Nyi2hZK zW0->rO#p>{2OxG~0~AE9zUkw=U)m+wVO28+-(H&=IDqd1Dn#-WCKnWaNAhi!BQD6z zJs^>mU7j|j$0><725O4Y45m{E_n)X2K%G=M-Jxx9#_I(c=3D}SMdY>X7wHVjM$|zI zN1y~vw%Vgq1D`(jo|*O7sb#J%>kYh&Z~>SIu7_ozPuG{*W@)E)k6pPYoW`5`?U(fX zzRzM2=urHjbH#_$$bTXOryn}(v~#*rI4UKGPw_vrLh5`uL#!K@n@(gmMV*?s%cmST zCi~r4FL3^<#0xUlFIX;or6__z(HqeH3E2#&5wbE#2 z78FFviLU8`F{v;WVk2DYpc};Xygv3hwv609&i}DgXcg literal 12595 zcmch8Wmr{Rw>BXltw@8QG*SYaZt0FqN^PW5=}k$4G;B(mEsY49R60bu1f-=Kl-Nke zw|IQcd7txM=RME)zW2I5{=k}RuDRA6*O+76;~qB=8fxs2mNmD6=^|pXFiL1PLvs4PX(w;G`uv*}xJu4jPb;I$j`l;;|S!Xx) z62Xp}aYO163za}F9^8Ax@OAlQ#WglImMD9}>&+YT#hdRZsBhj3C?dHFc2{iVH2fM zuX%^VT^G8Um^2{054SYwyW^;z&Xtb&`S(Z%Aa7g_m$@a@B0-ox{b=)jSBTQ-44f>> zw=8FpygIOLJ+{VH=L}CybR? z-$ewB{$4hr$QOlQ$nw?n)EJjqNq>_OQz}F0!8QJCzEVx7QAs z?T0DbY!T5;`A_b@dW8~>O3KO4(a`RLJ_8EEq(i}1SYy*ZED;e`;1t1kqpbJ z;6$WJr+)@#q{|8S1ZkV~esJVowco5)4b6dKwGo)wU~Jqqb_koI1+R`*GAe6?GJfQ> z%J<2+(~1(melKI@7s*jnB4f#zF`bn;R==0~C*^!%eIo7*GelV%%!U=g@Iu!{L0UJE zF+mHW*jc6#n*5DXh=>&0NU;-`&l>d_kqHjgpet;H-K`gdpDV3AW3O-ECvTj5zuY`uI_<}}Ti0EQ@9bW}rZ zqZ`YDfLqHiFn%Qu-RrYsK`_t>OS8N$YJh&EB3Tg@ zm{DrAGH{JtZAV_WXD{phwwsnS!>L_ztAndt8j#g0mbJ>4r>oz;;cgknUO4s{L=C-; z=&o=8eAOhsVf5C6+F)B{q+e)r4j*4W_s;l!8K3A$acnbYRKr?qn#r!H`Yesp5Pr4x z)_Rt(+(d--MM0_WWn(K;KVmNE342=3&f=$dm4b3iE{2q;*w@Zg3>YbMv1rOa&P?}o3D-6QPA{?kpEsoc^FaS&Xa!-x-ES1h8`b5~oB8+C|C<&5 zjiHmy_V(tz;Cr805UZr;AXXToR1lg@nUKWfqhU-ci|KBIHB_Ym2GQX$KTpfo?O8b@ z+R%ZF1OfjQ4h|)-z~YEmaQAh!su~5o` z#PiA6_cZ8fXCiwX?1=h;T#{Zkr7&V$Vg!g;BA(@xx7H{+%560DsFora&?w4>kg85Z z&)qIH!0wFwfCJy*fxG%$VXHoiqRBzg(W?>#T=fx&@T8}>Sr&~W%5m}g1{fo7pwLPZ z+Oa3ze%&GE5J#CEXPKXNR-C&%4F(=TYZ>2vq6_*i zqE(!q|87c;3vfOn7$`=s4~r6zA*7BbE^1lna<%;&z}j@vmERJT6Dc#OwRFujoK(@} z8R^mzM40=%CiaK;Hit0w zB6H5Q`v!nl(!ucDOJ?zGF2Ex;F5(ffR@BK~7?@hWF}HJ}XW; zQWcBx>%(LD`mjDKwx_gMk>$asqaBPYDk=vDhkd^~g^XIXT6wsO3_Qmv9{iD=49h^?fLP+u2hArT=|H5I46*rUKS zcR(?a5j=I2js==Q5A%SjwDeqO;H-_v@Fa|IX{-aG;EPKAsh90JMqlRm7U!SY_K(Af z4_Kts{? zBJ1%YWP)Vqq?q&y=P8!w&Jy}R-Ud{vQM!IYQMgpLa1nJP=AwVovc#oiws?7KopcPE z#No>@hi{Ed625oa&ivJ(2dB&~Uog=1We< zIQjMlQJN|+I9~9R%dv`&KEUYwH3w!KOM<~#pd#LFZo#Y(I!TRk7}WPskkHR=uIq8f zVXw!aifX-FGd|>SV@7yUK)T9plSr^D(^%+jM2I()x-C~!lSM9TotNFfp0*( z`f~JUH(F@UxJ<*Z;Qh;0{@;TjpXf%hQQyqkx*iY?yTQmi67Z+9V%`uJk>6K|L-&;2 zfT_7(BUweve|+T)sh%KB1277115ViywKQdiD`=DQSv?1^cLpPF64HjSS9;YEeII~5 zKGq`{Tc;*TMUFjBTVVh*s7L4C&20 zcf0xn(F_>1Dt|X^RFnFZEb}ao(bd`J5G}xZ+$wv|b#ru)dTKS`u#`}30zmb?q*-#9Zjs&idv7Tcz`OU^H(3?ds8tZvysPR6{{)EV9q-boj@jhfyqzl<3OGC#CBzNRb z-luC+X0i7-oYwBs4bmPO!{aCU2(fpcC?#)yd zULb0dRguh?#(LFVEpFE$AFCC1b+=y7n_(biQ^Chm1kE0?(qVCz%_{m415zX@bF0FF zoIvn@e_hm>^v(H|BCNsjW%BC?o?tZPbzVjUU7qQ?fm|l|8}dJJ(&^6@LPb zE2P}P#?h`^zcdOKrE-Y3ym{XF$*nk%UOMOwW4dct`e$(i{;5amu9aMmo!25>ok4f5 zJe>X4Mpgv&IF{VI#9F*xO6N?kf}ne}1kLgSbzZAkLv!mTp2X(^G^Tr}5|O@9fKgsb z26s1^Wr%q|?=@YAkse16d)S6%uk~V9=y|or8y`bug!S{(Jl7B0O0fDfRuu*>Lpm2c zPyA309TEQ{217IQ*4})jlEY)bet6jfMj6^Nm%8U5fN$eUBl=!L|IkMfKxjm{@(;qL zOIJ}9VCDixEqn!CE}O_F&^n3`=FXK}*GM_9qLL@k@a-JWXO$K>)J!ww#N=qwT*j$ z43PGS#BL-@UB5`4DnM+T_dQ#HMX?Fx0)yMu`K;)&St6or` zFt>j3Y3^pYj^QLu-v<`NM5J=7$)m=~_O33>1?wnnk(8TxON8L=m?30_Jc_`e#X1ZxP2Y&e}nwXC5T<_@v_!m=-54eW^8A zpxvk9)1n?JloKdj!aXl27sHr%Uin`zvC?KaKax^o!`fsHDmF+zRL)75#g3bkrZtPo>1Q|xRCr8#^4{Trl>TZo@Kl<-JSs# zHU4K51j<~{sPVV}Ll;np{EJBWAEj{2=SV7WIc}3Or8Ozlzd>eAqzB6;`ngyroZh%3 zZ9Q$;la5l!@o0V~p7AK*6VxK=0_1b-NBfptDzLWBd%Wj>9t*EzY%M+<6bzD>4?0BS%wLj;D)=;J zVpQZ*?i6q_nIF)~&u9BL+h>5^CL`O#V`U@_mPz| zk2{(~Dk{e7b#+MG35Zoq|2^UA6kRne*rR5KgXSYnyoZaNO8=D`8D^d-e9pHi8CVDV{N$CpA`0q9G~47m}>rlfbz zLT$}qm~J+s`Jb_d0{ttMqnLy+lURU*=oryLPX-iE>29ZqH>iYAxh!GEnO!7tcbHN|XC38TsI*_L9MLt*&b6j>jxuhEVBL{)!-17nHaj)epnv)l)?SY}c!(gkEx? zbO!7VARFWY1O=10E1H~bbd_yz(JM#z=6EOkK|52YPkWt7Z(>R; z#D{ehjs1O(vV*bWnyh^(z+zcm71AUFNDNMu>t$1ms{s1FmACHKOZ6ueklF6}X=*ap zy*oRtzph)ZTROv@lucFFr=PJ(SknTY*?Nf8NIh04>hX|yythT(Y$&g?SYt7SJ!cC> zYnWUwcsXf0&mhpvZ3usiPobm5U05AbX&pY4Gx$KC)KRHv@v;1a&)YAWWxK`d$5~y` znhJOymvPq3VW(_RgqZQ(O^+AZ){W!S(XX@)4Fg$NUke%TB12p~Ho;j9Rym0fuk0tq z@-bwWy{_WmbS(@6Jn4hPoE0=G5w{`USo71hNZ@O6<23q)PFr={jkX9yjceeD};*Y&IA*Eai-`G9hzg_p0~Vdiour|qS-)xg@~)74v|b2*ya z%~orLTJVMcdVOcRLNiDN(Ge)BUck%*4kdA2^0u7GsaF2{5=}gZJK*TWd%eK{1Ne)t z>lps1vq@HJcIIP*7!Drgm`gek+s$WltcVwbU$C#v)Cq8-`2A1u-!D_=eUs+`4XKF* zG4Y|$XlB3fzp1ij7uyh0^~vuQ8D{P@!YR|Qmi7!y(>48NbEfR$Fj!`1blx8NGy{C` z#pqn>-cWhDT!tsI%%3|8X}RL&ov61g8AxKkR5-gzfrkmYlsK0MV^SGWgn6e$g3Sx$ zMfB&>^CX@a)ej214-s=A&<-T=ynV;|sVjlH81HZm`_eB@YY=Tkq3<*UpS=J0CNcMP z+D@ZBeCTGn7XDT(ki>jxeKarP;Zz=9-|l%SZE1Sp2@eNP?((}cC|{9`?a(zFo4(0l zjnJW^CgjUoF&9oQ5wj1k$_CQEZZBtt={=}ddAU9f=Sy=Y+lunRHqmuL@~Kwjd>9xy zz~;_CW2@^JEU>k{`#B8k^nJcaErKAUolPM8VGS#oKnJ2XA6jnHH1tk|hK*QoGF(aU zs5ddspW~R6>I>I881iMJ33$@e^R>K>3PP}^SmT|1s`uvAzOM1}B(ES@j!)N5DH_5- zN6#K^>vc~RNM;jrl)^uRc7uhESPpRwLFLB9dAuPz@_{6V6PaUl*7Cwb3!3oQ(BNR{ z98%f3VzaMsX;J|Y_*?vA0#Y%hRj5*&`3(Fyr;jrgcmcPxhGKCM!kaIZ#&NBh!lW8W zzfyv!FE~|G0$b5rjPHsuOdOnCP1dj9J9A`s(Jrb{(JX&Wt!b-PG{pQ%Km=^Hg<8{ZH4};g<{Gh6kfP}~4 z6^E~XeWF3pctcZL`EdVp@`Ao}i&(>{P~j~npK0Eg%r1NGTOgl`%5QM^dSTR^H64#- zq#d)4Wq^D!Eng{>2fg9wRd0OJ)8q73j?&D8ywCB(29d?o^1!(rh z_Y*0F5F!-*hp!j8Q2-FQ?Zm&(AWUKMieNXo{{7J1s}6H%)ee2iSe36l3-OrM`fgW0 zZ{)#6=t)q(e@4IA99g>#PTNw7j7#gK`G|XQ=b*8LVb)x2uLu>8cagxOpmnUpH+C^B zh!@t9!>yf`8CUwcv;+_5QTC(Lm+b)b^r8!{_%L9Dcf(R(EFgtePej|CqK799tzYmT zB{O-8$@CBK1_{78#iN@K;|YUGG;$?FyK0p~*$GY`D!8i9rv$Qtzn}Ez7z|7w)M{>R z8SkAAAVv2Ed>TJ)NzKfzISe&E^^b}hzJ6F#K|^@9>-PnDz0@;{Nl4H<9OVFhA-#f7 zF~2RClL(h4M`w4}!!w)u5%L*@Uz5X?G->rV3%2% zT!D#mJR5|1EFLzIMbFn$@M>sC6QFn~|2 z{1SJ>Br{?B+W(9R`ht{`_GR+|=T8G_@5}XO#-^c9-FkbDo4gsBL;4HImP7yfp%_17 z|6Q*=>z^0rD+50L^ju=*vnz4j9eZ2=fVIp=#iv1rIUY|fN$sCgJ?G6(H+~Mc_NoF; zxRYxzbo)cQTc_5AD$aTgv#ZHwcGgl{aQ(swE-rh_#S>NqvYiKfV$UQz&L(U5a0Tjo z^%hK9gif;FRy_h(R>xZxf@XJ1%y%a|SwTkI*}fbq-F$zN5Dw5a^3*=2U1hFaLvt7S z64y($A8~1Rq4JkvR#|cLNJt|<@x)xoU0!`5FGWO;P~AiIfGEJ2g`qA+E7o)qHD$?C0%=qE~vH zVoFVr#0?PB?uA|d#`Ph=v^~6Pdyi{@2LKH5*s}erObN2xH+k9G#&|aSNrV7{d>H+6 zb4dZBYDz|3nk2-m>X$Fv(EDXMt2Hyb8Z250JS+UivsVT{fgiyR6!=VfWc*l{1d=g* z(PF|!S0CEx>$;9*jJL*CNj4l@WSr$zoO>SWbE@0&hsh$Z)@F-v*hsbD_XKkgYQwZs z_40lW?qBoTMIH?z)8O9pcqJ$(_vUZ404|yzjM8;545;_f0=B88%s8~`jo&O^L}3#H z-%g25Za=W;7)44O;AltO?a=;ih!!P@b?DNyjvTWcA(Dr)4HWDsaV!J(CH>Sc3qbXZ zX!iAcTvi&8FES}vkTa`~$N++z0BM3Qxd7Q=LJ}6WA9k%q{_{_I3RbX|m1QLBD!MI56-E@?S>v{+N z`ROLbEd1%DMg;E1i|ZFS7`iG9z46DX5;2*~)iy|&>-IR)od8)ba!o#UqtMBPtml;> z-C~v-Q-`k@?vmAyZ}2ae4#3+YV|J&u+Y1z9R0)dkz=&Y8JIKyRSqXjr#LIDHFzIKA z5bui0vMjQaN_6%);-K#Ggv`}OU)sS!j#8E&zT@2>ZJT`Q1Ch}m31%o`%!bZe;C01) zUtQi|9NEXbRylUyrMQu)GcUVlgk@{%TNx5v2L=G-%5udj2UCiGSO%^(guN)m!^JU_ z?ls`8dxtm5X0WeSN(*3t%Ma|qh1^veJBA*`iA6NquvX4=z%lqSbR8@zt|AC;J7ieq zoR$D85LZ|2-=*WuIlHA!iGT!c=H=}ufzoIvc&($v-Pg;>h< z^^53`4KI`NK@|gd=julXrOP&v+tM`k(;Z8NI2v@AMKAa*w6I(~L!6(Yj%A3uZR|^- zG8t|vwHJ;<%nwXY#O6r*W7)vvfv8e>j;pI*WDuZhZfk|9ne2 z&@uIjVw71mql+>ux#h+i@bcfSMtk9PoA0eR4ZuKvau(0XTVZu?-wzijrpyhX?pMD% zj)wiHu$}9x$r!X9stus)nD$54@!{{TV-~l1L%q=rPX@!z*_CBdddLEM>g#4n5A)!d z82pxD(h?8$o8~AHo(<=zBC;`Cu+cejPgOf6m9Kh&-K*LqVPAg=`OlOsIv(MNgmJ-J zL0tJ>ov4i4muk+vmAZwS8tbtwt=DLPGUwcC+O5w}RJ`5`9E#OcsB8(x{yAViW){_L z?)2pT*~z470H6+70A-jU1LS<#M$}-vWYhj&c+<$~%f#s;!QA$M$BI0})7BV&m_!4T zX4R(vG<$9rSM&U<0LW&s*mit@&R&J&AI$WB@GXBKt8Zx<0=AzM2Q$(!I#C?|pQ-ZR zOn@r)nX2%4>67v@4$c0<(SKxoeb?9JQrY3~XQ@dYg;V~9BwTQ&-A z=24;!lf(!&L$iM*nA!{zsh1*NRQwZNKI;4jU9K3~F?ZpSlhYrbc964d&28@hO-Sp(>Q)iJK;=56CQ~t zz9ax1ewLHyUdUv&yT-Brt0)3+B?Y z(`sdmzDoM_4#%Fu@|pE4lK?h{@atj@6JynxmxA795$GhCZkLQYdPIe7&y|;yiX`B+ zR$o^hAXMD>9EbHba4sIa8-2I7XYegKS_|@_K)V?C!nZ?MYzAdlGcLcOVGgN-k`?C| zZGvf;E_Mu1@OJ@bQYj|Wm1+`HZF7J+Rp^n&yzSvL6qYSyemsZl_WM?{HINH%?9ai| z8e_XwA1{8VLOR-Vih1Oq{T(dOX(v;75}$^)6A&f%NXp&HyTg>D&im3WmachEX0m;1 zPNP73({W|@pEv{CQf2&|-`rjs)_C=v-A*%MznID1X|l)=mgU2=WXG78>5Ki4ZInK) zJHybgGUXJ2y=U1`0C>o%$#g69^d^S>t-cHk zvJLEt^#F2>6-N0?yZGXP+_vY2y&Bzhzxi^yL?lP!Mn9wqVLR5f7Jnr&RsB|tH@3_8 z#i5}e(IuK>I!L4IoinqTf;&;u-5>QaB$m9|t(#M$fJsvRlydBqHHtKC@cc+VPE!QL zZWB}AygJ05ds0%S`lwZR2MW(vIsspvY8B_5KZ!fkxiS^W;ATK}P3C zUUG)?GnP`q%AX3^pCpxx)+4X;_({&Sw@O%9aKVrdk5h#$bESU7Ze(nOi*SzQ*WZ$* zrJ~sn3XZdm!e#biE2ekA8)U-1g+&qO7K%7!Z=JKE`W;{;<1v(7FLHR$mE80+mWnQemgr|*$1#LLjksGgeJ!6bp9B!lZS$KD5bkp1Q`&dcENDFH4_2p$# zq2gLORp7a7cM2Mt?mv;`p@$C#f*@n70sQC=uvOM7_0Y?!f!5qV7F~Ag`!ZZv0Q?Pz z{r*~LQ3_IeZVxArYyL0z^5>pRCicaZmiEej8{Yq+Ec@qHCwp7_yIyf29)?SQp*}bA zdGCJXbmCr&*}?ccH7sTreJT{tfM)*pM7grVBwRj_`er?VW4meNUV!U$KQ2vTUJs;% zLmAJjYX0qp^X`uzEZdi<)r-G)J(`ccSa4mh^oV5H`=rM4?!Em}Y(jO>=qZy;HYXBF?fD7#rUuZ#vpX!VSEngONI6`3D!nZ`fH$rKec9)1(l)M zMOz~i)8p8eMwrB>X%c~A^JDpfW*@}k&7%e~8{JF5ix~betGLIiTILf~6i@FQI)u_I zw@%d-v_1FyD;cgUBT{Q~K(CG}xSX{8!f=Ai!?ENK1=1}Q{zI1DvMVKH{Bq4v>AsV} zG9V{-aJ1#}lS{9QA0u^Tv}o<6SGZE~hLQy-MoRSB=n|p-+5NNni$bfNG3+3OjCj?L zK4HL+`oC4D`8p$yYSuEh*$m#GDR&{r4^vx>9+7RO_`o@=>F27-(1Aq&o;2knT?|Qv z=e3r1pwvA&GB&dFMlfgt{m)VELJ9s_&t|Rxw<3Qn4?IR(*+ZNEu#T4~QYkap6V50zmZ;Zyt zR;GN*S!Xzj_`*p*-;DsFYW_O)x7P+{#@iZ8C9P|dzHs81!}!OXB|CXD-CuuONYXAJ zn;-8N?^xG)Qq8Dv^t>g3{9hoS|jKx0Ts5mommr1*6a)Q)RRw{i^n z%n|aFEQJim=RyDL(|Z3kWDP6K?*RXEI~h_oWP~>bd^gY((M?_fD4#K@o*H8&KvS|==#wPpc_I> zl`1CalY`oG*jtW$>+uHUfRLlnG=~twy76E@TnCBZnj0qmMbRN;(+?ROMYeM9Kyu;AD40mZWupu7PTeu-ofMZ{)C#u#Sl8wr^3GBzNm zQH>yd((0y*?ro(QUZ?ErvXwKS0f1s-B%h$om4NPH=zKx1X&ciptG#a{AW0$d`74R` zrFyn#h;7KL=P?%U3AceZt7fib@^Mddp7HrO6hkz>H?Wi~B9gh%!=q`%+1d3Z>L22h z`Jay7@y8xQNYN$?+U|KZXe0bbX61%sQ0n@Wh#|DmRn)=}=x-r^@^M?%{(srw_ z%ktT=O(|9xqSEsTOB{|$?`?6m$r|g%8KN5D4$wQTUOWx&5btLp~KWx5G3e(P); R_%8?)MOihO@@J5s{{zd_nMVKs diff --git a/tests/TestFiles/Skia/Controls/TextBlock/Should_Draw_MultiLineText_WithOverHandLeadingTrailing.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/Should_Draw_MultiLineText_WithOverHandLeadingTrailing.expected.png index 7b4541d3f8b9bf3e41e4883d5fa34274c9ca07e9..f1fedd01f34243778e4efaebfdcd75b8bbe02e08 100644 GIT binary patch literal 19257 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 diff --git a/tests/TestFiles/Skia/Controls/TextBlock/Should_Keep_TrailingWhiteSpace.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/Should_Keep_TrailingWhiteSpace.expected.png index ff8f49b60bbfb9a511a88de18942202033e7cae9..f345fc35bb44d3caee778c1138f700983dca4a27 100644 GIT binary patch literal 3501 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 KG%YhhNBtFxXkfbl literal 3517 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 LmgmZivA6#NqFQ4x diff --git a/tests/TestFiles/Skia/Controls/TextBlock/Should_Measure_Arrange_TextBlock_44_NoWrap.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/Should_Measure_Arrange_TextBlock_44_NoWrap.expected.png index 0d407ba1ee55da903313c2855ac7faddd09b060e..6be98a4feac541fb288152aef7558b4a2a928a4a 100644 GIT binary patch literal 2381 zcmbtWXHXN^7EWl=1u^uJ#T5ZjDFX-^DblM_qy&&62m(?fMiG!Af&x*RMyj-g&_N(X z1VkZ#h7v#`38BjpB4m{W5Et0sd-K+}@5h^Y@66nL?%XqT@0{;^=ezg81v_&gerbLH z03c*(VdB8{{riKLhdtN2))lcG7tGkwiI;6LyjM~I06s2D6CzXPXA04dGXR7S@QQ#9;{ge0L^E}F8if_VlKtXy*XWlwiC1><&;W|n zCO1ll4qCiu;x*NZwNZ~*?tDESQ0)6*smibZ94+dIB3m7+V&xJXNu zc0pHyI|1E`2*tjPUD?55uf?_rQhq&bhhe|%S^J$#lF3|{$iNPTSR42vHYq)^MYz4L zaA+Kp8d2tg(5TUJDR;*P-m*LdG|Dn8qB; zB+FsHRq1mnX>I8+kPwK~S{2Z5TLz5TyI;8bipSLUCW-Cjo#Cwm)i%tP|`RXX=D=|CLo_qDRKNlB=gc&=i=Z zw%(QmFfzGv;F&NmvV!e+fSOJC@n&X_E~!l)*@|%qvK7Ani=iEJtZ?Mu5wevBfzGGTnMA1hKPo@v{gVuZJ zhe9YB$j-#OqF@PBWcTlw+s-l-NmU9NUG4NdYxSQk2BV z!mh+5iJQ?)N-F1d;e;1!VI=9GP~YQhhI`~6`{XCdvB=daz2b3f!J%HTSV?k}e2>-F z%=+4;{ufqs?u;tHjmx&L8wTHy}fYp^hmp1t%H#hRfA+drj!qp zuPvaca;$EQYFtD}CnQuJzzNwj{=J*`l}~CpD?0iWPv2rR^0@)W6-6eq&5o=8-ZCvB zmiMt%<0FaC{L!2ZW}pnLfsuAAU!8YpJMzH?tC&)dvnXS)4iAdt%!efx%X2N8?GDxo2$Ij@#(&9o-^l_iRp^cN3LczYeuv ze7;bRMz*NaSomLqmkyn_#|+HT*4ixcMP+iIj4!J9zUjsA(_K|b9E|7iYI2dVqr?7v z^JiB;J#`mLuO@%{m)?c~-E${fugWE2GHZBaj{K~$`*mUWqeS=LNJ~^S{QbnobPtWo zYHNg6YCIFf!8K$2DRItmy((nn73)^aarNpP)BL6z*rhMkbOPPuW*EiKbCt0|(4lDr zY*Six!@0Z5FDZVd6g;z+`;OjbHSg)Tnvd(Z=(mL)a8dcFy_6P*hofAP-$&saCD?mRJ}{(Pdcm0uYrLVx>qDt zx?@``$CRK?ML)gAM$wum*7$OHuIy5It}U~lo}7Pz!Krc;jY z(-Q@^-Ku~hU#hKci-CG^-3y5WfjTC_B9uqPDR)>stcSMoNS*ro_R8e4HVNgB?qvz$jq^3 uDncgn2n&on%mTmGHI8S0Y5qTp&u1yv#H78ywY22Af0CuCok^XscjBK$!DNR3 literal 1077 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu@pObhHwBu4M$1`0|WCLPZ!6K ziaBp@pAEbnAi{RxwNDp^^;E~Q5(e)eFRcQr#$2le@lz-Gb`^+Cax}c;dgI0O$meG= zCLHZvl=$at^`yVKWrDjkPN*dre>dGA7yoP@Lxd4yV@rd>BX5@@wVSuvx*u83sJnd{|%M4 zO^y@XBPBE8_=@@K^A^Q@s!92y_G^0FcEOJq-u%yvlb2iF7N=6PX?nw-j{o;Bh_7|* z58R(vezr_H|9#}6gg@V}{aD`od28s}Vq25-t5-A&o_)V=R;_%4!Oqwt@7CQcTl-cs zX?yOs_i^`M>)-xYe*Nr?Z~uTY=MVneCVTu_^p<~rA8!16{_oc_Kb9x8?&FiK5dV6{ zuq}7b+==UEC%?0wad|=Y1g%%9Hv&Shc(2*}e8v2*ueP157V$Y-H~dbGxw_|{SpNKq zgE!b%pBTN8TvFRVsaCJh;-Av1-xKV@1MN@k&5~Vh)tCCb!7!&LQt;Q=f0i6NGaDS7 z92684CI|?4aB!%6aa35y&(wKydc-dUotbuEfyMkxe<9+WwE`Y5njMn9op($)$-*MU z#KZ{>b)X4AT_D*r`;J^+%)2x_+G;C*Oa-2BvCF7Kug8HS!jeJ!muMKwaA1VZjq;;Au()yC& zrLLfSX|d+~-`kacZhC}d5{C-ZVU~?{Cw>Y~V0zi?a~tl7uYrDHuQMNFR6KVzi$apE)5*M zKD&KZZCScf5*~I2J113{FdfR0xx83VAnfU4TPeoGiPJ6tIcW>snPt6RUwqNL!NdFI z#fYSh7NI)J-IWz|&H=T&bDl9pU;B`xAlO)hBMmHT1tJt`1uEL@IMN;ETS70hHv--D zf%A*w0(ViM$GzoSu3lnqG*&|MU}DiPg$)ism3*}V=bG#|Rxjgc0*257VPMqtYXNmn o2Z}A_XG(W*0A^@nLBrKw?DcQkzqqD8=mF{RboFyt=akR{0P~W#ssI20 diff --git a/tests/TestFiles/Skia/Controls/TextBlock/Should_Measure_Arrange_TextBlock_44_Wrap.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/Should_Measure_Arrange_TextBlock_44_Wrap.expected.png index 39f21bd8077ee561340f0ddacc8794267e048881..e1d2a574c217e1229832ed41a980ee53da8a266a 100644 GIT binary patch literal 3718 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 okuAik1Yu?de*69(#)SH&+ z@V?bzOdpGwV;u_+70~XkXHRJChSF&3B!k*t~3Y5xl_cgtEuSLv9Za z3(RR7t-LOA$9WAnlT7(}7~ixEg9`AGarf>-7RBe_{AgSrbY741`?H%#@0!Oi_Nj}H z-1IH7tSqHqV&|*`|v)&q&DRx9nU-dQRD9LMFr@* z;_&43WZlxr+sEY!%2ZM#zFa|dV>lu%DuvB8wVfqtty*{5e?2UHN5;%h^>Me&huHQ$>U)xdS8!?MOVuI2O^=RY|8veYx@mm%v2 z*iYQahLtrgu9G>oeEQ{-J9&;gRF*s!vdAwUe>0$OmvZ{!+p$+48#~wZ%-kf*^oP6F zKhCF2%_DNng)8pMAU$`nZuh%&a(OP!KeTDG*yO^L-z+Vy~p`K>!S)MKp^%@k_=-R9mH(?bZynzH=@)Y zMN2ra@+8#a`keTJr;kL34Hx_L)%$If^9{eak%x`{sJXrv%gTMWXGw+;I7@PkXt0T} z!!P)=YSuIkR+ac#`N^Z#agp29J7~00k4zDer9!pBv+g2+&4b{D6P!|` zxnmC>()k-3>=%Jo^HrANgny+%?7@HO;#e>C6w6>@zm_+~%uE{BqS}3w)?<+Fl_!SD zZc$yMKfg;9t_b+hqRLhqYczcSF8{JDa%R4E`Z+&iw&-%NiPV~r$ZfQH&W(2lP>1XRM%2%gE&?|;2+ zQiV%cXYrpg5eBxOgo;Tsydq{y_>aQz-FoTqMu)c$sG->SAbYgy&MO!OFG=}-+a+o5 zIo+q<6-Ke6P#;S(Q4!loGOzX0jrh6~zZL~vE-=yRJO|j_u(|=sgiM9jVv~MI0BM?+ z#3bJXHg0s06_F5#Zz2h}`g7NSGF_Je>M?S&MD%_X`0)f$^EU97^`pq<+ZYjhrZ@_0 zaDV0x*2NiR-T5NC^2LQn-(=*IZ5rZ4NnjK%b0U{=lyyh_vb=~e(2m=8HaGWgx}b*Y z9X<#8a#%>W`XpcCb5nF{0~3k2)@rDI;paszlsc~1$K&}!FN028%fzH+Xuw07Fgdq) z<@olqJeNF~P_<))mTPH0+qLy5S&E&ZMaOCZc~RAG%z-j`{Y%y1qQ(t&Z5tc1JCTx^ura9nj(S@)rx)r;}-I*FB!BDDH zY;kTwMvs`!N1qk1KL#uz>AA8W%<77^Yap)N4P%&TazkLuRnWvKwA6scgD=dy;{3Sq z&~WPYuJD-iAg4!<@J^kP!*rXiHNzs5v&?^enL|2~)kFJk3>7cZh)J1|K3 z*}b!&|Ij5bjgPG8mg=S*+Kv`tD~gE^cl{Iz9e#a3$zyqDLqc+>Hah*u=3?kNurzO)fBl-8z4rJA$PhoMlP@5W8D_{TVMZm50AS1`Cf zCL-t71p(UoTh4y?sj-`;uD{(+(T^T-8dDt-D2h<`X%DGSnsUbK`jh(}h~|Z=5zWE% z$MRsBwvgbmtZ|OVmn(4pJsEX)M;F=Db%mFT8`T^((sIL`kv~k8gZ?c!5tS8uBBmw? zlq?%0Y!&oZJf3S`Ye)=xSBA>shFDpd7}2$Fo!^b{VQ8kb#CZ*?*gXP$w*N8P<|jA zBJ8jKYFfE2)ms6W0bvrwc#MnFzMk0B;g#7wo!}88HE4hlJpF0Pe~>x9x_0ym;xKYW z`W@I!m3+yDF96efqTT`hAk|%8x9~m8F*Vr9Jzv_SAy^cBLe50YYWP z;Uf#}iY`S$M@<23w79I%?fl}nxg(t2H!s~lH$OYtTNZ-D)+z=SqlOL3mSM}1Y<&}F z@{vcz#3&{~C*-MLe(u{rp9859wvcKoIXdgo5=j#ZsiqE;+YuJ@P7W;A^OvMt{y`Wb z9L1A{LV_bXEvi5tPY)SbTjWzT*D?SbyI%!v7+iIxJChWJgQnZ$S4IIsz+a&OS%zny nGzEJ@g@u71*8juv`=ND}{f|RCo2Ps^o7+3sI9XR)oxAdHjuH7j diff --git a/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Blue_Foreground.expected.png b/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Blue_Foreground.expected.png index d2262f7e523fdb153a27ccdd4e943fc054ebea60..fd82dfb4bca2c47bea3ea328339a79799650c476 100644 GIT binary patch delta 929 zcmaFMbBuk0aXoXbr;B4q#hkZy?fqW`NU(i4KHJ(fajFEnv&oJdM|dAUa65G7*`>Su z4|vYhFqDg%32j$9wzbn(Z^8_}mIoS_ww71ezLbBM+sL-#<4;w#g|;7p&R;I}Q~apF zb6CJ-%Z2%|;tpHRO9&{jGCM6vaOe=>;h5OOs2F6R;L^1}(z>MHYVO+*r!CBD!@Td# zlbm4V@ASp~RPm?hBHbPb8w515YUE;T@tF8}@|P|B{0|-~{*2hm7Zd;g&b=I_ZF>vn zO5ZHAbz~^nec-QcLgec0=JFq|WjQR~SYv;mz0J8+{??f&M#D$<9bT3+Y&L%IA)vl4 zO83BLt`!>?euw!_3)6n}XG?Ue@5U_C1Uvm#H#@!^c2n*UWI6C!yP$aT-u0HU9z4mRpoA+tskL+d3C!bz6iJ_oeeeu+f z|K#>gudrr#@wMS%#z(W>*QYj`y?wN$ij8@vY=8aYZ?F9r>nHaz3H>)p5oEvpz44~b zs|EY?WtGm$RGToZTesw`RyM$hujieoF+M>d+xy<@Zd^|~XeuHKJ1QPe!qPA==(&u-1FyCMb54& zHDm7Uuitih)$uthSzDiQxZmWOnZ$VDXluy_U#2G6n6IB~UY4l6S*`PAdTeS}d&=xh z>#8ok;)-6g#LRzWr)^wif*i_&3<3*_6>A$YB z`(mbDk5K1HD=}_6{N%(2pOq@dE$^-CsLI$0^uyPxl4sxdq`1HSzPNQo?&(_NrI}`n z?W>kD)zqraFP|!yYQ!if|Fryg=Q6P<+v(Gd!p*xgk582PP+NJUa8h^0<#U@-?BwrH z`_6MOYaZfxTV|a-eeUe@hd11v z7QJZCr!Tp6S6jfTk!yF?R_~YRjXJsx2|`5hrO%Ro!m_{C@*OhZDUW5jxbG3xBrOHX b41bva9`#E4-S4oJ0SG)@{an^LB{Ts5_YA?H delta 1613 zcmajfZ9EeQ00!`xF_xFP(U~a|@)F4*S~{$$B%3>K)X3bN#$<`p%(b!jDaIgB^U3Fz@Tl-^tLukb_B{G~b z!MLYWJCz89nt-7o%sFHZAJ6{91?y}6#g|I?XKCIxn1^7uHt8*v#J0@emd*7f>hS9_ zeXJEv?7o2dVgzs@I8)TDJ}orMBKS4s;2t|$e%DMLtE$aiD@nt;UphSKrq4pM14cr& zK{LJKE|-x^JLn}H7H~`d1PdMmE=K*RT(L9Cv=;~jJ};?p&^@+BnV+rjtj_Wf}b*pCkPph!!qmvg@a5G>| zZpOrfjPu-0ATqGC*O1GHdKqef7mY}`OVl7}&(Q!y+rpY4eSHc{OG;j?rnLBgbaTTe zPKm=)3cLe3kZjGq0WkALZE2hh5FIGSizfHmg2`k>C^nzY?$^R#0R4sHv8NA@ac}jf zT=1|WBLOw1^&P{AqOK{;s;YEhKr4EygtZ;Cca>b!I(3M5px|Njn|ATa&#g>e>=57G2hD25uQ$iFr*OPAEw5NeFei{f5U_;Eww%KHx@?B$7ni7VVQpLlUmvcF>3EE#X+(r{T zf(ZQ=Ip7wWktuv4x;+&}+Zg5N&!1P!k%-Ijg8O--`;u(F8TLkN5^w*5<_2mssO5ZC z!QQ>h{H09EaiH`*L0W;Ufyw)M+qD)xS`NG#28VaZWx5~foSkASS*ImgR(UO?WlXxH zdTj_wufX*#S1&d;&8h3ZGNaH;)l(Lf6*3C;403+9SloHRIhYqjCIjm0({~&kd9g6} zKA!TfnR+HUvf04S0Z6C+?*3ahAlncz!^}5O9y`Dkd*;>f=vV4wYcw4<)TX8fGt=VVMKyxW8={=m(5`H8S zzuhX9WVP^lYe)-cRCJ}%RH#ypV2^)g@h&Clk1KgUKtdv^i$Y-{)9+rTV$Iy#O|Rtk zV@Z|6n{3I~FG6E}=W0a9)EmIfqdVT6hZ{PDlnduhGgr~UTH^=X=%B5QLJy%$OcLA3 zMk?)%zp(zg3-O($J@;xr`_F!_yv~#P(>A?0V|5SJdNv0U(=%EL<1q(OW+U}kQ_ZY_ zGedrnN!VML;YluZ z64V>~?Kel%@ChYrt0g{jeAjn#lSarpxs0 diff --git a/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Default_Foreground.expected.png b/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Default_Foreground.expected.png index 770ff257b496a2b871983262dd41b702db8c9509..2ea296ee0e9c9615e59b9766ac667298896b6205 100644 GIT binary patch delta 1108 zcmeAc_`xy3xSmDd)5S5QV$R#U-r27lWLQ5G>x*w~atm-0*Ib&ia&<%Zx=$Coh zofbTB&}<13TG7EMuW-!w{V^WTtm7XqPPg4Zb<*{eFK7O^|Nim$*RNk(O1ECU4>xak zVV&&IAtE85#LCv<(a5M6lmOwj*6%KR@wICHWuZm-1?BbS%kS(nRC_ng$9O+^G9Y#E%yCJS@ozqRPce%GSGvwTEd%a6zs@MB>kAMHWc>QFN4Ex=@ z?@ONl(XjgKoIiKTkxjYMPm3b^0<0#fIPQ$GJNk6%k-|Tj*B5;*4Cvh2n@!rja|8=q;nBRqQt42YInnzZ~18R z{%rDGBOP7SOAp=$bEUl(X3#l(YO2o7N$j&7)!y!YwC#;;nAX%ge@k}9hO7=vxa{sI zkaKsN_qRD~!?d^iUX?rl`NGSRl#_G!O?&<*h4G}2(*cvSF&a$@4Y{{BeXhCRo;mB2 zFC)X%EYs^h>u)~pd$>z)k;b74n`yb1Oy&AhXSWClIA!c*-1K`%qThRE4yH3{o7X<< zTg0*Ys+PIIkA3>LWnCxU5o2MLlaqU3!S~3*O`@$RTITqU{rj(TZF&EDCqwl-_4w(r zZy6h&KY#8Y*<9Po&v~N8?s$sP$=p2ro>eP*g~O7$MQmi;D+pCKkb zUi?Jj$Yy>#MG z@lQ@706quZp~8Vz{1 zzsr_jJNEeFz3Uk!QaiUDEA07Nwbs;Q>giOU<-tE~ZohBe_B=+$w0X(pytQGcukLzV zCcW?d^JS@XC7(Wf#@2k$L60N%w%a6?1ItoYT+RA4=jf%?_urppSi01=>|u7K*dc@Z zJJ}Qad~aM%-qii&(V7YGChPS?uMJzb_U5J|+j7^0t&aJ>BzLP0x96lM+g|oOIGZLM z9v+@A_QC4!V+%f;^OOJ1dwbjYcCp^SH@|N0*&Fx%`oB|e4dc&T{J#A2y=VQiAUR0> zli~ZF37M{Q95M5wFKYhWvd{Cm{l$g%v!45Z7W$i}vk_AVM8iY-h0L!))-f-vW&i?D LS3j3^P6+F@~OLE^1 z*M~z8wB6IgYs{xI+)!A@U=AWfmC3&B6}_JTzAuTj!2 z%@1dZh+U5$xEI%k(GbL@VX@j@^4;W`=*5rqg^=kwU^&B24pt6CQ2F zACyaTn-(bIM#^;)=eV(p79P%N$dBkxKPW|dETonfl4y@5z}}Rqo293r(!ZW4uhE8^ zc(qF0s{B)}`h0b^q?#g}{;Z6AhT9I6V&QIXZtrbhaPs=jpfgpVf`Wp?57XkPA7QD` zUD4093Btf&aL!WAZcBn?9(;LaMFpy}>Y7%Vq7hoSo+nSXPATk9AI*%s6&M_BWT8_T zWNn`Nr1W{jWH)Qq2W3)+lY2lwV%xZb(Oh-X0quZ*J2L!%q|dao)8iJ#*MGfzb{ z<$sNbX$jH-#%MKq6pCcD7Oi(wSKB)~yWbTNFsMhv!)V})=<1Y8_YMpUgrYT)4w!_6 zg{81YHsx}}($W%?Lgr=!T4h#L?D0Ttp26gL&MaMM7>jZFW(U;y^eN(X>`#Ia%e+)c zEVH^g0;i8QF$u3}$&YKvrtq&uHNsu}kTCU0ntkBKwiCSyg)KdpDT#GAMTRQ;Ep`7o zytkk-tFUl)qNDMvL7caIaj`zJ_`oGNt6MdQT7L5h2Dq1D6PM*jCwBVmFLbH$e{k;j z`Qwh2k(9G%wLy3u7P;Uw9m~b*+um1rB-k6$T7s~8EGUI)#|pI4;EJz-@Y(F`FJZ^zlL#Z+T5nZ5zK&CR7Bm5vUTC(&Rai4}w=>9Mw$ zo1240u>u2Nbyh3#BUXAl*lu?s_3x4Q<>ci2?p3jh{}y2U={FzWzFD|;-gt(zAX zV!#RQi%1Q}zN6!fCMoB~M@9&Ou?%sPD?lDVAvCFZzZH7NXdNCM zB?6@0y~FM=M6_St96xgJ$!S!TKOBUa=d~rzE2B{{W$V4Ox|$Llz3o=zqgcVpr({Qq z74l!ld1QZXz~nas)hiHZq3eweiA1Wct?j%vQsR7BIIRfc#K;*A;~kd=lkbb8{tl~8 zxNng9$aHkUjvj21$jHTP-M4Qal+xDbq{HfNpXYUVyDksQK2gHMH8W5CauZ`{Y)rg~ z0aRRn^*yIw7*@|;?})qw_My(ATz4#vx1EZ~AgaX2$76NiQ0G9&;M}hm6rt_J;!)}@ zmg^xBsjgsXXlN}*6YA;h0{5t>NvvDD(3=IuSgRIL% z(oUTBFtuq7ehyn+UM}aCVW~au_vH7P6_M&4+?xw#RZ2&w;}6>U=9VJtI78Mixc5)U z?Ko_nqcUk@RPTMTS2zSWGr@o{nN3_ov`mnbCT47Ru(G%HawJD)ohq~I3Y*Q2UO1A!*e9O9^CPD}`ubYSB`R8j!bbzd$YioFkF1#P z)qWMr52Ph0C!Y%O(*b!@yzS>0jGg5Qtn{|ggEzl>pFEX^k&eo6h_o2O#ct7}tufa@ zY}y~T69C2GaG*{Ug-S&f9@40;7TO?g7ZvgK)7?e5VXEEm0s~|rde@C1nX6#T71Xl( zGLO3=weESE{j;dX;W@qa7w3(-DLZae-too$(YDSh@Ik-M77K^G}SzGt0IQ)5e!GPvx4hXTF#H+J1*JlfH z-X1p}&tLbdNCkT{tlN{6ssv84uWN2aFk=kH5_xB$xZd(A56`Pyp7y diff --git a/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Red_Foreground.expected.png b/tests/TestFiles/Skia/Controls/TextBox/Placeholder_With_Red_Foreground.expected.png index 4d2bc5d78bad5d64dba1c06ee86635d53535c4dd..05ecbea9a26e818a2993d76ff530516a78d3012c 100644 GIT binary patch delta 909 zcmdnYvx$9zaXoXUr;B4q#hkZy_xe3{5Mh0AIBR!H*P$SR%$Q}fy3PsdKTuz=@G;{h z=U+AqqIoMcJ~K`H!?bWA!$UR^mF+Go_a03tv+>?B&*GlN>3RN6KMNnl{FnLNC*0Y* zNP|n@VwC+Yy@rhWh6*lBY%LxK8U#2c1e6$=om3JWI#}#i#~IX1^_B&526C@kx9-Tx zsf-_Ia$ekj;`xK~V%_Mfc{nCEFe(ZeK#Y3u)%RDFC)1vNw~kMr?jVq3H(!TYPQKA% zT`U(vf*G^gc~t{JUqvo|pIKuLawbN%qS-zdCQd!q4Gl{iuku=Xkxt zY+(uo*J+I3zt>qiNbLHm+R5iCaHC*NHveXx2%R@ubS{6L^>o(RlG&2S z=RY@=+s!D~`-e$)?fg|$4eO`3X5Fmgx%76IyVn}CJ0-8|()(JvSqqAi=F9VZQMls1 zKfio~!IkvZ`lpxP>wLQEKl}du{dV1FpI2F)I(_N=?(b)hHsoEmoBup-ZG`Us&zo%& z+>icRxr+Tk!oI}Y+au=o-TRT5bzA7o3$ID*RSI9t;GuiM(7q zOR~E~@xzxb|F*WbAGkfc_D%IShA%e`$8en3blyEvzVcn%ymwzq-qyd?Gmw#I=I5V% zR(|#Bkf%`_v-qp`zWVO90NVIWt$(p{LW&eAX?n+O;Emh1C?)9D_ElOs$b&HFp z?K=(rOTC}I8>Qu>upJ9bnIC*AcV&~q{&jcMW;s?#Fv-imEBYaKu>J7)=8|GI@8Ipe zvwYs9d%aGdUA1D~qC;Q5mR|L)FMIrSsYYJ@?R8E21n1Yzwl@VQv8HFo6zZcTe$`)e zyCN{pv4aIQ^`Rx?xcf^!&wp{@|EmQWU5nl-b$kzopr08vk@(7@n$^b-?eJFVc>V4&d@-+hP3D-3>f=0GvE& zG`^|y>J@PHs=Z^segzsEf%E5qCr{M-M(g^JE%p<{@0XrBEe*JTU%u>ETD%z8xpV4A zj%e_B0G|)Y%Zqg+WFoRDme&g`SO63j0!NMjJv~5rx_^|tdGBz~6* z$jt=`3Z$&J7iek%LLvDae@>}dTP2>%OrWSpjt79@VL4}47vOdSD^~(ZN!C8A>iVeS zX=niQ^MB>De)u5umX=zplg1UDMS3tOugS^s`r?I5zh=z>hK7K{hk?(Zr7REtPMwnX zp%8H6hP66+dVoupfJcvjxpQUIs;#wlYS~#urKU;(g{O;y zgTT?FvX9FJoIVY-v>4~@>;&%Km65ciMW&l!HGehIU^6nL!B$rrb*iYYk6An|Ex@^R zl3X5-98VF6Yy_#R1Mc0E2C#m;Bm_pMU+dOM50B9X>h}X{)<|!=Xc4e&o0NU~2E2W1 zz0Tdcr6^ENDM`+&>qhKhadE)1Wx$RdSA{rxiS zn2e?-nRYZb%AKo(1oLCMx}+ygNRV}brWs}V`7#pK)yZfW49bXu(cZYNP1aPy!*ct$ zv(vo3oE%vr)YnU0t*tWBdA;Vxs(-GJ-FV2h=sYMaDw124wY9QF*tk&^m(|r$o|Xn| z-ww=~Bh#7OT;SL-DO<5Z?%G)4c1r`VsgVX)R%Vn{RmrHLY4R+@<&s$P@_jTc7mF+GUuy!plZ{EZ)IvmoAmw%PXv!Xk9 zWEAoFWZeYFV!pXqV)gqakyfvk5mn>My#K! zsY%z5AD8z-Lz9nXWMtx4!iI))Jro+dJruH6r*1P=-Q@a25)b`irEO2`PfgV~D_T`pDF2B5 zqUke&5XAr!gh+u2LZrY1AyQz15GgQ0h!mJ0L<&q0A_XQ0k%FZs>HJT0=>N*0>$)E6 zAc+1|oMI6vFhPhEm>@(7Ob{XkCJ2!N6NE^C2|}ds6Y^XMuK