Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » OCL » Global Operations
Global Operations [message #48278] Tue, 15 January 2008 13:28 Go to next message
Eclipse UserFriend
Originally posted by: Alexander.Igdalov.borland.com

Hi Christian,

EMOF says that Operations may have no owners, i.e. one can define a
global operation. Is it possible to define a global operation in MDT OCL?

Regards,
Alex.

P.S. In my code attempts to use Environment.defineOperation(...) with
'null' for the owner cause NPE later.
Re: Global Operations [message #48311 is a reply to message #48278] Tue, 15 January 2008 13:54 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

This is a multi-part message in MIME format.
--------------090203090505070000050200
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Alex,

Where does it say that? The diagram seems to indicate than an operation
is owned by a class.


There's nothing that allows a package to directly contain an operation,
so I'm not sure what a free floating operation without a container to
mean...


Alexander Igdalov wrote:
> Hi Christian,
>
> EMOF says that Operations may have no owners, i.e. one can define a
> global operation. Is it possible to define a global operation in MDT OCL?
>
> Regards,
> Alex.
>
> P.S. In my code attempts to use Environment.defineOperation(...) with
> 'null' for the owner cause NPE later.


--------------090203090505070000050200
Content-Type: multipart/related;
boundary="------------000400090008050004080200"


--------------000400090008050004080200
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Alex,<br>
<br>
Where does it say that?&nbsp; The diagram seems to indicate than an
operation is owned by a class.<br>
<br>
<blockquote><img src="cid:part1.07070904.02010603@ca.ibm.com" alt=""><br>
</blockquote>
There's nothing that allows a package to directly contain an operation,
so I'm not sure what a free floating operation without a container to
mean...<br>
<br>
<br>
Alexander Igdalov wrote:
<blockquote cite="mid:fmicdv$d3l$1@build.eclipse.org" type="cite">Hi
Christian,
<br>
<br>
EMOF says that Operations may have no owners, i.e. one can define a
global operation. Is it possible to define a global operation in MDT
OCL?
<br>
<br>
Regards,
<br>
Alex.
<br>
<br>
P.S. In my code attempts to use Environment.defineOperation(...) with
'null' for the owner cause NPE later.
<br>
</blockquote>
<br>
</body>
</html>

--------------000400090008050004080200
Content-Type: image/jpeg;
name="moz-screenshot-1.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.07070904.02010603@ca.ibm.com>
Content-Disposition: inline;
filename="moz-screenshot-1.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SERATGCgaGBYW GDEjJR0oOjM9
PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgV GC8aGi9jQjhC
Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj Y2NjY2P/wAAR
CAIkAngDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0CiiigAoorPOtWe51Vbt9 jshMdnM65UkE
AhcHBBHFAGhRWf8A2za/88r7/wAAJ/8A4ij+2bX/AJ5X3/gBP/8AEUAaFFZ/ 9s2v/PK+/wDA
Cf8A+Io/tm1/55X3/gBP/wDEUAaFFZ/9s2v/ADyvv/ACf/4ij+2bX/nlff8A gBP/APEUAaFF
Z/8AbNr/AM8r7/wAn/8AiKP7Ztf+eV9/4AT/APxFAGhRWf8A2za/88r7/wAA J/8A4ij+2bX/
AJ5X3/gBP/8AEUAaFFZ/9s2v/PK+/wDACf8A+Io/tm1/55X3/gBP/wDEUAaF Z+if8eMn/X3c
/wDo96P7Ztf+eV9/4AT/APxFU9L1KG3tXSWC+VjcTuB9hmPDSswP3PQigDco rP8A7Ztf+eV9
/wCAE/8A8RR/bNr/AM8r7/wAn/8AiKANCis/+2bX/nlff+AE/wD8RR/bNr/z yvv/AAAn/wDi
KANCis/+2bX/AJ5X3/gBP/8AEUf2za/88r7/AMAJ/wD4igDQorP/ALZtf+eV 9/4AT/8AxFH9
s2v/ADyvv/ACf/4igDQorP8A7Ztf+eV9/wCAE/8A8RR/bNr/AM8r7/wAn/8A iKANCis/+2bX
/nlff+AE/wD8RR/bNr/zyvv/AAAn/wDiKANCis8a1Z7kVlu03uqAyWcyLliA ASVwMkgc1oUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGf4g/5F 7U/+vSX/ANAN
O1G9is5LXzZJUWSQj5ApBwjMd2ecYHbnOKb4g/5F7U/+vSX/ANANM1e1nuLn TnhiWUQzs7hm
AGPLYc/iQOhoArahrMo0i8mgtrq2dbZ5YZpEUq2BweCcduGx/Oi+N3ptgL0a nPOwKYhmSLbI
SQNo2qDk545/OqN5pd3LZ3MNhZXFmj27o0Dzq0chK4UINxC845+Xirl1ocVq Le+0qyt4723x
lERVEq/xKewPoex9s0AXf7Yg3g+VMLcyeULkgeXvztx1z14zjHvTJ9dtoAZX im+yLJ5T3fy+
WrZ2887sZ4zjFZkGiypBHZta3LbXB8171/J27s/cD/ex2xjPeotQ0q/u7G4h Nm73hnEguXmB
QqHBGwbsg7QBjC9+aANC41ppJdP+zRzRw3NwqrKyrtmQqx45JHQHkD2qyHud RublIbmS0ht5
PL3RqhaRsAn7wIA5x0zxVL7PqLppVs1ntFnMhlm3rtYKpGVGc/mB+NXQlzp1 zcPDbSXcNxJ5
m2NlDRtgA/eIBHGeueaAK41prK9On3qvNcGRViaFPvqwYqSM8H5GH4Z47F1r LNFGYI5opY7t
IZ4HVS+CM46kcjGCDUT6ZeTaxa6jLEof7QCyK4PlxLG4XJ7kls8evtmnz6fd PqcsyxZja8gl
B3D7qphj19aANBdTgeGykQOwvCBGAvIypbJ9MAHNWi7CVUEbFSCS4IwPY855 +nasPSbVl1u7
XINtZMwhwxODJh2BHqP5NW4XYSqgjYqQSXBGB7HnPP07UAZviC7a0gtSLz7G klysck3y/KpD
HqwIHQVWtdViiu5Auqpf2ccDSzTFoyYiCMD5AM5Ge3b3q5rUU8i2clvA85gu VkZEZQdoDDjc
QO471R1LT7nWmD/ZWsmjidFaYoWcnBA+Qn5cj1/CgDQTVovM2XMM1plGkQzA AOq9SCCccc4O
D7VR1LXTHYF44ri1eUKbeSVFxJyCQBkkHGeGApNTsLrXfLimt2s44klBZ3Vi zMhQYCk/L8xP
OD04qHVrTU9UsreAWXkvbMHYs6ESHaVwnOf4icnHSgDavL5LWSOJYpJ55ASk MW3cQMZPzEAA
ZHU1WXXIZSyWttcXM0efNijChouSPm3MB1B6Zz9Kj1aweW/hvFinmRImiaO3 nML8kEEEMoI4
5BNZ9rpVxb3UzzafLNHPlkT7WXWNuQfM3tySAvIz3H1ANRdct5TCtpDcXTTQ CeMRqBlM46sQ
B+NXLS7ivLVbmEko2eo5BBwRj1BBFY/h/TLuxa0FxFtEVl5LEMD8wfP8uava HazWumtDOpjk
M0zDBBwGkYg/kRQA9NWtndUEV6CxAG6ymA/ElMCq2vXt1byWNvapMDczbGki EZYAKTgbzjPH
cYwD3xVlLC5V1Y6veuAQSrJDg+xxHmk1K2mnu9NeJNywXJeQ5A2r5bjP5kUA LcaktvI8SW89
y0KgytGF+QEZyckZ45wM1Uh1lDeX8zzbrGK1hnj2rnht5J4GTnAqO/srma8v PMtHvFmTbb5l
AijG3kMpPrzkKah0bS7u2gmW6s0cNYW8PlO64dlDBlOM+o/OgDQGskzGD+zb 37QFDmL93kIc
/MTvxjIIxnPtV61uY7u2SeEko4yMjB+hB6GuWXSbiPV2vYrDUktXh8trZb0K +8EkMCJcbeSM
Z4zwK6LSbT7Fp6QlFRsszKrs4BJJPLEk9etAF2iiigAooooAKz9E/wCPGT/r 7uf/AEe9aFZ+
if8AHjJ/193P/o96ANCiiigAooooAKKKKACiiigAooooAKpTarZwytG0jsyH D+XE8gjP+0VB
C9e+Ku1l+HNv9jxjjzN7+b/103ndn8c0AXLa8t7p5Ut5RIYiA+OgyoYc9+CD xViuVtZ7e1TX
ns5BFEJ40jMKhuSiLhQSBkk4HOKcTqMeoyWNqZLdp7J5EE9yZisgZQDk529e 2R7eoB1FFcow
uFvorVIdSUbHeS2e9O6UDADpJuzxnldy9enFbukTpPYgo9wxRmRhcY8xSD90 4646Z5+poAvU
UUUAFFFFABRRRQAUUUUAFFFFAGfrf/HjH/1923/o9Kauo3E9xKLSyE0EMvlS OZQrEjGdq4wQ
M9yOhp2t/wDHjH/1923/AKPSoobO+sprhLT7MYJ5mm3SFg0ZblhtA+bnJ6jr QBWt7+4ivdTR
Uec/awib3KxxDylPLc7Rn0HU1NDr0T2F7cPGu6ycxyiOQOpOAeGwOOecgYwa gm0W5N/PdBba
4VrnzlgmYhT+7VQSdpwwKkjg9asWGnXlr/aLlrYyXUgdFCnYAFC7SPw6/p2o Agh1vUJr2e2X
TrVmhVW+S+BMgIz8gKDPQ9cDI61ug5AJBHse1cs/h65lvpp203SY0lXaEjdh sbj95nZy2c9N
vXrXTW8Zht4omdpCiBS7dWwOpoAkooooAKKKguby2s1Vrq4hgDHCmVwuT6DN AE9FRieFmZRK
hZVDMAwyAc4J9uD+VMN5aiOOQ3MISXHlsXGHz0we9AE9FQQ3ltcRNLBcQyxr nc6OGAx6kUW9
3bXURltriKaMdXjcMB+IoAnorOh1i3udShtbV4p45IXk86OQMAVKjHH+969q bZ6wl1qVxa+W
qJHnypN+fM2nD8Y4wcDqaANOisNPFWmOkLCeICW4aAZlXjGfmPPTgf8AfQ9a vtqdqbmK3hu7
R5XYgxmcBsDIOBzk5GMcd/SgC7RWfbavbTTyQSyxQzLM0SRtKN0m3uB+NW/t EOJT50eIf9Yd
w+TjPPpxzQBLRVC21ezur+4tIp4zJAoY4kByCOSB6Dj86sW13bXYY2txFOEO 1jG4bafQ4oAr
eIP+Re1P/r0l/wDQDWhWf4g/5F7U/wDr0l/9ANGpTzC4tLSCTymuXYNKACUV VJOMgjPTr70A
XVljd3RXVnTAZQclc8jPpRLLHDE0szrHGgyzOcAD1JrlnvLjTb++iaZ5JZ7u GITLDvYL5W4n
ao5bCkcDHfFM1Oe5urWS2M16YEntmS4ltvKZy0oBUhkAOOCMD65oA6yKWOaJ ZYXWSNxlWQ5B
HqDT65vVL+8gjvngupy1lHuURRKyNhcnzGKgZ65CkYHvV6zvp55b8s2Fjije NcD5SyZP159a
ANNZY3DlJEYISrEEHaR1B9KcCGAIIIPIIridIuJ7/wCH2q3E8zedIJ3d1Cjd 8uSMYxz0/liu
u09GTT4EaV5G8sfOwGensAP0oAsVXgv7K6leK3u4JpE+8kcgYr9QDTL2ze60 qazFw2+SIp5r
gZJx1IGB+WKy5J7hJbOLWNOjixIEgurWXcschBA4IBGenQjnmgDatYLe3gEd pFFFECcLEoVR
zzwPenpLHIzqkis0Z2uFOSpxnB9OCK5mzlurLwxZmC6cvNdJHudVO0NJtIGA PrzSx3uojVRY
fb3ZTetD5jxpu2eRv7KBnPtQB1FFYJ1O5trPU0aTzprSZYYpHUfNvCbSwXA4 L84x0qVXvbXX
rS1kvWngmgldg6IDuUr6Acc/45oA2aKztTu7iC80+3tjEv2qVkZpELYAQtwA Rzxiqv8Aal4b
Z9QVYfsazGPy2Uhyok2F92cepxj8aANuiis2+1J7a9tLeOHKzTiJ3bgDKs3H r0oA0qKzoLu5
OuXNlKYmiSFJoyqFWG5mGDyc/d68da0aACiiigAooooAKKKKACiiigAooooA Kz9E/wCPGT/r
7uf/AEe9aFYelx6k1vMbe7tI4vtdxtWS2Z2H75+pEgz+VAG5RWf5Osf8/wBY /wDgG/8A8do8
nWP+f6x/8A3/APjtAGhRWf5Osf8AP9Y/+Ab/APx2jydY/wCf6x/8A3/+O0Aa FFZ/k6x/z/WP
/gG//wAdo8nWP+f6x/8AAN//AI7QBoUVn+TrH/P9Y/8AgG//AMdo8nWP+f6x /wDAN/8A47QB
oUVn+TrH/P8AWP8A4Bv/APHaPJ1j/n+sf/AN/wD47QBoVSm0qzmmaVo3VnOX 8uV0Dn/aCkBu
nfNM8nWP+f6x/wDAN/8A47R5Osf8/wBY/wDgG/8A8doAkGl2SxzxrbqEuNvm KMgHAAGPTAA6
Y6VGuiaeshlMBkkMZjLyyM7MpIOCWJJ6DGenajydY/5/rH/wDf8A+O0eTrH/ AD/WP/gG/wD8
doAT+w7HIbFwXAwJDdSl1HoG3ZA9gcVbtraG0hEUCBEBJx1yTyST3J9aq+Tr H/P9Y/8AgG//
AMdo8nWP+f6x/wDAN/8A47QBoUVn+TrH/P8AWP8A4Bv/APHaPJ1j/n+sf/AN /wD47QBoUVn+
TrH/AD/WP/gG/wD8do8nWP8An+sf/AN//jtAGhRWf5Osf8/1j/4Bv/8AHaPJ 1j/n+sf/AADf
/wCO0AaFFZ/k6x/z/WP/AIBv/wDHaPJ1j/n+sf8AwDf/AOO0AaFFZ/k6x/z/ AFj/AOAb/wDx
2jydY/5/rH/wDf8A+O0AGt/8eMf/AF923/o9Kv1ga2b+1sFnvLu1e3iuIHdY rR1YgSp0PmH+
RrifE3jS61YvbWe62s+hH8cn1PYe386APTbTULO9eRLW5imaI4cIwJU1Zrwa 0u7ixuFntZni
lU8MpxXofhvx0t6VtdShcT4wJIYy4f8A4CoJB+n6UAdtRWf/AGza/wDPK+/8 AJ//AIij+2bX
/nlff+AE/wD8RQBoUVn/ANs2v/PK+/8AACf/AOIo/tm1/wCeV9/4AT//ABFA GhWJNNDZeILi
fUJEihkt40geUgKSC25RnvyvHerf9s2v/PK+/wDACf8A+Io/tm1/55X3/gBP /wDEUAc7Ektr
Ba/u3RdQ8y0RNuGVDITH9AELn2qG4iMksdq6nydOu4rZR0Vg8wYDHfCBPzrq P7Ztf+eV9/4A
T/8AxFH9s2v/ADyvv/ACf/4igDE1tJm1i8WDhfKtZJRtLDaJHySoIyMAZGeg qK7El6bqeK7g
vI/JjE5tLYhHQSAkZ3tuO0PwB0NdB/bNr/zyvv8AwAn/APiKP7Ztf+eV9/4A T/8AxFAGJfan
Zpr4vLExzOunyKGjxh23oEXPTOTjHbNSSWd9pFrY3U91BLFYt+82QFWKtw5L FyO+48DpWv8A
2za/88r7/wAAJ/8A4ij+2bX/AJ5X3/gBP/8AEUAYEUsUNtatLNHGLXVpWmLN jywxlwT6ZyMZ
9aW1VRDppAAJ1mck+v8Arf8AAVvf2za/88r7/wAAJ/8A4ij+2bX/AJ5X3/gB P/8AEUAYc01p
/Z+uWi7RfTzSiOPGHlfHylfXBxyOmKWa4SytvEEN24W4lUuiZ+aQeSoyo78g /Stv+2bX/nlf
f+AE/wD8RR/bNr/zyvv/AAAn/wDiKAOfuldrTUII2XzZYLaQRldxeMAb8L1Y YyCB9O9aGnO1
1rcc6X1vcrHAyObSDag5XCsS7cjHAx61of2za/8APK+/8AJ//iKP7Ztf+eV9 /wCAE/8A8RQA
eIP+Re1P/r0l/wDQDU95Zx3ipuZ45Im3xypjchwRkZBHQnqMVla5q1tJoWoR rHeAtbSAFrKZ
Ryp6krgfU1sTTeVJCuYh5j7fnk2k8E/KMfMeOnHGT2oAopoduonLTXDyzSJK 0rMAwdRgMMAA
dOnTtjHFK2iwyI/nzTzSu8btM5UMdjblHAAAz6Duan/tXTzHPIl7A626lpdk gYoB6gdOlQNq
N5HGLmXT8Wpwfll3SqD3KYxx3wxNABcaJDObpTcXCQXeTNCjAKxIwTnGRwB0 OPah9FiZiUub
mIPEsMoRgPNUDAzxkHnquKufbLU3X2X7TD9oxnyt4349cdaaNQsjKIheW5kb OEEq5ODg8Z7E
GgCppmhWmmaTJpsTSyQSbtxkYbvmGDyAKu2sBtrVIDNJLsGBJJt3H8gB+lIl 9ZyReal1A0e7
ZvWQEbvTPr7Ui6hZPbG5S8t2t16yiVSo/HOKAFmtEuLI2tyzzKygMxIDE+vy 4wc88YqGPTsS
K095cXKowZEl2YUjoflUE/iTUzX1mlqLprqBbc9JjIAh/HpTRfQu8Zjntmhe NpA4mGSBjkDo
Rzyc8cetAEA0eH7MtuZpjElws6AlflIbcFHHTPrk+9A0a3Gofbd8vmeeZ8ZG Nxj8vHTpj9aS
z13TrqzjuftdvEkjlAHlUfMO3XrjBx71oggjIOQaAM+fTIxDqBSNp2vCGeNn 2gkKF4IHHA/O
qmn2Fy+rRX1wLpRDC8YF08ZY7ip48vjAweTyc1sCaN1cxur7CQ205wR2PvWP Brd4+lx6nNYQ
paOgkby7kvIqn/Z2AE+2aAJdW/5DOif9d5P/AEU9UTHMNIk0c205meZlDCJt nltKTu39Punp
nPtWrqA02W5tkvJ0SdG3wL55jfOMHGCCeDirVzdW9pH5l1PFAnTdI4UfmaAH CZT5vEn7o4b9
23PGeOPm/DNZ2rI88+kvFHIyrdh2wh+VfLfk+nUdasNqCjU7e0VQ6zwvKJA3 AClR+Od36VNb
3lrdFxbXMMxQ4YRuG2n0OOlAFCL/AJGy6/68ov8A0OStas+L+zINVlKXEf26 ZQGRrgs2ASQA
pPA5PQVONQsmmSEXluZXJCoJV3MRwQBnnGDQBZooooAKKyX123XV5bESWyrB GHnkkuApXOeA
Mc4xzkjGRU91qsEWkXGo2zx3UcMbP+7kBDYHTIzQBfoqqNQtPPjt2uoFuHAI hMg3nj060/7Z
a/avsv2mH7RjPlbxvx6460AT0UUUAFFFFABWCLlbPwzf3DIzrHNdMVSQxk/v n6MOR9RW9WCL
OTUPDN/aQlVkmmukUucAEzP1oAtz6nMNQaztbaOV441kcST+WSDnAUYOTweu B71n3N7c/wBp
NfrJItnazR28kWTg7h87HsdpZOe21qu6tY3F6PLW0sLhNvyNcFg0Tf3hgHP4 FfrVez8LWC6O
lreWtvNdNGRLcGMM5c9SGIz1PB60ASC6vk1nUUgg+0RxiI4ebaF+XkKMHn24 HvSDXZLv/kF2
sVyfJWXZLceUzBhkBRtOenfApLSz1m1eVy1nK8yRqxLsNrKuC33efpx9abLo ki2EFgltZXMM
UapHLOSskZAxuGAcnvwV/rQBBpOtX50+0+0WyyXN3cTRoDNjbtLnDELwBtI4 z0B9qtTa7LbB
Jbi0jjhMqxMGmIlDFtuQhUZXPfIyOcVDpuh3loumxSywyLZXEshkBIaQOH5x jg5bpk9OvamT
aFeSWc1qq2YLziY3JJ8yXDhwGG3joBnJ6dKAL66ndXEspsrFZ7eKUwlzOFYs OCQMY2g8Zzng
4B7u8PXF1daTHNeBPMYtgq+7cMnrwMfSmW1nf2MssNr9mNtLM0oeRm3puOWG 0DDc5wdw6+3N
jSbWays/s0wjxGzbGRidykkgkEDB56c/WgC3GZCD5qqp3HG1t2Rng9Bzjt+p rl0uLf8A4mEl
zJqrTR3EoUwm4KKAeANvycen511EZkIPmqqnccbW3ZGeD0HOO36msq1t9Usn uUigs5I5bh5V
drhgQGOeV2Hp9aAEstTup7eCKCOG8uEgjknkEuxPmH8Jwck4PHH1FOh1pr4q mnWwlkEYklWW
TyxHklduQGy2VYY6cdaZZ6VdaUc2LQzeZGqSCZigDDPzDAPr09utMstHutJf zbJoZ5JUCziV
jGC25m3DAbu54+nNABb6mLrWraRXkjhNnM0kTNwrrIgOQOMjkZqxDq8ji2ml tPLtLpgsMnmZ
bkZUsuBjPsT1FQWWhSW91G8kqyIbeZJSMgl5HDkgenXv6VDaeHvJa3j+yabG tuQftSQqZZMD
jgrhTnByCenagC0NbZbi3E9vHFDcyCOPdLiYE9N0ZUY/MkU2LXZHt0unswlq 05ty/m5YNv2A
7ccjPvn2qrDod9HbWVvsskFrPHI8qsxe42nkn5flJ69Wye/erH9jXH9hLY74 vNF152cnbt87
zPTrj9aANa5meCLfHbS3DZxsiKg/X5iB+tR2t1NOzCWwuLYAZDStGQfb5WNS XNsl1F5cjSqu
c5ilaM/mpBqO1sYbRmaJ7hiwwfNuJJB+TMcUAZUdzeLq+ozzwvJHblY4o4Z3 bqBj5NoHOclj
0+nNR6hrMrWt3at5UN0kaSq1tcGQbS4HXCkH8Ks3+kT3KagFeP8A0iWKRVYn DhAuVbjodpHf
g/hVa50W+uppJStnAr2/kiKNiQpEitnO0ZyAewxx160AaFzqcy6i9na20crx xrI/mT+WSDnG
0YOTweuB71FDrbyQQ3j2nl2EzqiyGXLgs21SVAxtJxzuPXpT9YsJdQzE1nY3 UDLgGclWjPqM
Kc/+O1naf4ZNpFbW722mt5LAm8EC+a4BzjaVIB7btxP40AdNRRRQAUUUUAZ+ t/8AHjH/ANfd
t/6PSszXvBunaxulRfst0efMjHDH/aHf69a09b/48Y/+vu2/9HpVO41+WJbu 4jsQ9lZymKWU
y4ckfeKrjkD3IoA5TTfhxcNct/aVyiQKeBCcs/5jiu50vR7DSYfLsbZIs/eb qzfU9TV0EEAg
5BrM1PWotPnggEZmlkljjZVOBGHbAJP54HU4/GgDUooooAKKKKACobq6hs4D NcPtQEDgEkkn
AAA5JJ7CpqxfE00kNnEyRklJPNDdtyfMF9csRgdvfpkA2QcgEZ59Rilrn3El la2F0l3PNLcM
iS75SyyblJyF6Ljr8oFV7IzLoOlSfaroy35hSaVpmYqME8ZOFJwFyOefXmgD oluoWu3tQ/75
EEjLg8KSQDnp2NTVxd2ZbTxmLGA3c8U1qpdY5v3uFL/KHZgcc5659KvTXF7H o+ppunt/KdBA
ZJVeWMHbwSGb36nJBoA6aorm4itbaW4nbZFEpd2wTgDk9K5GCS8WzvLuFNSe ZJ5PLke8XyVC
uRtIeTpxzle5x2qzqayXuh63dTzzo8XnRpGJCFVVGMFRwc9cnJ54oA6NbyBr hYAx8xk8xQVI
DL7HGD247Zqesic+Xd6RKqmR8NHsXrgqMtzxxgZ/TJ4rXoAKKK5iXzr+LXLv 7XcxPaSPHbiK
VlVNiA5Kjhsk85BoA6eiq2nXBu9Otbk9ZoUkP4gGs67t9WbxBBLBO62CgCRc r364HcfKOvPz
nFAFrxB/yL2p/wDXpL/6AaqeIlR7nS1k3bDcOG2gk48p84x3q34g/wCRe1P/ AK9Jf/QDWhQB
yMoa6gNhZz2epYt2RHVAssGACFcjgBioHRefpW2ddsjHiN/MuiB/oq/60E9i vUfU8Vp0UAcr
HJENBjsAR/aolDGIDEnmeZzJjrjqd3TFQmKNvD4DIpD6v83HX/SMfy4rsKKA OR1tol1i7E65
h32RdcZz+8YdPyp9xPaS+KbXUUZJNPSIq9wpzEsvO0k9OBkZ7ZxmuivbOO9j jSVmAjlSUbT3
VgR+GRVmgDl5fs0l1PfLeLaQLOHtrhlDQs/llWPPGDnrkZI4NJplw9x4itma OAARThZbcYSb
mI7x+JI6np1rqaKAOJ0qdraeTffWdsBGIQbmIuMh3LIPnXDcgkdSCK6XQYmh 0W2jYscL8u6P
yyFycDbk4wMDrWjRQBF5kckcnlur7cq205wR2PvXF2Y06TwpAttqDtqQtw0U CXrMfNAyo8rc
R1A4xiu5ooA5rzre3h1WDVAv2i4diI25aZdgwEH8WOmB0NPt3NjeWM+sSKm3 T1j86XhVkyN4
LHgE/L9cGuiooA4e5hnlmkW1SQCW3vDbqBg7C6dBx15x9a1bF/tOr2TR3trP 5Ebqy2tqV2Lg
Da7GQ7eccYzxXR0UAcVdzq2nRotxHHIt9HI1pEmWiPmgkyEknPU547duthY0 Hhe6cKNw1Bnz
3yLjg11tFAFXUYPtNqY/sltd5IPlXBwh9/ut/KqmmWH2W4Z/7I02zyhHmWr5 Y8jj/Vrx+PYV
q0UAcnqswh8RzMxjjT/Rszy52Q8TYYjIB54GeMke1QzzCW08UFbgzo1sjK+0 ANlGGVx1HHX2
612VFAHLTTRWjulvc21y0kokbT7iP94zccp36jIOCPfioIlnNmljLe263IuA 7QJbMZ9/mZ35
8wcf7WMY/KuwooAKKKKACiiigArP0T/jxk/6+7n/ANHvWhWHpdlPLbzOmp3c Cm7uMRxrEVH7
5+m5Cf1oA3KKz/7Ouv8AoM33/fEH/wAbo/s66/6DN9/3xB/8boA0KKz/AOzr r/oM33/fEH/x
uj+zrr/oM33/AHxB/wDG6ANCis/+zrr/AKDN9/3xB/8AG6P7Ouv+gzff98Qf /G6ANCis/wDs
66/6DN9/3xB/8bo/s66/6DN9/wB8Qf8AxugDQorP/s66/wCgzff98Qf/ABuj +zrr/oM33/fE
H/xugDQorP8A7Ouv+gzff98Qf/G6P7Ouv+gzff8AfEH/AMboA0KKz/7Ouv8A oM33/fEH/wAb
o/s66/6DN9/3xB/8boA0KKz/AOzrr/oM33/fEH/xuj+zrr/oM33/AHxB/wDG 6ANCis/+zrr/
AKDN9/3xB/8AG6P7Ouv+gzff98Qf/G6ANCis/wDs66/6DN9/3xB/8bo/s66/ 6DN9/wB8Qf8A
xugDQorP/s66/wCgzff98Qf/ABuj+zrr/oM33/fEH/xugDQorP8A7Ouv+gzf f98Qf/G6P7Ou
v+gzff8AfEH/AMboA0KKz/7Ouv8AoM33/fEH/wAbo/s66/6DN9/3xB/8boAN b/48Y/8Ar7tv
/R6Vzk1xFbaLrelyP/pstxMIoT9+QSHKkDuOa19Usp4reF31O7nUXdvmORYg p/fJ12oD+tbl
AFSK4trW2Mct1CDaoomLSAbOOC3pn3rP8UAfZ7AjHOoW/wD6FW3RQAUUUUAF FFFABVLVbWW7
tUWDZ5kcqSqJCQrbWBwSM4z64NXaKAKNvpNnAyukO0quFXzGZY+MHYCcL+AF SDT7QWCWPkg2
yKFVCScAdOeuRgc1aooAzhoenhmfyXMjhQZGmcvxnB3E5BGTznNTDTbQWj2v lExOdz5diWPH
JbOSeByTVuigClJpVnJc/aHibeWDFRIwRiOhKZ2k+5FNutHsLxpTPCW84YkC yMofjGSAQCcd
zyKv0UAUHs5H1S2m+RYLaNlQBiWYtgcjHAAHqetX6KKACsG40vUU/tOGya28 jUGLbpXYNEWU
KxAAO7pkcit6igCpFHPa24t7eKJo4YlSItKQWIGMH5Tge/P0q0M7RuAB7gHN LRQBn+IP+Re1
P/r0l/8AQDU13dJbS26yTpEJXK4ZCd2FJwCD8vTOT6VD4g/5F7U/+vSX/wBA NQa7A81xpuIH
mRJ2MioM/L5TjnsM5xz60AJfa/bx6fdy2jEzxQNLGs0ToHAHUZA3DpyD3FOl utQsbb7ZeTWs
1uoBkWOFo2VT1bJdgcemBWPfJdNpt1a6f9vmtzayK0NzAwMZ24UIxALHPGMt WleTDVdLfTre
G6DzoI2aW3eNUB4JywGeM8CgDQGqWZufIEp3btm7Y2zd/d34259s5qrJr1j5 sax3JH7xkYm2
kYMV3blDAYDcZ78DpyDWTDp06WUemyS6k7pKP3QjQRYD53+YYz9cZ3ZqS3tL gQaeGt5Bt1Wa
RwUPCnzcMfbkc+4oA6A3tsPs370H7UcQ4BO/5S38gTUSarZyXAgSUlixQNsb YWHVQ+NpPtnN
ZWj2lyupvDPFJHb6cjRW7kYWQO2QR67VCjPuaqWun3IsrTTppdSeWGRC0flo sQ2uDvEnlnjj
ON2T0NAGpqevQ28X+isJJfPSLLRsUJLhWAboSBnjPGK1pZFiUMwYgkD5ULHk 46D+dcvOk6aF
b6Z9kuXuIbiLcwiJUgSg79wGDkc+ozzXUSyLEoZgxBIHyoWPJx0H86AKWtXk 9lZo9t5fmSTx
xAyKWA3MFzgEZ6+tRG9urG7jj1Ca2khdGcyRxmPy8Y6gs2Qc46jmmeJ4fO0x FMDzoLmFnRYz
JlA4LfKAcjGayNS02C6ls5dF01ofs86SzgWzW4kRSDtwwG455H0oA6KHVbOZ JXEpjEK75BMj
RlV/vEMAccHmn2uoW13I0cTvvAzteNkJHqNwGR7jisPVYbjV5zPZ284jhtyC JYzEZW3o2wBs
HohGTx81aAdr/VrWaKCaOO3WTzHljaPkgAKM4z65HHHWgAtNaiawt5rskTTb jshiZzgEjOAC
QOOp4q1JqlnHFFJ5pkEy7oxCjSM68cgKCSORz71zdjaXVk6XM0l/bxyQCMfZ oBIwZXc4ZSjE
AhgQenr2q1b201m1qsovY4djndGgkkLM5O1iqfKOc4GBnvxQBtNqlktpHdNc KIZH2K+Dy2SM
exyCPrUlpewXgfyWbKHDK6MjL9VYAiuesLO4TSrSN7adWTUzIVkBZlXexBJ5 z1HNatrFIviT
UJTGwjeCEK5XhiC+QD7ZH50ATzavplvK0U+o2kUi8MjzqpH1BNV9Y1cWWnRX FqRKZ5ESN1Rp
U+Ygbvl68HgZ56CrE0WptKxgu7RI/wCFXtWYj6kSDP5VX1mG4ksbRSPOlW7t 2cxoQOJFJOMn
A79aAJf7VtoQsdxMTIABJIsDiNWx3PITr0JzzRZ37TXGpLPsSO0m2Buny7FY k/mawNYhuZdN
1aAwXr3EjOY4IIisRXPDbgAGJHJBJJPGK07G3b/idi4tZJIppeI9uDKvlKCB nHuOtAFv+3LD
dt3zbyMqgt5Nzj1UbcsPcZFXYJo7iFZYXDo3QiuTMdxDq8M1tcawtmsJikY2 u94u4A3ISwyB
yA3ua39Et2t7Jt4mBkleT98V3HJzkhQAM9cds0AaNFFFABRRRQAUUUUAFZ+i f8eMn/X3c/8A
o960Kz9E/wCPGT/r7uf/AEe9AGhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQBn63/AMeMf/X3bf8Ao9K0Kz9b/wCPGP8A6+7b /wBHpWhQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAZ/iD/kXtT/ AOvSX/0A1oVn
+IP+Re1P/r0l/wDQDUesXTW0+n7LeOdnmYAMuWBEbn5T2JxjPoTQBqUVy91q U19oeph7mykH
2KRnhRWjlhOw4BUk569fl6dPR2i6bY3tzqT3dlbzuJkUNLErEDyk4yRQB01F ZmiysTfWxZmW
1uTGhY5O0qrAZ9t2Pwq9iQRyeYyt127Vxgeh5OT70AS0VwtnHBD4VtrhNGeC VYVY6hGkWU9Z
Mht5wMnpzXQ/2jeTx3V1aC3NtbO67GBLTbfvYIIC85HQ9O1AGzRWW9/Pc3Ud tYGJC1uLhpJl
LbVJwo2gjOcHvxjvVGK8Nx4itXmUJJBBcxyAdMq0fI9iOaAOiormrbxOkptZ 2u7BormRUFsj
/vog3AJ+Y5OcZGBj14p8+vTQSBy9syfaVge3RWd0y2MlwdoOCDjHfGc0AdFR XPpq+oGya+Zb
byI7poHjCtuZfN2bg2cAjrjBzjtXQUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRR
QAVn6J/x4yf9fdz/AOj3rQrP0T/jxk/6+7n/ANHvQBoUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAZ+t/8eMf/X3bf+j0rQrP 1v8A48Y/+vu2
/wDR6VoUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FAGf4g/5F7U/
+vSX/wBANPv7A3k1pIsxiNtIZAQoJOUZe/T72e/Sk1yN5dC1CONGd3tpFVVG SxKnAApv9s2v
/PK+/wDACf8A+IoAq3miT6gkgvbyJ28mSKJ47faV3qVJb5ju4PQYFOt9KvrO e4a1vrdUnZXI
ktixBCKvBDj+76VY/tm1/wCeV9/4AT//ABFH9s2v/PK+/wDACf8A+IoAsWdq tpCUVi7Oxd3b
qzHqakCyFXEjKck7dq4wPfk5PvVP+2bX/nlff+AE/wD8RR/bNr/zyvv/AAAn /wDiKAKdvot5
HpSaXNfwPZiLyW2WxWRlxj728gflUz6RIqzwW135NpcEmSPy9zLkYOxs8Z9w etTf2za/88r7
/wAAJ/8A4ij+2bX/AJ5X3/gBP/8AEUAE2nOs8c9jMtvLHF5OHj3oy5yMjIPH OOe5qK20VYL2
K5MxdlSUSBl/1jSFST7fdxipf7Ztf+eV9/4AT/8AxFH9s2v/ADyvv/ACf/4i gCO10u4thDbr
fH7FAR5caoQ+B0Vn3cgfQZ7n1gk0KZ7RLP7cBbRSrJGoh+bht2Gbdz+AH41b /tm1/wCeV9/4
AT//ABFH9s2v/PK+/wDACf8A+IoAiGjY0mWx+0f6yczb9nTMm/GM/hWrWf8A 2za/88r7/wAA
J/8A4ij+2bX/AJ5X3/gBP/8AEUAaFFZ/9s2v/PK+/wDACf8A+Io/tm1/55X3 /gBP/wDEUAaF
FZ/9s2v/ADyvv/ACf/4ij+2bX/nlff8AgBP/APEUAaFFZ/8AbNr/AM8r7/wA n/8AiKP7Ztf+
eV9/4AT/APxFAGhRWf8A2za/88r7/wAAJ/8A4ij+2bX/AJ5X3/gBP/8AEUAa FFZ/9s2v/PK+
/wDACf8A+Io/tm1/55X3/gBP/wDEUAaFFZ/9s2v/ADyvv/ACf/4ij+2bX/nl ff8AgBP/APEU
AaFFZ/8AbNr/AM8r7/wAn/8AiKKANCiiigArP0T/AI8ZP+vu5/8AR71oVn6J /wAeMn/X3c/+
j3oA0KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KAM/W/8Ajxj/AOvu2/8AR6VoVn63/wAeMf8A1923/o9K0KACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigArP0T/jxk/6+7n/0e9aFZ+if 8eMn/X3c/wDo
96ANCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiii
gDP1v/jxj/6+7b/0elaFZ+t/8eMf/X3bf+j0rQoAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACs/RP8Ajxk/6+7n/wBHvWhWfon/AB4y f9fdz/6PegDQ
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAz9b
/wCPGP8A6+7b/wBHpWhWfrf/AB4x/wDX3bf+j0rQoAKKKKACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACs/RP+PGT/r7uf/R71oVn6J/x4yf9 fdz/AOj3oA0K
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKAM3Xm
CaejMcKt1bkn/tslT/2laf8APX/x0/4VFrf/AB4x/wDX3bf+j0rQoAqf2laf 89f/AB0/4Uf2
laf89f8Ax0/4VbooAqf2laf89f8Ax0/4Uf2laf8APX/x0/4VbooAqf2laf8A PX/x0/4Uf2la
f89f/HT/AIVbooAqf2laf89f/HT/AIUf2laf89f/AB0/4VbooAqf2laf89f/ AB0/4Uf2laf8
9f8Ax0/4VbooAqf2laf89f8Ax0/4Uf2laf8APX/x0/4VbooAqf2laf8APX/x 0/4VPDNHcRiS
Fw6kkZHqODUlVNO/1U3/AF3l/wDQzQBbooqG6u7azjEl3cRQITtDSuFBPpk/ SgCais/+3dH/
AOgrY/8AgQn+NH9u6P8A9BWx/wDAhP8AGgDQorP/ALd0f/oK2P8A4EJ/jR/b uj/9BWx/8CE/
xoA0KKz/AO3dH/6Ctj/4EJ/jR/buj/8AQVsf/AhP8aANCis/+3dH/wCgrY/+ BCf40f27o/8A
0FbH/wACE/xoA0KKz/7d0f8A6Ctj/wCBCf40f27o/wD0FbH/AMCE/wAaANCi s/8At3R/+grY
/wDgQn+NH9u6P/0FbH/wIT/GgDQorP8A7d0f/oK2P/gQn+NH9u6P/wBBWx/8 CE/xoA0KKz/7
d0f/AKCtj/4EJ/jR/buj/wDQVsf/AAIT/GgDQorP/t3R/wDoK2P/AIEJ/jR/ buj/APQVsf8A
wIT/ABoA0KKz/wC3dH/6Ctj/AOBCf40f27o//QVsf/AhP8aANCis/wDt3R/+ grY/+BCf41Yt
L+zvd/2O7guNmN3lSB9uemcfQ0AWKKhvLlLOynupAxSCNpGC9SAMnH5VV/tG 6/6A19/33B/8
coA0KKz/AO0br/oDX3/fcH/xyj+0br/oDX3/AH3B/wDHKANCis/+0br/AKA1 9/33B/8AHKP7
Ruv+gNff99wf/HKANCis/wDtG6/6A19/33B/8co/tG6/6A19/wB9wf8AxygD QorP/tG6/wCg
Nff99wf/AByigDQooooAKz9E/wCPGT/r7uf/AEe9aFZ+if8AHjJ/193P/o96 ANCiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD P1v/AI8Y/wDr
7tv/AEelaFZ+t/8AHjH/ANfdt/6PStCgAooooAKKKKACiiigAooooAKKKKAC iiigAqpp3+qm
/wCu8v8A6Gat1U07/VTf9d5f/QzQBbrP1L/j+0n/AK+2/wDREtaFZ+pf8f2k /wDX23/oiWgD
QooooAKKK5rRJI01DUdQlIjW53yEn+7G7ID+QH50AdLRXL6dczS+KpD5Sh3T bKWXJjUANtBB
/wBuP8d34Trdtqer2qkL5cM08kbBTjCDy8nnn5mb8qAOhorm9KmunjsfPe3u fttxJcbjERsQ
AkEfMe+zHoD361ONT1D7L9uZLdbYXJj8vDF3j8zYGBzgHvjBz7UAbtFc9HPm WeTEUv23URCo
kXI2oAD36jYxHvVwXt9debPYpC0EMrR+WynfNtOGw2QF5yBkHOO1AGrRXMzT Xd7aWAtzBbte
XjMdsRIZFLMpbDDOQi59c9qvjU7g2xQrF9ra6eBBg7cBj8xGc8JyeaANeiuT 0uCC6tWurjw8
189xK8onMdudysxK43ODjGOtWBewaU2o3YhihQTRWcCkqiDCjqegALNn6GgD pKK5xvEDrFdp
Fc2F7MkQeF7dvl3M20Kw3HuR359qsyahex3tzbPJaIIrcXDSsjbYhyMEbvm+ 6TnI4oA2qK5i
w8T/AGiOynmudPzcukZtIn3SoWOAc5+mRt49eKtf2tfG3gu/LgEEl15Kx7SX kQvtVgc4HHPQ
59qAN2isfQftEst/dTXCSxy3DKgCFdoQ7OMsePl/PJ71sUAFZ8P/ACMN7/16 Qf8Aoc1aFZ8P
/Iw3v/XpB/6HNQAeIP8AkXtT/wCvSX/0A1oVn+IP+Re1P/r0l/8AQDWhQAUU UUAZt/qzWMgV
9Ou5EZ1jR4zHhmboAC4P5irltM80W+S3lt2zjZIVJ+vykj9aoal++1nSrbd9 15Lhh6hV2j9X
H5Vka5dtYtrFra5+0XKCYY5Krs2s2P8AgAH1YUAdZRXO2tjBZTaLFYgeaqfv pB954gh+8fTc
Vx+lZ7rd3FpLdtFZG7luWSC5edzJE27aqqoQkYxyAeeSe9AHYsQqlicADJor lr9o5tI1K9n2
reiaSC3ZvvRkNtVV9M4BPrmigDqqKKKACs/RP+PGT/r7uf8A0e9aFZ+if8eM n/X3c/8Ao96A
NCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigDP
1v8A48Y/+vu2/wDR6VoVn63/AMeMf/X3bf8Ao9K0KACiiigAooooAKKKKACi iigAooooAKKK
KACqmnf6qb/rvL/6Gat1T0whoZiCCPtEoyPZyKALlZ+pf8f2k/8AX23/AKIl rQrP1L/j+0n/
AK+2/wDREtAGhRRRQA1wWRgrbWIwDjpWZb6KsKWMfnlo7aHynBXmXlTnOeOV 6c5zWrRQBjW+
jT22oT3kV6oa4LeaDDnqcjad3BAwOc52jgU+w0Y2eN1yZCLUQA7MHOSWfr3J HHtWtRQBjRab
Jp1vFO0gnksrN4Y0ihK7uhyBk8/KBSWOjyJY2VvcXG+3twj+UU+ZnHPzNnkB ucYHTqa2qKAM
y10hYPsOZQ/2UyOfkxvd85brx1b86aNJmQPDDemK1MjSqioQ4ZmLYLbuVyTx jnpnFatFAGWm
l/ZRpxhmwlhEYypjLb1wASMHIPy+/U8VWsdOee61G+YvF9pytsJEwYwVAZtp wQSVBwewFbtF
AGTZWGp2VrBbR3tl5UKKig2b5wBjr5vWnLpGyzEa3B89bhrlJSmQHLE8jPIw 2Ov5VqUUAZba
VNMyPc3plYTJK6hMJhM4VVydvODnk8fTDp9LaUamRcbJL2MRq4TmJQuB355L Ht1rSooAyotL
u0gSB9QJjhj2Q7I9hztKgvhvmx6cCnrpKJFpsKSERWBBC4++QhUZ/PNaVFAF TTLR7G0Fu8qy
hWYqwTacE555OTyeePpVuiigArPh/wCRhvf+vSD/ANDmrQrPh/5GG9/69IP/ AEOagA8Qf8i9
qf8A16S/+gGtCs/xB/yL2p/9ekv/AKAa0KACiiigBnlp5ol2L5gG0NjnHpn0 rMn0ZrlppZrh
TcSmNWdY8ARI+7YASevOTnv07VrUUARRW0EDyPDDHG0h3OUUAsfU4601bO2W 6N0tvCLgjBlC
DeR6Z61PRQBXextJJjM9rA0rAAuYwWODkc/WirFFABRRRQAVn6J/x4yf9fdz /wCj3rQrP0T/
AI8ZP+vu5/8AR70AaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFAGfrf8Ax4x/9fdt/wCj0ou9VS3uzax21xdTLH5rrAFOxc4B OSOuDwMmjW/+
PGP/AK+7b/0elVLR1g8U6t5zhN8EMiljj5BuBP0BoA1LO6ivbSK6t23RSqGU 4xxUOqanbaTa
/aLouEzgbVJ5+vQfjVPwkrL4as92fmDMM/3S5I/QitG8s7e+iEV1EJYwwba3 TI/nQBJBMlxC
k0RJRxlSylSR9DzUlMhiSCFIoxhI1CqM5wBwKfQAUUUUAFFFFABRRRQAUUUU AFZ+if8AHjJ/
193P/o960Kz9E/48ZP8Ar7uf/R70AaFZ+pf8f2k/9fbf+iJa0Kz9S/4/tJ/6 +2/9ES0AaFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWfD/yMN7/ ANekH/oc1aFZ
8P8AyMN7/wBekH/oc1AB4g/5F7U/+vSX/wBANaFZ/iD/AJF7U/8Ar0l/9ANa FABRRRQAUUUU
AFFFFABRRRQAUUUUAFZ+if8AHjJ/193P/o960Kz9E/48ZP8Ar7uf/R70AaFF FFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGfrf/ AB4x/wDX3bf+
j0qe6sLO8Km7tIJyv3TLGGx9M1Brf/HjH/1923/o9K0KAIpLaCVUWSCN1jOU DICFOMZHpxTo
oo4IlihjWONBhUQYAHsKHkjRlV3VS5woJxuPoKfQAUUUUAFFFFABRRRQAUUU UAFFFFABWfon
/HjJ/wBfdz/6PetCs/RP+PGT/r7uf/R70AaFZ+pf8f2k/wDX23/oiWtCqeo2 k1ybZ7eaOGW3
l8xTJGXU/Iy4IDD+969qALlFZ/k6x/z/AFj/AOAb/wDx2jydY/5/rH/wDf8A +O0AaFFZ/k6x
/wA/1j/4Bv8A/HaPJ1j/AJ/rH/wDf/47QBoUVn+TrH/P9Y/+Ab//AB2jydY/ 5/rH/wAA3/8A
jtAGhRWf5Osf8/1j/wCAb/8Ax2jydY/5/rH/AMA3/wDjtAGhRWf5Osf8/wBY /wDgG/8A8do8
nWP+f6x/8A3/APjtAGhRWf5Osf8AP9Y/+Ab/APx2jydY/wCf6x/8A3/+O0Aa FFZ/k6x/z/WP
/gG//wAdo8nWP+f6x/8AAN//AI7QBoUVn+TrH/P9Y/8AgG//AMdo8nWP+f6x /wDAN/8A47QB
oUVhWd1q11eXduLqyXyGAVzZviQdCR+97MGH4e9XfJ1j/n+sf/AN/wD47QBo UVn+TrH/AD/W
P/gG/wD8do8nWP8An+sf/AN//jtAGhWfD/yMN7/16Qf+hzUeTrH/AD/WP/gG /wD8dp1lZ3MV
7PdXdxFM8saRgRQmMKFLnuzZ+/8ApQA3xB/yL2p/9ekv/oBrQpskaSxtHIiu jgqysMhgeoIq
j/YWj/8AQKsf/AdP8KAL9LWDquhaZJDHaQadaRSXDbfMjgUMijliDjjgYz6k VLp2laTdWMUr
6Tp4kI2yAQIQHHDDp2IIoA2aKz/7C0f/AKBVj/4Dp/hR/YWj/wDQKsf/AAHT /CgDQorP/sLR
/wDoFWP/AIDp/hR/YWj/APQKsf8AwHT/AAoA0KKz/wCwtH/6BVj/AOA6f4UU AaFFFFABWfon
/HjJ/wBfdz/6PetCs/RP+PGT/r7uf/R70AaFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGZ4hlSDTBLKwSNLm3ZmPQATISap/ 8JJZ3ZIt9Qsr
aL/ntNOm49Pupn68tj6Gr2uDNjGD0+1W3/o5KebAwMXsJPIJ5MRGYm/4D2/D H40AVLbUNCt3
8z+1rOWY8GWS5RmP68D2GBVn+3dH/wCgrY/+BCf41JDeP5iw3cDQytwpHzI/ 0b+hwauUAZ/9
u6P/ANBWx/8AAhP8aP7d0f8A6Ctj/wCBCf41oUUAZ/8Abuj/APQVsf8AwIT/ ABo/t3R/+grY
/wDgQn+NaFV476zmuGgiuoHmX70ayAsPqOtAFf8At3R/+grY/wDgQn+NH9u6 P/0FbH/wIT/G
rsUsc8SywyLJG4yrocgj2NPoAz/7d0f/AKCtj/4EJ/jR/buj/wDQVsf/AAIT /GtCigDP/t3R
/wDoK2P/AIEJ/jR/buj/APQVsf8AwIT/ABrQooAz/wC3dH/6Ctj/AOBCf403 QJEl01pI3V0e
5uGVlOQwMz4INaVFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FQ3c4tbSWdgS
I0LYHU+1TVRvz5tzaWgwfMfzXGediYP/AKEUH40AQCD7AdPkY5YZhlbOAS/O ceu8D/vo1q1X
voGubKWJDhyuUPow5U/gQKdazi5tYpwCBIgbB7Z7UATUUUUAFFFFABRRUN1O ttbSzuCRGpbA
6n2FAFeAfaNVnnIBWBfIQ47nDOQfT7o+qmltT5N/dW/ZsTp6c8MPzGf+BVJp 8DW1lHHIQZcb
pCBgFycsfzJqK+xDc2t10Cv5Ln/ZfA/9CCUAXqKKKACiiigAooooAKKKKACs /RP+PGT/AK+7
n/0e9aFZ+if8eMn/AF93P/o96ANCiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigDP1v/jxj/wCvu2/9HpWhWfrf/HjH/wBfdt/6 PStCgDG1W5u4
L3LzXFvZiMFZbeAS/Pk5DjBIXGOmO/NZ82sXg8F3moxXSvcRyOI5lRcECXaM DpjFbtzYtPN5
kd7dW5ICssbKVYfRgcdeowazZvCtm2lS6bHPdJZtysCuMK2c5BIz17EkUAR2 N5fppml39zeG
f7UYllj8pQPn4BGBkHJGecdeBTbnVrl5L14JLpXt5GSGCOzeRJSv95gh6nPQ jFWdE0ZrfTtP
W8kmL26KRAzqUjfGCeBk9T1JA7Vbn0mKZ5cTzxRTnM0MbALJxjnjI464IzQB h6hd393HqX+k
zQwRz28flKqghHEe8McZ/iPQgiuhuLG1e2SJkEccJDJsO3YRyMEdKaml2qm8 3JvS8I8yNsbc
BQuAPTApi6UpKrNd3M8KEFYZGUqCOmSAC34k0AYOjXNw2kWFtDcTx7bNHAtY 1d8nP3i6lQOm
Ocnn0q9HqN9eaHp14omQTJuuHtYw7rxxtUg8Ej0Jq1baBBaJGltdXUSrEsLh WX94q5xn5eDy
eVxU0Wkpb2MFpa3VzAsAIR0YE49CCCD+IoAxU1S5xLJNqcy28ZAiuUtAUPHP nDGVIPX7g78d
uoUhlDAggjII6GstdCRY5Y1vr0JOSZxvU+aSMEk7crx/d21qIixoqIMKoAA9 BQA6iiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqjakz6jdTnO2PEC ZxjjliPxIH/A
avVQh0+WBCkV9MqlmbGxDySSe3qaAL9UNOxDPd2nA8uTzEGcna+Tn2+bePwq G0F3PcX0bX8g
FvOI1xGnIMaNzx6satQWbx3RuJLmSVimzDKoGM57Ae/5mgC3RRRQAUUUUAFZ uqXES3FpbzSK
iM/muW4BCYIGf94r+ANaVFAFM6pYAZN3D/30KhvLywurSWA3kS+YpAYMOD2P 4U7xB/yL2p/9
ekv/AKAa0KAK9jcfarKGfGDIgJHoe4/OrFFFABRRRQAUUUUAFFFFABWfon/H jJ/193P/AKPe
tCs/RP8Ajxk/6+7n/wBHvQBoUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAZ+t/wDHjH/1923/AKPStCs/W/8Ajxj/AOvu2/8A R6VoUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUU
UAFFFFAGfpv/AB/at/19r/6IirQrP03/AI/tW/6+1/8AREVaFABRRRQAUUUU AFFFFAGf4g/5
F7U/+vSX/wBANaFZ/iD/AJF7U/8Ar0l/9ANaFABRRRQAUUUUAFFFFABRRRQA Vn6J/wAeMn/X
3c/+j3rQrP0T/jxk/wCvu5/9HvQBoUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAZ+t/8AHjH/ANfdt/6PStCs/W/+PGP/AK+7 b/0elaFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAF
FFFABRRRQBn6b/x/at/19r/6IirQrP03/j+1b/r7X/0RFWhQAUUUUAFFFFAB RRRQBn+IP+Re
1P8A69Jf/QDWhWf4g/5F7U/+vSX/ANANaFABRRRQAUUUUAFFFFABRRRQAVn6 J/x4yf8AX3c/
+j3rQrP0T/jxk/6+7n/0e9AGhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQBn63/x4x/8AX3bf+j0rQrP1v/jxj/6+7b/0elaF ABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQBn6b/x/at/19r/AOiIq0Kz9N/4/tW/6+1/9ERVoUAFFFFABRRRQAUUUUAZ /iD/AJF7U/8A
r0l/9ANaFZ/iD/kXtT/69Jf/AEA1oUAFFFFABRRRQAUUUUAFFFFABWfon/Hj J/193P8A6Pet
Cs/RP+PGT/r7uf8A0e9AGhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRR
RQAUUUUAFFFFABRRRQBn63/x4x/9fdt/6PStCs/W/wDjxj/6+7b/ANHpWhQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUU
AZ+m/wDH9q3/AF9r/wCiIq0Kz9N/4/tW/wCvtf8A0RFWhQAUUUUAFFFFABRR RQBn+IP+Re1P
/r0l/wDQDWhWf4g/5F7U/wDr0l/9ANaFABRRRQAUUUUAFFFFABRRRQAVn6J/ x4yf9fdz/wCj
3rQrP0T/AI8ZP+vu5/8AR70AaFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFAGfrf8Ax4x/9fdt/wCj0rQrP1v/AI8Y/wDr7tv/ AEelaFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFF
ZuroZZtNgMkqJLclX8qVoywEUhxlSD1AP4U7+xrX/nrff+B8/wD8XQBoUVn/ ANjWv/PW+/8A
A+f/AOLo/sa1/wCet9/4Hz//ABdABpv/AB/at/19r/6IirQrnWtbKCaUIl4C X+ZhqEw3EcZP
zegA/Cjy7X0vv/BjP/8AFVXIyeeJ0VFc75dr6X3/AIMZ/wD4qjy7X0vv/BjP /wDFUcjFzxOi
ornfLtfS+/8ABjP/APFUeXa+l9/4MZ//AIqjkYc8ToqK53y7X0vv/BjP/wDF UeXa+l9/4MZ/
/iqORhzxNLxB/wAi9qf/AF6S/wDoBrQrEt9Nsr+OWOQXhQjaytfzMGBzkEbq t/2Na/8APW+/
8D5//i6TVik76o0KKz/7Gtf+et9/4Hz/APxdV5rNLLUNNaCa7/eXDI4kupZF YeVIcEMxHUA/
hSGbFFFFABRRRQAUUUUAFZ+if8eMn/X3c/8Ao960Kz9E/wCPGT/r7uf/AEe9 AGhRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB n63/AMeMf/X3
bf8Ao9K0Kz9b/wCPGP8A6+7b/wBHpWhQAUU1mVFLOwVVGSScAChWV1DIwZWG QQcgigB1FFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAGfqX/H9p
P/X23/oiWtCs/Uv+P7Sf+vtv/REtaFABRRRQBx9zEl7rN8lygkigYKsbcqSe SSOh7flVK5mk
0y8WCzRSk2wrGxO1DuCnHoMHp7VqX9q51Cae2mEUpJVtyblYAnGRkHI5796z dQspvKSQSPLc
PPFl1ThFDDoOwHJ5z9a36HP1H3GpSWAkS78p3CqUdcop3Nt5yTjB756VA+tN GsqJPaXUqx+Y
phPH3gCCMnHUc5q4+nGcO11NvmYKFeNdoTacjAJPf3olsJ7iGRbm7DMwCjZG VUDIOduTk8dc
0ahoRT3l1BI0TzWyuqbx+7Zi49AobIxxz3z0qsl3PczLdAxiJ7EyGFlJH0zn 19ulaMlnKbiW
SGcRrMAJAU3HgY+U54/I1BHpTRQxRpOMJbmBiY87h2I54P50ahdDo7qeZore 1EMbCBZXZkJV
c9AACPQ96jj1G5uLmG3iSONmWUOXBbayMBxyMjmp/sEkbRyW06pKsQiYvHuV gOhxkHPXv3pL
fTFt7mKZZCSiyBsjlmdgSfbkdKNRaGv4YuJLiC4MyqJI5DG23oSpIyPrW5WN 4dtvsy3Y37vM
lMnTGMknFbNZS3N4bBWfqX/H9pP/AF9t/wCiJa0Kz9S/4/tJ/wCvtv8A0RLU lGhRRWVrAEl5
p1vPzayyssqkfK52HarexPbvgUAatFcjeJbpfS2isI9Pju7cYVtqo5DbkHoM beB6n1ooA66i
iigArP0T/jxk/wCvu5/9HvWhWfon/HjJ/wBfdz/6PegDQooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAz9b/48Y/8Ar7tv/R6V fqhrf/HjH/19
23/o9K0KAOejkvdQ0OTUWvCqSxSN9n8pdgTDYGfvbsY5zj2p/wBolW3062iu JYg9sGIt4t8m
cDB5Uqq9eT1OMVb/ALFiCPEl1dJbPuPkI4CgtknBxu7njOPantpSboWhuJ4H iiEO+Mrl0HY5
B/MYNAGRb6nqNzYwSym4ihV5o55LeFXlDK+FyuGHTOcA8j0ottUneQS3Gpyx xebtjkFqDbyK
D/EcZVuo5ZcEdO1acOix2sIjtLy7gw7tuVw2dxychgQee5GfekTQolRovtd0 bd2LyQEqVkYn
JJO3dyecAgUAatFFFABRRRQAUUUUAFFFFABRRRQAVUu75LaVIViknnkBZYot u4qMZPzEADkd
TVus27inh1OO/gga4XyTC8SFQ33gQRuIHrnmgB9tq9tc3CQKJFkZXbDrjaUI DA+4yPwqrJ4l
sY9Ptr0rMY7mfyEUJ827JHIz04/lVO40m/MD3MKKt5NdtIUDD5I3Tyzz3IAD fUd6h1DQ72XU
WMUQa1imilgG5eCWTeeemAh+u40AbI1mBDci5imtnt0EjJIoJZSSARtJzkgj HXPalGrwJ5ou
45bMxxmXE235kHVhtJ9Rx156VS1nSbjULu4KLhGt4wjb9uXSTftyOR2596gk 0WS980rbTWzC
FkRru6eZixIPHzsAvy89zx0oAsz606ajbK8M9tD5M0rrKq/OqgEEYJx344Pq Knhi1K5tkuvt
xhmdN6wCJTEueQG43H3IYVBPBd6lqVsbixaC2SGaOUtIpJLADjBPHB9/YVPD LqVtbJamxM0q
LtWcSKImx0Lc7h7gKaAI7XxClyAkdncyTKivKkYUhMkg8kjOCpGOvoDVg6vC 5jFrFNds8YlI
hC5RD0J3Eeh468dKytNWfS9Vu7WC2e7KwQlmVlU7yZCSdxHBOemT7Gkh0Sax dXaK5ug8SKwt
bpoSjgsTn51BXn6j0oA1P7bt2eJIIppzLD542AABM4JO4jGPTrSLrcbGL/RL oLcAm3ZgoEx2
lsD5sgkD+LFVbHS7q1kHlokJ+xMgYOXVZC5bqxLHr1quml3D3Wly/YJI2tpi 08004d2ypBKn
cTgk+x6cUAWdF1eS+i0w3QmjnuYXk2gJ5b4289SR97jp3z2q2mswOyN5My20 j7EuWAEbNnAH
XPJ6HGD61naXpt3FJpaTWzxx2dvNA7F1Oc7NpGD0OD78cgU5LC9OlW2jtb7U haMG5LKUKI4I
wM7txAHbA9aAGX+u2zS6ZcmG4W2S9aMylARv2SJtABLE5PYYrU/tm1/55X3/ AIAT/wDxFc/q
Gm3Y0nSbTyv3/wDaxk27h93dK+c5x93muwoAz/7Ztf8Anlff+AE//wARR/bN r/zyvv8AwAn/
APiK0KKAMdrzTXYs1tfEk5P+hXH/AMTSfatM/wCfW+/8Arj/AOJrZop3YuVd jG+1aZ/z633/
AIBXH/xNH2rTP+fW+/8AAK4/+JrZoouw5V2Mb7Vpn/Prff8AgFcf/E0fatM/ 59b7/wAArj/4
mtmii7DlXYxvtWmf8+t9/wCAVx/8TR9q0z/n1vv/AACuP/ia2aKLsOVdjKh1 Gwgz5UF8u7r/
AKDOf/ZKl/tm1/55X3/gBP8A/EVoUUhmf/bNr/zyvv8AwAn/APiKq3OoQ3Wp aVHGlypFyxzL
bSRj/Uy92UD8K2qxfEsN1cLp8Vlc/Zrhrk7Jdu7afJl7fp+NAFvVNYsNIh8y +uEj4+VerN9B
1NYFl440bVZZLS8hMETnCm4AZHH+12H8veuA13TNT0+9b+1FkaRzkTM24Se4 aswcnAoA9wn0
22uba2igWKO3ilWUIiDawHbA4wc0Vy3gzRNdgtt1xfz2VqwykChWY++GBC/l k0UAdzRRRQAV
n6J/x4yf9fdz/wCj3rQrP0T/AI8ZP+vu5/8AR70AaFFFFABRRRQAUUUUAFFF FABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGfrf8Ax4x/9fdt/wCj0qDX vEVjoUG64ffO
wykKn5m/wHvT/EaSSaTshl8qVri3CSYzsPnJg474ryvxHpGqabfu2pb5TIci 4zkSfj/Q0AdT
pPxF33bJqluscDN8skWSUHuO/wBf0ruba5gu4FntpUlibo6HINeC13fgvw/r kTfaftcunWzj
lcAs/wDwFgQPqRQB6LRWf/Z11/0Gb7/viD/43R/Z11/0Gb7/AL4g/wDjdAGh RWf/AGddf9Bm
+/74g/8AjdH9nXX/AEGb7/viD/43QBoUVn/2ddf9Bm+/74g/+N0f2ddf9Bm+ /wC+IP8A43QB
oUVn/wBnXX/QZvv++IP/AI3R/Z11/wBBm+/74g/+N0AaFFZ/9nXX/QZvv++I P/jdH9nXX/QZ
vv8AviD/AON0AaFFZ/8AZ11/0Gb7/viD/wCN0f2ddf8AQZvv++IP/jdAGhRW f/Z11/0Gb7/v
iD/43R/Z11/0Gb7/AL4g/wDjdAGhRWf/AGddf9Bm+/74g/8AjdH9nXX/AEGb 7/viD/43QBoU
Vn/2ddf9Bm+/74g/+N0f2ddf9Bm+/wC+IP8A43QBoUVn/wBnXX/QZvv++IP/ AI3R/Z11/wBB
m+/74g/+N0AXVijWVpVjUSOAGcDlgOgJ9sn86fWf/Z11/wBBm+/74g/+N0f2 ddf9Bm+/74g/
+N0AaFFZ/wDZ11/0Gb7/AL4g/wDjdH9nXX/QZvv++IP/AI3QBoUVn/2ddf8A QZvv++IP/jdH
9nXX/QZvv++IP/jdABqX/H9pP/X23/oiWtCsW5tZoNS0ppNQubkG5YbJVjAH 7mXn5UB/Wtqg
AooooAKKKKACiiigAooooAKKKKACiiigArP1L/j+0n/r7b/0RLWhWfqX/H9p P/X23/oiWgCz
d2lve27W91Ck0TdVcZFY+leENK0q9e6hjaSQnKeadwj+n+J5rfooAKKKKACi iigArP0T/jxk
/wCvu5/9HvWhWfon/HjJ/wBfdz/6PegDQooooAKKKKACiiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAKKKKACiiigAooooAz9b/48Y/8Ar7tv/R6VaurWC8t3t7qJ ZYnGGVhkGqmu
sF09GYgAXVsST2/fJVm1vrO83fZLqCfb97ypA2PrigDI0nwhpOlXTXMUTSyF soZTu8v6f49a
36KYJYzMYRIvmhQxTPzAHocenBoAfRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUVDdX
EVpay3M7bYokLucZwAMmgCaio7eUzQJI0TxFhnY+Nw+uCR+tSUAFFV5buOK8 gtWDF5wxUgcD
bjOfzqxQAUUUUAFFZ66vC108HlSjZP8AZ2kIG0PtDAdc87vTsfbOhQAUVWi1 CymuGt4ru3km
X70ayKWH4ZzVmgDP1L/j+0n/AK+2/wDREtaFZmoSI+oaYiOrMl4Q4ByVPkSH B9OCDWnQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAVn6l/x/aT/19t/6IlrQrP1L/j+0n/r7 b/0RLQBoUUUU
AFFFFABRRRQAVn6J/wAeMn/X3c/+j3rQrP0T/jxk/wCvu5/9HvQBoUUUUAFF FFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAYXjVQ3ha7V vulogf8Av4tO
u0WDxTpPkoE3wTRsFGPkG0gfQGpvEtul3o5tpc+XNPBG2Dg4MyA1JbaQsFx9 oku7m4nERiSS
YqTGp9MKBngcnJ4oA0K53SLYWniu/j8x5W+yxFpJDlnOW5NbscLoyFrmVwqb SrBcMf7xwBz9
MDnpUUdhFHqc1+GfzZo1jYEjaAucY496ALdFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
WZ4iG7Q7pWwImQrK2eVQ/eI9SB2rTqvf2qX1jcWkhKpPG0ZI6gEYzQBkLBa3 eo6mNSWN/s+z
yd5/1cewEOvod275h6e1YsPnXNpe3VyrPdRafbyK7L86Md+XA7NgZzXXCwim ih+3xW91NFjE
hhHB9QDnH51YEUayvKI0EjgBmCjLAdAT3xk/nQBy+qQwWN/btpCIlwbO5kRY /wCM7V2sfU57
96jiikiSxlgisoBMjb5IZ3le5Xyz9792M84OSePxrpobCzt33wWkET5J3JGF OT1PA70sVjaQ
ySSRWsCPLxIyxgF/qe9AHKWVoGj0dEsrWdbixEkiXDFFmkAXljtbcQCcA+p9 KntENxd2tpfe
RJYmafZEJGkjLjbtQlgN2P3mBgjj2rpJLK0mtltpbaF4FACxNGCoA6YHTinS WltLb/Z5LeJ4
OnlsgK/l0oA5a38qKHUvsZDlNWQQruyC+EG3PYdR7DoOMV0188kenXEicSLE zDB74NQz6XG8
kAiEUEMcomdEiALsuNvIPGMeh6DpV4gEEEAg9QaAOU8uODQfDEkSqHE9vgjr 86/P+eTmusrJ
ttAgt3tv9JuZYbVi0EEjLsQ4I7AE4BOMk4q+IJAqA3cxKvuJIT5h/dPy9Ppz x1oA5+PQYdL1
yxuo3DGe6b5dgAT91KcL6DG0Y/2RXT1n6l/x/aT/ANfbf+iJa0KACiiigAoo ooAKKKKACiii
gAooooAKKKKACs/Uv+P7Sf8Ar7b/ANES1oVn6l/x/aT/ANfbf+iJaANCiiig AooooAKKKKAC
s/RP+PGT/r7uf/R71oVn6J/x4yf9fdz/AOj3oA0KKKKACiiigAooooAKKKKA CiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKAM/W/+PGP/r7tv/R6VoVn63/x 4x/9fdt/6PSt
CgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKAM/Uv+P7Sf8Ar7b/ANES1oVn6l/x/aT/ANfbf+iJa0KACiiigAooooAK KKKACiiigAoo
ooAKKKKACs/Uv+P7Sf8Ar7b/ANES1oVn6l/x/aT/ANfbf+iJaANCiiigAooo oAKKKKACs/RP
+PGT/r7uf/R71oVn6J/x4yf9fdz/AOj3oA0KKKKACiiigAooooAKKKKACiii gAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKAM/W/+PGP/r7tv/R6VoVn63/x4x/9 fdt/6PStCgAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
AM/Uv+P7Sf8Ar7b/ANES1oVn6l/x/aT/ANfbf+iJa0KACiiigAooooAKKKKA CiiigAooooAK
KKKACs/Uv+P7Sf8Ar7b/ANES1oVl61MtvcaXK4kKrdnIjjZ2/wBTL0Cgk0Aa lFZ/9s2v/PK+
/wDACf8A+Io/tm1/55X3/gBP/wDEUAaFFZ/9s2v/ADyvv/ACf/4iigDQoooo AKz9E/48ZP8A
r7uf/R71oVi6ffx2cM0E8N4HFzO3y2crAgyuQQQpByCDQBtUVn/2za/88r7/ AMAJ/wD4ij+2
bX/nlff+AE//AMRQBoUVn/2za/8APK+/8AJ//iKP7Ztf+eV9/wCAE/8A8RQB oUVn/wBs2v8A
zyvv/ACf/wCIo/tm1/55X3/gBP8A/EUAaFFZ/wDbNr/zyvv/AAAn/wDiKP7Z tf8Anlff+AE/
/wARQBoUVn/2za/88r7/AMAJ/wD4ij+2bX/nlff+AE//AMRQBoUVn/2za/8A PK+/8AJ//iKP
7Ztf+eV9/wCAE/8A8RQBoUVn/wBs2v8Azyvv/ACf/wCIo/tm1/55X3/gBP8A /EUAaFFZ/wDb
Nr/zyvv/AAAn/wDiKP7Ztf8Anlff+AE//wARQBoUVn/2za/88r7/AMAJ/wD4 ij+2bX/nlff+
AE//AMRQBoUVn/2za/8APK+/8AJ//iKP7Ztf+eV9/wCAE/8A8RQBoUVn/wBs 2v8Azyvv/ACf
/wCIo/tm1/55X3/gBP8A/EUAaFFZ/wDbNr/zyvv/AAAn/wDiKP7Ztf8Anlff +AE//wARQBoU
Vn/2za/88r7/AMAJ/wD4ij+2bX/nlff+AE//AMRQAa3/AMeMf/X3bf8Ao9K0 KxdQv47yGGCC
G8Lm5gb5rOVQAJUJJJUAYAJraoAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigDP1L/j+0n/r7b/0RLWhWfqX/H9pP/X2 3/oiWtCgAooo
oAKKKKACiiigAooooAKKKKACiiigArP1L/j+0n/r7b/0RLWhWfqX/H9pP/X2 3/oiWgDQoooo
AKKwpvEEkcdxdLZBrC3mMMk3nfPwdpYLjBAPvRQBu0UUUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBn6l /wAf2k/9fbf+
iJa0Kz9S/wCP7Sf+vtv/AERLWhQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA Vn6l/wAf2k/9
fbf+iJa0Kz9S/wCP7Sf+vtv/AERLQBoUUUUAcTNNFD4a1HRmkBv2uJI44f43 3SZDAdSMHOaK
7aigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigDP1L/j+0n/r7b/0RLWhWfqX/AB/aT/19t/6IlrQo AKKKKACiiigA
ooooAKKKKACiiigAooooAKz9S/4/tJ/6+2/9ES1oVn6l/wAf2k/9fbf+iJaA NCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAp6jaTXJtnt5o4ZbeXzFMkZdT8jLggMP73r2qPydY/wCf 6x/8A3/+O1oU
UAZ/k6x/z/WP/gG//wAdo8nWP+f6x/8AAN//AI7WhRQBn+TrH/P9Y/8AgG// AMdo8nWP+f6x
/wDAN/8A47WhRQBn+TrH/P8AWP8A4Bv/APHaPJ1j/n+sf/AN/wD47WhRQBn+ TrH/AD/WP/gG
/wD8do8nWP8An+sf/AN//jtaFFAGf5Osf8/1j/4Bv/8AHaPJ1j/n+sf/AADf /wCO1oUUAZ/k
6x/z/WP/AIBv/wDHaPJ1j/n+sf8AwDf/AOO1oUUAZ/k6x/z/AFj/AOAb/wDx 2miyv5bu1lu7
y2dLeQyBYrZkLEoy9S5/venatKigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==
--------------000400090008050004080200--

--------------090203090505070000050200--
Re: Global Operations [message #48401 is a reply to message #48278] Tue, 15 January 2008 14:46 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: cdamus.ca.ibm.com

Hi, Alex,

Like Ed, I'm not sure that an operation needn't have an owner. However, you
can get this effect by defining your additional operation on the OclAny
type instead of null. Access it via

environment.getOclStandardLibrary().getOclAny()

HTH,

Christian


Alexander Igdalov wrote:

> Hi Christian,
>
> EMOF says that Operations may have no owners, i.e. one can define a
> global operation. Is it possible to define a global operation in MDT OCL?
>
> Regards,
> Alex.
>
> P.S. In my code attempts to use Environment.defineOperation(...) with
> 'null' for the owner cause NPE later.
Re: Global Operations [message #48461 is a reply to message #48311] Tue, 15 January 2008 15:14 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: Alexander.Igdalov.borland.com

Ed,

Then on the diagram you attached, what does the notation "0..1" near
"class" mean? I believe it says that the class for an operation is
optional. Or do you think it's a typo?

Regards,
Alex.

Ed Merks wrote:
> Alex,
>
> Where does it say that? The diagram seems to indicate than an operation
> is owned by a class.
>
>
> There's nothing that allows a package to directly contain an operation,
> so I'm not sure what a free floating operation without a container to
> mean...
>
>
> Alexander Igdalov wrote:
>> Hi Christian,
>>
>> EMOF says that Operations may have no owners, i.e. one can define a
>> global operation. Is it possible to define a global operation in MDT OCL?
>>
>> Regards,
>> Alex.
>>
>> P.S. In my code attempts to use Environment.defineOperation(...) with
>> 'null' for the owner cause NPE later.
>
Re: Global Operations [message #48491 is a reply to message #48401] Tue, 15 January 2008 15:24 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: Alexander.Igdalov.borland.com

Hi Christian,

Definitions on OclAny would make it possible to invoke the operation on
anything except collections. However, I want to call the operation
without any source, i.e. to write "myoperation()" and not
"something.myoperation()".

Best,
Alex.

Christian W. Damus wrote:
> Hi, Alex,
>
> Like Ed, I'm not sure that an operation needn't have an owner. However, you
> can get this effect by defining your additional operation on the OclAny
> type instead of null. Access it via
>
> environment.getOclStandardLibrary().getOclAny()
>
> HTH,
>
> Christian
>
>
> Alexander Igdalov wrote:
>
>> Hi Christian,
>>
>> EMOF says that Operations may have no owners, i.e. one can define a
>> global operation. Is it possible to define a global operation in MDT OCL?
>>
>> Regards,
>> Alex.
>>
>> P.S. In my code attempts to use Environment.defineOperation(...) with
>> 'null' for the owner cause NPE later.
>
Re: Global Operations [message #48548 is a reply to message #48461] Tue, 15 January 2008 15:40 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: merks.ca.ibm.com

Alexander,

The class for an attribute is optional too, but that doesn't directly
state that it has meaning to have a free floating one nor what that
meaning is. It might just signify that the operation could also be
contained by something else too...


Alexander Igdalov wrote:
> Ed,
>
> Then on the diagram you attached, what does the notation "0..1" near
> "class" mean? I believe it says that the class for an operation is
> optional. Or do you think it's a typo?
>
> Regards,
> Alex.
>
> Ed Merks wrote:
>> Alex,
>>
>> Where does it say that? The diagram seems to indicate than an
>> operation is owned by a class.
>>
>>
>> There's nothing that allows a package to directly contain an
>> operation, so I'm not sure what a free floating operation without a
>> container to mean...
>>
>>
>> Alexander Igdalov wrote:
>>> Hi Christian,
>>>
>>> EMOF says that Operations may have no owners, i.e. one can define a
>>> global operation. Is it possible to define a global operation in MDT
>>> OCL?
>>>
>>> Regards,
>>> Alex.
>>>
>>> P.S. In my code attempts to use Environment.defineOperation(...)
>>> with 'null' for the owner cause NPE later.
>>
Re: Global Operations [message #48577 is a reply to message #48491] Tue, 15 January 2008 16:43 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: cdamus.ca.ibm.com

Hi, Alex,

In that case, you might trying customizing your environment as described in
the String::regexMatch() example in the "Customizing the Environment" topic
in the OCL Developer Guide. Just let your environment's implementation of
lookupOperation(...) always return your custom operation, regardless of the
context classifier.

Cheers,

Christian


Alexander Igdalov wrote:

> Hi Christian,
>
> Definitions on OclAny would make it possible to invoke the operation on
> anything except collections. However, I want to call the operation
> without any source, i.e. to write "myoperation()" and not
> "something.myoperation()".
>
> Best,
> Alex.
>
> Christian W. Damus wrote:
>> Hi, Alex,
>>
>> Like Ed, I'm not sure that an operation needn't have an owner. However,
>> you can get this effect by defining your additional operation on the
>> OclAny
>> type instead of null. Access it via
>>
>> environment.getOclStandardLibrary().getOclAny()
>>
>> HTH,
>>
>> Christian
>>
>>
>> Alexander Igdalov wrote:
>>
>>> Hi Christian,
>>>
>>> EMOF says that Operations may have no owners, i.e. one can define a
>>> global operation. Is it possible to define a global operation in MDT
>>> OCL?
>>>
>>> Regards,
>>> Alex.
>>>
>>> P.S. In my code attempts to use Environment.defineOperation(...) with
>>> 'null' for the owner cause NPE later.
>>
Re: Global Operations [message #48637 is a reply to message #48577] Wed, 16 January 2008 13:02 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: Alexander.Igdalov.borland.com

Hi Christian,

Thanks for your advice. I'll patch the code in lookupOperation().

But back to the question of classless operations. Thanks to Ed's note I
realised that MOF doesn't state that there can be Operations without
owners. However, it says that an Operation needn't be owned by a Class.
Therefore, to my mind, OCL could provide some way to define an Operation
without a Class as its owner. What do you think?

And one more question about operation definition. One can set the
Operation type to 'null'. By doing this the user wishes to express that
the Operation doesn't return anything (like 'void' in Java). However,
the OCL implementation substitutes 'null' to OclVoid. It leads to a
range of odd looking constructions, e.g. all structural features
available for OclVoid are available for the Operation result. And you
can assign the Operation result to any objects.

Sample:

Operation testtest() defined for OclAny as owner and with 'null' (or
OclVoid) as result makes the following constructions work:

1.testtest().oclIsInvalid() -- strange
var a := 1.testtest() -- this is a variable initialization expression in
operational QVT (In OCL 'let'-expression can be used).

This looks strange from the user's viewpoint. But, perhaps, this
behaviour is considered to be the correct by the spec. Ideas?

Best Regards,
Alex.

Christian W. Damus wrote:
> Hi, Alex,
>
> In that case, you might trying customizing your environment as described in
> the String::regexMatch() example in the "Customizing the Environment" topic
> in the OCL Developer Guide. Just let your environment's implementation of
> lookupOperation(...) always return your custom operation, regardless of the
> context classifier.
>
> Cheers,
>
> Christian
>
>
> Alexander Igdalov wrote:
>
>> Hi Christian,
>>
>> Definitions on OclAny would make it possible to invoke the operation on
>> anything except collections. However, I want to call the operation
>> without any source, i.e. to write "myoperation()" and not
>> "something.myoperation()".
>>
>> Best,
>> Alex.
>>
>> Christian W. Damus wrote:
>>> Hi, Alex,
>>>
>>> Like Ed, I'm not sure that an operation needn't have an owner. However,
>>> you can get this effect by defining your additional operation on the
>>> OclAny
>>> type instead of null. Access it via
>>>
>>> environment.getOclStandardLibrary().getOclAny()
>>>
>>> HTH,
>>>
>>> Christian
>>>
>>>
>>> Alexander Igdalov wrote:
>>>
>>>> Hi Christian,
>>>>
>>>> EMOF says that Operations may have no owners, i.e. one can define a
>>>> global operation. Is it possible to define a global operation in MDT
>>>> OCL?
>>>>
>>>> Regards,
>>>> Alex.
>>>>
>>>> P.S. In my code attempts to use Environment.defineOperation(...) with
>>>> 'null' for the owner cause NPE later.
>
Re: Global Operations [message #48656 is a reply to message #48637] Wed, 16 January 2008 13:30 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: cdamus.ca.ibm.com

Hi, Alex,

You raise some interesting questions. See comments in-line, below.

Cheers,

Christian


Alexander Igdalov wrote:

> Hi Christian,
>
> Thanks for your advice. I'll patch the code in lookupOperation().
>
> But back to the question of classless operations. Thanks to Ed's note I
> realised that MOF doesn't state that there can be Operations without
> owners. However, it says that an Operation needn't be owned by a Class.
> Therefore, to my mind, OCL could provide some way to define an Operation
> without a Class as its owner. What do you think?

MOF (more specifically, CMOF) allows Operations to be owned by Classes and
DataTypes. I don't think that any other MOF classifiers can own
operations; UML adds more, such as Interface.

However, in EMOF (which Ecore emulates), DataTypes cannot own Operations.
Only Classes can. For this reason, the OCL specification actually
stipulates, in its adaptation of the Abstract Syntax Model for EMOF, that
the Operations defined for DataTypes are actually owned by a "shadow" class
of the same name as the DataType, which OCL understands to be its
operation-holder. The MDT OCL implementations uses this technique
literally in its support for additional operations on EDataTypes (and for
the Standard Library operations, most of which are defined for
specializations of EClassifier no less).


> And one more question about operation definition. One can set the
> Operation type to 'null'. By doing this the user wishes to express that
> the Operation doesn't return anything (like 'void' in Java). However,
> the OCL implementation substitutes 'null' to OclVoid. It leads to a
> range of odd looking constructions, e.g. all structural features
> available for OclVoid are available for the Operation result. And you
> can assign the Operation result to any objects.

The reason for this is that OCL only allows expressions to call "query"
operations (in UML, these are explicitly identified by the isQuery
attribute of the Operation metaclass). A query operation must have some
return result, otherwise it couldn't be a query.

Ecore does not have a means to identify which operations are queries and
which can have side-effects. I'm not sure whether this is because it
wasn't necessary for generating Java code or whether EMOF doesn't have this
notion (I suspect the latter).

As you have observed, OclVoid is defined as conforming to all other types,
which is why null is assignable to any variable. Also, I have found it
strange since the introduction of the Invalid type in the finalization
phase of the 2.0 spec that Invalid also conforms to all other types.
Personally, I don't see how there can be two such types anchoring the
bottom of the lattice structure of OCL types ...

> Sample:
>
> Operation testtest() defined for OclAny as owner and with 'null' (or
> OclVoid) as result makes the following constructions work:
>
> 1.testtest().oclIsInvalid() -- strange
> var a := 1.testtest() -- this is a variable initialization expression in
> operational QVT (In OCL 'let'-expression can be used).

Right. As far as OCL is concerned, it is not valid to invoke testtest(),
but you cannot accurately identify it as a non-query operation. I think
this is the expected result.


> This looks strange from the user's viewpoint. But, perhaps, this
> behaviour is considered to be the correct by the spec. Ideas?

I think it is, yes.


> Best Regards,
> Alex.

-----8<-----
Re: Global Operations [message #48682 is a reply to message #48656] Wed, 16 January 2008 14:22 Go to previous message
Eclipse UserFriend
Originally posted by: Alexander.Igdalov.borland.com

Christian and Ed, thanks for your comments!

All the best,
Alex.
Previous Topic:collection(T2)
Next Topic:[Announce] MDT OCL 1.2.0 I200801162020 is available
Goto Forum:
  


Current Time: Thu Nov 27 00:28:01 GMT 2014

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

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