Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » MoDisco » [Announce] Extended Model Browser
[Announce] Extended Model Browser [message #629] Mon, 02 March 2009 16:45 Go to next message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
Hello,
And here we are, a first implementation of an extended model browser is
available from MoDisco :

http://www.eclipse.org/gmt/modisco/toolBox/GenericModelEdito r/
http://wiki.eclipse.org/MoDisco/ModelBrowser

Finally, new features may be found in this patch :
https://bugs.eclipse.org/bugs/show_bug.cgi?id=266425
Re: [Announce] Extended Model Browser [message #652 is a reply to message #629] Tue, 03 March 2009 13:55 Go to previous messageGo to next message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Hi Gabriel,

Looks great! Thanks for sharing this.

In fact I'd like to provide an extension to contribute custom names and
icons to EObjects based on particular annotations in the respective
EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
do this, I would like to be able to specify my extensions not for a
particular nsURI but for any nsURI.

In the current version, this is doesn't seem to be possible as each
extension needs to define a specific nsURI (id). I was wondering if a
future version of the editor could also provide support for a generic
nsURI (e.g. "*") which I could use to define that my extension applies
to any nsURI. In this case I suspect that the NameProvider and
IconProvider interfaces might need to be enhanced to also support a
providesName(EObject) and providesIcon(EObject) method respectively to
allow such extensions specify exactly which EObjects they can provide
names and icons for.

Any thoughts on this?

Cheers,
Dimitris

Gabriel wrote:
> Hello,
> And here we are, a first implementation of an extended model browser is
> available from MoDisco :
>
> http://www.eclipse.org/gmt/modisco/toolBox/GenericModelEdito r/
> http://wiki.eclipse.org/MoDisco/ModelBrowser
>
> Finally, new features may be found in this patch :
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=266425
>
Re: [Announce] Extended Model Browser [message #669 is a reply to message #652] Tue, 03 March 2009 17:42 Go to previous messageGo to next message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
--=_mixed 00613A3DC125756E_=
Content-Type: text/plain; charset="US-ASCII"

Hello Dimitris,
I think that we could manage a generic nsURI ("*" is a good example).
And yes, you will have to implements NameProvider and/or IconProvider to
associate an EObject to a label and/or icon.

That's all !

Here is examples for j2se5 and C# metamodels (it will be submitted soon)
It is the plugin sources, I hope it will give you a lot of ideas :-)

best regards,
Gabriel

>>>>>> Hi Gabriel,

Looks great! Thanks for sharing this.

In fact I'd like to provide an extension to contribute custom names and
icons to EObjects based on particular annotations in the respective
EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
do this, I would like to be able to specify my extensions not for a
particular nsURI but for any nsURI.

In the current version, this is doesn't seem to be possible as each
extension needs to define a specific nsURI (id). I was wondering if a
future version of the editor could also provide support for a generic
nsURI (e.g. "*") which I could use to define that my extension applies
to any nsURI. In this case I suspect that the NameProvider and
IconProvider interfaces might need to be enhanced to also support a
providesName(EObject) and providesIcon(EObject) method respectively to
allow such extensions specify exactly which EObjects they can provide
names and icons for.

Any thoughts on this?

Cheers,
Dimitris
--=_mixed 00613A3DC125756E_=
Content-Type: application/zip; name="J2SE5ExtensionPointExample.zip"
Content-Disposition: attachment; filename="J2SE5ExtensionPointExample.zip"
Content-Transfer-Encoding: base64

UEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABBAAAAb3JnLmVjbGlwc2UuZ210 Lm1vZGlzY28uY29t
bW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1Ly5jbGFzc3BhdGiVkMFqAjEQ hs8V+g5L7s7WQqGH
3UopK1Soim69lpgM67RxEieJ6NtXS6WlB6G3+YdvPoa/Gu43rtihRPJcqwHc qALZeEvc1eq1HfXv
1fDhulcZp2MMOq2P4eonISc5FB/EtlbGsypOy1p56QCNoxAR3m0CpzOb9dEJ 43nz9jSdtI/Pk2Ze
/uWIEwprBxZXuYNM35cosEiarRa7fGkPAcvx7aLpD+BOlf9+KFgE4wVBcJtJ 0M5c7ojjJVUUc1ad
xgukzynkdIZXxF9wVf4u8BNQSwcIT8MO5M8AAAB2AQAAUEsDBBQACAAIAMeU YzoAAAAAAAAAAAAA
AAA/AAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5l eHRlbnNpb25zLmoy
c2U1Ly5wcm9qZWN0vZLBTgMhEIbPNvEdmr0LtYmJB7pNrPFmY1J9AIQR2SwD Abbp4xeQ1WxWEw/G
2/w/8/NNYNj2ZPrlEXzQFjfNNVk1S0BhpUa1aV6eH65um217uWDO2w5EvIcg vHYxdSf3giE30Fqv
CIheuwBEmUhMigdhibDGWCQgdbSewCkCZkwg3TrADaMlnG/JjYCxZXSssluR oQg6Ua+D7uXBgciq
yl2KcpTF+WawTsY0kE8FP/ISAP81Qkpwr4bMDlXTqcHojPIrrpNAHjnqNwjx 7n+xB/EOhv8JtDrj
kydeHDzU7g8xwz/1g9K4L4eZXpp+Cky+B2eZsc7Ez12YLuMZUEsHCM4UTln8 AAAAywIAAFBLAwQU
AAgACADHlGM6AAAAAAAAAAAAAAAARwAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9idWlsZC5wcm9wZXJ0aWVzK84vLUpO 1dNTsFUoLkrW5+XK
Ly0pKC0BCyRl5gEFgKReZl5yTmlKajFQ0Nc1xFHX089NXyeGl0sBFehhESvI KU0HmlCRm4NFMjM5
P68YaAcAUEsHCPbXGipRAAAAhgAAAFBLAwQUAAgACADHlGM6AAAAAAAAAAAA AAAAQQAAAG9yZy5l
Y2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5q MnNlNS9wbHVnaW4u
eG1stZPdSsQwEIXvBd8h5N6JVhZE0u2NCgqKoD5ASYcayU9J4nYf38TWNLtX y8rO1UDmfCeTQ3iz
1Yps0HlpTU2v4JISNMJ20vQ1/Xh/uLihzfr8jDcolBw8LrPXUE1Hg/rupYkd IYTjNqBJA0R2NbWu
h1kIvQ6gI9gLC8JqbQ1gJ4N1kDUeviqPKzCtjv70lzjVYKUJh/Jm+fpPzzWG No6iKoix0g0/Qxhu
GRvHMYOjCXu2dwnMnqq3+9VCSrBIx1dnN7JDt8uLJVTr/dF7vxToXVNWui6L sbzZ/PwsM/fzKGj/
SEaK2B8dzKQ+US4JfqJcHgv0Xi6l66G5cJa/zA9QSwcIL7KuLv4AAACAAwAA UEsDBBQACAAIAMeU
YzoAAAAAAAAAAAAAAABbAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29y ZS5wcmVmc5WQTUsD
MRCG74X+h4D30C0tSiEXq4Ki4qF4zybvLiP5YpIU/PdmqT139xKGMM+8H3cf MYgnGNHtRXd/2O4O
3U4cn09iu9k8rFcwjlKGTIwBjGCQ5RmcKQbVrVeRR3ld+bFFmshoj0/kwG2w GBEkBUcBb5kffwum
T4Wgewc790DRPKJ8OV2GyF51cj+XrKFm2PdotFMtQwafcZv1yZFuWecoWfR1 lFPAz+p7sGqyYF1u
yvyDk7VvzTQVspDNsbLBCy0AE8em46XOrYryahEKDdRcgznyXBqh+qXsxeyl 0T9QSwcIm7xeH98A
AAB1AgAAUEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABLAAAAb3JnLmVjbGlw c2UuZ210Lm1vZGlz
Y28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L01FVEEtSU5GL01B TklGRVNULk1GnZFN
T8MwDIbv/RXRzjRilXrptANIvSAVISpxz1K3eEpiSNyy8uvpx9qxSVw45OLH euzXKZTDGgLHb+AD
ksvEVt5Hj62rDMTFGa4sWcizspCJ/MTgRhIEk+B3EJYqMAIqZPKiHt5YfErK PBUWWE14cZS9PZBB
PbvINxK0wY8AsrEsh1YMmqQma8nJWSlhnSiPSYB0F9A1BnhYbs++hcX9O80l z4Nm7NTg+e84uRqi
V/hs0UM8q6+FLd5FVwVNHqRvHaOFG/Tn8N1hXrqbo+w3U5TNTZaBvIxH7DNh 1He/0PN2VX4C3Y5N
uevQk7PgOJs+JN7K9HItV41HKVDFJdX8pTxEP1BLBwivdX/zAwEAABoCAABQ SwMEFAAIAAgAx5Rj
OgAAAAAAAAAAAAAAAEsAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvYXNzaWdubWVudC5naWbV0UtPGlEABeCL ClqKMGKLiCgMKiJi
MXHRNiZNqIrRf+CySdO4Nl1Xvb5I+g+amHTVuJZuTXylunZXVjVt5FGBmWHm vm/aOz/Dky8nZ39W
VouvXr/TgAZ+LAGVo1tUbSv43sBVA1UNXDNQzcB1A9XVNlHNxHUT1U3ccJGG hRsW+WuRBws/dEiz
Q1ou2rRJ06Ytm7ZVO6Tl0LZD2g41HGqqRsxE1ETMUgMzC7OOi9uY2Zh3CLcJ dxTKkUtgyjEViAnM
BGGCquaCuiTjkgrJhGBCciGFaimFlP8eYXTa4/GDLZBzn3A/Ab2n2x64u7cP vSVfqdvb5fP1dHlh
oP9JX28gEOzzP+0P+mFIGwx90wbCoXBYC8HB5+XyybOT73BkJDIUiw7HIpGL M5iMJ5KJeDx5MzZ6
A1Pjegr8rOgTkymYSafvMndTk7/TUzA7O52tVGZe5LJwLk/nSF7wPPxw9bVw WQzszG9cHeuLB8n4
y80/21GzuPwZfrR/nS9eBxNvPtWM88vDYOEtBOvD70trem4/+mU1o4GF/1BL BwguUFIElwEAAGAC
AABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBzZS5n bXQubW9kaXNjby5j
b21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvYmxvY2suZ2lm xdFLTxNRFMDxGSlY
UHSKrdDEQusgLVCUWsRCQVggSGM3Ju5150JJE1dulFxrUlwYRWPik7gxCKyA D2AiMQbjxo2siK+0
TEvbO6/7mjuJM5/Ck1/+OWd9ZmanUyPXJUESPl8VZm6uXLq1Mju3mplbvZxb y+bW7r7Ymne83Fr8
8O3Nd7RbhLtF9Zei/Va0PxX9b8Uo1VGpjosQlyAqQbwH0R7ECkQKxGVolp1T dWBFRYqKyy5S1nBZ
IxWN7Gt4XydVndRctGqQqkFrBq07NUnNpHWT1E0KTaq6GERMRVRFTHMWzDTM dJdlYEsnTCeWQSzT
QS3k4phamHLEOGGcOrU4ddnMsim3GeeM2xa3uVPb5ra9tPnj/4pQj9gi3BPi gjPuT4SDX+dbwP38
A+AvBAptfl8gcMznB6HOjvbjoVBXe/BEZ1cQhCPd4feRk3JYliNh0N2zsbF+ an0TxOPRWFNDX39D
U3+0tw8kBgYTojSQOCqeOb0NkufOHvEkk0PDntbh80kwmkoJzaOlkWahCsYm 0ocb0xPjFxoPTY6P
gbwn2HHt02SrCLy+2PIXSZ6WvLnYz4+P5amCNwOmFtoehZ7k/b03Fp72ZJ8P 3tE824vR7Nu4b+hi
5tmrK8s7r8Hth++W8gdEIf0PUEsHCMrtu33mAQAAbgIAAFBLAwQUAAgACADH lGM6AAAAAAAAAAAA
AAAATgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3Iu ZXh0ZW5zaW9ucy5q
MnNlNS9pY29ucy9ibG9ja19jb21tZW50LmdpZnP3dLOwTBRgEGBoEWWwabBx bXMNnxieuyA3b0Fe
/er6+jX1retbWze09m7t7dvat+TIkqVHlh6+cfjIzSO3nt+6/eL2q4+vXn16 9e3nt++/vv8nBBT/
CToXpSaWpKYolGeWZCi4e/oGMOgwAAHIAQysjgmqfSmZ8zJWrepvcHFo2WMY tPXqIhfWAA+b+SrL
V/DIODJvWG5ipcbIpVs0Q27BFLbEpWtVJFbnuzJETgx/saXqLB8jgzUAUEsH CB38ywq5AAAA0QAA
AFBLAwQUAAgACADHlGM6AAAAAAAAAAAAAAAAUAAAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9ib29sZWFuX2xp dGVyYWwuZ2lmjY+9
LwNhAMbfIr1WDMck4utsmmtRIhUGEvW5YBAj20s6iIjNIOnUodg0IhIi8REV YhLCwFADFjFbrinN
nV7u7r338+h/4Mmz/JJn+D2j4yOxvgUZyOAdAMaEEJ6NKKF8NHG6f/2BqUCY 2S6zEM3ryLCI6VBN
R4Uft2jiifWryXIv8wbSdKfwg3SLFE235FDDwpbLTIcgwm2XEiYw5Vx4jAvN QLPp+0LJzRvOt+nq
FtYMp+QQy6W6TTATiDDKBWace397XnbyPPCPKLjKB0A3UMtQ/gT8qYfM8pja sPm4vZJLpKfa4oc9
J73D06mDr+Otm3lpUV2LVSdXiTm4+/b1FNzLzalw4PP6OTEDa+prNpJL7YEm GGoIwWAAVoQqJAlK
YRjO7IQb1Q7Y7IctHUdVlWeKEslmI+DiXOmKdLb6or67m+jtfVSurX2se8rl ZHns5TU+BPp/AVBL
BwguWjv2VwEAAG0BAABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEUAAABv cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNv bnMvY2FzdC5naWZV
0WtIU3EYx/EzszRTU7HQ7nYBLbEoQTfnNXWpqTPL6WylThIzipQgCFKOM4dv rNSp6QIrikmLzAu+
EQaaDcK7oZgS2nIXnTvn7JzzP1fq7GU/Pnx53j+yrMx4cXkQFARNPoEkRc0S RXNCsVZarE1StiSX
tuTceZlb1ZZf3S6v7pDf7Sio0V0T3NMVenSW1L4qqe152Nz/qOXj07bB+vZB WDes0Q1pOkeaOoeb
ukZa+8Z0703dhvHu/vFe46TeOPHa+FX/afLNgNkwOmUYnf48NjswNqufJ82L 699/bEwtWaaXfk8v
W2ZWLLMrlrlV68Lq5qKHdWHNtvzL/nN964/TvbmDW12k1QU2EWBFSCsCbAhp Q4AdIe0IcCCEDSVt
KLCjpB0FDhRsoYQDpZwo6cCAA6O2MGobI50Y2HZTO27K5SYRN3DilBOnd3Da hdOocBC0i6ARDwYl
aFQoSaMkg5EMChgMMG7A4oDBKYagWIJmSQ8O0CwQynAUw9FCWY724BmWpzme 4TiG41mO54TyPMfz
f/9fBO0t8oPqoWhImOcnkM9aQyTcqGmCpdpErUQqTkxMEEvh9IyU5KT09Mzk 1MsZmamwLOv0gdx3
OVdloWeyZHDuhYB4+Uk/0Z7Dcf6xcrgo7GjB8eAo2bmQG8cOXoeV+88rfc8q lEpFScw+BazanaYS
Zatu3b5ZesVLBau989V7o9XlFWXlebsq4MrAi5WnTgyZQtRp3eH+Zt+0toiJ 8EsRoVC8ad3fN6DK
22iYK8vuia1J+fICMz07lPpgtWv0+XzAkbj7Mb0NUZGBenHdhtlQ+C2vV1Ln mAhu95nRv32Mh001
xrb2fdB4iaCEf1BLBwjLRgakfgIAAIACAABQSwMEFAAIAAgAx5RjOgAAAAAA AAAAAAAAAE0AAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY2F0Y2hfY2xhdXNlLmdpZnP3dLOwTBRgEGDYzMCg59XavPrM6mN3zt17 LZG6wLB0lUXVWseG
jaG9O9NnHihccKRg1u7///8zwIDiTxZGBgYeBh0QB2QGA4vBhJOeq/davOap ir/N0nLpxIyehWva
PGaeVFC/9Oguj9IbjjS5xgcPm5RE+lgmFZ3MiVJisAYAUEsHCISyhwWAAAAA gwAAAFBLAwQUAAgA
CADHlGM6AAAAAAAAAAAAAAAAUgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2Nv LmNvbW1vbi5lZGl0
b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9jaGFyYWN0ZXJfbGl0ZXJhbC5n aWZ9j7svQ2EAxb/W
1TYxtLYqqk1EohqKSjwmCdqSCAY7m6REJEaJwWDwDJPFa0FiIER1YWg0FiIi XotFm0Zzb3t7e7/3
d+k/4OQsv+EkvxOKDHR2TTiAA7wAwJgQwihCSigPRU92L14xFRCzImJpGSoa UXWakmEmh7IqHlw4
Hyr1LK3AlKz/qDiTg7JGsirK61TRsIaYqhNIeBFRwgSmnAuDcZFS4PjaTSaP 0oqeLeAfFckaTil6
XicaonKRZAsIMwEJo1xgxrnxt+IlM8MA/8aLJRMAHcBfgtInYNm+3ZkN+13r ic25++ja2IF0WH/c
1vcUOfg42oh/Wab8M8GahuT3mKdzeHsrPt/dOFI19DnZmx9d9FdV+5wV05LT KUnlviWfrdbmWq51
rZTbzE1mq7WlZq9lz7q6u9/c2lrntrjddaunZZdebyAWC4DrK297oM1jCpqS ieDdfdDucDxUPj4/
2+3ht/f+XtDzC1BLBwhT2iiBagEAAHcBAABQSwMEFAAIAAgAx5RjOgAAAAAA AAAAAAAAAEYAAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY2xhc3MuZ2lmc/d0s7BMFGAQYGiRZPj799+v338fvvzy9cefF++/v/n0 07tuk1ftRq/aDT71
m71rN/o2bPGp2+hdu8GvcYtv/eaAlu3+zds+fP3lD2S0bvdr3hrQuj2gZVvB giP/sQHFnyyMDAzy
DDoMQACyk4E18YF6X8rPRPESX4HUyOCe3okJ93cE9HI//O/Q1ByuIdXfujBD MdNqvtDTdMMVUeuZ
XyofeFvF3CnI7KA3m5Gt0LkwQv4el0uzYtutl0ptsl3/Df41NDaUVvvVVrX6 1ko09RorKTJYAwBQ
SwcIlnUmMdcAAADkAAAAUEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABUAAAA b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2lj b25zL2NsYXNzX2lu
c3RhbnRpYXRpb24uZ2lmc/d0s7BMFGAQYFiqyjCzRNirdoNX7Ubv2g3eQLJu k0/dRp/6zb5A1LBl
XqWYf/M2/5btAS3bAlq2+7duD2jdvqxRammT1LImqXVd8lsnKm+dpLxrulrB giO/7zb/eb744csv
L95/f/Pp59/P5/9+Of/h66+vP/78+v3339/3f//++09toPhP0LkoNbEkNUWh PLMkQ8Hd0zeAQfEn
CyMDgz2DDgMQgDzKwFZxYH6Bh0hc24y2xQcLbBQE2B4bWf0Tm70mLHpjj860 +CZnvcma8/uPf16o
YvWhIkbpoo9S0oS68+EpIk6cis0trYoMzhxK3T29SuzObCqTp0xVYZ3IzMI0 i2keCyMz28SapVWL
ndiWLV1hz7Z+w8YNS1ZXr121dbnHpj0Szo4M1gBQSwcIufZQCisBAABwAQAA UEsDBBQACAAIAMeU
YzoAAAAAAAAAAAAAAABIAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL2NvbW1lbnQuZ2lmAXYAif9HSUY4OWEQ ABAA4w8AT4xPUY1R
VI9Uf6t/ga2Bg66DhK+Er8uvscyxs86ztM603ure4ezh4+3j5O7k////LAAA AAAQABAAAAQr8MlJ
q704602ZeN6GFM+4EcmDbkHztJoDPPKmDM+9GcfDb4LFI8gpGo/ICAA7UEsH CDLpT2N7AAAAdgAA
AFBLAwQUAAgACADHlGM6AAAAAAAAAAAAAAAAUQAAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9jb25kaXRpb25h bF9leHByLmdpZnP3
dLOwTBRgEGA4wsCg59U6f8v1HeceBXRuT5yyr2/zxSUHb566/fLWsw+iSfPE U+aLJ8+TTF0glbZA
Jn2hbMZCucxFClmLjUpXJU3blzbjQOmiYxVLjvdtvjBl++XFB29uOHXv//// DEhA8ScLIwODNIMO
iAOyk4E18oFa3xKJKRqcczKmrFMNcVBKuP/mW0bHtykGE5WLNdJkFj9Y1iho MXdGW6bIQol1EcxH
Q5NC9BIKWg1VNdWmfXGZeKZTjPlQAmNJvtAkl7dpm4tfa2p4NSqXtagqMlgD AFBLBwizRM552wAA
ANwAAABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvZW1wdHku Z2lm1dG9TxNxHMfx
X/VqgZZrD6kKFXo9KhSotWjiQ9QBUC4MJri7gKJ1NSQaF8mvPjBKnByMDMYw A4Oj8Skd1cXFwYHQ
XqHt755+T/c7492f4TevvPPZv/r83MVLiymQAt908OYnrncCZA+ROsJ1RBoI NxAxEDaCbeKGSQwT
GyZphmjTIk2L7lv0wCIHNm3ZtB1iLYe2HNZ2WCeoS9su67i04zIU4qbLTJcj zBDmJmYm5lYwCLcI
t0OeQ7hDPJtym3oO9dwA83BIEOYRJjAXhAvKBQvqCRbyuecz4XMhuPA94Yug vi98/+3Or/9F7q8y
+2B5cWX5jvrw/kpF1edvLIAckyI94AkoguDCR4HY11UAq0+fQWktunZIikSj hyMSjCe6Ykfi8d5Y
d0+itxvKyT75fTKlyIqSlGFf//b21tGtHTg4mD42cPzEQDr96SPMZoazw5lM tjZ0sga1U6qW17SR
0Zw6OqbBiUJhd2J3fGyvMA6L5cliabJcOlM+PVUqwnNnwT3xamphIzF9vvL7 w3p1biZzofJn8+bs
d3noyqNbXzart/Xpq6uC/visv1RnHktMefdiQ7v2vJZfyt9df309YeT7u8Dl f1BLBwjcuMFXxgEA
AH0CAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEsAAABvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvZXhwcmVz c2lvbi5naWZz93Sz
sEwUYBBgmMjA4J6zav6W6////2dgYFD8ycLIwMDEoANkM4DkGZg0p/SvPP2W n59DqaHk7NY7AYah
kcsrwzWCxAT8Fv9OXbmsj/3lAz6pr/+CGBisAVBLBwjA4n8sWQAAAFgAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAE0AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvZmllbGRfYWNjZXNzLmdpZnP3dLOwTBRg EGBoYQABidQFhqWr
LKrWujRtdGnaFDd5T9yUPYULjvRtvtC3+WL/5gv9my/O33d9/r4bm0492HT6 /qbTDw5de3742rPD
156fu/eaAS9Q/MnCyMAgz6AD4oDsZGC1e6DeJ+8wb0XnstTdkxz+bNpsoWBh d8bj6W8OOVejhT5N
+s4sm2pk0ljar1zUOMPC2ea0UeAMU1OBRYD27PMvIjkYrAFQSwcINWydcqkA AADBAAAAUEsDBBQA
CAAIAMiUYzoAAAAAAAAAAAAAAABSAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2ZpZWxkX2RlY2xhcmF0aW9u LmdpZnP3dLOwTBRg
EGA4wsCw6dSDw9ee922+2A9CF+bvuzF/3/VNpx8cuvb88LVn5+69lkhdYFi6 yqJqrUvTJpemjXGT
98RN2VO44Ejf5gubTt////8/A16g+JOFkYFBlEEHxAHZycBqlqDal5I5L2PV ujU3PQzuLJmUdFtI
VsFzwhONE41GLC5B/U2bEgqWSExudHBIWCLWk1N28VXV/tUCDNYAUEsHCB0R ExChAAAAuQAAAFBL
AwQUAAgACADIlGM6AAAAAAAAAAAAAAAARwAAAG9yZy5lY2xpcHNlLmdtdC5t b2Rpc2NvLmNvbW1v
bi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9pbXBvcnQuZ2lmc/d0 s7BMFGAQYHjMzcDo
VqWT0p3bvKa8c2N2/9Kmydt75+ydufTwknUn1207u2X3xf+oQPGfoHNRamJJ aopCeWZJhoK7p28A
g+JPFkYuBn4GHQYgABnMwCL34aTn6r0Wr8/+VpNjLHExqHN45evVJONmyJGd ez+OhcEaAFBLBwgC
0BJ3fAAAAIYAAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEYAAABvcmcu ZWNsaXBzZS5nbXQu
bW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMv aW5maXguZ2lmc/d0
s7BMFGAQYFjIxOCes2r+luv/wUDxJwsjAwMTgw4DEIDkGZi0pvSvPP2Wn5dD qaH06J0rTSsDp7tm
PqtY+PS4l0r5LNGcs/GeTpYsbv/2azAwWAMAUEsHCEy5xnlXAAAAWQAAAFBL AwQUAAgACADIlGM6
AAAAAAAAAAAAAAAAUAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9pbnRlZ2VyX2xpdGVyYWwuZ2lmc/d0s7BM FGAQYLjKwPDnz79/
//5//f771++/7jmr5m+5/v3nn+fvvr//8uvTt9/P3n1/+eHHm08/vWo3eYPQ xufvvz979+31p58v
P3x/9+XXm08/Pn77/f7Lzy8//nz69uv7r79ff/z+++//n7//nr3/Hta3/+XH H8/ff3vz+efrTz/e
ffn57P23j99+ffnx+93XX28+//j559/3X3+AGn7++fv3/3+QU/7/ZyAFKP5k YWRgMGDQAXFAfmJg
63GYUeChI9V/pL/oZE6d17xmJZaVWjYXTyzcNaNh1wPWDJ04HQklt6UOKwzc hMwUTaUUPcQtW52S
vnNqiEuqiXHmcIqJteeoqRVJ5KhLT2CRnsjExqYtlaM9K4dtrpSWrm4RS84y FhbmHFlZnQ0bWBg2
rpdl0dGTYdRn3L9Hf99BfV4+vmP8x0+f5uX1uHDR1ZHBGgBQSwcI43hHklIB AABvAQAAUEsDBBQA
CAAIAMiUYzoAAAAAAAAAAAAAAABKAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2ludGVyZmFjZS5naWZz93Sz sEwUYBBgaJFm+Pv3
36/ffx++/PL1x58X77+/+fTTu26TV+1Gr9oNPvWbvWs3+jZs8anb6F27wa9x i2/95oCW7f7N2z58
/eUPZLRu92veGtC6PaBlm0LGgoIFRzYcv/kfFSj+ZGFkYJBn0GEAApCdDKzF D9T7Un6mipf4CqRG
Bs/pnZhwf0dAL7djBkvPh+fFH7ikfBYuSMnicrvo1DQxYnW455fNEirszDwS iyVz5Bsb1BSOrLjc
KcjssP42I1ulc+EN+X9cHLw8RWFt7WEtSjwdvV3yPBMnTZ7U2tve3zO9rV9y ynxjJUUGawBQSwcI
75CkNPAAAAD2AAAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABFAAAAb3Jn LmVjbGlwc2UuZ210
Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25z L2xvb3AuZ2lmc/d0
s7BMFGAQYLjKwPD377+fv/4cv/b064/fP3///fP3n1REd3zXutwpW3dffLzv 8pMj15+//vhtz6XH
B64+PXTt2ZHrz56///rh688vP34/fP3pydvPrz99f/Pp24/ff5+///L607cP X398/fn7y49fP34D
Dfv359/f//////0LIhloABR/sjAyMCgz6IA4ID8xsNUemFjgoSPVf0IlMIFD cpa/eoiBkILGjTVi
3Qlh+zo3WPxZa2I881jx3rwUpYXNbokXInR4fh9NCsjgY5Pma5SWFmpvZ+OT ZmNvaunpEOqSZlcU
luHPYRP255dl9pOQY+FexsYoJyDAspYtjEGBQYmBdZu8/LbY0IC9QX4hXocO OTJYAwBQSwcIxehj
ARkBAABgAQAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABHAAAAb3JnLmVj bGlwc2UuZ210Lm1v
ZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL21l dGhvZC5naWZz93Sz
sEwUYBBgeMbAcPDg4UWbrm0/fLdz4cXVu++s3nWzbcHFVbtvbj54e/vhm/tO 3q2cfrJ14YX2Refb
Fp7rXHJx7uYbK4Cyh+/sO3m7fPqJtsXntxy5vfnwrS2Hb6X1H9196v7h8/dT JxxN7jmQ0rO3bdn5
zUdubD1y3bV+n0f9fvf6PR4Nez3q9gS27A5u2ZPYfzitZdmCHZeYLPNdG/e6 Ne51bdjlXr/Ls3GP
f8uuoNZdiRP2pbStTG5ZOn/XVQbbYgabIgbrQibrAmabYrOStbZVGxxrN7s0 7nKq3eratNulcYdz
zUa/tp2BrduD2nYkty1LaV+e3LI4tW1pSusSBpsCBtsCBut8Bps8Bts8Butc RttCJps8Jpsc25pN
AW1bk1oXJ7ctSWlfymCbw2CdYVK+5v///wy0B4o/WRgZGOIYdEAcUJwwsM9q iGtqbmlta+9o0g9Q
64xztogLlI6J81dtM4gW9teWMvflClJqDRGTUBTi4GQSVwhoC2FhNfU2YxcM aVUJkBfw9LHSimLk
99Nr9uUTZY6wYQjU4uVhC2o29JMU8YqyjjTllvF1ag0wkfXw9pDTtG7zc1V3 0wg3djcyDm4NC7AP
tXNc80ThEUvHQjnfPQ4vDx0K4nZXLlIodrnorcBgDQBQSwcIyx8S6uwBAAA9 AgAAUEsDBBQACAAI
AMiUYzoAAAAAAAAAAAAAAABSAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28u Y29tbW9uLmVkaXRv
ci5leHRlbnNpb25zLmoyc2U1L2ljb25zL21ldGhvZF9pbnZvY2F0aW9uLmdp ZnP3dLOwTBRgEGDY
zMDQs/SSe86qw+fuprQtY7DJk0ldZFa+Nqp/d9asQ10bzjP49ST0b65deuQ/ GDAwMCj+ZGFkYOBj
0AGyGUBmMLC4XTjpuXpq6xTvqUpMDwv7ihheLCyQNBBgXhDL0iTgWxsv+Ylv +9mjKRpqEir8Bx0S
dJhU3NOEV7iph2qbnX4btzPc3exNxSRdQQZrAFBLBwjiTXt8mQAAAJkAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvbW9kZWwuZ2lmc/d0s7BMFGAQYNjMwPDh +/+33/5//vn/2ef/
ChkL4qfuuPDsw38wYMAGFH+yMDIwcDDogDggMxhYbAROeq7eaxF8yPrkEcUu +Wdzl7tI5Lze9NTq
jIkj/8bCx+22zxsTFhhosRQ3pCSeVHnGcmFFiIBzpOmNNWVCjAzWAFBLBwi5 cYmEfAAAAI8AAABQ
SwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAE0AAABvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvbnVsbF9saXRlcmFs LmdpZnP3dLOwTBRg
EGC4ysDw58+/f//+f/3++9fvv+45q+Zvuf7z97/vP/98/fHn+bvv77/8+vTt 97N3319++PHm00+v
2k3eILTx+fvvz959e/3p58sP3999+fXm04+P336///Lzy48/n779+vvv/5+/ /569/x7Wt//lxx/P
33978/nn608/3n35+QzE/vH915/ff//9/PP373+gyr8gF/z/z0AWUPzJwsjA oMugA+KA/MTA1nZg
WoGHjlT/kf6ikzl1XvNYlFVWGtlc9Fx0a0XDrgdsGTp5JjJKx58uKuvRUHY6 qBI+wWgazz2nTRFP
VIpYmlm5JYpYWbiLpJtYOYqkOlgmsDL1qRfNZO2czd6nWcTWuaiIuUhWVmPV Kg2G1StltTW0ZBh1
GHdu09mxW4dfQOCA4MGjR/n5PU6ddnVksAYAUEsHCMwi8HlAAQAAaQEAAFBL AwQUAAgACADIlGM6
AAAAAAAAAAAAAAAASAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9wYWNrYWdlLmdpZnP3dLOwTBRgEGBYxMDw 4fv/t9/+f/75/9nn
/woZCy48+/AfDBR/sjAyMLAz6DAAAUgtA7Nxxa47/wyMnLQ7j2TULvw730kk JXPSXYs1OdZLWrUP
O+beZ+R5U8N/oGlBgYZHY9+kJUU7PRgYrAFQSwcInYdPb20AAABuAAAAUEsD BBQACAAIAMiUYzoA
AAAAAAAAAAAAAABKAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL3BhcmFtZXRlci5naWZz93SzsEwUYBBgmMjA IJswJbJ70////xkY
GBR/sjAyMDAx6ADZDCB5Bib5Kf0rT7/lF/cIviWSJmqVwFskN6nQfXlOx66g i9zH/RgZrAFQSwcI
5ccSmE4AAABOAAAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABTAAAAb3Jn LmVjbGlwc2UuZ210
Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25z L3BhcmVudGhlc2l6
ZWRfZXhwci5naWal0dtLU3EAB/AznZdUwgUlmZSZ5bSp82Q52zLFcrq0UlOk XgxfBHvsueQ0Yxi9
mMwtsAsRlGB0UVtQD5UaBMaqvdiQMJhnm9vO/fwu5xzqnL+hLx++fN+/7q4O R/PVYqKYWB0jHAO3
nUM+15Cv5fLk6SuTvWP+Pt01f79h5sa9N+PTC5R/waubWZqYWZwILAXnPt+f W56dX34wv/Ls7drz
0LeX78OvPoRnf8jh9Vj4V+x7lI5E6Z8b8cgGvf47Ed3cjqWFrYxIMzLNgC0W 0KxMsyDOynEWJFg5
oW9OjnMgwckJDiQ5OWk03ObklL55kOThNg9TPEjzICXAtAAzBsQKIC3CtIgY ETAiykgwIyFGgoyE
WAPmJMRJmJURZ8C8jDmAeYAFgyICLAJFgIoIFUmHFBkpwKACrEKsIr0VFRk0 rGhI1bCqYlVTVE3V
W9NUTfv7fzmIzKYC4iZhI/QYnxB5kfG91C3vBFXls/oOV1VarUcqq6i6+qM1 1XV19hpbbb3dRpG7
C0kHeexEE9lUsIekyvIOOZcczuZQRe5+aqfFdaqtpbXN5fqyq4jaUdrh7mhv d7vbz57Zl0OZGzo9
3R7PuZ6uzp5GE5V98kJvhrl4PnM8i8o/0Nc/QAyqg5deXLeXx005tqHXRGvI vmnOp1rL4Mend/y1
Je9GLVPl3kf1JaXj6M9KYWBquHSYrbAWBRtGPvmq+1e7A+TIV69lOnct+HA0 AruzG+8+fuLNMhHO
f1BLBwjwm0d4MAIAAHcCAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEgA AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvcG9zdGZp
eC5naWZz93SzsEwUYBBgWMjE4J6zav6W6//BQPEnCyMXAxODDgMQgOQZmFSm 9K88/ZZfkEOpIX3z
xgS13JhHz1tj3YMWGshFnpyqmOr6rfc+K4M1AFBLBwjJv8kIUAAAAFMAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAEcAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvcHJlZml4LmdpZnP3dLOwTBRgEGBYyMTg nrNq/pbr/8FA8ScL
IxcDE4MOAxCA5BmYVKf0rzz9ll+eQ4kh5aDJtsXccveWZz76xqnYPk8q1Fd3 c+TF3uc+jAzWAFBL
Bwjm/UVIUQAAAFQAAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEQAAABv cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNv bnMvcmVmLmdpZnP3
dLOwTBRgEGDYzMCg59U6f8v15tVnVh+7c+7ea4nUBYalqyyq1jo2bAzt3Zk+ 80DhgiP///9ngAHF
nyyMDAw8DDogDsgMBhb9CSc9V++1eH228IXQB8/jSXLTNTRdVhs46ByPN7rj aaXk1B+h5XnQQSfC
bcGSopmdDAzWAFBLBwjH/kIofgAAAIIAAABQSwMEFAAIAAgAyJRjOgAAAAAA AAAAAAAAAE8AAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvc3RyaW5nX2xpdGVyYWwuZ2lmc/d0s7BMFGAQYFhqwgAE7jmrvGo3eddu 9K7dFNa3/9m7b8/e
fX/+7vuz99+evf/+/P235++/v/wARD9efvzx+hMQ/Xzz6ccbIPn557svQPTr /Zef77/8evf118dv
QPT707dfn779/vr995cfQPTn64/fX3/8+f7zz/dfQPT3528g+vcLSP4Bon+/ /vz78+ff77///vz9
++fvv7///v8Dgf9//xMFFH+yMDIw2DPogHwC8hMD26QD8ws8dKT6jzQVncwR E+I6knhwhZxIIPOi
Vxk2uxKOJ+uUWahNaXDRnemgJFDKwHQwhElsz9Ggm+zvJMVlpBhlW2WlO6UZ W6SklBQVFSZNVpim
OEFeTllZRXWuygKVhXNVtTQ11bTVGbTVGNRWaWzW19fdtk1XZ/tWfT1dYwMj Q6OjhwyPHDdkYmE5
w3z24kUmJo9r110dGawBUEsHCBK20Y9QAQAAdQEAAFBLAwQUAAgACADIlGM6 AAAAAAAAAAAAAAAA
RgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0 ZW5zaW9ucy5qMnNl
NS9pY29ucy90aHJvdy5naWZz93SzsEwUYBBguMrAoOfV+ufv/5+//7mVr3n2 4bdnzQavmo0+DZt9
G7bcfv752YdfLz/9/vj9799///1btvu3bAtq3xXUsSuka29Y7/7Q7r3hffsL 5x4rmnts6eF7x++8
P3X3/c1nnx6///Xs4++nH369+PQ7YsLBimXnnn389fbrn4/f/xTM2n37xaen H3+9+frn559/X3/9
/fPv/59///7//89AFlD8ycLIwKDLoAPigPzEwFZ1YFqBh45U/4kUQeYsq/kK PQLCpwrWReSoqczN
EJGdGPHw4xw/Ft+lqj+nMBQ4vHRerq/xxkp2w/r70QIaTRoMzS1NyoK6fDy9 +YWFPCr8uhxa02fM
YJjBrssmrblwERMD00JpVl0JMTVG3vXa63UYOcWDVjHv3LWbebvXfi9HBmsA UEsHCNFKqf85AQAA
XQEAAFBLAwQUAAgACADIlGM6AAAAAAAAAAAAAAAASwAAAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy91bnJlc29s dmVkLmdpZsXR30tT
YRzH8UdbqWvVmttSm247brU525ybp01NSFaRgWHRRZf9AxHZTTcWjxVDuqgI iiIpkP6A6jK8MIi6
MCRQ7KKgsP04bTvnbOc8v85zqHP+ir68ePO5/545ezqXv+IGbvDxEthMJDaT qa1MZksUtwuntmfP
f7tw8fvVaz/mb/x8/GTn+XLl/Wppde3FV/T7wyfpV6lerck1pSyjsoxLCi4r qKzgioIqCq4qqGpt
FVVUXFVRVcWSjUhNLDXJnyaptUi9RRo2WtdIXaMNjcpWddLQqawTWaeKTlWr yMJURFXEmtbArIlZ
y2ZomGnYaBHWIoZGDN1CDWTjmBqYcsQ4ZpwwTq0anNpMZpiUm4xzxk2Dm9yq aXLT/Pu/L0wdbU5w
CwwD6+yfgI712/vg4p270Ff0F7t9Hr/f6/HBQH9vz6FAYKCn73D/QB8MhgaD r0NhISgIoSAcjLyN
dO1u27P/XQQODUWPxDsOuIAjHj0ag6lEMpVMJNyg/djwOkxnRtKj6YOdwDmS HUvDnChKuV1g71hN
PA7Hp/Ljk3kATkxNLCgb4Vjng8WTrva5p+5iSJhe8uaFleBDYfq+q1eIdXmi M5MLhdFHKy+js8+y
l9d2PnfHzi1nb74pbHjjc9dnXsH5pS/xe9DjdICJf1BLBwjffqnP7AEAAHAC AABQSwMEFAAIAAgA
yJRjOgAAAAAAAAAAAAAAAE4AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5j b21tb24uZWRpdG9y
LmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvd2lsZGNhcmRfdHlwZS5naWbN0Utv ElEYxvGDoq14KdCC
WGm5TS0tSKWAgFQbEbUkJBJdmpi4NHGjOxMvzfES4q5dGGM0MU3jF9CFbjS6 UDd1YVKNqS68RGYQ
mBmYObc5E535Fj755Z93/56snigUz7uBG7w9AxKl9dSR9Uz5U+7458rpL7Wz G/VzGxevfL907cfS
w+b9Fen5a/nFG/nlO/nRR/T1l/azhcQ2bsqoKePfCm4qqKlgUUGigiUFSdat IlHFkookFbdspNXD
rR750yPtPun0SddGOxrpaLSrUdmqTro6lXUi61TRqWoVWZiKWM8qZj3M+jZD w0zDRp+wPjE0YugW
aiAbx9TAVhknjFOrBqc2kxkm5SbjnHHT4Ca3aprcNP/+H4tQp8MFboAksGb/ BAysLe6CN2/dhr6G
vzHs8/r9I14fDI7tCewOBscDo3vHxkdhKBwLPQlHoqFoNByCMeGpsG2LY+vO ZwKcnp7YNzUwtAM4
pyYm43AmkZpJJRJusGl/cg2mMwfAbNozCFzfsmmYzwEpvxlsz+by4CAsgkKx VABg7vChq20QHnw/
BOYXAzUSi5SPHoNuR11YeBWpJF2eqNjwCAtz17Ozy6uPhdq9ZHVltTo8WX2Q vLBcqY/ET10uL8HM
3Q/xO9DrcoLSP1BLBwiWH5/N4gEAAHACAABQSwMEFAAIAAgAyJRjOgAAAAAA AAAAAAAAAIAAAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvc3Jj
L29yZy9lY2xpcHNlL2dtdC9tb2Rpc2NvL2NvbW1vbi9lZGl0b3IvZXh0ZW5z aW9ucy9qMnNlNS9B
Y3RpdmF0b3IuamF2Ya1T72vbMBD97ED+h6P7kpRFTguD0TBou5aR0ZWytp+H Il9srbIkJDluKfvf
d5KdH20Z20r9IcHHe3fvvTvn+2/7DAewD5+NfXCyrAKMxBgOp9OP8E3yybVZ hpY7ZAl0ohQkkAeH
Ht0KCwY3lfRgnSkdr4HrAkKFwIUwteX6QeoSah7QSa58akLdqFIQZsWl4guF 0OgCXeIRsPZglunl
XChpPcJVs1BSwIUUqOl1dcCmqVNbSVFtRkn0xCIthfTByUUTpNHvkyIqbofx kMhVCPYoz9u2ZdjN
YcaVucKSqxytmqwOpqwKtYroPiLd9TXOH6UKPZdSGMU9nDrjYbQb2ThC3vbJ hwPLxR0vEUjrRndZ
B1Ybsi0MoyxqoxkWkmQyvA8UGeXg2c9Djx9mw8FwIGtrXHjSoZHMqqaUmp0s KDwuwu38KhVmT/DG
l5ItadHYGnfHTmlxCmMuNCj1zvtzukk3EOSKkwwQlJAHEfMzyqfdxnETqUHJ JYJ4EAojLxrslt1R
TjYtkpOCKs/0wWMcm+V5GrnuOj+jWt/JBx7obyk1V3BNG6SLvLq4/TK//DE/ g0+w97oo92a7g31F
G6dD0zRNC4zTXVSO6/FbJ3adaxbpMa+sD4wCInONIFQq5lsTG/poHB1nv7rh PXmkjZ58pRMvjBh3
pWOP+I8rfkcSXRj9bb/j55pWRhbQcZ8A06IjgRbtTOvh/F6gjV9jkp75xqJj HXENjXFknT5aSfyM
Z2/v0thXmyTqf3ncWNGNUrNd19Rp1/TaYu/xO4bG6e4TeXlT0KOOXYL9EZW/ uP7t+ZUYznDJGxX6
U8r6Ztu7TJro5zdQSwcI5+EId3ECAABpBgAAUEsDBBQACAAIAMiUYzoAAAAA AAAAAAAAAACDAAAA
b3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNp b25zLmoyc2U1L3Ny
Yy9vcmcvZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVu c2lvbnMvajJzZTUv
SWNvblByb3ZpZGVyLmphdmGtmctu2zgUhtcOkHcgspI7rZwWGGDQoEATJx0Y cNIgaTBLg6ZpmSlF
aijKbjvou88hKUuWQ+pS1AtbFn9+PDy86Kc9efV7X6cn6BWayuy7YslGo4iM 0bvz87/QLcNvHuVa
77CisRVdco6sKEeK5lRt6SpGXzYsR5mSicIpwmKF9IYiTIhMMyy+M5GgFGuq GOa5hQAN7qxAs8WM
4yWnqBArqmw9EKY5kmv75YZwluUU3RdLzgiaM0IFfN2+jc8tabdhZFM1xWgO tSCWFcu1YstCMyle
24jgZt0Y1rbyRuvs/WSy2+1i6tqJpUomnCaYT2jG32zfnscbnXKjLlMkHFeq /L29A687RiTHObpS
MkfRYcrGRvJ7X5PTkwyTrzihCGKt4k5SHacSuk1kDLlIpYjpikGYMf2mIWWQ hzx+fpfTPy9OT05P
WJpJpdEzpCQWVMdPD/PD+4dkImHoVSE0S2k8e9RYF/lFt7JNSNM1XBv1zefl MyXaL3teYwJAmstC
wcUshU5f05wolkHH/HXynY5hFmYwLXJXw/Yrc9OHwDDlaEakuFdyy8yMAwan KRUaZuZoNDilMPTw
3iD+ZxocZYptYc4jG4Nr2F1+QERRKLHfojMLmNjyOGHrs/FFoLLINRaETk1l aLoLtmC2gmZWHUIz
AavNpLkFV2lCkKWUnGIxZ6DDvIVUChfcKYP93WCFCUi6iZW0iykKzrtxRtVF MulI+sRWCrt4ZqMS
STfO6bpoSy7J17YhMOWtlacw1WE5dDEWxOmCg9iJ6QDAHGaJ6GDUohCGfstg B8nbV0wtCmEKYfYh
Dk+7maZpC6oWhlBcyqwFYIpDVcudv6V2qQgBYD+jbZPMlocq7xhfEaxWX75n bSHsZQsNuhBrzShf
XcNWC+u3Yzuz0sWq1rYyLwmhrVutw2ErC6aJ6o3sGZ7TtpNmYitJPxDs23tt iKk3Su5aQLY8uC6x
Jpu2VWnKF9DxIg8OHsF568KG4vAMBotIYQvrl9xK3sKDxb+hOftBVzd91nqj xsKs/OBOb+1F2w5v
BcFHDkS+unHm4oGuWziKrsPbqADPAT3C3PSudTutlK29ghSt2bcOmBOFH4Hd BKsJxiBz3SMIp6og
BuN83KHfisbGcY1+NsotNKHaCKPSZCLqPselQxs92ieqs1d3MFgQRSmJ6dTc jMYxMExRVLY/YmsU
ndnCgwl8FtN/CzjbRBVq7IIajRTVhRL2UBLXJtBkxEQ8GjWZxyZvENhnEPcN Vc3M9mZuePhNr/iC
fNVwgT2ZHuv4Ajw9soN9k+JzkS/gd7Uv7Mk9dpKesbwr0uXQcD220kN+PDSL PckvDaYHfGU8Xd9B
qzxmCFR6yCG8Q9vpwc6ZoMOopB14WTnHnrwjP+pB1o8fc/ilA9hHJtXDfmr4 z55Yj2n1oP/ZME6H
RlyZWA/wk1S/E3fvLO3wDevQLXu4t8br9kTVvtmXQDC809IX9+S9sNK++I5N aN9YveY12EDtTQfx
jyytbxocWfyeeO/JwIP/Ylzu0HlWW2ffI9hY36l1vn33mMpMh/rvjiNDun5w gPHGmOt6n+kdZh7c
tO49hrz3+gp4eX8zPp/ev6Wgy/c0NrO+/BccTm34fU/1pp/vaxc8pwDfuDZ9 /rDh9ZwRfENQGf9h
uW+eF3zpFr/CbR4ifPHWh4RhAR8dLproUmlcnClwXnBi/gEZmd/37SkEYQGH P/uTgpIpwmj/GzSc
fOy/EstCrDhFUcaLhImxq+veP9pVUdW4x3rjCg5eBpFBwf5PjgofNfgl92PV Oeqisrcnpy+Oigcn
qPJocxhFmaqnhzkqFIezziXRprpU5pBzTde44NqdeK5s8+76oUREDdbFfpQs 6oNN534suExulJIq
OtvXRUJqtJZAfY/O0B/oJWo/LDb6+jd+E8Atg8EXyVEJBHfY33E9yAGSU3+C 8YQMmLA9gJ+NX+63
kq1Q1Zkyo9R8uYX5CJXKDpf/iaDcfUAy6A65e1FZFt88PHx+eH2Q8vv509+z u8Xs+nUTafsRHpm5
TOACgopca3XY8PY/UEsHCJNqWQf+BQAAFRwAAFBLAwQUAAgACADIlGM6AAAA AAAAAAAAAAAAgwAA
AG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5z aW9ucy5qMnNlNS9z
cmMvb3JnL2VjbGlwc2UvZ210L21vZGlzY28vY29tbW9uL2VkaXRvci9leHRl bnNpb25zL2oyc2U1
L05hbWVQcm92aWRlci5qYXZh5Vrdb9s4En92gf4PXD8s5NaVswUWOHSbHtI0 3c2h7RaXYF8O98DI
tM1WXyvKdrOH/O83w8+hLDnqYYFFc3mIJXJm+Jsfh6MhpcWTP/fv8SP2hJ1X 9W0j15uWJdmMPT85
+Rt7L/mzq2rV7nkjUi10ludMCynWCCWanVim7HojFaubat3wgvFyydqNYDzL qqLm5a0s16zgrWgk
z5U2AtagZQkyOy5zfpMLti2XotF6IFgoVq30zUWWy1oJ9nF7k8uMvZOZKOF2 90N6oi3tNzLb+KGk
UKAFWJZStY282bayKucaETSGwXirlTdtW79YLPb7fSrMOGnVrBe5WPN8Ier8 2e6Hk3TTFjlKW4pK
Y7dq1AvdAn8fZFblXLHXTaVYQimbocif+7d4/Kjm2We+Fgywetzrok2LCtzO qhS4KKoyFUsJMFPx
pQXKgAeVfnquxI8/PX70+JEs6qpp2SegJAWS8vQXrjbveU07qXlRrJxZLX7x Dgj+aVBUZBXEy8U5
sKLulfr15pPI7jd21TbbrN02PH8rOPyKfo1RRJS8gKBMz24gSnjWfuCF+NhU OwkhqBlYPHnCbINi
IIxhVTEwK3ImclGIsvUR+o/nVxc/skK03PTrGTLRmqH/jFpnGsRSsb6h2X9w 7MkCl+MEQgvmQ2nD
2o5HspctRHzJRLktWAbutLxs2apq2IqrFkO/5m22wVUHoBGiWdQbWAa5aIzt RIKe4Ev0Qq+dBuVx
0ZRrNdMy4MfEhsXLK90xZ+8BjZ5VxP0K1nBdo94pK8WeHRdOZpraSd3IHSQD Az8SQf8nE7xaXhiS
/ylWc3bWNPz2+rYW9vIsy4RSc3YO3l58qSELKb3Kz9FrMLZVIPm6qnLBy3cS sgnP52j4N/ARV/8b
CBXecEwNVy0gwYE02E21vCx3VcZN1jgry6p11zjweSPMLVrTLe9EuW43DtDr vMo+Aw7051JPSya8
DqYOpUO4asgoaOqi3KDo8m3VEEBvpciXzvSlDnSCHABDkK+kaObsI7RBmEB+ /UMsNVFo9Wpbi+bQ
K93cjwXSeFPtA4QB0gLnIHBnJ9UEPI3mZGbmEwMziee5iO5exFGQ7ni+FSqZ Wf0JJvTURlpab9sk
Use1LJLZvM/Ir6te2RlG4mRyh/ApehO3bC30qkxsYmLC/Fo4esK0RSbMz6mT SE1DYsxba5n389Qq
pG4AuyAmx8g5ZZH7oJp4i05frljS0YIFuc3zmeavEZAtS3TrjVjxbW4Gd15Z GwqyCjxIYzvW5YzD
Ezeshhd2XhYL0sievWIthJ7uscThPTgAA9uM7Qadsyn2TQ1RGr+WlXbRQE66 iEgHyt1kXBujiRdA
TWOHeNpJIsZjVLVD3un/N7A4P7tYCJ6GJENdDa3oK8db6qxuGPJWd1J3jfQY f8+s3eCw1h3nsVYe
dpk67BJV12XXHk0wdMKQEGPFDTy2AP5SFvbZSjkJrUPEBAnPTkn0QO0kkEbM UeawFAm84d3Lv79i
4g0dPHHtMwLKckhHI1qpgnSaBPL+0si2yaQ0KWFEgJu0i2RKTSL8vAyuw+3T px7BxJrVP0/Z9F//
nlojd1GUYf+oWKKPxW480b4HuZBwErpO66kFZ23teN1JlKR5yHEiQt2nmmNI uIhGClQQO+MIIYbu
pUXXRYQSfY90KFdqqDTXYdGfXIIYJS20DnEWJGhyCUWfitMLMTgivURWSHoJ ViyR8XhEr5tgAunT
KSxDotflM6ptKbFRBzKsyyDKmm4YIkx30vAy0oQNO4LnwwLWcmlbmTSV3BsR celOPIg7vv2iwvvr
tyaRs75VJ4cvmaiHaqnQOZQgnECUHrzWqORAxiCpwbVaPobnwet3pmLUXIyb jK+YDTsdRyalb59G
p6ev/+GEZN8WkHrf14/eF3pLSf03LUMMmF7KgZUfw8J7ZzrwYLTHMWHU7+Wi bwNOqOjrRiZqt+/u
C4rQOcCLF6DUBK0x7HwkYwSCvI17F6zX/zYWLDkRIbNDWnEeVnhLJ0I3DE2C 7qQTYKTHkP/W2g1u
a91xgamV743Lg1Mf4vZBHzpvzkP9cJSGTtcQIR0xSk3XwhiSLg9GDXR17H3V Tqdj151idCvqjpcd
LXD39y3P9SmaD/39RubCF9ZHF8BxjAfF9Qz3Vqku7fxGajLpRXqg2wvVbUq/ Zn/WPRAkEdXteqDJ
3p2bUs9tE3jsmnZSyRuZy/Z2LtUH4GMn4ALTv8z0RSOzdlXj5W2ZbZqqxMNX uL1uOGyxccqk+q3K
QT6PC3BveLAK9xKOx3hNTKekQA/WCMNG3hNs9vWnZOjeQw3n52BqsP1RTnA6 h3sE9v33LEn8hsFJ
zg5gTcExbZfOnMdkKB/GZPpjTFZnBCYj2YdJGbsDmMzsH0NlJLq4rN4oZEa2 H5u13o+OBOQRhESq
g5Lqj0FK5HvR0pF6Efs1MwzXi8RYg+YIoF64D2XrB+iF6JbyMEInEQP0eiPw Odk+eDtnPV663cwf
0lwnRZJs1+kh51LRhvN4nSAO64MRj8zuOVTfGZR/lPdWAv7kyT0EwSFrNAiG Hal/emLnNJQJ7g2O
FfAvcux9/CbHQ4F111FwudgQEHV+Z9/B+HKhR5slWA5EeuHtEJYLM3ISGz0E pzBrrpSAn47t3iCx
WEOIHLw3JEFy0PdgNr7DL0CJ+8NCD7Qq6n1b3CXk/6RCjF+DExLiDnNmR96F axn9BRPKlfbzD4lf
irQCj+B0Z0fFn+/5Q8/BAz4nEZ/web1xR3xkGHrG55p7iUyI3r3sHf1igJB5 VO7BZJtjH50cJyOK
s2+dC/soAk/dK7HLUrYSdrR/mOMzgV/WcVmaO3yqWXn0wH/xkArcBatk2jUx dTUTHtdZfzJvkX6h
4Rrts12PkATR+KkNvZ2V4CW9+l34xasxX1vcRR9CxZ+ddKnt/wrlfynSxtVo I0u0vhxBC7M7woUp
PGKn7SgEdsfRueNlZfrJ9yjaESvd96ULNthKb9SXOoefFjJ10EK/3jlUSChK z/ahlU5RaAF7VD+L
9lDJE0ootS6aVvj3X1BLBwhqVNIJ4wgAABAsAABQSwECFAAUAAgACADHlGM6 T8MO5M8AAAB2AQAA
QQAAAAAAAAAAAAAAAAAAAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1Ly5jbGFzc3BhdGhQSwECFAAUAAgACADHlGM6zhRO WfwAAADLAgAAPwAA
AAAAAAAAAAAAAAA+AQAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1Ly5wcm9qZWN0UEsBAhQAFAAIAAgAx5RjOvbXGipRAAAA hgAAAEcAAAAAAAAA
AAAAAAAApwIAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0 b3IuZXh0ZW5zaW9u
cy5qMnNlNS9idWlsZC5wcm9wZXJ0aWVzUEsBAhQAFAAIAAgAx5RjOi+yri7+ AAAAgAMAAEEAAAAA
AAAAAAAAAAAAbQMAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5l ZGl0b3IuZXh0ZW5z
aW9ucy5qMnNlNS9wbHVnaW4ueG1sUEsBAhQAFAAIAAgAx5RjOpu8Xh/fAAAA dQIAAFsAAAAAAAAA
AAAAAAAA2gQAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0 b3IuZXh0ZW5zaW9u
cy5qMnNlNS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnNQ SwECFAAUAAgACADH
lGM6r3V/8wMBAAAaAgAASwAAAAAAAAAAAAAAAABCBgAAb3JnLmVjbGlwc2Uu Z210Lm1vZGlzY28u
Y29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L01FVEEtSU5GL01BTklG RVNULk1GUEsBAhQA
FAAIAAgAx5RjOi5QUgSXAQAAYAIAAEsAAAAAAAAAAAAAAAAAvgcAAG9yZy5l Y2xpcHNlLmdtdC5t
b2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9h c3NpZ25tZW50Lmdp
ZlBLAQIUABQACAAIAMeUYzrK7bt95gEAAG4CAABGAAAAAAAAAAAAAAAAAM4J AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvYmxvY2su
Z2lmUEsBAhQAFAAIAAgAx5RjOh38ywq5AAAA0QAAAE4AAAAAAAAAAAAAAAAA KAwAAG9yZy5lY2xp
cHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNl NS9pY29ucy9ibG9j
a19jb21tZW50LmdpZlBLAQIUABQACAAIAMeUYzouWjv2VwEAAG0BAABQAAAA AAAAAAAAAAAAAF0N
AABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVu c2lvbnMuajJzZTUv
aWNvbnMvYm9vbGVhbl9saXRlcmFsLmdpZlBLAQIUABQACAAIAMeUYzrLRgak fgIAAIACAABFAAAA
AAAAAAAAAAAAADIPAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuajJzZTUvaWNvbnMvY2FzdC5naWZQSwECFAAUAAgACADHlGM6hLKH BYAAAACDAAAATQAA
AAAAAAAAAAAAAAAjEgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL2NhdGNoX2NsYXVzZS5naWZQSwECFAAUAAgA CADHlGM6U9oogWoB
AAB3AQAAUgAAAAAAAAAAAAAAAAAeEwAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2NoYXJhY3Rlcl9saXRlcmFs LmdpZlBLAQIUABQA
CAAIAMeUYzqWdSYx1wAAAOQAAABGAAAAAAAAAAAAAAAAAAgVAABvcmcuZWNs aXBzZS5nbXQubW9k
aXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvY2xh c3MuZ2lmUEsBAhQA
FAAIAAgAx5RjOrn2UAorAQAAcAEAAFQAAAAAAAAAAAAAAAAAUxYAAG9yZy5l Y2xpcHNlLmdtdC5t
b2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9j bGFzc19pbnN0YW50
aWF0aW9uLmdpZlBLAQIUABQACAAIAMeUYzoy6U9jewAAAHYAAABIAAAAAAAA AAAAAAAAAAAYAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY29tbWVudC5naWZQSwECFAAUAAgACADHlGM6s0TOedsAAADcAAAAUQAA AAAAAAAAAAAAAADx
GAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRl bnNpb25zLmoyc2U1
L2ljb25zL2NvbmRpdGlvbmFsX2V4cHIuZ2lmUEsBAhQAFAAIAAgAx5RjOty4 wVfGAQAAfQIAAEYA
AAAAAAAAAAAAAAAASxoAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9lbXB0eS5naWZQSwECFAAUAAgACADIlGM6 wOJ/LFkAAABYAAAA
SwAAAAAAAAAAAAAAAACFHAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL2V4cHJlc3Npb24uZ2lmUEsBAhQAFAAI AAgAyJRjOjVsnXKp
AAAAwQAAAE0AAAAAAAAAAAAAAAAAVx0AAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9maWVsZF9hY2Nlc3MuZ2lm UEsBAhQAFAAIAAgA
yJRjOh0RExChAAAAuQAAAFIAAAAAAAAAAAAAAAAAex4AAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9maWVsZF9k ZWNsYXJhdGlvbi5n
aWZQSwECFAAUAAgACADIlGM6AtASd3wAAACGAAAARwAAAAAAAAAAAAAAAACc HwAAb3JnLmVjbGlw
c2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1 L2ljb25zL2ltcG9y
dC5naWZQSwECFAAUAAgACADIlGM6TLnGeVcAAABZAAAARgAAAAAAAAAAAAAA AACNIAAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoy c2U1L2ljb25zL2lu
Zml4LmdpZlBLAQIUABQACAAIAMiUYzrjeEeSUgEAAG8BAABQAAAAAAAAAAAA AAAAAFghAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu ajJzZTUvaWNvbnMv
aW50ZWdlcl9saXRlcmFsLmdpZlBLAQIUABQACAAIAMiUYzrvkKQ08AAAAPYA AABKAAAAAAAAAAAA
AAAAACgjAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9y LmV4dGVuc2lvbnMu
ajJzZTUvaWNvbnMvaW50ZXJmYWNlLmdpZlBLAQIUABQACAAIAMiUYzrF6GMB GQEAAGABAABFAAAA
AAAAAAAAAAAAAJAkAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuajJzZTUvaWNvbnMvbG9vcC5naWZQSwECFAAUAAgACADIlGM6yx8S 6uwBAAA9AgAARwAA
AAAAAAAAAAAAAAAcJgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL21ldGhvZC5naWZQSwECFAAUAAgACADIlGM6 4k17fJkAAACZAAAA
UgAAAAAAAAAAAAAAAAB9KAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL21ldGhvZF9pbnZvY2F0aW9uLmdpZlBL AQIUABQACAAIAMiU
Yzq5cYmEfAAAAI8AAABGAAAAAAAAAAAAAAAAAJYpAABvcmcuZWNsaXBzZS5n bXQubW9kaXNjby5j
b21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvbW9kZWwuZ2lm UEsBAhQAFAAIAAgA
yJRjOswi8HlAAQAAaQEAAE0AAAAAAAAAAAAAAAAAhioAAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9udWxsX2xp dGVyYWwuZ2lmUEsB
AhQAFAAIAAgAyJRjOp2HT29tAAAAbgAAAEgAAAAAAAAAAAAAAAAAQSwAAG9y Zy5lY2xpcHNlLmdt
dC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29u cy9wYWNrYWdlLmdp
ZlBLAQIUABQACAAIAMiUYzrlxxKYTgAAAE4AAABKAAAAAAAAAAAAAAAAACQt AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvcGFyYW1l
dGVyLmdpZlBLAQIUABQACAAIAMiUYzrwm0d4MAIAAHcCAABTAAAAAAAAAAAA AAAAAOotAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu ajJzZTUvaWNvbnMv
cGFyZW50aGVzaXplZF9leHByLmdpZlBLAQIUABQACAAIAMiUYzrJv8kIUAAA AFMAAABIAAAAAAAA
AAAAAAAAAJswAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRp dG9yLmV4dGVuc2lv
bnMuajJzZTUvaWNvbnMvcG9zdGZpeC5naWZQSwECFAAUAAgACADIlGM65v1F SFEAAABUAAAARwAA
AAAAAAAAAAAAAABhMQAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL3ByZWZpeC5naWZQSwECFAAUAAgACADIlGM6 x/5CKH4AAACCAAAA
RAAAAAAAAAAAAAAAAAAnMgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL3JlZi5naWZQSwECFAAUAAgACADIlGM6 ErbRj1ABAAB1AQAA
TwAAAAAAAAAAAAAAAAAXMwAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL3N0cmluZ19saXRlcmFsLmdpZlBLAQIU ABQACAAIAMiUYzrR
Sqn/OQEAAF0BAABGAAAAAAAAAAAAAAAAAOQ0AABvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvdGhyb3cuZ2lmUEsB AhQAFAAIAAgAyJRj
Ot9+qc/sAQAAcAIAAEsAAAAAAAAAAAAAAAAAkTYAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy91bnJlc29sdmVk LmdpZlBLAQIUABQA
CAAIAMiUYzqWH5/N4gEAAHACAABOAAAAAAAAAAAAAAAAAPY4AABvcmcuZWNs aXBzZS5nbXQubW9k
aXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvd2ls ZGNhcmRfdHlwZS5n
aWZQSwECFAAUAAgACADIlGM65+EId3ECAABpBgAAgAAAAAAAAAAAAAAAAABU OwAAb3JnLmVjbGlw
c2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1 L3NyYy9vcmcvZWNs
aXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVuc2lvbnMvajJz ZTUvQWN0aXZhdG9y
LmphdmFQSwECFAAUAAgACADIlGM6k2pZB/4FAAAVHAAAgwAAAAAAAAAAAAAA AABzPgAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoy c2U1L3NyYy9vcmcv
ZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVuc2lvbnMv ajJzZTUvSWNvblBy
b3ZpZGVyLmphdmFQSwECFAAUAAgACADIlGM6alTSCeMIAAAQLAAAgwAAAAAA AAAAAAAAAAAiRQAA
b3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNp b25zLmoyc2U1L3Ny
Yy9vcmcvZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVu c2lvbnMvajJzZTUv
TmFtZVByb3ZpZGVyLmphdmFQSwUGAAAAACsAKwDiFAAAtk4AAAAA

--=_mixed 00613A3DC125756E_=
Content-Type: application/zip; name="CSharpExtensionPointExample.zip"
Content-Disposition: attachment; filename="CSharpExtensionPointExample.zip"
Content-Transfer-Encoding: base64

UEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAABCAAAAb3JnLmVjbGlwc2UuZ210 Lm1vZGlzY28uY29t
bW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC8uY2xhc3NwYXRolZDBagIx EIbPFfoOS+7O1kKh
h91KKStUqIpuvZaYDOu0cRIniejbV0ulpQeht/mHbz6GvxruN67YoUTyXKsB 3KgC2XhL3NXqtR31
79Xw4bpXGadjDDqtj+HqJyEnORQfxLZWxrMqTstaeekAjaMQEd5tAqczm/XR CeN58/Y0nbSPz5Nm
Xv7liBMKawcWV7mDTN+XKLBImq0Wu3xpDwHL8e2i6Q/gTpX/fihYBOMFQXCb SdDOXO6I4yVVFHNW
ncYLpM8p5HSGV8RfcFX+LvATUEsHCE/DDuTPAAAAdgEAAFBLAwQUAAgACAAN lWM6AAAAAAAAAAAA
AAAAQAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3Iu ZXh0ZW5zaW9ucy5j
c2hhcnAvLnByb2plY3S9ksFOAyEQhs+a+A7N3gW9eaDbpBpvGpPqAyCMlGYZ yMA2fXwBWc1mNfFg
vM3/Mz/fBEZsTm5YHYGi9bjurtlVtwJUXls06+7l+f7yptv0F+cikD+ASncQ FdmQcnd2zwRKB70n
w0ANNkRgxiXmcjwqz5R3ziMDbZMnBqcEWDCRqbiXFASv6XJN6QRMveBTVdzG jFXwmXod7aB3AVRR
Td7mqERdnW8mO+iUJ6JcyKOsAaCvEXJCkhkLOzbN54bgC8qvuEEDe5Bo3yCm 7f9id2oPTv4JtDnT
k2deGgla94dY4J+G0Vh8rIeFXpt+Csy+BxeZqS7Ez12Yb+M7UEsHCPGCeE36 AAAAzAIAAFBLAwQU
AAgACAANlWM6AAAAAAAAAAAAAAAASAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvYnVpbGQucHJvcGVydGllcyvOLy1K TtXTU7BVKC5K1ufl
yi8tKSgtAQskZeYBBYCkXmZeck5pSmoxUNDXNcRR19PPTV8nhpdLARXoYREr yClNB5pQkZuDRTIz
OT+vGGgHAFBLBwj21xoqUQAAAIYAAABQSwMEFAAIAAgADZVjOgAAAAAAAAAA AAAAAHUAAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu Y3NoYXJwL29yZy5l
Y2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5j c2hhcnAuajJzZTXt
PWtz20aS36/q/sOstiolZ2VSku1sbEmJZVnO6sp2XJGTu28pEBySk4AAA4CU tVv+7zcPEG/MAwRI
gGx9oE2w0dPT06/p6Zm5/PHL3EEr7AfEc6+OzganRwi7tjcm7vTq6GZxdv7i /OjHH/77vy7/OA/w
i1cfvDF20Jc5eRW/c87eoVjc4BV9fnU0C8PFq+Hw4eFh4M2nA8+fDv/vw10M EmRBHp5xiPPT0zMK
9v7enuG59ZS4QWi5Nl6/xRvPvIdthywCzF/+4L0lge0N/+f8/vbFEXKtOb46 oj/EQNN5OJjTPlGg
ge3N5547wGMSev4Afwmxy/oRDOxgZvmLI9pXhC69BxePbx08x24YJBiP0ML3 vjxeHU0sJ8ACdg39
ybL/tKZ4DR21nXsD/bW0HDIhePwxT+UaWwU+2gd9XKzHCb4KjBFHzLCu+ZjG XoFfcLoe+miYsq1U
cZoP5UbtROKQb66qwVhommg0JYPF9qtYK2S12dYzGlBORqwRVI1fhY8L2oqw CzeOFQRvaWuWb4WE
jboglFHyyfdWZIwLI+T5ZEpcy3lHHHzjuZSM8Opo+G2zf9/8/cvbC/pxfYG+ RTfe4pE2OgvRsf0E
UZvzPfpArKf33iR8sHw8yABfOw7iwAHycYD9FR4P0OcZCVg3pr41R5Y7RuEM I8umLF1Y7iM1mmhu
hdgntIcZZBQ7/WVMYVcWcayRg9HSpTzh79MX5gHyJvzLrRgx9Gk5coiN3hOb Dg9GK2qaMxgfZsSe
xU0TKhoho40OceiT0ZINwgmnkD5MGrXCDJIKg+rgqeUM8cJ5ujo7HczCuZN+ K8dSV7Tn+cGrzC/0
7ydr5BPqL95Y/ojQzh6nuf0kD/2R2B4VI/TG9wIJaLN/wwT1QugYqqk3Fwmm 5H9kvvD8MIMSzydr
VHSUnMHtezpk6lew7VEJveWKpg398+gPbOsjvw/9pR0ufaqT2KL/YvmbWsyh doCqxeB6ROXSssO0
QSjlGDUAKAIQ1o4KtofmPO7Aa/MT6crNPWM8muPQEgCZ4RQKZDOGoXSziFM3 DlAZTeg/ZUTRj5cX
C5+sqHIjGpqEFDF2l3P0gTbNh4ThyL37UnywX9aG8xc8OUE3VmjP7ikS/ugE vfE8B1vue0LtgOWc
oN8saj+osqbM6UkZYtr2zBvfuSvPFkDojePZf56gd1TnxjeWQ3H9GlDmn1Cz 5XsPSZNl2Epavf2y
oJaPDWPuha+lIyeYJLieZunxkwJjvqrep5LIjOkU88E5jgQZYfFvESH/iF6i NC+dEF1xgzigKN7i
iUWfcExrDNU9SKOy46G9Wrc9wHy8j58M1sSpcIX+Yzm961FMSdA88+0qK1+D leUs8c+T45gsVdP8
I3ggVODQcQZ3BQv5h21Rh8Nl6ZUEin8MhwIQPf2B64XQz4GD3Wk4U75KOYio Fo2o2lGNTt6XvxjJ
QgJO+UQxRSZrPcIn6Ju/ll54kcLKvz+pZhT/IC6l6T6N+1T1xgQdp4hZz11o j7hpl3E6+eCg3zjh
xY8/IJxp/jj105NUrxVU8Y9sR1J4BwH5d0FyC69/lf8cK5rgrPhE/0izT9HA yMfWn9Uw1e0LEc0Y
Ti1ZzbzBhJarlJa8cUipqAlcelJGZUYgTIlLRJ2ewMTM52gGoSdM1qZjutmI ZF2bzojwN6hVWtK3
6XDgLzZeMN/DvrAJhtbQJG/JhieG0h+iBHFaq6VOKK/XaxJvUzQexyjiBnS0 OULF2JLraIx83VfO
Oq1uxn3laOt2M9vXz4LCpJsMtw4dWcmOHGwqeBIunKHX6pZC1ltVhTgI09EC Dnxt2zTaYoI/YV+1
JJ9DSqWeQ1DW6Qu9wLmxwL+LSEukgCPWGTelBHDcO7V0PLDWGdo7Pm9KRdVs gMVkKu6X1lDn3pEO
OrWmMW7tcc83sLEE3BUoTmQh11gjUpFrb6fykZ+c6YhK/h0mKXP+TEtABKhU LgSIkTWIsG4sDB/W
1CUyIFA3MvQC+05HPEeXzoDnXuEBkIFFwBqWAJtaAdyU9pdpPS7TdhXGaC7u ihnxetaNNbV8zeuI
rARLEjw5USJGMIlBlLJL2XM+uY47Lr5dxd/jxIFBn4PQz2FLT7V0EPEhzeD4 2xWdczuOQVxXRQU6
jqd8mSaSzAj9JWKlPsXVuSGpZRANUA1KpqFsqP+R56HKRFAZDSoyefKmtXrY qgXKZvl0DFD2DTEB
q8j5FV/mSxcMgRslWQlLzIaYTZb4j7q44lncGlwxjYuxGszjYtQNTORSZKZn cuvHRmKbmLP4/Z16
MWkaWEekpAiMZvUl89ysJOhPcjee324+tW1kVrvtoa854BmLAuPdvfEu/eUr si2+UHDn8AXga3+6
ZBQnmStiSdcNuE+gToAtNEQuYWYFyPVCNMLULcwt15risXAPRKzuscV0vko0 qERbYz1HL5TwMZUy
N1ovuqiElSxWRSuC2dWq/EjXW7xSBhXNTgLqh/7mAb90cDWC+1LplQymzhBG nUjxMDdsJ+tRnojf
JYto0Ytx11i4Xc30CFojLF9PMOKZRW5FsprLxZV9FhbnnlxFmDWMGxuoIs7j NGuqiRHrZfnWdacl
MVfj3v+EwyI+Sfvlxq8ZmUo9bKoea5CpoSotzkLokiGbsBqbFQnIiDgkfLw6 EovpR8Oql0QSLogq
GnJVjZXwSUIv0u6ro+HwdaY+bHAaPVjXrRUfnCkhTgtIq0mjxK257bdNloyK FumQN9tcw6p2arek
RqyLulKiU4iGMSYV3zQh9eB0oC6HOUWq0s8ILuiF/p51Ql0V4rstJWlNRRpS EBD6loT+OQg9CH0K
5iCE/gUIPQh9CmYPhL6VBzsJkdrpyVaUr5EHW5o3tUHaNolrbnbWUuPNNa/X WqvzXJMGNGa7ETrt
OW8deBPog5h9j7zxY2rRq7gp8tZdzkv2RGb2dJTvKC5prTzBJ7LXR4gE95GT DP0llkiMmmpRSlVC
d7T7JKaYtyQbjAVFMMch9gPNTvK3+LpdtTqoo9FzqcJcDhOyJDKSZ1M1KNsH duPxJZN4q3huGUh3
kFPDLBnBYaZFM8KyBfrdoSu7MaM7dJUsbneHuHy9aHco43vCukNOXIvfHZJ4 /Xh3yMkWgnWHLmk1
0Q7I1HYMG/hZ2ZkJ+EvoW9e+bz2+JfNonfDq6PQI2Yxwtgbq+ZFnRiuK158G dUML+dph1MPKpcUt
8CkqFqjHogh4GzySyWVq32i+37K6qt2GULSFiW9NBdliLMQSue5QqOYExCUh oXH8vym/y8Uh5fTU
k5FoC8POMxHqdNDwdV4d9BY7rahUqyhFhUi0c1woLvOXcOF8+DoJ2/V4kqr5 zTOFneKSciPqFGpK
IBWz1Fgx5HBqf8SQJdbhEGyIXTEn3iMzosG1uiZAIu7mfd1Wb5/X7K28v4dr 84YJV/bWpn32H3Vt
mCL6UrVU33pyzAoL2mXR0xK2vP2eS/KadW04b6hZO85RdjUk1Bud2lbzQEJF PjN9nTqPiDqeWFr1
WbX/LkbT12r7CgGt5y84rI7PEEi1/AYHlVj0e34UlokR338ZKNOXsmenpjqk HogbS7iGNYvvYjEb
a60VHcwY0WeZ7OTghVY0qK0z8sES2XydkWgtmOLYN56Snula/nxok/SrwbiG t9R8bMPR9jq+ea5d
8XAg8YzhNFCDN2IvW7zcigPbWuDxb2yF/+qo/OBEgzIUk3BBvKEfMnB43bBB IDcwgzuwYf5iZrls
M7BBZJq3T6kTF7dpoD7ysztjKQq9P7EbyZB2V3oy9HcT05GWRCV38QbbVBZa d0D4meQ/LyjL3YbT
cxr2Sd8IOHgSU7m/llkrcj6TfDOOqjlz9fN80QvhDKdOZagd4HFcrRpIQa3M SKrWFTKY8oYSt2Yo
eXMyY0knO6G5ujfNEY5t/ydMO1PNiMPGIZB4y8wX8ndM/KFoxMgn8lckGp9I dB1FlwjiNX08dTk+
5DE/wss2rozUkfmgf1EHdE/GGCRd+q22pPNwpJLJ9aewHLlyGlsZwzSwxJii AwymjhhR+Eyc0Zw1
zQiZgT01DJNqWMfLYabL252U1Da+LRregzW6NQVcYUDv3An5ki55TYbkHwaO NjNpPKBB2ZonlM53
NbJtxjk2c5NoaA4btFNv2Dl1iYna4tIFrDNtts6kM7WEdabG1pn4FjtYYoIl psNYYkpdmASrS/1b
YlAbwn/CesHGAeqzPV4vgOxhB0Vyk0xNx7KBxcgMsoGdtlQRhyHhBxPpXitQ YSKtMyWEiXRjE+n4
Xk2YTMNk+jAm07nrbWFC3b8JtVoCdQ4ghin3poHsiz2ecrdWordDSS4LAG5b igB4a1us89spWzlN
+x+t78xKRBw+mGrB7Rif5uYVvLW8aWGtb9uotJ0567J2GhusQ5hibGyvzloq 1tt0GpNc8gg2tJlZ
DUfY0syG4+7k7IZTBjOczW1B/ZI482x8s9Mgjq/1aERQ3cG4vTAl+txO4MIb a2tG1FXucrpgZrQ7
6xINQS23L940d/38PVP3LxozDgH4a22VTnDk7ZZP8CaghKKeVLdZRsEb6PWE 8FkdWw2Twk1NdVvb
u/jw1Kz4EO/WiDNr2mTz6o9aTUGRCRSZqDW+UGTyHRSZbLPIZMKuFYECk25l gA/C0e+kwISLO+Ub
1JdAfYkWVZB9rQi6/wn1JUpqu5XyKyZT37Xg/HlLUFsCFqIJCxFx+GDWRWEv WQclfRPJ3e1esi5z
2jQBehBzoo2tbFsVMbCbDRKN/dauQqJRZ18/JBobSzTmLqyHlCOkHA8j5bgM YsIg6whZRy2qIOtY
Ee2+hKyjktpupciKWce7ViMB3ibkH8FWNGErIg5D/lELMeQfIf/YG05D/rEN Kwv5R8g/Qv5RK/+o
E+dB/rGx/KNwVpB2hLTjYaQdhQhBqSMkHSHpuOn1KnDdpZrabiXGilnHD234 f94UJBvBRjRiIyIW
Q7ZRCzFkGyHb2BtOQ7axFTML6UZIN0K6USvdqKMAkG5sLN2IocwR8o2HlG/E UOII2UbINjYQ4u7z
ZXmHkm2E2kZIN3bdSEQsPph0Y1cO7te5jzxuLW9Z2Ccc3L9F9YTEXRsGq73E HVizrkVSRnPQqkjq
xrGC4PAMn0ZIBbcBg9UCq7XNGCwI/V1aJY1knPHlM32UpRYukZmQL6npc6p2 4G9mxQOZlFvBoi4d
Zz16cBPMts30+d5eBQO3KRyMED9r9W4GiR38R417GqTGcPN7ILYVaJ83EGhH 9EK4vUM7Ho/CMC2Y
5q/LvLFGiIaOa9wQGDVNI0zsjvE4ar7Weu2Tms3DLRf5V6DCtV92aJOJ+rYc p2IGsb+D06yT2Ohm
tk0t/NMfUC0bqzbvMP7tx8n7VQLMpMoJ8BYqPMDldVCr2nN57SQjt6FCGX2A Knqootepov8equi3
WkWfiqWhkB4K6Q+ikD6Weailh1p6LapgYbBqrvhi8zAYaum3KMqlFWBtBQG8 OSinBzvRiJ2IWHww
pVyQ6OmgqLeX6Nl9LewOOQ2bANows3B6B+QdIe+olXd8CXnHbeYdWcuQcYSM 42FkHBk45Boh16hF
FeQaq4LbBu47h1zjjnONn5t3/LwhyDKChWjEQkQshiyjFmLIMkKWsTechjOC WzGzkGWELCNkGbWy
jDoWCLKMkGXsmZxDlhGyjFXwkGWELGOvgtsGbjWHLCNkGSHLCBZCyWLIMmoh hiwjZBl7w2nIMrZi
ZiHLuEdZRm3QyyGTEjkINTH27MaxlgFWtou/2HgRljmST+spe0p0j6J4klja 0SQiAQ2yqUoH2qlQ
A9+8eS5NXefIBDtikgpSOTYcqvmwoLWAAEIBo2luO0FAZ91/8eD1jU4sPAjH XysTKtPvzzMSpKbZ
ugkZUydv5N6NPJ/aoQ01PZpmszID/AsOl76u8T3QjICBbdQaEYUIXPp8TD63 eQL7ZaKW65TZz6M/
sK19n5ZRmKMV4Ow6BXY5THhSASQGLi0vVYB5uArfWBJqTnGYU6WPBhcSIZst NftLmwc9EfBKc6Di
YUIrEpARcUhIW1z4ZEVFWsY5hUVrJyHd/hUFhbQytX1Lp6kr57ZyA4FuqlBP Qzd3N7scblUVQcs3
DDdcONDZILmxgoH9D4+fGYfH27xBWH9xomtWRnvtv+k1/26t9R/CGv+z8jSy fi5De57XxBJ9e0vz
u46eYzq2cFFv46vwXWEep2X/59gb62zEKaPFc5NFc+2EvEnep+kseEs58IPI gJdJYI0MeCv5734H
9roH+RxEcF+26N3wGnbDmXLTPLlBltxgyVd30Rvy312zjJD/Lm0N8t8m+e93 2KICADnvEqzbT4Ju
L+etf2vrnuabNrgbt7n7cA8hafTcKO8KGSJt/6KVwi5kiJq+47uFLZrbuQD1 +QblRAcQm5qpbcSW
vUkSdV/7X9TRfhG5LalrMgz79tkQlEm/tiHY+8xK1g5oHw5wEAayLLHeaMpp fwyq0Q7x1iJ3jryx
6J1jO4wI3kzSjdeXzOp/G9q+3coOyhZ3Tx7EYlGZrNXK1be2YWKX8xNd98up PITQpGW7FPPyIMKZ
ertHauzoNNzNaXZGl9EuTlgn64ls7ss6mcyCwzpZyago18nK+DYR2Q2jzRxb 592Gi6pNriAGSxqO
2iwz3D0LoZ33vhxm4MphMiDFekbGgpJ10jvbcz/53oo6OD8vUB71f8S1nHfE wTeeGwrmfdvs3zd/
//L2gn5cX6Bv0Y23eOROFx3bT9D56en36AOxnt57k/DB8vEgA3ztOIgDB4h6 Ceyv8HiAWLEK68aU
ShBiM1fq3JBl2958YbmPxJ2iOTWYPqE9zCCj2OkvNJi2VhZxWIIULV3KE/4+ fWEeIG/Cv9zaDlkE
GH1ajhxio/fEprqG0epscJrB+DAj9ixumuCAvk1pG5Mg9MloyQbhhFNIHyaN WmEGySwMF6+Gw4eH
hwEW7Q48fzp08NRyhnjhPF2dnQ5m4dxJv5VjqSva8/zgVeYX+veTNfIJdtAb yx+xxevjNLef5KE/
EtujYoTe+F4gAW32b5igXgjFoXI5jbkxnYcDZrIC2xtQTs89d4DHhHZ2QM1h ZAQHdjCz/MVFgin5
H5kvPD/MoMTzCf2/R8XtVjgpOfgfE8vGAyqB3tKn/7mbUxLf4sD2yYKSIX83 eAgHVFIXVFQC8WYp
kQshasKMpTUWUZyRxmfeeyk+jBlFWA3EINPCf8oI4tij6gbEQhBKHTuhFtGp p8VNDXNQuXcjoq6D
AM9HzuMJSrIGJ4jnNug/nudgy43yVCfohu1gjsNF+p3hpv/QDrDvZfhLEhwn 6B2V8nH0z43lUMzv
PD/1O8+9/RxlLthX2j4b19IWxPz6BOXn2ScoF5WKB/cLhgix/FtCG/s+H2F/ 3dOyduKjRE5QZlfO
CbVyvveQIv9/Z9REp77/GlDoHMqv+fGrGE4uhkLWxH+vkO3TqAPzb8di1w8X lCEHGkzJRDx8IkdJ
1kxVoY0BtVGPMmKjwh9B/+4IcKMOTOMh0+kFhTZuxU3ytKomGKgx/iAtSqoW BLBxGyOmzcphYEDa
KG2h8kqRFGDaaK3YBqkwJ5DayFNHmyuQJ5DayB3PW6jQMhhthJF7VeGMwLTR UqeDlXLGgbRRTpgZ
TwWzKuwc/vdx8oJZS9e2jdXGUDRicVh95uTrF5WM4i8Y4k9clB7630n8gnZL IXNJKvQcSF/lmfNX
KjwD+t3mh5wYiHrxkC613Efv6PsLHvAp/QSH0ncP2RBDhd3HEwP/Fi1Aql0b BaxEm2lARK7piPL4
SSEu/Kp8nxM0xSFDdByF5SjKIRXx8Q/xjqg7pX1hvrIkAiqEQfxDhFsiCOKR 7NW6sYEoMzt+MohO
2DiW9J5/hP5jOYHrWDIVMM8z366y4fRgxTZh/zw5jslSNc0/An7XBjrO4K7g Gf+wLTqdXUfprySA
/CNmMJvdDhJjX00Q/xixUwGrYb4qqYt8sSF9OXffKpF8SmNIXxI4tUtaJl42 pbEYbLdKbHYOaEhs
4kPapZEplilp8RSrXdJERGxKXCrcbpW8kum6Iam5KLtVankCwZC+0mi1fSpZ mqMOpalot10iUwkY
QzrjqU+rBGZyQoYUZkOplsmMsiXGJKbTMa2SKBJlpqFE6dRoC3Qms6VaFOcm W60SnMs3GtJbNpVo
nVyeDTUkNJ2ZaJfATI7WlJ25xF3LlKayxzU0P5fHbJXWOI9tPOwVs/RWqc2k 2g0pLuZWWyU1uwxg
SGuSsGmVRr4UYSqgSeKkVdqyyyZdC0JKf/kqsmLo+M7hi8DXUSnkbXwgPbGk s/vhUKxDs3RAtKI4
swLkeiEaYeyiueXSPo0RcQUcy/iwBXWeuxlUolXnWaqTPBECVoUU5WsuKmGr sQzTtQT8CVv95hks
ZFG2iHyu782RhdartaKXGI2W7tjB6HjhLKfEfVLEU3wiagpjTJ+scFYESv2x ZhYUaF1GEJNwnKGh
pO3XEWsYEO9FAWSYe5JLo6ayeFFiK031humz3Ho3Gif/vULXdsgo8XyWLctB HmeIKMVNJug4he9v
ggyZdMf0Jq8N0v0vb6dU0yQCWSGGqYdH6K+l5bBCqvFHXmdTs2YhsxZfVbdV cfgAT51W1lldCiMb
RMv36hMOBHwcMLZeOierP1sz12+YCkU9akPNKjdv12tHY/eRFmKNEz1jPIrK Yh04HajLYU76KusC
I6nuotCfqyuEtyD0RSq2IvTnIPSmUHsh9M86IfRFKrYi9M9A6E2hGhN65dFR t+5yXlIQnVlyzVVE
1zz+CZHgPlK90F8qj4Oqd+BVtDgcU8xbkg1GamuBXif5Wy3flqC3K0K3+p9t IaKjfOPxM7jjsyLW
a9u6o6u1K+JymGnKmKJ4/2xXaBK7jbtDTmbVuTt0ZVenO0RXyWlIuyRHrCd3 h6CyffCdIY4v4HaM
HLae3CGSUqvH3aEqs2TcJbKipd7ukCTimK7RkzozoTOUFXY6d4kwvprbIZIy 67ddoiu1WtsdsuKF
2e6QlLt+qCtkZVdau0NXdgWzO3TxVd8dkNPg0dLvcmV7zeQCJB3c+EACnVyb pP38kYpJfWoDZyk2
eIZif262OCu72eI71TnBG93NVroxU5Fy0TmJT30CH6hec6qXrc0E9euZ+pVs YAYV7JkKluxyAT3s
mR5WbvQHbeyZNpaULIM29kwbKw/EAG3smTbmdzqAKvZMFcsPjgE97JkeFreb gCb2TBOrDlgCXeyZ
LiYnN4AO9kwHcweRger1TPXSZ1WA8vVM+QoH9oH69Uz9cmcqgQb2TAPLDrYE JeyZEuYOQQIl7JkS
lh0AC0rYMyWMj4QA9euZ+mUPSgbF65niLQQa0L0+6l40eKB+vVW/5NRfUL6e KV/u4H1QvZ6pXunh
sqCFPdNCyQUVoJF91MjUIcqgjL1UxvxFLqCHPdPD8vOjQRt7po35C49AD3up h7lT0UENe6mGpReD
gUb2TCOTk79BDXumhrkL9ED1eqZ6yXVUoHo9U73yiyZBA3umgZWXioBC9kwh Sy5kBW3smTambnoB
/euZ/uUvLgbl65nyld3/BlrYMy3MXPANKtgzFczeEwrK1zPl48PXX/WrvEwg c+uUplAixpHQX9qh
50fXD6AVxetPg7r6LL/BKuph5QVXW+ATu9XMLpgtTRZFwNvgkUwsg/XpocV+ /2b5xBo5ONXz5KxR
uXLt2NByGvLGVlzl1oCR5dhlhvZjckCKikilvkdw6hNSGbJkMDs35JteDVKW Ta24p6WVMTVznhxd
Aw5Ug2slzk99sw+lLtly1EBft9Xb5zV7K+9v4Yz1nsY8L4avk/tz9KQgtfNM pR1aAYyA7JZR++w/
6hoxhbdUtVTffHLMG3vN3cmelrCV1IZUXrZV14jzhpo15Bxlr2dDp7XNpnSi tEd2k08lXieqzQBj
cdXn1f47GU1vq+0sBLSew+CwOk5DINVyHBxUYtLvH0jmhq+NAqs9kYFShTkv eXZqqkTqkbixhHOI
zzuI5WysdYXhwQwSBcpcmaEZD2orjXywxPWBOiMhQVJ2SdvGdjh92aIX3dV1 dXSlh5iidvAk/Jfl
ju/JGO+r7JQquLEyRwzzyXRWzbF3yX4Z3SFgkSR7q6fMPXtWj5Fysf48I0Hq 7ivt0RlmhkdPu/Qn
jQLcwKYorIqPrT8TW7BFewbOZzPncwbOB5wPOJ+dM/cl+B4ZOPie/tuPgu9R LSw1Oljge/osO+B7
WmTuP8H3yMDB9/TffhR8zzPwPeB7wPfsnLmQc5OCg+/pv/0o+J7n4HvA94Dv 2TlzzyDpJgUH59N/
A1JwPi/A+YDzAeezc+bWqmPkvQbfA76nFyJe8D2qvZ+NDhb4nj7LDvieFpn7 PfgeGTj4nv7bj4Lv
+Sf4HvA94Ht2ztyzmowE5wPOpy8yXnA+34PzAecDzmfnzD17Ds5HBg7Op/8G pOB8XoLzAecDzmfn
zD17Ac5HBg7Op/8GpOB8zuB0A/A+4H12z9wzKDiQgoP36b8BKXofON4AvA94 nw4wF/b5SMHB+/Tf
gBS9DxxwAN4HvE8HmAvORwYOzqf/9qPofOCEA3A+4Hx2z9yz78D7yMDB+/Tf gBS9D5xxAN4HvM/u
mXsGh7tJwcH79N+AFL0PHHIA3ge8TweYC5k3KTh4n/4bkKL3gWMOwPuA99k9 c8/A+0jBwfv034AU
vQ8cdADeB7zP7pkLu32k4OB8+m8/is4HDjoA5wPOZ/fMhXMOpODgfPpvP4rO Bw46AOcDzqcDzK3J
SPA+4H36IuMF73MOBx2A9wHvs3vmQrm1FBycT//tR9H5wDkH4HzA+eyeuWdw tYIUHLxP/w1I0fvA
VlPwPuB9OsBcOONNCg7ep/8GpOh94JQd8D7gfXbPXDhhVA6+I++jDXo5ZEMq B7Et5qscaxlgZbv4
i40XYdmYfqIyM8ch9lPyc4Rc+uzqiFjUDy5878vj2u9Rrxj61rXvW49vCe0G G57g6uj0CJHgN/q2
Pw20XeTl3BsTqmS+BosZxRJVPMsryVkeQl2PwCQuYpIKUjk2HKp5p9OaywGH Y2QnFe7m49Jx3hOq
UpajhdDI1hlZG7URGWpaEc1mZUL/Cw6Xvq7AH0D0vKk8ag2JQgYufT4on+Xm Vd3hZ0oOyPpyuVg7
oSDyPPjn0R/YDlvxPlp+R+Vx1CxR+yTZuTyXw4QnFUBiaNMiVQWYhyto1Acc zrxxSQRg02AoxHdz
2gHtsbDZdNBf2twBRcArzdGJxwatSEBGxCEhbXHhkxUlQ8YuhaWT2SUqOcQa OTjVfV0jtbGQbKY3
nIbYXERDRq3m0tHWHJULIXHuw9/Az10OYyrlcFqqubkr2uWQnzc/5GMc2D5Z UIXbxrALY3Hnrjxb
2AqNSJ+/0gM/fV5WxKIzB6TWbVkua/sSrXw3fJ24JK1Qec9iOHVu83KY0pte GcS7SQNx+Z07IV9S
+aHUPPRvyomomFP9zN5wxxtNqfhkthJR/+SuShsLcwejnJ/2pPMynOHEO9ZL wjeeC2kpE3IYeZAy
2amRB1FkQczDBI60gVBBI8IqW8zSTf7sl1drx7pErDJM/Bskwgwy6Rn7BSmu nQsSpLjW83Rv6dv4
kxXOupvnUmexZGFxo1msYEmd+Z1LcU0sGwfdU4nzokBUc+avJZ0m8ExX9/oh laoOEa6wr7ujVBkP
b400jVC6LVq0Au6GGtcMLuu1pl22o4VeN8wcxti0Ii19aH1YXUg9OB0oNQwN CbJ+oBTucpjhejlM
BqQQgt04VhCULIlc2yFbjSjmWj0a7BLXct4RB994lD4+/t82+/fN37+8vaAf 1xfoW3TjLR55hI2O
7Sfo/PT0e/SBWE/vvUn4YPl4kAG+dhzEgQNEQw/sr/B4gFhFD+vGlHppxPIl NFhGlm1784XlPhJ3
iuY0/vIJ7WEGGcVOf6GzPmtlEYel0tHSHVPBZ+/TF+YB8ib8y63tkEWA0afl yCE2ek9sGs9gtDob
nGYwPsyIPYubJtS/h4y2MQlCn4yWbAROOIX0YdKoFWaQzMJw8Wo4fHh4GGDR 7sDzp0MHTy1niBfO
09XZ6WAWzp30WzmWuqI9zw9eZX6hfz9ZI59gB72x/BHT8uM0t5/koT8S26My hN74XiABbfZvmKBe
CANG5XIac2M6DwcsLAxsb0A5PffcAR4T2tkBDTmjQHNgBzPLX1wkmJL/kfnC 88MMyj+YFg7W0eyA
rxW+jRck5O8uyWDhLKnWDK5HdJwtO/z17hN/UP6eF0zJYMIiygfP/3Pwhspc pGtfwlJ6hzmN+czF
O1JgZDMVZ+uVoe85ARdXRs5T4iJqgzCyH20Hp99Pc1fIs0AR2wTE2TimT3L9 Qf8pI49+vLwYDjlZ
65bv3uZ+j1piMyH6z4SZGHRPhZQq56f3v/509/H3u7foCn3z19ILL2oOtni5 lIVpGhkspirI631t
nCdULNOuKU2YssgPKQfPN5EeKv4kGq/UenIBYFjOq7jp4yc5xr+8+FrdyRIC jl3Pffo/1OCMPftJ
8efXAc4qmO1Ru+sv3ZDO2wZi6IO/U4b44bFKgIvoK3q38sgYCZwZBFySGSIq yb73EKDbuOovzwT+
wR3pQCBav1oySLRdIcJX3CTnIbbOT8pOb9E4NynKjZgZ88hdOk4pF9fspi1V cVvGyxJminSTMFxy
1UQlb78WiRGttyt4V9D0KQ7f4om1dMISzeMfUaPlJqFm/y0XEeZ2ULIQjiae CEbEDxPCgwX+ZEpW
2C0iW9tfHzu0UytqkK1wpsNGnuLg0MKDlL2WYXaeVkNu5zws43nu0XHkHhgp 8mHIu6kByWJ653tz
8ctx7GtOBF7J2KX+e4TWAf34Iw+fazqoQRJ2V00MykuHOOsq51yXIrgIIt6q 65MEfDxtaL0SpP1M
TJGKraRVpEmmDdppKuGhsdi//clxTvoqp8iRVHdR6J93QuiLVGxF6J+D0JtC 9VHoC4smxcWy5mW8
2GgbIi0lXB+tsjilc+KjrKHmmwwz+cJMetC05FnELTQin2Gf8KCcYmJzf7YI eB/JMJ0WS6ui213c
y5ehxhFiA1Wo0gpUEd6u68EQjVatBR7/ZjlLCtJAHkS6oqkq3GuwLL9hkYqq 6JuTn66UHhhJqZh5
6opo5cRhC5svKlca9LZe8MHddOeFfPoUdW+XTOLpqyb3piAfjzG1tHhcaLOt gLe0Gq2VkapZ12Rc
oymrbbpneTDT6sD9KrAv22bwzLC+volKybqy2UhpcQP1do3KZc264b2rGS4T TsPiT0VpsNE5Ek1K
k6pUkKf63TjTL6sxU8fOZ7KDQCurEv3FzOKPqUUwqieM1hS6W0pYa5rc+R2y bD1n/8IPyTS/7+EH
mPltmXmT/cG9jBggki2Voue9iWRVR3VD7FH6PsQe3Yg9kmqLXR7Osc5Ua2cV N4gEDnmD1YYOu0t7
qXadFt6ScubKckBJyxBJlNQ4tNpZIKFxNsTeh32nhpOHvWeI6YkpW/NXOjU4 3QmMG/I5m527VIx5
F7Bv12DfrtgnsRuhVW8GiyDWqMsgMgCRCNBP4k5jIeAutdGtZlF1LlP+T763 ImPsa7TW0JyCtarV
WlY7shphJPj7dOZi53erF3MG1eGylgprZCVqK6hShWJOl4h0tfqUkVPTFhAW tG9uCmT9uKNNNNcP
+e+yX6t/q/ql8nkZJ/F8UsnH0hdETZeE96VvLUPiSMdrg5G6fU+CUCEMBhZC nawquj65Tm3at2+c
8OLHH7bZw2K4IuuhVHxLXbkXksljW/LwkWEncq0116oq/WF75pTaUG/seaQi 59JGocftPc97LH3L
eYct+q8qAqmMPMosYisxsyRqUEYLjUYJ5v5XqkGbSkmJwO+29/nBa6v36al6 i6pSDM8LBnK7/M0v
GbXF3w/eGDta/N1u//NTi7b6nzsav2HJwiUmviBYG6D/CSsDowZNehPj+qJX Rl89z8vHim3JqZkr
37Ky5g/1bosJLG2p5wy66gwbmdPxQ2LMZnXrE2XqR7JVabWqZbmGLWnZ3RkS P715hlSd4W4wAKxi
7lu8Ijb+JRo8XS63lGBqWaqDh2qdLn1h6luLGbFlM6hNZHp7BkZ9GGrJfL0h MVe3vQUx/0VtnXYh
1hs5q7e+9cBOVau2Vo1ozZKYKU1uw15jKpM/+6QtP5DdoSZ25UVF3iQUK4Rd WRPQWtZ+ZhCya63/
bKl4b6OYvaENAv0f/ZIjLGD0q0e/8jylupPgRnjaeKazdwRrztI3j1ZeGK/d tBy0SlcHymdi4vi9
5j2wjt/dIGqttWzW8ZlIxdOyYWOnI1bwthQ+PkhRIR21YktxtmLxRINiiLlp Gze5vQi5FvTZWjZk
Oeqi5Ia1skp5ZrruvEHf14uyt9WLso0ux54VWVqQ7Q26c+M5DrbZkxY7Jc2M ttApjYXzRsfo2TbH
qKVOSbPxLY6RpDcbTAXIv2WT6ybHvmU2Zcd+S0P/nbJPBt7RsSorNzcp0WK7 XUcOLrNaQ90GqsIl
xcLfBoIZeuJILYXTNJWgqo6UNdaQ0JTcwdOUjikWvBtF/bwEdbNBaStGYc7m W5H4i0GuqwPSdmaW
f4//WmI3n39tBH1ah/NerfEGmrYRbzzPwVb1nKovuvV9/xUgGoqmR/jO4deZ XEe7p+IN44ohb4B5
DYTHlcspIsWwxc40IApVndliL87b68Vndh5BcTlom7ZkGwpvEDISr/mA8Z5f rkT+Xb3upp+aSI5v
KJDwySdzwm41YD/fsVKUqEtu/uiAoRrZ/xJnfGP5Y/brGtGP+a1wJPh1QYfw jbd0x5keyelc52vp
TCnCX1YC1kLZl3o1JJEl3vx1vH01Q0fqDI31C3S0kqeGY/WbR8ZrHq/4/wuj dTmMontWF0m//z9Q
SwcInc+8DGsrAABEVgMAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAAB5AAAA b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC9v cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuY3NoYXJwLmoy c2U1LmxvZwMAUEsH
CAAAAAACAAAAAAAAAFBLAwQUAAgACAANlWM6AAAAAAAAAAAAAAAAQgAAAG9y Zy5lY2xpcHNlLmdt
dC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvcGx1 Z2luLnhtbLWTwUrE
MBCG74LvUHJ3oiuCSLs9KIIHRVAfoKRDN5JkQhK3+/gmtqZZT8vizmlCZr5/ hp+p251W1Radl2Qa
dgWXrEIjqJdmaNjH++PFLWvX52d1i0JJ63GpvYbV9GXV1yBNzKqqqnEX0KSC n+cUsm8YuQFmBAw6
gI4SXhAI0poMYC8DOcjdHoTfdM6C6XQchRU0S9KEQ4Fz+/q3v9YYuliKqiDO I25CsHecj+OYwVGE
P9NDAvP7tzTQgkq0iMdXR1vZo9sHxhCq8/74zV8K9r4qL2WX1XjebfaCZ+h/ m/O58ngDUsT8aGum
7lM5k+incuapYP9xppQ91Jl4Qjzf0DdQSwcIOaNz3wABAACRAwAAUEsDBBQA CAAIAA2VYzoAAAAA
AAAAAAAAAABcAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVk aXRvci5leHRlbnNp
b25zLmNzaGFycC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJl ZnOVjr0KwjAAhHeh
7xBwD01F0EInUXBzEJzT5loi+eOS+vx26Wxdjhu+j7v9C0bc0At1Ekq1zaGt G3G5PkVT1+dqh8HZ
lCETMYIIA7L8gNnG0KlqFznJFXmbIodILOGTdeBSDCYEWTQnlIfTZYz0nZLH 36ZPzuplbgudGHsH
L3XOYLkbhGJHC3YgI7faCLP/181x5vrxC1BLBwhAlj0ZlQAAAEoBAABQSwME FAAIAAgADZVjOgAA
AAAAAAAAAAAAAEwAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuY3NoYXJwL01FVEEtSU5GL01BTklGRVNULk1GnZExa8MwEIV3/wrh uRZNoItDhrZ4KbiU
Gror8tkRSDpXOqdJf32lKHbS0nYIQgjuHd+7d6qFVR14Kt7AeYW2ZAt+mz2M ttVQ1Cdx1paT8iwM
lKzaE9ioeEbIaAvMYAuaQasIHevCjcXHZivcwAyQOOoTpDmYDWolEwxdz0Fq NXjgvSEeWpWXyCUa
g5YnJofZkksfsSuvbK+BwnhrciNM8Ms850T3ktROBNDVfnxGnJ1sG4G1EkWD HX0IB9krvI/KQZF6
vrtJdMDdaEkZuMn+HiTl2ySXXcqzzhc8nHzlwKMeKUZc4xBfof+DXab6hRl2 lE+BTrO31R7k0aGy
O+XQGrBUsqdlUxULfvdjpaHtJX7moWRafB6yL1BLBwhk8cbjGAEAAFkCAABQ SwMEFAAIAAgADZVj
OgAAAAAAAAAAAAAAAEwAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuY3NoYXJwL2ljb25zL2Fzc2lnbm1lbnQuZ2lm1dFLTxpRAAXg iwpaijBii4goDCoi
YjFx0TYmTaiK0X/gsknTuDZdV72+SPoPmph01biWbk18pbp2V1Y1beRRgZlh 5r5v2js/w5MvJ2d/
VlaLr16/04AGfiwBlaNbVG0r+N7AVQNVDVwzUM3AdQPV1TZRzcR1E9VN3HCR hoUbFvlrkQcLP3RI
s0NaLtq0SdOmLZu2VTuk5dC2Q9oONRxqqkbMRNREzFIDMwuzjovbmNmYdwi3 CXcUypFLYMoxFYgJ
zARhgqrmgrok45IKyYRgQnIhhWophZT/HmF02uPxgy2Qc59wPwG9p9seuLu3 D70lX6nb2+Xz9XR5
YaD/SV9vIBDs8z/tD/phSBsMfdMGwqFwWAvBwefl8smzk+9wZCQyFIsOxyKR izOYjCeSiXg8eTM2
egNT43oK/KzoE5MpmEmn7zJ3U5O/01MwOzudrVRmXuSycC5P50he8Dz8cPW1 cFkM7MxvXB3riwfJ
+MvNP9tRs7j8GX60f50vXgcTbz7VjPPLw2DhLQTrw+9La3puP/plNaOBhf9Q SwcILlBSBJcBAABg
AgAAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAABHAAAAb3JnLmVjbGlwc2Uu Z210Lm1vZGlzY28u
Y29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC9pY29ucy9ibG9jay5n aWbF0UtPE1EUwPEZ
KVhQdIqt0MRC6yAtUJRaxEJBWCBIYzcm7nXnQkkTV26UXGtSXBhFY+KTuDEI rIAPYCIxBuPGjayI
r7RMS9s7r/uaO4kzn8KTX/45Z31mZqdTI9clQRI+XxVmbq5curUyO7eamVu9 nFvL5tbuvtiad7zc
Wvzw7c13tFuEu0X1l6L9VrQ/Ff1vxSjVUamOixCXICpBvAfRHsQKRArEZWiW nVN1YEVFiorLLlLW
cFkjFY3sa3hfJ1Wd1Fy0apCqQWsGrTs1Sc2kdZPUTQpNqroYRExFVEVMcxbM NMx0l2VgSydMJ5ZB
LNNBLeTimFqYcsQ4YZw6tTh12cyyKbcZ54zbFre5U9vmtr20+eP/ilCP2CLc E+KCM+5PhINf51vA
/fwD4C8ECm1+XyBwzOcHoc6O9uOhUFd78ERnVxCEI93h95GTcliWI2HQ3bOx sX5qfRPE49FYU0Nf
f0NTf7S3DyQGBhOiNJA4Kp45vQ2S584e8SSTQ8Oe1uHzSTCaSgnNo6WRZqEK xibShxvTE+MXGg9N
jo+BvCfYce3TZKsIvL7Y8hdJnpa8udjPj4/lqYI3A6YW2h6FnuT9vTcWnvZk nw/e0Tzbi9Hs27hv
6GLm2asryzuvwe2H75byB0Qh/Q9QSwcIyu27feYBAABuAgAAUEsDBBQACAAI AA2VYzoAAAAAAAAA
AAAAAABRAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRv ci5leHRlbnNpb25z
LmNzaGFycC9pY29ucy9ib29sZWFuX2xpdGVyYWwuZ2lmjY+9LwNhAMbfIr1W DMck4utsmmtRIhUG
EvW5YBAj20s6iIjNIOnUodg0IhIi8REVYhLCwFADFjFbrinNnV7u7r338+h/ 4Mmz/JJn+D2j4yOx
vgUZyOAdAMaEEJ6NKKF8NHG6f/2BqUCY2S6zEM3ryLCI6VBNR4Uft2jiifWr yXIv8wbSdKfwg3SL
FE235FDDwpbLTIcgwm2XEiYw5Vx4jAvNQLPp+0LJzRvOt+nqFtYMp+QQy6W6 TTATiDDKBWace397
XnbyPPCPKLjKB0A3UMtQ/gT8qYfM8pjasPm4vZJLpKfa4oc9J73D06mDr+Ot m3lpUV2LVSdXiTm4
+/b1FNzLzalw4PP6OTEDa+prNpJL7YEmGGoIwWAAVoQqJAlKYRjO7IQb1Q7Y 7IctHUdVlWeKEslm
I+DiXOmKdLb6or67m+jtfVSurX2se8rlZHns5TU+BPp/AVBLBwguWjv2VwEA AG0BAABQSwMEFAAI
AAgADZVjOgAAAAAAAAAAAAAAAE4AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNj by5jb21tb24uZWRp
dG9yLmV4dGVuc2lvbnMuY3NoYXJwL2ljb25zL2NhdGNoX2NsYXVzZS5naWZz 93SzsEwUYBBg2MzA
oOfV2rz6zOpjd87dey2RusCwdJVF1VrHho2hvTvTZx4oXHCkYNbu////M8CA 4k8WRgYGHgYdEAdk
BgOLwYSTnqv3WrzmqYq/zdJy6cSMnoVr2jxmnlRQv/ToLo/SG440ucYHD5uU RPpYJhWdzIlSYrAG
AFBLBwiEsocFgAAAAIMAAABQSwMEFAAIAAgADZVjOgAAAAAAAAAAAAAAAEcA AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuY3NoYXJw L2ljb25zL2NsYXNz
LmdpZnP3dLOwTBRgEGBokWT4+/ffr99/H7788vXHnxfvv7/59NO7bpNX7Uav 2g0+9Zu9azf6Nmzx
qdvoXbvBr3GLb/3mgJbt/s3bPnz95Q9ktG73a94a0Lo9oGVbwYIj/7EBxZ8s jAwM8gw6DEAAspOB
NfGBel/Kz0TxEl+B1Mjgnt6JCfd3BPRyP/zv0NQcriHV37owQzHTar7Q03TD FVHrmV8qH3hbxdwp
yOygN5uRrdC5MEL+HpdLs2LbrZdKbbJd/w3+NTQ2lFb71Va1+tZKNPUaKyky WAMAUEsHCJZ1JjHX
AAAA5AAAAFBLAwQUAAgACAANlWM6AAAAAAAAAAAAAAAASQAAAG9yZy5lY2xp cHNlLmdtdC5tb2Rp
c2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvaWNvbnMvY29t bWVudC5naWYBdgCJ
/0dJRjg5YRAAEADjDwBPjE9RjVFUj1R/q3+BrYGDroOEr4Svy6+xzLGzzrO0 zrTe6t7h7OHj7ePk
7uT///8sAAAAABAAEAAABCvwyUmrvTjrTZl43oYUz7gRyYNuQfO0mgM88qYM z70Zx8NvgsUjyCka
j8gIADtQSwcIMulPY3sAAAB2AAAAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAA AABHAAAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNz aGFycC9pY29ucy9l
bXB0eS5naWbV0b1PE3Ecx/Ff9WqBlmsPqQoVej0qFKi1aOJD1AFQLgwmuLuA onU1JBoXya8+MEqc
HIwMxjADg6PxKR3VxcXBgdBeoe3vnn5P9zvj3Z/hN6+889m/+vzcxUuLKZAC 33Tw5ieudwJkD5E6
wnVEGgg3EDEQNoJt4oZJDBMbJmmGaNMiTYvuW/TAIgc2bdm0HWIth7Yc1nZY J6hL2y7ruLTjMhTi
pstMlyPMEOYmZibmVjAItwi3Q55DuEM8m3Kbeg713ADzcEgQ5hEmMBeEC8oF C+oJFvK55zPhcyG4
8D3hi6C+L3z/7c6v/0XurzL7YHlxZfmO+vD+SkXV528sgByTIj3gCSiC4MJH gdjXVQCrT59BaS26
dkiKRKOHIxKMJ7piR+Lx3lh3T6K3G8rJPvl9MqXIipKUYV//9vbW0a0dODiY PjZw/MRAOv3pI8xm
hrPDmUy2NnSyBrVTqpbXtJHRnDo6psGJQmF3Ynd8bK8wDovlyWJpslw6Uz49 VSrCc2fBPfFqamEj
MX2+8vvDenVuJnOh8mfz5ux3eejKo1tf
Re: [Announce] Extended Model Browser [message #679 is a reply to message #669] Wed, 04 March 2009 14:24 Go to previous messageGo to next message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Hi Gabriel,

Thanks for the examples! Can you speculate on the timeframe in which
these enhancements would be implemented? If it's not among your
immediate priorities to implement them soon - and this would be
understandable :) - I can have a go at it and then submit a patch.

Cheers,
Dimitris

Gabriel wrote:
> Hello Dimitris,
> I think that we could manage a generic nsURI ("*" is a good example).
> And yes, you will have to implements NameProvider and/or IconProvider to
> associate an EObject to a label and/or icon.
>
> That's all !
>
> Here is examples for j2se5 and C# metamodels (it will be submitted soon)
> It is the plugin sources, I hope it will give you a lot of ideas :-)
>
> best regards,
> Gabriel
>
>>>>>>> Hi Gabriel,
>
> Looks great! Thanks for sharing this.
>
> In fact I'd like to provide an extension to contribute custom names and
> icons to EObjects based on particular annotations in the respective
> EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
> do this, I would like to be able to specify my extensions not for a
> particular nsURI but for any nsURI.
>
> In the current version, this is doesn't seem to be possible as each
> extension needs to define a specific nsURI (id). I was wondering if a
> future version of the editor could also provide support for a generic
> nsURI (e.g. "*") which I could use to define that my extension applies
> to any nsURI. In this case I suspect that the NameProvider and
> IconProvider interfaces might need to be enhanced to also support a
> providesName(EObject) and providesIcon(EObject) method respectively to
> allow such extensions specify exactly which EObjects they can provide
> names and icons for.
>
> Any thoughts on this?
>
> Cheers,
> Dimitris
Re: [Announce] Extended Model Browser [message #681 is a reply to message #679] Thu, 05 March 2009 20:06 Go to previous messageGo to next message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
--=_mixed 006E769CC1257570_=
Content-Type: text/plain; charset="US-ASCII"

Hello Dimitris,

I think that the project could be updated as soon as possible (next week).
There is only few changes in code to manage generic name or icon provider.

If you would like to test early, you may try these implementations of
classes NameProvidersRegistry and IconProvidersRegistry.


I will check with Nicolas Bros if he could update submitted patch.

Best regards,
Gabriel

--=_mixed 006E769CC1257570_=
Content-Type: application/octet-stream; name="NameProvidersRegistry.java"
Content-Disposition: attachment; filename="NameProvidersRegistry.java"
Content-Transfer-Encoding: base64

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAw OSBNaWEtU29mdHdh
cmUuDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBh
bnlpbmcgbWF0ZXJpYWxzDQogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9m
IHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAqIHdoaWNoIGFj Y29tcGFuaWVzIHRo
aXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQogKiBodHRw Oi8vd3d3LmVjbGlw
c2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KICoNCiAqIENvbnRyaWJ1dG9y czoNCiAqICAgIE5p
Y29sYXMgQnJvcyAoTWlhLVNvZnR3YXJlKSAtIGluaXRpYWwgQVBJIGFuZCBp bXBsZW1lbnRhdGlv
bg0KICogICAgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ug b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLm5hbWluZzsN Cg0KaW1wb3J0IGph
dmEudXRpbC5BcnJheUxpc3Q7DQppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7 DQppbXBvcnQgamF2
YS51dGlsLkhhc2hTZXQ7DQppbXBvcnQgamF2YS51dGlsLkxpc3Q7DQppbXBv cnQgamF2YS51dGls
Lk1hcDsNCg0KaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3Jl RXhjZXB0aW9uOw0K
aW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlv bkVsZW1lbnQ7DQpp
bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247DQpp bXBvcnQgb3JnLmVj
bGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsNCmltcG9ydCBv cmcuZWNsaXBzZS5j
b3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5Ow0KaW1wb3J0IG9yZy5l Y2xpcHNlLmNvcmUu
cnVudGltZS5QbGF0Zm9ybTsNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNv cmUuRUNsYXNzOw0K
aW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KaW1wb3J0 IG9yZy5lY2xpcHNl
LmVtZi5lY29yZS5FUGFja2FnZTsNCmltcG9ydCBvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLkVjb3JlRWRpdG9yUGx1Z2luOw0KaW1wb3J0IG9yZy5lY2xp cHNlLmdtdC5tb2Rp
c2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5BYnN0cmFjdFJlZ2lzdHJ5 Ow0KaW1wb3J0IG9y
Zy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IudXRpbC5FTUZV dGlsOw0KDQovKioN
CiAqIFRoZSBzaW5nbGV0b24gcmVnaXN0cnkgb2YgbmFtZSBwcm92aWRlcnMs IHdoaWNoIGluaXRp
YWxpemVzIHRoZSByZWdpc3RyeSBieSByZWFkaW5nIGV4dGVuc2lvbnMNCiAq IHdoZW4gZmlyc3Qg
YWNjZXNzZWQuIEl0IGNhbiBwcm92aWRlIG5hbWVzIGZvciBtb2RlbCBlbGVt ZW50cywgdXNpbmcg
e0BsaW5rIE5hbWVQcm92aWRlcn1zDQogKiBwcm92aWRlZCB0aHJvdWdoIHRo ZSBuYW1pbmcgZXh0
ZW5zaW9uIHBvaW50Lg0KICovDQpwdWJsaWMgY2xhc3MgTmFtZVByb3ZpZGVy c1JlZ2lzdHJ5IGV4
dGVuZHMgQWJzdHJhY3RSZWdpc3RyeSB7DQoNCglwcml2YXRlIHN0YXRpYyBm aW5hbCBTdHJpbmcg
TUVUQUNMQVNTX0VMRU1FTlQgPSAibWV0YWNsYXNzIjsNCglwcml2YXRlIHN0 YXRpYyBmaW5hbCBT
dHJpbmcgRVhURU5TSU9OX1BPSU5UX05BTUVTUEFDRSA9ICJvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp bmcgRVhURU5TSU9O
X1BPSU5UX05BTUUgPSAibmFtaW5nIjsNCglwcml2YXRlIHN0YXRpYyBmaW5h bCBTdHJpbmcgTUVU
QU1PREVMX0lEX0FUVFJJQlVURSA9ICJpZCI7DQoJcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5n
IE1FVEFNT0RFTF9FTEVNRU5UID0gIm1ldGFtb2RlbCI7DQoJcHJpdmF0ZSBz dGF0aWMgZmluYWwg
U3RyaW5nIE5BTUVfUFJPVklERVJfRUxFTUVOVCA9ICJuYW1lUHJvdmlkZXIi Ow0KCXByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1BST1ZJREVSX0NMQVNTID0gImNs YXNzIjsNCglwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMVEVSX0VMRU1FTlQgPSAiZmls dGVyIjsNCglwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQUNMQVNTX05BTUVfQVRUUklC VVRFID0gIm5hbWUi
Ow0KDQoJcHJpdmF0ZSBzdGF0aWMgTmFtZVByb3ZpZGVyc1JlZ2lzdHJ5IGlu c3RhbmNlID0gbnVs
bDsNCg0KCS8qKg0KCSAqIEEgbWFwIG9mIG1ldGFtb2RlbHMgdG8gbGlzdHMg b2YgRmlsdGVyZWRO
YW1lUHJvdmlkZXIgdGhhdCBwcm92aWRlIG5hbWVzIGZvciB0aGUgbWV0YW1v ZGVsJ3MNCgkgKiBp
bnN0YW5jZXMNCgkgKi8NCglwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8Rmls dGVyZWROYW1lUHJv
dmlkZXI+PiBuYW1lUHJvdmlkZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBM aXN0PEZpbHRlcmVk
TmFtZVByb3ZpZGVyPj4oKTsNCg0KCXB1YmxpYyBzdGF0aWMgTmFtZVByb3Zp ZGVyc1JlZ2lzdHJ5
IGdldEluc3RhbmNlKCkgew0KCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgew0K CQkJaW5zdGFuY2Ug
PSBuZXcgTmFtZVByb3ZpZGVyc1JlZ2lzdHJ5KCk7DQoJCX0NCgkJcmV0dXJu IGluc3RhbmNlOw0K
CX0NCg0KCS8qKg0KCSAqIFF1ZXJ5IHRoZSBuYW1lIHByb3ZpZGVycyByZWdp c3RyeSBmb3IgYSBu
YW1lIGZvciB0aGUgZ2l2ZW4ge0BsaW5rIEVPYmplY3R9Lg0KCSAqIA0KCSAq IEBwYXJhbSBlT2Jq
ZWN0DQoJICogICAgICAgICAgICB0aGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2Ug bmFtZSBpcyBxdWVy
aWVkDQoJICogDQoJICogQHJldHVybiB0aGUgbmFtZSBvciA8Y29kZT5udWxs PC9jb2RlPiBpZiBu
byBuYW1lIHdhcyBwcm92aWRlZA0KCSAqLw0KCXB1YmxpYyBTdHJpbmcgZ2V0 TmFtZShFT2JqZWN0
IGVPYmplY3QpIHsNCgkJRUNsYXNzIGVDbGFzcyA9IGVPYmplY3QuZUNsYXNz KCk7DQoJCWlmIChl
Q2xhc3MgPT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KDQoJCVN0cmluZyBt ZXRhY2xhc3NRdWFs
aWZpZWROYW1lID0gRU1GVXRpbC5nZXRNZXRhY2xhc3NRdWFsaWZpZWROYW1l KGVDbGFzcyk7DQoN
CgkJLy8gdGhlIG5zVVJJIG9mIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhl IG1ldGFtb2RlbCBk
ZWZpbml0aW9uDQoJCUVQYWNrYWdlIGVQYWNrYWdlID0gZUNsYXNzLmdldEVQ YWNrYWdlKCk7DQoJ
CWlmIChlUGFja2FnZSA9PSBudWxsKQ0KCQkJcmV0dXJuIG51bGw7DQoNCgkJ U3RyaW5nIG5zVVJJ
ID0gZVBhY2thZ2UuZ2V0TnNVUkkoKTsNCg0KCQlMaXN0PEZpbHRlcmVkTmFt ZVByb3ZpZGVyPiBm
aWx0ZXJlZE5hbWVQcm92aWRlcnMgPSB0aGlzLm5hbWVQcm92aWRlcnMuZ2V0 KG5zVVJJKTsNCgkJ
aWYgKGZpbHRlcmVkTmFtZVByb3ZpZGVycyA9PSBudWxsKSB7DQoJCQkvLyB0 cnkgdG8gcmV0cmll
dmUgYSBnZW5lcmljIG5hbWUgcHJvdmlkZXINCgkJCWZpbHRlcmVkTmFtZVBy b3ZpZGVycyA9IHRo
aXMubmFtZVByb3ZpZGVycy5nZXQoIioiKTsNCgkJCWlmIChmaWx0ZXJlZE5h bWVQcm92aWRlcnMg
PT0gbnVsbCkgew0KCQkJCXJldHVybiBudWxsOw0KCQkJfQ0KCQl9DQoNCgkJ Zm9yIChGaWx0ZXJl
ZE5hbWVQcm92aWRlciBmaWx0ZXJlZE5hbWVQcm92aWRlciA6IGZpbHRlcmVk TmFtZVByb3ZpZGVy
cykgew0KCQkJaWYgKGZpbHRlcmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRh Y2xhc3NRdWFsaWZp
ZWROYW1lKSkgew0KCQkJCVN0cmluZyBuYW1lID0gZmlsdGVyZWROYW1lUHJv dmlkZXIuZ2V0TmFt
ZShlT2JqZWN0KTsNCgkJCQlpZiAobmFtZSAhPSBudWxsKQ0KCQkJCQlyZXR1 cm4gbmFtZTsNCgkJ
CX0NCgkJfQ0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKiogSW5pdGlhbGl6 ZSB0aGUgcmVnaXN0
cnkgYnkgcmVhZGluZyB0aGUgZXh0ZW5zaW9uIHBvaW50IHRvIGRpc2NvdmVy IGV4dGVuc2lvbnMu
ICovDQoJcHVibGljIE5hbWVQcm92aWRlcnNSZWdpc3RyeSgpIHsNCg0KCQlJ RXh0ZW5zaW9uUmVn
aXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNp b25SZWdpc3RyeSgp
Ow0KCQlJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSBleHRlbnNp b25SZWdpc3RyeS5n
ZXRFeHRlbnNpb25Qb2ludCgNCgkJCQlFWFRFTlNJT05fUE9JTlRfTkFNRVNQ QUNFLCBFWFRFTlNJ
T05fUE9JTlRfTkFNRSk7DQoNCgkJSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMg PSBleHRlbnNpb25Q
b2ludC5nZXRFeHRlbnNpb25zKCk7DQoJCWZvciAoSUV4dGVuc2lvbiBleHRl bnNpb24gOiBleHRl
bnNpb25zKSB7DQoJCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWd1 cmF0aW9uRWxlbWVu
dHMgPSBleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7DQoJ CQlmb3IgKElDb25m
aWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCA6IGNvbmZp Z3VyYXRpb25FbGVt
ZW50cykgew0KCQkJCVN0cmluZyBuYW1lID0gY29uZmlndXJhdGlvbkVsZW1l bnQuZ2V0TmFtZSgp
Ow0KCQkJCWlmIChuYW1lLmVxdWFsc0lnbm9yZUNhc2UoTUVUQU1PREVMX0VM RU1FTlQpKSB7DQoJ
CQkJCXJlYWRNZXRhbW9kZWxFbGVtZW50KGNvbmZpZ3VyYXRpb25FbGVtZW50 KTsNCgkJCQl9IGVs
c2Ugew0KCQkJCQlsb2dVbmtub3duRWxlbWVudChjb25maWd1cmF0aW9uRWxl bWVudCk7DQoJCQkJ
fQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqIFJlYWQgYSAnbWV0YW1vZGVsJyBl bGVtZW50ICovDQoJ
cHJpdmF0ZSB2b2lkIHJlYWRNZXRhbW9kZWxFbGVtZW50KElDb25maWd1cmF0 aW9uRWxlbWVudCBj
b25maWd1cmF0aW9uRWxlbWVudCkgew0KCQlTdHJpbmcgbWV0YW1vZGVsSWQg PSBjb25maWd1cmF0
aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoTUVUQU1PREVMX0lEX0FUVFJJQlVU RSk7DQoJCWlmICht
ZXRhbW9kZWxJZCA9PSBudWxsKSB7DQoJCQlsb2dNaXNzaW5nQXR0cmlidXRl KGNvbmZpZ3VyYXRp
b25FbGVtZW50LCBNRVRBTU9ERUxfSURfQVRUUklCVVRFKTsNCgkJCXJldHVy bjsNCgkJfQ0KDQoJ
CUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuID0gY29uZmlndXJh dGlvbkVsZW1lbnQu
Z2V0Q2hpbGRyZW4oKTsNCgkJZm9yIChJQ29uZmlndXJhdGlvbkVsZW1lbnQg Y2hpbGQgOiBjaGls
ZHJlbikgew0KCQkJU3RyaW5nIG5hbWUgPSBjaGlsZC5nZXROYW1lKCk7DQoJ CQlpZiAobmFtZS5l
cXVhbHNJZ25vcmVDYXNlKE5BTUVfUFJPVklERVJfRUxFTUVOVCkpIHsNCgkJ CQlyZWFkTmFtZVBy
b3ZpZGVyRWxlbWVudChjaGlsZCwgbWV0YW1vZGVsSWQpOw0KCQkJfSBlbHNl IHsNCgkJCQlsb2dV
bmtub3duRWxlbWVudChjb25maWd1cmF0aW9uRWxlbWVudCk7DQoJCQl9DQoJ CX0NCg0KCX0NCg0K
CS8qKg0KCSAqIFJlYWQgYSAnbmFtZVByb3ZpZGVyJyBlbGVtZW50LCBhbmQg YWRkcyB0aGUgbmFt
ZSBwcm92aWRlcnMgdG8gdGhlIHJlZ2lzdHJ5Lg0KCSAqIA0KCSAqIEBwYXJh bSBjb25maWd1cmF0
aW9uRWxlbWVudA0KCSAqICAgICAgICAgICAgdGhlICduYW1lUHJvdmlkZXIn IGVsZW1lbnQNCgkg
KiBAcGFyYW0gbWV0YW1vZGVsSWQNCgkgKiAgICAgICAgICAgIHRoZSBuc1VS SSBvZiB0aGUgcGFj
a2FnZSBjb250YWluaW5nIHRoZSBtZXRhbW9kZWwncyBtZXRhY2xhc3Nlcw0K CSAqLw0KCXByaXZh
dGUgdm9pZCByZWFkTmFtZVByb3ZpZGVyRWxlbWVudChJQ29uZmlndXJhdGlv bkVsZW1lbnQgY29u
ZmlndXJhdGlvbkVsZW1lbnQsDQoJCQlTdHJpbmcgbWV0YW1vZGVsSWQpIHsN CgkJDQoJCS8vIGlm
IG5vdCBudWxsLCBmaWx0ZXJzIG9uIHRoZSBtZXRhY2xhc3MgbmFtZQ0KCQlI YXNoU2V0PFN0cmlu
Zz4gZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG51bGw7DQoJCQ0KCQlJQ29uZmln dXJhdGlvbkVsZW1l
bnRbXSBmaWx0ZXJFbGVtZW50cyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50Lmdl dENoaWxkcmVuKEZJ
TFRFUl9FTEVNRU5UKTsNCgkJaWYoZmlsdGVyRWxlbWVudHMubGVuZ3RoID4g MCkgew0KCQkJLy8g
b3B0aW9uYWwgZWxlbWVudCA6IDAgb3IgMQ0KCQkJSUNvbmZpZ3VyYXRpb25F bGVtZW50W10gbWV0
YWNsYXNzRWxlbWVudHMgPSBmaWx0ZXJFbGVtZW50c1swXS5nZXRDaGlsZHJl bihNRVRBQ0xBU1Nf
RUxFTUVOVCk7DQoJCQlmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBtZXRh Y2xhc3NFbGVtZW50
IDogbWV0YWNsYXNzRWxlbWVudHMpIHsNCgkJCQlTdHJpbmcgbWV0YWNsYXNz TmFtZSA9IG1ldGFj
bGFzc0VsZW1lbnQuZ2V0QXR0cmlidXRlKE1FVEFDTEFTU19OQU1FX0FUVFJJ QlVURSk7DQoJCQkJ
aWYobWV0YWNsYXNzTmFtZSAhPSBudWxsKSB7DQoJCQkJCWlmKGZpbHRlcmVk TWV0YWNsYXNzZXMg
PT0gbnVsbCkgew0KCQkJCQkJZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG5ldyBI YXNoU2V0PFN0cmlu
Zz4oKTsNCgkJCQkJfQ0KCQkJCQlmaWx0ZXJlZE1ldGFjbGFzc2VzLmFkZCht ZXRhY2xhc3NOYW1l
KTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCWZpbmFsIEhhc2hTZXQ8U3Ry aW5nPiBmRmlsdGVy
ZWRNZXRhY2xhc3NlcyA9IGZpbHRlcmVkTWV0YWNsYXNzZXM7DQoNCgkJT2Jq ZWN0IG5hbWVQcm92
aWRlck9iamVjdDsNCgkJdHJ5IHsNCgkJCW5hbWVQcm92aWRlck9iamVjdCA9 IGNvbmZpZ3VyYXRp
b25FbGVtZW50DQoJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKE5B TUVfUFJPVklERVJf
Q0xBU1MpOw0KCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCgkJCUVj b3JlRWRpdG9yUGx1
Z2luLklOU1RBTkNFLmxvZyhlKTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAo bmFtZVByb3ZpZGVy
T2JqZWN0ID09IG51bGwpIHsNCgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29u ZmlndXJhdGlvbkVs
ZW1lbnQsIE5BTUVfUFJPVklERVJfQ0xBU1MpOw0KCQkJcmV0dXJuOw0KCQl9 DQoNCgkJTGlzdDxG
aWx0ZXJlZE5hbWVQcm92aWRlcj4gZmlsdGVyZWROYW1lUHJvdmlkZXJzID0g dGhpcy5uYW1lUHJv
dmlkZXJzLmdldChtZXRhbW9kZWxJZCk7DQoJCWlmIChmaWx0ZXJlZE5hbWVQ cm92aWRlcnMgPT0g
bnVsbCkgew0KCQkJZmlsdGVyZWROYW1lUHJvdmlkZXJzID0gbmV3IEFycmF5 TGlzdDxGaWx0ZXJl
ZE5hbWVQcm92aWRlcj4oKTsNCgkJfQ0KDQoJCS8qDQoJCSAqIFRoZSB1c2Vy IGNhbiBlaXRoZXIg
cHJvdmlkZSBhIEZpbHRlcmVkTmFtZVByb3ZpZGVyIG9yIGEgTmFtZVByb3Zp ZGVyLiBJbiBlaXRo
ZXIgY2FzZSwgaWYNCgkJICogYSBmaWx0ZXIgaXMgc2V0IGluIHRoZSBleHRl bnNpb24gZGVmaW5p
dGlvbiwgdGhlbiBpdCB3aWxsIGdldCBhcHBsaWVkIGJlZm9yZSB0aGUgdXNl cg0KCQkgKiBjb2Rl
IGlzIGNhbGxlZC4NCgkJICovDQoJCWlmIChuYW1lUHJvdmlkZXJPYmplY3Qg aW5zdGFuY2VvZiBG
aWx0ZXJlZE5hbWVQcm92aWRlcikgew0KCQkJZmluYWwgRmlsdGVyZWROYW1l UHJvdmlkZXIgZmls
dGVyZWROYW1lUHJvdmlkZXIgPSAoRmlsdGVyZWROYW1lUHJvdmlkZXIpIG5h bWVQcm92aWRlck9i
amVjdDsNCgkJCWZpbHRlcmVkTmFtZVByb3ZpZGVycy5hZGQobmV3IEZpbHRl cmVkTmFtZVByb3Zp
ZGVyKCkgew0KDQoJCQkJcHVibGljIFN0cmluZyBnZXROYW1lKEVPYmplY3Qg ZU9iamVjdCkgew0K
CQkJCQlyZXR1cm4gZmlsdGVyZWROYW1lUHJvdmlkZXIuZ2V0TmFtZShlT2Jq ZWN0KTsNCgkJCQl9
DQoNCgkJCQlwdWJsaWMgYm9vbGVhbiBmaWx0ZXIoU3RyaW5nIG1ldGFjbGFz cykgew0KCQkJCQlp
ZiAoZkZpbHRlcmVkTWV0YWNsYXNzZXMgIT0gbnVsbCAmJiAhZkZpbHRlcmVk TWV0YWNsYXNzZXMu
Y29udGFpbnMobWV0YWNsYXNzKSkNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJ CQkJcmV0dXJuIGZp
bHRlcmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRhY2xhc3MpOw0KCQkJCX0N CgkJCX0pOw0KCQl9
IGVsc2UgaWYgKG5hbWVQcm92aWRlck9iamVjdCBpbnN0YW5jZW9mIE5hbWVQ cm92aWRlcikgew0K
CQkJZmluYWwgTmFtZVByb3ZpZGVyIG5hbWVQcm92aWRlciA9IChOYW1lUHJv dmlkZXIpIG5hbWVQ
cm92aWRlck9iamVjdDsNCg0KCQkJRmlsdGVyZWROYW1lUHJvdmlkZXIgZmls dGVyZWROYW1lUHJv
dmlkZXIgPSBuZXcgRmlsdGVyZWROYW1lUHJvdmlkZXIoKSB7DQoNCgkJCQlw dWJsaWMgU3RyaW5n
IGdldE5hbWUoRU9iamVjdCBlT2JqZWN0KSB7DQoJCQkJCXJldHVybiBuYW1l UHJvdmlkZXIuZ2V0
TmFtZShlT2JqZWN0KTsNCgkJCQl9DQoNCgkJCQlwdWJsaWMgYm9vbGVhbiBm aWx0ZXIoU3RyaW5n
IG1ldGFjbGFzcykgew0KCQkJCQlpZihmRmlsdGVyZWRNZXRhY2xhc3NlcyA9 PSBudWxsKQ0KCQkJ
CQkJcmV0dXJuIHRydWU7DQoJCQkJCXJldHVybiBmRmlsdGVyZWRNZXRhY2xh c3Nlcy5jb250YWlu
cyhtZXRhY2xhc3MpOw0KCQkJCX0NCgkJCX07DQoJCQlmaWx0ZXJlZE5hbWVQ cm92aWRlcnMuYWRk
KGZpbHRlcmVkTmFtZVByb3ZpZGVyKTsNCgkJfSBlbHNlIHsNCgkJCWxvZ0Vy cm9yKGNvbmZpZ3Vy
YXRpb25FbGVtZW50LCAiR2l2ZW4gY2xhc3MgaXMgbm90IGEgTmFtZVByb3Zp ZGVyIik7DQoJCX0N
CgkJdGhpcy5uYW1lUHJvdmlkZXJzLnB1dChtZXRhbW9kZWxJZCwgZmlsdGVy ZWROYW1lUHJvdmlk
ZXJzKTsNCgl9DQp9DQo=

--=_mixed 006E769CC1257570_=
Content-Type: application/octet-stream; name="IconProvidersRegistry.java"
Content-Disposition: attachment; filename="IconProvidersRegistry.java"
Content-Transfer-Encoding: base64

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAw OSBNaWEtU29mdHdh
cmUuDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBh
bnlpbmcgbWF0ZXJpYWxzDQogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9m
IHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAqIHdoaWNoIGFj Y29tcGFuaWVzIHRo
aXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQogKiBodHRw Oi8vd3d3LmVjbGlw
c2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KICoNCiAqIENvbnRyaWJ1dG9y czoNCiAqICAgIE5p
Y29sYXMgQnJvcyAoTWlhLVNvZnR3YXJlKSAtIGluaXRpYWwgQVBJIGFuZCBp bXBsZW1lbnRhdGlv
bg0KICogICAgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ug b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmljb25zOw0K DQppbXBvcnQgamF2
YS51dGlsLkFycmF5TGlzdDsNCmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsN CmltcG9ydCBqYXZh
LnV0aWwuSGFzaFNldDsNCmltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCmltcG9y dCBqYXZhLnV0aWwu
TWFwOw0KDQppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVF eGNlcHRpb247DQpp
bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9u RWxlbWVudDsNCmlt
cG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsNCmlt cG9ydCBvcmcuZWNs
aXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50Ow0KaW1wb3J0IG9y Zy5lY2xpcHNlLmNv
cmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7DQppbXBvcnQgb3JnLmVj bGlwc2UuY29yZS5y
dW50aW1lLlBsYXRmb3JtOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29y ZS5FQ2xhc3M7DQpp
bXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQppbXBvcnQg b3JnLmVjbGlwc2Uu
ZW1mLmVjb3JlLkVQYWNrYWdlOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmdtdC5t b2Rpc2NvLmNvbW1v
bi5lZGl0b3IuRWNvcmVFZGl0b3JQbHVnaW47DQppbXBvcnQgb3JnLmVjbGlw c2UuZ210Lm1vZGlz
Y28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLkFic3RyYWN0UmVnaXN0cnk7 DQppbXBvcnQgb3Jn
LmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci51dGlsLkVNRlV0 aWw7DQppbXBvcnQg
b3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOw0KDQovKioNCiAqIFRo ZSBzaW5nbGV0b24g
cmVnaXN0cnkgb2YgbmFtZSBwcm92aWRlcnMsIHdoaWNoIGluaXRpYWxpemVz IHRoZSByZWdpc3Ry
eSBieSByZWFkaW5nIGV4dGVuc2lvbnMNCiAqIHdoZW4gZmlyc3QgYWNjZXNz ZWQuIEl0IGNhbiBw
cm92aWRlIG5hbWVzIGZvciBtb2RlbCBlbGVtZW50cywgdXNpbmcge0BsaW5r IEljb25Qcm92aWRl
cn1zDQogKiBwcm92aWRlZCB0aHJvdWdoIHRoZSBuYW1pbmcgZXh0ZW5zaW9u IHBvaW50Lg0KICov
DQpwdWJsaWMgY2xhc3MgSWNvblByb3ZpZGVyc1JlZ2lzdHJ5IGV4dGVuZHMg QWJzdHJhY3RSZWdp
c3RyeSB7DQoNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQUNM QVNTX0VMRU1FTlQg
PSAibWV0YWNsYXNzIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg RVhURU5TSU9OX1BP
SU5UX05BTUVTUEFDRSA9ICJvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yIjsN
Cglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5U X05BTUUgPSAiaWNv
bnMiOw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBTU9ERUxf SURfQVRUUklCVVRF
ID0gImlkIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQU1P REVMX0VMRU1FTlQg
PSAibWV0YW1vZGVsIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg SUNPTl9QUk9WSURF
Ul9FTEVNRU5UID0gImljb25Qcm92aWRlciI7DQoJcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5n
IElDT05fUFJPVklERVJfQ0xBU1MgPSAiY2xhc3MiOw0KCXByaXZhdGUgc3Rh dGljIGZpbmFsIFN0
cmluZyBGSUxURVJfRUxFTUVOVCA9ICJmaWx0ZXIiOw0KCXByaXZhdGUgc3Rh dGljIGZpbmFsIFN0
cmluZyBNRVRBQ0xBU1NfTkFNRV9BVFRSSUJVVEUgPSAibmFtZSI7DQoNCglw cml2YXRlIHN0YXRp
YyBJY29uUHJvdmlkZXJzUmVnaXN0cnkgaW5zdGFuY2UgPSBudWxsOw0KDQoJ LyoqDQoJICogQSBt
YXAgb2YgbWV0YW1vZGVscyB0byBsaXN0cyBvZiBGaWx0ZXJlZEljb25Qcm92 aWRlciB0aGF0IHBy
b3ZpZGUgaWNvbnMgZm9yIHRoZSBtZXRhbW9kZWwncw0KCSAqIGluc3RhbmNl cw0KCSAqLw0KCXBy
aXZhdGUgTWFwPFN0cmluZywgTGlzdDxGaWx0ZXJlZEljb25Qcm92aWRlcj4+ IGljb25Qcm92aWRl
cnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RmlsdGVyZWRJY29uUHJv dmlkZXI+PigpOw0K
DQoJcHVibGljIHN0YXRpYyBJY29uUHJvdmlkZXJzUmVnaXN0cnkgZ2V0SW5z dGFuY2UoKSB7DQoJ
CWlmIChpbnN0YW5jZSA9PSBudWxsKSB7DQoJCQlpbnN0YW5jZSA9IG5ldyBJ Y29uUHJvdmlkZXJz
UmVnaXN0cnkoKTsNCgkJfQ0KCQlyZXR1cm4gaW5zdGFuY2U7DQoJfQ0KDQoJ LyoqDQoJICogUXVl
cnkgdGhlIGljb24gcHJvdmlkZXJzIHJlZ2lzdHJ5IGZvciBhbiBpY29uIGZv ciB0aGUgZ2l2ZW4g
e0BsaW5rIEVPYmplY3R9Lg0KCSAqIA0KCSAqIEBwYXJhbSBlT2JqZWN0DQoJ ICogICAgICAgICAg
ICB0aGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2UgaWNvbiBpcyBxdWVyaWVkDQoJ ICogDQoJICogQHJl
dHVybiB0aGUgaWNvbiBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyBpY29u IHdhcyBwcm92aWRl
ZA0KCSAqLw0KCXB1YmxpYyBJbWFnZSBnZXRJY29uKEVPYmplY3QgZU9iamVj dCkgew0KCQlFQ2xh
c3MgZUNsYXNzID0gZU9iamVjdC5lQ2xhc3MoKTsNCgkJaWYgKGVDbGFzcyA9 PSBudWxsKQ0KCQkJ
cmV0dXJuIG51bGw7DQoNCgkJU3RyaW5nIG1ldGFjbGFzc1F1YWxpZmllZE5h bWUgPSBFTUZVdGls
LmdldE1ldGFjbGFzc1F1YWxpZmllZE5hbWUoZUNsYXNzKTsNCg0KCQkvLyBm aW5kIHRoZSBuc1VS
SSBvZiB0aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBtZXRhbW9kZWwgZGVm aW5pdGlvbg0KCQlF
UGFja2FnZSBlUGFja2FnZSA9IGVDbGFzcy5nZXRFUGFja2FnZSgpOw0KCQlp ZiAoZVBhY2thZ2Ug
PT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KCQlTdHJpbmcgbnNVUkkgPSBl UGFja2FnZS5nZXRO
c1VSSSgpOw0KDQoJCUxpc3Q8RmlsdGVyZWRJY29uUHJvdmlkZXI+IGZpbHRl cmVkSWNvblByb3Zp
ZGVycyA9IHRoaXMuaWNvblByb3ZpZGVycy5nZXQobnNVUkkpOw0KCQlpZiAo ZmlsdGVyZWRJY29u
UHJvdmlkZXJzID09IG51bGwpIHsNCgkJCS8vIHRyeSB0byByZXRyaWV2ZSBh IGdlbmVyaWMgbmFt
ZSBwcm92aWRlcg0KCQkJZmlsdGVyZWRJY29uUHJvdmlkZXJzID0gdGhpcy5p Y29uUHJvdmlkZXJz
LmdldCgiKiIpOw0KCQkJaWYgKGZpbHRlcmVkSWNvblByb3ZpZGVycyA9PSBu dWxsKSB7DQoJCQkJ
cmV0dXJuIG51bGw7DQoJCQl9DQoJCX0NCgkJZm9yIChGaWx0ZXJlZEljb25Q cm92aWRlciBmaWx0
ZXJlZE5hbWVQcm92aWRlciA6IGZpbHRlcmVkSWNvblByb3ZpZGVycykgew0K CQkJaWYgKGZpbHRl
cmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRhY2xhc3NRdWFsaWZpZWROYW1l KSkgew0KCQkJCUlt
YWdlIGljb24gPSBmaWx0ZXJlZE5hbWVQcm92aWRlci5nZXRJY29uKGVPYmpl Y3QpOw0KCQkJCWlm
IChpY29uICE9IG51bGwpDQoJCQkJCXJldHVybiBpY29uOw0KCQkJfQ0KCQl9 DQoJCXJldHVybiBu
dWxsOw0KCX0NCg0KCS8qKiBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBieSBy ZWFkaW5nIHRoZSBl
eHRlbnNpb24gcG9pbnQgdG8gZGlzY292ZXIgZXh0ZW5zaW9ucy4gKi8NCglw dWJsaWMgSWNvblBy
b3ZpZGVyc1JlZ2lzdHJ5KCkgew0KDQoJCUlFeHRlbnNpb25SZWdpc3RyeSBl eHRlbnNpb25SZWdp
c3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7DQoJCUlF eHRlbnNpb25Qb2lu
dCBleHRlbnNpb25Qb2ludCA9IGV4dGVuc2lvblJlZ2lzdHJ5LmdldEV4dGVu c2lvblBvaW50KA0K
CQkJCUVYVEVOU0lPTl9QT0lOVF9OQU1FU1BBQ0UsIEVYVEVOU0lPTl9QT0lO VF9OQU1FKTsNCg0K
CQlJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50Lmdl dEV4dGVuc2lvbnMo
KTsNCgkJZm9yIChJRXh0ZW5zaW9uIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMp IHsNCgkJCUlDb25m
aWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ3VyYXRpb25FbGVtZW50cyA9IGV4 dGVuc2lvbi5nZXRD
b25maWd1cmF0aW9uRWxlbWVudHMoKTsNCgkJCWZvciAoSUNvbmZpZ3VyYXRp b25FbGVtZW50IGNv
bmZpZ3VyYXRpb25FbGVtZW50IDogY29uZmlndXJhdGlvbkVsZW1lbnRzKSB7 DQoJCQkJU3RyaW5n
IG5hbWUgPSBjb25maWd1cmF0aW9uRWxlbWVudC5nZXROYW1lKCk7DQoJCQkJ aWYgKG5hbWUuZXF1
YWxzSWdub3JlQ2FzZShNRVRBTU9ERUxfRUxFTUVOVCkpIHsNCgkJCQkJcmVh ZE1ldGFtb2RlbEVs
ZW1lbnQoY29uZmlndXJhdGlvbkVsZW1lbnQpOw0KCQkJCX0gZWxzZSB7DQoJ CQkJCWxvZ1Vua25v
d25FbGVtZW50KGNvbmZpZ3VyYXRpb25FbGVtZW50KTsNCgkJCQl9DQoJCQl9 DQoJCX0NCgl9DQoN
CgkvKiogUmVhZCBhICdtZXRhbW9kZWwnIGVsZW1lbnQgKi8NCglwcml2YXRl IHZvaWQgcmVhZE1l
dGFtb2RlbEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ3Vy YXRpb25FbGVtZW50
KSB7DQoJCVN0cmluZyBtZXRhbW9kZWxJZCA9IGNvbmZpZ3VyYXRpb25FbGVt ZW50LmdldEF0dHJp
YnV0ZShNRVRBTU9ERUxfSURfQVRUUklCVVRFKTsNCgkJaWYgKG1ldGFtb2Rl bElkID09IG51bGwp
IHsNCgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29uZmlndXJhdGlvbkVsZW1l bnQsIE1FVEFNT0RF
TF9JRF9BVFRSSUJVVEUpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJSUNvbmZp Z3VyYXRpb25FbGVt
ZW50W10gY2hpbGRyZW4gPSBjb25maWd1cmF0aW9uRWxlbWVudC5nZXRDaGls ZHJlbigpOw0KCQlm
b3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkcmVuKSB7 DQoJCQlTdHJpbmcg
bmFtZSA9IGNoaWxkLmdldE5hbWUoKTsNCgkJCWlmIChuYW1lLmVxdWFsc0ln bm9yZUNhc2UoSUNP
Tl9QUk9WSURFUl9FTEVNRU5UKSkgew0KCQkJCXJlYWRJY29uUHJvdmlkZXJF bGVtZW50KGNoaWxk
LCBtZXRhbW9kZWxJZCk7DQoJCQl9IGVsc2Ugew0KCQkJCWxvZ1Vua25vd25F bGVtZW50KGNvbmZp
Z3VyYXRpb25FbGVtZW50KTsNCgkJCX0NCgkJfQ0KDQoJfQ0KDQoJLyoqDQoJ ICogUmVhZCBhbiAn
aWNvblByb3ZpZGVyJyBlbGVtZW50LCBhbmQgYWRkcyB0aGUgaWNvbiBwcm92 aWRlcnMgdG8gdGhl
IHJlZ2lzdHJ5Lg0KCSAqIA0KCSAqIEBwYXJhbSBjb25maWd1cmF0aW9uRWxl bWVudA0KCSAqICAg
ICAgICAgICAgdGhlICdpY29uUHJvdmlkZXInIGVsZW1lbnQNCgkgKiBAcGFy YW0gbWV0YW1vZGVs
SWQNCgkgKiAgICAgICAgICAgIHRoZSBuc1VSSSBvZiB0aGUgcGFja2FnZSBj b250YWluaW5nIHRo
ZSBtZXRhbW9kZWwncyBtZXRhY2xhc3Nlcw0KCSAqLw0KCXByaXZhdGUgdm9p ZCByZWFkSWNvblBy
b3ZpZGVyRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJh dGlvbkVsZW1lbnQs
DQoJCQlTdHJpbmcgbWV0YW1vZGVsSWQpIHsNCgkJDQoJCS8vIGlmIG5vdCBu dWxsLCBmaWx0ZXJz
IG9uIHRoZSBtZXRhY2xhc3MgbmFtZQ0KCQlIYXNoU2V0PFN0cmluZz4gZmls dGVyZWRNZXRhY2xh
c3NlcyA9IG51bGw7DQoJCQ0KCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBm aWx0ZXJFbGVtZW50
cyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50LmdldENoaWxkcmVuKEZJTFRFUl9F TEVNRU5UKTsNCgkJ
aWYoZmlsdGVyRWxlbWVudHMubGVuZ3RoID4gMCkgew0KCQkJLy8gb3B0aW9u YWwgZWxlbWVudCA6
IDAgb3IgMQ0KCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gbWV0YWNsYXNz RWxlbWVudHMgPSBm
aWx0ZXJFbGVtZW50c1swXS5nZXRDaGlsZHJlbihNRVRBQ0xBU1NfRUxFTUVO VCk7DQoJCQlmb3Ig
KElDb25maWd1cmF0aW9uRWxlbWVudCBtZXRhY2xhc3NFbGVtZW50IDogbWV0 YWNsYXNzRWxlbWVu
dHMpIHsNCgkJCQlTdHJpbmcgbWV0YWNsYXNzTmFtZSA9IG1ldGFjbGFzc0Vs ZW1lbnQuZ2V0QXR0
cmlidXRlKE1FVEFDTEFTU19OQU1FX0FUVFJJQlVURSk7DQoJCQkJaWYobWV0 YWNsYXNzTmFtZSAh
PSBudWxsKSB7DQoJCQkJCWlmKGZpbHRlcmVkTWV0YWNsYXNzZXMgPT0gbnVs bCkgew0KCQkJCQkJ
ZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsN CgkJCQkJfQ0KCQkJ
CQlmaWx0ZXJlZE1ldGFjbGFzc2VzLmFkZChtZXRhY2xhc3NOYW1lKTsNCgkJ CQl9DQoJCQl9DQoJ
CX0NCgkJDQoJCWZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBmRmlsdGVyZWRNZXRh Y2xhc3NlcyA9IGZp
bHRlcmVkTWV0YWNsYXNzZXM7DQoNCgkJT2JqZWN0IGljb25Qcm92aWRlck9i amVjdDsNCgkJdHJ5
IHsNCgkJCWljb25Qcm92aWRlck9iamVjdCA9IGNvbmZpZ3VyYXRpb25FbGVt ZW50DQoJCQkJCS5j
cmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKElDT05fUFJPVklERVJfQ0xBU1Mp Ow0KCQl9IGNhdGNo
IChDb3JlRXhjZXB0aW9uIGUpIHsNCgkJCUVjb3JlRWRpdG9yUGx1Z2luLklO U1RBTkNFLmxvZyhl
KTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAoaWNvblByb3ZpZGVyT2JqZWN0 ID09IG51bGwpIHsN
CgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29uZmlndXJhdGlvbkVsZW1lbnQs IElDT05fUFJPVklE
RVJfQ0xBU1MpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJTGlzdDxGaWx0ZXJl ZEljb25Qcm92aWRl
cj4gZmlsdGVyZWRJY29uUHJvdmlkZXJzID0gdGhpcy5pY29uUHJvdmlkZXJz LmdldChtZXRhbW9k
ZWxJZCk7DQoJCWlmIChmaWx0ZXJlZEljb25Qcm92aWRlcnMgPT0gbnVsbCkg ew0KCQkJZmlsdGVy
ZWRJY29uUHJvdmlkZXJzID0gbmV3IEFycmF5TGlzdDxGaWx0ZXJlZEljb25Q cm92aWRlcj4oKTsN
CgkJfQ0KDQoJCS8qDQoJCSAqIFRoZSB1c2VyIGNhbiBlaXRoZXIgcHJvdmlk ZSBhIEZpbHRlcmVk
SWNvblByb3ZpZGVyIG9yIGFuIEljb25Qcm92aWRlci4gSW4gZWl0aGVyIGNh c2UsIGlmDQoJCSAq
IGEgZmlsdGVyIGlzIHNldCBpbiB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24s IHRoZW4gaXQgd2ls
bCBnZXQgYXBwbGllZCBiZWZvcmUgdGhlIHVzZXINCgkJICogY29kZSBpcyBj YWxsZWQuDQoJCSAq
Lw0KCQlpZiAoaWNvblByb3ZpZGVyT2JqZWN0IGluc3RhbmNlb2YgRmlsdGVy ZWRJY29uUHJvdmlk
ZXIpIHsNCgkJCWZpbmFsIEZpbHRlcmVkSWNvblByb3ZpZGVyIGZpbHRlcmVk SWNvblByb3ZpZGVy
ID0gKEZpbHRlcmVkSWNvblByb3ZpZGVyKSBpY29uUHJvdmlkZXJPYmplY3Q7 DQoJCQlmaWx0ZXJl
ZEljb25Qcm92aWRlcnMuYWRkKG5ldyBGaWx0ZXJlZEljb25Qcm92aWRlcigp IHsNCg0KCQkJCXB1
YmxpYyBJbWFnZSBnZXRJY29uKEVPYmplY3Qgb2JqZWN0KSB7DQoJCQkJCXJl dHVybiBmaWx0ZXJl
ZEljb25Qcm92aWRlci5nZXRJY29uKG9iamVjdCk7DQoJCQkJfQ0KDQoJCQkJ cHVibGljIGJvb2xl
YW4gZmlsdGVyKFN0cmluZyBtZXRhY2xhc3MpIHsNCgkJCQkJaWYgKGZGaWx0 ZXJlZE1ldGFjbGFz
c2VzICE9IG51bGwgJiYgIWZGaWx0ZXJlZE1ldGFjbGFzc2VzLmNvbnRhaW5z KG1ldGFjbGFzcykp
DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCXJldHVybiBmaWx0ZXJlZElj b25Qcm92aWRlci5m
aWx0ZXIobWV0YWNsYXNzKTsNCgkJCQl9DQoJCQl9KTsNCgkJfSBlbHNlIGlm IChpY29uUHJvdmlk
ZXJPYmplY3QgaW5zdGFuY2VvZiBJY29uUHJvdmlkZXIpIHsNCgkJCWZpbmFs IEljb25Qcm92aWRl
ciBpY29uUHJvdmlkZXIgPSAoSWNvblByb3ZpZGVyKSBpY29uUHJvdmlkZXJP YmplY3Q7DQoNCgkJ
CUZpbHRlcmVkSWNvblByb3ZpZGVyIGZpbHRlcmVkTmFtZVByb3ZpZGVyID0g bmV3IEZpbHRlcmVk
SWNvblByb3ZpZGVyKCkgew0KDQoJCQkJcHVibGljIEltYWdlIGdldEljb24o RU9iamVjdCBvYmpl
Y3QpIHsNCgkJCQkJcmV0dXJuIGljb25Qcm92aWRlci5nZXRJY29uKG9iamVj dCk7DQoJCQkJfQ0K
DQoJCQkJcHVibGljIGJvb2xlYW4gZmlsdGVyKFN0cmluZyBtZXRhY2xhc3Mp IHsNCgkJCQkJaWYo
ZkZpbHRlcmVkTWV0YWNsYXNzZXMgPT0gbnVsbCkNCgkJCQkJCXJldHVybiB0 cnVlOw0KCQkJCQly
ZXR1cm4gZkZpbHRlcmVkTWV0YWNsYXNzZXMuY29udGFpbnMobWV0YWNsYXNz KTsNCgkJCQl9DQoJ
CQl9Ow0KCQkJZmlsdGVyZWRJY29uUHJvdmlkZXJzLmFkZChmaWx0ZXJlZE5h bWVQcm92aWRlcik7
DQoJCX0gZWxzZSB7DQoJCQlsb2dFcnJvcihjb25maWd1cmF0aW9uRWxlbWVu dCwgIkdpdmVuIGNs
YXNzIGlzIG5vdCBhbiBJY29uUHJvdmlkZXIiKTsNCgkJfQ0KCQl0aGlzLmlj b25Qcm92aWRlcnMu
cHV0KG1ldGFtb2RlbElkLCBmaWx0ZXJlZEljb25Qcm92aWRlcnMpOw0KCX0N Cn0NCg==

--=_mixed 006E769CC1257570_=--
Re: [Announce] Extended Model Browser [message #850 is a reply to message #681] Tue, 10 March 2009 10:50 Go to previous messageGo to next message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
A patch to handle generic extensions has been submitted and accepted.
So SVN is up to date.
Re: [Announce] Extended Model Browser [message #878 is a reply to message #850] Tue, 10 March 2009 10:52 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Thanks Gabriel!

I'll update and let you know how it goes.

Cheers,
Dimitris

Gabriel wrote:
> A patch to handle generic extensions has been submitted and accepted.
> So SVN is up to date.
Re: [Announce] Extended Model Browser [message #572771 is a reply to message #629] Tue, 03 March 2009 13:55 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Hi Gabriel,

Looks great! Thanks for sharing this.

In fact I'd like to provide an extension to contribute custom names and
icons to EObjects based on particular annotations in the respective
EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
do this, I would like to be able to specify my extensions not for a
particular nsURI but for any nsURI.

In the current version, this is doesn't seem to be possible as each
extension needs to define a specific nsURI (id). I was wondering if a
future version of the editor could also provide support for a generic
nsURI (e.g. "*") which I could use to define that my extension applies
to any nsURI. In this case I suspect that the NameProvider and
IconProvider interfaces might need to be enhanced to also support a
providesName(EObject) and providesIcon(EObject) method respectively to
allow such extensions specify exactly which EObjects they can provide
names and icons for.

Any thoughts on this?

Cheers,
Dimitris

Gabriel wrote:
> Hello,
> And here we are, a first implementation of an extended model browser is
> available from MoDisco :
>
> http://www.eclipse.org/gmt/modisco/toolBox/GenericModelEdito r/
> http://wiki.eclipse.org/MoDisco/ModelBrowser
>
> Finally, new features may be found in this patch :
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=266425
>
Re: [Announce] Extended Model Browser [message #572802 is a reply to message #652] Tue, 03 March 2009 17:42 Go to previous message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
--=_mixed 00613A3DC125756E_=
Content-Type: text/plain; charset="US-ASCII"

Hello Dimitris,
I think that we could manage a generic nsURI ("*" is a good example).
And yes, you will have to implements NameProvider and/or IconProvider to
associate an EObject to a label and/or icon.

That's all !

Here is examples for j2se5 and C# metamodels (it will be submitted soon)
It is the plugin sources, I hope it will give you a lot of ideas :-)

best regards,
Gabriel

>>>>>> Hi Gabriel,

Looks great! Thanks for sharing this.

In fact I'd like to provide an extension to contribute custom names and
icons to EObjects based on particular annotations in the respective
EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
do this, I would like to be able to specify my extensions not for a
particular nsURI but for any nsURI.

In the current version, this is doesn't seem to be possible as each
extension needs to define a specific nsURI (id). I was wondering if a
future version of the editor could also provide support for a generic
nsURI (e.g. "*") which I could use to define that my extension applies
to any nsURI. In this case I suspect that the NameProvider and
IconProvider interfaces might need to be enhanced to also support a
providesName(EObject) and providesIcon(EObject) method respectively to
allow such extensions specify exactly which EObjects they can provide
names and icons for.

Any thoughts on this?

Cheers,
Dimitris
--=_mixed 00613A3DC125756E_=
Content-Type: application/zip; name="J2SE5ExtensionPointExample.zip"
Content-Disposition: attachment; filename="J2SE5ExtensionPointExample.zip"
Content-Transfer-Encoding: base64

UEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABBAAAAb3JnLmVjbGlwc2UuZ210 Lm1vZGlzY28uY29t
bW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1Ly5jbGFzc3BhdGiVkMFqAjEQ hs8V+g5L7s7WQqGH
3UopK1Soim69lpgM67RxEieJ6NtXS6WlB6G3+YdvPoa/Gu43rtihRPJcqwHc qALZeEvc1eq1HfXv
1fDhulcZp2MMOq2P4eonISc5FB/EtlbGsypOy1p56QCNoxAR3m0CpzOb9dEJ 43nz9jSdtI/Pk2Ze
/uWIEwprBxZXuYNM35cosEiarRa7fGkPAcvx7aLpD+BOlf9+KFgE4wVBcJtJ 0M5c7ojjJVUUc1ad
xgukzynkdIZXxF9wVf4u8BNQSwcIT8MO5M8AAAB2AQAAUEsDBBQACAAIAMeU YzoAAAAAAAAAAAAA
AAA/AAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5l eHRlbnNpb25zLmoy
c2U1Ly5wcm9qZWN0vZLBTgMhEIbPNvEdmr0LtYmJB7pNrPFmY1J9AIQR2SwD Abbp4xeQ1WxWEw/G
2/w/8/NNYNj2ZPrlEXzQFjfNNVk1S0BhpUa1aV6eH65um217uWDO2w5EvIcg vHYxdSf3giE30Fqv
CIheuwBEmUhMigdhibDGWCQgdbSewCkCZkwg3TrADaMlnG/JjYCxZXSssluR oQg6Ua+D7uXBgciq
yl2KcpTF+WawTsY0kE8FP/ISAP81Qkpwr4bMDlXTqcHojPIrrpNAHjnqNwjx 7n+xB/EOhv8JtDrj
kydeHDzU7g8xwz/1g9K4L4eZXpp+Cky+B2eZsc7Ez12YLuMZUEsHCM4UTln8 AAAAywIAAFBLAwQU
AAgACADHlGM6AAAAAAAAAAAAAAAARwAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9idWlsZC5wcm9wZXJ0aWVzK84vLUpO 1dNTsFUoLkrW5+XK
Ly0pKC0BCyRl5gEFgKReZl5yTmlKajFQ0Nc1xFHX089NXyeGl0sBFehhESvI KU0HmlCRm4NFMjM5
P68YaAcAUEsHCPbXGipRAAAAhgAAAFBLAwQUAAgACADHlGM6AAAAAAAAAAAA AAAAQQAAAG9yZy5l
Y2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5q MnNlNS9wbHVnaW4u
eG1stZPdSsQwEIXvBd8h5N6JVhZE0u2NCgqKoD5ASYcayU9J4nYf38TWNLtX y8rO1UDmfCeTQ3iz
1Yps0HlpTU2v4JISNMJ20vQ1/Xh/uLihzfr8jDcolBw8LrPXUE1Hg/rupYkd IYTjNqBJA0R2NbWu
h1kIvQ6gI9gLC8JqbQ1gJ4N1kDUeviqPKzCtjv70lzjVYKUJh/Jm+fpPzzWG No6iKoix0g0/Qxhu
GRvHMYOjCXu2dwnMnqq3+9VCSrBIx1dnN7JDt8uLJVTr/dF7vxToXVNWui6L sbzZ/PwsM/fzKGj/
SEaK2B8dzKQ+US4JfqJcHgv0Xi6l66G5cJa/zA9QSwcIL7KuLv4AAACAAwAA UEsDBBQACAAIAMeU
YzoAAAAAAAAAAAAAAABbAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29y ZS5wcmVmc5WQTUsD
MRCG74X+h4D30C0tSiEXq4Ki4qF4zybvLiP5YpIU/PdmqT139xKGMM+8H3cf MYgnGNHtRXd/2O4O
3U4cn09iu9k8rFcwjlKGTIwBjGCQ5RmcKQbVrVeRR3ld+bFFmshoj0/kwG2w GBEkBUcBb5kffwum
T4Wgewc790DRPKJ8OV2GyF51cj+XrKFm2PdotFMtQwafcZv1yZFuWecoWfR1 lFPAz+p7sGqyYF1u
yvyDk7VvzTQVspDNsbLBCy0AE8em46XOrYryahEKDdRcgznyXBqh+qXsxeyl 0T9QSwcIm7xeH98A
AAB1AgAAUEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABLAAAAb3JnLmVjbGlw c2UuZ210Lm1vZGlz
Y28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L01FVEEtSU5GL01B TklGRVNULk1GnZFN
T8MwDIbv/RXRzjRilXrptANIvSAVISpxz1K3eEpiSNyy8uvpx9qxSVw45OLH euzXKZTDGgLHb+AD
ksvEVt5Hj62rDMTFGa4sWcizspCJ/MTgRhIEk+B3EJYqMAIqZPKiHt5YfErK PBUWWE14cZS9PZBB
PbvINxK0wY8AsrEsh1YMmqQma8nJWSlhnSiPSYB0F9A1BnhYbs++hcX9O80l z4Nm7NTg+e84uRqi
V/hs0UM8q6+FLd5FVwVNHqRvHaOFG/Tn8N1hXrqbo+w3U5TNTZaBvIxH7DNh 1He/0PN2VX4C3Y5N
uevQk7PgOJs+JN7K9HItV41HKVDFJdX8pTxEP1BLBwivdX/zAwEAABoCAABQ SwMEFAAIAAgAx5Rj
OgAAAAAAAAAAAAAAAEsAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvYXNzaWdubWVudC5naWbV0UtPGlEABeCL ClqKMGKLiCgMKiJi
MXHRNiZNqIrRf+CySdO4Nl1Xvb5I+g+amHTVuJZuTXylunZXVjVt5FGBmWHm vm/aOz/Dky8nZ39W
VouvXr/TgAZ+LAGVo1tUbSv43sBVA1UNXDNQzcB1A9XVNlHNxHUT1U3ccJGG hRsW+WuRBws/dEiz
Q1ou2rRJ06Ytm7ZVO6Tl0LZD2g41HGqqRsxE1ETMUgMzC7OOi9uY2Zh3CLcJ dxTKkUtgyjEViAnM
BGGCquaCuiTjkgrJhGBCciGFaimFlP8eYXTa4/GDLZBzn3A/Ab2n2x64u7cP vSVfqdvb5fP1dHlh
oP9JX28gEOzzP+0P+mFIGwx90wbCoXBYC8HB5+XyybOT73BkJDIUiw7HIpGL M5iMJ5KJeDx5MzZ6
A1Pjegr8rOgTkymYSafvMndTk7/TUzA7O52tVGZe5LJwLk/nSF7wPPxw9bVw WQzszG9cHeuLB8n4
y80/21GzuPwZfrR/nS9eBxNvPtWM88vDYOEtBOvD70trem4/+mU1o4GF/1BL BwguUFIElwEAAGAC
AABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBzZS5n bXQubW9kaXNjby5j
b21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvYmxvY2suZ2lm xdFLTxNRFMDxGSlY
UHSKrdDEQusgLVCUWsRCQVggSGM3Ju5150JJE1dulFxrUlwYRWPik7gxCKyA D2AiMQbjxo2siK+0
TEvbO6/7mjuJM5/Ck1/+OWd9ZmanUyPXJUESPl8VZm6uXLq1Mju3mplbvZxb y+bW7r7Ymne83Fr8
8O3Nd7RbhLtF9Zei/Va0PxX9b8Uo1VGpjosQlyAqQbwH0R7ECkQKxGVolp1T dWBFRYqKyy5S1nBZ
IxWN7Gt4XydVndRctGqQqkFrBq07NUnNpHWT1E0KTaq6GERMRVRFTHMWzDTM dJdlYEsnTCeWQSzT
QS3k4phamHLEOGGcOrU4ddnMsim3GeeM2xa3uVPb5ra9tPnj/4pQj9gi3BPi gjPuT4SDX+dbwP38
A+AvBAptfl8gcMznB6HOjvbjoVBXe/BEZ1cQhCPd4feRk3JYliNh0N2zsbF+ an0TxOPRWFNDX39D
U3+0tw8kBgYTojSQOCqeOb0NkufOHvEkk0PDntbh80kwmkoJzaOlkWahCsYm 0ocb0xPjFxoPTY6P
gbwn2HHt02SrCLy+2PIXSZ6WvLnYz4+P5amCNwOmFtoehZ7k/b03Fp72ZJ8P 3tE824vR7Nu4b+hi
5tmrK8s7r8Hth++W8gdEIf0PUEsHCMrtu33mAQAAbgIAAFBLAwQUAAgACADH lGM6AAAAAAAAAAAA
AAAATgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3Iu ZXh0ZW5zaW9ucy5q
MnNlNS9pY29ucy9ibG9ja19jb21tZW50LmdpZnP3dLOwTBRgEGBoEWWwabBx bXMNnxieuyA3b0Fe
/er6+jX1retbWze09m7t7dvat+TIkqVHlh6+cfjIzSO3nt+6/eL2q4+vXn16 9e3nt++/vv8nBBT/
CToXpSaWpKYolGeWZCi4e/oGMOgwAAHIAQysjgmqfSmZ8zJWrepvcHFo2WMY tPXqIhfWAA+b+SrL
V/DIODJvWG5ipcbIpVs0Q27BFLbEpWtVJFbnuzJETgx/saXqLB8jgzUAUEsH CB38ywq5AAAA0QAA
AFBLAwQUAAgACADHlGM6AAAAAAAAAAAAAAAAUAAAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9ib29sZWFuX2xp dGVyYWwuZ2lmjY+9
LwNhAMbfIr1WDMck4utsmmtRIhUGEvW5YBAj20s6iIjNIOnUodg0IhIi8REV YhLCwFADFjFbrinN
nV7u7r338+h/4Mmz/JJn+D2j4yOxvgUZyOAdAMaEEJ6NKKF8NHG6f/2BqUCY 2S6zEM3ryLCI6VBN
R4Uft2jiifWryXIv8wbSdKfwg3SLFE235FDDwpbLTIcgwm2XEiYw5Vx4jAvN QLPp+0LJzRvOt+nq
FtYMp+QQy6W6TTATiDDKBWace397XnbyPPCPKLjKB0A3UMtQ/gT8qYfM8pja sPm4vZJLpKfa4oc9
J73D06mDr+Otm3lpUV2LVSdXiTm4+/b1FNzLzalw4PP6OTEDa+prNpJL7YEm GGoIwWAAVoQqJAlK
YRjO7IQb1Q7Y7IctHUdVlWeKEslmI+DiXOmKdLb6or67m+jtfVSurX2se8rl ZHns5TU+BPp/AVBL
BwguWjv2VwEAAG0BAABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEUAAABv cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNv bnMvY2FzdC5naWZV
0WtIU3EYx/EzszRTU7HQ7nYBLbEoQTfnNXWpqTPL6WylThIzipQgCFKOM4dv rNSp6QIrikmLzAu+
EQaaDcK7oZgS2nIXnTvn7JzzP1fq7GU/Pnx53j+yrMx4cXkQFARNPoEkRc0S RXNCsVZarE1StiSX
tuTceZlb1ZZf3S6v7pDf7Sio0V0T3NMVenSW1L4qqe152Nz/qOXj07bB+vZB WDes0Q1pOkeaOoeb
ukZa+8Z0703dhvHu/vFe46TeOPHa+FX/afLNgNkwOmUYnf48NjswNqufJ82L 699/bEwtWaaXfk8v
W2ZWLLMrlrlV68Lq5qKHdWHNtvzL/nN964/TvbmDW12k1QU2EWBFSCsCbAhp Q4AdIe0IcCCEDSVt
KLCjpB0FDhRsoYQDpZwo6cCAA6O2MGobI50Y2HZTO27K5SYRN3DilBOnd3Da hdOocBC0i6ARDwYl
aFQoSaMkg5EMChgMMG7A4oDBKYagWIJmSQ8O0CwQynAUw9FCWY724BmWpzme 4TiG41mO54TyPMfz
f/9fBO0t8oPqoWhImOcnkM9aQyTcqGmCpdpErUQqTkxMEEvh9IyU5KT09Mzk 1MsZmamwLOv0gdx3
OVdloWeyZHDuhYB4+Uk/0Z7Dcf6xcrgo7GjB8eAo2bmQG8cOXoeV+88rfc8q lEpFScw+BazanaYS
Zatu3b5ZesVLBau989V7o9XlFWXlebsq4MrAi5WnTgyZQtRp3eH+Zt+0toiJ 8EsRoVC8ad3fN6DK
22iYK8vuia1J+fICMz07lPpgtWv0+XzAkbj7Mb0NUZGBenHdhtlQ+C2vV1Ln mAhu95nRv32Mh001
xrb2fdB4iaCEf1BLBwjLRgakfgIAAIACAABQSwMEFAAIAAgAx5RjOgAAAAAA AAAAAAAAAE0AAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY2F0Y2hfY2xhdXNlLmdpZnP3dLOwTBRgEGDYzMCg59XavPrM6mN3zt17 LZG6wLB0lUXVWseG
jaG9O9NnHihccKRg1u7///8zwIDiTxZGBgYeBh0QB2QGA4vBhJOeq/davOap ir/N0nLpxIyehWva
PGaeVFC/9Oguj9IbjjS5xgcPm5RE+lgmFZ3MiVJisAYAUEsHCISyhwWAAAAA gwAAAFBLAwQUAAgA
CADHlGM6AAAAAAAAAAAAAAAAUgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2Nv LmNvbW1vbi5lZGl0
b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9jaGFyYWN0ZXJfbGl0ZXJhbC5n aWZ9j7svQ2EAxb/W
1TYxtLYqqk1EohqKSjwmCdqSCAY7m6REJEaJwWDwDJPFa0FiIER1YWg0FiIi XotFm0Zzb3t7e7/3
d+k/4OQsv+EkvxOKDHR2TTiAA7wAwJgQwihCSigPRU92L14xFRCzImJpGSoa UXWakmEmh7IqHlw4
Hyr1LK3AlKz/qDiTg7JGsirK61TRsIaYqhNIeBFRwgSmnAuDcZFS4PjaTSaP 0oqeLeAfFckaTil6
XicaonKRZAsIMwEJo1xgxrnxt+IlM8MA/8aLJRMAHcBfgtInYNm+3ZkN+13r ic25++ja2IF0WH/c
1vcUOfg42oh/Wab8M8GahuT3mKdzeHsrPt/dOFI19DnZmx9d9FdV+5wV05LT KUnlviWfrdbmWq51
rZTbzE1mq7WlZq9lz7q6u9/c2lrntrjddaunZZdebyAWC4DrK297oM1jCpqS ieDdfdDucDxUPj4/
2+3ht/f+XtDzC1BLBwhT2iiBagEAAHcBAABQSwMEFAAIAAgAx5RjOgAAAAAA AAAAAAAAAEYAAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY2xhc3MuZ2lmc/d0s7BMFGAQYGiRZPj799+v338fvvzy9cefF++/v/n0 07tuk1ftRq/aDT71
m71rN/o2bPGp2+hdu8GvcYtv/eaAlu3+zds+fP3lD2S0bvdr3hrQuj2gZVvB giP/sQHFnyyMDAzy
DDoMQACyk4E18YF6X8rPRPESX4HUyOCe3okJ93cE9HI//O/Q1ByuIdXfujBD MdNqvtDTdMMVUeuZ
XyofeFvF3CnI7KA3m5Gt0LkwQv4el0uzYtutl0ptsl3/Df41NDaUVvvVVrX6 1ko09RorKTJYAwBQ
SwcIlnUmMdcAAADkAAAAUEsDBBQACAAIAMeUYzoAAAAAAAAAAAAAAABUAAAA b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2lj b25zL2NsYXNzX2lu
c3RhbnRpYXRpb24uZ2lmc/d0s7BMFGAQYFiqyjCzRNirdoNX7Ubv2g3eQLJu k0/dRp/6zb5A1LBl
XqWYf/M2/5btAS3bAlq2+7duD2jdvqxRammT1LImqXVd8lsnKm+dpLxrulrB giO/7zb/eb744csv
L95/f/Pp59/P5/9+Of/h66+vP/78+v3339/3f//++09toPhP0LkoNbEkNUWh PLMkQ8Hd0zeAQfEn
CyMDgz2DDgMQgDzKwFZxYH6Bh0hc24y2xQcLbBQE2B4bWf0Tm70mLHpjj860 +CZnvcma8/uPf16o
YvWhIkbpoo9S0oS68+EpIk6cis0trYoMzhxK3T29SuzObCqTp0xVYZ3IzMI0 i2keCyMz28SapVWL
ndiWLV1hz7Z+w8YNS1ZXr121dbnHpj0Szo4M1gBQSwcIufZQCisBAABwAQAA UEsDBBQACAAIAMeU
YzoAAAAAAAAAAAAAAABIAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL2NvbW1lbnQuZ2lmAXYAif9HSUY4OWEQ ABAA4w8AT4xPUY1R
VI9Uf6t/ga2Bg66DhK+Er8uvscyxs86ztM603ure4ezh4+3j5O7k////LAAA AAAQABAAAAQr8MlJ
q704602ZeN6GFM+4EcmDbkHztJoDPPKmDM+9GcfDb4LFI8gpGo/ICAA7UEsH CDLpT2N7AAAAdgAA
AFBLAwQUAAgACADHlGM6AAAAAAAAAAAAAAAAUQAAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9jb25kaXRpb25h bF9leHByLmdpZnP3
dLOwTBRgEGA4wsCg59U6f8v1HeceBXRuT5yyr2/zxSUHb566/fLWsw+iSfPE U+aLJ8+TTF0glbZA
Jn2hbMZCucxFClmLjUpXJU3blzbjQOmiYxVLjvdtvjBl++XFB29uOHXv//// DEhA8ScLIwODNIMO
iAOyk4E18oFa3xKJKRqcczKmrFMNcVBKuP/mW0bHtykGE5WLNdJkFj9Y1iho MXdGW6bIQol1EcxH
Q5NC9BIKWg1VNdWmfXGZeKZTjPlQAmNJvtAkl7dpm4tfa2p4NSqXtagqMlgD AFBLBwizRM552wAA
ANwAAABQSwMEFAAIAAgAx5RjOgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvZW1wdHku Z2lm1dG9TxNxHMfx
X/VqgZZrD6kKFXo9KhSotWjiQ9QBUC4MJri7gKJ1NSQaF8mvPjBKnByMDMYw A4Oj8Skd1cXFwYHQ
XqHt755+T/c7492f4TevvPPZv/r83MVLiymQAt908OYnrncCZA+ROsJ1RBoI NxAxEDaCbeKGSQwT
GyZphmjTIk2L7lv0wCIHNm3ZtB1iLYe2HNZ2WCeoS9su67i04zIU4qbLTJcj zBDmJmYm5lYwCLcI
t0OeQ7hDPJtym3oO9dwA83BIEOYRJjAXhAvKBQvqCRbyuecz4XMhuPA94Yug vi98/+3Or/9F7q8y
+2B5cWX5jvrw/kpF1edvLIAckyI94AkoguDCR4HY11UAq0+fQWktunZIikSj hyMSjCe6Ykfi8d5Y
d0+itxvKyT75fTKlyIqSlGFf//b21tGtHTg4mD42cPzEQDr96SPMZoazw5lM tjZ0sga1U6qW17SR
0Zw6OqbBiUJhd2J3fGyvMA6L5cliabJcOlM+PVUqwnNnwT3xamphIzF9vvL7 w3p1biZzofJn8+bs
d3noyqNbXzart/Xpq6uC/visv1RnHktMefdiQ7v2vJZfyt9df309YeT7u8Dl f1BLBwjcuMFXxgEA
AH0CAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEsAAABvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvZXhwcmVz c2lvbi5naWZz93Sz
sEwUYBBgmMjA4J6zav6W6////2dgYFD8ycLIwMDEoANkM4DkGZg0p/SvPP2W n59DqaHk7NY7AYah
kcsrwzWCxAT8Fv9OXbmsj/3lAz6pr/+CGBisAVBLBwjA4n8sWQAAAFgAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAE0AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvZmllbGRfYWNjZXNzLmdpZnP3dLOwTBRg EGBoYQABidQFhqWr
LKrWujRtdGnaFDd5T9yUPYULjvRtvtC3+WL/5gv9my/O33d9/r4bm0492HT6 /qbTDw5de3742rPD
156fu/eaAS9Q/MnCyMAgz6AD4oDsZGC1e6DeJ+8wb0XnstTdkxz+bNpsoWBh d8bj6W8OOVejhT5N
+s4sm2pk0ljar1zUOMPC2ea0UeAMU1OBRYD27PMvIjkYrAFQSwcINWydcqkA AADBAAAAUEsDBBQA
CAAIAMiUYzoAAAAAAAAAAAAAAABSAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2ZpZWxkX2RlY2xhcmF0aW9u LmdpZnP3dLOwTBRg
EGA4wsCw6dSDw9ee922+2A9CF+bvuzF/3/VNpx8cuvb88LVn5+69lkhdYFi6 yqJqrUvTJpemjXGT
98RN2VO44Ejf5gubTt////8/A16g+JOFkYFBlEEHxAHZycBqlqDal5I5L2PV ujU3PQzuLJmUdFtI
VsFzwhONE41GLC5B/U2bEgqWSExudHBIWCLWk1N28VXV/tUCDNYAUEsHCB0R ExChAAAAuQAAAFBL
AwQUAAgACADIlGM6AAAAAAAAAAAAAAAARwAAAG9yZy5lY2xpcHNlLmdtdC5t b2Rpc2NvLmNvbW1v
bi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9pbXBvcnQuZ2lmc/d0 s7BMFGAQYHjMzcDo
VqWT0p3bvKa8c2N2/9Kmydt75+ydufTwknUn1207u2X3xf+oQPGfoHNRamJJ aopCeWZJhoK7p28A
g+JPFkYuBn4GHQYgABnMwCL34aTn6r0Wr8/+VpNjLHExqHN45evVJONmyJGd ez+OhcEaAFBLBwgC
0BJ3fAAAAIYAAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEYAAABvcmcu ZWNsaXBzZS5nbXQu
bW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMv aW5maXguZ2lmc/d0
s7BMFGAQYFjIxOCes2r+luv/wUDxJwsjAwMTgw4DEIDkGZi0pvSvPP2Wn5dD qaH06J0rTSsDp7tm
PqtY+PS4l0r5LNGcs/GeTpYsbv/2azAwWAMAUEsHCEy5xnlXAAAAWQAAAFBL AwQUAAgACADIlGM6
AAAAAAAAAAAAAAAAUAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9pbnRlZ2VyX2xpdGVyYWwuZ2lmc/d0s7BM FGAQYLjKwPDnz79/
//5//f771++/7jmr5m+5/v3nn+fvvr//8uvTt9/P3n1/+eHHm08/vWo3eYPQ xufvvz979+31p58v
P3x/9+XXm08/Pn77/f7Lzy8//nz69uv7r79ff/z+++//n7//nr3/Hta3/+XH H8/ff3vz+efrTz/e
ffn57P23j99+ffnx+93XX28+//j559/3X3+AGn7++fv3/3+QU/7/ZyAFKP5k YWRgMGDQAXFAfmJg
63GYUeChI9V/pL/oZE6d17xmJZaVWjYXTyzcNaNh1wPWDJ04HQklt6UOKwzc hMwUTaUUPcQtW52S
vnNqiEuqiXHmcIqJteeoqRVJ5KhLT2CRnsjExqYtlaM9K4dtrpSWrm4RS84y FhbmHFlZnQ0bWBg2
rpdl0dGTYdRn3L9Hf99BfV4+vmP8x0+f5uX1uHDR1ZHBGgBQSwcI43hHklIB AABvAQAAUEsDBBQA
CAAIAMiUYzoAAAAAAAAAAAAAAABKAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2ludGVyZmFjZS5naWZz93Sz sEwUYBBgaJFm+Pv3
36/ffx++/PL1x58X77+/+fTTu26TV+1Gr9oNPvWbvWs3+jZs8anb6F27wa9x i2/95oCW7f7N2z58
/eUPZLRu92veGtC6PaBlm0LGgoIFRzYcv/kfFSj+ZGFkYJBn0GEAApCdDKzF D9T7Un6mipf4CqRG
Bs/pnZhwf0dAL7djBkvPh+fFH7ikfBYuSMnicrvo1DQxYnW455fNEirszDwS iyVz5Bsb1BSOrLjc
KcjssP42I1ulc+EN+X9cHLw8RWFt7WEtSjwdvV3yPBMnTZ7U2tve3zO9rV9y ynxjJUUGawBQSwcI
75CkNPAAAAD2AAAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABFAAAAb3Jn LmVjbGlwc2UuZ210
Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25z L2xvb3AuZ2lmc/d0
s7BMFGAQYLjKwPD377+fv/4cv/b064/fP3///fP3n1REd3zXutwpW3dffLzv 8pMj15+//vhtz6XH
B64+PXTt2ZHrz56///rh688vP34/fP3pydvPrz99f/Pp24/ff5+///L607cP X398/fn7y49fP34D
Dfv359/f//////0LIhloABR/sjAyMCgz6IA4ID8xsNUemFjgoSPVf0IlMIFD cpa/eoiBkILGjTVi
3Qlh+zo3WPxZa2I881jx3rwUpYXNbokXInR4fh9NCsjgY5Pma5SWFmpvZ+OT ZmNvaunpEOqSZlcU
luHPYRP255dl9pOQY+FexsYoJyDAspYtjEGBQYmBdZu8/LbY0IC9QX4hXocO OTJYAwBQSwcIxehj
ARkBAABgAQAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABHAAAAb3JnLmVj bGlwc2UuZ210Lm1v
ZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL21l dGhvZC5naWZz93Sz
sEwUYBBgeMbAcPDg4UWbrm0/fLdz4cXVu++s3nWzbcHFVbtvbj54e/vhm/tO 3q2cfrJ14YX2Refb
Fp7rXHJx7uYbK4Cyh+/sO3m7fPqJtsXntxy5vfnwrS2Hb6X1H9196v7h8/dT JxxN7jmQ0rO3bdn5
zUdubD1y3bV+n0f9fvf6PR4Nez3q9gS27A5u2ZPYfzitZdmCHZeYLPNdG/e6 Ne51bdjlXr/Ls3GP
f8uuoNZdiRP2pbStTG5ZOn/XVQbbYgabIgbrQibrAmabYrOStbZVGxxrN7s0 7nKq3eratNulcYdz
zUa/tp2BrduD2nYkty1LaV+e3LI4tW1pSusSBpsCBtsCBut8Bps8Bts8Butc RttCJps8Jpsc25pN
AW1bk1oXJ7ctSWlfymCbw2CdYVK+5v///wy0B4o/WRgZGOIYdEAcUJwwsM9q iGtqbmlta+9o0g9Q
64xztogLlI6J81dtM4gW9teWMvflClJqDRGTUBTi4GQSVwhoC2FhNfU2YxcM aVUJkBfw9LHSimLk
99Nr9uUTZY6wYQjU4uVhC2o29JMU8YqyjjTllvF1ag0wkfXw9pDTtG7zc1V3 0wg3djcyDm4NC7AP
tXNc80ThEUvHQjnfPQ4vDx0K4nZXLlIodrnorcBgDQBQSwcIyx8S6uwBAAA9 AgAAUEsDBBQACAAI
AMiUYzoAAAAAAAAAAAAAAABSAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28u Y29tbW9uLmVkaXRv
ci5leHRlbnNpb25zLmoyc2U1L2ljb25zL21ldGhvZF9pbnZvY2F0aW9uLmdp ZnP3dLOwTBRgEGDY
zMDQs/SSe86qw+fuprQtY7DJk0ldZFa+Nqp/d9asQ10bzjP49ST0b65deuQ/ GDAwMCj+ZGFkYOBj
0AGyGUBmMLC4XTjpuXpq6xTvqUpMDwv7ihheLCyQNBBgXhDL0iTgWxsv+Ylv +9mjKRpqEir8Bx0S
dJhU3NOEV7iph2qbnX4btzPc3exNxSRdQQZrAFBLBwjiTXt8mQAAAJkAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAEYAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvbW9kZWwuZ2lmc/d0s7BMFGAQYNjMwPDh +/+33/5//vn/2ef/
ChkL4qfuuPDsw38wYMAGFH+yMDIwcDDogDggMxhYbAROeq7eaxF8yPrkEcUu +Wdzl7tI5Lze9NTq
jIkj/8bCx+22zxsTFhhosRQ3pCSeVHnGcmFFiIBzpOmNNWVCjAzWAFBLBwi5 cYmEfAAAAI8AAABQ
SwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAE0AAABvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvbnVsbF9saXRlcmFs LmdpZnP3dLOwTBRg
EGC4ysDw58+/f//+f/3++9fvv+45q+Zvuf7z97/vP/98/fHn+bvv77/8+vTt 97N3319++PHm00+v
2k3eILTx+fvvz959e/3p58sP3999+fXm04+P336///Lzy48/n779+vvv/5+/ /569/x7Wt//lxx/P
33978/nn608/3n35+QzE/vH915/ff//9/PP373+gyr8gF/z/z0AWUPzJwsjA oMugA+KA/MTA1nZg
WoGHjlT/kf6ikzl1XvNYlFVWGtlc9Fx0a0XDrgdsGTp5JjJKx58uKuvRUHY6 qBI+wWgazz2nTRFP
VIpYmlm5JYpYWbiLpJtYOYqkOlgmsDL1qRfNZO2czd6nWcTWuaiIuUhWVmPV Kg2G1StltTW0ZBh1
GHdu09mxW4dfQOCA4MGjR/n5PU6ddnVksAYAUEsHCMwi8HlAAQAAaQEAAFBL AwQUAAgACADIlGM6
AAAAAAAAAAAAAAAASAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9wYWNrYWdlLmdpZnP3dLOwTBRgEGBYxMDw 4fv/t9/+f/75/9nn
/woZCy48+/AfDBR/sjAyMLAz6DAAAUgtA7Nxxa47/wyMnLQ7j2TULvw730kk JXPSXYs1OdZLWrUP
O+beZ+R5U8N/oGlBgYZHY9+kJUU7PRgYrAFQSwcInYdPb20AAABuAAAAUEsD BBQACAAIAMiUYzoA
AAAAAAAAAAAAAABKAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL3BhcmFtZXRlci5naWZz93SzsEwUYBBgmMjA IJswJbJ70////xkY
GBR/sjAyMDAx6ADZDCB5Bib5Kf0rT7/lF/cIviWSJmqVwFskN6nQfXlOx66g i9zH/RgZrAFQSwcI
5ccSmE4AAABOAAAAUEsDBBQACAAIAMiUYzoAAAAAAAAAAAAAAABTAAAAb3Jn LmVjbGlwc2UuZ210
Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25z L3BhcmVudGhlc2l6
ZWRfZXhwci5naWal0dtLU3EAB/AznZdUwgUlmZSZ5bSp82Q52zLFcrq0UlOk XgxfBHvsueQ0Yxi9
mMwtsAsRlGB0UVtQD5UaBMaqvdiQMJhnm9vO/fwu5xzqnL+hLx++fN+/7q4O R/PVYqKYWB0jHAO3
nUM+15Cv5fLk6SuTvWP+Pt01f79h5sa9N+PTC5R/waubWZqYWZwILAXnPt+f W56dX34wv/Ls7drz
0LeX78OvPoRnf8jh9Vj4V+x7lI5E6Z8b8cgGvf47Ed3cjqWFrYxIMzLNgC0W 0KxMsyDOynEWJFg5
oW9OjnMgwckJDiQ5OWk03ObklL55kOThNg9TPEjzICXAtAAzBsQKIC3CtIgY ETAiykgwIyFGgoyE
WAPmJMRJmJURZ8C8jDmAeYAFgyICLAJFgIoIFUmHFBkpwKACrEKsIr0VFRk0 rGhI1bCqYlVTVE3V
W9NUTfv7fzmIzKYC4iZhI/QYnxB5kfG91C3vBFXls/oOV1VarUcqq6i6+qM1 1XV19hpbbb3dRpG7
C0kHeexEE9lUsIekyvIOOZcczuZQRe5+aqfFdaqtpbXN5fqyq4jaUdrh7mhv d7vbz57Zl0OZGzo9
3R7PuZ6uzp5GE5V98kJvhrl4PnM8i8o/0Nc/QAyqg5deXLeXx005tqHXRGvI vmnOp1rL4Mend/y1
Je9GLVPl3kf1JaXj6M9KYWBquHSYrbAWBRtGPvmq+1e7A+TIV69lOnct+HA0 AruzG+8+fuLNMhHO
f1BLBwjwm0d4MAIAAHcCAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEgA AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvcG9zdGZp
eC5naWZz93SzsEwUYBBgWMjE4J6zav6W6//BQPEnCyMXAxODDgMQgOQZmFSm 9K88/ZZfkEOpIX3z
xgS13JhHz1tj3YMWGshFnpyqmOr6rfc+K4M1AFBLBwjJv8kIUAAAAFMAAABQ SwMEFAAIAAgAyJRj
OgAAAAAAAAAAAAAAAEcAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuajJzZTUvaWNvbnMvcHJlZml4LmdpZnP3dLOwTBRgEGBYyMTg nrNq/pbr/8FA8ScL
IxcDE4MOAxCA5BmYVKf0rzz9ll+eQ4kh5aDJtsXccveWZz76xqnYPk8q1Fd3 c+TF3uc+jAzWAFBL
Bwjm/UVIUQAAAFQAAABQSwMEFAAIAAgAyJRjOgAAAAAAAAAAAAAAAEQAAABv cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNv bnMvcmVmLmdpZnP3
dLOwTBRgEGDYzMCg59U6f8v15tVnVh+7c+7ea4nUBYalqyyq1jo2bAzt3Zk+ 80DhgiP///9ngAHF
nyyMDAw8DDogDsgMBhb9CSc9V++1eH228IXQB8/jSXLTNTRdVhs46ByPN7rj aaXk1B+h5XnQQSfC
bcGSopmdDAzWAFBLBwjH/kIofgAAAIIAAABQSwMEFAAIAAgAyJRjOgAAAAAA AAAAAAAAAE8AAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvc3RyaW5nX2xpdGVyYWwuZ2lmc/d0s7BMFGAQYFhqwgAE7jmrvGo3eddu 9K7dFNa3/9m7b8/e
fX/+7vuz99+evf/+/P235++/v/wARD9efvzx+hMQ/Xzz6ccbIPn557svQPTr /Zef77/8evf118dv
QPT707dfn779/vr995cfQPTn64/fX3/8+f7zz/dfQPT3528g+vcLSP4Bon+/ /vz78+ff77///vz9
++fvv7///v8Dgf9//xMFFH+yMDIw2DPogHwC8hMD26QD8ws8dKT6jzQVncwR E+I6knhwhZxIIPOi
Vxk2uxKOJ+uUWahNaXDRnemgJFDKwHQwhElsz9Ggm+zvJMVlpBhlW2WlO6UZ W6SklBQVFSZNVpim
OEFeTllZRXWuygKVhXNVtTQ11bTVGbTVGNRWaWzW19fdtk1XZ/tWfT1dYwMj Q6OjhwyPHDdkYmE5
w3z24kUmJo9r110dGawBUEsHCBK20Y9QAQAAdQEAAFBLAwQUAAgACADIlGM6 AAAAAAAAAAAAAAAA
RgAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0 ZW5zaW9ucy5qMnNl
NS9pY29ucy90aHJvdy5naWZz93SzsEwUYBBguMrAoOfV+ufv/5+//7mVr3n2 4bdnzQavmo0+DZt9
G7bcfv752YdfLz/9/vj9799///1btvu3bAtq3xXUsSuka29Y7/7Q7r3hffsL 5x4rmnts6eF7x++8
P3X3/c1nnx6///Xs4++nH369+PQ7YsLBimXnnn389fbrn4/f/xTM2n37xaen H3+9+frn559/X3/9
/fPv/59///7//89AFlD8ycLIwKDLoAPigPzEwFZ1YFqBh45U/4kUQeYsq/kK PQLCpwrWReSoqczN
EJGdGPHw4xw/Ft+lqj+nMBQ4vHRerq/xxkp2w/r70QIaTRoMzS1NyoK6fDy9 +YWFPCr8uhxa02fM
YJjBrssmrblwERMD00JpVl0JMTVG3vXa63UYOcWDVjHv3LWbebvXfi9HBmsA UEsHCNFKqf85AQAA
XQEAAFBLAwQUAAgACADIlGM6AAAAAAAAAAAAAAAASwAAAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy91bnJlc29s dmVkLmdpZsXR30tT
YRzH8UdbqWvVmttSm247brU525ybp01NSFaRgWHRRZf9AxHZTTcWjxVDuqgI iiIpkP6A6jK8MIi6
MCRQ7KKgsP04bTvnbOc8v85zqHP+ir68ePO5/545ezqXv+IGbvDxEthMJDaT qa1MZksUtwuntmfP
f7tw8fvVaz/mb/x8/GTn+XLl/Wppde3FV/T7wyfpV6lerck1pSyjsoxLCi4r qKzgioIqCq4qqGpt
FVVUXFVRVcWSjUhNLDXJnyaptUi9RRo2WtdIXaMNjcpWddLQqawTWaeKTlWr yMJURFXEmtbArIlZ
y2ZomGnYaBHWIoZGDN1CDWTjmBqYcsQ4ZpwwTq0anNpMZpiUm4xzxk2Dm9yq aXLT/Pu/L0wdbU5w
CwwD6+yfgI712/vg4p270Ff0F7t9Hr/f6/HBQH9vz6FAYKCn73D/QB8MhgaD r0NhISgIoSAcjLyN
dO1u27P/XQQODUWPxDsOuIAjHj0ag6lEMpVMJNyg/djwOkxnRtKj6YOdwDmS HUvDnChKuV1g71hN
PA7Hp/Ljk3kATkxNLCgb4Vjng8WTrva5p+5iSJhe8uaFleBDYfq+q1eIdXmi M5MLhdFHKy+js8+y
l9d2PnfHzi1nb74pbHjjc9dnXsH5pS/xe9DjdICJf1BLBwjffqnP7AEAAHAC AABQSwMEFAAIAAgA
yJRjOgAAAAAAAAAAAAAAAE4AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5j b21tb24uZWRpdG9y
LmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvd2lsZGNhcmRfdHlwZS5naWbN0Utv ElEYxvGDoq14KdCC
WGm5TS0tSKWAgFQbEbUkJBJdmpi4NHGjOxMvzfES4q5dGGM0MU3jF9CFbjS6 UDd1YVKNqS68RGYQ
mBmYObc5E535Fj755Z93/56snigUz7uBG7w9AxKl9dSR9Uz5U+7458rpL7Wz G/VzGxevfL907cfS
w+b9Fen5a/nFG/nlO/nRR/T1l/azhcQ2bsqoKePfCm4qqKlgUUGigiUFSdat IlHFkookFbdspNXD
rR750yPtPun0SddGOxrpaLSrUdmqTro6lXUi61TRqWoVWZiKWM8qZj3M+jZD w0zDRp+wPjE0YugW
aiAbx9TAVhknjFOrBqc2kxkm5SbjnHHT4Ca3aprcNP/+H4tQp8MFboAksGb/ BAysLe6CN2/dhr6G
vzHs8/r9I14fDI7tCewOBscDo3vHxkdhKBwLPQlHoqFoNByCMeGpsG2LY+vO ZwKcnp7YNzUwtAM4
pyYm43AmkZpJJRJusGl/cg2mMwfAbNozCFzfsmmYzwEpvxlsz+by4CAsgkKx VABg7vChq20QHnw/
BOYXAzUSi5SPHoNuR11YeBWpJF2eqNjwCAtz17Ozy6uPhdq9ZHVltTo8WX2Q vLBcqY/ET10uL8HM
3Q/xO9DrcoLSP1BLBwiWH5/N4gEAAHACAABQSwMEFAAIAAgAyJRjOgAAAAAA AAAAAAAAAIAAAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvc3Jj
L29yZy9lY2xpcHNlL2dtdC9tb2Rpc2NvL2NvbW1vbi9lZGl0b3IvZXh0ZW5z aW9ucy9qMnNlNS9B
Y3RpdmF0b3IuamF2Ya1T72vbMBD97ED+h6P7kpRFTguD0TBou5aR0ZWytp+H Il9srbIkJDluKfvf
d5KdH20Z20r9IcHHe3fvvTvn+2/7DAewD5+NfXCyrAKMxBgOp9OP8E3yybVZ hpY7ZAl0ohQkkAeH
Ht0KCwY3lfRgnSkdr4HrAkKFwIUwteX6QeoSah7QSa58akLdqFIQZsWl4guF 0OgCXeIRsPZglunl
XChpPcJVs1BSwIUUqOl1dcCmqVNbSVFtRkn0xCIthfTByUUTpNHvkyIqbofx kMhVCPYoz9u2ZdjN
YcaVucKSqxytmqwOpqwKtYroPiLd9TXOH6UKPZdSGMU9nDrjYbQb2ThC3vbJ hwPLxR0vEUjrRndZ
B1Ybsi0MoyxqoxkWkmQyvA8UGeXg2c9Djx9mw8FwIGtrXHjSoZHMqqaUmp0s KDwuwu38KhVmT/DG
l5ItadHYGnfHTmlxCmMuNCj1zvtzukk3EOSKkwwQlJAHEfMzyqfdxnETqUHJ JYJ4EAojLxrslt1R
TjYtkpOCKs/0wWMcm+V5GrnuOj+jWt/JBx7obyk1V3BNG6SLvLq4/TK//DE/ g0+w97oo92a7g31F
G6dD0zRNC4zTXVSO6/FbJ3adaxbpMa+sD4wCInONIFQq5lsTG/poHB1nv7rh PXmkjZ58pRMvjBh3
pWOP+I8rfkcSXRj9bb/j55pWRhbQcZ8A06IjgRbtTOvh/F6gjV9jkp75xqJj HXENjXFknT5aSfyM
Z2/v0thXmyTqf3ncWNGNUrNd19Rp1/TaYu/xO4bG6e4TeXlT0KOOXYL9EZW/ uP7t+ZUYznDJGxX6
U8r6Ztu7TJro5zdQSwcI5+EId3ECAABpBgAAUEsDBBQACAAIAMiUYzoAAAAA AAAAAAAAAACDAAAA
b3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNp b25zLmoyc2U1L3Ny
Yy9vcmcvZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVu c2lvbnMvajJzZTUv
SWNvblByb3ZpZGVyLmphdmGtmctu2zgUhtcOkHcgspI7rZwWGGDQoEATJx0Y cNIgaTBLg6ZpmSlF
aijKbjvou88hKUuWQ+pS1AtbFn9+PDy86Kc9efV7X6cn6BWayuy7YslGo4iM 0bvz87/QLcNvHuVa
77CisRVdco6sKEeK5lRt6SpGXzYsR5mSicIpwmKF9IYiTIhMMyy+M5GgFGuq GOa5hQAN7qxAs8WM
4yWnqBArqmw9EKY5kmv75YZwluUU3RdLzgiaM0IFfN2+jc8tabdhZFM1xWgO tSCWFcu1YstCMyle
24jgZt0Y1rbyRuvs/WSy2+1i6tqJpUomnCaYT2jG32zfnscbnXKjLlMkHFeq /L29A687RiTHObpS
MkfRYcrGRvJ7X5PTkwyTrzihCGKt4k5SHacSuk1kDLlIpYjpikGYMf2mIWWQ hzx+fpfTPy9OT05P
WJpJpdEzpCQWVMdPD/PD+4dkImHoVSE0S2k8e9RYF/lFt7JNSNM1XBv1zefl MyXaL3teYwJAmstC
wcUshU5f05wolkHH/HXynY5hFmYwLXJXw/Yrc9OHwDDlaEakuFdyy8yMAwan KRUaZuZoNDilMPTw
3iD+ZxocZYptYc4jG4Nr2F1+QERRKLHfojMLmNjyOGHrs/FFoLLINRaETk1l aLoLtmC2gmZWHUIz
AavNpLkFV2lCkKWUnGIxZ6DDvIVUChfcKYP93WCFCUi6iZW0iykKzrtxRtVF MulI+sRWCrt4ZqMS
STfO6bpoSy7J17YhMOWtlacw1WE5dDEWxOmCg9iJ6QDAHGaJ6GDUohCGfstg B8nbV0wtCmEKYfYh
Dk+7maZpC6oWhlBcyqwFYIpDVcudv6V2qQgBYD+jbZPMlocq7xhfEaxWX75n bSHsZQsNuhBrzShf
XcNWC+u3Yzuz0sWq1rYyLwmhrVutw2ErC6aJ6o3sGZ7TtpNmYitJPxDs23tt iKk3Su5aQLY8uC6x
Jpu2VWnKF9DxIg8OHsF568KG4vAMBotIYQvrl9xK3sKDxb+hOftBVzd91nqj xsKs/OBOb+1F2w5v
BcFHDkS+unHm4oGuWziKrsPbqADPAT3C3PSudTutlK29ghSt2bcOmBOFH4Hd BKsJxiBz3SMIp6og
BuN83KHfisbGcY1+NsotNKHaCKPSZCLqPselQxs92ieqs1d3MFgQRSmJ6dTc jMYxMExRVLY/YmsU
ndnCgwl8FtN/CzjbRBVq7IIajRTVhRL2UBLXJtBkxEQ8GjWZxyZvENhnEPcN Vc3M9mZuePhNr/iC
fNVwgT2ZHuv4Ajw9soN9k+JzkS/gd7Uv7Mk9dpKesbwr0uXQcD220kN+PDSL PckvDaYHfGU8Xd9B
qzxmCFR6yCG8Q9vpwc6ZoMOopB14WTnHnrwjP+pB1o8fc/ilA9hHJtXDfmr4 z55Yj2n1oP/ZME6H
RlyZWA/wk1S/E3fvLO3wDevQLXu4t8br9kTVvtmXQDC809IX9+S9sNK++I5N aN9YveY12EDtTQfx
jyytbxocWfyeeO/JwIP/Ylzu0HlWW2ffI9hY36l1vn33mMpMh/rvjiNDun5w gPHGmOt6n+kdZh7c
tO49hrz3+gp4eX8zPp/ev6Wgy/c0NrO+/BccTm34fU/1pp/vaxc8pwDfuDZ9 /rDh9ZwRfENQGf9h
uW+eF3zpFr/CbR4ifPHWh4RhAR8dLproUmlcnClwXnBi/gEZmd/37SkEYQGH P/uTgpIpwmj/GzSc
fOy/EstCrDhFUcaLhImxq+veP9pVUdW4x3rjCg5eBpFBwf5PjgofNfgl92PV Oeqisrcnpy+Oigcn
qPJocxhFmaqnhzkqFIezziXRprpU5pBzTde44NqdeK5s8+76oUREDdbFfpQs 6oNN534suExulJIq
OtvXRUJqtJZAfY/O0B/oJWo/LDb6+jd+E8Atg8EXyVEJBHfY33E9yAGSU3+C 8YQMmLA9gJ+NX+63
kq1Q1Zkyo9R8uYX5CJXKDpf/iaDcfUAy6A65e1FZFt88PHx+eH2Q8vv509+z u8Xs+nUTafsRHpm5
TOACgopca3XY8PY/UEsHCJNqWQf+BQAAFRwAAFBLAwQUAAgACADIlGM6AAAA AAAAAAAAAAAAgwAA
AG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5z aW9ucy5qMnNlNS9z
cmMvb3JnL2VjbGlwc2UvZ210L21vZGlzY28vY29tbW9uL2VkaXRvci9leHRl bnNpb25zL2oyc2U1
L05hbWVQcm92aWRlci5qYXZh5Vrdb9s4En92gf4PXD8s5NaVswUWOHSbHtI0 3c2h7RaXYF8O98DI
tM1WXyvKdrOH/O83w8+hLDnqYYFFc3mIJXJm+Jsfh6MhpcWTP/fv8SP2hJ1X 9W0j15uWJdmMPT85
+Rt7L/mzq2rV7nkjUi10ludMCynWCCWanVim7HojFaubat3wgvFyydqNYDzL qqLm5a0s16zgrWgk
z5U2AtagZQkyOy5zfpMLti2XotF6IFgoVq30zUWWy1oJ9nF7k8uMvZOZKOF2 90N6oi3tNzLb+KGk
UKAFWJZStY282bayKucaETSGwXirlTdtW79YLPb7fSrMOGnVrBe5WPN8Ier8 2e6Hk3TTFjlKW4pK
Y7dq1AvdAn8fZFblXLHXTaVYQimbocif+7d4/Kjm2We+Fgywetzrok2LCtzO qhS4KKoyFUsJMFPx
pQXKgAeVfnquxI8/PX70+JEs6qpp2SegJAWS8vQXrjbveU07qXlRrJxZLX7x Dgj+aVBUZBXEy8U5
sKLulfr15pPI7jd21TbbrN02PH8rOPyKfo1RRJS8gKBMz24gSnjWfuCF+NhU OwkhqBlYPHnCbINi
IIxhVTEwK3ImclGIsvUR+o/nVxc/skK03PTrGTLRmqH/jFpnGsRSsb6h2X9w 7MkCl+MEQgvmQ2nD
2o5HspctRHzJRLktWAbutLxs2apq2IqrFkO/5m22wVUHoBGiWdQbWAa5aIzt RIKe4Ev0Qq+dBuVx
0ZRrNdMy4MfEhsXLK90xZ+8BjZ5VxP0K1nBdo94pK8WeHRdOZpraSd3IHSQD Az8SQf8nE7xaXhiS
/ylWc3bWNPz2+rYW9vIsy4RSc3YO3l58qSELKb3Kz9FrMLZVIPm6qnLBy3cS sgnP52j4N/ARV/8b
CBXecEwNVy0gwYE02E21vCx3VcZN1jgry6p11zjweSPMLVrTLe9EuW43DtDr vMo+Aw7051JPSya8
DqYOpUO4asgoaOqi3KDo8m3VEEBvpciXzvSlDnSCHABDkK+kaObsI7RBmEB+ /UMsNVFo9Wpbi+bQ
K93cjwXSeFPtA4QB0gLnIHBnJ9UEPI3mZGbmEwMziee5iO5exFGQ7ni+FSqZ Wf0JJvTURlpab9sk
Use1LJLZvM/Ir6te2RlG4mRyh/ApehO3bC30qkxsYmLC/Fo4esK0RSbMz6mT SE1DYsxba5n389Qq
pG4AuyAmx8g5ZZH7oJp4i05frljS0YIFuc3zmeavEZAtS3TrjVjxbW4Gd15Z GwqyCjxIYzvW5YzD
Ezeshhd2XhYL0sievWIthJ7uscThPTgAA9uM7Qadsyn2TQ1RGr+WlXbRQE66 iEgHyt1kXBujiRdA
TWOHeNpJIsZjVLVD3un/N7A4P7tYCJ6GJENdDa3oK8db6qxuGPJWd1J3jfQY f8+s3eCw1h3nsVYe
dpk67BJV12XXHk0wdMKQEGPFDTy2AP5SFvbZSjkJrUPEBAnPTkn0QO0kkEbM UeawFAm84d3Lv79i
4g0dPHHtMwLKckhHI1qpgnSaBPL+0si2yaQ0KWFEgJu0i2RKTSL8vAyuw+3T px7BxJrVP0/Z9F//
nlojd1GUYf+oWKKPxW480b4HuZBwErpO66kFZ23teN1JlKR5yHEiQt2nmmNI uIhGClQQO+MIIYbu
pUXXRYQSfY90KFdqqDTXYdGfXIIYJS20DnEWJGhyCUWfitMLMTgivURWSHoJ ViyR8XhEr5tgAunT
KSxDotflM6ptKbFRBzKsyyDKmm4YIkx30vAy0oQNO4LnwwLWcmlbmTSV3BsR celOPIg7vv2iwvvr
tyaRs75VJ4cvmaiHaqnQOZQgnECUHrzWqORAxiCpwbVaPobnwet3pmLUXIyb jK+YDTsdRyalb59G
p6ev/+GEZN8WkHrf14/eF3pLSf03LUMMmF7KgZUfw8J7ZzrwYLTHMWHU7+Wi bwNOqOjrRiZqt+/u
C4rQOcCLF6DUBK0x7HwkYwSCvI17F6zX/zYWLDkRIbNDWnEeVnhLJ0I3DE2C 7qQTYKTHkP/W2g1u
a91xgamV743Lg1Mf4vZBHzpvzkP9cJSGTtcQIR0xSk3XwhiSLg9GDXR17H3V Tqdj151idCvqjpcd
LXD39y3P9SmaD/39RubCF9ZHF8BxjAfF9Qz3Vqku7fxGajLpRXqg2wvVbUq/ Zn/WPRAkEdXteqDJ
3p2bUs9tE3jsmnZSyRuZy/Z2LtUH4GMn4ALTv8z0RSOzdlXj5W2ZbZqqxMNX uL1uOGyxccqk+q3K
QT6PC3BveLAK9xKOx3hNTKekQA/WCMNG3hNs9vWnZOjeQw3n52BqsP1RTnA6 h3sE9v33LEn8hsFJ
zg5gTcExbZfOnMdkKB/GZPpjTFZnBCYj2YdJGbsDmMzsH0NlJLq4rN4oZEa2 H5u13o+OBOQRhESq
g5Lqj0FK5HvR0pF6Efs1MwzXi8RYg+YIoF64D2XrB+iF6JbyMEInEQP0eiPw Odk+eDtnPV663cwf
0lwnRZJs1+kh51LRhvN4nSAO64MRj8zuOVTfGZR/lPdWAv7kyT0EwSFrNAiG Hal/emLnNJQJ7g2O
FfAvcux9/CbHQ4F111FwudgQEHV+Z9/B+HKhR5slWA5EeuHtEJYLM3ISGz0E pzBrrpSAn47t3iCx
WEOIHLw3JEFy0PdgNr7DL0CJ+8NCD7Qq6n1b3CXk/6RCjF+DExLiDnNmR96F axn9BRPKlfbzD4lf
irQCj+B0Z0fFn+/5Q8/BAz4nEZ/web1xR3xkGHrG55p7iUyI3r3sHf1igJB5 VO7BZJtjH50cJyOK
s2+dC/soAk/dK7HLUrYSdrR/mOMzgV/WcVmaO3yqWXn0wH/xkArcBatk2jUx dTUTHtdZfzJvkX6h
4Rrts12PkATR+KkNvZ2V4CW9+l34xasxX1vcRR9CxZ+ddKnt/wrlfynSxtVo I0u0vhxBC7M7woUp
PGKn7SgEdsfRueNlZfrJ9yjaESvd96ULNthKb9SXOoefFjJ10EK/3jlUSChK z/ahlU5RaAF7VD+L
9lDJE0ootS6aVvj3X1BLBwhqVNIJ4wgAABAsAABQSwECFAAUAAgACADHlGM6 T8MO5M8AAAB2AQAA
QQAAAAAAAAAAAAAAAAAAAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1Ly5jbGFzc3BhdGhQSwECFAAUAAgACADHlGM6zhRO WfwAAADLAgAAPwAA
AAAAAAAAAAAAAAA+AQAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1Ly5wcm9qZWN0UEsBAhQAFAAIAAgAx5RjOvbXGipRAAAA hgAAAEcAAAAAAAAA
AAAAAAAApwIAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0 b3IuZXh0ZW5zaW9u
cy5qMnNlNS9idWlsZC5wcm9wZXJ0aWVzUEsBAhQAFAAIAAgAx5RjOi+yri7+ AAAAgAMAAEEAAAAA
AAAAAAAAAAAAbQMAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5l ZGl0b3IuZXh0ZW5z
aW9ucy5qMnNlNS9wbHVnaW4ueG1sUEsBAhQAFAAIAAgAx5RjOpu8Xh/fAAAA dQIAAFsAAAAAAAAA
AAAAAAAA2gQAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0 b3IuZXh0ZW5zaW9u
cy5qMnNlNS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnNQ SwECFAAUAAgACADH
lGM6r3V/8wMBAAAaAgAASwAAAAAAAAAAAAAAAABCBgAAb3JnLmVjbGlwc2Uu Z210Lm1vZGlzY28u
Y29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1L01FVEEtSU5GL01BTklG RVNULk1GUEsBAhQA
FAAIAAgAx5RjOi5QUgSXAQAAYAIAAEsAAAAAAAAAAAAAAAAAvgcAAG9yZy5l Y2xpcHNlLmdtdC5t
b2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9h c3NpZ25tZW50Lmdp
ZlBLAQIUABQACAAIAMeUYzrK7bt95gEAAG4CAABGAAAAAAAAAAAAAAAAAM4J AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvYmxvY2su
Z2lmUEsBAhQAFAAIAAgAx5RjOh38ywq5AAAA0QAAAE4AAAAAAAAAAAAAAAAA KAwAAG9yZy5lY2xp
cHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNl NS9pY29ucy9ibG9j
a19jb21tZW50LmdpZlBLAQIUABQACAAIAMeUYzouWjv2VwEAAG0BAABQAAAA AAAAAAAAAAAAAF0N
AABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVu c2lvbnMuajJzZTUv
aWNvbnMvYm9vbGVhbl9saXRlcmFsLmdpZlBLAQIUABQACAAIAMeUYzrLRgak fgIAAIACAABFAAAA
AAAAAAAAAAAAADIPAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuajJzZTUvaWNvbnMvY2FzdC5naWZQSwECFAAUAAgACADHlGM6hLKH BYAAAACDAAAATQAA
AAAAAAAAAAAAAAAjEgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL2NhdGNoX2NsYXVzZS5naWZQSwECFAAUAAgA CADHlGM6U9oogWoB
AAB3AQAAUgAAAAAAAAAAAAAAAAAeEwAAb3JnLmVjbGlwc2UuZ210Lm1vZGlz Y28uY29tbW9uLmVk
aXRvci5leHRlbnNpb25zLmoyc2U1L2ljb25zL2NoYXJhY3Rlcl9saXRlcmFs LmdpZlBLAQIUABQA
CAAIAMeUYzqWdSYx1wAAAOQAAABGAAAAAAAAAAAAAAAAAAgVAABvcmcuZWNs aXBzZS5nbXQubW9k
aXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvY2xh c3MuZ2lmUEsBAhQA
FAAIAAgAx5RjOrn2UAorAQAAcAEAAFQAAAAAAAAAAAAAAAAAUxYAAG9yZy5l Y2xpcHNlLmdtdC5t
b2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9j bGFzc19pbnN0YW50
aWF0aW9uLmdpZlBLAQIUABQACAAIAMeUYzoy6U9jewAAAHYAAABIAAAAAAAA AAAAAAAAAAAYAABv
cmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lv bnMuajJzZTUvaWNv
bnMvY29tbWVudC5naWZQSwECFAAUAAgACADHlGM6s0TOedsAAADcAAAAUQAA AAAAAAAAAAAAAADx
GAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRl bnNpb25zLmoyc2U1
L2ljb25zL2NvbmRpdGlvbmFsX2V4cHIuZ2lmUEsBAhQAFAAIAAgAx5RjOty4 wVfGAQAAfQIAAEYA
AAAAAAAAAAAAAAAASxoAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1v bi5lZGl0b3IuZXh0
ZW5zaW9ucy5qMnNlNS9pY29ucy9lbXB0eS5naWZQSwECFAAUAAgACADIlGM6 wOJ/LFkAAABYAAAA
SwAAAAAAAAAAAAAAAACFHAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL2V4cHJlc3Npb24uZ2lmUEsBAhQAFAAI AAgAyJRjOjVsnXKp
AAAAwQAAAE0AAAAAAAAAAAAAAAAAVx0AAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9maWVsZF9hY2Nlc3MuZ2lm UEsBAhQAFAAIAAgA
yJRjOh0RExChAAAAuQAAAFIAAAAAAAAAAAAAAAAAex4AAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9maWVsZF9k ZWNsYXJhdGlvbi5n
aWZQSwECFAAUAAgACADIlGM6AtASd3wAAACGAAAARwAAAAAAAAAAAAAAAACc HwAAb3JnLmVjbGlw
c2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1 L2ljb25zL2ltcG9y
dC5naWZQSwECFAAUAAgACADIlGM6TLnGeVcAAABZAAAARgAAAAAAAAAAAAAA AACNIAAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoy c2U1L2ljb25zL2lu
Zml4LmdpZlBLAQIUABQACAAIAMiUYzrjeEeSUgEAAG8BAABQAAAAAAAAAAAA AAAAAFghAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu ajJzZTUvaWNvbnMv
aW50ZWdlcl9saXRlcmFsLmdpZlBLAQIUABQACAAIAMiUYzrvkKQ08AAAAPYA AABKAAAAAAAAAAAA
AAAAACgjAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9y LmV4dGVuc2lvbnMu
ajJzZTUvaWNvbnMvaW50ZXJmYWNlLmdpZlBLAQIUABQACAAIAMiUYzrF6GMB GQEAAGABAABFAAAA
AAAAAAAAAAAAAJAkAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuajJzZTUvaWNvbnMvbG9vcC5naWZQSwECFAAUAAgACADIlGM6yx8S 6uwBAAA9AgAARwAA
AAAAAAAAAAAAAAAcJgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL21ldGhvZC5naWZQSwECFAAUAAgACADIlGM6 4k17fJkAAACZAAAA
UgAAAAAAAAAAAAAAAAB9KAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL21ldGhvZF9pbnZvY2F0aW9uLmdpZlBL AQIUABQACAAIAMiU
Yzq5cYmEfAAAAI8AAABGAAAAAAAAAAAAAAAAAJYpAABvcmcuZWNsaXBzZS5n bXQubW9kaXNjby5j
b21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvbW9kZWwuZ2lm UEsBAhQAFAAIAAgA
yJRjOswi8HlAAQAAaQEAAE0AAAAAAAAAAAAAAAAAhioAAG9yZy5lY2xpcHNl LmdtdC5tb2Rpc2Nv
LmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy9udWxsX2xp dGVyYWwuZ2lmUEsB
AhQAFAAIAAgAyJRjOp2HT29tAAAAbgAAAEgAAAAAAAAAAAAAAAAAQSwAAG9y Zy5lY2xpcHNlLmdt
dC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29u cy9wYWNrYWdlLmdp
ZlBLAQIUABQACAAIAMiUYzrlxxKYTgAAAE4AAABKAAAAAAAAAAAAAAAAACQt AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUv aWNvbnMvcGFyYW1l
dGVyLmdpZlBLAQIUABQACAAIAMiUYzrwm0d4MAIAAHcCAABTAAAAAAAAAAAA AAAAAOotAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu ajJzZTUvaWNvbnMv
cGFyZW50aGVzaXplZF9leHByLmdpZlBLAQIUABQACAAIAMiUYzrJv8kIUAAA AFMAAABIAAAAAAAA
AAAAAAAAAJswAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRp dG9yLmV4dGVuc2lv
bnMuajJzZTUvaWNvbnMvcG9zdGZpeC5naWZQSwECFAAUAAgACADIlGM65v1F SFEAAABUAAAARwAA
AAAAAAAAAAAAAABhMQAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9u LmVkaXRvci5leHRl
bnNpb25zLmoyc2U1L2ljb25zL3ByZWZpeC5naWZQSwECFAAUAAgACADIlGM6 x/5CKH4AAACCAAAA
RAAAAAAAAAAAAAAAAAAnMgAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL3JlZi5naWZQSwECFAAUAAgACADIlGM6 ErbRj1ABAAB1AQAA
TwAAAAAAAAAAAAAAAAAXMwAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29t bW9uLmVkaXRvci5l
eHRlbnNpb25zLmoyc2U1L2ljb25zL3N0cmluZ19saXRlcmFsLmdpZlBLAQIU ABQACAAIAMiUYzrR
Sqn/OQEAAF0BAABGAAAAAAAAAAAAAAAAAOQ0AABvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvdGhyb3cuZ2lmUEsB AhQAFAAIAAgAyJRj
Ot9+qc/sAQAAcAIAAEsAAAAAAAAAAAAAAAAAkTYAAG9yZy5lY2xpcHNlLmdt dC5tb2Rpc2NvLmNv
bW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5qMnNlNS9pY29ucy91bnJlc29sdmVk LmdpZlBLAQIUABQA
CAAIAMiUYzqWH5/N4gEAAHACAABOAAAAAAAAAAAAAAAAAPY4AABvcmcuZWNs aXBzZS5nbXQubW9k
aXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuajJzZTUvaWNvbnMvd2ls ZGNhcmRfdHlwZS5n
aWZQSwECFAAUAAgACADIlGM65+EId3ECAABpBgAAgAAAAAAAAAAAAAAAAABU OwAAb3JnLmVjbGlw
c2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoyc2U1 L3NyYy9vcmcvZWNs
aXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVuc2lvbnMvajJz ZTUvQWN0aXZhdG9y
LmphdmFQSwECFAAUAAgACADIlGM6k2pZB/4FAAAVHAAAgwAAAAAAAAAAAAAA AABzPgAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmoy c2U1L3NyYy9vcmcv
ZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVuc2lvbnMv ajJzZTUvSWNvblBy
b3ZpZGVyLmphdmFQSwECFAAUAAgACADIlGM6alTSCeMIAAAQLAAAgwAAAAAA AAAAAAAAAAAiRQAA
b3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNp b25zLmoyc2U1L3Ny
Yy9vcmcvZWNsaXBzZS9nbXQvbW9kaXNjby9jb21tb24vZWRpdG9yL2V4dGVu c2lvbnMvajJzZTUv
TmFtZVByb3ZpZGVyLmphdmFQSwUGAAAAACsAKwDiFAAAtk4AAAAA

--=_mixed 00613A3DC125756E_=
Content-Type: application/zip; name="CSharpExtensionPointExample.zip"
Content-Disposition: attachment; filename="CSharpExtensionPointExample.zip"
Content-Transfer-Encoding: base64

UEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAABCAAAAb3JnLmVjbGlwc2UuZ210 Lm1vZGlzY28uY29t
bW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC8uY2xhc3NwYXRolZDBagIx EIbPFfoOS+7O1kKh
h91KKStUqIpuvZaYDOu0cRIniejbV0ulpQeht/mHbz6GvxruN67YoUTyXKsB 3KgC2XhL3NXqtR31
79Xw4bpXGadjDDqtj+HqJyEnORQfxLZWxrMqTstaeekAjaMQEd5tAqczm/XR CeN58/Y0nbSPz5Nm
Xv7liBMKawcWV7mDTN+XKLBImq0Wu3xpDwHL8e2i6Q/gTpX/fihYBOMFQXCb SdDOXO6I4yVVFHNW
ncYLpM8p5HSGV8RfcFX+LvATUEsHCE/DDuTPAAAAdgEAAFBLAwQUAAgACAAN lWM6AAAAAAAAAAAA
AAAAQAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3Iu ZXh0ZW5zaW9ucy5j
c2hhcnAvLnByb2plY3S9ksFOAyEQhs+a+A7N3gW9eaDbpBpvGpPqAyCMlGYZ yMA2fXwBWc1mNfFg
vM3/Mz/fBEZsTm5YHYGi9bjurtlVtwJUXls06+7l+f7yptv0F+cikD+ASncQ FdmQcnd2zwRKB70n
w0ANNkRgxiXmcjwqz5R3ziMDbZMnBqcEWDCRqbiXFASv6XJN6QRMveBTVdzG jFXwmXod7aB3AVRR
Td7mqERdnW8mO+iUJ6JcyKOsAaCvEXJCkhkLOzbN54bgC8qvuEEDe5Bo3yCm 7f9id2oPTv4JtDnT
k2deGgla94dY4J+G0Vh8rIeFXpt+Csy+BxeZqS7Ez12Yb+M7UEsHCPGCeE36 AAAAzAIAAFBLAwQU
AAgACAANlWM6AAAAAAAAAAAAAAAASAAAAG9yZy5lY2xpcHNlLmdtdC5tb2Rp c2NvLmNvbW1vbi5l
ZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvYnVpbGQucHJvcGVydGllcyvOLy1K TtXTU7BVKC5K1ufl
yi8tKSgtAQskZeYBBYCkXmZeck5pSmoxUNDXNcRR19PPTV8nhpdLARXoYREr yClNB5pQkZuDRTIz
OT+vGGgHAFBLBwj21xoqUQAAAIYAAABQSwMEFAAIAAgADZVjOgAAAAAAAAAA AAAAAHUAAABvcmcu
ZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMu Y3NoYXJwL29yZy5l
Y2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5j c2hhcnAuajJzZTXt
PWtz20aS36/q/sOstiolZ2VSku1sbEmJZVnO6sp2XJGTu28pEBySk4AAA4CU tVv+7zcPEG/MAwRI
gGx9oE2w0dPT06/p6Zm5/PHL3EEr7AfEc6+OzganRwi7tjcm7vTq6GZxdv7i /OjHH/77vy7/OA/w
i1cfvDF20Jc5eRW/c87eoVjc4BV9fnU0C8PFq+Hw4eFh4M2nA8+fDv/vw10M EmRBHp5xiPPT0zMK
9v7enuG59ZS4QWi5Nl6/xRvPvIdthywCzF/+4L0lge0N/+f8/vbFEXKtOb46 oj/EQNN5OJjTPlGg
ge3N5547wGMSev4Afwmxy/oRDOxgZvmLI9pXhC69BxePbx08x24YJBiP0ML3 vjxeHU0sJ8ACdg39
ybL/tKZ4DR21nXsD/bW0HDIhePwxT+UaWwU+2gd9XKzHCb4KjBFHzLCu+ZjG XoFfcLoe+miYsq1U
cZoP5UbtROKQb66qwVhommg0JYPF9qtYK2S12dYzGlBORqwRVI1fhY8L2oqw CzeOFQRvaWuWb4WE
jboglFHyyfdWZIwLI+T5ZEpcy3lHHHzjuZSM8Opo+G2zf9/8/cvbC/pxfYG+ RTfe4pE2OgvRsf0E
UZvzPfpArKf33iR8sHw8yABfOw7iwAHycYD9FR4P0OcZCVg3pr41R5Y7RuEM I8umLF1Y7iM1mmhu
hdgntIcZZBQ7/WVMYVcWcayRg9HSpTzh79MX5gHyJvzLrRgx9Gk5coiN3hOb Dg9GK2qaMxgfZsSe
xU0TKhoho40OceiT0ZINwgmnkD5MGrXCDJIKg+rgqeUM8cJ5ujo7HczCuZN+ K8dSV7Tn+cGrzC/0
7ydr5BPqL95Y/ojQzh6nuf0kD/2R2B4VI/TG9wIJaLN/wwT1QugYqqk3Fwmm 5H9kvvD8MIMSzydr
VHSUnMHtezpk6lew7VEJveWKpg398+gPbOsjvw/9pR0ufaqT2KL/YvmbWsyh doCqxeB6ROXSssO0
QSjlGDUAKAIQ1o4KtofmPO7Aa/MT6crNPWM8muPQEgCZ4RQKZDOGoXSziFM3 DlAZTeg/ZUTRj5cX
C5+sqHIjGpqEFDF2l3P0gTbNh4ThyL37UnywX9aG8xc8OUE3VmjP7ikS/ugE vfE8B1vue0LtgOWc
oN8saj+osqbM6UkZYtr2zBvfuSvPFkDojePZf56gd1TnxjeWQ3H9GlDmn1Cz 5XsPSZNl2Epavf2y
oJaPDWPuha+lIyeYJLieZunxkwJjvqrep5LIjOkU88E5jgQZYfFvESH/iF6i NC+dEF1xgzigKN7i
iUWfcExrDNU9SKOy46G9Wrc9wHy8j58M1sSpcIX+Yzm961FMSdA88+0qK1+D leUs8c+T45gsVdP8
I3ggVODQcQZ3BQv5h21Rh8Nl6ZUEin8MhwIQPf2B64XQz4GD3Wk4U75KOYio Fo2o2lGNTt6XvxjJ
QgJO+UQxRSZrPcIn6Ju/ll54kcLKvz+pZhT/IC6l6T6N+1T1xgQdp4hZz11o j7hpl3E6+eCg3zjh
xY8/IJxp/jj105NUrxVU8Y9sR1J4BwH5d0FyC69/lf8cK5rgrPhE/0izT9HA yMfWn9Uw1e0LEc0Y
Ti1ZzbzBhJarlJa8cUipqAlcelJGZUYgTIlLRJ2ewMTM52gGoSdM1qZjutmI ZF2bzojwN6hVWtK3
6XDgLzZeMN/DvrAJhtbQJG/JhieG0h+iBHFaq6VOKK/XaxJvUzQexyjiBnS0 OULF2JLraIx83VfO
Oq1uxn3laOt2M9vXz4LCpJsMtw4dWcmOHGwqeBIunKHX6pZC1ltVhTgI09EC Dnxt2zTaYoI/YV+1
JJ9DSqWeQ1DW6Qu9wLmxwL+LSEukgCPWGTelBHDcO7V0PLDWGdo7Pm9KRdVs gMVkKu6X1lDn3pEO
OrWmMW7tcc83sLEE3BUoTmQh11gjUpFrb6fykZ+c6YhK/h0mKXP+TEtABKhU LgSIkTWIsG4sDB/W
1CUyIFA3MvQC+05HPEeXzoDnXuEBkIFFwBqWAJtaAdyU9pdpPS7TdhXGaC7u ihnxetaNNbV8zeuI
rARLEjw5USJGMIlBlLJL2XM+uY47Lr5dxd/jxIFBn4PQz2FLT7V0EPEhzeD4 2xWdczuOQVxXRQU6
jqd8mSaSzAj9JWKlPsXVuSGpZRANUA1KpqFsqP+R56HKRFAZDSoyefKmtXrY qgXKZvl0DFD2DTEB
q8j5FV/mSxcMgRslWQlLzIaYTZb4j7q44lncGlwxjYuxGszjYtQNTORSZKZn cuvHRmKbmLP4/Z16
MWkaWEekpAiMZvUl89ysJOhPcjee324+tW1kVrvtoa854BmLAuPdvfEu/eUr si2+UHDn8AXga3+6
ZBQnmStiSdcNuE+gToAtNEQuYWYFyPVCNMLULcwt15risXAPRKzuscV0vko0 qERbYz1HL5TwMZUy
N1ovuqiElSxWRSuC2dWq/EjXW7xSBhXNTgLqh/7mAb90cDWC+1LplQymzhBG nUjxMDdsJ+tRnojf
JYto0Ytx11i4Xc30CFojLF9PMOKZRW5FsprLxZV9FhbnnlxFmDWMGxuoIs7j NGuqiRHrZfnWdacl
MVfj3v+EwyI+Sfvlxq8ZmUo9bKoea5CpoSotzkLokiGbsBqbFQnIiDgkfLw6 EovpR8Oql0QSLogq
GnJVjZXwSUIv0u6ro+HwdaY+bHAaPVjXrRUfnCkhTgtIq0mjxK257bdNloyK FumQN9tcw6p2arek
RqyLulKiU4iGMSYV3zQh9eB0oC6HOUWq0s8ILuiF/p51Ql0V4rstJWlNRRpS EBD6loT+OQg9CH0K
5iCE/gUIPQh9CmYPhL6VBzsJkdrpyVaUr5EHW5o3tUHaNolrbnbWUuPNNa/X WqvzXJMGNGa7ETrt
OW8deBPog5h9j7zxY2rRq7gp8tZdzkv2RGb2dJTvKC5prTzBJ7LXR4gE95GT DP0llkiMmmpRSlVC
d7T7JKaYtyQbjAVFMMch9gPNTvK3+LpdtTqoo9FzqcJcDhOyJDKSZ1M1KNsH duPxJZN4q3huGUh3
kFPDLBnBYaZFM8KyBfrdoSu7MaM7dJUsbneHuHy9aHco43vCukNOXIvfHZJ4 /Xh3yMkWgnWHLmk1
0Q7I1HYMG/hZ2ZkJ+EvoW9e+bz2+JfNonfDq6PQI2Yxwtgbq+ZFnRiuK158G dUML+dph1MPKpcUt
8CkqFqjHogh4GzySyWVq32i+37K6qt2GULSFiW9NBdliLMQSue5QqOYExCUh oXH8vym/y8Uh5fTU
k5FoC8POMxHqdNDwdV4d9BY7rahUqyhFhUi0c1woLvOXcOF8+DoJ2/V4kqr5 zTOFneKSciPqFGpK
IBWz1Fgx5HBqf8SQJdbhEGyIXTEn3iMzosG1uiZAIu7mfd1Wb5/X7K28v4dr 84YJV/bWpn32H3Vt
mCL6UrVU33pyzAoL2mXR0xK2vP2eS/KadW04b6hZO85RdjUk1Bud2lbzQEJF PjN9nTqPiDqeWFr1
WbX/LkbT12r7CgGt5y84rI7PEEi1/AYHlVj0e34UlokR338ZKNOXsmenpjqk HogbS7iGNYvvYjEb
a60VHcwY0WeZ7OTghVY0qK0z8sES2XydkWgtmOLYN56Snula/nxok/SrwbiG t9R8bMPR9jq+ea5d
8XAg8YzhNFCDN2IvW7zcigPbWuDxb2yF/+qo/OBEgzIUk3BBvKEfMnB43bBB IDcwgzuwYf5iZrls
M7BBZJq3T6kTF7dpoD7ysztjKQq9P7EbyZB2V3oy9HcT05GWRCV38QbbVBZa d0D4meQ/LyjL3YbT
cxr2Sd8IOHgSU7m/llkrcj6TfDOOqjlz9fN80QvhDKdOZagd4HFcrRpIQa3M SKrWFTKY8oYSt2Yo
eXMyY0knO6G5ujfNEY5t/ydMO1PNiMPGIZB4y8wX8ndM/KFoxMgn8lckGp9I dB1FlwjiNX08dTk+
5DE/wss2rozUkfmgf1EHdE/GGCRd+q22pPNwpJLJ9aewHLlyGlsZwzSwxJii AwymjhhR+Eyc0Zw1
zQiZgT01DJNqWMfLYabL252U1Da+LRregzW6NQVcYUDv3An5ki55TYbkHwaO NjNpPKBB2ZonlM53
NbJtxjk2c5NoaA4btFNv2Dl1iYna4tIFrDNtts6kM7WEdabG1pn4FjtYYoIl psNYYkpdmASrS/1b
YlAbwn/CesHGAeqzPV4vgOxhB0Vyk0xNx7KBxcgMsoGdtlQRhyHhBxPpXitQ YSKtMyWEiXRjE+n4
Xk2YTMNk+jAm07nrbWFC3b8JtVoCdQ4ghin3poHsiz2ecrdWordDSS4LAG5b igB4a1us89spWzlN
+x+t78xKRBw+mGrB7Rif5uYVvLW8aWGtb9uotJ0567J2GhusQ5hibGyvzloq 1tt0GpNc8gg2tJlZ
DUfY0syG4+7k7IZTBjOczW1B/ZI482x8s9Mgjq/1aERQ3cG4vTAl+txO4MIb a2tG1FXucrpgZrQ7
6xINQS23L940d/38PVP3LxozDgH4a22VTnDk7ZZP8CaghKKeVLdZRsEb6PWE 8FkdWw2Twk1NdVvb
u/jw1Kz4EO/WiDNr2mTz6o9aTUGRCRSZqDW+UGTyHRSZbLPIZMKuFYECk25l gA/C0e+kwISLO+Ub
1JdAfYkWVZB9rQi6/wn1JUpqu5XyKyZT37Xg/HlLUFsCFqIJCxFx+GDWRWEv WQclfRPJ3e1esi5z
2jQBehBzoo2tbFsVMbCbDRKN/dauQqJRZ18/JBobSzTmLqyHlCOkHA8j5bgM YsIg6whZRy2qIOtY
Ee2+hKyjktpupciKWce7ViMB3ibkH8FWNGErIg5D/lELMeQfIf/YG05D/rEN Kwv5R8g/Qv5RK/+o
E+dB/rGx/KNwVpB2hLTjYaQdhQhBqSMkHSHpuOn1KnDdpZrabiXGilnHD234 f94UJBvBRjRiIyIW
Q7ZRCzFkGyHb2BtOQ7axFTML6UZIN0K6USvdqKMAkG5sLN2IocwR8o2HlG/E UOII2UbINjYQ4u7z
ZXmHkm2E2kZIN3bdSEQsPph0Y1cO7te5jzxuLW9Z2Ccc3L9F9YTEXRsGq73E HVizrkVSRnPQqkjq
xrGC4PAMn0ZIBbcBg9UCq7XNGCwI/V1aJY1knPHlM32UpRYukZmQL6npc6p2 4G9mxQOZlFvBoi4d
Zz16cBPMts30+d5eBQO3KRyMED9r9W4GiR38R417GqTGcPN7ILYVaJ83EGhH 9EK4vUM7Ho/CMC2Y
5q/LvLFGiIaOa9wQGDVNI0zsjvE4ar7Weu2Tms3DLRf5V6DCtV92aJOJ+rYc p2IGsb+D06yT2Ohm
tk0t/NMfUC0bqzbvMP7tx8n7VQLMpMoJ8BYqPMDldVCr2nN57SQjt6FCGX2A Knqootepov8equi3
WkWfiqWhkB4K6Q+ikD6Weailh1p6LapgYbBqrvhi8zAYaum3KMqlFWBtBQG8 OSinBzvRiJ2IWHww
pVyQ6OmgqLeX6Nl9LewOOQ2bANows3B6B+QdIe+olXd8CXnHbeYdWcuQcYSM 42FkHBk45Boh16hF
FeQaq4LbBu47h1zjjnONn5t3/LwhyDKChWjEQkQshiyjFmLIMkKWsTechjOC WzGzkGWELCNkGbWy
jDoWCLKMkGXsmZxDlhGyjFXwkGWELGOvgtsGbjWHLCNkGSHLCBZCyWLIMmoh hiwjZBl7w2nIMrZi
ZiHLuEdZRm3QyyGTEjkINTH27MaxlgFWtou/2HgRljmST+spe0p0j6J4klja 0SQiAQ2yqUoH2qlQ
A9+8eS5NXefIBDtikgpSOTYcqvmwoLWAAEIBo2luO0FAZ91/8eD1jU4sPAjH XysTKtPvzzMSpKbZ
ugkZUydv5N6NPJ/aoQ01PZpmszID/AsOl76u8T3QjICBbdQaEYUIXPp8TD63 eQL7ZaKW65TZz6M/
sK19n5ZRmKMV4Ow6BXY5THhSASQGLi0vVYB5uArfWBJqTnGYU6WPBhcSIZst NftLmwc9EfBKc6Di
YUIrEpARcUhIW1z4ZEVFWsY5hUVrJyHd/hUFhbQytX1Lp6kr57ZyA4FuqlBP Qzd3N7scblUVQcs3
DDdcONDZILmxgoH9D4+fGYfH27xBWH9xomtWRnvtv+k1/26t9R/CGv+z8jSy fi5De57XxBJ9e0vz
u46eYzq2cFFv46vwXWEep2X/59gb62zEKaPFc5NFc+2EvEnep+kseEs58IPI gJdJYI0MeCv5734H
9roH+RxEcF+26N3wGnbDmXLTPLlBltxgyVd30Rvy312zjJD/Lm0N8t8m+e93 2KICADnvEqzbT4Ju
L+etf2vrnuabNrgbt7n7cA8hafTcKO8KGSJt/6KVwi5kiJq+47uFLZrbuQD1 +QblRAcQm5qpbcSW
vUkSdV/7X9TRfhG5LalrMgz79tkQlEm/tiHY+8xK1g5oHw5wEAayLLHeaMpp fwyq0Q7x1iJ3jryx
6J1jO4wI3kzSjdeXzOp/G9q+3coOyhZ3Tx7EYlGZrNXK1be2YWKX8xNd98up PITQpGW7FPPyIMKZ
ertHauzoNNzNaXZGl9EuTlgn64ls7ss6mcyCwzpZyago18nK+DYR2Q2jzRxb 592Gi6pNriAGSxqO
2iwz3D0LoZ33vhxm4MphMiDFekbGgpJ10jvbcz/53oo6OD8vUB71f8S1nHfE wTeeGwrmfdvs3zd/
//L2gn5cX6Bv0Y23eOROFx3bT9D56en36AOxnt57k/DB8vEgA3ztOIgDB4h6 Ceyv8HiAWLEK68aU
ShBiM1fq3JBl2958YbmPxJ2iOTWYPqE9zCCj2OkvNJi2VhZxWIIULV3KE/4+ fWEeIG/Cv9zaDlkE
GH1ajhxio/fEprqG0epscJrB+DAj9ixumuCAvk1pG5Mg9MloyQbhhFNIHyaN WmEGySwMF6+Gw4eH
hwEW7Q48fzp08NRyhnjhPF2dnQ5m4dxJv5VjqSva8/zgVeYX+veTNfIJdtAb yx+xxevjNLef5KE/
EtujYoTe+F4gAW32b5igXgjFoXI5jbkxnYcDZrIC2xtQTs89d4DHhHZ2QM1h ZAQHdjCz/MVFgin5
H5kvPD/MoMTzCf2/R8XtVjgpOfgfE8vGAyqB3tKn/7mbUxLf4sD2yYKSIX83 eAgHVFIXVFQC8WYp
kQshasKMpTUWUZyRxmfeeyk+jBlFWA3EINPCf8oI4tij6gbEQhBKHTuhFtGp p8VNDXNQuXcjoq6D
AM9HzuMJSrIGJ4jnNug/nudgy43yVCfohu1gjsNF+p3hpv/QDrDvZfhLEhwn 6B2V8nH0z43lUMzv
PD/1O8+9/RxlLthX2j4b19IWxPz6BOXn2ScoF5WKB/cLhgix/FtCG/s+H2F/ 3dOyduKjRE5QZlfO
CbVyvveQIv9/Z9REp77/GlDoHMqv+fGrGE4uhkLWxH+vkO3TqAPzb8di1w8X lCEHGkzJRDx8IkdJ
1kxVoY0BtVGPMmKjwh9B/+4IcKMOTOMh0+kFhTZuxU3ytKomGKgx/iAtSqoW BLBxGyOmzcphYEDa
KG2h8kqRFGDaaK3YBqkwJ5DayFNHmyuQJ5DayB3PW6jQMhhthJF7VeGMwLTR UqeDlXLGgbRRTpgZ
TwWzKuwc/vdx8oJZS9e2jdXGUDRicVh95uTrF5WM4i8Y4k9clB7630n8gnZL IXNJKvQcSF/lmfNX
KjwD+t3mh5wYiHrxkC613Efv6PsLHvAp/QSH0ncP2RBDhd3HEwP/Fi1Aql0b BaxEm2lARK7piPL4
SSEu/Kp8nxM0xSFDdByF5SjKIRXx8Q/xjqg7pX1hvrIkAiqEQfxDhFsiCOKR 7NW6sYEoMzt+MohO
2DiW9J5/hP5jOYHrWDIVMM8z366y4fRgxTZh/zw5jslSNc0/An7XBjrO4K7g Gf+wLTqdXUfprySA
/CNmMJvdDhJjX00Q/xixUwGrYb4qqYt8sSF9OXffKpF8SmNIXxI4tUtaJl42 pbEYbLdKbHYOaEhs
4kPapZEplilp8RSrXdJERGxKXCrcbpW8kum6Iam5KLtVankCwZC+0mi1fSpZ mqMOpalot10iUwkY
QzrjqU+rBGZyQoYUZkOplsmMsiXGJKbTMa2SKBJlpqFE6dRoC3Qms6VaFOcm W60SnMs3GtJbNpVo
nVyeDTUkNJ2ZaJfATI7WlJ25xF3LlKayxzU0P5fHbJXWOI9tPOwVs/RWqc2k 2g0pLuZWWyU1uwxg
SGuSsGmVRr4UYSqgSeKkVdqyyyZdC0JKf/kqsmLo+M7hi8DXUSnkbXwgPbGk s/vhUKxDs3RAtKI4
swLkeiEaYeyiueXSPo0RcQUcy/iwBXWeuxlUolXnWaqTPBECVoUU5WsuKmGr sQzTtQT8CVv95hks
ZFG2iHyu782RhdartaKXGI2W7tjB6HjhLKfEfVLEU3wiagpjTJ+scFYESv2x ZhYUaF1GEJNwnKGh
pO3XEWsYEO9FAWSYe5JLo6ayeFFiK031humz3Ho3Gif/vULXdsgo8XyWLctB HmeIKMVNJug4he9v
ggyZdMf0Jq8N0v0vb6dU0yQCWSGGqYdH6K+l5bBCqvFHXmdTs2YhsxZfVbdV cfgAT51W1lldCiMb
RMv36hMOBHwcMLZeOierP1sz12+YCkU9akPNKjdv12tHY/eRFmKNEz1jPIrK Yh04HajLYU76KusC
I6nuotCfqyuEtyD0RSq2IvTnIPSmUHsh9M86IfRFKrYi9M9A6E2hGhN65dFR t+5yXlIQnVlyzVVE
1zz+CZHgPlK90F8qj4Oqd+BVtDgcU8xbkg1GamuBXif5Wy3flqC3K0K3+p9t IaKjfOPxM7jjsyLW
a9u6o6u1K+JymGnKmKJ4/2xXaBK7jbtDTmbVuTt0ZVenO0RXyWlIuyRHrCd3 h6CyffCdIY4v4HaM
HLae3CGSUqvH3aEqs2TcJbKipd7ukCTimK7RkzozoTOUFXY6d4kwvprbIZIy 67ddoiu1WtsdsuKF
2e6QlLt+qCtkZVdau0NXdgWzO3TxVd8dkNPg0dLvcmV7zeQCJB3c+EACnVyb pP38kYpJfWoDZyk2
eIZif262OCu72eI71TnBG93NVroxU5Fy0TmJT30CH6hec6qXrc0E9euZ+pVs YAYV7JkKluxyAT3s
mR5WbvQHbeyZNpaULIM29kwbKw/EAG3smTbmdzqAKvZMFcsPjgE97JkeFreb gCb2TBOrDlgCXeyZ
LiYnN4AO9kwHcweRger1TPXSZ1WA8vVM+QoH9oH69Uz9cmcqgQb2TAPLDrYE JeyZEuYOQQIl7JkS
lh0AC0rYMyWMj4QA9euZ+mUPSgbF65niLQQa0L0+6l40eKB+vVW/5NRfUL6e KV/u4H1QvZ6pXunh
sqCFPdNCyQUVoJF91MjUIcqgjL1UxvxFLqCHPdPD8vOjQRt7po35C49AD3up h7lT0UENe6mGpReD
gUb2TCOTk79BDXumhrkL9ED1eqZ6yXVUoHo9U73yiyZBA3umgZWXioBC9kwh Sy5kBW3smTambnoB
/euZ/uUvLgbl65nyld3/BlrYMy3MXPANKtgzFczeEwrK1zPl48PXX/WrvEwg c+uUplAixpHQX9qh
50fXD6AVxetPg7r6LL/BKuph5QVXW+ATu9XMLpgtTRZFwNvgkUwsg/XpocV+ /2b5xBo5ONXz5KxR
uXLt2NByGvLGVlzl1oCR5dhlhvZjckCKikilvkdw6hNSGbJkMDs35JteDVKW Ta24p6WVMTVznhxd
Aw5Ug2slzk99sw+lLtly1EBft9Xb5zV7K+9v4Yz1nsY8L4avk/tz9KQgtfNM pR1aAYyA7JZR++w/
6hoxhbdUtVTffHLMG3vN3cmelrCV1IZUXrZV14jzhpo15Bxlr2dDp7XNpnSi tEd2k08lXieqzQBj
cdXn1f47GU1vq+0sBLSew+CwOk5DINVyHBxUYtLvH0jmhq+NAqs9kYFShTkv eXZqqkTqkbixhHOI
zzuI5WysdYXhwQwSBcpcmaEZD2orjXywxPWBOiMhQVJ2SdvGdjh92aIX3dV1 dXSlh5iidvAk/Jfl
ju/JGO+r7JQquLEyRwzzyXRWzbF3yX4Z3SFgkSR7q6fMPXtWj5Fysf48I0Hq 7ivt0RlmhkdPu/Qn
jQLcwKYorIqPrT8TW7BFewbOZzPncwbOB5wPOJ+dM/cl+B4ZOPie/tuPgu9R LSw1Oljge/osO+B7
WmTuP8H3yMDB9/TffhR8zzPwPeB7wPfsnLmQc5OCg+/pv/0o+J7n4HvA94Dv 2TlzzyDpJgUH59N/
A1JwPi/A+YDzAeezc+bWqmPkvQbfA76nFyJe8D2qvZ+NDhb4nj7LDvieFpn7 PfgeGTj4nv7bj4Lv
+Sf4HvA94Ht2ztyzmowE5wPOpy8yXnA+34PzAecDzmfnzD17Ds5HBg7Op/8G pOB8XoLzAecDzmfn
zD17Ac5HBg7Op/8GpOB8zuB0A/A+4H12z9wzKDiQgoP36b8BKXofON4AvA94 nw4wF/b5SMHB+/Tf
gBS9DxxwAN4HvE8HmAvORwYOzqf/9qPofOCEA3A+4Hx2z9yz78D7yMDB+/Tf gBS9D5xxAN4HvM/u
mXsGh7tJwcH79N+AFL0PHHIA3ge8TweYC5k3KTh4n/4bkKL3gWMOwPuA99k9 c8/A+0jBwfv034AU
vQ8cdADeB7zP7pkLu32k4OB8+m8/is4HDjoA5wPOZ/fMhXMOpODgfPpvP4rO Bw46AOcDzqcDzK3J
SPA+4H36IuMF73MOBx2A9wHvs3vmQrm1FBycT//tR9H5wDkH4HzA+eyeuWdw tYIUHLxP/w1I0fvA
VlPwPuB9OsBcOONNCg7ep/8GpOh94JQd8D7gfXbPXDhhVA6+I++jDXo5ZEMq B7Et5qscaxlgZbv4
i40XYdmYfqIyM8ch9lPyc4Rc+uzqiFjUDy5878vj2u9Rrxj61rXvW49vCe0G G57g6uj0CJHgN/q2
Pw20XeTl3BsTqmS+BosZxRJVPMsryVkeQl2PwCQuYpIKUjk2HKp5p9OaywGH Y2QnFe7m49Jx3hOq
UpajhdDI1hlZG7URGWpaEc1mZUL/Cw6Xvq7AH0D0vKk8ag2JQgYufT4on+Xm Vd3hZ0oOyPpyuVg7
oSDyPPjn0R/YDlvxPlp+R+Vx1CxR+yTZuTyXw4QnFUBiaNMiVQWYhyto1Acc zrxxSQRg02AoxHdz
2gHtsbDZdNBf2twBRcArzdGJxwatSEBGxCEhbXHhkxUlQ8YuhaWT2SUqOcQa OTjVfV0jtbGQbKY3
nIbYXERDRq3m0tHWHJULIXHuw9/Az10OYyrlcFqqubkr2uWQnzc/5GMc2D5Z UIXbxrALY3Hnrjxb
2AqNSJ+/0gM/fV5WxKIzB6TWbVkua/sSrXw3fJ24JK1Qec9iOHVu83KY0pte GcS7SQNx+Z07IV9S
+aHUPPRvyomomFP9zN5wxxtNqfhkthJR/+SuShsLcwejnJ/2pPMynOHEO9ZL wjeeC2kpE3IYeZAy
2amRB1FkQczDBI60gVBBI8IqW8zSTf7sl1drx7pErDJM/Bskwgwy6Rn7BSmu nQsSpLjW83Rv6dv4
kxXOupvnUmexZGFxo1msYEmd+Z1LcU0sGwfdU4nzokBUc+avJZ0m8ExX9/oh laoOEa6wr7ujVBkP
b400jVC6LVq0Au6GGtcMLuu1pl22o4VeN8wcxti0Ii19aH1YXUg9OB0oNQwN CbJ+oBTucpjhejlM
BqQQgt04VhCULIlc2yFbjSjmWj0a7BLXct4RB994lD4+/t82+/fN37+8vaAf 1xfoW3TjLR55hI2O
7Sfo/PT0e/SBWE/vvUn4YPl4kAG+dhzEgQNEQw/sr/B4gFhFD+vGlHppxPIl NFhGlm1784XlPhJ3
iuY0/vIJ7WEGGcVOf6GzPmtlEYel0tHSHVPBZ+/TF+YB8ib8y63tkEWA0afl yCE2ek9sGs9gtDob
nGYwPsyIPYubJtS/h4y2MQlCn4yWbAROOIX0YdKoFWaQzMJw8Wo4fHh4GGDR 7sDzp0MHTy1niBfO
09XZ6WAWzp30WzmWuqI9zw9eZX6hfz9ZI59gB72x/BHT8uM0t5/koT8S26My hN74XiABbfZvmKBe
CANG5XIac2M6DwcsLAxsb0A5PffcAR4T2tkBDTmjQHNgBzPLX1wkmJL/kfnC 88MMyj+YFg7W0eyA
rxW+jRck5O8uyWDhLKnWDK5HdJwtO/z17hN/UP6eF0zJYMIiygfP/3Pwhspc pGtfwlJ6hzmN+czF
O1JgZDMVZ+uVoe85ARdXRs5T4iJqgzCyH20Hp99Pc1fIs0AR2wTE2TimT3L9 Qf8pI49+vLwYDjlZ
65bv3uZ+j1piMyH6z4SZGHRPhZQq56f3v/509/H3u7foCn3z19ILL2oOtni5 lIVpGhkspirI631t
nCdULNOuKU2YssgPKQfPN5EeKv4kGq/UenIBYFjOq7jp4yc5xr+8+FrdyRIC jl3Pffo/1OCMPftJ
8efXAc4qmO1Ru+sv3ZDO2wZi6IO/U4b44bFKgIvoK3q38sgYCZwZBFySGSIq yb73EKDbuOovzwT+
wR3pQCBav1oySLRdIcJX3CTnIbbOT8pOb9E4NynKjZgZ88hdOk4pF9fspi1V cVvGyxJminSTMFxy
1UQlb78WiRGttyt4V9D0KQ7f4om1dMISzeMfUaPlJqFm/y0XEeZ2ULIQjiae CEbEDxPCgwX+ZEpW
2C0iW9tfHzu0UytqkK1wpsNGnuLg0MKDlL2WYXaeVkNu5zws43nu0XHkHhgp 8mHIu6kByWJ653tz
8ctx7GtOBF7J2KX+e4TWAf34Iw+fazqoQRJ2V00MykuHOOsq51yXIrgIIt6q 65MEfDxtaL0SpP1M
TJGKraRVpEmmDdppKuGhsdi//clxTvoqp8iRVHdR6J93QuiLVGxF6J+D0JtC 9VHoC4smxcWy5mW8
2GgbIi0lXB+tsjilc+KjrKHmmwwz+cJMetC05FnELTQin2Gf8KCcYmJzf7YI eB/JMJ0WS6ui213c
y5ehxhFiA1Wo0gpUEd6u68EQjVatBR7/ZjlLCtJAHkS6oqkq3GuwLL9hkYqq 6JuTn66UHhhJqZh5
6opo5cRhC5svKlca9LZe8MHddOeFfPoUdW+XTOLpqyb3piAfjzG1tHhcaLOt gLe0Gq2VkapZ12Rc
oymrbbpneTDT6sD9KrAv22bwzLC+volKybqy2UhpcQP1do3KZc264b2rGS4T TsPiT0VpsNE5Ek1K
k6pUkKf63TjTL6sxU8fOZ7KDQCurEv3FzOKPqUUwqieM1hS6W0pYa5rc+R2y bD1n/8IPyTS/7+EH
mPltmXmT/cG9jBggki2Voue9iWRVR3VD7FH6PsQe3Yg9kmqLXR7Osc5Ua2cV N4gEDnmD1YYOu0t7
qXadFt6ScubKckBJyxBJlNQ4tNpZIKFxNsTeh32nhpOHvWeI6YkpW/NXOjU4 3QmMG/I5m527VIx5
F7Bv12DfrtgnsRuhVW8GiyDWqMsgMgCRCNBP4k5jIeAutdGtZlF1LlP+T763 ImPsa7TW0JyCtarV
WlY7shphJPj7dOZi53erF3MG1eGylgprZCVqK6hShWJOl4h0tfqUkVPTFhAW tG9uCmT9uKNNNNcP
+e+yX6t/q/ql8nkZJ/F8UsnH0hdETZeE96VvLUPiSMdrg5G6fU+CUCEMBhZC nawquj65Tm3at2+c
8OLHH7bZw2K4IuuhVHxLXbkXksljW/LwkWEncq0116oq/WF75pTaUG/seaQi 59JGocftPc97LH3L
eYct+q8qAqmMPMosYisxsyRqUEYLjUYJ5v5XqkGbSkmJwO+29/nBa6v36al6 i6pSDM8LBnK7/M0v
GbXF3w/eGDta/N1u//NTi7b6nzsav2HJwiUmviBYG6D/CSsDowZNehPj+qJX Rl89z8vHim3JqZkr
37Ky5g/1bosJLG2p5wy66gwbmdPxQ2LMZnXrE2XqR7JVabWqZbmGLWnZ3RkS P715hlSd4W4wAKxi
7lu8Ijb+JRo8XS63lGBqWaqDh2qdLn1h6luLGbFlM6hNZHp7BkZ9GGrJfL0h MVe3vQUx/0VtnXYh
1hs5q7e+9cBOVau2Vo1ozZKYKU1uw15jKpM/+6QtP5DdoSZ25UVF3iQUK4Rd WRPQWtZ+ZhCya63/
bKl4b6OYvaENAv0f/ZIjLGD0q0e/8jylupPgRnjaeKazdwRrztI3j1ZeGK/d tBy0SlcHymdi4vi9
5j2wjt/dIGqttWzW8ZlIxdOyYWOnI1bwthQ+PkhRIR21YktxtmLxRINiiLlp Gze5vQi5FvTZWjZk
Oeqi5Ia1skp5ZrruvEHf14uyt9WLso0ux54VWVqQ7Q26c+M5DrbZkxY7Jc2M ttApjYXzRsfo2TbH
qKVOSbPxLY6RpDcbTAXIv2WT6ybHvmU2Zcd+S0P/nbJPBt7RsSorNzcp0WK7 XUcOLrNaQ90GqsIl
xcLfBoIZeuJILYXTNJWgqo6UNdaQ0JTcwdOUjikWvBtF/bwEdbNBaStGYc7m W5H4i0GuqwPSdmaW
f4//WmI3n39tBH1ah/NerfEGmrYRbzzPwVb1nKovuvV9/xUgGoqmR/jO4deZ XEe7p+IN44ohb4B5
DYTHlcspIsWwxc40IApVndliL87b68Vndh5BcTlom7ZkGwpvEDISr/mA8Z5f rkT+Xb3upp+aSI5v
KJDwySdzwm41YD/fsVKUqEtu/uiAoRrZ/xJnfGP5Y/brGtGP+a1wJPh1QYfw jbd0x5keyelc52vp
TCnCX1YC1kLZl3o1JJEl3vx1vH01Q0fqDI31C3S0kqeGY/WbR8ZrHq/4/wuj dTmMontWF0m//z9Q
SwcInc+8DGsrAABEVgMAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAAB5AAAA b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC9v cmcuZWNsaXBzZS5n
bXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuY3NoYXJwLmoy c2U1LmxvZwMAUEsH
CAAAAAACAAAAAAAAAFBLAwQUAAgACAANlWM6AAAAAAAAAAAAAAAAQgAAAG9y Zy5lY2xpcHNlLmdt
dC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvcGx1 Z2luLnhtbLWTwUrE
MBCG74LvUHJ3oiuCSLs9KIIHRVAfoKRDN5JkQhK3+/gmtqZZT8vizmlCZr5/ hp+p251W1Radl2Qa
dgWXrEIjqJdmaNjH++PFLWvX52d1i0JJ63GpvYbV9GXV1yBNzKqqqnEX0KSC n+cUsm8YuQFmBAw6
gI4SXhAI0poMYC8DOcjdHoTfdM6C6XQchRU0S9KEQ4Fz+/q3v9YYuliKqiDO I25CsHecj+OYwVGE
P9NDAvP7tzTQgkq0iMdXR1vZo9sHxhCq8/74zV8K9r4qL2WX1XjebfaCZ+h/ m/O58ngDUsT8aGum
7lM5k+incuapYP9xppQ91Jl4Qjzf0DdQSwcIOaNz3wABAACRAwAAUEsDBBQA CAAIAA2VYzoAAAAA
AAAAAAAAAABcAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVk aXRvci5leHRlbnNp
b25zLmNzaGFycC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJl ZnOVjr0KwjAAhHeh
7xBwD01F0EInUXBzEJzT5loi+eOS+vx26Wxdjhu+j7v9C0bc0At1Ekq1zaGt G3G5PkVT1+dqh8HZ
lCETMYIIA7L8gNnG0KlqFznJFXmbIodILOGTdeBSDCYEWTQnlIfTZYz0nZLH 36ZPzuplbgudGHsH
L3XOYLkbhGJHC3YgI7faCLP/181x5vrxC1BLBwhAlj0ZlQAAAEoBAABQSwME FAAIAAgADZVjOgAA
AAAAAAAAAAAAAEwAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21tb24u ZWRpdG9yLmV4dGVu
c2lvbnMuY3NoYXJwL01FVEEtSU5GL01BTklGRVNULk1GnZExa8MwEIV3/wrh uRZNoItDhrZ4KbiU
Gror8tkRSDpXOqdJf32lKHbS0nYIQgjuHd+7d6qFVR14Kt7AeYW2ZAt+mz2M ttVQ1Cdx1paT8iwM
lKzaE9ioeEbIaAvMYAuaQasIHevCjcXHZivcwAyQOOoTpDmYDWolEwxdz0Fq NXjgvSEeWpWXyCUa
g5YnJofZkksfsSuvbK+BwnhrciNM8Ms850T3ktROBNDVfnxGnJ1sG4G1EkWD HX0IB9krvI/KQZF6
vrtJdMDdaEkZuMn+HiTl2ySXXcqzzhc8nHzlwKMeKUZc4xBfof+DXab6hRl2 lE+BTrO31R7k0aGy
O+XQGrBUsqdlUxULfvdjpaHtJX7moWRafB6yL1BLBwhk8cbjGAEAAFkCAABQ SwMEFAAIAAgADZVj
OgAAAAAAAAAAAAAAAEwAAABvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yLmV4
dGVuc2lvbnMuY3NoYXJwL2ljb25zL2Fzc2lnbm1lbnQuZ2lm1dFLTxpRAAXg iwpaijBii4goDCoi
YjFx0TYmTaiK0X/gsknTuDZdV72+SPoPmph01biWbk18pbp2V1Y1beRRgZlh 5r5v2js/w5MvJ2d/
VlaLr16/04AGfiwBlaNbVG0r+N7AVQNVDVwzUM3AdQPV1TZRzcR1E9VN3HCR hoUbFvlrkQcLP3RI
s0NaLtq0SdOmLZu2VTuk5dC2Q9oONRxqqkbMRNREzFIDMwuzjovbmNmYdwi3 CXcUypFLYMoxFYgJ
zARhgqrmgrok45IKyYRgQnIhhWophZT/HmF02uPxgy2Qc59wPwG9p9seuLu3 D70lX6nb2+Xz9XR5
YaD/SV9vIBDs8z/tD/phSBsMfdMGwqFwWAvBwefl8smzk+9wZCQyFIsOxyKR izOYjCeSiXg8eTM2
egNT43oK/KzoE5MpmEmn7zJ3U5O/01MwOzudrVRmXuSycC5P50he8Dz8cPW1 cFkM7MxvXB3riwfJ
+MvNP9tRs7j8GX60f50vXgcTbz7VjPPLw2DhLQTrw+9La3puP/plNaOBhf9Q SwcILlBSBJcBAABg
AgAAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAAAABHAAAAb3JnLmVjbGlwc2Uu Z210Lm1vZGlzY28u
Y29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNzaGFycC9pY29ucy9ibG9jay5n aWbF0UtPE1EUwPEZ
KVhQdIqt0MRC6yAtUJRaxEJBWCBIYzcm7nXnQkkTV26UXGtSXBhFY+KTuDEI rIAPYCIxBuPGjayI
r7RMS9s7r/uaO4kzn8KTX/45Z31mZqdTI9clQRI+XxVmbq5curUyO7eamVu9 nFvL5tbuvtiad7zc
Wvzw7c13tFuEu0X1l6L9VrQ/Ff1vxSjVUamOixCXICpBvAfRHsQKRArEZWiW nVN1YEVFiorLLlLW
cFkjFY3sa3hfJ1Wd1Fy0apCqQWsGrTs1Sc2kdZPUTQpNqroYRExFVEVMcxbM NMx0l2VgSydMJ5ZB
LNNBLeTimFqYcsQ4YZw6tTh12cyyKbcZ54zbFre5U9vmtr20+eP/ilCP2CLc E+KCM+5PhINf51vA
/fwD4C8ECm1+XyBwzOcHoc6O9uOhUFd78ERnVxCEI93h95GTcliWI2HQ3bOx sX5qfRPE49FYU0Nf
f0NTf7S3DyQGBhOiNJA4Kp45vQ2S584e8SSTQ8Oe1uHzSTCaSgnNo6WRZqEK xibShxvTE+MXGg9N
jo+BvCfYce3TZKsIvL7Y8hdJnpa8udjPj4/lqYI3A6YW2h6FnuT9vTcWnvZk nw/e0Tzbi9Hs27hv
6GLm2asryzuvwe2H75byB0Qh/Q9QSwcIyu27feYBAABuAgAAUEsDBBQACAAI AA2VYzoAAAAAAAAA
AAAAAABRAAAAb3JnLmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRv ci5leHRlbnNpb25z
LmNzaGFycC9pY29ucy9ib29sZWFuX2xpdGVyYWwuZ2lmjY+9LwNhAMbfIr1W DMck4utsmmtRIhUG
EvW5YBAj20s6iIjNIOnUodg0IhIi8REVYhLCwFADFjFbrinNnV7u7r338+h/ 4Mmz/JJn+D2j4yOx
vgUZyOAdAMaEEJ6NKKF8NHG6f/2BqUCY2S6zEM3ryLCI6VBNR4Uft2jiifWr yXIv8wbSdKfwg3SL
FE235FDDwpbLTIcgwm2XEiYw5Vx4jAvNQLPp+0LJzRvOt+nqFtYMp+QQy6W6 TTATiDDKBWace397
XnbyPPCPKLjKB0A3UMtQ/gT8qYfM8pjasPm4vZJLpKfa4oc9J73D06mDr+Ot m3lpUV2LVSdXiTm4
+/b1FNzLzalw4PP6OTEDa+prNpJL7YEmGGoIwWAAVoQqJAlKYRjO7IQb1Q7Y 7IctHUdVlWeKEslm
I+DiXOmKdLb6or67m+jtfVSurX2se8rlZHns5TU+BPp/AVBLBwguWjv2VwEA AG0BAABQSwMEFAAI
AAgADZVjOgAAAAAAAAAAAAAAAE4AAABvcmcuZWNsaXBzZS5nbXQubW9kaXNj by5jb21tb24uZWRp
dG9yLmV4dGVuc2lvbnMuY3NoYXJwL2ljb25zL2NhdGNoX2NsYXVzZS5naWZz 93SzsEwUYBBg2MzA
oOfV2rz6zOpjd87dey2RusCwdJVF1VrHho2hvTvTZx4oXHCkYNbu////M8CA 4k8WRgYGHgYdEAdk
BgOLwYSTnqv3WrzmqYq/zdJy6cSMnoVr2jxmnlRQv/ToLo/SG440ucYHD5uU RPpYJhWdzIlSYrAG
AFBLBwiEsocFgAAAAIMAAABQSwMEFAAIAAgADZVjOgAAAAAAAAAAAAAAAEcA AABvcmcuZWNsaXBz
ZS5nbXQubW9kaXNjby5jb21tb24uZWRpdG9yLmV4dGVuc2lvbnMuY3NoYXJw L2ljb25zL2NsYXNz
LmdpZnP3dLOwTBRgEGBokWT4+/ffr99/H7788vXHnxfvv7/59NO7bpNX7Uav 2g0+9Zu9azf6Nmzx
qdvoXbvBr3GLb/3mgJbt/s3bPnz95Q9ktG73a94a0Lo9oGVbwYIj/7EBxZ8s jAwM8gw6DEAAspOB
NfGBel/Kz0TxEl+B1Mjgnt6JCfd3BPRyP/zv0NQcriHV37owQzHTar7Q03TD FVHrmV8qH3hbxdwp
yOygN5uRrdC5MEL+HpdLs2LbrZdKbbJd/w3+NTQ2lFb71Va1+tZKNPUaKyky WAMAUEsHCJZ1JjHX
AAAA5AAAAFBLAwQUAAgACAANlWM6AAAAAAAAAAAAAAAASQAAAG9yZy5lY2xp cHNlLmdtdC5tb2Rp
c2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5jc2hhcnAvaWNvbnMvY29t bWVudC5naWYBdgCJ
/0dJRjg5YRAAEADjDwBPjE9RjVFUj1R/q3+BrYGDroOEr4Svy6+xzLGzzrO0 zrTe6t7h7OHj7ePk
7uT///8sAAAAABAAEAAABCvwyUmrvTjrTZl43oYUz7gRyYNuQfO0mgM88qYM z70Zx8NvgsUjyCka
j8gIADtQSwcIMulPY3sAAAB2AAAAUEsDBBQACAAIAA2VYzoAAAAAAAAAAAAA AABHAAAAb3JnLmVj
bGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmNz aGFycC9pY29ucy9l
bXB0eS5naWbV0b1PE3Ecx/Ff9WqBlmsPqQoVej0qFKi1aOJD1AFQLgwmuLuA onU1JBoXya8+MEqc
HIwMxjADg6PxKR3VxcXBgdBeoe3vnn5P9zvj3Z/hN6+889m/+vzcxUuLKZAC 33Tw5ieudwJkD5E6
wnVEGgg3EDEQNoJt4oZJDBMbJmmGaNMiTYvuW/TAIgc2bdm0HWIth7Yc1nZY J6hL2y7ruLTjMhTi
pstMlyPMEOYmZibmVjAItwi3Q55DuEM8m3Kbeg713ADzcEgQ5hEmMBeEC8oF C+oJFvK55zPhcyG4
8D3hi6C+L3z/7c6v/0XurzL7YHlxZfmO+vD+SkXV528sgByTIj3gCSiC4MJH gdjXVQCrT59BaS26
dkiKRKOHIxKMJ7piR+Lx3lh3T6K3G8rJPvl9MqXIipKUYV//9vbW0a0dODiY PjZw/MRAOv3pI8xm
hrPDmUy2NnSyBrVTqpbXtJHRnDo6psGJQmF3Ynd8bK8wDovlyWJpslw6Uz49 VSrCc2fBPfFqamEj
MX2+8vvDenVuJnOh8mfz5ux3eejKo1tf
Re: [Announce] Extended Model Browser [message #572838 is a reply to message #669] Wed, 04 March 2009 14:24 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Hi Gabriel,

Thanks for the examples! Can you speculate on the timeframe in which
these enhancements would be implemented? If it's not among your
immediate priorities to implement them soon - and this would be
understandable :) - I can have a go at it and then submit a patch.

Cheers,
Dimitris

Gabriel wrote:
> Hello Dimitris,
> I think that we could manage a generic nsURI ("*" is a good example).
> And yes, you will have to implements NameProvider and/or IconProvider to
> associate an EObject to a label and/or icon.
>
> That's all !
>
> Here is examples for j2se5 and C# metamodels (it will be submitted soon)
> It is the plugin sources, I hope it will give you a lot of ideas :-)
>
> best regards,
> Gabriel
>
>>>>>>> Hi Gabriel,
>
> Looks great! Thanks for sharing this.
>
> In fact I'd like to provide an extension to contribute custom names and
> icons to EObjects based on particular annotations in the respective
> EClasses (as per http://www.eclipse.org/gmt/epsilon/doc/Exeed.pdf). To
> do this, I would like to be able to specify my extensions not for a
> particular nsURI but for any nsURI.
>
> In the current version, this is doesn't seem to be possible as each
> extension needs to define a specific nsURI (id). I was wondering if a
> future version of the editor could also provide support for a generic
> nsURI (e.g. "*") which I could use to define that my extension applies
> to any nsURI. In this case I suspect that the NameProvider and
> IconProvider interfaces might need to be enhanced to also support a
> providesName(EObject) and providesIcon(EObject) method respectively to
> allow such extensions specify exactly which EObjects they can provide
> names and icons for.
>
> Any thoughts on this?
>
> Cheers,
> Dimitris
Re: [Announce] Extended Model Browser [message #572853 is a reply to message #679] Thu, 05 March 2009 20:06 Go to previous message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
--=_mixed 006E769CC1257570_=
Content-Type: text/plain; charset="US-ASCII"

Hello Dimitris,

I think that the project could be updated as soon as possible (next week).
There is only few changes in code to manage generic name or icon provider.

If you would like to test early, you may try these implementations of
classes NameProvidersRegistry and IconProvidersRegistry.


I will check with Nicolas Bros if he could update submitted patch.

Best regards,
Gabriel

--=_mixed 006E769CC1257570_=
Content-Type: application/octet-stream; name="NameProvidersRegistry.java"
Content-Disposition: attachment; filename="NameProvidersRegistry.java"
Content-Transfer-Encoding: base64

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAw OSBNaWEtU29mdHdh
cmUuDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBh
bnlpbmcgbWF0ZXJpYWxzDQogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9m
IHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAqIHdoaWNoIGFj Y29tcGFuaWVzIHRo
aXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQogKiBodHRw Oi8vd3d3LmVjbGlw
c2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KICoNCiAqIENvbnRyaWJ1dG9y czoNCiAqICAgIE5p
Y29sYXMgQnJvcyAoTWlhLVNvZnR3YXJlKSAtIGluaXRpYWwgQVBJIGFuZCBp bXBsZW1lbnRhdGlv
bg0KICogICAgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ug b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLm5hbWluZzsN Cg0KaW1wb3J0IGph
dmEudXRpbC5BcnJheUxpc3Q7DQppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7 DQppbXBvcnQgamF2
YS51dGlsLkhhc2hTZXQ7DQppbXBvcnQgamF2YS51dGlsLkxpc3Q7DQppbXBv cnQgamF2YS51dGls
Lk1hcDsNCg0KaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3Jl RXhjZXB0aW9uOw0K
aW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlv bkVsZW1lbnQ7DQpp
bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247DQpp bXBvcnQgb3JnLmVj
bGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsNCmltcG9ydCBv cmcuZWNsaXBzZS5j
b3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5Ow0KaW1wb3J0IG9yZy5l Y2xpcHNlLmNvcmUu
cnVudGltZS5QbGF0Zm9ybTsNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNv cmUuRUNsYXNzOw0K
aW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KaW1wb3J0 IG9yZy5lY2xpcHNl
LmVtZi5lY29yZS5FUGFja2FnZTsNCmltcG9ydCBvcmcuZWNsaXBzZS5nbXQu bW9kaXNjby5jb21t
b24uZWRpdG9yLkVjb3JlRWRpdG9yUGx1Z2luOw0KaW1wb3J0IG9yZy5lY2xp cHNlLmdtdC5tb2Rp
c2NvLmNvbW1vbi5lZGl0b3IuZXh0ZW5zaW9ucy5BYnN0cmFjdFJlZ2lzdHJ5 Ow0KaW1wb3J0IG9y
Zy5lY2xpcHNlLmdtdC5tb2Rpc2NvLmNvbW1vbi5lZGl0b3IudXRpbC5FTUZV dGlsOw0KDQovKioN
CiAqIFRoZSBzaW5nbGV0b24gcmVnaXN0cnkgb2YgbmFtZSBwcm92aWRlcnMs IHdoaWNoIGluaXRp
YWxpemVzIHRoZSByZWdpc3RyeSBieSByZWFkaW5nIGV4dGVuc2lvbnMNCiAq IHdoZW4gZmlyc3Qg
YWNjZXNzZWQuIEl0IGNhbiBwcm92aWRlIG5hbWVzIGZvciBtb2RlbCBlbGVt ZW50cywgdXNpbmcg
e0BsaW5rIE5hbWVQcm92aWRlcn1zDQogKiBwcm92aWRlZCB0aHJvdWdoIHRo ZSBuYW1pbmcgZXh0
ZW5zaW9uIHBvaW50Lg0KICovDQpwdWJsaWMgY2xhc3MgTmFtZVByb3ZpZGVy c1JlZ2lzdHJ5IGV4
dGVuZHMgQWJzdHJhY3RSZWdpc3RyeSB7DQoNCglwcml2YXRlIHN0YXRpYyBm aW5hbCBTdHJpbmcg
TUVUQUNMQVNTX0VMRU1FTlQgPSAibWV0YWNsYXNzIjsNCglwcml2YXRlIHN0 YXRpYyBmaW5hbCBT
dHJpbmcgRVhURU5TSU9OX1BPSU5UX05BTUVTUEFDRSA9ICJvcmcuZWNsaXBz ZS5nbXQubW9kaXNj
by5jb21tb24uZWRpdG9yIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp bmcgRVhURU5TSU9O
X1BPSU5UX05BTUUgPSAibmFtaW5nIjsNCglwcml2YXRlIHN0YXRpYyBmaW5h bCBTdHJpbmcgTUVU
QU1PREVMX0lEX0FUVFJJQlVURSA9ICJpZCI7DQoJcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5n
IE1FVEFNT0RFTF9FTEVNRU5UID0gIm1ldGFtb2RlbCI7DQoJcHJpdmF0ZSBz dGF0aWMgZmluYWwg
U3RyaW5nIE5BTUVfUFJPVklERVJfRUxFTUVOVCA9ICJuYW1lUHJvdmlkZXIi Ow0KCXByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1BST1ZJREVSX0NMQVNTID0gImNs YXNzIjsNCglwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMVEVSX0VMRU1FTlQgPSAiZmls dGVyIjsNCglwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQUNMQVNTX05BTUVfQVRUUklC VVRFID0gIm5hbWUi
Ow0KDQoJcHJpdmF0ZSBzdGF0aWMgTmFtZVByb3ZpZGVyc1JlZ2lzdHJ5IGlu c3RhbmNlID0gbnVs
bDsNCg0KCS8qKg0KCSAqIEEgbWFwIG9mIG1ldGFtb2RlbHMgdG8gbGlzdHMg b2YgRmlsdGVyZWRO
YW1lUHJvdmlkZXIgdGhhdCBwcm92aWRlIG5hbWVzIGZvciB0aGUgbWV0YW1v ZGVsJ3MNCgkgKiBp
bnN0YW5jZXMNCgkgKi8NCglwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8Rmls dGVyZWROYW1lUHJv
dmlkZXI+PiBuYW1lUHJvdmlkZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBM aXN0PEZpbHRlcmVk
TmFtZVByb3ZpZGVyPj4oKTsNCg0KCXB1YmxpYyBzdGF0aWMgTmFtZVByb3Zp ZGVyc1JlZ2lzdHJ5
IGdldEluc3RhbmNlKCkgew0KCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgew0K CQkJaW5zdGFuY2Ug
PSBuZXcgTmFtZVByb3ZpZGVyc1JlZ2lzdHJ5KCk7DQoJCX0NCgkJcmV0dXJu IGluc3RhbmNlOw0K
CX0NCg0KCS8qKg0KCSAqIFF1ZXJ5IHRoZSBuYW1lIHByb3ZpZGVycyByZWdp c3RyeSBmb3IgYSBu
YW1lIGZvciB0aGUgZ2l2ZW4ge0BsaW5rIEVPYmplY3R9Lg0KCSAqIA0KCSAq IEBwYXJhbSBlT2Jq
ZWN0DQoJICogICAgICAgICAgICB0aGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2Ug bmFtZSBpcyBxdWVy
aWVkDQoJICogDQoJICogQHJldHVybiB0aGUgbmFtZSBvciA8Y29kZT5udWxs PC9jb2RlPiBpZiBu
byBuYW1lIHdhcyBwcm92aWRlZA0KCSAqLw0KCXB1YmxpYyBTdHJpbmcgZ2V0 TmFtZShFT2JqZWN0
IGVPYmplY3QpIHsNCgkJRUNsYXNzIGVDbGFzcyA9IGVPYmplY3QuZUNsYXNz KCk7DQoJCWlmIChl
Q2xhc3MgPT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KDQoJCVN0cmluZyBt ZXRhY2xhc3NRdWFs
aWZpZWROYW1lID0gRU1GVXRpbC5nZXRNZXRhY2xhc3NRdWFsaWZpZWROYW1l KGVDbGFzcyk7DQoN
CgkJLy8gdGhlIG5zVVJJIG9mIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhl IG1ldGFtb2RlbCBk
ZWZpbml0aW9uDQoJCUVQYWNrYWdlIGVQYWNrYWdlID0gZUNsYXNzLmdldEVQ YWNrYWdlKCk7DQoJ
CWlmIChlUGFja2FnZSA9PSBudWxsKQ0KCQkJcmV0dXJuIG51bGw7DQoNCgkJ U3RyaW5nIG5zVVJJ
ID0gZVBhY2thZ2UuZ2V0TnNVUkkoKTsNCg0KCQlMaXN0PEZpbHRlcmVkTmFt ZVByb3ZpZGVyPiBm
aWx0ZXJlZE5hbWVQcm92aWRlcnMgPSB0aGlzLm5hbWVQcm92aWRlcnMuZ2V0 KG5zVVJJKTsNCgkJ
aWYgKGZpbHRlcmVkTmFtZVByb3ZpZGVycyA9PSBudWxsKSB7DQoJCQkvLyB0 cnkgdG8gcmV0cmll
dmUgYSBnZW5lcmljIG5hbWUgcHJvdmlkZXINCgkJCWZpbHRlcmVkTmFtZVBy b3ZpZGVycyA9IHRo
aXMubmFtZVByb3ZpZGVycy5nZXQoIioiKTsNCgkJCWlmIChmaWx0ZXJlZE5h bWVQcm92aWRlcnMg
PT0gbnVsbCkgew0KCQkJCXJldHVybiBudWxsOw0KCQkJfQ0KCQl9DQoNCgkJ Zm9yIChGaWx0ZXJl
ZE5hbWVQcm92aWRlciBmaWx0ZXJlZE5hbWVQcm92aWRlciA6IGZpbHRlcmVk TmFtZVByb3ZpZGVy
cykgew0KCQkJaWYgKGZpbHRlcmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRh Y2xhc3NRdWFsaWZp
ZWROYW1lKSkgew0KCQkJCVN0cmluZyBuYW1lID0gZmlsdGVyZWROYW1lUHJv dmlkZXIuZ2V0TmFt
ZShlT2JqZWN0KTsNCgkJCQlpZiAobmFtZSAhPSBudWxsKQ0KCQkJCQlyZXR1 cm4gbmFtZTsNCgkJ
CX0NCgkJfQ0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKiogSW5pdGlhbGl6 ZSB0aGUgcmVnaXN0
cnkgYnkgcmVhZGluZyB0aGUgZXh0ZW5zaW9uIHBvaW50IHRvIGRpc2NvdmVy IGV4dGVuc2lvbnMu
ICovDQoJcHVibGljIE5hbWVQcm92aWRlcnNSZWdpc3RyeSgpIHsNCg0KCQlJ RXh0ZW5zaW9uUmVn
aXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNp b25SZWdpc3RyeSgp
Ow0KCQlJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSBleHRlbnNp b25SZWdpc3RyeS5n
ZXRFeHRlbnNpb25Qb2ludCgNCgkJCQlFWFRFTlNJT05fUE9JTlRfTkFNRVNQ QUNFLCBFWFRFTlNJ
T05fUE9JTlRfTkFNRSk7DQoNCgkJSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMg PSBleHRlbnNpb25Q
b2ludC5nZXRFeHRlbnNpb25zKCk7DQoJCWZvciAoSUV4dGVuc2lvbiBleHRl bnNpb24gOiBleHRl
bnNpb25zKSB7DQoJCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWd1 cmF0aW9uRWxlbWVu
dHMgPSBleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCk7DQoJ CQlmb3IgKElDb25m
aWd1cmF0aW9uRWxlbWVudCBjb25maWd1cmF0aW9uRWxlbWVudCA6IGNvbmZp Z3VyYXRpb25FbGVt
ZW50cykgew0KCQkJCVN0cmluZyBuYW1lID0gY29uZmlndXJhdGlvbkVsZW1l bnQuZ2V0TmFtZSgp
Ow0KCQkJCWlmIChuYW1lLmVxdWFsc0lnbm9yZUNhc2UoTUVUQU1PREVMX0VM RU1FTlQpKSB7DQoJ
CQkJCXJlYWRNZXRhbW9kZWxFbGVtZW50KGNvbmZpZ3VyYXRpb25FbGVtZW50 KTsNCgkJCQl9IGVs
c2Ugew0KCQkJCQlsb2dVbmtub3duRWxlbWVudChjb25maWd1cmF0aW9uRWxl bWVudCk7DQoJCQkJ
fQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqIFJlYWQgYSAnbWV0YW1vZGVsJyBl bGVtZW50ICovDQoJ
cHJpdmF0ZSB2b2lkIHJlYWRNZXRhbW9kZWxFbGVtZW50KElDb25maWd1cmF0 aW9uRWxlbWVudCBj
b25maWd1cmF0aW9uRWxlbWVudCkgew0KCQlTdHJpbmcgbWV0YW1vZGVsSWQg PSBjb25maWd1cmF0
aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoTUVUQU1PREVMX0lEX0FUVFJJQlVU RSk7DQoJCWlmICht
ZXRhbW9kZWxJZCA9PSBudWxsKSB7DQoJCQlsb2dNaXNzaW5nQXR0cmlidXRl KGNvbmZpZ3VyYXRp
b25FbGVtZW50LCBNRVRBTU9ERUxfSURfQVRUUklCVVRFKTsNCgkJCXJldHVy bjsNCgkJfQ0KDQoJ
CUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuID0gY29uZmlndXJh dGlvbkVsZW1lbnQu
Z2V0Q2hpbGRyZW4oKTsNCgkJZm9yIChJQ29uZmlndXJhdGlvbkVsZW1lbnQg Y2hpbGQgOiBjaGls
ZHJlbikgew0KCQkJU3RyaW5nIG5hbWUgPSBjaGlsZC5nZXROYW1lKCk7DQoJ CQlpZiAobmFtZS5l
cXVhbHNJZ25vcmVDYXNlKE5BTUVfUFJPVklERVJfRUxFTUVOVCkpIHsNCgkJ CQlyZWFkTmFtZVBy
b3ZpZGVyRWxlbWVudChjaGlsZCwgbWV0YW1vZGVsSWQpOw0KCQkJfSBlbHNl IHsNCgkJCQlsb2dV
bmtub3duRWxlbWVudChjb25maWd1cmF0aW9uRWxlbWVudCk7DQoJCQl9DQoJ CX0NCg0KCX0NCg0K
CS8qKg0KCSAqIFJlYWQgYSAnbmFtZVByb3ZpZGVyJyBlbGVtZW50LCBhbmQg YWRkcyB0aGUgbmFt
ZSBwcm92aWRlcnMgdG8gdGhlIHJlZ2lzdHJ5Lg0KCSAqIA0KCSAqIEBwYXJh bSBjb25maWd1cmF0
aW9uRWxlbWVudA0KCSAqICAgICAgICAgICAgdGhlICduYW1lUHJvdmlkZXIn IGVsZW1lbnQNCgkg
KiBAcGFyYW0gbWV0YW1vZGVsSWQNCgkgKiAgICAgICAgICAgIHRoZSBuc1VS SSBvZiB0aGUgcGFj
a2FnZSBjb250YWluaW5nIHRoZSBtZXRhbW9kZWwncyBtZXRhY2xhc3Nlcw0K CSAqLw0KCXByaXZh
dGUgdm9pZCByZWFkTmFtZVByb3ZpZGVyRWxlbWVudChJQ29uZmlndXJhdGlv bkVsZW1lbnQgY29u
ZmlndXJhdGlvbkVsZW1lbnQsDQoJCQlTdHJpbmcgbWV0YW1vZGVsSWQpIHsN CgkJDQoJCS8vIGlm
IG5vdCBudWxsLCBmaWx0ZXJzIG9uIHRoZSBtZXRhY2xhc3MgbmFtZQ0KCQlI YXNoU2V0PFN0cmlu
Zz4gZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG51bGw7DQoJCQ0KCQlJQ29uZmln dXJhdGlvbkVsZW1l
bnRbXSBmaWx0ZXJFbGVtZW50cyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50Lmdl dENoaWxkcmVuKEZJ
TFRFUl9FTEVNRU5UKTsNCgkJaWYoZmlsdGVyRWxlbWVudHMubGVuZ3RoID4g MCkgew0KCQkJLy8g
b3B0aW9uYWwgZWxlbWVudCA6IDAgb3IgMQ0KCQkJSUNvbmZpZ3VyYXRpb25F bGVtZW50W10gbWV0
YWNsYXNzRWxlbWVudHMgPSBmaWx0ZXJFbGVtZW50c1swXS5nZXRDaGlsZHJl bihNRVRBQ0xBU1Nf
RUxFTUVOVCk7DQoJCQlmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBtZXRh Y2xhc3NFbGVtZW50
IDogbWV0YWNsYXNzRWxlbWVudHMpIHsNCgkJCQlTdHJpbmcgbWV0YWNsYXNz TmFtZSA9IG1ldGFj
bGFzc0VsZW1lbnQuZ2V0QXR0cmlidXRlKE1FVEFDTEFTU19OQU1FX0FUVFJJ QlVURSk7DQoJCQkJ
aWYobWV0YWNsYXNzTmFtZSAhPSBudWxsKSB7DQoJCQkJCWlmKGZpbHRlcmVk TWV0YWNsYXNzZXMg
PT0gbnVsbCkgew0KCQkJCQkJZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG5ldyBI YXNoU2V0PFN0cmlu
Zz4oKTsNCgkJCQkJfQ0KCQkJCQlmaWx0ZXJlZE1ldGFjbGFzc2VzLmFkZCht ZXRhY2xhc3NOYW1l
KTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCWZpbmFsIEhhc2hTZXQ8U3Ry aW5nPiBmRmlsdGVy
ZWRNZXRhY2xhc3NlcyA9IGZpbHRlcmVkTWV0YWNsYXNzZXM7DQoNCgkJT2Jq ZWN0IG5hbWVQcm92
aWRlck9iamVjdDsNCgkJdHJ5IHsNCgkJCW5hbWVQcm92aWRlck9iamVjdCA9 IGNvbmZpZ3VyYXRp
b25FbGVtZW50DQoJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKE5B TUVfUFJPVklERVJf
Q0xBU1MpOw0KCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCgkJCUVj b3JlRWRpdG9yUGx1
Z2luLklOU1RBTkNFLmxvZyhlKTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAo bmFtZVByb3ZpZGVy
T2JqZWN0ID09IG51bGwpIHsNCgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29u ZmlndXJhdGlvbkVs
ZW1lbnQsIE5BTUVfUFJPVklERVJfQ0xBU1MpOw0KCQkJcmV0dXJuOw0KCQl9 DQoNCgkJTGlzdDxG
aWx0ZXJlZE5hbWVQcm92aWRlcj4gZmlsdGVyZWROYW1lUHJvdmlkZXJzID0g dGhpcy5uYW1lUHJv
dmlkZXJzLmdldChtZXRhbW9kZWxJZCk7DQoJCWlmIChmaWx0ZXJlZE5hbWVQ cm92aWRlcnMgPT0g
bnVsbCkgew0KCQkJZmlsdGVyZWROYW1lUHJvdmlkZXJzID0gbmV3IEFycmF5 TGlzdDxGaWx0ZXJl
ZE5hbWVQcm92aWRlcj4oKTsNCgkJfQ0KDQoJCS8qDQoJCSAqIFRoZSB1c2Vy IGNhbiBlaXRoZXIg
cHJvdmlkZSBhIEZpbHRlcmVkTmFtZVByb3ZpZGVyIG9yIGEgTmFtZVByb3Zp ZGVyLiBJbiBlaXRo
ZXIgY2FzZSwgaWYNCgkJICogYSBmaWx0ZXIgaXMgc2V0IGluIHRoZSBleHRl bnNpb24gZGVmaW5p
dGlvbiwgdGhlbiBpdCB3aWxsIGdldCBhcHBsaWVkIGJlZm9yZSB0aGUgdXNl cg0KCQkgKiBjb2Rl
IGlzIGNhbGxlZC4NCgkJICovDQoJCWlmIChuYW1lUHJvdmlkZXJPYmplY3Qg aW5zdGFuY2VvZiBG
aWx0ZXJlZE5hbWVQcm92aWRlcikgew0KCQkJZmluYWwgRmlsdGVyZWROYW1l UHJvdmlkZXIgZmls
dGVyZWROYW1lUHJvdmlkZXIgPSAoRmlsdGVyZWROYW1lUHJvdmlkZXIpIG5h bWVQcm92aWRlck9i
amVjdDsNCgkJCWZpbHRlcmVkTmFtZVByb3ZpZGVycy5hZGQobmV3IEZpbHRl cmVkTmFtZVByb3Zp
ZGVyKCkgew0KDQoJCQkJcHVibGljIFN0cmluZyBnZXROYW1lKEVPYmplY3Qg ZU9iamVjdCkgew0K
CQkJCQlyZXR1cm4gZmlsdGVyZWROYW1lUHJvdmlkZXIuZ2V0TmFtZShlT2Jq ZWN0KTsNCgkJCQl9
DQoNCgkJCQlwdWJsaWMgYm9vbGVhbiBmaWx0ZXIoU3RyaW5nIG1ldGFjbGFz cykgew0KCQkJCQlp
ZiAoZkZpbHRlcmVkTWV0YWNsYXNzZXMgIT0gbnVsbCAmJiAhZkZpbHRlcmVk TWV0YWNsYXNzZXMu
Y29udGFpbnMobWV0YWNsYXNzKSkNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJ CQkJcmV0dXJuIGZp
bHRlcmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRhY2xhc3MpOw0KCQkJCX0N CgkJCX0pOw0KCQl9
IGVsc2UgaWYgKG5hbWVQcm92aWRlck9iamVjdCBpbnN0YW5jZW9mIE5hbWVQ cm92aWRlcikgew0K
CQkJZmluYWwgTmFtZVByb3ZpZGVyIG5hbWVQcm92aWRlciA9IChOYW1lUHJv dmlkZXIpIG5hbWVQ
cm92aWRlck9iamVjdDsNCg0KCQkJRmlsdGVyZWROYW1lUHJvdmlkZXIgZmls dGVyZWROYW1lUHJv
dmlkZXIgPSBuZXcgRmlsdGVyZWROYW1lUHJvdmlkZXIoKSB7DQoNCgkJCQlw dWJsaWMgU3RyaW5n
IGdldE5hbWUoRU9iamVjdCBlT2JqZWN0KSB7DQoJCQkJCXJldHVybiBuYW1l UHJvdmlkZXIuZ2V0
TmFtZShlT2JqZWN0KTsNCgkJCQl9DQoNCgkJCQlwdWJsaWMgYm9vbGVhbiBm aWx0ZXIoU3RyaW5n
IG1ldGFjbGFzcykgew0KCQkJCQlpZihmRmlsdGVyZWRNZXRhY2xhc3NlcyA9 PSBudWxsKQ0KCQkJ
CQkJcmV0dXJuIHRydWU7DQoJCQkJCXJldHVybiBmRmlsdGVyZWRNZXRhY2xh c3Nlcy5jb250YWlu
cyhtZXRhY2xhc3MpOw0KCQkJCX0NCgkJCX07DQoJCQlmaWx0ZXJlZE5hbWVQ cm92aWRlcnMuYWRk
KGZpbHRlcmVkTmFtZVByb3ZpZGVyKTsNCgkJfSBlbHNlIHsNCgkJCWxvZ0Vy cm9yKGNvbmZpZ3Vy
YXRpb25FbGVtZW50LCAiR2l2ZW4gY2xhc3MgaXMgbm90IGEgTmFtZVByb3Zp ZGVyIik7DQoJCX0N
CgkJdGhpcy5uYW1lUHJvdmlkZXJzLnB1dChtZXRhbW9kZWxJZCwgZmlsdGVy ZWROYW1lUHJvdmlk
ZXJzKTsNCgl9DQp9DQo=

--=_mixed 006E769CC1257570_=
Content-Type: application/octet-stream; name="IconProvidersRegistry.java"
Content-Disposition: attachment; filename="IconProvidersRegistry.java"
Content-Transfer-Encoding: base64

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAw OSBNaWEtU29mdHdh
cmUuDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5k IHRoZSBhY2NvbXBh
bnlpbmcgbWF0ZXJpYWxzDQogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIg dGhlIHRlcm1zIG9m
IHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCiAqIHdoaWNoIGFj Y29tcGFuaWVzIHRo
aXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQogKiBodHRw Oi8vd3d3LmVjbGlw
c2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KICoNCiAqIENvbnRyaWJ1dG9y czoNCiAqICAgIE5p
Y29sYXMgQnJvcyAoTWlhLVNvZnR3YXJlKSAtIGluaXRpYWwgQVBJIGFuZCBp bXBsZW1lbnRhdGlv
bg0KICogICAgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ug b3JnLmVjbGlwc2Uu
Z210Lm1vZGlzY28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLmljb25zOw0K DQppbXBvcnQgamF2
YS51dGlsLkFycmF5TGlzdDsNCmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsN CmltcG9ydCBqYXZh
LnV0aWwuSGFzaFNldDsNCmltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCmltcG9y dCBqYXZhLnV0aWwu
TWFwOw0KDQppbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVF eGNlcHRpb247DQpp
bXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9u RWxlbWVudDsNCmlt
cG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsNCmlt cG9ydCBvcmcuZWNs
aXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50Ow0KaW1wb3J0IG9y Zy5lY2xpcHNlLmNv
cmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7DQppbXBvcnQgb3JnLmVj bGlwc2UuY29yZS5y
dW50aW1lLlBsYXRmb3JtOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29y ZS5FQ2xhc3M7DQpp
bXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQppbXBvcnQg b3JnLmVjbGlwc2Uu
ZW1mLmVjb3JlLkVQYWNrYWdlOw0KaW1wb3J0IG9yZy5lY2xpcHNlLmdtdC5t b2Rpc2NvLmNvbW1v
bi5lZGl0b3IuRWNvcmVFZGl0b3JQbHVnaW47DQppbXBvcnQgb3JnLmVjbGlw c2UuZ210Lm1vZGlz
Y28uY29tbW9uLmVkaXRvci5leHRlbnNpb25zLkFic3RyYWN0UmVnaXN0cnk7 DQppbXBvcnQgb3Jn
LmVjbGlwc2UuZ210Lm1vZGlzY28uY29tbW9uLmVkaXRvci51dGlsLkVNRlV0 aWw7DQppbXBvcnQg
b3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOw0KDQovKioNCiAqIFRo ZSBzaW5nbGV0b24g
cmVnaXN0cnkgb2YgbmFtZSBwcm92aWRlcnMsIHdoaWNoIGluaXRpYWxpemVz IHRoZSByZWdpc3Ry
eSBieSByZWFkaW5nIGV4dGVuc2lvbnMNCiAqIHdoZW4gZmlyc3QgYWNjZXNz ZWQuIEl0IGNhbiBw
cm92aWRlIG5hbWVzIGZvciBtb2RlbCBlbGVtZW50cywgdXNpbmcge0BsaW5r IEljb25Qcm92aWRl
cn1zDQogKiBwcm92aWRlZCB0aHJvdWdoIHRoZSBuYW1pbmcgZXh0ZW5zaW9u IHBvaW50Lg0KICov
DQpwdWJsaWMgY2xhc3MgSWNvblByb3ZpZGVyc1JlZ2lzdHJ5IGV4dGVuZHMg QWJzdHJhY3RSZWdp
c3RyeSB7DQoNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQUNM QVNTX0VMRU1FTlQg
PSAibWV0YWNsYXNzIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg RVhURU5TSU9OX1BP
SU5UX05BTUVTUEFDRSA9ICJvcmcuZWNsaXBzZS5nbXQubW9kaXNjby5jb21t b24uZWRpdG9yIjsN
Cglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5TSU9OX1BPSU5U X05BTUUgPSAiaWNv
bnMiOw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRBTU9ERUxf SURfQVRUUklCVVRF
ID0gImlkIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUQU1P REVMX0VMRU1FTlQg
PSAibWV0YW1vZGVsIjsNCglwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg SUNPTl9QUk9WSURF
Ul9FTEVNRU5UID0gImljb25Qcm92aWRlciI7DQoJcHJpdmF0ZSBzdGF0aWMg ZmluYWwgU3RyaW5n
IElDT05fUFJPVklERVJfQ0xBU1MgPSAiY2xhc3MiOw0KCXByaXZhdGUgc3Rh dGljIGZpbmFsIFN0
cmluZyBGSUxURVJfRUxFTUVOVCA9ICJmaWx0ZXIiOw0KCXByaXZhdGUgc3Rh dGljIGZpbmFsIFN0
cmluZyBNRVRBQ0xBU1NfTkFNRV9BVFRSSUJVVEUgPSAibmFtZSI7DQoNCglw cml2YXRlIHN0YXRp
YyBJY29uUHJvdmlkZXJzUmVnaXN0cnkgaW5zdGFuY2UgPSBudWxsOw0KDQoJ LyoqDQoJICogQSBt
YXAgb2YgbWV0YW1vZGVscyB0byBsaXN0cyBvZiBGaWx0ZXJlZEljb25Qcm92 aWRlciB0aGF0IHBy
b3ZpZGUgaWNvbnMgZm9yIHRoZSBtZXRhbW9kZWwncw0KCSAqIGluc3RhbmNl cw0KCSAqLw0KCXBy
aXZhdGUgTWFwPFN0cmluZywgTGlzdDxGaWx0ZXJlZEljb25Qcm92aWRlcj4+ IGljb25Qcm92aWRl
cnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RmlsdGVyZWRJY29uUHJv dmlkZXI+PigpOw0K
DQoJcHVibGljIHN0YXRpYyBJY29uUHJvdmlkZXJzUmVnaXN0cnkgZ2V0SW5z dGFuY2UoKSB7DQoJ
CWlmIChpbnN0YW5jZSA9PSBudWxsKSB7DQoJCQlpbnN0YW5jZSA9IG5ldyBJ Y29uUHJvdmlkZXJz
UmVnaXN0cnkoKTsNCgkJfQ0KCQlyZXR1cm4gaW5zdGFuY2U7DQoJfQ0KDQoJ LyoqDQoJICogUXVl
cnkgdGhlIGljb24gcHJvdmlkZXJzIHJlZ2lzdHJ5IGZvciBhbiBpY29uIGZv ciB0aGUgZ2l2ZW4g
e0BsaW5rIEVPYmplY3R9Lg0KCSAqIA0KCSAqIEBwYXJhbSBlT2JqZWN0DQoJ ICogICAgICAgICAg
ICB0aGUgbW9kZWwgaW5zdGFuY2Ugd2hvc2UgaWNvbiBpcyBxdWVyaWVkDQoJ ICogDQoJICogQHJl
dHVybiB0aGUgaWNvbiBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyBpY29u IHdhcyBwcm92aWRl
ZA0KCSAqLw0KCXB1YmxpYyBJbWFnZSBnZXRJY29uKEVPYmplY3QgZU9iamVj dCkgew0KCQlFQ2xh
c3MgZUNsYXNzID0gZU9iamVjdC5lQ2xhc3MoKTsNCgkJaWYgKGVDbGFzcyA9 PSBudWxsKQ0KCQkJ
cmV0dXJuIG51bGw7DQoNCgkJU3RyaW5nIG1ldGFjbGFzc1F1YWxpZmllZE5h bWUgPSBFTUZVdGls
LmdldE1ldGFjbGFzc1F1YWxpZmllZE5hbWUoZUNsYXNzKTsNCg0KCQkvLyBm aW5kIHRoZSBuc1VS
SSBvZiB0aGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBtZXRhbW9kZWwgZGVm aW5pdGlvbg0KCQlF
UGFja2FnZSBlUGFja2FnZSA9IGVDbGFzcy5nZXRFUGFja2FnZSgpOw0KCQlp ZiAoZVBhY2thZ2Ug
PT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KCQlTdHJpbmcgbnNVUkkgPSBl UGFja2FnZS5nZXRO
c1VSSSgpOw0KDQoJCUxpc3Q8RmlsdGVyZWRJY29uUHJvdmlkZXI+IGZpbHRl cmVkSWNvblByb3Zp
ZGVycyA9IHRoaXMuaWNvblByb3ZpZGVycy5nZXQobnNVUkkpOw0KCQlpZiAo ZmlsdGVyZWRJY29u
UHJvdmlkZXJzID09IG51bGwpIHsNCgkJCS8vIHRyeSB0byByZXRyaWV2ZSBh IGdlbmVyaWMgbmFt
ZSBwcm92aWRlcg0KCQkJZmlsdGVyZWRJY29uUHJvdmlkZXJzID0gdGhpcy5p Y29uUHJvdmlkZXJz
LmdldCgiKiIpOw0KCQkJaWYgKGZpbHRlcmVkSWNvblByb3ZpZGVycyA9PSBu dWxsKSB7DQoJCQkJ
cmV0dXJuIG51bGw7DQoJCQl9DQoJCX0NCgkJZm9yIChGaWx0ZXJlZEljb25Q cm92aWRlciBmaWx0
ZXJlZE5hbWVQcm92aWRlciA6IGZpbHRlcmVkSWNvblByb3ZpZGVycykgew0K CQkJaWYgKGZpbHRl
cmVkTmFtZVByb3ZpZGVyLmZpbHRlcihtZXRhY2xhc3NRdWFsaWZpZWROYW1l KSkgew0KCQkJCUlt
YWdlIGljb24gPSBmaWx0ZXJlZE5hbWVQcm92aWRlci5nZXRJY29uKGVPYmpl Y3QpOw0KCQkJCWlm
IChpY29uICE9IG51bGwpDQoJCQkJCXJldHVybiBpY29uOw0KCQkJfQ0KCQl9 DQoJCXJldHVybiBu
dWxsOw0KCX0NCg0KCS8qKiBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBieSBy ZWFkaW5nIHRoZSBl
eHRlbnNpb24gcG9pbnQgdG8gZGlzY292ZXIgZXh0ZW5zaW9ucy4gKi8NCglw dWJsaWMgSWNvblBy
b3ZpZGVyc1JlZ2lzdHJ5KCkgew0KDQoJCUlFeHRlbnNpb25SZWdpc3RyeSBl eHRlbnNpb25SZWdp
c3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7DQoJCUlF eHRlbnNpb25Qb2lu
dCBleHRlbnNpb25Qb2ludCA9IGV4dGVuc2lvblJlZ2lzdHJ5LmdldEV4dGVu c2lvblBvaW50KA0K
CQkJCUVYVEVOU0lPTl9QT0lOVF9OQU1FU1BBQ0UsIEVYVEVOU0lPTl9QT0lO VF9OQU1FKTsNCg0K
CQlJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50Lmdl dEV4dGVuc2lvbnMo
KTsNCgkJZm9yIChJRXh0ZW5zaW9uIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnMp IHsNCgkJCUlDb25m
aWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ3VyYXRpb25FbGVtZW50cyA9IGV4 dGVuc2lvbi5nZXRD
b25maWd1cmF0aW9uRWxlbWVudHMoKTsNCgkJCWZvciAoSUNvbmZpZ3VyYXRp b25FbGVtZW50IGNv
bmZpZ3VyYXRpb25FbGVtZW50IDogY29uZmlndXJhdGlvbkVsZW1lbnRzKSB7 DQoJCQkJU3RyaW5n
IG5hbWUgPSBjb25maWd1cmF0aW9uRWxlbWVudC5nZXROYW1lKCk7DQoJCQkJ aWYgKG5hbWUuZXF1
YWxzSWdub3JlQ2FzZShNRVRBTU9ERUxfRUxFTUVOVCkpIHsNCgkJCQkJcmVh ZE1ldGFtb2RlbEVs
ZW1lbnQoY29uZmlndXJhdGlvbkVsZW1lbnQpOw0KCQkJCX0gZWxzZSB7DQoJ CQkJCWxvZ1Vua25v
d25FbGVtZW50KGNvbmZpZ3VyYXRpb25FbGVtZW50KTsNCgkJCQl9DQoJCQl9 DQoJCX0NCgl9DQoN
CgkvKiogUmVhZCBhICdtZXRhbW9kZWwnIGVsZW1lbnQgKi8NCglwcml2YXRl IHZvaWQgcmVhZE1l
dGFtb2RlbEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ3Vy YXRpb25FbGVtZW50
KSB7DQoJCVN0cmluZyBtZXRhbW9kZWxJZCA9IGNvbmZpZ3VyYXRpb25FbGVt ZW50LmdldEF0dHJp
YnV0ZShNRVRBTU9ERUxfSURfQVRUUklCVVRFKTsNCgkJaWYgKG1ldGFtb2Rl bElkID09IG51bGwp
IHsNCgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29uZmlndXJhdGlvbkVsZW1l bnQsIE1FVEFNT0RF
TF9JRF9BVFRSSUJVVEUpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJSUNvbmZp Z3VyYXRpb25FbGVt
ZW50W10gY2hpbGRyZW4gPSBjb25maWd1cmF0aW9uRWxlbWVudC5nZXRDaGls ZHJlbigpOw0KCQlm
b3IgKElDb25maWd1cmF0aW9uRWxlbWVudCBjaGlsZCA6IGNoaWxkcmVuKSB7 DQoJCQlTdHJpbmcg
bmFtZSA9IGNoaWxkLmdldE5hbWUoKTsNCgkJCWlmIChuYW1lLmVxdWFsc0ln bm9yZUNhc2UoSUNP
Tl9QUk9WSURFUl9FTEVNRU5UKSkgew0KCQkJCXJlYWRJY29uUHJvdmlkZXJF bGVtZW50KGNoaWxk
LCBtZXRhbW9kZWxJZCk7DQoJCQl9IGVsc2Ugew0KCQkJCWxvZ1Vua25vd25F bGVtZW50KGNvbmZp
Z3VyYXRpb25FbGVtZW50KTsNCgkJCX0NCgkJfQ0KDQoJfQ0KDQoJLyoqDQoJ ICogUmVhZCBhbiAn
aWNvblByb3ZpZGVyJyBlbGVtZW50LCBhbmQgYWRkcyB0aGUgaWNvbiBwcm92 aWRlcnMgdG8gdGhl
IHJlZ2lzdHJ5Lg0KCSAqIA0KCSAqIEBwYXJhbSBjb25maWd1cmF0aW9uRWxl bWVudA0KCSAqICAg
ICAgICAgICAgdGhlICdpY29uUHJvdmlkZXInIGVsZW1lbnQNCgkgKiBAcGFy YW0gbWV0YW1vZGVs
SWQNCgkgKiAgICAgICAgICAgIHRoZSBuc1VSSSBvZiB0aGUgcGFja2FnZSBj b250YWluaW5nIHRo
ZSBtZXRhbW9kZWwncyBtZXRhY2xhc3Nlcw0KCSAqLw0KCXByaXZhdGUgdm9p ZCByZWFkSWNvblBy
b3ZpZGVyRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJh dGlvbkVsZW1lbnQs
DQoJCQlTdHJpbmcgbWV0YW1vZGVsSWQpIHsNCgkJDQoJCS8vIGlmIG5vdCBu dWxsLCBmaWx0ZXJz
IG9uIHRoZSBtZXRhY2xhc3MgbmFtZQ0KCQlIYXNoU2V0PFN0cmluZz4gZmls dGVyZWRNZXRhY2xh
c3NlcyA9IG51bGw7DQoJCQ0KCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBm aWx0ZXJFbGVtZW50
cyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50LmdldENoaWxkcmVuKEZJTFRFUl9F TEVNRU5UKTsNCgkJ
aWYoZmlsdGVyRWxlbWVudHMubGVuZ3RoID4gMCkgew0KCQkJLy8gb3B0aW9u YWwgZWxlbWVudCA6
IDAgb3IgMQ0KCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gbWV0YWNsYXNz RWxlbWVudHMgPSBm
aWx0ZXJFbGVtZW50c1swXS5nZXRDaGlsZHJlbihNRVRBQ0xBU1NfRUxFTUVO VCk7DQoJCQlmb3Ig
KElDb25maWd1cmF0aW9uRWxlbWVudCBtZXRhY2xhc3NFbGVtZW50IDogbWV0 YWNsYXNzRWxlbWVu
dHMpIHsNCgkJCQlTdHJpbmcgbWV0YWNsYXNzTmFtZSA9IG1ldGFjbGFzc0Vs ZW1lbnQuZ2V0QXR0
cmlidXRlKE1FVEFDTEFTU19OQU1FX0FUVFJJQlVURSk7DQoJCQkJaWYobWV0 YWNsYXNzTmFtZSAh
PSBudWxsKSB7DQoJCQkJCWlmKGZpbHRlcmVkTWV0YWNsYXNzZXMgPT0gbnVs bCkgew0KCQkJCQkJ
ZmlsdGVyZWRNZXRhY2xhc3NlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsN CgkJCQkJfQ0KCQkJ
CQlmaWx0ZXJlZE1ldGFjbGFzc2VzLmFkZChtZXRhY2xhc3NOYW1lKTsNCgkJ CQl9DQoJCQl9DQoJ
CX0NCgkJDQoJCWZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBmRmlsdGVyZWRNZXRh Y2xhc3NlcyA9IGZp
bHRlcmVkTWV0YWNsYXNzZXM7DQoNCgkJT2JqZWN0IGljb25Qcm92aWRlck9i amVjdDsNCgkJdHJ5
IHsNCgkJCWljb25Qcm92aWRlck9iamVjdCA9IGNvbmZpZ3VyYXRpb25FbGVt ZW50DQoJCQkJCS5j
cmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKElDT05fUFJPVklERVJfQ0xBU1Mp Ow0KCQl9IGNhdGNo
IChDb3JlRXhjZXB0aW9uIGUpIHsNCgkJCUVjb3JlRWRpdG9yUGx1Z2luLklO U1RBTkNFLmxvZyhl
KTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAoaWNvblByb3ZpZGVyT2JqZWN0 ID09IG51bGwpIHsN
CgkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoY29uZmlndXJhdGlvbkVsZW1lbnQs IElDT05fUFJPVklE
RVJfQ0xBU1MpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJTGlzdDxGaWx0ZXJl ZEljb25Qcm92aWRl
cj4gZmlsdGVyZWRJY29uUHJvdmlkZXJzID0gdGhpcy5pY29uUHJvdmlkZXJz LmdldChtZXRhbW9k
ZWxJZCk7DQoJCWlmIChmaWx0ZXJlZEljb25Qcm92aWRlcnMgPT0gbnVsbCkg ew0KCQkJZmlsdGVy
ZWRJY29uUHJvdmlkZXJzID0gbmV3IEFycmF5TGlzdDxGaWx0ZXJlZEljb25Q cm92aWRlcj4oKTsN
CgkJfQ0KDQoJCS8qDQoJCSAqIFRoZSB1c2VyIGNhbiBlaXRoZXIgcHJvdmlk ZSBhIEZpbHRlcmVk
SWNvblByb3ZpZGVyIG9yIGFuIEljb25Qcm92aWRlci4gSW4gZWl0aGVyIGNh c2UsIGlmDQoJCSAq
IGEgZmlsdGVyIGlzIHNldCBpbiB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24s IHRoZW4gaXQgd2ls
bCBnZXQgYXBwbGllZCBiZWZvcmUgdGhlIHVzZXINCgkJICogY29kZSBpcyBj YWxsZWQuDQoJCSAq
Lw0KCQlpZiAoaWNvblByb3ZpZGVyT2JqZWN0IGluc3RhbmNlb2YgRmlsdGVy ZWRJY29uUHJvdmlk
ZXIpIHsNCgkJCWZpbmFsIEZpbHRlcmVkSWNvblByb3ZpZGVyIGZpbHRlcmVk SWNvblByb3ZpZGVy
ID0gKEZpbHRlcmVkSWNvblByb3ZpZGVyKSBpY29uUHJvdmlkZXJPYmplY3Q7 DQoJCQlmaWx0ZXJl
ZEljb25Qcm92aWRlcnMuYWRkKG5ldyBGaWx0ZXJlZEljb25Qcm92aWRlcigp IHsNCg0KCQkJCXB1
YmxpYyBJbWFnZSBnZXRJY29uKEVPYmplY3Qgb2JqZWN0KSB7DQoJCQkJCXJl dHVybiBmaWx0ZXJl
ZEljb25Qcm92aWRlci5nZXRJY29uKG9iamVjdCk7DQoJCQkJfQ0KDQoJCQkJ cHVibGljIGJvb2xl
YW4gZmlsdGVyKFN0cmluZyBtZXRhY2xhc3MpIHsNCgkJCQkJaWYgKGZGaWx0 ZXJlZE1ldGFjbGFz
c2VzICE9IG51bGwgJiYgIWZGaWx0ZXJlZE1ldGFjbGFzc2VzLmNvbnRhaW5z KG1ldGFjbGFzcykp
DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCXJldHVybiBmaWx0ZXJlZElj b25Qcm92aWRlci5m
aWx0ZXIobWV0YWNsYXNzKTsNCgkJCQl9DQoJCQl9KTsNCgkJfSBlbHNlIGlm IChpY29uUHJvdmlk
ZXJPYmplY3QgaW5zdGFuY2VvZiBJY29uUHJvdmlkZXIpIHsNCgkJCWZpbmFs IEljb25Qcm92aWRl
ciBpY29uUHJvdmlkZXIgPSAoSWNvblByb3ZpZGVyKSBpY29uUHJvdmlkZXJP YmplY3Q7DQoNCgkJ
CUZpbHRlcmVkSWNvblByb3ZpZGVyIGZpbHRlcmVkTmFtZVByb3ZpZGVyID0g bmV3IEZpbHRlcmVk
SWNvblByb3ZpZGVyKCkgew0KDQoJCQkJcHVibGljIEltYWdlIGdldEljb24o RU9iamVjdCBvYmpl
Y3QpIHsNCgkJCQkJcmV0dXJuIGljb25Qcm92aWRlci5nZXRJY29uKG9iamVj dCk7DQoJCQkJfQ0K
DQoJCQkJcHVibGljIGJvb2xlYW4gZmlsdGVyKFN0cmluZyBtZXRhY2xhc3Mp IHsNCgkJCQkJaWYo
ZkZpbHRlcmVkTWV0YWNsYXNzZXMgPT0gbnVsbCkNCgkJCQkJCXJldHVybiB0 cnVlOw0KCQkJCQly
ZXR1cm4gZkZpbHRlcmVkTWV0YWNsYXNzZXMuY29udGFpbnMobWV0YWNsYXNz KTsNCgkJCQl9DQoJ
CQl9Ow0KCQkJZmlsdGVyZWRJY29uUHJvdmlkZXJzLmFkZChmaWx0ZXJlZE5h bWVQcm92aWRlcik7
DQoJCX0gZWxzZSB7DQoJCQlsb2dFcnJvcihjb25maWd1cmF0aW9uRWxlbWVu dCwgIkdpdmVuIGNs
YXNzIGlzIG5vdCBhbiBJY29uUHJvdmlkZXIiKTsNCgkJfQ0KCQl0aGlzLmlj b25Qcm92aWRlcnMu
cHV0KG1ldGFtb2RlbElkLCBmaWx0ZXJlZEljb25Qcm92aWRlcnMpOw0KCX0N Cn0NCg==

--=_mixed 006E769CC1257570_=--
Re: [Announce] Extended Model Browser [message #572924 is a reply to message #681] Tue, 10 March 2009 10:50 Go to previous message
Gabriel BARBIER is currently offline Gabriel BARBIERFriend
Messages: 106
Registered: July 2009
Senior Member
A patch to handle generic extensions has been submitted and accepted.
So SVN is up to date.
Re: [Announce] Extended Model Browser [message #572956 is a reply to message #850] Tue, 10 March 2009 10:52 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Thanks Gabriel!

I'll update and let you know how it goes.

Cheers,
Dimitris

Gabriel wrote:
> A patch to handle generic extensions has been submitted and accepted.
> So SVN is up to date.
Previous Topic:MoDisco poster at EclipseCon 2009
Next Topic:MoDisco and problem with running use cases
Goto Forum:
  


Current Time: Thu Mar 28 23:07:11 GMT 2024

Powered by FUDForum. Page generated in 0.04937 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top