["..E$ ","A.BtEADAfBfCX(CC|F9F.B(CP9666(C`CP9666646+BCCP9666646)B(BBBXBB.BCc(B0CKX","Attributes"," extend classes and types. This C# feature allows you to attach declarative information to any type. Attributes are accessed at compile-time or runtime through the metadata. We then can handle types based on their attributes.","This program"," provides an example of the Obsolete attribute. The Obsolete attribute is a way to declare that a method is deprecated and should be avoided. When you look at the program in Visual Studio, this will result in a warning. ","The actual type referenced by [Obsolete] is ObsoleteAttribute, but you can omit the word Attribute.","Tip 2: ","The attribute modifies the compiler's view of the Program.Text method. It doesn't affect runtime.","C# program that uses attribute","\n\nusing System;\n\nclass Program\n{\n static void Main()\n {","\n // Warning: 'Program.Test()' is obsolete\n ","Test();\n }\n\n ","[Obsolete]","\n static void Test()\n {\n }\n}\n\n","Warning generated by program:","\n\n'Program.Test()' is obsolete","The .NET Framework"," provides useful built-in attribute types. The Obsolete attribute is one of them. It causes annoying warnings when a developer tries to compile a program containing a method that the obsolete attribute is attached to. ","Obsolete ","obsolete","Declare attribute."," An attribute is a class that is derived from the Attribute class through inheritance. Often, we put an attribute on the class itself. This provides a way to specify what kind of types the attribute applies to, among other options. ","We specify to use the attribute with square brackets and the name of the attribute, omitting the word \"Attribute\" on the end.","C# program that declares attribute","\n\nusing System;","\n\n/// <summary>\n/// An attribute that can only be attached to classes.\n/// </summary>\n","[AttributeUsage(AttributeTargets.Class)]\npublic class PerlsAttribute : ","Attribute","\n{\n}","\n\n/// <summary>\n/// Use short syntax to reference attribute.\n/// </summary>\n","[Perls]\nclass Example1\n{\n}","\n\n/// <summary>\n/// Use long syntax to reference attribute.\n/// </summary>\n","[PerlsAttribute]\nclass Example2\n{\n}\n\nclass Program\n{\n static void Main()\n {","\n // For compilation.\n ","}\n}","AttributeTargets.Class."," The class PerlsAttribute is an attribute class that can only be attached to class types. It cannot be attached to fields, methods, or properties, for example. ","Please notice how you can omit specifying the entire \"PerlsAttribute\" in the example. You can just use \"Perls\" optionally.","Members."," This example builds on the previous one. It includes a string member field, a property accessor to that field, and a parameterful (positional) constructor. With this version of PerlsAttribute, we must specify a string type parameter. ","Parameterful is a real word. I did not just make it up. Someone else made it up.","C# program that uses attributes, number 2","\n\nusing System;","\n\n/// <summary>\n/// Attribute.\n/// </summary>\n","[AttributeUsage(AttributeTargets.Class)]\npublic class PerlsAttribute : ","Attribute","\n{","\n /// <summary>\n /// Stores string field.\n /// </summary>\n ","string _id;","\n\n /// <summary>\n /// Attribute constructor.\n /// </summary>\n ","public PerlsAttribute(string id)\n {\n this._id = id;\n }","\n\n /// <summary>\n /// Get Id.\n /// </summary>\n ","public string Id\n {\n get { return this._id; }\n }\n}","\n\n/// <summary>\n/// Apply attribute.\n/// </summary>\n","[Perls(","\"Dot\"",")]\nclass Example1\n{\n}\n\nclass Program\n{\n static void Main()\n {","\n // For compilation.\n ","}\n}","Positional, named."," The specification recommends that named parameters be used. They are not as likely to be invalidated when the attribute declaration changes. With positional parameters, you rely on the position of the parameters in the constructor. ","Constructor ","constructor","However: ","With named parameters, you simply rely on having specified the correct name.","For a positional parameter, please remember to include the set accessor. You can combine positional and named parameters.","C# program that uses attributes, number 3","\n\nusing System;","\n\n/// <summary>\n/// Attribute.\n/// </summary>\n","[AttributeUsage(AttributeTargets.Class)]\npublic class PerlsAttribute : ","Attribute","\n{","\n /// <summary>\n /// String field.\n /// </summary>\n ","string _id;","\n\n /// <summary>\n /// Attribute constructor.\n /// </summary>\n ","public PerlsAttribute()\n {\n }","\n\n /// <summary>\n /// Get and set.\n /// </summary>\n ","public string Id\n {\n get { return this._id; }\n set { this._id = value; }\n }\n}","\n\n/// <summary>\n/// Set property in the attribute.\n/// </summary>\n","[Perls(Id = ","\"Sam\"",")]\nclass Example1\n{\n}\n\nclass Program\n{\n static void Main()\n {","\n // For compilation.\n ","}\n}","AllowMultiple."," By default an attribute can only be specified a single time on a member or type declaration. To bypass this restriction, you must set the AllowMultiple boolean named parameter to true. ","True ","true","Conditional."," The Conditional attribute is typically used to disable or enable certain methods depending on whether the compilation mode is DEBUG or RELEASE. These methods must have a void return type. ","Conditional ","conditional","Void ","void","Return ","return","Flags."," The enum type in the C# language has the [Flags] attribute and this can be used to create some useful functions. Please visit the flags article and also the enum category for more on enumerated types. ","Flags ","enum-flags","Enum ","enum","DllImport."," Attributes help with the task of using external code such as C++ or C. The DllImport attribute can be attached to extern method declarations. This provides a compile-time signal that allows a program that uses external calls. ","DllImport, Dllexport ","dllimport","Warning: ","Whenever you need to use DllImport, you are bound to have difficulties. Interop introduces extra layers of complexity.","Reflection."," How can you use attributes in a simple program\u2014one where you do not want to develop your own compiler technology? You can use the reflection feature in the C# language to access attributes at runtime.","For example,"," try getting an array of all the fields in your type, and then performing a different action based on what data the attribute of each type contains. This is sometimes useful for developing debugging mechanisms. ","Reflection ","reflection","Compiler."," Attributes can be accessed during compile-time. And the compiler can take different actions based on what data is contained in the attribute. In compiler theory, the attribute data would become part of the symbol table. ","The symbol table is used throughout the construction of the object code in further compiler phases.","C# enables programmers to invent new kinds of declarative information, called attributes.","The C# Programming Language","Summary."," Custom attributes are of fairly limited use in most programs, but they provide nearly infinite options for extensibility. With them we attach declarative information to members and types. And we essentially build new languages."]

