From 354c299071a6f7d7315403d4884568f328cfe43e Mon Sep 17 00:00:00 2001 From: Patrick Ammann Date: Tue, 31 May 2022 08:22:43 +0200 Subject: [PATCH 01/10] feat: support of digital signatures --- PdfSharpCore/Pdf.AcroForms/PdfAcroField.cs | 10 +- .../Pdf.AcroForms/PdfSignatureField.cs | 147 ++++++++++++++- PdfSharpCore/Pdf.Advanced/PdfContents.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfInternals.cs | 2 +- PdfSharpCore/Pdf.IO/PdfWriter.cs | 4 +- PdfSharpCore/Pdf.Internal/PdfEncoders.cs | 11 +- .../DefaultAppearanceHandler.cs | 32 ++++ PdfSharpCore/Pdf.Signatures/DefaultSigner.cs | 47 +++++ .../ISignatureAppearanceHandler.cs | 9 + PdfSharpCore/Pdf.Signatures/ISigner.cs | 15 ++ .../Pdf.Signatures/PdfSignatureHandler.cs | 138 ++++++++++++++ .../Pdf.Signatures/PdfSignatureOptions.cs | 16 ++ .../Pdf.Signatures/PositionTracker.cs | 18 ++ PdfSharpCore/Pdf.Signatures/RangedStream.cs | 173 ++++++++++++++++++ PdfSharpCore/Pdf/PdfArray.cs | 27 ++- PdfSharpCore/Pdf/PdfDictionary.cs | 4 +- PdfSharpCore/Pdf/PdfDocument.cs | 16 +- PdfSharpCore/Pdf/PdfItem.cs | 16 ++ PdfSharpCore/Pdf/PdfString.cs | 7 +- PdfSharpCore/PdfSharpCore.csproj | 1 + 20 files changed, 665 insertions(+), 30 deletions(-) create mode 100644 PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs create mode 100644 PdfSharpCore/Pdf.Signatures/DefaultSigner.cs create mode 100644 PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs create mode 100644 PdfSharpCore/Pdf.Signatures/ISigner.cs create mode 100644 PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs create mode 100644 PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs create mode 100644 PdfSharpCore/Pdf.Signatures/PositionTracker.cs create mode 100644 PdfSharpCore/Pdf.Signatures/RangedStream.cs diff --git a/PdfSharpCore/Pdf.AcroForms/PdfAcroField.cs b/PdfSharpCore/Pdf.AcroForms/PdfAcroField.cs index ad8f1843..13b45cd0 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfAcroField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfAcroField.cs @@ -486,7 +486,7 @@ public class Keys : KeysBase /// (Optional; PDF 1.3) An alternate field name, to be used in place of the actual /// field name wherever the field must be identified in the user interface (such as /// in error or status messages referring to the field). This text is also useful - /// when extracting the document’s contents in support of accessibility to disabled + /// when extracting the document�s contents in support of accessibility to disabled /// users or for other purposes. /// [KeyInfo(KeyType.TextString | KeyType.Optional)] @@ -507,7 +507,7 @@ public class Keys : KeysBase public const string Ff = "/Ff"; /// - /// (Optional; inheritable) The field’s value, whose format varies depending on + /// (Optional; inheritable) The field�s value, whose format varies depending on /// the field type; see the descriptions of individual field types for further information. /// [KeyInfo(KeyType.Various | KeyType.Optional)] @@ -521,7 +521,7 @@ public class Keys : KeysBase public const string DV = "/DV"; /// - /// (Optional; PDF 1.2) An additional-actions dictionary defining the field’s behavior + /// (Optional; PDF 1.2) An additional-actions dictionary defining the field�s behavior /// in response to various trigger events. This entry has exactly the same meaning as /// the AA entry in an annotation dictionary. /// @@ -534,7 +534,7 @@ public class Keys : KeysBase /// (Required; inheritable) A resource dictionary containing default resources /// (such as fonts, patterns, or color spaces) to be used by the appearance stream. /// At a minimum, this dictionary must contain a Font entry specifying the resource - /// name and font dictionary of the default font for displaying the field’s text. + /// name and font dictionary of the default font for displaying the field�s text. /// [KeyInfo(KeyType.Dictionary | KeyType.Required)] public const string DR = "/DR"; @@ -542,7 +542,7 @@ public class Keys : KeysBase /// /// (Required; inheritable) The default appearance string, containing a sequence of /// valid page-content graphics or text state operators defining such properties as - /// the field’s text size and color. + /// the field�s text size and color. /// [KeyInfo(KeyType.String | KeyType.Required)] public const string DA = "/DA"; diff --git a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs index b7f6a87a..3c562253 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs @@ -27,6 +27,11 @@ // DEALINGS IN THE SOFTWARE. #endregion +using PdfSharpCore.Drawing; +using PdfSharpCore.Pdf.Annotations; +using PdfSharpCore.Pdf.Signatures; +using System; + namespace PdfSharpCore.Pdf.AcroForms { /// @@ -34,29 +39,145 @@ namespace PdfSharpCore.Pdf.AcroForms /// public sealed class PdfSignatureField : PdfAcroField { + private bool visible; + + public string Reason + { + get + { + return Elements.GetDictionary(Keys.V).Elements.GetString(Keys.Reason); + } + set + { + Elements.GetDictionary(Keys.V).Elements[Keys.Reason] = new PdfString(value); + } + } + + public string Location + { + get + { + return Elements.GetDictionary(Keys.V).Elements.GetString(Keys.Location); + } + set + { + Elements.GetDictionary(Keys.V).Elements[Keys.Location] = new PdfString(value); + } + } + + public PdfItem Contents + { + get + { + return Elements.GetDictionary(Keys.V).Elements[Keys.Contents]; + } + set + { + Elements.GetDictionary(Keys.V).Elements.Add(Keys.Contents, value); + } + } + + + public PdfItem ByteRange + { + get + { + return Elements.GetDictionary(Keys.V).Elements[Keys.ByteRange]; + } + set + { + Elements.GetDictionary(Keys.V).Elements.Add(Keys.ByteRange, value); + } + } + + + public PdfRectangle Rectangle + { + get + { + return (PdfRectangle)Elements[Keys.Rect]; + } + set + { + Elements.Add(Keys.Rect, value); + this.visible = !(value.X1 + value.X2 + value.Y1 + value.Y2 == 0); + + } + } + + + public ISignatureAppearanceHandler AppearanceHandler { get; internal set; } + /// /// Initializes a new instance of PdfSignatureField. /// - internal PdfSignatureField(PdfDocument document) - : base(document) - { } + internal PdfSignatureField(PdfDocument document) : base(document) + { + + + Elements.Add(Keys.FT, new PdfName("/Sig")); + Elements.Add(Keys.T, new PdfString("Signature1")); + Elements.Add(Keys.Ff, new PdfInteger(132)); + Elements.Add(Keys.DR, new PdfDictionary()); + Elements.Add(Keys.Type, new PdfName("/Annot")); + Elements.Add(Keys.Subtype, new PdfName("/Widget")); + Elements.Add(Keys.P, document.Pages[0]); + + + PdfDictionary sign = new PdfDictionary(document); + sign.Elements.Add(Keys.Type, new PdfName("/Sig")); + sign.Elements.Add(Keys.Filter, new PdfName("/Adobe.PPKLite")); + sign.Elements.Add(Keys.SubFilter, new PdfName("/adbe.pkcs7.detached")); + sign.Elements.Add(Keys.M, new PdfDate(DateTime.Now)); + + document._irefTable.Add(sign); + document._irefTable.Add(this); + + Elements.Add(Keys.V, sign); + + } internal PdfSignatureField(PdfDictionary dict) : base(dict) { } + + internal override void PrepareForSave() + { + if (!this.visible) + return; + + if (this.AppearanceHandler == null) + throw new Exception("AppearanceHandler is null"); + + + + PdfRectangle rect = Elements.GetRectangle(PdfAnnotation.Keys.Rect); + XForm form = new XForm(this._document, rect.Size); + XGraphics gfx = XGraphics.FromForm(form); + + this.AppearanceHandler.DrawAppearance(gfx, rect.ToXRect()); + + form.DrawingFinished(); + + // Get existing or create new appearance dictionary + PdfDictionary ap = Elements[PdfAnnotation.Keys.AP] as PdfDictionary; + if (ap == null) + { + ap = new PdfDictionary(this._document); + Elements[PdfAnnotation.Keys.AP] = ap; + } + + // Set XRef to normal state + ap.Elements["/N"] = form.PdfForm.Reference; + } + /// /// Predefined keys of this dictionary. /// The description comes from PDF 1.4 Reference. /// public new class Keys : PdfAcroField.Keys - { - /// - /// (Optional) The type of PDF object that this dictionary describes; if present, - /// must be Sig for a signature dictionary. - /// - [KeyInfo(KeyType.Name | KeyType.Optional)] - public const string Type = "/Type"; + { /// /// (Required; inheritable) The name of the signature handler to be used for @@ -113,6 +234,12 @@ internal PdfSignatureField(PdfDictionary dict) [KeyInfo(KeyType.TextString | KeyType.Optional)] public const string Reason = "/Reason"; + /// + /// (Optional) + /// + [KeyInfo(KeyType.TextString | KeyType.Optional)] + public const string ContactInfo = "/ContactInfo"; + /// /// Gets the KeysMeta for these keys. /// diff --git a/PdfSharpCore/Pdf.Advanced/PdfContents.cs b/PdfSharpCore/Pdf.Advanced/PdfContents.cs index c1941109..0d4ffe7d 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfContents.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfContents.cs @@ -200,7 +200,7 @@ internal override void WriteObject(PdfWriter writer) { // Save two bytes in PDF stream... if (Elements.Count == 1) - Elements[0].WriteObject(writer); + Elements[0].Write(writer); else base.WriteObject(writer); } diff --git a/PdfSharpCore/Pdf.Advanced/PdfInternals.cs b/PdfSharpCore/Pdf.Advanced/PdfInternals.cs index b921ccbd..a4a43157 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfInternals.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfInternals.cs @@ -268,7 +268,7 @@ public void WriteObject(Stream stream, PdfItem item) // Never write an encrypted object PdfWriter writer = new PdfWriter(stream, null); writer.Options = PdfWriterOptions.OmitStream; - item.WriteObject(writer); + item.Write(writer); } /// diff --git a/PdfSharpCore/Pdf.IO/PdfWriter.cs b/PdfSharpCore/Pdf.IO/PdfWriter.cs index b53d5882..41f032f4 100644 --- a/PdfSharpCore/Pdf.IO/PdfWriter.cs +++ b/PdfSharpCore/Pdf.IO/PdfWriter.cs @@ -199,7 +199,7 @@ public void Write(PdfString value) PdfStringEncoding encoding = (PdfStringEncoding)(value.Flags & PdfStringFlags.EncodingMask); string pdf = (value.Flags & PdfStringFlags.HexLiteral) == 0 ? PdfEncoders.ToStringLiteral(value.EncryptionValue, encoding == PdfStringEncoding.Unicode, SecurityHandler) : - PdfEncoders.ToHexStringLiteral(value.EncryptionValue, encoding == PdfStringEncoding.Unicode, SecurityHandler); + PdfEncoders.ToHexStringLiteral(value.EncryptionValue, encoding == PdfStringEncoding.Unicode, SecurityHandler, value.PaddingLeft); WriteRaw(pdf); _lastCat = CharCat.Delimiter; @@ -404,7 +404,7 @@ public void WriteStream(PdfDictionary value, bool omitStream) if (omitStream) { - WriteRaw(" «...stream content omitted...»\n"); // useful for debugging only + WriteRaw(" �...stream content omitted...�\n"); // useful for debugging only } else { diff --git a/PdfSharpCore/Pdf.Internal/PdfEncoders.cs b/PdfSharpCore/Pdf.Internal/PdfEncoders.cs index 7c050919..bd7d2b97 100644 --- a/PdfSharpCore/Pdf.Internal/PdfEncoders.cs +++ b/PdfSharpCore/Pdf.Internal/PdfEncoders.cs @@ -245,9 +245,9 @@ public static string ToStringLiteral(byte[] bytes, bool unicode, PdfStandardSecu /// /// Converts a raw string into a raw hexadecimal string literal, possibly encrypted. /// - public static string ToHexStringLiteral(string text, PdfStringEncoding encoding, PdfStandardSecurityHandler securityHandler) + public static string ToHexStringLiteral(string text, PdfStringEncoding encoding, PdfStandardSecurityHandler securityHandler, int paddingLeft) { - if (String.IsNullOrEmpty(text)) + if (String.IsNullOrEmpty(text) && paddingLeft == 0) return "<>"; byte[] bytes; @@ -274,6 +274,13 @@ public static string ToHexStringLiteral(string text, PdfStringEncoding encoding, throw new NotImplementedException(encoding.ToString()); } + if (bytes.Length < paddingLeft) + { + byte[] tmp = new byte[paddingLeft]; + Array.Copy(bytes, tmp, bytes.Length); + bytes = tmp; + } + byte[] agTemp = FormatStringLiteral(bytes, encoding == PdfStringEncoding.Unicode, true, true, securityHandler); return RawEncoding.GetString(agTemp, 0, agTemp.Length); } diff --git a/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs new file mode 100644 index 00000000..e700ee7c --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs @@ -0,0 +1,32 @@ +using System; +using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing.Layout; + +namespace PdfSharpCore.Pdf.Signatures +{ + internal class DefaultAppearanceHandler : ISignatureAppearanceHandler + { + public string Location { get; set; } + public string Reason { get; set; } + public string Signer { get; set; } + + + public void DrawAppearance(XGraphics gfx, XRect rect) + { + var backColor = XColor.Empty; + var defaultText = string.Format("Signed by: {0}\nLocation: {1}\nReason: {2}\nDate: {3}", Signer, Location, Reason, DateTime.Now); + + XFont font = new XFont("Verdana", 7, XFontStyle.Regular); + + XTextFormatter txtFormat = new XTextFormatter(gfx); + + var currentPosition = new XPoint(0, 0); + + txtFormat.DrawString(defaultText, + font, + new XSolidBrush(XColor.FromKnownColor(XKnownColor.Black)), + new XRect(currentPosition.X, currentPosition.Y, rect.Width - currentPosition.X, rect.Height), + XStringFormats.TopLeft); + } + } +} diff --git a/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs b/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs new file mode 100644 index 00000000..920ac48b --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography.Pkcs; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace PdfSharpCore.Pdf.Signatures +{ + public class DefaultSigner : ISigner + { + public X509Certificate2 Certificate { get; private set; } + + public DefaultSigner(X509Certificate2 Certificate) + { + this.Certificate = Certificate; + } + + public byte[] GetSignedCms(Stream stream) + { + var range = new byte[stream.Length]; + + stream.Position = 0; + stream.Read(range, 0, range.Length); + + + + var contentInfo = new ContentInfo(range); + + SignedCms signedCms = new SignedCms(contentInfo, true); + CmsSigner signer = new CmsSigner(Certificate); + signer.UnsignedAttributes.Add(new Pkcs9SigningTime()); + + signedCms.ComputeSignature(signer, true); + var bytes = signedCms.Encode(); + + return bytes; + } + + + + public string GetName() + { + return Certificate.GetNameInfo(X509NameType.SimpleName, false); + } + } +} diff --git a/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs new file mode 100644 index 00000000..2bdb99c8 --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs @@ -0,0 +1,9 @@ +using PdfSharpCore.Drawing; + +namespace PdfSharpCore.Pdf.Signatures +{ + public interface ISignatureAppearanceHandler + { + void DrawAppearance(XGraphics gfx, XRect rect); + } +} diff --git a/PdfSharpCore/Pdf.Signatures/ISigner.cs b/PdfSharpCore/Pdf.Signatures/ISigner.cs new file mode 100644 index 00000000..8885be23 --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/ISigner.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace PdfSharpCore.Pdf.Signatures +{ + public interface ISigner + { + byte[] GetSignedCms(Stream stream); + + string GetName(); + + } +} diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs new file mode 100644 index 00000000..03bdd1a1 --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs @@ -0,0 +1,138 @@ +using PdfSharpCore.Pdf; +using PdfSharpCore.Pdf.AcroForms; +using PdfSharpCore.Pdf.Advanced; +using PdfSharpCore.Pdf.Annotations; +using PdfSharpCore.Pdf.Signatures; +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography.Pkcs; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using static PdfSharpCore.Pdf.AcroForms.PdfAcroField; + +namespace PdfSharpCore.Pdf.Signatures +{ + public class IntEventArgs : EventArgs { public int Value { get; set; } } + + /// + /// Handles the signature + /// + public class PdfSignatureHandler + { + + private PositionTracker contentsTraker; + private PositionTracker rangeTracker; + private int? maximumSignatureLength; + private const int byteRangePaddingLength = 36; // the place big enough required to replace [0 0 0 0] with the correct value + + public event EventHandler SignatureSizeComputed = (s, e) => { }; + + public PdfDocument Document { get; private set; } + public PdfSignatureOptions Options { get; private set; } + private ISigner signer { get; set; } + + public void AttachToDocument(PdfDocument documentToSign) + { + this.Document = documentToSign; + this.Document.BeforeSave += AddSignatureComponents; + this.Document.AfterSave += ComputeSignatureAndRange; + + if (!maximumSignatureLength.HasValue) + { + maximumSignatureLength = signer.GetSignedCms(new MemoryStream(new byte[] { 0})).Length; + SignatureSizeComputed(this, new IntEventArgs() { Value = maximumSignatureLength.Value }); + } + } + + public PdfSignatureHandler(ISigner signer, int? signatureMaximumLength, PdfSignatureOptions options) + { + this.signer = signer; + + + this.maximumSignatureLength = signatureMaximumLength; + this.Options = options; + } + + private void ComputeSignatureAndRange(object sender, PdfDocumentEventArgs e) + { + var writer = e.Writer; + writer.Stream.Position = rangeTracker.Start; + var rangeArray = new PdfArray(new PdfInteger(0), + new PdfInteger((int)contentsTraker.Start), + new PdfInteger((int)contentsTraker.End), + new PdfInteger((int)(writer.Stream.Length - contentsTraker.End))); + rangeArray.Write(writer); + + var rangeToSign = GetRangeToSign(writer.Stream); + + var signature = signer.GetSignedCms(rangeToSign); + if (signature.Length > maximumSignatureLength) + throw new Exception("The signature length is bigger that the approximation made."); + + var hexFormated = Encoding.Default.GetBytes(FormatHex(signature)); + + writer.Stream.Position = contentsTraker.Start+1; + writer.Write(hexFormated); + } + + string FormatHex(byte[] bytes) + { + var retval = new StringBuilder(); + + for (int idx = 0; idx < bytes.Length; idx++) + retval.AppendFormat("{0:x2}", bytes[idx]); + + return retval.ToString(); + } + + private RangedStream GetRangeToSign(Stream stream) + { + return new RangedStream(stream, new List() + { + new RangedStream.Range(0, contentsTraker.Start), + new RangedStream.Range(contentsTraker.End, stream.Length - contentsTraker.End) + }); + + } + + private void AddSignatureComponents(object sender, EventArgs e) + { + var catalog = Document.Catalog; + + if (catalog.AcroForm == null) + catalog.AcroForm = new PdfAcroForm(Document); + + catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3)); + + var signature = new PdfSignatureField(Document); + + var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value); + var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0)); + + signature.Contents = paddedContents; + signature.ByteRange = paddedRange; + signature.Reason = Options.Reason; + signature.Location = Options.Location; + signature.Rectangle = new PdfRectangle(Options.Rectangle); + signature.AppearanceHandler = Options.AppearanceHandler ?? new DefaultAppearanceHandler() + { + Location = Options.Location, + Reason = Options.Reason, + Signer = signer.GetName() + }; + signature.PrepareForSave(); + + this.contentsTraker = new PositionTracker(paddedContents); + this.rangeTracker = new PositionTracker(paddedRange); + + if (!Document.Pages[0].Elements.ContainsKey(PdfPage.Keys.Annots)) + Document.Pages[0].Elements.Add(PdfPage.Keys.Annots, new PdfArray(Document)); + + (Document.Pages[0].Elements[PdfPage.Keys.Annots] as PdfArray).Elements.Add(signature); + + catalog.AcroForm.Fields.Elements.Add(signature); + + } + } +} diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs new file mode 100644 index 00000000..7333ba48 --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs @@ -0,0 +1,16 @@ +using PdfSharpCore.Drawing; +using System; +using System.Collections.Generic; +using System.Text; + +namespace PdfSharpCore.Pdf.Signatures +{ + public class PdfSignatureOptions + { + public ISignatureAppearanceHandler AppearanceHandler { get; set; } + public string ContactInfo { get; set; } + public string Location { get; set; } + public string Reason { get; set; } + public XRect Rectangle { get; set; } + } +} diff --git a/PdfSharpCore/Pdf.Signatures/PositionTracker.cs b/PdfSharpCore/Pdf.Signatures/PositionTracker.cs new file mode 100644 index 00000000..dd2406fe --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/PositionTracker.cs @@ -0,0 +1,18 @@ +namespace PdfSharpCore.Pdf.Signatures +{ + internal class PositionTracker + { + public PdfItem Item { get; private set; } + public long Start { get; private set; } + public long End { get; private set; } + + public PositionTracker(PdfItem item) + { + Item = item; + Item.BeforeWrite += (s, e) => + this.Start = e.Position; + Item.AfterWrite += (s, e) => + this.End = e.Position; + } + } +} diff --git a/PdfSharpCore/Pdf.Signatures/RangedStream.cs b/PdfSharpCore/Pdf.Signatures/RangedStream.cs new file mode 100644 index 00000000..9000f419 --- /dev/null +++ b/PdfSharpCore/Pdf.Signatures/RangedStream.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace PdfSharpCore.Pdf.Signatures +{ + public class RangedStream : Stream + { + private Range[] ranges; + + public class Range + { + + public Range(long offset, long length) + { + this.Offset = offset; + this.Length = length; + } + public long Offset { get; set; } + public long Length { get; set; } + } + + private Stream stream { get; set; } + + + public RangedStream(Stream originalStrem, List ranges) + { + this.stream = originalStrem; + + long previousPosition = 0; + + this.ranges = ranges.OrderBy(item => item.Offset).ToArray(); + foreach (var range in ranges) + { + if (range.Offset < previousPosition) + throw new Exception("Ranges are not continuous"); + previousPosition = range.Offset + range.Length ; + } + } + + + public override bool CanRead + { + get + { + throw new NotImplementedException(); + } + } + + public override bool CanSeek + { + get + { + throw new NotImplementedException(); + } + } + + public override bool CanWrite + { + get + { + return false; + } + } + + public override long Length + { + get + { + return ranges.Sum(item => item.Length); + } + } + + + private IEnumerable GetPreviousRanges(long position) + { + return ranges.Where(item => item.Offset < position && item.Offset + item.Length < position); + } + + private Range GetCurrentRange(long position) + { + return ranges.FirstOrDefault(item => item.Offset <= position && item.Offset + item.Length > position); + } + + + + public override long Position + { + get + { + return GetPreviousRanges(stream.Position).Sum(item => item.Length) + stream.Position - GetCurrentRange(stream.Position).Offset; + } + + set + { + Range currentRange = null; + List previousRanges = new List(); + long maxPosition = 0; + foreach (var range in ranges) + { + currentRange = range; + maxPosition += range.Length; + if (maxPosition > value) + break; + previousRanges.Add(range); + } + + long positionInCurrentRange = value - previousRanges.Sum(item => item.Length); + stream.Position = currentRange.Offset + positionInCurrentRange; + } + } + + + + public override void Flush() + { + throw new NotImplementedException(); + } + + public override int Read(byte[] buffer, int offset, int count) + { + + var length = stream.Length; + int retVal = 0; + for (int i = 0; i < count; i++) + { + + if (stream.Position == length) + { + break; + } + + PerformSkipIfNeeded(); + retVal += stream.Read(buffer, offset++, 1); + + } + + return retVal; + } + + + private void PerformSkipIfNeeded() + { + var currentRange = GetCurrentRange(stream.Position); + + if (currentRange == null) + stream.Position = GetNextRange().Offset; + } + + private Range GetNextRange() + { + return ranges.OrderBy(item => item.Offset).First(item => item.Offset > stream.Position); + } + + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotImplementedException(); + } + + public override void SetLength(long value) + { + throw new NotImplementedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotImplementedException(); + } + } +} diff --git a/PdfSharpCore/Pdf/PdfArray.cs b/PdfSharpCore/Pdf/PdfArray.cs index 0b43ce0c..23d21018 100644 --- a/PdfSharpCore/Pdf/PdfArray.cs +++ b/PdfSharpCore/Pdf/PdfArray.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -70,6 +70,19 @@ public PdfArray(PdfDocument document, params PdfItem[] items) Elements.Add(item); } + + public PdfArray(params PdfItem[] items) + { + foreach (PdfItem item in items) + Elements.Add(item); + } + + public PdfArray(PdfDocument document, int paddingRight, params PdfItem[] items) + : this(document, items) + { + this.PaddingRight = paddingRight; + } + /// /// Initializes a new instance from an existing dictionary. Used for object type transformation. /// @@ -118,6 +131,8 @@ public ArrayElements Elements get { return _elements ?? (_elements = new ArrayElements(this)); } } + public int PaddingRight { get; private set; } + /// /// Returns an enumerator that iterates through a collection. /// @@ -152,9 +167,17 @@ internal override void WriteObject(PdfWriter writer) for (int idx = 0; idx < count; idx++) { PdfItem value = Elements[idx]; - value.WriteObject(writer); + value.Write(writer); } writer.WriteEndObject(); + if (PaddingRight > 0) + { + var bytes = new byte[PaddingRight]; + for (int i = 0; i < PaddingRight; i++) + bytes[i] = 32; + + writer.Write(bytes); + } } /// diff --git a/PdfSharpCore/Pdf/PdfDictionary.cs b/PdfSharpCore/Pdf/PdfDictionary.cs index 65a529f2..9c076334 100644 --- a/PdfSharpCore/Pdf/PdfDictionary.cs +++ b/PdfSharpCore/Pdf/PdfDictionary.cs @@ -235,8 +235,8 @@ internal virtual void WriteDictionaryElement(PdfWriter writer, PdfName key) Debug.Assert(false, "Check when we come here."); } #endif - key.WriteObject(writer); - item.WriteObject(writer); + key.Write(writer); + item.Write(writer); writer.NewLine(); } diff --git a/PdfSharpCore/Pdf/PdfDocument.cs b/PdfSharpCore/Pdf/PdfDocument.cs index b7a355b8..0c3a72cd 100644 --- a/PdfSharpCore/Pdf/PdfDocument.cs +++ b/PdfSharpCore/Pdf/PdfDocument.cs @@ -40,12 +40,19 @@ namespace PdfSharpCore.Pdf { + internal class PdfDocumentEventArgs : EventArgs + { + public PdfWriter Writer { get; set; } + } + /// /// Represents a PDF document. /// [DebuggerDisplay("(Name={Name})")] // A name makes debugging easier public sealed class PdfDocument : PdfObject, IDisposable { + internal event EventHandler BeforeSave = (s, e) => { }; + internal event EventHandler AfterSave = (s, e) => { }; internal DocumentState _state; internal PdfDocumentOpenMode _openMode; @@ -245,7 +252,7 @@ public void Save(string path) throw new InvalidOperationException(PSSR.CannotModify); - using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) + using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) { Save(stream); } @@ -304,6 +311,8 @@ public void Save(Stream stream) /// void DoSave(PdfWriter writer) { + this.BeforeSave(this, EventArgs.Empty); + if (_pages == null || _pages.Count == 0) { if (_outStream != null) @@ -354,13 +363,13 @@ void DoSave(PdfWriter writer) GetType(); #endif iref.Position = writer.Position; - iref.Value.WriteObject(writer); + iref.Value.Write(writer); } var startxref = writer.Position; _irefTable.WriteObject(writer); writer.WriteRaw("trailer\n"); _trailer.Elements.SetInteger("/Size", count + 1); - _trailer.WriteObject(writer); + _trailer.Write(writer); writer.WriteEof(this, startxref); //if (encrypt) @@ -373,6 +382,7 @@ void DoSave(PdfWriter writer) { if (writer != null) { + this.AfterSave(this, new PdfDocumentEventArgs() { Writer = writer }); writer.Stream.Flush(); // DO NOT CLOSE WRITER HERE //writer.Close(); diff --git a/PdfSharpCore/Pdf/PdfItem.cs b/PdfSharpCore/Pdf/PdfItem.cs index 6abfb375..6385d6bb 100644 --- a/PdfSharpCore/Pdf/PdfItem.cs +++ b/PdfSharpCore/Pdf/PdfItem.cs @@ -32,12 +32,19 @@ namespace PdfSharpCore.Pdf { + public class PdfItemEventArgs : EventArgs + { + public long Position { get; set; } + } + /// /// The base class of all PDF objects and simple PDF types. /// public abstract class PdfItem : ICloneable { // All simple types (i.e. derived from PdfItem but not from PdfObject) must be immutable. + internal event EventHandler BeforeWrite; + internal event EventHandler AfterWrite; object ICloneable.Clone() { @@ -65,5 +72,14 @@ protected virtual object Copy() /// to the specified PdfWriter. /// internal abstract void WriteObject(PdfWriter writer); + + internal void Write(PdfWriter writer) + { + var startPosition = writer.Layout == PdfWriterLayout.Verbose ? writer.Position + 1 : writer.Position; + + this.BeforeWrite?.Invoke(this, new PdfItemEventArgs() { Position = startPosition }); + WriteObject(writer); + this.AfterWrite?.Invoke(this, new PdfItemEventArgs() { Position = writer.Position }); + } } } diff --git a/PdfSharpCore/Pdf/PdfString.cs b/PdfSharpCore/Pdf/PdfString.cs index 2ed2acbe..a66d5ce9 100644 --- a/PdfSharpCore/Pdf/PdfString.cs +++ b/PdfSharpCore/Pdf/PdfString.cs @@ -166,10 +166,11 @@ public PdfString(string value, PdfStringEncoding encoding) _flags = (PdfStringFlags)encoding; } - internal PdfString(string value, PdfStringFlags flags) + internal PdfString(string value, PdfStringFlags flags, int paddingLeft = 0) { _value = value; _flags = flags; + this.PaddingLeft = paddingLeft; } /// @@ -246,6 +247,8 @@ private byte[] GetBytesFromEncoding() } } + public int PaddingLeft { get; private set; } + /// /// Returns the string. /// @@ -255,7 +258,7 @@ public override string ToString() PdfStringEncoding encoding = (PdfStringEncoding)(_flags & PdfStringFlags.EncodingMask); string pdf = (_flags & PdfStringFlags.HexLiteral) == 0 ? PdfEncoders.ToStringLiteral(_value, encoding, null) : - PdfEncoders.ToHexStringLiteral(_value, encoding, null); + PdfEncoders.ToHexStringLiteral(_value, encoding, null, PaddingLeft); return pdf; #else return _value; diff --git a/PdfSharpCore/PdfSharpCore.csproj b/PdfSharpCore/PdfSharpCore.csproj index 2cd8a3a5..dcec452d 100644 --- a/PdfSharpCore/PdfSharpCore.csproj +++ b/PdfSharpCore/PdfSharpCore.csproj @@ -48,6 +48,7 @@ PdfSharpCore is a partial port of PdfSharp.Xamarin for .NET Core Additionally Mi + From 5eacdaf97f159b7c0a6cfe07ad28741b38b002cc Mon Sep 17 00:00:00 2001 From: Patrick Ammann Date: Thu, 2 Jun 2022 09:47:39 +0200 Subject: [PATCH 02/10] feat: add test project (not for merge) --- PdfSharpCore.sln | 13 ++- SignatureTestConsole/Program.cs | 84 ++++++++++++++++++ .../SignatureTestConsole.csproj | 21 +++++ SignatureTestConsole/TestFiles/doc1.pdf | Bin 0 -> 12903 bytes SignatureTestConsole/TestFiles/logo.jpg | Bin 0 -> 66790 bytes 5 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 SignatureTestConsole/Program.cs create mode 100644 SignatureTestConsole/SignatureTestConsole.csproj create mode 100644 SignatureTestConsole/TestFiles/doc1.pdf create mode 100644 SignatureTestConsole/TestFiles/logo.jpg diff --git a/PdfSharpCore.sln b/PdfSharpCore.sln index 4a722d34..187e284e 100644 --- a/PdfSharpCore.sln +++ b/PdfSharpCore.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29911.84 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32519.379 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfSharpCore", "PdfSharpCore\PdfSharpCore.csproj", "{4005DEBC-75F8-48DA-BBCC-353E17872B3E}" EndProject @@ -20,6 +20,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfSharpCore.Test", "PdfSha EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleApp", "SampleApp\SampleApp.csproj", "{E2F17280-6C54-4711-AF1C-3286D2C45526}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SignatureTestConsole", "SignatureTestConsole\SignatureTestConsole.csproj", "{272E99C1-3210-497B-8CCE-D561E353FC13}" + ProjectSection(ProjectDependencies) = postProject + {4005DEBC-75F8-48DA-BBCC-353E17872B3E} = {4005DEBC-75F8-48DA-BBCC-353E17872B3E} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -46,6 +51,10 @@ Global {A862C0CE-C095-459C-A32B-8FCDD15A93BF}.Debug|Any CPU.Build.0 = Debug|Any CPU {A862C0CE-C095-459C-A32B-8FCDD15A93BF}.Release|Any CPU.ActiveCfg = Release|Any CPU {A862C0CE-C095-459C-A32B-8FCDD15A93BF}.Release|Any CPU.Build.0 = Release|Any CPU + {272E99C1-3210-497B-8CCE-D561E353FC13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {272E99C1-3210-497B-8CCE-D561E353FC13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {272E99C1-3210-497B-8CCE-D561E353FC13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {272E99C1-3210-497B-8CCE-D561E353FC13}.Release|Any CPU.Build.0 = Release|Any CPU {E2F17280-6C54-4711-AF1C-3286D2C45526}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E2F17280-6C54-4711-AF1C-3286D2C45526}.Debug|Any CPU.Build.0 = Debug|Any CPU {E2F17280-6C54-4711-AF1C-3286D2C45526}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/SignatureTestConsole/Program.cs b/SignatureTestConsole/Program.cs new file mode 100644 index 00000000..1ff85b28 --- /dev/null +++ b/SignatureTestConsole/Program.cs @@ -0,0 +1,84 @@ +using PdfSharpCore.Drawing; +using PdfSharpCore.Pdf; +using System.Security.Cryptography.X509Certificates; +using PdfSharpCore.Pdf.IO; +using PdfSharpCore.Drawing.Layout; +using PdfSharpCore.Pdf.Signatures; +using System; + +namespace TestConsole +{ + class Program + { + public static void Main(string[] args) + { + Program.CreateAndSign(); + Program.SignExisting(); + } + + private static void CreateAndSign() + { + string text = "CreateAndSign.pdf"; + XFont font = new XFont("Verdana", 10.0, XFontStyle.Regular); + PdfDocument pdfDocument = new PdfDocument(); + PdfPage pdfPage = pdfDocument.AddPage(); + XGraphics xGraphics = XGraphics.FromPdfPage(pdfPage); + XRect layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width, pdfPage.Height); + xGraphics.DrawString("Sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter); + PdfSignatureOptions options = new PdfSignatureOptions + { + ContactInfo = "Contact Info", + Location = "Paris", + Reason = "Test signatures", + Rectangle = new XRect(36.0, 700.0, 200.0, 50.0) + }; + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler( new DefaultSigner(Program.GetCertificate()), null, options); + pdfSignatureHandler.AttachToDocument(pdfDocument); + pdfDocument.Save(text); + } + private static void SignExisting() + { + string text = string.Format("SignExisting.pdf", new object[0]); + PdfDocument pdfDocument = PdfReader.Open("TestFiles\\doc1.pdf"); + PdfSignatureOptions options = new PdfSignatureOptions + { + ContactInfo = "Contact Info", + Location = "Paris", + Reason = "Test signatures", + Rectangle = new XRect(36.0, 735.0, 200.0, 50.0), + AppearanceHandler = new Program.SignAppearenceHandler() + }; + + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(new DefaultSigner(Program.GetCertificate()), null, options); + pdfSignatureHandler.AttachToDocument(pdfDocument); + pdfDocument.Save(text); + } + + private static X509Certificate2 GetCertificate() + { + // add yours here + return new X509Certificate2("TestFiles\\myself.pfx", "1234", X509KeyStorageFlags.Exportable); + } + + private class SignAppearenceHandler : ISignatureAppearanceHandler + { + private XImage Image = XImage.FromFile("TestFiles\\logo.jpg"); + public void DrawAppearance(XGraphics gfx, XRect rect) + { + XColor empty = XColor.Empty; + string text = "Signed by Napoleon \nLocation: Paris \nDate: " + DateTime.Now.ToString(); + XFont font = new XFont("Verdana", 7.0, XFontStyle.Regular); + XTextFormatter xTextFormatter = new XTextFormatter(gfx); + int num = this.Image.PixelWidth / this.Image.PixelHeight; + XPoint xPoint = new XPoint(0.0, 0.0); + bool flag = this.Image != null; + if (flag) + { + gfx.DrawImage(this.Image, xPoint.X, xPoint.Y, rect.Width / 4.0, rect.Width / 4.0 / (double)num); + xPoint = new XPoint(rect.Width / 4.0, 0.0); + } + xTextFormatter.DrawString(text, font, new XSolidBrush(XColor.FromKnownColor(XKnownColor.Black)), new XRect(xPoint.X, xPoint.Y, rect.Width - xPoint.X, rect.Height), XStringFormats.TopLeft); + } + } + } +} diff --git a/SignatureTestConsole/SignatureTestConsole.csproj b/SignatureTestConsole/SignatureTestConsole.csproj new file mode 100644 index 00000000..cdf8ea35 --- /dev/null +++ b/SignatureTestConsole/SignatureTestConsole.csproj @@ -0,0 +1,21 @@ + + + + Exe + netcoreapp3.1;net5.0;net6.0 + + + + + + + + + Always + + + Always + + + + diff --git a/SignatureTestConsole/TestFiles/doc1.pdf b/SignatureTestConsole/TestFiles/doc1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2838868eb497197d7123a7b06279f2a241c89563 GIT binary patch literal 12903 zcmc(Gc|4SF_kU$4Yxat=7YF6e9aBOP1_QL`ab> zYsBv!`mE3M{JzickKgAzX0H3b&zy5z=Q`(H?{ntWiAz^WMGzt+LdrF`)iX=V1p=P2 zw~!cDkRb|#wRb^-AVP4kkO&wI76OBKJy94d7c2_o>|%rB1Gp72D5N`%%LeI=k^q4r z!eDV>C>VkOK_C)Pn1l!v^yk-~CEV?uaS}ohh$sk)vUWk+VE@ee>mHC$v3Ej&u=ckB zZU|Hy3*eJoobj0`CXZ3FD+AF&?vKUq)S#uJIQM%m!ZsEBk&I=R^WGTlkofM9^29?m`n zKCURhp1)ZBS?zI3{3qX^sQH_>T|Ch4AP7!f4SV1KnTX)DH~T~VQ|5nGd7KXaH|2lV z9qkT;Fct*=&El#U7Y|oJ_mfD*#j-v~SPA86Z;jGZRRHJ!37{BYkZ7zc5`#ip`v62> zZvb5jWn+(2aPbD2fPvXWAy5!P9C~60T^y(TA8yq{VO=~h)+p?s7E<n-W3)=l}j4EId1h+6QaQ-0G1C+PBu(~sV zO$w(M#nX#APR-L@oQ53EXQcnE%Wy9Ew=Vn3X#w^PnDUqVG*M_f_gerYi{W&|x&xWO znbZyVQ!pUKnF0*L*pZ%C&<;x~d}<&ATT-YfSO_kT0Q@5c5fT>>g@FugKvG~ZOcV?j z0n!W{$TV;maIXS<#DE9fJp!OXfh)iR2WU7R+;?yY@IlCc3>-+64M?v6e*nPz(&Qh6 z8eD|@kH-5W#7=Sg)YX4bfw;0p0w?*O^*iFfQ5_fWN+_%~#@^N41@p`O@>px!vBG%( z2wwmuUDZ(bcDLL?2q*$azzN_Opb#+bQN;;qhXui)C-=a73MXe(5H1P^3BrJ!4uL~~ z0r2R_nZ>P$OZ!k9Pj62R{kJ^;GBavg1N4U}10NY}rfIJg+%PbW@TQC&$L zZSM{e{tazx?a?-vUmypvLfP4)NdY*tvA1^r^>jkBb_V9f3G4e{0b}6`2>^FN!g_!J zaD;q7yz)Sl3^6o3IROa>U?Vlw2ov;21k z2vGdtHe_Y{hXhO%CviH$VSpU)BqD;NosOcAQyLt6GV{qOs`QI?y4uNz0RNIzIgvdX zMHPS1#7<}@qbU58cB<*=2>neKal&^pii-SN1A4OV$tbGwYrYemMNUT1UpfPOKHWJm zB7Us_hn&z(Mp5No^PS8Nz#fhdw+3LR-|d038Q@sZ?;f%Cz~Iu~iT6*ufV00n8ufdC zxVpH404dz(e+NCq|C`eQ#3}9s|2hZ?NGuBX`0t?LFA)u3!*8|3A7T7kbmD4R00;ga z@Tb&2hdDqwP0xP?5fBbMPbx)y4=eZ6V)0Z>T%?~M-5=Nk%prUOWCAmR0T2flF%cDm znTd*-013?u0X6}Wn;8OPA_|3>A)qF3akv>m+ysgcF%tuu0J+jk4EPQPT%dq}sF@h- zgi{P*0uu*VfLVa=%>H2zJ1KYm$E=4l0QkT3+-b%DAl)4&0MxR$$T+QKmC*na;4nz| zH|Ghe;Vk;Q;ZN4VQGSO_5DsNeyz?g~{IkjRBzOH=6XAZr0eB4ja7JQ$eg!p<@7#gk zRJcs(j#2`C5ZmCYQQ==@mKaO~_QxXx1O>w&qJK&Q-WlI~ef1cufMcXR_48;7v5v$n}uy&U$2=yTD6!F&Rs657!4?{Gxv2?0-dpppa%y@ zc`cAyd@C9knwP={NtI{&%vPW$y8`hTRnGPAG6>bXH8owWA+~IWxP4DsMD!l`g1?dl zC0-ZfX&_Ji2}7$noM0czQQi zqU9Xzr8P%$(FUJ|9$#Bz4b$#{-qm>1IrRWGnxM-))Gy{uV|y63k)Z;vnskeFwb z5j+Y*dy^bp+_Ip&^wFEky)nR>jy(|3B0TH1C+tnBy|u9#scI=1Cd62oimhzAur9I^ zCcS=c(|8s=e?;-<4r3)gI<)4a{1~ZAyiM$G$Vc{P_#KVhwek-Wv_3|h=M7ISy)@EH zn7B-p8df{-Ha%ntRZ6-lk49Vy(Fn|a%={HeZA$b_Y|f`wLv{6hN~CGKexL>tK1Id~Zj*nOOKM;ZSvP-hN{yplP33 zmw_W}m`hkkSPe3=l$cvtsN=KXr|&yaE>S$fQ+G>-ieJ#~qv#F1Bqe1J(QAl0NmrYz zE{-l-hpMvrtaLIF{B4R}Yb(jx8OxDYNtgZjn=x7i7a(6}wlJ9MM7P z_XB8(17#;Ru5E={{yUCHz&X9f4DoF`+eWx{r9@VvYkOqLVpQ*R6p8{T-A zBI9!yb+}UWIF%_>ukHn70Y?|N9$O0o^vOelu5+DmnAz(S40 z6Oo9I6c)biN3Ubepgs1)6N?0k@ZKU4CT6!1PdQ|o?GQMXQAA{4f!6MO9FcfhR8dLc z*@j@f3=bojSD)HPrWR+`NW`g=!!I@Ui(P`Cw|Q6;O^lj{Wk#GFYu+(TNK|mY8ttpE zsHh-ec=}jMce;PXkYzoo5?&7X3^!TC_rqit*X86CzbR^B2;qaXg&azIc`GbjbX3GB zUf5@1NzKglGuDdlSZlm~7~nZASxuV~8mrqq#9Z+$RQwTz?yHarw#UKSE2F+v&u{9) zOb;UJ*cv^gU$=jxcAdTRCHPLE2fY5(YeFr{SlA|}_&%6ENs28>aN1pgpfKfH2q9JW z6KOf)g4g^{JZ_t5Ar_$)%XiZ#f{Cp!UUirxva-;sq?DUA4R&Knfcq6S8Ky;$UtnGP zVtB^bTX^C8^rK1TpzoRzag9?#@(Z0`RYLbvNQuW3hgp_SqqNYo*GIUZ%{AkZ}cQ`mhT5LqqvLIH8T1WDQcx+jXnnsP$##0Vs z*RY(f8DkIg(r49anWByMhcOqEO0)9k)QVwdFjO*^2wNHVNB-~c$oTXfMutQy;6u>B zy6|@-)H`+0+F9=_%ItPO65Z!5>%ZQ_oZfE;kyavlNhio5{V)pd|FuW%mZxP>R;Gx- z<*I?W9=W%l(~UwyCy=Ik&L-)U$0XSii-x05Ek=}~4_xymbh|J47x5H|QVo>P8mvx9 zCZvpRfAdVJpM*}uQak_feEcT)19={0{PVHozQ~|z*~?FyCq&DNg+5a5DRw$p zYf(6<@CjJYGpUh7`C zJwn1T|HJCoeb1~~Cy5!#6_5z}j&{7hZTFzqW1xQ8&9iprJk?XjTI6Egpk>&ikx3J4$)MKEVC@ z8iSYY55Jb!uH-?MV?3X^E*@3BPh_f@sTJAI`%^~fBTPBKz$MxG(lM>2Ph#NVD(+*LNl6>V6_tVQu%8^J9C!`U4d6wCI!b$Hs;j!(e zi}Th{Vk*-ORRpJSXKm-JiQx=C{Rm}nUM$O^?xm2HSs2$h@`jw^`Df2H+11ralw~Ap z$86ZReWB{p7iEe)y+*hs3CY@^q}1X2AtY={jGFxf6K2T;U`di5rUPPIVHI9CO@Suz zPQ&{tWFdnN3o1Vi+{V7Cak+BTr0Rfn1+t=BRqqU=lU>EqDV_3emND`98qfx;^_G41 z`F>~f{L;Ri#JDNTxdEpx-3#f^L=|N>)=LhrpsZ6yh#~85q=6-O=YuV+^=@i8<-?=Z zEi2rNttL%AjTzo;F9~gDzn@JFGf6J36T#3>F8ai{wWlwbks=wj5X&o6Q0lhzW8|0t`#|j z3~45{bQ1TPR?*dNW9e`8h?2~PpeIhJ7%DB3Y^!w89awkyd@N?I{eD>H4+Kspod2GLz zHhm^w&p6eF(tt1w#6*?Jf&kCjaSH#ibMqm&pq7^>QVo3}_V}TJvW3>7Y6*9DuC>kh zb(`FPhMKpQuZd{$SAv?I9R>vs`9&W7haAS@w?g?IIrAnZ2$(5`DErFY*rwg2Oc>QxiXXUWX(ZDYkbQ zcfra!Vp)%m>RQ!R7AXU)SN6Op8aB~a6`UU8ee#2}@82xiv~E`#9Q}8l_ytnYz2FO3hUpHwT@~O%+GI_S? ztyw*cdp{fY98IN3Ig|gwwS>k-A*G6nJ2h~hox4j3S#Hoq-@JDF7?mp&;-wuYCc;OU zQI?%e?A+DD50-N+9h+;Ke+v;~FS^>Xqe(6(wbeHC>b)JaqcQ*O+uX&>yJ}B8x)Ys8 zlP%;i(bj`RH#E~8NTm2}`roYb2|D;ci(ve9ng*yh6}bv|Zf*{# ze*617PwymFKjm|a$zh(mp-B_$`i28+*71H-Y zoIc{@P4=u@f~PVrVX~!DvAgrz>^wH}+~m-kX@lovg(w>#SJb0)M}1to1g+L!p59Op6BwK-ybI2H5~1){H&Cn&nI^${fT!N@Lq z0(mytN;{c$qTu-UizA(JILwbRnwX~6`Gaig*@EuiAzoeQeX@#|*HqUUAOl3&5oSbIt_{~DPp|V=K+9^uB=Ot<_b3N1pN)kMV zb@qFR5yqJdbQdk8D>mb=;$83Tq|{#hQaBFr8qW<)-ZmYqP`n8XP&5YTV%!gx60ttb zY0=ArAx-MJy{oy~j@+7#PaU5ASijHQddc3<>ikQ$m!lob^St`%=VR&B6Tiro z&>0*+dxeS}?CQH?2=eE>&B40n;1qA(^ZhTfr?rc1_oBq9RPam0gANEWec(#F>%Jj~ z$87TVi>u>qZXa|$`=F!lVYtd|xJqESDu8=?C9Vpn`L%Lfx$1TAY5gH%8;{iicGxIq zk7n$M!HZsHT@U;We)J$F#=?v`snv}<7q+etl1!ak<|>f+;ghCX#&yU(Wly#=Hfx-x zDAjK=dyCD#-FFTCv7(u}npV&*-1~iYm8$aRt~W2PxzP>eVG5tK_u2?U2gle$+akE7 zSj%1$UzlLmy!DCj!ZW98l6bMahrXgZIXUBtP6az3f2fgrs`X1ue?q<^m97KHekhcF zU4O%L%02zUx9I8CoK~*rp+bwWBHDi9VcTdA?Jh@rv^Y=Y!$FQOq7S#a6y9GU^U9>{ zP+A-d39O-Zne9N(XvMb>SF8j{*+Q1^FK{qlPUV@Y_V{Lw+0{IUG;yw+gjsNx4oLa zRv+rQyqc+s$o+7$Eui8-njmef?Lj-~1uG4|;ok7xihQ{G!&_yv7IWF65aswD!}R44 z+Lb%t0)BRa8jUS1=S3B7SI(qNLCocwMQl# znSb?_-_EmzQ8JWi`HO9I&{SrPI}hfPN5>6+a29Td?QYj@tSjaB z3sFrk9u9nSOP{|@ZFz$SDm-D-JA7ng+yAj%7yB$iM8cay9bo}^Ve`3`e=VbbQ2(XZ z0KY0l`3Ja%Nn7H=1r`dD@M6^$DPkVF#x4H3#mOGyfuQ{xinmH;8z7NLchFUvc4^{NupvFr;;y2r2iydw(71Q`TUVaEXrC+ z|M5#W-}~dTvV-yzuB_g6vSm|G!)w|U0oSl!58!>&Z@b;*#SUKvbnHJf5li0vK07Hn zQoPJox$^?T)vER4l7w)tRkWvP-4#vWFxp+2UA2`TBgON|pFjY6B zJf%+#x$;!j?{e@g@>`!sYjHR>cUwp&nmUsHKZ^>7F}mkc>%!WxW;mc6eR4ZnFOLn0&3XB2SSqVB2zJj#V_H zX7nM-;oOeJQv#XLKA4ej!P&8U*2j7#58KxcqBS&`HN=WSkW?g$k3wYCF3u7_C|E?K z@f&C;TQEo}CzuprA80D(aK`#Ly%|!)Fi8oLvGW!_?`(LXl7$|Ts;FKE+3F}uHhb^@=Dqi)oj zxSA>Jh@5`IN36Frs;{9J%-C*eA$jj|tgiuwkd4T@@Y@3fflAUvDzyv;JDXToBeo3Y zXy;(NiA@zE(o{(lrqRtWR`A>-3v-F5Kd`AGPBCRTGZAfwy(s-`e3`FY9g+LReo19g zs;kkP@e%E(Fq@(4m&-CYIHGJNI_hUE4=xYqw?=%YkHNEKowJB`S%;zNvx4%*&@CQo zidED;ql}fa;zxwrW9D6car<=5gykIvQ4Q^H#;us8?yZZwmUNfikX{S9-oCpo;I@8d z^*Cs@aNTX|gJ5$ua2YM0FxGL)%>59q)4bvrBsvr7Du>TYM}RLS`5l?z#XKtJ+%1GYV!g(!90DV#Y$BC7|Nov)$o$ts_myUDITE@8Rl@)%P{tn2Rsyic8N* zNo4I)Y-LP3K zLhpy$B>G>z_^eSXKNx)0FUq=~f{8JqfT~Z$kKT>!>wWM6Xu1`{+|4glf<(_|e>FOU z)R{lA=xe)Or<4^xM*2;FXS4RnesU?*ZhvpzTv}WHYohNR68?v6RW35^m%ko^`&bXM z&30A8MCr3Q@nfGIlWDgG`7&{xm6M2Fn=U+~a`C-NtM!24`0R~?)sSN2^Es?bUS|d` z?7Z1N6sCwoO(9CNKHyn#6xrPF-}LAE(WIT2)Yf7wB>bIqQPM$s=86jPQM*(}FVb7# z-FA8Mq-}|9+_RHj9kUz<=AC2BO>-&^|C}dGFcF^N>k`_g84@{QPCHl>tG9=fn~Lj-ab=J zE|l<`Vh|6c{_YY$lzY#pma#w%dafqa`o~J^ zj_&PiGO^`*i55vL)ncE)gG4@!eQTD-e_I0Y;RLhyHUq&(SJ;~SZ z3p^!zxNE}3?7`gP7dLLvcU@xfsB5ce<_7bk2Sb_okBepER`59c<(&mc>Lm4;fA1=$ zXZWspqa!=MxnpLyDVFYsY`3&di+`1u(0AwZ?^Ijl)Ia^Do@;p58nnnP9d92W$sP&S z`wF+t=E_bq%oWVWtT{*@AI_||LA*%X4=Aw7Ny9U?93vrO{ytm2tl7y5`t)FI1_rP4Da>vX_&AEnRsfex?b z^^J~Ed$q%U)HSt7n>-$>Vx3j)!Ond0WoI_FKkJmY+ah&aa&tQL+*HFg_vUw7+$ow3 z;ma?DZfeT5>=2d49+4Ri#>FET^7{{5?@h4CIkwofx{ux3yR_O?S)MrcQ@f z%-w8#PJK5;zZ;pk)O29hwChKn_;LEf%}?$zs?>*jqUL1Fy!RMJ*{0upHjBI;4xb;~ zLKgYHZqfW9S^NBRlibQojm%%l3x&akIlq0X#2)!Zj=XbY4@IMd$mj$~sBioAoc5lSsQ{b@uLiXTG0jQPp&d zF)M2w9R0G$<1@qqwgOm3p2%f+z;6% zdY;hD*q*jz+*476cD7;c!xC6nBkIkl$znc|;|n*#h#|x>VYkA(@tKgU&5m;n>k+e8 zKoi~;tU@6_i5rx_B+9d3D}DurmN}1F9l1S@oy>uDV|b5!3ptnxiD)(@Z)Yn~NeObj zs354Yp>w(8tGyws)gv!9DgH;H+8fuye(DOzL~KvX-j_M^T#003xt~u^<&ad9x+K^? zC0QcR4#`?Cxrj6$SF7YW9wn}^yu;b#$w$#46tq3Z-7~Z78cX@ojC|p}nCStdQ#?)S zyHzz&$~7K0zSpen9(rzCJMBKKr27|_2**_JMZ_iCKoY-Uug%CH$>Kodt|qMyig_l+ zcc#Cc0mmp4>_CobNER1Wo?LJ(CT(RgrL;$KuE6ReUu8A>rhOB}2Bz~6-rwc6nkV6C z(Qlhy7jLo9)m~ARremg5bDFEWGc`8ZU3{Qc)Kuc zc>1;JUhQy;cp&+fdP<})G~(sL7pj(ND@wQA(r8_BC=-DUez0bvmcCnj78}dGsxuql zRt`8)<^Fjtp}~X8LRjX}y}4Us2dfs%(+zVZF`1lM=R>_OB^A8u8n#`yC3exS!{&Be zexTk@3YJA-g|UOzY%3LWgT+HildBeK!s0Z#I-Y_wqDk0Ore>l*q zEq=f6NGQOdVEoa{7Z#lxt5c;H+9cj!d002??*;U%f=@L|F zW=d{!aqlWs3w-6-uL&D?I}=^0efX2k92PRBKbzNQ=uQ5C&K#)|p1ksGy?K>%jg07h z-9eVduFP|T-Mu>B>YvjeY7VFIgfHE_jXwTi}WnGOQWqkO;-csoJ`U&6s8vC^o%_9O1>lK`f;A+{+)$x;oW2Y zi1R46!lFV5C&AU^G8GX=C8DeG#N$lPl!=7uZ?BKgV%R)7*}JzbT;GfoqFZHMe=h9U zyeeuG&b52#)@@fv4s{eawLQF};d$PnER>|_7*F&Q*6x3&rN|ot^q2u1xlmG|q3qWS zBnpSa;2>MjZ!{5Hdj{?WLjO)fK!Kikj5m5y&SQO};RS;7U7l%R=fF88}k>jK%^Q1%Y_iju*7Z;$n^S2foec*p*;LLr} X2#mzIpEv*lg@YlaTwKaJDy07h$d|6GoVJz8;P((5+vV~+VGIrTQ)~sVF zAq|9Q{nIp=+Et}%1Zwfuh9^}Bx8_qW_mr%y4!*{k|S`T!Xj z8E_B$0Zx|yA-zy{7XUCZ0WJanKn;G!0+566$iSb!T&KSP<|{#to?+k(3h<8npJwER zZh?Wm>M}Ck0n+wPJ`T>(jy_&8q4vHqa?-LgfF>-|*WS_7IZ(jC+11@!OK7_pEhOOX zq$OmjWFl+gtLyCMZW!+Gd^7y|Eyr+AM>QuQm^K5gW~h3om#>#|puIq-*M08*^-wLL zzx1vSzW;MuMo8cShJdb*zq5dnw6c_=tem2Nikh^XlCp}Lill%% z_*q6)RYqP`N>)u>NkLs!Uf^$+5I7u-roWSmy7?9Tzl{cd(h~X`Um+nO(jf}cKK`yU za%yU7GP3eA^72w(4XJ=I??C%dDenN`zx46fPOdlyIQqN$2Dl;B&(#Ts3!mSe*V4o%9mu7^~1AY8&`S{%byC~dn^9l3`aP#pM z(AE9R(hG>2*gLv=|G9bLuWLo4`B&brIQzQ?J3Hz7`*;cbWwzDb{~bzP6cknDWfh#H z9G&D{q!b;Lm84YVWSyl{6=fZiqB`BSKA=xC^^ zX{jL)S_WELI(qPe&@eJF&@=vd|EH5b&HuClf9a_q)PHLHYu9NTz)VfHMZrN%CIp;e zCL?DiJM99Xpn{W;Oele3Gfo4ZFqU{G*KXjpjMgZPBRq~w&$tS3*ibDrhqy?R|# z{HCO|to(g#U427i(}#~8on75My`TH~zmAPhOioRIn_0pxuYCWp`g3g^zq9*$Z~uUB zc=U%aGJyQAZ2g0?f5R6u$k!Qg4JaUg_#!(K0v2*+3Q9paDwa!T5PLsXA^8|;w#ykW zYuagq70hw$4*sLG=R_2jMDc%E`wM6P&lrpSPjU7S#{N5BGXOm~8Mt`l%m55HA-+lx z2mY6oyv@3si0zy=TId&mk)e%GrQDmDs5N0eogu{bvFRz$ZjE-?o?hFsCnV!j+qwB) zx{?~Nr5tY_Wd?0{dW$@7JkUrt(}C)3{dnfhakSeVrAYdU!i9^q4JQr7s=TpGFI{A?wB<43X5zTOaWjIT!wcx0d zsN3Mw6hOz^tF7}>oct)!GyZ1W+;V}!?>(YKGNJLSCe{m6vU ziPBeSdpcE*ox2p%m56XhQJu^$cfa+f33t{(Pa z_iZ+kMe>Y9vR&r3e%*OiP?R-30@;_q`;Zv5PEtt>#**rZy)sPe2WG3xZptcoz0V>k zvPW9r&tu@KL}QSHL6~zjHJ9*6iwZuVJF`qsq+xW^%WHOh?C#q**xumO&K7%0tZ`VR zLWSZx>PxPCSlZ@goc` zd4eL!xG40_w3uqO6DO%Ra4p@#3x!>M{97*)F0D>R!@LDS8s@bxygkgqBzEqnA6Hb^ zNkoOh`acOTL5TbZo_>|>kaVQ$ajGW`qgV^>6iDtG)7RK+%%iYao^&SF6Hk7ic$*oc z4#3VDstICfBD*D~n#eZX&gu!JCEf_4Yo@Rmud^YTR8cSH{r|Sm&sr)1H^Oh}uiehI0jll7!y{qb`1F|r60HQz zbe|bF<^eyaEllui@5ko~zW;z48uy+eJ)6ra_wO zviabkFB@agi3AS5zYMPa*T79xJGWDy_7vzeQleq2^CKko81yF_exA#gZTJC+)$F@* zR2-#C`Ub^W4$mm;|IWrjli}=|#^r8PBCD6*KXac^wew{tA`{L69@ED>r`YW)WLnqV z?*==MgE=!zf7+5HUcwt2<5iNR4w!zK(#Y)3FWFBjyP0Ot#mY6f-me6rv{IS0^qh#)pgmDn8W3u6uDhgN*Oc_ce z<{dsQo-;*PT8-B63^RKK?<=2cT%2tlPI;T6Mmw4n?ie))$NBhdh8^GL ziFm|>SxiE}isyJw0XIU?n|NAjoyGSnMPFK0<$4ZzAEp3=?qZE#JRziLHU{1dPAZ(p zC4rUFmx!oNUF5ENA@g|5y_Mx_!QrzY0o%Kr9gRMF^jZq=LTIfkk-PnvpEPXjqjV5c z?~}~^;sb?UXtQPZnrW2R(vH_N*V-#{A%#pUy`B7w69}KmOK*OD^xCg3vz0aUlB`?^ z`|j8?p-1`b81USv{&qlO*gbiNcAH8t;lUtN6+P9MRP01|>ew$mR`F_fTX9}37lvMf zPffKiej9Fs)qY7l$-zJ=LJiv0y=A=u8H5&19-LUP-9U2xdSGvv0+76-$UwF71jVU& zdu0GGjO~pka_~M-xb)iku4fLlMg`;?e(OkssWS2bTF){SP>j0i<< z2p!+&wte`5kS0D@fjZjq-216d?((D(K$u}<2r54N@&xDN$Q)Aw(~=GPaaoQ7v=7}+?TZsmBTBXu^Tt75l*5_3 z-I@#%3Z;Q5H$D&Q2nJ(Zp<~y+Fe?l%!H1cM{58jStq6%&Xa_1*-S%srN&*Jetv+Yy zFO=;oSf~Hnp8Kw{hGc2joGcl^==!ZWw<`-1WtdZd#=}kpZ-ILCbJEhfpt9m_H)s@j zF=u<072Qkb7Wkg~EE-~N$VPS$LgXs~encLVAv;)Q4aQ7%-AWvdajev*yfiVEGc zYdYe_A!lkyw8_UXQkULq!b`kOhcJ1N9Z zcn%`p_hY`FA1iET)=_8cOP@BRR>;tQ?CLz8&Rs@CTH>mkP5}q#Y}V2?kxd434uuz6 z$}SEn3-!FwlsBegQR(UDqi9mUoT>cX$~RQx?4@BvvW?$ndH~!1XN#fDnP|2#<9o<> zmEq;B0#p9I!@X00QXEuqnJ`x*L2PEY4++w^kd|rQ< z;F{wbdxi(7_$VM{Q4&@|jsMj+iWktG$49Kz_ssWF5H)k_>SsjY8{1a%N0Bvs`he9sb$Lu$m$j z_3^Sft>cSzPPhQ?4A~wP=6sTUXl<``Zx@tx!P9!bqHM#u=jDZhEz;52mUI>Go@+** zi{pA%-jEwQQ2XYtKcn1Z)l&erV%ZYa4Z~eCO@rfZ_?(SQUo!0+3g`;<6ieSNH) zFKQ)q zFvQM>q|&H97|vz84H|Fc6@kCmtt~-lER&|suK6(XJ6qG~etaGVvqHWfO)d7F4}Guo zOVf7Kp4O0>&`j3|B$G6>_znrub_y7tL(*$=5oFrw-U$yCuleZ(`BK3qhvOtmzVkNM zVE8*e*%mGwY92FB7Qc$-E=xZJY^7(c{|e^c)NYorc3<+HeXS9y-Sma&@WhQg`lKA~ zo=z9_8CtuVsx3nJy75b!2N#7BJsG1qW7L4lFc_9M{BA}jEV=P{B^~RzKX6h;G(Nsh z8Y@sDlwjBBJfq|%L|U^&{YPi?ec#RYm}=iOlk}@Tma7gw(FSF|0tCu6vZQe|*D`?| z1cx_|4LY|IEqhGQ&f5$<3!1l=e4ID6`Lmb#ehf*Cwu! z$WssMOUo8eVHS`^;kc~OjxTN`TEe*{(aGZbCHtG7XV%{I7-+62zGdpqcTy;WPI{-l zoFRlue3Xo6iBXKHs#oK9t2|QWQ~=*MyRP0a`kDA1 zWT+n5KHJJfpz$jwaO?-vk7)~qzB-G$OQ_nsQ%6Vj-Spe|SsyM_ypwLmV<#?lA~9<8 z6sXVXg3r=n<5wS&&WAQz;}ess`sO2$+RH4i+IJ0`3}5qQD%~b8WFtE=0hN{oINxuz zrK2X*6H1nlvDIZnenN<_5_;C_I~`WbT3X*OX!zT$RSf}+M4GAD?Mj>(@Y@tmMWmjEC9WzRfzGP)AwBe9p~sOws`WoS8S({M*LL@@UNA;9qP7? zzTT@q5Ia{B5UHy5$#V$p4xbfXLjLl@1Yk{5>{M~vF?Iet{m*YTTNV6_$$ZyMdhgnc z(|@}#PPSHONp`FrHI8ONd#1-{^D7fPu|v=ve)jSAg6MZS{s}h|()8|Y`pX0cS@5-0 zZAqjnqMk&n_HnLi!G^7Y%zr?Ff0E(dy-=TZW&|*PH^Hv}3sR*dQN%LSC=I$nV)rPs@q(#-18Hocs|LeRr44RiAJK zi#-(A9HE4CMi)AI2do=Z!&cYq_Kqn*Bp^#t1YZp`g9DNA+O(}xQeMth^$aeES$FO` z;Q0#o?{rfYY^k3YRPx!t=GLH=g`SHZRX>itK9 zuHtg}-Q-k#K!5yIm2H)d>bTZ(1TGANLPrz>j+DNHqW_6YlB^q2o{-wCd=h-?2GF-s zP_&YtX#zxl=-Q%ipQKi$MFV_lcTN2BW7P|Bo!P_fpu#`cieAgTTGlsc z5DT+LT);%iwAu01kN%cYF&zzjq|M$~U-PcPIKtCvD&BBehy51gnV6V0Yfq}F;qT@* zDEzu>`RCQjfNr)MWP1NY`R24UQu9kehvGf;m{eQ!0JtzABsw^h$U1=0K*$l0|0BWa+2-S@+oFGk>o|_47;Iq-e_6g>L(7nY%$?iAkY8_kk+SrQBx+MP$mHVQ9+_( z0`V;$0+id>XPsf7-Ns}P1UeDP)l7d$*gRa=NMh>uS-tDcM@+(V=X=Y`T0+T)mV^Q9 za60mAJrjHASeJEgil$M8p>xalo^kKTru>2rAtKA8;UGA;XF-usyVbEd-`A0KqOczJ zdk8Q{m)kF2+2^djb&`g57*2*Yy7pAU+Te683K3Y-v+$EsK+>!6U8;amcUQ^x1kqv1 zu7I|_4pco7lL5tfiFI!i#EXu69%|legwsW_3|cr(_*9+(SjVa>zQ_@;X~gG&eADy7 zy%Im}RU)rJ-<<+P){P}gB5Nmxs7*t#T=Il5tyR`YK*hJn#KwBVcZmLZd`cD@FoM=bR)VJHzvMVB%)9Wu@4GYz?(U9| zJ2zR~^edGKQuPwdG+IgHe0fv2C5_#T&G}i@2xHMc@01)Ky5%T!b0A$RZMFg(7J1bRq%iJ$T|`t?!to7k0qktBPo^ zemEojB#$#@eo?l7vGWZSgtDG6P&P^%~i^ z4?4KEoBT)3KSXs%O+nb7Solx;5jxALDl#_iOWkp}CMoeO5T zL>oQBxRoU1;}o4@c36sHEnlh$kL2SC7fu1Ha%4MWJp+@?SETzXkTRn&edrrj0DP5R zo)wAJ6Ig#Q$OV6z6wPmlREQRqI$ovcfsPtngYJ?p?G@6L{>z}|Uj;$`QT>ePZlqhl zH}nLaKuZKsXflc#@t)XZnboVg8Onh#7@1WZ5BGB#uz3-c68= zq*ZZeU%l2BXNX_tzO?aW^c2<%i(u$$Zs@KJWPF!G{qhK;1eoD7IG4`E)G=scb3G1j6=PMu6Tzd;A2UukJl*> z#(2xS@xA`=x1|Hfpf6dlut#+TvRxL5$%Qf@F*&GOZxjYeen(fiSk`E7`>e@Xj#i=O z**M9>7c~zvcy*rY^;$^wuBlcMTLKRBsltd+Z=zXv{L`Cuo2x(U9sMSj|Fiw`5A1m1 zy>^$TYZ@d#hhj{UxmJ$0qE7@vW(PmEkD6+wIY~sj4l^UJ5@O1wpDv*p+nfS=UqoDh z3^c?WQU1tiy=}JGO4e(J&%$mekf@0AQ!TdG6T9I~5*Kdb_2RmE{CKlaeLR&h>y#E? zwySU!=;I<8fU@xciMzANf^4^Hg~_jNhP*-u;T{fg#McR3ty_JnG9}(L((5 zrR-gM-0)9@7aIZ)_yd=G_PQQ za_yk8y2EU48~E9PV6AWS4iW@X_j7W=t=Vq_Vk0Sf}`qFpm>Zwa48- zV;=0dFJCz+X_a<+rM53M)w#)iB$Fo_W@3Fs_~9uq0EDd$bzsj6KyM-28__u3RM1a^ z?4Tx{N9c_?A|Gih)ImN!4N-Y;pI3rT(R+$fxo%L4LO0&w6eu0h8IZP$>ro(H3GO2z zQPqqM4Lgv*5M^Mv>f-$X9V!JqwyDTh(U8d4IPse|7Ce}zXN)v=M9y9=UNF$GP$Cyi z)&h95X3*j=OeqQ%wAulkKHP4Rz@^c_9u{ady2MviuFfvaE8oT(=3ET$?VmmrI5hm? zd>IgcmM*erpAQXLg2n7Hv4mFK{ff|78afZtKE63#^>y;=S6ROgEB@^IhP(wu5thpw zM7CKH6FttSW2`jPao=n7W^Z2qR(#8yicS%3rP>_@AF^4gcFyDB?=RO?Qiuj8El5l$ zj2n$9;#cy5V;dg@F?dYUJj~`+LLW(|7soxOP%aOSi+i;B@iJs^DDUtT2zmAl*xCvJ zt%e(rGSVcv5z-BtEx{@lTqIO1n|Su9x6cWvWFcQqzdn1-SEnh34TGpDk9(M3;5i`j z*mM}rx;L*=f6w$-SR~Eh2aM?p8pH>f6g2Msa5@b0vaA?!negl=r*k;278~KZL;PgZ z%?vuA_)FKX+~7Bz5uuPJAF!nO2p~j{&yhgH%MSAyPW2_IEWsZHF|n;bYTUf3-)dWs z!^0akrBFk|!g$@-Y56;Slr6dkAE`*i3Yj<_>b5I7yG(WG z`~5!6L{x#k<5)f=`Pc)bvI(I7?p@BdgRCrD$kF(7N{#;kNdH@4{U3dvLP~}3$7Siz z4mBQHJ|#^<8^oev_QNsi=q@lAvDX^6RLM>zJ?&oYEbt_DLG#BQlsj!)0gWnu{z^4(rAi-5Tj)?qW!2ct0?VsxGnfA+ zvJ%0F90sG)(&&W)MZ!plBwP8irt9wSwY?wF%mST(Fy&x;{waXk-9GLFk5q7bx4&lz zZ7^Y4cHO*C_&ic6*p3j;mNW7+V(Vd!b*Aj+^p`d+-`~^6Sgu4JlNj1Sbr85oq_lrY zL=p}PMOx1{F?;Ycqf>S<8uiiaQq9MUC)ythsjO!r zGcH%LD3RUfh}V$?$Y-I|W2`a%(6#>?Z1?Aa{l_8NPu87=>cjRnb)bDYL_UpUFWabb zF!XW@eKyqL>q=vM6n#f4>)4XPAkx$JJ^X{&0eq99!*9YX>y0c-Y2~qe`ll0#udw@G zHaGAboA!8J^GUjfG9-4>I^zBOwaqXIqf;PVPU(k3v}l9Z`@qe#+}IDWRY1?) z<`@Yeb!8E~Cw_x2>jwkN6jk?Eo+87XU$tK_bmZa<`}+F2;qkh_@O(E?rtAPsKXm{C zHj3fVIuP?C+cmV$Os`31y6-PCDN-~B{aibF;j_zB4fl5=pM9O`$o*Ja{8cpV|E0WX ziB%d1T-(qg*M>}$d~zk^bOmd3;l7i~%IvJyK1MzF5}lZs7=J}A<)A0IVqaWUaQ;3-UN+F2OsFkKKnOB#)rnGHSC3)I zK^qs8Pk|0wb?6>5Xx8V5*pK^Z0Q!!!cgg#am?bnpdJhb(q+=z~j8Xjackd9HaFt&K zFLG1igZf!0SIRo6&&Jv(Cvq)JJFp{Vh?|=a8>duX8Q3I}*oUJ!iAPg&Fq|%&AZ(Bf z!@Pyo<=HHVZe`(0Is$rSQk9Bq-}YbEd-OpV>i&eh535MO>PMXkL_$EppGLM*ubiN@ zg>8s-gqKC2>m&#FXzg6EirkW>J(3k!HluI-RSeoHM)vKBjhhz@Z#`6Lfn~rK_$k4(1no#?Br+0wUJ?vCthEZ_mQak}^z7eETc4lyy7wsf z72}CUrjeRRrjeGkoDQ9y(h9W%E2uxbAWN39K{CvtuPw$9u%#0r@_@)v4~5E4l|_yf z8a1>K?@xw&KgsQ@lnd^JodUwU)j3E^F&t-!jz!_FF`ZG`?lNVOToC<`I5ehtp?I@t zGUzUjw!@IQCyeUO)xvfz$9ULN6wVSx(0Dh~TOP`>Z3H2PCBmHc58J2bZk#z@KB?$O9x!8>W@A#OLO4M^Kc2|%5 zQC7Zwv$*obi?V{zl}yQ+~%1QGMF5lUkCJyEYlYXQ_FcH8ji8 zCzG1vAb8Y?D$iZ}m!EW$s{@s<`eUX&32^h=0(BUo74+D)%hb`q*h7;8PXS({M@!?G z4cqLqlOKiNFTETaP5dlt=$^z#On+(x25&RKcHn-EyK|q!_ksu8yQ%PI#=}nFP^JzA ze6fh|QhHBoR2s80AijF`jF~_Aw%VoR94|+{ymI}FUN(=?q$KtmjM0qqP5W%W69)p) zu`9ciMTO-5xhSDY$n*zNWGRqo#=WvyCDDiUg3VgC!QL7CI;bRGB|NHlleKhmPS(tl z$*=TF+hOqJTE>rSD`x>!-ptFfotFD0VCaMOm>0o-hjf`HS$t22vK9I+8zN70o%%Jz+ma5xX-0J-YUNq>>NX#sh zAfSk97)}M(IStC8m;-+h&an9W)mn(*tPw~04E10Y6jyz9{8jpNx#+KhD zs4m|&w7-$@s%k<<15hO|A&*HDC&TO3>~5NmQ2lQ>t^WC>%$1!(cli1Tn7;Y^Jco^p z2ct|HIDNi$eF`j4y$@1fv&!gg!8)C&g z$yPqhNW82Odx@lv#Jq#z^wCLhoDurraLM}UFqSFt<3wk50`WG5Y9m_5=qE7=|2G zxsDTz(8`WhIP~)_Tp#R28i^@tl?R0u9yO5%>oTR; z8kf9$lHR4xo5{JkH*luCC?@H%C68|JdHKwX`Rx6VnKm;eP)hxq_I1l5Az&1D^^H?C z-yh@Fn<)|1xZTDlhBfGn^kA^LG(l!0BzbPzr0Isr?A_k1?}Hz>%&%XvFz;_e*`*=n zn*ME^BxBaCkivDAFn-gp8j4rB=E#fMB}CO#iw9lQ@$L>^6)uiq0x1T=0e(zG!5YuS z+MKo*zNf%_mE01-Vz;t6vNu|w=%ZIfwYJ}ii9m18;Js{_cjTb!CoUU}Su!P%YsdG+*Nnd z`TR}Crij}0Yw((bUm45kv#$Fwxb03<;zxu1sbo!EU*R z>wxNgv14{p&jRI1>>pAYiE?0iP2YC@Xf&4t83_r)RKsy0jMd9;CNv?(GO5)}KUa7>QM?PYzs6-a zUPq?TDC`Gn6+aG3e6R1@M!u&(qOAq(?KuLtX(;MPycOp?&Ee+|S2N{AQE_$26ViL6#ie6Z=_{=1rH&8f3!+W&IR zwJgP#M*R1SpLySFzSNCCV|_S0_!Xx>$Bo_2!L9LnngZ6DQ1=3&%3ZMY# zBKT^dEv1}}86Ynvm>TDD!11=fO-^3CzR*59JCt87LHqdnB~gwa)kQE&A{qy}UqJO= zbd>fSPmYD|=fsexD`+T3;1cF|9mt7o=KII*^3P7uQ!i6j`QJQ>JwYK|nJAplLw51p}9r=w$qtinMS}4oN&IE$g;Ww3cvxTC5n|0 z@Orzo+3-svmS@6ZLg_I2c-Ih^iF;8a%}k}kB{}pv^ChG~p<7uTQM<7{cj9sNUkq0M z-A|V**=lv%{NblKnN!xiJ+0_<&m2NGKD`r3M&jI9ki`erI2MNbbXxesJ=Ei8Hxnk= zxFjR8K9lL+c~(j;V$qvK)N@@zGc9;n$A7Ov*_X774h>C=4^SwNzRC{Cn0;`gFtazB z>^%A@ilCZGqH6@v8>I*#Z4tz|i+8Pw%(xe$JJ;-AYD=|T*7=khp2Uhee}0AhQv#M9 z&>SYwJqN3o;-N(LfaPb2#ws&V&?2YlUt4;_JpDGuq`&@T3Z~Q*ozHm1ZPsAWDTJWx zKB?C>-!9^kEAr;LRc1g|mSO6rniDr51*WWnUQn$b-6p8alBk`_!R0q^RRn>W*)m+6z>AqJo#U&b_Cv*K^rg%JAek=#%=;-7H%yp5PGytV)(ZU_KedH@i zB#JHBTyia$Zc}{}p6#;!RZjFppXhvUvPhN=A4g0J`x~MvuIhQ=&+wqM^p`&yYOL1w zm2XHY@B8Y%6i!jR!ESa7U;_YNzi4GSeYyWLGOU!A7c@xh-BBa(+TmEFhs=Yc-WZYq zA;cJO8L#xSrD9&2Bs<#lt3T8!2qypWaeo`TK(uG$n~z)80LcmjNOhoZCMO+f?>Pj= zLOM9>eUebrqj~FC_N1Z8PzUYG{Rg)Pan;0qJqj7=a@Dts}( zX0>XoC|_Bt+44J#$X-EWa3feA-#01?9a}QpM|L2SL$2+b@YOdc@_AeINolp*J7iHf zYi(r-$^6`v4M2yHMAm8&Z3zA*i6$A}3gbj5PI50SY&&?W^DV571x<6nnhOMU`oA|A zHn|PRnUe{CRuBw#m5CrD)}BtdXpkuR`{XhQE6mc4+WsLg^XJb1iSW8<_Y7|C z7>U|F98a08I7|aaaYDAwEwY^gE}?a&039N9Y)e}@^fH^_O`Eh!(B%8CNxO!N%`E`E zgLx*4zq9HL5`ne{gGU#p+GPmhA@NjYxawZ(>z@MX?VNw4Ur_$oiuw#~tMHocM-S81!Om7##v}M+VQGCM1<2DKJxb-2*$bknd$Hj z6M1vNm=8U&Q{DZjw~Z<0<0{cIhk8HiB3|kt2!kJZYu|pmna?l7Bsd?Is7hf(sy^(F zNI(aCXbskQk&M|>gT0X2B+hiNj14OcX%0GPyWg$--22A>-CNo551(A@@OiKxM3~3( z=;2Tg0=+V*Y+=I4gEr{Lgh+14G3Ss!Z2W}%4H_dpCQ@GYp~43QT4nU;foh7HMxAE zlgY%`)+y!a)?0%yQkGvit9_UJNUC(*V&;67Ur3myazk*9;_iTkq?s-^eXWA>neyoC zrU0V}V6}TrX!fIPRlwSCBkU={3{HfnqrE^RorHO0~iL`0a= zSlBA@2w6gRaf<@&(^ZBUNYp8CF0|7EOuc=iYdxhTvFT_%QDwcgzrV9oT=2tE&0Qo| z&BejrNRjM!B9RS6qTRqh2Oap!yQPRLQ|B1Yd~rOVvlOWjsIHyS&SmxfTBer>my;y% z9nU3NZO5h*qxY|rZQn+jZXH9TG2jKiC-Tgd57zX`~QW`;C%isX-RT zeji}&8org2np9?arF!Ycjv?9Z?D@s0ZzZ}+`LmW99~s5Do~M!Orx5f6F>tMCc(4WO zm|^lzrS{t$9v@2f{sFJPEYiOXL;R78D2 zLxOs=sm8>VTji!CokcZu19%XVH$H3cy}eGg&wH&i_J;E*!212^wR_UrH?yXQr$9jy zMI%oetwz8$De}{Wj4qdZ<=O{);$%We{nMOl1tt-H!tF>B&9~)Y!UdmAmDk`wtW~Q2 zK?qDfaCuZPrTdQ|$zU#>|g!8ct!WT3o7RlUpHwwh@N*(R) zKFo(VTvsz@A7{KuaEZDcuSKZ-1)31#pe`uJ`4Cwm_8l8>b_r5@KAax2GKf1^g>&D6 zDq12Zwi-sMB-p|_Vh1mU@jWB|ioRDpZO{h8T_662zCv)tZJT;(L5*)pP0V#^{iqJb zgf)gR#r(MX3!+L}UYb%~&K7aChl3dD&Z1Sa*0x_V@^6xC{-apHf609yjP0A_LLy%T z^lA_rSvN7@qyV(CO%O`0IAj-;?q{nEZnCJ^Tk+)TgiCxg)!m(kAC{gZ*cHaX6HvID zP=Z3*74F0o@I-^1Et|7*!I>si)x=CW7jH0{a?<#v73DSoq*Gw?O^bcAYyJoXmx$lp z_s6gPs=#yacEFii#HvG8x-1|pRvrzN-h^Lk1tJf3ZjU^*|14q&!wmC!!s&^Yj#Z%% zw=t)zq4X-P&B^Fd|DkS=$S-yiLm`?9iMZt5!YFNa^|~KwZ#2i@ z(k{S&noXY;Ceh)KL6g5-r#lU`gyyp*z`LiKz{KzrF2y0EmE{9JZ%6uH0c{Be4rHpF zO2iz}II0HToj#4~73)N^Ym#G4Dc8+e1a0*v;y=xl_52jO+pQiv&nmx)HnX#HwLhnN zk!o%gwt5Ow>OdC}A(!>rHbKLCf~1%^sC@&Ov|J@Y*f;_8&k}MbZl6+F-8*r)ti^eW zPODT?4LdSZoLSgL!}hQP3sC7;72jGFHHnIi8iC@%MSIhcjzh-AIGIkZo9!^}AUzwA zap%^=8>7FU3^jxiM8BK2f#3$J5-rv2j?izV+jW zMV@DJes&n&bhe9&NVb?re%|vg()n>B65G6KV=*oR#wRU5W^V25Z&~DFcU&EYCDXcU zo8?4mM3Y7GvuxlLt#qNUm$$pM=-OKuMr9BN*mTyr#c!U!`6j)#<>Z*pr~?2-4#A}q znX+zY8av<*>_iC5cnLjRV%%@fQ{Zgq>n;u>=QnGUW?W*;x#_g8XUoLE76NBHk7_{e z4<7tfEefEDXd(nLrMB4eqp+rF`~r0}$TG4Yx=TNwQ@*`FyU~>y^Wk$_2ZjfQyF5$~ zgv28;Pf?7Hc$MTVQ#?lxILw^~6ZL_%BR@0H=lh3+!l|kR2=4L5h2Ldv4SkUc>)2WvoN+cs;#A>*Uw zamSc1J2gLjuTk!|K;|P3Efe^1DNLt(q~^R6SsDVWIc?Ohnpi zTy+VU@C(HmAyZMfTj{Bb(@>`0>9s%A5y>YXu%0VUUw>Q8qF%IVe0TmXq;m&%{Y--W zK7`0@Ok#M9M{i9iABNHPBT|FcU4#0_sZ0DaVQ0(=BAu}` z?KDDUdexuU)q3GWbp4wwuFf#ed>U`AFsqmYhl(K}Y>~*iOQIRWgYFvx{1+%WLTTj3 zxb#`cnY3bYx8IxRsJvc9@32Z9IW(BhC3+8XEY5yg=k^V)a`9l^-}`L9c;fvQM|ZV0zV-V7`u{H+ z%+DoT&7EQ+0F9C1hE~wDi3OjzFxBJ&_gC%7(;!p+&_}Pwl?L8^3-!EoN7=Lr{{BTq z+6MP>V460TXjZ;I3DK`&`{Fu5hg}Z?dt{*1*1G+FIYKU_b1xkREs1oo~+oVBLT{m!X!6 z{nj}bVYIJOY;|ZV5p7;1+k-Eb8X{3 zvm^oH=<6q{F82VfV-htxIAaE*pqZY%NN#f%uNa({-c!wGEjYDDja$}>Udl0TxF0zo zz{QJvn_(czEb&{N`Wk$GHX69y1~v5%Xxw?W`eVLNyQz2M=6?yy_)kF|vjL`OpGbwv zdu8HZ5T?A4P#u3Kj)T!o=EEXorn606&U z3t$?JaT^L}0{a$XO?bL|r*$Ozdu3qd`3n{rFM@wpu+=9ul4}^b3Ou;cORu93{3Ro* z7}OwFQ7I_g)#_w*cmhexV5w1^=s&l{F{50`KBxXb?wv(e|DkJ=^Aj++gl3K-c(Qkh zJTO0kHDzyc7P&u+2NT^P`x$tSZl)ye#97Tt*b6(4d!IIpd5veVSAJaCOi=2GHWJx# zk^C}$L%?t`!R_O8mRUA`-bmhw_4%3t3`ju=c0}{(EW6R7@EA+SDZx$>EXzEvh zw_k46@CY9wK_eMchQ{e^r!3;G4nH6<;7d}KzNh5}TR0ef!}H)oqf$7G)%8Ur>Oql~_3h_%61TaA=Rao^_In z8Q|&)uTI@FEYOng`LOz32K3-H~TxO?@=dcO5Zvs*%^cYtt$u@vb}vD^=>#Z$P|oQK=ur!NpkD^3l`Po zv!CCK#ofz53Wu*9Sd#9X;Y&cgYvb)D@`ix*7)pLsyjn+{iK5=16YHv2Q6>rFMW4JT zU2wY-{On#3nC$QalEb;9PTv=c8hSCblK13!QAoCHuuJe^?f`E=_zu!M(*3BRCIsts zJz`+CB6VQ4%npl3ESz6k%YP?%C9ALc0}PXd#$AyCsk9==*LP3NYO3H8I|E)3 zQoF9^hS?+>GZbKS=j3;c4u#D58d-V$qd{j!EC?-FGy_1dhX_9Qy6$0Ck ztY9h(`x@8qq632S^Nx2FPJVth-O$*-d-4=P1BQj!MxvkyHQXL55h1Ze2)3SSQ}{Hz zm}d!7%u+kd(-%z^E2t0H4?20F$#X106c|B}W1x&{U{Ygx!lqtj8pf$x8DE{GE%auhG=6oqc=`YV$H5n(0uo{o8WWcvHCKd^Dfl`7L+1|J(HI zH+@1q@z0|#Oc+~DN(I_VV|TzPq2#Y+_mYAT=H4^nqA#9dE`pHM6mTsD{Gj0fxKO}s zf8)VeCTj~4wk^{2aOn6=>#d#O?~A-5W>xxYBL1c2YA&kFr6hGE<}GM>RfAK03+-W| z+q)pLTX#Y`9F(4*sPsIjHTfRn<(QG7^D4&YmhgAc2Mlm5*X*=`)A(HPUh zRC*0ffq;Z=ym{-?qiG!a+Hsvl1}^FUu7d1=L3BY396s7o6a2IrN zhlNi8rC{|zr*?z56t?`j&kfSD)qJ=3CJ#)<% z44=_RVK;-uu=a7^F$uZjv25{Bh1f!sA~p1YQ~~KFArwJM0s@hg-`PIT znQzYfo_D_azBA{{oIlKrj(2k3``&wB*R`&-*1pD`F}%-D7fm*#jY@J;U(nb>5-=@2A1&k^vAw@ui@OONv4b!KT9Z%jBTpjdE_fg>lDZ|| z6EHaE(ropEnrkb+T2I9#-|iH9df+aM>i1w;v*$OkRzi=uZMKtTC@^YbE58SgndF9h zqtc-(GIopA!%a{WM;aJ2^56aDH;~+&+n^~7p}}C@$|R}bEk*EihlJ%PJ6-uPPco}w zR?Ty5M^_VWk8Q<4gF?NhpD{;ai~tMU*RVB7_`SLxy!P#?O#TZUF#|ovs;NAu#}95lM%b> zrMx@6gyQ#7v}EUU+*qTo7;DNXe`?b(zhsWP(n#j00PhWfLe$n zY-b!)K-+Re;_=-`ncZ5+Y#)rSeOS!I*Hk8!H_QtDAN=XQg8&AyqlEkC!R2+7$Ge^P zNWnOVnAIywD4yr7j$ACYbsTIh0||L(1+Tp?_?nBbO77{&gC_*|W;MZ0pM=6nunl)2 zc?k2L>c%#`BfH!$)t>*8XZUbv8;IBh!JUA?!~XA%x*Bt^2ox`QXFj0h$*>jeXsm`O{tRZD}#g&WrWufU6lI9U~e z1fi;ZDZeJTbMUeWoO>E^lej(H5K#2f(ryMlzF^K#5cVgK(nQMbX)H-X=!cejUCMe} zzA^KxIIMhjHX9HTuJn1xJhYvikJH`Ha*_K~z`fqz=0JF2zBymHL7e^Nz)d^vuD+|j z__-o8dd~6~@^_@q(@5Gz^?}-vG+7Y*x=AYw_`IxrUiLj98#4oom#H(quwyE=6=-q_ z>w4EX>PA93({2;Dt8@+x`YyMhcHFCyBu$*`21Yaa-4b#=_aQ{V3LH$py*6$$Q1Mbw ze8}rSao>&36=z4w@yruZ*C42nU+TN(pXNOi4M&E8AEQHIzu3Vk0%6$9iR>k#M~_j7 zlB`kZtEOfh^*^-DouW1_XBs%w;n&4p`&LGwFK6zC69@m3=g9w9m7kILQuTYkfJyt6 zSjeBR-AH;=`wvj3*fXS%9S-i1?tZBC=|UY>GqDXBcG!I38%pETJ)bPqCu@-pqH%lo zBEha7P#<8MAaJn6M(q@4;0;r}olVbJl;?9#zv(?nj9B)WW9ups|0MVBI4YyX;V$6a z$S3sw%1!9+@3RYwTT3fS4;9XG1CSnAWonyd4#nkLgw>(z5%{Nx7R7K(5KPLhKs zfYn!=U$+>G6eiufKe4dYI$g0*AxZjt@1h9eSB%8)z=s5i*-tJy1z0Wjw9|n*0kw%D zaCiIz;iNFX#}tulI=+~=xv>1nF*DH~Ri_Je_8-;CtK1Bm><8m?IfW!+4Tv!e@2D9S zzgsSgne4<%UNEYnIDNqEJymB-{w9k#*Cz4;iVsRVI>&x^%rL42`GW3*u-W=N1@{KRxy+dF`DFQ@hk|H!jrm>yJho!{8ICqp) z!LDe>h+ULgJ%e}f6vkrPZ* zhq`+?Wh#Bs3>p~UOy53saoOhg8!$frfc(@!o1V;ratR^hr95D~y7Ky8R%ZtBeD3!} za-+0Mr|A4HVISI9@F%{D68N%L}(d zQbbb(b2|XnF(sno_FdRzIq)+iReCbH##Bj z6ltF*ZAT1F*lz-$HYv9&I3=vi)21dnXWK@*mamPzKpb+82?DuC+9S?(FM?9Mdn*is zyfg{dHeTA{yO&#GXwih|Q;m(_=MoSA*?L6j^A8XR+Z;6w?YtvKn}K~+jzx-6bVu*n z5#^p&UOjK%fAUMB{~_Nw4qo9&h2bcOgm5YgGbkPzz)FpJ6awa57};zc#YN%s@!p!M z7;2~(%8(QM%-;;bAw-(S>O@waCJA+($CP>5MVO%Z zLZXbK=0c(l#hU`&Hb|{grOI=r(Fcg*N(mg+h4+y-2x6Dd6XlILO=bIHDVGj7P zaWJF)$}bd93$lXJKJN``vEbv?L|k1p*$V!;o-9w|Fcd*h?~RP>S+7>Fg36 zjfo*+GCJhOHqFmkcW8+D2t)tCPn-{AtD$c|GJ?kgf`e|@aWuBruHrC~B0LitL1UG9 z?=+fuut-YNU-DXW!0K2tYB5_YePg2q{3XEGCsRz^irgE$X;tN(0Sbaa>J}~C-Cao? zMeYr*PE!z5h&$yrsdlL%pwLm?sf#^}Xi`UsT>O<`ey zVGR6K&lKJ|-S7mXW!A$d5FOO;b?RGiXRaU|73k`a@LnY$6wf_`GAYgr_w(W2@(*Xi{KgbUQl)ut<mf`wpW8ix5#JC&&ncyw$1H4t)|nI^Q^C;c#?29)btKc9gR;B@tinfj;1I( zAH}>6_ct;LNp&XZKEy=uAM2`#U_D_&`~|ioKu?LP4gs{2Ci1O0Qt_{?9K*wf`+0h6p#dJ0zm79@T0rSikq0OM7&89?^C8iHE==f&KARi?c zkvooh$1n^=#?u_`0z8KERw8|?&EtV3&AHjo?7HKa)n0)R-Omv6?SXv#*8#nhi=fm* zzuO_H-J-F)Tx3JYJCSct%)WOaWhWKm2(r0h+=K6@d(Ttf{X}loDp_mqR-b=Bt2QFR zXq*+`zRwPV2N0zez;F*pWRrP<1CBb{GJfmKZK7@gOUP#SgutKs54rWK@rThFN1w)i z_df1-$3>~e2)~dr6rOnwX@hV9cizZ0$P+e5U<>+%4eY#qQkOr98cyBt{J(@z_+KeP zm~vHHue&Ys8(-+kO)<;7zq_ki9~5MjtZN$wRl2ml9yzRy{0x~Tldv^8#yOgA<4lZY zVm&`ZX33-&4nf@c8r-Qbn31(_eYht?C-D^B<6vJ5rv;O&!!mg&Ya zB2Xo0l2krL>?xL;B*&Ehp7aaTS4`0({a7hax@^k)ipw4d>a?!}z4iqHg%LcnfPlR$n4-!cURe{=lgb6sh~l}Xu2gw@g+%4|Z6 zj3Ha(b8NKAb6k?%ZOiX^!x!ZO4mPL_ttU|JS77dgUP}&L-o|jX3e)D7ia16^)r4zu z-)ieqQd4_a+xir2-}I{p>R!sd%sCqXstd09qbKo@9|UMrV9Imah0(vtHKjekck3_x zs7loxl~(ND-2G&Pzb0N=dmOTsF(yEL1g0No9%Bjg5s825DT?)OW3?f07a5OY-+<$47Tg z0=I-mu6m;D00(@>7+x*`ybSJT{ZbxVySO+L788gRFa+w!U6ES=s4Au=zd~GJBlwjZ)z48yr zE`lZWmWV8=QQ2--KlmN0%XTwesZ%M8>cIb96)m+R4#-D z0NnP-_2tHsa(yrU8!*+Xr9v9(IzgT$diP+1bOkFIT~bf9N%-B*UPmu;S8V_p=F~b> zUrn!lrfOTK(t6e}V>t=wjoFS&E*S%&M7$oKmN($2(&fP43~3$NteJy`DUHjQnu~hy z7WH=Bt}9=#Il!w?_ItCks{hQa5#1jj<+yX0sB>45UQgRo%AmlW2au|+kS&lC=?fmM zB9q>&TqJ8OzX>;+tJc!%lssy!`etx!-!1CGZ#t?zas>4SaK)#!jLE>T2w$i}~f(QlJMC&Tw_#n!m5op$o~p0uRR?KUa8KAAiwCbKXn z-5)BZnLB%r+hA+NscH-$MP3xA zd+9&>o{esIhawL0Eyh9kEPg2w%|a9N99U$ch=t|m_8YTRC8)7XZGRmy`*kN*isyT> z^YSCi3d7i+lGbn?$a>0(iOk0LE!NM=c{*I0l=Bv=5fb7^r|A9PRd0dm2?{{`!k`%h z^8)(elxTs9ca0B%D>jNR5ZxR7YvL;JILRb^D@Av07Ho+;z|lAf$TIw*!1|G3f>YoJ zFVPALL{HLG zK<4{KuAL?_7LrG{$oAa6*dY~h-@@z--e?^DSXr>81{FV zj_mfH0rd?{qOv$m>uR1X5&09BAtHvWiGG@SkwG>6t#Erv9!#g%1Z)9%$l3d+iBX<@ z6lYq0@BW)S_X+9?DI>@e!o7Q{91Hf6yG zg_2B`PzfI&Z6a=|9zHSqs8G1O<+EDwLhdan_13146?tP(jK>J8&cbChsZT(8aHT%-kV*%$G**&z2rb@4fr2lg4kL(sQ3s`u1xG3nNP zB)s_}l2wR7t@D^>2eV8K$|4_vc7rj}`cZ6;QS=mD!gekW21ILrtnIv?g*|*8{LswK z&}mNOHU+ znT`{~j0q~?vZ-4>FWY7@?|FJ|?+q};t_wI&1*h}&pW4t1DF5Li*u_$~+D))O1$MI?CV zr<t-G$vNw8{m>US-wT6)Wb-fCyG7CWRt!g~kTQ1G&D<)-@E7zPq;1sn~AkGhyK= z|NDw&*h8^1yr?GzxS~|to4q!R_|{o4bbvV?HM9XJg@EO+xlWU4YOE!xU~}V65PI^g z-d@UhTDN~D6}ywlA(g-HM~rq&tzSD>Z4e8K%x`m(jo@(zZIf&}viSw_b&&Qkn89b^ zcm|Z1u8cdmm7l~#;=C}r#htzM#`=Po54R$m?oZM1x8a)eO}v|=d>Si&&lrY@K-2_1 z=oq0%{45URWIC<}<@Yj?1aQ*wgH_!pp;c+(o==(*u}sqBvm|zcRwuO9p##Ph!rk6z z+8T>XVVg26@tE-a9WS%5*{{NT?s`teA<4jaasw1 z{;8D*JV9_dkgRyeT*XA_x7T8-kk8;Qq+8qbP;|Go4VUC$96yDgWW5i7I~7k|In_Pi z-4&%-flC5(iY}bhZC-OnPDp6|)*G@jaC8u%zHT-l$}b6iY;=o7Xt64MFq~0dy~s1G z*C6)Shsxr~a{94qC$s&Z*rhC` zeG)Zh>92ox_AFV0BD6+hKLxC|ZlOIewIfP93N&t#;D!mD-PY$Xslb`pYvYzOW&Z_t zs>ab*f~G5ijHZZz9e{xuKHJ}IjTQySPZG4fh3yyZl$~>_6I^8e>ePw7G&jCV3G_;N zRK%MaZ^$%QufZT?jYB`WTOo%x#3(9l^y6+Q)r$(nuHNEbP-@k-!E=)|!0D6LZ+W$jOfIx)B>27*lQfrNKf_r&!SWkSZ zRyf|x%Ysk(D?KiN6mUS!L9lezKOsB+w&a`^d&nEE#WBJN<@E|eijOF(DH?3ZD{7fX zZddx8@-AaAdjDqXfUO|iTu+_^s>-NRQ_$;+9NZ)WRtldTF&DgC)p}u_jXsJ&g?{BFx+f0O>}h1M4vkyCR@N z6`11_M+$!Td1ZH`wCMAd?*32Wq23*Ri>r=F7;Ff0>g-cN@hGb=ubtBJ=D@ak&lvUo z-t799N&lHSjK|}l)B&PEvg-{v%T)VpgFlns*C!*4p>7NDT3l1u+hK=!VIy(qvB*4g zyEJc_qXxt;?+$m#AK(!UfrGZsq)1f_8k-I!Tm@Es4g{;=ICg4+mvRhJbUm0|un8|V z#XYt4L?~uXJp3K@*7v-m%4*5)?}S>MMhuN5gx;7?^7OZkMyIamhJgS=Fd4?+Qt#s z2TwvW+8}2?d^lTrz?Q5TA9!&+J{=hC6gkC1Zu(gckjyd6>&A+sokB0?lvIWV{=|Xd zX8?H>N)`0{@*{j&B@jBzbw6mAyuP$amD&~%Uhtlg5BB9|@-I@gNDWBcKIUz!r->q6 zgwoh|;AHj?but#+aqodMslUo@b9`UxB0Z`@z)NbMgG=z>s&v0)RvdIt%lJ8LkG0gH zuXN5>b<|X$R?Aqr?_^Mr+^IP2^bnc65;YV?SMvu_n$&b_vTo3TYy&L$%9PXB?<+c0$vf-C?JT$E2ReADW%WlUr@PVw9ONQ2JU zS80mGd*6bawL1H$8^fAWFG3$JwvNpHF&~;Z;pAueHBaRa7HReOlnxIVCj$CDBv^0E zTQ!_n|8uPQ*hg-_ zJknEy^@Nn;=LbO12<&#yTNUM@$}?n1E5)aGantJ6GQ~q)mLG4>v!aTj z+N*$cLM%V>$TgR2i~x3b`2aIsbzu5A`H8l7^-HGT!MbH^zn_%20eW{3D#xK`!951b zfRaroAqwBl0Wdcr6b{7TEeH#*(AIg<4L)kD%V7y63=!A=jP~*a#Q#3?^&{SQQH$TK zn3>`95+CgT7p3|C|2232Z+_)xYK&JZ!-;M0!1NeyJ$uoOkzM?3m7KQYlYH}@2$8_Y zywIgYNsY%dI^k%^H|8RkJ%BbdgYv4!o0wU*6M?D)PM2&XSilsiwma(rrE!E@b7#62 zz56TG+SrEb`z`9BO!FeaFPkE6kLG_j*$SaRCdFtx7A|9ydrO15_Qf^mAQLeShd;r6 zQpUHJ;Ek+_UjSHy;tIKYlbDBgdcSTLPAeX&ZV8q0d2ot|30EgzS(nV0JBfuoTRpkU%KwTD2(>-mR#!BlhPVwZwvN&xgB`& zFg^ULxT8zHGFiE6iEsnkPE zp)WN~Ws8E@U&Vhcz_O5e_Og>He1w~V{<_} zG2HfL4y4b+4t1C-?p9SovR>zG}lL%dsW=b^_1tjO4Ym}w@e!oL-QoYobM}% z82#~4I$kC*DvRORhA>Yr0@g0+lxzanHH)dK3fgK?GmBs=(#S3g>Aan?$~W)bF>5d- z5(TjpD#o`E*i&_f?sTB?K2I%yglJ;jEL6LCcy|!OXS`zAG&b`IDT6R20NVx_-3IM6 z(V*f%0V!DjbNZnLU|jLsozaWP4t4^~js5k>_!43Q9u`ewKxj;8-@}^*n-MTEkJ+6< zQDqJTQc)A<=TpiwfssWV%P{&edRxeZB|v@nC>e@STxzAK(I zk`5ce`F!AKeJ&zZ*f+?aeMKdflwl{}YtBPXpXx-M`{~KUBLl?HsCI33(d*yjA2^S_1ol z!xo&|^X%BqqiA#l{FpxzcETebcWG^sgFnRM$L>bxX{{f8eGPJr`#o^~-l*Lr5zT#2-B{_1sXd!*`XqtsZ^-f@8@3WPBfgqE-ac0x9VFZjTO05p0mANsgbp!sDRvgc~O zE?Nj*|eG%1};dX|1nW z?D+>GROQ(7cB#C{@5`|7AKa(JwcdnM<@^g~AA`28fkjMX0pHJ*H8VBqf#N}Vx?8Ve z85^q!oPbm!b8nJt;66MMvdZ!@BE(J8{nru@m=xlN5&)2JMghe^Iq6osuFFXh!;u|0 z?yS#vH|o21`C{kopQq_s&A2AZ(%q(qCrXwa<&ZjwS4>FU1XTBZ^~s{U;n0pt*Cy&p zuV0ksY*to?O}}vYZI9pUhv*n+3QQ;vKEsW7NN5hO>|6bHUvG*@H| z(m+4L23am7&zJ8H|GO>BDz~+^)QeQ1SdZDZ9w+$#8`)yBBH-in&{5=WO3tVpGtx|A z+%U#L1rBsaH~xW4B>+exDi&aX^d$3QV?Q`|oN~RVO)940KmAZItt$dlo0<>^guVds7-IG9FNyF>t;ve)4kG+Co$WzSWT!scsO49o2q1bU{{q=IG`aEe?dfbYpy3&Q-gu|!QrtLdq}t& zxMUSvlCBLS(|hF9cPu`w&k2sBsotpY4nutXIz|zD9W@$g>w~%WG&NS%-kZmm(iO6U z$(ihS5ZyqYAPSa+Rd~((7|6~(irxgo;N>9`?c_~kSDB2Q!oV=~3hi`LnGAbVX%m_B z^R8*RS*~(raXJIG&;@a)k5?a%o~P(s&_bp7;Cpk#gIkv_w`uu(+y+3CUs=l?ZMyP7b;dBgp^3IGs z_LdsL-~3VM^>TBwLJ@z#1PB#*HNP94di4^bwfgtmos(4*-dQkVqHJm1qUO=t59)K5 znB#6d!6a5?aJKHJdVevHaH_wxqU@^cgg<;{vx1_C%7fJxud7MCiyY6>83kt?+UHzq7a8j_hE`p50HX%xFubnEE-raDgS3Wj z`O9j$WoKGQIkMP&WDgP_d-E+u@@10B!F|%T3efsqI5|d9#=*Hd+*;5r+0K56z8{#C zrF{j}`kRgy@ah$Cro=&cA48)hArsn`OGysq05ZXmZIuH#4Gse1K_~m(piFWI8}r)! z5;`NFq+A6gpMP=I5{mmJ?&#ui)x{_zccb6CJH{_vCW@COF0Y_wM0k3TOMD%*=Y(L` zMi{}N3S`MQ5e|MhC`TQ@?sZw#H7=WQDucEs;*TF}M+Pj0&ZmBa4;;eUHnt8k{F zb!Rlr^-hN0`e^z5f}uFqz^s*liD1v7!&?C8V<3z_mN3wPOX33bfP4R1GR)uig5e%0 zWtjOvD$~u#%NR3}cid(exB6 zvLWKm2!ap$h6$8Ac|hYkQakoYVGJ>;^aNk?A!1<2xAg7HR3<$}cnpYdSBUjXOer`R zn|ovSb8Yjgd3GI`S?%-YN&k$FvqzBtbh}`@4J)l8od6JHKW>pEyA!+FdXi#j!p)EH z9Y3KU)0Q>daeYHW-z#m;?DkeVl9l1zgJ7Xe7&dy5ppX8`I9F(emc(gaZG^|`s(WR< z(=orpv;EXCao1a+-d{*7xWCir_G4f$bV^)ItZFP}Z|prpT?}=m)uAckqR!bzmjAu` zQo60XX1eg>lnbf9YvMi|A@BXija!PX`9-rPVS)0GlTW8MRUfbwjWF+B1mpb-xp0#L zr+#_t5Ot(82IZujsxhv@8>@&P)y;Xx^U}5NRty-icGAlf(w9+?ZhN}uiXZ^34);(^ z4sxh(5q?CzJ2D%28k2Cfrc62AyK^^21)!UiSjbNZ#&b!r%|nZ-<4*tEi^ll|EZ+xq ze=}7W{La3zz@3VnPE_>yYn8uJzvaFiujF`HTjMi(|C)!eBuCJ8$qpN>ZYk1R02S@a z578pP3aY+UkyL(R)v7wVNvE#no!h-dz5)*Ks^h$D5>Xg7J1bBduXO1{vk(Wflf2(x zcr_USnzztyJ5zQYOXhKl{LRWZ>g8#U{Ar%~@LKCsN4$5D)@r-7SbQ`?gprH|^9awJ zLiAVo3;bUk@Yg|AF5rU{0`N~63bxHB+z+9V2v9#w8dQVFjb4uK>AP!s78fwJa0%Oefsn8De@`+Z5SSg57*q^85R6LlBVw zR3D{B(x9=I5 zSureeGfoO>$wCyhCM*vhUd=x}zc`8(2J`6~>RB4e?SP+DhL26e1TIyHCTWC1f1RkQjr`u4 zyCVyYtojc8OkrEY@4-URf;~V%DYwyN?fOQEr{IiVlSBCa8FZi*tHkwJwzkCHBpFAp zIY0%0QY8Ks$x0w5k;$g(Xt0sS1ai^@NY+bx4)V%<;T6r!{3o1wyy>^r(q#4$T?~+K z!JerL?kJm`For!SA)An@%&mybNm-_H9jw|YwY;p9FH7tCKPP#MyLGPmrgNQABju9W zkprz~!0UPk?oOX_3hMz@-<~ZgrAlY*d7vwkZDI7AN_dqpcBSi~jR>~aFD-{Qt}95< z{jSSP(H?1*$F=A#ngEy}<~K>TLVbwt+2=1YY5?ve-L?R>nd2i&D=k&2PfmkFAjdwH zRsVPD^i36S{?F68TMz_b$S?vbMpV*I05RQAo=WLL^D1X8{JM|uxGys1x?Z-CA^+!e zD749_Hx#-&VZ|91LDsC{jd`-GFV5!=EaG^XSY!JD&O%_&43aAhdZ#)&kCq%?YPMirQ>I9mkgp69_-HKa_%JP# zm@nhHCpWAm`RZRlUw*84wJju>;_ZD2>cNSUsZ@W1PL&|r{LThrTeC3<(zt4y4t9PI z#@95>^raizFN`JgFBOLqWnzhHlo^!=+4K@Dko^Mg*%Z=+ySQt~XtE{c5wWPZ##2(9 zFqoX_-C*!@^k8K+cP%nX@F(OFd_Rk?$%F_c>s>GZ*Std8e~ z);%peR{}M|byvOn(wo{p2j7gb@Wi=yPy4mrCEu~xmxlYxX#UZc&|70hlfw1+=^jS; zp1mkHg&sq%SPr8knz?0?t1+V6!SEL+w#}Z<%^ei5=9t#u(Dm6Aesi2Tg)bL7w{QU* zjb`-uuKHY-AkRZnlRGas{#cJhiOh}@KCmc!yI2Jjk^o^36zW)<`qpnrK(#lhq7$He z((`=woyxCpR4&Uj^7{8!aMB6t!?Ueljn|~TP#UN@hpjXs^k9~RDFxg*xA;19{*VmI zhYXV!9%>oYrg898O2?cWk?|}f%A|6CKx03lK;8@N8mu^xzpf~2M7HwGnu%gMf;6rs z%ztF-N1erQ@p2sFTS?+lkJ1k!$%ozW8&6(#*AgpcH6S8TX z9$;BJlE#)?YNkl_c*(bps&A_t?s{j~{%~dPt%(eH`SJVr_s$%WS0i7&%(OrUBiqpg zvz=%(!E`4|uoY1C3M%tmOKUtYJ!>;A^Qw(}sx#h3FOAovXNkZ8BnJg@9YP?K!oPy{ zc9=!c1oETz=>ow{gdG_3NK@q!l`yxFVei}3e86LQ%uRE5*+nx$hJH^Dv!MB-RgN@i zL*!}+1MH-{6D@y{8y~Lq9VM3lnVR0PCM{lb|A55FkwtElkeAqFD<<1OnTGOJwHDlb^1h{ zMxRPGn}ALF0Pu-4KEaVg10>D};4KoSOp;~ZybEA)L3R96Z1THU8)Ep-$RNjijcbk- z)c(MSMO++7@*Gj8={HlJF0xXz2-3K`r`Sc-b?Zju7>ddRu2;p=v&BS3$1_^`eR-52pw^Edd4O)1~h%M1jtb zFdQwz*DMmJrIkLBMW1@=1#!(@Kt{xwd+0t5I6YMk;rBssV*yVI0(O)=;xe^Z_ncuk*8OpA_(fnk5jP@RR@NVg z@`kV7Gw4(&e!SWA@exB(w9HvNs%><$eKxN_1eD9yA&(q|?6-SDF?Q6CAl9m(9)!@& z(8dCT02w zY&wj_%1Y>#`9jvMz>|uIc?DDLFBeiLwniis1*eeArOOfFYaEhyec;Vg3~Lo8|3Ptd z!S>miui%Kc8dz3CaY7=dX&Ya;y|^~f3b>!vU`ifzv zUY`H`55%}3@ngM$p+%Qrp0!$=DjgM}N;cjXPd#ni*=y5?SEF2@9HTb1UZ4#Cwxc4# z7z>NbQzcAP!Ig7l>VC+c9|(9;(>37qiWTxA&Gs(+iOKzwAXI@GEo$lxFd5NhzrVg9 z8#8Q3YR86!^t3p62F-4KS))^9581t5c%JR2N_FpY%nb-K*7Am}KT6zfBLBZI^Z3u^ z9{-#EuD0mr3e&%u9_o=*x{`ZtO(7DUu$@MN{?g-_Unn|PtEJ#skZw#bEV463pBIKy zqkycfy$43{OF)kJdpXe2=zrZsu)Y5Xc=5R!(llNL7w6A)sR0KHgzfWd$MpuTzEVcD z_X6?!X1>U&Nnm0fadb$r{Pa0XSDB~_Xgf-cZMaQunOlROw2h_m7pNmQuI^Cokpc;0 z4x~=}yjVx8(D$AF9Uf8?5l9BuuU#++R(XB4bpNmya?D($jVT-SjwAEVQj3uC?z*f5 zgV?YoIDbew@zF=sS+#*|-fEpty4xJt{+A6RYL8zq+(&^oqYmDTSco}|)rL^&IfI$j zzDCUNvfgOiZcZRKG2mJ|-SVs%Pxv6@ulHv>V@Uv2AOlz*QKBKh2gikw4&w>Q0Uo^g z;J6B&z>4eVR}J5F={+c!sfGrI?8yl4iRh6F{+7Jg021IH^8U6iTJ{+q4BQ@G; zu}%+~+X@4holyG;cZRdmMsiFC%l*qfgxoX z@FF0eiv(PE6WhXi0_{!3oSnx;t*Oi?Q;Y^1xhQRRm3c>WH?(s3>zh|oebQf+Fgtu3 z;pQz!{7*E&SuUkg&axDNAVe44KstHhW)q@xBa3g)9=3SlN+=@C*d+Ck*&ZlV+p5CA zZxvG*;=_3^-(I!W9!~`B-@&J-cyG4yA@#^aRKCAQ6|2>d=KiMF(KnJDfV6UG7$^%O zP7THeKUyfTvZjw#s23{7l)=bfX;EoO>X8hAT{|2p`fl?sS% zA?8bgJx$bljkw&dCyFuI#VuV&m|QmoZqdFp(c=^4wCWKAg*T*tdtqm`_5eo!hXxNH zxDbW9cA%c}-bL;otl2~C#opW}EMN0DmacJq^L!%ia`i(26PsN_{GuQQzo+U zVehAY9`4>XeWJR<5F%z0pcVTkdha0~7Zd9NUrGusoKET)$!I-TCmcGbLB%ID+I;I6o7EHvqf;Z`(p zY3HDbTGlE>F>2k@{fGUw3|2+3MvI^aSVFx|bQi?ZG%+^+RvN^QU-ZO>4xo;(Ocl9)% zcIMSHyd2I9_g~PFQDeXzCLP%^ilVMG>wn&fGl!#cb3l!l;$N-ATQ5hk#C& zt!}LazE|w`Bw3;}KbzIqw+fxtex$CncD5keM~@0zW}-mF-VP8I(DB2*9xfrx_N3pT zn3Gz#{u^=c9o5tqt&0Xhq7W)bKW@jyniqw?vlOM+H=kM&2N5F zIrc(j6uduUcPt!wHIzex?|ofazd(2howBL3#hhEZhj)JbBg!?pa;E6rW)JW6DDSA~ z**HgX?dI747&+1oZrjXV{2Lo)50?oG3|V*Lrrh(9pmcrzgd(%o;*f-k z~P2MM}zTGiso4 zRW|^f5xD?06dS8^iJ=~ap=Uw1Mei=PC}zFyD+Eo29Xmp_qu2R$$;Y|nmYsXS*OBs0 z>TFye0@a2U3eI3R$|>}(`Dp!~KRr-d9k;ZozL>4q>8*7*AVqTLg(u-xO(o^+m(dI0 z1w+1aWLZzOK7Wnx0Zr&QW>jHs>xgSO(cn{KrK2Cw>KhBw!7i6?@pxDrDL(Yi?FRxt z=iK(ukVmqa>mxnQPal6?lDi+sVQijvyBzF`x)sucT*WckVU#=Ta*n5nMiVv)18Ov^ z(r-YGHbGw5j;-X$eG^NGJX~_Rk=C){pAwwiXm|$?Hyfg4r40k2Jj2WA`yA20hp;5Q z(J1=CyAkEEPThJ1smqE7EcxW?+nO7du4}GWhYVxs=a`|4;YC^6flvbq3du@s&G^|i zUfdfnhjVW=QH&c{w5xPWMszEMA60vMt?Ul0oVvmF&SYH%sY|pp=U#3wwqX)I$g!mw zIbYkF{QRwhm49Hs%%?Y7f|qWG9|bKUH$gs?Zv*T^2JoR!_l!0N7Nf|4qe5r}_DtX&MWFzxsxvTmn6}!2us{$cQTnjJFuo z^|2l3_S?9#HD)p4!tPZ&6LboRZb@M2+%ZyOp9GI%r5Ge?o*(E#Q8S)D9P>q`D!MU@ zTX{5wU&Tr~yZ*o*M76O9{Z2aQ*>Mb?^m;DjPU4%nhiYYSi7s0l#~jRSR4n!&-e*OG zBjg6(7e6I*oL^FqB^7uClUhcDB0^O`DSqc#VS2VFv(K6AJYl&nrf*wM^|z((0`K2n zO093`2K~`2z_LIBnb9n;2tDx)A+^l-;PO8Rkp5~(ZHQQ zzOCU9h5)*+s88Q@OS9Vlhf?VM%o3LnLzuUl-UQL1#IScu!`L{4Xjhg|T zxusr1S=Xto-yanG;fG&BtPR{RE@i%v+v!1jTB7(qFX!2Fgp1+ooC&%BOZNipEwnU7 zNzC>tRxLHj$Tw7i?tW?M=A-k%vP+emF?G$T9|yd?c7K~k@@Xn;#{E@(h<&RMs7`CY zahzRxOtD0GI~hzTjTJ<(PSh=9?4L-OuT%1=c3QK}xvXTrrioG+mvQ|dNZwcX(ea7P z226yj5GgMX{Gcgs`AkY6iPvb;ZR?NaCWKxqoC6IOm*RP<26WX<&Z!mnD9E@?eBo6_ z?D$~Gt2jK<%@LD^clfhJ*;~eb8Ozdh1~3wJ`yEQ^b!tWCq;2{=u0*OY^Z&SbQPPtp zVu=#UAApVmEF8^JMYRH6Kbk-)#qST!u;}%1^9mpddy!{H)l(lrgQk@+4`=u<3x4x6 zU$|z1oLlFJi^4kw2Mygbihy|>@pCMYu)aAu5zL$xPlgu_l8hy!A}sYqzwq7n%Zn8T zVw-!1i+~T~j3qlcW3kwAqn4JIjsl%^5zRwg3wJ@Sp5kvSU94*irdsJjIEU>*UTZ5Z z8iH7gD9)Y+hBUM97&aNN1KkK!XSp4=j=Slgp^6=*=_|A+4J3Mgm)ZD~)a-KergTU+ z{w}_S^fA2!JGM^!Ns2NSV_BSGn7?na87PjBef4aY{)(>$ZlXCVHSMUrJij4&&i{Xq z7y38=Zi~EQ{G3LRGa@v1KiCzWrgq#DY->hJ;TVwqqAYid zV`4CrhoU3-DjIP$9yyne{XyLGd^L}LNixp1|6NEEz-Mg^uYwhWeE&-g$gvqrP2}BF zYin*lDzLfOw`L2gke*Kav~8T>&ke8H8_3{o+hZJceS6(d(d&;Dl3lK8W@dA6zX1H( zcn@nw)09UOSFmyO{Bc>0rmDcYXC9K0yBdVNci%9$m4}?dwqQ6S_Kmw(AR`{nHk|Xz zdn8SWs}lVdo7I|5|3YJ2(B)QXOmaPW2L7jB&T#5gkae+BSj1wlYG3JY`Ga_X7iS66 zX%`qlNxEF+CON5|DLskNw47V=73HRF9c`Zt5l0ond6aka^h#&)+X}St8rg1excMv3 zVL{-eBPBRsua0!_l9&{sk6jKu!Rq*O)`)*QsaNNSLcH#F`=wnE{}E)j(u^Hm(pI8i zL0NFl^?9;H&H#*tJ0AUV7Nb}5msT^Hi=PJiSlN=rE$@~+V6dCwFI}Z-4>K_52Yq!H z&AqD=ra0?vQ-4CT%Cvzy~W$?YoR9G3RrI*y%W3ykJ!zx z6bE0#r1_VtT1FViM{53V65x&4LqDplnCk4{x^YY81n+^Hv>VB#BYS^$86g#rfMa>n zr;K!RQv%)&v4a51=QK1HR8JDq8BurcHmkj)`&>U6QyTC!E_q4zbAyuBW&gf^lBxBk1jm&@4i*@Y!jG>=Ki7M~X;d|6_ z)fEX?*n(SbyJ!upOKo4x!S~M6M3K-vHO7)JUBmjGZ+YXmU6WY3&piT~9~hpi4=q3N ze@)~6oX-Cp{|={K@9B(~zY^3|l#B;uCB{30quTJAg9QN~6uJ0yP4*;=KP!1Y5aHL+ zCh(r;Q1bz)ec{@e8>mrYJ-K+f!N>(v8{35RH{r#5vP8xwt{jni%KegMTdP=zzhJgC zesd2Ds0@@(ARaFQ#OZ@d6?wt74fYPXO~j}hog%Z$3OOgZCY++n$-}!Tq-;r*?CzXC zEM!;#3mye~Lek$J=R{inFA4Mc<3PD@E;|vlp3Ab0! ziS69U1V7V>7l2`+aUywu=blx+hM{%7!=(|^pu1srwHkbId^U$FPzpY~-V`0`m_cZq z^v2Eklx^4UpPTk;ISJ2N z>=^nAUdEm+W^xS`Kcz!lDp=<$vv3=o|4vm708Q6ZfxsrhXF3(PyYvj7U(uI)OH@(< znsunu{vo)rJ>*HQI25lPYCbH*8>lHga>`@w<6EO7=%&aHRr(2d2Z-vUf{hjNpv2Or zt&I?IY&Tw|hHRsg13yS7RyIh?b){`1889YY7czONnVf-P~ zDsmLWA9|U6Jk+i?RDx0~c!r@IUvt7QtqT9lMdI21fuy$637To@-vu&@_nPW%BLAg3 zLoT*#xRoS2)y6dzbk&Gx3LEJ5Kr}2zI~NEL z(1sIU6BpLcu*_F%OP>X6jyvalimvvPo5Jj!ta}kD9-lltQO#LdUagn0|Jluv<7L=z zc)^+ouk58=MJ5}%WY2aPe92R;!tgMd^BFSB}svkA*#2m6(V46NMFMXbK9zpcW( z2fW*2uyi}Q`RPnxf1`Xr0hO|KmH1{w3r;B5yJ;6+*r)vu90K(8e31bMg>LCNtCRL{ z!19aSf$zZ3hXAO4kq}uYSy`d&b?i=+;fZ(o7Ej^s+S-yK zpXJe1C(=75pA(aqYj*ACQ(7GLf*niX*MZD!*UNr)PkviP2)S@DLg&AC?molkPncMp zF}#h9$Iyd;e7OI4mLA=|5h@|aXuK`1VI}blacmSd%I&gS4kkjk)rr6BEOqp|9Aq8URE=U{3&EE-|SJEawsi4R4lZ$9%iN2x3*C_hY$AVde1{!mHk zxF>*1>+F_^3|Y%W{#?>d>*{T_z19ZeqkXl4OlR(sI(hsEBmpeI7S0j+P!_dF^hWHi zF$as!*H4A_weM|gkyP|e`IgtE{fLKc4{z54sKO}cCip=~&R($6aDgvKeJfXvsm^cK zW)(~qY;T217N7E`-kMWgNR-<9A}MzB3O5|0WI!OoqGXV_)9A#;W#N|G>~FDW2MaIR zy!ZCYYkTHz%!6l{#trMA2Wv|lJgOu_8G#V^`jk1$PU8dW&lrNV-Pb$_q0YX9sdR;< zF@?MpcVv`dBEZ8A4Qa2S2l-;Xmo|c2q}ud1du5JeZVI`KW@m1RG866##{jQ~vZf{m zfGi-gfx?Leg%PN3Z!jOjG|q!ft<8kvy^*9E-Cd`;*##C$Nu8KALjm3f^n;H}c63u} z?^zBDL_FF(o_GWkIq@hgqUcAL*(fOq5q1KYBTEwDG#HJ~_^wCRWfyAh<}_<_XI|Pt z7sa^mGG{Fm5U3nTfK=?!@*R)Bf5!@h2HsYF;zJ=xdL8@G$^E`qwC`Cr_je4b%3J!& zase$vO5xGL$6B9uUWk=7vIyFk-?b9|-awy%;H26e6HJI|f3d%5Jh ztiI$teJ@_-=PN52kRv>6rTEH9cNzN;5N}Fops~^OR-3mRHM-9rlZca#Ju{5c_I@+> zB3Y?Y#T@qknR$2H*2tY7Opsl_^R21{D|qi{c44}YE|W9Z+VFOeOXC9yRwPP}eOgsI z=qLlYcWq4@V>c(&7~AgI=%zk+ew&~*8}Uf!An-JwU^xYgA1C^og;|)ETZUIpIMHlm7w+C+f27MGR#1*fl^~lSS zT>Wmhnqb7aMp(`sB)ekD1VwoERrU_U=X>)bE2Mgh^Q|P3fMbU-p z<=-hJjcVI;qp>dcaM7MCk3#I%qH)Sk$7;hY3?X7GDZ&YLv9f0^(Q)kZOj%XQ6OR~A znKs4KAEYi{^2^@2P2r&#7t= zEfy1(A7{_&eqQ4>@T7E(HniZd7o6}gl zJq#lDBuA240#Vj{G)_5!&a4`ZBWv4D4uW#ngZ~`P_tR5*Qj+FoWIor!_?EzV&CLfE zr4lMrUQB)8sga03%=*-R`r$_>bkn+pS-;CUj*_%bLspki>tK28uz06gs89E4ukv|o{8OF#`YjI8laXNT{hSLw?!uh}}4cWn?|EOu) z4_vdBb=|3_mlmCHWvfhD1erH&3{?L#zIp9fJ61VXy7EdBhPan=v!}-7Ml!+p{jV;w z-T#O0zM5P7E^5(W8OC5AjQ&B?qhqU3Q5;pO&55ah^!$Ip>H|7?uP(V%J&-T8CTi^8 zYqmo4PkPSzWO+3c9@d(f%;^1jXVI?us3fQwYQRL)@DzcBxf3y#qy6R=ymx3#dDrMA zuW~;prz;h1$@&db z>c1_X)l&O(0=@PW(fS8bv&S}KwFotSr8Czn1W&vjJT{XtI&tmpSmBktt)JI)^HO|# z+xoYJOY`yXUGbTJg|sz2cRgJ5|G8oAk$)!dd*DbpdSAZGq%DN0oJ8sHNQ|_O-)icK zf-waK?VZL62yY?#sS1u9gT@5ZA3``RIsPr9BCgEnOzyj~@`S?>svO-#^1B?QF@^0` z=AZ?sCvG$Jm_fbm=v7&bD>ZE{GuE!p{vf{W=3)J_fHDQuw-pApll428Q_z&=I3~)&hrGp?fE4R09h~$Bln!_vhOuIiZG@ybOxOt<=mdVmN zCxj+$2}O$jy7Yh;rvZEqjj_n~3*H!(T}7(p4!)G&bn{@xo@KW4c-U!+TdM4Bo=@8L zWw>m_e*T(?`Z>dN2Yv(CO1z*1hbJ|poohwBp@;e|!5r%_Zb@D%=6lT8x*BU-4PON{ z7-J|S*pUjRNLByZe5W`r;nlH{gYrX$=i`maYBHm$CcogP4R<~9;(N3g5nI%&pLr>^ zol|VfyPHQy96l|vH>I$ zj9;-7)!*>RNfW>Hb`~1^THJoy)q`cRHE~w7 zT3*}xU-eTY(4)7^v$WiffB42vx!}qZ@h}rf+5eV&)W144B6?yoXw!Z*3|s+ZSfiff z#lEt&f<2~ii%6;qg(w-U-esh4dbnunkrT%0QygD~*2#p{gS`lIEkwabV{XTJNZ(rU zc#x}`E!qwsd_|V%3i>LbUIf8FPSn3`;V#=~wnUfI9K?!#uOcejxy1 zmo2}2R(R#f`-JtH;nGZ&HS`Ii+DZi{UI8iez=J~RA!+&d_W$fyg!{i(%Y=9!LUyPY zavx({G!oDi$mTI|yRBh3H z{2tbc<8+T$Ao$^yGq&x**z3E}%in$k-j#Z>t`v>|BoxXs&{V2B5|$_@Qc0sH?6I=m z-^AVMZ&Pm3XUp%0-?7yn({1M+P)s%cWWJ$&8>A<5{8`GizZKe){-6eMf5p5{jB5J6w6 z1ydR>+97>}Qa7X)-4!3EGQ-w8cYh-(UBy%msd(z6a{l$bl zqmYm@yt_V|hn3(J3}K{n`h(sgU{;DqC8!0mkK!wJ)(m~J^^z&s+v|hHJ7=K~$1y1-OeCa9 zqvP)r;^hSczpcf6^#@{^?doxcARHHIKYT%{{a} zk9WClJgfER+JyD84WNcHbh*W%h}v}Ql-f*G>DRc4d(`$>oe0F5ry{P*Wo~;>4aNh@ z(z0$Ijdbj0IMVR3IR~!x&%wKUe~{FT#D7tmO4&~(J&H3?jr&3y2-L;48SX(o8JB#y zdi%8kwhnNG-a`N@THvV74Ah_tIj06Pe_UZzT)a!`M#4sm&4&+vneDBRkr^JrBe~Ia zf}w}|(%PD^+l(bfPnBcyw#1j zOWJSJ*N@bTjxhAk;#kpRo>Nh%8)**Hu^&v*FX}PReHdClQ~9mx*rN~Ge%q8tk&-_T z1Ybv0%y3oLfUIx_7>%W0WV$Vsm;p7C;znCqy6cz4oHp()xlVxCEO5L4Fdxr6!aKUV zJbNP}^lUe7QV|3<;x=t-)Rz}-`VRe;{E?Jq>CV&JvvhfPxGCT54|rdjF}Kouwg7JSq$cJUqk zZenNwB_1J1g+u=!jv+V~{<=Fot$knKzkc>~%0xM_-IaLE8@yK9}#>4MF7>o6M zC=DJ6xKLhUX>RoK3C9?2t>Z%j_Kf%63cx*@8%@o|hx-EhrO;4UZHyt_AfH{BbZe5- z-xsdPuCksf5L;>YXu*A8=R>Ax^2R@Ry8>wAV{ z)SsXHT~0H<9<2VLG0xPNzMQ< zgd3LyXd3NoBd8%CQ`}u|bbR#pOg&HwRh_>m^odn*`O&W<^1vqUjJujT%lODFs;%1- zsz@JhAZ;59h8pqc9*%bA$OFf@QJV)BFMcF=W?e94?eNZSk<8>*+{=#?;70&Y`rpU` zZjnxebhjk88K%NecL5&6&JBPZLivt~2FULjAMdk_;U@Mx6bXON6Jwhh!!K`uuv4CarY&}+0g*E$;D z8drwquN->)nU|FYc(;8Py;J8Foy7ps4Eln;En4ElK_0kdKbsd~a(sjQlefE<^fxnL z^2Gs>4-*%&clp3d#;*o=IFWD{k$y91k-#>^Ixe%EC%5){==+>#sk-lQD8gXUC?;eVyh~GX)vJeB$Ac^W6_~b5C-qn!aO|2gepq z3$D2KAOXBu!I5@j%i_BtCq0dK&D9+qxXK&0oLJ~KmF*vvYR5_ z$IHc9(sN@2(1LS^x$SBSwh65xn*F<4-)GUqdhJYvezSf8$n$^+s`gj{!lty;&V)xg zzl(H(Fp}PgDO+D)Q;9Kkdi}J48a?W~@~5f?gjf6ST4iCHfJGmSHMet4v`N8ZudJoog+BJU?*HiqQP4JJy00Dl;!X34yAn^x;Jb zj$8^`1MFtZuPlGY#a6LoOuQUA_0+&g4Ux&YuBc8I?sO!TPi|<9Rc*4>$hG~BO#i_z zV~)lz5)g0^L>UCogjw6-OE5vpghpfeI`3}DP{~R{(=h5#^-NX&Wx-3Qe*C`EO5nf8 zeXg9Ex_PH4wOX#f?W{Q5(Qqq(3hkN)$<^x~-b@)ZnQzi5u9 zYv=IF2ryb+-B2MKFLCTa4gpwzX4d&&fIo!MZ4{k)=9crxB)0KI zLdX{gIfDJZg_r?)5dJsxwEJ61EL{5U2Wi-8J|Pg9VuDTv1|USDaW)iW@c72*=mf)$ z!>=S5i#5*flV=6MRrm zx}%D2oV1`}znb3c*>VQl(>M_vWD#ncP65&;ycA@dLTbAs77Y-p!-gB8PHlWmjARRR z668}XLo1w|gx5H-aOY-C267QaQJoFWXm551oeh)nb-BjLXE!IA@UF^5{@2*{e{JXg z1D|Ryh{NBp9M9% zmIGOV`+&h9`gT%mf*U&}>%4CKJWUmBnm?c+Qoh+dwgciwIZhS70}_Am-W$<)C%viK zaRoxv?_UnSAo&p9N@EnweNq26w*UWjkNXci`+xe}%+)uMw@uJ5AbMck+cXUQpQ89P zB|hF0w*N$9MitJNhvF?E71;9fEljr<_axNt1KMTZh^3!2lD0&ygW~O_m)Fl3E+h~A z{!!7RbHMn6>V~)bm-S^6Ven&lOSvxsKI@W3MeECN3-?X1Vr`?5`MMof@oz~r=P^gf zr-`<|RapsO-JRwb;1VFvTyund;`gX$k+J-2(yh$EXpPs8u-|lCSoX|$DXH!dL>P$B z{?`_v|C_%H#Q<|7%Tf8;`-*NxO1^lw(Y>;7HQ(os7E&`&^^1D;wLgfPZ&K+>b(BJ7 zW-1Hg!#&s!#{|V@FUd?km`-vzjP8mK^A`vOBrsh0pM4lpdDz8X1`ke-#=vkbDEBrj~X4# zJ@0Q->=$O?tZ9Po23d0kgDG8rqhK4^_Xw+rmw7tNE01_=W#AsAk4L>beT zBazD-Ol1BBt0Ob?6eH$&s78%OwlhkY74px~_=TIKfc*q+e2(a8%zTA!6zvA$ph@Tc zqlc|%Iy{?4fi=$y6-lSgaKv%-A+ael4lLBkK|?D)lu7>0p_Gc#{S%G&tis@;c`uog zkMLaE24@~%+(PNx^hsf98m85H%qc%mjTja1`46JD*ldDIz-4@449ktfti_pkn`gHC zS0T**8C3clfb=esPY?XMnfMvRa(^M07?Nu|$rTIAxLT5w44{%(`0xPXfleynN#=l5 z?yb6nbbjh#gKhcLV46YDj)}1R&1P^`GDL|VP3MSdPa$JDcJz&a@349>k84b;^gBMy z`5~>H-JX4Vg8M#_rH||ue<-52gzg?Ba&}rUn+IxeVC`|BlI7;DwG$;BX(I|H=X#(V z?QNRmeWw7g0l;8%S6rlf75AO7esEN~8ZIZ;q1`5^O<-NZ-3%R9hWj$S8i*y5=s3{w zLE#LTUK{w^XbT~+@TP{bA`9MBvuNgTwbhzz*=O!}Pd5~${S7qJknw$4T+atb{I`Wo z|E_QP2>QB+C*qOm9`U2J9(NMRyHkFE){R?>IHFBVfq~VR5_U((B6TWe#!*wVZ&KY_ zUTi%wLEb?*p8P)B^_fy4uP>G4jvpYGt^+c=%in4r1y(F=;<~Ivld)vEp58gqWJ=|T z&<#uSp$8Z2c-pmj+7uyaptDS79cW9$Q1Z}a<<$&>=16ZNW85kl+&)>)C!c=xx?{fIZb zJ;$GY4|s&fb)cQ|4&JtO+LYo)R+QtTOBJR;0Yz0^U+AV>dV`NxBET-Gd@t!EkH8H2`Ii*0xV#o@c+KSo(LYZw>Z(;X5O+ z>sBUjFNsn~raN|v0ZCH4Iw%>L1G^i2xq&1+t{n`Scpdo~O#3NO@!U$-V9TAtlg%G4 z__a*bZOfo_AeVhz(iGQnGUhu7xYx?c@4DaRSty0`oc?FhWDO2j-do|~?NMk{H9Q9T z+S>xfmcJxry|@o+Y8p1_4Uo|NNvGupf!^-o9a+n2FCbMXs|VaZ1-@(9XHDeM#&9#H z7}cyX#%4zK*2!@6db0=1I_)ajHTSCpjNP($=6_qgPa&R1>ZXVlg8w=X+(e?JgIZ;X zA1w33keieARPOyDgZ4ZS<*rS*HY*UF2BhpeKi}FuN(ww{_%P*t@@c9qOIevCiUJLj zMNyO*{4SPv)`q>rbL^#IoIv|~@4meHM|bZeOQ?O)5!}PCeTLdB|A2x3Em@?C)-y{)H^9@hcM@ADg!9 z_^{Nh67lQw0bbK&l_M_>%FT$;F^f^apHjtt#eBM{m*&F|!NgUq6`uEU76`vFeX(H! zKOp6^I}#z^nZoVw!YD#Mpybamh-TZ$SJMj%v(6o7*=E(*1sc>=4VBU|-Lwvr6CS** zI~9HUFy{<%Rg--V9w7>nu6M`w1!qyylWPnpNwS#1_Pp`vjK$dVkzySs#ylGe7jL@K zqOj4x=UiqPYF}a8KNfrc55nC?04MC#AzaOBcdocNaK&$XY3cq)a$~Mft9K3Q7-7Wg zv^gP++(l_xevxP}y9K|GL5#y;hHo6}nCscR=*FId&2q0XXFDo z5E^?DF~W*voWQa^(`3&9)uSO@+g-tl4wc@|xwdvy_nzmE?9l47{81ujK=cjgiJjJI z0{g5(Sp9JFlV<%v)vd+lP;c<=Q+i^;=N88@f>;)9yDG#+U&7pR(ER4af%4$ z&GL6FENsgKeyHo`Qm$jmXxL0EPHc4NG_Cm?|1;?|?%;ioZ(}JhPP_jKxlQP+MK+~5 zi}fxBENXRi+x9QG>~b7){O9lb*z!hQ%w%;-I7Wd)c}Avtp&BtG@Bd0SdDoS*T4>wu ze5-@T1(#Y)wQv)rd;mMR8n&bi<)aw(&EhRgpNSmObI?m^Czp0V)zlE#NAw#^zWWAPEiV9r6d zfvw7_<4ecZecG%h*?egB8v_mM1m`iO;vf1@J2;xG6K`5K1aQ{|a6e4f9G|9R=rZ@f z+w+w~0BX){E`%%gzi~7)%fO%6#W3vCO;0qGo|+gLt%9NpTz7Ged-h{qd3UaXH}fc# zInI#z&>wnd@Y*52t%Xt9qtQ$`r}sTbro7_U*V%2ueWXOL2P`Kx1{ z+)Tru_um}mTVJVvcK_uzq%K2ju61_~wHjV-TVCtD5xTa5%Z8>w%b`j4Q5C5`Z%1e? zU7SHQe~6mF*1zn^za7HP&9EYHb^HdmUo%0Ife2RLHGLmz+jFzNJ0a~e#5f0m^8SK3 z=~!I31reMxdlh*)tW%n`xN!!#-U8}LP$1p8D$@ti)iI1LSR5Vu2Qhmz8#s|y0Qb0l zdO7!}`5#2?PjKyh!R!+crveN16HK;_L$r(67)M_Ev0X?dDYfEmxF6muQB;E94`?kK z0pU}yO-H%o#b4oh-gEAx@Z0-}3T%A}oi9W0s;UyXBbJ${<@$2rt;N`SZc%g5u1kLq z?}p3bZuhs>rrh4x(_g~k(hBqmC9M9Ihc3D4`QsYDL8au1_4UZ_MN|9QnANO;w}6UB zYF>`J_e^pGf4oeMR%W4zTgO$bZ^t7k0a?xb4n^FN3a55aQzO3Kiq zk`ik%uwV=Oy4U+Rm{Do!37@&?Ut3%@svbdmCi}sFQ3+$`P6;Tm*wnXUla2;b1gbMH zu{9j?$%g~2<#`<$W~_rB-Oxp@P)d9Mj`59p!FgD2ch7V;mFWtX^?RY|fy0YsZ^M;X zDVb!KBI1;qCdg;vDWLqiBFeR=4{^I~2K(*w-&ZdL{vLuS8=PeY=DEOlL#-^#`jS~8 z(HfZAPLj8ji!H{BH$i6urqjOi?{8+Qj->g<_nrKIuoq9$Qg7=@?H zWN|?uW1>&j(cgwvxWk;$-SCAzFAV*jZG%A!8ppygPEXw1kPsKW3Q&TalL+pIH>ACP zX@|%+aC=CW3OQJV7L(Sw{&Lml$fd{JvmB6rtn==v(F8~M!L1=Mxhy!fZI9A|>m;)NY{I}6knIC0}RH|%`iqh967-=zbE1uvA0hIN#GBNc=I@+RdI_7frb zn=po%z|t?;y8&7qUU>O97UtE?@)(oKMCEuED%X=r)0@Z%2AC-+201F!Z2D?0)4j|m zh-CcA@x`#G;DEA%M>6bGI~APemF}6na(CAL*8!eYZ6C1+2JhdLfM{@t4YtKuzK5fi-MIbH`uVzqt_jUy zEz1Ur8SI|Fb+2?ky#*ZG&~Rv-C>cN!`?d2yqOE{~ZNc5T#^Bv!9?3~sFracz2rKmx zzom9b7sFxs^m$q?M{b0^eEjZSmN(tLRZdaA@oyz5*}?>>{n=P?sL80}pz$Ds)JkR< z-ebOI-B*fjJO&D4V~1vp&zDzSsY?2RZ&`8+ehy~o>`}RAe7u`UT8s0<_8dRrZqUJ3 zffAF>T;3Dh)ClkVB=bDU`$A;n;bSuaAF_&zXgC_g5$|V~a^DE$Q?Uf%uA0P%az`KK zbH~&^WW61V`Eo*eGxJSo!7xtg+jyNHQac^f_=yso8;BVAri!m$~dBGwo=4jA=*`S&*QFtB3 z`EN%G+TsEQ!^CB1%Ucr{54FFzbw_j&+okmbo$F^SHV}G z{QIXZ`!icrSN;xq6Lz%>BP$)FygqBu5wSHYDZBwbVQIKXH#4WDM7LZ8%hh`^qqkZN`cZz#>>0 zEpkT&D}gEOS^Zozede^*#r=vq%&jOv`$!*(Msi`{r(6L2yT_Kj!o-03zVj7rn?Vn7 z=!;q|)s9ET%xB=I!{c&%EH3~GMb}AJ^oDA`nRAxyEinInNT>bM!s0c_RuTRB3jlMD zFhPG?UdRFvSsH$jTq=}SfmiJh)uyLgJkHm7r7-Z%aA9mAfc`b3BD%ghC^Y=IP3$L( zpkbjQ7LxvO3>$i$flV|%bR%WzRi6SkHk))JO6JfolFwz|lqug&3*7gA;*@REA6yN{ z*$y~h=#grsCd-~J$MR+?PX#rRx3Ttg)?bD`mCjN!W@LXpMrncU#0_(oW#@Dm1IHj4 zdf2a%2Y9NDNiUE6+nnfs2;0uSGpefBT&LN`k(wGSz+M{o5Ky4>O~I&T@yGnuvYM-| z)nA%{@QNZTgfq!41N+H5cEp2u$-7psX-{1NBeD4mzgbjc@w@&c&r(#t}DWaFu3~Of$Phpz=_(C*r{M`))@+FLyMkZCA4CKVr0pv|KYfL`)FbY)!1L<>FVlb) z#E~mwl(hJ@qk%UQjolF{joUYcy--;_v~->J{!>}$-OW~up*k}b@OY5>;ZgJ+aZlem zonNC{Urfl;nJ+!EpH^{4uEm`KC9>To`?ya5r;#`&$V|8NO`l2(Mp=E{z)#SmOZzx= zvCsXh=3oEX+lG8W!-T@!5Z(1cbG~qQ3nuwi^EW6gmt}uKi?@GiV*KO!yl)8M)J{}$ zcOs??*McSt3u`1BE3j5t{p1P?z1KqsaB@l|S2bLfaAMpaI|!Tu3`-}SX~44I?cqRQ zPcq(XD8CkKBIMET{U55KW|8kVZTxHMc=`1tU7|lub_A z9))J-b7sa0pzFuwksCTxEkHO$^QB6CSU=V2>(g*h1RhN51>o%+tsg@s6@e1e<{tiTP_L#EWJMI$&S?Y$6VDQ^9 z%v)$q^$40c-RQKgJ{nOJhlHd3R5zy&T3~^&FanZahv?qW zV&{$ObV|l4WH86&wG2qJExJvD`79w;@W1+;N;#cPUIS@JL(=Bfk)j3d_Ol`Q(4O9y zza^DOM)lu&Ov9r?rVoe+j!pD@$(eotR-0DpnnNr-60@`Xrd~Ztssc(`ByODaW*-Kb zhc2%%fV06UjuOPw4o z_vb%n-V;EDctSOSwGX>^`{sAtNI#W!o0#5IAI?1pmGM-i~-66AtS20O zyc%P;vtRiX-uu#eo%DdtP)ld@PZBpEI&~ufX5SGIU;s&ndd)=shX;M5Fel;7HMEe| zCfGwy78h4_+Z__1z}G(mxnvM^mD-LON=!)?OoT4VO`d{1!K~{39+PU5YV{OMVNpp{ z1?QOiSegY(Y>!4vjGklFvl=xQB}hNXZ?l^t(huZ`c*SeEFJYvULEv3O!MEZVLJF88 z^gnJfAZ*sN||o-E{4 zUWE+t(+vqGG5yK06c%9SkV;cw9iKJM=J47`5g-|nKEfr{Us=|9UiYfF=`EXGn1kvs z@K2h8qhR4JT!QXPvim1iYW5EX(^e#HY{Bq*HrJDPZ*BI#{LOl>(G^rY@Kp#gdRu`aD10>dcQd+5L&w|tL)e|t03HtQ z{gRGK1@;7%gqH``ksi7H+=`nM%hsG=p>hX@LB?jpJCdQyk&c7&Zn=v_ZqS^e(uSEDt*Kd+yby27*PXh&|$F`rRPZnS>uThjxH@6a41UtfRI#y`R=r^=8CK7KcMndhFB)r(x zuT1zn50T0Q*=TdTAUJ-aZqF|jB0U9^Ftk4A_`+R7i#W!rmLj^Z*1rLw-wj&Gp{gb3 zu^^gKcpFc~^6`>1UE@~iw(A(mK2qA6PzYpvu-Qi+Hv?XaikgGK18{(wClv&l#Q0-N z@s$zq^C?+7Cim1%E9WGzrRnD~4>3aCm9p4Vmx5ei%+2Kwx7SuOPXTQ{AKDAO{#>08 zcL>ypUltf(M$0iffR%TJ+)%ssJ;#pfQEKj02^L9wAJyb2rJ&}Vh5?*{BShd2338t> zvZjo4t5cY^5_2oAP`$e@M0VBJ9rg$zdg$4y2vBd8F$8IsWdq zLq|EPw>peJ|F}0y--#A0$mEy|*QgN|I=wIS7x#=#eBBQ0?q5755i+XvBzHmr$54x} z8BvX|&C?lG8`G9_ z{cILu!qdTK7)~m~fl(jX#LpI$<51kVLpR>Y$rOs&avU5KT#Dv3%pfZuUW3cFFsEDd? z8S(TJ11SV91D~~8*!1@jBX|Qx8rxz@qtWpLs6h`D3N134e>Xy9xL9|ww2(D2d zOqGGW@ZIq4DjKmQID<-79t%J@x&K8yzPuBtid|@jSH?J|z=oWD35?b{y$;juaA!%C zUStJsLgt{35h_A?7;f*{_K};1RzR$_B?5DdX1o__pbwudO$o*_?^Kw59WgGT{@##{ zPcSguz-6Ll#j;0_F4s>#v`&F#^EcvHf1l?y+%LCJ!~z6Fyc{%re21~cF`u=cjZppM ztU0ti5vIbx6 z%$WA{nR*}|l+vgYG4R*t2RDf$(l2$7=2M@gvR#<>S=IY&UeZTd8NXUZiJKn0Z(PPC ziv$@JEs!YZRJ9k!ifVMv`C0OGs@;H6^&R8vFP-4^!(n$pl-Cf?|Iyr+N5%NRf0sUF zDWjBBG}el?k5*FM*$QFggGesx?b0Hy)OEa(j-1Dg}Bhcab3hb z#~qCiY{$|DG@hvu-ssX)kQ8u523RAkrj`^X?Wvz?b8Tu_dw}u7ZpG<;dp-;!LY4P4 zLGq_}zGZXv0S)J&7``iNut9DZZg$4okj2kW>bk5^+BawU+K`?{g$V~BHM!ojoKKi- zndhx^%pamu>V%&i4g~f1)_aKy{wS^Dq`(epp9g1Jy)u;)caRcr4*6KClVRdH z(prg-7ZkVp&XTv@&qiN_E)g9;2kuZ`oxbMr3D$?XfGX^<5VW~1ek!eM@Kn$1olmj} z3d*sLn0U}(oj!g!fWO<nf0(0uRNWb$1!-U=;Z%W60`aKSFJV%wb^fhi zl#Ev3cI`6u{_de;nBkkS6_@vnJf6^2Y(Qr%or%+YMqry7!ux+LG zF(C5RopwKIT(XH0ht@?pz;90-A zj`h0RJZ7nyU^UHi1?4$7H$99=UIB!tD77t1<#x5$G6_5GO6w+>w~^b;CY+qV-hIZy z_2@)`JbWBA%;+2DuI-!$m@!6ePHE`*F(Y5F;NU( zPS>ZLbQdtj$?VkV+Nu$!b(+I%%P^UF|IU9nzuXgN*mdN2Z6uYP9na6%`()(!m;X^3 zDl#=Y)IC3b-^Nu7ouW^b4Kymb{5y!T2ETLBBVommC;efCy4i!63qZ{2+r;R*v7$S1>r9rc3vBy$ticYlcY_|n ztTEa*7P3)@>W4|IWJ*$>qM~rZjvr1&=!S966OIA9OZ{oqowzSAu3gBkzL2}>V|3G{ z1sji7{HCdU;ukmh$|S2TTG>DZ912l;0w>x4U~=VbDb8GNX^;%G3(OhH{B=)r zzBu$&eAksH4r!GBzTJOC3|%!Bu09sG*+zh0Tzv!=jfOl6u=6xX;-9nr9Q!`dj2*yKKno7q?Y zqB)96+tI-|4xkUEvw}wuh45m(VLGUzgmPVUe~z2te*QWuuj{QXwho^jDPHJ4>Zk8O zz~)iii8Vp`g1EED{Rpo2_6ruB)$TdHU2py5?M-)2s9pO^B%*5+W%R{ZtA-0U7kMTb zZ!!p*UkN1?S*)P$FaEgOso`w2quIaRjqi+l-G3%ykG}~wTvP;qWd0gP{z-m_ziod| zrMN|_Z^HVK3!DzLu{RW&|6)N2%<u!svj_f$C+^u;(Y+BLV> zc?)Ry-F-sq;w*t{)o3`RjTFaj&5*hbR2hH+^E&QN{i#@7AOdN zzDsG(E^GR{Yhl(;r_8~`Z>_e@mBzUHU)7cD6EC9X=Pa+!A_rA>VDeheFx%fxfPWvW ztY`?r4eUEQ<@HU}Jh`;r)c~^cq8G_MNhYm}z-_uk#EJGk#+QcQY%_&9hZZVLY&2=K z2|_m5iNrhwryFlTU(`9W89FB|&sYYDUkqn-fMBf{dJ9@zVEJy6MjC!xEZFbF#oU{l zqMcH6=-WCVE}dH3l<=j5+)BmenXpAumR`88)+fEPX3er0)?jZS-YTG{8}>8KO0eRP zKT0_x`qs)*N3C2;#%agEYf%WDT509v+PL4t9TY$#J3K%n$9VAB>p?MCAOd6BpA{P& zLt+X72W7C@?kakgZ~kzilES%Z17we;&Ys~ot&4ELw7g#j>3iW@LyyTXfTqS2xIwRr z@4*tqs7kq+B3(k|PYS2V->rvdA%dOdK~<4lHZu9tWj}d&04%vCzHXKmBw|H7nOCuP zgz$l(hUebgE10ArPWCQmz3pUv2kaeLls)UNy&ME155XO|zx(QR8*F<_br#{t3V8h z4=;H0gM{NM+`jyZ>qrW;70Uz9|1G!Km{sh_Y$Q!BI*DS{UDwjP_>BhyL23ZyrDH3MhFL2MKyvXGbh?V;NY?`O!7(KnW4=Ic^wFMk zsa2#mT~-?HF-8L7=KU2RbG-|*Vt-PY4E$aN1ZGO=>C1h?Z+)X(VZ>K17Ws`}Mjkzr zW17Tvn?brJc;XuY%Q50?A!9dCV(d@Zt@G?3^0>%2cp)`p!q*v}!ae=1B2m#Jp`pvC z_`^kv9%`vw{FOgS;;8t#5Fg(``fpS0{y^3;u#!QwksoD*)~(-Q*Uva5xo1nAS^2$G z85Q%N{1R4Tp^8o6ewbRef*NQGB4E-XIuUa);9i`bzB^pRL1Kh1xUFy?_yc?%z4)9g7pFkeGYC^#lp46J*bki zQzA+TMsr7Mf>>yYR2|re)*^K!*z~031|{0inkh`JMsaU++Zalewz0AI!woNorwK6$nYbn(q@QY<=&RZ{Pi!m?2o7Jy9{CX%5aFK2lrZLL0B@ERW-A`dMtQ>dSZB)*KBzl}uHQlGND%=UTun+We1~lV7TtHWE@}co$*YGJcmme#ZKL2gxlbdO@hWvOJ&4viycqk z!HQVJq-pQ6Q$u*kX{h0zs)(_&TEi~?(bGOx^htq=WMBf^nu9tva_m7QhE#C-noAKSN44jNf zIv~GV1YG!?p)wY#>n?ZOh2`_15A3NxwT)AQLMV$LfDYmcpx4ix{`8uO(v(t`Y{lvS`3Us4Ct%IGtcAs19L<{qrks>Qg^| zzN#=*nM$j}OTr;h5^as5*lFWAQ`avR)m!vM!gn|L#P*^{qj;D*MCgRQ7n*}4lb)NM zq(9vC*gAZOb_u0}kqIqW1qoBqKAU38$i=B0P}wZiI^cZZ#{?1;V)8zV?x$VI5TJqdDv_o)|F| ziZb}oj5CT{vO2RWyGrW)Bm;e(8cb}YGq{e|>h^tpIZ#>tp!w3SzQ=b$2IJ?vWvQmn zQDqRth3KiGS~^^dB<&M>ksb-<@X>)l2jBdCIK}v;*Tc>TlLsyP%bsuxb$l7|uuHbz zMYqDQwQvQdjcU`wgD!qw0cu^uJuP!DGi+U4YvzKeh#OyzL2PvG*R-Nxy%VAH+QxPh ze&=~y<1u<33Ed#q?>5{;izXawEV&bc=a)Cr_`dakcRUu< zT~$AS_L}InfBW1JHtDc8I^8(F+#>?a%G>;p?5m`X*2Or7({(GobWu=R1x@QM1J`rr z5$oApDLB3O0lef2ZKNg#*AHPzxcY(fC9!&fc zz>o-My8<@$8h1GTg&4>wk3^AuKVFNU|4f?!N_iK(l=mG3Uh^pyo< zT8Q_Y5oAvTCebk(n4XkK{7nWIIMvv&IFDn9iPV6(nbj#4jY=naznzVS0^_u&m+}~h zql)bKkMbgM3})wVhPrs`AGrH>R3h;KaErSlRe_f4s6{7>Xd(mkeLcJSzW0a!9~BOd z+=+7$Uu^LuMLc@A`3-uhtSq&%NE~l-?E?HE>$}A;;I?4IJWLeBSAbjo6w|3^CG_j0s(|#7Z+mbmEw20&@Nx!{!w&Omx zzOqSrU%vR6dXxBhleKc2`+m)fcwwe@Z|j_I`!&zraidB>A=>_N<8c>7jiM0%)(uqy zKoT_b|JhD7$1dseq!TrgepXS);HFSZppl~BkO=7_;PPWbSDq4$rXMS=2(&ny`sNZV zHi#or91dWH~b#nUHv_$ykleyRHuEl)?8J7 zsMx7&%&w7xSf&Z$7EN;$NB(6RbVxG!>vU$VupVxz}Es#K(E>QSfQXykVRO~rq7PQn{ z&+1cqX-PrMgzaxr8T{mh`73KccSmpC?`L!Sya!Fgfm8hb6yrTrq_9U-@6>-u=R3W z4J+*m^%?A*$%!rHEZy~M$TKtrg?ry!KSM;r_4uS+@)e}D(sMy0ggD0HP_y2OZq(+C zE#XBUsDBX>_JCjd1M+_e3C4Mx4^`JW&2447A7YU)@Ww%F8seBQ@Pegs3CugwWIw%> zvx6!hI!fzP2h(a?<$oj8U^;-G^Ln>N4dSj}sa*|v4d#c;uytMoi@kv13x>axMCHmN zkh6~%!XCF}j2Yu1C9)GxV;tpZe*dGCM_MGYt|>Ms3pIc>i#*FY5|V0iE;NV-5{IV+ zIpNR4|0q2vrnR?#$&xfh!sJ*#{2@xujAK-VD@+9#JHets+t5BA?wn z00;9&yabs1J*b^i_5`OPt!$%k$SsimZ|p z{sF{1tpJa5{xSP`jlI6lwpdPOY$G}~(f=?@U7RNLY^-9sln1EOu$RJoY z4ye>#fVc=jeNV**u_UWZC2Y*WPwgEl>ZmYLVAt>&CfI*%x&U*GOO<+p5XTCx z+}sbbkZ!b{a2qzl7cK-SP;$+$wv5<^>LZyg*pI$MWgtqBDVzk5M+J-=ms^Y|^FMl2 zJmS4u$NXjAp*@8z7d-#Cr&RHb_LQaaRigKqA{QR?R2l)?MobS~gF6B&neM|YeFa^{ zz{tIP0{W*$B;V$pM05o&AWp}K$MkBNBLf_)FU~a*F-lur)prCbS>oH>&oisQ*9H!U z;}v+I06Ia>@{3(hnfA6(iaf(c@haRS#9mZcdN`{sJo7K?pk8w|IGjH**H;F2)qC87 z+X;G1{Mg&`;{hzhQis2W(u;;myy)U=fRpmhf2Cq-Nyr<<5N3;Ry>Nx|tlu2o;cSou z0Htbkw$Vq$LvJ7r*07IE?V@%Riy2&`<|;{%F1y%va$=kmxb7YL>gc-&2KN(`%q0&C zbn0Zx{T&se@+>O+C^RT&%yLJO_uR9fBK{67h_I zLJ~;e(kJnlOZGxgSZYurcir944MN7XxZvMi=P!fmOuNEkmEeD1`4Qr#vFeo)OZGdB zbDn9w*vxnJ(6yLa1~Sc{g7{JO18Z|2NIa#!gpnIW!E^ZMYmyODo(X7!ZY|~Cdg-Wv ziQJpx*Bry!l@5(D>(f@ioG>#lEFb*rC308h?VV&p$$rWf147&g3yZI;;rC!_cabkW zBylpV=8<)^n`4KyYhUJIYAFcVC&P4Gk^?2n)<2yx0}{2(GgNft5qZ%0xz&us?lYA9 zRG#`u0M=o%%=dj@M(;VryRthZ@$HJ2`B-?k->z89|Ezk{`v3rKol)m23gGr=^O`uK z@JR5+JudW&gwf?A{Ifw5v~H7a31Q&UO&_A8APTpigl6$VYlmF~6_1|I5Kd`$)&i1& zr~UOjL*j+&9zSlxQsmH03?rxYewP1HnlUXR=O3R1=XSUj=ExQ`a*joO-1zj+_6k#o z%k*As#_(6<+4$G&^I34)0SjvZLWCjUVHR=9oL-&ys>q{nCH18-GxOZ0O+R>86~eXK zF({yi-Y2aW%pDb^2@#finh`d46Rpq84pWOoLNqDmq;Tmo=8O1kW%1J=e|!TqkEfX* zI)i26B*rrHC{k=Yk0n$A6L^`0SUaTYupK9hZ?Mqk%-a$Kc~_=GQ|)Yvmq`9$c5m6} zvjU&;kPKl2?)M(rAPsor7*qI+{9sY2fOVUlY)=_UF}Fr_#_!jQ2_IaGlfon^kH(0dJCqz5H*#lIay1w%A8~*JL6j}{<34^RMr8ir)x(1Dz$nAk? z$KpzZwlBWfln9Buw|lRKE)Iy!l^tWV#kuT zNFV$tRZvlX+(Q?q-i{6^BkM3z;FAill}(VWU%J+UD#_jd&7F}bZ>)43TKoR0!enM( zOakP`w3-DV0ePIX9^B_3tb@M#h+TJntwO2X(xQ6XWjUF?E04hw`#j~%#-IYnF`8_u ziEz{N9JbomKZ>L*3 zGCvkXfs`9Zx8f35rmxEZ*WV<9yoC<>UM8mP6 zP@Km0M+}KU|Hereqy~UfF2==@DnLEe7Q+|8c(jZmb)jttdYP0>y~`e$zZ~SP-6iqp zlFzbjlD~;>Fczd{*wqfqmAC7-+yzzak4%r5t;e_yH_o2-@Lm@6 zneo0u-<;cr4*nU=udI%8P7IqVU5oo8Q!sL^?S9y zqlVL@t{*H^!h6DG>=*}=R}mR~vOdFpl8}8_Z@3^Ew@7M-E>)EUN}rzn!SEB`$c%mc zcN>eFVz~#0&aZzg|6MI?geBVuo#Li#^e(w0>W~yH6xjy(PDd<$h?)$)G*%hsfFlC@ zL_7GGM)0-r6m!=t7QXx22=`51Qv)TksBxpLR>L(l1F>^R+sDtIz6yBVKr@o6qwK7dDU5XMczURFaDs! z`9jobw{L)r@euzuUb`k5dW2gJ*QP=G))D{~DCob4#|yzIV4O~HjtPg~>K4zi)56)9 z+PLC1YR!@@Lyq&;FeY%)6{+HxsGRwQGx0_D}Ab_@BS#2ky#03=v14^O6q-Aoy!SME~fNR4il1{|& zaZT`;>AY(OGroBR%I+5+C zB0hZuNW%Iy;Uxr0G-F9}3XQZB*;8aqjiRCWe6M9rdDTXlV+_6jq|JQA2J3Ff0ay*d zJzNZzlyXG9e(j%2`-Y%sL)4-AeMxtH(JYQVh))qa#VM8jv z=J=)wkM~#bQ!Nq1WCpi|)n(C8ORs-P@{vq$={60OAJ>K@Yuf&q!K{_hlE-r*qtp#Y z;ScPIBt8gZ+_;J^ScFgJXkHPIuH4?#EcbhU)pQGOlQal8$;*rAaq>O&tArOk`sZz+ z6g~qRuJxRXq^b_qcktsLC5i~kkVmd#n7FfS&&cd<{F}B{0(yi5vQ&xv%K@MvMYr}Z zW_~lP4t(LdT-I&a1T9q9NyAXxP0}iY`4uRMvv5)yA2uQ-cKxqcBQv}TQ{yX&syEYQ zjyre;RTb0;+>&1KaI>>IHY!aA)xi=UR*z2YbutrZ^Y2IxB2@SQTPPG33Z*nRz*(*| zk_REDLE*{26+hM_`<@ZUU5RJ?c+lkqxcVa@V0)Zrj=bl+<@g~U&xZFh8qe_i)?apv zWouOMlG$0|X_)#iMX7^H)d*3^;iN5KHM82L#>UQ)FfHW?4`33dlx{)&HFB4~gxa7V z33@wl1l^0E*~zL&#d;$Z?(r zD81Q?URWJj!-xqQy#s&9y%j&~rJBGvMNIBrY^I<|()d^J9v%rQ5BHo=!xJ)BgQ?(I zvx^H(>#voniu&`PPnZ5t($}DRxyS%G+d=b?_@M?Z5*I}}riqJ%w5=Ip*l*9tC`x{Y zwJuG#)Jw9shIa}so$x+!p!*W}hyS|GPV(qiW%~L7D(!=Swwif9yMnfSbvV_phr#m? z4-3}6{gl^m$A~Q&|J>eVGn@tTyfKd$r=S)0k6||5gC(|5*o*LMM@oAp!^*or7~mn5 zS2&3y`eMDyxz&SBL$k4f4dPqJmy)KGu!^^ADPO(Ye!bxt4uC=R;7htOk1nC4+r6aM=Y1!FYqB5A@MxwO4q!E z69@NOimYeC(<73;Ch&JpO$VhkTNM|#a|36t3rZsSFN=@fx-QjGDuM21%R10?L z{kBUOWtfO$Nd}%Uk~XkB>C$_5?p?43tp+NBvp526*aM)Sm}|AnC0C z?c6;v<9-`HP&#C+{4^pvUkiM`$`CU4*0P`fUZVP6j+7YIcXK&qc-N)d>Nuj+z4IiUhDeFUpaF|Gb%GkbDx!v z&n}#L?Cy;Jdx#;~1$P-8>-&v;g;fQ;A##dZcMpiUNCn#sn>+ifiS00^{#+3+b^?5R;5zs{?L08I z19sc#13A$U6bgpAGiCbUzy3rvnWe#zJ&oPn*i8wg?Y*}Lrf#N4D$_C3i6MFWehtPY ziuLhRJ)3B4&BiKYAUNW-vO0e~>$RpO?1d^F_WdNkpmtPLn*g^<#TtF|-yJu1!iOh$ zZ@j$hk5XggjTcUQUEdaRs=Kp6kldR539k-%Vi?MBot1=DOI|5Cknm;Q1J2&kC1u~E aeZOQKIGwdGn11x^ho*D1-QZOJbp01Eh@0;K literal 0 HcmV?d00001 From c36601c21cc8ffeb66eda63a89e5a3a2c2d8069c Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 30 Nov 2022 12:55:36 -0800 Subject: [PATCH 03/10] Adjustments to support signing existing signature fields, and to support adding a signature appearance without an actual digital signature. --- PdfSharpCore/Drawing/IXGraphicsRenderer.cs | 4 +- PdfSharpCore/Drawing/XForm.cs | 23 ++++++ PdfSharpCore/Drawing/XGraphics.cs | 8 +- .../Pdf.AcroForms/PdfSignatureField.cs | 33 +++++--- .../Pdf.Signatures/PdfSignatureHandler.cs | 78 ++++++++++++------ .../Pdf.Signatures/PdfSignatureOptions.cs | 1 + SignatureTestConsole/Program.cs | 59 +++++++++++-- .../SignatureTestConsole.csproj | 7 +- ... Digital signing instructions-unsigned.pdf | Bin 0 -> 126014 bytes 9 files changed, 158 insertions(+), 55 deletions(-) create mode 100644 SignatureTestConsole/TestFiles/Adobe Digital signing instructions-unsigned.pdf diff --git a/PdfSharpCore/Drawing/IXGraphicsRenderer.cs b/PdfSharpCore/Drawing/IXGraphicsRenderer.cs index 63c17c22..1fb7c4c7 100644 --- a/PdfSharpCore/Drawing/IXGraphicsRenderer.cs +++ b/PdfSharpCore/Drawing/IXGraphicsRenderer.cs @@ -49,12 +49,12 @@ public interface IXGraphicsRenderer void DrawLines(XPen pen, XPoint[] points); /// - /// Draws a Bézier spline. + /// Draws a B�zier spline. /// void DrawBezier(XPen pen, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); /// - /// Draws a series of Bézier splines. + /// Draws a series of B�zier splines. /// void DrawBeziers(XPen pen, XPoint[] points); diff --git a/PdfSharpCore/Drawing/XForm.cs b/PdfSharpCore/Drawing/XForm.cs index 429873f4..7dbcc270 100644 --- a/PdfSharpCore/Drawing/XForm.cs +++ b/PdfSharpCore/Drawing/XForm.cs @@ -32,6 +32,7 @@ using PdfSharpCore.Drawing.Pdf; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.Advanced; +using PdfSharpCore.Pdf.Filters; namespace PdfSharpCore.Drawing { @@ -177,6 +178,28 @@ protected override void Dispose(bool disposing) /// internal virtual void Finish() { + if (_formState == FormState.NotATemplate || _formState == FormState.Finished) + return; + + //Debug.Assert(_formState == FormState.Created || _formState == FormState.UnderConstruction); + _formState = FormState.Finished; + Gfx.Dispose(); + Gfx = null; + + if (PdfRenderer != null) + { + //pdfForm.CreateStream(PdfEncoders.RawEncoding.GetBytes(PdfRenderer.GetContent())); + PdfRenderer.Close(); + Debug.Assert(PdfRenderer == null); + + if (_document.Options.CompressContentStreams) + { + _pdfForm.Stream.Value = Filtering.FlateDecode.Encode(_pdfForm.Stream.Value, _document.Options.FlateEncodeMode); + _pdfForm.Elements["/Filter"] = new PdfName("/FlateDecode"); + } + int length = _pdfForm.Stream.Length; + _pdfForm.Elements.SetInteger("/Length", length); + } } /// diff --git a/PdfSharpCore/Drawing/XGraphics.cs b/PdfSharpCore/Drawing/XGraphics.cs index 73847db0..1ec18912 100644 --- a/PdfSharpCore/Drawing/XGraphics.cs +++ b/PdfSharpCore/Drawing/XGraphics.cs @@ -37,7 +37,7 @@ // ReSharper disable RedundantNameQualifier // ReSharper disable UseNameofExpression -namespace PdfSharpCore.Drawing // #??? aufräumen +namespace PdfSharpCore.Drawing // #??? aufr�umen { /// /// Holds information about the current state of the XGraphics object. @@ -532,7 +532,7 @@ public void DrawLines(XPen pen, double x, double y, params double[] value) // ----- DrawBezier --------------------------------------------------------------------------- /// - /// Draws a Bézier spline defined by four points. + /// Draws a B�zier spline defined by four points. /// public void DrawBezier(XPen pen, XPoint pt1, XPoint pt2, XPoint pt3, XPoint pt4) { @@ -540,7 +540,7 @@ public void DrawBezier(XPen pen, XPoint pt1, XPoint pt2, XPoint pt3, XPoint pt4) } /// - /// Draws a Bézier spline defined by four points. + /// Draws a B�zier spline defined by four points. /// public void DrawBezier(XPen pen, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) @@ -556,7 +556,7 @@ public void DrawBezier(XPen pen, double x1, double y1, double x2, double y2, // ----- DrawBeziers -------------------------------------------------------------------------- /// - /// Draws a series of Bézier splines from an array of points. + /// Draws a series of B�zier splines from an array of points. /// public void DrawBeziers(XPen pen, XPoint[] points) { diff --git a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs index 3c562253..eb2eb662 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs @@ -39,8 +39,6 @@ namespace PdfSharpCore.Pdf.AcroForms /// public sealed class PdfSignatureField : PdfAcroField { - private bool visible; - public string Reason { get @@ -69,10 +67,23 @@ public PdfItem Contents { get { - return Elements.GetDictionary(Keys.V).Elements[Keys.Contents]; + return Elements.GetDictionary(Keys.V)?.Elements[Keys.Contents]; } set { + if (!Elements.ContainsKey(Keys.V)) + { + PdfDictionary sign = new PdfDictionary(_document); + sign.Elements.Add(Keys.Type, new PdfName("/Sig")); + sign.Elements.Add(Keys.Filter, new PdfName("/Adobe.PPKLite")); + sign.Elements.Add(Keys.SubFilter, new PdfName("/adbe.pkcs7.detached")); + sign.Elements.Add(Keys.M, new PdfDate(DateTime.Now)); + + _document._irefTable.Add(sign); + + Elements.Add(Keys.V, sign); + } + Elements.GetDictionary(Keys.V).Elements.Add(Keys.Contents, value); } } @@ -95,16 +106,16 @@ public PdfRectangle Rectangle { get { - return (PdfRectangle)Elements[Keys.Rect]; + return Elements.GetRectangle(Keys.Rect); } set - { - Elements.Add(Keys.Rect, value); - this.visible = !(value.X1 + value.X2 + value.Y1 + value.Y2 == 0); - + { + Elements[Keys.Rect] = value; } } + private bool IsVisible => Rectangle.X1 + Rectangle.X2 + Rectangle.Y1 + Rectangle.Y2 != 0; + public ISignatureAppearanceHandler AppearanceHandler { get; internal set; } @@ -144,7 +155,7 @@ internal PdfSignatureField(PdfDictionary dict) internal override void PrepareForSave() { - if (!this.visible) + if (!this.IsVisible) return; if (this.AppearanceHandler == null) @@ -181,7 +192,7 @@ internal override void PrepareForSave() /// /// (Required; inheritable) The name of the signature handler to be used for - /// authenticating the field’s contents, such as Adobe.PPKLite, Entrust.PPKEF, + /// authenticating the field�s contents, such as Adobe.PPKLite, Entrust.PPKEF, /// CICI.SignIt, or VeriSign.PPKVS. /// [KeyInfo(KeyType.Name | KeyType.Required)] @@ -229,7 +240,7 @@ internal override void PrepareForSave() public const string Location = "/Location"; /// - /// (Optional) The reason for the signing, such as (I agree…). + /// (Optional) The reason for the signing, such as (I agree�). /// [KeyInfo(KeyType.TextString | KeyType.Optional)] public const string Reason = "/Reason"; diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs index 03bdd1a1..070ea8d8 100644 --- a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs @@ -1,4 +1,5 @@ -using PdfSharpCore.Pdf; +using PdfSharpCore.Drawing; +using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.AcroForms; using PdfSharpCore.Pdf.Advanced; using PdfSharpCore.Pdf.Annotations; @@ -6,9 +7,11 @@ using System; using System.Collections.Generic; using System.IO; +using System.Net.Security; using System.Security.Cryptography.Pkcs; using System.Security.Cryptography.X509Certificates; using System.Text; +using System.Xml.Linq; using static PdfSharpCore.Pdf.AcroForms.PdfAcroField; namespace PdfSharpCore.Pdf.Signatures @@ -38,17 +41,16 @@ public void AttachToDocument(PdfDocument documentToSign) this.Document.BeforeSave += AddSignatureComponents; this.Document.AfterSave += ComputeSignatureAndRange; - if (!maximumSignatureLength.HasValue) + if (signer != null && !maximumSignatureLength.HasValue) { maximumSignatureLength = signer.GetSignedCms(new MemoryStream(new byte[] { 0})).Length; SignatureSizeComputed(this, new IntEventArgs() { Value = maximumSignatureLength.Value }); } } - public PdfSignatureHandler(ISigner signer, int? signatureMaximumLength, PdfSignatureOptions options) + public PdfSignatureHandler(ISigner signer, PdfSignatureOptions options, int? signatureMaximumLength = null) { this.signer = signer; - this.maximumSignatureLength = signatureMaximumLength; this.Options = options; @@ -56,6 +58,8 @@ public PdfSignatureHandler(ISigner signer, int? signatureMaximumLength, PdfSigna private void ComputeSignatureAndRange(object sender, PdfDocumentEventArgs e) { + if (signer == null) return; + var writer = e.Writer; writer.Stream.Position = rangeTracker.Start; var rangeArray = new PdfArray(new PdfInteger(0), @@ -94,7 +98,7 @@ private RangedStream GetRangeToSign(Stream stream) new RangedStream.Range(contentsTraker.End, stream.Length - contentsTraker.End) }); - } + } private void AddSignatureComponents(object sender, EventArgs e) { @@ -103,36 +107,62 @@ private void AddSignatureComponents(object sender, EventArgs e) if (catalog.AcroForm == null) catalog.AcroForm = new PdfAcroForm(Document); - catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3)); + if (signer != null) + { + if (catalog.AcroForm.Elements.ContainsKey(PdfAcroForm.Keys.SigFlags)) + { + catalog.AcroForm.Elements.Remove(PdfAcroForm.Keys.SigFlags); + } + catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3)); + } - var signature = new PdfSignatureField(Document); + PdfSignatureField signature = Options.FieldName == null ? null : catalog.AcroForm.Fields[Options.FieldName] as PdfSignatureField; + bool isNew = signature == null; - var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value); - var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0)); + if (isNew) + { + signature = new PdfSignatureField(Document); + signature.Elements[Keys.T] = new PdfString(Options.FieldName ?? "Signature1"); + } - signature.Contents = paddedContents; - signature.ByteRange = paddedRange; - signature.Reason = Options.Reason; - signature.Location = Options.Location; - signature.Rectangle = new PdfRectangle(Options.Rectangle); + if (isNew || (Options.Rectangle != XRect.Empty && Options.Rectangle != default)) + { + signature.Rectangle = new PdfRectangle(Options.Rectangle); + } + if (signer != null) + { + var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value); + var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0)); + + this.contentsTraker = new PositionTracker(paddedContents); + this.rangeTracker = new PositionTracker(paddedRange); + + signature.Contents = paddedContents; + signature.ByteRange = paddedRange; + signature.Reason = Options.Reason; + signature.Location = Options.Location; + } + else + { + signature.Elements.Remove(Keys.V); + } signature.AppearanceHandler = Options.AppearanceHandler ?? new DefaultAppearanceHandler() { Location = Options.Location, Reason = Options.Reason, - Signer = signer.GetName() + Signer = signer?.GetName() }; - signature.PrepareForSave(); + signature.PrepareForSave(); - this.contentsTraker = new PositionTracker(paddedContents); - this.rangeTracker = new PositionTracker(paddedRange); - - if (!Document.Pages[0].Elements.ContainsKey(PdfPage.Keys.Annots)) - Document.Pages[0].Elements.Add(PdfPage.Keys.Annots, new PdfArray(Document)); + if (isNew) + { + if (!Document.Pages[0].Elements.ContainsKey(PdfPage.Keys.Annots)) + Document.Pages[0].Elements.Add(PdfPage.Keys.Annots, new PdfArray(Document)); - (Document.Pages[0].Elements[PdfPage.Keys.Annots] as PdfArray).Elements.Add(signature); - - catalog.AcroForm.Fields.Elements.Add(signature); + (Document.Pages[0].Elements[PdfPage.Keys.Annots] as PdfArray).Elements.Add(signature); + catalog.AcroForm.Fields.Elements.Add(signature); + } } } } diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs index 7333ba48..4031a3f9 100644 --- a/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs @@ -7,6 +7,7 @@ namespace PdfSharpCore.Pdf.Signatures { public class PdfSignatureOptions { + public string FieldName { get; set; } public ISignatureAppearanceHandler AppearanceHandler { get; set; } public string ContactInfo { get; set; } public string Location { get; set; } diff --git a/SignatureTestConsole/Program.cs b/SignatureTestConsole/Program.cs index 1ff85b28..7b7a3e37 100644 --- a/SignatureTestConsole/Program.cs +++ b/SignatureTestConsole/Program.cs @@ -12,8 +12,10 @@ class Program { public static void Main(string[] args) { - Program.CreateAndSign(); - Program.SignExisting(); + //Program.CreateAndSign(); + // Program.SignExisting(); + Program.SignMine(); + Program.SignMineNonDigital(); } private static void CreateAndSign() @@ -32,7 +34,7 @@ private static void CreateAndSign() Reason = "Test signatures", Rectangle = new XRect(36.0, 700.0, 200.0, 50.0) }; - PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler( new DefaultSigner(Program.GetCertificate()), null, options); + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler( new DefaultSigner(Program.GetCertificate()), options); pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } @@ -49,7 +51,42 @@ private static void SignExisting() AppearanceHandler = new Program.SignAppearenceHandler() }; - PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(new DefaultSigner(Program.GetCertificate()), null, options); + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(new DefaultSigner(Program.GetCertificate()), options); + pdfSignatureHandler.AttachToDocument(pdfDocument); + pdfDocument.Save(text); + } + private static void SignMine() + { + string text = string.Format("SignMine.pdf", new object[0]); + PdfDocument pdfDocument = PdfReader.Open(@"TestFiles\\Adobe Digital signing instructions-unsigned.pdf"); + PdfSignatureOptions options = new PdfSignatureOptions + { + ContactInfo = "Contact Info", + Location = "Paris", + Reason = "Test signatures", + //Rectangle = new XRect(32, 348, 316, 50), + AppearanceHandler = new Program.SignAppearenceHandler(), + FieldName = "Signature1" + }; + + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(new DefaultSigner(Program.GetCertificate()), options); + pdfSignatureHandler.AttachToDocument(pdfDocument); + pdfDocument.Save(text); + } + private static void SignMineNonDigital() + { + string text = string.Format("SignMineNonDigital.pdf", new object[0]); + PdfDocument pdfDocument = PdfReader.Open(@"TestFiles\\Adobe Digital signing instructions-unsigned.pdf"); + PdfSignatureOptions options = new PdfSignatureOptions + { + ContactInfo = "Contact Info", + Location = "Paris", + Reason = "Test signatures", + AppearanceHandler = new Program.SignAppearenceHandler(), + FieldName = "Signature1" + }; + + PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(null, options); pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } @@ -57,7 +94,7 @@ private static void SignExisting() private static X509Certificate2 GetCertificate() { // add yours here - return new X509Certificate2("TestFiles\\myself.pfx", "1234", X509KeyStorageFlags.Exportable); + return new X509Certificate2("TestFiles\\myself.pfx", "password", X509KeyStorageFlags.Exportable); } private class SignAppearenceHandler : ISignatureAppearanceHandler @@ -67,15 +104,19 @@ public void DrawAppearance(XGraphics gfx, XRect rect) { XColor empty = XColor.Empty; string text = "Signed by Napoleon \nLocation: Paris \nDate: " + DateTime.Now.ToString(); - XFont font = new XFont("Verdana", 7.0, XFontStyle.Regular); + XFont font = new XFont("Verdana", 8.0, XFontStyle.Regular); XTextFormatter xTextFormatter = new XTextFormatter(gfx); - int num = this.Image.PixelWidth / this.Image.PixelHeight; XPoint xPoint = new XPoint(0.0, 0.0); bool flag = this.Image != null; if (flag) { - gfx.DrawImage(this.Image, xPoint.X, xPoint.Y, rect.Width / 4.0, rect.Width / 4.0 / (double)num); - xPoint = new XPoint(rect.Width / 4.0, 0.0); + double ratio = 1; + if (this.Image.PixelHeight > rect.Height) + { + ratio = rect.Height / this.Image.PixelHeight; + } + gfx.DrawImage(this.Image, xPoint.X, xPoint.Y, Image.PixelWidth * ratio, Image.PixelHeight * ratio); + xPoint = new XPoint(Image.PixelWidth * ratio + 5, 0.0); } xTextFormatter.DrawString(text, font, new XSolidBrush(XColor.FromKnownColor(XKnownColor.Black)), new XRect(xPoint.X, xPoint.Y, rect.Width - xPoint.X, rect.Height), XStringFormats.TopLeft); } diff --git a/SignatureTestConsole/SignatureTestConsole.csproj b/SignatureTestConsole/SignatureTestConsole.csproj index cdf8ea35..9a15e9bb 100644 --- a/SignatureTestConsole/SignatureTestConsole.csproj +++ b/SignatureTestConsole/SignatureTestConsole.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1;net5.0;net6.0 + net5.0;net6.0 @@ -10,10 +10,7 @@ - - Always - - + Always diff --git a/SignatureTestConsole/TestFiles/Adobe Digital signing instructions-unsigned.pdf b/SignatureTestConsole/TestFiles/Adobe Digital signing instructions-unsigned.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eb202d28edda1b2bee2e5ff1427317b7a6168c62 GIT binary patch literal 126014 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 X4=0d08VV~bCmISRrG%0s8p{6zxKh@k literal 0 HcmV?d00001 From 5cc6549278ca56a04a3ab69b84cafb9ba6794fcc Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 30 Nov 2022 13:06:36 -0800 Subject: [PATCH 04/10] Fixes after rebase --- PdfSharpCore/Pdf.Advanced/PdfCatalog.cs | 18 ++++++++--------- PdfSharpCore/Pdf.Advanced/PdfFormXObject.cs | 4 ++-- PdfSharpCore/Pdf.Advanced/PdfImage.cs | 22 ++++++++++----------- PdfSharpCore/Pdf.Advanced/PdfTrailer.cs | 6 +++--- PdfSharpCore/Pdf.Internal/PdfEncoders.cs | 19 ++++++++++++++++++ SignatureTestConsole/Program.cs | 18 ++++++++--------- 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/PdfSharpCore/Pdf.Advanced/PdfCatalog.cs b/PdfSharpCore/Pdf.Advanced/PdfCatalog.cs index ab489c62..7cccfe09 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfCatalog.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfCatalog.cs @@ -226,7 +226,7 @@ internal sealed class Keys : KeysBase /// /// (Optional; PDF 1.4) The version of the PDF specification to which the document - /// conforms (for example, 1.4) if later than the version specified in the file’s header. + /// conforms (for example, 1.4) if later than the version specified in the file�s header. /// If the header specifies a later version, or if this entry is absent, the document /// conforms to the version specified in the header. This entry enables a PDF producer /// application to update the version using an incremental update. @@ -236,7 +236,7 @@ internal sealed class Keys : KeysBase /// /// (Required; must be an indirect reference) The page tree node that is the root of - /// the document’s page tree. + /// the document�s page tree. /// [KeyInfo(KeyType.Dictionary | KeyType.Required | KeyType.MustBeIndirect, typeof(PdfPages))] public const string Pages = "/Pages"; @@ -251,7 +251,7 @@ internal sealed class Keys : KeysBase public const string PageLabels = "/PageLabels"; /// - /// (Optional; PDF 1.2) The document’s name dictionary. + /// (Optional; PDF 1.2) The document�s name dictionary. /// [KeyInfo("1.2", KeyType.Dictionary | KeyType.Optional)] public const string Names = "/Names"; @@ -299,14 +299,14 @@ internal sealed class Keys : KeysBase /// /// (Optional; must be an indirect reference) The outline dictionary that is the root - /// of the document’s outline hierarchy. + /// of the document�s outline hierarchy. /// [KeyInfo(KeyType.Dictionary | KeyType.Optional, typeof(PdfOutline))] public const string Outlines = "/Outlines"; /// /// (Optional; PDF 1.1; must be an indirect reference) An array of thread dictionaries - /// representing the document’s article threads. + /// representing the document�s article threads. /// [KeyInfo("1.1", KeyType.Array | KeyType.Optional)] public const string Threads = "/Threads"; @@ -335,7 +335,7 @@ internal sealed class Keys : KeysBase public const string URI = "/URI"; /// - /// (Optional; PDF 1.2) The document’s interactive form (AcroForm) dictionary. + /// (Optional; PDF 1.2) The document�s interactive form (AcroForm) dictionary. /// [KeyInfo("1.2", KeyType.Dictionary | KeyType.Optional, typeof(PdfAcroForm))] public const string AcroForm = "/AcroForm"; @@ -348,14 +348,14 @@ internal sealed class Keys : KeysBase public const string Metadata = "/Metadata"; /// - /// (Optional; PDF 1.3) The document’s structure tree root dictionary. + /// (Optional; PDF 1.3) The document�s structure tree root dictionary. /// [KeyInfo("1.3", KeyType.Dictionary | KeyType.Optional)] public const string StructTreeRoot = "/StructTreeRoot"; /// /// (Optional; PDF 1.4) A mark information dictionary containing information - /// about the document’s usage of Tagged PDF conventions. + /// about the document�s usage of Tagged PDF conventions. /// [KeyInfo("1.4", KeyType.Dictionary | KeyType.Optional)] public const string MarkInfo = "/MarkInfo"; @@ -389,7 +389,7 @@ internal sealed class Keys : KeysBase public const string PieceInfo = "/PieceInfo"; /// - /// (Optional; PDF 1.5; required if a document contains optional content) The document’s + /// (Optional; PDF 1.5; required if a document contains optional content) The document�s /// optional content properties dictionary. /// [KeyInfo("1.5", KeyType.Dictionary | KeyType.Optional)] diff --git a/PdfSharpCore/Pdf.Advanced/PdfFormXObject.cs b/PdfSharpCore/Pdf.Advanced/PdfFormXObject.cs index 3a041ca9..f137200b 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfFormXObject.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfFormXObject.cs @@ -425,7 +425,7 @@ void FixUpObject_old(PdfImportedObjectTable iot, PdfObject value) /// /// (Required) An array of four numbers in the form coordinate system, giving the /// coordinates of the left, bottom, right, and top edges, respectively, of the - /// form XObject’s bounding box. These boundaries are used to clip the form XObject + /// form XObject�s bounding box. These boundaries are used to clip the form XObject /// and to determine its size for caching. /// [KeyInfo(KeyType.Rectangle | KeyType.Required)] @@ -449,7 +449,7 @@ void FixUpObject_old(PdfImportedObjectTable iot, PdfObject value) /// /// (Optional; PDF 1.4) A group attributes dictionary indicating that the contents /// of the form XObject are to be treated as a group and specifying the attributes - /// of that group (see Section 4.9.2, “Group XObjects”). + /// of that group (see Section 4.9.2, �Group XObjects�). /// Note: If a Ref entry (see below) is present, the group attributes also apply to the /// external page imported by that entry, which allows such an imported page to be /// treated as a group without further modification. diff --git a/PdfSharpCore/Pdf.Advanced/PdfImage.cs b/PdfSharpCore/Pdf.Advanced/PdfImage.cs index a45397d0..0b651881 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfImage.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfImage.cs @@ -2,7 +2,7 @@ // // Authors: // Stefan Lange -// Thomas Hövel +// Thomas H�vel // // Copyright (c) 2005-2016 empira Software GmbH, Cologne Area (Germany) // @@ -730,8 +730,8 @@ private void ReadIndexedMemoryBitmap(int bits/*, ref bool hasAlpha*/) /// (Required for images, except those that use the JPXDecode filter; not allowed for image masks) /// The color space in which image samples are specified; it can be any type of color space except /// Pattern. If the image uses the JPXDecode filter, this entry is optional: - /// • If ColorSpace is present, any color space specifications in the JPEG2000 data are ignored. - /// • If ColorSpace is absent, the color space specifications in the JPEG2000 data are used. + /// � If ColorSpace is present, any color space specifications in the JPEG2000 data are ignored. + /// � If ColorSpace is absent, the color space specifications in the JPEG2000 data are used. /// The Decode array is also ignored unless ImageMask is true. /// [KeyInfo(KeyType.NameOrArray | KeyType.Required)] @@ -781,10 +781,10 @@ private void ReadIndexedMemoryBitmap(int bits/*, ref bool hasAlpha*/) /// /// (Optional) An array of numbers describing how to map image samples into the range of values - /// appropriate for the image’s color space. If ImageMask is true, the array must be either + /// appropriate for the image�s color space. If ImageMask is true, the array must be either /// [0 1] or [1 0]; otherwise, its length must be twice the number of color components required /// by ColorSpace. If the image uses the JPXDecode filter and ImageMask is false, Decode is ignored. - /// Default value: see “Decode Arrays”. + /// Default value: see �Decode Arrays�. /// [KeyInfo(KeyType.Array | KeyType.Optional)] public const string Decode = "/Decode"; @@ -809,8 +809,8 @@ private void ReadIndexedMemoryBitmap(int bits/*, ref bool hasAlpha*/) /// source of mask shape or mask opacity values in the transparent imaging model. The alpha /// source parameter in the graphics state determines whether the mask values are interpreted as /// shape or opacity. If present, this entry overrides the current soft mask in the graphics state, - /// as well as the image’s Mask entry, if any. (However, the other transparency related graphics - /// state parameters — blend mode and alpha constant — remain in effect.) If SMask is absent, the + /// as well as the image�s Mask entry, if any. (However, the other transparency related graphics + /// state parameters � blend mode and alpha constant � remain in effect.) If SMask is absent, the /// image has no associated soft mask (although the current soft mask in the graphics state may /// still apply). /// @@ -821,10 +821,10 @@ private void ReadIndexedMemoryBitmap(int bits/*, ref bool hasAlpha*/) /// (Optional for images that use the JPXDecode filter, meaningless otherwise; PDF 1.5) /// A code specifying how soft-mask information encoded with image samples should be used: /// 0 If present, encoded soft-mask image information should be ignored. - /// 1 The image’s data stream includes encoded soft-mask values. An application can create + /// 1 The image�s data stream includes encoded soft-mask values. An application can create /// a soft-mask image from the information to be used as a source of mask shape or mask /// opacity in the transparency imaging model. - /// 2 The image’s data stream includes color channels that have been preblended with a + /// 2 The image�s data stream includes color channels that have been preblended with a /// background; the image data also includes an opacity channel. An application can create /// a soft-mask image with a Matte entry from the opacity channel information to be used as /// a source of mask shape or mask opacity in the transparency model. If this entry has a @@ -843,13 +843,13 @@ private void ReadIndexedMemoryBitmap(int bits/*, ref bool hasAlpha*/) /// /// (Required if the image is a structural content item; PDF 1.3) The integer key of the - /// image’s entry in the structural parent tree. + /// image�s entry in the structural parent tree. /// [KeyInfo(KeyType.Integer | KeyType.Required)] public const string StructParent = "/StructParent"; /// - /// (Optional; PDF 1.3; indirect reference preferred) The digital identifier of the image’s + /// (Optional; PDF 1.3; indirect reference preferred) The digital identifier of the image�s /// parent Web Capture content set. /// [KeyInfo(KeyType.String | KeyType.Optional)] diff --git a/PdfSharpCore/Pdf.Advanced/PdfTrailer.cs b/PdfSharpCore/Pdf.Advanced/PdfTrailer.cs index aef89783..977bb7da 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfTrailer.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfTrailer.cs @@ -218,7 +218,7 @@ internal void Finish() internal class Keys : KeysBase // Reference: TABLE 3.13 Entries in the file trailer dictionary / Page 97 { /// - /// (Required; must not be an indirect reference) The total number of entries in the file’s + /// (Required; must not be an indirect reference) The total number of entries in the file�s /// cross-reference table, as defined by the combination of the original section and all /// update sections. Equivalently, this value is 1 greater than the highest object number /// used in the file. @@ -244,13 +244,13 @@ internal class Keys : KeysBase // Reference: TABLE 3.13 Entries in the file tr public const string Root = "/Root"; /// - /// (Required if document is encrypted; PDF 1.1) The document’s encryption dictionary. + /// (Required if document is encrypted; PDF 1.1) The document�s encryption dictionary. /// [KeyInfo(KeyType.Dictionary | KeyType.Optional, typeof(PdfStandardSecurityHandler))] public const string Encrypt = "/Encrypt"; /// - /// (Optional; must be an indirect reference) The document’s information dictionary. + /// (Optional; must be an indirect reference) The document�s information dictionary. /// [KeyInfo(KeyType.Dictionary | KeyType.Optional, typeof(PdfDocumentInformation))] public const string Info = "/Info"; diff --git a/PdfSharpCore/Pdf.Internal/PdfEncoders.cs b/PdfSharpCore/Pdf.Internal/PdfEncoders.cs index bd7d2b97..91576c6f 100644 --- a/PdfSharpCore/Pdf.Internal/PdfEncoders.cs +++ b/PdfSharpCore/Pdf.Internal/PdfEncoders.cs @@ -285,6 +285,25 @@ public static string ToHexStringLiteral(string text, PdfStringEncoding encoding, return RawEncoding.GetString(agTemp, 0, agTemp.Length); } + /// + /// Converts a raw string into a raw hexadecimal string literal, possibly encrypted. + /// + public static string ToHexStringLiteral(byte[] bytes, bool unicode, PdfStandardSecurityHandler securityHandler, int paddingLeft) + { + if ((bytes == null || bytes.Length == 0) && paddingLeft == 0) + return "<>"; + + if (bytes.Length < paddingLeft) + { + byte[] tmp = new byte[paddingLeft]; + Array.Copy(bytes, tmp, bytes.Length); + bytes = tmp; + } + + byte[] agTemp = FormatStringLiteral(bytes, unicode, true, true, securityHandler); + return RawEncoding.GetString(agTemp, 0, agTemp.Length); + } + /// /// Converts a raw string into a raw hexadecimal string literal, possibly encrypted. /// diff --git a/SignatureTestConsole/Program.cs b/SignatureTestConsole/Program.cs index 7b7a3e37..247df8b5 100644 --- a/SignatureTestConsole/Program.cs +++ b/SignatureTestConsole/Program.cs @@ -13,9 +13,9 @@ class Program public static void Main(string[] args) { //Program.CreateAndSign(); - // Program.SignExisting(); - Program.SignMine(); - Program.SignMineNonDigital(); + Program.SignNewField(); + Program.SignExisting(); + Program.SignExistingNonDigital(); } private static void CreateAndSign() @@ -38,9 +38,9 @@ private static void CreateAndSign() pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } - private static void SignExisting() + private static void SignNewField() { - string text = string.Format("SignExisting.pdf", new object[0]); + string text = string.Format("SignNewField.pdf", new object[0]); PdfDocument pdfDocument = PdfReader.Open("TestFiles\\doc1.pdf"); PdfSignatureOptions options = new PdfSignatureOptions { @@ -55,9 +55,9 @@ private static void SignExisting() pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } - private static void SignMine() + private static void SignExisting() { - string text = string.Format("SignMine.pdf", new object[0]); + string text = string.Format("SignExisting.pdf", new object[0]); PdfDocument pdfDocument = PdfReader.Open(@"TestFiles\\Adobe Digital signing instructions-unsigned.pdf"); PdfSignatureOptions options = new PdfSignatureOptions { @@ -73,9 +73,9 @@ private static void SignMine() pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } - private static void SignMineNonDigital() + private static void SignExistingNonDigital() { - string text = string.Format("SignMineNonDigital.pdf", new object[0]); + string text = string.Format("SignExistingNonDigital.pdf", new object[0]); PdfDocument pdfDocument = PdfReader.Open(@"TestFiles\\Adobe Digital signing instructions-unsigned.pdf"); PdfSignatureOptions options = new PdfSignatureOptions { From 3110a1d43e81c99b79c08f8409c24d581158470c Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 30 Nov 2022 13:50:07 -0800 Subject: [PATCH 05/10] Cleanup --- .../Pdf.AcroForms/PdfSignatureField.cs | 18 ++---- PdfSharpCore/Pdf.AcroForms/PdfTextField.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfTrueTypeFont.cs | 12 ++-- PdfSharpCore/Pdf.Advanced/PdfType0Font.cs | 4 +- .../DefaultAppearanceHandler.cs | 2 +- .../ISignatureAppearanceHandler.cs | 2 +- .../Pdf.Signatures/PdfSignatureHandler.cs | 55 ++++++++----------- SignatureTestConsole/Program.cs | 16 ++---- 8 files changed, 44 insertions(+), 67 deletions(-) diff --git a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs index eb2eb662..f808ae3e 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs @@ -114,11 +114,9 @@ public PdfRectangle Rectangle } } - private bool IsVisible => Rectangle.X1 + Rectangle.X2 + Rectangle.Y1 + Rectangle.Y2 != 0; + public bool IsVisible => Rectangle.Size.Width > 0 && Rectangle.Size.Height > 0; - public ISignatureAppearanceHandler AppearanceHandler { get; internal set; } - /// /// Initializes a new instance of PdfSignatureField. /// @@ -152,22 +150,18 @@ internal PdfSignatureField(PdfDictionary dict) : base(dict) { } - internal override void PrepareForSave() { - if (!this.IsVisible) - return; - - if (this.AppearanceHandler == null) - throw new Exception("AppearanceHandler is null"); - - + base.PrepareForSave(); + } + public void RenderAppearance(ISignatureAppearanceHandler appearanceHandler) + { PdfRectangle rect = Elements.GetRectangle(PdfAnnotation.Keys.Rect); XForm form = new XForm(this._document, rect.Size); XGraphics gfx = XGraphics.FromForm(form); - this.AppearanceHandler.DrawAppearance(gfx, rect.ToXRect()); + appearanceHandler.RenderAppearance(gfx, rect.ToXRect()); form.DrawingFinished(); diff --git a/PdfSharpCore/Pdf.AcroForms/PdfTextField.cs b/PdfSharpCore/Pdf.AcroForms/PdfTextField.cs index 8e45517b..ddd1966d 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfTextField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfTextField.cs @@ -284,7 +284,7 @@ internal override void PrepareForSave() public new class Keys : PdfAcroField.Keys { /// - /// (Optional; inheritable) The maximum length of the field’s text, in characters. + /// (Optional; inheritable) The maximum length of the field�s text, in characters. /// [KeyInfo(KeyType.Integer | KeyType.Optional)] public const string MaxLen = "/MaxLen"; diff --git a/PdfSharpCore/Pdf.Advanced/PdfTrueTypeFont.cs b/PdfSharpCore/Pdf.Advanced/PdfTrueTypeFont.cs index f6e7ae2d..c4446905 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfTrueTypeFont.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfTrueTypeFont.cs @@ -172,7 +172,7 @@ internal override void PrepareForSave() /// /// (Required) The PostScript name of the font. For Type 1 fonts, this is usually /// the value of the FontName entry in the font program; for more information. - /// The Post-Script name of the font can be used to find the font’s definition in + /// The Post-Script name of the font can be used to find the font�s definition in /// the consumer application or its environment. It is also the name that is used when /// printing to a PostScript output device. /// @@ -181,14 +181,14 @@ internal override void PrepareForSave() /// /// (Required except for the standard 14 fonts) The first character code defined - /// in the font’s Widths array. + /// in the font�s Widths array. /// [KeyInfo(KeyType.Integer)] public const string FirstChar = "/FirstChar"; /// /// (Required except for the standard 14 fonts) The last character code defined - /// in the font’s Widths array. + /// in the font�s Widths array. /// [KeyInfo(KeyType.Integer)] public const string LastChar = "/LastChar"; @@ -207,7 +207,7 @@ internal override void PrepareForSave() /// /// (Required except for the standard 14 fonts; must be an indirect reference) - /// A font descriptor describing the font’s metrics other than its glyph widths. + /// A font descriptor describing the font�s metrics other than its glyph widths. /// Note: For the standard 14 fonts, the entries FirstChar, LastChar, Widths, and /// FontDescriptor must either all be present or all be absent. Ordinarily, they are /// absent; specifying them enables a standard font to be overridden. @@ -216,10 +216,10 @@ internal override void PrepareForSave() public new const string FontDescriptor = "/FontDescriptor"; /// - /// (Optional) A specification of the font’s character encoding if different from its + /// (Optional) A specification of the font�s character encoding if different from its /// built-in encoding. The value of Encoding is either the name of a predefined /// encoding (MacRomanEncoding, MacExpertEncoding, or WinAnsiEncoding, as described in - /// Appendix D) or an encoding dictionary that specifies differences from the font’s + /// Appendix D) or an encoding dictionary that specifies differences from the font�s /// built-in encoding or from a specified predefined encoding. /// [KeyInfo(KeyType.Name | KeyType.Dictionary)] diff --git a/PdfSharpCore/Pdf.Advanced/PdfType0Font.cs b/PdfSharpCore/Pdf.Advanced/PdfType0Font.cs index c79d827a..019a8538 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfType0Font.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfType0Font.cs @@ -185,9 +185,9 @@ internal override void PrepareForSave() /// dictionary. The conventions described here ensure maximum compatibility /// with existing Acrobat products. /// If the descendant is a Type 0 CIDFont, this name should be the concatenation - /// of the CIDFont’s BaseFont name, a hyphen, and the CMap name given in the + /// of the CIDFont�s BaseFont name, a hyphen, and the CMap name given in the /// Encoding entry (or the CMapName entry in the CMap). If the descendant is a - /// Type 2 CIDFont, this name should be the same as the CIDFont’s BaseFont name. + /// Type 2 CIDFont, this name should be the same as the CIDFont�s BaseFont name. /// [KeyInfo(KeyType.Name | KeyType.Required)] public new const string BaseFont = "/BaseFont"; diff --git a/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs index e700ee7c..32601abc 100644 --- a/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs @@ -11,7 +11,7 @@ internal class DefaultAppearanceHandler : ISignatureAppearanceHandler public string Signer { get; set; } - public void DrawAppearance(XGraphics gfx, XRect rect) + public void RenderAppearance(XGraphics gfx, XRect rect) { var backColor = XColor.Empty; var defaultText = string.Format("Signed by: {0}\nLocation: {1}\nReason: {2}\nDate: {3}", Signer, Location, Reason, DateTime.Now); diff --git a/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs index 2bdb99c8..9bf862a5 100644 --- a/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs @@ -4,6 +4,6 @@ namespace PdfSharpCore.Pdf.Signatures { public interface ISignatureAppearanceHandler { - void DrawAppearance(XGraphics gfx, XRect rect); + void RenderAppearance(XGraphics gfx, XRect rect); } } diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs index 070ea8d8..fd621fa2 100644 --- a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs @@ -41,7 +41,7 @@ public void AttachToDocument(PdfDocument documentToSign) this.Document.BeforeSave += AddSignatureComponents; this.Document.AfterSave += ComputeSignatureAndRange; - if (signer != null && !maximumSignatureLength.HasValue) + if (!maximumSignatureLength.HasValue) { maximumSignatureLength = signer.GetSignedCms(new MemoryStream(new byte[] { 0})).Length; SignatureSizeComputed(this, new IntEventArgs() { Value = maximumSignatureLength.Value }); @@ -51,15 +51,12 @@ public void AttachToDocument(PdfDocument documentToSign) public PdfSignatureHandler(ISigner signer, PdfSignatureOptions options, int? signatureMaximumLength = null) { this.signer = signer; - this.maximumSignatureLength = signatureMaximumLength; this.Options = options; } private void ComputeSignatureAndRange(object sender, PdfDocumentEventArgs e) { - if (signer == null) return; - var writer = e.Writer; writer.Stream.Position = rangeTracker.Start; var rangeArray = new PdfArray(new PdfInteger(0), @@ -107,14 +104,11 @@ private void AddSignatureComponents(object sender, EventArgs e) if (catalog.AcroForm == null) catalog.AcroForm = new PdfAcroForm(Document); - if (signer != null) + if (catalog.AcroForm.Elements.ContainsKey(PdfAcroForm.Keys.SigFlags)) { - if (catalog.AcroForm.Elements.ContainsKey(PdfAcroForm.Keys.SigFlags)) - { - catalog.AcroForm.Elements.Remove(PdfAcroForm.Keys.SigFlags); - } - catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3)); + catalog.AcroForm.Elements.Remove(PdfAcroForm.Keys.SigFlags); } + catalog.AcroForm.Elements.Add(PdfAcroForm.Keys.SigFlags, new PdfInteger(3)); PdfSignatureField signature = Options.FieldName == null ? null : catalog.AcroForm.Fields[Options.FieldName] as PdfSignatureField; bool isNew = signature == null; @@ -129,30 +123,27 @@ private void AddSignatureComponents(object sender, EventArgs e) { signature.Rectangle = new PdfRectangle(Options.Rectangle); } - if (signer != null) - { - var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value); - var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0)); - - this.contentsTraker = new PositionTracker(paddedContents); - this.rangeTracker = new PositionTracker(paddedRange); - - signature.Contents = paddedContents; - signature.ByteRange = paddedRange; - signature.Reason = Options.Reason; - signature.Location = Options.Location; - } - else + + var paddedContents = new PdfString("", PdfStringFlags.HexLiteral, maximumSignatureLength.Value); + var paddedRange = new PdfArray(Document, byteRangePaddingLength, new PdfInteger(0), new PdfInteger(0), new PdfInteger(0), new PdfInteger(0)); + + this.contentsTraker = new PositionTracker(paddedContents); + this.rangeTracker = new PositionTracker(paddedRange); + + signature.Contents = paddedContents; + signature.ByteRange = paddedRange; + signature.Reason = Options.Reason; + signature.Location = Options.Location; + + if (signature.IsVisible) { - signature.Elements.Remove(Keys.V); + signature.RenderAppearance(Options.AppearanceHandler ?? new DefaultAppearanceHandler() + { + Location = Options.Location, + Reason = Options.Reason, + Signer = signer.GetName() + }); } - signature.AppearanceHandler = Options.AppearanceHandler ?? new DefaultAppearanceHandler() - { - Location = Options.Location, - Reason = Options.Reason, - Signer = signer?.GetName() - }; - signature.PrepareForSave(); if (isNew) { diff --git a/SignatureTestConsole/Program.cs b/SignatureTestConsole/Program.cs index 247df8b5..3a3d9f4e 100644 --- a/SignatureTestConsole/Program.cs +++ b/SignatureTestConsole/Program.cs @@ -5,6 +5,7 @@ using PdfSharpCore.Drawing.Layout; using PdfSharpCore.Pdf.Signatures; using System; +using PdfSharpCore.Pdf.AcroForms; namespace TestConsole { @@ -73,21 +74,12 @@ private static void SignExisting() pdfSignatureHandler.AttachToDocument(pdfDocument); pdfDocument.Save(text); } + private static void SignExistingNonDigital() { string text = string.Format("SignExistingNonDigital.pdf", new object[0]); PdfDocument pdfDocument = PdfReader.Open(@"TestFiles\\Adobe Digital signing instructions-unsigned.pdf"); - PdfSignatureOptions options = new PdfSignatureOptions - { - ContactInfo = "Contact Info", - Location = "Paris", - Reason = "Test signatures", - AppearanceHandler = new Program.SignAppearenceHandler(), - FieldName = "Signature1" - }; - - PdfSignatureHandler pdfSignatureHandler = new PdfSignatureHandler(null, options); - pdfSignatureHandler.AttachToDocument(pdfDocument); + (pdfDocument.AcroForm.Fields["Signature1"] as PdfSignatureField).RenderAppearance(new SignAppearenceHandler()); pdfDocument.Save(text); } @@ -100,7 +92,7 @@ private static X509Certificate2 GetCertificate() private class SignAppearenceHandler : ISignatureAppearanceHandler { private XImage Image = XImage.FromFile("TestFiles\\logo.jpg"); - public void DrawAppearance(XGraphics gfx, XRect rect) + public void RenderAppearance(XGraphics gfx, XRect rect) { XColor empty = XColor.Empty; string text = "Signed by Napoleon \nLocation: Paris \nDate: " + DateTime.Now.ToString(); From 30f6fa1857813bd1f5f6d2242c7ee5200449e7f6 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 1 Dec 2022 16:30:54 -0800 Subject: [PATCH 06/10] Fix cases where duplicate objects would be added to signature dicts --- PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs | 4 ++-- PdfSharpCore/Pdf/PdfRectangle.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs index f808ae3e..78db93e5 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfSignatureField.cs @@ -84,7 +84,7 @@ public PdfItem Contents Elements.Add(Keys.V, sign); } - Elements.GetDictionary(Keys.V).Elements.Add(Keys.Contents, value); + Elements.GetDictionary(Keys.V).Elements[Keys.Contents] = value; } } @@ -97,7 +97,7 @@ public PdfItem ByteRange } set { - Elements.GetDictionary(Keys.V).Elements.Add(Keys.ByteRange, value); + Elements.GetDictionary(Keys.V).Elements[Keys.ByteRange] = value; } } diff --git a/PdfSharpCore/Pdf/PdfRectangle.cs b/PdfSharpCore/Pdf/PdfRectangle.cs index 650204c6..d7f338d5 100644 --- a/PdfSharpCore/Pdf/PdfRectangle.cs +++ b/PdfSharpCore/Pdf/PdfRectangle.cs @@ -322,7 +322,7 @@ public XRect ToXRect() } /// - /// Returns the rectangle as a string in the form «[x1 y1 x2 y2]». + /// Returns the rectangle as a string in the form �[x1 y1 x2 y2]�. /// public override string ToString() { From cabbd12ddd65c6286375b46f500b903ab24e2129 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Fri, 1 Dec 2023 11:35:54 -0800 Subject: [PATCH 07/10] fix: build warnings --- PdfSharpCore/Drawing/XGraphics.cs | 3 --- PdfSharpCore/Pdf.Actions/PdfGoToAction.cs | 2 +- PdfSharpCore/PdfSharpCore.csproj | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/PdfSharpCore/Drawing/XGraphics.cs b/PdfSharpCore/Drawing/XGraphics.cs index 1ec18912..cefc3d20 100644 --- a/PdfSharpCore/Drawing/XGraphics.cs +++ b/PdfSharpCore/Drawing/XGraphics.cs @@ -123,9 +123,6 @@ public sealed class XGraphics : IDisposable } XGraphics(XSize size, XGraphicsUnit pageUnit, XPageDirection pageDirection) { - if (size == null) - throw new ArgumentNullException("size"); - _gsStack = new GraphicsStateStack(this); _pageSizePoints = new XSize(size.Width, size.Height); switch (pageUnit) diff --git a/PdfSharpCore/Pdf.Actions/PdfGoToAction.cs b/PdfSharpCore/Pdf.Actions/PdfGoToAction.cs index 693977af..0f0631a4 100644 --- a/PdfSharpCore/Pdf.Actions/PdfGoToAction.cs +++ b/PdfSharpCore/Pdf.Actions/PdfGoToAction.cs @@ -71,7 +71,7 @@ void Inititalize() //public const string S = "/S"; /// - /// (Required) The destination to jump to (see Section 8.2.1, “Destinations”). + /// (Required) The destination to jump to (see Section 8.2.1, �Destinations�). /// [KeyInfo(KeyType.Name | KeyType.ByteString | KeyType.Array | KeyType.Required)] public const string D = "/D"; diff --git a/PdfSharpCore/PdfSharpCore.csproj b/PdfSharpCore/PdfSharpCore.csproj index dcec452d..85900ff7 100644 --- a/PdfSharpCore/PdfSharpCore.csproj +++ b/PdfSharpCore/PdfSharpCore.csproj @@ -48,7 +48,7 @@ PdfSharpCore is a partial port of PdfSharp.Xamarin for .NET Core Additionally Mi - + From cbc0b07e2478f628ba53e49af1d21353709efd4e Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Fri, 8 Dec 2023 17:07:24 -0800 Subject: [PATCH 08/10] chore: update tfm --- PdfSharpCore/PdfSharpCore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PdfSharpCore/PdfSharpCore.csproj b/PdfSharpCore/PdfSharpCore.csproj index 85900ff7..cbb31f8a 100644 --- a/PdfSharpCore/PdfSharpCore.csproj +++ b/PdfSharpCore/PdfSharpCore.csproj @@ -1,7 +1,7 @@  - netstandard2.0;netcoreapp3.1;net5.0;net6.0 + netstandard2.0;netcoreapp3.1;net6.0;net8.0 True Stefan Steiger and Contributors PdfSharp for .NET Core From aa2614ac1e56325ad77c44e125c3de2c688500f6 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Thu, 29 Feb 2024 11:22:24 -0800 Subject: [PATCH 09/10] refactor: convert file encodings to utf8 --- .../DdlParser.cs | 104 +++++++++--------- .../DdlScanner.cs | 12 +- .../enums/Symbol.cs | 2 +- .../enums/TokenType.cs | 10 +- .../Meta.cs | 2 +- .../NEnum.cs | 4 +- .../NString.cs | 2 +- .../AppResources.Designer.cs | 2 +- .../DomSR.cs | 2 +- .../TextFrame.cs | 2 +- .../WrapFormat.cs | 2 +- .../Cell.cs | 2 +- .../VisitorBase.cs | 2 +- .../MigraDoc.DocumentObjectModel/Character.cs | 2 +- .../MigraDoc.DocumentObjectModel/Chars.cs | 2 +- .../MigraDoc.DocumentObjectModel/Color.cs | 2 +- .../ImageHelper.cs | 2 +- .../Serializer.cs | 4 +- .../MigraDoc.DocumentObjectModel/Style.cs | 4 +- .../MigraDoc.DocumentObjectModel/Styles.cs | 24 ++-- .../ProductVersionInfo.cs | 2 +- .../AppResources.Designer.cs | 2 +- .../TestParagraphRenderer.cs | 2 +- .../MigraDoc.Rendering/ColorHelper.cs | 2 +- .../MigraDoc.Rendering/FormattedDocument.cs | 2 +- .../MigraDoc.Rendering/ParagraphRenderer.cs | 2 +- .../MigraDoc.Rendering/TopDownFormatter.cs | 2 +- .../BarChartRenderer.cs | 2 +- .../BarDataLabelRenderer.cs | 2 +- .../ColumnChartRenderer.cs | 2 +- .../ColumnDataLabelRenderer.cs | 2 +- .../DataLabelRenderer.cs | 2 +- .../LinePlotAreaRenderer.cs | 4 +- .../MarkerRenderer.cs | 4 +- .../PieDataLabelRenderer.cs | 2 +- .../RendererParameters.cs | 2 +- .../PdfSharp.Charting/DataLabel.cs | 2 +- .../DocumentObjectCollection.cs | 2 +- .../PdfSharp.Charting/LineFormat.cs | 2 +- .../PdfSharp.Charting/SeriesElements.cs | 2 +- PdfSharpCore.Test/CreateSimplePDF.cs | 4 +- PdfSharpCore.Test/Helpers/PathHelper.cs | 4 +- PdfSharpCore.Test/Helpers/TestData.cs | 4 +- PdfSharpCore.Test/IO/IoBaseTest.cs | 4 +- PdfSharpCore.Test/IO/LargePDFReadWrite.cs | 4 +- PdfSharpCore.Test/IO/PdfReader.cs | 4 +- PdfSharpCore.Test/Merge.cs | 4 +- PdfSharpCore.Test/Outlines/OutlineTests.cs | 4 +- PdfSharpCore.Test/PdfReader.cs | 2 +- .../Pdfs/Content/Objects/CNameTests.cs | 4 +- PdfSharpCore.Test/Pdfs/PdfDateTests.cs | 4 +- PdfSharpCore.Test/Security/PdfSecurity.cs | 4 +- PdfSharpCore/!internal/Configuration.cs | 2 +- .../DynamicallyAccessedMemberTypes.cs | 4 +- .../DynamicallyAccessedMembersAttribute.cs | 4 +- PdfSharpCore/Drawing.BarCodes/CodeBase.cs | 2 +- .../Drawing.BarCodes/enums/CodeDirection.cs | 6 +- .../Drawing.BarCodes/enums/MarkDistance.cs | 2 +- .../Drawing.Internal/IImageImporter.cs | 2 +- .../Drawing.Internal/ImageImporter.cs | 2 +- .../Drawing.Internal/ImageImporterBmp.cs | 2 +- .../Drawing.Internal/ImageImporterJpeg.cs | 2 +- .../Drawing.Internal/ImageImporterRoot.cs | 2 +- PdfSharpCore/Drawing.Layout/Block.cs | 4 +- .../Drawing.Layout/FormatterEnvironment.cs | 4 +- PdfSharpCore/Drawing.Layout/TextSegment.cs | 4 +- .../Drawing.Layout/XTextSegmentFormatter.cs | 4 +- .../Drawing.Layout/enums/BlockType.cs | 4 +- .../Drawing.Pdf/XGraphicsPdfRenderer.cs | 4 +- PdfSharpCore/Drawing.Pdf/enums/DirtyFlags.cs | 2 +- PdfSharpCore/Drawing.Pdf/enums/StreamMode.cs | 2 +- PdfSharpCore/Drawing/CoreGraphicsPath.cs | 2 +- PdfSharpCore/Drawing/GeometryHelper.cs | 4 +- PdfSharpCore/Drawing/GraphicsStateStack.cs | 2 +- PdfSharpCore/Drawing/ImageSource.cs | 2 +- PdfSharpCore/Drawing/XBaseGradientBrush.cs | 2 +- PdfSharpCore/Drawing/XColorResourceManager.cs | 4 +- PdfSharpCore/Drawing/XConvert.cs | 2 +- PdfSharpCore/Drawing/XFontWeights.cs | 2 +- PdfSharpCore/Drawing/XForm.cs | 2 +- PdfSharpCore/Drawing/XGraphicsPath.cs | 2 +- .../Drawing/XGraphicsPathInternals.cs | 2 +- PdfSharpCore/Drawing/XImageFormat.cs | 2 +- PdfSharpCore/Drawing/XLinearGradientBrush.cs | 2 +- PdfSharpCore/Drawing/XMatrix.cs | 2 +- PdfSharpCore/Drawing/XPen.cs | 2 +- PdfSharpCore/Drawing/XRadialGradientBrush.cs | 2 +- PdfSharpCore/Drawing/XStringFormats.cs | 2 +- PdfSharpCore/Drawing/XUnit.cs | 2 +- PdfSharpCore/Drawing/enums/XGdiFontStyle.cs | 2 +- .../Exceptions/PositionNotFoundException.cs | 2 +- PdfSharpCore/Fonts.OpenType/FontDescriptor.cs | 2 +- PdfSharpCore/Fonts.OpenType/GlyphDataTable.cs | Bin 13392 -> 6517 bytes .../Fonts.OpenType/IndexToLocationTable.cs | Bin 11114 -> 5410 bytes .../Fonts.OpenType/OpenTypeFontTables.cs | Bin 85530 -> 41679 bytes .../Fonts.OpenType/OpenTypeFontface.cs | Bin 50424 -> 24491 bytes .../Fonts.OpenType/TableDirectoryEntry.cs | Bin 8508 -> 4124 bytes .../Fonts.OpenType/enums/TableTagNames.cs | 2 +- PdfSharpCore/Fonts/AdobeGlyphList20.cs | 2 +- PdfSharpCore/Fonts/FontResolverInfo.cs | 2 +- PdfSharpCore/Fonts/FontResolvingOptions.cs | 2 +- PdfSharpCore/Fonts/GlobalFontSettings.cs | 4 +- PdfSharpCore/Fonts/IFontResolver.cs | 4 +- .../Fonts/PlatformFontResolverInfo.cs | 2 +- PdfSharpCore/Internal/DoubleUtil.cs | 2 +- PdfSharpCore/Internal/FontFamilyModel.cs | 2 +- PdfSharpCore/Internal/TokenizerHelper.cs | 4 +- PdfSharpCore/Pdf.AcroForms/PdfAcroForm.cs | 2 +- .../Pdf.AcroForms/PdfCheckBoxField.cs | 4 +- PdfSharpCore/Pdf.AcroForms/PdfChoiceField.cs | 4 +- .../Pdf.AcroForms/PdfComboBoxField.cs | 4 +- .../Pdf.AcroForms/enums/PdfAcroFieldFlags.cs | 6 +- .../Pdf.Actions/enums/PdfNamedActionNames.cs | 2 +- PdfSharpCore/Pdf.Advanced/IContentStream.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfCIDFont.cs | Bin 20202 -> 9879 bytes .../Pdf.Advanced/PdfCrossReferenceTable.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfEmbeddedFile.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfExtGState.cs | 4 +- .../Pdf.Advanced/PdfExtGStateTable.cs | 2 +- .../Pdf.Advanced/PdfFileSpecification.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfFont.cs | 4 +- .../Pdf.Advanced/PdfFontDescriptor.cs | 12 +- .../Pdf.Advanced/PdfGroupAttributes.cs | 4 +- .../Pdf.Advanced/PdfImage.FaxEncode.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfPageInterals.cs | 2 +- PdfSharpCore/Pdf.Advanced/PdfSoftMask.cs | 8 +- PdfSharpCore/Pdf.Advanced/PdfTilingPattern.cs | 12 +- .../PdfTransparencyGroupAttributes.cs | 16 +-- PdfSharpCore/Pdf.Advanced/PdfType1Font.cs | 12 +- PdfSharpCore/Pdf.Annotations/PdfAnnotation.cs | 26 ++--- .../PdfFileAttachmentAnnotation.cs | 2 +- .../Pdf.Annotations/PdfLinkAnnotation.cs | 4 +- .../Pdf.Annotations/PdfWidgetAnnotation.cs | 8 +- .../enums/PdfAnnotationFlags.cs | 6 +- PdfSharpCore/Pdf.Content.Objects/CObjects.cs | 2 +- PdfSharpCore/Pdf.Content/CLexer.cs | Bin 53240 -> 25846 bytes PdfSharpCore/Pdf.Content/Chars.cs | 2 +- PdfSharpCore/Pdf.Filters/PngFilter.cs | 2 +- PdfSharpCore/Pdf.Filters/StreamDecoder.cs | 2 +- PdfSharpCore/Pdf.IO/Chars.cs | 4 +- PdfSharpCore/Pdf.IO/Lexer.cs | 6 +- PdfSharpCore/Pdf.IO/Parser.cs | 8 +- PdfSharpCore/Pdf.IO/enums/PdfReadAccuracy.cs | 2 +- PdfSharpCore/Pdf.Internal/AnsiEncoding.cs | 4 +- PdfSharpCore/Pdf.Internal/ColorSpaceHelper.cs | 2 +- PdfSharpCore/Pdf.Internal/DocEncoding.cs | 2 +- PdfSharpCore/Pdf.Internal/PdfDiagnostics.cs | 2 +- .../Pdf.Internal/ThreadLocalStorage.cs | 2 +- PdfSharpCore/Pdf.Printing/PdfFilePrinter.cs | 2 +- PdfSharpCore/Pdf.Security/AESEncryptor.cs | 2 +- PdfSharpCore/Pdf.Security/EncryptorBase.cs | 2 +- PdfSharpCore/Pdf.Security/EncryptorFactory.cs | 2 +- PdfSharpCore/Pdf.Security/IEncryptor.cs | 2 +- .../Pdf.Security/PdfSecurityHandler.cs | 8 +- .../PdfStandardSecurityHandler.cs | 16 +-- PdfSharpCore/Pdf.Security/RC4Encryptor.cs | 2 +- .../enums/PdfUserAccessPermission.cs | 6 +- .../DefaultAppearanceHandler.cs | 2 +- PdfSharpCore/Pdf.Signatures/DefaultSigner.cs | 2 +- .../ISignatureAppearanceHandler.cs | 2 +- PdfSharpCore/Pdf.Signatures/ISigner.cs | 2 +- .../Pdf.Signatures/PdfSignatureHandler.cs | 2 +- .../Pdf.Signatures/PdfSignatureOptions.cs | 2 +- .../Pdf.Signatures/PositionTracker.cs | 2 +- PdfSharpCore/Pdf.Signatures/RangedStream.cs | 2 +- PdfSharpCore/Pdf/EntryInfoAttribute.cs | 2 +- PdfSharpCore/Pdf/PdfBooleanObject.cs | 2 +- PdfSharpCore/Pdf/PdfDictionary.cs | 2 +- PdfSharpCore/Pdf/PdfDocumentInformation.cs | 2 +- PdfSharpCore/Pdf/PdfDocumentOptions.cs | 2 +- PdfSharpCore/Pdf/PdfDocumentSettings.cs | 2 +- PdfSharpCore/Pdf/PdfInteger.cs | 2 +- PdfSharpCore/Pdf/PdfLong.cs | 2 +- PdfSharpCore/Pdf/PdfNullObject.cs | 2 +- PdfSharpCore/Pdf/PdfObject.cs | 2 +- PdfSharpCore/Pdf/PdfOutline.cs | 2 +- PdfSharpCore/Pdf/PdfPage.cs | 20 ++-- PdfSharpCore/Pdf/PdfReal.cs | 2 +- PdfSharpCore/Pdf/PdfUInteger.cs | 2 +- PdfSharpCore/Pdf/PdfViewerPreferences.cs | 42 +++---- .../Pdf/enums/AnnotationCopyingType.cs | 2 +- PdfSharpCore/Pdf/enums/PdfColorMode.cs | 2 +- .../Pdf/enums/PdfCustomValueCompression.cs | 2 +- PdfSharpCore/Pdf/enums/PdfFlateEncodeMode.cs | 2 +- PdfSharpCore/Pdf/enums/PdfPageMode.cs | 2 +- PdfSharpCore/Pdf/enums/PdfReadingDirection.cs | 2 +- .../enums/PdfUseFlateDecoderForJpegImages.cs | 2 +- PdfSharpCore/SilverlightInternals/AgHacks.cs | 2 +- PdfSharpCore/Utils/FontResolver.cs | 2 +- PdfSharpCore/root/PSSR.cs | 2 +- PdfSharpCore/root/PageSizeConverter.cs | 44 ++++---- PdfSharpCore/root/ProductVersionInfo.cs | 2 +- PdfSharpCore/root/enums/PSMsgID.cs | 2 +- PdfSharpCore/root/enums/PageSize.cs | 14 +-- SampleApp/Program.cs | 2 +- SignatureTestConsole/Program.cs | 2 +- 196 files changed, 417 insertions(+), 417 deletions(-) diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlParser.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlParser.cs index b19f0564..64e2593a 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlParser.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlParser.cs @@ -74,7 +74,7 @@ internal DdlParser(string fileName, string ddl, DdlReaderErrors errors) } /// - /// Parses the keyword «\document». + /// Parses the keyword �\document�. /// internal Document ParseDocument(Document document) { @@ -106,8 +106,8 @@ internal Document ParseDocument(Document document) } /// - /// Parses one of the keywords «\document», «\styles», «\section», «\table», «\textframe», «\chart» - /// and «\paragraph» and returns the corresponding DocumentObject or DocumentObjectCollection. + /// Parses one of the keywords �\document�, �\styles�, �\section�, �\table�, �\textframe�, �\chart� + /// and �\paragraph� and returns the corresponding DocumentObject or DocumentObjectCollection. /// internal DocumentObject ParseDocumentObject() { @@ -158,7 +158,7 @@ internal DocumentObject ParseDocumentObject() } /// - /// Parses the keyword «\styles». + /// Parses the keyword �\styles�. /// private Styles ParseStyles(Styles styles) { @@ -180,7 +180,7 @@ private Styles ParseStyles(Styles styles) } /// - /// Parses a style definition block within the keyword «\styles». + /// Parses a style definition block within the keyword �\styles�. /// private Style ParseStyleDefinition(Styles styles) { @@ -264,7 +264,7 @@ private bool IsHeaderFooter() } /// - /// Parses the keyword «\section». + /// Parses the keyword �\section�. /// private Section ParseSection(Sections sections) { @@ -284,7 +284,7 @@ private Section ParseSection(Sections sections) AssertSymbol(Symbol.BraceLeft); - // Consider the case that the keyword «\paragraph» can be omitted. + // Consider the case that the keyword �\paragraph� can be omitted. if (IsParagraphContent()) { Paragraph paragraph = section.Elements.AddParagraph(); @@ -313,7 +313,7 @@ private Section ParseSection(Sections sections) } /// - /// Parses the keywords «\header». + /// Parses the keywords �\header�. /// private void ParseHeaderFooter(Section section) { @@ -423,7 +423,7 @@ private bool IsParagraphContent() } /// - /// Parses the document elements of a «\paragraph», «\cell» or comparable. + /// Parses the document elements of a �\paragraph�, �\cell� or comparable. /// private DocumentElements ParseDocumentElements(DocumentElements elements, Symbol context) { @@ -482,7 +482,7 @@ private DocumentElements ParseDocumentElements(DocumentElements elements, Symbol } /// - /// Parses the keyword «\paragraph». + /// Parses the keyword �\paragraph�. /// private void ParseParagraph(DocumentElements elements) { @@ -675,7 +675,7 @@ private void ParseFormattedText(ParagraphElements elements, int nestingLevel) } /// - /// Parses the keywords «\bold», «\italic», and «\underline». + /// Parses the keywords �\bold�, �\italic�, and �\underline�. /// private void ParseBoldItalicEtc(FormattedText formattedText, int nestingLevel) { @@ -686,7 +686,7 @@ private void ParseBoldItalicEtc(FormattedText formattedText, int nestingLevel) } /// - /// Parses the keyword «\font». + /// Parses the keyword �\font�. /// private void ParseFont(FormattedText formattedText, int nestingLevel) { @@ -708,7 +708,7 @@ private void ParseFont(FormattedText formattedText, int nestingLevel) } /// - /// Parses code like «("name")». + /// Parses code like �("name")�. /// private string ParseElementName() { @@ -725,7 +725,7 @@ private string ParseElementName() } /// - /// Parses the keyword «\fontsize». + /// Parses the keyword �\fontsize�. /// private void ParseFontSize(FormattedText formattedText, int nestingLevel) { @@ -746,7 +746,7 @@ private void ParseFontSize(FormattedText formattedText, int nestingLevel) } /// - /// Parses the keyword «\fontcolor». + /// Parses the keyword �\fontcolor�. /// private void ParseFontColor(FormattedText formattedText, int nestingLevel) { @@ -765,7 +765,7 @@ private void ParseFontColor(FormattedText formattedText, int nestingLevel) } /// - /// Parses the keyword «\symbol» resp. «\(». + /// Parses the keyword �\symbol� resp. �\(�. /// private void ParseSymbol(ParagraphElements elements) { @@ -818,7 +818,7 @@ private void ParseSymbol(ParagraphElements elements) } /// - /// Parses the keyword «\chr». + /// Parses the keyword �\chr�. /// private void ParseChr(ParagraphElements elements) { @@ -864,7 +864,7 @@ private void ParseChr(ParagraphElements elements) } /// - /// Parses the keyword «\field». + /// Parses the keyword �\field�. /// private void ParseField(ParagraphElements elements, int nestingLevel) { @@ -925,7 +925,7 @@ private void ParseField(ParagraphElements elements, int nestingLevel) } /// - /// Parses the keyword «\footnote». + /// Parses the keyword �\footnote�. /// private void ParseFootnote(ParagraphElements elements, int nestingLevel) { @@ -938,7 +938,7 @@ private void ParseFootnote(ParagraphElements elements, int nestingLevel) AssertSymbol(Symbol.BraceLeft); - // The keyword «\paragraph» is typically ommitted. + // The keyword �\paragraph� is typically ommitted. if (IsParagraphContent()) { Paragraph paragraph = footnote.Elements.AddParagraph(); @@ -953,7 +953,7 @@ private void ParseFootnote(ParagraphElements elements, int nestingLevel) } /// - /// Parses the keyword «\hyperlink». + /// Parses the keyword �\hyperlink�. /// private void ParseHyperlink(ParagraphElements elements, int nestingLevel) { @@ -971,7 +971,7 @@ private void ParseHyperlink(ParagraphElements elements, int nestingLevel) } /// - /// Parses the keyword «\space». + /// Parses the keyword �\space�. /// private void ParseSpace(ParagraphElements elements, int nestingLevel) { @@ -984,7 +984,7 @@ private void ParseSpace(ParagraphElements elements, int nestingLevel) Character space = elements.AddSpace(1); - // «\space» can stand alone + // �\space� can stand alone if (scanner.PeekSymbol() == Symbol.ParenLeft) { ReadCode(); // read '(' @@ -1028,7 +1028,7 @@ private void ParsePageBreak(DocumentElements elements) } /// - /// Parses the keyword «\table». + /// Parses the keyword �\table�. /// private void ParseTable(DocumentElements elements, Table table) { @@ -1048,11 +1048,11 @@ private void ParseTable(DocumentElements elements, Table table) AssertSymbol(Symbol.BraceLeft); ReadCode(); - // Table must start with «\columns»... + // Table must start with �\columns�... AssertSymbol(Symbol.Columns); ParseColumns(tbl); - // ...followed by «\rows». + // ...followed by �\rows�. AssertSymbol(Symbol.Rows); ParseRows(tbl); @@ -1067,7 +1067,7 @@ private void ParseTable(DocumentElements elements, Table table) } /// - /// Parses the keyword «\columns». + /// Parses the keyword �\columns�. /// private void ParseColumns(Table table) { @@ -1107,7 +1107,7 @@ private void ParseColumns(Table table) } /// - /// Parses the keyword «\column». + /// Parses the keyword �\column�. /// private void ParseColumn(Column column) { @@ -1128,7 +1128,7 @@ private void ParseColumn(Column column) } /// - /// Parses the keyword «\rows». + /// Parses the keyword �\rows�. /// private void ParseRows(Table table) { @@ -1168,7 +1168,7 @@ private void ParseRows(Table table) } /// - /// Parses the keyword «\row». + /// Parses the keyword �\row�. /// private void ParseRow(Row row) { @@ -1213,7 +1213,7 @@ private void ParseRow(Row row) } /// - /// Parses the keyword «\cell». + /// Parses the keyword �\cell�. /// private void ParseCell(Cell cell) { @@ -1243,7 +1243,7 @@ private void ParseCell(Cell cell) } /// - /// Parses the keyword «\image». + /// Parses the keyword �\image�. /// private void ParseImage(Image image, bool paragraphContent) { @@ -1279,7 +1279,7 @@ private void ParseImage(Image image, bool paragraphContent) } /// - /// Parses the keyword «\textframe». + /// Parses the keyword �\textframe�. /// private void ParseTextFrame(DocumentElements elements) { @@ -1353,7 +1353,7 @@ private void ParseBarcode(DocumentElements elements) } /// - /// Parses the keyword «\chart». + /// Parses the keyword �\chart�. /// private void ParseChart(DocumentElements elements) { @@ -1472,7 +1472,7 @@ private void ParseChart(DocumentElements elements) } /// - /// Parses the keyword «\plotarea» inside a chart. + /// Parses the keyword �\plotarea� inside a chart. /// private void ParseArea(PlotArea area) { @@ -1518,8 +1518,8 @@ private void ParseArea(PlotArea area) } /// - /// Parses the keywords «\headerarea», «\toparea», «\bottomarea», «\footerarea», - /// «\leftarea» or «\rightarea» inside a chart. + /// Parses the keywords �\headerarea�, �\toparea�, �\bottomarea�, �\footerarea�, + /// �\leftarea� or �\rightarea� inside a chart. /// private void ParseArea(TextArea area) { @@ -1594,7 +1594,7 @@ private void ParseArea(TextArea area) } /// - /// Parses the keywords «\xaxis», «\yaxis» or «\zaxis» inside a chart. + /// Parses the keywords �\xaxis�, �\yaxis� or �\zaxis� inside a chart. /// private void ParseAxes(Axis axis, Symbol symbolAxis) { @@ -1630,7 +1630,7 @@ private void ParseAxes(Axis axis, Symbol symbolAxis) } /// - /// Parses the keyword «\series» inside a chart. + /// Parses the keyword �\series� inside a chart. /// private void ParseSeries(Series series) { @@ -1698,7 +1698,7 @@ private void ParseSeries(Series series) } /// - /// Parses the keyword «\xvalues» inside a chart. + /// Parses the keyword �\xvalues� inside a chart. /// private void ParseSeries(XSeries series) { @@ -1760,7 +1760,7 @@ private void ParseSeries(XSeries series) } /// - /// Parses the keyword «\point» inside a series. + /// Parses the keyword �\point� inside a series. /// private void ParsePoint(Point point) { @@ -1790,7 +1790,7 @@ private void ParsePoint(Point point) } /// - /// Parses the keyword «\legend» inside a textarea. + /// Parses the keyword �\legend� inside a textarea. /// private void ParseLegend(Legend legend) { @@ -1822,7 +1822,7 @@ private void ParseLegend(Legend legend) } /// - /// Parses an attribute declaration block enclosed in brackets «[…]». If readNextSymbol is + /// Parses an attribute declaration block enclosed in brackets �[�]�. If readNextSymbol is /// set to true, the closing bracket will be read. /// private void ParseAttributes(DocumentObject element, bool readNextSymbol) @@ -1841,7 +1841,7 @@ private void ParseAttributes(DocumentObject element, bool readNextSymbol) } /// - /// Parses an attribute declaration block enclosed in brackets «[…]». + /// Parses an attribute declaration block enclosed in brackets �[�]�. /// private void ParseAttributes(DocumentObject element) { @@ -1858,7 +1858,7 @@ private void ParseAttributeStatement(DocumentObject dom) // or // sequence of identifiers: xxx.yyy.zzz // - // followed by: «=», «+=», «-=», or «{» + // followed by: �=�, �+=�, �-=�, or �{� // // Parser of rhs depends on the type of the l-value. @@ -1979,7 +1979,7 @@ private void ParseAttributeStatement(DocumentObject dom) } /// - /// Parses an attribute declaration block enclosed in braces «{…}». + /// Parses an attribute declaration block enclosed in braces �{�}�. /// private void ParseAttributeBlock(DocumentObject element) { @@ -2221,8 +2221,8 @@ private void ParseColorAssignment(DocumentObject dom, ValueDescriptor vd) } /// - /// Parses a color. It can be «green», «123456», «0xFFABCDEF», - /// «RGB(r, g, b)», «CMYK(c, m, y, k)», «CMYK(a, c, m, y, k)», «GRAY(g)», or «"MyColor"». + /// Parses a color. It can be �green�, �123456�, �0xFFABCDEF�, + /// �RGB(r, g, b)�, �CMYK(c, m, y, k)�, �CMYK(a, c, m, y, k)�, �GRAY(g)�, or �"MyColor"�. /// private Color ParseColor() { @@ -2278,7 +2278,7 @@ private Color ParseColor() } /// - /// Parses «RGB(r, g, b)». + /// Parses �RGB(r, g, b)�. /// private Color ParseRGB() { @@ -2319,7 +2319,7 @@ private Color ParseRGB() } /// - /// Parses «CMYK(c, m, y, k)» or «CMYK(a, c, m, y, k)». + /// Parses �CMYK(c, m, y, k)� or �CMYK(a, c, m, y, k)�. /// private Color ParseCMYK() { @@ -2390,7 +2390,7 @@ private Color ParseCMYK() } /// - /// Parses «GRAY(g)». + /// Parses �GRAY(g)�. /// private Color ParseGray() { @@ -2720,4 +2720,4 @@ private TokenType TokenType private DdlScanner scanner; private DdlReaderErrors errors; } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlScanner.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlScanner.cs index 720f54c5..ab565ece 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlScanner.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/DdlScanner.cs @@ -41,10 +41,10 @@ ddl = | table-element: - \table «attributes»opt { «columns-element» «rows-element» } + \table �attributes�opt { �columns-element� �rows-element� } table-element: - \table «attributes»opt { «columns-element» «rows-element» } + \table �attributes�opt { �columns-element� �rows-element� } */ namespace MigraDocCore.DocumentObjectModel.IO @@ -294,7 +294,7 @@ protected Symbol PeekPunctuator(int index) // sym = Symbol.Question; // break; - case '¤': + case '�': sym = Symbol.Currency; //??? used in DDL? break; @@ -1314,7 +1314,7 @@ protected Symbol ScanPunctuator() // sym = Symbol.Question; // break; - case '¤': + case '�': sym = Symbol.Currency; //??? used in DDL? break; @@ -1409,7 +1409,7 @@ protected Symbol ScanPunctuator() /// - /// Scans verbatim strings like «@"String with ""quoted"" text"». + /// Scans verbatim strings like �@"String with ""quoted"" text"�. /// protected string ScanVerbatimStringLiteral() { @@ -1434,7 +1434,7 @@ protected string ScanVerbatimStringLiteral() } /// - /// Scans regular string literals like «"String with \"escaped\" text"». + /// Scans regular string literals like �"String with \"escaped\" text"�. /// protected string ScanStringLiteral() { diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/Symbol.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/Symbol.cs index 075d10ec..6d1e4264 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/Symbol.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/Symbol.cs @@ -83,7 +83,7 @@ enum Symbol Percent, // % Dollar, // $ Hash, // # - Currency, // ¤ + Currency, // � //Questionmark, // ? Quotationmark, // " At, // @ diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/TokenType.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/TokenType.cs index 28996f22..9651f6ea 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/TokenType.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.IO/enums/TokenType.cs @@ -50,17 +50,17 @@ enum TokenType Identifier, /// - /// Both «true» and «\bold» are keywords, case sensitive. + /// Both �true� and �\bold� are keywords, case sensitive. /// KeyWord, /// - /// Sample: «42» + /// Sample: �42� /// IntegerLiteral, /// - /// Samples: «42.0», «42.», «.42»,... + /// Samples: �42.0�, �42.�, �.42�,... /// RealLiteral, @@ -70,12 +70,12 @@ enum TokenType CharacterLiteral, /// - /// Both «"text"» and «@"text with ""quotes"""». + /// Both �"text"� and �@"text with ""quotes"""�. /// StringLiteral, /// - /// Samples: «.», «{», «+=»,... + /// Samples: �.�, �{�, �+=�,... /// OperatorOrPunctuator, diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/Meta.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/Meta.cs index cbae8587..4acd132a 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/Meta.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/Meta.cs @@ -277,4 +277,4 @@ static void AddValueDescriptors(Meta meta, Type type) } } } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NEnum.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NEnum.cs index 6cb328a3..fa29a20d 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NEnum.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NEnum.cs @@ -72,8 +72,8 @@ public int Value get { return this.val != int.MinValue ? this.val : 0; } set { - //TODO: Klasse Character So ändern, dass symbolName und char in unterschiedlichen Feldern gespeichert wird - //Diese Spezialbehandlung entfällt dann. + //TODO: Klasse Character So �ndern, dass symbolName und char in unterschiedlichen Feldern gespeichert wird + //Diese Spezialbehandlung entf�llt dann. if (this.type == typeof(SymbolName)) { // if (Enum.IsDefined(this.type, (uint)value)) diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NString.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NString.cs index fbb6a206..2ac94385 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NString.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/NString.cs @@ -115,4 +115,4 @@ public override int GetHashCode() string val; } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/AppResources.Designer.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/AppResources.Designer.cs index c6628cae..1d3cc46a 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/AppResources.Designer.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/AppResources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/DomSR.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/DomSR.cs index f1a3946a..3ff049b2 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/DomSR.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Resources/DomSR.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/TextFrame.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/TextFrame.cs index 8231f0fa..74ad8674 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/TextFrame.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/TextFrame.cs @@ -294,4 +294,4 @@ internal override Meta Meta static Meta meta; #endregion } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/WrapFormat.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/WrapFormat.cs index 99a98440..7499634b 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/WrapFormat.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Shapes/WrapFormat.cs @@ -154,4 +154,4 @@ internal override Meta Meta static Meta meta; #endregion } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Tables/Cell.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Tables/Cell.cs index f5f77511..71223ed6 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Tables/Cell.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Tables/Cell.cs @@ -454,4 +454,4 @@ internal override Meta Meta static Meta meta; #endregion } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Visitors/VisitorBase.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Visitors/VisitorBase.cs index 66548873..cb4d672f 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Visitors/VisitorBase.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Visitors/VisitorBase.cs @@ -262,7 +262,7 @@ protected void FlattenTabStops(TabStops tabStops, TabStops refTabStops) if (!tabStop.AddTab) tabStops.RemoveObjectAt(i); } - //Die TabStopCollection ist so wie sie jetzt ist vollständig. + //Die TabStopCollection ist so wie sie jetzt ist vollst�ndig. //Sie darf daher nichts erben, d.h. : tabStops.fClearAll = true; } diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Character.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Character.cs index 2603c795..1da1ef3c 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Character.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Character.cs @@ -40,7 +40,7 @@ namespace MigraDocCore.DocumentObjectModel /// /// Represents a special character in paragraph text. /// - // TODO: So ändern, dass symbolName und char in unterschiedlichen Feldern gespeichert wird + // TODO: So �ndern, dass symbolName und char in unterschiedlichen Feldern gespeichert wird public class Character : DocumentObject { // \space diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Chars.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Chars.cs index 9bd963a1..9b7be342 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Chars.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Chars.cs @@ -78,7 +78,7 @@ public sealed class Chars public const char Question = '?'; public const char Hyphen = '-'; // char(45) public const char SoftHyphen = '\u00ad'; // char(173) - public const char Currency = '¤'; + public const char Currency = '�'; public const char ZeroWidthSpace = '\u200b'; } } diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Color.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Color.cs index 09e308c2..daed1c21 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Color.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Color.cs @@ -515,4 +515,4 @@ public static Color FromCmykColor(double alpha, Color color) /// public static readonly Color Empty = new Color(0); } -} \ No newline at end of file +} diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/ImageHelper.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/ImageHelper.cs index 894d4b5d..184b3307 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/ImageHelper.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/ImageHelper.cs @@ -1,4 +1,4 @@ -#region MigraDoc - Creating Documents on the Fly +#region MigraDoc - Creating Documents on the Fly // // Authors: // Stefan Lange (mailto:Stefan.Lange@PdfSharpCore.com) diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Serializer.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Serializer.cs index 5b7c0142..5a57e27f 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Serializer.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Serializer.cs @@ -284,7 +284,7 @@ void WriteToStream(string text, bool fLineBreak, bool fAutoIndent) { // does not work // if (IsBlankRequired(this.lastChar, _text[0])) - // _text = "·" + _text; + // _text = "�" + _text; } else { @@ -300,7 +300,7 @@ void WriteToStream(string text, bool fLineBreak, bool fAutoIndent) if (this.linePos > this.lineBreakBeyond) { fLineBreak = true; - //this.textWriter.Write("//¶"); // for debugging only + //this.textWriter.Write("//�"); // for debugging only } else this.lastChar = text[len - 1]; diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Style.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Style.cs index a27be459..b4b8ebbf 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Style.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Style.cs @@ -292,7 +292,7 @@ public Style GetBaseStyle() if (this.baseStyle.Value == "") throw new ArgumentException("User defined Style defined without a BaseStyle"); - //REVIEW KlPo4StLa Spezialbehandlung für den DefaultParagraphFont krüppelig(DefaultParagraphFont wird bei zugrif über styles["name"] nicht zurückgeliefert). + //REVIEW KlPo4StLa Spezialbehandlung f�r den DefaultParagraphFont kr�ppelig(DefaultParagraphFont wird bei zugrif �ber styles["name"] nicht zur�ckgeliefert). //Da hast Du Recht -> siehe IsReadOnly if (this.baseStyle.Value == DefaultParagraphFontName) return styles[0]; @@ -309,7 +309,7 @@ public bool BuildIn } [DV] internal NBool buildIn = NBool.NullValue; - // THHO: muss dass nicht builtIn heißen?!?!?!? + // THHO: muss dass nicht builtIn hei�en?!?!?!? /// /// Gets or sets a comment associated with this object. diff --git a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Styles.cs b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Styles.cs index 3743cc56..7c883522 100644 --- a/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Styles.cs +++ b/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel/Styles.cs @@ -243,55 +243,55 @@ internal void SetupStyles() style.ParagraphFormat.WidowControl = true; this.Add(style); - // Heading1 'Überschrift 1' (Paragraph Style) + // Heading1 '�berschrift 1' (Paragraph Style) style = new Style("Heading1", "Normal"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; this.Add(style); - // Heading2 'Überschrift 2' (Paragraph Style) + // Heading2 '�berschrift 2' (Paragraph Style) style = new Style("Heading2", "Heading1"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level2; this.Add(style); - // Heading3 'Überschrift 3' (Paragraph Style) + // Heading3 '�berschrift 3' (Paragraph Style) style = new Style("Heading3", "Heading2"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level3; this.Add(style); - // Heading4 'Überschrift 4' (Paragraph Style) + // Heading4 '�berschrift 4' (Paragraph Style) style = new Style("Heading4", "Heading3"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level4; this.Add(style); - // Heading5 'Überschrift 5' (Paragraph Style) + // Heading5 '�berschrift 5' (Paragraph Style) style = new Style("Heading5", "Heading4"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level5; this.Add(style); - // Heading6 'Überschrift 6' (Paragraph Style) + // Heading6 '�berschrift 6' (Paragraph Style) style = new Style("Heading6", "Heading5"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level6; this.Add(style); - // Heading7 'Überschrift 7' (Paragraph Style) + // Heading7 '�berschrift 7' (Paragraph Style) style = new Style("Heading7", "Heading6"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level7; this.Add(style); - // Heading8 'Überschrift 8' (Paragraph Style) + // Heading8 '�berschrift 8' (Paragraph Style) style = new Style("Heading8", "Heading7"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level8; this.Add(style); - // Heading9 'Überschrift 9' (Paragraph Style) + // Heading9 '�berschrift 9' (Paragraph Style) style = new Style("Heading9", "Heading8"); style.buildIn.Value = true; style.ParagraphFormat.OutlineLevel = OutlineLevel.Level9; @@ -302,7 +302,7 @@ internal void SetupStyles() style.buildIn.Value = true; this.Add(style); - // Footnote 'Fußnote' (Paragraph Style) + // Footnote 'Fu�note' (Paragraph Style) style = new Style("Footnote", "Normal"); style.buildIn.Value = true; this.Add(style); @@ -312,7 +312,7 @@ internal void SetupStyles() style.buildIn.Value = true; this.Add(style); - // -33: Footer 'Fußzeile' (Paragraph Style) + // -33: Footer 'Fu�zeile' (Paragraph Style) style = new Style("Footer", "Normal"); style.buildIn.Value = true; this.Add(style); @@ -322,7 +322,7 @@ internal void SetupStyles() style.buildIn.Value = true; this.Add(style); - // InvalidStyleName 'Ungültiger Formatvorlagenname' (Paragraph Style) + // InvalidStyleName 'Ung�ltiger Formatvorlagenname' (Paragraph Style) style = new Style("InvalidStyleName", "Normal"); style.buildIn.Value = true; style.Font.Bold = true; diff --git a/MigraDocCore.DocumentObjectModel/ProductVersionInfo.cs b/MigraDocCore.DocumentObjectModel/ProductVersionInfo.cs index 377522fd..1b401b0b 100644 --- a/MigraDocCore.DocumentObjectModel/ProductVersionInfo.cs +++ b/MigraDocCore.DocumentObjectModel/ProductVersionInfo.cs @@ -81,7 +81,7 @@ public static class ProductVersionInfo /// /// The copyright information. Also used as NuGet Copyright. /// - public const string Copyright = "Copyright © 2001-2012 empira Software GmbH."; // Also used as NuGet Copyright. + public const string Copyright = "Copyright � 2001-2012 empira Software GmbH."; // Also used as NuGet Copyright. /// /// The trademark the product. diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering.Resources/AppResources.Designer.cs b/MigraDocCore.Rendering/MigraDoc.Rendering.Resources/AppResources.Designer.cs index 549f9511..d168ecfa 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering.Resources/AppResources.Designer.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering.Resources/AppResources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering.UnitTest/TestParagraphRenderer.cs b/MigraDocCore.Rendering/MigraDoc.Rendering.UnitTest/TestParagraphRenderer.cs index e5a231b6..6be99838 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering.UnitTest/TestParagraphRenderer.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering.UnitTest/TestParagraphRenderer.cs @@ -205,4 +205,4 @@ public static void Fields(string outputFile) printer.PdfDocument.Save(outputFile); } } -} \ No newline at end of file +} diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering/ColorHelper.cs b/MigraDocCore.Rendering/MigraDoc.Rendering/ColorHelper.cs index 41dfc4b1..bba853c1 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering/ColorHelper.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering/ColorHelper.cs @@ -55,4 +55,4 @@ public static XColor ToXColor(Color color, bool cmyk) return XColor.FromArgb((int)color.Argb); } } -} \ No newline at end of file +} diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering/FormattedDocument.cs b/MigraDocCore.Rendering/MigraDoc.Rendering/FormattedDocument.cs index b7d1b411..77cf9425 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering/FormattedDocument.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering/FormattedDocument.cs @@ -754,4 +754,4 @@ internal bool IsEmptyPage(int page) Dictionary emptyPages = new Dictionary(); Document document; } -} \ No newline at end of file +} diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering/ParagraphRenderer.cs b/MigraDocCore.Rendering/MigraDoc.Rendering/ParagraphRenderer.cs index 2e82e91a..8ba392ec 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering/ParagraphRenderer.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering/ParagraphRenderer.cs @@ -1,4 +1,4 @@ -#region MigraDoc - Creating Documents on the Fly +#region MigraDoc - Creating Documents on the Fly // // Authors: // Klaus Potzesny (mailto:Klaus.Potzesny@PdfSharpCore.com) diff --git a/MigraDocCore.Rendering/MigraDoc.Rendering/TopDownFormatter.cs b/MigraDocCore.Rendering/MigraDoc.Rendering/TopDownFormatter.cs index 49ed134c..33f2fa89 100644 --- a/MigraDocCore.Rendering/MigraDoc.Rendering/TopDownFormatter.cs +++ b/MigraDocCore.Rendering/MigraDoc.Rendering/TopDownFormatter.cs @@ -201,7 +201,7 @@ public void FormatOnAreas(XGraphics gfx, bool topLevel) #if false area = this.areaProvider.GetNextArea(); #else - if (!ready) //!!!newTHHO 19.01.2007: korrekt? oder GetNextArea immer ausführen??? + if (!ready) //!!!newTHHO 19.01.2007: korrekt? oder GetNextArea immer ausf�hren??? { area = this.areaProvider.GetNextArea(); maxHeight = area.Height; diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarChartRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarChartRenderer.cs index 51a5bf27..0b4d23a8 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarChartRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarChartRenderer.cs @@ -255,4 +255,4 @@ internal void InitSeries() } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarDataLabelRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarDataLabelRenderer.cs index 0533555f..4f74a3b1 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarDataLabelRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/BarDataLabelRenderer.cs @@ -159,4 +159,4 @@ internal override void CalcPositions() } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnChartRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnChartRenderer.cs index cce6e462..5a20ad5f 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnChartRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnChartRenderer.cs @@ -227,4 +227,4 @@ internal void InitSeries() } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnDataLabelRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnDataLabelRenderer.cs index f7297b6f..3cb1f7da 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnDataLabelRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/ColumnDataLabelRenderer.cs @@ -157,4 +157,4 @@ internal override void CalcPositions() } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/DataLabelRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/DataLabelRenderer.cs index d8a4977b..0e245f8d 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/DataLabelRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/DataLabelRenderer.cs @@ -105,4 +105,4 @@ internal override RendererInfo Init() /// internal abstract void CalcPositions(); } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/LinePlotAreaRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/LinePlotAreaRenderer.cs index f658192a..ecc36d0a 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/LinePlotAreaRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/LinePlotAreaRenderer.cs @@ -62,8 +62,8 @@ internal override void Draw() //gfx.SetClip(plotAreaRect, XCombineMode.Intersect); gfx.IntersectClip(plotAreaRect); - //TODO null-Values müssen berücksichtigt werden. - // Verbindungspunkte können fehlen, je nachdem wie null-Values behandelt werden sollen. + //TODO null-Values m�ssen ber�cksichtigt werden. + // Verbindungspunkte k�nnen fehlen, je nachdem wie null-Values behandelt werden sollen. // (NotPlotted, Interpolate etc.) // Draw lines and markers for each data series. diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/MarkerRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/MarkerRenderer.cs index 7d44b11d..0efd3e62 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/MarkerRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/MarkerRenderer.cs @@ -141,7 +141,7 @@ internal static void Draw(XGraphics graphics, XPoint pos, MarkerRendererInfo ren double outerCircle = size / 2; double innerCircle = size / 5; // outer circle - double rad = -(Math.PI / 2); // 90° + double rad = -(Math.PI / 2); // 90� for (int idx = 0; idx < 10; idx += 2) { points[idx].X = pos.X + outerCircle * Math.Cos(rad); @@ -150,7 +150,7 @@ internal static void Draw(XGraphics graphics, XPoint pos, MarkerRendererInfo ren } // inner circle - rad = -(Math.PI / 4); // 45° + rad = -(Math.PI / 4); // 45� double x = innerCircle * Math.Cos(rad); double y = innerCircle * Math.Sin(rad); points[1].X = pos.X + x; diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/PieDataLabelRenderer.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/PieDataLabelRenderer.cs index 36330cd2..f7016c5c 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/PieDataLabelRenderer.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/PieDataLabelRenderer.cs @@ -182,4 +182,4 @@ internal override void CalcPositions() } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/RendererParameters.cs b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/RendererParameters.cs index 9997a3b2..9eac34e6 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/RendererParameters.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting.Renderers/RendererParameters.cs @@ -105,4 +105,4 @@ public RendererInfo RendererInfo } RendererInfo rendererInfo; } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting/DataLabel.cs b/PdfSharpCore.Charting/PdfSharp.Charting/DataLabel.cs index 4e3d51b1..d907634c 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting/DataLabel.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting/DataLabel.cs @@ -137,4 +137,4 @@ public DataLabelType Type internal bool typeInitialized; #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting/DocumentObjectCollection.cs b/PdfSharpCore.Charting/PdfSharp.Charting/DocumentObjectCollection.cs index 90636fa5..e5ca358a 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting/DocumentObjectCollection.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting/DocumentObjectCollection.cs @@ -62,7 +62,7 @@ internal DocumentObjectCollection(DocumentObject parent) : base(parent) public virtual DocumentObject this[int index] { get {return this.elements[index] as DocumentObject;} - // TODO: überprüfen ob das erlaubt sein soll + // TODO: �berpr�fen ob das erlaubt sein soll set {this.elements[index] = value;} } diff --git a/PdfSharpCore.Charting/PdfSharp.Charting/LineFormat.cs b/PdfSharpCore.Charting/PdfSharp.Charting/LineFormat.cs index 0eb181b0..0449abb5 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting/LineFormat.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting/LineFormat.cs @@ -112,4 +112,4 @@ public LineStyle Style internal LineStyle style; #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Charting/PdfSharp.Charting/SeriesElements.cs b/PdfSharpCore.Charting/PdfSharp.Charting/SeriesElements.cs index ae1a82f0..dfddbc03 100644 --- a/PdfSharpCore.Charting/PdfSharp.Charting/SeriesElements.cs +++ b/PdfSharpCore.Charting/PdfSharp.Charting/SeriesElements.cs @@ -95,4 +95,4 @@ public void Add(params double[] values) } #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/CreateSimplePDF.cs b/PdfSharpCore.Test/CreateSimplePDF.cs index ce9a4d49..5dda3daa 100644 --- a/PdfSharpCore.Test/CreateSimplePDF.cs +++ b/PdfSharpCore.Test/CreateSimplePDF.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Text; using FluentAssertions; @@ -151,4 +151,4 @@ private string GetOutFilePath(string name) return Path.Combine(_rootPath, OutputDirName, name); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Helpers/PathHelper.cs b/PdfSharpCore.Test/Helpers/PathHelper.cs index d16f9a08..a1813a7d 100644 --- a/PdfSharpCore.Test/Helpers/PathHelper.cs +++ b/PdfSharpCore.Test/Helpers/PathHelper.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Reflection; namespace PdfSharpCore.Test.Helpers @@ -24,4 +24,4 @@ public static PathHelper GetInstance() private static PathHelper _instance; } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Helpers/TestData.cs b/PdfSharpCore.Test/Helpers/TestData.cs index c703e31c..23ad1922 100644 --- a/PdfSharpCore.Test/Helpers/TestData.cs +++ b/PdfSharpCore.Test/Helpers/TestData.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Test.Helpers +namespace PdfSharpCore.Test.Helpers { public static class TestData { @@ -19,4 +19,4 @@ public static class TestData Maecenas mollis sollicitudin felis at imperdiet. Duis dignissim purus quis interdum mattis. Nam sit amet quam quis enim hendrerit tincidunt. Aliquam euismod metus justo, non lobortis risus vehicula in. Pellentesque tempus, leo at placerat interdum, diam lectus gravida purus, id placerat justo quam nec mauris. Ut ullamcorper commodo dui in pretium. Suspendisse luctus mauris lacinia neque faucibus sollicitudin. Pellentesque ut ipsum metus. Quisque rutrum, risus eget feugiat vestibulum, enim nisl ornare risus, sit amet interdum arcu lacus at turpis. Mauris nec tristique massa. Curabitur diam urna, dapibus eget lorem porta, venenatis mattis justo. Sed eleifend accumsan lectus, id tempor metus semper in."; } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/IO/IoBaseTest.cs b/PdfSharpCore.Test/IO/IoBaseTest.cs index 26742746..a64af56a 100644 --- a/PdfSharpCore.Test/IO/IoBaseTest.cs +++ b/PdfSharpCore.Test/IO/IoBaseTest.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Text; using FluentAssertions; using PdfSharpCore.Pdf; @@ -70,4 +70,4 @@ protected string GetOutFilePath(string name) return Path.Combine(_rootPath, _outputDirName, name); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/IO/LargePDFReadWrite.cs b/PdfSharpCore.Test/IO/LargePDFReadWrite.cs index a83d8c43..d508bcca 100644 --- a/PdfSharpCore.Test/IO/LargePDFReadWrite.cs +++ b/PdfSharpCore.Test/IO/LargePDFReadWrite.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing; using PdfSharpCore.Drawing.Layout; using PdfSharpCore.Pdf; using PdfSharpCore.Test.Helpers; @@ -56,4 +56,4 @@ private void AddAPage(PdfDocument document, XFont font) tf.DrawString(TestData.LoremIpsumText, font, XBrushes.Black, rect, XStringFormats.TopLeft); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/IO/PdfReader.cs b/PdfSharpCore.Test/IO/PdfReader.cs index a8883625..2dcadc02 100644 --- a/PdfSharpCore.Test/IO/PdfReader.cs +++ b/PdfSharpCore.Test/IO/PdfReader.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +using FluentAssertions; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.IO; using PdfSharpCore.Test.Helpers; @@ -34,4 +34,4 @@ internal static void AssertIsAValidPdfDocumentWithProperties(PdfDocument inputDo inputDocument.PageCount.Should().BeGreaterThan(0); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Merge.cs b/PdfSharpCore.Test/Merge.cs index ec1e6eed..7733560a 100644 --- a/PdfSharpCore.Test/Merge.cs +++ b/PdfSharpCore.Test/Merge.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.IO; using PdfSharpCore.Test.Helpers; @@ -38,4 +38,4 @@ public void CanMerge2Documents() outputDocument.Save(outFilePath); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Outlines/OutlineTests.cs b/PdfSharpCore.Test/Outlines/OutlineTests.cs index 0d39eba4..81601f45 100644 --- a/PdfSharpCore.Test/Outlines/OutlineTests.cs +++ b/PdfSharpCore.Test/Outlines/OutlineTests.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using FluentAssertions; using PdfSharpCore.Drawing; using PdfSharpCore.Pdf; @@ -41,4 +41,4 @@ public void CanCreateDocumentWithOutlines() ms.ToArray().Length.Should().BeGreaterThan(1); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/PdfReader.cs b/PdfSharpCore.Test/PdfReader.cs index 0270c52f..6c9a6d84 100644 --- a/PdfSharpCore.Test/PdfReader.cs +++ b/PdfSharpCore.Test/PdfReader.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Reflection; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.IO; diff --git a/PdfSharpCore.Test/Pdfs/Content/Objects/CNameTests.cs b/PdfSharpCore.Test/Pdfs/Content/Objects/CNameTests.cs index 455b6978..1791e95d 100644 --- a/PdfSharpCore.Test/Pdfs/Content/Objects/CNameTests.cs +++ b/PdfSharpCore.Test/Pdfs/Content/Objects/CNameTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using FluentAssertions; using PdfSharpCore.Pdf.Content.Objects; using Xunit; @@ -41,4 +41,4 @@ public void SetNameWithoutPrefixThrowsException(string name) act.Should().Throw(); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Pdfs/PdfDateTests.cs b/PdfSharpCore.Test/Pdfs/PdfDateTests.cs index 5ed240d4..f4d348f6 100644 --- a/PdfSharpCore.Test/Pdfs/PdfDateTests.cs +++ b/PdfSharpCore.Test/Pdfs/PdfDateTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using FluentAssertions; using PdfSharpCore.Pdf; using Xunit; @@ -25,4 +25,4 @@ public void ParseDateString_WithNoOffset() pdfDate.Value.ToUniversalTime().Should().Be(expectedDateWithOffset.UtcDateTime); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore.Test/Security/PdfSecurity.cs b/PdfSharpCore.Test/Security/PdfSecurity.cs index 328ba6cd..f7297005 100644 --- a/PdfSharpCore.Test/Security/PdfSecurity.cs +++ b/PdfSharpCore.Test/Security/PdfSecurity.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +using FluentAssertions; using PdfSharpCore.Drawing; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.IO; @@ -123,4 +123,4 @@ public void CanReadPdfEncryptedWithSupportedAlgorithms(string fileName, string p output.WriteLine("Producer: {0}", doc.Info.Producer); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/!internal/Configuration.cs b/PdfSharpCore/!internal/Configuration.cs index fa4b1cf9..630d99e8 100644 --- a/PdfSharpCore/!internal/Configuration.cs +++ b/PdfSharpCore/!internal/Configuration.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/!internal/DynamicallyAccessedMemberTypes.cs b/PdfSharpCore/!internal/DynamicallyAccessedMemberTypes.cs index 9c1369fb..8232cde4 100644 --- a/PdfSharpCore/!internal/DynamicallyAccessedMemberTypes.cs +++ b/PdfSharpCore/!internal/DynamicallyAccessedMemberTypes.cs @@ -1,4 +1,4 @@ -// Included in .net 5 and later +// Included in .net 5 and later #if !NET5_0_OR_GREATER // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. @@ -100,4 +100,4 @@ enum DynamicallyAccessedMemberTypes All = ~None } } -#endif \ No newline at end of file +#endif diff --git a/PdfSharpCore/!internal/DynamicallyAccessedMembersAttribute.cs b/PdfSharpCore/!internal/DynamicallyAccessedMembersAttribute.cs index b20b1015..f6b9756f 100644 --- a/PdfSharpCore/!internal/DynamicallyAccessedMembersAttribute.cs +++ b/PdfSharpCore/!internal/DynamicallyAccessedMembersAttribute.cs @@ -1,4 +1,4 @@ -// Included in .net 5 and later +// Included in .net 5 and later #if !NET5_0_OR_GREATER // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. @@ -56,4 +56,4 @@ public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes member public DynamicallyAccessedMemberTypes MemberTypes { get; } } } -#endif \ No newline at end of file +#endif diff --git a/PdfSharpCore/Drawing.BarCodes/CodeBase.cs b/PdfSharpCore/Drawing.BarCodes/CodeBase.cs index 1989ea5c..dd01dabe 100644 --- a/PdfSharpCore/Drawing.BarCodes/CodeBase.cs +++ b/PdfSharpCore/Drawing.BarCodes/CodeBase.cs @@ -166,4 +166,4 @@ public Delta(int x, int y) { new Delta(-2, -2), new Delta(-1, -2), new Delta(0, -2), new Delta(-2, -1), new Delta(-1, -1), new Delta(0, -1), new Delta(-2, 0), new Delta(-1, 0), new Delta(0, 0) }, }; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.BarCodes/enums/CodeDirection.cs b/PdfSharpCore/Drawing.BarCodes/enums/CodeDirection.cs index b6eadf47..d1949b30 100644 --- a/PdfSharpCore/Drawing.BarCodes/enums/CodeDirection.cs +++ b/PdfSharpCore/Drawing.BarCodes/enums/CodeDirection.cs @@ -40,17 +40,17 @@ public enum CodeDirection LeftToRight, /// - /// Rotates the code 180° at the anchor position. + /// Rotates the code 180� at the anchor position. /// BottomToTop, /// - /// Rotates the code 180° at the anchor position. + /// Rotates the code 180� at the anchor position. /// RightToLeft, /// - /// Rotates the code 180° at the anchor position. + /// Rotates the code 180� at the anchor position. /// TopToBottom, } diff --git a/PdfSharpCore/Drawing.BarCodes/enums/MarkDistance.cs b/PdfSharpCore/Drawing.BarCodes/enums/MarkDistance.cs index 5027aafd..0b417c6e 100644 --- a/PdfSharpCore/Drawing.BarCodes/enums/MarkDistance.cs +++ b/PdfSharpCore/Drawing.BarCodes/enums/MarkDistance.cs @@ -47,4 +47,4 @@ namespace PdfSharpCore.Drawing.BarCodes // /// // Inch2_8 //} -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Internal/IImageImporter.cs b/PdfSharpCore/Drawing.Internal/IImageImporter.cs index ec39b82e..23a7eb01 100644 --- a/PdfSharpCore/Drawing.Internal/IImageImporter.cs +++ b/PdfSharpCore/Drawing.Internal/IImageImporter.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Thomas Hövel diff --git a/PdfSharpCore/Drawing.Internal/ImageImporter.cs b/PdfSharpCore/Drawing.Internal/ImageImporter.cs index 24b21d16..bbe3fab5 100644 --- a/PdfSharpCore/Drawing.Internal/ImageImporter.cs +++ b/PdfSharpCore/Drawing.Internal/ImageImporter.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Thomas Hövel diff --git a/PdfSharpCore/Drawing.Internal/ImageImporterBmp.cs b/PdfSharpCore/Drawing.Internal/ImageImporterBmp.cs index 05dedb84..0b1c8c92 100644 --- a/PdfSharpCore/Drawing.Internal/ImageImporterBmp.cs +++ b/PdfSharpCore/Drawing.Internal/ImageImporterBmp.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Thomas Hövel diff --git a/PdfSharpCore/Drawing.Internal/ImageImporterJpeg.cs b/PdfSharpCore/Drawing.Internal/ImageImporterJpeg.cs index 884c2374..5129727d 100644 --- a/PdfSharpCore/Drawing.Internal/ImageImporterJpeg.cs +++ b/PdfSharpCore/Drawing.Internal/ImageImporterJpeg.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Thomas Hövel diff --git a/PdfSharpCore/Drawing.Internal/ImageImporterRoot.cs b/PdfSharpCore/Drawing.Internal/ImageImporterRoot.cs index 23748298..ce2a2cb6 100644 --- a/PdfSharpCore/Drawing.Internal/ImageImporterRoot.cs +++ b/PdfSharpCore/Drawing.Internal/ImageImporterRoot.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Thomas Hövel diff --git a/PdfSharpCore/Drawing.Layout/Block.cs b/PdfSharpCore/Drawing.Layout/Block.cs index f2507ec1..a2c02a39 100644 --- a/PdfSharpCore/Drawing.Layout/Block.cs +++ b/PdfSharpCore/Drawing.Layout/Block.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing.Layout.enums; +using PdfSharpCore.Drawing.Layout.enums; namespace PdfSharpCore.Drawing.Layout { @@ -79,4 +79,4 @@ public Block(BlockType type) /// public bool NextBlockBelongsToMe { get; set; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Layout/FormatterEnvironment.cs b/PdfSharpCore/Drawing.Layout/FormatterEnvironment.cs index c79fd433..d3e5569f 100644 --- a/PdfSharpCore/Drawing.Layout/FormatterEnvironment.cs +++ b/PdfSharpCore/Drawing.Layout/FormatterEnvironment.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Drawing.Layout +namespace PdfSharpCore.Drawing.Layout { internal class FormatterEnvironment { @@ -10,4 +10,4 @@ internal class FormatterEnvironment public double CyDescent { get; set; } public double SpaceWidth { get; set; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Layout/TextSegment.cs b/PdfSharpCore/Drawing.Layout/TextSegment.cs index 364bffab..2a9928c7 100644 --- a/PdfSharpCore/Drawing.Layout/TextSegment.cs +++ b/PdfSharpCore/Drawing.Layout/TextSegment.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Drawing.Layout +namespace PdfSharpCore.Drawing.Layout { public class TextSegment { @@ -13,4 +13,4 @@ public class TextSegment public double CyDescent { get; set; } public double SpaceWidth { get; set; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Layout/XTextSegmentFormatter.cs b/PdfSharpCore/Drawing.Layout/XTextSegmentFormatter.cs index 87f045a7..ca461e51 100644 --- a/PdfSharpCore/Drawing.Layout/XTextSegmentFormatter.cs +++ b/PdfSharpCore/Drawing.Layout/XTextSegmentFormatter.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing.Layout.enums; +using PdfSharpCore.Drawing.Layout.enums; using PdfSharpCore.Pdf.IO; using System; using System.Collections.Generic; @@ -638,4 +638,4 @@ private void SetFontSpacings(TextSegment segment) // - super- and sub-script // - ... } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Layout/enums/BlockType.cs b/PdfSharpCore/Drawing.Layout/enums/BlockType.cs index 97ce875f..edcbdeaf 100644 --- a/PdfSharpCore/Drawing.Layout/enums/BlockType.cs +++ b/PdfSharpCore/Drawing.Layout/enums/BlockType.cs @@ -1,7 +1,7 @@ -namespace PdfSharpCore.Drawing.Layout.enums +namespace PdfSharpCore.Drawing.Layout.enums { internal enum BlockType { Text, Space, Hyphen, LineBreak, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Pdf/XGraphicsPdfRenderer.cs b/PdfSharpCore/Drawing.Pdf/XGraphicsPdfRenderer.cs index 62e53fcf..f7a4b1be 100644 --- a/PdfSharpCore/Drawing.Pdf/XGraphicsPdfRenderer.cs +++ b/PdfSharpCore/Drawing.Pdf/XGraphicsPdfRenderer.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -1788,4 +1788,4 @@ PdfGraphicsState RestoreState(InternalGraphicsState state) /// public XMatrix DefaultViewMatrix; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing.Pdf/enums/DirtyFlags.cs b/PdfSharpCore/Drawing.Pdf/enums/DirtyFlags.cs index c3669073..964a2bc5 100644 --- a/PdfSharpCore/Drawing.Pdf/enums/DirtyFlags.cs +++ b/PdfSharpCore/Drawing.Pdf/enums/DirtyFlags.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Drawing.Pdf/enums/StreamMode.cs b/PdfSharpCore/Drawing.Pdf/enums/StreamMode.cs index 73dce95e..d89d096c 100644 --- a/PdfSharpCore/Drawing.Pdf/enums/StreamMode.cs +++ b/PdfSharpCore/Drawing.Pdf/enums/StreamMode.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Drawing/CoreGraphicsPath.cs b/PdfSharpCore/Drawing/CoreGraphicsPath.cs index 8e94e0b1..ca9578b1 100644 --- a/PdfSharpCore/Drawing/CoreGraphicsPath.cs +++ b/PdfSharpCore/Drawing/CoreGraphicsPath.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Drawing/GeometryHelper.cs b/PdfSharpCore/Drawing/GeometryHelper.cs index 4f8e30f7..9f5e8c7d 100644 --- a/PdfSharpCore/Drawing/GeometryHelper.cs +++ b/PdfSharpCore/Drawing/GeometryHelper.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -314,4 +314,4 @@ public static List BezierCurveFromArc(XPoint point1, XPoint point2, XSiz α / Calc.Deg2Rad, sweepAngle / Calc.Deg2Rad, pathStart, ref matrix); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/GraphicsStateStack.cs b/PdfSharpCore/Drawing/GraphicsStateStack.cs index 676b9c5b..1c88cd46 100644 --- a/PdfSharpCore/Drawing/GraphicsStateStack.cs +++ b/PdfSharpCore/Drawing/GraphicsStateStack.cs @@ -88,4 +88,4 @@ public InternalGraphicsState Current readonly Stack _stack = new Stack(); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/ImageSource.cs b/PdfSharpCore/Drawing/ImageSource.cs index 32d9e84c..aaccdbbe 100644 --- a/PdfSharpCore/Drawing/ImageSource.cs +++ b/PdfSharpCore/Drawing/ImageSource.cs @@ -1,4 +1,4 @@ - + using System; using System.Collections.Generic; using System.IO; diff --git a/PdfSharpCore/Drawing/XBaseGradientBrush.cs b/PdfSharpCore/Drawing/XBaseGradientBrush.cs index a58421bf..52bebf7e 100644 --- a/PdfSharpCore/Drawing/XBaseGradientBrush.cs +++ b/PdfSharpCore/Drawing/XBaseGradientBrush.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Ben Askren diff --git a/PdfSharpCore/Drawing/XColorResourceManager.cs b/PdfSharpCore/Drawing/XColorResourceManager.cs index b944acff..c3505b5f 100644 --- a/PdfSharpCore/Drawing/XColorResourceManager.cs +++ b/PdfSharpCore/Drawing/XColorResourceManager.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -348,4 +348,4 @@ public ColorResourceInfo(XKnownColor knownColor, XColor color, uint argb, string public string NameDE; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XConvert.cs b/PdfSharpCore/Drawing/XConvert.cs index a9bf992f..d11f61e5 100644 --- a/PdfSharpCore/Drawing/XConvert.cs +++ b/PdfSharpCore/Drawing/XConvert.cs @@ -35,4 +35,4 @@ namespace PdfSharpCore.Drawing internal static class XConvert { } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XFontWeights.cs b/PdfSharpCore/Drawing/XFontWeights.cs index 462671e7..55ca9653 100644 --- a/PdfSharpCore/Drawing/XFontWeights.cs +++ b/PdfSharpCore/Drawing/XFontWeights.cs @@ -306,4 +306,4 @@ public static XFontWeight UltraBlack } } #endif -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XForm.cs b/PdfSharpCore/Drawing/XForm.cs index 7dbcc270..362e0429 100644 --- a/PdfSharpCore/Drawing/XForm.cs +++ b/PdfSharpCore/Drawing/XForm.cs @@ -460,4 +460,4 @@ string IContentStream.GetFormName(XForm form) internal XGraphicsPdfRenderer PdfRenderer; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XGraphicsPath.cs b/PdfSharpCore/Drawing/XGraphicsPath.cs index aa3af3a7..c75ae3df 100644 --- a/PdfSharpCore/Drawing/XGraphicsPath.cs +++ b/PdfSharpCore/Drawing/XGraphicsPath.cs @@ -502,4 +502,4 @@ public XGraphicsPathInternals Internals /// internal CoreGraphicsPath _corePath; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XGraphicsPathInternals.cs b/PdfSharpCore/Drawing/XGraphicsPathInternals.cs index 7ebff46d..2922b44c 100644 --- a/PdfSharpCore/Drawing/XGraphicsPathInternals.cs +++ b/PdfSharpCore/Drawing/XGraphicsPathInternals.cs @@ -53,4 +53,4 @@ internal XGraphicsPathInternals(XGraphicsPath path) } XGraphicsPath _path; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XImageFormat.cs b/PdfSharpCore/Drawing/XImageFormat.cs index 284d04c2..2c1c4ee7 100644 --- a/PdfSharpCore/Drawing/XImageFormat.cs +++ b/PdfSharpCore/Drawing/XImageFormat.cs @@ -138,4 +138,4 @@ public static XImageFormat Icon // not GDI+ conform private static readonly XImageFormat _pdf = new XImageFormat(new Guid("{84570158-DBF0-4C6B-8368-62D6A3CA76E0}")); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XLinearGradientBrush.cs b/PdfSharpCore/Drawing/XLinearGradientBrush.cs index 28856f4f..186491cb 100644 --- a/PdfSharpCore/Drawing/XLinearGradientBrush.cs +++ b/PdfSharpCore/Drawing/XLinearGradientBrush.cs @@ -79,4 +79,4 @@ public XLinearGradientBrush(XRect rect, XColor color1, XColor color2, XLinearGra internal XRect _rect; internal XLinearGradientMode _linearGradientMode; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XMatrix.cs b/PdfSharpCore/Drawing/XMatrix.cs index 4605e9eb..9c37c6ee 100644 --- a/PdfSharpCore/Drawing/XMatrix.cs +++ b/PdfSharpCore/Drawing/XMatrix.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Drawing/XPen.cs b/PdfSharpCore/Drawing/XPen.cs index eef2a954..ee29f2a0 100644 --- a/PdfSharpCore/Drawing/XPen.cs +++ b/PdfSharpCore/Drawing/XPen.cs @@ -290,4 +290,4 @@ public bool Overprint bool _dirty = true; readonly bool _immutable; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XRadialGradientBrush.cs b/PdfSharpCore/Drawing/XRadialGradientBrush.cs index 168ba7ea..c1114810 100644 --- a/PdfSharpCore/Drawing/XRadialGradientBrush.cs +++ b/PdfSharpCore/Drawing/XRadialGradientBrush.cs @@ -66,4 +66,4 @@ public XRadialGradientBrush(XPoint center, double r1, double r2, XColor color1, internal XPoint _center1, _center2; internal double _r1, _r2; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XStringFormats.cs b/PdfSharpCore/Drawing/XStringFormats.cs index 4bf943f3..cdc2f1cd 100644 --- a/PdfSharpCore/Drawing/XStringFormats.cs +++ b/PdfSharpCore/Drawing/XStringFormats.cs @@ -224,4 +224,4 @@ public static XStringFormat BottomRight } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/XUnit.cs b/PdfSharpCore/Drawing/XUnit.cs index 92628a2f..e4a59f4b 100644 --- a/PdfSharpCore/Drawing/XUnit.cs +++ b/PdfSharpCore/Drawing/XUnit.cs @@ -590,4 +590,4 @@ string DebuggerDisplay } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Drawing/enums/XGdiFontStyle.cs b/PdfSharpCore/Drawing/enums/XGdiFontStyle.cs index ad458e46..34a33f85 100644 --- a/PdfSharpCore/Drawing/enums/XGdiFontStyle.cs +++ b/PdfSharpCore/Drawing/enums/XGdiFontStyle.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Exceptions/PositionNotFoundException.cs b/PdfSharpCore/Exceptions/PositionNotFoundException.cs index 578d2b94..a5e3d4ea 100644 --- a/PdfSharpCore/Exceptions/PositionNotFoundException.cs +++ b/PdfSharpCore/Exceptions/PositionNotFoundException.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf; +using PdfSharpCore.Pdf; namespace PdfSharpCore.Exceptions { diff --git a/PdfSharpCore/Fonts.OpenType/FontDescriptor.cs b/PdfSharpCore/Fonts.OpenType/FontDescriptor.cs index bfaf9a5a..f5758624 100644 --- a/PdfSharpCore/Fonts.OpenType/FontDescriptor.cs +++ b/PdfSharpCore/Fonts.OpenType/FontDescriptor.cs @@ -383,4 +383,4 @@ internal static string ComputeKey(string name) return key; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Fonts.OpenType/GlyphDataTable.cs b/PdfSharpCore/Fonts.OpenType/GlyphDataTable.cs index fa1b7004d624d83d219c337beabfc2430d9ee6a3..4bb9012333c6dec125089e1cdcf4f9cb1c6257c6 100644 GIT binary patch literal 6517 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 b>M${%sPa0?+w3)P$Jd*8^E!)wzlQ$;m+EO! diff --git a/PdfSharpCore/Fonts.OpenType/IndexToLocationTable.cs b/PdfSharpCore/Fonts.OpenType/IndexToLocationTable.cs index 1e3ac5c5a6f0b88e30bd70bb0aed16300b631b02..d6f8c14334f3df9d5a611736d05f34b2794bcce8 100644 GIT binary patch literal 5410 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 V%joYbGFa0m7a5;{`t*-S{|{dGmMQ=M literal 85530 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 diff --git a/PdfSharpCore/Fonts.OpenType/OpenTypeFontface.cs b/PdfSharpCore/Fonts.OpenType/OpenTypeFontface.cs index 33778b3242b55ae763bbd4a7d498a9568b8f914e..d89118f13fcb0800a283fdf24a0e3d386a016402 100644 GIT binary patch literal 24491 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 AJOBUy literal 50424 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 IZGCP13#&u1C;$Ke literal 8508 zcmeI1TW?!M5Xbi!iSKYoCFF|MEwu2^n`CmUMQ(DO2A)tZj%!HbD7G6y1s@&w|8_jy zbB-@@EvHY&I@xpfGME3%&dhH9{pUfr4z17*ozM-JAq#t9Eo_8dcpr{5a;2WfdTM&A zVJEDIrrypq`&gsQxYhTW)?TZ<(%)`45xt&%9nov6*C>7&z6ekB^A?(e&=()p_QH$Y zNTyZ$8f%I2QIu*cwr%zJdT+C^DhgMU<60csqSx2zillg`_Pg*@zwf03Z{LO=)Yl3Z zn%~j_2O;A@D3M>R^;7Y9TCH}#!JpI+>N zQ?jK~_7>Zi4js+HV&(&UAw6R)VS$a?ddC)6#IK-qJwWh z4IS{ZuBi4khL5?5tuL=^wMEfL{ z`8s}oK9VTe&Mb?^;2{<-*p1A+lBCx;t?#mRb;LDsZz?XYi`IVFRhDXoLq+69?5V4d zc-GL!yHHmaTi3&GuEi0?SE9`hH42^Ga1gVZ(P(Jij=q1<8fX*icjDJin!h7j_}+T> zIr3N+HTdm{Uy`mKwl%t?`S4~wD_7NXpl{wc)%W9&?~YcJO_{%~r#Y0kss2n~rfE?+ zC>viS+}2k^^xqC;uZea&(nF7Y#M+4T$=@dTMwHz0`kq!d#IG(&2U^V+NFJ!&)4YAH zGBm&wsdqGYM;J9?yQy&`0llhbFlO_>>)mh!n<3|xehD$xvKBGHCXJzf$gryKJ!t}; zO|1qk=4=T~GzWq%LZFnIEAA*x+G|;uqK$%*})H-0@BjXBL*=%RDEc2J*W@ZQP5E7gSv$ zF5Q!v^1%;(AeUPfqPjZL8suw^c;YKa zPc=rCx|O%N)L`R$ix_$Dd{~udV^OODkgOB_6n{f4(@0A-gVlqcNiD-$t?d;C)@kWS zZGik|^4yg<^;(gA-^7)UNDYvL0jMNHUD*t zvCqZJB4U}If8#&gA`p>{((L*8#A>XaPr~nt;lwUm{qzn_tlZTO;>6q%ulZM%HOq9@ zaJQ5mkI~R0A6i~YW~%GS6qdako{QsS@xPVE#F0+SyTm?DgjDv|vfU)hr`@+mTqydT zS=lt6&1;?r}KRXFmXik5-%H#TFm4F+4fxeQdOkLW7-pi${t|(HXH2* zDy7-pxQOSw{`sh}Z2h^Lq|!^ZRuKcdV<1eZv8h-G${x(M8$0fVh(W}FtB9Wa4Eu+h zk5sVJzF`cV(6(Ml;ZeWSi-%1c@JTF>8lf2r2u zu2b`N+0ocCXZa2j)GdnKZ?r0(3MOT!@xEpI?rOA;-QfBu0w2X{c!Sr-DR0iI-ic)% z3%zPicyg0UeZf8YB%kt3vRLhFmAl=}&07g)I^~+48$-D(W2ZH@0skGbQ-N!=rXGC6 z{u|+5>h0_uGB2L_^PJTyc2=2hJ(a$Bj7wE+6a8vDJ$Ut3*0DN53eIiq<4>Vn&c{~m zP3OVQ7`yOO`Q)?QT|5@!kdKSTp%OEFUwAA>pJKdB_L*$Q=`pc*Lir#(sWy|xe@;(d zo>$$cC*62!-${3@Ph zpWYd*rqe6hZ(e$N+^V{5blg39T6 public const string VMtx = "vmtx"; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Fonts/AdobeGlyphList20.cs b/PdfSharpCore/Fonts/AdobeGlyphList20.cs index 2141efd4..66834542 100644 --- a/PdfSharpCore/Fonts/AdobeGlyphList20.cs +++ b/PdfSharpCore/Fonts/AdobeGlyphList20.cs @@ -4322,4 +4322,4 @@ namespace PdfSharpCore.Fonts } } -#endif \ No newline at end of file +#endif diff --git a/PdfSharpCore/Fonts/FontResolverInfo.cs b/PdfSharpCore/Fonts/FontResolverInfo.cs index f4117f9b..f61a7be0 100644 --- a/PdfSharpCore/Fonts/FontResolverInfo.cs +++ b/PdfSharpCore/Fonts/FontResolverInfo.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Fonts/FontResolvingOptions.cs b/PdfSharpCore/Fonts/FontResolvingOptions.cs index fe110d73..69dc9d1f 100644 --- a/PdfSharpCore/Fonts/FontResolvingOptions.cs +++ b/PdfSharpCore/Fonts/FontResolvingOptions.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Fonts/GlobalFontSettings.cs b/PdfSharpCore/Fonts/GlobalFontSettings.cs index 2cabbf29..7a7582b7 100644 --- a/PdfSharpCore/Fonts/GlobalFontSettings.cs +++ b/PdfSharpCore/Fonts/GlobalFontSettings.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -120,4 +120,4 @@ public static PdfFontEncoding DefaultFontEncoding static PdfFontEncoding _fontEncoding; static bool _fontEncodingInitialized; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Fonts/IFontResolver.cs b/PdfSharpCore/Fonts/IFontResolver.cs index 100d1072..76fbaf61 100644 --- a/PdfSharpCore/Fonts/IFontResolver.cs +++ b/PdfSharpCore/Fonts/IFontResolver.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange @@ -53,4 +53,4 @@ public interface IFontResolver string DefaultFontName { get; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Fonts/PlatformFontResolverInfo.cs b/PdfSharpCore/Fonts/PlatformFontResolverInfo.cs index 4bf1d858..2bc958c1 100644 --- a/PdfSharpCore/Fonts/PlatformFontResolverInfo.cs +++ b/PdfSharpCore/Fonts/PlatformFontResolverInfo.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Internal/DoubleUtil.cs b/PdfSharpCore/Internal/DoubleUtil.cs index ed961b38..e4e3e6d1 100644 --- a/PdfSharpCore/Internal/DoubleUtil.cs +++ b/PdfSharpCore/Internal/DoubleUtil.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Microsoft diff --git a/PdfSharpCore/Internal/FontFamilyModel.cs b/PdfSharpCore/Internal/FontFamilyModel.cs index 02d326c9..ddfe8c8c 100644 --- a/PdfSharpCore/Internal/FontFamilyModel.cs +++ b/PdfSharpCore/Internal/FontFamilyModel.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using PdfSharpCore.Drawing; namespace PdfSharpCore.Internal diff --git a/PdfSharpCore/Internal/TokenizerHelper.cs b/PdfSharpCore/Internal/TokenizerHelper.cs index 35f3b63d..a9cce4ed 100644 --- a/PdfSharpCore/Internal/TokenizerHelper.cs +++ b/PdfSharpCore/Internal/TokenizerHelper.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Microsoft @@ -252,4 +252,4 @@ public bool FoundSeparator string _str; int _strLen; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.AcroForms/PdfAcroForm.cs b/PdfSharpCore/Pdf.AcroForms/PdfAcroForm.cs index 20888f49..96350884 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfAcroForm.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfAcroForm.cs @@ -74,7 +74,7 @@ public sealed class Keys : KeysBase // ReSharper disable InconsistentNaming /// - /// (Required) An array of references to the document’s root fields (those with + /// (Required) An array of references to the document�s root fields (those with /// no ancestors in the field hierarchy). /// [KeyInfo(KeyType.Array | KeyType.Required, typeof(PdfAcroField.PdfAcroFieldCollection))] diff --git a/PdfSharpCore/Pdf.AcroForms/PdfCheckBoxField.cs b/PdfSharpCore/Pdf.AcroForms/PdfCheckBoxField.cs index d2d0146d..dbf1139f 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfCheckBoxField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfCheckBoxField.cs @@ -68,7 +68,7 @@ public bool Checked //R080317 // TODO if (Fields.Elements.Items.Length == 2) { string value = ((PdfDictionary)(((PdfReference)(Fields.Elements.Items[0])).Value)).Elements.GetString(Keys.V); - //bool bReturn = value.Length != 0 && value != UncheckedValue; //R081114 (3Std.!!) auch auf Nein prüfen; //TODO woher kommt der Wert? + //bool bReturn = value.Length != 0 && value != UncheckedValue; //R081114 (3Std.!!) auch auf Nein pr�fen; //TODO woher kommt der Wert? bool bReturn = value.Length != 0 && value == CheckedName; return bReturn; } @@ -217,7 +217,7 @@ public bool Checked if (Fields.Elements.Items.Length == 2) { string value = ((PdfDictionary)(((PdfReference)(Fields.Elements.Items[0])).Value)).Elements.GetString(Keys.V); - bool bReturn = value.Length != 0 && value != "/Off" && value != "/Nein"; //R081114 (3Std.!!) auch auf Nein prüfen; //TODO woher kommt der Wert? + bool bReturn = value.Length != 0 && value != "/Off" && value != "/Nein"; //R081114 (3Std.!!) auch auf Nein pr�fen; //TODO woher kommt der Wert? return bReturn; } else diff --git a/PdfSharpCore/Pdf.AcroForms/PdfChoiceField.cs b/PdfSharpCore/Pdf.AcroForms/PdfChoiceField.cs index 1896733e..6aef6c3d 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfChoiceField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfChoiceField.cs @@ -64,7 +64,7 @@ protected int IndexInOptArray(string value) opt2 = Elements[Keys.Opt] as PdfArray; else if (Elements[Keys.Opt] is Advanced.PdfReference) { - //falls das Array nicht direkt am Element hängt, + //falls das Array nicht direkt am Element h�ngt, //das Array aus dem referenzierten Element holen opt2 = ((Advanced.PdfReference)Elements[Keys.Opt]).Value as PdfArray; } @@ -134,7 +134,7 @@ protected string ValueInOptArray(int index) /// (Required; inheritable) An array of options to be presented to the user. Each element of /// the array is either a text string representing one of the available options or a two-element /// array consisting of a text string together with a default appearance string for constructing - /// the item’s appearance dynamically at viewing time. + /// the item�s appearance dynamically at viewing time. /// [KeyInfo(KeyType.Array | KeyType.Optional)] public const string Opt = "/Opt"; diff --git a/PdfSharpCore/Pdf.AcroForms/PdfComboBoxField.cs b/PdfSharpCore/Pdf.AcroForms/PdfComboBoxField.cs index 0fc51c64..5b842505 100644 --- a/PdfSharpCore/Pdf.AcroForms/PdfComboBoxField.cs +++ b/PdfSharpCore/Pdf.AcroForms/PdfComboBoxField.cs @@ -64,7 +64,7 @@ public int SelectedIndex { string key = ValueInOptArray(value); Elements.SetString(Keys.V, key); - Elements.SetInteger("/I", value); //R080304 !!!!!!! sonst reagiert die Combobox überhaupt nicht !!!!! + Elements.SetInteger("/I", value); //R080304 !!!!!!! sonst reagiert die Combobox �berhaupt nicht !!!!! } } } @@ -89,7 +89,7 @@ public override PdfItem Value //R080304 //R080317 noch nicht rund try { - //anhängen + //anh�ngen ((PdfArray)(((PdfItem[])(Elements.Values))[2])).Elements.Add(Value); SelectedIndex = SelectedIndex; } diff --git a/PdfSharpCore/Pdf.AcroForms/enums/PdfAcroFieldFlags.cs b/PdfSharpCore/Pdf.AcroForms/enums/PdfAcroFieldFlags.cs index aac397cc..d2f7c4c3 100644 --- a/PdfSharpCore/Pdf.AcroForms/enums/PdfAcroFieldFlags.cs +++ b/PdfSharpCore/Pdf.AcroForms/enums/PdfAcroFieldFlags.cs @@ -80,7 +80,7 @@ public enum PdfAcroFieldFlags // ----- Specific to text fields -------------------------------------------------------------- /// - /// If set, the field may contain multiple lines of text; if clear, the field’s text + /// If set, the field may contain multiple lines of text; if clear, the field�s text /// is restricted to a single line. /// Multiline = 1 << (13 - 1), @@ -129,7 +129,7 @@ public enum PdfAcroFieldFlags Edit = 1 << (19 - 1), /// - /// If set, the field’s option items should be sorted alphabetically. This flag is + /// If set, the field�s option items should be sorted alphabetically. This flag is /// intended for use by form authoring tools, not by PDF viewer applications; /// viewers should simply display the options in the order in which they occur /// in the Opt array. @@ -137,7 +137,7 @@ public enum PdfAcroFieldFlags Sort = 1 << (20 - 1), /// - /// (PDF 1.4) If set, more than one of the field’s option items may be selected + /// (PDF 1.4) If set, more than one of the field�s option items may be selected /// simultaneously; if clear, no more than one item at a time may be selected. /// MultiSelect = 1 << (22 - 1), diff --git a/PdfSharpCore/Pdf.Actions/enums/PdfNamedActionNames.cs b/PdfSharpCore/Pdf.Actions/enums/PdfNamedActionNames.cs index 83de7c0e..ef917901 100644 --- a/PdfSharpCore/Pdf.Actions/enums/PdfNamedActionNames.cs +++ b/PdfSharpCore/Pdf.Actions/enums/PdfNamedActionNames.cs @@ -54,4 +54,4 @@ public enum PdfNamedActionNames /// LastPage } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/IContentStream.cs b/PdfSharpCore/Pdf.Advanced/IContentStream.cs index ca8b2863..e5540b3d 100644 --- a/PdfSharpCore/Pdf.Advanced/IContentStream.cs +++ b/PdfSharpCore/Pdf.Advanced/IContentStream.cs @@ -45,4 +45,4 @@ internal interface IContentStream string GetFormName(XForm form); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/PdfCIDFont.cs b/PdfSharpCore/Pdf.Advanced/PdfCIDFont.cs index ded33b49e271a3ab6dd4a2ded9e5a13ebe1f1819..8911a8859ba43414862cc41c968efaabd5750dc6 100644 GIT binary patch literal 9879 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 E1$pp%?f?J) diff --git a/PdfSharpCore/Pdf.Advanced/PdfCrossReferenceTable.cs b/PdfSharpCore/Pdf.Advanced/PdfCrossReferenceTable.cs index 855157c0..8dd63353 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfCrossReferenceTable.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfCrossReferenceTable.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Advanced/PdfEmbeddedFile.cs b/PdfSharpCore/Pdf.Advanced/PdfEmbeddedFile.cs index 20dcb243..5a1db453 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfEmbeddedFile.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfEmbeddedFile.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Pdf.Advanced +namespace PdfSharpCore.Pdf.Advanced { /// /// Represent a file stream embedded in the PDF document diff --git a/PdfSharpCore/Pdf.Advanced/PdfExtGState.cs b/PdfSharpCore/Pdf.Advanced/PdfExtGState.cs index 5ca96ee2..49fddf62 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfExtGState.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfExtGState.cs @@ -226,7 +226,7 @@ internal sealed class Keys : KeysBase public const string Type = "/Type"; /// - /// (Optional; PDF 1.3) The line width (see “Line Width” on page 185). + /// (Optional; PDF 1.3) The line width (see �Line Width� on page 185). /// [KeyInfo(KeyType.Real | KeyType.Optional)] public const string LW = "/LW"; @@ -367,7 +367,7 @@ internal sealed class Keys : KeysBase public const string ca = "/ca"; /// - /// (Optional; PDF 1.4) The alpha source flag (“alpha is shape”), specifying whether + /// (Optional; PDF 1.4) The alpha source flag (�alpha is shape�), specifying whether /// the current soft mask and alpha constant are to be interpreted as shape values (true) /// or opacity values (false). /// diff --git a/PdfSharpCore/Pdf.Advanced/PdfExtGStateTable.cs b/PdfSharpCore/Pdf.Advanced/PdfExtGStateTable.cs index f193f67d..ceec093c 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfExtGStateTable.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfExtGStateTable.cs @@ -92,4 +92,4 @@ public PdfExtGState GetExtGStateNonStroke(double alpha, bool overprint) readonly Dictionary _strokeAlphaValues = new Dictionary(); readonly Dictionary _nonStrokeStates = new Dictionary(); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/PdfFileSpecification.cs b/PdfSharpCore/Pdf.Advanced/PdfFileSpecification.cs index 056aa399..4762b737 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfFileSpecification.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfFileSpecification.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Pdf.Advanced +namespace PdfSharpCore.Pdf.Advanced { /// /// Represent a file stream embedded in the PDF document diff --git a/PdfSharpCore/Pdf.Advanced/PdfFont.cs b/PdfSharpCore/Pdf.Advanced/PdfFont.cs index 19fb30fb..7a6fc291 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfFont.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfFont.cs @@ -144,7 +144,7 @@ public class Keys : KeysBase /// /// (Required except for the standard 14 fonts; must be an indirect reference) - /// A font descriptor describing the font’s metrics other than its glyph widths. + /// A font descriptor describing the font�s metrics other than its glyph widths. /// Note: For the standard 14 fonts, the entries FirstChar, LastChar, Widths, and /// FontDescriptor must either all be present or all be absent. Ordinarily, they are /// absent; specifying them enables a standard font to be overridden. @@ -153,4 +153,4 @@ public class Keys : KeysBase public const string FontDescriptor = "/FontDescriptor"; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/PdfFontDescriptor.cs b/PdfSharpCore/Pdf.Advanced/PdfFontDescriptor.cs index 3c03ba8b..64e1852d 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfFontDescriptor.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfFontDescriptor.cs @@ -208,7 +208,7 @@ public sealed class Keys : KeysBase public const string Flags = "/Flags"; /// - /// (Required, except for Type 3 fonts) A rectangle (see Section 3.8.4, “Rectangles”), + /// (Required, except for Type 3 fonts) A rectangle (see Section 3.8.4, �Rectangles�), /// expressed in the glyph coordinate system, specifying the font bounding box. This /// is the smallest rectangle enclosing the shape that would result if all of the /// glyphs of the font were placed with their origins coincident and then filled. @@ -218,8 +218,8 @@ public sealed class Keys : KeysBase /// /// (Required) The angle, expressed in degrees counterclockwise from the vertical, of - /// the dominant vertical strokes of the font. (For example, the 9-o’clock position is 90 - /// degrees, and the 3-o’clock position is –90 degrees.) The value is negative for fonts + /// the dominant vertical strokes of the font. (For example, the 9-o�clock position is 90 + /// degrees, and the 3-o�clock position is �90 degrees.) The value is negative for fonts /// that slope to the right, as almost all italic fonts do. /// [KeyInfo(KeyType.Real | KeyType.Required)] @@ -254,7 +254,7 @@ public sealed class Keys : KeysBase public const string CapHeight = "/CapHeight"; /// - /// (Optional) The font’s x height: the vertical coordinate of the top of flat nonascending + /// (Optional) The font�s x height: the vertical coordinate of the top of flat nonascending /// lowercase letters (like the letter x), measured from the baseline, in fonts that have /// Latin characters. Default value: 0. /// @@ -289,7 +289,7 @@ public sealed class Keys : KeysBase /// /// (Optional) The width to use for character codes whose widths are not specified in a - /// font dictionary’s Widths array. This has a predictable effect only if all such codes + /// font dictionary�s Widths array. This has a predictable effect only if all such codes /// map to glyphs whose actual widths are the same as the value of the MissingWidth entry. /// Default value: 0. /// @@ -317,7 +317,7 @@ public sealed class Keys : KeysBase /// /// (Optional; meaningful only in Type 1 fonts; PDF 1.1) A string listing the character - /// names defined in a font subset. The names in this string must be in PDF syntax—that is, + /// names defined in a font subset. The names in this string must be in PDF syntax�that is, /// each name preceded by a slash (/). The names can appear in any order. The name .notdef /// should be omitted; it is assumed to exist in the font subset. If this entry is absent, /// the only indication of a font subset is the subset tag in the FontName entry. diff --git a/PdfSharpCore/Pdf.Advanced/PdfGroupAttributes.cs b/PdfSharpCore/Pdf.Advanced/PdfGroupAttributes.cs index c2c5aaa3..24f9ea8b 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfGroupAttributes.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfGroupAttributes.cs @@ -55,7 +55,7 @@ public class Keys : KeysBase /// /// (Required) The group subtype, which identifies the type of group whose /// attributes this dictionary describes and determines the format and meaning - /// of the dictionary’s remaining entries. The only group subtype defined in + /// of the dictionary�s remaining entries. The only group subtype defined in /// PDF 1.4 is Transparency. Other group subtypes may be added in the future. /// [KeyInfo(KeyType.Name | KeyType.Required)] @@ -79,4 +79,4 @@ internal override DictionaryMeta Meta get { return Keys.Meta; } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/PdfImage.FaxEncode.cs b/PdfSharpCore/Pdf.Advanced/PdfImage.FaxEncode.cs index 86fc4bf8..cdcae91c 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfImage.FaxEncode.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfImage.FaxEncode.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Advanced/PdfPageInterals.cs b/PdfSharpCore/Pdf.Advanced/PdfPageInterals.cs index 07653630..8c613f24 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfPageInterals.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfPageInterals.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Advanced/PdfSoftMask.cs b/PdfSharpCore/Pdf.Advanced/PdfSoftMask.cs index d8f66c2e..7bfb414f 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfSoftMask.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfSoftMask.cs @@ -59,8 +59,8 @@ public class Keys : KeysBase /// /// (Required) A subtype specifying the method to be used in deriving the mask values /// from the transparency group specified by the G entry: - /// Alpha: Use the group’s computed alpha, disregarding its color. - /// Luminosity: Convert the group’s computed color to a single-component luminosity value. + /// Alpha: Use the group�s computed alpha, disregarding its color. + /// Luminosity: Convert the group�s computed color to a single-component luminosity value. /// [KeyInfo(KeyType.Name | KeyType.Required)] public const string S = "/S"; @@ -80,7 +80,7 @@ public class Keys : KeysBase /// This entry is consulted only if the subtype S is Luminosity. The array consists of /// n numbers, where n is the number of components in the color space specified /// by the CS entry in the group attributes dictionary. - /// Default value: the color space’s initial value, representing black. + /// Default value: the color space�s initial value, representing black. /// [KeyInfo(KeyType.Array | KeyType.Optional)] public const string BC = "/BC"; @@ -99,4 +99,4 @@ public class Keys : KeysBase public const string TR = "/TR"; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Advanced/PdfTilingPattern.cs b/PdfSharpCore/Pdf.Advanced/PdfTilingPattern.cs index 0d72d915..3b848aae 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfTilingPattern.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfTilingPattern.cs @@ -79,10 +79,10 @@ public PdfTilingPattern(PdfDocument document) /// /// (Required) A code that determines how the color of the pattern cell is to be specified: - /// 1: Colored tiling pattern. The pattern’s content stream specifies the colors used to + /// 1: Colored tiling pattern. The pattern�s content stream specifies the colors used to /// paint the pattern cell. When the content stream begins execution, the current color - /// is the one that was initially in effect in the pattern’s parent content stream. - /// 2: Uncolored tiling pattern. The pattern’s content stream does not specify any color + /// is the one that was initially in effect in the pattern�s parent content stream. + /// 2: Uncolored tiling pattern. The pattern�s content stream does not specify any color /// information. Instead, the entire pattern cell is painted with a separately specified color /// each time the pattern is used. Essentially, the content stream describes a stencil /// through which the current color is to be poured. The content stream must not invoke @@ -96,7 +96,7 @@ public PdfTilingPattern(PdfDocument document) /// /// (Required) A code that controls adjustments to the spacing of tiles relative to the device /// pixel grid: - /// 1: Constant spacing. Pattern cells are spaced consistently—that is, by a multiple of a + /// 1: Constant spacing. Pattern cells are spaced consistently�that is, by a multiple of a /// device pixel. To achieve this, the application may need to distort the pattern cell slightly /// by making small adjustments to XStep, YStep, and the transformation matrix. The amount /// of distortion does not exceed 1 device pixel. @@ -113,7 +113,7 @@ public PdfTilingPattern(PdfDocument document) /// /// (Required) An array of four numbers in the pattern coordinate system giving the /// coordinates of the left, bottom, right, and top edges, respectively, of the pattern - /// cell’s bounding box. These boundaries are used to clip the pattern cell. + /// cell�s bounding box. These boundaries are used to clip the pattern cell. /// [KeyInfo(KeyType.Rectangle | KeyType.Optional)] public const string BBox = "/BBox"; @@ -136,7 +136,7 @@ public PdfTilingPattern(PdfDocument document) /// /// (Required) A resource dictionary containing all of the named resources required by - /// the pattern’s content stream (see Section 3.7.2, “Resource Dictionaries”). + /// the pattern�s content stream (see Section 3.7.2, �Resource Dictionaries�). /// [KeyInfo(KeyType.Dictionary | KeyType.Required)] public new const string Resources = "/Resources"; diff --git a/PdfSharpCore/Pdf.Advanced/PdfTransparencyGroupAttributes.cs b/PdfSharpCore/Pdf.Advanced/PdfTransparencyGroupAttributes.cs index 66b95ed5..17867150 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfTransparencyGroupAttributes.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfTransparencyGroupAttributes.cs @@ -48,12 +48,12 @@ internal PdfTransparencyGroupAttributes(PdfDocument thisDocument) /// /// (Sometimes required, as discussed below) /// The group color space, which is used for the following purposes: - /// • As the color space into which colors are converted when painted into the group - /// • As the blending color space in which objects are composited within the group - /// • As the color space of the group as a whole when it in turn is painted as an object onto its backdrop + /// � As the color space into which colors are converted when painted into the group + /// � As the blending color space in which objects are composited within the group + /// � As the color space of the group as a whole when it in turn is painted as an object onto its backdrop /// The group color space may be any device or CIE-based color space that /// treats its components as independent additive or subtractive values in the - /// range 0.0 to 1.0, subject to the restrictions described in Section 7.2.3, “Blending Color Space.” + /// range 0.0 to 1.0, subject to the restrictions described in Section 7.2.3, �Blending Color Space.� /// These restrictions exclude Lab and lightness-chromaticity ICCBased color spaces, /// as well as the special color spaces Pattern, Indexed, Separation, and DeviceN. /// Device color spaces are subject to remapping according to the DefaultGray, @@ -62,7 +62,7 @@ internal PdfTransparencyGroupAttributes(PdfDocument thisDocument) /// Ordinarily, the CS entry is allowed only for isolated transparency groups /// (those for which I, below, is true), and even then it is optional. However, /// this entry is required in the group attributes dictionary for any transparency - /// group XObject that has no parent group or page from which to inherit — in + /// group XObject that has no parent group or page from which to inherit � in /// particular, one that is the value of the G entry in a soft-mask dictionary of /// subtype Luminosity. /// In addition, it is always permissible to specify CS in the group attributes @@ -74,7 +74,7 @@ internal PdfTransparencyGroupAttributes(PdfDocument thisDocument) /// and the color space is inherited from the actual backdrop with which the /// page is composited. /// Default value: the color space of the parent group or page into which this - /// transparency group is painted. (The parent’s color space in turn can be + /// transparency group is painted. (The parent�s color space in turn can be /// either explicitly specified or inherited.) /// [KeyInfo(KeyType.NameOrArray | KeyType.Optional)] @@ -84,7 +84,7 @@ internal PdfTransparencyGroupAttributes(PdfDocument thisDocument) /// (Optional) A flag specifying whether the transparency group is isolated. /// If this flag is true, objects within the group are composited against a fully /// transparent initial backdrop; if false, they are composited against the - /// group’s backdrop. + /// group�s backdrop. /// Default value: false. /// In the group attributes dictionary for a page, the interpretation of this /// entry is slightly altered. In the normal case in which the page is imposed @@ -101,7 +101,7 @@ internal PdfTransparencyGroupAttributes(PdfDocument thisDocument) /// (Optional) A flag specifying whether the transparency group is a knockout /// group. If this flag is false, later objects within the group are composited /// with earlier ones with which they overlap; if true, they are composited with - /// the group’s initial backdrop and overwrite (“knock out”) any earlier + /// the group�s initial backdrop and overwrite (�knock out�) any earlier /// overlapping objects. /// Default value: false. /// diff --git a/PdfSharpCore/Pdf.Advanced/PdfType1Font.cs b/PdfSharpCore/Pdf.Advanced/PdfType1Font.cs index c49eac34..a410d3ab 100644 --- a/PdfSharpCore/Pdf.Advanced/PdfType1Font.cs +++ b/PdfSharpCore/Pdf.Advanced/PdfType1Font.cs @@ -97,7 +97,7 @@ public PdfType1Font(PdfDocument document) /// /// (Required) The PostScript name of the font. For Type 1 fonts, this is usually /// the value of the FontName entry in the font program; for more information. - /// The Post-Script name of the font can be used to find the font’s definition in + /// The Post-Script name of the font can be used to find the font�s definition in /// the consumer application or its environment. It is also the name that is used when /// printing to a PostScript output device. /// @@ -106,14 +106,14 @@ public PdfType1Font(PdfDocument document) /// /// (Required except for the standard 14 fonts) The first character code defined - /// in the font’s Widths array. + /// in the font�s Widths array. /// [KeyInfo(KeyType.Integer)] public const string FirstChar = "/FirstChar"; /// /// (Required except for the standard 14 fonts) The last character code defined - /// in the font’s Widths array. + /// in the font�s Widths array. /// [KeyInfo(KeyType.Integer)] public const string LastChar = "/LastChar"; @@ -132,7 +132,7 @@ public PdfType1Font(PdfDocument document) /// /// (Required except for the standard 14 fonts; must be an indirect reference) - /// A font descriptor describing the font’s metrics other than its glyph widths. + /// A font descriptor describing the font�s metrics other than its glyph widths. /// Note: For the standard 14 fonts, the entries FirstChar, LastChar, Widths, and /// FontDescriptor must either all be present or all be absent. Ordinarily, they are /// absent; specifying them enables a standard font to be overridden. @@ -141,10 +141,10 @@ public PdfType1Font(PdfDocument document) public new const string FontDescriptor = "/FontDescriptor"; /// - /// (Optional) A specification of the font’s character encoding if different from its + /// (Optional) A specification of the font�s character encoding if different from its /// built-in encoding. The value of Encoding is either the name of a predefined /// encoding (MacRomanEncoding, MacExpertEncoding, or WinAnsiEncoding, as described in - /// Appendix D) or an encoding dictionary that specifies differences from the font’s + /// Appendix D) or an encoding dictionary that specifies differences from the font�s /// built-in encoding or from a specified predefined encoding. /// [KeyInfo(KeyType.Name | KeyType.Dictionary)] diff --git a/PdfSharpCore/Pdf.Annotations/PdfAnnotation.cs b/PdfSharpCore/Pdf.Annotations/PdfAnnotation.cs index e5e470b9..3721a00a 100644 --- a/PdfSharpCore/Pdf.Annotations/PdfAnnotation.cs +++ b/PdfSharpCore/Pdf.Annotations/PdfAnnotation.cs @@ -106,7 +106,7 @@ public PdfRectangle Rectangle } /// - /// Gets or sets the text label to be displayed in the title bar of the annotation’s + /// Gets or sets the text label to be displayed in the title bar of the annotation�s /// pop-up window when open and active. By convention, this entry identifies /// the user who added the annotation. /// @@ -136,7 +136,7 @@ public string Subject /// /// Gets or sets the text to be displayed for the annotation or, if this type of - /// annotation does not display text, an alternate description of the annotation’s + /// annotation does not display text, an alternate description of the annotation�s /// contents in human-readable form. /// public string Contents @@ -234,9 +234,9 @@ public class Keys : KeysBase /// /// (Optional) Text to be displayed for the annotation or, if this type of annotation - /// does not display text, an alternate description of the annotation’s contents + /// does not display text, an alternate description of the annotation�s contents /// in human-readable form. In either case, this text is useful when - /// extracting the document’s contents in support of accessibility to users with + /// extracting the document�s contents in support of accessibility to users with /// disabilities or for other purposes. /// [KeyInfo(KeyType.TextString | KeyType.Optional)] @@ -268,7 +268,7 @@ public class Keys : KeysBase /// /// (Optional; PDF 1.2) A border style dictionary specifying the characteristics of - /// the annotation’s border. + /// the annotation�s border. /// [KeyInfo("1.2", KeyType.Dictionary | KeyType.Optional)] public const string BS = "/BS"; @@ -283,14 +283,14 @@ public class Keys : KeysBase /// /// (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) - /// The annotation’s appearance state, which selects the applicable appearance stream from + /// The annotation�s appearance state, which selects the applicable appearance stream from /// an appearance subdictionary. /// [KeyInfo("1.2", KeyType.Dictionary | KeyType.Optional)] public const string AS = "/AS"; /// - /// (Optional) An array specifying the characteristics of the annotation’s border. + /// (Optional) An array specifying the characteristics of the annotation�s border. /// The border is specified as a rounded rectangle. /// In PDF 1.0, the array consists of three numbers defining the horizontal corner /// radius, vertical corner radius, and border width, all in default user space units. @@ -311,9 +311,9 @@ public class Keys : KeysBase /// (Optional; PDF 1.1) An array of three numbers in the range 0.0 to 1.0, representing /// the components of a color in the DeviceRGB color space. This color is used for the /// following purposes: - /// • The background of the annotation’s icon when closed - /// • The title bar of the annotation’s pop-up window - /// • The border of a link annotation + /// � The background of the annotation�s icon when closed + /// � The title bar of the annotation�s pop-up window + /// � The border of a link annotation /// [KeyInfo("1.1", KeyType.Array | KeyType.Optional)] public const string C = "/C"; @@ -333,7 +333,7 @@ public class Keys : KeysBase // ----- Excerpt of entries specific to markup annotations ---------------------------------- /// - /// (Optional; PDF 1.1) The text label to be displayed in the title bar of the annotation’s + /// (Optional; PDF 1.1) The text label to be displayed in the title bar of the annotation�s /// pop-up window when open and active. By convention, this entry identifies /// the user who added the annotation. /// @@ -354,8 +354,8 @@ public class Keys : KeysBase /// the annotation is opened. /// The specified value is not used if the annotation has an appearance stream; in that /// case, the appearance stream must specify any transparency. (However, if the viewer - /// regenerates the annotation’s appearance stream, it may incorporate the CA value - /// into the stream’s content.) + /// regenerates the annotation�s appearance stream, it may incorporate the CA value + /// into the stream�s content.) /// The implicit blend mode is Normal. /// Default value: 1.0. /// diff --git a/PdfSharpCore/Pdf.Annotations/PdfFileAttachmentAnnotation.cs b/PdfSharpCore/Pdf.Annotations/PdfFileAttachmentAnnotation.cs index 34c995e2..c7725fab 100644 --- a/PdfSharpCore/Pdf.Annotations/PdfFileAttachmentAnnotation.cs +++ b/PdfSharpCore/Pdf.Annotations/PdfFileAttachmentAnnotation.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.Advanced; +using PdfSharpCore.Pdf.Advanced; using System; namespace PdfSharpCore.Pdf.Annotations diff --git a/PdfSharpCore/Pdf.Annotations/PdfLinkAnnotation.cs b/PdfSharpCore/Pdf.Annotations/PdfLinkAnnotation.cs index 39199273..b5b975d0 100644 --- a/PdfSharpCore/Pdf.Annotations/PdfLinkAnnotation.cs +++ b/PdfSharpCore/Pdf.Annotations/PdfLinkAnnotation.cs @@ -180,11 +180,11 @@ internal override void WriteObject(PdfWriter writer) public const string Dest = "/Dest"; /// - /// (Optional; PDF 1.2) The annotation’s highlighting mode, the visual effect to be + /// (Optional; PDF 1.2) The annotation�s highlighting mode, the visual effect to be /// used when the mouse button is pressed or held down inside its active area: /// N (None) No highlighting. /// I (Invert) Invert the contents of the annotation rectangle. - /// O (Outline) Invert the annotation’s border. + /// O (Outline) Invert the annotation�s border. /// P (Push) Display the annotation as if it were being pushed below the surface of the page. /// Default value: I. /// Note: In PDF 1.1, highlighting is always done by inverting colors inside the annotation rectangle. diff --git a/PdfSharpCore/Pdf.Annotations/PdfWidgetAnnotation.cs b/PdfSharpCore/Pdf.Annotations/PdfWidgetAnnotation.cs index 0b3e9d86..b8ba68e8 100644 --- a/PdfSharpCore/Pdf.Annotations/PdfWidgetAnnotation.cs +++ b/PdfSharpCore/Pdf.Annotations/PdfWidgetAnnotation.cs @@ -56,12 +56,12 @@ void Initialize() internal new class Keys : PdfAnnotation.Keys { /// - /// (Optional) The annotation’s highlighting mode, the visual effect to be used when + /// (Optional) The annotation�s highlighting mode, the visual effect to be used when /// the mouse button is pressed or held down inside its active area: /// N (None) No highlighting. /// I (Invert) Invert the contents of the annotation rectangle. - /// O (Outline) Invert the annotation’s border. - /// P (Push) Display the annotation’s down appearance, if any. If no down appearance is defined, + /// O (Outline) Invert the annotation�s border. + /// P (Push) Display the annotation�s down appearance, if any. If no down appearance is defined, /// offset the contents of the annotation rectangle to appear as if it were being pushed below /// the surface of the page. /// T (Toggle) Same as P (which is preferred). @@ -73,7 +73,7 @@ void Initialize() /// /// (Optional) An appearance characteristics dictionary to be used in constructing a dynamic - /// appearance stream specifying the annotation’s visual presentation on the page. + /// appearance stream specifying the annotation�s visual presentation on the page. /// The name MK for this entry is of historical significance only and has no direct meaning. /// [KeyInfo(KeyType.Dictionary | KeyType.Optional)] diff --git a/PdfSharpCore/Pdf.Annotations/enums/PdfAnnotationFlags.cs b/PdfSharpCore/Pdf.Annotations/enums/PdfAnnotationFlags.cs index edb3b42b..4a7f9156 100644 --- a/PdfSharpCore/Pdf.Annotations/enums/PdfAnnotationFlags.cs +++ b/PdfSharpCore/Pdf.Annotations/enums/PdfAnnotationFlags.cs @@ -61,7 +61,7 @@ public enum PdfAnnotationFlags Print = 1 << (3 - 1), /// - /// (PDF 1.3) If set, do not scale the annotation’s appearance to match the magnification + /// (PDF 1.3) If set, do not scale the annotation�s appearance to match the magnification /// of the page. The location of the annotation on the page (defined by the /// upper-left corner of its annotation rectangle) remains fixed, regardless of the /// page magnification. See below for further discussion. @@ -69,7 +69,7 @@ public enum PdfAnnotationFlags NoZoom = 1 << (4 - 1), /// - /// (PDF 1.3) If set, do not rotate the annotation’s appearance to match the rotation + /// (PDF 1.3) If set, do not rotate the annotation�s appearance to match the rotation /// of the page. The upper-left corner of the annotation rectangle remains in a fixed /// location on the page, regardless of the page rotation. See below for further discussion. /// @@ -96,7 +96,7 @@ public enum PdfAnnotationFlags /// /// (PDF 1.4) If set, do not allow the annotation to be deleted or its properties /// (including position and size) to be modified by the user. However, this flag does - /// not restrict changes to the annotation’s contents, such as the value of a form + /// not restrict changes to the annotation�s contents, such as the value of a form /// field. /// Locked = 1 << (8 - 1), diff --git a/PdfSharpCore/Pdf.Content.Objects/CObjects.cs b/PdfSharpCore/Pdf.Content.Objects/CObjects.cs index af440074..27bbbe48 100644 --- a/PdfSharpCore/Pdf.Content.Objects/CObjects.cs +++ b/PdfSharpCore/Pdf.Content.Objects/CObjects.cs @@ -926,4 +926,4 @@ internal override void WriteObject(ContentWriter writer) writer.WriteLineRaw(ToString()); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Content/CLexer.cs b/PdfSharpCore/Pdf.Content/CLexer.cs index 5187c4253354a4160069000ee5eaf229851f7af2..e661d54d6b93ea2e7c2d5148593e3cb1d34c8193 100644 GIT binary patch literal 25846 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 XLrtL_f|=P_HmxdOF86us^Va_Z8Ju5c literal 53240 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 R-8$>jw^Gwtu5n diff --git a/PdfSharpCore/Pdf.Content/Chars.cs b/PdfSharpCore/Pdf.Content/Chars.cs index 1181f0aa..9f47eb12 100644 --- a/PdfSharpCore/Pdf.Content/Chars.cs +++ b/PdfSharpCore/Pdf.Content/Chars.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Filters/PngFilter.cs b/PdfSharpCore/Pdf.Filters/PngFilter.cs index 7900c354..7a63e19d 100644 --- a/PdfSharpCore/Pdf.Filters/PngFilter.cs +++ b/PdfSharpCore/Pdf.Filters/PngFilter.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.IO; +using PdfSharpCore.Pdf.IO; using System; namespace PdfSharpCore.Pdf.Filters diff --git a/PdfSharpCore/Pdf.Filters/StreamDecoder.cs b/PdfSharpCore/Pdf.Filters/StreamDecoder.cs index 3740d74c..b71309b3 100644 --- a/PdfSharpCore/Pdf.Filters/StreamDecoder.cs +++ b/PdfSharpCore/Pdf.Filters/StreamDecoder.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.IO; +using PdfSharpCore.Pdf.IO; using System; namespace PdfSharpCore.Pdf.Filters diff --git a/PdfSharpCore/Pdf.IO/Chars.cs b/PdfSharpCore/Pdf.IO/Chars.cs index 283255f7..d14e1f9c 100644 --- a/PdfSharpCore/Pdf.IO/Chars.cs +++ b/PdfSharpCore/Pdf.IO/Chars.cs @@ -178,11 +178,11 @@ public sealed class Chars /// /// The soft hyphen. /// - public const char SoftHyphen = '­'; // char(173) + public const char SoftHyphen = '�'; // char(173) /// /// The currency sign. /// - public const char Currency = '¤'; + public const char Currency = '�'; // ReSharper restore InconsistentNaming } diff --git a/PdfSharpCore/Pdf.IO/Lexer.cs b/PdfSharpCore/Pdf.IO/Lexer.cs index c669b1c1..67407c64 100644 --- a/PdfSharpCore/Pdf.IO/Lexer.cs +++ b/PdfSharpCore/Pdf.IO/Lexer.cs @@ -188,11 +188,11 @@ internal long MoveToStartOfStream() { long pos; - // Skip illegal blanks behind «stream». + // Skip illegal blanks behind �stream�. while (_currChar == Chars.SP) ScanNextChar(true); - // Skip new line behind «stream». + // Skip new line behind �stream�. if (_currChar == Chars.CR) { if (_nextChar == Chars.LF) @@ -535,7 +535,7 @@ public Symbol ScanLiteralString() } // Phase 2: deal with UTF-16BE if necessary. - // UTF-16BE Unicode strings start with U+FEFF ("þÿ"). There can be empty strings with UTF-16BE prefix. + // UTF-16BE Unicode strings start with U+FEFF ("��"). There can be empty strings with UTF-16BE prefix. Phase2: if (_token.Length >= 2 && _token[0] == '\xFE' && _token[1] == '\xFF') { diff --git a/PdfSharpCore/Pdf.IO/Parser.cs b/PdfSharpCore/Pdf.IO/Parser.cs index d12a0085..a1b33feb 100644 --- a/PdfSharpCore/Pdf.IO/Parser.cs +++ b/PdfSharpCore/Pdf.IO/Parser.cs @@ -192,8 +192,8 @@ public PdfObject ReadObject(PdfObject pdfObject, PdfObjectID objectID, bool incl break; // Acrobat 6 Professional proudly presents: The Null object! - // Even with a one-digit object number an indirect reference «x 0 R» to this object is - // one character larger than the direct use of «null». Probable this is the reason why + // Even with a one-digit object number an indirect reference �x 0 R� to this object is + // one character larger than the direct use of �null�. Probable this is the reason why // it is true that Acrobat Web Capture 6.0 creates this object, but obviously never // creates a reference to it! case Symbol.Null: @@ -1296,7 +1296,7 @@ private PdfTrailer ReadXRefStream(PdfCrossReferenceTable xrefTable) int prev = xrefStream.Elements.GetInteger(PdfCrossReferenceStream.Keys.Prev); PdfArray w = (PdfArray)xrefStream.Elements.GetValue(PdfCrossReferenceStream.Keys.W); - // E.g.: W[1 2 1] ¤ Index[7 12] ¤ Size 19 + // E.g.: W[1 2 1] � Index[7 12] � Size 19 // Setup subsections. int subsectionCount; @@ -1815,4 +1815,4 @@ public static uint ReadBytes(byte[] bytes, int index, int byteCount) return value; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.IO/enums/PdfReadAccuracy.cs b/PdfSharpCore/Pdf.IO/enums/PdfReadAccuracy.cs index 9f62d3f9..0675027c 100644 --- a/PdfSharpCore/Pdf.IO/enums/PdfReadAccuracy.cs +++ b/PdfSharpCore/Pdf.IO/enums/PdfReadAccuracy.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Pdf.IO.enums +namespace PdfSharpCore.Pdf.IO.enums { public enum PdfReadAccuracy { diff --git a/PdfSharpCore/Pdf.Internal/AnsiEncoding.cs b/PdfSharpCore/Pdf.Internal/AnsiEncoding.cs index b38632a2..10b741e1 100644 --- a/PdfSharpCore/Pdf.Internal/AnsiEncoding.cs +++ b/PdfSharpCore/Pdf.Internal/AnsiEncoding.cs @@ -219,7 +219,7 @@ public static char UnicodeToAnsi(char ch) case '\u0178': return '\u009F'; } - return '\u00A4'; // Char 164 is ANSI value of '¤'. + return '\u00A4'; // Char 164 is ANSI value of '�'. } /// @@ -246,4 +246,4 @@ public static char UnicodeToAnsi(char ch) /* F0 */ '\u00F0', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5', '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB', '\u00FC', '\u00FD', '\u00FE', '\u00FF' }; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Internal/ColorSpaceHelper.cs b/PdfSharpCore/Pdf.Internal/ColorSpaceHelper.cs index dfe92d19..b87d2466 100644 --- a/PdfSharpCore/Pdf.Internal/ColorSpaceHelper.cs +++ b/PdfSharpCore/Pdf.Internal/ColorSpaceHelper.cs @@ -72,4 +72,4 @@ public static bool IsEqualCmyk(XColor x, XColor y) return x.C == y.C && x.M == y.M && x.Y == y.Y && x.K == y.K; } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Internal/DocEncoding.cs b/PdfSharpCore/Pdf.Internal/DocEncoding.cs index 88e456aa..daaa25b0 100644 --- a/PdfSharpCore/Pdf.Internal/DocEncoding.cs +++ b/PdfSharpCore/Pdf.Internal/DocEncoding.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Internal/PdfDiagnostics.cs b/PdfSharpCore/Pdf.Internal/PdfDiagnostics.cs index 4a3b37c1..63073bef 100644 --- a/PdfSharpCore/Pdf.Internal/PdfDiagnostics.cs +++ b/PdfSharpCore/Pdf.Internal/PdfDiagnostics.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf.Internal/ThreadLocalStorage.cs b/PdfSharpCore/Pdf.Internal/ThreadLocalStorage.cs index c5ac5550..e7e137ca 100644 --- a/PdfSharpCore/Pdf.Internal/ThreadLocalStorage.cs +++ b/PdfSharpCore/Pdf.Internal/ThreadLocalStorage.cs @@ -126,4 +126,4 @@ public void DetachDocument(PdfDocument.DocumentHandle handle) /// readonly Dictionary _importedDocuments; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Printing/PdfFilePrinter.cs b/PdfSharpCore/Pdf.Printing/PdfFilePrinter.cs index 55da8908..de1950f8 100644 --- a/PdfSharpCore/Pdf.Printing/PdfFilePrinter.cs +++ b/PdfSharpCore/Pdf.Printing/PdfFilePrinter.cs @@ -251,4 +251,4 @@ static public string DefaultPrinterName static string _defaultPrinterName; } } -#endif \ No newline at end of file +#endif diff --git a/PdfSharpCore/Pdf.Security/AESEncryptor.cs b/PdfSharpCore/Pdf.Security/AESEncryptor.cs index aec5c2d4..2ca0a9e1 100644 --- a/PdfSharpCore/Pdf.Security/AESEncryptor.cs +++ b/PdfSharpCore/Pdf.Security/AESEncryptor.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Linq; using System.Security.Cryptography; diff --git a/PdfSharpCore/Pdf.Security/EncryptorBase.cs b/PdfSharpCore/Pdf.Security/EncryptorBase.cs index 96ef3385..c42d2653 100644 --- a/PdfSharpCore/Pdf.Security/EncryptorBase.cs +++ b/PdfSharpCore/Pdf.Security/EncryptorBase.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.Internal; +using PdfSharpCore.Pdf.Internal; using System; using System.Security.Cryptography; diff --git a/PdfSharpCore/Pdf.Security/EncryptorFactory.cs b/PdfSharpCore/Pdf.Security/EncryptorFactory.cs index f0e8ab33..0fc7e2a1 100644 --- a/PdfSharpCore/Pdf.Security/EncryptorFactory.cs +++ b/PdfSharpCore/Pdf.Security/EncryptorFactory.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.IO; +using PdfSharpCore.Pdf.IO; namespace PdfSharpCore.Pdf.Security { diff --git a/PdfSharpCore/Pdf.Security/IEncryptor.cs b/PdfSharpCore/Pdf.Security/IEncryptor.cs index 005c59b8..d53ee92d 100644 --- a/PdfSharpCore/Pdf.Security/IEncryptor.cs +++ b/PdfSharpCore/Pdf.Security/IEncryptor.cs @@ -18,4 +18,4 @@ internal interface IEncryptor byte[] Encrypt(byte[] bytes); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf.Security/PdfSecurityHandler.cs b/PdfSharpCore/Pdf.Security/PdfSecurityHandler.cs index 59399297..3a34f0ec 100644 --- a/PdfSharpCore/Pdf.Security/PdfSecurityHandler.cs +++ b/PdfSharpCore/Pdf.Security/PdfSecurityHandler.cs @@ -109,18 +109,18 @@ internal class Keys : KeysBase /// /// (Optional) The method used, if any, by the consumer application to decrypt data. /// The following values are supported: - /// • None The application does not decrypt data but directs the input + /// � None The application does not decrypt data but directs the input /// stream to the security handler for decryption. (See implementation /// note 30 in Appendix H.) - /// • V2 The application asks the security handler for the encryption key + /// � V2 The application asks the security handler for the encryption key /// and implicitly decrypts data with Algorithm 3.1, using the RC4 algorithm. - /// • AESV2(PDF 1.6) The application asks the security handler for the + /// � AESV2(PDF 1.6) The application asks the security handler for the /// encryption key and implicitly decrypts data with Algorithm 3.1, using /// the AES-128 algorithm in Cipher Block Chaining(CBC) with padding /// mode with a 16-byte block size and an initialization vector that is /// randomly generated and placed as the first 16 bytes in the stream or /// string. The key size(Length) shall be 128 bits. - /// • AESV3(ExtensionLevel 3) The application asks the security handler + /// � AESV3(ExtensionLevel 3) The application asks the security handler /// for the encryption key and implicitly decrypts data with /// Algorithm 3.1a, using the AES-256 algorithm in Cipher Block /// Chaining(CBC) with padding mode with a 16-byte block size and an diff --git a/PdfSharpCore/Pdf.Security/PdfStandardSecurityHandler.cs b/PdfSharpCore/Pdf.Security/PdfStandardSecurityHandler.cs index 9ee42857..b7069647 100644 --- a/PdfSharpCore/Pdf.Security/PdfStandardSecurityHandler.cs +++ b/PdfSharpCore/Pdf.Security/PdfStandardSecurityHandler.cs @@ -644,13 +644,13 @@ internal override void WriteObject(PdfWriter writer) /// /// (Required) A number specifying which revision of the standard security handler /// should be used to interpret this dictionary: - /// • 2 if the document is encrypted with a V value less than 2 and does not have any of + /// � 2 if the document is encrypted with a V value less than 2 and does not have any of /// the access permissions set (by means of the P entry, below) that are designated /// "Revision 3 or greater". - /// • 3 if the document is encrypted with a V value of 2 or 3, or has any "Revision 3 or + /// � 3 if the document is encrypted with a V value of 2 or 3, or has any "Revision 3 or /// greater" access permissions set. - /// • 4 if the document is encrypted with a V value of 4 - /// • 5 (ExtensionLevel 3) if the document is encrypted with a V value of 5 + /// � 4 if the document is encrypted with a V value of 4 + /// � 5 (ExtensionLevel 3) if the document is encrypted with a V value of 5 /// [KeyInfo(KeyType.Integer | KeyType.Required)] public const string R = "/R"; @@ -659,9 +659,9 @@ internal override void WriteObject(PdfWriter writer) /// (Required) A string used in computing the encryption key. /// The value of the string depends on the value of the /// revision number, the R entry described above. - /// • The value of R is 4 or less: A 32-byte string, based on both the owner and user passwords, that is used in + /// � The value of R is 4 or less: A 32-byte string, based on both the owner and user passwords, that is used in /// computing the encryption key and in determining whether a valid owner password was entered. - /// • The value for R is 5: (ExtensionLevel 3) A 48-byte string, based on the owner and user passwords, that is used in + /// � The value for R is 5: (ExtensionLevel 3) A 48-byte string, based on the owner and user passwords, that is used in /// computing the encryption key and in determining whether a valid owner password was entered. /// [KeyInfo(KeyType.String | KeyType.Required)] @@ -670,9 +670,9 @@ internal override void WriteObject(PdfWriter writer) /// /// (Required) A string based on the user password. The value /// of the string depends on the value of the revision number, the R entry described above. - /// • The value of R is 4 or less: A 32-byte string, based on the user password, that is used in determining + /// � The value of R is 4 or less: A 32-byte string, based on the user password, that is used in determining /// whether to prompt the user for a password and, if so, whether a valid user or owner password was entered. - /// • The value for R is 5: (ExtensionLevel 3) A 48-byte string, based on the user password, that is used in + /// � The value for R is 5: (ExtensionLevel 3) A 48-byte string, based on the user password, that is used in /// determining whether to prompt the user for a password and, if so, whether a valid user password was entered. /// [KeyInfo(KeyType.String | KeyType.Required)] diff --git a/PdfSharpCore/Pdf.Security/RC4Encryptor.cs b/PdfSharpCore/Pdf.Security/RC4Encryptor.cs index 75db29b2..06a6177a 100644 --- a/PdfSharpCore/Pdf.Security/RC4Encryptor.cs +++ b/PdfSharpCore/Pdf.Security/RC4Encryptor.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Pdf.Internal; +using PdfSharpCore.Pdf.Internal; using System; namespace PdfSharpCore.Pdf.Security diff --git a/PdfSharpCore/Pdf.Security/enums/PdfUserAccessPermission.cs b/PdfSharpCore/Pdf.Security/enums/PdfUserAccessPermission.cs index 764badae..c2622116 100644 --- a/PdfSharpCore/Pdf.Security/enums/PdfUserAccessPermission.cs +++ b/PdfSharpCore/Pdf.Security/enums/PdfUserAccessPermission.cs @@ -42,7 +42,7 @@ internal enum PdfUserAccessPermission /// PermitAll = -3, // = 0xFFFFFFFC, - // Bit 1–2 Reserved; must be 0. + // Bit 1�2 Reserved; must be 0. // Bit 3 (Revision 2) Print the document. // (Revision 3 or greater) Print the document (possibly not at the highest @@ -65,7 +65,7 @@ internal enum PdfUserAccessPermission // signature fields). PermitAnnotations = 0x00000020, //1 << (6 - 1), - // Bit 7–8 Reserved; must be 1. + // Bit 7�8 Reserved; must be 1. // 9 (Revision 3 or greater) Fill in existing interactive form fields (including // signature fields), even if bit 6 is clear. @@ -87,6 +87,6 @@ internal enum PdfUserAccessPermission // (See implementation note 24 in Appendix H.) PermitFullQualityPrint = 0x00000800, //1 << (12 - 1), - //Bit 13–32 (Revision 3 or greater) Reserved; must be 1. + //Bit 13�32 (Revision 3 or greater) Reserved; must be 1. } } diff --git a/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs index 32601abc..c2c48f95 100644 --- a/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/DefaultAppearanceHandler.cs @@ -1,4 +1,4 @@ -using System; +using System; using PdfSharpCore.Drawing; using PdfSharpCore.Drawing.Layout; diff --git a/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs b/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs index 920ac48b..e04ddc83 100644 --- a/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs +++ b/PdfSharpCore/Pdf.Signatures/DefaultSigner.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography.Pkcs; diff --git a/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs index 9bf862a5..35064985 100644 --- a/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/ISignatureAppearanceHandler.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing; namespace PdfSharpCore.Pdf.Signatures { diff --git a/PdfSharpCore/Pdf.Signatures/ISigner.cs b/PdfSharpCore/Pdf.Signatures/ISigner.cs index 8885be23..3c6ea2cf 100644 --- a/PdfSharpCore/Pdf.Signatures/ISigner.cs +++ b/PdfSharpCore/Pdf.Signatures/ISigner.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Text; diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs index fd621fa2..79a7dd10 100644 --- a/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureHandler.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing; using PdfSharpCore.Pdf; using PdfSharpCore.Pdf.AcroForms; using PdfSharpCore.Pdf.Advanced; diff --git a/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs index 4031a3f9..0ac4a8c0 100644 --- a/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs +++ b/PdfSharpCore/Pdf.Signatures/PdfSignatureOptions.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing; using System; using System.Collections.Generic; using System.Text; diff --git a/PdfSharpCore/Pdf.Signatures/PositionTracker.cs b/PdfSharpCore/Pdf.Signatures/PositionTracker.cs index dd2406fe..b0e6a328 100644 --- a/PdfSharpCore/Pdf.Signatures/PositionTracker.cs +++ b/PdfSharpCore/Pdf.Signatures/PositionTracker.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Pdf.Signatures +namespace PdfSharpCore.Pdf.Signatures { internal class PositionTracker { diff --git a/PdfSharpCore/Pdf.Signatures/RangedStream.cs b/PdfSharpCore/Pdf.Signatures/RangedStream.cs index 9000f419..7e2a61b6 100644 --- a/PdfSharpCore/Pdf.Signatures/RangedStream.cs +++ b/PdfSharpCore/Pdf.Signatures/RangedStream.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/PdfSharpCore/Pdf/EntryInfoAttribute.cs b/PdfSharpCore/Pdf/EntryInfoAttribute.cs index 942b947f..c7e49f22 100644 --- a/PdfSharpCore/Pdf/EntryInfoAttribute.cs +++ b/PdfSharpCore/Pdf/EntryInfoAttribute.cs @@ -138,4 +138,4 @@ public string FixedValue } string _fixedValue; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfBooleanObject.cs b/PdfSharpCore/Pdf/PdfBooleanObject.cs index 28d89052..96d17804 100644 --- a/PdfSharpCore/Pdf/PdfBooleanObject.cs +++ b/PdfSharpCore/Pdf/PdfBooleanObject.cs @@ -82,7 +82,7 @@ public override string ToString() } /// - /// Writes the keyword «false» or «true». + /// Writes the keyword �false� or �true�. /// internal override void WriteObject(PdfWriter writer) { diff --git a/PdfSharpCore/Pdf/PdfDictionary.cs b/PdfSharpCore/Pdf/PdfDictionary.cs index 9c076334..e6a6ef79 100644 --- a/PdfSharpCore/Pdf/PdfDictionary.cs +++ b/PdfSharpCore/Pdf/PdfDictionary.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf/PdfDocumentInformation.cs b/PdfSharpCore/Pdf/PdfDocumentInformation.cs index 55116c30..06c777d7 100644 --- a/PdfSharpCore/Pdf/PdfDocumentInformation.cs +++ b/PdfSharpCore/Pdf/PdfDocumentInformation.cs @@ -128,7 +128,7 @@ public DateTime ModificationDate internal sealed class Keys : KeysBase { /// - /// (Optional; PDF 1.1) The document’s title. + /// (Optional; PDF 1.1) The document�s title. /// [KeyInfo(KeyType.String | KeyType.Optional)] public const string Title = "/Title"; diff --git a/PdfSharpCore/Pdf/PdfDocumentOptions.cs b/PdfSharpCore/Pdf/PdfDocumentOptions.cs index fe545a22..46cd5bd9 100644 --- a/PdfSharpCore/Pdf/PdfDocumentOptions.cs +++ b/PdfSharpCore/Pdf/PdfDocumentOptions.cs @@ -108,4 +108,4 @@ public PdfUseFlateDecoderForJpegImages UseFlateDecoderForJpegImages } PdfUseFlateDecoderForJpegImages _useFlateDecoderForJpegImages = PdfUseFlateDecoderForJpegImages.Never; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfDocumentSettings.cs b/PdfSharpCore/Pdf/PdfDocumentSettings.cs index 64423690..25d05ff0 100644 --- a/PdfSharpCore/Pdf/PdfDocumentSettings.cs +++ b/PdfSharpCore/Pdf/PdfDocumentSettings.cs @@ -65,4 +65,4 @@ public TrimMargins TrimMargins } TrimMargins _trimMargins = new TrimMargins(); } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfInteger.cs b/PdfSharpCore/Pdf/PdfInteger.cs index 4611ec0d..39908a03 100644 --- a/PdfSharpCore/Pdf/PdfInteger.cs +++ b/PdfSharpCore/Pdf/PdfInteger.cs @@ -185,4 +185,4 @@ string IFormattable.ToString(string _value, IFormatProvider provider) #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfLong.cs b/PdfSharpCore/Pdf/PdfLong.cs index ab85a1b5..2af81661 100644 --- a/PdfSharpCore/Pdf/PdfLong.cs +++ b/PdfSharpCore/Pdf/PdfLong.cs @@ -222,4 +222,4 @@ public uint ToUInt32(IFormatProvider provider) #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfNullObject.cs b/PdfSharpCore/Pdf/PdfNullObject.cs index eff9f25e..534b7bb4 100644 --- a/PdfSharpCore/Pdf/PdfNullObject.cs +++ b/PdfSharpCore/Pdf/PdfNullObject.cs @@ -62,7 +62,7 @@ public override string ToString() } /// - /// Writes the keyword «null». + /// Writes the keyword �null�. /// internal override void WriteObject(PdfWriter writer) { diff --git a/PdfSharpCore/Pdf/PdfObject.cs b/PdfSharpCore/Pdf/PdfObject.cs index b582cbd9..c1a2db45 100644 --- a/PdfSharpCore/Pdf/PdfObject.cs +++ b/PdfSharpCore/Pdf/PdfObject.cs @@ -599,4 +599,4 @@ public PdfReference Reference } PdfReference _iref; } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfOutline.cs b/PdfSharpCore/Pdf/PdfOutline.cs index 39f5b5f9..3a0648a0 100644 --- a/PdfSharpCore/Pdf/PdfOutline.cs +++ b/PdfSharpCore/Pdf/PdfOutline.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Pdf/PdfPage.cs b/PdfSharpCore/Pdf/PdfPage.cs index 437f6e08..5f78678a 100644 --- a/PdfSharpCore/Pdf/PdfPage.cs +++ b/PdfSharpCore/Pdf/PdfPage.cs @@ -760,7 +760,7 @@ internal sealed class Keys : InheritablePageKeys /// /// (Required if PieceInfo is present; optional otherwise; PDF 1.3) The date and time - /// when the page’s contents were most recently modified. If a page-piece dictionary + /// when the page�s contents were most recently modified. If a page-piece dictionary /// (PieceInfo) is present, the modification date is used to ascertain which of the /// application data dictionaries that it contains correspond to the current content /// of the page. @@ -786,8 +786,8 @@ internal sealed class Keys : InheritablePageKeys /// /// (Optional; PDF 1.3) A rectangle, expressed in default user space units, defining the - /// extent of the page’s meaningful content (including potential white space) as intended - /// by the page’s creator. Default value: the value of CropBox. + /// extent of the page�s meaningful content (including potential white space) as intended + /// by the page�s creator. Default value: the value of CropBox. /// [KeyInfo("1.3", KeyType.Rectangle | KeyType.Optional)] public const string ArtBox = "/ArtBox"; @@ -808,21 +808,21 @@ internal sealed class Keys : InheritablePageKeys /// in order, to form a single stream. This allows PDF producers to create image objects and /// other resources as they occur, even though they interrupt the content stream. The division /// between streams may occur only at the boundaries between lexical tokens but is unrelated - /// to the page’s logical content or organization. Applications that consume or produce PDF + /// to the page�s logical content or organization. Applications that consume or produce PDF /// files are not required to preserve the existing structure of the Contents array. /// [KeyInfo(KeyType.Array | KeyType.Stream | KeyType.Optional)] public const string Contents = "/Contents"; /// - /// (Optional; PDF 1.4) A group attributes dictionary specifying the attributes of the page’s + /// (Optional; PDF 1.4) A group attributes dictionary specifying the attributes of the page�s /// page group for use in the transparent imaging model. /// [KeyInfo("1.4", KeyType.Dictionary | KeyType.Optional)] public const string Group = "/Group"; /// - /// (Optional) A stream object defining the page’s thumbnail image. + /// (Optional) A stream object defining the page�s thumbnail image. /// [KeyInfo(KeyType.Stream | KeyType.Optional)] public const string Thumb = "/Thumb"; @@ -836,7 +836,7 @@ internal sealed class Keys : InheritablePageKeys public const string B = "/B"; /// - /// (Optional; PDF 1.1) The page’s display duration (also called its advance timing): the + /// (Optional; PDF 1.1) The page�s display duration (also called its advance timing): the /// maximum length of time, in seconds, that the page is displayed during presentations before /// the viewer application automatically advances to the next page. By default, the viewer does /// not advance automatically. @@ -879,20 +879,20 @@ internal sealed class Keys : InheritablePageKeys /// /// (Required if the page contains structural content items; PDF 1.3) - /// The integer key of the page’s entry in the structural parent tree. + /// The integer key of the page�s entry in the structural parent tree. /// [KeyInfo(KeyType.Integer | KeyType.Optional)] public const string StructParents = "/StructParents"; /// /// (Optional; PDF 1.3; indirect reference preferred) The digital identifier of - /// the page’s parent Web Capture content set. + /// the page�s parent Web Capture content set. /// [KeyInfo("1.3", KeyType.String | KeyType.Optional)] public const string ID = "/ID"; /// - /// (Optional; PDF 1.3) The page’s preferred zoom (magnification) factor: the factor + /// (Optional; PDF 1.3) The page�s preferred zoom (magnification) factor: the factor /// by which it should be scaled to achieve the natural display magnification. /// [KeyInfo("1.3", KeyType.Real | KeyType.Optional)] diff --git a/PdfSharpCore/Pdf/PdfReal.cs b/PdfSharpCore/Pdf/PdfReal.cs index 96cbc8cc..3832db4f 100644 --- a/PdfSharpCore/Pdf/PdfReal.cs +++ b/PdfSharpCore/Pdf/PdfReal.cs @@ -80,4 +80,4 @@ internal override void WriteObject(PdfWriter writer) writer.Write(this); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfUInteger.cs b/PdfSharpCore/Pdf/PdfUInteger.cs index 6fb980f4..a61b27f2 100644 --- a/PdfSharpCore/Pdf/PdfUInteger.cs +++ b/PdfSharpCore/Pdf/PdfUInteger.cs @@ -225,4 +225,4 @@ public uint ToUInt32(IFormatProvider provider) #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/PdfViewerPreferences.cs b/PdfSharpCore/Pdf/PdfViewerPreferences.cs index 13389805..49e75fd1 100644 --- a/PdfSharpCore/Pdf/PdfViewerPreferences.cs +++ b/PdfSharpCore/Pdf/PdfViewerPreferences.cs @@ -46,7 +46,7 @@ internal PdfViewerPreferences(PdfDocument document) { } /// - /// Gets or sets a value indicating whether to hide the viewer application’s tool + /// Gets or sets a value indicating whether to hide the viewer application�s tool /// bars when the document is active. /// public bool HideToolbar @@ -56,7 +56,7 @@ public bool HideToolbar } /// - /// Gets or sets a value indicating whether to hide the viewer application’s + /// Gets or sets a value indicating whether to hide the viewer application�s /// menu bar when the document is active. /// public bool HideMenubar @@ -67,8 +67,8 @@ public bool HideMenubar /// /// Gets or sets a value indicating whether to hide user interface elements in - /// the document’s window (such as scroll bars and navigation controls), - /// leaving only the document’s contents displayed. + /// the document�s window (such as scroll bars and navigation controls), + /// leaving only the document�s contents displayed. /// public bool HideWindowUI { @@ -77,7 +77,7 @@ public bool HideWindowUI } /// - /// Gets or sets a value indicating whether to resize the document’s window to + /// Gets or sets a value indicating whether to resize the document�s window to /// fit the size of the first displayed page. /// public bool FitWindow @@ -87,7 +87,7 @@ public bool FitWindow } /// - /// Gets or sets a value indicating whether to position the document’s window + /// Gets or sets a value indicating whether to position the document�s window /// in the center of the screen. /// public bool CenterWindow @@ -97,7 +97,7 @@ public bool CenterWindow } /// - /// Gets or sets a value indicating whether the window’s title bar + /// Gets or sets a value indicating whether the window�s title bar /// should display the document title taken from the Title entry of the document /// information dictionary. If false, the title bar should instead display the name /// of the PDF file containing the document. @@ -111,7 +111,7 @@ public bool DisplayDocTitle /// /// The predominant reading order for text: LeftToRight or RightToLeft /// (including vertical writing systems, such as Chinese, Japanese, and Korean). - /// This entry has no direct effect on the document’s contents or page numbering + /// This entry has no direct effect on the document�s contents or page numbering /// but can be used to determine the relative positioning of pages when displayed /// side by side or printed n-up. Default value: LeftToRight. /// @@ -155,14 +155,14 @@ public PdfReadingDirection? Direction internal sealed class Keys : KeysBase { /// - /// (Optional) A flag specifying whether to hide the viewer application’s tool + /// (Optional) A flag specifying whether to hide the viewer application�s tool /// bars when the document is active. Default value: false. /// [KeyInfo(KeyType.Boolean | KeyType.Optional)] public const string HideToolbar = "/HideToolbar"; /// - /// (Optional) A flag specifying whether to hide the viewer application’s + /// (Optional) A flag specifying whether to hide the viewer application�s /// menu bar when the document is active. Default value: false. /// [KeyInfo(KeyType.Boolean | KeyType.Optional)] @@ -170,28 +170,28 @@ internal sealed class Keys : KeysBase /// /// (Optional) A flag specifying whether to hide user interface elements in - /// the document’s window (such as scroll bars and navigation controls), - /// leaving only the document’s contents displayed. Default value: false. + /// the document�s window (such as scroll bars and navigation controls), + /// leaving only the document�s contents displayed. Default value: false. /// [KeyInfo(KeyType.Boolean | KeyType.Optional)] public const string HideWindowUI = "/HideWindowUI"; /// - /// (Optional) A flag specifying whether to resize the document’s window to + /// (Optional) A flag specifying whether to resize the document�s window to /// fit the size of the first displayed page. Default value: false. /// [KeyInfo(KeyType.Boolean | KeyType.Optional)] public const string FitWindow = "/FitWindow"; /// - /// (Optional) A flag specifying whether to position the document’s window + /// (Optional) A flag specifying whether to position the document�s window /// in the center of the screen. Default value: false. /// [KeyInfo(KeyType.Boolean | KeyType.Optional)] public const string CenterWindow = "/CenterWindow"; /// - /// (Optional; PDF 1.4) A flag specifying whether the window’s title bar + /// (Optional; PDF 1.4) A flag specifying whether the window�s title bar /// should display the document title taken from the Title entry of the document /// information dictionary. If false, the title bar should instead display the name /// of the PDF file containing the document. Default value: false. @@ -200,7 +200,7 @@ internal sealed class Keys : KeysBase public const string DisplayDocTitle = "/DisplayDocTitle"; /// - /// (Optional) The document’s page mode, specifying how to display the document on + /// (Optional) The document�s page mode, specifying how to display the document on /// exiting full-screen mode: /// UseNone Neither document outline nor thumbnail images visible /// UseOutlines Document outline visible @@ -216,7 +216,7 @@ internal sealed class Keys : KeysBase /// (Optional; PDF 1.3) The predominant reading order for text: /// L2R Left to right /// R2L Right to left (including vertical writing systems, such as Chinese, Japanese, and Korean) - /// This entry has no direct effect on the document’s contents or page numbering + /// This entry has no direct effect on the document�s contents or page numbering /// but can be used to determine the relative positioning of pages when displayed /// side by side or printed n-up. Default value: L2R. /// @@ -230,7 +230,7 @@ internal sealed class Keys : KeysBase /// boundary is not defined in the page object, its default value is used. /// Default value: CropBox. /// Note: This entry is intended primarily for use by prepress applications that - /// interpret or manipulate the page boundaries as described in Section 10.10.1, “Page Boundaries.” + /// interpret or manipulate the page boundaries as described in Section 10.10.1, �Page Boundaries.� /// Most PDF consumer applications disregard it. /// [KeyInfo(KeyType.Name | KeyType.Optional)] @@ -243,7 +243,7 @@ internal sealed class Keys : KeysBase /// boundary is not defined in the page object, its default value is used. /// Default value: CropBox. /// Note: This entry is intended primarily for use by prepress applications that - /// interpret or manipulate the page boundaries as described in Section 10.10.1, “Page Boundaries.” + /// interpret or manipulate the page boundaries as described in Section 10.10.1, �Page Boundaries.� /// Most PDF consumer applications disregard it. /// [KeyInfo(KeyType.Name | KeyType.Optional)] @@ -256,7 +256,7 @@ internal sealed class Keys : KeysBase /// defined in the page object, its default value is used. /// Default value: CropBox. /// Note: This entry is intended primarily for use by prepress applications that - /// interpret or manipulate the page boundaries as described in Section 10.10.1, “Page Boundaries.” + /// interpret or manipulate the page boundaries as described in Section 10.10.1, �Page Boundaries.� /// Most PDF consumer applications disregard it. /// [KeyInfo(KeyType.Name | KeyType.Optional)] @@ -305,4 +305,4 @@ internal override DictionaryMeta Meta get { return Keys.Meta; } } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/AnnotationCopyingType.cs b/PdfSharpCore/Pdf/enums/AnnotationCopyingType.cs index 45a55deb..db362587 100644 --- a/PdfSharpCore/Pdf/enums/AnnotationCopyingType.cs +++ b/PdfSharpCore/Pdf/enums/AnnotationCopyingType.cs @@ -1,4 +1,4 @@ -namespace PdfSharpCore.Pdf +namespace PdfSharpCore.Pdf { /// /// Defines how annotations should be copied. diff --git a/PdfSharpCore/Pdf/enums/PdfColorMode.cs b/PdfSharpCore/Pdf/enums/PdfColorMode.cs index 8be4d821..3a1c357f 100644 --- a/PdfSharpCore/Pdf/enums/PdfColorMode.cs +++ b/PdfSharpCore/Pdf/enums/PdfColorMode.cs @@ -49,4 +49,4 @@ public enum PdfColorMode /// Cmyk, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/PdfCustomValueCompression.cs b/PdfSharpCore/Pdf/enums/PdfCustomValueCompression.cs index d9b9a2d1..c040c9f8 100644 --- a/PdfSharpCore/Pdf/enums/PdfCustomValueCompression.cs +++ b/PdfSharpCore/Pdf/enums/PdfCustomValueCompression.cs @@ -49,4 +49,4 @@ public enum PdfCustomValueCompressionMode /// Compressed, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/PdfFlateEncodeMode.cs b/PdfSharpCore/Pdf/enums/PdfFlateEncodeMode.cs index 3236d17d..36158528 100644 --- a/PdfSharpCore/Pdf/enums/PdfFlateEncodeMode.cs +++ b/PdfSharpCore/Pdf/enums/PdfFlateEncodeMode.cs @@ -49,4 +49,4 @@ public enum PdfFlateEncodeMode /// BestCompression, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/PdfPageMode.cs b/PdfSharpCore/Pdf/enums/PdfPageMode.cs index db895720..a75f3965 100644 --- a/PdfSharpCore/Pdf/enums/PdfPageMode.cs +++ b/PdfSharpCore/Pdf/enums/PdfPageMode.cs @@ -66,4 +66,4 @@ public enum PdfPageMode /// UseAttachments, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/PdfReadingDirection.cs b/PdfSharpCore/Pdf/enums/PdfReadingDirection.cs index 8c4a6454..7ca78a63 100644 --- a/PdfSharpCore/Pdf/enums/PdfReadingDirection.cs +++ b/PdfSharpCore/Pdf/enums/PdfReadingDirection.cs @@ -44,4 +44,4 @@ public enum PdfReadingDirection /// RightToLeft, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/Pdf/enums/PdfUseFlateDecoderForJpegImages.cs b/PdfSharpCore/Pdf/enums/PdfUseFlateDecoderForJpegImages.cs index 9a815b6c..57c25010 100644 --- a/PdfSharpCore/Pdf/enums/PdfUseFlateDecoderForJpegImages.cs +++ b/PdfSharpCore/Pdf/enums/PdfUseFlateDecoderForJpegImages.cs @@ -52,4 +52,4 @@ public enum PdfUseFlateDecoderForJpegImages /// Always, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/SilverlightInternals/AgHacks.cs b/PdfSharpCore/SilverlightInternals/AgHacks.cs index 3c0e7aba..67c0ca69 100644 --- a/PdfSharpCore/SilverlightInternals/AgHacks.cs +++ b/PdfSharpCore/SilverlightInternals/AgHacks.cs @@ -1,4 +1,4 @@ -#region PDFsharp - A .NET library for processing PDF +#region PDFsharp - A .NET library for processing PDF // // Authors: // Stefan Lange diff --git a/PdfSharpCore/Utils/FontResolver.cs b/PdfSharpCore/Utils/FontResolver.cs index f233a7d0..241082e9 100644 --- a/PdfSharpCore/Utils/FontResolver.cs +++ b/PdfSharpCore/Utils/FontResolver.cs @@ -1,4 +1,4 @@ - + using System.Linq; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; diff --git a/PdfSharpCore/root/PSSR.cs b/PdfSharpCore/root/PSSR.cs index f047cbfd..2d528240 100644 --- a/PdfSharpCore/root/PSSR.cs +++ b/PdfSharpCore/root/PSSR.cs @@ -387,4 +387,4 @@ static PSSR() #endregion } -} \ No newline at end of file +} diff --git a/PdfSharpCore/root/PageSizeConverter.cs b/PdfSharpCore/root/PageSizeConverter.cs index 395a4fc3..791f0662 100644 --- a/PdfSharpCore/root/PageSizeConverter.cs +++ b/PdfSharpCore/root/PageSizeConverter.cs @@ -108,70 +108,70 @@ public static XSize ToSize(PageSize value) // The non-ISO sizes ... - case PageSize.Quarto: // 8 x 10 inch² + case PageSize.Quarto: // 8 x 10 inch� return new XSize(576, 720); - case PageSize.Foolscap: // 8 x 13 inch² + case PageSize.Foolscap: // 8 x 13 inch� return new XSize(576, 936); - case PageSize.Executive: // 7.5 x 10 inch² + case PageSize.Executive: // 7.5 x 10 inch� return new XSize(540, 720); - case PageSize.GovernmentLetter: // 8 x 10.5 inch² + case PageSize.GovernmentLetter: // 8 x 10.5 inch� return new XSize(576, 756); - case PageSize.Letter: // 8.5 x 11 inch² + case PageSize.Letter: // 8.5 x 11 inch� return new XSize(612, 792); - case PageSize.Legal: // 8.5 x 14 inch² + case PageSize.Legal: // 8.5 x 14 inch� return new XSize(612, 1008); - case PageSize.Ledger: // 17 x 11 inch² + case PageSize.Ledger: // 17 x 11 inch� return new XSize(1224, 792); - case PageSize.Tabloid: // 11 x 17 inch² + case PageSize.Tabloid: // 11 x 17 inch� return new XSize(792, 1224); - case PageSize.Post: // 15.5 x 19.25 inch² + case PageSize.Post: // 15.5 x 19.25 inch� return new XSize(1126, 1386); - case PageSize.Crown: // 20 x 15 inch² + case PageSize.Crown: // 20 x 15 inch� return new XSize(1440, 1080); - case PageSize.LargePost: // 16.5 x 21 inch² + case PageSize.LargePost: // 16.5 x 21 inch� return new XSize(1188, 1512); - case PageSize.Demy: // 17.5 x 22 inch² + case PageSize.Demy: // 17.5 x 22 inch� return new XSize(1260, 1584); - case PageSize.Medium: // 18 x 23 inch² + case PageSize.Medium: // 18 x 23 inch� return new XSize(1296, 1656); - case PageSize.Royal: // 20 x 25 inch² + case PageSize.Royal: // 20 x 25 inch� return new XSize(1440, 1800); - case PageSize.Elephant: // 23 x 28 inch² + case PageSize.Elephant: // 23 x 28 inch� return new XSize(1565, 2016); - case PageSize.DoubleDemy: // 23.5 x 35 inch² + case PageSize.DoubleDemy: // 23.5 x 35 inch� return new XSize(1692, 2520); - case PageSize.QuadDemy: // 35 x 45 inch² + case PageSize.QuadDemy: // 35 x 45 inch� return new XSize(2520, 3240); - case PageSize.STMT: // 5.5 x 8.5 inch² + case PageSize.STMT: // 5.5 x 8.5 inch� return new XSize(396, 612); - case PageSize.Folio: // 8.5 x 13 inch² + case PageSize.Folio: // 8.5 x 13 inch� return new XSize(612, 936); - case PageSize.Statement: // 5.5 x 8.5 inch² + case PageSize.Statement: // 5.5 x 8.5 inch� return new XSize(396, 612); - case PageSize.Size10x14: // 10 x 14 inch² + case PageSize.Size10x14: // 10 x 14 inch� return new XSize(720, 1008); } throw new ArgumentException("Invalid PageSize.", "value"); } } -} \ No newline at end of file +} diff --git a/PdfSharpCore/root/ProductVersionInfo.cs b/PdfSharpCore/root/ProductVersionInfo.cs index 090c94c4..a7eaa687 100644 --- a/PdfSharpCore/root/ProductVersionInfo.cs +++ b/PdfSharpCore/root/ProductVersionInfo.cs @@ -90,7 +90,7 @@ public static class ProductVersionInfo /// /// The copyright information. /// - public const string Copyright = "Copyright © 2005-2016 empira Software GmbH."; + public const string Copyright = "Copyright � 2005-2016 empira Software GmbH."; /// /// The trademark the product. diff --git a/PdfSharpCore/root/enums/PSMsgID.cs b/PdfSharpCore/root/enums/PSMsgID.cs index 058b21ed..28f9eeba 100644 --- a/PdfSharpCore/root/enums/PSMsgID.cs +++ b/PdfSharpCore/root/enums/PSMsgID.cs @@ -73,4 +73,4 @@ enum PSMsgID /// UnknownEncryption, } -} \ No newline at end of file +} diff --git a/PdfSharpCore/root/enums/PageSize.cs b/PdfSharpCore/root/enums/PageSize.cs index c97082ec..36433ad1 100644 --- a/PdfSharpCore/root/enums/PageSize.cs +++ b/PdfSharpCore/root/enums/PageSize.cs @@ -218,7 +218,7 @@ public enum PageSize Post = 108, /// - /// 20 ×Identifies a paper sheet size of 20 inch times 15 inch or 508 mm times 381 mm. + /// 20 �Identifies a paper sheet size of 20 inch times 15 inch or 508 mm times 381 mm. /// Crown = 109, @@ -277,10 +277,10 @@ public enum PageSize /// Size10x14 = 122, - //A 11 × 8.5 279 × 216 - //B 17 × 11 432 × 279 - //C 22 × 17 559 × 432 - //D 34 × 22 864 × 559 - //E 44 × 34 1118 × 864 + //A 11 � 8.5 279 � 216 + //B 17 � 11 432 � 279 + //C 22 � 17 559 � 432 + //D 34 � 22 864 � 559 + //E 44 � 34 1118 � 864 } -} \ No newline at end of file +} diff --git a/SampleApp/Program.cs b/SampleApp/Program.cs index 1f46c514..8b6c715d 100644 --- a/SampleApp/Program.cs +++ b/SampleApp/Program.cs @@ -1,4 +1,4 @@ - + namespace SampleApp { diff --git a/SignatureTestConsole/Program.cs b/SignatureTestConsole/Program.cs index 3a3d9f4e..aaeb8c04 100644 --- a/SignatureTestConsole/Program.cs +++ b/SignatureTestConsole/Program.cs @@ -1,4 +1,4 @@ -using PdfSharpCore.Drawing; +using PdfSharpCore.Drawing; using PdfSharpCore.Pdf; using System.Security.Cryptography.X509Certificates; using PdfSharpCore.Pdf.IO; From c4277dac7b2a04704418572eaa6eb1888423dbb8 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 21 Aug 2024 19:39:38 -0700 Subject: [PATCH 10/10] fix: don't clobber objects that are overridden in a trailer when reading compressed objects --- PdfSharpCore/Pdf.IO/PdfReader.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/PdfSharpCore/Pdf.IO/PdfReader.cs b/PdfSharpCore/Pdf.IO/PdfReader.cs index 2cdb0b90..0ba43fd5 100644 --- a/PdfSharpCore/Pdf.IO/PdfReader.cs +++ b/PdfSharpCore/Pdf.IO/PdfReader.cs @@ -499,6 +499,13 @@ public static PdfDocument Open(Stream stream, string password, PdfDocumentOpenMo // Is type xref to compressed object? if (item.Type == 2) { + if (document._irefTable.ObjectTable.TryGetValue(new PdfObjectID(idx2), out var irefToRead) && irefToRead.Position > 0) + { + // The object has been overridden by a trailer with a specific position. + // Don't read from compressed objects. Continue on later to "read all indirect objects" + continue; + } + PdfReference irefNew = parser.ReadCompressedObject(new PdfObjectID((int)item.Field2), (int)item.Field3); Debug.Assert(document._irefTable.Contains(iref.ObjectID));