%iVBORw0KG;)NSUhEUg?AMg?ABBCAM?ACjORu8)MFBMVEX::/+u/NnzzWsWjGkhf/6rn/8M7lxID23qnlzqb+9eHx1Zns3MHdv4ny5tXx4cWCN83d?ADdUlEQVR4Xu3Z626jMBCAUc/Nd+j7v+22xEkZGOpuNnXDKt+/SFXkU7AYHMc6d5pY959BXhBuPTOEj6IX5G96QUJZOg+kLIUdpMjSeSCyVM4LeUFC2RRPCimyyQ+BvCAVlh4EgTklImRmolSdXa4T8Xs0pXwEqImQL1+T6ryGwFLdQd6c7n4IpAlZhRYlT7yKiC7wpBjIOppAQ99+EJJ5X9o5KhtpCBDvc+Mgjo1qz6EhzfFQSIVt90BQO2buQxI/DGILXRfSvyTUh2R+Fgh9xNcm84Jgmuc5oQVJvw+Z5+wgZ+/lPdSDjV4kRnnPvzXJ/NH2ouEyWsSS0kQ0FpK9fBb1JtGLDHIpNKyIZNdqOI6yyvv7IWlel/sQEJWy7haptXEF4Zbo7ofoUh/i+hBubbXBgJQzQsi4tZhC/F1IKSUEIhNi3loaQvwZUijxVyCBkDfZmz0DQJZgQBJvwhAHQ6CtoQ/By7LzVZ1Wc4PwvjAUAsQ9SOAWVXBQiVvzCivBkBAMhEzchUQ2Q1hDBA3J9KjpN3chWQGQLIgQW4W82WkGZR4GSdyiOoOy9v7bKF5DRMJOnIZBqDkmgGXgsiERDYeCeLkUg9LQAIg9flgQL1K2jCAakmVVDFc4DoNwS76GXLy4sIlC2X07iCpy66kgt0dgAecceGmB/iMVt57q1gLB7mgLrvn0ARYOex+hBiG9AJ6tNys5vtzzcsuFUJZue4SGQSZuUUoT8S3KBoSKOp7RELMwDFL4qC9Og5AohPk7kDgMIsh2qN8RjbAqqxXJOEhgM/v44X;TCY1DoQIfQOSic0mBTEcIyHra4JTiWR?quMobASGw:LmS/IvWQOkpamxkpB@mpFRdvnwkDUn9k0YQkZgSEV5fdvXJM7d+ENLy7Yyu5WG/kWkiwoOdBGKWh0GyGGkt4G3ebcVy83QgMAzi+pCqpx97KMxi5d04SBY7v3v4K+b3IDAQ4nwPQnqutIfCbDsGQvQaPIA/gmD5dOD2QQLe2ujHkKJzDwmyXxAZrh/9GpLWR4gfEZrv5NB+nLh+l6ronOjciCofho3bT3SjIDrko4qcCZILHxTkVBAvBdkIi5wNIhLQmgnPB2knb0Tt998Uoiz5eyGgGwLJcsvnj7wxFHYyFj4+kOPcqZLD4FwQkIOyO1lw/utxPNz6/C+AP29Qa6a+njSD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEXZ7::/+VlZX29vYl5th1)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AL4?ABBCAM?ABYbu5j)MFBMVEX:/+1wv+jqv9siv/p6:W3f8zZv9gb:19v9NK/8zAP999:S:8z:8zzP+z6P/0gInF?ABg0lEQVR4XtXXy1ICURAD0H7c96D+/9/KQqkhlEKD0iTrWZzKYtJXbou2s+jvn1Q55f2mfAMOb6Ec5D6+c/ObcvOdm98qN9+5+a1w842b3wo33/6Dv2H22g3zCL+PKF/uSKDsGL8pN9+5+U25+c7Nb5Wb74R8h+ki41eYLja+Qf1k/AL1k/HF4XIg4ytMFxl/X7/z8aF+Ov6A6bqR:FTnswXa2B96LmyPZtfoH4yvsDlwMaHy4GLj/Xz8RXqJ+PD5UDGh+ni448O08XEh+lSrtUVnC6qm+ey/krGx+li4+N0sfHh7Cfj43Sx8bF+Mj5OFxkf67c8frF+jJUovzRIBr/4+kovMb5YPr/OdcrUGL9k8FG/Tw3xxbP55/o1R4hfk/m6IBbii+fyJ/JnjK+5/HWRGuJLfzG+xvh6lX89f8m3GH90ar7Ya/FrkF8y+XNhRpAvlsi3+H8fUxP5A+svYb54Hl8Uy4/zNZEvCvo4XzyRLzrhXg7zNZMvw/o6ptsQpvDnE+wJyVGQ5SG7)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEX/6Nn:/+VlZX29va5ksB5)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC!D%iVBORw0KG;)NSUhEUg?AP)BDCAM?ACV1Xh7)GFBMVEX::r+vixvbyJk5Lc3NzF9vGv19NhYWHPSHDN?ADzklEQVR4XuXa25KjMAwEUFoX8/9/vElmoEsIORTl3SWkHxnF9ilzsWGmq8QM0/cEMj+i9jVgnX/yLWKZf6NXBcAweIKvPMUmOnhk8xpxXEwrGqZiPPhq4nn+q+Dm7tcFY/hNa/ZHcE0wBg4Nygm+IphDG7zwaH53MIPWmvv9wQx8yXRrMOP/fIJh8ooZhoJfzdrROcahYRreUOzpsHcLCkZVAkCXsIBhbSh+GW1tVzJFtxHsDo2dYB2nSqmlJQzTwk0yJ01snQ2YR6GprNuq7gGEf7NQDApqC0MwZ2Ew2Iq6s+CtBWVxDWbNeLAVfZ4EZ4wW3j7YCoW7AwfB/ggSWHMl3oDZTgZrNgiLe5Z4n1UCVB5RXcHuZ8F1p3gH9gyus6lWSlprugs2DtvXNNEIliVskZHWA4s0oWipi63qETB7DohQSdsrC/nJX9atQu9O0tKATYaUYIU/Ey6U1KjLYbCAkEck1GsaHNv9DXgW+HAwvS5hw3seLCAkX/SBFxpuHTBeGQFm1/F3OAHmhNY/sG0VAB4iOJSBPmADBo?RgjB2QtlLxGMZ/rg7PVGsDs24OakEOe/g9TQHAZsHghuvDIIJok5BlZOk/XBPBq6zVdIm0aChSd7BOMcmN53YPJyt9jc820EOJ9afIKdBiu9EewEB106VDzXxcaCiy3vWTCmAsyOqdM8XO5oGBWMA0/DwPQmcK5EvhowUZwio8AYDJ5qMC9PbQ7C8hNI5hzFeDCWDAdniKoS4wTXu2YdDM4ZD5602ieloXiTbbF8HthKb27YPZkdnwOu70Zave+Gv8zxTPgssFRcVmWyazgVPgmMta6JPiPUFgMBtptNFBi5IFiqjX1/HJCA+iCwstuON0d6KF00FwSzbhNgYkQ2JKym1gPLRcE8M4EfbBaoWPZyAVrvxrF86zkFhq1ZTe0RewYnT+n4ijE0FKtU+f6QogzGzKwfm86Bbe5Ezt60clQQwUXUCe7UXwiMujUcALd9sF0V3G/R3oG1VesT2QUDGAsGcBy8BB1xHyyd55ftVw8Gs8VTa+mcRSJZrOJrii/OlwTTK/qT4jqGiSwlwvUnvSloItt6nPmXDXgn2CvsHOMXKqb4rOVFDg30KmBJ3vqzVtVhHVwODMJChGD+GiW3Di4Gti0YP6pWrf7xzFJKbSdLPVj/35LP6OIxfp9InOH0aJbbgnX/0dzuBgYfQLLATHjQbwTOa8a87vD7gUFdZyt0pxh99bvpWwWyzxWn92bBm63QDeNt/WdCvoq/7QT3F6sEfAUZBHwBGZjuHYBoBO0fPVuHt+o3PUI)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AIw?AB4BAM?ADS7QcC)GFBMVEX::0qHKhmbLDvs74yKT4xaH4yqr2tYUVUWgb)fUlEQVR42u3XsQmAMBgF4V9x?OCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWb+J9pQZZpG3zkRNyowmmmBgYGBgYGBgYGBgYGA+Mn0QHTl3V+o1iYieKifLYq4gilnMYqIVBgYGBgYGBgYGBgYG5gfm3ESx0GvePshxrr29cII)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AGo?ACZCAM?ADw+V8S)DFBMVEX::09PTk5OTU1NQ/cPF/?ABzUlEQVR4Xu3bQarDMBRD0Xel/e/5w59m0FiNRQnWBg6vBidynVkOAJIAYLYEJF9j6VHxqly9Zxzfiig4T2jycpQPVM.4yiA4hCs0ebB8BMhWKRtlvxYFIy0w8J2x5JdsmR3LLwl1CSbmmQHy5RGNcmmJlk1yaYm2aGUj4ULUSblY9lvG2t6Fj1LU7M065b+k+/vrBcNpGxzIik0KKGGqDkRVQayiqaAGrJekVBDVCqIXjGI6ktEDTv7xHyyZrZQV0uzjxpWpZwaLtI2aliTcE4NK9LoG2pYkPiy1BFIITXclCboCGGClpUFL6QnqSaZySO3hpJLQ+HF9CRq59SqSaa0TLZ+XZLX05OIJLckEkm5dCRzpIUOVd8j+vsek6Ug1Z6E/af7qCaNay981KSR3Wo2PWl60hSkoOy2KE2NokZp3kjxQupQhzrUoUb3klAnJ/nVZYl9joILvRkUNI+8jjQwglawqWGpJtmqSbYqUm71i0i/M8qt0kiv3ssrKaxU/+9Eq0e59vvZzAvPHK0nqUMdih+m6O0W1T2wtVgqPq+6d3ryqDBUdIW3ZdVepM20LGpVhFrBolVQ1ardpnCYEEA5pgAKPiYvnDYCRMgfJbla10Up7Tk)ASUVORK5CYII=!D%iVBORw0KG;)NSUhEUg?AMk?ABECAM)cNuEx)YFBMVEX:/9rp/G+1vilx/X0lcz61er3stnye8Hxa7v4vt7+9fruTbDtLqeyzvfGTbv96/T74O/1pdPV5PqObNPM1/biOa3r8v1gf+F7r/LJdMlPme4ujO31+P6SvPTg6/vPqN7UTCZ0?ADTElEQVR4XuzY2W6DMBAFUD/MjFf27N3+/y/rNogBJ7EodUiIuG8XoYETyzKKGB1NkRRiQZEuEnwtySpZJaukktJ2ACV/o1iyrMhwDXBhklWCIKWEf52aSD5lW4wmH5xDwlIQouw2UcU2x8FBcxg+g7zDnovFHwe4tlFaSVxqRWkdu6ZIlNDs1IN50swncZWHcGiCxFWDCYN5kE4C1KYYdeRYM0ESC6Y/HHGUxOnEEniYBBJL7J0lJSoG?EXdZYYJJb4hngh0WTZj9pxAIlLeT9JaCXfiCmiTfjqXHlGn8/bXvoGDJ9FwstvJ0r4HNI3fhpKJVGyTXlDAlwnS+hCjjHJez0un+F5ErfS/JL6bVwOy5CskpK3y58l9FQS5D5NYl5BAlwXKRGuSyGEUY+QaCIbfgsDS4KvFUDEAR2NCA5L2x/ogK7NKLD/yF6TpCdLRvxLFNzCEsYKcLdCV2YQ9hv2mwwluyzLPobvnHU5pZfopJL4umTMPKSXGPsqEoEDgIRnk+xqn1ESQY6jTPEwyTYf5HytObXeJg8kfOem/omX7DbHvM2X5x/zbVSSN3s/eN/k207iL323Ywe5DsIwEEAJrL2JELLsOPc/5k:I;ZWqE0oKbqLGeB/doKUjSFbW2SHKo1pGqVouA4ldEqqaK6oyebzKkIlguhNKwaJ3RSEn1OPJbMsJnEXhKXFpBdETIth8MJ.YlDheTrZNEtwzJlOC0iuskUVII95KY1GhzClmeSpiKbC1nAv+GpCHbqe18i8Tuldh1Er1XIhdK/K0S9U2SjYgrgGP3dDciqyWecgmSyCxaRgzGKZPBuAYJfKjywHo5eTuBEm6WBA+nau8ZVrA+kvW/m3cd95JYZlfPD4FxbRJ8MIV+EkQqVgy4Rgn+kOReyYJXRYn5IuFYgmvwhRIpK49ebTitoMTfIOGPlPwkPwmux30k8WskfmDJBkeNlHlEyXR0RLLxJRJg4DgShnchs1whiczsdrVwjoAE/kE4TqklkrosMd0nTysGLnj1vEvMk@DWHk9F3512iwk+I3Pb17df4xk+xrJZF8j8aNLXn4pEoeUBIeQiQeU4At2F6dpHUuSs7oCsoRHJZ0ltyWSsag6o3DJgD8mppDriaC+Eg)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?ALs)6C)ADNF3fL?ABaUlEQVR4Xu3XsW3DMBSEYc92O3AFjcAJOAEX4?Z4PXs3b+atWq2L3YX+CREsRBAB/gf4PgVBAHeyn7VzHyNw5Xdxr8M3PBbqdjBo7Gbnx44aueWNnTsXO66dmBxXTtQp64d6a5rB0zYjiZsRxO24+sydn+W8ZL5o94StrrHdv6o4aXsj2Zw5wdu8azs3a+ewKU1djO8VGKrEwOH7TELuKphj6jgXMQ+M6gsYo8BzkXs0UBVFfsKbhWxRwVlKvYOqqjYV3Aq9lhADRV7BdVV7AbKhO1Vxe6gysf+sX/sAu+Mtt1U7E3YXkC5ih3cKmIfoNIbR7v9zE8PHLLb+b8Hs+z0wCF7BmUi9gFuFbE3UDk07ANc17DPDCpNDXsDZ6Fgnw1cmgp2X8Chx+Xtbhlb1biIHQc6eGPwp+yNgbP2NELGznQZO9NV7XmEqv1rhqh98QhN+9IjNO3NIxTtS7vPCDF7KsXMyX0V+zfDQcRKyPVaeQ)BJRU5Er@ggg==$/9j/4?QSkZJRgABAQ?AQAB?D/2wCE?YEBAQFBAYFBQYJBgUG.sIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAPDgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH:BABEIAK4A8AMAEQABEQECEQH/xABq?EBAQE?wEB)))AQIDBAUGBwgQAQABAgMCB;MDAMJ)?ABAgMEERIFIQYTMUFRUhQVIjJxcoGRsbIHFiMzU1Rhc4KSodEIJDQ1NoSzwcPS4fBGdaIlQkNFYmN0o9P/2gAMAw?AQAC?A/AP6p)?E?AQDNQE?TMDMDMFzAzAzARV)AF)?AB?EzVEz)BBBQAzAzAzQzMxVAzBQMxVQ?ABXxnth2x8Y/0Ufyj4Ht1iuv8AZT9x7YdsfGP9FH8odusV1/sp+59BwfxuJxeCruYivXXxk08kRuimmeaIH0+xcVcvWpquTnOrLm6I6Hs8x7dAFEzEMwTNUMwMwB?EBBDNQzEMwMwXNFMwXMURVABRVQ?fnY/LQH1XBX83XPnqvVpH2nBz3ifHn0Uvcq9+AgiAKiZiAPB23duW9l3q7dU0V9z3VMzEx3cRywPW7WuVU4aqaZyndyeGHyvbLaHxm79er70fGdnX+vX9aV7Z7R+M3fr1feHZ9/r1ec7Z7R+M3PrSL2wxHXq88r202j8ZufWkXtjiOvV530PB7EXr+CrrvVzcqi5Md1Oc5aaVfUbEv13LMzXMzOr90PZTKvcJmqGYLmKZoLmKoqoqoqgCqCoAPl54J4r4e35pHyHtbu9an7WZ4KY74W156hn2uXutT9r3Oxdn3sDha7N2qmqqq5NfcTMxlMRHPEK9/srBV4e3NNUxMzVnu8EPYI9mg;giSqJmImYjwNvfmm/8AQ9ekes2z+S1+T1ofIMvh?AH03BmfxC587Pq0tPsOD/vE+PPoh7Vp7tM1QzFXNBYzFXNFWEV8P7JnDra3BarZna+zYu9m8fxvH011e9cXp06K6PhJzzRp8nY9mvhLXl+JYP6t3/6I1k9hZ9l/bleWrA4b/2fzBk+o4G8Nsdt3aNzC4jDW7NNFmq7romrmrppy3+MD7BRQEAUUEAHyWL9lXgBhMbiMDidrU2sVhbtdi/bqtX+5uW6ppqp97y3T0SItHsqex9X3u28P9LXT61IO9Hsi8Ba/wDn2C+lepp9MiPZ7M27sTavGdrNoYfHcTp43se7Rd0as9OrRO7PTOWapLzJVlM1R4G3Z/2Vf+h68I9Ztn8lr8nrQ+SZfCg?PpODc/iFz52fVpbfX7A94nx59EPaTLT3YD0kcJ6fi8/X/ozqfOe2GOp9v8ARuOE9r4Cr60fcmpr2w09SfO1HCbDfA1+eBv2w2+rV9jrY4QYS7dotcXc1XKop5ss5nLpHezty1XVFMRVnVOXNzvaq92/KfZ277YX61/BZbpfnWFtciNPc4WxyA+/9jOzo2zf/wDGq/aUCS/SVF?FJBEEkH8h8OP014Qf5ljP29YPS?/afwb/8AEX6n/HRmp+0zKsJm0y8Dbn5rv/R9eB6vbH5NV5PWh8my+H?AfRcHZ/Ea/nZ9Wl0fW7B95nxp9EPZ6m3u1hB8S4vzcAFeRs/8uw/ztHrQry8D79R41PpfZtP0F+b+zJsraePnY/YODv4riuyeN4m3Xc06uKy1aYnLPfky2+Dw2wds28uMwGIo8azX9yNvcYXZ2K3a7Fflpn7gfb8AbM29qXd3/Aqjf49AkvvFF?FRFQREH8icOP014Qf5ljP29aj0mQGQP2j8HH/EP6n/HZZqfs+pnUwy6MJMxk2w51WrHwdP1YacuJo6seZicLgvgLf1KfuGOxbPUp80MVYDZ/xejyREGlz7AsdSnzOdWzNnfAU/b966XPtbh+pDpYs2MPRNFmnRTnq5Znfyc/gad7Fii13NEZOmodmoqRp8a4PzgAFeRgPy3D/OUetCvLwXv1HjU+l9hqbfoC6hWtSNN5orSK0KoAEipKKygIj+WOGvB3bvtt23f7W4ribuPxVdu7xNzTVTVeqyqpq05TGXJKj5u7gsRZn3W1Xb8emaVHObYP2L8HeP0g/U/47ldR+wzU5ObOt0YNTs5k1OjDGtsZ1qjM1tImsDWDdNbLb0M7Exv/AEedy0S+R7SX/k87M7G2h8HHkqp+9NLHafE9X7Y+9idl4/4GfPH7pTe59q8R1J+x0wmDxdGKs1VWa+/p35TlERMK64XBXqbtEzRV30c3yvpNbb7VrUit01I060o02jTcCq;rKiSiogjAywM1RGTnqHhYjZey72fHYOxc8e3RV+5nWjlhNmbLwE3OwcHYwlV7LjeIt0W9enPTq0xvy1TlmxrR2qqZ1ssanRyWKpeRRUwTM58m93pcyqKsuSXVne5zTXl3s+Zo3sTqy5JXNEiK8uSfJChGrVpynV9osNRrz05T5t6NZN517t0stNRVVnySirVVVTPdROfy7hTOvPknzIqat4NU1DTrSjTtSy060yjTcCtQiqIyKkioyMsDw6+/q8MuLjcrnNiaq+tPncmOOliq5d60uTXHfIlu5XVNWqehz1OtPIVJqGJqbc3k7On8Y+jLzLCUcrti6o02N+ruu/5HklzmdMfr4irl07ujp87a3uRi/dijCW+7mnVR0ROe6PkXnZq72PA5U2Ll7Z9NFHfapno55a52dM6NzezInsWvl7+ejojpSvlasd6zhdfZOJ+FynTyf30L0JR30uEVYq3jKeMq90ziOad0rzMd1q3u9+urtjbpme9mNPlZ5nSrv2rc09sq9XR3PhyhF/32cbr7Gt8bMcdnPm3/wBDnK+SHm52+O/7lNPpll153ppmdU+F0eO3SK7USjTtQjUO1KNOkCtIqgkgzIqMjPO5jw6+/q8aXJ417lcqnByYqcFLPfV+RweXa72Erhltzltgd3NYeTrYV31sDshk2mlnJdSaTealN6KCqi6ScxSBWoUaphWnagV2oGnakV0hFahBRQEkVlkRiR4Vff1eGXF497PNhwqcnOp44tiN9fkeM8y13sFdLk25VUtIzu8juwsZdLyaamWopd6WV0urJk2JpaDI1BpFeNOMtZzqTUNdl2On0IrfHWeso1FdHWhTJvJobiGx1pVXWlVdaUV0gVqAaRWONt9aAa1U9MAiKzLA51W7fVhyGJw9ro+1wrVyqw1HTLxqzRHQzRa0TO/l/c8WprkSpxVzmlBxxFHuNXk9Lsy4cXHQ8ml4WqWoo+WXeldcukRX1pdV1y3E3Ot9jout0txNVM+FXRrQBoFeoxFr3WryegHKbIMzaUd8DTVx8f3zwo9vpbGopbRumlodKVV0pBuBW4BYB4cciPGuZ6jKBnjKul3w/eT4UeXTyNyjTOTmMuKsS8atWKni1tOdVLxxnSyrnfo9yq8npbRxih5LwGtDurfFuxk3xbouTrat7p8LTvzN8WKaAetvWe7n++YHLiQY4lR0wdv3eP754Uez0tI1FDY1pbGslG4gGoBqAaB4cciPHuUzmo5O2H7yfCjzKOSHRG0mGRiYchmXFWJeNW0zk8ZWZpYVi9T7lV5PSqOWl3peE3TS7K6U0O6t6HRcnW3RunwturWhVNAOFeF3oOVWDqByrwlfQCYexVx0bv7zUedpaRyvU76fK0zXyMRq60tOPGy3rudKrxrrarq1eRXSmp2yGlgGoBZoo6sIrE2LXQC0URRGQLKKkwyMsjMuVSsTDgrOThoVMnPQrN2meLnd/eZpHKInol0eNxct05O1KaZdaaXYydMnRW6Y3NujWSquR@kBkgmQMzRHQCaVRyv0975WmLnI5NPGUR1sd/PgV5Frkdx0WAVBoUB?RFSYZGWBmXPSrLlpVnJjQLDKrDSNaaZ5nRF4unodRqKIbZaiGxVDIDIEAyRUmBEyUYuW9eW9UmGJw9fTCscVDM2rnQM8S1Zpq1zu5lbop3O8QNLCCiq?CAIIKkwyMsqkwwMyzpBlVyVFyaGobRqGoFaRV?EABMkDJRMgMlDIFiFFyQAFFQ?AQAERUyQTJnITJFTJBcgXJRclyRWkVVUQ?BMgMgAFEyBQ?FFQ)AQUETJFQBAyAyBcgAVQBR)AEU)XI))EFBDcCbkVNwK?IoAK)AogAKBu)B:9k=!D%iVBORw0KG;)NSUhEUg?AL4?ACXCAM?ACcCRFR)wFBMVEX+:/5zqPy1sPGxe/v5M/9p3z6uZiRluWJ2PiVw9X+l2OU3PiouO201fPx6uDa4+fm6OTm9/3z+/7w+v6Vy+C93Pbb8/3i9f3L5Pjp9/7A6vuU0+3+yWzu8vLO7/z8/v/5/f/s+f72/P7Jl+Xn7fDX6vjh8PP17+vd7e7T1/Tu8Ovz9faf3/nE5PG6y9O15/rU8fyDz+7I7fzN6fDx+Pq3bt2cuMPN5OzM2uCIyeP5+/up4/r/ilH/wFJ/1fdrZtz9k/x4?AKyklEQVR4Xuzc53LjyA4F4GVUzjk45+zJu3vT+7/VBZuQQJ3phuiWNKqp2jNrWzU7Pz5AYDOY1B/HzT/5J2ceObpYN6l/jTmS3KP1gP61NYBas8HLcnUcXn52sByuBqYf0L6W778Cf7t/Bfu06/Rzr2wfo/3g6bvK9uXzT22K9oG3upHtnzNXFTsXYMOfHzC2AnZqfWn75eVl9sWx/n9O9rJ0Bf4ThHireffoJRjEHlrvA/cvAt+AHaeeOqLJ+/JNT+EfajVQs3baArjmtV7soO/vGPBf4gStId5j7xqa/t7iGiLPDSAvV/TY+P4mfeCZzRL68haAnzV+esSXd19wylchBfj5UY94B52ZF6XCZTlKwALA76WHzoPbM1gFvAMeftArdpTPZvSVh35C4H+Yf70RpQLwl9FbW2+1u6i9n+IoyV6B9Q0o46f6cE/1Ex7@CMdcvVQfVQj1PBTAbgPI1vZ5js6j10vmiYlU6wD3wXHO6C0X9Nj64t2Uftmswb0C7+sXzZb1INdgXsWARWgXzbfUs0/Qz2liEf7eGz+KxH+pxvZLGCAfs629uOqI3rEF9w7pVABFgBrKOnZrzQf8BRsPdsV+fsqrr/AFCoo+nE/sK39rMfe2/Eg/niwAiyA/hT3yOJ38PEIWfS8yQpekXvXgAXM6A+HCyC/rP9681FfnHk3/bRE3CUUtgHzRTl5bLfjMAjSNA3azOe4Jh8nx9F6Vf3BOuANoEx6k+t2mCZJUqf8m5LcEd/4eRXSm89rDurFDvTPH4ilBFyJrsOE2JJ62Dd8YwM/NB9GR/SAt8A9irAVMI4TYxd9+nXA+wCC3cV35Fc2XNBbWq/I59YoNbBfEiYGLUlOLgZ9nugnemOCS/bL7LhHh/WAV8l6oAIsoIv6eji7yFef/uAupaFKhQ+zg6Mjk2PHz70DBaxzT0Dknxg/gdpmrKD7ODqox9Zr9jdHtAoK/vvQAMGfhI8XlJMwycsBPjS/z3wefObDzG83l6kEFqOu4LGA9t2qsuTOwcfRAb20HuQesVZA3XWlTuGX6Vfi22ZH+FY9dJ7t3hE/J2Sgnno4IH755qNesf9LiVJBro+l9yq/XYqv61W1HvtbMO/o+vXw1APDV2aHl/we8AHPdK9YCkjrGj4J4jBNZPaBrzcf9WL3D/jV5teDk+wIum1KTJ6Yj7ODG+6EAnon/rlU3AWo220yox0X5YT8vHAKH2cHm2/XK/LSNRT8yqLJRz2UwVNQ1/g4O9J80IvdK5YCOqlth5tvtOkT6Q3ua5ikTwU+vbCOPuopoAd7o9HIvhr0CqJWIP55JztFqWdhfJIGlDBsPw74kNMcMF+eF/gc5+yA3o5vlIxSwDzLl043DMMgX4XqcXYK0OvRVmuaz0KCUsuBb52d4uTPkY/2j5eAfEp+BHHDx2ao52QT4x59PliT5q/5Tjx9bw0XpQuxFiD609PYtD8lvtFv8PlcHfn67EDvofOtRWNRqVSGjWq1+qECgL8+AQjqhi96CusVvj472Hzp9qLZbFYoTfLbYikL2g/8+yQbHtN8AvWNX/Dbu+9qfo4HfbXVaAwzf7NV1QN+Cvr57KWb1JOu8C8dfMuWa453ND7iGfZXk6a/ujVYAPKNnvxByKMP3aeofJwdXjVlclDPEXvZArD9hs/+8djodf6Zk4/Nd0xO1Ss/zz+2f5zzrd0XPxwtG73C1/X/dUb1y/gAn7tPfuZTVL5j9EkPeA7i9Vj8Gt9c8/Tiz4Rvms963MkCfntUv0wP85XuK+smdJ+bn+kfoigatUBPdMBrqa5L0PnSfWXltPBlnyuzQ/qHEfW+dfXt27erCPSA1/PpE/TfOT3MJ38JPqW48EyQH11FOZ8SaXpG6lksrO1H/ubKea53Hzbd8Saf2n5F+tz/XEU94v/SMhwuKFWVLwun2n1tp4t8krOf9Arf4GurrF6Zv+IMTQXGr3Vf+P0d+Vej59Y38et6gn5fp1Z7Ncl+cujv2A98ys58Xjdh06UmRavxuXpQ+KS:aOQ69f85/fsJ+ep81obanxZOX35uOybKW3SyhO1Wg1Fr/Elf:JfsvSs38++xvRVbbuV3V+7Vrls/9V+M+H5Yt/9MCrptp9hS+h9v9SvvHjHvfjs399wj9/Nd/4uQDgw/TQgpMbX+kV8L9:zOfHjP8h5h9XHmk/VlKtL+m8KUe4Osrj/+6b2t/VW9/zZu/392WMj2aX+V3YXj897r6MQ/y9emRqPzrJ9l0dzrm0Y84FT76db6ycB7iiHNmGx739FR9+Dg7/sf7+tkW89X2Vz34f78S3/dsq/y5LnbfcZ3hg/ynTo302/i7X2nA4UG/xMWvIV8OmA93paEnfNIjX/yYFX9YYyudm+DCyXjWK/ye0v1yV9mg+apf8umTxif9AvQyO8DXrrJRtvNFD3ytgMWK36oNa61Nvmm9co2T9Qq/7BVm4k+noyjKrt43m60RXOTk2P1DPqml1DYiZ7kwOsroA1+/vi8rz+lDpfK/dSqR+PF6G/LJT8mo+UuJ4I1e48/0dRP5feb31vwp6zlN7ZdypG6I3xVsPephdjx+u5I1f8yjD/5Kc1TiN6JV8onVgZfeu5r/oe7L8M8yPO+05uTHAp7VAvQw3t384uzglit898p5cdGbRJXohhf9EfMllRbPD8fLLnjWC1+fHYqDT2F+k5DRlPSfI9GLf8RbgGTX36rP4TdDODvIV+5pIP5DPiYtwYNfuR9DMeu3BIifu8964GdmbfiJfwNsTLTfO0rmwjd+WDZdo498Ss4fPyAYu7/n+3k44odVX+Pj8NPK814xTIoFH70xYE93U3G+dMOAEsbt7q0MD8wO8ik4/DOensoU1n1TUTTa971srA+W/zFZLoO24Rs/8inIx+nJ+ZWb7GaSKEev1ny27/1Owi9xQHL2x+/rlXMwYD3w1enpjSukf88yjZpRNJ22Mn7rzRYvOuKXWes5YWH6B47Z0fmTZuVmLLeU5Dvfyot+83JJtWNuJMH9O/lv20Hs4KvTM8j8nZuJyeqEN+NHbN/XPcyiZ7dMz+1tHCyXxLfPjt5+PuikyDljk7bkz5R930FOf2LqPfgp9P2xJ3xovnb/Pp/wFm8DPp1GU8cDH/54bsd9gH7CU8IJd/9c43PO4YSdK5BLJhyvpyfQz3bOaTcgsOCDOKaKlm3mnyuzs+XZFbyN3P/ZFQOXi4Ec7sjpPYEzeZaAmnUbED+bnT40X/ilnxxiv9+TQ8J/6YRpGr4wn/HypsbU8Pi+G8ftMeU2WD5C82F2yj63JY9teT+3lfljc59vPY2Jv7a/S1duqOH3fLhJeQxPQA+zc+Cn5rCwH/ndsclbzi/YuTPxMhhTVg+PnlwAH2bn0M8sov8lyPxJ+KPTyfSC59zGbYOXJ49Bz7NzhCdGc39KCYI07ZIe7BMeml6P6XKoDM0/zvO6mT9+efsxnwch68Vugvi+pflHe1raFGDS6Rg94Htm5Fkvx8nM5xzzWfXVZrKBL35cAONFj80/1icFYKHqJwWIHped3+ZzGhBv+Ef+lAz+/qFPySAQNP93/4yS3/8TYo7/+Tz/b+8Oag?YCCE+Xc9Dfs15BBS3j5PQEdq2lS+DNZ12XwVr2sS+iJk1+P0NdSuRetLwFmH2Vewswa5L8BX/X3/frD3BHD+2HcFuN7sOWQcn/bbWusA15FS6H9LZi8)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?ANI)9C)AD94GjJ?ADQklEQVR4Xt3awW4yMQwE4P+heLq8VJ7HZ5/nOtf8DS61QIFJCt0I5kKlKM1+8tpit/3XLiEBd7cedwfYVG63kG1/WpAIt0H8PosYb8G0Cp7Bi0nJGcRHqNT8GsWrQ19L4ggijpM7ZGD2d6Rm6ya5Q5foWJI26R2qRAeTtMmliaJEf0ty01kmmSjRfhKWSRAl2k5y0QxyR248ggTLeET0RpDWu4lmh5HcAbJlCElyAPzZROi5DDuKRMq5dHsm2WQNMFg+inQvy2dStN9+EkS3q+YfcHeTKEiqTKJK2EBqgiR22Hgtq/4eJH9A4u0A3X3j4QlSehOwh4Rfk/yccaflQ+XuIc550t1nb2RBDiHpiazDCwg9Q7GzbSPR1o9EiHAOR+Rw7iHBfnffdVAtp9OpfOXxLs8cQKKbrY9wdpGjgyJtluR/QYI9SlsoUj1NkvATdx5NmjsQWSTrQFVbRtBzNIkr4w5fonoNsO+CfVu/f4yOc++fxdrtQrRk8QvAajlvsBaJX1fLKRjlfGp8SpLPipJUNOk2UAs/HZr6SJDqComzjRQmlG6qWCRVtVBPpUSdxqRYwJcRkmSYFQWpA84qihsPjdF3/aOohUgNQ5LKmRwWno8qLxkPud27qZwi/pBkeYXdLBauCp56XnVW3H9TJIMWJQm0GioqkiVJLbQYD9ckC07OhzJNMmhRmtgZHVVfSArP@TN1JmYJJkUJSlqw1eSAlfM6l2Sd6x114XEqwDDMmmRhWiKRHKWlM01IKXQY5T/Exe6+Nre6WZdVHM+tNDZmJQyRcIdUjZTSZJ+ujDO0Xk+PFLytIggyRsvBkQdkALdlz1JyoRJUV5/PlvYkASgWwCsjYcyIOUhLUmqANCicHtM21KZ8Pge9xSJtWuqlXukFt4kyTL5VI1W4hlne0WilZKkX+Rp0WZStNIzJKhv7Mc+1UbnrZCUaAHz+tcp+QVipZeUaCspW+mJiQd77pL2v+Y3vFi0/524cV60n0RqUZK0aD+J8XwNkg/+om4Pvv75newjDS5PPAPCprKVpMOPI3l7JxJmSPw4Etqnkbx9Gsnbm5Fc33XvRmpU/yf+fqQewsX/5r8bKUIiZe4A21vmP24hqdv1SRFy)AElFTkSuQmCC!